aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLucas Eckels <eckels@google.com>2012-08-06 15:07:02 -0700
committerLucas Eckels <eckels@google.com>2012-08-08 09:28:48 -0700
commit9bd90e6e25f1e55f50201c87a1b5837de7e5b64a (patch)
treed2061a00d7d0ee884170bc955fceeed2d0edf284
parente6f2b03027b5feb92b30f5d47801ec3fabe9fd95 (diff)
downloadandroid_external_curl-9bd90e6e25f1e55f50201c87a1b5837de7e5b64a.tar.gz
android_external_curl-9bd90e6e25f1e55f50201c87a1b5837de7e5b64a.tar.bz2
android_external_curl-9bd90e6e25f1e55f50201c87a1b5837de7e5b64a.zip
Add Music Manager's curl 7.21.2 source.
Change-Id: I259a43fa52d581524a5ce8ae1711467acb1d9d50
-rw-r--r--.gitignore34
-rw-r--r--Android.mk68
-rw-r--r--CHANGES4482
-rw-r--r--CMake/CMakeConfigurableFile.in2
-rw-r--r--CMake/CheckTypeSize.c.in44
-rw-r--r--CMake/CheckTypeSize.cmake57
-rw-r--r--CMake/CurlCheckCSourceCompiles.cmake75
-rw-r--r--CMake/CurlCheckCSourceRuns.cmake83
-rw-r--r--CMake/CurlTests.c690
-rw-r--r--CMake/FindOpenSSL.cmake19
-rw-r--r--CMake/FindZLIB.cmake8
-rw-r--r--CMake/OtherTests.cmake250
-rw-r--r--CMake/Platforms/WindowsCache.cmake121
-rw-r--r--CMake/Utilities.cmake31
-rw-r--r--CMakeLists.txt854
-rwxr-xr-xMacBuild.sh32
-rwxr-xr-xMacOSX-Framework132
-rw-r--r--Makefile.am153
-rw-r--r--Makefile.in893
-rw-r--r--NOTICE21
-rw-r--r--README.Android14
-rw-r--r--RELEASE-NOTES73
-rw-r--r--ThirdPartyProject.prop9
-rw-r--r--acinclude.m43248
-rw-r--r--aclocal.m4903
-rwxr-xr-xbuildconf411
-rwxr-xr-xcompile142
-rwxr-xr-xconfig.guess1502
-rwxr-xr-xconfig.sub1714
-rwxr-xr-xconfigure37342
-rw-r--r--configure.ac2902
-rw-r--r--curl-config.in167
-rw-r--r--curl-style.el50
-rwxr-xr-xcurl.sln35
-rw-r--r--curl.xcodeproj/project.pbxproj138
-rwxr-xr-xdepcomp530
-rw-r--r--docs/BINDINGS228
-rw-r--r--docs/BUGS81
-rw-r--r--docs/CONTRIBUTE279
-rw-r--r--docs/DISTRO-DILEMMA176
-rw-r--r--docs/FAQ1379
-rw-r--r--docs/FEATURES136
-rw-r--r--docs/HISTORY244
-rw-r--r--docs/INSTALL996
-rw-r--r--docs/INSTALL.devcpp302
-rw-r--r--docs/INTERNALS488
-rw-r--r--docs/KNOWN_BUGS232
-rw-r--r--docs/LICENSE-MIXING126
-rw-r--r--docs/MANUAL971
-rw-r--r--docs/Makefile.am40
-rw-r--r--docs/Makefile.in649
-rw-r--r--docs/README.netware27
-rw-r--r--docs/README.win3226
-rw-r--r--docs/RESOURCES83
-rw-r--r--docs/SSLCERTS116
-rw-r--r--docs/THANKS823
-rw-r--r--docs/TODO561
-rw-r--r--docs/TheArtOfHttpScripting491
-rw-r--r--docs/VERSIONS67
-rw-r--r--docs/curl-config.199
-rw-r--r--docs/curl-config.html90
-rw-r--r--docs/curl-config.pdfbin0 -> 5991 bytes
-rw-r--r--docs/curl.11767
-rw-r--r--docs/curl.html834
-rw-r--r--docs/curl.pdfbin0 -> 82603 bytes
-rw-r--r--docs/examples/10-at-a-time.c184
-rw-r--r--docs/examples/Makefile.am37
-rw-r--r--docs/examples/Makefile.example40
-rw-r--r--docs/examples/Makefile.in820
-rw-r--r--docs/examples/Makefile.inc12
-rw-r--r--docs/examples/Makefile.m32133
-rw-r--r--docs/examples/README76
-rw-r--r--docs/examples/anyauthput.c158
-rw-r--r--docs/examples/cacertinmem.c138
-rw-r--r--docs/examples/certinfo.c62
-rw-r--r--docs/examples/chkspeed.c165
-rw-r--r--docs/examples/cookie_interface.c111
-rw-r--r--docs/examples/curlgtk.c108
-rw-r--r--docs/examples/curlx.c514
-rw-r--r--docs/examples/debug.c128
-rw-r--r--docs/examples/evhiperfifo.c429
-rw-r--r--docs/examples/fileupload.c67
-rw-r--r--docs/examples/fopen.c573
-rw-r--r--docs/examples/ftp-wildcard.c135
-rw-r--r--docs/examples/ftpget.c84
-rw-r--r--docs/examples/ftpgetinfo.c75
-rw-r--r--docs/examples/ftpgetresp.c62
-rw-r--r--docs/examples/ftpupload.c120
-rw-r--r--docs/examples/ftpuploadresume.c161
-rw-r--r--docs/examples/getinfo.c41
-rw-r--r--docs/examples/getinmemory.c99
-rw-r--r--docs/examples/ghiper.c439
-rw-r--r--docs/examples/hiperfifo.c405
-rw-r--r--docs/examples/htmltidy.c117
-rw-r--r--docs/examples/htmltitle.cc301
-rw-r--r--docs/examples/http-post.c34
-rw-r--r--docs/examples/httpcustomheader.c38
-rw-r--r--docs/examples/httpput.c105
-rw-r--r--docs/examples/https.c52
-rw-r--r--docs/examples/makefile.dj39
-rw-r--r--docs/examples/multi-app.c145
-rw-r--r--docs/examples/multi-debugcallback.c193
-rw-r--r--docs/examples/multi-double.c109
-rw-r--r--docs/examples/multi-post.c137
-rw-r--r--docs/examples/multi-single.c104
-rw-r--r--docs/examples/multithread.c81
-rw-r--r--docs/examples/opensslthreadlock.c81
-rw-r--r--docs/examples/persistant.c40
-rw-r--r--docs/examples/post-callback.c116
-rw-r--r--docs/examples/postit2.c86
-rw-r--r--docs/examples/sampleconv.c94
-rw-r--r--docs/examples/sendrecv.c115
-rw-r--r--docs/examples/sepheaders.c75
-rw-r--r--docs/examples/simple.c27
-rw-r--r--docs/examples/simplepost.c36
-rw-r--r--docs/examples/simplessl.c122
-rw-r--r--docs/examples/synctime.c353
-rw-r--r--docs/examples/threaded-ssl.c149
-rw-r--r--docs/index.html20
-rw-r--r--docs/libcurl/ABI69
-rw-r--r--docs/libcurl/Makefile.am83
-rw-r--r--docs/libcurl/Makefile.in539
-rw-r--r--docs/libcurl/curl_easy_cleanup.350
-rw-r--r--docs/libcurl/curl_easy_cleanup.html59
-rw-r--r--docs/libcurl/curl_easy_cleanup.pdfbin0 -> 3895 bytes
-rw-r--r--docs/libcurl/curl_easy_duphandle.333
-rw-r--r--docs/libcurl/curl_easy_duphandle.html59
-rw-r--r--docs/libcurl/curl_easy_duphandle.pdfbin0 -> 4005 bytes
-rw-r--r--docs/libcurl/curl_easy_escape.346
-rw-r--r--docs/libcurl/curl_easy_escape.html58
-rw-r--r--docs/libcurl/curl_easy_escape.pdfbin0 -> 3985 bytes
-rw-r--r--docs/libcurl/curl_easy_getinfo.3287
-rw-r--r--docs/libcurl/curl_easy_getinfo.html173
-rw-r--r--docs/libcurl/curl_easy_getinfo.pdfbin0 -> 16489 bytes
-rw-r--r--docs/libcurl/curl_easy_init.331
-rw-r--r--docs/libcurl/curl_easy_init.html58
-rw-r--r--docs/libcurl/curl_easy_init.pdfbin0 -> 4041 bytes
-rw-r--r--docs/libcurl/curl_easy_pause.365
-rw-r--r--docs/libcurl/curl_easy_pause.html71
-rw-r--r--docs/libcurl/curl_easy_pause.pdfbin0 -> 6260 bytes
-rw-r--r--docs/libcurl/curl_easy_perform.339
-rw-r--r--docs/libcurl/curl_easy_perform.html58
-rw-r--r--docs/libcurl/curl_easy_perform.pdfbin0 -> 4373 bytes
-rw-r--r--docs/libcurl/curl_easy_recv.369
-rw-r--r--docs/libcurl/curl_easy_recv.html62
-rw-r--r--docs/libcurl/curl_easy_recv.pdfbin0 -> 5209 bytes
-rw-r--r--docs/libcurl/curl_easy_reset.323
-rw-r--r--docs/libcurl/curl_easy_reset.html58
-rw-r--r--docs/libcurl/curl_easy_reset.pdfbin0 -> 3659 bytes
-rw-r--r--docs/libcurl/curl_easy_send.364
-rw-r--r--docs/libcurl/curl_easy_send.html61
-rw-r--r--docs/libcurl/curl_easy_send.pdfbin0 -> 4966 bytes
-rw-r--r--docs/libcurl/curl_easy_setopt.32092
-rw-r--r--docs/libcurl/curl_easy_setopt.html797
-rw-r--r--docs/libcurl/curl_easy_setopt.pdfbin0 -> 116001 bytes
-rw-r--r--docs/libcurl/curl_easy_strerror.319
-rw-r--r--docs/libcurl/curl_easy_strerror.html58
-rw-r--r--docs/libcurl/curl_easy_strerror.pdf108
-rw-r--r--docs/libcurl/curl_easy_unescape.351
-rw-r--r--docs/libcurl/curl_easy_unescape.html59
-rw-r--r--docs/libcurl/curl_easy_unescape.pdfbin0 -> 4116 bytes
-rw-r--r--docs/libcurl/curl_escape.330
-rw-r--r--docs/libcurl/curl_escape.html59
-rw-r--r--docs/libcurl/curl_escape.pdfbin0 -> 3991 bytes
-rw-r--r--docs/libcurl/curl_formadd.3216
-rw-r--r--docs/libcurl/curl_formadd.html161
-rw-r--r--docs/libcurl/curl_formadd.pdfbin0 -> 12118 bytes
-rw-r--r--docs/libcurl/curl_formfree.319
-rw-r--r--docs/libcurl/curl_formfree.html55
-rw-r--r--docs/libcurl/curl_formfree.pdfbin0 -> 3391 bytes
-rw-r--r--docs/libcurl/curl_formget.348
-rw-r--r--docs/libcurl/curl_formget.html80
-rw-r--r--docs/libcurl/curl_formget.pdfbin0 -> 4058 bytes
-rw-r--r--docs/libcurl/curl_free.317
-rw-r--r--docs/libcurl/curl_free.html54
-rw-r--r--docs/libcurl/curl_free.pdfbin0 -> 3260 bytes
-rw-r--r--docs/libcurl/curl_getdate.399
-rw-r--r--docs/libcurl/curl_getdate.html93
-rw-r--r--docs/libcurl/curl_getdate.pdfbin0 -> 6912 bytes
-rw-r--r--docs/libcurl/curl_getenv.329
-rw-r--r--docs/libcurl/curl_getenv.html57
-rw-r--r--docs/libcurl/curl_getenv.pdfbin0 -> 4165 bytes
-rw-r--r--docs/libcurl/curl_global_cleanup.331
-rw-r--r--docs/libcurl/curl_global_cleanup.html59
-rw-r--r--docs/libcurl/curl_global_cleanup.pdfbin0 -> 3836 bytes
-rw-r--r--docs/libcurl/curl_global_init.358
-rw-r--r--docs/libcurl/curl_global_init.html65
-rw-r--r--docs/libcurl/curl_global_init.pdfbin0 -> 4721 bytes
-rw-r--r--docs/libcurl/curl_global_init_mem.342
-rw-r--r--docs/libcurl/curl_global_init_mem.html74
-rw-r--r--docs/libcurl/curl_global_init_mem.pdfbin0 -> 4050 bytes
-rw-r--r--docs/libcurl/curl_mprintf.389
-rw-r--r--docs/libcurl/curl_mprintf.html70
-rw-r--r--docs/libcurl/curl_mprintf.pdfbin0 -> 5902 bytes
-rw-r--r--docs/libcurl/curl_multi_add_handle.337
-rw-r--r--docs/libcurl/curl_multi_add_handle.html61
-rw-r--r--docs/libcurl/curl_multi_add_handle.pdfbin0 -> 4074 bytes
-rw-r--r--docs/libcurl/curl_multi_assign.343
-rw-r--r--docs/libcurl/curl_multi_assign.html61
-rw-r--r--docs/libcurl/curl_multi_assign.pdf117
-rw-r--r--docs/libcurl/curl_multi_cleanup.326
-rw-r--r--docs/libcurl/curl_multi_cleanup.html58
-rw-r--r--docs/libcurl/curl_multi_cleanup.pdfbin0 -> 3766 bytes
-rw-r--r--docs/libcurl/curl_multi_fdset.341
-rw-r--r--docs/libcurl/curl_multi_fdset.html64
-rw-r--r--docs/libcurl/curl_multi_fdset.pdfbin0 -> 4472 bytes
-rw-r--r--docs/libcurl/curl_multi_info_read.356
-rw-r--r--docs/libcurl/curl_multi_info_read.html72
-rw-r--r--docs/libcurl/curl_multi_info_read.pdfbin0 -> 4892 bytes
-rw-r--r--docs/libcurl/curl_multi_init.320
-rw-r--r--docs/libcurl/curl_multi_init.html56
-rw-r--r--docs/libcurl/curl_multi_init.pdfbin0 -> 3400 bytes
-rw-r--r--docs/libcurl/curl_multi_perform.353
-rw-r--r--docs/libcurl/curl_multi_perform.html60
-rw-r--r--docs/libcurl/curl_multi_perform.pdfbin0 -> 5412 bytes
-rw-r--r--docs/libcurl/curl_multi_remove_handle.323
-rw-r--r--docs/libcurl/curl_multi_remove_handle.html57
-rw-r--r--docs/libcurl/curl_multi_remove_handle.pdfbin0 -> 3852 bytes
-rw-r--r--docs/libcurl/curl_multi_setopt.383
-rw-r--r--docs/libcurl/curl_multi_setopt.html73
-rw-r--r--docs/libcurl/curl_multi_setopt.pdfbin0 -> 7292 bytes
-rw-r--r--docs/libcurl/curl_multi_socket.3138
-rw-r--r--docs/libcurl/curl_multi_socket.html106
-rw-r--r--docs/libcurl/curl_multi_socket.pdfbin0 -> 9379 bytes
-rw-r--r--docs/libcurl/curl_multi_socket_action.3129
-rw-r--r--docs/libcurl/curl_multi_socket_action.html101
-rw-r--r--docs/libcurl/curl_multi_socket_action.pdfbin0 -> 8732 bytes
-rw-r--r--docs/libcurl/curl_multi_strerror.319
-rw-r--r--docs/libcurl/curl_multi_strerror.html58
-rw-r--r--docs/libcurl/curl_multi_strerror.pdfbin0 -> 3410 bytes
-rw-r--r--docs/libcurl/curl_multi_timeout.343
-rw-r--r--docs/libcurl/curl_multi_timeout.html62
-rw-r--r--docs/libcurl/curl_multi_timeout.pdfbin0 -> 4586 bytes
-rw-r--r--docs/libcurl/curl_share_cleanup.320
-rw-r--r--docs/libcurl/curl_share_cleanup.html56
-rw-r--r--docs/libcurl/curl_share_cleanup.pdfbin0 -> 3604 bytes
-rw-r--r--docs/libcurl/curl_share_init.324
-rw-r--r--docs/libcurl/curl_share_init.html57
-rw-r--r--docs/libcurl/curl_share_init.pdfbin0 -> 3796 bytes
-rw-r--r--docs/libcurl/curl_share_setopt.360
-rw-r--r--docs/libcurl/curl_share_setopt.html79
-rw-r--r--docs/libcurl/curl_share_setopt.pdfbin0 -> 4687 bytes
-rw-r--r--docs/libcurl/curl_share_strerror.319
-rw-r--r--docs/libcurl/curl_share_strerror.html58
-rw-r--r--docs/libcurl/curl_share_strerror.pdfbin0 -> 3410 bytes
-rw-r--r--docs/libcurl/curl_slist_append.338
-rw-r--r--docs/libcurl/curl_slist_append.html66
-rw-r--r--docs/libcurl/curl_slist_append.pdfbin0 -> 3794 bytes
-rw-r--r--docs/libcurl/curl_slist_free_all.319
-rw-r--r--docs/libcurl/curl_slist_free_all.html56
-rw-r--r--docs/libcurl/curl_slist_free_all.pdf107
-rw-r--r--docs/libcurl/curl_strequal.331
-rw-r--r--docs/libcurl/curl_strequal.html58
-rw-r--r--docs/libcurl/curl_strequal.pdfbin0 -> 4125 bytes
-rw-r--r--docs/libcurl/curl_unescape.330
-rw-r--r--docs/libcurl/curl_unescape.html59
-rw-r--r--docs/libcurl/curl_unescape.pdfbin0 -> 3954 bytes
-rw-r--r--docs/libcurl/curl_version.318
-rw-r--r--docs/libcurl/curl_version.html55
-rw-r--r--docs/libcurl/curl_version.pdfbin0 -> 3200 bytes
-rw-r--r--docs/libcurl/curl_version_info.3149
-rw-r--r--docs/libcurl/curl_version_info.html121
-rw-r--r--docs/libcurl/curl_version_info.pdfbin0 -> 8204 bytes
-rw-r--r--docs/libcurl/index.html61
-rw-r--r--docs/libcurl/libcurl-easy.327
-rw-r--r--docs/libcurl/libcurl-easy.html54
-rw-r--r--docs/libcurl/libcurl-easy.pdfbin0 -> 4207 bytes
-rw-r--r--docs/libcurl/libcurl-errors.3271
-rw-r--r--docs/libcurl/libcurl-errors.html236
-rw-r--r--docs/libcurl/libcurl-errors.pdfbin0 -> 15530 bytes
-rw-r--r--docs/libcurl/libcurl-multi.3142
-rw-r--r--docs/libcurl/libcurl-multi.html82
-rw-r--r--docs/libcurl/libcurl-multi.pdfbin0 -> 9163 bytes
-rw-r--r--docs/libcurl/libcurl-share.345
-rw-r--r--docs/libcurl/libcurl-share.html61
-rw-r--r--docs/libcurl/libcurl-share.pdfbin0 -> 4828 bytes
-rw-r--r--docs/libcurl/libcurl-tutorial.31357
-rw-r--r--docs/libcurl/libcurl-tutorial.html547
-rw-r--r--docs/libcurl/libcurl-tutorial.pdfbin0 -> 69734 bytes
-rw-r--r--docs/libcurl/libcurl.3202
-rw-r--r--docs/libcurl/libcurl.html103
-rw-r--r--docs/libcurl/libcurl.m4250
-rw-r--r--docs/libcurl/libcurl.pdfbin0 -> 12665 bytes
-rw-r--r--docs/libcurl/symbols-in-versions485
-rw-r--r--include/Makefile.am5
-rw-r--r--include/Makefile.in566
-rw-r--r--include/curl/Makefile.am25
-rw-r--r--include/curl/Makefile.in521
-rw-r--r--include/curl/curl.h127
-rw-r--r--include/curl/curlbuild.h518
-rw-r--r--include/curl/curlver.h10
-rw-r--r--include/curl/stamp-h31
-rw-r--r--include/curl/typecheck-gcc.h148
-rwxr-xr-xinstall-sh250
-rw-r--r--lib/CMakeLists.txt124
-rw-r--r--lib/Makefile.Watcom222
-rw-r--r--lib/Makefile.am175
-rw-r--r--lib/Makefile.b3289
-rw-r--r--lib/Makefile.in865
-rw-r--r--lib/Makefile.inc24
-rw-r--r--lib/Makefile.m32167
-rw-r--r--lib/Makefile.netware667
-rw-r--r--lib/Makefile.riscos232
-rw-r--r--lib/Makefile.vc10571
-rw-r--r--lib/Makefile.vc6571
-rw-r--r--lib/Makefile.vc8571
-rw-r--r--lib/Makefile.vc9571
-rw-r--r--lib/Makefile.vxworks177
-rw-r--r--lib/NOTICE21
-rw-r--r--lib/README.ares2
-rw-r--r--lib/config-amigaos.h151
-rw-r--r--lib/config-mac.h100
-rw-r--r--lib/config-os400.h517
-rw-r--r--lib/config-riscos.h475
-rw-r--r--lib/config-symbian.h (renamed from lib/curl_config.h)551
-rw-r--r--lib/config-tpf.h761
-rw-r--r--lib/config-vxworks.h (renamed from src/curl_config.h)184
-rw-r--r--lib/config-win32.h587
-rw-r--r--lib/config-win32ce.h409
-rw-r--r--lib/config.dos169
-rw-r--r--lib/connect.c245
-rw-r--r--lib/connect.h11
-rw-r--r--lib/content_encoding.c8
-rw-r--r--lib/curl_addrinfo.c5
-rw-r--r--lib/curl_config.h.cmake8
-rw-r--r--lib/curl_config.h.in41
-rw-r--r--lib/curl_fnmatch.c424
-rw-r--r--lib/curl_fnmatch.h44
-rw-r--r--lib/curl_gethostname.c81
-rw-r--r--lib/curl_gethostname.h27
-rw-r--r--lib/curl_hmac.h67
-rw-r--r--lib/curl_ldap.h5
-rw-r--r--lib/curl_md4.h33
-rw-r--r--lib/curl_md5.h6
-rw-r--r--lib/curl_rtmp.c284
-rw-r--r--lib/curl_rtmp.h33
-rw-r--r--lib/curl_sspi.c7
-rw-r--r--lib/dict.c31
-rw-r--r--lib/easy.c38
-rw-r--r--lib/escape.c9
-rw-r--r--lib/file.c7
-rw-r--r--lib/fileinfo.c75
-rw-r--r--lib/fileinfo.h33
-rw-r--r--lib/firefox-db2pem.sh54
-rw-r--r--lib/ftp.c317
-rw-r--r--lib/ftp.h13
-rw-r--r--lib/ftplistparser.c1045
-rw-r--r--lib/ftplistparser.h39
-rw-r--r--lib/getinfo.c31
-rw-r--r--lib/gopher.c208
-rw-r--r--lib/gopher.h29
-rw-r--r--lib/gtls.c251
-rw-r--r--lib/gtls.h14
-rw-r--r--lib/hmac.c131
-rw-r--r--lib/hostares.c2
-rw-r--r--lib/hostip.c6
-rw-r--r--lib/hostip4.c2
-rw-r--r--lib/hostip6.c5
-rw-r--r--lib/hostthre.c21
-rw-r--r--lib/http.c125
-rw-r--r--lib/http.h9
-rw-r--r--lib/http_chunks.c151
-rw-r--r--lib/http_digest.c5
-rw-r--r--lib/http_negotiate.c23
-rw-r--r--lib/http_ntlm.c129
-rw-r--r--lib/imap.c12
-rw-r--r--lib/inet_pton.c6
-rw-r--r--lib/krb4.h10
-rw-r--r--lib/krb5.c66
-rw-r--r--lib/ldap.c42
-rw-r--r--lib/libcurl.imp51
-rw-r--r--lib/libcurl.plist35
-rw-r--r--lib/libcurl.rc63
-rwxr-xr-xlib/libcurl.vcproj2515
-rw-r--r--lib/llist.c28
-rw-r--r--lib/llist.h7
-rw-r--r--lib/makefile.amiga22
-rw-r--r--lib/makefile.dj49
-rw-r--r--lib/md4.c281
-rw-r--r--lib/md5.c47
-rwxr-xr-xlib/mk-ca-bundle.pl2
-rwxr-xr-xlib/mk-ca-bundle.vbs271
-rw-r--r--lib/mprintf.c1
-rw-r--r--lib/multi.c656
-rw-r--r--lib/multiif.h4
-rw-r--r--lib/nss.c354
-rw-r--r--lib/nssg.h19
-rw-r--r--lib/openldap.c635
-rw-r--r--lib/parsedate.c9
-rw-r--r--lib/pingpong.c9
-rw-r--r--lib/pingpong.h4
-rw-r--r--lib/polarssl.c375
-rw-r--r--lib/polarssl.h57
-rw-r--r--lib/pop3.c33
-rw-r--r--lib/qssl.c26
-rw-r--r--lib/qssl.h16
-rw-r--r--lib/rtsp.c18
-rw-r--r--lib/security.c604
-rw-r--r--lib/sendf.c183
-rw-r--r--lib/sendf.h19
-rw-r--r--lib/setup.h23
-rw-r--r--lib/setup_once.h57
-rw-r--r--lib/smtp.c493
-rw-r--r--lib/smtp.h14
-rw-r--r--lib/socks.c27
-rw-r--r--lib/splay.c8
-rw-r--r--lib/ssh.c124
-rw-r--r--lib/ssh.h30
-rw-r--r--lib/sslgen.c21
-rw-r--r--lib/sslgen.h22
-rw-r--r--lib/ssluse.c57
-rw-r--r--lib/ssluse.h16
-rw-r--r--lib/stamp-h11
-rw-r--r--lib/strerror.c6
-rw-r--r--lib/strtoofft.c4
-rw-r--r--lib/strtoofft.h9
-rw-r--r--lib/telnet.c115
-rw-r--r--lib/tftp.c194
-rw-r--r--lib/transfer.c169
-rw-r--r--lib/transfer.h4
-rw-r--r--lib/url.c215
-rw-r--r--lib/url.h9
-rw-r--r--lib/urldata.h81
-rw-r--r--lib/vc6libcurl.dsp862
-rw-r--r--lib/vc6libcurl.dsw29
-rw-r--r--lib/version.c35
-rw-r--r--lib/wildcard.c76
-rw-r--r--lib/wildcard.h58
-rw-r--r--libcurl.pc.in39
-rwxr-xr-xltmain.sh8413
-rw-r--r--m4/curl-compilers.m41421
-rw-r--r--m4/curl-confopts.m4498
-rw-r--r--m4/curl-functions.m45905
-rw-r--r--m4/curl-override.m4101
-rw-r--r--m4/curl-reentrant.m4617
-rw-r--r--m4/curl-system.m488
-rw-r--r--m4/libtool.m47377
-rw-r--r--m4/ltoptions.m4368
-rw-r--r--m4/ltsugar.m4123
-rw-r--r--m4/ltversion.m423
-rw-r--r--m4/lt~obsolete.m492
-rwxr-xr-xmaketgz186
-rwxr-xr-xmissing283
-rw-r--r--mkinstalldirs39
-rw-r--r--packages/AIX/Makefile.am3
-rw-r--r--packages/AIX/Makefile.in563
-rw-r--r--packages/AIX/RPM/Makefile.am2
-rw-r--r--packages/AIX/RPM/Makefile.in408
-rw-r--r--packages/AIX/RPM/README33
-rw-r--r--packages/AIX/RPM/curl.spec.in132
-rw-r--r--packages/DOS/README11
-rw-r--r--packages/DOS/common.dj136
-rw-r--r--packages/EPM/Makefile.am3
-rw-r--r--packages/EPM/Makefile.in409
-rw-r--r--packages/EPM/README12
-rw-r--r--packages/EPM/curl.list.in59
-rw-r--r--packages/Linux/Makefile.am1
-rw-r--r--packages/Linux/Makefile.in562
-rw-r--r--packages/Linux/RPM/Makefile.am2
-rw-r--r--packages/Linux/RPM/Makefile.in410
-rw-r--r--packages/Linux/RPM/README5
-rw-r--r--packages/Linux/RPM/curl-ssl.spec.in84
-rw-r--r--packages/Linux/RPM/curl.spec.in84
-rw-r--r--packages/Linux/RPM/make_curl_rpm62
-rw-r--r--packages/Makefile.am32
-rw-r--r--packages/Makefile.in593
-rw-r--r--packages/NetWare/get_ver.awk75
-rw-r--r--packages/OS400/README.OS400262
-rw-r--r--packages/OS400/ccsidcurl.c1186
-rw-r--r--packages/OS400/ccsidcurl.h64
-rw-r--r--packages/OS400/curl.inc.in1966
-rw-r--r--packages/OS400/initscript.sh176
-rw-r--r--packages/OS400/make-include.sh72
-rw-r--r--packages/OS400/make-lib.sh192
-rw-r--r--packages/OS400/make-src.sh4
-rw-r--r--packages/OS400/make-tests.sh114
-rw-r--r--packages/OS400/makefile.sh52
-rw-r--r--packages/OS400/os400sys.c1080
-rw-r--r--packages/OS400/os400sys.h52
-rw-r--r--packages/README27
-rw-r--r--packages/Solaris/Makefile.am38
-rw-r--r--packages/Solaris/Makefile.in438
-rw-r--r--packages/Symbian/bwins/libcurlu.def60
-rw-r--r--packages/Symbian/eabi/libcurlu.def60
-rw-r--r--packages/Symbian/group/bld.inf10
-rw-r--r--packages/Symbian/group/curl.iby15
-rw-r--r--packages/Symbian/group/curl.mmp28
-rw-r--r--packages/Symbian/group/curl.pkg26
-rw-r--r--packages/Symbian/group/libcurl.iby14
-rw-r--r--packages/Symbian/group/libcurl.mmp59
-rw-r--r--packages/Symbian/group/libcurl.pkg22
-rw-r--r--packages/Symbian/readme.txt93
-rw-r--r--packages/TPF/curl.mak61
-rw-r--r--packages/TPF/maketpf.env_curl25
-rw-r--r--packages/TPF/maketpf.env_curllib57
-rw-r--r--packages/Win32/Makefile.am3
-rw-r--r--packages/Win32/Makefile.in563
-rw-r--r--packages/Win32/README53
-rw-r--r--packages/Win32/cygwin/Makefile.am62
-rw-r--r--packages/Win32/cygwin/Makefile.in466
-rw-r--r--packages/Win32/cygwin/README114
-rw-r--r--packages/vms/Makefile.am17
-rw-r--r--packages/vms/Makefile.in422
-rw-r--r--packages/vms/build_vms.com583
-rw-r--r--packages/vms/config-vms.h371
-rw-r--r--packages/vms/curlmsg.h119
-rw-r--r--packages/vms/curlmsg.msg111
-rw-r--r--packages/vms/curlmsg.sdl115
-rw-r--r--packages/vms/curlmsg_vms.h120
-rw-r--r--packages/vms/hpssl_alpha.opt2
-rw-r--r--packages/vms/hpssl_ia64.opt2
-rw-r--r--packages/vms/hpssl_vax.opt2
-rw-r--r--packages/vms/ldap.opt1
-rw-r--r--packages/vms/openssl_alpha.opt2
-rw-r--r--packages/vms/openssl_ia64.opt2
-rw-r--r--packages/vms/openssl_ssl_alpha.opt2
-rw-r--r--packages/vms/openssl_ssl_ia64.opt2
-rw-r--r--packages/vms/openssl_ssl_vax.opt2
-rw-r--r--packages/vms/openssl_vax.opt2
-rw-r--r--packages/vms/readme70
-rw-r--r--sample.emacs45
-rw-r--r--src/CMakeLists.txt56
-rw-r--r--src/Makefile.Watcom190
-rw-r--r--src/Makefile.am97
-rw-r--r--src/Makefile.b3289
-rw-r--r--src/Makefile.in25
-rw-r--r--src/Makefile.inc14
-rw-r--r--src/Makefile.m32172
-rw-r--r--src/Makefile.netware588
-rw-r--r--src/Makefile.riscos64
-rw-r--r--src/Makefile.vc10299
-rw-r--r--src/Makefile.vc6299
-rw-r--r--src/Makefile.vc8299
-rw-r--r--src/Makefile.vc9299
-rw-r--r--src/NOTICE21
-rw-r--r--src/config-amigaos.h69
-rw-r--r--src/config-mac.h35
-rw-r--r--src/config-riscos.h379
-rw-r--r--src/config-win32.h416
-rw-r--r--src/curl_config.h.in41
-rwxr-xr-xsrc/curlsrc.vcproj553
-rw-r--r--src/hugehelp.c7903
-rw-r--r--src/macos/MACINSTALL.TXT1
-rw-r--r--src/macos/curl.mcp.xml.sit.hqx1
-rw-r--r--src/macos/src/curl_GUSIConfig.cpp1
-rw-r--r--src/macos/src/macos_main.cpp1
-rw-r--r--src/main.c1370
-rw-r--r--src/makefile.amiga32
-rw-r--r--src/makefile.dj84
-rw-r--r--src/mkhelp.pl232
-rw-r--r--src/setup.h5
-rw-r--r--src/urlglob.c34
-rw-r--r--src/vc6curlsrc.dsp258
-rw-r--r--src/vc6curlsrc.dsw29
-rw-r--r--src/version.h2
-rw-r--r--tests/CMakeLists.txt2
-rw-r--r--tests/FILEFORMAT345
-rw-r--r--tests/Makefile.am75
-rw-r--r--tests/Makefile.in631
-rw-r--r--tests/README160
-rw-r--r--tests/certs/EdelCurlRoot-ca.cacert85
-rw-r--r--tests/certs/EdelCurlRoot-ca.cnf11
-rw-r--r--tests/certs/EdelCurlRoot-ca.crt85
-rw-r--r--tests/certs/EdelCurlRoot-ca.csr17
-rw-r--r--tests/certs/EdelCurlRoot-ca.derbin0 -> 916 bytes
-rw-r--r--tests/certs/EdelCurlRoot-ca.key27
-rw-r--r--tests/certs/EdelCurlRoot-ca.prm18
-rw-r--r--tests/certs/Server-localhost-sv.crl12
-rw-r--r--tests/certs/Server-localhost-sv.crt81
-rw-r--r--tests/certs/Server-localhost-sv.csr11
-rw-r--r--tests/certs/Server-localhost-sv.derbin0 -> 837 bytes
-rw-r--r--tests/certs/Server-localhost-sv.dhp5
-rw-r--r--tests/certs/Server-localhost-sv.key15
-rw-r--r--tests/certs/Server-localhost-sv.p12bin0 -> 2958 bytes
-rw-r--r--tests/certs/Server-localhost-sv.pem126
-rw-r--r--tests/certs/Server-localhost-sv.prm25
-rw-r--r--tests/certs/Server-localhost.nn-sv.crl13
-rw-r--r--tests/certs/Server-localhost.nn-sv.crt81
-rw-r--r--tests/certs/Server-localhost.nn-sv.csr11
-rw-r--r--tests/certs/Server-localhost.nn-sv.derbin0 -> 843 bytes
-rw-r--r--tests/certs/Server-localhost.nn-sv.dhp5
-rw-r--r--tests/certs/Server-localhost.nn-sv.key15
-rw-r--r--tests/certs/Server-localhost.nn-sv.pem126
-rw-r--r--tests/certs/Server-localhost.nn-sv.prm25
-rw-r--r--tests/certs/Server-localhost0h-sv.crl14
-rw-r--r--tests/certs/Server-localhost0h-sv.crt81
-rw-r--r--tests/certs/Server-localhost0h-sv.csr11
-rw-r--r--tests/certs/Server-localhost0h-sv.derbin0 -> 839 bytes
-rw-r--r--tests/certs/Server-localhost0h-sv.dhp5
-rw-r--r--tests/certs/Server-localhost0h-sv.key15
-rw-r--r--tests/certs/Server-localhost0h-sv.p12bin0 -> 2970 bytes
-rw-r--r--tests/certs/Server-localhost0h-sv.pem127
-rw-r--r--tests/certs/Server-localhost0h-sv.prm26
-rwxr-xr-xtests/certs/scripts/genroot.sh66
-rwxr-xr-xtests/certs/scripts/genserv.sh112
-rw-r--r--tests/data/DISABLED5
-rw-r--r--tests/data/Makefile.am92
-rw-r--r--tests/data/Makefile.in495
-rw-r--r--tests/data/test155
-rw-r--r--tests/data/test1067
-rw-r--r--tests/data/test10056
-rw-r--r--tests/data/test100042
-rw-r--r--tests/data/test1001104
-rw-r--r--tests/data/test1002114
-rw-r--r--tests/data/test100348
-rw-r--r--tests/data/test100459
-rw-r--r--tests/data/test100548
-rw-r--r--tests/data/test100649
-rw-r--r--tests/data/test100739
-rw-r--r--tests/data/test1008126
-rw-r--r--tests/data/test100944
-rw-r--r--tests/data/test10158
-rw-r--r--tests/data/test101056
-rw-r--r--tests/data/test101176
-rw-r--r--tests/data/test101279
-rw-r--r--tests/data/test101337
-rw-r--r--tests/data/test101437
-rw-r--r--tests/data/test101553
-rw-r--r--tests/data/test101639
-rw-r--r--tests/data/test101740
-rw-r--r--tests/data/test101839
-rw-r--r--tests/data/test101942
-rw-r--r--tests/data/test10252
-rw-r--r--tests/data/test102042
-rw-r--r--tests/data/test1021139
-rw-r--r--tests/data/test102237
-rw-r--r--tests/data/test102337
-rw-r--r--tests/data/test1024103
-rw-r--r--tests/data/test1025105
-rw-r--r--tests/data/test102639
-rw-r--r--tests/data/test102739
-rw-r--r--tests/data/test102894
-rw-r--r--tests/data/test102958
-rw-r--r--tests/data/test10354
-rw-r--r--tests/data/test1030109
-rw-r--r--tests/data/test103176
-rw-r--r--tests/data/test103256
-rw-r--r--tests/data/test103360
-rw-r--r--tests/data/test103462
-rw-r--r--tests/data/test103559
-rw-r--r--tests/data/test103661
-rw-r--r--tests/data/test103754
-rw-r--r--tests/data/test103853
-rw-r--r--tests/data/test103953
-rw-r--r--tests/data/test10443
-rw-r--r--tests/data/test104079
-rw-r--r--tests/data/test104178
-rw-r--r--tests/data/test104294
-rw-r--r--tests/data/test104384
-rw-r--r--tests/data/test104458
-rw-r--r--tests/data/test104552
-rw-r--r--tests/data/test104660
-rw-r--r--tests/data/test104758
-rw-r--r--tests/data/test104866
-rw-r--r--tests/data/test104944
-rw-r--r--tests/data/test10553
-rw-r--r--tests/data/test105066
-rw-r--r--tests/data/test1051118
-rw-r--r--tests/data/test1052111
-rw-r--r--tests/data/test1053129
-rw-r--r--tests/data/test105480
-rw-r--r--tests/data/test1055100
-rw-r--r--tests/data/test105681
-rw-r--r--tests/data/test105751
-rw-r--r--tests/data/test105853
-rw-r--r--tests/data/test105958
-rw-r--r--tests/data/test10651
-rw-r--r--tests/data/test1060902
-rw-r--r--tests/data/test1061907
-rw-r--r--tests/data/test106249
-rw-r--r--tests/data/test106347
-rw-r--r--tests/data/test106479
-rw-r--r--tests/data/test106578
-rw-r--r--tests/data/test106682
-rw-r--r--tests/data/test106778
-rw-r--r--tests/data/test106857
-rw-r--r--tests/data/test106936
-rw-r--r--tests/data/test10751
-rw-r--r--tests/data/test107065
-rw-r--r--tests/data/test1071113
-rw-r--r--tests/data/test107278
-rw-r--r--tests/data/test107372
-rw-r--r--tests/data/test107476
-rw-r--r--tests/data/test107594
-rw-r--r--tests/data/test107679
-rw-r--r--tests/data/test107775
-rw-r--r--tests/data/test107886
-rw-r--r--tests/data/test107975
-rw-r--r--tests/data/test10856
-rw-r--r--tests/data/test108069
-rw-r--r--tests/data/test108177
-rw-r--r--tests/data/test108255
-rw-r--r--tests/data/test108359
-rw-r--r--tests/data/test108441
-rw-r--r--tests/data/test108548
-rw-r--r--tests/data/test1086109
-rw-r--r--tests/data/test1087110
-rw-r--r--tests/data/test1088112
-rw-r--r--tests/data/test108991
-rw-r--r--tests/data/test10948
-rw-r--r--tests/data/test109098
-rw-r--r--tests/data/test109146
-rw-r--r--tests/data/test109256
-rw-r--r--tests/data/test109344
-rw-r--r--tests/data/test109450
-rw-r--r--tests/data/test109583
-rw-r--r--tests/data/test109650
-rw-r--r--tests/data/test109779
-rw-r--r--tests/data/test109873
-rw-r--r--tests/data/test109945
-rw-r--r--tests/data/test1176
-rw-r--r--tests/data/test11052
-rw-r--r--tests/data/test1100116
-rw-r--r--tests/data/test110154
-rw-r--r--tests/data/test110251
-rw-r--r--tests/data/test110348
-rw-r--r--tests/data/test110485
-rw-r--r--tests/data/test110563
-rw-r--r--tests/data/test110657
-rw-r--r--tests/data/test110753
-rw-r--r--tests/data/test110845
-rw-r--r--tests/data/test110946
-rw-r--r--tests/data/test11145
-rw-r--r--tests/data/test111047
-rw-r--r--tests/data/test111147
-rw-r--r--tests/data/test1112114
-rw-r--r--tests/data/test111398
-rw-r--r--tests/data/test1114136
-rw-r--r--tests/data/test111555
-rw-r--r--tests/data/test111677
-rw-r--r--tests/data/test111787
-rw-r--r--tests/data/test11249
-rw-r--r--tests/data/test11337
-rw-r--r--tests/data/test11438
-rw-r--r--tests/data/test11544
-rw-r--r--tests/data/test11652
-rw-r--r--tests/data/test11744
-rw-r--r--tests/data/test11848
-rw-r--r--tests/data/test11950
-rw-r--r--tests/data/test1256
-rw-r--r--tests/data/test12053
-rw-r--r--tests/data/test120039
-rw-r--r--tests/data/test120139
-rw-r--r--tests/data/test120240
-rw-r--r--tests/data/test120343
-rw-r--r--tests/data/test12151
-rw-r--r--tests/data/test12245
-rw-r--r--tests/data/test12340
-rw-r--r--tests/data/test12447
-rw-r--r--tests/data/test12541
-rw-r--r--tests/data/test12648
-rw-r--r--tests/data/test12746
-rw-r--r--tests/data/test12857
-rw-r--r--tests/data/test12952
-rw-r--r--tests/data/test1344
-rw-r--r--tests/data/test13065
-rw-r--r--tests/data/test13166
-rw-r--r--tests/data/test13265
-rw-r--r--tests/data/test13365
-rw-r--r--tests/data/test13465
-rw-r--r--tests/data/test13553
-rw-r--r--tests/data/test13642
-rw-r--r--tests/data/test13747
-rw-r--r--tests/data/test13849
-rw-r--r--tests/data/test13947
-rw-r--r--tests/data/test1444
-rw-r--r--tests/data/test14042
-rw-r--r--tests/data/test14152
-rw-r--r--tests/data/test142190
-rw-r--r--tests/data/test14344
-rw-r--r--tests/data/test14449
-rw-r--r--tests/data/test14551
-rw-r--r--tests/data/test14655
-rw-r--r--tests/data/test14749
-rw-r--r--tests/data/test14842
-rw-r--r--tests/data/test14947
-rw-r--r--tests/data/test1557
-rw-r--r--tests/data/test15094
-rw-r--r--tests/data/test15141
-rw-r--r--tests/data/test15244
-rw-r--r--tests/data/test153133
-rw-r--r--tests/data/test154108
-rw-r--r--tests/data/test155131
-rw-r--r--tests/data/test15652
-rw-r--r--tests/data/test15739
-rw-r--r--tests/data/test15850
-rw-r--r--tests/data/test15993
-rw-r--r--tests/data/test1652
-rw-r--r--tests/data/test16066
-rw-r--r--tests/data/test16141
-rw-r--r--tests/data/test16260
-rw-r--r--tests/data/test16373
-rw-r--r--tests/data/test16461
-rw-r--r--tests/data/test16558
-rw-r--r--tests/data/test16654
-rw-r--r--tests/data/test16779
-rw-r--r--tests/data/test16899
-rw-r--r--tests/data/test169127
-rw-r--r--tests/data/test1754
-rw-r--r--tests/data/test17051
-rw-r--r--tests/data/test17158
-rw-r--r--tests/data/test17256
-rw-r--r--tests/data/test17380
-rw-r--r--tests/data/test17445
-rw-r--r--tests/data/test17586
-rw-r--r--tests/data/test17679
-rw-r--r--tests/data/test17754
-rw-r--r--tests/data/test17843
-rw-r--r--tests/data/test17957
-rw-r--r--tests/data/test1890
-rw-r--r--tests/data/test18059
-rw-r--r--tests/data/test18160
-rw-r--r--tests/data/test18237
-rw-r--r--tests/data/test18356
-rw-r--r--tests/data/test18475
-rw-r--r--tests/data/test18575
-rw-r--r--tests/data/test18656
-rw-r--r--tests/data/test18777
-rw-r--r--tests/data/test18878
-rw-r--r--tests/data/test18969
-rw-r--r--tests/data/test1937
-rw-r--r--tests/data/test19038
-rw-r--r--tests/data/test19135
-rw-r--r--tests/data/test19252
-rw-r--r--tests/data/test19382
-rw-r--r--tests/data/test19457
-rw-r--r--tests/data/test19532
-rw-r--r--tests/data/test19635
-rw-r--r--tests/data/test19769
-rw-r--r--tests/data/test19864
-rw-r--r--tests/data/test19952
-rw-r--r--tests/data/test253
-rw-r--r--tests/data/test2038
-rw-r--r--tests/data/test20041
-rw-r--r--tests/data/test200073
-rw-r--r--tests/data/test2001109
-rw-r--r--tests/data/test2002125
-rw-r--r--tests/data/test2003162
-rw-r--r--tests/data/test200472
-rw-r--r--tests/data/test20127
-rw-r--r--tests/data/test20231
-rw-r--r--tests/data/test20336
-rw-r--r--tests/data/test20434
-rw-r--r--tests/data/test20531
-rw-r--r--tests/data/test206100
-rw-r--r--tests/data/test20758
-rw-r--r--tests/data/test20875
-rw-r--r--tests/data/test209119
-rw-r--r--tests/data/test2133
-rw-r--r--tests/data/test21046
-rw-r--r--tests/data/test21148
-rw-r--r--tests/data/test21257
-rw-r--r--tests/data/test213122
-rw-r--r--tests/data/test21444
-rw-r--r--tests/data/test21552
-rw-r--r--tests/data/test21639
-rw-r--r--tests/data/test21760
-rw-r--r--tests/data/test21852
-rw-r--r--tests/data/test2246
-rw-r--r--tests/data/test22068
-rw-r--r--tests/data/test22171
-rw-r--r--tests/data/test222199
-rw-r--r--tests/data/test22392
-rw-r--r--tests/data/test224104
-rw-r--r--tests/data/test22528
-rw-r--r--tests/data/test22629
-rw-r--r--tests/data/test22758
-rw-r--r--tests/data/test22852
-rw-r--r--tests/data/test22941
-rw-r--r--tests/data/test2333
-rw-r--r--tests/data/test23132
-rw-r--r--tests/data/test23394
-rw-r--r--tests/data/test23497
-rw-r--r--tests/data/test23542
-rw-r--r--tests/data/test23647
-rw-r--r--tests/data/test23742
-rw-r--r--tests/data/test23841
-rw-r--r--tests/data/test239100
-rw-r--r--tests/data/test2447
-rw-r--r--tests/data/test24058
-rw-r--r--tests/data/test24156
-rw-r--r--tests/data/test24254
-rw-r--r--tests/data/test243129
-rw-r--r--tests/data/test24587
-rw-r--r--tests/data/test24697
-rw-r--r--tests/data/test24741
-rw-r--r--tests/data/test24850
-rw-r--r--tests/data/test24947
-rw-r--r--tests/data/test25116
-rw-r--r--tests/data/test25052
-rw-r--r--tests/data/test25154
-rw-r--r--tests/data/test25259
-rw-r--r--tests/data/test25362
-rw-r--r--tests/data/test25460
-rw-r--r--tests/data/test25563
-rw-r--r--tests/data/test25664
-rw-r--r--tests/data/test257115
-rw-r--r--tests/data/test258134
-rw-r--r--tests/data/test259132
-rw-r--r--tests/data/test2645
-rw-r--r--tests/data/test26055
-rw-r--r--tests/data/test26148
-rw-r--r--tests/data/test262bin0 -> 1137 bytes
-rw-r--r--tests/data/test26354
-rw-r--r--tests/data/test26449
-rw-r--r--tests/data/test265125
-rw-r--r--tests/data/test26678
-rw-r--r--tests/data/test267109
-rw-r--r--tests/data/test26857
-rw-r--r--tests/data/test26953
-rw-r--r--tests/data/test2756
-rw-r--r--tests/data/test27050
-rw-r--r--tests/data/test27143
-rw-r--r--tests/data/test27240
-rw-r--r--tests/data/test27383
-rw-r--r--tests/data/test27452
-rw-r--r--tests/data/test27578
-rw-r--r--tests/data/test27676
-rw-r--r--tests/data/test27759
-rw-r--r--tests/data/test27849
-rw-r--r--tests/data/test27950
-rw-r--r--tests/data/test2875
-rw-r--r--tests/data/test28063
-rw-r--r--tests/data/test28165
-rw-r--r--tests/data/test28245
-rw-r--r--tests/data/test28336
-rw-r--r--tests/data/test28467
-rw-r--r--tests/data/test28544
-rw-r--r--tests/data/test28692
-rw-r--r--tests/data/test28754
-rw-r--r--tests/data/test28842
-rw-r--r--tests/data/test28930
-rw-r--r--tests/data/test2952
-rw-r--r--tests/data/test29043
-rw-r--r--tests/data/test29147
-rw-r--r--tests/data/test29256
-rw-r--r--tests/data/test29360
-rw-r--r--tests/data/test29464
-rw-r--r--tests/data/test29545
-rw-r--r--tests/data/test29648
-rw-r--r--tests/data/test29746
-rw-r--r--tests/data/test29845
-rw-r--r--tests/data/test29953
-rw-r--r--tests/data/test360
-rw-r--r--tests/data/test3043
-rw-r--r--tests/data/test30052
-rw-r--r--tests/data/test30157
-rw-r--r--tests/data/test30240
-rw-r--r--tests/data/test30355
-rw-r--r--tests/data/test30472
-rw-r--r--tests/data/test30535
-rw-r--r--tests/data/test30665
-rw-r--r--tests/data/test30756
-rw-r--r--tests/data/test30834
-rw-r--r--tests/data/test30986
-rw-r--r--tests/data/test3178
-rw-r--r--tests/data/test31057
-rw-r--r--tests/data/test31143
-rw-r--r--tests/data/test31243
-rw-r--r--tests/data/test31339
-rw-r--r--tests/data/test3256
-rw-r--r--tests/data/test3364
-rw-r--r--tests/data/test3466
-rw-r--r--tests/data/test35bin0 -> 810 bytes
-rw-r--r--tests/data/test35057
-rw-r--r--tests/data/test35156
-rw-r--r--tests/data/test35257
-rw-r--r--tests/data/test35356
-rw-r--r--tests/data/test35450
-rw-r--r--tests/data/test3666
-rw-r--r--tests/data/test3747
-rw-r--r--tests/data/test3861
-rw-r--r--tests/data/test3991
-rw-r--r--tests/data/test451
-rw-r--r--tests/data/test4074
-rw-r--r--tests/data/test40061
-rw-r--r--tests/data/test40156
-rw-r--r--tests/data/test40235
-rw-r--r--tests/data/test40364
-rw-r--r--tests/data/test40431
-rw-r--r--tests/data/test40534
-rw-r--r--tests/data/test40666
-rw-r--r--tests/data/test40759
-rw-r--r--tests/data/test40861
-rw-r--r--tests/data/test40956
-rw-r--r--tests/data/test4132
-rw-r--r--tests/data/test4274
-rw-r--r--tests/data/test4379
-rw-r--r--tests/data/test4472
-rw-r--r--tests/data/test4576
-rw-r--r--tests/data/test4689
-rw-r--r--tests/data/test4749
-rw-r--r--tests/data/test4847
-rw-r--r--tests/data/test4974
-rw-r--r--tests/data/test550
-rw-r--r--tests/data/test5074
-rw-r--r--tests/data/test50058
-rw-r--r--tests/data/test50140
-rw-r--r--tests/data/test50247
-rw-r--r--tests/data/test50376
-rw-r--r--tests/data/test50443
-rw-r--r--tests/data/test50560
-rw-r--r--tests/data/test506181
-rw-r--r--tests/data/test50737
-rw-r--r--tests/data/test50851
-rw-r--r--tests/data/test5174
-rw-r--r--tests/data/test51057
-rw-r--r--tests/data/test51144
-rw-r--r--tests/data/test51246
-rw-r--r--tests/data/test51342
-rw-r--r--tests/data/test51451
-rw-r--r--tests/data/test51548
-rw-r--r--tests/data/test51647
-rw-r--r--tests/data/test517117
-rw-r--r--tests/data/test51860
-rw-r--r--tests/data/test51971
-rw-r--r--tests/data/test5274
-rw-r--r--tests/data/test52047
-rw-r--r--tests/data/test52160
-rw-r--r--tests/data/test52260
-rw-r--r--tests/data/test52364
-rw-r--r--tests/data/test52446
-rw-r--r--tests/data/test52559
-rw-r--r--tests/data/test52663
-rw-r--r--tests/data/test52763
-rw-r--r--tests/data/test52865
-rw-r--r--tests/data/test52959
-rw-r--r--tests/data/test5354
-rw-r--r--tests/data/test53083
-rw-r--r--tests/data/test53159
-rw-r--r--tests/data/test53263
-rw-r--r--tests/data/test53355
-rw-r--r--tests/data/test53453
-rw-r--r--tests/data/test53569
-rw-r--r--tests/data/test53665
-rw-r--r--tests/data/test53757
-rw-r--r--tests/data/test53846
-rw-r--r--tests/data/test53963
-rw-r--r--tests/data/test5445
-rw-r--r--tests/data/test54096
-rw-r--r--tests/data/test54151
-rw-r--r--tests/data/test54257
-rw-r--r--tests/data/test54335
-rw-r--r--tests/data/test54449
-rw-r--r--tests/data/test545bin0 -> 748 bytes
-rw-r--r--tests/data/test54670
-rw-r--r--tests/data/test547133
-rw-r--r--tests/data/test548133
-rw-r--r--tests/data/test54965
-rw-r--r--tests/data/test5566
-rw-r--r--tests/data/test55065
-rw-r--r--tests/data/test55198
-rw-r--r--tests/data/test552bin0 -> 143212 bytes
-rw-r--r--tests/data/test55367
-rw-r--r--tests/data/test55468
-rw-r--r--tests/data/test555142
-rw-r--r--tests/data/test55650
-rw-r--r--tests/data/test55739
-rw-r--r--tests/data/test55844
-rw-r--r--tests/data/test55944
-rw-r--r--tests/data/test5661
-rw-r--r--tests/data/test56056
-rw-r--r--tests/data/test56166
-rw-r--r--tests/data/test56253
-rw-r--r--tests/data/test56357
-rw-r--r--tests/data/test56466
-rw-r--r--tests/data/test565105
-rw-r--r--tests/data/test56657
-rw-r--r--tests/data/test56750
-rw-r--r--tests/data/test568117
-rw-r--r--tests/data/test569110
-rw-r--r--tests/data/test5748
-rw-r--r--tests/data/test57077
-rw-r--r--tests/data/test571108
-rw-r--r--tests/data/test572121
-rw-r--r--tests/data/test57356
-rw-r--r--tests/data/test57498
-rw-r--r--tests/data/test575121
-rw-r--r--tests/data/test576192
-rw-r--r--tests/data/test57743
-rw-r--r--tests/data/test57852
-rw-r--r--tests/data/test57985
-rw-r--r--tests/data/test5851
-rw-r--r--tests/data/test5947
-rw-r--r--tests/data/test649
-rw-r--r--tests/data/test6057
-rw-r--r--tests/data/test60042
-rw-r--r--tests/data/test60142
-rw-r--r--tests/data/test60243
-rw-r--r--tests/data/test60343
-rw-r--r--tests/data/test60430
-rw-r--r--tests/data/test60533
-rw-r--r--tests/data/test60633
-rw-r--r--tests/data/test60733
-rw-r--r--tests/data/test60849
-rw-r--r--tests/data/test60945
-rw-r--r--tests/data/test6171
-rw-r--r--tests/data/test61047
-rw-r--r--tests/data/test61147
-rw-r--r--tests/data/test61247
-rw-r--r--tests/data/test61348
-rw-r--r--tests/data/test61449
-rw-r--r--tests/data/test61544
-rw-r--r--tests/data/test61639
-rw-r--r--tests/data/test61739
-rw-r--r--tests/data/test61839
-rw-r--r--tests/data/test61939
-rw-r--r--tests/data/test6260
-rw-r--r--tests/data/test62038
-rw-r--r--tests/data/test62138
-rw-r--r--tests/data/test62243
-rw-r--r--tests/data/test62341
-rw-r--r--tests/data/test62447
-rw-r--r--tests/data/test62547
-rw-r--r--tests/data/test62642
-rw-r--r--tests/data/test62746
-rw-r--r--tests/data/test62833
-rw-r--r--tests/data/test62933
-rw-r--r--tests/data/test6352
-rw-r--r--tests/data/test63034
-rw-r--r--tests/data/test63134
-rw-r--r--tests/data/test63234
-rw-r--r--tests/data/test63342
-rw-r--r--tests/data/test63443
-rw-r--r--tests/data/test63542
-rw-r--r--tests/data/test63643
-rw-r--r--tests/data/test63744
-rw-r--r--tests/data/test6483
-rw-r--r--tests/data/test6583
-rw-r--r--tests/data/test6641
-rw-r--r--tests/data/test67100
-rw-r--r--tests/data/test6899
-rw-r--r--tests/data/test69121
-rw-r--r--tests/data/test762
-rw-r--r--tests/data/test7087
-rw-r--r--tests/data/test70057
-rw-r--r--tests/data/test70157
-rw-r--r--tests/data/test70239
-rw-r--r--tests/data/test70339
-rw-r--r--tests/data/test70436
-rw-r--r--tests/data/test70536
-rw-r--r--tests/data/test70659
-rw-r--r--tests/data/test70759
-rw-r--r--tests/data/test7179
-rw-r--r--tests/data/test7286
-rw-r--r--tests/data/test7355
-rw-r--r--tests/data/test7474
-rw-r--r--tests/data/test7549
-rw-r--r--tests/data/test7639
-rw-r--r--tests/data/test7755
-rw-r--r--tests/data/test7867
-rw-r--r--tests/data/test7955
-rw-r--r--tests/data/test863
-rw-r--r--tests/data/test8076
-rw-r--r--tests/data/test80047
-rw-r--r--tests/data/test80147
-rw-r--r--tests/data/test80253
-rw-r--r--tests/data/test80364
-rw-r--r--tests/data/test80459
-rw-r--r--tests/data/test80554
-rw-r--r--tests/data/test80655
-rw-r--r--tests/data/test80759
-rw-r--r--tests/data/test81101
-rw-r--r--tests/data/test8256
-rw-r--r--tests/data/test8372
-rw-r--r--tests/data/test8454
-rw-r--r--tests/data/test8558
-rw-r--r--tests/data/test8696
-rw-r--r--tests/data/test8736
-rw-r--r--tests/data/test88101
-rw-r--r--tests/data/test89145
-rw-r--r--tests/data/test973
-rw-r--r--tests/data/test90191
-rw-r--r--tests/data/test91122
-rw-r--r--tests/data/test9255
-rw-r--r--tests/data/test9350
-rw-r--r--tests/data/test9458
-rw-r--r--tests/data/test9574
-rw-r--r--tests/data/test9752
-rw-r--r--tests/data/test9855
-rw-r--r--tests/data/test9969
-rw-r--r--tests/directories.pm266
-rw-r--r--tests/ftp.pm254
-rwxr-xr-xtests/ftpserver.pl1574
-rw-r--r--tests/getpart.pm224
-rwxr-xr-xtests/httpserver.pl118
-rw-r--r--tests/libtest/Makefile.am83
-rw-r--r--tests/libtest/Makefile.in1720
-rw-r--r--tests/libtest/Makefile.inc166
-rw-r--r--tests/libtest/chkhostname.c26
-rw-r--r--tests/libtest/first.c95
-rw-r--r--tests/libtest/lib500.c53
-rw-r--r--tests/libtest/lib501.c43
-rw-r--r--tests/libtest/lib502.c94
-rw-r--r--tests/libtest/lib503.c152
-rw-r--r--tests/libtest/lib504.c161
-rw-r--r--tests/libtest/lib505.c151
-rw-r--r--tests/libtest/lib506.c268
-rw-r--r--tests/libtest/lib507.c141
-rw-r--r--tests/libtest/lib508.c95
-rw-r--r--tests/libtest/lib510.c118
-rw-r--r--tests/libtest/lib511.c43
-rw-r--r--tests/libtest/lib512.c65
-rw-r--r--tests/libtest/lib513.c70
-rw-r--r--tests/libtest/lib514.c66
-rw-r--r--tests/libtest/lib515.c47
-rw-r--r--tests/libtest/lib516.c46
-rw-r--r--tests/libtest/lib517.c116
-rw-r--r--tests/libtest/lib518.c509
-rw-r--r--tests/libtest/lib519.c50
-rw-r--r--tests/libtest/lib520.c42
-rw-r--r--tests/libtest/lib521.c44
-rw-r--r--tests/libtest/lib523.c45
-rw-r--r--tests/libtest/lib524.c43
-rw-r--r--tests/libtest/lib525.c211
-rw-r--r--tests/libtest/lib526.c236
-rw-r--r--tests/libtest/lib530.c211
-rw-r--r--tests/libtest/lib533.c166
-rw-r--r--tests/libtest/lib536.c140
-rw-r--r--tests/libtest/lib537.c512
-rw-r--r--tests/libtest/lib539.c80
-rw-r--r--tests/libtest/lib540.c178
-rw-r--r--tests/libtest/lib541.c118
-rw-r--r--tests/libtest/lib542.c73
-rw-r--r--tests/libtest/lib543.c42
-rw-r--r--tests/libtest/lib544.c66
-rw-r--r--tests/libtest/lib547.c116
-rw-r--r--tests/libtest/lib549.c52
-rw-r--r--tests/libtest/lib552.c205
-rw-r--r--tests/libtest/lib553.c100
-rw-r--r--tests/libtest/lib554.c150
-rw-r--r--tests/libtest/lib555.c157
-rw-r--r--tests/libtest/lib556.c91
-rw-r--r--tests/libtest/lib557.c1388
-rw-r--r--tests/libtest/lib558.c188
-rw-r--r--tests/libtest/lib560.c105
-rw-r--r--tests/libtest/lib562.c74
-rw-r--r--tests/libtest/lib564.c143
-rw-r--r--tests/libtest/lib566.c55
-rw-r--r--tests/libtest/lib567.c56
-rw-r--r--tests/libtest/lib568.c163
-rw-r--r--tests/libtest/lib569.c117
-rw-r--r--tests/libtest/lib570.c105
-rw-r--r--tests/libtest/lib571.c200
-rw-r--r--tests/libtest/lib572.c169
-rw-r--r--tests/libtest/lib573.c102
-rw-r--r--tests/libtest/lib574.c56
-rw-r--r--tests/libtest/lib575.c109
-rw-r--r--tests/libtest/lib576.c111
-rw-r--r--tests/libtest/lib577.c255
-rw-r--r--tests/libtest/lib578.c90
-rw-r--r--tests/libtest/lib579.c149
-rw-r--r--tests/libtest/sethostname.c29
-rw-r--r--tests/libtest/sethostname.h32
-rw-r--r--tests/libtest/test.h59
-rwxr-xr-xtests/libtest/test1013.pl49
-rwxr-xr-xtests/libtest/test1022.pl45
-rwxr-xr-xtests/libtest/test307.pl19
-rwxr-xr-xtests/libtest/test610.pl33
-rwxr-xr-xtests/libtest/test613.pl105
-rwxr-xr-xtests/libtest/test75.pl13
-rw-r--r--tests/libtest/testutil.c135
-rw-r--r--tests/libtest/testutil.h49
-rwxr-xr-xtests/memanalyze.pl356
-rwxr-xr-xtests/rtspserver.pl108
-rw-r--r--tests/runtests.1107
-rw-r--r--tests/runtests.html87
-rw-r--r--tests/runtests.pdfbin0 -> 7204 bytes
-rwxr-xr-xtests/runtests.pl4132
-rwxr-xr-xtests/secureserver.pl298
-rw-r--r--tests/server/Makefile.am57
-rw-r--r--tests/server/Makefile.in1692
-rw-r--r--tests/server/Makefile.inc61
-rw-r--r--tests/server/getpart.c422
-rw-r--r--tests/server/getpart.h33
-rw-r--r--tests/server/resolve.c164
-rw-r--r--tests/server/rtspd.c1471
-rw-r--r--tests/server/sockfilt.c1053
-rw-r--r--tests/server/sws.c1458
-rw-r--r--tests/server/testpart.c54
-rw-r--r--tests/server/tftp.h57
-rw-r--r--tests/server/tftpd.c1263
-rw-r--r--tests/server/util.c283
-rw-r--r--tests/server/util.h64
-rw-r--r--tests/serverhelp.pm237
-rw-r--r--tests/sshhelp.pm388
-rwxr-xr-xtests/sshserver.pl1042
-rw-r--r--tests/stunnel.pem142
-rw-r--r--tests/testcurl.1124
-rw-r--r--tests/testcurl.html113
-rw-r--r--tests/testcurl.pdfbin0 -> 7203 bytes
-rwxr-xr-xtests/testcurl.pl736
-rwxr-xr-xtests/tftpserver.pl109
-rw-r--r--tests/valgrind.pm110
-rw-r--r--vc6curl.dsw44
1295 files changed, 232017 insertions, 7072 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..f34bb25
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,34 @@
+/build
+/source/build
+*.mode1v3
+*.pbxuser
+*.pbxindex/
+!user.pbxuser
+/*.log
+*.user
+*.ncb
+*.suo
+*.pdb
+*.pdf
+*.html
+*.idb
+*.o
+*.lo
+*.a
+*.so
+*.so.0
+*.la
+.deps
+.libs
+*.pyc
+.DS_Store
+# Emacs and other editor backup files
+*~
+
+# builds on Windows
+Debug/
+Release/
+release/
+
+/install
+/docs \ No newline at end of file
diff --git a/Android.mk b/Android.mk
index 91d3baa..6453fcd 100644
--- a/Android.mk
+++ b/Android.mk
@@ -2,7 +2,7 @@
#
# Place the curl source (including this makefile) into external/curl/ in the
# Android source tree. Then build them with 'make curl' or just 'make libcurl'
-# from the Android root. Tested with Android 1.5
+# from the Android root. Tested with Android 1.5 and 2.1
#
# Note: you must first create a curl_config.h file by running configure in the
# Android environment. The only way I've found to do this is tricky. Perform a
@@ -12,26 +12,37 @@
# shown. Now, from the external/curl/ directory, run curl's normal configure
# command with flags that match what Android itself uses. This will mean
# putting the compiler directory into the PATH, putting the -I, -isystem and
-# -D options into CPPFLAGS, putting the -m, -f, -O and -nostdlib options into
-# CFLAGS, and putting the -Wl, -L and -l options into LIBS, along with the path
-# to the files libgcc.a, crtbegin_dynamic.o, and ccrtend_android.o. Remember
-# that the paths must be absolute since you will not be running configure from
-# the same directory as the Android make. The normal cross-compiler options
-# must also be set.
+# -D options into CPPFLAGS, putting the -W, -m, -f, -O and -nostdlib options
+# into CFLAGS, and putting the -Wl, -L and -l options into LIBS, along with the
+# path to the files libgcc.a, crtbegin_dynamic.o, and ccrtend_android.o.
+# Remember that the paths must be absolute since you will not be running
+# configure from the same directory as the Android make. The normal
+# cross-compiler options must also be set. Note that the -c, -o, -MD and
+# similar flags must not be set.
+#
+# To see all the LIBS options, you'll need to do the "showcommands" trick on an
+# executable that's already buildable and watch what flags Android uses to link
+# it (dhcpcd is a good choice to watch). You'll also want to add -L options to
+# LIBS that point to the out/.../obj/lib/ and out/.../obj/system/lib/
+# directories so that additional libraries can be found and used by curl.
#
# The end result will be a configure command that looks something like this
-# (the environment variable A is set to the Android root path):
+# (the environment variable A is set to the Android root path which makes the
+# command shorter):
#
# A=`realpath ../..` && \
# PATH="$A/prebuilt/linux-x86/toolchain/arm-eabi-X/bin:$PATH" \
# ./configure --host=arm-linux CC=arm-eabi-gcc \
# CPPFLAGS="-I $A/system/core/include ..." \
-# CFLAGS="-fno-exceptions -Wno-multichar ..." \
-# LIB="$A/prebuilt/linux-x86/toolchain/arm-eabi-X/lib/gcc/arm-eabi/X\
-# /interwork/libgcc.a ..." \
+# CFLAGS="-nostdlib -fno-exceptions -Wno-multichar ..." \
+# LIBS="$A/prebuilt/linux-x86/toolchain/arm-eabi-X/lib/gcc/arm-eabi/X\
+# /interwork/libgcc.a ..."
+#
+# Finally, copy the file COPYING to NOTICE so that the curl license gets put
+# into the right place (but see the note about this below).
#
# Dan Fandrich
-# September 2009
+# August 2010
LOCAL_PATH:= $(call my-dir)
@@ -55,20 +66,23 @@ CURL_HEADERS := \
types.h
LOCAL_SRC_FILES := $(addprefix lib/,$(CSOURCES))
-LOCAL_C_INCLUDES := \
- $(LOCAL_PATH)/include \
- external/openssl/include \
- external/zlib
-
+LOCAL_C_INCLUDES += $(LOCAL_PATH)/include/
LOCAL_CFLAGS += $(common_CFLAGS)
LOCAL_COPY_HEADERS_TO := libcurl/curl
LOCAL_COPY_HEADERS := $(addprefix include/curl/,$(CURL_HEADERS))
-#LOCAL_SHARED_LIBRARIES := libz
LOCAL_MODULE:= libcurl
-#include $(BUILD_STATIC_LIBRARY)
+# Copy the licence to a place where Android will find it.
+# Actually, this doesn't quite work because the build system searches
+# for NOTICE files before it gets to this point, so it will only be seen
+# on subsequent builds.
+ALL_PREBUILT += $(LOCAL_PATH)/NOTICE
+$(LOCAL_PATH)/NOTICE: $(LOCAL_PATH)/COPYING | $(ACP)
+ $(copy-file-to-target)
+
+include $(BUILD_STATIC_LIBRARY)
#########################
@@ -76,23 +90,17 @@ LOCAL_MODULE:= libcurl
include $(CLEAR_VARS)
include $(LOCAL_PATH)/src/Makefile.inc
-LOCAL_SRC_FILES := $(addprefix src/,$(CURL_SOURCES))
+LOCAL_SRC_FILES := $(addprefix src/,$(CURL_CFILES))
LOCAL_MODULE := curl
LOCAL_STATIC_LIBRARIES := libcurl
LOCAL_SYSTEM_SHARED_LIBRARIES := libc
-LOCAL_C_INCLUDES := \
- $(LOCAL_PATH)/include \
- $(LOCAL_PATH)/lib \
- external/openssl/include \
- external/zlib
-
-LOCAL_SHARED_LIBRARIES := libz libssl libcrypto
+LOCAL_C_INCLUDES += $(LOCAL_PATH)/include $(LOCAL_PATH)/lib
-# This will also need to include $(CURLX_ONES) in order to correctly build
-# a dynamic library
+# This may also need to include $(CURLX_ONES) in order to correctly link
+# if libcurl is changed to be built as a dynamic library
LOCAL_CFLAGS += $(common_CFLAGS)
-#include $(BUILD_EXECUTABLE)
+include $(BUILD_EXECUTABLE)
diff --git a/CHANGES b/CHANGES
new file mode 100644
index 0000000..a792aa5
--- /dev/null
+++ b/CHANGES
@@ -0,0 +1,4482 @@
+ _ _ ____ _
+ ___| | | | _ \| |
+ / __| | | | |_) | |
+ | (__| |_| | _ <| |___
+ \___|\___/|_| \_\_____|
+
+ Changelog
+
+Version 7.21.2 (12 Oct 2010)
+
+Daniel Stenberg (12 Oct 2010)
+- RELEASE-NOTES: synced with ecd624b8e774a85
+
+- [Julien Chaffraix brought this change]
+
+ CMake: Build fix.
+
+ Do not match the trailing '\n' in the regular expression as this would
+ make us dump a ) parenthesis on a new line.
+
+ This fixes the following error:
+
+ would get transformed into:
+
+ )
+
+ Bug: http://curl.haxx.se/mail/lib-2010-10/0065.html
+ Reported by: Dimitre Dimitrov
+
+- header_callback: strip off file path separated with backslashes
+
+ If the filename contains a backslash, only use filename portion. The
+ idea is that even systems that don't handle backslashes as path
+ separators probably want that path removed for convenience.
+
+ This flaw is considered a security problem, see the curl security
+ vulnerability http://curl.haxx.se/docs/adv_20101013.html
+
+Dan Fandrich (12 Oct 2010)
+- Get the curl source files for Amiga from Makefile.inc
+
+ This is similar to how it's done in the lib directory.
+ The Amiga build appears to have been broken for a year because
+ of a missing homedir.c
+
+- Added section on server-supplied names to security considerations
+
+Guenter Knauf (12 Oct 2010)
+- Fixed Watcom makefile.
+
+- Added build bits for librtmp / libssh2 to Watcom makefiles.
+
+- Added build bits for librtmp to NetWare makefiles.
+
+Daniel Stenberg (12 Oct 2010)
+- SFTP: more ignoring negative file sizes
+
+ As the change in 5f0ae7a0626cbe709 added a precaution against negative
+ file sizes that for some reason managed to get returned, this change now
+ introduces the same check at the second place in the code where the file
+ size from the libssh2 stat call is used.
+
+ This check might not be suitable for a 32 bit curl_off_t, but libssh2.h
+ assumes long long to work and to be 64 bit so I believe such a small
+ curl_off_t will be very unlikely to occur in the wild.
+
+- SMTP: debug output for no known auth mechanisms supported
+
+ ... and some minor source code whitespace edits
+
+- test: urlglob error messages have no extra newline anymore
+
+Guenter Knauf (11 Oct 2010)
+- Added build bits for librtmp to MingW32 makefiles.
+
+Daniel Stenberg (8 Oct 2010)
+- RELEASE-NOTES: synced with 61f4cdb73ae4
+
+- globbing: fix crash on unballanced open brace
+
+ Having an open brace without a closing brace caused a segfault.
+
+ Having a closing brace too many caused a silent error to occur, which
+ caused curl to bail out and return an error code but no error message
+ was shown. It does now!
+
+ All error message outputs no longer wrongly get _two_ newlines written
+ after the error message.
+
+ Reported by: Vlad Ureche
+ Bug: http://curl.haxx.se/bug/view.cgi?id=3083942
+
+- [Dan Locks brought this change]
+
+ libcurl.m4: AC_PATH_PROG fixes
+
+ The invocation of autoconf's AC_PATH_PROG( ) is not quite right for
+ finding curl-config. This fix corrects the negative case (where
+ curl-config is not found).
+
+- FAQ: added "How do I submit my patch?"
+
+- examples: use example.com in example URLs
+
+- TODO-RELEASE: libidn problem not repeatable
+
+ "261 - configure and libidn" is removed from the list since Julien
+ Chaffraix tried to repeat it but failed and the reporter did not return
+ to provide further details.
+
+ Reported by: Lyndon Hill
+ Bug: http://curl.haxx.se/mail/lib-2010-07/0029.html
+
+- libcurl.m4: mention argument is PREFIX
+
+ The macro provides a --with-libcurl option that expects a PREFIX to be
+ specified and not actually a "directory" in which libcurl will be found.
+ This now spells that out more clearly.
+
+ Reported by: Dan Locks
+ Bug: http://curl.haxx.se/bug/view.cgi?id=3079891
+
+Guenter Knauf (3 Oct 2010)
+- Some NetWare makefile tweaks.
+
+ Renamed SDK_* to NDK_*; made NDK_* defines overwriteable from
+ environment; removed now obsolete YACC macro;
+ moved some curl_config.h defines to IPv6 section since they
+ are only needed when IPv6 is enabled - this makes libcurl compile
+ with older NDKs too which were not IPv6-aware.
+
+Daniel Stenberg (2 Oct 2010)
+- TODO-RELEASE: 416 error fixed
+
+ "3076808 Requests fail silently following a 416 error" done
+
+Julien Chaffraix (2 Oct 2010)
+- krb5-gssapi: Removed a memory leak in krb5_auth.
+
+ We forgot to release the buffer passed to gss_init_sec_context.
+
+ The previous logic was difficult to read as we were reusing the same
+ variable (gssbuf) for both input buffer and output buffer. Splitted the
+ logic in 2 variables to better underline who needs to be released.
+ Also made the code break at 80 lines.
+
+- krb5-gssapi: Made the function always return a value.
+
+ kr5_auth missed a final 'return' statement. This is not an error in
+ gcc but can lead to potential bugs.
+
+- krb5-gssapi: Delete the GSS-API context.
+
+ This fixes a memory leak related to the GSS-API code.
+
+ Added a krb5_init and krb5_end functions. Also removed a work-around
+ the lack of proper initialization of the GSS-API context.
+
+Daniel Stenberg (2 Oct 2010)
+- HTTP: remove special case for 416
+
+ It was pointed out that the special case libcurl did for 416 was
+ incorrect and wrong. 416 is not really different to other errors so the
+ response body must be handled like for other errors/http responses.
+
+ Reported by: Chris Smowton
+ Bug: http://curl.haxx.se/bug/view.cgi?id=3076808
+
+- [Dan Fandrich brought this change]
+
+ sws: Added writedelay HTTP server command
+
+ This delays between write operations, hopefully making it easier
+ to spot problems where libcurl doesn't flush the socket properly
+ before waiting for the next response.
+
+- TODO-RELEASE: no bug in ftp_nextconnect
+
+ The issue named "266 - Bug in ftp_nextconnect?" was deemed to not be a
+ bug and instead resulted in clarified docs.
+
+- curl_easy_setopt.3: CURLOPT_DIRLISTONLY implies dir list
+
+ Make it explicit that setting CURLOPT_DIRLISTONLY to 1 will make libcurl
+ to list the directory.
+
+- RELEASE-NOTES: synced up to 588402585bae
+
+- TODO-RELEASE: move new features to next release
+
+- README.ares: we know require c-ares 1.6.0
+
+- SFTP: avoid downloading negative sizes!
+
+ It is still not clarified exactly why this happens, but libssh2
+ sometimes report a negative file size for the remote SFTP file and that
+ deeply confuses libcurl (or crashes it) so this precaution is added to
+ avoid badness.
+
+ Reported by: Ernest Beinrohr
+ Bug: http://curl.haxx.se/bug/view.cgi?id=3076430
+
+- TODO-RELEASE: drop curl_easy_setoptv
+
+ I haven't read any really convincing arguments for adding it
+
+- [Dirk Manske brought this change]
+
+ multi & hiper examples: updates and cleanups
+
+ all multi and hiper examples:
+
+ * don't loop curl_multi_perform calls, that was <7.20.0 style, currently
+ the exported multi functions will not return CURLM_CALL_MULTI_PERFORM
+
+ all hiper examples:
+ * renamed check_run_count to check_multi_info
+ * don't compare current running handle count with previous value, this
+ was the wrong way to check for finished requests, simply call
+ curl_multi_info_read
+ * it's also safe to call curl_multi_remove_handle inside the
+ curl_multi_info_read loop.
+
+ ghiper.c:
+ * replaced curl_multi_socket (that function is marked as obsolete) calls
+ with curl_multi_socket_action calls (as in hiperfifo.c and
+ evhiperfifo.c)
+
+ ghiper.c and evhiperfifo.c:
+ * be smart as hiperfifo.c, don't do uncessary curl_multi_* calls in
+ new_conn and main
+
+- TODO-RELEASE: one fixed, one postponed, one added
+
+ As we're already in feature freeze, I pushed the feature onwards.
+
+Dan Fandrich (29 Sep 2010)
+- Renamed test1204 to test1117 to move it into the normal range
+
+Patrick Monnerat (29 Sep 2010)
+- Add gopher protocol definition to ILE/RPG binding.
+ OS400 compile script in test dir updated for chkhostname.
+
+Julien Chaffraix (28 Sep 2010)
+- krb5-gssapi: Remove several memory leaks.
+
+ Remove a leak seen on Kerberos/MIT (gss_OID is copied internally and
+ we were leaking it). Now we just pass NULL as advised in RFC2744.
+
+ |tmp| was never set back to buf->data.
+
+ Cleaned up Curl_sec_end to take into account failure in Curl_sec_login
+ (where conn->mech would be NULL but not conn->app_data or
+ conn->in_buffer->data).
+
+- security.c: Remove Curl_sec_fflush_fd.
+
+ The current implementation would make us send wrong data on a closed
+ socket. We don't buffer our data so the method can be safely removed.
+
+- security.c: We should always register the socket handler.
+
+ Following a change in the way socket handler are registered, the custom
+ recv and send method were conditionaly registered.
+ We need to register them everytime to handle the ftp security
+ extensions.
+
+ Re-added the clear text handling in sec_recv.
+
+- security.c: Fix Curl_sec_login after rewrite.
+
+ Curl_sec_login was returning the opposite result that the code in ftp.c
+ was expecting. Simplified the return code (using a CURLcode) so to see
+ more clearly what is going on.
+
+- security.c: Readd the '\n' to the infof() calls.
+
+ They are not automatically added and make the output of the verbose
+ mode a lot more readable.
+
+- security.c: Fix typo (PSBZ -> PBSZ)
+
+- security.c: Fix ftp_send_command.
+
+ My use of va_args was completely wrong. Fixed the usage so that
+ we send the right commands!
+
+Daniel Stenberg (28 Sep 2010)
+- curl_easy_escape: don't escape "unreserved" characters
+
+ According to RFC3986 section 2.3 the letters -, ., _ and ~ should not be
+ percent-encoded.
+
+ Reported by: Miguel Diaz
+ Bug: http://curl.haxx.se/mail/lib-2010-09/0227.html
+
+- multi: don't expire timeouts at disonnect or done
+
+ The functions Curl_disconnect() and Curl_done() are both used within the
+ scope of a single request so they cannot be allowed to use
+ Curl_expire(... 0) to kill all timeouts as there are some timeouts that
+ are set before a request that are supposed to remain until the request
+ is done.
+
+ The timeouts are now instead cleared at curl_easy_cleanup() and when the
+ multi state machine changes a handle to the complete state.
+
+Dan Fandrich (27 Sep 2010)
+- Changed the TPF make file to get source files from Makefile.inc
+
+ Patch was fixed and validated by David McCreedy.
+
+- Added test case 1204 to test HTTP range failure
+
+ This is an attempt to reproduce bug #3076808
+
+Daniel Stenberg (27 Sep 2010)
+- [Dirk Manske brought this change]
+
+ multi_runsingle: set timeout error messages
+
+ With the latest changes to fix the timeout handling with multi interface
+ we lost the timeout error messages. This patch brings them back.
+
+- TODO-RELEASE: updated list of issues to work on
+
+- parsedate: allow time specified without seconds
+
+ The date format in RFC822 allows that the seconds part of HH:MM:SS is
+ left out, but this function didn't allow it. This change also includes a
+ modified test case that makes sure that this now works.
+
+ Reported by: Matt Ford
+ Bug: http://curl.haxx.se/bug/view.cgi?id=3076529
+
+- TFTP: re-indented the source code
+
+ Just made sure that the good old curl indentation style is used all over
+ this file.
+
+- [Tim Newsome brought this change]
+
+ TFTP: Work around tftpd-hpa upload bug
+
+ tftpd-hpa has a bug where it will send an incorrect ack when the block
+ counter wraps and tftp options have been sent. Work around that by
+ accepting an ack for 65535 when we're expecting one for 0.
+
+- Revert "security.c: buffer_read various fixes."
+
+ This reverts commit fbb38de415b7bb7d743e53a7b4b887ffb12b3e5b.
+
+- security.c: removed superfluous parentheses
+
+ And also removed the FIXME where memory was zeroed just before freed,
+ and some other minor whitespace changes.
+
+- [Julien Chaffraix brought this change]
+
+ security.c: Update the #include statements after the rewrite.
+
+- [Julien Chaffraix brought this change]
+
+ security.c: sec_write tweaks
+
+ - |fd| is now a curl_socket_t and |len| a size_t to avoid conversions.
+ - Added 2 FIXMEs about the 2 unsigned -> signed conversions.
+ - Included 2 minor changes to Curl_sec_end.
+
+- [Julien Chaffraix brought this change]
+
+ security.c: _sec_send tweaks
+
+ - Renamed the method to sec_send now that we
+ renamed sec_send to do_sec_send.
+ - Some more variable renaming.
+
+- [Julien Chaffraix brought this change]
+
+ security.c: sec_read tweaks
+
+ - Renamed the function to sec_recv.
+ - Renamed the parameters and variable to match the rest of the code.
+
+- [Julien Chaffraix brought this change]
+
+ security.c: Curl_sec_fflush_fd tweaks
+
+ - Use an early return as it makes the code more readable.
+ - Added a FIXME about a conversion.
+
+- [Julien Chaffraix brought this change]
+
+ security.c: sec_send tweaks
+
+ - Renamed it to do_sec_send as it is the function doing the actual
+ transfer.
+ - Do not return any values as no one was checking it and it never
+ reported a failure (added a FIXME about checking for errors).
+ - Renamed the variables to make their use more specific.
+ - Removed some casts (int -> curl_socket_t, ...)
+ - Avoid doing the htnl <-> nthl twice by caching the 2 results.
+
+- [Julien Chaffraix brought this change]
+
+ security.c: Curl_sec_read_msg tweaks
+
+ - Renamed the variables name to better match their intend.
+ - Unified the |decoded_len| checks.
+ - Added some FIXMEs to flag some improvement that did not go in this
+ change.
+
+- [Julien Chaffraix brought this change]
+
+ security.c: Curl_sec_set_protection_level tweaking
+
+ - Removed sec_prot_internal as it is now inlined in the function (this removed
+ a redundant check).
+ - Changed the prototype to return an error code.
+ - Updated the method to use the new ftp_send_command function.
+ - Added a level_to_char helper method to avoid relying on the compiler's
+ bound checks. This default to the maximum security we have in case of a
+ wrong input.
+
+- [Julien Chaffraix brought this change]
+
+ security.c: factored the logic from Curl_sec_login into a dedicated method that better reflect its intent.
+
+ Introduced a helper method ftp_send_command that synchronously send
+ an FTP query.
+
+- [Julien Chaffraix brought this change]
+
+ security.c: Remove out_buffer as it was never written into.
+
+- [Julien Chaffraix brought this change]
+
+ security.c: buffer_read various fixes.
+
+ Tighten the type of the |data| parameter to avoid a cast. Also made
+ it const as we should not modify it.
+
+ Added a DEBUGASSERT on the size to be written while changing it.
+
+- [Julien Chaffraix brought this change]
+
+ security.c: Made block_write return a CURLcode.
+
+ While doing so, renamed it to socket_write to better match its
+ function.
+
+- [Julien Chaffraix brought this change]
+
+ security.c: Made block_read and sec_get_data return CURLcode.
+
+ To do so, made block_read call Curl_read_plain instead of read.
+
+ While changing them renamed block_read to socket_read and sec_get_data
+ to read_data to better match their function.
+
+ Also fixed a potential memory leak in block_read.
+
+- [Julien Chaffraix brought this change]
+
+ Security.c: Fix headers guard to match the rest of the code.
+
+- [Julien Chaffraix brought this change]
+
+ configure: Fix the LDAPS disable message
+
+ ... for example when LDAP is not compiled.
+
+ Fixed the logic to match the rest of the options' message that is we
+ update the default message only if the option is not disabled after the
+ different checks.
+
+ Reported by: Guenter Knauf
+
+- RELEASE-NOTES: sync with 8665d4e5 and c-ares >= 1.6.0 note
+
+- parse_remote_port: ignore colons without port number
+
+ Obviously, browsers ignore a colon without a following port number. Both
+ Firefox and Chrome just removes the colon for such URLs. This change
+ does not remove the colon for URLs sent over a HTTP proxy, so we should
+ consider doing that change as well.
+
+ Reported by: github user 'kreshano'
+
+- RELEASE-NOTES: in sync with 19f45eaa799
+
+- duphandle: use ares_dup()
+
+ curl_easy_duphandle() was not properly duping the ares channel. The
+ ares_dup() function was introduced in c-ares 1.6.0 so by starting to use
+ this function we also raise the bar and require c-ares >= 1.6.0
+ (released Dec 9, 2008) for such builds.
+
+ Reported by: Ning Dong
+ Bug: http://curl.haxx.se/mail/lib-2010-08/0318.html
+
+- [Hendrik Visage brought this change]
+
+ MacOSX-Framework: updates for Snowleopard
+
+ 1) PPC64 appears to be an 10.5 only supported architecture, so I
+ forced 10.5 for 64bit if there is a need for PPC64, else 64bit only
+ does x86_64
+
+ 2) proper "make clean" after every ./configure. fixes a bug where
+ subsequent runs the 32bit do not get compiled
+
+ 3) Added a version numbering curl-$VERSION} rather than the "stock standard" A
+
+- RELEASE-NOTES: synced with 5fcc4332d62fe
+
+ Removed the duplicate entry of Kamil in the credits.
+
+- configure: don't enable RTMP if the lib detect fails
+
+ librtmp is often statically linked and using sub dependencies like
+ OpenSSL, so we need to make sure we can actually link with it properly
+ before enabling it. Otherwise we easily end up trying to link with a
+ RTMP lib that fails.
+
+- TODO: added 8.4 non-gcrypt under GnuTLS
+
+ We must not assume gcrypt just because of GnuTLS
+
+- configure: check for gcrypt if using GnuTLS
+
+ 1 - libcurl assumes that there are gcrypt functions available when
+ GnuTLS is.
+
+ 2 - GnuTLS can be built to use libnettle instead as crypto library,
+ which breaks assumption (1)
+
+ This change makes configure make sure that if GnuTLS is requested and
+ detected, it also makes sure that gcrypt is present or it errors
+ out. This is mostly a way to make the user more aware of this flaw, the
+ correct fix would be to detect which crypto layer that is in use and
+ adapt our code to use that instead of blindly assuming gcrypt.
+
+ Reported by: Michal Gorny
+ Bug: http://curl.haxx.se/bug/view.cgi?id=3071038
+
+- RELEASE-NOTES: sync from d2a7fd2fe65b to HEAD
+
+- FTP: fix bad check of Curl_timeleft() return code
+
+ When it returns 0 it means no timeout. Only a negative value means that
+ we're out of time.
+
+- LDAP: moved variable declaration to avoid compiler warn
+
+ If built without HTTP or proxy support it would cause a compiler warning
+ due to the unused variable. I moved the declaration of it into the only
+ scope it is used.
+
+Tor Arntsen (18 Sep 2010)
+- LDAP: Use FALSE instead of bool_false when setting bits.close
+
+ bool_false is the internal name used in the setup_once.h definition
+ we fall back to for non-C99 non-stdbool systems, it's not the actual
+ name to use in assignments (we use bool_false, bool_true there to
+ avoid global namespace problems, see comment in setup_once.h).
+ The correct C99 value to use is 'false', but let's use FALSE as
+ used elsewhere when assigning to bits.close. FALSE is set equal
+ to 'false' in setup_once.h when possible.
+
+ This fixes a build problem on C99 targets.
+
+- LDAP: Add missing declaration for 'result'
+
+Daniel Stenberg (18 Sep 2010)
+- [Mauro Iorio brought this change]
+
+ LDAP: Support for tunnelling queries through HTTP proxy
+
+ As of curl-7.21.1 tunnelling ldap queries through HTTP Proxies is not
+ supported. Actually if --proxytunnel command-line option (or equivalent
+ CURLOPT_HTTPPROXYTUNNEL) is used for ldap queries like
+ ldap://ldap.my.server.com/... You are unable to successfully execute the
+ query. In facts ldap_*_bind is executed directly against the ldap server
+ and proxy is totally ignored. This is true for both openLDAP and
+ Microsoft LDAP API.
+
+ Step to reproduce the error:
+ Just launch "curl --proxytunnel --proxy 192.168.1.1:8080
+ ldap://ldap.my.server.com/dc=... "
+
+ This fix adds an invocation to Curl_proxyCONNECT against the provided
+ proxy address and on successful "CONNECT" it tunnels ldap query to the
+ final ldap server through the HTTP proxy. As far as I know Microsoft
+ LDAP APIs don't permit tunnelling in any way so the patch provided is
+ for OpenLDAP only. The patch has been developed against OpenLDAP 2.4.23
+ and has been tested with Microsoft ISA Server 2006 and works properly
+ with basic, digest and NTLM authentication.
+
+- timeout: use the correct start value as offset
+
+ Rodric provide an awesome recipe that proved libcurl didn't timeout at
+ the requested time - it instead often timed out at [connect time] +
+ [timeout time] instead of the documented and intended [timeout time]
+ only. This bug was due to the code using the wrong base offset when
+ comparing against "now". I could also take the oppurtinity to simplify
+ the code by properly using of the generic help function for this:
+ Curl_timeleft.
+
+ Reported by: Rodric Glaser
+ Bug: http://curl.haxx.se/bug/view.cgi?id=3061535
+
+- Curl_timeleft: avoid returning "no timeout" by mistake
+
+ As this function uses return code 0 to mean that there is no timeout, it
+ needs to check that it doesn't return a time left value that is exactly
+ zero. It could lead to libcurl doing an extra 1000 ms select() call and
+ thus not timing out as accurately as it should.
+
+ I fell over this bug when working on the bug 3061535 but this fix does
+ not correct that problem alone, although this is a problem that needs to
+ be fixed.
+
+ Reported by: Rodric Glaser
+ Bug: http://curl.haxx.se/bug/view.cgi?id=3061535
+
+- whitespace: unified source
+
+ if ( => if(
+ while ( => while(
+
+ and some other changes in the similar spirit, trying to make the
+ whole file use the same style
+
+- remote-header-name: don't output filename when NULL
+
+- [James Bursa brought this change]
+
+ TheArtOfHttpScripting: use long options
+
+- [James Bursa brought this change]
+
+ getinmemory: make the example easier to follow
+
+ 1. Remove the comment warning that it's "not been verified to work". It
+ works with no problems in my testing.
+
+ 2. Remove 2 unnecessary includes.
+
+ 3. Remove the myrealloc(). Initialize chunk.memory with malloc() instead
+ of NULL. The comments for these two parts contradicted each other.
+
+ 4. Handle out of memory from realloc() instead of continuing.
+
+ 5. Print a brief status message at the end.
+
+- multi: don't do extra expire calls for the connection
+
+ The timeout is set for the connect phase already at the start of the
+ request so we should not add a new one, and we MUST not set expire to 0
+ as that will remove any other potentially existing timeouts.
+
+- [Peter Pentchev brought this change]
+
+ Fix a bashism: test a = b is more portable than ==.
+
+- glob_word: remove a check that is always false
+
+- inflate_stream: remove redundant check that is always true
+
+- digest: make it clear the condition is always true
+
+- ssluse: removed redundant check that is always true
+
+Dan Fandrich (11 Sep 2010)
+- Link curl and the test apps with -lrt explicitly when necessary
+
+ When curl calls a function from that library then it needs to
+ explicitly link to the library instead of piggybacking on
+ libcurl's own dependency. Without this, GNU ld with the
+ --no-add-needed flag fails when linking (which Fedora now does
+ by default).
+
+ Reported by: Quanah Gibson-Mount
+ Bug: http://curl.haxx.se/mail/lib-2010-09/0085.html
+
+- Mention the Debian Popularity Contest
+
+Tor Arntsen (9 Sep 2010)
+- test565: Don't hardcode IP:PORT
+
+ Use %HOSTIP:%HTTPPORT instead of 127.0.0.1:8990 so that
+ verification works if the baseport change option is used
+ when executing runtests.pl.
+
+Daniel Stenberg (9 Sep 2010)
+- curl.1: updated protocols and polished language
+
+- FAQ: CURL_STATICLIB for visual studio users
+
+ Clarified as it isn't used with a -D option for them.
+
+ Reported by: Artfunkel
+ Bug: http://curl.haxx.se/bug/view.cgi?id=3060381
+
+- FAQ: updated and added host with custom IP question
+
+ Added "3.19 How do I get HTTP from a host using a specific IP address?"
+ and updated some stuff about certs etc.
+
+- chunky parser: only rewind if needed
+
+ The code reading chunked encoding attempts to rewind the code if it had
+ read more data than the chunky parser consumes. The rewinding can fail
+ and it will then cause an error. This change now makes the rewinding
+ only happen if pipelining is in use - as that's the only time it really
+ needs to be done.
+
+ Bug: http://curl.haxx.se/mail/lib-2010-08/0297.html
+ Reported by: Ron Parker
+
+Kamil Dudka (6 Sep 2010)
+- rtsp: avoid SIGSEGV on malformed header
+
+- rtsp: avoid SIGSEGV on malformed header
+
+Daniel Stenberg (6 Sep 2010)
+- warning: fix conversion to 'int' from 'size_t'
+
+- portabilty: use proper variable type to hold sockets
+
+ Curl_getconnectinfo() is changed to return a proper curl_socket_t for
+ the last socket so that it'll work more portably (and cause less
+ compiler warnings).
+
+Guenter Knauf (3 Sep 2010)
+- Trial to fix another compiler warning with braces.
+
+Dan Fandrich (2 Sep 2010)
+- Use checkprefix() to compare protocol-specific strings
+
+ Otherwise, there could be problems running in certain locales.
+
+Guenter Knauf (2 Sep 2010)
+- Moved S_ISREG define to setup as suggested by Dan.
+
+- Use own typedef as workaround for broken sspi.h header (f.e. Watcom).
+
+- Added some hacks in order to build with VC from git.
+
+ Adam Light posted this patch to the list which enables builds from
+ git with VC versions other than vc6; also he added a vc10 target.
+
+- Added S_ISREG define for Win32.
+
+Daniel Stenberg (1 Sep 2010)
+- multi: fixes for timing out handles
+
+ Add a timeout check for handles in the state machine so that they will
+ timeout in all states disregarding what actions that may or may not
+ happen.
+
+ Fixed a bug in socket_action introduced recently when looping over timed
+ out handles: it wouldn't assign the 'data' variable and thus it wouldn't
+ properly take care of handles.
+
+ In the update_timer function, the code now checks if the timeout has
+ been removed and then it tells the application. Previously it would
+ always let the remaining timeout(s) just linger to expire later on.
+
+- threaded resolver: no more expire 0 calls
+
+ Curl_expire() set to 0 expires ALL timeouts so it should only be called
+ if we truly and really want to remove all timeouts for the handle.
+
+- resolve_server: simplify code
+
+ Make use of the helper function Curl_timeleft() instead of duplicating
+ code.
+
+- multi: make sure the next timeout is used when one expires
+
+ Each easy handle has a list of timeouts, so as soon as the main timeout
+ for a handle expires, we must make sure to get the next entry from the
+ list and re-add the handle to the splay tree.
+
+ This was attempted previously but was done poorly in my commit
+ 232ad6549a68450.
+
+Dan Fandrich (30 Aug 2010)
+- Added proxy keyword to allow skipping test in proxyless configs
+
+Daniel Stenberg (29 Aug 2010)
+- multi: set timeouts when transfer begins
+
+ When a new transfer is about to start we now set the proper timeouts to
+ expire for the multi interface if they are set for the handle. This is a
+ follow-up bugfix to make sure that easy handles timeout properly when
+ the times expire and the multi interface is used. This also improves
+ curl_multi_timeout().
+
+- CURLOPT_DIRLISTONLY: don't use with CURLOPT_WILDCARDMATCH
+
+- FAQ: update list of supported protocols
+
+- [Fabian Keil brought this change]
+
+ In the m4 detection line, factor out the 2>dev/null
+
+- [Fabian Keil brought this change]
+
+ If m4 doesn't support --version, try if gm4 does.
+
+- [Fabian Keil brought this change]
+
+ If the m4 version isn't recognized at all, just say so
+
+ 'm4 version found. You need a GNU m4 installed!' is a bit confusing.
+
+- HISTORY: mention the gopher story
+
+Dan Fandrich (25 Aug 2010)
+- Tweaked some test data files
+
+ Fixed some issues that caused xmllint failures, added features
+ and keywords, fixed some quotes and removed some <strip> sections
+ that unnecessarily limited test checking.
+
+- Added new source files to Symbian and TPF makefiles
+
+Daniel Stenberg (25 Aug 2010)
+- RELEASE-NOTES: sync from b980c9a02 to HEAD
+
+- Makefile: add gopher.c file to build
+
+ As the VC and RISCOS makefiles don't use the .inc file
+
+- runtests: fix uninitialized variable warning
+
+- gopher tests: revert parts of gopher in the pingpong server
+
+ Introduced in the initial gopher commits, there was added logic to do
+ GOPHER test serving in the pingpong server but as it resembles HTTP much
+ more than FTP or SMTP, the gopher testing has been moved over to instead
+ use the sws (HTTP) server. This change simply removes unused code.
+
+- gopher tests: use sws and adjusted to more standard style
+
+- sws: added basic gopher support
+
+- gopher: enable the header callback/verbosity
+
+- gopher: fix test case line endings
+
+ Patches over email very easily lose CRLF line endings in files otherwise
+ LF-only so I had to put them back where needed.
+
+- gopher: fix memory leak and busyloop
+
+ The fix for the busyloop really only is a temporary work-around. It
+ causes a BLOCKING behavior which is a NO-NO. This function should rather
+ be split up in a do and a doing piece where the pieces that aren't
+ possible to send now will be sent in the doing function repeatedly until
+ the entire request is sent.
+
+- [Cameron Kaiser brought this change]
+
+ Gopher using Curl_write; test suite (4 tests)
+
+- [Cameron Kaiser brought this change]
+
+ Remove url.c test
+
+- [Cameron Kaiser brought this change]
+
+ Forgot gopher.h in Makefile.inc
+
+- [Cameron Kaiser brought this change]
+
+ Gopher protocol support (initial release)
+
+- http: handle trailer headers in all chunked responses
+
+ HTTP allows that a server sends trailing headers after all the chunks
+ have been sent WITHOUT signalling their presence in the first response
+ headers. The "Trailer:" header is only a SHOULD there and as we need to
+ handle the situation even without that header I made libcurl ignore
+ Trailer: completely.
+
+ Test case 1116 was added to verify this and to make sure we handle more
+ than one trailer header properly.
+
+ Reported by: Patrick McManus
+ Bug: http://curl.haxx.se/bug/view.cgi?id=3052450
+
+- TODO: we now support RTMP
+
+- TODO: done "NTLM with other crypto functions"
+
+ Since NTLM was made to work with the NSS API as well, the primary SSL
+ alternatives will be built with NTLM support in libcurl.
+
+- TODO: fixed "Make curl_multi_info_read faster"
+
+ It is really fast now
+
+Dan Fandrich (24 Aug 2010)
+- Fixed a NULL pointer dereference in form posting
+
+ It was introduced in commit eeb2cb05 along with the -F type=
+ change. Also fixed a typo in the name of the magic filename=
+ parameter. Tweaked tests 39 and 173 to better test this path.
+
+Daniel Stenberg (24 Aug 2010)
+- [Ben Greear brought this change]
+
+ multi: Fix compile warning on 64-bit systems
+
+Dan Fandrich (23 Aug 2010)
+- Mention PolarSSL in tutorial & add some URLs to INSTALL
+
+Daniel Stenberg (23 Aug 2010)
+- RESUME_FROM: clarify what ftp uploads do
+
+ The numerical value passed to CURLOPT_RESUME_FROM for FTP uploads is
+ interpreted and used as position where to resume the _reading_ of the
+ local file and it will "blindly" append that data on the remote
+ file. This was certainly not clear in the docs previously.
+
+ Reported by: catalin
+ Bug: http://curl.haxx.se/bug/view.cgi?id=3048174
+
+- [Dirk Manske brought this change]
+
+ Curl_is_connected: use correct errno
+
+ The correctly extracted errno contents were mistakenly overwritten by a newer
+ value that wasn't the correct error value.
+
+ Bug: http://curl.haxx.se/mail/lib-2010-08/0242.html
+
+- cmdline: make -F type= accept ;charset=
+
+ The -F option allows some custom parameters within the given string, and
+ those strings are separated with semicolons. You can for example specify
+ "name=daniel;type=text/plain" to set content-type for the
+ field. However, the use of semicolons like that made it not work fine if
+ you specified one within the content-type, like for:
+ "name=daniel;type=text/plain;charset=UTF-8"
+ ... as the second one would be seen as a separator and "charset" is no
+ parameter curl knows anything about so it was just silently discarded.
+
+ The new logic now checks if the semicolon and following keyword looks
+ like a parameter it knows about and if it isn't it is assumed to be
+ meant to be used within the content-type string itself.
+
+ I modified test case 186 to verify that this works as intended.
+
+ Reported by: Larry Stone
+ Bug: http://curl.haxx.se/bug/view.cgi?id=3048988
+
+Guenter Knauf (20 Aug 2010)
+- Added mk-ca-bundle.vbs script.
+
+ The script works exactly same as the Perl one except for one thing:
+ when the text descriptions generated with openssl are included then
+ the md5 fingerprints are missing; seems openssl has either a bug or
+ a feature which prints the md5 fingerprint output to stdout instead
+ of writing them to specified file; this script could here do the same
+ as what the Perl scripr does (redirect stdout into file) but this
+ makes the script take up double the time because it needs to launch
+ cmd.exe 140 times (fo each openssl call). So I think for now we just
+ ommit the md5 fingerprints, and see if openssl will be fixed.
+
+- Trial to fix win32 autobuilds.
+
+ It seems that its time to look at some better ideas for the win32
+ non-configure builds; probably a prebuild target which copies
+ config-win32.h to curl_config.h and appends also then feature
+ defines like USE_ARES.
+
+Dan Fandrich (19 Aug 2010)
+- Use the S_ISREG macro to determine what is a regular file
+
+Kamil Dudka (19 Aug 2010)
+- AC_INIT: avoid a warning with autoconf 2.66
+
+ It was complaining about the '=>' operator, introduced in e3fc0d5.
+
+Dan Fandrich (18 Aug 2010)
+- Fixed a memory leak during OOM in the multi timeout code
+
+- Removed a C99ism & made an array const
+
+Daniel Stenberg (19 Aug 2010)
+- [Julien Chaffraix brought this change]
+
+ test: added test 579 to verify progress callback for chunked post
+
+ The 66 bytes checked are those 38 bytes with the chunked encoding
+ headers added: 8+8+10+35+5 = 66
+
+ The three-letter words become 8 bytes on the wire because they are sent
+ like: "3\r\none\r\n"
+
+ ... and there's the trailing 5 bytes write after the four lines since
+ the final chunk is sent (which is "0\r\n\r\n").
+
+- multi: avoid sending multiple complete messages
+
+ I fell over this bug report that mentioned that libcurl could wrongly
+ send more than one complete messages at the end of a transfer. Reading
+ the code confirmed this, so I've added a new multi state to make it not
+ happen. The mentioned bug report was made by Brad Jorsch but is (oddly
+ enough) filed in Debian's bug tracker for the "wmweather+" tool.
+
+ Bug: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=593390
+
+- FAQ: update the list of supported protocols
+
+- FAQ: added blurb about ECCN
+
+ "1.13 curl's ECCN number" is a new section mostly made up from
+ Alessandro Vesely's very informative ML post on the subject:
+ http://curl.haxx.se/mail/lib-2008-03/0251.html
+
+Guenter Knauf (18 Aug 2010)
+- It is sufficient to pipe stderr to NUL to get rid of the nasty messages.
+
+- Added SSPI build to Watcom makefile.
+
+Daniel Stenberg (16 Aug 2010)
+- [Julien Chaffraix brought this change]
+
+ progress: callback for POSTs less than MAX_INITIAL_POST_SIZE
+
+ Add a call to Curl_pgrsSetUploadSize in this case valided by a test
+ case.
+
+ Reported by: Ðикита Дорохин.
+ Bug: http://curl.haxx.se/mail/lib-2010-04/0173.html
+
+Dan Fandrich (16 Aug 2010)
+- Make the LD_PRELOAD path absolute in the tests that use it
+
+ In some situations, libtool will change directories and perform
+ a link step before executing the libtest test app. Since
+ LD_PRELOAD is in effect for this entire process, the path to the
+ binary must be absolute so it will be valid no matter in which
+ directory the app is running.
+
+Daniel Stenberg (16 Aug 2010)
+- negotiation: Wrong proxy authorization
+
+ There's an error in http_negotiation.c where a mistake is using only
+ userpwd even for proxy requests. Ludek provided a patch, but I decided
+ to write the fix slightly different using his patch as inspiration.
+
+ Reported by: Ludek Finstrle
+ Bug: http://curl.haxx.se/bug/view.cgi?id=3046066
+
+Dan Fandrich (16 Aug 2010)
+- Clear stdout and stderr files on each test run
+
+ This allows a test to be run several times in the same test
+ session even when the -k option is given.
+
+Guenter Knauf (15 Aug 2010)
+- Syncroniszed vclean target; fixed some comments.
+
+Daniel Stenberg (15 Aug 2010)
+- THANKS: added contributors from 7.21.1
+
+- multi: two fixes done
+
+- multi: use timeouts properly for MAX_RECV/SEND_SPEED
+
+ When detecting that the send or recv speed, the multi interface changes
+ state to TOOFAST and previously there was no timeout set that would
+ force a recheck but it would rely on the application to somehow call
+ libcurl anyway. This now sets a timeout for a suitable future time to
+ check again if the average transfer speed is then below the threshold
+ again.
+
+- multi: support timeouts
+
+ Curl_expire() is now expanded to hold a list of timeouts for each easy
+ handle. Only the closest in time will be the one used as the primary
+ timeout for the handle and will be used for the splay tree (which sorts
+ and lists all handles within the multi handle).
+
+ When the main timeout has triggered/expired, the next timeout in time
+ that is kept in the list will be moved to the main timeout position and
+ used as the key to splay with. This way, all timeouts that are set with
+ Curl_expire() internally will end up as a proper timeout. Previously any
+ Curl_expire() that set a _later_ timeout than what was already set was
+ just silently ignored and thus missed.
+
+ Setting Curl_expire() with timeout 0 (zero) will cancel all previously
+ added timeouts.
+
+ Corrects known bug #62.
+
+- Curl_llist_insert_next: allow insertion first in the list
+
+ When we specify the "insert after" entry as NULL, this function now
+ inserts the new entry first in the list.
+
+- multi: make curl_multi_info_read perform O(1)
+
+ Instead of looping over all attached easy handles, this now keeps a list
+ of messages in the multi handle. It allows curl_multi_info_read() to
+ perform O(1) no matter how many easy handles that are handled. This is
+ of importance since this function may be polled very frequently by apps
+ using the multi interface.
+
+Kamil Dudka (15 Aug 2010)
+- curl -T: ignore file size of special files
+
+ original bug report at https://bugzilla.redhat.com/622520
+
+Dan Fandrich (13 Aug 2010)
+- Reset environment variables before starting servers
+
+ Otherwise, variables from tests could affect the servers
+ themselves.
+
+Kamil Dudka (12 Aug 2010)
+- typecheck-gcc: work around gcc upstream bug #32061
+
+ original bug report at https://bugzilla.redhat.com/617757
+
+Daniel Stenberg (11 Aug 2010)
+- release cycle loop: start over toward 7.21.2
+
+Version 7.21.1 (11 Aug 2010)
+
+Daniel Stenberg (11 Aug 2010)
+- RELEASE-NOTES: mention the runtests fix as well
+
+- runtests: clear old setenv remainders before test
+
+ Due to the layout of the singletest function there are situations where
+ it returns before it clears the environment variables that were
+ especially set for the single specific test case. That could lead to
+ subsequent tests getting executed with environment variables sticking
+ around from a previous test which could lead to badness.
+
+ This change makes sure to clear all custom variables that may be laying
+ around from a previous round, before running a test case.
+
+ Reported by: Kamil Dudka
+ Bug: http://curl.haxx.se/mail/lib-2010-08/0141.html
+
+Guenter Knauf (11 Aug 2010)
+- Added OpenSSL builds to Watcom makefiles.
+
+Yang Tse (11 Aug 2010)
+- configure: werror related adjustments
+
+Daniel Stenberg (11 Aug 2010)
+- FAQ: s/libcurl.so.3/libcurl.so.X
+
+Dan Fandrich (10 Aug 2010)
+- KNOWN_BUG #59 is fixed. Clarify support of IPv6 zone IDs.
+
+- Fixed typo in Android configure command
+
+Daniel Stenberg (11 Aug 2010)
+- HISTORY: added stuff from recent years
+
+- warning: silence the compiler
+
+ warning: conversion to 'long int' from 'time_t' may alter its value
+
+ ... on win64 when time_t is 64bit and long is 32bit.
+
+- RELEASE-NOTES: synced, 3 additional bugfixes
+
+- multi_socket_action: clarify how to kickstart it
+
+ The callbacks are called when curl_multi_socket_action() is called, not
+ when handles are added. This is now mentioned in the "TYPICAL USAGE"
+ section.
+
+- callbacks: acknowledge progress callback error returns
+
+ When the progress callback is called during the TCP connection, an error
+ return would accidentally not abort the operation as intended but would
+ instead be counted as a failure to connect to that particular IP and
+ libcurl would just continue to try the next. I made singleipconnect()
+ and trynextip() return CURLcode properly.
+
+ Added bonus: it corrected the error code for bad --interface usages,
+ like tested in test 1084 and test 1085.
+
+ Reported by: Adam Light
+ Bug: http://curl.haxx.se/mail/lib-2010-08/0105.html
+
+Guenter Knauf (10 Aug 2010)
+- More Watcom makefile fixes ...
+
+ Final fix (hopefully!) for dll wlink loader;
+ prefer faster internal rm if available.
+
+- Fixed my wrong edit.
+
+- More Watcom makefile fixes.
+
+ Added the -br switch to dynamic builds which fixes the issue I saw
+ with curl's --version output. Added debug info and symfile for debug
+ builds to linker opts. Added DLL loader for wlink back, but this time
+ dependend on wlink version.
+ Patch posted to the list by malak.jiri AT gmail.com.
+
+- Changed test for -u switch in order to enable other wmake switches.
+
+ The var %MAKEFLAGS is only set in 3 cases: if set as environment
+ var or as macro definition from commandline, and either with the
+ -u or -ms switch. Since all these cases are unlikely for the average
+ user it should be safe to only test if %MAKEFLAGS is defined; this
+ has the benefit that now all other switches can be used again in
+ addition to the -u which was formerly not possible.
+
+Daniel Stenberg (10 Aug 2010)
+- llist: hide Curl_llist_init
+
+ Curl_llist_init is never used outside of llist.c and thus it should be
+ static. I also removed the protos for Curl_llist_insert_prev and
+ Curl_llist_remove_next which are functions we removed from llist.c ages
+ ago.
+
+Guenter Knauf (10 Aug 2010)
+- Added msys Perl since git for Win32 comes with own Perl which identifies as msys.
+
+- Updated lib dependency versions.
+
+- Make testcurl.pl Watcom-aware.
+
+Daniel Stenberg (10 Aug 2010)
+- parse_remote_port: fix ;type= URL suffix over HTTP proxy
+
+ Test 563 is enabled now and verifies that the combo FTP type=A URL,
+ CURLOPT_PORT set and proxy work fine. As a bonus I managed to remove the
+ somewhat odd FTP check in parse_remote_port() and instead converted it
+ to a better and more generic 'slash_removed' struct field. Checking the
+ ->protocol field isn't right since when an FTP:// URL is sent over a
+ HTTP proxy, the protocol is HTTP but the URL was handled by the FTP code
+ and thus slash_removed is set TRUE for this case.
+
+- indent: white space fixes only
+
+Yang Tse (9 Aug 2010)
+- build: fix previous push
+
+- build: don't build libhostname unless shared libcurl is built
+
+- build: libhostname and chkhostname linkage adjustments followup
+
+Daniel Stenberg (8 Aug 2010)
+- typo: remove duplicate semicolon
+
+- multi: avoid a malloc() when a transfer is complete
+
+ The struct used for storing the message for a completed transfer is now
+ no longer allocated separatly but is kept within the main struct kept
+ for each easy handle so that we avoid one malloc (and the subsequent
+ free).
+
+Yang Tse (8 Aug 2010)
+- build: libhostname linkage adjustments followup
+
+Guenter Knauf (7 Aug 2010)
+- Fix to overwrite libcurl name.
+
+Yang Tse (7 Aug 2010)
+- build: chkhostname build adjustments followup
+
+U-D5B1PQ1J\Administrador (7 Aug 2010)
+- build: allow NTLM tests to run on more build configurations
+
+Daniel Stenberg (7 Aug 2010)
+- curl_easy_setopt.3: rename stream to userdata
+
+ In some places where the name 'stream' has been used for naming a
+ function argument that is in fact settable with a setopt() option we now
+ call that argument 'userdata' to make it more obvious that it is in fact
+ possible to set by the application.
+
+ Suggested by: Jeff Pohlmeyer
+
+Guenter Knauf (7 Aug 2010)
+- Block created curlbuild.h for NetWare to avoid usage from other platforms.
+
+Daniel Stenberg (7 Aug 2010)
+- RELEASE-NOTES: synced with recent changes
+
+Yang Tse (6 Aug 2010)
+- build: ensure that libhostname doesn't get installed
+
+Daniel Stenberg (6 Aug 2010)
+- multi_socket: set timeout for 100-continue
+
+ When libcurl internally decided to wait for a 100-continue header, there
+ was no call to the timeout function so there was no timeout callback
+ called when the multi_socket API was used and thus applications became
+ either completely wrong or at least ineffecient depending on how they
+ handled the situation. We now set a timeout to get triggered.
+
+ Reported by: Ben Darnell
+ Bug: http://curl.haxx.se/bug/view.cgi?id=3039744
+
+Guenter Knauf (6 Aug 2010)
+- Some more Watcom makefile massage ...
+
+ For now removed the .autodepend directive until I've figured out
+ which of my changes broke it again.
+
+Yang Tse (5 Aug 2010)
+- build: fix libssh2_scp_send64() availability
+
+- build: remove unneeded cast to (void *)
+
+- build: remove unused file
+
+Daniel Stenberg (4 Aug 2010)
+- SCP: send large files properly with new enough libssh2
+
+ libssh2 1.2.6 and later handle >32bit file sizes properly even on 32bit
+ architectures and we make sure to use that ability.
+
+ Reported by: Mikael Johansson
+ Bug: http://curl.haxx.se/mail/lib-2010-08/0052.html
+
+Yang Tse (3 Aug 2010)
+- build: add missing new files to non-configure target build files
+
+- md4: replace bcopy usage with memcpy
+
+Daniel Stenberg (3 Aug 2010)
+- RELEASE-NOTES: synced with recent changes
+
+- TODO-RELEASE: clear, file not really used ATM
+
+- typecheck-gcc: add checks for recently added options
+
+ I added all OBJECTPOINT curl_easy_setopt() options from 178 to 202. Left
+ to add: the five FUNCTIONPOINT (callbacks) options added since:
+
+ SSH_KEYFUNCTION
+ INTERLEAVEFUNCTION
+ CHUNK_BGN_FUNCTION
+ CHUNK_END_FUNCTION
+ FNMATCH_FUNCTION
+
+- .gitignore: ignore all built examples
+
+- example: fix code to build warning-free
+
+- Curl_connected_proxy: skip the bits.tcpconnect check
+
+ Simply because the TCP might be connected already we cannot skip the
+ proxy connect procedure. We need to be careful to not overload more
+ meaning to the bits.tcpconnect field like this.
+
+ With this fix, SOCKS proxies work again when the multi interface is
+ used. I believe this regression was added with commit 4b351d018e,
+ released as 7.20.1.
+
+ Left todo: add a test case that verifies this functionality that
+ prevents us from breaking it again in the future!
+
+ Reported by: Robin Cornelius
+ Bug: http://curl.haxx.se/bug/view.cgi?id=3033966
+
+- sethostname: provide local prototype for gethostname
+
+ This is only to avoid warnings on some systems.
+
+- build: add typecast to avoid warning
+
+ There is an implicit conversion from "unsigned long" to "long";
+ rounding, sign extension, or loss of accuracy may result.
+
+Guenter Knauf (2 Aug 2010)
+- Rename CURL_SOURCES macro; revert previous rename of curl_SOURCES macro.
+
+- Removed ugly dependency lists since wmake knows the .autodepend directive.
+
+- Use suffix search path for sources in lib folder.
+
+- Changed src/Makefile.Watcom to use CURL_SOURCES from src/Makefile.inc.
+
+- Renamed curl_SOURCES to CURL_ALLFILES to overcome wmake's case-insensitivity.
+
+- Removed wlink from DLL loader list because it doesnt work with Watcom < 1.8.
+
+- Moved the LDAP API defines from Makefile.Watcom to config-win32.h.
+
+ These defines are only needed for older Watcom versions (< 1280).
+
+Daniel Stenberg (2 Aug 2010)
+- retry: consider retrying even if -f is used
+
+ The --retry logic does retry HTTP when some specific response codes are
+ returned, but because the -f option sets the CURLOPT_FAILONERROR to
+ libcurl, the return codes are different for such situations and then the
+ curl tool failed to consider it for retrying.
+
+ Reported by: Mike Power
+ Bug: http://curl.haxx.se/bug/view.cgi?id=3037362
+
+- multi: fix FTPS connecting the data connection with OpenSSL
+
+ Commit 496002ea1cd76af7f (released in 7.20.1) broke FTPS when using the
+ multi interface and OpenSSL was used. The condition for the non-blocking
+ connect was incorrect.
+
+ Reported by: Georg Lippitsch
+ Bug: http://curl.haxx.se/mail/lib-2010-07/0270.html
+
+Guenter Knauf (1 Aug 2010)
+- Fixed curlbuild.h rule.
+
+- Added rule to create curlbuild.h if not present (for builds from git).
+
+- Added dependend libs for curl static linking.
+
+- Fixed curl.exe static linking.
+
+Daniel Stenberg (30 Jul 2010)
+- warning: silence a win64 compiler warning
+
+ conversion from 'size_t' to 'curl_socklen_t', possible loss of data
+
+ Reported by: Adam Light
+
+- KNOWN_BUG: The SOCKET type in Win64 is 64 bits
+
+ The SOCKET type in Win64 is 64 bits large (and thus so is curl_socket_t
+ on that platform), and long is only 32 bits. It makes it impossible for
+ curl_easy_getinfo() to return a socket properly with the
+ CURLINFO_LASTSOCKET option as for all other operating systems.
+
+- smtp_connect: always provide host name buffer
+
+ Previously the host name buffer was only used if gethostname() exists,
+ but since we converted that into a curl private function that function
+ always exists and will be used so the buffer needs to exist for all
+ cases/systems.
+
+- sethostname: avoid including unistd.h to duck for warnings
+
+- sethostname: ISO C does not allow extra `;' outside of a function
+
+- [Kamil Dudka brought this change]
+
+ NTLM tests: boost coverage by forcing the hostname
+
+ A shared library tests/libtest/.libs/lihostname.so is preloaded in NTLM
+ test-cases to override the system implementation of gethostname(). It
+ makes it possible to test the NTLM authentication for exact match, and
+ this way test the implementation of MD4 and DES.
+
+ If LD_PRELOAD doesn't work, a debug build willl also workk as debug
+ builds are now made to prefer a specific environment variable and will
+ then return that content as host name instead of the actual one.
+
+ Kamil wrote the bulk of this, Daniel Stenberg polished it.
+
+Guenter Knauf (29 Jul 2010)
+- Added a comment with an alternate idea to avoid the backslash line contination character.
+
+- Changed comparison to match size_t var type.
+
+- Removed unused vars to avoid compiler warnings.
+
+- Make Watcom makefiles use Makefile.inc to reduce future maintainance.
+
+ lib/Makefile.Watcom works fine already, for src/Makefile.Watcom we
+ need first to tweak src/Makefile.inc a bit - therefore the handtweaked
+ list still exists for now.
+
+- Watcom makefiles overhaul.
+
+ - make both libcurl and curl makefiles use register calling convention
+ (previously libcurl had stack calling convention).
+ - added include paths to the Watcom headers so its no longer required
+ to set the environment vars for this.
+ - added -wcd=201 to supress compiler warning about unreachable code.
+ - use macros for all tools, and removed dependency on GNU tools like rm.
+ - make ipv6 and debug builds controlable via env vars and so make them
+ optional instead of default.
+ - commented WINLDAPAPI and WINBERAPI since they broke with OW 1.8, and
+ it seems they're not needed (anymore?).
+ - added rule for hugehelp.c.cvs so that it will be created when not
+ already exist - this is required for building from a release tarball
+ since there we have no hugehelp.c.cvs, thus compilation broke.
+ - removed C_ARG creation from lib/Makefile.Watcom and use CFLAGS
+ directly as done too in src/Makefile.Watcom - this has the benefit
+ that we will see all active cflags and defines during compile.
+ - added LINK-ARG to src/Makefile.Watcom in order to better control
+ linker input.
+ - a couple of other minor makefile tweaks here and there ...
+ - added largefile support for Watcom builds to config-win32.h. Not yet
+ tested if it really works, but should since Win32 supports it.
+ - added loaddll stuff to speed up builds if supported.
+
+- some cosmetic changes.
+
+Dan Fandrich (26 Jul 2010)
+- Added md4.c to the Watcom makefile
+
+- Added PolarSSL to the docs
+
+Daniel Stenberg (25 Jul 2010)
+- curl-config: --built-shared returns shared info
+
+ The curl-config now features a --built-shared command line option that
+ will output 'yes' or 'no' depending if the build process was asked to
+ build shared library/libraries or not.
+
+ It is primarily made to offer more details to the test suite to know
+ what kind of stunts it can expect to work.
+
+- add_buffer_send: fix compiler warning
+
+ Win64's 32 bit long but 64 bit size_t caused a warning that we avoid
+ with a typecast. A small whitespace indent fix was also applied.
+
+ Reported by: Adam Light
+
+Guenter Knauf (22 Jul 2010)
+- Updated library versions.
+
+- Fixed script version which was still based on CVS Revision tag.
+
+Dan Fandrich (21 Jul 2010)
+- FAQ: Why doesn't cURL error out when the cable is unplugged?
+
+ This one was long overdue to be mentioned in the FAQ. Also, mention the
+ new ftp wildcard downloading feature.
+
+Daniel Stenberg (21 Jul 2010)
+- [Ben Greear brought this change]
+
+ ssh: Fix compile error on 64-bit systems.
+
+ Signed-off-by: Ben Greear <greearb@candelatech.com>
+
+- [Ben Greear brought this change]
+
+ build: Enable configure --enable-werror
+
+ This passes -Werror to gcc when building curl and libcurl,
+ allowing easy dection of compile warnings.
+
+ Signed-off-by: Ben Greear <greearb@candelatech.com>
+
+- [Ben Greear brought this change]
+
+ pingpong: Fix indentation (whitespace change only)
+
+ Signed-off-by: Ben Greear <greearb@candelatech.com>
+
+- [Jan Van Boghout brought this change]
+
+ CUSTOMREQUEST: shouldn't be disabled when HTTP is disabled
+
+ ... since FTP is using it as well, and potentially other protocols!
+
+ Also, an #endif CURL_DISABLE_HTTP was incorrectly marked, as it seems to
+ end the proxy block instead.
+
+- [Jan Van Boghout brought this change]
+
+ pingpong: response_time is milliseconds
+
+ Fixed the comment/document for the response_time struct member.
+
+- [Jan Van Boghout brought this change]
+
+ ftp: response timeout bug in "quote" sending
+
+ The FTP implementation was missing a timestamp reset point, making the
+ waiting for responses after sending a post-transfer "QUOTE" command not
+ working as supposedly. This bug was introduced in 7.20.0
+
+- [Jeff Pohlmeyer brought this change]
+
+ remote-header-name: chop filename at next semicolon
+
+ The --remote-header-name option for the command-line tool assumes that
+ everything beyond the filename= field is part of the filename, but that
+ might not always be the case, for example:
+
+ Content-Disposition: attachment; filename=file.txt; modification-date=...
+
+ This fix chops the filename off at the next semicolon, if there is one.
+
+- --retry: access violation with URL part sets continued
+
+ When getting multiple URLs, curl didn't properly reset the byte counter
+ after a successful transfer so if the subsequent transfer failed it
+ would wrongly use the previous byte counter and behave badly (segfault)
+ because of that. The code assumes that the byte counter and the 'stream'
+ pointer is well in synch.
+
+ Reported by: Jon Sargeant
+ Bug: http://curl.haxx.se/bug/view.cgi?id=3028241
+
+- releasnote: synch up with commit f3b77e5611d
+
+- [Constantine Sapuntzakis brought this change]
+
+ examples: add curl_multi_timeout
+
+ Make the multi-interface using examples use curl_multi_timeout to
+ properly educate users how to do things.
+
+- configure: document the STATICLIB variable
+
+- [Constantine Sapuntzakis brought this change]
+
+ multi: fix condition that remove timers before trigger
+
+ curl_multi perform has two phases: run through every easy handle calling
+ multi_runsingle and remove expired timers (timer removal).
+
+ If a small timer (e.g. 1-10ms) is set during multi_runsingle, then it's
+ possible that the timer has passed by when the timer removal runs. The
+ timer which was just added is then removed. This will potentially cause
+ the timer list to be empty and cause the next call to curl_multi_timeout
+ to return -1. Ideally, curl_multi_timeout should return 0 in this case.
+
+ One way to fix this is to move the struct timeval now = Curl_tvnow(); to
+ the top of curl_multi_perform. The change does that.
+
+- [Constantine Sapuntzakis brought this change]
+
+ threaded resolver: fix timeout issue
+
+ Reset old timer first so we can set a new one further in the future.
+
+- configure: allow environments variable to override internals
+
+ configure checks for grep, egrep, sed and ar and set the variables GREP,
+ EGREP, SED and AR accordingly. We now let already set variables override
+ the internal choices to let users make decisions when they know the
+ right choice already. This is a regression as our configure script used
+ to allow this back before commit 0b57c475 (up to 7.18.2).
+
+ Reported by: "kdekker"
+ Bug: http://curl.haxx.se/bug/view.cgi?id=3028318
+
+Dan Fandrich (9 Jul 2010)
+- Improved the Android build instructions
+
+Daniel Stenberg (7 Jul 2010)
+- [Tor Arntsen brought this change]
+
+ upload: Avoid infinite loop when checking for auth bits
+
+ The test would loop forever if authtype bit 0 wasn't set.
+
+- upload: warn users trying to upload from stdin with anyauth
+
+ Since uploading from stdin is very likely to not work with anyauth and
+ its multi-phase probing for what authentication to actually use, alert
+ the user about it. Multi-phase negotiate almost certainly will involve
+ sending data and thus libcurl will need to rewind the stream to send
+ again, and it cannot do that with stdin.
+
+- http: don't enable chunked during authentication negotiations
+
+ As mentioned in bug report #2956968, the HTTP code wouldn't send the
+ first empty chunk during the auth negotiation phase of the HTTP request
+ sending, so the server would wait for data to come and libcurl would
+ wait for data to arrive... I've made the code not enable chunked
+ encoding until the auth negotiation is done and thus this scenario
+ doesn't occur anymore.
+
+ Reported by: Sidney San Martín
+ Bug: http://curl.haxx.se/bug/view.cgi?id=2956968
+
+- --libcurl: list the tricky options instead of using [REMARK]
+
+ I think the [REMARK] and commented function calls cluttered the code a
+ bit too much and made the generated code ugly to read. Now we instead
+ track the remarks one specially and just lists them at the end of the
+ generated code more as additional information.
+
+- curl: avoid setting libcurl options to its default
+
+ it makes the --libcurl output easier to follow.
+
+- --libcurl: hide setopt() calls setting default options
+
+ And additionally, don't show function or object pointers actual value
+ since they make no sense to anyone. Show 'functionpointer' and
+ 'objectpointer' instead.
+
+- --libcurl: use *_LARGE options with typecasted constants
+
+ In the generated code --libcurl makes, all calls to curl_easy_setopt()
+ that use *_LARGE options now have the value typecasted to curl_off_t, so
+ that it works correctly for 32bit systems with 64bit curl_off_t type.
+
+- multi: CURLINFO_LASTSOCKET doesn't work after remove_handle
+
+ When curl_multi_remove_handle() is called and an easy handle is returned
+ to the connection cache held in the multi handle, then we cannot allow
+ CURLINFO_LASTSOCKET to extract it since that will more or less encourage
+ that the user uses the socket while it can get used by libcurl again.
+
+ Without this fix, we'd get a segfault in Curl_getconnectinfo() trying to
+ dereference the NULL pointer in 'data->state.connc'.
+
+ Bug: http://curl.haxx.se/bug/view.cgi?id=3023840
+
+- [Pierre Joye brought this change]
+
+ build: add enable IPV6 option for the VC makefiles
+
+- FAQ: the threaded resolver works universally now
+
+Kamil Dudka (30 Jun 2010)
+- http_ntlm: add support for NSS
+
+ When configured with '--without-ssl --with-nss', NTLM authentication
+ now uses NSS crypto library for MD5 and DES. For MD4 we have a local
+ implementation in that case. More details are available at
+ https://bugzilla.redhat.com/603783
+
+ In order to get it working, curl_global_init() must be called with
+ CURL_GLOBAL_SSL or CURL_GLOBAL_ALL. That's necessary because NSS needs
+ to be initialized globally and we do so only when the NSS library is
+ actually required by protocol. The mentioned call of curl_global_init()
+ is responsible for creating of the initialization mutex.
+
+ There was also slightly changed the NSS initialization scenario, in
+ particular, loading of the NSS PEM module. It used to be loaded always
+ right after the NSS library was initialized. Now the library is
+ initialized as soon as any SSL or NTLM is required, while the PEM module
+ is prevented from being loaded until the SSL is actually required.
+
+Daniel Stenberg (29 Jun 2010)
+- glob: backslash escaping bug
+
+ curl didn't properly handle escaping characters in a URL with the use of
+ backslash. It did an attempt, but that failed as reported in bug
+ 3022551. The described example was using the URL
+ "http://example.com?{AB,C\,D}".
+
+ I've now removed the special-handling of letters following the backslash
+ and I also removed the bad extra check that triggered this particular
+ bug.
+
+ Bug: http://curl.haxx.se/bug/view.cgi?id=3022551
+ Reported by: Jon Sargeant
+
+- release-notes: sync up with recent commits
+
+- CONTRIBUTE: the git commit message line length is 72 columns
+
+- [Pavel Raiskup brought this change]
+
+ ftp wildcard: FTP LIST parser FIX
+
+ There was a problem when a UNIX-like server returned information
+ about directory size (total NNNNNN) at the first line of
+ response.
+
+- [Pavel Raiskup brought this change]
+
+ examples: new FTP wildcard showcase
+
+- multi_socket: re-use of same socket without notifying app
+
+ When a hostname resolves to multiple IP addresses and the first one
+ tried doesn't work, the socket for the second attempt may get dropped on
+ the floor, causing the request to eventually time out. The issue is that
+ when using kqueue (as on mac and bsd platforms) instead of select, the
+ kernel removes the first fd from kqueue when it is closed (in trynextip,
+ connect.c:503). Trynextip() then goes on to open a new socket, which
+ gets assigned the same number as the one it just closed. Later in
+ multi.c, socket_cb is not called because the fd is already in
+ multi->sockhash, so the new socket is never added to kqueue.
+
+ The correct fix is to ensure that socket_cb is called to remove the fd
+ when trynextip() closes the socket, and again to re-add it after
+ singleipsocket(). I'm not sure how to cleanly do that, but the attached
+ patch works around the problem in an admittedly kludgy way by delaying
+ the close to ensure that the newly-opened socket gets a different fd.
+
+ Daniel's added comment: I didn't spot a way to easily do a nicer fix so
+ I've proceeded with Ben's patch.
+
+ Bug: http://curl.haxx.se/bug/view.cgi?id=3017819
+ Patch by: Ben Darnell
+
+Kamil Dudka (24 Jun 2010)
+- [Pavel Raiskup brought this change]
+
+ ftp-wildcard: avoid tight loop when used without any pattern
+
+ It was broken for URLs like "ftp://example.com/".
+
+Daniel Stenberg (21 Jun 2010)
+- maketgz: produce CHANGES automatically with the 1000 most recent commits
+
+ It passes the git log output through 'log2changes.pl' to produce
+ the lot.
+
+- ignore: CHANGES.dist gets generated by maketgz
+
+- CHANGES: move all contents from CHANGES to CHANGES.0
+
+ CHANGES is no longer used for manually edited content. It is to
+ be generated automatically by maketgz when we make release
+ tarballs.
+
+- log2changes: correct command line, fix tag usage, change Version output
+
+ --decorate=full is needed with my git 1.7.1 to get the necessary
+ output so that the previous edit would work to extract the
+ Version stuff.
+
+ ... but I had to edit how the refs/tags was extracted since it
+ had a little flaw that made it miss the 7.20.1 output.
+
+ Finally, I changed so that Version is outputted even more similar
+ to how CHANGES does it.
+
+Dan Fandrich (21 Jun 2010)
+- Make the output of log2changes.pl even more closely match CHANGES
+
+ Add the ASCII art header, and list version commits by decoding
+ the ref tag names, when available (using the git log --decorate
+ option).
+
+Daniel Stenberg (19 Jun 2010)
+- log2changes: first version of the git log to CHANGES conversion script
+
+ $ git log --pretty=fuller --no-color --date=short | ./log2changes.pl
+
+ Of course, limiting the log output with a range like with
+ "[tag]..HEAD" appended can be very useful too.
+
+- sendrecv: treat all negative values from send/recv as errors
+
+ For example the libssh2 based functions return other negative
+ values than -1 to signal errors and it is important that we catch
+ them properly. Right before this, various failures from libssh2
+ were treated as negative download amounts which caused havoc.
+
+- multi: prevent NULL pointer dereference
+
+ My additional call to Curl_pgrsUpdate() would sometimes get
+ called even though there's no connection (left) so a NULL pointer
+ would get passed, causing a segfault.
+
+- smtp: fixed a few uses of size_t that seemed to believe it was signed
+
+ Reported-by: Steven M. Schweda
+
+Dan Fandrich (17 Jun 2010)
+- Fixed an OOM memory leak in the FTP wildcard code
+
+Kamil Dudka (17 Jun 2010)
+- test575: do not fail with threaded DNS resolver
+
+Daniel Stenberg (17 Jun 2010)
+- [Krister Johansen brought this change]
+
+ multi: unmark handle as used when no longer head of pipeline
+
+- multi: call the progress function only once and allow abort
+
+ 1) no need to call the progress function twice when in the
+ CURLM_STATE_TOOFAST state.
+
+ 2) Make sure that the progress callback's return code is
+ acknowledged when used
+
+- multi: call the progress callback in all states
+
+ As long as no error is reported, the progress function can get
+ called. This may be a little TOO often so we should keep an eye
+ on this and possibly make this conditional somehow.
+
+- configure: spell --disable-threaded-resolver correctly
+
+ Previously we only accepted the option when named
+ --disable-threaded-resover, which wasn't quite intended.
+
+ Reported by: Helwing Lutz
+
+- release: start on 7.21.1, bump contributor count
+
+- version: start working on the 7.21.1-dev version
+
+- THANKS: added contributors from the 7.21.0 release
+
+Version 7.21.0 (16 Jun 2010)
+
+Daniel Stenberg (16 Jun 2010)
+- release: 7.21.0
+
+Yang Tse (10 Jun 2010)
+- remove unused 'tmpdata' and 'backup' ftp_parselist_data struct members
+
+- replace isprint() with ISPRINT()
+
+- ensure that Curl_wildcard_dtor() leaves WildcardData struct zero initialized
+
+Patrick Monnerat (9 Jun 2010)
+- ILE/RPG binding updated to current curl.h definitions.
+
+Yang Tse (9 Jun 2010)
+- code simplification
+
+- add Curl_ prefix to conform with cURL naming standards
+
+- Merge branch 'master' of git@github.com:bagder/curl
+
+- fix compiler warning using curl_socket_t to store socket descriptor
+
+Daniel Stenberg (8 Jun 2010)
+- inet_pton: warnings: use size_t to store pointer deltas
+
+Yang Tse (8 Jun 2010)
+- avoid redundant work when reusing same connection
+
+- fix function result checking
+
+Daniel Stenberg (8 Jun 2010)
+- transfer: warning: implicit conversion
+
+ There is an implicit conversion from "unsigned long" to "long";
+ rounding, sign extension, or loss of accuracy may result.
+
+ Fixed by an added typecast.
+
+- TFTP: fix compiler warning
+
+ Curl_fillreadbuffer()'s second argument takes an int, so
+ typecasting to another is a bad idea.
+
+- TFTP: fix warning for sendto() usage on non-POSIX systems
+
+ Older unixes want an 'int' instead of 'size_t' as the 3rd
+ argumment so before this change it would cause warnings such as:
+
+ There is an implicit conversion from "unsigned long" to "int";
+ rounding, sign extension, or loss of accuracy may result.
+
+Dan Fandrich (7 Jun 2010)
+- Include Makefile.inc to get the list of source files for Amiga
+
+ Signed-off-by: Diego Casorran <dcasorran@gmail.com>
+
+Yang Tse (7 Jun 2010)
+- Curl_updateconninfo() error handling fix
+
+Daniel Stenberg (5 Jun 2010)
+- [Constantine Sapuntzakis brought this change]
+
+ OpenSSL: fix spurious SSL connection aborts
+
+ Was seeing spurious SSL connection aborts using libcurl and
+ OpenSSL. I tracked it down to uncleared error state on the
+ OpenSSL error stack - patch attached deals with that.
+
+ Rough idea of problem:
+
+ Code that uses libcurl calls some library that uses OpenSSL but
+ don't clear the OpenSSL error stack after an error.
+
+ ssluse.c calls SSL_read which eventually gets an EWOULDBLOCK from
+ the OS. Returns -1 to indicate an error
+
+ ssluse.c calls SSL_get_error. First thing, SSL_get_error calls
+ ERR_get_error to check the OpenSSL error stack, finds an old
+ error and returns SSL_ERROR_SSL instead of SSL_ERROR_WANT_READ or
+ SSL_ERROR_WANT_WRITE.
+
+ ssluse.c returns an error and aborts the connection
+
+ Solution:
+
+ Clear the openssl error stack before calling SSL_* operation if
+ we're going to call SSL_get_error afterwards.
+
+ Notes:
+
+ This is much more likely to happen with multi because it's easier
+ to intersperse other calls to the OpenSSL library in the same
+ thread.
+
+Yang Tse (5 Jun 2010)
+- replace socklen_t with curl_socklen_t
+
+Daniel Stenberg (5 Jun 2010)
+- [Frank Meier brought this change]
+
+ getinfo: added *_PRIMARY_PORT, *_LOCAL_IP and *_LOCAL_PORT
+
+- RELEASE-NOTES: add contributors not mentioned
+
+Yang Tse (4 Jun 2010)
+- Enable OpenLDAP support for cygwin builds.
+
+ Enable OpenLDAP support for cygwin builds. This support was disabled back
+ in 2008 due to incompatibilities between OpenSSL and OpenLDAP headers.
+ cygwin's OpenSSL 0.9.8l and OpenLDAP 2.3.43 versions on cygwin 1.5.25
+ allow building an OpenLDAP enabled libcurl supporting back to Windows 95.
+
+ Remove non-functional CURL_LDAP_HYBRID code and references.
+
+Kamil Dudka (2 Jun 2010)
+- ftplistparser.c: oops, fix typo in the last commit
+
+- ftplistparser.c: avoid some invalid dereferences
+
+- lib: eliminate some dead code
+
+Daniel Stenberg (2 Jun 2010)
+- SSH: corrected the inability to respect the timeout
+
+ Jason McDonald posted bug report #3006786 when he found that the
+ SFTP code didn't timeout properly in several places in the code
+ even if a timeout was set properly.
+
+ Based on his suggested patch, I wrote a different implementation
+ that I think addressed the issue better and also uses the connect
+ timeout for the initial part of the SSH/SFTP done during the
+ "protocol connect" phase.
+
+ (http://curl.haxx.se/bug/view.cgi?id=3006786)
+
+Yang Tse (2 Jun 2010)
+- mention last changes
+
+- add missing new files to non-configure target build files
+
+- include libcurl standard internal headers
+
+Daniel Stenberg (2 Jun 2010)
+- TODO: add multi interface improvement remove ldap select
+
+Yang Tse (2 Jun 2010)
+- make setup.h first included file
+
+- fix spnego memory leak
+
+- openldap header inclusions fix
+
+Daniel Stenberg (1 Jun 2010)
+- multi_socket: handles timer inaccuracy better for timeouts
+
+ Igor Novoseltsev reported a problem with the multi socket API and
+ using timeouts and timers. It boiled down to a problem with
+ libcurl's use of GetTickCount() interally to figure out the
+ current time, while Igor's own application code used another
+ function call.
+
+ It made his app call the socket API timeout function a bit
+ _before_ libcurl would consider the timeout to trigger, and that
+ could easily lead to timeouts or stalls in the app. It seems
+ GetTickCount() in general often has no better resolution than
+ 16ms and switching to the alternative function
+ QueryPerformanceCounter has its share of problems:
+ http://www.virtualdub.org/blog/pivot/entry.php?id=106
+
+ We address this problem by simply having libcurl treat timers
+ that already has occured or will occur within 40ms subject for
+ treatment. I'm confident that there are other implementations and
+ operating systems with similarly in accurate timer functions so
+ it makes sense to have applied generically and I don't believe we
+ sacrifice much by adding a 40ms inaccuracy on these timeouts.
+
+Yang Tse (1 Jun 2010)
+- fix ldaps option issue
+
+- fix ldap related compilation issues
+
+- fix compiler warning: enumerated type mixed with another type
+
+- fix compiler warning: enumerated type mixed with another type
+
+Patrick Monnerat (31 May 2010)
+- smtp_authenticate: avoid compiler warnings
+
+Yang Tse (31 May 2010)
+- fix compiler warning: enumerated type mixed with another type
+
+- fix compiler warning: enumerated type mixed with another type
+
+- fix compiler warning: enumerated type mixed with another type
+
+- fix compiler warning: external declaration in primary source file
+
+- fix compiler warning: variable was set but never used
+
+- fix compiler warning: enumerated type mixed with another type
+
+- fix compiler warning: external declaration in primary source file
+
+- update year in copyright notice
+
+Kamil Dudka (29 May 2010)
+- strtoofft: rename CURL_LLONG_MIN -> CURL_OFF_T_MIN
+
+ ... and CURL_LLONG_MAX -> CURL_OFF_T_MAX
+
+- CURL_LLONG_MAX: avoid constant overflow
+
+ ... when (CURL_SIZEOF_CURL_OFF_T == 4)
+
+Daniel Stenberg (28 May 2010)
+- [Howard Chu brought this change]
+
+ LDAPS: list availability depending on SSL's presence
+
+- [Howard Chu brought this change]
+
+ LDAP: make it build without SSL if no such support is available
+
+ of course it also goes for the case where SSL is explicitly
+ disabled
+
+- TODO: removed fixed items
+
+ These two items are now actually implemented:
+
+ 11.1 Content-Disposition
+ 11.5 ftp wildcard download
+
+Kamil Dudka (28 May 2010)
+- lib: eliminate 'statement not reached' warnings
+
+Daniel Stenberg (28 May 2010)
+- test1115: verify that unexpected 1xx responses work fine
+
+Kamil Dudka (28 May 2010)
+- lib577: avoid redefinition of ERROR
+
+- test313: a new test for CRL support
+
+- tests/certs: re-generated because of lost pass-phrase
+
+- tests/certs/scripts: generate also CRL
+
+ ... and make it possible to do so without any user interaction
+
+Daniel Stenberg (27 May 2010)
+- [Howard Chu brought this change]
+
+ openldap: fix compiler warnings
+
+- indent: some whitespace edits
+
+Kamil Dudka (27 May 2010)
+- wildcard.c: add missing include of "setup.h"
+
+- [Tor Arntsen brought this change]
+
+ lib573: do not compare double for exact match
+
+- [Pavel Raiskup brought this change]
+
+ wildcard.c: add missing include of "curl_memory.h"
+
+- [Tor Arntsen brought this change]
+
+ setup_once: use enum type for 'bool' on non-C99 platforms
+
+ An enum will catch non-bool assignments to bool on platforms with
+ a strict compiler, e.g MIPSPro.
+
+ Signed-off-by: Kamil Dudka <kdudka@redhat.com>
+
+- url.c: avoid implied cast to bool
+
+- [Tor Arntsen brought this change]
+
+ curl_fnmatch: remove use of register keyword
+
+ Using the 'register' keyword rarely improves anything with modern
+ compilers and architectures.
+
+Daniel Stenberg (26 May 2010)
+- [Julien Chaffraix brought this change]
+
+ RTMP: Fix compiler warnings
+
+- [Julien Chaffraix brought this change]
+
+ OOM fixes in http_negociate.c and lib/splay.c
+
+ Fix 2 OOM errors: a missing NULL-check in lib/http_negociate.c
+ and a potential NULL dereferencing in lib/splay.c
+
+- [Howard Chu brought this change]
+
+ LDAP: properly implemented as a curl_handler
+
+ makes the LDAP code much cleaner, nicer and in general being a
+ better libcurl citizen. If a new enough OpenLDAP version is
+ detect, the new and shiny lib/openldap.c code is then used
+ instead of the old cruft
+
+ Code by Howard, minor cleanups by Daniel.
+
+- [Tor Arntsen brought this change]
+
+ curl_fnmatch: Use int not bool when function returns int
+
+ bool in curl internals is unsigned char and should not be used
+ to receive return value from functions returning int - this fails
+ when using IBM VisualAge and Tru64 compilers.
+
+- TFTP: send legal timeout value
+
+ Eric Mertens posted bug #3003705: when we made TFTP use the
+ correct timeout option when sent to the server (fixed May 18th
+ 2010) it became obvious that libcurl used invalid timeout values
+ (300 by default while the RFC allows nothing above 255). While of
+ course it is obvious that as TFTP has worked thus far without
+ being able to set timeout at all, just removing the setting
+ wouldn't make any difference in behavior. I decided to still keep
+ it (but fix the problem) as it now actually allows for easier
+ (future) customization of the timeout.
+
+ (http://curl.haxx.se/bug/view.cgi?id=3003705)
+
+- TFTP: don't ack if wrong block num is received
+
+ If an unexpected block number was received, break out of the
+ switch loop.
+
+- TFTP: block id wrap bug fix
+
+ In a normal expression, doing [unsigned short] + 1 will not wrap
+ at 16 bits so the comparisons and outputs were done wrong. I
+ added a macro do make sure it gets done right.
+
+ Douglas Kilpatrick filed bug report #3004787 about it:
+ http://curl.haxx.se/bug/view.cgi?id=3004787
+
+- [Ben Greear brought this change]
+
+ Fix build warnings.
+
+ Signed-off-by: Ben Greear <greearb@candelatech.com>
+
+- [Ben Greear brought this change]
+
+ setopt: Fix setting of set.is_fwrite_set
+
+ Signed-off-by: Ben Greear <greearb@candelatech.com>
+
+- [Tanguy Fautre brought this change]
+
+ build: allow curl to build with Microsoft VC10
+
+ By undefing a bunch of E* defines that VC10 has started to define
+ but that we redefine internally to their WSA* alternatives when
+ building for Windows.
+
+Kamil Dudka (20 May 2010)
+- [Tor Arntsen brought this change]
+
+ Test 573: Use correct type for CURLINFO_CONNECT_TIME
+
+ curl_easy_getinfo() called with a pointer to long instead of double
+ would sigbus on RISC processors (e.g. MIPS) due to wrong alignment
+ of pointer address.
+
+- [Tor Arntsen brought this change]
+
+ lib: Fix AIX build failure
+
+Dan Fandrich (19 May 2010)
+- Fixed some memory leaks in the POP3 torture tests
+
+- Fixed a memory leak in the SMTP torture tests
+
+Daniel Stenberg (18 May 2010)
+- TFTP: send timeout option correctly
+
+ Eric Mertens posted bug report #3003005 pointing out that the
+ libcurl TFTP code was not sending the timeout option properly to
+ the server, and suggested a fix.
+
+ (http://curl.haxx.se/bug/view.cgi?id=3003005)
+
+Kamil Dudka (16 May 2010)
+- [Tor Arntsen brought this change]
+
+ lib: Change some CRLF line endings to LF
+
+ An update had added a couple of lines with DOS line endings,
+ and some compilers will choke on that (e.g. the Tru64 compiler).
+
+- ftp wildcard: a new option CURLOPT_FNMATCH_DATA
+
+Daniel Stenberg (15 May 2010)
+- [Howard Chu brought this change]
+
+ RMTP: the version code is now rtmp aware
+
+- [Howard Chu brought this change]
+
+ RTMP: fix wrong #ifdef
+
+- [Pavel Raiskup brought this change]
+
+ ftp wildcard: fix int32_t and size/group mixups
+
+Dan Fandrich (14 May 2010)
+- Fixed test 577 to work when --enable-hidden-symbols is configured
+
+Daniel Stenberg (14 May 2010)
+- OpenSSL: multi interface handshake could hang
+
+ John-Mark Bell filed bug #3000052 that identified a problem (with
+ an associated patch) with the OpenSSL handshake state machine
+ when the multi interface is used:
+
+ Performing an https request using a curl multi handle and using
+ select or epoll to wait for events results in a hang. It appears
+ that the cause is the fix for bug #2958179, which makes
+ ossl_connect_common unconditionally return from the step 2 loop
+ when fetching from a multi handle.
+
+ When ossl_connect_step2 has completed, it updates
+ connssl->connecting_state to ssl_connect_3. ossl_connect_common
+ will then return to the caller, as a multi handle is in
+ use. Eventually, the client code will call curl_multi_fdset to
+ obtain an updated fdset to select or epoll on. For https
+ requests, curl_multi_fdset will cause https_getsock to be called.
+ https_getsock will only return a socket handle if the
+ connecting_state is ssl_connect_2_reading or
+ ssl_connect_2_writing. Therefore, the client will never obtain a
+ valid fdset, and thus not drive the multi handle, resulting in a
+ hang.
+
+ (http://curl.haxx.se/bug/view.cgi?id=3000052)
+
+- changelog: add link to bug report
+
+Dan Fandrich (14 May 2010)
+- Added directories.pm to the source tar ball
+
+Daniel Stenberg (14 May 2010)
+- follow redirect: ignore response-body on redirect even if compressed
+
+ Sebastian V reported bug #3000056 identifying a problem with
+ redirect following. It showed that when curl followed redirects
+ it didn't properly ignore the response body of the 30X response
+ if that response was using compressed Content-Encoding!
+
+ (http://curl.haxx.se/bug/view.cgi?id=3000056)
+
+- version: we're now going for 7.21.0
+
+- [Hoi-Ho Chan brought this change]
+
+ Remove support for BSD version of PolarSSL
+
+ "The BSD version of PolarSSL was made for migratory purposes only and is not
+ maintained. The GPL version of PolarSSL is actually the only actively
+ developed version, so I would be very reluctant to use the BSD version." /
+ Paul Bakker, PolarSSL hacker.
+
+ Signed-off-by: Hoi-Ho Chan <hoiho.chan@gmail.com>
+
+Dan Fandrich (12 May 2010)
+- Added Polar SSL and RTMP files to the non-autoconf build files
+
+ I didn't bother with a few that have little hope of running the required
+ dependent libraries.
+
+- Added the new ftp source files to the non-autoconf build files
+
+- Copy the license file so it's seen by the Android build system
+
+Daniel Stenberg (13 May 2010)
+- updated with symbols added in recent commits for 7.21.0
+
+- changelogs: mention RTMP and the FTP wildcard support
+
+- ftp wildcards: mention they're added in 7.21.0
+
+- style: minor whitespace change
+
+- syntax: cleanups
+
+- [Pavel Raiskup brought this change]
+
+ FTP: WILDCARDMATCH/CHUNKING/FNMATCH added
+
+- [Howard Chu brought this change]
+
+ RTMP: initial support added, powered by librtmp
+
+ librtmp is found at http://rtmpdump.mplayerhq.hu/
+
+- [Howard Chu brought this change]
+
+ sendrecv: make them two pairs of send/recv to properly deal with FTPS
+
+ FTP(S) use two connections that can be set to different recv and
+ send functions independently, so by introducing recv+send pairs
+ in the same manner we already have sockets/connections we can
+ work with FTPS fine.
+
+ This commit fixes the FTPS regression introduced in change d64bd82.
+
+Kamil Dudka (11 May 2010)
+- changelog: fixed CRL support in libcurl-NSS
+
+- nss: make it possible to read ASCII and DER CRL
+
+- nss: add CRL to cache instead of read-only NSS db
+
+Daniel Stenberg (10 May 2010)
+- git: how to write a fine commit message
+
+- findtool: file name as a full path requires a slash
+
+ Kalle Vahlman's patch applied a while ago broke how the findtool
+ function searches for tools, as it would always check if "$file"
+ was present first, which thus made the bad assumption that a file
+ in the current directory would be a match.
+
+ I noticed when it found 'libtool' in the current directory but
+ libtoolize is not there, which confused the script.
+
+Hacki (8 May 2010)
+- moved vars into conditional since seems that winsock implementation doesnt use them.
+
+Daniel Stenberg (7 May 2010)
+- multi interface: missed storing connection time
+
+ Dirk Manske reported a regression. When connecting with the multi
+ interface, there were situations where libcurl wouldn't store
+ connect time correctly as it used to (and is documented to) do.
+
+ Using his fine sample program we could repeat it, and I wrote up
+ test case 573 using that code. The problem does not easily show
+ itself using the local test suite though.
+
+ The fix, also as suggested by Dirk, is a bit on the ugly side as
+ it adds yet another call to Curl_verboseconnect() and setting the
+ TIMER_CONNECT time. That situation is subject for some closer
+ inspection in the future.
+
+- verboseconnect: so the verbose checking within the function
+
+ As the function is used more than once and libcurl can be built
+ without it, do the conditional check within the verboseconnect()
+ function itself.
+
+- changelogs: split the I/O handling
+
+- [Howard Chu brought this change]
+
+ sendrecv: split the I/O handling into private handler
+
+ Howard Chu brought the bulk work of this patch that properly
+ moves out the sending and recving of data to the parts of the
+ code that are properly responsible for the various ways of doing
+ so.
+
+ Daniel Stenberg assisted with polishing a few bits and fixed some
+ minor flaws in the original patch.
+
+ Another upside of this patch is that we now abuse CURLcodes less
+ with the "magic" -1 return codes and instead use CURLE_AGAIN more
+ consistently.
+
+- changelog: PolarSSL
+
+- [Hoi-Ho Chan brought this change]
+
+ PolarSSL: initial support added
+
+ This is Hoi-Ho Chan's patch with some minor fixes by me. There
+ are some potential issues in this, but none worse than we can
+ sort out on the list and over time.
+
+- TODO: we've done PRET already, consider HOST for the future
+
+ ... and GnuTLS connects are non-blocking, TFTP is better
+ integrated as a "real" protocol and RTSP is supported.
+
+- TODO: GnuTLS connects are now non-blocking
+
+ Since commit c288860 by Jerome Vouillon
+
+- INTERNALS: tftp is decent now, ldap is not
+
+ It's not quite fair to list TFTP is a "crappy" member of the
+ libcurl family so I removed its mentioning.
+
+- changelog: mention Ben Greear's telnet work
+
+- [Ben Greear brought this change]
+
+ telnet: Allow programatic use of telnet.
+
+ The main change is to allow input from user-specified methods,
+ when they are specified with CURLOPT_READFUNCTION.
+ All calls to fflush(stdout) in telnet.c were removed, which makes
+ using 'curl telnet://foo.com' painful since prompts and other data
+ are not always returned to the user promptly. Use
+ 'curl --no-buffer telnet://foo.com' instead. In general,
+ the user should have their CURLOPT_WRITEFUNCTION do a fflush
+ for interactive use.
+
+ Also fix assumption that reading from stdin never returns < 0.
+ Old code could crash in that case.
+
+ Call progress functions in telnet main loop.
+
+ Signed-off-by: Ben Greear <greearb@candelatech.com>
+
+- test: enable valgrind for 604, seems to work
+
+Kamil Dudka (28 Apr 2010)
+- [Paul Howarth brought this change]
+
+ add 1s post-command delay to tests 513 and 514
+
+ addressing http://curl.haxx.se/mail/lib-2009-12/0031.html
+
+Daniel Stenberg (26 Apr 2010)
+- [Kalle Vahlman brought this change]
+
+ Allow tools to be defined with full path in buildconf
+
+ This is required in Scratchbox where
+ LIBTOOL=/targets/links/arch_tools/bin/libtool
+ is set in the environment.
+
+- progress callback: can be called more than once per sec
+
+- SSH: init and cleanup libssh2 in global_init/cleanup
+
+ The necessary libssh2 functions require libssh2 1.2.5 or later.
+
+- new configure option --enable-threaded-resolver
+
+- configure: check for libssh2_init and libssh2_exit
+
+Kamil Dudka (24 Apr 2010)
+- nss: fix SSL handshake timeout underflow
+
+Guenter Knauf (24 Apr 2010)
+- encourage users to take latest lib dependencies.
+
+Daniel Stenberg (24 Apr 2010)
+- socks5: please static code analyzer
+
+ Make sure we don't call memcpy() if the argument is NULL even
+ though we also passed a zero length then, as the clang analyzer
+ whined and we want to limit warnings (even false positives) when
+ they're this easy to fix.
+
+ The change of (char) to (unsigned char) will fix long user names
+ and passwords on systems that have the char type signed by
+ default.
+
+- gzip: Value stored to 'data' is never read
+
+- RELEASE-NOTES: update top numbers
+
+- changelog: added the --proto and -proto-redir options
+
+- [Alex Bligh brought this change]
+
+ curl: added --proto and --proto-redir
+
+ --proto tells curl to use the listed protocols for its initial
+ retrieval
+
+ --proto-redir tells curl to use the listed protocols after a
+ redirect
+
+Kamil Dudka (24 Apr 2010)
+- test536: do not fail with threaded DNS resolver
+
+ Also tweaked comments in certain examples using curl_multi_fdset().
+
+Daniel Stenberg (21 Apr 2010)
+- curl: -O crash on windows
+
+ The -O option caused curl to crash on windows and DOS due to the
+ tool writing out of boundary memory.
+
+Yang Tse (20 Apr 2010)
+- hmac.c related compilation adjustment
+
+- hmac.c related compilation adjustment
+
+monnerat (20 Apr 2010)
+- Add compilation directives for hmac in Watcom,riscos and vc6 platform-specific makefiles.
+
+Yang Tse (20 Apr 2010)
+- [Ruslan Gazizov brought this change]
+
+ replaced wsock32.lib usage with ws2_32.lib in MSVC makefiles
+
+monnerat (19 Apr 2010)
+- Merge branch 'master' of github.com:bagder/curl
+
+- Remove null-effect leftover code.
+
+Daniel Stenberg (19 Apr 2010)
+- changelog: -J/--remote-header-name strips CRLF
+
+- parse_filename: strip trailing CRs and LFs
+
+ The feature that uses the file name given in a
+ Content-disposition: header didn't properly skip trailing
+ carriage returns and linefeed characters from the end of the file
+ name when it was given without quotes.
+
+- Curl_HMAC_MD5: fix the array init to not warn with picky compilers
+
+monnerat (19 Apr 2010)
+- Fix GnuTLS compilation problem in md5.c
+
+- Fix compilation problem: declare Curl_HMAC_MD5 as extern in include file.
+
+- Merge branch 'master' of github.com:bagder/curl
+
+- Implement SMTP authentication
+
+Daniel Stenberg (17 Apr 2010)
+- parseconfig: Value stored to 'line' is never read
+
+ Make the function call with (void) as we don't care about the
+ return code.
+
+- parsedate: Value stored to 'found' is never read
+
+- check_gzip_header: Value stored to 'data' is never read
+
+- dprintf_formatf: Value stored to 'left' is never read
+
+- curl_version: remove superfluous assignments
+
+- FTP PORT: Value stored to 'rc' is never read
+
+- Curl_setup_transfer: no longer returns anything
+
+ This function could only return CURLE_OK and by changing it to
+ a void instead, we can simplify code all over.
+
+- PASV response: Value stored to 'rc' is never read
+
+- Curl_perform: Value stored to 'res2' is never read
+
+- sftp range: remove unnecessary check for NULL pointer
+
+- ftp_range: remove unnecessary check for NULL pointer
+
+- file_range: remove unnecessary check for NULL pointer
+
+- SOCKS4: Value stored to 'rc' is never read
+
+- FTP PASV: Value stored to 'rc' is never read
+
+- ftp_range: Value stored to 'totalsize' is never read
+
+ Simplified the code by removing a local variable completely.
+
+- SOCKS5: when name resolves fail return immediately
+
+ This makes the code flow more obvious and reacts on the return
+ code properly, even if the code acted the same way before.
+
+- POP3: when USER command fails, don't even try PASS
+
+- tftp_rx: Value stored to 'sbytes' is never read
+
+- file_range: Value stored to 'totalsize' is never read
+
+- changelog: GnuTLS: SSL handshake phase is non-blocking
+
+- [Jerome Vouillon brought this change]
+
+ GnuTLS: make the connection phase non-blocking
+
+ When multi interface is used, the SSL handshake is no longer
+ blocking when GnuTLS is used.
+
+- krb5_auth: fix my previous change to compile
+
+unknown (16 Apr 2010)
+- OS400 version V5R2M0 not supported anymore by IBM: default target release changed to V5R3M0.
+
+Daniel Stenberg (16 Apr 2010)
+- changelog: GnuTLS fix, no reverse loopkups and fixed GSS detection
+
+- SSL_RECV: EOF is not an error here
+
+ The recent overhaul of the SSL recv function made this treat a
+ zero returned from gnutls_record_recv() as an error, and this
+ caused our HTTPS test cases to fail. We leave it to upper layer
+ code to detect if an EOF is a problem or not.
+
+- [Paul Howarth brought this change]
+
+ configure: GSSAPI detection on ancient Linux distros
+
+ On some ancient distributions such as RHEL-3, <gssapi/gssapi_krb5.h> needs
+ to be processed after <gssapi/gssapi.h>, but does not include it itself.
+ This patch checks for <gssapi/gssapi.h> first and then includes it
+ in the test for <gssapi/gssapi_krb5.h>, resolving the problem.
+
+ Without the patch, <gssapi/gssapi_krb5.h> is "present but cannot be
+ compiled".
+
+- resolvers: no more using AI_CANONNAME
+
+ No resolver anymore needs to use AI_CANONNAME and do reverse
+ lookups. We should work hard to avoid having code that relies on
+ it.
+
+- KRB5: use given host name instead of reverse lookup'ed name
+
+ This code would previously use dns_entry->addr->ai_canonname
+ instead of the given host name, which caused us grief and
+ problems since not all our resolver options do the reverse lookup
+ and I would also guess that it caused problems with KRB5/GSS with
+ virtual name-based hosts. Now the host name from the URL is used.
+
+Dan Fandrich (15 Apr 2010)
+- Remove redundant conditional
+
+- Eliminated an unlikely race condition in some tests.
+
+ Based on a patch from the FreeBSD ports by Peter Pentchev.
+
+Daniel Stenberg (15 Apr 2010)
+- changelog: prevent needless reverse name lookups
+
+- Curl_ipv4_resolve_r: only set AI_CANONNAME when needed
+
+ As reported in bug report #2987196, the code for ipv6 already did
+ the setting of this bit correctly so we copied that logic into
+ the Curl_ipv4_resolve_r() function as well. KRB code is the only
+ code we know that might need the cannonical name so only resolve
+ it for such requests!
+
+- IGNORE: files generated by maketgz
+
+- bumped to start the journey towards 7.20.2
+
+- added contributors from the 7.20.1 RELEASE-NOTES
+
+- ignore files generated by 'maketgz'
+
+Version 7.20.1 (14 Apr 2010)
+
+Daniel Stenberg (14 Apr 2010)
+- 7.20.1: 14 April 2010
+
+Guenter Knauf (13 Apr 2010)
+- Use correct directory for c-ares git pull
+ Signed-off-by: Tor Arntsen <tor@spacetec.no>
+
+Yang Tse (13 Apr 2010)
+- fix compiler warning: variable might be clobbered by longjmp or vfork
+
+Guenter Knauf (13 Apr 2010)
+- added last git commit output for c-ares too.
+
+- changed the git update block to take care of c-ares repo if detected.
+
+- updated timestamp of the script.
+
+- removed obsolete var in gitpull() function
+ no need to create a var - lets just return the status var itself.
+
+- added a cast to silent compiler warning with 64bit systems.
+
+- fixed a path typo in src/Makefile.netware.
+
+Daniel Stenberg (12 Apr 2010)
+- Added text for How To Make a Patch with git
+
+- update the section on timeouts
+
+ The section that describes how to work with timeouts was
+ misleading and could easily trick users to use the wrong API.
+
+- update URL and cut out wrong info on ipv6
+
+ c-ares has had its own URL for a while and we should point
+ people to that. It also works with IPv6 since a long time.
+
+- refer to CURLMOPT_TIMERFUNCTION for multi_socket users
+
+ curl_multi_timeout(3) is simply the wrong function to use
+ if you're using the multi_socket API and this document now
+ states this pretty clearly to help guiding users.
+
+- s/CVS/git
+
+- modified to use the git file, not cvs
+
+ I've done this blindly, and the last piece that works with ares
+ should possibly be done differently now that c-ares isn't a
+ subtree within the curl tree anymore...
+
+- mention missing test servers for <server>
+
+- FTP quote commands prefixed with '*' now can fail without aborting
+
+ Prefixing the FTP quote commands with an asterisk really only
+ worked for the postquote actions. This is now fixed and test case
+ 227 has been extended to verify.
+
+Kamil Dudka (7 Apr 2010)
+- qssl: reflect recent code changes in SSL interface
+
+ Reported by Guenter Knauf.
+
+- nss: handle client certificate related errors
+
+- [Ben Greear brought this change]
+
+ ssl: Fix build when SSL isn't enabled
+
+ Signed-off-by: Ben Greear <greearb@candelatech.com>
+
+- refactorize interface of Curl_ssl_recv/Curl_ssl_send
+
+- simplify code of Curl_resolv_timeout()
+
+- eliminate a race condition in Curl_resolv_timeout()
+
+Daniel Stenberg (2 Apr 2010)
+- [Ben Greear brought this change]
+
+ fixed compiler warnings
+
+- updated contributor count
+
+- add contributors from the 7.20.0 release notes
+
+- fix SFTP download hang
+
+ Matt Wixson found and fixed a bug in the SCP/SFTP area where the
+ code treated a 0 return code from libssh2 to be the same as
+ EAGAIN while in reality it isn't. The problem caused a hang in
+ SFTP transfers from a MessageWay server.
+
+Dan Fandrich (31 Mar 2010)
+- Fixed misleading test message
+
+Daniel Stenberg (31 Mar 2010)
+- update the generic copyright year range
+
+- removed README.cmake due to the improved situation
+
+Guenter Knauf (31 Mar 2010)
+- fix compiler warning with a cast.
+
+- make folks use latest available dependent libraries.
+
+Dan Fandrich (30 Mar 2010)
+- Call curl_global_cleanup() in test 560 to avoid a memory leak
+
+- Allow test 538 to run even when proxy support is disabled
+
+Daniel Stenberg (29 Mar 2010)
+- use (s)size_t for string lengths to fix compiler warns
+
+- use size_t to hold string length
+
+ using int is not fine on 64bit systems
+
+- [Ben Greear brought this change]
+
+ Fix compile warnings in ssh.c
+
+ strlen() returns size_t, but ssh libraries are wanting 'unsigned int'. Add
+ explicit casts and use _ex versions of the ssh library calls.
+
+ Signed-off-by: Ben Greear <greearb@candelatech.com>
+
+- [Ben Greear brought this change]
+
+ fix smtp compile warning
+
+ Use ssize_t instead of int for the Curl_smtp_escape_eob nread
+ argument.
+
+ Signed-off-by: Ben Greear <greearb@candelatech.com>
+
+- Ben's POP3 change
+
+- [Ben Greear brought this change]
+
+ pop3: Get message listing if no mailbox in URL
+
+ If you pass a URL to pop3 that does not contain a message ID as
+ part of the URL, it will currently ask for 'INBOX' which just
+ causes the pop3 server to return an error.
+
+ The change makes libcurl treat en empty message ID as a request
+ for LIST (list of pop3 message IDs). User's code could then
+ parse this and download individual messages as desired.
+
+- [Ben Greear brought this change]
+
+ Allow running ./tests/testcurl.pl from within git repo.
+
+ My first instinct was to run the test script within the checked out
+ repository. This small change to the script allows that to work as
+ expected.
+
+ Signed-off-by: Ben Greear <greearb@candelatech.com>
+
+- minor language fix
+
+- [Ben Greear brought this change]
+
+ allow user+password in the URL for all protocols
+
+ Ben Greear brought a patch that from now on allows all protocols
+ to specify name and user within the URL, in the same manner HTTP
+ and FTP have been allowed to in the past - although far from all
+ of the libcurl supported protocols actually have that feature in
+ their URL definition spec.
+
+- ignore pid files and stunnel.conf
+
+ all used while running tests
+
+- make sure git pull is actually done!
+
+- changelogged: smoother rate limiting
+
+- [Ben Greear brought this change]
+
+ Make rate-limitation logic smoother
+
+ This gives a smoother rate limitation performance by using
+ sub-second pauses and also taking the buffer sizes into
+ account.
+
+- remove all .cvsignore files
+
+- PROT_CLOSEACTION should not include TFTP
+
+ TFTP is not a protocol that uses close actions so it should
+ not be set in that bitmask!
+
+- [Tor Arntsen brought this change]
+
+ Avoid double newline for the 'last commits' log in testcurl.pl
+
+ The backtick command which extracts 'git log' lines come with a
+ newline, so chomp the newline before calling logit(), as the logit
+ function adds a newline by itself.
+
+- [Tor Arntsen brought this change]
+
+ Change to version-independent git option for 'git log --oneline'
+
+ 'git log --oneline' is a relatively recent Git function. It is
+ documented to be the same as 'git log --pretty=oneline --abbrev-commit',
+ so use that instead. It works all the way back to Git 1.5.0.
+
+- show 5 commits even if no git pull was made
+
+- don't touch ares/aclocal.m4 and show recent git commits
+
+ since c-ares no longer embedded, we must not touch such files
+ anymore
+
+ we show the 5 last git commits if git was proven in use, to help
+ us see exactly what's being tested
+
+- use CURL_SIZEOF_LONG instead of SIZEOF_LONG
+
+ That's the symbol we have or generate in include/curl/curlbuild.h
+
+- s/CVS/DEV in the version string from the git repo
+
+Bill Hoffman (24 Mar 2010)
+- Merge branch 'master' of github.com:bagder/curl
+
+- Add .gitattributes files to turn off CRLF translation for some files
+
+Daniel Stenberg (24 Mar 2010)
+- provide a version number as today's date
+
+ It should at least help visualize which autobuilds that are
+ using this script.
+
+- testcurl now uses git instead of CVS
+
+Bill Hoffman (24 Mar 2010)
+- Merge branch 'master' of github.com:bagder/curl
+
+- Enable LDAP by default since it is now disabled when ldap.h is not found,
+
+- CMake fixes for Linux.
+
+ Make sure <sys/socket.h> is included if around when testing/using
+ socklen_t. Also, disable LDAP if LDAP_H is not found on the system.
+
+Daniel Stenberg (24 Mar 2010)
+- [Bob Richmond brought this change]
+
+ fix: timeout after last data chunk was handled
+
+ Bob Richmond: There's an annoying situation where libcurl will
+ read new HTTP response data from a socket, then check if it's a
+ timeout if one is set. If the last packet received constitutes
+ the end of the response body, libcurl still treats it as a
+ timeout condition and reports a message like:
+
+ "Operation timed out after 3000 milliseconds with 876 out of 876
+ bytes received"
+
+ It should only a timeout if the timer lapsed and we DIDN'T
+ receive the end of the response body yet.
+
+- avoid compiler warning without USE_ALARM_TIMEOUT
+
+Bill Hoffman (24 Mar 2010)
+- Fix curl CMake build.
+
+ This commit fixes the cmake build of curl, and cleans up the
+ cmake code a little. It removes some commented out code and
+ some trailing whitespace. To get curl to build the binary
+ tree include/curl directory needed to be added to the include
+ path. Also, SIZEOF_SHORT needed to be added. A check for the
+ lack of defines of SIZEOF_* for warnless.c was added.
+
+Daniel Stenberg (24 Mar 2010)
+- [Chris Conroy brought this change]
+
+ remove debug printfs
+
+- RTSP GET_PARAMETER fix
+
+ Christopher Conroy fixed a problem with RTSP and GET_PARAMETER
+ reported to us by Massimo Callegari. There's a new test case 572
+ that verifies this now.
+
+- remove trace of CVS
+
+- [Chris Conroy brought this change]
+
+ Fix RTSP GET_PARAMETER empty and non-empty operation.
+
+ Test coverage included. Thanks to Massimo Callegari for the bug report
+
+- s/CVS/DEV/ in the version string for repo versions
+
+- scrapped all left-over TODOs
+
+ In order to get back on track, I've removed all the plans for
+ stuff I had in the queue. I will instead focus on fixing bugs and
+ relying on that people who truly want things added will come back
+ on the mailing list and nag and provide patches.
+
+ 7.20.1 should be possible to release in April 2010
+
+- restore executable bits on some files
+
+- remove the CVSish $Id$ lines
+
+- The 'ares' subtree has been removed from the source repository
+
+- s/CVS/git
+
+- update to current state
+
+- remove the ares subtree
+
+ c-ares is now hosted entirely separate from the curl project
+ see http://c-ares.haxx.se/ for all details concerning c-ares,
+ its source repository and more.
+
+- mark connection as connected
+
+ Kenny To filed the bug report #2963679 with patch to fix a
+ problem he experienced with doing multi interface HTTP POST over
+ a proxy using PROXYTUNNEL. He found a case where it would connect
+ fine but bits.tcpconnect was not set correct so libcurl didn't
+ work properly.
+
+ (http://curl.haxx.se/bug/view.cgi?id=2963679)
+
+- enabled valgrind
+
+ I ran it now successfully and it helped to pinpoint a libssh2
+ memory leak!
+
+Dan Fandrich (23 Mar 2010)
+- Updated Symbian notes
+
+Daniel Stenberg (23 Mar 2010)
+- chunked-encoding with Content-Length: header problem
+
+ Akos Pasztory filed debian bug report #572276
+ http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=572276
+ mentioning a problem with a resource that returns chunked-encoded
+ _and_ with a Content-Length and libcurl failed to properly ignore
+ the latter information.
+
+- delayed easy handle kill caused double Curl_close() call
+
+ Hauke Duden provided an example program that made the multi
+ interface crash. His example simply used the multi interface and
+ did first one FTP transfer and after completion it used a second
+ easy handle and did another FTP transfer on the same FTP server.
+
+ This triggered a bug in the "delayed easy handle kill" system
+ that curl uses: when an FTP connection is left alive it must keep
+ an easy handle around internally - only for the purpose of having
+ an easy handle when it later disconnects it. The code assumed
+ that when the easy handle was removed and an internal reference
+ was made, that version could be killed later on when a new easy
+ handle came using the same connection. This was wrong as Hauke's
+ example showed that the removed handle wasn't killed for real
+ until later. This caused a double close attempt => segfault.
+
+- ignore more files generated when tests run in the source tree
+
+- Thomas Lopatic fixed the alarm()-based DNS timeout
+
+- [Thomas Lopatic brought this change]
+
+ fix the alarm()-based DNS timeout
+
+ Looking at the code of Curl_resolv_timeout() in hostip.c, I think
+ that in case of a timeout, the signal handler for SIGALRM never
+ gets removed. I think that in my case it gets executed at some
+ point later on when execution has long left Curl_resolv_timeout()
+ or even the cURL library.
+
+ The code that is jumped to with siglongjmp() simply sets the
+ error message to "name lookup timed out" and then returns with
+ CURLRESOLV_ERROR. I guess that instead of simply returning
+ without cleaning up, the code should have a goto that jumps to
+ the spot right after the call to Curl_resolv().
+
+- [Daniel Johnson brought this change]
+
+ Fix warnings for clang
+
+- Merge branch 'master' of github.com:bagder/curl
+
+Kamil Dudka (22 Mar 2010)
+- [douglas steinwand brought this change]
+
+ Fix insufficient initialization in Curl_clone_ssl_config()
+
+ which could have caused a double free when reusing curl handle.
+
+Daniel Stenberg (22 Mar 2010)
+- we never used this file anyway
+
+- s/CVS/git
+
+- various changes of CVS to git
+
+- remove references to CVS in the code and use DEV instead
+
+- Ben Greear's two fixes explained
+
+- [Ben Greear brought this change]
+
+ Fix tftp return codes and tsize upload handling
+
+ Error codes were not properly returned to the main curl code (and on to apps
+ using libcurl).
+
+ tftp was crapping out when tsize == 0 on upload, but I see no reason to fail
+ to upload just because the remote file is zero-length. Ignore tsize option on
+ upload.
+
+- more files to ignore
+
+- provide an initial set of .gitignore files
+
+Kamil Dudka (19 Mar 2010)
+- - Improved Curl_read() to not ignore the error returned from Curl_ssl_recv().
+
+Daniel Stenberg (18 Mar 2010)
+- fix warning about conversions between curl_off_t and long
+
+Yang Tse (18 Mar 2010)
+- another shot at the ftp_init() icc 9.1 optimizer issue
+
+- replaced intel compiler option -no-ansi-alias with -fno-strict-aliasing
+
+- update outdated serial number
+
+Dan Fandrich (16 Mar 2010)
+- Factored out some code into a few independent functions
+
+Daniel Stenberg (15 Mar 2010)
+- - Constantine Sapuntzakis brought a patch:
+
+ The problem mentioned on Dec 10 2009
+ (http://curl.haxx.se/bug/view.cgi?id=2905220) was only partially fixed.
+ Partially because an easy handle can be associated with many connections in
+ the cache (e.g. if there is a redirect during the lifetime of the easy
+ handle). The previous patch only cleaned up the first one. The new fix now
+ removes the easy handle from all connections, not just the first one.
+
+Yang Tse (11 Mar 2010)
+- fix compiler warning
+
+Dan Fandrich (11 Mar 2010)
+- SSL should now be working out-of-the-box on Symbian S60.
+
+- Enable Symbian zlib support by default.
+
+- Allow compilation even when OpenSSL has been configured without MD4 support.
+
+- A few Symbian build changes
+
+Yang Tse (9 Mar 2010)
+- watt32 compilation fix
+
+Daniel Stenberg (6 Mar 2010)
+- - Ben Greear brought a patch that fixed the rate limiting logic for TFTP when
+ the easy interface was used.
+
+- indent fix by Ben Greear, I removed some braces for single-line conditional
+ expressions
+
+Yang Tse (6 Mar 2010)
+- Added another VS10 version string
+
+- fix line break
+
+- removed usage of 's6_addr', fixing compilation issue triggered with no
+ longer using 'in6_addr' but only our 'ares_in6_addr' struct
+
+Daniel Stenberg (5 Mar 2010)
+- Daniel Johnson provided fixes for building with the clang compiler
+
+Yang Tse (5 Mar 2010)
+- Added IPv6 name servers support
+
+Gisle Vanem (5 Mar 2010)
+- Ops!. Readded ares_nowarn.h.
+
+- Added ares_nowarn.c.
+
+Yang Tse (5 Mar 2010)
+- Constantine Sapuntzakis detected and fixed a double free in builds done
+ with threaded resolver enabled (Windows default configuration) that would
+ get triggered when a curl handle is closed while doing DNS resolution.
+
+- Added SIZEOF_INT and SIZEOF_SHORT definitions for VMS configuration file
+
+Daniel Stenberg (4 Mar 2010)
+- Julien Chaffraix clarified CURLOPT_HEADERFUNCTION and made
+ CURLOPT_HEADERFUNCTION and CURLOPT_WRITEFUNCTION more consistent
+
+- - [Daniel Johnson] I've been trying to build libcurl with clang on Darwin and
+ ran into some issues with the GSSAPI tests in configure.ac. The tests first
+ try to determine the include dirs and libs and set CPPFLAGS and LIBS
+ accordingly. It then checks for the headers and finally sets LIBS a second
+ time, causing the libs to be included twice. The first setting of LIBS seems
+ redundant and should be left out, since the first part is otherwise just
+ about finding headers.
+
+ My second issue is that 'krb5-config --libs gssapi' on Darwin is less than
+ useless and returns junk that, while it happens to work with gcc, causes
+ clang to choke. For example, --libs returns $CFLAGS along with the libs,
+ which is really retarded. Simply setting 'LIBS="$LIBS -lgssapi_krb5
+ -lresolv"' on Darwin is sufficient.
+
+- - Based on patch provided by Jacob Moshenko, the transfer logic now properly
+ makes sure that when using sub-second timeouts, there's no final bad 1000ms
+ wait. Previously, a sub-second timeout would often make the elapsed time end
+ up the time rounded up to the nearest second (e.g. 1s for 200ms timeout)
+
+- update the generic copyright year range to include 2010
+
+- - Andrei Benea filed bug report #2956698 and pointed out that the
+ CURLOPT_CERTINFO feature leaked memory due to a missing OpenSSL function
+ call. He provided the patch to fix it too.
+
+ http://curl.haxx.se/bug/view.cgi?id=2956698
+
+- - Markus Duft pointed out in bug #2961796 that even though Interix has a
+ poll() function it doesn't quite work the way we want it so we must disable
+ it, and he also provided a patch for it.
+
+ http://curl.haxx.se/bug/view.cgi?id=2961796
+
+- - Made the pingpong timeout code properly deal with the response timeout AND
+ the global timeout if set. Also, as was reported in the bug report #2956437
+ by Ryan Chan, the time stamp to use as basis for the per command timeout was
+ not set properly in the DONE phase for FTP (and not for SMTP) so I fixed
+ that just now. This was a regression compared to 7.19.7 due to the
+ conversion of FTP code over to the generic pingpong concepts.
+
+ http://curl.haxx.se/bug/view.cgi?id=2956437
+
+- remove assignment never used
+
+- - Ben Greear provided an update for TFTP that fixes upload.
+
+- SSL, not SSH, SSL
+
+- - Wesley Miaw reported bug #2958179 which identified a case of looping during
+ OpenSSL based SSL handshaking even though the multi interface was used and
+ there was no good reason for it.
+
+ http://curl.haxx.se/bug/view.cgi?id=2958179
+
+Yang Tse (28 Feb 2010)
+- Added SIZEOF_INT and SIZEOF_SHORT definitions for non-configure systems
+
+- Added ares_nowarn.* to VC6 project file
+
+Daniel Stenberg (26 Feb 2010)
+- spellchecked by Stéphane Fillod
+
+- - Pat Ray in bug #2958474 pointed out an off-by-one case when receiving a
+ chunked-encoding trailer.
+
+ http://curl.haxx.se/bug/view.cgi?id=2958474
+
+Dan Fandrich (26 Feb 2010)
+- Fixed a couple of out of memory leaks and a segfault in the IMAP code.
+
+Yang Tse (26 Feb 2010)
+- fix sizeof short
+
+- Added SIZEOF_INT and SIZEOF_SHORT definitions for non-configure systems
+
+- Added SIZEOF_INT definition
+
+- fix compiler warning
+
+- fix compiler warning
+
+- fix compiler warning
+
+Dan Fandrich (25 Feb 2010)
+- Fixed a couple of out of memory leaks and a segfault in the SMTP code.
+
+Yang Tse (25 Feb 2010)
+- fix file name
+
+- Fixed bug report #2958074 indicating
+ (http://curl.haxx.se/bug/view.cgi?id=2958074) that curl on Windows with
+ option --trace-time did not use local time when timestamping trace lines.
+ This could also happen on other systems depending on time souurce.
+
+- enable 802 and 803
+
+- fix compiler warning
+
+- fix compiler warning
+
+- fix compiler warning
+
+- fix socket data type
+
+- fix socket data type and logging format in debug tracking socket functions
+
+- convert Curl_ultous() and Curl_ultouc() functions to curlx_ultous() and
+ curlx_ultouc(), exposing them through curlx.h to allow proper code reuse
+ later in our test harness.
+
+- updated sources
+
+Patrick Monnerat (22 Feb 2010)
+- _ Adjusted RFC821 HELO fallback and enabled test804
+
+- - Proper handling of STARTTLS on SMTP, taking CURLUSESSL_TRY into account.
+ - SMTP falls back to RFC821 HELO when EHLO fails (and SSL is not required).
+ - Use of true local host name (i.e.: via gethostname()) when available, as default argument to SMTP HELO/EHLO.
+ - Test case 804 for HELO fallback.
+
+Yang Tse (22 Feb 2010)
+- add header inclusion
+
+- fix compiler warning
+
+- fix compiler warning
+
+Daniel Stenberg (21 Feb 2010)
+- clarify more details on section "2.1 More non-blocking"
+
+- TFTP transfers are not blocking since 7.20.0
+
+- - Fixed the SMTP compliance by making sure RCPT TO addresses are specified
+ properly in angle brackets. Recipients provided with CURLOPT_MAIL_RCPT now
+ get angle bracket wrapping automatically by libcurl unless the recipient
+ starts with an angle bracket as then the app is assumed to deal with that
+ properly on its own.
+
+- - I made the SMTP code expect a 250 response back from the server after the
+ full DATA has been sent, and I modified the test SMTP server to also send
+ that response. As usual, the DONE operation that is made after a completed
+ transfer is still not doable in a non-blocking way so this waiting for 250
+ is unfortunately made blockingly.
+
+- corected a comment and wrapped a few longish lines
+
+Yang Tse (20 Feb 2010)
+- fix compiler warning
+
+- fix compiler warning
+
+- fix compiler warning
+
+- fix compiler warning
+
+- fix compiler warning
+
+Daniel Stenberg (17 Feb 2010)
+- ares_reinit()
+
+ - To allow an app to force a re-read of /etc/resolv.conf etc, pretty much
+ like the res_init() resolver function offers
+
+- use curl standard indentation and line lengths
+
+Yang Tse (16 Feb 2010)
+- replaced tabs with spaces
+
+- fix Content-Length validation
+
+Daniel Stenberg (15 Feb 2010)
+- use (void) in front of fwrite() calls that ignore the return code
+
+Yang Tse (15 Feb 2010)
+- fix compiler warning: conversion from "long" to "size_t" may lose sign
+
+- fix compiler warning: conversion from "long" to "size_t" may lose sign
+
+Daniel Stenberg (15 Feb 2010)
+- -w speed_download and speed_upload are measured in bytes per second
+
+- 75. NTLM authentication involving unicode user name or password.
+ http://curl.haxx.se/mail/lib-2009-10/0024.html
+ http://curl.haxx.se/bug/view.cgi?id=2944325
+
+Yang Tse (14 Feb 2010)
+- removed trailing whitespace
+
+- fix compiler warning
+
+- Overhauled test suite getpart() function. Fixing potential out of bounds
+ stack and memory overwrites triggered with huge test case definitions.
+
+Daniel Stenberg (13 Feb 2010)
+- - Martin Hager reported and fixed a problem with a missing quote in libcurl.m4
+
+ (http://curl.haxx.se/bug/view.cgi?id=2951319)
+
+Gunter Knauf (13 Feb 2010)
+- used allways #ifdef / #ifndef;
+ moved gethostbyname_thread() to #else case to avoid 'not used' compiler warning.
+
+- replaced tabs by spaces, removed trailing tabs/spaces.
+
+Daniel Stenberg (13 Feb 2010)
+- - Tom Donovan fixed the CURL_FORMAT_* defines when building with cmake.
+
+- - Jack Zhang reported a problem with SMTP: we wrongly used multiple addresses
+ in the same RCPT TO line, when they should be sent in separate single
+ commands. I updated test case 802 to verify this.
+
+ - I also fixed a bad use of my_setopt_str() of CURLOPT_MAIL_RCPT in the curl
+ tool which made it try to output it as string for the --libcurl feature
+ which could lead to crashes.
+
+- CURLOPT_MAIL_RCPT is *not* a string so we must not try to printf() it
+
+- free --mail-from strings properly
+
+Patrick Monnerat (11 Feb 2010)
+- _ Make it compilable again on OS400.
+ _ Upgrade OS400 EBCDIC wrappers for new options.
+ _ Upgrade ILE/RPG bindings to current state.
+
+Yang Tse (11 Feb 2010)
+- mention last changes
+
+- Steven M. Schweda updated VMS readme file
+
+- Steven M. Schweda removed batch_compile.com and defines.com
+
+- Steven M. Schweda fixed:
+
+ VMS builder bad behavior when used in a batch job.
+
+ Various ".LIS" and ".MAP" files created without being requested
+ by a "LIST" command-line option, and in the wrong place, too.
+
+ Some minor typographical changes.
+
+Dan Fandrich (10 Feb 2010)
+- Mention the minimum size of CURL_MAX_WRITE_SIZE
+
+Yang Tse (10 Feb 2010)
+- - remove extra "\r\n" from doc404_RTSP
+
+ - avoid memory alignment issue when setting RTSP packet length
+
+Dan Fandrich (9 Feb 2010)
+- Removed some erroneous "compressed" key words
+
+Daniel Stenberg (9 Feb 2010)
+- start working on 7.20.1
+
+Version 7.20.0 (9 Feb 2010)
+
+Daniel Stenberg (9 Feb 2010)
+- spell and 7.20.0
+
+- - When downloading compressed content over HTTP and the app as asked libcurl
+ to automatically uncompress it with the CURLOPT_ENCODING option, libcurl
+ could wrongly provide the callback with more data than what the maximum
+ documented amount. An application could thus get tricked into badness if the
+ maximum limit was trusted to be enforced by libcurl itself (as it is
+ documented).
+
+ This is further detailed and explained in the libcurl security advisory
+ 20100209 at
+
+ http://curl.haxx.se/docs/adv_20100209.html
+
+- set VERSIONINFO accordingly for the 7.20.0 release
+
+Yang Tse (6 Feb 2010)
+- warning fix
+
+- OOM handling fix
+
+- OOM handling fix
+
+- fix compiler warning
+
+- fix compiler warning
+
+- fix compiler warning
+
+- Addes OOM handling for curl_easy_setopt() calls in test
+
+- - avoid OpenSSL 0.9.8 ENGINE_by_id memory leak
+
+ - cleanup parenthesis usage in return statements
+
+- - attempt to workaround icc 9.1 optimizer issue
+
+- fix printf-style format strings
+
+- Validate server port argument
+
+- Fix variable initialization
+
+- Modified test case 557 to additionally verify libcurl's internal curl_m*printf()
+ functions formatting functionality when handling signed and unsigned shorts.
+
+- Added size check for 'short' data type
+
+- Fix compiler warning: unused variable
+
+- added an additional second to allow test to pass on heavily loaded servers
+
+Dan Fandrich (3 Feb 2010)
+- Changed the Watcom makefiles to make them easier to keep in sync with
+ Makefile.inc since that can't be included directly.
+
+Daniel Stenberg (3 Feb 2010)
+- more symbols added in 7.20.0
+
+Yang Tse (3 Feb 2010)
+- Fix OOM handling
+
+- Fix progressmode Configurable struct member data type. Changed to
+ 'int' which fits better with existing CURL_PROGRESS_* definitions.
+
+- Fix portability issue related with unaligned memory access
+
+- Fix compiler warnings: conversion from 'const int ' to 'unsigned char ', possible loss of data
+
+- cookies with same path length might get sorted in different order when
+ using different qsort implementations. In order to make this test give
+ same results on different systems, paths now have different lengths.
+
+- added an additional second to allow test to pass on heavily loaded servers
+
+- Fix compiler warning: conditional expression is constant
+
+- Fix compiler warning: local variable may be used without having been initialized.
+
+- Fix compiler warnings: conversion from 'const int ' to 'unsigned char ', possible loss of data
+
+- Fix compiler warnings:
+
+ (1) conversion from 'const int ' to 'unsigned char ', possible loss of data
+ (2) conditional expression is constant
+
+- mention a couple of changes back from November
+
+- mention run time statistics options
+
+- - Symbol CURL_FORMAT_OFF_T now obsoleted, will be removed in a future release,
+ symbol will not be available when building with CURL_NO_OLDIES defined. Use
+ of CURL_FORMAT_CURL_OFF_T is preferred since 7.19.0
+
+- avoid possibility of using obsoleted stuff
+
+- remove setup.h inclusion which is already done from test.h inclusion
+
+Kamil Dudka (2 Feb 2010)
+- mention SOCKS related problems in the curl(1) man page
+
+Yang Tse (2 Feb 2010)
+- Fix compiler warning: variable was set but never used
+
+ Simplify preprocessor symbol checking
+
+Daniel Stenberg (2 Feb 2010)
+- Julien Chaffraix pointed out a comment mistake, and I re-indented the code
+ slightly while editing
+
+Yang Tse (2 Feb 2010)
+- include headers
+
+- Conroy added a check to the coded message size since the docs stipulate
+ that each call will contain a full protocol packet.
+
+- Conroy's fix to make the code match with the RTP documentation regarding
+ writing out the whole header. The docs say it writes the whole header,
+ but the code (before this patch) did not write out the leading $.
+
+Daniel Stenberg (1 Feb 2010)
+- We introduce a loop in lib/multi.c around all calls to multi_runsingle() and
+ simply check for CURLM_CALL_MULTI_PERFORM internally. This has the added
+ benefit that this goes in line with my long-term wishes to get rid of the
+ CURLM_CALL_MULTI_PERFORM all together from the public API.
+
+Yang Tse (1 Feb 2010)
+- update rtsp server header field from SWS to RTSPD
+
+- Test suite support for RTSP
+
+- Make Curl_pop3_write() additionally truncate trailing POP3_EOB from received
+ string buffer, otherwise Curl_client_write() call with zero size would write
+ to the end of string buffer including matched POP3_EOB.
+
+- WIN32 fix, _beginthreadex() may return either 0 or -1L upon failure
+
+- fix errno usage for WIN32 builds
+
+- fix printf-style format strings
+
+- Chris Conroy fixed test #568 issues with carriage returns
+
+- RTSP followup fix. Both the pipelined and non-pipelined case need to
+ check for (excess > 0 && !k->ignorebody).
+
+Daniel Stenberg (28 Jan 2010)
+- - Tommie Gannert pointed out a silly bug in ares_process_fd() since it didn't
+ check for broken connections like ares_process() did. Based on that, I
+ merged the two functions into a single generic one with two front-ends.
+
+Yang Tse (28 Jan 2010)
+- fix printf-style format strings
+
+- Use 'size_t' for GETNAMEINFO_TYPE_ARG2 definition for VMS.
+
+ http://curl.haxx.se/mail/lib-2009-12/0293.html
+
+- portability fix
+
+- fix printf-style format strings
+
+- Known bug #64 fixed by Constantine Sapuntzakis and Joshua Kwan in 7.20.0
+
+- Chris Conroy provided first RTSP tests
+
+- RTSP tests disabled until test harness RTSP support is updated
+
+- Chris Conroy's RTSP followup fixes
+
+- mention asynchronous DNS lookups enhancements
+
+- Restore normal operation:
+
+ c-ares is only enabled when specifically requested.
+
+ Consequently, c-ares default setting is disabled.
+
+- fix c-ares assumed check being skipped
+
+- fix compiler warning
+
+- fix LDFLAGS preservation in CURL_CHECK_LIB_ARES
+
+Daniel Stenberg (26 Jan 2010)
+- no need to take precautiono for how things were before 7.16.0 since that
+ is now a very long time ago
+
+- - Mike Crowe made libcurl return CURLE_COULDNT_RESOLVE_PROXY when it is the
+ proxy that cannot be resolved when using c-ares. This matches the behaviour
+ when not using c-ares.
+
+Dan Fandrich (26 Jan 2010)
+- Added curl_threads.c to a few more non-configure build files
+
+Yang Tse (26 Jan 2010)
+- minor fixes for --enable-ares configure option
+
+Daniel Stenberg (26 Jan 2010)
+- Andre Guibert de Bruet improved the libssh2 error code translation
+
+Yang Tse (26 Jan 2010)
+- resolver selection for non-configure Windows builds, default is threaded DNS
+
+- add curl_threads.c to non-configure target build files
+
+- onstantine Sapuntzakis threaded resolver enhancements
+
+- Constantine Sapuntzakis threaded resolver enhancements
+
+- Constantine Sapuntzakis provided initial thread abstraction layer
+
+- make Curl_handler_*_proxy definition static
+
+Dan Fandrich (25 Jan 2010)
+- Updated minimum library sizes
+
+Yang Tse (25 Jan 2010)
+- fix compiler warning
+
+Daniel Stenberg (24 Jan 2010)
+- Julien Chaffraix corrected bad #elif lines to silence warnings
+
+Yang Tse (24 Jan 2010)
+- HAVE_GETADDRINFO_THREADSAFE definition for non-configure win32 builds
+
+Bjorn Stenberg (23 Jan 2010)
+- Mention -J change
+
+- Added -J/--remote-header-name.
+
+Daniel Stenberg (23 Jan 2010)
+- "remove progress meter from libcurl" at next API break
+
+Yang Tse (23 Jan 2010)
+- add inclusion of curl_memory.h
+
+- adjust preprocessor symbol definition check relative to resolver specialty
+
+- PKTSIZE might have been already defined in arpa/tftp.h
+
+Dan Fandrich (23 Jan 2010)
+- Include "curl_memory.h" to get the strdup replacement when necessary
+
+Daniel Stenberg (22 Jan 2010)
+- wrap long lines and do some indent policing
+
+Yang Tse (22 Jan 2010)
+- Definitions of resolver specialty compile-time defines CURLRES_* moved
+ from hostip.h to setup.h in order to allow proper inclusion in any file.
+
+ This represents no functional change at all in which resolver is used,
+ everything still works as usual, internally and externally there is no
+ difference in behavior.
+
+- adjust rtsp protocol support in curl-config and libcurl.pc when http is disabled
+
+- deal with the possibility that CURL_DISABLE_RTSP may already be defined
+
+- fix compiler warning: statement is unreachable
+
+- fix compilation when http is disabled
+
+- disabling of rtsp when http isn't enabled required here for non-configure systems
+
+Daniel Stenberg (22 Jan 2010)
+- wrap long lines, remove (very old) attribution from code
+
+- cleanups by Julien Chaffraix
+
+- alphabetically sort the list of supported protocols
+
+- In spite claiming to tbe disabled by default, RTSP is enabled and it now
+ also says so. I also made the list of protocols get sorted.
+
+- expanded to provide info about the newer protocols too
+
+- s/RTPFUNCTION/INTERLEAVEFUNCTION/
+ s/RTPDATA/INTERLEAVEDATA/
+
+- keep lines shorter than 80 columns, and reduce/remove the use of the word
+ 'note' in most description as it is mostly useless.
+
+Yang Tse (22 Jan 2010)
+- Julien Chaffraix adjusted "<name> section" line length
+
+- Constantine Sapuntzakis refactoring of async callbacks, allowing
+ removal of Curl_addrinfo_copy(), Curl_addrinfo6_callback(), and
+ Curl_addrinfo4_callback()
+
+Dan Fandrich (21 Jan 2010)
+- Added rtsp.c to the non-configure target build files
+
+Yang Tse (21 Jan 2010)
+- fix compiler warning
+
+- make tftp_translate_code() static, it is only used from within tftp.c
+
+- fix warning triggered when debugging on cygwin
+
+- allow exporting of exe_ext() sub
+
+- improve displaylogcontent() sub fixing a warning
+
+Daniel Stenberg (21 Jan 2010)
+- remove typedef we ended up not using
+
+- Chris Conroy brought support for RTSP transfers, and with it comes 8(!) new
+ libcurl options for controlling what to get and how to receive posssibly
+ interleaved RTP data. Initial commit.
+
+- Julien Chaffraix fixed line lengths
+
+- Julien Chaffraix removed an old obsolete typedef
+
+- Yun Fu pointed out a flaw in the loop that checks handles, and I indented
+ the code more curl-style
+
+- "5.3 Sort outgoing cookies" removed, we now sort them
+
+Yang Tse (20 Jan 2010)
+- SIGTERM is the signal to trap here, SIGKILL can't be caught.
+
+- Use killsockfilters() to kill sockfilter processes, this ensures that when
+ killing a sockfilter process the actual PID from the pid file is used and
+ not the one returned by open2() which might be different.
+
+- Allow killsockfilters() to take a 5th optional parameter that when provided
+ indicates that only one of the two possible sockfilter processes should be
+ killed. Valid values for this parameter are 'main' and 'data'.
+
+- Use delete() to unset environment variables instead of assigning undef which
+ generates warning 'Use of uninitialized value in scalar assignment' with perl
+ versions older than 5.10
+
+- Adjust valgrind logs file name detection.
+
+ Adjust environment vars setting and restoring from test definition.
+
+ Avoid using strftime in torture sub.
+
+Daniel Stenberg (20 Jan 2010)
+- modified test case 8 to also make sure that we deal with cookies using
+ identical names but different paths properly
+
+- - As was pointed out on the http-state mailing list, the order of cookies in a
+ HTTP Cookie: header _needs_ to be sorted on the path length in the cases
+ where two cookies using the same name are set more than once using
+ (overlapping) paths. Realizing this, identically named cookies must be
+ sorted correctly. But detecting only identically named cookies and take care
+ of them individually is harder than just to blindly and unconditionally sort
+ all cookies based on their path lengths. All major browsers also already do
+ this, so this makes our behavior one step closer to them in the cookie area.
+
+ Test case 8 was the only one that broke due to this change and I updated it
+ accordingly.
+
+- oops, I forgot to cvs add this before my previous commit (Dan Fandrich
+ pointed it out to me)
+
+- - David McCreedy brought a fix and a new test case (129) to make libcurl work
+ again when downloading files over FTP using ASCII and it turns out that the
+ final size of the file is not the same as the initial size the server
+ reported. This is very common since servers don't take the newline
+ conversions into account.
+
+- "260 - IMAP, POP3 and SMTP support" done!
+
+- avoid "Use of uninitialized value $l in concatenation"
+
+Yang Tse (19 Jan 2010)
+- Fail harder when curl coredumps trying to verify http and ftp servers.
+
+ Add some debug messages to see what's going on with valgrind logs.
+
+- prevent %runcert hash growth when clearing items
+
+- update copyright year notice
+
+- Constantine Sapuntzakis enhancements to make memory tracking log file writing
+ of messages atomic, on systems where an fwrite of a memory buffer is atomic.
+
+Dan Fandrich (18 Jan 2010)
+- Added PEM certificate keyword
+
+Yang Tse (18 Jan 2010)
+- fix warnings
+
+- Stop ssl running server when cert file currently used by server is
+ different than the one specified in test definition for same server
+
+- fix warnings
+
+- - Remove QD restarting of https servers. Proper fixing required.
+ This will make tests 310 311 and 312 fail while fixing.
+
+ - Remove some debug messages
+
+- make verifyhttp use different file names depending on server characteristics
+
+- add serverfactors() sub which returns server characterization factors
+
+- fix warnings
+
+- fix warnings
+
+- fix warnings
+
+- add some debug messages
+
+- use servername_id() from serverhelp.pm
+
+- refactored stopping of test harness servers
+
+- Store now this file in CVS with unix line endings.
+
+ maketgz already converts this file to DOS style with an awk filter.
+
+- Declaration of $sshdlog is done in sshhelp.pm
+
+- Start using the centralized pidfile and logfile name generation
+ subroutines for ssh and socks test suite servers.
+
+Dan Fandrich (15 Jan 2010)
+- Added the new protocol source files to the non-autoconf build files
+
+Yang Tse (14 Jan 2010)
+- Squeeze slack time when killing more than one server from
+ the <killserver> section of test harness definition files.
+
+Kamil Dudka (14 Jan 2010)
+- - Suppressed side effect of OpenSSL configure checks, which prevented NSS from
+ being properly detected under certain circumstances. It had been caused by
+ strange behavior of pkg-config when handling PKG_CONFIG_LIBDIR. pkg-config
+ distinguishes among empty and non-existent environment variable in that case.
+
+Yang Tse (13 Jan 2010)
+- Give the test a bit mote time to run so it passes on slow machines
+
+Kamil Dudka (13 Jan 2010)
+- remove trailing spaces from configure.ac
+
+Yang Tse (12 Jan 2010)
+- Added test case #1112 which does an FTPS download with strict timeout
+ and slow data transfer in a similar way as test case #1086 does for FTP.
+
+ This also exercises <killserver> section for the FTPS server.
+
+- Make runtests.pl actually support any (valid) server specification
+ for the <killserver> section of test harness definition files.
+
+- Fix tftp and sftp supported protocols in servername_str()
+
+- Make sockfilter kill messages look alike server ones
+
+- Adjust vor VPATH builds
+
+Daniel Stenberg (11 Jan 2010)
+- - Gil Weber reported a peculiar flaw with the multi interface when doing SFTP
+ transfers: curl_multi_fdset() would return -1 and not set and file
+ descriptors several times during a transfer of a single file. It turned out
+ to be due to two different flaws now fixed. Gil's excellent recipe helped me
+ nail this.
+
+- ssh_statemach_act() is now modified to loop over the switch() to perform as
+ much as possible in one go, as long as it doesn't block and hasn't reached the
+ end of the state machine.
+ This avoids spurious -1 returns from curl_multi_fdset() simply because
+ previously it would return from this function without anything in EWOUDLBLOCK
+ and thus basically it wasn't actually waiting for anything!!
+
+- After the TCP connect is confirmed in CURLM_STATE_WAITCONNECT and it changes
+ state, we return CURLM_CALL_MULTI_PERFORM unconditionally then so that we
+ can act faster like in the case the protocol-specific connect doesn't block
+ on anything and we can just persue on the next action immediately. It also
+ then avoids a case where curl_multi_fdset() would return -1.
+
+- progress callback called repeatedly during slow connects
+
+- - Made sure that the progress callback is repeatedly called at a regular
+ interval even during very slow connects.
+
+- - The tests/runtests.pl script now checks to see if the test case that runs is
+ present in the tests/data/Makefile.am and outputs a notice message on the
+ screen if not. Each test file has to be included in that Makefile.am to get
+ included in release archives and forgetting to add files there is a common
+ mistake. This is an attempt to make it harder to forget.
+
+Yang Tse (11 Jan 2010)
+- secureserver.pl is now the test harness script used for SSL/TLS.
+
+- secureserver.pl is now the test harness script used for SSL/TLS.
+
+ Start using the centralized pidfile and logfile name generation
+ subroutines for https and ftps test suite servers.
+
+- Update error message to include port number
+
+- Previous commit adjustments
+
+- Start using the centralized pidfile and logfile name generation
+ subroutines for ftp, pop3, imap and smtp test suite servers.
+
+Daniel Stenberg (9 Jan 2010)
+- struct Curl_sh_entry's 'inuse' member was no longer used and is now removed
+
+- - Johan van Selst found and fixed a OpenSSL session ref count leak:
+
+ ossl_connect_step3() increments an SSL session handle reference counter on
+ each call. When sessions are re-used this reference counter may be
+ incremented many times, but it will be decremented only once when done (by
+ Curl_ossl_session_free()); and the internal OpenSSL data will not be freed
+ if this reference count remains positive. When a session is re-used the
+ reference counter should be corrected by explicitly calling
+ SSL_SESSION_free() after each consecutive SSL_get1_session() to avoid
+ introducing a memory leak.
+
+ (http://curl.haxx.se/bug/view.cgi?id=2926284)
+
+Yang Tse (8 Jan 2010)
+- Start using the centralized pidfile and logfile name generation
+ subroutines for http and tftp test suite servers.
+
+- Remove extra line feed
+
+- Use '_stunnel.log' ending also for https test server log
+
+- sws and tftpd command line option naming adjustments
+
+Daniel Stenberg (7 Jan 2010)
+- removed a parameter from the Curl_http_readwrite_headers() prototype to remove
+ the need for the struct forward declaration from http.h which caused problems
+ with gcc 2.96 and quite frankly the parameter wasn't necessary anyway
+
+Claes Jakobsson (7 Jan 2010)
+- List fragment tests in Makefile.am and better provide better names
+
+Daniel Stenberg (7 Jan 2010)
+- removed Curl_http_header_append() prototype as it isn't used anymore, the
+ function was moved to http.c and was made static and renamed
+
+- - Make sure the progress callback is called repeatedly even during very slow
+ name resolves when c-ares is used for resolving.
+
+Yang Tse (6 Jan 2010)
+- Disable tests 802 and 803
+
+- Prevent detection of stdint.h on IRIX systems, even when available.
+
+ IRIX MIPSpro 7.4 C++ compiler does not tolerate inclusion of stdint.h
+
+Claes Jakobsson (6 Jan 2010)
+- Julien Chaffraix fixed so that the fragment part in an URL is not sent to the server anymore
+
+Daniel Stenberg (4 Jan 2010)
+- use the modern name for this option
+
+Kamil Dudka (3 Jan 2010)
+- - Julien Chaffraix eliminated a duplicated initialization in singlesocket().
+
+Daniel Stenberg (2 Jan 2010)
+- - Make curl support --ssl and --ssl-reqd instead of the previous FTP-specific
+ versions --ftp-ssl and --ftp-ssl-reqd as these options are now used to
+ control SSL/TLS for IMAP, POP3 and SMTP as well in addition to FTP. The old
+ option names are still working but the new ones are the prefered ones
+ (listed and documented).
+
+- stop at once if the EOB marker shows up, even if something else might get
+ sent afterwards
+
+- update copyright year since we are in 2010 now
+
+- added CURLOPT_FTP_USE_PRET
+
+- - Ingmar Runge enhanced libcurl's FTP engine to support the PRET command. This
+ command is a special "hack" used by the drftpd server, but even though it is
+ a custom extension I've deemed it fine to add to libcurl since this server
+ seems to survive and people keep using it and want libcurl to support
+ it. The new libcurl option is named CURLOPT_FTP_USE_PRET, and it is also
+ usable from the curl tool with --ftp-pret. Using this option on a server
+ that doesn't support this command will make libcurl fail.
+
+- added descriptions for CURLOPT_MAIL_FROM and CURLOPT_MAIL_RCPT
+
+- --mail-rcpt and --mail-from are starting to settle and work like this...
+
+- turned CURLOPT_MAIL_RCPT into a curl_slist list instead to support multiple
+ receivers, and made the command line tool thus support the option specified
+ many times
+
+Yang Tse (31 Dec 2009)
+- Use '_stunnel.log' file name ending for stunneled server logs
+
+- VMS adjustments by Steven M. Schweda
+
+- Subs for refactoring purposes
+
+Daniel Stenberg (30 Dec 2009)
+- CURLOPT_HEADERDATA was added in 7.10
+
+- s/CURLOPT_WRITEHEADER/CURLOPT_HEADERDATA simply because it is a better name
+
+- modified to get the EHLO domain from the path part of the URL instead of the
+ user name
+
+- moved the SMTP payload escape function into Curl_smtp_escape_eob and put
+ it in smtp.c
+
+- (SMTP) support DATA better in the server and make sure to "escape" CRLF.CRLF
+ sequences in uploaded data. The test server doesn't "decode" escaped dot-lines
+ but instead test cases must be written to take them into account. Added test
+ case 803 to verify dot-escaping.
+
+Yang Tse (30 Dec 2009)
+- Oops, should have removed 'not' in previous commit.
+
+- VMS build system enhancements by Steven M. Schweda and Craig A. Berry
+
+- VMS specific preprocessor symbol checking adjustments
+
+- VMS specific preprocessor symbol definition adjustments
+
+- Replaced stricmp() usage with our portable strequal()
+
+Daniel Stenberg (29 Dec 2009)
+- move HTTP-specific functions to http.c where they belong
+
+- test 802 is the first SMTP test, although not strictly SMTP yet...
+
+Yang Tse (29 Dec 2009)
+- Mention last changes
+
+- - Fix configure_socket() to use ares_socket_t instead of int data type.
+
+- - Where run-time error checks enabling compiler option /GZ was used it is now
+ replaced with equivalent /RTCsu for Visual Studio 2003 and newer versions.
+
+ - Compiler option /GX is now replaced with equivalent /EHsc for all versions.
+
+- Leftover from previous commit
+
+- Initial refactoring step for server name strings centralized generation
+
+Daniel Stenberg (27 Dec 2009)
+- Julien Chaffraix's clarifications
+
+Yang Tse (27 Dec 2009)
+- Adjust FreeBSD version check to follow FreeBSD Porter's Handbook
+
+ http://www.freebsd.org/doc/en/books/porters-handbook/porting-versions.html
+
+Daniel Stenberg (26 Dec 2009)
+- symbols added in the CVS version meant for 7.20.0
+
+Yang Tse (26 Dec 2009)
+- global variables reordering/refactoring/commenting
+
+Daniel Stenberg (25 Dec 2009)
+- add pointer to the bug report
+
+- - Renato Botelho and Peter Pentchev brought a patch that makes the libcurl
+ headers work correctly even on FreeBSD systems before v8.
+
+- first shot at actually doing the SMTP upload as well, not doing the proper
+ end-of-body treatment
+
+- When verifying the SMTP server I had to add some hackery since SMTP in itself
+ doesn't really return any body data to check so I made SMTP check "headers"
+ as well.
+
+- first basic SMTP support
+
+Yang Tse (24 Dec 2009)
+- Adjust test number mismatch
+
+- Enable warnings
+
+- Fix warnings
+
+- Fix warnings
+
+- Back out some pingpong server stopping changes introduced last week in
+ order to re-use 'classic' stopping and allow taking test-suite run time
+ references from this state.
+
+- use Time::HiRes whenever available, independently of perl version
+
+- log a message when continuing once sleep time is over
+
+- - Ingmar Runge noticed that Windows config-win32.h configuration file
+ did not include a definition for HAVE_CLOSESOCKET which resulted in
+ function close() being inappropriately used to close sockets.
+
+- Make 'classic' output end of a test-suite run become again the end
+ of output, even when run time statistics are shown.
+
+- Move stopping of servers instructed by test definition, after the removal of
+ server logs advisor read lock and before test results verifications are done.
+
+ When stopping a pingpong server, stop server before its slaves.
+
+Daniel Stenberg (21 Dec 2009)
+- test 566 was missing
+
+Yang Tse (21 Dec 2009)
+- dead_child_handler also takes care of reaping pingpong server dead child processes
+
+- Reap processes dead children ASAP without blocking
+
+- Reinstate hi resolution time logging since this is not what is
+ now adding 90 extra seconds to the total time some autobuilds
+ need to make a full test-run.
+
+Patrick Monnerat (21 Dec 2009)
+- Take new SMTP definitions into account in OS400 wrapper and RPG binding
+
+Daniel Stenberg (21 Dec 2009)
+- first small steps towards smtp
+
+Yang Tse (21 Dec 2009)
+- Replaced tabs with spaces
+
+Daniel Stenberg (20 Dec 2009)
+- remove some unused code
+
+Yang Tse (20 Dec 2009)
+- Improve delay command interruptability
+
+Daniel Stenberg (20 Dec 2009)
+- revert that, we already had a function named like that!
+
+- rename the verifyftp function to verifyserver since it is used to verify
+ a wide variety of protocol servers
+
+- free the allocated mailbox name at disconnect
+
+- introducing the first IMAP FETCH test
+
+Yang Tse (20 Dec 2009)
+- - Attempt to fix script compilation failure on versions older than 5.007003,
+ corelist -a Time::HiRes lists this as the first version released with it.
+
+ - Ensure ftp check delay timer is always an integral number.
+
+Daniel Stenberg (19 Dec 2009)
+- support IMAP select and LOGOUT
+
+- fix the ftp check delay timer to never be set below 1 to work correctly
+ in cases like test 190
+
+- fixed a precaution check in the cookie code, pointed out by Julien Chaffraix
+
+Yang Tse (19 Dec 2009)
+- Slack time reduction
+
+- Added runtests.pl '-r' option for run time statistics
+
+- server start and verification time as well as test preparation time
+ data is required in order to closer match total test execution time.
+
+- Added test harness simple time execution stats
+
+- Comment out hi resolution time logging to verify if this is what might
+ be contributing 90 additional seconds to the total time some autobuilds
+ now need to make a full test-run.
+
+- Fix compilation failure
+
+- Test harness process control enhancements
+
+Daniel Stenberg (17 Dec 2009)
+- uh, assign the bool it points to properly
+
+- Stop overloading the conn->protocol field with the PROT_MISSING bit. It
+ really didn't belong there and had no real point.
+
+- Remove pointless storing of the protocol as a string within the connectdata
+ struct, and instead use the already stored string in the handler struct.
+
+- - David Byron fixed Curl_ossl_cleanup to actually call ENGINE_cleanup when
+ available.
+
+Yang Tse (17 Dec 2009)
+- gettimeofday() requires perl version newer than 5.6
+
+Daniel Stenberg (16 Dec 2009)
+- Follow-up fix for the proxy fix I did for Jon Nelson's bug. It turned out I
+ was a bit too quick and broke test case 1101 with that change. The order of
+ some of the setups is sensitive. I now changed it slightly again.
+
+Yang Tse (16 Dec 2009)
+- Test harness process control enhancements
+
+- Test #1106 needs an ftp enabled client
+
+- Test harness process control enhancements
+
+Daniel Stenberg (14 Dec 2009)
+- - Jon Nelson found a regression that turned out to be a flaw in how libcurl
+ detects and uses proxies based on the environment variables. If the proxy
+ was given as an explicit option it worked, but due to the setup order
+ mistake proxies would not be used fine for a few protocols when picked up
+ from '[protocol]_proxy'. Obviously this broke after 7.19.4. I now also added
+ test case 1106 that verifies this functionality.
+
+ (http://curl.haxx.se/bug/view.cgi?id=2913886)
+
+Yang Tse (14 Dec 2009)
+- Fix compiler warning
+
+- Prevent perl script dying messages in output, since tearing down the pinpong
+ server in this way, upon sysread failures, is part of the expected behavior.
+
+- Adjust uppercase protocol string usage
+
+- Fix compiler warnings
+
+- Fix compiler warnings
+
+- signal handling to cleanup on SIGINT and SIGTERM, followup
+
+- reapply diff between revisions 1.103 and 1.102
+
+Daniel Stenberg (12 Dec 2009)
+- updated with the new protocols
+
+- might as well output all supported protocols at the end of configure to
+ make it more obvious how the output will be
+
+- show POP3S, IMAPS and SMTPS as protocols if SSL is enabled
+
+- support disabling POP3, IMAP and SMTP and now they also appear in curl-config
+ --protocols output
+
+- split out more protocol-specific structs from urldata.h into their own
+ protocol-specific header files
+
+- IMAP, POP3 and SMTP support
+
+- introducing IMAP, POP3 and SMTP support (still lots of polish left to do)
+
+Yang Tse (11 Dec 2009)
+- Prevent rewinding unless pipelining.
+
+ See http://curl.haxx.se/mail/lib-2009-12/0107.html
+
+- Removed function prototype without implementation
+
+Daniel Stenberg (10 Dec 2009)
+- - Siegfried Gyuricsko found out that the curl manual said --retry would retry
+ on FTP errors in the transient 5xx range. Transient FTP errors are in the
+ 4xx range. The code itself only tried on 5xx errors that occured _at login_.
+ Now the retry code retries on all FTP transfer failures that ended with a
+ 4xx response.
+
+ (http://curl.haxx.se/bug/view.cgi?id=2911279)
+
+- argh, use the correct bug id
+
+- - Constantine Sapuntzakis figured out a case which would lead to libcurl
+ accessing alredy freed memory and thus crash when using HTTPS (with
+ OpenSSL), multi interface and the CURLOPT_DEBUGFUNCTION and a certain order
+ of cleaning things up. I fixed it.
+
+ (http://curl.haxx.se/bug/view.cgi?id=2891591)
+
+- minor indent change
+
+Yang Tse (10 Dec 2009)
+- - Fixed curl erroneously reporting output stream write failures with disabled buffering
+
+- signal handling to cleanup on SIGINT and SIGTERM, followup
+
+Daniel Stenberg (7 Dec 2009)
+- - Martin Storsjo made libcurl use the Expect: 100-continue header for posts
+ with unknown size. Previously it was only used for posts with a known size
+ larger than 1024 bytes.
+
+- 74. The HTTP spec allows headers to be merged and become comma-separated
+ instead of being repeated several times. This also include Authenticate: and
+ Proxy-Authenticate: headers and while this hardly every happens in real life
+ it will confuse libcurl which does not properly support it for all headers -
+ like those Authenticate headers.
+
+Yang Tse (3 Dec 2009)
+- Fix 'uploaded' file descriptor leak
+
+- signal handling to cleanup on SIGINT and SIGTERM
+
+Kamil Dudka (2 Dec 2009)
+- lib/nss.c: avoid use of uninitialized value
+
+Yang Tse (2 Dec 2009)
+- signal handling to cleanup on SIGINT and SIGTERM
+
+- Set socket option SO_REUSEADDR=true on stunnel accept'ing port
+
+Daniel Stenberg (1 Dec 2009)
+- - If the Expect: 100-continue header has been set by the application through
+ curl_easy_setopt with CURLOPT_HTTPHEADER, the library should set
+ data->state.expect100header accordingly - the current code (in 7.19.7 at
+ least) doesn't handle this properly. Martin Storsjo provided the fix!
+
+- start working on 1.7.1
+
+Yang Tse (30 Nov 2009)
+- - In order to better reflect that the returned pid is extracted from the
+ given file, serverpid sub is renamed to pidfromfile. In addition it is
+ enhanced to make sure that it always returns zero unless a numerical
+ positive value is returned.
+
+ - To better reflect that only process existance is actually checked,
+ checkserver sub is renamed to processexists. In addition it is enhanced
+ making it remove the given pid file when the extracted pid is no longer
+ alive.
+
+Daniel Stenberg (29 Nov 2009)
+- #71 "TFTP block size / better integration in transfer" is now expected to
+ have been fixed!
+
+- a binding for Falcon
+
+Yang Tse (28 Nov 2009)
+- - Added Diffie-Hellman parameters to several test harness certificate files in
+ PEM format. Required by several stunnel versions used by our test harness.
+
+- Use different log files for each protocol
+
+- s/socklen_t/curl_socklen_t/g
+
+- Fix compiler warning: unused variable `data'
+
+Daniel Stenberg (27 Nov 2009)
+- 7.20.0 is the planned next version number
+
+- document --tftp-blksize
+
+- - Markus Koetter provided a polished and updated version of Chad Monroe's TFTP
+ rework patch that now integrates TFTP properly into libcurl so that it can
+ be used non-blocking with the multi interface and more. BLKSIZE also works.
+
+ The --tftp-blksize option was added to allow setting the TFTP BLKSIZE from
+ the command line.
+
+Yang Tse (27 Nov 2009)
+- Attempt to enhance stunnel 3.X logging
+
+- Prevent running stunnel unless its version can be determined.
diff --git a/CMake/CMakeConfigurableFile.in b/CMake/CMakeConfigurableFile.in
new file mode 100644
index 0000000..4cf74a1
--- /dev/null
+++ b/CMake/CMakeConfigurableFile.in
@@ -0,0 +1,2 @@
+@CMAKE_CONFIGURABLE_FILE_CONTENT@
+
diff --git a/CMake/CheckTypeSize.c.in b/CMake/CheckTypeSize.c.in
new file mode 100644
index 0000000..8ff07bf
--- /dev/null
+++ b/CMake/CheckTypeSize.c.in
@@ -0,0 +1,44 @@
+#cmakedefine CHECK_TYPE_SIZE_TYPE @CHECK_TYPE_SIZE_TYPE@
+#ifdef CHECK_TYPE_SIZE_TYPE
+
+@CHECK_TYPE_SIZE_PREINCLUDE@
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif /* HAVE_SYS_TYPES_H */
+
+#ifdef HAVE_SYS_SOCKET_H
+# include <sys/socket.h>
+#endif
+
+#ifdef _WIN32
+# include <winsock2.h>
+# include <ws2tcpip.h>
+#endif
+
+
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#endif /* HAVE_STDINT_H */
+
+#ifdef HAVE_STDDEF_H
+# include <stddef.h>
+#endif /* HAVE_STDDEF_H */
+
+@CHECK_TYPE_SIZE_PREMAIN@
+
+#ifdef __CLASSIC_C__
+int main(){
+ int ac;
+ char*av[];
+#else
+int main(int ac, char*av[]){
+#endif
+ if(ac > 1000){return *av[0];}
+ return sizeof(CHECK_TYPE_SIZE_TYPE);
+}
+
+#else /* CHECK_TYPE_SIZE_TYPE */
+
+# error "CHECK_TYPE_SIZE_TYPE has to specify the type"
+
+#endif /* CHECK_TYPE_SIZE_TYPE */
diff --git a/CMake/CheckTypeSize.cmake b/CMake/CheckTypeSize.cmake
new file mode 100644
index 0000000..2c2ceab
--- /dev/null
+++ b/CMake/CheckTypeSize.cmake
@@ -0,0 +1,57 @@
+# - Check sizeof a type
+# CHECK_TYPE_SIZE(TYPE VARIABLE)
+# Check if the type exists and determine size of type. if the type
+# exists, the size will be stored to the variable.
+#
+# VARIABLE - variable to store size if the type exists.
+# HAVE_${VARIABLE} - does the variable exists or not
+
+macro(CHECK_TYPE_SIZE TYPE VARIABLE)
+ set(CMAKE_ALLOW_UNKNOWN_VARIABLE_READ_ACCESS 1)
+ if(NOT DEFINED ${VARIABLE})
+ if("HAVE_${VARIABLE}" MATCHES "^HAVE_${VARIABLE}$")
+ set(CHECK_TYPE_SIZE_TYPE "${TYPE}")
+ set(MACRO_CHECK_TYPE_SIZE_FLAGS
+ "${CMAKE_REQUIRED_FLAGS}")
+ foreach(def HAVE_SYS_TYPES_H
+ HAVE_STDINT_H HAVE_STDDEF_H HAVE_SYS_SOCKET_H)
+ if("${def}")
+ set(MACRO_CHECK_TYPE_SIZE_FLAGS
+ "${MACRO_CHECK_TYPE_SIZE_FLAGS} -D${def}")
+ endif("${def}")
+ endforeach(def)
+ set(CHECK_TYPE_SIZE_PREMAIN)
+ foreach(def ${CMAKE_EXTRA_INCLUDE_FILES})
+ set(CHECK_TYPE_SIZE_PREMAIN "${CHECK_TYPE_SIZE_PREMAIN}#include \"${def}\"\n")
+ endforeach(def)
+ configure_file(
+ "${CMAKE_CURRENT_SOURCE_DIR}/CMake/CheckTypeSize.c.in"
+ "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckTypeSize.c"
+ IMMEDIATE @ONLY)
+ file(READ
+ "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckTypeSize.c"
+ CHECK_TYPE_SIZE_FILE_CONTENT)
+ message(STATUS "Check size of ${TYPE}")
+ if(CMAKE_REQUIRED_LIBRARIES)
+ set(CHECK_TYPE_SIZE_ADD_LIBRARIES
+ "-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}")
+ endif(CMAKE_REQUIRED_LIBRARIES)
+ try_run(${VARIABLE} HAVE_${VARIABLE}
+ ${CMAKE_BINARY_DIR}
+ "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckTypeSize.c"
+ CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_TYPE_SIZE_FLAGS}
+ "${CHECK_TYPE_SIZE_ADD_LIBRARIES}"
+ OUTPUT_VARIABLE OUTPUT)
+ if(HAVE_${VARIABLE})
+ message(STATUS "Check size of ${TYPE} - done")
+ file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+ "Determining size of ${TYPE} passed with the following output:\n${OUTPUT}\n\n")
+ else(HAVE_${VARIABLE})
+ message(STATUS "Check size of ${TYPE} - failed")
+ file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
+ "Determining size of ${TYPE} failed with the following output:\n${OUTPUT}\nCheckTypeSize.c:\n${CHECK_TYPE_SIZE_FILE_CONTENT}\n\n")
+ endif(HAVE_${VARIABLE})
+ endif("HAVE_${VARIABLE}" MATCHES "^HAVE_${VARIABLE}$")
+ endif(NOT DEFINED ${VARIABLE})
+ set(CMAKE_ALLOW_UNKNOWN_VARIABLE_READ_ACCESS )
+endmacro(CHECK_TYPE_SIZE)
diff --git a/CMake/CurlCheckCSourceCompiles.cmake b/CMake/CurlCheckCSourceCompiles.cmake
new file mode 100644
index 0000000..b632768
--- /dev/null
+++ b/CMake/CurlCheckCSourceCompiles.cmake
@@ -0,0 +1,75 @@
+# - Check if the source code provided in the SOURCE argument compiles.
+# CURL_CHECK_C_SOURCE_COMPILES(SOURCE VAR)
+# - macro which checks if the source code compiles
+# SOURCE - source code to try to compile
+# VAR - variable to store whether the source code compiled
+#
+# The following variables may be set before calling this macro to
+# modify the way the check is run:
+#
+# CMAKE_REQUIRED_FLAGS = string of compile command line flags
+# CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar)
+# CMAKE_REQUIRED_INCLUDES = list of include directories
+# CMAKE_REQUIRED_LIBRARIES = list of libraries to link
+
+macro(CURL_CHECK_C_SOURCE_COMPILES SOURCE VAR)
+ if("${VAR}" MATCHES "^${VAR}$" OR "${VAR}" MATCHES "UNKNOWN")
+ set(message "${VAR}")
+ # If the number of arguments is greater than 2 (SOURCE VAR)
+ if(${ARGC} GREATER 2)
+ # then add the third argument as a message
+ set(message "${ARGV2} (${VAR})")
+ endif(${ARGC} GREATER 2)
+ set(MACRO_CHECK_FUNCTION_DEFINITIONS
+ "-D${VAR} ${CMAKE_REQUIRED_FLAGS}")
+ if(CMAKE_REQUIRED_LIBRARIES)
+ set(CURL_CHECK_C_SOURCE_COMPILES_ADD_LIBRARIES
+ "-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}")
+ else(CMAKE_REQUIRED_LIBRARIES)
+ set(CURL_CHECK_C_SOURCE_COMPILES_ADD_LIBRARIES)
+ endif(CMAKE_REQUIRED_LIBRARIES)
+ if(CMAKE_REQUIRED_INCLUDES)
+ set(CURL_CHECK_C_SOURCE_COMPILES_ADD_INCLUDES
+ "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}")
+ else(CMAKE_REQUIRED_INCLUDES)
+ set(CURL_CHECK_C_SOURCE_COMPILES_ADD_INCLUDES)
+ endif(CMAKE_REQUIRED_INCLUDES)
+ set(src "")
+ foreach(def ${EXTRA_DEFINES})
+ set(src "${src}#define ${def} 1\n")
+ endforeach(def)
+ foreach(inc ${HEADER_INCLUDES})
+ set(src "${src}#include <${inc}>\n")
+ endforeach(inc)
+
+ set(src "${src}\nint main() { ${SOURCE} ; return 0; }")
+ set(CMAKE_CONFIGURABLE_FILE_CONTENT "${src}")
+ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/CMake/CMakeConfigurableFile.in
+ "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.c"
+ IMMEDIATE)
+ message(STATUS "Performing Test ${message}")
+ try_compile(${VAR}
+ ${CMAKE_BINARY_DIR}
+ ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.c
+ COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
+ CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS}
+ "${CURL_CHECK_C_SOURCE_COMPILES_ADD_LIBRARIES}"
+ "${CURL_CHECK_C_SOURCE_COMPILES_ADD_INCLUDES}"
+ OUTPUT_VARIABLE OUTPUT)
+ if(${VAR})
+ set(${VAR} 1 CACHE INTERNAL "Test ${message}")
+ message(STATUS "Performing Test ${message} - Success")
+ file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+ "Performing C SOURCE FILE Test ${message} succeded with the following output:\n"
+ "${OUTPUT}\n"
+ "Source file was:\n${src}\n")
+ else(${VAR})
+ message(STATUS "Performing Test ${message} - Failed")
+ set(${VAR} "" CACHE INTERNAL "Test ${message}")
+ file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
+ "Performing C SOURCE FILE Test ${message} failed with the following output:\n"
+ "${OUTPUT}\n"
+ "Source file was:\n${src}\n")
+ endif(${VAR})
+ endif("${VAR}" MATCHES "^${VAR}$" OR "${VAR}" MATCHES "UNKNOWN")
+endmacro(CURL_CHECK_C_SOURCE_COMPILES)
diff --git a/CMake/CurlCheckCSourceRuns.cmake b/CMake/CurlCheckCSourceRuns.cmake
new file mode 100644
index 0000000..6b14af8
--- /dev/null
+++ b/CMake/CurlCheckCSourceRuns.cmake
@@ -0,0 +1,83 @@
+# - Check if the source code provided in the SOURCE argument compiles and runs.
+# CURL_CHECK_C_SOURCE_RUNS(SOURCE VAR)
+# - macro which checks if the source code runs
+# SOURCE - source code to try to compile
+# VAR - variable to store size if the type exists.
+#
+# The following variables may be set before calling this macro to
+# modify the way the check is run:
+#
+# CMAKE_REQUIRED_FLAGS = string of compile command line flags
+# CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar)
+# CMAKE_REQUIRED_INCLUDES = list of include directories
+# CMAKE_REQUIRED_LIBRARIES = list of libraries to link
+
+macro(CURL_CHECK_C_SOURCE_RUNS SOURCE VAR)
+ if("${VAR}" MATCHES "^${VAR}$" OR "${VAR}" MATCHES "UNKNOWN")
+ set(message "${VAR}")
+ # If the number of arguments is greater than 2 (SOURCE VAR)
+ if(${ARGC} GREATER 2)
+ # then add the third argument as a message
+ set(message "${ARGV2} (${VAR})")
+ endif(${ARGC} GREATER 2)
+ set(MACRO_CHECK_FUNCTION_DEFINITIONS
+ "-D${VAR} ${CMAKE_REQUIRED_FLAGS}")
+ if(CMAKE_REQUIRED_LIBRARIES)
+ set(CURL_CHECK_C_SOURCE_COMPILES_ADD_LIBRARIES
+ "-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}")
+ else(CMAKE_REQUIRED_LIBRARIES)
+ set(CURL_CHECK_C_SOURCE_COMPILES_ADD_LIBRARIES)
+ endif(CMAKE_REQUIRED_LIBRARIES)
+ if(CMAKE_REQUIRED_INCLUDES)
+ set(CURL_CHECK_C_SOURCE_COMPILES_ADD_INCLUDES
+ "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}")
+ else(CMAKE_REQUIRED_INCLUDES)
+ set(CURL_CHECK_C_SOURCE_COMPILES_ADD_INCLUDES)
+ endif(CMAKE_REQUIRED_INCLUDES)
+ set(src "")
+ foreach(def ${EXTRA_DEFINES})
+ set(src "${src}#define ${def} 1\n")
+ endforeach(def)
+ foreach(inc ${HEADER_INCLUDES})
+ set(src "${src}#include <${inc}>\n")
+ endforeach(inc)
+
+ set(src "${src}\nint main() { ${SOURCE} ; return 0; }")
+ set(CMAKE_CONFIGURABLE_FILE_CONTENT "${src}")
+ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/CMake/CMakeConfigurableFile.in
+ "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.c"
+ IMMEDIATE)
+ message(STATUS "Performing Test ${message}")
+ try_run(${VAR} ${VAR}_COMPILED
+ ${CMAKE_BINARY_DIR}
+ ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.c
+ COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
+ CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS}
+ "${CURL_CHECK_C_SOURCE_COMPILES_ADD_LIBRARIES}"
+ "${CURL_CHECK_C_SOURCE_COMPILES_ADD_INCLUDES}"
+ OUTPUT_VARIABLE OUTPUT)
+ # if it did not compile make the return value fail code of 1
+ if(NOT ${VAR}_COMPILED)
+ set(${VAR} 1)
+ endif(NOT ${VAR}_COMPILED)
+ # if the return value was 0 then it worked
+ set(result_var ${${VAR}})
+ if("${result_var}" EQUAL 0)
+ set(${VAR} 1 CACHE INTERNAL "Test ${message}")
+ message(STATUS "Performing Test ${message} - Success")
+ file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+ "Performing C SOURCE FILE Test ${message} succeded with the following output:\n"
+ "${OUTPUT}\n"
+ "Return value: ${${VAR}}\n"
+ "Source file was:\n${src}\n")
+ else("${result_var}" EQUAL 0)
+ message(STATUS "Performing Test ${message} - Failed")
+ set(${VAR} "" CACHE INTERNAL "Test ${message}")
+ file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
+ "Performing C SOURCE FILE Test ${message} failed with the following output:\n"
+ "${OUTPUT}\n"
+ "Return value: ${result_var}\n"
+ "Source file was:\n${src}\n")
+ endif("${result_var}" EQUAL 0)
+ endif("${VAR}" MATCHES "^${VAR}$" OR "${VAR}" MATCHES "UNKNOWN")
+endmacro(CURL_CHECK_C_SOURCE_RUNS)
diff --git a/CMake/CurlTests.c b/CMake/CurlTests.c
new file mode 100644
index 0000000..0943458
--- /dev/null
+++ b/CMake/CurlTests.c
@@ -0,0 +1,690 @@
+#ifdef TIME_WITH_SYS_TIME
+/* Time with sys/time test */
+
+#include <sys/types.h>
+#include <sys/time.h>
+#include <time.h>
+
+int
+main ()
+{
+if ((struct tm *) 0)
+return 0;
+ ;
+ return 0;
+}
+
+#endif
+
+#ifdef HAVE_FCNTL_O_NONBLOCK
+
+/* headers for FCNTL_O_NONBLOCK test */
+#include <sys/types.h>
+#include <unistd.h>
+#include <fcntl.h>
+/* */
+#if defined(sun) || defined(__sun__) || \
+ defined(__SUNPRO_C) || defined(__SUNPRO_CC)
+# if defined(__SVR4) || defined(__srv4__)
+# define PLATFORM_SOLARIS
+# else
+# define PLATFORM_SUNOS4
+# endif
+#endif
+#if (defined(_AIX) || defined(__xlC__)) && !defined(_AIX41)
+# define PLATFORM_AIX_V3
+#endif
+/* */
+#if defined(PLATFORM_SUNOS4) || defined(PLATFORM_AIX_V3) || defined(__BEOS__)
+#error "O_NONBLOCK does not work on this platform"
+#endif
+
+int
+main ()
+{
+ /* O_NONBLOCK source test */
+ int flags = 0;
+ if(0 != fcntl(0, F_SETFL, flags | O_NONBLOCK))
+ return 1;
+ return 0;
+}
+#endif
+
+#ifdef HAVE_GETHOSTBYADDR_R_5
+#include <sys/types.h>
+#include <netdb.h>
+int
+main ()
+{
+
+char * address;
+int length;
+int type;
+struct hostent h;
+struct hostent_data hdata;
+int rc;
+#ifndef gethostbyaddr_r
+ (void)gethostbyaddr_r;
+#endif
+rc = gethostbyaddr_r(address, length, type, &h, &hdata);
+ ;
+ return 0;
+}
+#endif
+#ifdef HAVE_GETHOSTBYADDR_R_5_REENTRANT
+#define _REENTRANT
+#include <sys/types.h>
+#include <netdb.h>
+int
+main ()
+{
+
+char * address;
+int length;q
+int type;
+struct hostent h;
+struct hostent_data hdata;
+int rc;
+#ifndef gethostbyaddr_r
+ (void)gethostbyaddr_r;
+#endif
+rc = gethostbyaddr_r(address, length, type, &h, &hdata);
+ ;
+ return 0;
+}
+#endif
+#ifdef HAVE_GETHOSTBYADDR_R_7
+#include <sys/types.h>
+#include <netdb.h>
+int
+main ()
+{
+
+char * address;
+int length;
+int type;
+struct hostent h;
+char buffer[8192];
+int h_errnop;
+struct hostent * hp;
+
+#ifndef gethostbyaddr_r
+ (void)gethostbyaddr_r;
+#endif
+hp = gethostbyaddr_r(address, length, type, &h,
+ buffer, 8192, &h_errnop);
+ ;
+ return 0;
+}
+#endif
+#ifdef HAVE_GETHOSTBYADDR_R_7_REENTRANT
+#define _REENTRANT
+#include <sys/types.h>
+#include <netdb.h>
+int
+main ()
+{
+
+char * address;
+int length;
+int type;
+struct hostent h;
+char buffer[8192];
+int h_errnop;
+struct hostent * hp;
+
+#ifndef gethostbyaddr_r
+ (void)gethostbyaddr_r;
+#endif
+hp = gethostbyaddr_r(address, length, type, &h,
+ buffer, 8192, &h_errnop);
+ ;
+ return 0;
+}
+#endif
+#ifdef HAVE_GETHOSTBYADDR_R_8
+#include <sys/types.h>
+#include <netdb.h>
+int
+main ()
+{
+
+char * address;
+int length;
+int type;
+struct hostent h;
+char buffer[8192];
+int h_errnop;
+struct hostent * hp;
+int rc;
+
+#ifndef gethostbyaddr_r
+ (void)gethostbyaddr_r;
+#endif
+rc = gethostbyaddr_r(address, length, type, &h,
+ buffer, 8192, &hp, &h_errnop);
+ ;
+ return 0;
+}
+#endif
+#ifdef HAVE_GETHOSTBYADDR_R_8_REENTRANT
+#define _REENTRANT
+#include <sys/types.h>
+#include <netdb.h>
+int
+main ()
+{
+
+char * address;
+int length;
+int type;
+struct hostent h;
+char buffer[8192];
+int h_errnop;
+struct hostent * hp;
+int rc;
+
+#ifndef gethostbyaddr_r
+ (void)gethostbyaddr_r;
+#endif
+rc = gethostbyaddr_r(address, length, type, &h,
+ buffer, 8192, &hp, &h_errnop);
+ ;
+ return 0;
+}
+#endif
+#ifdef HAVE_GETHOSTBYNAME_R_3
+#include <string.h>
+#include <sys/types.h>
+#include <netdb.h>
+#undef NULL
+#define NULL (void *)0
+
+int
+main ()
+{
+
+struct hostent_data data;
+#ifndef gethostbyname_r
+ (void)gethostbyname_r;
+#endif
+gethostbyname_r(NULL, NULL, NULL);
+ ;
+ return 0;
+}
+#endif
+#ifdef HAVE_GETHOSTBYNAME_R_3_REENTRANT
+#define _REENTRANT
+#include <string.h>
+#include <sys/types.h>
+#include <netdb.h>
+#undef NULL
+#define NULL (void *)0
+
+int
+main ()
+{
+
+struct hostent_data data;
+#ifndef gethostbyname_r
+ (void)gethostbyname_r;
+#endif
+gethostbyname_r(NULL, NULL, NULL);
+ ;
+ return 0;
+}
+#endif
+#ifdef HAVE_GETHOSTBYNAME_R_5
+#include <sys/types.h>
+#include <netinet/in.h>
+#include <netdb.h>
+#undef NULL
+#define NULL (void *)0
+
+int
+main ()
+{
+#ifndef gethostbyname_r
+ (void)gethostbyname_r;
+#endif
+gethostbyname_r(NULL, NULL, NULL, 0, NULL);
+ ;
+ return 0;
+}
+#endif
+#ifdef HAVE_GETHOSTBYNAME_R_5_REENTRANT
+#define _REENTRANT
+#include <sys/types.h>
+#include <netdb.h>
+#undef NULL
+#define NULL (void *)0
+
+int
+main ()
+{
+
+#ifndef gethostbyname_r
+ (void)gethostbyname_r;
+#endif
+gethostbyname_r(NULL, NULL, NULL, 0, NULL);
+ ;
+ return 0;
+}
+#endif
+#ifdef HAVE_GETHOSTBYNAME_R_6
+#include <sys/types.h>
+#include <netdb.h>
+#undef NULL
+#define NULL (void *)0
+
+int
+main ()
+{
+
+#ifndef gethostbyname_r
+ (void)gethostbyname_r;
+#endif
+gethostbyname_r(NULL, NULL, NULL, 0, NULL, NULL);
+ ;
+ return 0;
+}
+#endif
+#ifdef HAVE_GETHOSTBYNAME_R_6_REENTRANT
+#define _REENTRANT
+#include <sys/types.h>
+#include <netdb.h>
+#undef NULL
+#define NULL (void *)0
+
+int
+main ()
+{
+
+#ifndef gethostbyname_r
+ (void)gethostbyname_r;
+#endif
+gethostbyname_r(NULL, NULL, NULL, 0, NULL, NULL);
+ ;
+ return 0;
+}
+#endif
+#ifdef HAVE_SOCKLEN_T
+#ifdef _WIN32
+#include <ws2tcpip.h>
+#else
+#include <sys/types.h>
+#include <sys/socket.h>
+#endif
+int
+main ()
+{
+if ((socklen_t *) 0)
+ return 0;
+if (sizeof (socklen_t))
+ return 0;
+ ;
+ return 0;
+}
+#endif
+#ifdef HAVE_IN_ADDR_T
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <arpa/inet.h>
+
+int
+main ()
+{
+if ((in_addr_t *) 0)
+ return 0;
+if (sizeof (in_addr_t))
+ return 0;
+ ;
+ return 0;
+}
+#endif
+
+#ifdef HAVE_BOOL_T
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_STDBOOL_H
+#include <stdbool.h>
+#endif
+int
+main ()
+{
+if (sizeof (bool *) )
+ return 0;
+ ;
+ return 0;
+}
+#endif
+
+#ifdef STDC_HEADERS
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+int main() { return 0; }
+#endif
+#ifdef RETSIGTYPE_TEST
+#include <sys/types.h>
+#include <signal.h>
+#ifdef signal
+# undef signal
+#endif
+#ifdef __cplusplus
+extern "C" void (*signal (int, void (*)(int)))(int);
+#else
+void (*signal ()) ();
+#endif
+
+int
+main ()
+{
+ return 0;
+}
+#endif
+#ifdef HAVE_INET_NTOA_R_DECL
+#include <arpa/inet.h>
+
+typedef void (*func_type)();
+
+int main()
+{
+#ifndef inet_ntoa_r
+ func_type func;
+ func = (func_type)inet_ntoa_r;
+#endif
+ return 0;
+}
+#endif
+#ifdef HAVE_INET_NTOA_R_DECL_REENTRANT
+#define _REENTRANT
+#include <arpa/inet.h>
+
+typedef void (*func_type)();
+
+int main()
+{
+#ifndef inet_ntoa_r
+ func_type func;
+ func = (func_type)&inet_ntoa_r;
+#endif
+ return 0;
+}
+#endif
+#ifdef HAVE_GETADDRINFO
+#include <netdb.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+
+int main(void) {
+ struct addrinfo hints, *ai;
+ int error;
+
+ memset(&hints, 0, sizeof(hints));
+ hints.ai_family = AF_UNSPEC;
+ hints.ai_socktype = SOCK_STREAM;
+#ifndef getaddrinfo
+ (void)getaddrinfo;
+#endif
+ error = getaddrinfo("127.0.0.1", "8080", &hints, &ai);
+ if (error) {
+ return 1;
+ }
+ return 0;
+}
+#endif
+#ifdef HAVE_FILE_OFFSET_BITS
+#ifdef _FILE_OFFSET_BITS
+#undef _FILE_OFFSET_BITS
+#endif
+#define _FILE_OFFSET_BITS 64
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+ We can't simply define LARGE_OFF_T to be 9223372036854775807,
+ since some C++ compilers masquerading as C compilers
+ incorrectly reject 9223372036854775807. */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+ && LARGE_OFF_T % 2147483647 == 1)
+ ? 1 : -1];
+int main () { ; return 0; }
+#endif
+#ifdef HAVE_IOCTLSOCKET
+/* includes start */
+#ifdef HAVE_WINDOWS_H
+# ifndef WIN32_LEAN_AND_MEAN
+# define WIN32_LEAN_AND_MEAN
+# endif
+# include <windows.h>
+# ifdef HAVE_WINSOCK2_H
+# include <winsock2.h>
+# else
+# ifdef HAVE_WINSOCK_H
+# include <winsock.h>
+# endif
+# endif
+#endif
+
+int
+main ()
+{
+
+/* ioctlsocket source code */
+ int socket;
+ unsigned long flags = ioctlsocket(socket, FIONBIO, &flags);
+
+ ;
+ return 0;
+}
+
+#endif
+#ifdef HAVE_IOCTLSOCKET_CAMEL
+/* includes start */
+#ifdef HAVE_WINDOWS_H
+# ifndef WIN32_LEAN_AND_MEAN
+# define WIN32_LEAN_AND_MEAN
+# endif
+# include <windows.h>
+# ifdef HAVE_WINSOCK2_H
+# include <winsock2.h>
+# else
+# ifdef HAVE_WINSOCK_H
+# include <winsock.h>
+# endif
+# endif
+#endif
+
+int
+main ()
+{
+
+/* IoctlSocket source code */
+ if(0 != IoctlSocket(0, 0, 0))
+ return 1;
+ ;
+ return 0;
+}
+#endif
+#ifdef HAVE_IOCTLSOCKET_CAMEL_FIONBIO
+/* includes start */
+#ifdef HAVE_WINDOWS_H
+# ifndef WIN32_LEAN_AND_MEAN
+# define WIN32_LEAN_AND_MEAN
+# endif
+# include <windows.h>
+# ifdef HAVE_WINSOCK2_H
+# include <winsock2.h>
+# else
+# ifdef HAVE_WINSOCK_H
+# include <winsock.h>
+# endif
+# endif
+#endif
+
+int
+main ()
+{
+
+/* IoctlSocket source code */
+ long flags = 0;
+ if(0 != ioctlsocket(0, FIONBIO, &flags))
+ return 1;
+ ;
+ return 0;
+}
+#endif
+#ifdef HAVE_IOCTLSOCKET_FIONBIO
+/* includes start */
+#ifdef HAVE_WINDOWS_H
+# ifndef WIN32_LEAN_AND_MEAN
+# define WIN32_LEAN_AND_MEAN
+# endif
+# include <windows.h>
+# ifdef HAVE_WINSOCK2_H
+# include <winsock2.h>
+# else
+# ifdef HAVE_WINSOCK_H
+# include <winsock.h>
+# endif
+# endif
+#endif
+
+int
+main ()
+{
+
+ int flags = 0;
+ if(0 != ioctlsocket(0, FIONBIO, &flags))
+ return 1;
+
+ ;
+ return 0;
+}
+#endif
+#ifdef HAVE_IOCTL_FIONBIO
+/* headers for FIONBIO test */
+/* includes start */
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+# include <sys/socket.h>
+#endif
+#ifdef HAVE_SYS_IOCTL_H
+# include <sys/ioctl.h>
+#endif
+#ifdef HAVE_STROPTS_H
+# include <stropts.h>
+#endif
+
+int
+main ()
+{
+
+ int flags = 0;
+ if(0 != ioctl(0, FIONBIO, &flags))
+ return 1;
+
+ ;
+ return 0;
+}
+#endif
+#ifdef HAVE_IOCTL_SIOCGIFADDR
+/* headers for FIONBIO test */
+/* includes start */
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+# include <sys/socket.h>
+#endif
+#ifdef HAVE_SYS_IOCTL_H
+# include <sys/ioctl.h>
+#endif
+#ifdef HAVE_STROPTS_H
+# include <stropts.h>
+#endif
+#include <net/if.h>
+
+int
+main ()
+{
+ struct ifreq ifr;
+ if(0 != ioctl(0, SIOCGIFADDR, &ifr))
+ return 1;
+
+ ;
+ return 0;
+}
+#endif
+#ifdef HAVE_SETSOCKOPT_SO_NONBLOCK
+/* includes start */
+#ifdef HAVE_WINDOWS_H
+# ifndef WIN32_LEAN_AND_MEAN
+# define WIN32_LEAN_AND_MEAN
+# endif
+# include <windows.h>
+# ifdef HAVE_WINSOCK2_H
+# include <winsock2.h>
+# else
+# ifdef HAVE_WINSOCK_H
+# include <winsock.h>
+# endif
+# endif
+#endif
+/* includes start */
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+# include <sys/socket.h>
+#endif
+/* includes end */
+
+int
+main ()
+{
+ if(0 != setsockopt(0, SOL_SOCKET, SO_NONBLOCK, 0, 0))
+ return 1;
+ ;
+ return 0;
+}
+#endif
+#ifdef HAVE_GLIBC_STRERROR_R
+#include <string.h>
+#include <errno.h>
+int
+main () {
+ char buffer[1024]; /* big enough to play with */
+ char *string =
+ strerror_r(EACCES, buffer, sizeof(buffer));
+ /* this should've returned a string */
+ if(!string || !string[0])
+ return 99;
+ return 0;
+}
+#endif
+#ifdef HAVE_POSIX_STRERROR_R
+#include <string.h>
+#include <errno.h>
+int
+main () {
+ char buffer[1024]; /* big enough to play with */
+ int error =
+ strerror_r(EACCES, buffer, sizeof(buffer));
+ /* This should've returned zero, and written an error string in the
+ buffer.*/
+ if(!buffer[0] || error)
+ return 99;
+ return 0;
+}
+#endif
diff --git a/CMake/FindOpenSSL.cmake b/CMake/FindOpenSSL.cmake
new file mode 100644
index 0000000..63a9d60
--- /dev/null
+++ b/CMake/FindOpenSSL.cmake
@@ -0,0 +1,19 @@
+# Extension of the standard FindOpenSSL.cmake
+# Adds OPENSSL_INCLUDE_DIRS and libeay32
+include("${CMAKE_ROOT}/Modules/FindOpenSSL.cmake")
+
+# Bill Hoffman told that libeay32 is necessary for him:
+find_library(SSL_LIBEAY NAMES libeay32)
+
+if(OPENSSL_FOUND)
+ if(SSL_LIBEAY)
+ list(APPEND OPENSSL_LIBRARIES ${SSL_LIBEAY})
+ else()
+ set(OPENSSL_FOUND FALSE)
+ endif()
+endif()
+
+
+if(OPENSSL_FOUND)
+ set(OPENSSL_INCLUDE_DIRS ${OPENSSL_INCLUDE_DIR})
+endif()
diff --git a/CMake/FindZLIB.cmake b/CMake/FindZLIB.cmake
new file mode 100644
index 0000000..87f1d4f
--- /dev/null
+++ b/CMake/FindZLIB.cmake
@@ -0,0 +1,8 @@
+# Locate zlib
+include("${CMAKE_ROOT}/Modules/FindZLIB.cmake")
+
+find_library(ZLIB_LIBRARY_DEBUG NAMES zd zlibd zdlld zlib1d )
+
+if(ZLIB_FOUND AND ZLIB_LIBRARY_DEBUG)
+ set( ZLIB_LIBRARIES optimized "${ZLIB_LIBRARY}" debug ${ZLIB_LIBRARY_DEBUG})
+endif()
diff --git a/CMake/OtherTests.cmake b/CMake/OtherTests.cmake
new file mode 100644
index 0000000..89d0048
--- /dev/null
+++ b/CMake/OtherTests.cmake
@@ -0,0 +1,250 @@
+include(CurlCheckCSourceCompiles)
+set(EXTRA_DEFINES "__unused1\n#undef inline\n#define __unused2")
+set(HEADER_INCLUDES)
+set(headers_hack)
+
+macro(add_header_include check header)
+ if(${check})
+ set(headers_hack
+ "${headers_hack}\n#include <${header}>")
+ #SET(HEADER_INCLUDES
+ # ${HEADER_INCLUDES}
+ # "${header}")
+ endif(${check})
+endmacro(add_header_include)
+
+set(signature_call_conv)
+if(HAVE_WINDOWS_H)
+ add_header_include(HAVE_WINDOWS_H "windows.h")
+ add_header_include(HAVE_WINSOCK2_H "winsock2.h")
+ add_header_include(HAVE_WINSOCK_H "winsock.h")
+ set(EXTRA_DEFINES ${EXTRA_DEFINES}
+ "__unused7\n#ifndef WIN32_LEAN_AND_MEAN\n#define WIN32_LEAN_AND_MEAN\n#endif\n#define __unused3")
+ set(signature_call_conv "PASCAL")
+else(HAVE_WINDOWS_H)
+ add_header_include(HAVE_SYS_TYPES_H "sys/types.h")
+ add_header_include(HAVE_SYS_SOCKET_H "sys/socket.h")
+endif(HAVE_WINDOWS_H)
+
+set(EXTRA_DEFINES_BACKUP "${EXTRA_DEFINES}")
+set(EXTRA_DEFINES "${EXTRA_DEFINES_BACKUP}\n${headers_hack}\n${extern_line}\n#define __unused5")
+curl_check_c_source_compiles("recv(0, 0, 0, 0)" curl_cv_recv)
+if(curl_cv_recv)
+ # AC_CACHE_CHECK([types of arguments and return type for recv],
+ #[curl_cv_func_recv_args], [
+ #SET(curl_cv_func_recv_args "unknown")
+ #for recv_retv in 'int' 'ssize_t'; do
+ if(NOT DEFINED curl_cv_func_recv_args OR "${curl_cv_func_recv_args}" STREQUAL "unknown")
+ foreach(recv_retv "int" "ssize_t" )
+ foreach(recv_arg1 "int" "ssize_t" "SOCKET")
+ foreach(recv_arg2 "void *" "char *")
+ foreach(recv_arg3 "size_t" "int" "socklen_t" "unsigned int")
+ foreach(recv_arg4 "int" "unsigned int")
+ if(NOT curl_cv_func_recv_done)
+ set(curl_cv_func_recv_test "UNKNOWN")
+ set(extern_line "extern ${recv_retv} ${signature_call_conv} recv(${recv_arg1}, ${recv_arg2}, ${recv_arg3}, ${recv_arg4})\;")
+ set(EXTRA_DEFINES "${EXTRA_DEFINES_BACKUP}\n${headers_hack}\n${extern_line}\n#define __unused5")
+ curl_check_c_source_compiles("
+ ${recv_arg1} s=0;
+ ${recv_arg2} buf=0;
+ ${recv_arg3} len=0;
+ ${recv_arg4} flags=0;
+ ${recv_retv} res = recv(s, buf, len, flags)"
+ curl_cv_func_recv_test
+ "${recv_retv} recv(${recv_arg1}, ${recv_arg2}, ${recv_arg3}, ${recv_arg4})")
+ if(curl_cv_func_recv_test)
+ set(curl_cv_func_recv_args
+ "${recv_arg1},${recv_arg2},${recv_arg3},${recv_arg4},${recv_retv}")
+ set(RECV_TYPE_ARG1 "${recv_arg1}")
+ set(RECV_TYPE_ARG2 "${recv_arg2}")
+ set(RECV_TYPE_ARG3 "${recv_arg3}")
+ set(RECV_TYPE_ARG4 "${recv_arg4}")
+ set(RECV_TYPE_RETV "${recv_retv}")
+ set(HAVE_RECV 1)
+ set(curl_cv_func_recv_done 1)
+ endif(curl_cv_func_recv_test)
+ endif(NOT curl_cv_func_recv_done)
+ endforeach(recv_arg4)
+ endforeach(recv_arg3)
+ endforeach(recv_arg2)
+ endforeach(recv_arg1)
+ endforeach(recv_retv)
+ else(NOT DEFINED curl_cv_func_recv_args OR "${curl_cv_func_recv_args}" STREQUAL "unknown")
+ string(REGEX REPLACE "^([^,]*),[^,]*,[^,]*,[^,]*,[^,]*$" "\\1" RECV_TYPE_ARG1 "${curl_cv_func_recv_args}")
+ string(REGEX REPLACE "^[^,]*,([^,]*),[^,]*,[^,]*,[^,]*$" "\\1" RECV_TYPE_ARG2 "${curl_cv_func_recv_args}")
+ string(REGEX REPLACE "^[^,]*,[^,]*,([^,]*),[^,]*,[^,]*$" "\\1" RECV_TYPE_ARG3 "${curl_cv_func_recv_args}")
+ string(REGEX REPLACE "^[^,]*,[^,]*,[^,]*,([^,]*),[^,]*$" "\\1" RECV_TYPE_ARG4 "${curl_cv_func_recv_args}")
+ string(REGEX REPLACE "^[^,]*,[^,]*,[^,]*,[^,]*,([^,]*)$" "\\1" RECV_TYPE_RETV "${curl_cv_func_recv_args}")
+ #MESSAGE("RECV_TYPE_ARG1 ${RECV_TYPE_ARG1}")
+ #MESSAGE("RECV_TYPE_ARG2 ${RECV_TYPE_ARG2}")
+ #MESSAGE("RECV_TYPE_ARG3 ${RECV_TYPE_ARG3}")
+ #MESSAGE("RECV_TYPE_ARG4 ${RECV_TYPE_ARG4}")
+ #MESSAGE("RECV_TYPE_RETV ${RECV_TYPE_RETV}")
+ endif(NOT DEFINED curl_cv_func_recv_args OR "${curl_cv_func_recv_args}" STREQUAL "unknown")
+
+ if("${curl_cv_func_recv_args}" STREQUAL "unknown")
+ message(FATAL_ERROR "Cannot find proper types to use for recv args")
+ endif("${curl_cv_func_recv_args}" STREQUAL "unknown")
+else(curl_cv_recv)
+ message(FATAL_ERROR "Unable to link function recv")
+endif(curl_cv_recv)
+set(curl_cv_func_recv_args "${curl_cv_func_recv_args}" CACHE INTERNAL "Arguments for recv")
+set(HAVE_RECV 1)
+
+curl_check_c_source_compiles("send(0, 0, 0, 0)" curl_cv_send)
+if(curl_cv_send)
+ # AC_CACHE_CHECK([types of arguments and return type for send],
+ #[curl_cv_func_send_args], [
+ #SET(curl_cv_func_send_args "unknown")
+ #for send_retv in 'int' 'ssize_t'; do
+ if(NOT DEFINED curl_cv_func_send_args OR "${curl_cv_func_send_args}" STREQUAL "unknown")
+ foreach(send_retv "int" "ssize_t" )
+ foreach(send_arg1 "int" "ssize_t" "SOCKET")
+ foreach(send_arg2 "const void *" "void *" "char *" "const char *")
+ foreach(send_arg3 "size_t" "int" "socklen_t" "unsigned int")
+ foreach(send_arg4 "int" "unsigned int")
+ if(NOT curl_cv_func_send_done)
+ set(curl_cv_func_send_test "UNKNOWN")
+ set(extern_line "extern ${send_retv} ${signature_call_conv} send(${send_arg1}, ${send_arg2}, ${send_arg3}, ${send_arg4})\;")
+ set(EXTRA_DEFINES "${EXTRA_DEFINES_BACKUP}\n${headers_hack}\n${extern_line}\n#define __unused5")
+ curl_check_c_source_compiles("
+ ${send_arg1} s=0;
+ ${send_arg2} buf=0;
+ ${send_arg3} len=0;
+ ${send_arg4} flags=0;
+ ${send_retv} res = send(s, buf, len, flags)"
+ curl_cv_func_send_test
+ "${send_retv} send(${send_arg1}, ${send_arg2}, ${send_arg3}, ${send_arg4})")
+ if(curl_cv_func_send_test)
+ #MESSAGE("Found arguments: ${curl_cv_func_send_test}")
+ string(REGEX REPLACE "(const) .*" "\\1" send_qual_arg2 "${send_arg2}")
+ string(REGEX REPLACE "const (.*)" "\\1" send_arg2 "${send_arg2}")
+ set(curl_cv_func_send_args
+ "${send_arg1},${send_arg2},${send_arg3},${send_arg4},${send_retv},${send_qual_arg2}")
+ set(SEND_TYPE_ARG1 "${send_arg1}")
+ set(SEND_TYPE_ARG2 "${send_arg2}")
+ set(SEND_TYPE_ARG3 "${send_arg3}")
+ set(SEND_TYPE_ARG4 "${send_arg4}")
+ set(SEND_TYPE_RETV "${send_retv}")
+ set(HAVE_SEND 1)
+ set(curl_cv_func_send_done 1)
+ endif(curl_cv_func_send_test)
+ endif(NOT curl_cv_func_send_done)
+ endforeach(send_arg4)
+ endforeach(send_arg3)
+ endforeach(send_arg2)
+ endforeach(send_arg1)
+ endforeach(send_retv)
+ else(NOT DEFINED curl_cv_func_send_args OR "${curl_cv_func_send_args}" STREQUAL "unknown")
+ string(REGEX REPLACE "^([^,]*),[^,]*,[^,]*,[^,]*,[^,]*,[^,]*$" "\\1" SEND_TYPE_ARG1 "${curl_cv_func_send_args}")
+ string(REGEX REPLACE "^[^,]*,([^,]*),[^,]*,[^,]*,[^,]*,[^,]*$" "\\1" SEND_TYPE_ARG2 "${curl_cv_func_send_args}")
+ string(REGEX REPLACE "^[^,]*,[^,]*,([^,]*),[^,]*,[^,]*,[^,]*$" "\\1" SEND_TYPE_ARG3 "${curl_cv_func_send_args}")
+ string(REGEX REPLACE "^[^,]*,[^,]*,[^,]*,([^,]*),[^,]*,[^,]*$" "\\1" SEND_TYPE_ARG4 "${curl_cv_func_send_args}")
+ string(REGEX REPLACE "^[^,]*,[^,]*,[^,]*,[^,]*,([^,]*),[^,]*$" "\\1" SEND_TYPE_RETV "${curl_cv_func_send_args}")
+ string(REGEX REPLACE "^[^,]*,[^,]*,[^,]*,[^,]*,[^,]*,([^,]*)$" "\\1" SEND_QUAL_ARG2 "${curl_cv_func_send_args}")
+ #MESSAGE("SEND_TYPE_ARG1 ${SEND_TYPE_ARG1}")
+ #MESSAGE("SEND_TYPE_ARG2 ${SEND_TYPE_ARG2}")
+ #MESSAGE("SEND_TYPE_ARG3 ${SEND_TYPE_ARG3}")
+ #MESSAGE("SEND_TYPE_ARG4 ${SEND_TYPE_ARG4}")
+ #MESSAGE("SEND_TYPE_RETV ${SEND_TYPE_RETV}")
+ #MESSAGE("SEND_QUAL_ARG2 ${SEND_QUAL_ARG2}")
+ endif(NOT DEFINED curl_cv_func_send_args OR "${curl_cv_func_send_args}" STREQUAL "unknown")
+
+ if("${curl_cv_func_send_args}" STREQUAL "unknown")
+ message(FATAL_ERROR "Cannot find proper types to use for send args")
+ endif("${curl_cv_func_send_args}" STREQUAL "unknown")
+ set(SEND_QUAL_ARG2 "const")
+else(curl_cv_send)
+ message(FATAL_ERROR "Unable to link function send")
+endif(curl_cv_send)
+set(curl_cv_func_send_args "${curl_cv_func_send_args}" CACHE INTERNAL "Arguments for send")
+set(HAVE_SEND 1)
+
+set(EXTRA_DEFINES "${EXTRA_DEFINES}\n${headers_hack}\n#define __unused5")
+curl_check_c_source_compiles("int flag = MSG_NOSIGNAL" HAVE_MSG_NOSIGNAL)
+
+set(EXTRA_DEFINES "__unused1\n#undef inline\n#define __unused2")
+set(HEADER_INCLUDES)
+set(headers_hack)
+
+macro(add_header_include check header)
+ if(${check})
+ set(headers_hack
+ "${headers_hack}\n#include <${header}>")
+ #SET(HEADER_INCLUDES
+ # ${HEADER_INCLUDES}
+ # "${header}")
+ endif(${check})
+endmacro(add_header_include header)
+
+if(HAVE_WINDOWS_H)
+ set(EXTRA_DEFINES ${EXTRA_DEFINES}
+ "__unused7\n#ifndef WIN32_LEAN_AND_MEAN\n#define WIN32_LEAN_AND_MEAN\n#endif\n#define __unused3")
+ add_header_include(HAVE_WINDOWS_H "windows.h")
+ add_header_include(HAVE_WINSOCK2_H "winsock2.h")
+ add_header_include(HAVE_WINSOCK_H "winsock.h")
+else(HAVE_WINDOWS_H)
+ add_header_include(HAVE_SYS_TYPES_H "sys/types.h")
+ add_header_include(HAVE_SYS_TIME_H "sys/time.h")
+ add_header_include(TIME_WITH_SYS_TIME "time.h")
+ add_header_include(HAVE_TIME_H "time.h")
+endif(HAVE_WINDOWS_H)
+set(EXTRA_DEFINES "${EXTRA_DEFINES}\n${headers_hack}\n#define __unused5")
+curl_check_c_source_compiles("struct timeval ts;\nts.tv_sec = 0;\nts.tv_usec = 0" HAVE_STRUCT_TIMEVAL)
+
+
+include(CurlCheckCSourceRuns)
+set(EXTRA_DEFINES)
+set(HEADER_INCLUDES)
+if(HAVE_SYS_POLL_H)
+ set(HEADER_INCLUDES "sys/poll.h")
+endif(HAVE_SYS_POLL_H)
+curl_check_c_source_runs("return poll((void *)0, 0, 10 /*ms*/)" HAVE_POLL_FINE)
+
+set(HAVE_SIG_ATOMIC_T 1)
+set(EXTRA_DEFINES)
+set(HEADER_INCLUDES)
+if(HAVE_SIGNAL_H)
+ set(HEADER_INCLUDES "signal.h")
+ set(CMAKE_EXTRA_INCLUDE_FILES "signal.h")
+endif(HAVE_SIGNAL_H)
+check_type_size("sig_atomic_t" SIZEOF_SIG_ATOMIC_T)
+if(HAVE_SIZEOF_SIG_ATOMIC_T)
+ curl_check_c_source_compiles("static volatile sig_atomic_t dummy = 0" HAVE_SIG_ATOMIC_T_NOT_VOLATILE)
+ if(NOT HAVE_SIG_ATOMIC_T_NOT_VOLATILE)
+ set(HAVE_SIG_ATOMIC_T_VOLATILE 1)
+ endif(NOT HAVE_SIG_ATOMIC_T_NOT_VOLATILE)
+endif(HAVE_SIZEOF_SIG_ATOMIC_T)
+
+set(CHECK_TYPE_SIZE_PREINCLUDE
+ "#undef inline")
+
+if(HAVE_WINDOWS_H)
+ set(CHECK_TYPE_SIZE_PREINCLUDE "${CHECK_TYPE_SIZE_PREINCLUDE}
+ #ifndef WIN32_LEAN_AND_MEAN
+ #define WIN32_LEAN_AND_MEAN
+ #endif
+ #include <windows.h>")
+ if(HAVE_WINSOCK2_H)
+ set(CHECK_TYPE_SIZE_PREINCLUDE "${CHECK_TYPE_SIZE_PREINCLUDE}\n#include <winsock2.h>")
+ endif(HAVE_WINSOCK2_H)
+else(HAVE_WINDOWS_H)
+ if(HAVE_SYS_SOCKET_H)
+ set(CMAKE_EXTRA_INCLUDE_FILES ${CMAKE_EXTRA_INCLUDE_FILES}
+ "sys/socket.h")
+ endif(HAVE_SYS_SOCKET_H)
+ if(HAVE_NETINET_IN_H)
+ set(CMAKE_EXTRA_INCLUDE_FILES ${CMAKE_EXTRA_INCLUDE_FILES}
+ "netinet/in.h")
+ endif(HAVE_NETINET_IN_H)
+ if(HAVE_ARPA_INET_H)
+ set(CMAKE_EXTRA_INCLUDE_FILES ${CMAKE_EXTRA_INCLUDE_FILES}
+ "arpa/inet.h")
+ endif(HAVE_ARPA_INET_H)
+endif(HAVE_WINDOWS_H)
+
+check_type_size("struct sockaddr_storage" SIZEOF_STRUCT_SOCKADDR_STORAGE)
+if(HAVE_SIZEOF_STRUCT_SOCKADDR_STORAGE)
+ set(HAVE_STRUCT_SOCKADDR_STORAGE 1)
+endif(HAVE_SIZEOF_STRUCT_SOCKADDR_STORAGE)
+
diff --git a/CMake/Platforms/WindowsCache.cmake b/CMake/Platforms/WindowsCache.cmake
new file mode 100644
index 0000000..49161f8
--- /dev/null
+++ b/CMake/Platforms/WindowsCache.cmake
@@ -0,0 +1,121 @@
+if(NOT UNIX)
+ if(WIN32)
+ set(HAVE_LIBDL 0)
+ set(HAVE_LIBUCB 0)
+ set(HAVE_LIBSOCKET 0)
+ set(NOT_NEED_LIBNSL 0)
+ set(HAVE_LIBNSL 0)
+ set(HAVE_LIBZ 0)
+ set(HAVE_LIBCRYPTO 0)
+
+ set(HAVE_DLOPEN 0)
+
+ set(HAVE_ALLOCA_H 0)
+ set(HAVE_ARPA_INET_H 0)
+ set(HAVE_DLFCN_H 0)
+ set(HAVE_FCNTL_H 1)
+ set(HAVE_FEATURES_H 0)
+ set(HAVE_INTTYPES_H 0)
+ set(HAVE_IO_H 1)
+ set(HAVE_MALLOC_H 1)
+ set(HAVE_MEMORY_H 1)
+ set(HAVE_NETDB_H 0)
+ set(HAVE_NETINET_IF_ETHER_H 0)
+ set(HAVE_NETINET_IN_H 0)
+ set(HAVE_NET_IF_H 0)
+ set(HAVE_PROCESS_H 1)
+ set(HAVE_PWD_H 0)
+ set(HAVE_SETJMP_H 1)
+ set(HAVE_SGTTY_H 0)
+ set(HAVE_SIGNAL_H 1)
+ set(HAVE_SOCKIO_H 0)
+ set(HAVE_STDINT_H 0)
+ set(HAVE_STDLIB_H 1)
+ set(HAVE_STRINGS_H 0)
+ set(HAVE_STRING_H 1)
+ set(HAVE_SYS_PARAM_H 0)
+ set(HAVE_SYS_POLL_H 0)
+ set(HAVE_SYS_SELECT_H 0)
+ set(HAVE_SYS_SOCKET_H 0)
+ set(HAVE_SYS_SOCKIO_H 0)
+ set(HAVE_SYS_STAT_H 1)
+ set(HAVE_SYS_TIME_H 0)
+ set(HAVE_SYS_TYPES_H 1)
+ set(HAVE_SYS_UTIME_H 1)
+ set(HAVE_TERMIOS_H 0)
+ set(HAVE_TERMIO_H 0)
+ set(HAVE_TIME_H 1)
+ set(HAVE_UNISTD_H 0)
+ set(HAVE_UTIME_H 0)
+ set(HAVE_X509_H 0)
+ set(HAVE_ZLIB_H 0)
+
+ set(HAVE_SIZEOF_LONG_DOUBLE 1)
+ set(SIZEOF_LONG_DOUBLE 8)
+
+ set(HAVE_SOCKET 1)
+ set(HAVE_POLL 0)
+ set(HAVE_SELECT 1)
+ set(HAVE_STRDUP 1)
+ set(HAVE_STRSTR 1)
+ set(HAVE_STRTOK_R 0)
+ set(HAVE_STRFTIME 1)
+ set(HAVE_UNAME 0)
+ set(HAVE_STRCASECMP 0)
+ set(HAVE_STRICMP 1)
+ set(HAVE_STRCMPI 1)
+ set(HAVE_GETHOSTBYADDR 1)
+ set(HAVE_GETTIMEOFDAY 0)
+ set(HAVE_INET_ADDR 1)
+ set(HAVE_INET_NTOA 1)
+ set(HAVE_INET_NTOA_R 0)
+ set(HAVE_TCGETATTR 0)
+ set(HAVE_TCSETATTR 0)
+ set(HAVE_PERROR 1)
+ set(HAVE_CLOSESOCKET 1)
+ set(HAVE_SETVBUF 0)
+ set(HAVE_SIGSETJMP 0)
+ set(HAVE_GETPASS_R 0)
+ set(HAVE_STRLCAT 0)
+ set(HAVE_GETPWUID 0)
+ set(HAVE_GETEUID 0)
+ set(HAVE_UTIME 1)
+ set(HAVE_RAND_EGD 0)
+ set(HAVE_RAND_SCREEN 0)
+ set(HAVE_RAND_STATUS 0)
+ set(HAVE_GMTIME_R 0)
+ set(HAVE_LOCALTIME_R 0)
+ set(HAVE_GETHOSTBYADDR_R 0)
+ set(HAVE_GETHOSTBYNAME_R 0)
+ set(HAVE_SIGNAL_FUNC 1)
+ set(HAVE_SIGNAL_MACRO 0)
+
+ set(HAVE_GETHOSTBYADDR_R_5 0)
+ set(HAVE_GETHOSTBYADDR_R_5_REENTRANT 0)
+ set(HAVE_GETHOSTBYADDR_R_7 0)
+ set(HAVE_GETHOSTBYADDR_R_7_REENTRANT 0)
+ set(HAVE_GETHOSTBYADDR_R_8 0)
+ set(HAVE_GETHOSTBYADDR_R_8_REENTRANT 0)
+ set(HAVE_GETHOSTBYNAME_R_3 0)
+ set(HAVE_GETHOSTBYNAME_R_3_REENTRANT 0)
+ set(HAVE_GETHOSTBYNAME_R_5 0)
+ set(HAVE_GETHOSTBYNAME_R_5_REENTRANT 0)
+ set(HAVE_GETHOSTBYNAME_R_6 0)
+ set(HAVE_GETHOSTBYNAME_R_6_REENTRANT 0)
+
+ set(TIME_WITH_SYS_TIME 0)
+ set(HAVE_O_NONBLOCK 0)
+ set(HAVE_IN_ADDR_T 0)
+ set(HAVE_INET_NTOA_R_DECL 0)
+ set(HAVE_INET_NTOA_R_DECL_REENTRANT 0)
+ set(HAVE_GETADDRINFO 0)
+ set(STDC_HEADERS 1)
+ set(RETSIGTYPE_TEST 1)
+
+ set(HAVE_SIGACTION 0)
+ set(HAVE_MACRO_SIGSETJMP 0)
+ else(WIN32)
+ message("This file should be included on Windows platform only")
+ endif(WIN32)
+endif(NOT UNIX)
+
diff --git a/CMake/Utilities.cmake b/CMake/Utilities.cmake
new file mode 100644
index 0000000..37cdfe3
--- /dev/null
+++ b/CMake/Utilities.cmake
@@ -0,0 +1,31 @@
+# File containing various utilities
+
+# Converts a CMake list to a string containing elements separated by spaces
+function(TO_LIST_SPACES _LIST_NAME OUTPUT_VAR)
+ set(NEW_LIST_SPACE)
+ foreach(ITEM ${${_LIST_NAME}})
+ set(NEW_LIST_SPACE "${NEW_LIST_SPACE} ${ITEM}")
+ endforeach()
+ string(STRIP ${NEW_LIST_SPACE} NEW_LIST_SPACE)
+ set(${OUTPUT_VAR} "${NEW_LIST_SPACE}" PARENT_SCOPE)
+endfunction()
+
+# Appends a lis of item to a string which is a space-separated list, if they don't already exist.
+function(LIST_SPACES_APPEND_ONCE LIST_NAME)
+ string(REPLACE " " ";" _LIST ${${LIST_NAME}})
+ list(APPEND _LIST ${ARGN})
+ list(REMOVE_DUPLICATES _LIST)
+ to_list_spaces(_LIST NEW_LIST_SPACE)
+ set(${LIST_NAME} "${NEW_LIST_SPACE}" PARENT_SCOPE)
+endfunction()
+
+# Convinience function that does the same as LIST(FIND ...) but with a TRUE/FALSE return value.
+# Ex: IN_STR_LIST(MY_LIST "Searched item" WAS_FOUND)
+function(IN_STR_LIST LIST_NAME ITEM_SEARCHED RETVAL)
+ list(FIND ${LIST_NAME} ${ITEM_SEARCHED} FIND_POS)
+ if(${FIND_POS} EQUAL -1)
+ set(${RETVAL} FALSE PARENT_SCOPE)
+ else()
+ set(${RETVAL} TRUE PARENT_SCOPE)
+ endif()
+endfunction()
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000..244085b
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,854 @@
+# cURL/libcurl CMake script
+# by Tetetest and Sukender (Benoit Neil)
+
+# TODO:
+# The output .so file lacks the soname number which we currently have within the lib/Makefile.am file
+# Add full (4 or 5 libs) SSL support
+# Add INSTALL target (EXTRA_DIST variables in Makefile.am may be moved to Makefile.inc so that CMake/CPack is aware of what's to include).
+# Add CTests(?)
+# Check on all possible platforms
+# Test with as many configurations possible (With or without any option)
+# Create scripts that help keeping the CMake build system up to date (to reduce maintenance). According to Tetetest:
+# - lists of headers that 'configure' checks for;
+# - curl-specific tests (the ones that are in m4/curl-*.m4 files);
+# - (most obvious thing:) curl version numbers.
+# Add documentation subproject
+#
+# To check:
+# (From Daniel Stenberg) The cmake build selected to run gcc with -fPIC on my box while the plain configure script did not.
+# (From Daniel Stenberg) The gcc command line use neither -g nor any -O options. As a developer, I also treasure our configure scripts's --enable-debug option that sets a long range of "picky" compiler options.
+cmake_minimum_required(VERSION 2.6.2 FATAL_ERROR)
+set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMake;${CMAKE_MODULE_PATH}")
+include(Utilities)
+
+project( CURL C )
+
+
+file (READ ${CURL_SOURCE_DIR}/include/curl/curlver.h CURL_VERSION_H_CONTENTS)
+string (REGEX MATCH "LIBCURL_VERSION_MAJOR[ \t]+([0-9]+)"
+ LIBCURL_VERSION_MJ ${CURL_VERSION_H_CONTENTS})
+string (REGEX MATCH "([0-9]+)"
+ LIBCURL_VERSION_MJ ${LIBCURL_VERSION_MJ})
+string (REGEX MATCH
+ "LIBCURL_VERSION_MINOR[ \t]+([0-9]+)"
+ LIBCURL_VERSION_MI ${CURL_VERSION_H_CONTENTS})
+string (REGEX MATCH "([0-9]+)" LIBCURL_VERSION_MI ${LIBCURL_VERSION_MI})
+string (REGEX MATCH
+ "LIBCURL_VERSION_PATCH[ \t]+([0-9]+)"
+ LIBCURL_VERSION_PT ${CURL_VERSION_H_CONTENTS})
+string (REGEX MATCH "([0-9]+)" LIBCURL_VERSION_PT ${LIBCURL_VERSION_PT})
+set (CURL_MAJOR_VERSION ${LIBCURL_VERSION_MJ})
+set (CURL_MINOR_VERSION ${LIBCURL_VERSION_MI})
+set (CURL_PATCH_VERSION ${LIBCURL_VERSION_PT})
+
+include_regular_expression("^.*$") # Sukender: Is it necessary?
+
+# Setup package meta-data
+# SET(PACKAGE "curl")
+set(CURL_VERSION ${CURL_MAJOR_VERSION}.${CURL_MINOR_VERSION}.${CURL_PATCH_VERSION})
+message(STATUS "curl version=[${CURL_VERSION}]")
+# SET(PACKAGE_TARNAME "curl")
+# SET(PACKAGE_NAME "curl")
+# SET(PACKAGE_VERSION "-")
+# SET(PACKAGE_STRING "curl-")
+# SET(PACKAGE_BUGREPORT "a suitable curl mailing list => http://curl.haxx.se/mail/")
+set(OPERATING_SYSTEM "${CMAKE_SYSTEM_NAME}")
+set(OS "\"${CMAKE_SYSTEM_NAME}\"")
+
+include_directories(${PROJECT_BINARY_DIR}/include/curl)
+include_directories( ${CURL_SOURCE_DIR}/include )
+
+if(WIN32)
+ set(NATIVE_WINDOWS ON)
+endif()
+
+option(BUILD_CURL_EXE "Set to ON to build cURL executable." ON)
+option(BUILD_CURL_TESTS "Set to ON to build cURL tests." ON)
+option(CURL_STATICLIB "Set to ON to build libcurl with static linking." OFF)
+option(CURL_USE_ARES "Set to ON to enable c-ares support" OFF)
+# initialize CURL_LIBS
+set(CURL_LIBS "")
+
+if(CURL_USE_ARES)
+ set(USE_ARES ${CURL_USE_ARES})
+ find_package(CARES REQUIRED)
+ list(APPEND CURL_LIBS ${CARES_LIBRARY} )
+ set(CURL_LIBS ${CURL_LIBS} ${CARES_LIBRARY})
+endif()
+
+option(BUILD_DASHBOARD_REPORTS "Set to ON to activate reporting of cURL builds here http://www.cdash.org/CDashPublic/index.php?project=CURL" OFF)
+if(BUILD_DASHBOARD_REPORTS)
+ #INCLUDE(Dart)
+ include(CTest)
+endif(BUILD_DASHBOARD_REPORTS)
+
+if(MSVC)
+ option(BUILD_RELEASE_DEBUG_DIRS "Set OFF to build each configuration to a separate directory" OFF)
+ mark_as_advanced(BUILD_RELEASE_DEBUG_DIRS)
+endif()
+
+option(CURL_HIDDEN_SYMBOLS "Set to ON to hide libcurl internal symbols (=hide all symbols that aren't officially external)." ON)
+mark_as_advanced(CURL_HIDDEN_SYMBOLS)
+
+# IF(WIN32)
+# OPTION(CURL_WINDOWS_SSPI "Use windows libraries to allow NTLM authentication without openssl" ON)
+# MARK_AS_ADVANCED(CURL_WINDOWS_SSPI)
+# ENDIF()
+
+option(HTTP_ONLY "disables all protocols except HTTP (This overrides all CURL_DISABLE_* options)" OFF)
+mark_as_advanced(HTTP_ONLY)
+option(CURL_DISABLE_FTP "disables FTP" OFF)
+mark_as_advanced(CURL_DISABLE_FTP)
+option(CURL_DISABLE_LDAP "disables LDAP" OFF)
+mark_as_advanced(CURL_DISABLE_LDAP)
+option(CURL_DISABLE_TELNET "disables Telnet" OFF)
+mark_as_advanced(CURL_DISABLE_TELNET)
+option(CURL_DISABLE_DICT "disables DICT" OFF)
+mark_as_advanced(CURL_DISABLE_DICT)
+option(CURL_DISABLE_FILE "disables FILE" OFF)
+mark_as_advanced(CURL_DISABLE_FILE)
+option(CURL_DISABLE_TFTP "disables TFTP" OFF)
+mark_as_advanced(CURL_DISABLE_TFTP)
+option(CURL_DISABLE_HTTP "disables HTTP" OFF)
+mark_as_advanced(CURL_DISABLE_HTTP)
+
+option(CURL_DISABLE_LDAPS "to disable LDAPS" OFF)
+mark_as_advanced(CURL_DISABLE_LDAPS)
+if(WIN32)
+ set(CURL_DEFAULT_DISABLE_LDAP OFF)
+ # some windows compilers do not have wldap32
+ if( NOT HAVE_WLDAP32)
+ set(CURL_DISABLE_LDAP ON CACHE BOOL "" FORCE)
+ message(STATUS "wldap32 not found CURL_DISABLE_LDAP set ON")
+ option(CURL_LDAP_WIN "Use Windows LDAP implementation" OFF)
+ else()
+ option(CURL_LDAP_WIN "Use Windows LDAP implementation" ON)
+ endif()
+ mark_as_advanced(CURL_LDAP_WIN)
+endif()
+
+if(HTTP_ONLY)
+ set(CURL_DISABLE_FTP ON)
+ set(CURL_DISABLE_LDAP ON)
+ set(CURL_DISABLE_TELNET ON)
+ set(CURL_DISABLE_DICT ON)
+ set(CURL_DISABLE_FILE ON)
+ set(CURL_DISABLE_TFTP ON)
+endif()
+
+option(CURL_DISABLE_COOKIES "to disable cookies support" OFF)
+mark_as_advanced(CURL_DISABLE_COOKIES)
+
+option(CURL_DISABLE_CRYPTO_AUTH "to disable cryptographic authentication" OFF)
+mark_as_advanced(CURL_DISABLE_CRYPTO_AUTH)
+option(CURL_DISABLE_VERBOSE_STRINGS "to disable verbose strings" OFF)
+mark_as_advanced(CURL_DISABLE_VERBOSE_STRINGS)
+option(DISABLED_THREADSAFE "Set to explicitly specify we don't want to use thread-safe functions" OFF)
+mark_as_advanced(DISABLED_THREADSAFE)
+option(ENABLE_IPV6 "Define if you want to enable IPv6 support" OFF)
+mark_as_advanced(ENABLE_IPV6)
+
+if(WIN32)
+ list_spaces_append_once(CMAKE_C_STANDARD_LIBRARIES wsock32.lib ws2_32.lib) # bufferoverflowu.lib
+ if(CURL_DISABLE_LDAP)
+ # Remove wldap32.lib from space-separated list
+ string(REPLACE " " ";" _LIST ${CMAKE_C_STANDARD_LIBRARIES})
+ list(REMOVE_ITEM _LIST "wldap32.lib")
+ to_list_spaces(_LIST CMAKE_C_STANDARD_LIBRARIES)
+ else()
+ # Append wldap32.lib
+ list_spaces_append_once(CMAKE_C_STANDARD_LIBRARIES wldap32.lib)
+ endif()
+ set(CMAKE_C_STANDARD_LIBRARIES "${CMAKE_C_STANDARD_LIBRARIES}" CACHE STRING "" FORCE)
+endif()
+
+
+# We need ansi c-flags, especially on HP
+set(CMAKE_C_FLAGS "${CMAKE_ANSI_CFLAGS} ${CMAKE_C_FLAGS}")
+set(CMAKE_REQUIRED_FLAGS ${CMAKE_ANSI_CFLAGS})
+
+# Disable warnings on Borland to avoid changing 3rd party code.
+if(BORLAND)
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -w-")
+endif(BORLAND)
+
+# If we are on AIX, do the _ALL_SOURCE magic
+if(${CMAKE_SYSTEM_NAME} MATCHES AIX)
+ set(_ALL_SOURCE 1)
+endif(${CMAKE_SYSTEM_NAME} MATCHES AIX)
+
+# Include all the necessary files for macros
+include (CheckFunctionExists)
+include (CheckIncludeFile)
+include (CheckIncludeFiles)
+include (CheckLibraryExists)
+include (CheckSymbolExists)
+# if crosscompiling is on, the CHECK_TYPE_SIZE macro coming with cmake uses
+# TRY_COMPILE instead of TRY_RUN which makes crosscompiling easier, Alex
+if(CMAKE_CROSSCOMPILING)
+ include ("${CMAKE_MODULE_PATH}/CheckTypeSize.cmake")
+else(CMAKE_CROSSCOMPILING)
+ include (CheckTypeSize)
+endif(CMAKE_CROSSCOMPILING)
+
+# On windows preload settings
+if(WIN32)
+ include(${CMAKE_CURRENT_SOURCE_DIR}/CMake/Platforms/WindowsCache.cmake)
+endif(WIN32)
+
+# This macro checks if the symbol exists in the library and if it
+# does, it appends library to the list.
+macro(CHECK_LIBRARY_EXISTS_CONCAT LIBRARY SYMBOL VARIABLE)
+ check_library_exists("${LIBRARY};${CURL_LIBS}" ${SYMBOL} ""
+ ${VARIABLE})
+ if(${VARIABLE})
+ set(CURL_LIBS ${CURL_LIBS} ${LIBRARY})
+ endif(${VARIABLE})
+endmacro(CHECK_LIBRARY_EXISTS_CONCAT)
+
+# Check for all needed libraries
+check_library_exists_concat("dl" dlopen HAVE_LIBDL)
+check_library_exists_concat("socket" connect HAVE_LIBSOCKET)
+check_library_exists("c" gethostbyname "" NOT_NEED_LIBNSL)
+
+# Yellowtab Zeta needs different libraries than BeOS 5.
+if(BEOS)
+ set(NOT_NEED_LIBNSL 1)
+ check_library_exists_concat("bind" gethostbyname HAVE_LIBBIND)
+ check_library_exists_concat("bnetapi" closesocket HAVE_LIBBNETAPI)
+endif(BEOS)
+
+if(NOT NOT_NEED_LIBNSL)
+ check_library_exists_concat("nsl" gethostbyname HAVE_LIBNSL)
+endif(NOT NOT_NEED_LIBNSL)
+
+check_library_exists_concat("ws2_32" getch HAVE_LIBWS2_32)
+check_library_exists_concat("winmm" getch HAVE_LIBWINMM)
+check_library_exists("wldap32" cldap_open "" HAVE_WLDAP32)
+
+# IF(NOT CURL_SPECIAL_LIBZ)
+# CHECK_LIBRARY_EXISTS_CONCAT("z" inflateEnd HAVE_LIBZ)
+# ENDIF(NOT CURL_SPECIAL_LIBZ)
+
+option(CMAKE_USE_OPENSSL "Use OpenSSL code. Experimental" ON)
+mark_as_advanced(CMAKE_USE_OPENSSL)
+if(CMAKE_USE_OPENSSL)
+ if(WIN32)
+ find_package(OpenSSL)
+ if(OPENSSL_FOUND)
+ set(USE_SSLEAY TRUE)
+ set(USE_OPENSSL TRUE)
+ list(APPEND CURL_LIBS ${OPENSSL_LIBRARIES} )
+ else()
+ set(CMAKE_USE_OPENSSL FALSE)
+ message(STATUS "OpenSSL NOT Found, disabling CMAKE_USE_OPENSSL")
+ endif()
+ else(WIN32)
+ check_library_exists_concat("crypto" CRYPTO_lock HAVE_LIBCRYPTO)
+ check_library_exists_concat("ssl" SSL_connect HAVE_LIBSSL)
+ endif(WIN32)
+endif(CMAKE_USE_OPENSSL)
+
+# Check for idn
+check_library_exists_concat("idn" idna_to_ascii_lz HAVE_LIBIDN)
+
+# Check for LDAP
+check_library_exists_concat("ldap" ldap_init HAVE_LIBLDAP)
+# if(NOT HAVE_LIBLDAP)
+# SET(CURL_DISABLE_LDAP ON)
+# endif(NOT HAVE_LIBLDAP)
+
+# Check for symbol dlopen (same as HAVE_LIBDL)
+check_library_exists("${CURL_LIBS}" dlopen "" HAVE_DLOPEN)
+
+# For other tests to use the same libraries
+set(CMAKE_REQUIRED_LIBRARIES ${CURL_LIBS})
+
+option(CURL_ZLIB "Set to ON to enable building cURL with zlib support." ON)
+set(HAVE_LIBZ OFF)
+set(HAVE_ZLIB_H OFF)
+set(HAVE_ZLIB OFF)
+if(CURL_ZLIB) # AND CURL_CONFIG_HAS_BEEN_RUN_BEFORE
+ find_package(ZLIB QUIET)
+ if(ZLIB_FOUND)
+ set(HAVE_ZLIB_H ON)
+ set(HAVE_ZLIB ON)
+ set(HAVE_LIBZ ON)
+ endif()
+endif()
+
+# If we have features.h, then do the _BSD_SOURCE magic
+check_include_file("features.h" HAVE_FEATURES_H)
+
+# Check if header file exists and add it to the list.
+macro(CHECK_INCLUDE_FILE_CONCAT FILE VARIABLE)
+ check_include_files("${CURL_INCLUDES};${FILE}" ${VARIABLE})
+ if(${VARIABLE})
+ set(CURL_INCLUDES ${CURL_INCLUDES} ${FILE})
+ set(CURL_TEST_DEFINES "${CURL_TEST_DEFINES} -D${VARIABLE}")
+ endif(${VARIABLE})
+endmacro(CHECK_INCLUDE_FILE_CONCAT)
+
+
+# Check for header files
+if(NOT UNIX)
+ check_include_file_concat("ws2tcpip.h" HAVE_WS2TCPIP_H)
+ check_include_file_concat("winsock2.h" HAVE_WINSOCK2_H)
+endif(NOT UNIX)
+check_include_file_concat("stdio.h" HAVE_STDIO_H)
+if(NOT UNIX)
+ check_include_file_concat("windows.h" HAVE_WINDOWS_H)
+ check_include_file_concat("winsock.h" HAVE_WINSOCK_H)
+endif(NOT UNIX)
+
+check_include_file_concat("inttypes.h" HAVE_INTTYPES_H)
+check_include_file_concat("sys/filio.h" HAVE_SYS_FILIO_H)
+check_include_file_concat("sys/ioctl.h" HAVE_SYS_IOCTL_H)
+check_include_file_concat("sys/param.h" HAVE_SYS_PARAM_H)
+check_include_file_concat("sys/poll.h" HAVE_SYS_POLL_H)
+check_include_file_concat("sys/resource.h" HAVE_SYS_RESOURCE_H)
+check_include_file_concat("sys/select.h" HAVE_SYS_SELECT_H)
+check_include_file_concat("sys/socket.h" HAVE_SYS_SOCKET_H)
+check_include_file_concat("sys/sockio.h" HAVE_SYS_SOCKIO_H)
+check_include_file_concat("sys/stat.h" HAVE_SYS_STAT_H)
+check_include_file_concat("sys/time.h" HAVE_SYS_TIME_H)
+check_include_file_concat("sys/types.h" HAVE_SYS_TYPES_H)
+check_include_file_concat("sys/uio.h" HAVE_SYS_UIO_H)
+check_include_file_concat("sys/un.h" HAVE_SYS_UN_H)
+check_include_file_concat("sys/utime.h" HAVE_SYS_UTIME_H)
+check_include_file_concat("alloca.h" HAVE_ALLOCA_H)
+check_include_file_concat("arpa/inet.h" HAVE_ARPA_INET_H)
+check_include_file_concat("arpa/tftp.h" HAVE_ARPA_TFTP_H)
+check_include_file_concat("assert.h" HAVE_ASSERT_H)
+check_include_file_concat("crypto.h" HAVE_CRYPTO_H)
+check_include_file_concat("des.h" HAVE_DES_H)
+check_include_file_concat("err.h" HAVE_ERR_H)
+check_include_file_concat("errno.h" HAVE_ERRNO_H)
+check_include_file_concat("fcntl.h" HAVE_FCNTL_H)
+check_include_file_concat("gssapi/gssapi.h" HAVE_GSSAPI_GSSAPI_H)
+check_include_file_concat("gssapi/gssapi_generic.h" HAVE_GSSAPI_GSSAPI_GENERIC_H)
+check_include_file_concat("gssapi/gssapi_krb5.h" HAVE_GSSAPI_GSSAPI_KRB5_H)
+check_include_file_concat("idn-free.h" HAVE_IDN_FREE_H)
+check_include_file_concat("ifaddrs.h" HAVE_IFADDRS_H)
+check_include_file_concat("io.h" HAVE_IO_H)
+check_include_file_concat("krb.h" HAVE_KRB_H)
+check_include_file_concat("libgen.h" HAVE_LIBGEN_H)
+check_include_file_concat("libssh2.h" HAVE_LIBSSH2_H)
+check_include_file_concat("limits.h" HAVE_LIMITS_H)
+check_include_file_concat("locale.h" HAVE_LOCALE_H)
+check_include_file_concat("net/if.h" HAVE_NET_IF_H)
+check_include_file_concat("netdb.h" HAVE_NETDB_H)
+check_include_file_concat("netinet/in.h" HAVE_NETINET_IN_H)
+check_include_file_concat("netinet/tcp.h" HAVE_NETINET_TCP_H)
+check_include_file_concat("openssl/crypto.h" HAVE_OPENSSL_CRYPTO_H)
+check_include_file_concat("openssl/engine.h" HAVE_OPENSSL_ENGINE_H)
+check_include_file_concat("openssl/err.h" HAVE_OPENSSL_ERR_H)
+check_include_file_concat("openssl/pem.h" HAVE_OPENSSL_PEM_H)
+check_include_file_concat("openssl/pkcs12.h" HAVE_OPENSSL_PKCS12_H)
+check_include_file_concat("openssl/rsa.h" HAVE_OPENSSL_RSA_H)
+check_include_file_concat("openssl/ssl.h" HAVE_OPENSSL_SSL_H)
+check_include_file_concat("openssl/x509.h" HAVE_OPENSSL_X509_H)
+check_include_file_concat("pem.h" HAVE_PEM_H)
+check_include_file_concat("poll.h" HAVE_POLL_H)
+check_include_file_concat("pwd.h" HAVE_PWD_H)
+check_include_file_concat("rsa.h" HAVE_RSA_H)
+check_include_file_concat("setjmp.h" HAVE_SETJMP_H)
+check_include_file_concat("sgtty.h" HAVE_SGTTY_H)
+check_include_file_concat("signal.h" HAVE_SIGNAL_H)
+check_include_file_concat("ssl.h" HAVE_SSL_H)
+check_include_file_concat("stdbool.h" HAVE_STDBOOL_H)
+check_include_file_concat("stdint.h" HAVE_STDINT_H)
+check_include_file_concat("stdio.h" HAVE_STDIO_H)
+check_include_file_concat("stdlib.h" HAVE_STDLIB_H)
+check_include_file_concat("string.h" HAVE_STRING_H)
+check_include_file_concat("strings.h" HAVE_STRINGS_H)
+check_include_file_concat("stropts.h" HAVE_STROPTS_H)
+check_include_file_concat("termio.h" HAVE_TERMIO_H)
+check_include_file_concat("termios.h" HAVE_TERMIOS_H)
+check_include_file_concat("time.h" HAVE_TIME_H)
+check_include_file_concat("tld.h" HAVE_TLD_H)
+check_include_file_concat("unistd.h" HAVE_UNISTD_H)
+check_include_file_concat("utime.h" HAVE_UTIME_H)
+check_include_file_concat("x509.h" HAVE_X509_H)
+
+check_include_file_concat("process.h" HAVE_PROCESS_H)
+check_include_file_concat("stddef.h" HAVE_STDDEF_H)
+check_include_file_concat("dlfcn.h" HAVE_DLFCN_H)
+check_include_file_concat("malloc.h" HAVE_MALLOC_H)
+check_include_file_concat("memory.h" HAVE_MEMORY_H)
+check_include_file_concat("ldap.h" HAVE_LDAP_H)
+check_include_file_concat("netinet/if_ether.h" HAVE_NETINET_IF_ETHER_H)
+check_include_file_concat("stdint.h" HAVE_STDINT_H)
+check_include_file_concat("sockio.h" HAVE_SOCKIO_H)
+check_include_file_concat("sys/utsname.h" HAVE_SYS_UTSNAME_H)
+check_include_file_concat("idna.h" HAVE_IDNA_H)
+
+if(CMAKE_USE_OPENSSL)
+ check_include_file_concat("openssl/rand.h" HAVE_OPENSSL_RAND_H)
+endif(CMAKE_USE_OPENSSL)
+
+if(NOT HAVE_LDAP_H)
+ message(STATUS "LDAP_H not found CURL_DISABLE_LDAP set ON")
+ set(CURL_DISABLE_LDAP ON CACHE BOOL "" FORCE)
+endif()
+
+
+check_type_size(size_t SIZEOF_SIZE_T)
+check_type_size(ssize_t SIZEOF_SSIZE_T)
+check_type_size("long long" SIZEOF_LONG_LONG)
+check_type_size("long" SIZEOF_LONG)
+check_type_size("short" SIZEOF_SHORT)
+check_type_size("int" SIZEOF_INT)
+check_type_size("__int64" SIZEOF___INT64)
+check_type_size("long double" SIZEOF_LONG_DOUBLE)
+check_type_size("time_t" SIZEOF_TIME_T)
+if(NOT HAVE_SIZEOF_SSIZE_T)
+ if(SIZEOF_LONG EQUAL SIZEOF_SIZE_T)
+ set(ssize_t long)
+ endif(SIZEOF_LONG EQUAL SIZEOF_SIZE_T)
+ if(NOT ssize_t AND SIZEOF___INT64 EQUAL SIZEOF_SIZE_T)
+ set(ssize_t __int64)
+ endif(NOT ssize_t AND SIZEOF___INT64 EQUAL SIZEOF_SIZE_T)
+endif(NOT HAVE_SIZEOF_SSIZE_T)
+
+# Different sizeofs, etc.
+
+# define CURL_SIZEOF_LONG 4
+# define CURL_TYPEOF_CURL_OFF_T long long
+# define CURL_FORMAT_CURL_OFF_T "lld"
+# define CURL_FORMAT_CURL_OFF_TU "llu"
+# define CURL_FORMAT_OFF_T "%lld"
+# define CURL_SIZEOF_CURL_OFF_T 8
+# define CURL_SUFFIX_CURL_OFF_T LL
+# define CURL_SUFFIX_CURL_OFF_TU ULL
+
+set(CURL_SIZEOF_LONG ${SIZEOF_LONG})
+
+if(SIZEOF_LONG EQUAL 8)
+ set(CURL_TYPEOF_CURL_OFF_T long)
+ set(CURL_SIZEOF_CURL_OFF_T 8)
+ set(CURL_FORMAT_CURL_OFF_T "ld")
+ set(CURL_FORMAT_CURL_OFF_TU "lu")
+ set(CURL_FORMAT_OFF_T "%ld")
+ set(CURL_SUFFIX_CURL_OFF_T L)
+ set(CURL_SUFFIX_CURL_OFF_TU LU)
+endif(SIZEOF_LONG EQUAL 8)
+
+if(SIZEOF_LONG_LONG EQUAL 8)
+ set(CURL_TYPEOF_CURL_OFF_T "long long")
+ set(CURL_SIZEOF_CURL_OFF_T 8)
+ set(CURL_FORMAT_CURL_OFF_T "lld")
+ set(CURL_FORMAT_CURL_OFF_TU "llu")
+ set(CURL_FORMAT_OFF_T "%lld")
+ set(CURL_SUFFIX_CURL_OFF_T LL)
+ set(CURL_SUFFIX_CURL_OFF_TU LLU)
+endif(SIZEOF_LONG_LONG EQUAL 8)
+
+if(NOT CURL_TYPEOF_CURL_OFF_T)
+ set(CURL_TYPEOF_CURL_OFF_T ${ssize_t})
+ set(CURL_SIZEOF_CURL_OFF_T ${SIZEOF_SSIZE_T})
+ # TODO: need adjustment here.
+ set(CURL_FORMAT_CURL_OFF_T "ld")
+ set(CURL_FORMAT_CURL_OFF_TU "lu")
+ set(CURL_FORMAT_OFF_T "%ld")
+ set(CURL_SUFFIX_CURL_OFF_T L)
+ set(CURL_SUFFIX_CURL_OFF_TU LU)
+endif(NOT CURL_TYPEOF_CURL_OFF_T)
+
+if(HAVE_SIZEOF_LONG_LONG)
+ set(HAVE_LONGLONG 1)
+ set(HAVE_LL 1)
+endif(HAVE_SIZEOF_LONG_LONG)
+
+find_file(RANDOM_FILE urandom /dev)
+mark_as_advanced(RANDOM_FILE)
+
+# Check for some functions that are used
+check_symbol_exists(basename "${CURL_INCLUDES}" HAVE_BASENAME)
+check_symbol_exists(socket "${CURL_INCLUDES}" HAVE_SOCKET)
+check_symbol_exists(poll "${CURL_INCLUDES}" HAVE_POLL)
+check_symbol_exists(select "${CURL_INCLUDES}" HAVE_SELECT)
+check_symbol_exists(strdup "${CURL_INCLUDES}" HAVE_STRDUP)
+check_symbol_exists(strstr "${CURL_INCLUDES}" HAVE_STRSTR)
+check_symbol_exists(strtok_r "${CURL_INCLUDES}" HAVE_STRTOK_R)
+check_symbol_exists(strftime "${CURL_INCLUDES}" HAVE_STRFTIME)
+check_symbol_exists(uname "${CURL_INCLUDES}" HAVE_UNAME)
+check_symbol_exists(strcasecmp "${CURL_INCLUDES}" HAVE_STRCASECMP)
+check_symbol_exists(stricmp "${CURL_INCLUDES}" HAVE_STRICMP)
+check_symbol_exists(strcmpi "${CURL_INCLUDES}" HAVE_STRCMPI)
+check_symbol_exists(strncmpi "${CURL_INCLUDES}" HAVE_STRNCMPI)
+check_symbol_exists(alarm "${CURL_INCLUDES}" HAVE_ALARM)
+if(NOT HAVE_STRNCMPI)
+ set(HAVE_STRCMPI)
+endif(NOT HAVE_STRNCMPI)
+check_symbol_exists(gethostbyaddr "${CURL_INCLUDES}" HAVE_GETHOSTBYADDR)
+check_symbol_exists(gethostbyaddr_r "${CURL_INCLUDES}" HAVE_GETHOSTBYADDR_R)
+check_symbol_exists(gettimeofday "${CURL_INCLUDES}" HAVE_GETTIMEOFDAY)
+check_symbol_exists(inet_addr "${CURL_INCLUDES}" HAVE_INET_ADDR)
+check_symbol_exists(inet_ntoa "${CURL_INCLUDES}" HAVE_INET_NTOA)
+check_symbol_exists(inet_ntoa_r "${CURL_INCLUDES}" HAVE_INET_NTOA_R)
+check_symbol_exists(tcsetattr "${CURL_INCLUDES}" HAVE_TCSETATTR)
+check_symbol_exists(tcgetattr "${CURL_INCLUDES}" HAVE_TCGETATTR)
+check_symbol_exists(perror "${CURL_INCLUDES}" HAVE_PERROR)
+check_symbol_exists(closesocket "${CURL_INCLUDES}" HAVE_CLOSESOCKET)
+check_symbol_exists(setvbuf "${CURL_INCLUDES}" HAVE_SETVBUF)
+check_symbol_exists(sigsetjmp "${CURL_INCLUDES}" HAVE_SIGSETJMP)
+check_symbol_exists(getpass_r "${CURL_INCLUDES}" HAVE_GETPASS_R)
+check_symbol_exists(strlcat "${CURL_INCLUDES}" HAVE_STRLCAT)
+check_symbol_exists(getpwuid "${CURL_INCLUDES}" HAVE_GETPWUID)
+check_symbol_exists(geteuid "${CURL_INCLUDES}" HAVE_GETEUID)
+check_symbol_exists(utime "${CURL_INCLUDES}" HAVE_UTIME)
+if(CMAKE_USE_OPENSSL)
+ check_symbol_exists(RAND_status "${CURL_INCLUDES}" HAVE_RAND_STATUS)
+ check_symbol_exists(RAND_screen "${CURL_INCLUDES}" HAVE_RAND_SCREEN)
+ check_symbol_exists(RAND_egd "${CURL_INCLUDES}" HAVE_RAND_EGD)
+ check_symbol_exists(CRYPTO_cleanup_all_ex_data "${CURL_INCLUDES}"
+ HAVE_CRYPTO_CLEANUP_ALL_EX_DATA)
+ if(HAVE_LIBCRYPTO AND HAVE_LIBSSL)
+ set(USE_OPENSSL 1)
+ set(USE_SSLEAY 1)
+ endif(HAVE_LIBCRYPTO AND HAVE_LIBSSL)
+endif(CMAKE_USE_OPENSSL)
+check_symbol_exists(gmtime_r "${CURL_INCLUDES}" HAVE_GMTIME_R)
+check_symbol_exists(localtime_r "${CURL_INCLUDES}" HAVE_LOCALTIME_R)
+
+check_symbol_exists(gethostbyname "${CURL_INCLUDES}" HAVE_GETHOSTBYNAME)
+check_symbol_exists(gethostbyname_r "${CURL_INCLUDES}" HAVE_GETHOSTBYNAME_R)
+
+check_symbol_exists(signal "${CURL_INCLUDES}" HAVE_SIGNAL_FUNC)
+check_symbol_exists(SIGALRM "${CURL_INCLUDES}" HAVE_SIGNAL_MACRO)
+if(HAVE_SIGNAL_FUNC AND HAVE_SIGNAL_MACRO)
+ set(HAVE_SIGNAL 1)
+endif(HAVE_SIGNAL_FUNC AND HAVE_SIGNAL_MACRO)
+check_symbol_exists(uname "${CURL_INCLUDES}" HAVE_UNAME)
+check_symbol_exists(strtoll "${CURL_INCLUDES}" HAVE_STRTOLL)
+check_symbol_exists(_strtoi64 "${CURL_INCLUDES}" HAVE__STRTOI64)
+check_symbol_exists(strerror_r "${CURL_INCLUDES}" HAVE_STRERROR_R)
+check_symbol_exists(siginterrupt "${CURL_INCLUDES}" HAVE_SIGINTERRUPT)
+check_symbol_exists(perror "${CURL_INCLUDES}" HAVE_PERROR)
+check_symbol_exists(fork "${CURL_INCLUDES}" HAVE_FORK)
+check_symbol_exists(freeaddrinfo "${CURL_INCLUDES}" HAVE_FREEADDRINFO)
+check_symbol_exists(freeifaddrs "${CURL_INCLUDES}" HAVE_FREEIFADDRS)
+check_symbol_exists(pipe "${CURL_INCLUDES}" HAVE_PIPE)
+check_symbol_exists(ftruncate "${CURL_INCLUDES}" HAVE_FTRUNCATE)
+check_symbol_exists(getprotobyname "${CURL_INCLUDES}" HAVE_GETPROTOBYNAME)
+check_symbol_exists(getrlimit "${CURL_INCLUDES}" HAVE_GETRLIMIT)
+check_symbol_exists(idn_free "${CURL_INCLUDES}" HAVE_IDN_FREE)
+check_symbol_exists(idna_strerror "${CURL_INCLUDES}" HAVE_IDNA_STRERROR)
+check_symbol_exists(tld_strerror "${CURL_INCLUDES}" HAVE_TLD_STRERROR)
+check_symbol_exists(setlocale "${CURL_INCLUDES}" HAVE_SETLOCALE)
+check_symbol_exists(setrlimit "${CURL_INCLUDES}" HAVE_SETRLIMIT)
+check_symbol_exists(fcntl "${CURL_INCLUDES}" HAVE_FCNTL)
+check_symbol_exists(ioctl "${CURL_INCLUDES}" HAVE_IOCTL)
+check_symbol_exists(setsockopt "${CURL_INCLUDES}" HAVE_SETSOCKOPT)
+
+# symbol exists in win32, but function does not.
+check_function_exists(inet_pton HAVE_INET_PTON)
+
+# sigaction and sigsetjmp are special. Use special mechanism for
+# detecting those, but only if previous attempt failed.
+if(HAVE_SIGNAL_H)
+ check_symbol_exists(sigaction "signal.h" HAVE_SIGACTION)
+endif(HAVE_SIGNAL_H)
+
+if(NOT HAVE_SIGSETJMP)
+ if(HAVE_SETJMP_H)
+ check_symbol_exists(sigsetjmp "setjmp.h" HAVE_MACRO_SIGSETJMP)
+ if(HAVE_MACRO_SIGSETJMP)
+ set(HAVE_SIGSETJMP 1)
+ endif(HAVE_MACRO_SIGSETJMP)
+ endif(HAVE_SETJMP_H)
+endif(NOT HAVE_SIGSETJMP)
+
+# If there is no stricmp(), do not allow LDAP to parse URLs
+if(NOT HAVE_STRICMP)
+ set(HAVE_LDAP_URL_PARSE 1)
+endif(NOT HAVE_STRICMP)
+
+# For other curl specific tests, use this macro.
+macro(CURL_INTERNAL_TEST CURL_TEST)
+ if("${CURL_TEST}" MATCHES "^${CURL_TEST}$")
+ set(MACRO_CHECK_FUNCTION_DEFINITIONS
+ "-D${CURL_TEST} ${CURL_TEST_DEFINES} ${CMAKE_REQUIRED_FLAGS}")
+ if(CMAKE_REQUIRED_LIBRARIES)
+ set(CURL_TEST_ADD_LIBRARIES
+ "-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}")
+ endif(CMAKE_REQUIRED_LIBRARIES)
+
+ message(STATUS "Performing Curl Test ${CURL_TEST}")
+ try_compile(${CURL_TEST}
+ ${CMAKE_BINARY_DIR}
+ ${CMAKE_CURRENT_SOURCE_DIR}/CMake/CurlTests.c
+ CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS}
+ "${CURL_TEST_ADD_LIBRARIES}"
+ OUTPUT_VARIABLE OUTPUT)
+ if(${CURL_TEST})
+ set(${CURL_TEST} 1 CACHE INTERNAL "Curl test ${FUNCTION}")
+ message(STATUS "Performing Curl Test ${CURL_TEST} - Success")
+ file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+ "Performing Curl Test ${CURL_TEST} passed with the following output:\n"
+ "${OUTPUT}\n")
+ else(${CURL_TEST})
+ message(STATUS "Performing Curl Test ${CURL_TEST} - Failed")
+ set(${CURL_TEST} "" CACHE INTERNAL "Curl test ${FUNCTION}")
+ file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
+ "Performing Curl Test ${CURL_TEST} failed with the following output:\n"
+ "${OUTPUT}\n")
+ endif(${CURL_TEST})
+ endif("${CURL_TEST}" MATCHES "^${CURL_TEST}$")
+endmacro(CURL_INTERNAL_TEST)
+
+macro(CURL_INTERNAL_TEST_RUN CURL_TEST)
+ if("${CURL_TEST}_COMPILE" MATCHES "^${CURL_TEST}_COMPILE$")
+ set(MACRO_CHECK_FUNCTION_DEFINITIONS
+ "-D${CURL_TEST} ${CMAKE_REQUIRED_FLAGS}")
+ if(CMAKE_REQUIRED_LIBRARIES)
+ set(CURL_TEST_ADD_LIBRARIES
+ "-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}")
+ endif(CMAKE_REQUIRED_LIBRARIES)
+
+ message(STATUS "Performing Curl Test ${CURL_TEST}")
+ try_run(${CURL_TEST} ${CURL_TEST}_COMPILE
+ ${CMAKE_BINARY_DIR}
+ ${CMAKE_CURRENT_SOURCE_DIR}/CMake/CurlTests.c
+ CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS}
+ "${CURL_TEST_ADD_LIBRARIES}"
+ OUTPUT_VARIABLE OUTPUT)
+ if(${CURL_TEST}_COMPILE AND NOT ${CURL_TEST})
+ set(${CURL_TEST} 1 CACHE INTERNAL "Curl test ${FUNCTION}")
+ message(STATUS "Performing Curl Test ${CURL_TEST} - Success")
+ else(${CURL_TEST}_COMPILE AND NOT ${CURL_TEST})
+ message(STATUS "Performing Curl Test ${CURL_TEST} - Failed")
+ set(${CURL_TEST} "" CACHE INTERNAL "Curl test ${FUNCTION}")
+ file(APPEND "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log"
+ "Performing Curl Test ${CURL_TEST} failed with the following output:\n"
+ "${OUTPUT}")
+ if(${CURL_TEST}_COMPILE)
+ file(APPEND
+ "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log"
+ "There was a problem running this test\n")
+ endif(${CURL_TEST}_COMPILE)
+ file(APPEND "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log"
+ "\n\n")
+ endif(${CURL_TEST}_COMPILE AND NOT ${CURL_TEST})
+ endif("${CURL_TEST}_COMPILE" MATCHES "^${CURL_TEST}_COMPILE$")
+endmacro(CURL_INTERNAL_TEST_RUN)
+
+# Do curl specific tests
+foreach(CURL_TEST
+ HAVE_FCNTL_O_NONBLOCK
+ HAVE_IOCTLSOCKET
+ HAVE_IOCTLSOCKET_CAMEL
+ HAVE_IOCTLSOCKET_CAMEL_FIONBIO
+ HAVE_IOCTLSOCKET_FIONBIO
+ HAVE_IOCTL_FIONBIO
+ HAVE_IOCTL_SIOCGIFADDR
+ HAVE_SETSOCKOPT_SO_NONBLOCK
+ HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
+ TIME_WITH_SYS_TIME
+ HAVE_O_NONBLOCK
+ HAVE_GETHOSTBYADDR_R_5
+ HAVE_GETHOSTBYADDR_R_7
+ HAVE_GETHOSTBYADDR_R_8
+ HAVE_GETHOSTBYADDR_R_5_REENTRANT
+ HAVE_GETHOSTBYADDR_R_7_REENTRANT
+ HAVE_GETHOSTBYADDR_R_8_REENTRANT
+ HAVE_GETHOSTBYNAME_R_3
+ HAVE_GETHOSTBYNAME_R_5
+ HAVE_GETHOSTBYNAME_R_6
+ HAVE_GETHOSTBYNAME_R_3_REENTRANT
+ HAVE_GETHOSTBYNAME_R_5_REENTRANT
+ HAVE_GETHOSTBYNAME_R_6_REENTRANT
+ HAVE_SOCKLEN_T
+ HAVE_IN_ADDR_T
+ HAVE_BOOL_T
+ STDC_HEADERS
+ RETSIGTYPE_TEST
+ HAVE_INET_NTOA_R_DECL
+ HAVE_INET_NTOA_R_DECL_REENTRANT
+ HAVE_GETADDRINFO
+ HAVE_FILE_OFFSET_BITS
+ )
+ curl_internal_test(${CURL_TEST})
+endforeach(CURL_TEST)
+if(HAVE_FILE_OFFSET_BITS)
+ set(_FILE_OFFSET_BITS 64)
+endif(HAVE_FILE_OFFSET_BITS)
+foreach(CURL_TEST
+ HAVE_GLIBC_STRERROR_R
+ HAVE_POSIX_STRERROR_R
+ )
+ curl_internal_test_run(${CURL_TEST})
+endforeach(CURL_TEST)
+
+# Check for reentrant
+foreach(CURL_TEST
+ HAVE_GETHOSTBYADDR_R_5
+ HAVE_GETHOSTBYADDR_R_7
+ HAVE_GETHOSTBYADDR_R_8
+ HAVE_GETHOSTBYNAME_R_3
+ HAVE_GETHOSTBYNAME_R_5
+ HAVE_GETHOSTBYNAME_R_6
+ HAVE_INET_NTOA_R_DECL_REENTRANT)
+ if(NOT ${CURL_TEST})
+ if(${CURL_TEST}_REENTRANT)
+ set(NEED_REENTRANT 1)
+ endif(${CURL_TEST}_REENTRANT)
+ endif(NOT ${CURL_TEST})
+endforeach(CURL_TEST)
+
+if(NEED_REENTRANT)
+ foreach(CURL_TEST
+ HAVE_GETHOSTBYADDR_R_5
+ HAVE_GETHOSTBYADDR_R_7
+ HAVE_GETHOSTBYADDR_R_8
+ HAVE_GETHOSTBYNAME_R_3
+ HAVE_GETHOSTBYNAME_R_5
+ HAVE_GETHOSTBYNAME_R_6)
+ set(${CURL_TEST} 0)
+ if(${CURL_TEST}_REENTRANT)
+ set(${CURL_TEST} 1)
+ endif(${CURL_TEST}_REENTRANT)
+ endforeach(CURL_TEST)
+endif(NEED_REENTRANT)
+
+if(HAVE_INET_NTOA_R_DECL_REENTRANT)
+ set(HAVE_INET_NTOA_R_DECL 1)
+ set(NEED_REENTRANT 1)
+endif(HAVE_INET_NTOA_R_DECL_REENTRANT)
+
+# Some other minor tests
+
+if(NOT HAVE_IN_ADDR_T)
+ set(in_addr_t "unsigned long")
+endif(NOT HAVE_IN_ADDR_T)
+
+# Fix libz / zlib.h
+
+if(NOT CURL_SPECIAL_LIBZ)
+ if(NOT HAVE_LIBZ)
+ set(HAVE_ZLIB_H 0)
+ endif(NOT HAVE_LIBZ)
+
+ if(NOT HAVE_ZLIB_H)
+ set(HAVE_LIBZ 0)
+ endif(NOT HAVE_ZLIB_H)
+endif(NOT CURL_SPECIAL_LIBZ)
+
+if(_FILE_OFFSET_BITS)
+ set(_FILE_OFFSET_BITS 64)
+endif(_FILE_OFFSET_BITS)
+set(CMAKE_REQUIRED_FLAGS "-D_FILE_OFFSET_BITS=64")
+set(CMAKE_EXTRA_INCLUDE_FILES "${CMAKE_CURRENT_SOURCE_DIR}/curl/curl.h")
+check_type_size("curl_off_t" SIZEOF_CURL_OFF_T)
+set(CMAKE_EXTRA_INCLUDE_FILES)
+set(CMAKE_REQUIRED_FLAGS)
+
+
+# Check for nonblocking
+set(HAVE_DISABLED_NONBLOCKING 1)
+if(HAVE_FIONBIO OR
+ HAVE_IOCTLSOCKET OR
+ HAVE_IOCTLSOCKET_CASE OR
+ HAVE_O_NONBLOCK)
+ set(HAVE_DISABLED_NONBLOCKING)
+endif(HAVE_FIONBIO OR
+ HAVE_IOCTLSOCKET OR
+ HAVE_IOCTLSOCKET_CASE OR
+ HAVE_O_NONBLOCK)
+
+if(RETSIGTYPE_TEST)
+ set(RETSIGTYPE void)
+else(RETSIGTYPE_TEST)
+ set(RETSIGTYPE int)
+endif(RETSIGTYPE_TEST)
+
+if(CMAKE_COMPILER_IS_GNUCC AND APPLE)
+ include(CheckCCompilerFlag)
+ check_c_compiler_flag(-Wno-long-double HAVE_C_FLAG_Wno_long_double)
+ if(HAVE_C_FLAG_Wno_long_double)
+ # The Mac version of GCC warns about use of long double. Disable it.
+ get_source_file_property(MPRINTF_COMPILE_FLAGS mprintf.c COMPILE_FLAGS)
+ if(MPRINTF_COMPILE_FLAGS)
+ set(MPRINTF_COMPILE_FLAGS "${MPRINTF_COMPILE_FLAGS} -Wno-long-double")
+ else(MPRINTF_COMPILE_FLAGS)
+ set(MPRINTF_COMPILE_FLAGS "-Wno-long-double")
+ endif(MPRINTF_COMPILE_FLAGS)
+ set_source_files_properties(mprintf.c PROPERTIES
+ COMPILE_FLAGS ${MPRINTF_COMPILE_FLAGS})
+ endif(HAVE_C_FLAG_Wno_long_double)
+endif(CMAKE_COMPILER_IS_GNUCC AND APPLE)
+
+if(HAVE_SOCKLEN_T)
+ set(CURL_TYPEOF_CURL_SOCKLEN_T "socklen_t")
+ check_type_size("socklen_t" CURL_SIZEOF_CURL_SOCKLEN_T)
+ if(NOT HAVE_CURL_SIZEOF_CURL_SOCKLEN_T)
+ message(FATAL_ERROR
+ "Check for sizeof socklen_t failed, see CMakeFiles/CMakerror.log")
+ endif()
+else()
+ set(CURL_TYPEOF_CURL_SOCKLEN_T int)
+ set(CURL_SIZEOF_CURL_SOCKLEN_T ${SIZEOF_INT})
+endif()
+
+include(CMake/OtherTests.cmake)
+
+add_definitions(-DHAVE_CONFIG_H)
+
+# For windows, do not allow the compiler to use default target (Vista).
+if(WIN32)
+ add_definitions(-D_WIN32_WINNT=0x0501)
+endif(WIN32)
+
+if(MSVC)
+ add_definitions(-D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE)
+endif(MSVC)
+
+# Sets up the dependencies (zlib, OpenSSL, etc.) of a cURL subproject according to options.
+# TODO This is far to be complete!
+function(SETUP_CURL_DEPENDENCIES TARGET_NAME)
+ if(CURL_ZLIB AND ZLIB_FOUND)
+ include_directories(${ZLIB_INCLUDE_DIR})
+ endif()
+ if(CURL_ZLIB AND ZLIB_FOUND)
+ target_link_libraries(${TARGET_NAME} ${ZLIB_LIBRARIES})
+ #ADD_DEFINITIONS( -DHAVE_ZLIB_H -DHAVE_ZLIB -DHAVE_LIBZ )
+ endif()
+
+ if(CMAKE_USE_OPENSSL AND OPENSSL_FOUND)
+ include_directories(${OPENSSL_INCLUDE_DIR})
+ endif()
+ if(CMAKE_USE_OPENSSL AND CURL_CONFIG_HAS_BEEN_RUN_BEFORE)
+ target_link_libraries(${TARGET_NAME} ${OPENSSL_LIBRARIES})
+ #ADD_DEFINITIONS( -DUSE_SSLEAY )
+ endif()
+endfunction()
+
+# Ugly (but functional) way to include "Makefile.inc" by transforming it (= regenerate it).
+function(TRANSFORM_MAKEFILE_INC INPUT_FILE OUTPUT_FILE)
+ file(READ ${INPUT_FILE} MAKEFILE_INC_TEXT)
+ string(REPLACE "$(top_srcdir)" "\${CURL_SOURCE_DIR}" MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT})
+ string(REPLACE "$(top_builddir)" "\${CURL_BINARY_DIR}" MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT})
+
+ string(REGEX REPLACE "\\\\\n" "§!§" MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT})
+ string(REGEX REPLACE "([a-zA-Z_][a-zA-Z0-9_]*)[\t ]*=[\t ]*([^\n]*)" "SET(\\1 \\2)" MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT})
+ string(REPLACE "§!§" "\n" MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT})
+
+ string(REGEX REPLACE "\\$\\(([a-zA-Z_][a-zA-Z0-9_]*)\\)" "\${\\1}" MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT}) # Replace $() with ${}
+ string(REGEX REPLACE "@([a-zA-Z_][a-zA-Z0-9_]*)@" "\${\\1}" MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT}) # Replace @@ with ${}, even if that may not be read by CMake scripts.
+ file(WRITE ${OUTPUT_FILE} ${MAKEFILE_INC_TEXT})
+
+endfunction()
+
+add_subdirectory(lib)
+if(BUILD_CURL_EXE)
+ add_subdirectory(src)
+endif()
+if(BUILD_CURL_TESTS)
+ add_subdirectory(tests)
+endif()
+
+# This needs to be run very last so other parts of the scripts can take advantage of this.
+if(NOT CURL_CONFIG_HAS_BEEN_RUN_BEFORE)
+ set(CURL_CONFIG_HAS_BEEN_RUN_BEFORE 1 CACHE INTERNAL "Flag to track whether this is the first time running CMake or if CMake has been configured before")
+endif()
diff --git a/MacBuild.sh b/MacBuild.sh
new file mode 100755
index 0000000..0687620
--- /dev/null
+++ b/MacBuild.sh
@@ -0,0 +1,32 @@
+#!/bin/sh
+
+# Check if we need to build
+if [ -f install/curl ]
+then
+ echo "Nothing to build in cURL. Delete install/curl to force a rebuild"
+ exit 0
+fi
+
+# Build both PPC and i386 targets
+rm -rf build install
+mkdir -p build/ppc build/i386 install
+cd build/ppc
+../../configure --disable-ldap --with-ssl=`pwd`/../../../openssl-0.9.8h --enable-static --disable-shared --target=powerpc-apple CFLAGS="-mmacosx-version-min=10.5 -arch ppc" CXXFLAGS="-mmacosx-version-min=10.5 -arch ppc" LDFLAGS="-mmacosx-version-min=10.5 -arch ppc" --prefix=`pwd`/../../install/ppc
+make
+make install
+cd ../i386
+../../configure --disable-ldap --with-ssl=`pwd`/../../../openssl-0.9.8h --enable-static --disable-shared --target=i386-apple CFLAGS="-mmacosx-version-min=10.5 -arch i386" CXXFLAGS="-mmacosx-version-min=10.5 -arch i386" LDFLAGS="-mmacosx-version-min=10.5 -arch i386" --prefix=`pwd`/../../install/i386
+make
+make install
+cd ../..
+
+# Now merge i386 and PPC
+lipo -create ./install/ppc/bin/curl ./install/i386/bin/curl -output ./install/curl
+lipo -create ./install/ppc/lib/libcurl.a ./install/i386/lib/libcurl.a -output ./install/libtpncurl.a
+
+# Headers are the same for i386 and ppc
+ln -s i386/include install/include
+
+# clean up
+git checkout -- include/curl/curlbuild.h
+
diff --git a/MacOSX-Framework b/MacOSX-Framework
new file mode 100755
index 0000000..0c97acd
--- /dev/null
+++ b/MacOSX-Framework
@@ -0,0 +1,132 @@
+#!/bin/bash
+# This script performs all of the steps needed to build a
+# universal binary libcurl.framework for Mac OS X 10.4 or greater.
+#
+# Hendrik Visage:
+# Generalizations added since Snowleopard (10.6) do not include
+# the 10.4u SDK.
+#
+# Also note:
+# 10.5 is the *ONLY* SDK that support PPC64 :( -- 10.6 do not have ppc64 support
+#If you need to have PPC64 support then change below to 1
+PPC64_NEEDED=0
+
+# For me the default is to develop for the platform I am on, and if you
+#desire compatibility with older versions then change USE_OLD to 1 :)
+USE_OLD=0
+
+VERSION=`/usr/bin/sed -ne 's/^#define LIBCURL_VERSION "\(.*\)"/\1/p' include/curl/curlver.h`
+FRAMEWORK_VERSION=Versions/Release-$VERSION
+
+#I also wanted to "copy over" the system, and thus the reason I added the
+# version to Versions/Release-7.20.1 etc.
+# now a simple rsync -vaP libcurl.framework /Library/Frameworks will install it
+# and setup the right paths to this version, leaving the system version
+# "intact", so you can "fix" it later with the links to Versions/A/...
+
+
+OLD_SDK=`ls /Developer/SDKs|head -1`
+NEW_SDK=`ls -r /Developer/SDKs|head -1`
+
+if test "0"$USE_OLD -gt 0
+then
+ SDK32=$OLD_SDK
+else
+ SDK32=$NEW_SDK
+fi
+
+MACVER=`echo $SDK32|sed -e s/[a-zA-Z]//g -e s/.\$//`
+
+SDK32_DIR='/Developer/SDKs/'$SDK32
+MINVER32='-mmacosx-version-min='$MACVER
+ARCHES32='-arch i386 -arch ppc'
+
+
+if test $PPC64_NEEDED -gt 0
+then
+ SDK64=10.5
+ ARCHES64='-arch x86_64 -arch ppc64'
+ SDK64=`ls /Developer/SDKs|grep 10.5|head -1`
+else
+ ARCHES64='-arch x86_64'
+ #We "know" that 10.4 and earlier do not support 64bit
+ OLD_SDK64=`ls /Developer/SDKs|egrep -v "10.[0-4]"|head -1`
+ NEW_SDK64=`ls -r /Developer/SDKs|egrep -v "10.[0-4]"|head -1`
+ if test $USE_OLD -gt 0
+ then
+ SDK64=$OLD_SDK64
+ else
+ SDK64=$NEW_SDK64
+ fi
+fi
+
+SDK64_DIR='/Developer/SDKs/'$SDK64
+MACVER64=`echo $SDK64|sed -e s/[a-zA-Z]//g -e s/.\$//`
+
+MINVER64='-mmacosx-version-min='$MACVER64
+
+if test ! -z $SDK32; then
+ echo "----Configuring libcurl for 32 bit universal framework..."
+ make clean
+ ./configure --disable-dependency-tracking --disable-static --with-gssapi \
+ CFLAGS="-Os -isysroot $SDK32_DIR $ARCHES32 $MINVER32" \
+ LDFLAGS="-Wl,-syslibroot,$SDK32_DIR $ARCHES32 $MINVER32 -Wl,-headerpad_max_install_names" \
+ CC=$CC
+
+ echo "----Building 32 bit libcurl..."
+ make
+
+ echo "----Creating 32 bit framework..."
+ rm -r libcurl.framework
+ mkdir -p libcurl.framework/${FRAMEWORK_VERSION}/Resources
+ cp lib/.libs/libcurl.dylib libcurl.framework/${FRAMEWORK_VERSION}/libcurl
+ install_name_tool -id @executable_path/../Frameworks/libcurl.framework/${FRAMEWORK_VERSION}/libcurl libcurl.framework/${FRAMEWORK_VERSION}/libcurl
+ /usr/bin/sed -e "s/7\.12\.3/$VERSION/" lib/libcurl.plist >libcurl.framework/${FRAMEWORK_VERSION}/Resources/Info.plist
+ mkdir -p libcurl.framework/${FRAMEWORK_VERSION}/Headers/curl
+ cp include/curl/*.h libcurl.framework/${FRAMEWORK_VERSION}/Headers/curl
+ pushd libcurl.framework
+ ln -fs ${FRAMEWORK_VERSION}/libcurl libcurl
+ ln -fs ${FRAMEWORK_VERSION}/Resources Resources
+ ln -fs ${FRAMEWORK_VERSION}/Headers Headers
+ cd Versions
+ ln -fs ${FRAMEWORK_VERSION} Current
+
+ echo TEsting for SDK64
+ if test -d $SDK64_DIR; then
+ echo entering...
+ popd
+ make clean
+ echo "----Configuring libcurl for 64 bit universal framework..."
+ ./configure --disable-dependency-tracking --disable-static --with-gssapi \
+ CFLAGS="-Os -isysroot $SDK64_DIR $ARCHES64 $MINVER64" \
+ LDFLAGS="-Wl,-syslibroot,$SDK64_DIR $ARCHES64 $MINVER64 -Wl,-headerpad_max_install_names" \
+ CC=$CC
+
+ echo "----Building 64 bit libcurl..."
+ make
+
+ echo "----Appending 64 bit framework to 32 bit framework..."
+ cp lib/.libs/libcurl.dylib libcurl.framework/${FRAMEWORK_VERSION}/libcurl64
+ install_name_tool -id @executable_path/../Frameworks/libcurl.framework/${FRAMEWORK_VERSION}/libcurl libcurl.framework/${FRAMEWORK_VERSION}/libcurl64
+ cp libcurl.framework/${FRAMEWORK_VERSION}/libcurl libcurl.framework/${FRAMEWORK_VERSION}/libcurl32
+ pwd
+ lipo libcurl.framework/${FRAMEWORK_VERSION}/libcurl32 libcurl.framework/${FRAMEWORK_VERSION}/libcurl64 -create -output libcurl.framework/${FRAMEWORK_VERSION}/libcurl
+ rm libcurl.framework/${FRAMEWORK_VERSION}/libcurl32 libcurl.framework/${FRAMEWORK_VERSION}/libcurl64
+ cp libcurl.framework/${FRAMEWORK_VERSION}/Headers/curl/curlbuild.h libcurl.framework/${FRAMEWORK_VERSION}/Headers/curl/curlbuild32.h
+ cp include/curl/curlbuild.h libcurl.framework/${FRAMEWORK_VERSION}/Headers/curl/curlbuild64.h
+ cat >libcurl.framework/${FRAMEWORK_VERSION}/Headers/curl/curlbuild.h <<EOF
+#ifdef __LP64__
+#include "curl/curlbuild64.h"
+#else
+#include "curl/curlbuild32.h"
+#endif
+EOF
+ fi
+
+ pwd
+ lipo -info libcurl.framework/${FRAMEWORK_VERSION}/libcurl
+ echo "libcurl.framework is built and can now be included in other projects."
+ echo "Copy libcurl.framework to your bundle's Contents/Frameworks folder, ~/Library/Frameworks or /Library/Frameworks."
+else
+ echo "Building libcurl.framework requires Mac OS X 10.4 or later with the MacOSX10.4/5/6 SDK installed."
+fi
diff --git a/Makefile.am b/Makefile.am
new file mode 100644
index 0000000..15836e9
--- /dev/null
+++ b/Makefile.am
@@ -0,0 +1,153 @@
+#***************************************************************************
+# _ _ ____ _
+# Project ___| | | | _ \| |
+# / __| | | | |_) | |
+# | (__| |_| | _ <| |___
+# \___|\___/|_| \_\_____|
+#
+# Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al.
+#
+# This software is licensed as described in the file COPYING, which
+# you should have received as part of this distribution. The terms
+# are also available at http://curl.haxx.se/docs/copyright.html.
+#
+# You may opt to use, copy, modify, merge, publish, distribute and/or sell
+# copies of the Software, and permit persons to whom the Software is
+# furnished to do so, under the terms of the COPYING file.
+#
+# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+# KIND, either express or implied.
+#
+###########################################################################
+
+AUTOMAKE_OPTIONS = foreign
+
+ACLOCAL_AMFLAGS = -I m4
+
+CMAKE_DIST = CMakeLists.txt CMake/CheckTypeSize.c.in CMake/CheckTypeSize.cmake \
+CMake/CMakeConfigurableFile.in CMake/CurlCheckCSourceCompiles.cmake \
+CMake/CurlCheckCSourceRuns.cmake CMake/CurlTests.c CMake/FindOpenSSL.cmake \
+CMake/FindZLIB.cmake CMake/OtherTests.cmake CMake/Platforms/WindowsCache.cmake \
+CMake/Utilities.cmake include/curl/curlbuild.h.cmake
+
+EXTRA_DIST = CHANGES COPYING maketgz Makefile.dist curl-config.in \
+ curl-style.el sample.emacs RELEASE-NOTES buildconf \
+ libcurl.pc.in vc6curl.dsw MacOSX-Framework Android.mk $(CMAKE_DIST)
+
+bin_SCRIPTS = curl-config
+
+SUBDIRS = lib src
+DIST_SUBDIRS = $(SUBDIRS) tests include packages docs
+
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = libcurl.pc
+
+dist-hook:
+ rm -rf $(top_builddir)/tests/log
+ find $(distdir) -name "*.dist" -exec rm {} \;
+ (distit=`find $(srcdir) -name "*.dist" | grep -v ./ares/`; \
+ for file in $$distit; do \
+ strip=`echo $$file | sed -e s/^$(srcdir)// -e s/\.dist//`; \
+ cp $$file $(distdir)$$strip; \
+ done)
+
+html:
+ cd docs; make html
+
+pdf:
+ cd docs; make pdf
+
+check: test examples
+
+if CROSSCOMPILING
+test-full: test
+test-torture: test
+
+test:
+ @echo "NOTICE: we can't run the tests when cross-compiling!"
+
+else
+
+test:
+ @(cd tests; $(MAKE) all quiet-test)
+
+test-full:
+ @(cd tests; $(MAKE) all full-test)
+
+test-torture:
+ @(cd tests; $(MAKE) all torture-test)
+
+endif
+
+examples:
+ @(cd docs/examples; $(MAKE) check)
+
+clean-local:
+ @(cd tests; $(MAKE) clean)
+ @(cd docs; $(MAKE) clean)
+
+#
+# Build source and binary rpms. For rpm-3.0 and above, the ~/.rpmmacros
+# must contain the following line:
+# %_topdir /home/loic/local/rpm
+# and that /home/loic/local/rpm contains the directory SOURCES, BUILD etc.
+#
+# cd /home/loic/local/rpm ; mkdir -p SOURCES BUILD RPMS/i386 SPECS SRPMS
+#
+# If additional configure flags are needed to build the package, add the
+# following in ~/.rpmmacros
+# %configure CFLAGS="%{optflags}" ./configure %{_target_platform} --prefix=%{_prefix} ${AM_CONFIGFLAGS}
+# and run make rpm in the following way:
+# AM_CONFIGFLAGS='--with-uri=/home/users/loic/local/RedHat-6.2' make rpm
+#
+
+rpms:
+ $(MAKE) RPMDIST=curl rpm
+ $(MAKE) RPMDIST=curl-ssl rpm
+
+rpm:
+ RPM_TOPDIR=`rpm --showrc | $(PERL) -n -e 'print if(s/.*_topdir\s+(.*)/$$1/)'` ; \
+ cp $(srcdir)/packages/Linux/RPM/$(RPMDIST).spec $$RPM_TOPDIR/SPECS ; \
+ cp $(PACKAGE)-$(VERSION).tar.gz $$RPM_TOPDIR/SOURCES ; \
+ rpm -ba --clean --rmsource $$RPM_TOPDIR/SPECS/$(RPMDIST).spec ; \
+ mv $$RPM_TOPDIR/RPMS/i386/$(RPMDIST)-*.rpm . ; \
+ mv $$RPM_TOPDIR/SRPMS/$(RPMDIST)-*.src.rpm .
+
+#
+# Build a Solaris pkgadd format file
+# run 'make pkgadd' once you've done './configure' and 'make' to make a Solaris pkgadd format
+# file (which ends up back in this directory).
+# The pkgadd file is in 'pkgtrans' format, so to install on Solaris, do
+# pkgadd -d ./HAXXcurl-*
+#
+
+# gak - libtool requires an absoulte directory, hence the pwd below...
+pkgadd:
+ umask 022 ; \
+ make install DESTDIR=`/bin/pwd`/packages/Solaris/root ; \
+ cat COPYING > $(srcdir)/packages/Solaris/copyright ; \
+ cd $(srcdir)/packages/Solaris && $(MAKE) package
+
+#
+# Build a cygwin binary tarball installation file
+# resulting .tar.bz2 file will end up at packages/Win32/cygwin
+cygwinbin:
+ $(MAKE) -C packages/Win32/cygwin cygwinbin
+
+# We extend the standard install with a custom hook:
+install-data-hook:
+ cd include && $(MAKE) install
+ cd docs && $(MAKE) install
+
+# We extend the standard uninstall with a custom hook:
+uninstall-hook:
+ cd include && $(MAKE) uninstall
+ cd docs && $(MAKE) uninstall
+
+ca-bundle: lib/mk-ca-bundle.pl
+ @echo "generate a fresh ca-bundle.crt"
+ @perl $< -b -l -u lib/ca-bundle.crt
+
+ca-firefox: lib/firefox-db2pem.sh
+ @echo "generate a fresh ca-bundle.crt"
+ ./lib/firefox-db2pem.sh lib/ca-bundle.crt
diff --git a/Makefile.in b/Makefile.in
new file mode 100644
index 0000000..661fe8d
--- /dev/null
+++ b/Makefile.in
@@ -0,0 +1,893 @@
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005 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.
+
+@SET_MAKE@
+
+#***************************************************************************
+# _ _ ____ _
+# Project ___| | | | _ \| |
+# / __| | | | |_) | |
+# | (__| |_| | _ <| |___
+# \___|\___/|_| \_\_____|
+#
+# Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al.
+#
+# This software is licensed as described in the file COPYING, which
+# you should have received as part of this distribution. The terms
+# are also available at http://curl.haxx.se/docs/copyright.html.
+#
+# You may opt to use, copy, modify, merge, publish, distribute and/or sell
+# copies of the Software, and permit persons to whom the Software is
+# furnished to do so, under the terms of the COPYING file.
+#
+# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+# KIND, either express or implied.
+#
+###########################################################################
+
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = .
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in $(srcdir)/curl-config.in \
+ $(srcdir)/libcurl.pc.in $(top_srcdir)/configure COPYING \
+ compile config.guess config.sub depcomp install-sh ltmain.sh \
+ missing mkinstalldirs
+subdir = .
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
+ $(top_srcdir)/m4/curl-confopts.m4 \
+ $(top_srcdir)/m4/curl-functions.m4 \
+ $(top_srcdir)/m4/curl-override.m4 \
+ $(top_srcdir)/m4/curl-reentrant.m4 \
+ $(top_srcdir)/m4/curl-system.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+ configure.lineno configure.status.lineno
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/lib/curl_config.h \
+ $(top_builddir)/src/curl_config.h \
+ $(top_builddir)/include/curl/curlbuild.h
+CONFIG_CLEAN_FILES = curl-config libcurl.pc
+am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(pkgconfigdir)"
+binSCRIPT_INSTALL = $(INSTALL_SCRIPT)
+SCRIPTS = $(bin_SCRIPTS)
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-recursive \
+ install-exec-recursive install-info-recursive \
+ install-recursive installcheck-recursive installdirs-recursive \
+ pdf-recursive ps-recursive uninstall-info-recursive \
+ uninstall-recursive
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+pkgconfigDATA_INSTALL = $(INSTALL_DATA)
+DATA = $(pkgconfig_DATA)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+am__remove_distdir = \
+ { test ! -d $(distdir) \
+ || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
+ && rm -fr $(distdir); }; }
+DIST_ARCHIVES = $(distdir).tar.gz
+GZIP_ENV = --best
+distuninstallcheck_listfiles = find . -type f -print
+distcleancheck_listfiles = find . -type f -print
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_LIBHOSTNAME_FALSE = @BUILD_LIBHOSTNAME_FALSE@
+BUILD_LIBHOSTNAME_TRUE = @BUILD_LIBHOSTNAME_TRUE@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_OPTIONS = @CONFIGURE_OPTIONS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CROSSCOMPILING_FALSE = @CROSSCOMPILING_FALSE@
+CROSSCOMPILING_TRUE = @CROSSCOMPILING_TRUE@
+CURLDEBUG_FALSE = @CURLDEBUG_FALSE@
+CURLDEBUG_TRUE = @CURLDEBUG_TRUE@
+CURL_CA_BUNDLE = @CURL_CA_BUNDLE@
+CURL_CFLAG_EXTRAS = @CURL_CFLAG_EXTRAS@
+CURL_DISABLE_DICT = @CURL_DISABLE_DICT@
+CURL_DISABLE_FILE = @CURL_DISABLE_FILE@
+CURL_DISABLE_FTP = @CURL_DISABLE_FTP@
+CURL_DISABLE_GOPHER = @CURL_DISABLE_GOPHER@
+CURL_DISABLE_HTTP = @CURL_DISABLE_HTTP@
+CURL_DISABLE_IMAP = @CURL_DISABLE_IMAP@
+CURL_DISABLE_LDAP = @CURL_DISABLE_LDAP@
+CURL_DISABLE_LDAPS = @CURL_DISABLE_LDAPS@
+CURL_DISABLE_POP3 = @CURL_DISABLE_POP3@
+CURL_DISABLE_PROXY = @CURL_DISABLE_PROXY@
+CURL_DISABLE_RTSP = @CURL_DISABLE_RTSP@
+CURL_DISABLE_SMTP = @CURL_DISABLE_SMTP@
+CURL_DISABLE_TELNET = @CURL_DISABLE_TELNET@
+CURL_DISABLE_TFTP = @CURL_DISABLE_TFTP@
+CURL_LIBS = @CURL_LIBS@
+CURL_NETWORK_LIBS = @CURL_NETWORK_LIBS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_SHARED = @ENABLE_SHARED@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_LDAP_SSL = @HAVE_LDAP_SSL@
+HAVE_LIBZ = @HAVE_LIBZ@
+HAVE_LIBZ_FALSE = @HAVE_LIBZ_FALSE@
+HAVE_LIBZ_TRUE = @HAVE_LIBZ_TRUE@
+HAVE_PK11_CREATEGENERICOBJECT = @HAVE_PK11_CREATEGENERICOBJECT@
+IDN_ENABLED = @IDN_ENABLED@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+IPV6_ENABLED = @IPV6_ENABLED@
+KRB4_ENABLED = @KRB4_ENABLED@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBCURL_LIBS = @LIBCURL_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+MANOPT = @MANOPT@
+MIMPURE_FALSE = @MIMPURE_FALSE@
+MIMPURE_TRUE = @MIMPURE_TRUE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NO_UNDEFINED_FALSE = @NO_UNDEFINED_FALSE@
+NO_UNDEFINED_TRUE = @NO_UNDEFINED_TRUE@
+NROFF = @NROFF@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH = @PATH@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+PKGADD_NAME = @PKGADD_NAME@
+PKGADD_PKG = @PKGADD_PKG@
+PKGADD_VENDOR = @PKGADD_VENDOR@
+PKGCONFIG = @PKGCONFIG@
+RANDOM_FILE = @RANDOM_FILE@
+RANLIB = @RANLIB@
+REQUIRE_LIB_DEPS = @REQUIRE_LIB_DEPS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SONAME_BUMP_FALSE = @SONAME_BUMP_FALSE@
+SONAME_BUMP_TRUE = @SONAME_BUMP_TRUE@
+SSL_ENABLED = @SSL_ENABLED@
+STATICLIB_FALSE = @STATICLIB_FALSE@
+STATICLIB_TRUE = @STATICLIB_TRUE@
+STRIP = @STRIP@
+SUPPORT_FEATURES = @SUPPORT_FEATURES@
+SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
+TEST_SERVER_LIBS = @TEST_SERVER_LIBS@
+USE_ARES = @USE_ARES@
+USE_EMBEDDED_ARES_FALSE = @USE_EMBEDDED_ARES_FALSE@
+USE_EMBEDDED_ARES_TRUE = @USE_EMBEDDED_ARES_TRUE@
+USE_GNUTLS = @USE_GNUTLS@
+USE_LIBRTMP = @USE_LIBRTMP@
+USE_LIBSSH2 = @USE_LIBSSH2@
+USE_MANUAL_FALSE = @USE_MANUAL_FALSE@
+USE_MANUAL_TRUE = @USE_MANUAL_TRUE@
+USE_NSS = @USE_NSS@
+USE_OPENLDAP = @USE_OPENLDAP@
+USE_POLARSSL = @USE_POLARSSL@
+USE_SSLEAY = @USE_SSLEAY@
+USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
+VERSION = @VERSION@
+VERSIONNUM = @VERSIONNUM@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+libext = @libext@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+AUTOMAKE_OPTIONS = foreign
+ACLOCAL_AMFLAGS = -I m4
+CMAKE_DIST = CMakeLists.txt CMake/CheckTypeSize.c.in CMake/CheckTypeSize.cmake \
+CMake/CMakeConfigurableFile.in CMake/CurlCheckCSourceCompiles.cmake \
+CMake/CurlCheckCSourceRuns.cmake CMake/CurlTests.c CMake/FindOpenSSL.cmake \
+CMake/FindZLIB.cmake CMake/OtherTests.cmake CMake/Platforms/WindowsCache.cmake \
+CMake/Utilities.cmake include/curl/curlbuild.h.cmake
+
+EXTRA_DIST = CHANGES COPYING maketgz Makefile.dist curl-config.in \
+ curl-style.el sample.emacs RELEASE-NOTES buildconf \
+ libcurl.pc.in vc6curl.dsw MacOSX-Framework Android.mk $(CMAKE_DIST)
+
+bin_SCRIPTS = curl-config
+SUBDIRS = lib src
+DIST_SUBDIRS = $(SUBDIRS) tests include packages docs
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = libcurl.pc
+all: all-recursive
+
+.SUFFIXES:
+am--refresh:
+ @:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign '; \
+ cd $(srcdir) && $(AUTOMAKE) --foreign \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --foreign Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ echo ' $(SHELL) ./config.status'; \
+ $(SHELL) ./config.status;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ $(SHELL) ./config.status --recheck
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(srcdir) && $(AUTOCONF)
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+curl-config: $(top_builddir)/config.status $(srcdir)/curl-config.in
+ cd $(top_builddir) && $(SHELL) ./config.status $@
+libcurl.pc: $(top_builddir)/config.status $(srcdir)/libcurl.pc.in
+ cd $(top_builddir) && $(SHELL) ./config.status $@
+install-binSCRIPTS: $(bin_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)"
+ @list='$(bin_SCRIPTS)'; for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ if test -f $$d$$p; then \
+ f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
+ echo " $(binSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(bindir)/$$f'"; \
+ $(binSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(bindir)/$$f"; \
+ else :; fi; \
+ done
+
+uninstall-binSCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(bin_SCRIPTS)'; for p in $$list; do \
+ f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
+ echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
+ rm -f "$(DESTDIR)$(bindir)/$$f"; \
+ done
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+ -rm -f libtool
+uninstall-info-am:
+install-pkgconfigDATA: $(pkgconfig_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(pkgconfigdir)" || $(mkdir_p) "$(DESTDIR)$(pkgconfigdir)"
+ @list='$(pkgconfig_DATA)'; for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ f=$(am__strip_dir) \
+ echo " $(pkgconfigDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgconfigdir)/$$f'"; \
+ $(pkgconfigDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgconfigdir)/$$f"; \
+ done
+
+uninstall-pkgconfigDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(pkgconfig_DATA)'; for p in $$list; do \
+ f=$(am__strip_dir) \
+ echo " rm -f '$(DESTDIR)$(pkgconfigdir)/$$f'"; \
+ rm -f "$(DESTDIR)$(pkgconfigdir)/$$f"; \
+ done
+
+# 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.
+$(RECURSIVE_TARGETS):
+ @failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ 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) \
+ || eval $$failcom; \
+ 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:
+ @failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ rev=''; for subdir in $$list; do \
+ if test "$$subdir" = "."; then :; else \
+ rev="$$subdir $$rev"; \
+ fi; \
+ done; \
+ 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) \
+ || eval $$failcom; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique; \
+ fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ $(am__remove_distdir)
+ mkdir $(distdir)
+ $(mkdir_p) $(distdir)/. $(distdir)/CMake $(distdir)/CMake/Platforms $(distdir)/include/curl $(distdir)/m4 $(distdir)/packages/AIX/RPM $(distdir)/packages/EPM $(distdir)/packages/Linux/RPM
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ list='$(DISTFILES)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkdir_p) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+ list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -d "$(distdir)/$$subdir" \
+ || $(mkdir_p) "$(distdir)/$$subdir" \
+ || exit 1; \
+ distdir=`$(am__cd) $(distdir) && pwd`; \
+ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
+ (cd $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$top_distdir" \
+ distdir="$$distdir/$$subdir" \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$(top_distdir)" distdir="$(distdir)" \
+ dist-hook
+ -find "$(distdir)" -type d ! -perm -755 \
+ -exec chmod u+rwx,go+rx {} \; -o \
+ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
+ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
+ ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \
+ || chmod -R a+r $(distdir)
+dist-gzip: distdir
+ tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+ $(am__remove_distdir)
+
+dist-bzip2: distdir
+ tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
+ $(am__remove_distdir)
+
+dist-tarZ: distdir
+ tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
+ $(am__remove_distdir)
+
+dist-shar: distdir
+ shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
+ $(am__remove_distdir)
+
+dist-zip: distdir
+ -rm -f $(distdir).zip
+ zip -rq $(distdir).zip $(distdir)
+ $(am__remove_distdir)
+
+dist dist-all: distdir
+ tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+ $(am__remove_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
+ case '$(DIST_ARCHIVES)' in \
+ *.tar.gz*) \
+ GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
+ *.tar.bz2*) \
+ bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
+ *.tar.Z*) \
+ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
+ *.shar.gz*) \
+ GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
+ *.zip*) \
+ unzip $(distdir).zip ;;\
+ esac
+ chmod -R a-w $(distdir); chmod a+w $(distdir)
+ mkdir $(distdir)/_build
+ mkdir $(distdir)/_inst
+ chmod a-w $(distdir)
+ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
+ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
+ && cd $(distdir)/_build \
+ && ../configure --srcdir=.. --prefix="$$dc_install_base" \
+ $(DISTCHECK_CONFIGURE_FLAGS) \
+ && $(MAKE) $(AM_MAKEFLAGS) \
+ && $(MAKE) $(AM_MAKEFLAGS) dvi \
+ && $(MAKE) $(AM_MAKEFLAGS) check \
+ && $(MAKE) $(AM_MAKEFLAGS) install \
+ && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+ && $(MAKE) $(AM_MAKEFLAGS) uninstall \
+ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
+ distuninstallcheck \
+ && chmod -R a-w "$$dc_install_base" \
+ && ({ \
+ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
+ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
+ } || { rm -rf "$$dc_destdir"; exit 1; }) \
+ && rm -rf "$$dc_destdir" \
+ && $(MAKE) $(AM_MAKEFLAGS) dist \
+ && rm -rf $(DIST_ARCHIVES) \
+ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck
+ $(am__remove_distdir)
+ @(echo "$(distdir) archives ready for distribution: "; \
+ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
+ sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}'
+distuninstallcheck:
+ @cd $(distuninstallcheck_dir) \
+ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
+ || { echo "ERROR: files left after uninstall:" ; \
+ if test -n "$(DESTDIR)"; then \
+ echo " (check DESTDIR support)"; \
+ fi ; \
+ $(distuninstallcheck_listfiles) ; \
+ exit 1; } >&2
+distcleancheck: distclean
+ @if test '$(srcdir)' = . ; then \
+ echo "ERROR: distcleancheck can only run from a VPATH build" ; \
+ exit 1 ; \
+ fi
+ @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
+ || { echo "ERROR: files left in build directory after distclean:" ; \
+ $(distcleancheck_listfiles) ; \
+ exit 1; } >&2
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(SCRIPTS) $(DATA)
+installdirs: installdirs-recursive
+installdirs-am:
+ for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(pkgconfigdir)"; do \
+ test -z "$$dir" || $(mkdir_p) "$$dir"; \
+ done
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool clean-local mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-libtool \
+ distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am: install-pkgconfigDATA
+ @$(NORMAL_INSTALL)
+ $(MAKE) $(AM_MAKEFLAGS) install-data-hook
+
+install-exec-am: install-binSCRIPTS
+
+install-info: install-info-recursive
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ -rm -rf $(top_srcdir)/autom4te.cache
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-binSCRIPTS uninstall-info-am \
+ uninstall-pkgconfigDATA
+ @$(NORMAL_INSTALL)
+ $(MAKE) $(AM_MAKEFLAGS) uninstall-hook
+
+uninstall-info: uninstall-info-recursive
+
+.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \
+ check-am clean clean-generic clean-libtool clean-local \
+ clean-recursive ctags ctags-recursive dist dist-all dist-bzip2 \
+ dist-gzip dist-hook dist-shar dist-tarZ dist-zip distcheck \
+ distclean distclean-generic distclean-libtool \
+ distclean-recursive distclean-tags distcleancheck distdir \
+ distuninstallcheck dvi dvi-am html html-am info info-am \
+ install install-am install-binSCRIPTS install-data \
+ install-data-am install-data-hook install-exec install-exec-am \
+ install-info install-info-am install-man install-pkgconfigDATA \
+ install-strip installcheck installcheck-am installdirs \
+ installdirs-am maintainer-clean maintainer-clean-generic \
+ maintainer-clean-recursive mostlyclean mostlyclean-generic \
+ mostlyclean-libtool mostlyclean-recursive pdf pdf-am ps ps-am \
+ tags tags-recursive uninstall uninstall-am \
+ uninstall-binSCRIPTS uninstall-hook uninstall-info-am \
+ uninstall-pkgconfigDATA
+
+
+dist-hook:
+ rm -rf $(top_builddir)/tests/log
+ find $(distdir) -name "*.dist" -exec rm {} \;
+ (distit=`find $(srcdir) -name "*.dist" | grep -v ./ares/`; \
+ for file in $$distit; do \
+ strip=`echo $$file | sed -e s/^$(srcdir)// -e s/\.dist//`; \
+ cp $$file $(distdir)$$strip; \
+ done)
+
+html:
+ cd docs; make html
+
+pdf:
+ cd docs; make pdf
+
+check: test examples
+
+@CROSSCOMPILING_TRUE@test-full: test
+@CROSSCOMPILING_TRUE@test-torture: test
+
+@CROSSCOMPILING_TRUE@test:
+@CROSSCOMPILING_TRUE@ @echo "NOTICE: we can't run the tests when cross-compiling!"
+
+@CROSSCOMPILING_FALSE@test:
+@CROSSCOMPILING_FALSE@ @(cd tests; $(MAKE) all quiet-test)
+
+@CROSSCOMPILING_FALSE@test-full:
+@CROSSCOMPILING_FALSE@ @(cd tests; $(MAKE) all full-test)
+
+@CROSSCOMPILING_FALSE@test-torture:
+@CROSSCOMPILING_FALSE@ @(cd tests; $(MAKE) all torture-test)
+
+examples:
+ @(cd docs/examples; $(MAKE) check)
+
+clean-local:
+ @(cd tests; $(MAKE) clean)
+ @(cd docs; $(MAKE) clean)
+
+#
+# Build source and binary rpms. For rpm-3.0 and above, the ~/.rpmmacros
+# must contain the following line:
+# %_topdir /home/loic/local/rpm
+# and that /home/loic/local/rpm contains the directory SOURCES, BUILD etc.
+#
+# cd /home/loic/local/rpm ; mkdir -p SOURCES BUILD RPMS/i386 SPECS SRPMS
+#
+# If additional configure flags are needed to build the package, add the
+# following in ~/.rpmmacros
+# %configure CFLAGS="%{optflags}" ./configure %{_target_platform} --prefix=%{_prefix} ${AM_CONFIGFLAGS}
+# and run make rpm in the following way:
+# AM_CONFIGFLAGS='--with-uri=/home/users/loic/local/RedHat-6.2' make rpm
+#
+
+rpms:
+ $(MAKE) RPMDIST=curl rpm
+ $(MAKE) RPMDIST=curl-ssl rpm
+
+rpm:
+ RPM_TOPDIR=`rpm --showrc | $(PERL) -n -e 'print if(s/.*_topdir\s+(.*)/$$1/)'` ; \
+ cp $(srcdir)/packages/Linux/RPM/$(RPMDIST).spec $$RPM_TOPDIR/SPECS ; \
+ cp $(PACKAGE)-$(VERSION).tar.gz $$RPM_TOPDIR/SOURCES ; \
+ rpm -ba --clean --rmsource $$RPM_TOPDIR/SPECS/$(RPMDIST).spec ; \
+ mv $$RPM_TOPDIR/RPMS/i386/$(RPMDIST)-*.rpm . ; \
+ mv $$RPM_TOPDIR/SRPMS/$(RPMDIST)-*.src.rpm .
+
+#
+# Build a Solaris pkgadd format file
+# run 'make pkgadd' once you've done './configure' and 'make' to make a Solaris pkgadd format
+# file (which ends up back in this directory).
+# The pkgadd file is in 'pkgtrans' format, so to install on Solaris, do
+# pkgadd -d ./HAXXcurl-*
+#
+
+# gak - libtool requires an absoulte directory, hence the pwd below...
+pkgadd:
+ umask 022 ; \
+ make install DESTDIR=`/bin/pwd`/packages/Solaris/root ; \
+ cat COPYING > $(srcdir)/packages/Solaris/copyright ; \
+ cd $(srcdir)/packages/Solaris && $(MAKE) package
+
+#
+# Build a cygwin binary tarball installation file
+# resulting .tar.bz2 file will end up at packages/Win32/cygwin
+cygwinbin:
+ $(MAKE) -C packages/Win32/cygwin cygwinbin
+
+# We extend the standard install with a custom hook:
+install-data-hook:
+ cd include && $(MAKE) install
+ cd docs && $(MAKE) install
+
+# We extend the standard uninstall with a custom hook:
+uninstall-hook:
+ cd include && $(MAKE) uninstall
+ cd docs && $(MAKE) uninstall
+
+ca-bundle: lib/mk-ca-bundle.pl
+ @echo "generate a fresh ca-bundle.crt"
+ @perl $< -b -l -u lib/ca-bundle.crt
+
+ca-firefox: lib/firefox-db2pem.sh
+ @echo "generate a fresh ca-bundle.crt"
+ ./lib/firefox-db2pem.sh lib/ca-bundle.crt
+# 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/NOTICE b/NOTICE
deleted file mode 100644
index 163b299..0000000
--- a/NOTICE
+++ /dev/null
@@ -1,21 +0,0 @@
-COPYRIGHT AND PERMISSION NOTICE
-
-Copyright (c) 1996 - 2010, Daniel Stenberg, <daniel@haxx.se>.
-
-All rights reserved.
-
-Permission to use, copy, modify, and distribute this software for any purpose
-with or without fee is hereby granted, provided that the above copyright
-notice and this permission notice appear in all copies.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN
-NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
-OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of a copyright holder shall not
-be used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization of the copyright holder.
diff --git a/README.Android b/README.Android
deleted file mode 100644
index 00fbe45..0000000
--- a/README.Android
+++ /dev/null
@@ -1,14 +0,0 @@
-I have removed many files that are not needed to use curl, including docs and tests. If you want these, they can be downloaded from:
-http://curl.haxx.se/
-
-Uncomment the include $(BUILD_* lines from Android.mk depending on what you want to build.
-
-Run the following from the top dir:
-make libcurl curl
-adb remount
-adb push out/target/product/passion/system/bin/curl /system/bin/
-adb push /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ (if you are on goobuntu)
-
-any questions, mail me: kristianm@google.com
-
-This is not intended to go into an release.
diff --git a/RELEASE-NOTES b/RELEASE-NOTES
new file mode 100644
index 0000000..0d1896d
--- /dev/null
+++ b/RELEASE-NOTES
@@ -0,0 +1,73 @@
+Curl and libcurl 7.21.2
+
+ Public curl releases: 118
+ Command line options: 138
+ curl_easy_setopt() options: 180
+ Public functions in libcurl: 58
+ Known libcurl bindings: 39
+ Contributors: 817
+
+This release includes the following changes:
+
+ o curl -T: ignore file size of special files
+ o Added GOPHER protocol support
+ o Added mk-ca-bundle.vbs script
+ o c-ares build now requires c-ares >= 1.6.0
+
+This release includes the following bugfixes:
+
+ o --remote-header-name security vulnerability fixed:
+ http://curl.haxx.se/docs/adv_20101013.html
+
+ o multi: support the timeouts correctly, fixes known bug #62
+ o multi: use timeouts properly for MAX_RECV/SEND_SPEED
+ o negotiation: Wrong proxy authorization
+ o multi: avoid sending multiple complete messages
+ o cmdline: make -F type= accept ;charset=
+ o RESUME_FROM: clarify what ftp uploads do
+ o http: handle trailer headers in all chunked responses
+ o Curl_is_connected: use correct errno
+ o Added SSPI build to Watcom makefile
+ o progress: callback for POSTs less than MAX_INITIAL_POST_SIZE
+ o linking problem on Fedora 13
+ o Link curl and the test apps with -lrt explicitly when necessary
+ o chunky parser: only rewind stream internally if needed
+ o remote-header-name: don't output filename when NULL
+ o Curl_timeleft: avoid returning "no timeout" by mistake
+ o timeout: use the correct start value as offset
+ o FTP: fix wrong timeout trigger
+ o buildconf got better output on failures
+ o rtsp: avoid SIGSEGV on malformed header
+ o LDAP: Support for tunnelling queries through HTTP proxy
+ o configure's --enable-werror had a bashism
+ o test565: Don't hardcode IP:PORT
+ o configure: check for gcrypt if using GnuTLS
+ o configure: don't enable RTMP if the lib detect fails
+ o curl_easy_duphandle: clone the c-ares handle correctly
+ o MacOSX-Framework: updates for Snowleopard
+ o support URL containing colon without trailing port number
+ o parsedate: allow time specified without seconds
+ o curl_easy_escape: don't escape "unreserved" characters
+ o SFTP: avoid downloading negative sizes
+ o Lots of GSS/KRB FTP fixes
+ o TFTP: Work around tftpd-hpa upload bug
+ o libcurl.m4: several fixes
+ o HTTP: remove special case for 416
+ o examples: use example.com in example URLs
+ o globbing: fix crash on unballanced open brace
+ o cmake: build fixed
+
+This release includes the following known bugs:
+
+ o see docs/KNOWN_BUGS (http://curl.haxx.se/docs/knownbugs.html)
+
+This release would not have looked like this without help, code, reports and
+advice from friends like these:
+
+ Kamil Dudka, Ben Greear, Cameron Kaiser, Dan Fandrich, Dirk Manske,
+ Guenter Knauf, Julien Chaffraix, Quanah Gibson-Mount, Tor Arntsen,
+ Peter Pentchev, James Bursa, Fabian Keil, Michal Gorny, Mauro Iorio,
+ Hendrik Visage, Ning Dong, David McCreedy, Patrick Monnerat,
+ Tim Newsome, Dan Locks, Vlad Ureche, Dimitre Dimitrov
+
+ Thanks! (and sorry if I forgot to mention someone)
diff --git a/ThirdPartyProject.prop b/ThirdPartyProject.prop
deleted file mode 100644
index c191e33..0000000
--- a/ThirdPartyProject.prop
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (C) 2010 The Android Open Source Project
-# ThirdPartyProject.prop - data for tracking and maintaining third party projects
-
-# Library properties
-name=curl
-version=7.20.1
-homepage=http://curl.haxx.se/
-onDevice=false
-isNative=true
diff --git a/acinclude.m4 b/acinclude.m4
new file mode 100644
index 0000000..225fb9d
--- /dev/null
+++ b/acinclude.m4
@@ -0,0 +1,3248 @@
+#***************************************************************************
+# _ _ ____ _
+# Project ___| | | | _ \| |
+# / __| | | | |_) | |
+# | (__| |_| | _ <| |___
+# \___|\___/|_| \_\_____|
+#
+# Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+#
+# This software is licensed as described in the file COPYING, which
+# you should have received as part of this distribution. The terms
+# are also available at http://curl.haxx.se/docs/copyright.html.
+#
+# You may opt to use, copy, modify, merge, publish, distribute and/or sell
+# copies of the Software, and permit persons to whom the Software is
+# furnished to do so, under the terms of the COPYING file.
+#
+# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+# KIND, either express or implied.
+#
+#***************************************************************************
+
+
+dnl CURL_CHECK_DEF (SYMBOL, [INCLUDES], [SILENT])
+dnl -------------------------------------------------
+dnl Use the C preprocessor to find out if the given object-style symbol
+dnl is defined and get its expansion. This macro will not use default
+dnl includes even if no INCLUDES argument is given. This macro will run
+dnl silently when invoked with three arguments. If the expansion would
+dnl result in a set of double-quoted strings the returned expansion will
+dnl actually be a single double-quoted string concatenating all them.
+
+AC_DEFUN([CURL_CHECK_DEF], [
+ AS_VAR_PUSHDEF([ac_HaveDef], [curl_cv_have_def_$1])dnl
+ AS_VAR_PUSHDEF([ac_Def], [curl_cv_def_$1])dnl
+ if test -z "$SED"; then
+ AC_MSG_ERROR([SED not set. Cannot continue without SED being set.])
+ fi
+ if test -z "$GREP"; then
+ AC_MSG_ERROR([GREP not set. Cannot continue without GREP being set.])
+ fi
+ ifelse($3,,[AC_MSG_CHECKING([for preprocessor definition of $1])])
+ tmp_exp=""
+ AC_PREPROC_IFELSE([
+ AC_LANG_SOURCE(
+ifelse($2,,,[$2])[[
+#ifdef $1
+CURL_DEF_TOKEN $1
+#endif
+ ]])
+ ],[
+ tmp_exp=`eval "$ac_cpp conftest.$ac_ext" 2>/dev/null | \
+ "$GREP" CURL_DEF_TOKEN 2>/dev/null | \
+ "$SED" 's/.*CURL_DEF_TOKEN[[ ]]//' 2>/dev/null | \
+ "$SED" 's/[["]][[ ]]*[["]]//g' 2>/dev/null`
+ if test -z "$tmp_exp" || test "$tmp_exp" = "$1"; then
+ tmp_exp=""
+ fi
+ ])
+ if test -z "$tmp_exp"; then
+ AS_VAR_SET(ac_HaveDef, no)
+ ifelse($3,,[AC_MSG_RESULT([no])])
+ else
+ AS_VAR_SET(ac_HaveDef, yes)
+ AS_VAR_SET(ac_Def, $tmp_exp)
+ ifelse($3,,[AC_MSG_RESULT([$tmp_exp])])
+ fi
+ AS_VAR_POPDEF([ac_Def])dnl
+ AS_VAR_POPDEF([ac_HaveDef])dnl
+])
+
+
+dnl CURL_CHECK_DEF_CC (SYMBOL, [INCLUDES], [SILENT])
+dnl -------------------------------------------------
+dnl Use the C compiler to find out only if the given symbol is defined
+dnl or not, this can not find out its expansion. This macro will not use
+dnl default includes even if no INCLUDES argument is given. This macro
+dnl will run silently when invoked with three arguments.
+
+AC_DEFUN([CURL_CHECK_DEF_CC], [
+ AS_VAR_PUSHDEF([ac_HaveDef], [curl_cv_have_def_$1])dnl
+ ifelse($3,,[AC_MSG_CHECKING([for compiler definition of $1])])
+ AC_COMPILE_IFELSE([
+ AC_LANG_SOURCE(
+ifelse($2,,,[$2])[[
+int main (void)
+{
+#ifdef $1
+ return 0;
+#else
+ force compilation error
+#endif
+}
+ ]])
+ ],[
+ tst_symbol_defined="yes"
+ ],[
+ tst_symbol_defined="no"
+ ])
+ if test "$tst_symbol_defined" = "yes"; then
+ AS_VAR_SET(ac_HaveDef, yes)
+ ifelse($3,,[AC_MSG_RESULT([yes])])
+ else
+ AS_VAR_SET(ac_HaveDef, no)
+ ifelse($3,,[AC_MSG_RESULT([no])])
+ fi
+ AS_VAR_POPDEF([ac_HaveDef])dnl
+])
+
+
+dnl CURL_CHECK_LIB_XNET
+dnl -------------------------------------------------
+dnl Verify if X/Open network library is required.
+
+AC_DEFUN([CURL_CHECK_LIB_XNET], [
+ AC_MSG_CHECKING([if X/Open network library is required])
+ tst_lib_xnet_required="no"
+ AC_COMPILE_IFELSE([
+ AC_LANG_SOURCE([[
+int main (void)
+{
+#if defined(__hpux) && defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE >= 600)
+ return 0;
+#elif defined(__hpux) && defined(_XOPEN_SOURCE_EXTENDED)
+ return 0;
+#else
+ force compilation error
+#endif
+}
+ ]])
+ ],[
+ tst_lib_xnet_required="yes"
+ LIBS="$LIBS -lxnet"
+ ])
+ AC_MSG_RESULT([$tst_lib_xnet_required])
+])
+
+
+dnl CURL_CHECK_AIX_ALL_SOURCE
+dnl -------------------------------------------------
+dnl Provides a replacement of traditional AC_AIX with
+dnl an uniform behaviour across all autoconf versions,
+dnl and with our own placement rules.
+
+AC_DEFUN([CURL_CHECK_AIX_ALL_SOURCE], [
+ AH_VERBATIM([_ALL_SOURCE],
+ [/* Define to 1 if OS is AIX. */
+#ifndef _ALL_SOURCE
+# undef _ALL_SOURCE
+#endif])
+ AC_BEFORE([$0], [AC_SYS_LARGEFILE])dnl
+ AC_BEFORE([$0], [CURL_CONFIGURE_REENTRANT])dnl
+ AC_MSG_CHECKING([if OS is AIX (to define _ALL_SOURCE)])
+ AC_EGREP_CPP([yes_this_is_aix],[
+#ifdef _AIX
+ yes_this_is_aix
+#endif
+ ],[
+ AC_MSG_RESULT([yes])
+ AC_DEFINE(_ALL_SOURCE)
+ ],[
+ AC_MSG_RESULT([no])
+ ])
+])
+
+
+dnl CURL_CHECK_HEADER_WINDOWS
+dnl -------------------------------------------------
+dnl Check for compilable and valid windows.h header
+
+AC_DEFUN([CURL_CHECK_HEADER_WINDOWS], [
+ AC_CACHE_CHECK([for windows.h], [ac_cv_header_windows_h], [
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+#undef inline
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+ ]],[[
+#if defined(__CYGWIN__) || defined(__CEGCC__)
+ HAVE_WINDOWS_H shall not be defined.
+#else
+ int dummy=2*WINVER;
+#endif
+ ]])
+ ],[
+ ac_cv_header_windows_h="yes"
+ ],[
+ ac_cv_header_windows_h="no"
+ ])
+ ])
+ case "$ac_cv_header_windows_h" in
+ yes)
+ AC_DEFINE_UNQUOTED(HAVE_WINDOWS_H, 1,
+ [Define to 1 if you have the windows.h header file.])
+ AC_DEFINE_UNQUOTED(WIN32_LEAN_AND_MEAN, 1,
+ [Define to avoid automatic inclusion of winsock.h])
+ ;;
+ esac
+])
+
+
+dnl CURL_CHECK_NATIVE_WINDOWS
+dnl -------------------------------------------------
+dnl Check if building a native Windows target
+
+AC_DEFUN([CURL_CHECK_NATIVE_WINDOWS], [
+ AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
+ AC_CACHE_CHECK([whether build target is a native Windows one], [ac_cv_native_windows], [
+ if test "$ac_cv_header_windows_h" = "no"; then
+ ac_cv_native_windows="no"
+ else
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ ]],[[
+#if defined(__MINGW32__) || defined(__MINGW32CE__) || \
+ (defined(_MSC_VER) && (defined(_WIN32) || defined(_WIN64)))
+ int dummy=1;
+#else
+ Not a native Windows build target.
+#endif
+ ]])
+ ],[
+ ac_cv_native_windows="yes"
+ ],[
+ ac_cv_native_windows="no"
+ ])
+ fi
+ ])
+ case "$ac_cv_native_windows" in
+ yes)
+ AC_DEFINE_UNQUOTED(NATIVE_WINDOWS, 1,
+ [Define to 1 if you are building a native Windows target.])
+ ;;
+ esac
+])
+
+
+dnl CURL_CHECK_HEADER_WINSOCK
+dnl -------------------------------------------------
+dnl Check for compilable and valid winsock.h header
+
+AC_DEFUN([CURL_CHECK_HEADER_WINSOCK], [
+ AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
+ AC_CACHE_CHECK([for winsock.h], [ac_cv_header_winsock_h], [
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+#undef inline
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#include <winsock.h>
+ ]],[[
+#if defined(__CYGWIN__) || defined(__CEGCC__)
+ HAVE_WINSOCK_H shall not be defined.
+#else
+ int dummy=WSACleanup();
+#endif
+ ]])
+ ],[
+ ac_cv_header_winsock_h="yes"
+ ],[
+ ac_cv_header_winsock_h="no"
+ ])
+ ])
+ case "$ac_cv_header_winsock_h" in
+ yes)
+ AC_DEFINE_UNQUOTED(HAVE_WINSOCK_H, 1,
+ [Define to 1 if you have the winsock.h header file.])
+ ;;
+ esac
+])
+
+
+dnl CURL_CHECK_HEADER_WINSOCK2
+dnl -------------------------------------------------
+dnl Check for compilable and valid winsock2.h header
+
+AC_DEFUN([CURL_CHECK_HEADER_WINSOCK2], [
+ AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
+ AC_CACHE_CHECK([for winsock2.h], [ac_cv_header_winsock2_h], [
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+#undef inline
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#include <winsock2.h>
+ ]],[[
+#if defined(__CYGWIN__) || defined(__CEGCC__) || defined(__MINGW32CE__)
+ HAVE_WINSOCK2_H shall not be defined.
+#else
+ int dummy=2*IPPROTO_ESP;
+#endif
+ ]])
+ ],[
+ ac_cv_header_winsock2_h="yes"
+ ],[
+ ac_cv_header_winsock2_h="no"
+ ])
+ ])
+ case "$ac_cv_header_winsock2_h" in
+ yes)
+ AC_DEFINE_UNQUOTED(HAVE_WINSOCK2_H, 1,
+ [Define to 1 if you have the winsock2.h header file.])
+ ;;
+ esac
+])
+
+
+dnl CURL_CHECK_HEADER_WS2TCPIP
+dnl -------------------------------------------------
+dnl Check for compilable and valid ws2tcpip.h header
+
+AC_DEFUN([CURL_CHECK_HEADER_WS2TCPIP], [
+ AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl
+ AC_CACHE_CHECK([for ws2tcpip.h], [ac_cv_header_ws2tcpip_h], [
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+#undef inline
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#include <winsock2.h>
+#include <ws2tcpip.h>
+ ]],[[
+#if defined(__CYGWIN__) || defined(__CEGCC__) || defined(__MINGW32CE__)
+ HAVE_WS2TCPIP_H shall not be defined.
+#else
+ int dummy=2*IP_PKTINFO;
+#endif
+ ]])
+ ],[
+ ac_cv_header_ws2tcpip_h="yes"
+ ],[
+ ac_cv_header_ws2tcpip_h="no"
+ ])
+ ])
+ case "$ac_cv_header_ws2tcpip_h" in
+ yes)
+ AC_DEFINE_UNQUOTED(HAVE_WS2TCPIP_H, 1,
+ [Define to 1 if you have the ws2tcpip.h header file.])
+ ;;
+ esac
+])
+
+
+dnl CURL_CHECK_HEADER_WINLDAP
+dnl -------------------------------------------------
+dnl Check for compilable and valid winldap.h header
+
+AC_DEFUN([CURL_CHECK_HEADER_WINLDAP], [
+ AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
+ AC_CACHE_CHECK([for winldap.h], [ac_cv_header_winldap_h], [
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+#undef inline
+#ifdef HAVE_WINDOWS_H
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#endif
+#include <winldap.h>
+ ]],[[
+#if defined(__CYGWIN__) || defined(__CEGCC__)
+ HAVE_WINLDAP_H shall not be defined.
+#else
+ LDAP *ldp = ldap_init("dummy", LDAP_PORT);
+ ULONG res = ldap_unbind(ldp);
+#endif
+ ]])
+ ],[
+ ac_cv_header_winldap_h="yes"
+ ],[
+ ac_cv_header_winldap_h="no"
+ ])
+ ])
+ case "$ac_cv_header_winldap_h" in
+ yes)
+ AC_DEFINE_UNQUOTED(HAVE_WINLDAP_H, 1,
+ [Define to 1 if you have the winldap.h header file.])
+ ;;
+ esac
+])
+
+
+dnl CURL_CHECK_HEADER_WINBER
+dnl -------------------------------------------------
+dnl Check for compilable and valid winber.h header
+
+AC_DEFUN([CURL_CHECK_HEADER_WINBER], [
+ AC_REQUIRE([CURL_CHECK_HEADER_WINLDAP])dnl
+ AC_CACHE_CHECK([for winber.h], [ac_cv_header_winber_h], [
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+#undef inline
+#ifdef HAVE_WINDOWS_H
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#endif
+#include <winldap.h>
+#include <winber.h>
+ ]],[[
+#if defined(__CYGWIN__) || defined(__CEGCC__)
+ HAVE_WINBER_H shall not be defined.
+#else
+ BERVAL *bvp = NULL;
+ BerElement *bep = ber_init(bvp);
+ ber_free(bep, 1);
+#endif
+ ]])
+ ],[
+ ac_cv_header_winber_h="yes"
+ ],[
+ ac_cv_header_winber_h="no"
+ ])
+ ])
+ case "$ac_cv_header_winber_h" in
+ yes)
+ AC_DEFINE_UNQUOTED(HAVE_WINBER_H, 1,
+ [Define to 1 if you have the winber.h header file.])
+ ;;
+ esac
+])
+
+
+dnl CURL_CHECK_HEADER_LBER
+dnl -------------------------------------------------
+dnl Check for compilable and valid lber.h header,
+dnl and check if it is needed even with ldap.h
+
+AC_DEFUN([CURL_CHECK_HEADER_LBER], [
+ AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
+ AC_CACHE_CHECK([for lber.h], [ac_cv_header_lber_h], [
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+#undef inline
+#ifdef HAVE_WINDOWS_H
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#else
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#endif
+#ifndef NULL
+#define NULL (void *)0
+#endif
+#include <lber.h>
+ ]],[[
+ BerValue *bvp = NULL;
+ BerElement *bep = ber_init(bvp);
+ ber_free(bep, 1);
+ ]])
+ ],[
+ ac_cv_header_lber_h="yes"
+ ],[
+ ac_cv_header_lber_h="no"
+ ])
+ ])
+ if test "$ac_cv_header_lber_h" = "yes"; then
+ AC_DEFINE_UNQUOTED(HAVE_LBER_H, 1,
+ [Define to 1 if you have the lber.h header file.])
+ #
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+#undef inline
+#ifdef HAVE_WINDOWS_H
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#else
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#endif
+#ifndef NULL
+#define NULL (void *)0
+#endif
+#ifndef LDAP_DEPRECATED
+#define LDAP_DEPRECATED 1
+#endif
+#include <ldap.h>
+ ]],[[
+ BerValue *bvp = NULL;
+ BerElement *bep = ber_init(bvp);
+ ber_free(bep, 1);
+ ]])
+ ],[
+ curl_cv_need_header_lber_h="no"
+ ],[
+ curl_cv_need_header_lber_h="yes"
+ ])
+ #
+ case "$curl_cv_need_header_lber_h" in
+ yes)
+ AC_DEFINE_UNQUOTED(NEED_LBER_H, 1,
+ [Define to 1 if you need the lber.h header file even with ldap.h])
+ ;;
+ esac
+ fi
+])
+
+
+dnl CURL_CHECK_HEADER_LDAP
+dnl -------------------------------------------------
+dnl Check for compilable and valid ldap.h header
+
+AC_DEFUN([CURL_CHECK_HEADER_LDAP], [
+ AC_REQUIRE([CURL_CHECK_HEADER_LBER])dnl
+ AC_CACHE_CHECK([for ldap.h], [ac_cv_header_ldap_h], [
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+#undef inline
+#ifdef HAVE_WINDOWS_H
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#else
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#endif
+#ifndef LDAP_DEPRECATED
+#define LDAP_DEPRECATED 1
+#endif
+#ifdef NEED_LBER_H
+#include <lber.h>
+#endif
+#include <ldap.h>
+ ]],[[
+ LDAP *ldp = ldap_init("dummy", LDAP_PORT);
+ int res = ldap_unbind(ldp);
+ ]])
+ ],[
+ ac_cv_header_ldap_h="yes"
+ ],[
+ ac_cv_header_ldap_h="no"
+ ])
+ ])
+ case "$ac_cv_header_ldap_h" in
+ yes)
+ AC_DEFINE_UNQUOTED(HAVE_LDAP_H, 1,
+ [Define to 1 if you have the ldap.h header file.])
+ ;;
+ esac
+])
+
+
+dnl CURL_CHECK_HEADER_LDAP_SSL
+dnl -------------------------------------------------
+dnl Check for compilable and valid ldap_ssl.h header
+
+AC_DEFUN([CURL_CHECK_HEADER_LDAP_SSL], [
+ AC_REQUIRE([CURL_CHECK_HEADER_LDAP])dnl
+ AC_CACHE_CHECK([for ldap_ssl.h], [ac_cv_header_ldap_ssl_h], [
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+#undef inline
+#ifdef HAVE_WINDOWS_H
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#else
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#endif
+#ifndef LDAP_DEPRECATED
+#define LDAP_DEPRECATED 1
+#endif
+#ifdef NEED_LBER_H
+#include <lber.h>
+#endif
+#ifdef HAVE_LDAP_H
+#include <ldap.h>
+#endif
+#include <ldap_ssl.h>
+ ]],[[
+ LDAP *ldp = ldapssl_init("dummy", LDAPS_PORT, 1);
+ ]])
+ ],[
+ ac_cv_header_ldap_ssl_h="yes"
+ ],[
+ ac_cv_header_ldap_ssl_h="no"
+ ])
+ ])
+ case "$ac_cv_header_ldap_ssl_h" in
+ yes)
+ AC_DEFINE_UNQUOTED(HAVE_LDAP_SSL_H, 1,
+ [Define to 1 if you have the ldap_ssl.h header file.])
+ ;;
+ esac
+])
+
+
+dnl CURL_CHECK_HEADER_LDAPSSL
+dnl -------------------------------------------------
+dnl Check for compilable and valid ldapssl.h header
+
+AC_DEFUN([CURL_CHECK_HEADER_LDAPSSL], [
+ AC_REQUIRE([CURL_CHECK_HEADER_LDAP])dnl
+ AC_CACHE_CHECK([for ldapssl.h], [ac_cv_header_ldapssl_h], [
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+#undef inline
+#ifdef HAVE_WINDOWS_H
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#else
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#endif
+#ifndef NULL
+#define NULL (void *)0
+#endif
+#ifndef LDAP_DEPRECATED
+#define LDAP_DEPRECATED 1
+#endif
+#ifdef NEED_LBER_H
+#include <lber.h>
+#endif
+#ifdef HAVE_LDAP_H
+#include <ldap.h>
+#endif
+#include <ldapssl.h>
+ ]],[[
+ char *cert_label = NULL;
+ LDAP *ldp = ldap_ssl_init("dummy", LDAPS_PORT, cert_label);
+ ]])
+ ],[
+ ac_cv_header_ldapssl_h="yes"
+ ],[
+ ac_cv_header_ldapssl_h="no"
+ ])
+ ])
+ case "$ac_cv_header_ldapssl_h" in
+ yes)
+ AC_DEFINE_UNQUOTED(HAVE_LDAPSSL_H, 1,
+ [Define to 1 if you have the ldapssl.h header file.])
+ ;;
+ esac
+])
+
+
+dnl CURL_CHECK_LIBS_WINLDAP
+dnl -------------------------------------------------
+dnl Check for libraries needed for WINLDAP support,
+dnl and prepended to LIBS any needed libraries.
+dnl This macro can take an optional parameter with a
+dnl white space separated list of libraries to check
+dnl before the WINLDAP default ones.
+
+AC_DEFUN([CURL_CHECK_LIBS_WINLDAP], [
+ AC_REQUIRE([CURL_CHECK_HEADER_WINBER])dnl
+ #
+ AC_MSG_CHECKING([for WINLDAP libraries])
+ #
+ u_libs=""
+ #
+ ifelse($1,,,[
+ for x_lib in $1; do
+ case "$x_lib" in
+ -l*)
+ l_lib="$x_lib"
+ ;;
+ *)
+ l_lib="-l$x_lib"
+ ;;
+ esac
+ if test -z "$u_libs"; then
+ u_libs="$l_lib"
+ else
+ u_libs="$u_libs $l_lib"
+ fi
+ done
+ ])
+ #
+ curl_cv_save_LIBS="$LIBS"
+ curl_cv_ldap_LIBS="unknown"
+ #
+ for x_nlibs in '' "$u_libs" \
+ '-lwldap32' ; do
+ if test "$curl_cv_ldap_LIBS" = "unknown"; then
+ if test -z "$x_nlibs"; then
+ LIBS="$curl_cv_save_LIBS"
+ else
+ LIBS="$x_nlibs $curl_cv_save_LIBS"
+ fi
+ AC_LINK_IFELSE([
+ AC_LANG_PROGRAM([[
+#undef inline
+#ifdef HAVE_WINDOWS_H
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#ifdef HAVE_WINLDAP_H
+#include <winldap.h>
+#endif
+#ifdef HAVE_WINBER_H
+#include <winber.h>
+#endif
+#endif
+ ]],[[
+ BERVAL *bvp = NULL;
+ BerElement *bep = ber_init(bvp);
+ LDAP *ldp = ldap_init("dummy", LDAP_PORT);
+ ULONG res = ldap_unbind(ldp);
+ ber_free(bep, 1);
+ ]])
+ ],[
+ curl_cv_ldap_LIBS="$x_nlibs"
+ ])
+ fi
+ done
+ #
+ LIBS="$curl_cv_save_LIBS"
+ #
+ case X-"$curl_cv_ldap_LIBS" in
+ X-unknown)
+ AC_MSG_RESULT([cannot find WINLDAP libraries])
+ ;;
+ X-)
+ AC_MSG_RESULT([no additional lib required])
+ ;;
+ *)
+ if test -z "$curl_cv_save_LIBS"; then
+ LIBS="$curl_cv_ldap_LIBS"
+ else
+ LIBS="$curl_cv_ldap_LIBS $curl_cv_save_LIBS"
+ fi
+ AC_MSG_RESULT([$curl_cv_ldap_LIBS])
+ ;;
+ esac
+ #
+])
+
+
+dnl CURL_CHECK_LIBS_LDAP
+dnl -------------------------------------------------
+dnl Check for libraries needed for LDAP support,
+dnl and prepended to LIBS any needed libraries.
+dnl This macro can take an optional parameter with a
+dnl white space separated list of libraries to check
+dnl before the default ones.
+
+AC_DEFUN([CURL_CHECK_LIBS_LDAP], [
+ AC_REQUIRE([CURL_CHECK_HEADER_LDAP])dnl
+ #
+ AC_MSG_CHECKING([for LDAP libraries])
+ #
+ u_libs=""
+ #
+ ifelse($1,,,[
+ for x_lib in $1; do
+ case "$x_lib" in
+ -l*)
+ l_lib="$x_lib"
+ ;;
+ *)
+ l_lib="-l$x_lib"
+ ;;
+ esac
+ if test -z "$u_libs"; then
+ u_libs="$l_lib"
+ else
+ u_libs="$u_libs $l_lib"
+ fi
+ done
+ ])
+ #
+ curl_cv_save_LIBS="$LIBS"
+ curl_cv_ldap_LIBS="unknown"
+ #
+ for x_nlibs in '' "$u_libs" \
+ '-lldap' \
+ '-llber -lldap' \
+ '-lldap -llber' \
+ '-lldapssl -lldapx -lldapsdk' \
+ '-lldapsdk -lldapx -lldapssl' ; do
+ if test "$curl_cv_ldap_LIBS" = "unknown"; then
+ if test -z "$x_nlibs"; then
+ LIBS="$curl_cv_save_LIBS"
+ else
+ LIBS="$x_nlibs $curl_cv_save_LIBS"
+ fi
+ AC_LINK_IFELSE([
+ AC_LANG_PROGRAM([[
+#undef inline
+#ifdef HAVE_WINDOWS_H
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#else
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#endif
+#ifndef NULL
+#define NULL (void *)0
+#endif
+#ifndef LDAP_DEPRECATED
+#define LDAP_DEPRECATED 1
+#endif
+#ifdef NEED_LBER_H
+#include <lber.h>
+#endif
+#ifdef HAVE_LDAP_H
+#include <ldap.h>
+#endif
+ ]],[[
+ BerValue *bvp = NULL;
+ BerElement *bep = ber_init(bvp);
+ LDAP *ldp = ldap_init("dummy", LDAP_PORT);
+ int res = ldap_unbind(ldp);
+ ber_free(bep, 1);
+ ]])
+ ],[
+ curl_cv_ldap_LIBS="$x_nlibs"
+ ])
+ fi
+ done
+ #
+ LIBS="$curl_cv_save_LIBS"
+ #
+ case X-"$curl_cv_ldap_LIBS" in
+ X-unknown)
+ AC_MSG_RESULT([cannot find LDAP libraries])
+ ;;
+ X-)
+ AC_MSG_RESULT([no additional lib required])
+ ;;
+ *)
+ if test -z "$curl_cv_save_LIBS"; then
+ LIBS="$curl_cv_ldap_LIBS"
+ else
+ LIBS="$curl_cv_ldap_LIBS $curl_cv_save_LIBS"
+ fi
+ AC_MSG_RESULT([$curl_cv_ldap_LIBS])
+ ;;
+ esac
+ #
+])
+
+
+dnl CURL_CHECK_HEADER_MALLOC
+dnl -------------------------------------------------
+dnl Check for compilable and valid malloc.h header,
+dnl and check if it is needed even with stdlib.h
+
+AC_DEFUN([CURL_CHECK_HEADER_MALLOC], [
+ AC_CACHE_CHECK([for malloc.h], [ac_cv_header_malloc_h], [
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+#include <malloc.h>
+ ]],[[
+ void *p = malloc(10);
+ void *q = calloc(10,10);
+ free(p);
+ free(q);
+ ]])
+ ],[
+ ac_cv_header_malloc_h="yes"
+ ],[
+ ac_cv_header_malloc_h="no"
+ ])
+ ])
+ if test "$ac_cv_header_malloc_h" = "yes"; then
+ AC_DEFINE_UNQUOTED(HAVE_MALLOC_H, 1,
+ [Define to 1 if you have the malloc.h header file.])
+ #
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+#include <stdlib.h>
+ ]],[[
+ void *p = malloc(10);
+ void *q = calloc(10,10);
+ free(p);
+ free(q);
+ ]])
+ ],[
+ curl_cv_need_header_malloc_h="no"
+ ],[
+ curl_cv_need_header_malloc_h="yes"
+ ])
+ #
+ case "$curl_cv_need_header_malloc_h" in
+ yes)
+ AC_DEFINE_UNQUOTED(NEED_MALLOC_H, 1,
+ [Define to 1 if you need the malloc.h header file even with stdlib.h])
+ ;;
+ esac
+ fi
+])
+
+
+dnl CURL_CHECK_HEADER_MEMORY
+dnl -------------------------------------------------
+dnl Check for compilable and valid memory.h header,
+dnl and check if it is needed even with stdlib.h for
+dnl memory related functions.
+
+AC_DEFUN([CURL_CHECK_HEADER_MEMORY], [
+ AC_CACHE_CHECK([for memory.h], [ac_cv_header_memory_h], [
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+#include <memory.h>
+ ]],[[
+ void *p = malloc(10);
+ void *q = calloc(10,10);
+ free(p);
+ free(q);
+ ]])
+ ],[
+ ac_cv_header_memory_h="yes"
+ ],[
+ ac_cv_header_memory_h="no"
+ ])
+ ])
+ if test "$ac_cv_header_memory_h" = "yes"; then
+ AC_DEFINE_UNQUOTED(HAVE_MEMORY_H, 1,
+ [Define to 1 if you have the memory.h header file.])
+ #
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+#include <stdlib.h>
+ ]],[[
+ void *p = malloc(10);
+ void *q = calloc(10,10);
+ free(p);
+ free(q);
+ ]])
+ ],[
+ curl_cv_need_header_memory_h="no"
+ ],[
+ curl_cv_need_header_memory_h="yes"
+ ])
+ #
+ case "$curl_cv_need_header_memory_h" in
+ yes)
+ AC_DEFINE_UNQUOTED(NEED_MEMORY_H, 1,
+ [Define to 1 if you need the memory.h header file even with stdlib.h])
+ ;;
+ esac
+ fi
+])
+
+
+dnl CURL_CHECK_FUNC_GETNAMEINFO
+dnl -------------------------------------------------
+dnl Test if the getnameinfo function is available,
+dnl and check the types of five of its arguments.
+dnl If the function succeeds HAVE_GETNAMEINFO will be
+dnl defined, defining the types of the arguments in
+dnl GETNAMEINFO_TYPE_ARG1, GETNAMEINFO_TYPE_ARG2,
+dnl GETNAMEINFO_TYPE_ARG46 and GETNAMEINFO_TYPE_ARG7,
+dnl and also defining the type qualifier of first
+dnl argument in GETNAMEINFO_QUAL_ARG1.
+
+AC_DEFUN([CURL_CHECK_FUNC_GETNAMEINFO], [
+ AC_REQUIRE([CURL_CHECK_HEADER_WS2TCPIP])dnl
+ AC_CHECK_HEADERS(sys/types.h sys/socket.h netdb.h)
+ #
+ AC_MSG_CHECKING([for getnameinfo])
+ AC_LINK_IFELSE([
+ AC_LANG_FUNC_LINK_TRY([getnameinfo])
+ ],[
+ AC_MSG_RESULT([yes])
+ curl_cv_getnameinfo="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ curl_cv_getnameinfo="no"
+ ])
+ #
+ if test "$curl_cv_getnameinfo" != "yes"; then
+ AC_MSG_CHECKING([deeper for getnameinfo])
+ AC_LINK_IFELSE([
+ AC_LANG_PROGRAM([[
+ ]],[[
+ getnameinfo();
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ curl_cv_getnameinfo="yes"
+ ],[
+ AC_MSG_RESULT([but still no])
+ curl_cv_getnameinfo="no"
+ ])
+ fi
+ #
+ if test "$curl_cv_getnameinfo" != "yes"; then
+ AC_MSG_CHECKING([deeper and deeper for getnameinfo])
+ AC_LINK_IFELSE([
+ AC_LANG_PROGRAM([[
+#undef inline
+#ifdef HAVE_WINDOWS_H
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#ifdef HAVE_WINSOCK2_H
+#include <winsock2.h>
+#ifdef HAVE_WS2TCPIP_H
+#include <ws2tcpip.h>
+#endif
+#endif
+#else
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#ifdef HAVE_NETDB_H
+#include <netdb.h>
+#endif
+#endif
+ ]],[[
+ getnameinfo(0, 0, 0, 0, 0, 0, 0);
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ curl_cv_getnameinfo="yes"
+ ],[
+ AC_MSG_RESULT([but still no])
+ curl_cv_getnameinfo="no"
+ ])
+ fi
+ #
+ if test "$curl_cv_getnameinfo" = "yes"; then
+ AC_CACHE_CHECK([types of arguments for getnameinfo],
+ [curl_cv_func_getnameinfo_args], [
+ curl_cv_func_getnameinfo_args="unknown"
+ for gni_arg1 in 'struct sockaddr *' 'const struct sockaddr *' 'void *'; do
+ for gni_arg2 in 'socklen_t' 'size_t' 'int'; do
+ for gni_arg46 in 'size_t' 'int' 'socklen_t' 'unsigned int' 'DWORD'; do
+ for gni_arg7 in 'int' 'unsigned int'; do
+ if test "$curl_cv_func_getnameinfo_args" = "unknown"; then
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+#undef inline
+#ifdef HAVE_WINDOWS_H
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#if (!defined(_WIN32_WINNT)) || (_WIN32_WINNT < 0x0501)
+#undef _WIN32_WINNT
+#define _WIN32_WINNT 0x0501
+#endif
+#include <windows.h>
+#ifdef HAVE_WINSOCK2_H
+#include <winsock2.h>
+#ifdef HAVE_WS2TCPIP_H
+#include <ws2tcpip.h>
+#endif
+#endif
+#define GNICALLCONV WSAAPI
+#else
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#ifdef HAVE_NETDB_H
+#include <netdb.h>
+#endif
+#define GNICALLCONV
+#endif
+ extern int GNICALLCONV getnameinfo($gni_arg1, $gni_arg2,
+ char *, $gni_arg46,
+ char *, $gni_arg46,
+ $gni_arg7);
+ ]],[[
+ $gni_arg2 salen=0;
+ $gni_arg46 hostlen=0;
+ $gni_arg46 servlen=0;
+ $gni_arg7 flags=0;
+ int res = getnameinfo(0, salen, 0, hostlen, 0, servlen, flags);
+ ]])
+ ],[
+ curl_cv_func_getnameinfo_args="$gni_arg1,$gni_arg2,$gni_arg46,$gni_arg7"
+ ])
+ fi
+ done
+ done
+ done
+ done
+ ]) # AC-CACHE-CHECK
+ if test "$curl_cv_func_getnameinfo_args" = "unknown"; then
+ AC_MSG_WARN([Cannot find proper types to use for getnameinfo args])
+ AC_MSG_WARN([HAVE_GETNAMEINFO will not be defined])
+ else
+ gni_prev_IFS=$IFS; IFS=','
+ set dummy `echo "$curl_cv_func_getnameinfo_args" | sed 's/\*/\*/g'`
+ IFS=$gni_prev_IFS
+ shift
+ #
+ gni_qual_type_arg1=$[1]
+ #
+ AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG2, $[2],
+ [Define to the type of arg 2 for getnameinfo.])
+ AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG46, $[3],
+ [Define to the type of args 4 and 6 for getnameinfo.])
+ AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG7, $[4],
+ [Define to the type of arg 7 for getnameinfo.])
+ #
+ prev_sh_opts=$-
+ #
+ case $prev_sh_opts in
+ *f*)
+ ;;
+ *)
+ set -f
+ ;;
+ esac
+ #
+ case "$gni_qual_type_arg1" in
+ const*)
+ gni_qual_arg1=const
+ gni_type_arg1=`echo $gni_qual_type_arg1 | sed 's/^const //'`
+ ;;
+ *)
+ gni_qual_arg1=
+ gni_type_arg1=$gni_qual_type_arg1
+ ;;
+ esac
+ #
+ AC_DEFINE_UNQUOTED(GETNAMEINFO_QUAL_ARG1, $gni_qual_arg1,
+ [Define to the type qualifier of arg 1 for getnameinfo.])
+ AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG1, $gni_type_arg1,
+ [Define to the type of arg 1 for getnameinfo.])
+ #
+ case $prev_sh_opts in
+ *f*)
+ ;;
+ *)
+ set +f
+ ;;
+ esac
+ #
+ AC_DEFINE_UNQUOTED(HAVE_GETNAMEINFO, 1,
+ [Define to 1 if you have the getnameinfo function.])
+ ac_cv_func_getnameinfo="yes"
+ fi
+ fi
+])
+
+
+dnl TYPE_SOCKADDR_STORAGE
+dnl -------------------------------------------------
+dnl Check for struct sockaddr_storage. Most IPv6-enabled
+dnl hosts have it, but AIX 4.3 is one known exception.
+
+AC_DEFUN([TYPE_SOCKADDR_STORAGE],
+[
+ AC_CHECK_TYPE([struct sockaddr_storage],
+ AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE, 1,
+ [if struct sockaddr_storage is defined]), ,
+ [
+#undef inline
+#ifdef HAVE_WINDOWS_H
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#ifdef HAVE_WINSOCK2_H
+#include <winsock2.h>
+#endif
+#else
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#ifdef HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+#ifdef HAVE_ARPA_INET_H
+#include <arpa/inet.h>
+#endif
+#endif
+ ])
+])
+
+
+dnl CURL_CHECK_NI_WITHSCOPEID
+dnl -------------------------------------------------
+dnl Check for working NI_WITHSCOPEID in getnameinfo()
+
+AC_DEFUN([CURL_CHECK_NI_WITHSCOPEID], [
+ AC_REQUIRE([CURL_CHECK_FUNC_GETNAMEINFO])dnl
+ AC_REQUIRE([TYPE_SOCKADDR_STORAGE])dnl
+ AC_CHECK_HEADERS(stdio.h sys/types.h sys/socket.h \
+ netdb.h netinet/in.h arpa/inet.h)
+ #
+ AC_CACHE_CHECK([for working NI_WITHSCOPEID],
+ [ac_cv_working_ni_withscopeid], [
+ AC_RUN_IFELSE([
+ AC_LANG_PROGRAM([[
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_STDIO_H
+#include <stdio.h>
+#endif
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#ifdef HAVE_NETDB_H
+#include <netdb.h>
+#endif
+#ifdef HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+#ifdef HAVE_ARPA_INET_H
+#include <arpa/inet.h>
+#endif
+ ]],[[
+#if defined(NI_WITHSCOPEID) && defined(HAVE_GETNAMEINFO)
+#ifdef HAVE_STRUCT_SOCKADDR_STORAGE
+ struct sockaddr_storage sa;
+#else
+ unsigned char sa[256];
+#endif
+ char hostbuf[NI_MAXHOST];
+ int rc;
+ GETNAMEINFO_TYPE_ARG2 salen = (GETNAMEINFO_TYPE_ARG2)sizeof(sa);
+ GETNAMEINFO_TYPE_ARG46 hostlen = (GETNAMEINFO_TYPE_ARG46)sizeof(hostbuf);
+ GETNAMEINFO_TYPE_ARG7 flags = NI_NUMERICHOST | NI_NUMERICSERV | NI_WITHSCOPEID;
+ int fd = socket(AF_INET6, SOCK_STREAM, 0);
+ if(fd < 0) {
+ perror("socket()");
+ return 1; /* Error creating socket */
+ }
+ rc = getsockname(fd, (GETNAMEINFO_TYPE_ARG1)&sa, &salen);
+ if(rc) {
+ perror("getsockname()");
+ return 2; /* Error retrieving socket name */
+ }
+ rc = getnameinfo((GETNAMEINFO_TYPE_ARG1)&sa, salen, hostbuf, hostlen, NULL, 0, flags);
+ if(rc) {
+ printf("rc = %s\n", gai_strerror(rc));
+ return 3; /* Error translating socket address */
+ }
+ return 0; /* Ok, NI_WITHSCOPEID works */
+#else
+ return 4; /* Error, NI_WITHSCOPEID not defined or no getnameinfo() */
+#endif
+ ]]) # AC-LANG-PROGRAM
+ ],[
+ # Exit code == 0. Program worked.
+ ac_cv_working_ni_withscopeid="yes"
+ ],[
+ # Exit code != 0. Program failed.
+ ac_cv_working_ni_withscopeid="no"
+ ],[
+ # Program is not run when cross-compiling. So we assume
+ # NI_WITHSCOPEID will work if we are able to compile it.
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netdb.h>
+ ]],[[
+ unsigned int dummy= NI_NUMERICHOST | NI_NUMERICSERV | NI_WITHSCOPEID;
+ ]])
+ ],[
+ ac_cv_working_ni_withscopeid="yes"
+ ],[
+ ac_cv_working_ni_withscopeid="no"
+ ]) # AC-COMPILE-IFELSE
+ ]) # AC-RUN-IFELSE
+ ]) # AC-CACHE-CHECK
+ case "$ac_cv_working_ni_withscopeid" in
+ yes)
+ AC_DEFINE(HAVE_NI_WITHSCOPEID, 1,
+ [Define to 1 if NI_WITHSCOPEID exists and works.])
+ ;;
+ esac
+])
+
+
+dnl CURL_CHECK_FUNC_RECV
+dnl -------------------------------------------------
+dnl Test if the socket recv() function is available,
+dnl and check its return type and the types of its
+dnl arguments. If the function succeeds HAVE_RECV
+dnl will be defined, defining the types of the arguments
+dnl in RECV_TYPE_ARG1, RECV_TYPE_ARG2, RECV_TYPE_ARG3
+dnl and RECV_TYPE_ARG4, defining the type of the function
+dnl return value in RECV_TYPE_RETV.
+
+AC_DEFUN([CURL_CHECK_FUNC_RECV], [
+ AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK])dnl
+ AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl
+ AC_CHECK_HEADERS(sys/types.h sys/socket.h)
+ #
+ AC_MSG_CHECKING([for recv])
+ AC_LINK_IFELSE([
+ AC_LANG_PROGRAM([[
+#undef inline
+#ifdef HAVE_WINDOWS_H
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#ifdef HAVE_WINSOCK2_H
+#include <winsock2.h>
+#else
+#ifdef HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
+#endif
+#else
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#endif
+ ]],[[
+ recv(0, 0, 0, 0);
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ curl_cv_recv="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ curl_cv_recv="no"
+ ])
+ #
+ if test "$curl_cv_recv" = "yes"; then
+ AC_CACHE_CHECK([types of args and return type for recv],
+ [curl_cv_func_recv_args], [
+ curl_cv_func_recv_args="unknown"
+ for recv_retv in 'int' 'ssize_t'; do
+ for recv_arg1 in 'int' 'ssize_t' 'SOCKET'; do
+ for recv_arg2 in 'char *' 'void *'; do
+ for recv_arg3 in 'size_t' 'int' 'socklen_t' 'unsigned int'; do
+ for recv_arg4 in 'int' 'unsigned int'; do
+ if test "$curl_cv_func_recv_args" = "unknown"; then
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+#undef inline
+#ifdef HAVE_WINDOWS_H
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#ifdef HAVE_WINSOCK2_H
+#include <winsock2.h>
+#else
+#ifdef HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
+#endif
+#define RECVCALLCONV PASCAL
+#else
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#define RECVCALLCONV
+#endif
+ extern $recv_retv RECVCALLCONV
+ recv($recv_arg1, $recv_arg2, $recv_arg3, $recv_arg4);
+ ]],[[
+ $recv_arg1 s=0;
+ $recv_arg2 buf=0;
+ $recv_arg3 len=0;
+ $recv_arg4 flags=0;
+ $recv_retv res = recv(s, buf, len, flags);
+ ]])
+ ],[
+ curl_cv_func_recv_args="$recv_arg1,$recv_arg2,$recv_arg3,$recv_arg4,$recv_retv"
+ ])
+ fi
+ done
+ done
+ done
+ done
+ done
+ ]) # AC-CACHE-CHECK
+ if test "$curl_cv_func_recv_args" = "unknown"; then
+ AC_MSG_ERROR([Cannot find proper types to use for recv args])
+ else
+ recv_prev_IFS=$IFS; IFS=','
+ set dummy `echo "$curl_cv_func_recv_args" | sed 's/\*/\*/g'`
+ IFS=$recv_prev_IFS
+ shift
+ #
+ AC_DEFINE_UNQUOTED(RECV_TYPE_ARG1, $[1],
+ [Define to the type of arg 1 for recv.])
+ AC_DEFINE_UNQUOTED(RECV_TYPE_ARG2, $[2],
+ [Define to the type of arg 2 for recv.])
+ AC_DEFINE_UNQUOTED(RECV_TYPE_ARG3, $[3],
+ [Define to the type of arg 3 for recv.])
+ AC_DEFINE_UNQUOTED(RECV_TYPE_ARG4, $[4],
+ [Define to the type of arg 4 for recv.])
+ AC_DEFINE_UNQUOTED(RECV_TYPE_RETV, $[5],
+ [Define to the function return type for recv.])
+ #
+ AC_DEFINE_UNQUOTED(HAVE_RECV, 1,
+ [Define to 1 if you have the recv function.])
+ ac_cv_func_recv="yes"
+ fi
+ else
+ AC_MSG_ERROR([Unable to link function recv])
+ fi
+])
+
+
+dnl CURL_CHECK_FUNC_SEND
+dnl -------------------------------------------------
+dnl Test if the socket send() function is available,
+dnl and check its return type and the types of its
+dnl arguments. If the function succeeds HAVE_SEND
+dnl will be defined, defining the types of the arguments
+dnl in SEND_TYPE_ARG1, SEND_TYPE_ARG2, SEND_TYPE_ARG3
+dnl and SEND_TYPE_ARG4, defining the type of the function
+dnl return value in SEND_TYPE_RETV, and also defining the
+dnl type qualifier of second argument in SEND_QUAL_ARG2.
+
+AC_DEFUN([CURL_CHECK_FUNC_SEND], [
+ AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK])dnl
+ AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl
+ AC_CHECK_HEADERS(sys/types.h sys/socket.h)
+ #
+ AC_MSG_CHECKING([for send])
+ AC_LINK_IFELSE([
+ AC_LANG_PROGRAM([[
+#undef inline
+#ifdef HAVE_WINDOWS_H
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#ifdef HAVE_WINSOCK2_H
+#include <winsock2.h>
+#else
+#ifdef HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
+#endif
+#else
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#endif
+ ]],[[
+ send(0, 0, 0, 0);
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ curl_cv_send="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ curl_cv_send="no"
+ ])
+ #
+ if test "$curl_cv_send" = "yes"; then
+ AC_CACHE_CHECK([types of args and return type for send],
+ [curl_cv_func_send_args], [
+ curl_cv_func_send_args="unknown"
+ for send_retv in 'int' 'ssize_t'; do
+ for send_arg1 in 'int' 'ssize_t' 'SOCKET'; do
+ for send_arg2 in 'char *' 'void *' 'const char *' 'const void *'; do
+ for send_arg3 in 'size_t' 'int' 'socklen_t' 'unsigned int'; do
+ for send_arg4 in 'int' 'unsigned int'; do
+ if test "$curl_cv_func_send_args" = "unknown"; then
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+#undef inline
+#ifdef HAVE_WINDOWS_H
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#ifdef HAVE_WINSOCK2_H
+#include <winsock2.h>
+#else
+#ifdef HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
+#endif
+#define SENDCALLCONV PASCAL
+#else
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#define SENDCALLCONV
+#endif
+ extern $send_retv SENDCALLCONV
+ send($send_arg1, $send_arg2, $send_arg3, $send_arg4);
+ ]],[[
+ $send_arg1 s=0;
+ $send_arg3 len=0;
+ $send_arg4 flags=0;
+ $send_retv res = send(s, 0, len, flags);
+ ]])
+ ],[
+ curl_cv_func_send_args="$send_arg1,$send_arg2,$send_arg3,$send_arg4,$send_retv"
+ ])
+ fi
+ done
+ done
+ done
+ done
+ done
+ ]) # AC-CACHE-CHECK
+ if test "$curl_cv_func_send_args" = "unknown"; then
+ AC_MSG_ERROR([Cannot find proper types to use for send args])
+ else
+ send_prev_IFS=$IFS; IFS=','
+ set dummy `echo "$curl_cv_func_send_args" | sed 's/\*/\*/g'`
+ IFS=$send_prev_IFS
+ shift
+ #
+ send_qual_type_arg2=$[2]
+ #
+ AC_DEFINE_UNQUOTED(SEND_TYPE_ARG1, $[1],
+ [Define to the type of arg 1 for send.])
+ AC_DEFINE_UNQUOTED(SEND_TYPE_ARG3, $[3],
+ [Define to the type of arg 3 for send.])
+ AC_DEFINE_UNQUOTED(SEND_TYPE_ARG4, $[4],
+ [Define to the type of arg 4 for send.])
+ AC_DEFINE_UNQUOTED(SEND_TYPE_RETV, $[5],
+ [Define to the function return type for send.])
+ #
+ prev_sh_opts=$-
+ #
+ case $prev_sh_opts in
+ *f*)
+ ;;
+ *)
+ set -f
+ ;;
+ esac
+ #
+ case "$send_qual_type_arg2" in
+ const*)
+ send_qual_arg2=const
+ send_type_arg2=`echo $send_qual_type_arg2 | sed 's/^const //'`
+ ;;
+ *)
+ send_qual_arg2=
+ send_type_arg2=$send_qual_type_arg2
+ ;;
+ esac
+ #
+ AC_DEFINE_UNQUOTED(SEND_QUAL_ARG2, $send_qual_arg2,
+ [Define to the type qualifier of arg 2 for send.])
+ AC_DEFINE_UNQUOTED(SEND_TYPE_ARG2, $send_type_arg2,
+ [Define to the type of arg 2 for send.])
+ #
+ case $prev_sh_opts in
+ *f*)
+ ;;
+ *)
+ set +f
+ ;;
+ esac
+ #
+ AC_DEFINE_UNQUOTED(HAVE_SEND, 1,
+ [Define to 1 if you have the send function.])
+ ac_cv_func_send="yes"
+ fi
+ else
+ AC_MSG_ERROR([Unable to link function send])
+ fi
+])
+
+
+dnl CURL_CHECK_FUNC_RECVFROM
+dnl -------------------------------------------------
+dnl Test if the socket recvfrom() function is available,
+dnl and check its return type and the types of its
+dnl arguments. If the function succeeds HAVE_RECVFROM
+dnl will be defined, defining the types of the arguments
+dnl in RECVFROM_TYPE_ARG1, RECVFROM_TYPE_ARG2, and so on
+dnl to RECVFROM_TYPE_ARG6, defining also the type of the
+dnl function return value in RECVFROM_TYPE_RETV.
+dnl Notice that the types returned for pointer arguments
+dnl will actually be the type pointed by the pointer.
+
+AC_DEFUN([CURL_CHECK_FUNC_RECVFROM], [
+ AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK])dnl
+ AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl
+ AC_CHECK_HEADERS(sys/types.h sys/socket.h)
+ #
+ AC_MSG_CHECKING([for recvfrom])
+ AC_LINK_IFELSE([
+ AC_LANG_PROGRAM([[
+#undef inline
+#ifdef HAVE_WINDOWS_H
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#ifdef HAVE_WINSOCK2_H
+#include <winsock2.h>
+#else
+#ifdef HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
+#endif
+#else
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#endif
+ ]],[[
+ recvfrom(0, 0, 0, 0, 0, 0);
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ curl_cv_recvfrom="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ curl_cv_recvfrom="no"
+ ])
+ #
+ if test "$curl_cv_recvfrom" = "yes"; then
+ AC_CACHE_CHECK([types of args and return type for recvfrom],
+ [curl_cv_func_recvfrom_args], [
+ curl_cv_func_recvfrom_args="unknown"
+ for recvfrom_retv in 'int' 'ssize_t'; do
+ for recvfrom_arg1 in 'int' 'ssize_t' 'SOCKET'; do
+ for recvfrom_arg2 in 'char *' 'void *'; do
+ for recvfrom_arg3 in 'size_t' 'int' 'socklen_t' 'unsigned int'; do
+ for recvfrom_arg4 in 'int' 'unsigned int'; do
+ for recvfrom_arg5 in 'struct sockaddr *' 'void *'; do
+ for recvfrom_arg6 in 'socklen_t *' 'int *' 'unsigned int *' 'size_t *' 'void *'; do
+ if test "$curl_cv_func_recvfrom_args" = "unknown"; then
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+#undef inline
+#ifdef HAVE_WINDOWS_H
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#ifdef HAVE_WINSOCK2_H
+#include <winsock2.h>
+#else
+#ifdef HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
+#endif
+#define RECVFROMCALLCONV PASCAL
+#else
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#define RECVFROMCALLCONV
+#endif
+ extern $recvfrom_retv RECVFROMCALLCONV
+ recvfrom($recvfrom_arg1, $recvfrom_arg2,
+ $recvfrom_arg3, $recvfrom_arg4,
+ $recvfrom_arg5, $recvfrom_arg6);
+ ]],[[
+ $recvfrom_arg1 s=0;
+ $recvfrom_arg2 buf=0;
+ $recvfrom_arg3 len=0;
+ $recvfrom_arg4 flags=0;
+ $recvfrom_arg5 addr=0;
+ $recvfrom_arg6 addrlen=0;
+ $recvfrom_retv res=0;
+ res = recvfrom(s, buf, len, flags, addr, addrlen);
+ ]])
+ ],[
+ curl_cv_func_recvfrom_args="$recvfrom_arg1,$recvfrom_arg2,$recvfrom_arg3,$recvfrom_arg4,$recvfrom_arg5,$recvfrom_arg6,$recvfrom_retv"
+ ])
+ fi
+ done
+ done
+ done
+ done
+ done
+ done
+ done
+ ]) # AC-CACHE-CHECK
+ # Nearly last minute change for this release starts here
+ AC_DEFINE_UNQUOTED(HAVE_RECVFROM, 1,
+ [Define to 1 if you have the recvfrom function.])
+ ac_cv_func_recvfrom="yes"
+ # Nearly last minute change for this release ends here
+ if test "$curl_cv_func_recvfrom_args" = "unknown"; then
+ AC_MSG_WARN([Cannot find proper types to use for recvfrom args])
+ else
+ recvfrom_prev_IFS=$IFS; IFS=','
+ set dummy `echo "$curl_cv_func_recvfrom_args" | sed 's/\*/\*/g'`
+ IFS=$recvfrom_prev_IFS
+ shift
+ #
+ recvfrom_ptrt_arg2=$[2]
+ recvfrom_ptrt_arg5=$[5]
+ recvfrom_ptrt_arg6=$[6]
+ #
+ AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG1, $[1],
+ [Define to the type of arg 1 for recvfrom.])
+ AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG3, $[3],
+ [Define to the type of arg 3 for recvfrom.])
+ AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG4, $[4],
+ [Define to the type of arg 4 for recvfrom.])
+ AC_DEFINE_UNQUOTED(RECVFROM_TYPE_RETV, $[7],
+ [Define to the function return type for recvfrom.])
+ #
+ prev_sh_opts=$-
+ #
+ case $prev_sh_opts in
+ *f*)
+ ;;
+ *)
+ set -f
+ ;;
+ esac
+ #
+ recvfrom_type_arg2=`echo $recvfrom_ptrt_arg2 | sed 's/ \*//'`
+ recvfrom_type_arg5=`echo $recvfrom_ptrt_arg5 | sed 's/ \*//'`
+ recvfrom_type_arg6=`echo $recvfrom_ptrt_arg6 | sed 's/ \*//'`
+ #
+ AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG2, $recvfrom_type_arg2,
+ [Define to the type pointed by arg 2 for recvfrom.])
+ AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG5, $recvfrom_type_arg5,
+ [Define to the type pointed by arg 5 for recvfrom.])
+ AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG6, $recvfrom_type_arg6,
+ [Define to the type pointed by arg 6 for recvfrom.])
+ #
+ if test "$recvfrom_type_arg2" = "void"; then
+ AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG2_IS_VOID, 1,
+ [Define to 1 if the type pointed by arg 2 for recvfrom is void.])
+ fi
+ if test "$recvfrom_type_arg5" = "void"; then
+ AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG5_IS_VOID, 1,
+ [Define to 1 if the type pointed by arg 5 for recvfrom is void.])
+ fi
+ if test "$recvfrom_type_arg6" = "void"; then
+ AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG6_IS_VOID, 1,
+ [Define to 1 if the type pointed by arg 6 for recvfrom is void.])
+ fi
+ #
+ case $prev_sh_opts in
+ *f*)
+ ;;
+ *)
+ set +f
+ ;;
+ esac
+ #
+ AC_DEFINE_UNQUOTED(HAVE_RECVFROM, 1,
+ [Define to 1 if you have the recvfrom function.])
+ ac_cv_func_recvfrom="yes"
+ fi
+ else
+ AC_MSG_WARN([Unable to link function recvfrom])
+ fi
+])
+
+
+dnl CURL_CHECK_MSG_NOSIGNAL
+dnl -------------------------------------------------
+dnl Check for MSG_NOSIGNAL
+
+AC_DEFUN([CURL_CHECK_MSG_NOSIGNAL], [
+ AC_CHECK_HEADERS(sys/types.h sys/socket.h)
+ AC_CACHE_CHECK([for MSG_NOSIGNAL], [ac_cv_msg_nosignal], [
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+#undef inline
+#ifdef HAVE_WINDOWS_H
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#ifdef HAVE_WINSOCK2_H
+#include <winsock2.h>
+#else
+#ifdef HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
+#endif
+#else
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#endif
+ ]],[[
+ int flag=MSG_NOSIGNAL;
+ ]])
+ ],[
+ ac_cv_msg_nosignal="yes"
+ ],[
+ ac_cv_msg_nosignal="no"
+ ])
+ ])
+ case "$ac_cv_msg_nosignal" in
+ yes)
+ AC_DEFINE_UNQUOTED(HAVE_MSG_NOSIGNAL, 1,
+ [Define to 1 if you have the MSG_NOSIGNAL flag.])
+ ;;
+ esac
+])
+
+
+dnl CURL_CHECK_STRUCT_TIMEVAL
+dnl -------------------------------------------------
+dnl Check for timeval struct
+
+AC_DEFUN([CURL_CHECK_STRUCT_TIMEVAL], [
+ AC_REQUIRE([AC_HEADER_TIME])dnl
+ AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK])dnl
+ AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl
+ AC_CHECK_HEADERS(sys/types.h sys/time.h time.h sys/socket.h)
+ AC_CACHE_CHECK([for struct timeval], [ac_cv_struct_timeval], [
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+#undef inline
+#ifdef HAVE_WINDOWS_H
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#ifdef HAVE_WINSOCK2_H
+#include <winsock2.h>
+#else
+#ifdef HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
+#endif
+#endif
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h>
+#ifdef TIME_WITH_SYS_TIME
+#include <time.h>
+#endif
+#else
+#ifdef HAVE_TIME_H
+#include <time.h>
+#endif
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+ ]],[[
+ struct timeval ts;
+ ts.tv_sec = 0;
+ ts.tv_usec = 0;
+ ]])
+ ],[
+ ac_cv_struct_timeval="yes"
+ ],[
+ ac_cv_struct_timeval="no"
+ ])
+ ])
+ case "$ac_cv_struct_timeval" in
+ yes)
+ AC_DEFINE_UNQUOTED(HAVE_STRUCT_TIMEVAL, 1,
+ [Define to 1 if you have the timeval struct.])
+ ;;
+ esac
+])
+
+
+dnl TYPE_SIG_ATOMIC_T
+dnl -------------------------------------------------
+dnl Check if the sig_atomic_t type is available, and
+dnl verify if it is already defined as volatile.
+
+AC_DEFUN([TYPE_SIG_ATOMIC_T], [
+ AC_CHECK_HEADERS(signal.h)
+ AC_CHECK_TYPE([sig_atomic_t],[
+ AC_DEFINE(HAVE_SIG_ATOMIC_T, 1,
+ [Define to 1 if sig_atomic_t is an available typedef.])
+ ], ,[
+#ifdef HAVE_SIGNAL_H
+#include <signal.h>
+#endif
+ ])
+ case "$ac_cv_type_sig_atomic_t" in
+ yes)
+ #
+ AC_MSG_CHECKING([if sig_atomic_t is already defined as volatile])
+ AC_LINK_IFELSE([
+ AC_LANG_PROGRAM([[
+#ifdef HAVE_SIGNAL_H
+#include <signal.h>
+#endif
+ ]],[[
+ static volatile sig_atomic_t dummy = 0;
+ ]])
+ ],[
+ AC_MSG_RESULT([no])
+ ac_cv_sig_atomic_t_volatile="no"
+ ],[
+ AC_MSG_RESULT([yes])
+ ac_cv_sig_atomic_t_volatile="yes"
+ ])
+ #
+ if test "$ac_cv_sig_atomic_t_volatile" = "yes"; then
+ AC_DEFINE(HAVE_SIG_ATOMIC_T_VOLATILE, 1,
+ [Define to 1 if sig_atomic_t is already defined as volatile.])
+ fi
+ ;;
+ esac
+])
+
+
+dnl TYPE_IN_ADDR_T
+dnl -------------------------------------------------
+dnl Check for in_addr_t: it is used to receive the return code of inet_addr()
+dnl and a few other things.
+
+AC_DEFUN([TYPE_IN_ADDR_T], [
+ AC_CHECK_TYPE([in_addr_t], ,[
+ dnl in_addr_t not available
+ AC_CACHE_CHECK([for in_addr_t equivalent],
+ [curl_cv_in_addr_t_equiv], [
+ curl_cv_in_addr_t_equiv="unknown"
+ for t in "unsigned long" int size_t unsigned long; do
+ if test "$curl_cv_in_addr_t_equiv" = "unknown"; then
+ AC_LINK_IFELSE([
+ AC_LANG_PROGRAM([[
+#undef inline
+#ifdef HAVE_WINDOWS_H
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#ifdef HAVE_WINSOCK2_H
+#include <winsock2.h>
+#else
+#ifdef HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
+#endif
+#else
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#ifdef HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+#ifdef HAVE_ARPA_INET_H
+#include <arpa/inet.h>
+#endif
+#endif
+ ]],[[
+ $t data = inet_addr ("1.2.3.4");
+ ]])
+ ],[
+ curl_cv_in_addr_t_equiv="$t"
+ ])
+ fi
+ done
+ ])
+ case "$curl_cv_in_addr_t_equiv" in
+ unknown)
+ AC_MSG_ERROR([Cannot find a type to use in place of in_addr_t])
+ ;;
+ *)
+ AC_DEFINE_UNQUOTED(in_addr_t, $curl_cv_in_addr_t_equiv,
+ [Type to use in place of in_addr_t when system does not provide it.])
+ ;;
+ esac
+ ],[
+#undef inline
+#ifdef HAVE_WINDOWS_H
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#ifdef HAVE_WINSOCK2_H
+#include <winsock2.h>
+#else
+#ifdef HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
+#endif
+#else
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#ifdef HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+#ifdef HAVE_ARPA_INET_H
+#include <arpa/inet.h>
+#endif
+#endif
+ ])
+])
+
+
+dnl CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC
+dnl -------------------------------------------------
+dnl Check if monotonic clock_gettime is available.
+
+AC_DEFUN([CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC], [
+ AC_REQUIRE([AC_HEADER_TIME])dnl
+ AC_CHECK_HEADERS(sys/types.h sys/time.h time.h)
+ AC_MSG_CHECKING([for monotonic clock_gettime])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h>
+#ifdef TIME_WITH_SYS_TIME
+#include <time.h>
+#endif
+#else
+#ifdef HAVE_TIME_H
+#include <time.h>
+#endif
+#endif
+ ]],[[
+ struct timespec ts;
+ (void)clock_gettime(CLOCK_MONOTONIC, &ts);
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ ac_cv_func_clock_gettime="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ ac_cv_func_clock_gettime="no"
+ ])
+ dnl Definition of HAVE_CLOCK_GETTIME_MONOTONIC is intentionally postponed
+ dnl until library linking and run-time checks for clock_gettime succeed.
+])
+
+
+dnl CURL_CHECK_LIBS_CLOCK_GETTIME_MONOTONIC
+dnl -------------------------------------------------
+dnl If monotonic clock_gettime is available then,
+dnl check and prepended to LIBS any needed libraries.
+
+AC_DEFUN([CURL_CHECK_LIBS_CLOCK_GETTIME_MONOTONIC], [
+ AC_REQUIRE([CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC])dnl
+ #
+ if test "$ac_cv_func_clock_gettime" = "yes"; then
+ #
+ AC_MSG_CHECKING([for clock_gettime in libraries])
+ #
+ curl_cv_save_LIBS="$LIBS"
+ curl_cv_gclk_LIBS="unknown"
+ #
+ for x_xlibs in '' '-lrt' '-lposix4' ; do
+ if test "$curl_cv_gclk_LIBS" = "unknown"; then
+ if test -z "$x_xlibs"; then
+ LIBS="$curl_cv_save_LIBS"
+ else
+ LIBS="$x_xlibs $curl_cv_save_LIBS"
+ fi
+ AC_LINK_IFELSE([
+ AC_LANG_PROGRAM([[
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h>
+#ifdef TIME_WITH_SYS_TIME
+#include <time.h>
+#endif
+#else
+#ifdef HAVE_TIME_H
+#include <time.h>
+#endif
+#endif
+ ]],[[
+ struct timespec ts;
+ (void)clock_gettime(CLOCK_MONOTONIC, &ts);
+ ]])
+ ],[
+ curl_cv_gclk_LIBS="$x_xlibs"
+ ])
+ fi
+ done
+ #
+ LIBS="$curl_cv_save_LIBS"
+ #
+ case X-"$curl_cv_gclk_LIBS" in
+ X-unknown)
+ AC_MSG_RESULT([cannot find clock_gettime])
+ AC_MSG_WARN([HAVE_CLOCK_GETTIME_MONOTONIC will not be defined])
+ ac_cv_func_clock_gettime="no"
+ ;;
+ X-)
+ AC_MSG_RESULT([no additional lib required])
+ ac_cv_func_clock_gettime="yes"
+ ;;
+ *)
+ if test -z "$curl_cv_save_LIBS"; then
+ LIBS="$curl_cv_gclk_LIBS"
+ else
+ LIBS="$curl_cv_gclk_LIBS $curl_cv_save_LIBS"
+ fi
+ CURL_LIBS="$CURL_LIBS $curl_cv_gclk_LIBS"
+ AC_MSG_RESULT([$curl_cv_gclk_LIBS])
+ ac_cv_func_clock_gettime="yes"
+ ;;
+ esac
+ #
+ dnl only do runtime verification when not cross-compiling
+ if test "x$cross_compiling" != "xyes" &&
+ test "$ac_cv_func_clock_gettime" = "yes"; then
+ AC_MSG_CHECKING([if monotonic clock_gettime works])
+ AC_RUN_IFELSE([
+ AC_LANG_PROGRAM([[
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h>
+#ifdef TIME_WITH_SYS_TIME
+#include <time.h>
+#endif
+#else
+#ifdef HAVE_TIME_H
+#include <time.h>
+#endif
+#endif
+ ]],[[
+ struct timespec ts;
+ if (0 == clock_gettime(CLOCK_MONOTONIC, &ts))
+ exit(0);
+ else
+ exit(1);
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ ],[
+ AC_MSG_RESULT([no])
+ AC_MSG_WARN([HAVE_CLOCK_GETTIME_MONOTONIC will not be defined])
+ ac_cv_func_clock_gettime="no"
+ LIBS="$curl_cv_save_LIBS"
+ ])
+ fi
+ #
+ case "$ac_cv_func_clock_gettime" in
+ yes)
+ AC_DEFINE_UNQUOTED(HAVE_CLOCK_GETTIME_MONOTONIC, 1,
+ [Define to 1 if you have the clock_gettime function and monotonic timer.])
+ ;;
+ esac
+ #
+ fi
+ #
+])
+
+
+dnl CURL_CHECK_LIBS_CONNECT
+dnl -------------------------------------------------
+dnl Verify if network connect function is already available
+dnl using current libraries or if another one is required.
+
+AC_DEFUN([CURL_CHECK_LIBS_CONNECT], [
+ AC_REQUIRE([CURL_INCLUDES_WINSOCK2])dnl
+ AC_MSG_CHECKING([for connect in libraries])
+ tst_connect_save_LIBS="$LIBS"
+ tst_connect_need_LIBS="unknown"
+ for tst_lib in '' '-lsocket' ; do
+ if test "$tst_connect_need_LIBS" = "unknown"; then
+ LIBS="$tst_lib $tst_connect_save_LIBS"
+ AC_LINK_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_winsock2
+ #ifndef HAVE_WINDOWS_H
+ int connect(int, void*, int);
+ #endif
+ ]],[[
+ if(0 != connect(0, 0, 0))
+ return 1;
+ ]])
+ ],[
+ tst_connect_need_LIBS="$tst_lib"
+ ])
+ fi
+ done
+ LIBS="$tst_connect_save_LIBS"
+ #
+ case X-"$tst_connect_need_LIBS" in
+ X-unknown)
+ AC_MSG_RESULT([cannot find connect])
+ AC_MSG_ERROR([cannot find connect function in libraries.])
+ ;;
+ X-)
+ AC_MSG_RESULT([yes])
+ ;;
+ *)
+ AC_MSG_RESULT([$tst_connect_need_LIBS])
+ LIBS="$tst_connect_need_LIBS $tst_connect_save_LIBS"
+ ;;
+ esac
+])
+
+
+dnl CURL_DEFINE_UNQUOTED (VARIABLE, [VALUE])
+dnl -------------------------------------------------
+dnl Like AC_DEFINE_UNQUOTED this macro will define a C preprocessor
+dnl symbol that can be further used in custom template configuration
+dnl files. This macro, unlike AC_DEFINE_UNQUOTED, does not use a third
+dnl argument for the description. Symbol definitions done with this
+dnl macro are intended to be exclusively used in handcrafted *.h.in
+dnl template files. Contrary to what AC_DEFINE_UNQUOTED does, this one
+dnl prevents autoheader generation and insertion of symbol template
+dnl stub and definition into the first configuration header file. Do
+dnl not use this macro as a replacement for AC_DEFINE_UNQUOTED, each
+dnl one serves different functional needs.
+
+AC_DEFUN([CURL_DEFINE_UNQUOTED], [
+cat >>confdefs.h <<_EOF
+[@%:@define] $1 ifelse($#, 2, [$2], 1)
+_EOF
+])
+
+
+dnl CURL_CONFIGURE_LONG
+dnl -------------------------------------------------
+dnl Find out the size of long as reported by sizeof() and define
+dnl CURL_SIZEOF_LONG as appropriate to be used in template file
+dnl include/curl/curlbuild.h.in to properly configure the library.
+dnl The size of long is a build time characteristic and as such
+dnl must be recorded in curlbuild.h
+
+AC_DEFUN([CURL_CONFIGURE_LONG], [
+ if test -z "$ac_cv_sizeof_long" ||
+ test "$ac_cv_sizeof_long" -eq "0"; then
+ AC_MSG_ERROR([cannot find out size of long.])
+ fi
+ CURL_DEFINE_UNQUOTED([CURL_SIZEOF_LONG], [$ac_cv_sizeof_long])
+])
+
+
+dnl CURL_CONFIGURE_CURL_SOCKLEN_T
+dnl -------------------------------------------------
+dnl Find out suitable curl_socklen_t data type definition and size, making
+dnl appropriate definitions for template file include/curl/curlbuild.h.in
+dnl to properly configure and use the library.
+dnl
+dnl The need for the curl_socklen_t definition arises mainly to properly
+dnl interface HP-UX systems which on one hand have a typedef'ed socklen_t
+dnl data type which is 32 or 64-Bit wide depending on the data model being
+dnl used, and that on the other hand is only actually used when interfacing
+dnl the X/Open sockets provided in the xnet library.
+
+AC_DEFUN([CURL_CONFIGURE_CURL_SOCKLEN_T], [
+ AC_REQUIRE([CURL_INCLUDES_WS2TCPIP])dnl
+ AC_REQUIRE([CURL_INCLUDES_SYS_SOCKET])dnl
+ AC_REQUIRE([CURL_PREPROCESS_CALLCONV])dnl
+ #
+ AC_MSG_CHECKING([for curl_socklen_t data type])
+ curl_typeof_curl_socklen_t="unknown"
+ for arg1 in int SOCKET; do
+ for arg2 in 'struct sockaddr' void; do
+ for t in socklen_t int size_t 'unsigned int' long 'unsigned long' void; do
+ if test "$curl_typeof_curl_socklen_t" = "unknown"; then
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_ws2tcpip
+ $curl_includes_sys_socket
+ $curl_preprocess_callconv
+ extern int FUNCALLCONV getpeername($arg1, $arg2 *, $t *);
+ ]],[[
+ $t *lenptr = 0;
+ if(0 != getpeername(0, 0, lenptr))
+ return 1;
+ ]])
+ ],[
+ curl_typeof_curl_socklen_t="$t"
+ ])
+ fi
+ done
+ done
+ done
+ for t in socklen_t int; do
+ if test "$curl_typeof_curl_socklen_t" = "void"; then
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_sys_socket
+ typedef $t curl_socklen_t;
+ ]],[[
+ curl_socklen_t dummy;
+ ]])
+ ],[
+ curl_typeof_curl_socklen_t="$t"
+ ])
+ fi
+ done
+ AC_MSG_RESULT([$curl_typeof_curl_socklen_t])
+ if test "$curl_typeof_curl_socklen_t" = "void" ||
+ test "$curl_typeof_curl_socklen_t" = "unknown"; then
+ AC_MSG_ERROR([cannot find data type for curl_socklen_t.])
+ fi
+ #
+ AC_MSG_CHECKING([size of curl_socklen_t])
+ curl_sizeof_curl_socklen_t="unknown"
+ curl_pull_headers_socklen_t="unknown"
+ if test "$ac_cv_header_ws2tcpip_h" = "yes"; then
+ tst_pull_header_checks='none ws2tcpip'
+ tst_size_checks='4'
+ else
+ tst_pull_header_checks='none systypes syssocket'
+ tst_size_checks='4 8 2'
+ fi
+ for tst_size in $tst_size_checks; do
+ for tst_pull_headers in $tst_pull_header_checks; do
+ if test "$curl_sizeof_curl_socklen_t" = "unknown"; then
+ case $tst_pull_headers in
+ ws2tcpip)
+ tmp_includes="$curl_includes_ws2tcpip"
+ ;;
+ systypes)
+ tmp_includes="$curl_includes_sys_types"
+ ;;
+ syssocket)
+ tmp_includes="$curl_includes_sys_socket"
+ ;;
+ *)
+ tmp_includes=""
+ ;;
+ esac
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $tmp_includes
+ typedef $curl_typeof_curl_socklen_t curl_socklen_t;
+ typedef char dummy_arr[sizeof(curl_socklen_t) == $tst_size ? 1 : -1];
+ ]],[[
+ curl_socklen_t dummy;
+ ]])
+ ],[
+ curl_sizeof_curl_socklen_t="$tst_size"
+ curl_pull_headers_socklen_t="$tst_pull_headers"
+ ])
+ fi
+ done
+ done
+ AC_MSG_RESULT([$curl_sizeof_curl_socklen_t])
+ if test "$curl_sizeof_curl_socklen_t" = "unknown"; then
+ AC_MSG_ERROR([cannot find out size of curl_socklen_t.])
+ fi
+ #
+ case $curl_pull_headers_socklen_t in
+ ws2tcpip)
+ CURL_DEFINE_UNQUOTED([CURL_PULL_WS2TCPIP_H])
+ ;;
+ systypes)
+ CURL_DEFINE_UNQUOTED([CURL_PULL_SYS_TYPES_H])
+ ;;
+ syssocket)
+ CURL_DEFINE_UNQUOTED([CURL_PULL_SYS_TYPES_H])
+ CURL_DEFINE_UNQUOTED([CURL_PULL_SYS_SOCKET_H])
+ ;;
+ esac
+ CURL_DEFINE_UNQUOTED([CURL_TYPEOF_CURL_SOCKLEN_T], [$curl_typeof_curl_socklen_t])
+ CURL_DEFINE_UNQUOTED([CURL_SIZEOF_CURL_SOCKLEN_T], [$curl_sizeof_curl_socklen_t])
+])
+
+
+dnl CURL_CHECK_FUNC_SELECT
+dnl -------------------------------------------------
+dnl Test if the socket select() function is available,
+dnl and check its return type and the types of its
+dnl arguments. If the function succeeds HAVE_SELECT
+dnl will be defined, defining the types of the
+dnl arguments in SELECT_TYPE_ARG1, SELECT_TYPE_ARG234
+dnl and SELECT_TYPE_ARG5, defining the type of the
+dnl function return value in SELECT_TYPE_RETV, and
+dnl also defining the type qualifier of fifth argument
+dnl in SELECT_QUAL_ARG5.
+
+AC_DEFUN([CURL_CHECK_FUNC_SELECT], [
+ AC_REQUIRE([CURL_CHECK_STRUCT_TIMEVAL])dnl
+ AC_CHECK_HEADERS(sys/select.h sys/socket.h)
+ #
+ AC_MSG_CHECKING([for select])
+ AC_LINK_IFELSE([
+ AC_LANG_PROGRAM([[
+#undef inline
+#ifdef HAVE_WINDOWS_H
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#ifdef HAVE_WINSOCK2_H
+#include <winsock2.h>
+#else
+#ifdef HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
+#endif
+#endif
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h>
+#ifdef TIME_WITH_SYS_TIME
+#include <time.h>
+#endif
+#else
+#ifdef HAVE_TIME_H
+#include <time.h>
+#endif
+#endif
+#ifndef HAVE_WINDOWS_H
+#ifdef HAVE_SYS_SELECT_H
+#include <sys/select.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#endif
+ ]],[[
+ select(0, 0, 0, 0, 0);
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ curl_cv_select="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ curl_cv_select="no"
+ ])
+ #
+ if test "$curl_cv_select" = "yes"; then
+ AC_CACHE_CHECK([types of args and return type for select],
+ [curl_cv_func_select_args], [
+ curl_cv_func_select_args="unknown"
+ for sel_retv in 'int' 'ssize_t'; do
+ for sel_arg1 in 'int' 'ssize_t' 'size_t' 'unsigned long int' 'unsigned int'; do
+ for sel_arg234 in 'fd_set *' 'int *' 'void *'; do
+ for sel_arg5 in 'struct timeval *' 'const struct timeval *'; do
+ if test "$curl_cv_func_select_args" = "unknown"; then
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+#undef inline
+#ifdef HAVE_WINDOWS_H
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#ifdef HAVE_WINSOCK2_H
+#include <winsock2.h>
+#else
+#ifdef HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
+#endif
+#define SELECTCALLCONV PASCAL
+#endif
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h>
+#ifdef TIME_WITH_SYS_TIME
+#include <time.h>
+#endif
+#else
+#ifdef HAVE_TIME_H
+#include <time.h>
+#endif
+#endif
+#ifndef HAVE_WINDOWS_H
+#ifdef HAVE_SYS_SELECT_H
+#include <sys/select.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#define SELECTCALLCONV
+#endif
+#ifndef HAVE_STRUCT_TIMEVAL
+ struct timeval {
+ long tv_sec;
+ long tv_usec;
+ };
+#endif
+ extern $sel_retv SELECTCALLCONV select($sel_arg1,
+ $sel_arg234,
+ $sel_arg234,
+ $sel_arg234,
+ $sel_arg5);
+ ]],[[
+ $sel_arg1 nfds=0;
+ $sel_arg234 rfds=0;
+ $sel_arg234 wfds=0;
+ $sel_arg234 efds=0;
+ $sel_retv res = select(nfds, rfds, wfds, efds, 0);
+ ]])
+ ],[
+ curl_cv_func_select_args="$sel_arg1,$sel_arg234,$sel_arg5,$sel_retv"
+ ])
+ fi
+ done
+ done
+ done
+ done
+ ]) # AC-CACHE-CHECK
+ if test "$curl_cv_func_select_args" = "unknown"; then
+ AC_MSG_WARN([Cannot find proper types to use for select args])
+ AC_MSG_WARN([HAVE_SELECT will not be defined])
+ else
+ select_prev_IFS=$IFS; IFS=','
+ set dummy `echo "$curl_cv_func_select_args" | sed 's/\*/\*/g'`
+ IFS=$select_prev_IFS
+ shift
+ #
+ sel_qual_type_arg5=$[3]
+ #
+ AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG1, $[1],
+ [Define to the type of arg 1 for select.])
+ AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG234, $[2],
+ [Define to the type of args 2, 3 and 4 for select.])
+ AC_DEFINE_UNQUOTED(SELECT_TYPE_RETV, $[4],
+ [Define to the function return type for select.])
+ #
+ prev_sh_opts=$-
+ #
+ case $prev_sh_opts in
+ *f*)
+ ;;
+ *)
+ set -f
+ ;;
+ esac
+ #
+ case "$sel_qual_type_arg5" in
+ const*)
+ sel_qual_arg5=const
+ sel_type_arg5=`echo $sel_qual_type_arg5 | sed 's/^const //'`
+ ;;
+ *)
+ sel_qual_arg5=
+ sel_type_arg5=$sel_qual_type_arg5
+ ;;
+ esac
+ #
+ AC_DEFINE_UNQUOTED(SELECT_QUAL_ARG5, $sel_qual_arg5,
+ [Define to the type qualifier of arg 5 for select.])
+ AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG5, $sel_type_arg5,
+ [Define to the type of arg 5 for select.])
+ #
+ case $prev_sh_opts in
+ *f*)
+ ;;
+ *)
+ set +f
+ ;;
+ esac
+ #
+ AC_DEFINE_UNQUOTED(HAVE_SELECT, 1,
+ [Define to 1 if you have the select function.])
+ ac_cv_func_select="yes"
+ fi
+ fi
+])
+
+
+# This is only a temporary fix. This macro is here to replace the broken one
+# delivered by the automake project (including the 1.9.6 release). As soon as
+# they ship a working version we SHOULD remove this work-around.
+
+AC_DEFUN([AM_MISSING_HAS_RUN],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+test x"${MISSING+set}" = xset || MISSING="\${SHELL} \"$am_aux_dir/missing\""
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+ am_missing_run="$MISSING --run "
+else
+ am_missing_run=
+ AC_MSG_WARN([`missing' script is too old or missing])
+fi
+])
+
+
+dnl CURL_VERIFY_RUNTIMELIBS
+dnl -------------------------------------------------
+dnl Verify that the shared libs found so far can be used when running
+dnl programs, since otherwise the situation will create odd configure errors
+dnl that are misleading people.
+dnl
+dnl Make sure this test is run BEFORE the first test in the script that
+dnl runs anything, which at the time of this writing is the AC_CHECK_SIZEOF
+dnl macro. It must also run AFTER all lib-checking macros are complete.
+
+AC_DEFUN([CURL_VERIFY_RUNTIMELIBS], [
+
+ dnl this test is of course not sensible if we are cross-compiling!
+ if test "x$cross_compiling" != xyes; then
+
+ dnl just run a program to verify that the libs checked for previous to this
+ dnl point also is available run-time!
+ AC_MSG_CHECKING([run-time libs availability])
+ AC_TRY_RUN([
+main()
+{
+ return 0;
+}
+],
+ AC_MSG_RESULT([fine]),
+ AC_MSG_RESULT([failed])
+ AC_MSG_ERROR([one or more libs available at link-time are not available run-time. Libs used at link-time: $LIBS])
+ )
+
+ dnl if this test fails, configure has already stopped
+ fi
+])
+
+
+dnl CURL_CHECK_VARIADIC_MACROS
+dnl -------------------------------------------------
+dnl Check compiler support of variadic macros
+
+AC_DEFUN([CURL_CHECK_VARIADIC_MACROS], [
+ AC_CACHE_CHECK([for compiler support of C99 variadic macro style],
+ [curl_cv_variadic_macros_c99], [
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+#define c99_vmacro3(first, ...) fun3(first, __VA_ARGS__)
+#define c99_vmacro2(first, ...) fun2(first, __VA_ARGS__)
+ int fun3(int arg1, int arg2, int arg3);
+ int fun2(int arg1, int arg2);
+ int fun3(int arg1, int arg2, int arg3)
+ { return arg1 + arg2 + arg3; }
+ int fun2(int arg1, int arg2)
+ { return arg1 + arg2; }
+ ]],[[
+ int res3 = c99_vmacro3(1, 2, 3);
+ int res2 = c99_vmacro2(1, 2);
+ ]])
+ ],[
+ curl_cv_variadic_macros_c99="yes"
+ ],[
+ curl_cv_variadic_macros_c99="no"
+ ])
+ ])
+ case "$curl_cv_variadic_macros_c99" in
+ yes)
+ AC_DEFINE_UNQUOTED(HAVE_VARIADIC_MACROS_C99, 1,
+ [Define to 1 if compiler supports C99 variadic macro style.])
+ ;;
+ esac
+ AC_CACHE_CHECK([for compiler support of old gcc variadic macro style],
+ [curl_cv_variadic_macros_gcc], [
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+#define gcc_vmacro3(first, args...) fun3(first, args)
+#define gcc_vmacro2(first, args...) fun2(first, args)
+ int fun3(int arg1, int arg2, int arg3);
+ int fun2(int arg1, int arg2);
+ int fun3(int arg1, int arg2, int arg3)
+ { return arg1 + arg2 + arg3; }
+ int fun2(int arg1, int arg2)
+ { return arg1 + arg2; }
+ ]],[[
+ int res3 = gcc_vmacro3(1, 2, 3);
+ int res2 = gcc_vmacro2(1, 2);
+ ]])
+ ],[
+ curl_cv_variadic_macros_gcc="yes"
+ ],[
+ curl_cv_variadic_macros_gcc="no"
+ ])
+ ])
+ case "$curl_cv_variadic_macros_gcc" in
+ yes)
+ AC_DEFINE_UNQUOTED(HAVE_VARIADIC_MACROS_GCC, 1,
+ [Define to 1 if compiler supports old gcc variadic macro style.])
+ ;;
+ esac
+])
+
+
+dnl CURL_CHECK_CA_BUNDLE
+dnl -------------------------------------------------
+dnl Check if a default ca-bundle should be used
+dnl
+dnl regarding the paths this will scan:
+dnl /etc/ssl/certs/ca-certificates.crt Debian systems
+dnl /etc/pki/tls/certs/ca-bundle.crt Redhat and Mandriva
+dnl /usr/share/ssl/certs/ca-bundle.crt old(er) Redhat
+dnl /usr/local/share/certs/ca-root.crt FreeBSD
+dnl /etc/ssl/cert.pem OpenBSD
+dnl /etc/ssl/certs/ (ca path) SUSE
+
+AC_DEFUN([CURL_CHECK_CA_BUNDLE], [
+
+ AC_MSG_CHECKING([default CA cert bundle/path])
+
+ AC_ARG_WITH(ca-bundle,
+AC_HELP_STRING([--with-ca-bundle=FILE], [File name to use as CA bundle])
+AC_HELP_STRING([--without-ca-bundle], [Don't use a default CA bundle]),
+ [
+ want_ca="$withval"
+ if test "x$want_ca" = "xyes"; then
+ AC_MSG_ERROR([--with-ca-bundle=FILE requires a path to the CA bundle])
+ fi
+ ],
+ [ want_ca="unset" ])
+ AC_ARG_WITH(ca-path,
+AC_HELP_STRING([--with-ca-path=DIRECTORY], [Directory to use as CA path])
+AC_HELP_STRING([--without-ca-path], [Don't use a default CA path]),
+ [
+ want_capath="$withval"
+ if test "x$want_capath" = "xyes"; then
+ AC_MSG_ERROR([--with-ca-path=DIRECTORY requires a path to the CA path directory])
+ fi
+ ],
+ [ want_capath="unset"])
+
+ if test "x$want_ca" != "xno" -a "x$want_ca" != "xunset" -a \
+ "x$want_capath" != "xno" -a "x$want_capath" != "xunset"; then
+ dnl both given
+ AC_MSG_ERROR([Can't specify both --with-ca-bundle and --with-ca-path.])
+ elif test "x$want_ca" != "xno" -a "x$want_ca" != "xunset"; then
+ dnl --with-ca-bundle given
+ ca="$want_ca"
+ capath="no"
+ elif test "x$want_capath" != "xno" -a "x$want_capath" != "xunset"; then
+ dnl --with-ca-path given
+ if test "x$OPENSSL_ENABLED" != "x1"; then
+ AC_MSG_ERROR([--with-ca-path only works with openSSL])
+ fi
+ capath="$want_capath"
+ ca="no"
+ else
+ dnl neither of --with-ca-* given
+ dnl first try autodetecting a CA bundle , then a CA path
+ dnl both autodetections can be skipped by --without-ca-*
+ ca="no"
+ capath="no"
+ if test "x$want_ca" = "xunset"; then
+ dnl the path we previously would have installed the curl ca bundle
+ dnl to, and thus we now check for an already existing cert in that place
+ dnl in case we find no other
+ if test "x$prefix" != xNONE; then
+ cac="${prefix}/share/curl/curl-ca-bundle.crt"
+ else
+ cac="$ac_default_prefix/share/curl/curl-ca-bundle.crt"
+ fi
+
+ for a in /etc/ssl/certs/ca-certificates.crt \
+ /etc/pki/tls/certs/ca-bundle.crt \
+ /usr/share/ssl/certs/ca-bundle.crt \
+ /usr/local/share/certs/ca-root.crt \
+ /etc/ssl/cert.pem \
+ "$cac"; do
+ if test -f "$a"; then
+ ca="$a"
+ break
+ fi
+ done
+ fi
+ if test "x$want_capath" = "xunset" -a "x$ca" = "xno" -a \
+ "x$OPENSSL_ENABLED" = "x1"; then
+ for a in /etc/ssl/certs/; do
+ if test -d "$a" && ls "$a"/[[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]].0 >/dev/null 2>/dev/null; then
+ capath="$a"
+ break
+ fi
+ done
+ fi
+ fi
+
+
+
+ if test "x$ca" != "xno"; then
+ CURL_CA_BUNDLE='"'$ca'"'
+ AC_DEFINE_UNQUOTED(CURL_CA_BUNDLE, "$ca", [Location of default ca bundle])
+ AC_SUBST(CURL_CA_BUNDLE)
+ AC_MSG_RESULT([$ca])
+ elif test "x$capath" != "xno"; then
+ CURL_CA_PATH="\"$capath\""
+ AC_DEFINE_UNQUOTED(CURL_CA_PATH, "$capath", [Location of default ca path])
+ AC_MSG_RESULT([$capath (capath)])
+ else
+ AC_MSG_RESULT([no])
+ fi
+])
+
+
+dnl DO_CURL_OFF_T_CHECK (TYPE, SIZE)
+dnl -------------------------------------------------
+dnl Internal macro for CURL_CONFIGURE_CURL_OFF_T
+
+AC_DEFUN([DO_CURL_OFF_T_CHECK], [
+ AC_REQUIRE([CURL_INCLUDES_INTTYPES])dnl
+ if test "$curl_typeof_curl_off_t" = "unknown" && test ! -z "$1"; then
+ tmp_includes=""
+ tmp_source=""
+ tmp_fmt=""
+ case AS_TR_SH([$1]) in
+ int64_t)
+ tmp_includes="$curl_includes_inttypes"
+ tmp_source="char f@<:@@:>@ = PRId64;"
+ tmp_fmt="PRId64"
+ ;;
+ int32_t)
+ tmp_includes="$curl_includes_inttypes"
+ tmp_source="char f@<:@@:>@ = PRId32;"
+ tmp_fmt="PRId32"
+ ;;
+ int16_t)
+ tmp_includes="$curl_includes_inttypes"
+ tmp_source="char f@<:@@:>@ = PRId16;"
+ tmp_fmt="PRId16"
+ ;;
+ esac
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $tmp_includes
+ typedef $1 curl_off_t;
+ typedef char dummy_arr[sizeof(curl_off_t) == $2 ? 1 : -1];
+ ]],[[
+ $tmp_source
+ curl_off_t dummy;
+ ]])
+ ],[
+ if test -z "$tmp_fmt"; then
+ curl_typeof_curl_off_t="$1"
+ curl_sizeof_curl_off_t="$2"
+ else
+ CURL_CHECK_DEF([$tmp_fmt], [$curl_includes_inttypes], [silent])
+ AS_VAR_PUSHDEF([tmp_HaveFmtDef], [curl_cv_have_def_$tmp_fmt])dnl
+ AS_VAR_PUSHDEF([tmp_FmtDef], [curl_cv_def_$tmp_fmt])dnl
+ if test AS_VAR_GET(tmp_HaveFmtDef) = "yes"; then
+ curl_format_curl_off_t=AS_VAR_GET(tmp_FmtDef)
+ curl_typeof_curl_off_t="$1"
+ curl_sizeof_curl_off_t="$2"
+ fi
+ AS_VAR_POPDEF([tmp_FmtDef])dnl
+ AS_VAR_POPDEF([tmp_HaveFmtDef])dnl
+ fi
+ ])
+ fi
+])
+
+
+dnl DO_CURL_OFF_T_SUFFIX_CHECK (TYPE)
+dnl -------------------------------------------------
+dnl Internal macro for CURL_CONFIGURE_CURL_OFF_T
+
+AC_DEFUN([DO_CURL_OFF_T_SUFFIX_CHECK], [
+ AC_REQUIRE([CURL_INCLUDES_INTTYPES])dnl
+ AC_MSG_CHECKING([constant suffix string for curl_off_t])
+ #
+ curl_suffix_curl_off_t="unknown"
+ curl_suffix_curl_off_tu="unknown"
+ #
+ case AS_TR_SH([$1]) in
+ long_long | __longlong | __longlong_t)
+ tst_suffixes="LL::"
+ ;;
+ long)
+ tst_suffixes="L::"
+ ;;
+ int)
+ tst_suffixes="::"
+ ;;
+ __int64 | int64_t)
+ tst_suffixes="LL:i64::"
+ ;;
+ __int32 | int32_t)
+ tst_suffixes="L:i32::"
+ ;;
+ __int16 | int16_t)
+ tst_suffixes="L:i16::"
+ ;;
+ *)
+ AC_MSG_ERROR([unexpected data type $1])
+ ;;
+ esac
+ #
+ old_IFS=$IFS; IFS=':'
+ for tmp_ssuf in $tst_suffixes ; do
+ IFS=$old_IFS
+ if test "x$curl_suffix_curl_off_t" = "xunknown"; then
+ case $tmp_ssuf in
+ i64 | i32 | i16)
+ tmp_usuf="u$tmp_ssuf"
+ ;;
+ LL | L)
+ tmp_usuf="U$tmp_ssuf"
+ ;;
+ *)
+ tmp_usuf=""
+ ;;
+ esac
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_inttypes
+ typedef $1 new_t;
+ ]],[[
+ new_t s1;
+ new_t s2;
+ s1 = -10$tmp_ssuf ;
+ s2 = 20$tmp_ssuf ;
+ if(s1 > s2)
+ return 1;
+ ]])
+ ],[
+ curl_suffix_curl_off_t="$tmp_ssuf"
+ curl_suffix_curl_off_tu="$tmp_usuf"
+ ])
+ fi
+ done
+ IFS=$old_IFS
+ #
+ if test "x$curl_suffix_curl_off_t" = "xunknown"; then
+ AC_MSG_ERROR([cannot find constant suffix string for curl_off_t.])
+ else
+ AC_MSG_RESULT([$curl_suffix_curl_off_t])
+ AC_MSG_CHECKING([constant suffix string for unsigned curl_off_t])
+ AC_MSG_RESULT([$curl_suffix_curl_off_tu])
+ fi
+ #
+])
+
+
+dnl CURL_CONFIGURE_CURL_OFF_T
+dnl -------------------------------------------------
+dnl Find out suitable curl_off_t data type definition and associated
+dnl items, and make the appropriate definitions used in template file
+dnl include/curl/curlbuild.h.in to properly configure the library.
+
+AC_DEFUN([CURL_CONFIGURE_CURL_OFF_T], [
+ AC_REQUIRE([CURL_INCLUDES_INTTYPES])dnl
+ #
+ AC_BEFORE([$0],[AC_SYS_LARGEFILE])dnl
+ AC_BEFORE([$0],[CURL_CONFIGURE_REENTRANT])dnl
+ AC_BEFORE([$0],[CURL_CHECK_AIX_ALL_SOURCE])dnl
+ #
+ if test -z "$SED"; then
+ AC_MSG_ERROR([SED not set. Cannot continue without SED being set.])
+ fi
+ #
+ AC_CHECK_SIZEOF(long)
+ AC_CHECK_SIZEOF(void*)
+ #
+ if test -z "$ac_cv_sizeof_long" ||
+ test "$ac_cv_sizeof_long" -eq "0"; then
+ AC_MSG_ERROR([cannot find out size of long.])
+ fi
+ if test -z "$ac_cv_sizeof_voidp" ||
+ test "$ac_cv_sizeof_voidp" -eq "0"; then
+ AC_MSG_ERROR([cannot find out size of void*.])
+ fi
+ #
+ x_LP64_long=""
+ x_LP32_long=""
+ x_LP16_long=""
+ #
+ if test "$ac_cv_sizeof_long" -eq "8" &&
+ test "$ac_cv_sizeof_voidp" -ge "8"; then
+ x_LP64_long="long"
+ elif test "$ac_cv_sizeof_long" -eq "4" &&
+ test "$ac_cv_sizeof_voidp" -ge "4"; then
+ x_LP32_long="long"
+ elif test "$ac_cv_sizeof_long" -eq "2" &&
+ test "$ac_cv_sizeof_voidp" -ge "2"; then
+ x_LP16_long="long"
+ fi
+ #
+ dnl DO_CURL_OFF_T_CHECK results are stored in next 3 vars
+ #
+ curl_typeof_curl_off_t="unknown"
+ curl_sizeof_curl_off_t="unknown"
+ curl_format_curl_off_t="unknown"
+ curl_format_curl_off_tu="unknown"
+ #
+ if test "$curl_typeof_curl_off_t" = "unknown"; then
+ AC_MSG_CHECKING([for 64-bit curl_off_t data type])
+ for t8 in \
+ "$x_LP64_long" \
+ 'int64_t' \
+ '__int64' \
+ 'long long' \
+ '__longlong' \
+ '__longlong_t' ; do
+ DO_CURL_OFF_T_CHECK([$t8], [8])
+ done
+ AC_MSG_RESULT([$curl_typeof_curl_off_t])
+ fi
+ if test "$curl_typeof_curl_off_t" = "unknown"; then
+ AC_MSG_CHECKING([for 32-bit curl_off_t data type])
+ for t4 in \
+ "$x_LP32_long" \
+ 'int32_t' \
+ '__int32' \
+ 'int' ; do
+ DO_CURL_OFF_T_CHECK([$t4], [4])
+ done
+ AC_MSG_RESULT([$curl_typeof_curl_off_t])
+ fi
+ if test "$curl_typeof_curl_off_t" = "unknown"; then
+ AC_MSG_CHECKING([for 16-bit curl_off_t data type])
+ for t2 in \
+ "$x_LP16_long" \
+ 'int16_t' \
+ '__int16' \
+ 'int' ; do
+ DO_CURL_OFF_T_CHECK([$t2], [2])
+ done
+ AC_MSG_RESULT([$curl_typeof_curl_off_t])
+ fi
+ if test "$curl_typeof_curl_off_t" = "unknown"; then
+ AC_MSG_ERROR([cannot find data type for curl_off_t.])
+ fi
+ #
+ AC_MSG_CHECKING([size of curl_off_t])
+ AC_MSG_RESULT([$curl_sizeof_curl_off_t])
+ #
+ AC_MSG_CHECKING([formatting string directive for curl_off_t])
+ if test "$curl_format_curl_off_t" != "unknown"; then
+ x_pull_headers="yes"
+ curl_format_curl_off_t=`echo "$curl_format_curl_off_t" | "$SED" 's/[["]]//g'`
+ curl_format_curl_off_tu=`echo "$curl_format_curl_off_t" | "$SED" 's/i$/u/'`
+ curl_format_curl_off_tu=`echo "$curl_format_curl_off_tu" | "$SED" 's/d$/u/'`
+ curl_format_curl_off_tu=`echo "$curl_format_curl_off_tu" | "$SED" 's/D$/U/'`
+ else
+ x_pull_headers="no"
+ case AS_TR_SH([$curl_typeof_curl_off_t]) in
+ long_long | __longlong | __longlong_t)
+ curl_format_curl_off_t="lld"
+ curl_format_curl_off_tu="llu"
+ ;;
+ long)
+ curl_format_curl_off_t="ld"
+ curl_format_curl_off_tu="lu"
+ ;;
+ int)
+ curl_format_curl_off_t="d"
+ curl_format_curl_off_tu="u"
+ ;;
+ __int64)
+ curl_format_curl_off_t="I64d"
+ curl_format_curl_off_tu="I64u"
+ ;;
+ __int32)
+ curl_format_curl_off_t="I32d"
+ curl_format_curl_off_tu="I32u"
+ ;;
+ __int16)
+ curl_format_curl_off_t="I16d"
+ curl_format_curl_off_tu="I16u"
+ ;;
+ *)
+ AC_MSG_ERROR([cannot find print format string for curl_off_t.])
+ ;;
+ esac
+ fi
+ AC_MSG_RESULT(["$curl_format_curl_off_t"])
+ #
+ AC_MSG_CHECKING([formatting string directive for unsigned curl_off_t])
+ AC_MSG_RESULT(["$curl_format_curl_off_tu"])
+ #
+ DO_CURL_OFF_T_SUFFIX_CHECK([$curl_typeof_curl_off_t])
+ #
+ if test "$x_pull_headers" = "yes"; then
+ if test "x$ac_cv_header_sys_types_h" = "xyes"; then
+ CURL_DEFINE_UNQUOTED([CURL_PULL_SYS_TYPES_H])
+ fi
+ if test "x$ac_cv_header_stdint_h" = "xyes"; then
+ CURL_DEFINE_UNQUOTED([CURL_PULL_STDINT_H])
+ fi
+ if test "x$ac_cv_header_inttypes_h" = "xyes"; then
+ CURL_DEFINE_UNQUOTED([CURL_PULL_INTTYPES_H])
+ fi
+ fi
+ #
+ CURL_DEFINE_UNQUOTED([CURL_TYPEOF_CURL_OFF_T], [$curl_typeof_curl_off_t])
+ CURL_DEFINE_UNQUOTED([CURL_FORMAT_CURL_OFF_T], ["$curl_format_curl_off_t"])
+ CURL_DEFINE_UNQUOTED([CURL_FORMAT_CURL_OFF_TU], ["$curl_format_curl_off_tu"])
+ CURL_DEFINE_UNQUOTED([CURL_FORMAT_OFF_T], ["%$curl_format_curl_off_t"])
+ CURL_DEFINE_UNQUOTED([CURL_SIZEOF_CURL_OFF_T], [$curl_sizeof_curl_off_t])
+ CURL_DEFINE_UNQUOTED([CURL_SUFFIX_CURL_OFF_T], [$curl_suffix_curl_off_t])
+ CURL_DEFINE_UNQUOTED([CURL_SUFFIX_CURL_OFF_TU], [$curl_suffix_curl_off_tu])
+ #
+])
+
+
+dnl CURL_CHECK_WIN32_LARGEFILE
+dnl -------------------------------------------------
+dnl Check if curl's WIN32 large file will be used
+
+AC_DEFUN([CURL_CHECK_WIN32_LARGEFILE], [
+ AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
+ AC_MSG_CHECKING([whether build target supports WIN32 file API])
+ curl_win32_file_api="no"
+ if test "$ac_cv_header_windows_h" = "yes"; then
+ if test x"$enable_largefile" != "xno"; then
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ ]],[[
+#if !defined(_WIN32_WCE) && \
+ (defined(__MINGW32__) || \
+ (defined(_MSC_VER) && (defined(_WIN32) || defined(_WIN64))))
+ int dummy=1;
+#else
+ WIN32 large file API not supported.
+#endif
+ ]])
+ ],[
+ curl_win32_file_api="win32_large_files"
+ ])
+ fi
+ if test "$curl_win32_file_api" = "no"; then
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ ]],[[
+#if defined(_WIN32_WCE) || defined(__MINGW32__) || defined(_MSC_VER)
+ int dummy=1;
+#else
+ WIN32 small file API not supported.
+#endif
+ ]])
+ ],[
+ curl_win32_file_api="win32_small_files"
+ ])
+ fi
+ fi
+ case "$curl_win32_file_api" in
+ win32_large_files)
+ AC_MSG_RESULT([yes (large file enabled)])
+ AC_DEFINE_UNQUOTED(USE_WIN32_LARGE_FILES, 1,
+ [Define to 1 if you are building a Windows target with large file support.])
+ ;;
+ win32_small_files)
+ AC_MSG_RESULT([yes (large file disabled)])
+ AC_DEFINE_UNQUOTED(USE_WIN32_LARGE_FILES, 1,
+ [Define to 1 if you are building a Windows target without large file support.])
+ ;;
+ *)
+ AC_MSG_RESULT([no])
+ ;;
+ esac
+])
+
+dnl CURL_EXPORT_PCDIR ($pcdir)
+dnl ------------------------
+dnl if $pcdir is not empty, set PKG_CONFIG_LIBDIR to $pcdir and export
+dnl
+dnl we need this macro since pkg-config distinguishes among empty and unset
+dnl variable while checking PKG_CONFIG_LIBDIR
+dnl
+
+AC_DEFUN([CURL_EXPORT_PCDIR], [
+ if test -n "$1"; then
+ PKG_CONFIG_LIBDIR="$1"
+ export PKG_CONFIG_LIBDIR
+ fi
+])
+
+dnl CURL_CHECK_PKGCONFIG ($module, [$pcdir])
+dnl ------------------------
+dnl search for the pkg-config tool (if not cross-compiling). Set the PKGCONFIG
+dnl variable to hold the path to it, or 'no' if not found/present.
+dnl
+dnl If pkg-config is present, check that it has info about the $module or
+dnl return "no" anyway!
+dnl
+dnl Optionally PKG_CONFIG_LIBDIR may be given as $pcdir.
+dnl
+
+AC_DEFUN([CURL_CHECK_PKGCONFIG], [
+
+ PKGCONFIG="no"
+
+ if test x$cross_compiling = xyes; then
+ dnl see if there's a pkg-specific for this host setup
+ AC_PATH_PROG( PKGCONFIG, ${host}-pkg-config, no,
+ $PATH:/usr/bin:/usr/local/bin)
+ fi
+
+ if test x$PKGCONFIG = xno; then
+ AC_PATH_PROG( PKGCONFIG, pkg-config, no, $PATH:/usr/bin:/usr/local/bin)
+ fi
+
+ if test x$PKGCONFIG != xno; then
+ AC_MSG_CHECKING([for $1 options with pkg-config])
+ dnl ask pkg-config about $1
+ itexists=`CURL_EXPORT_PCDIR([$2]) dnl
+ $PKGCONFIG --exists $1 >/dev/null 2>&1 && echo 1`
+
+ if test -z "$itexists"; then
+ dnl pkg-config does not have info about the given module! set the
+ dnl variable to 'no'
+ PKGCONFIG="no"
+ AC_MSG_RESULT([no])
+ else
+ AC_MSG_RESULT([found])
+ fi
+ fi
+])
diff --git a/aclocal.m4 b/aclocal.m4
new file mode 100644
index 0000000..e05a191
--- /dev/null
+++ b/aclocal.m4
@@ -0,0 +1,903 @@
+# generated automatically by aclocal 1.9.6 -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005 Free Software Foundation, Inc.
+# This file 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.
+
+# Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc.
+#
+# This file 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.
+
+# AM_AUTOMAKE_VERSION(VERSION)
+# ----------------------------
+# Automake X.Y traces this macro to ensure aclocal.m4 has been
+# generated from the m4 files accompanying Automake X.Y.
+AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.9"])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION so it can be traced.
+# This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+ [AM_AUTOMAKE_VERSION([1.9.6])])
+
+# AM_AUX_DIR_EXPAND -*- Autoconf -*-
+
+# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
+#
+# This file 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.
+
+# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
+# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to
+# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
+#
+# Of course, Automake must honor this variable whenever it calls a
+# tool from the auxiliary directory. The problem is that $srcdir (and
+# therefore $ac_aux_dir as well) can be either absolute or relative,
+# depending on how configure is run. This is pretty annoying, since
+# it makes $ac_aux_dir quite unusable in subdirectories: in the top
+# source directory, any form will work fine, but in subdirectories a
+# relative path needs to be adjusted first.
+#
+# $ac_aux_dir/missing
+# fails when called from a subdirectory if $ac_aux_dir is relative
+# $top_srcdir/$ac_aux_dir/missing
+# fails if $ac_aux_dir is absolute,
+# fails when called from a subdirectory in a VPATH build with
+# a relative $ac_aux_dir
+#
+# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
+# are both prefixed by $srcdir. In an in-source build this is usually
+# harmless because $srcdir is `.', but things will broke when you
+# start a VPATH build or use an absolute $srcdir.
+#
+# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
+# iff we strip the leading $srcdir from $ac_aux_dir. That would be:
+# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
+# and then we would define $MISSING as
+# MISSING="\${SHELL} $am_aux_dir/missing"
+# This will work as long as MISSING is not called from configure, because
+# unfortunately $(top_srcdir) has no meaning in configure.
+# However there are other variables, like CC, which are often used in
+# configure, and could therefore not use this "fixed" $ac_aux_dir.
+#
+# Another solution, used here, is to always expand $ac_aux_dir to an
+# absolute PATH. The drawback is that using absolute paths prevent a
+# configured tree to be moved without reconfiguration.
+
+AC_DEFUN([AM_AUX_DIR_EXPAND],
+[dnl Rely on autoconf to set up CDPATH properly.
+AC_PREREQ([2.50])dnl
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+])
+
+# AM_CONDITIONAL -*- Autoconf -*-
+
+# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005
+# Free Software Foundation, Inc.
+#
+# This file 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.
+
+# serial 7
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ(2.52)dnl
+ ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])],
+ [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])
+AC_SUBST([$1_FALSE])
+if $2; then
+ $1_TRUE=
+ $1_FALSE='#'
+else
+ $1_TRUE='#'
+ $1_FALSE=
+fi
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+ AC_MSG_ERROR([[conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.]])
+fi])])
+
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
+# Free Software Foundation, Inc.
+#
+# This file 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.
+
+# serial 8
+
+# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
+# written in clear, in which case automake, when reading aclocal.m4,
+# will think it sees a *use*, and therefore will trigger all it's
+# C support machinery. Also note that it means that autoscan, seeing
+# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
+
+
+# _AM_DEPENDENCIES(NAME)
+# ----------------------
+# See how the compiler implements dependency checking.
+# NAME is "CC", "CXX", "GCJ", or "OBJC".
+# We try a few techniques and use that to set a single cache variable.
+#
+# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
+# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
+# dependency, and given that the user is not expected to run this macro,
+# just rely on AC_PROG_CC.
+AC_DEFUN([_AM_DEPENDENCIES],
+[AC_REQUIRE([AM_SET_DEPDIR])dnl
+AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
+AC_REQUIRE([AM_MAKE_INCLUDE])dnl
+AC_REQUIRE([AM_DEP_TRACK])dnl
+
+ifelse([$1], CC, [depcc="$CC" am_compiler_list=],
+ [$1], CXX, [depcc="$CXX" am_compiler_list=],
+ [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+ [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'],
+ [depcc="$$1" am_compiler_list=])
+
+AC_CACHE_CHECK([dependency style of $depcc],
+ [am_cv_$1_dependencies_compiler_type],
+[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named `D' -- because `-MD' means `put the output
+ # in D'.
+ mkdir conftest.dir
+ # Copy depcomp to subdir because otherwise we won't find it if we're
+ # using a relative directory.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_$1_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
+ fi
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+ # Solaris 8's {/usr,}/bin/sh.
+ touch sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ case $depmode in
+ nosideeffect)
+ # after this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ none) break ;;
+ esac
+ # We check with `-c' and `-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle `-M -o', and we need to detect this.
+ if depmode=$depmode \
+ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_$1_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_$1_dependencies_compiler_type=none
+fi
+])
+AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
+AM_CONDITIONAL([am__fastdep$1], [
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
+])
+
+
+# AM_SET_DEPDIR
+# -------------
+# Choose a directory name for dependency files.
+# This macro is AC_REQUIREd in _AM_DEPENDENCIES
+AC_DEFUN([AM_SET_DEPDIR],
+[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
+])
+
+
+# AM_DEP_TRACK
+# ------------
+AC_DEFUN([AM_DEP_TRACK],
+[AC_ARG_ENABLE(dependency-tracking,
+[ --disable-dependency-tracking speeds up one-time build
+ --enable-dependency-tracking do not reject slow dependency extractors])
+if test "x$enable_dependency_tracking" != xno; then
+ am_depcomp="$ac_aux_dir/depcomp"
+ AMDEPBACKSLASH='\'
+fi
+AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+AC_SUBST([AMDEPBACKSLASH])
+])
+
+# Generate code to set up dependency tracking. -*- Autoconf -*-
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
+# Free Software Foundation, Inc.
+#
+# This file 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.
+
+#serial 3
+
+# _AM_OUTPUT_DEPENDENCY_COMMANDS
+# ------------------------------
+AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+[for mf in $CONFIG_FILES; do
+ # Strip MF so we end up with the name of the file.
+ mf=`echo "$mf" | sed -e 's/:.*$//'`
+ # Check whether this is an Automake generated Makefile or not.
+ # We used to match only the files named `Makefile.in', but
+ # some people rename them; so instead we look at the file content.
+ # Grep'ing the first line is not enough: some people post-process
+ # each Makefile.in and add a new line on top of each file to say so.
+ # So let's grep whole file.
+ if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then
+ dirpart=`AS_DIRNAME("$mf")`
+ else
+ continue
+ fi
+ # Extract the definition of DEPDIR, am__include, and am__quote
+ # from the Makefile without running `make'.
+ DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+ test -z "$DEPDIR" && continue
+ am__include=`sed -n 's/^am__include = //p' < "$mf"`
+ test -z "am__include" && continue
+ am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+ # When using ansi2knr, U may be empty or an underscore; expand it
+ U=`sed -n 's/^U = //p' < "$mf"`
+ # Find all dependency output files, they are included files with
+ # $(DEPDIR) in their names. We invoke sed twice because it is the
+ # simplest approach to changing $(DEPDIR) to its actual value in the
+ # expansion.
+ for file in `sed -n "
+ s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+ # Make sure the directory exists.
+ test -f "$dirpart/$file" && continue
+ fdir=`AS_DIRNAME(["$file"])`
+ AS_MKDIR_P([$dirpart/$fdir])
+ # echo "creating $dirpart/$file"
+ echo '# dummy' > "$dirpart/$file"
+ done
+done
+])# _AM_OUTPUT_DEPENDENCY_COMMANDS
+
+
+# AM_OUTPUT_DEPENDENCY_COMMANDS
+# -----------------------------
+# This macro should only be invoked once -- use via AC_REQUIRE.
+#
+# This code is only required when automatic dependency tracking
+# is enabled. FIXME. This creates each `.P' file that we will
+# need in order to bootstrap the dependency handling code.
+AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
+[AC_CONFIG_COMMANDS([depfiles],
+ [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
+ [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
+])
+
+# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
+# Free Software Foundation, Inc.
+#
+# This file 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.
+
+# serial 8
+
+# AM_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS.
+AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)])
+
+# Do all the work for Automake. -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+# Free Software Foundation, Inc.
+#
+# This file 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.
+
+# serial 12
+
+# 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.
+
+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+# AM_INIT_AUTOMAKE([OPTIONS])
+# -----------------------------------------------
+# The call with PACKAGE and VERSION arguments is the old style
+# call (pre autoconf-2.50), which is being phased out. PACKAGE
+# and VERSION should now be passed to AC_INIT and removed from
+# the call to AM_INIT_AUTOMAKE.
+# We support both call styles for the transition. After
+# the next Automake release, Autoconf can make the AC_INIT
+# arguments mandatory, and then we can depend on a new Autoconf
+# release and drop the old call support.
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_PREREQ([2.58])dnl
+dnl Autoconf wants to disallow AM_ names. We explicitly allow
+dnl the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+AC_REQUIRE([AC_PROG_INSTALL])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
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+ if (cygpath --version) >/dev/null 2>/dev/null; then
+ CYGPATH_W='cygpath -w'
+ else
+ CYGPATH_W=echo
+ fi
+fi
+AC_SUBST([CYGPATH_W])
+
+# Define the identity of the package.
+dnl Distinguish between old-style and new-style calls.
+m4_ifval([$2],
+[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ AC_SUBST([PACKAGE], [$1])dnl
+ AC_SUBST([VERSION], [$2])],
+[_AM_SET_OPTIONS([$1])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+
+_AM_IF_OPTION([no-define],,
+[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
+ AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
+
+# Some tools Automake needs.
+AC_REQUIRE([AM_SANITY_CHECK])dnl
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
+AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
+AM_MISSING_PROG(AUTOCONF, autoconf)
+AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
+AM_MISSING_PROG(AUTOHEADER, autoheader)
+AM_MISSING_PROG(MAKEINFO, makeinfo)
+AM_PROG_INSTALL_SH
+AM_PROG_INSTALL_STRIP
+AC_REQUIRE([AM_PROG_MKDIR_P])dnl
+# We need awk for the "check" target. The system "awk" is bad on
+# some platforms.
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
+ [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+ [_AM_PROG_TAR([v7])])])
+_AM_IF_OPTION([no-dependencies],,
+[AC_PROVIDE_IFELSE([AC_PROG_CC],
+ [_AM_DEPENDENCIES(CC)],
+ [define([AC_PROG_CC],
+ defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+ [_AM_DEPENDENCIES(CXX)],
+ [define([AC_PROG_CXX],
+ defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
+])
+])
+
+
+# When config.status generates a header, we must update the stamp-h file.
+# This file resides in the same directory as the config header
+# that is generated. The stamp files are numbered to have different names.
+
+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+# loop where config.status creates the headers, so we can generate
+# our stamp files there.
+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+[# Compute $1's index in $config_headers.
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+ case $_am_header in
+ $1 | $1:* )
+ break ;;
+ * )
+ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+ esac
+done
+echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count])
+
+# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
+#
+# This file 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.
+
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+install_sh=${install_sh-"$am_aux_dir/install-sh"}
+AC_SUBST(install_sh)])
+
+# Copyright (C) 2003, 2005 Free Software Foundation, Inc.
+#
+# This file 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.
+
+# serial 2
+
+# Check whether the underlying file-system supports filenames
+# with a leading dot. For instance MS-DOS doesn't.
+AC_DEFUN([AM_SET_LEADING_DOT],
+[rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+ am__leading_dot=.
+else
+ am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+AC_SUBST([am__leading_dot])])
+
+# Add --enable-maintainer-mode option to configure. -*- Autoconf -*-
+# From Jim Meyering
+
+# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005
+# Free Software Foundation, Inc.
+#
+# This file 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.
+
+# serial 4
+
+AC_DEFUN([AM_MAINTAINER_MODE],
+[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
+ dnl maintainer-mode is disabled by default
+ AC_ARG_ENABLE(maintainer-mode,
+[ --enable-maintainer-mode enable make rules and dependencies not useful
+ (and sometimes confusing) to the casual installer],
+ USE_MAINTAINER_MODE=$enableval,
+ USE_MAINTAINER_MODE=no)
+ AC_MSG_RESULT([$USE_MAINTAINER_MODE])
+ AM_CONDITIONAL(MAINTAINER_MODE, [test $USE_MAINTAINER_MODE = yes])
+ MAINT=$MAINTAINER_MODE_TRUE
+ AC_SUBST(MAINT)dnl
+]
+)
+
+AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE])
+
+# Check to see how 'make' treats includes. -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
+#
+# This file 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.
+
+# serial 3
+
+# AM_MAKE_INCLUDE()
+# -----------------
+# Check to see how make treats includes.
+AC_DEFUN([AM_MAKE_INCLUDE],
+[am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+ @echo done
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+AC_MSG_CHECKING([for style of include used by $am_make])
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# We grep out `Entering directory' and `Leaving directory'
+# messages which can occur if `w' ends up in MAKEFLAGS.
+# In particular we don't look at `^make:' because GNU make might
+# be invoked under some other name (usually "gmake"), in which
+# case it prints its new name instead of `make'.
+if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
+ am__include=include
+ am__quote=
+ _am_result=GNU
+fi
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+ echo '.include "confinc"' > confmf
+ if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
+ am__include=.include
+ am__quote="\""
+ _am_result=BSD
+ fi
+fi
+AC_SUBST([am__include])
+AC_SUBST([am__quote])
+AC_MSG_RESULT([$_am_result])
+rm -f confinc confmf
+])
+
+# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
+
+# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2005
+# Free Software Foundation, Inc.
+#
+# This file 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.
+
+# serial 4
+
+# AM_MISSING_PROG(NAME, PROGRAM)
+# ------------------------------
+AC_DEFUN([AM_MISSING_PROG],
+[AC_REQUIRE([AM_MISSING_HAS_RUN])
+$1=${$1-"${am_missing_run}$2"}
+AC_SUBST($1)])
+
+
+# AM_MISSING_HAS_RUN
+# ------------------
+# Define MISSING if not defined so far and test if it supports --run.
+# If it does, set am_missing_run to use it, otherwise, to nothing.
+AC_DEFUN([AM_MISSING_HAS_RUN],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+ am_missing_run="$MISSING --run "
+else
+ am_missing_run=
+ AC_MSG_WARN([`missing' script is too old or missing])
+fi
+])
+
+# Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc.
+#
+# This file 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.
+
+# AM_PROG_MKDIR_P
+# ---------------
+# Check whether `mkdir -p' is supported, fallback to mkinstalldirs otherwise.
+#
+# Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories
+# created by `make install' are always world readable, even if the
+# installer happens to have an overly restrictive umask (e.g. 077).
+# This was a mistake. There are at least two reasons why we must not
+# use `-m 0755':
+# - it causes special bits like SGID to be ignored,
+# - it may be too restrictive (some setups expect 775 directories).
+#
+# Do not use -m 0755 and let people choose whatever they expect by
+# setting umask.
+#
+# We cannot accept any implementation of `mkdir' that recognizes `-p'.
+# Some implementations (such as Solaris 8's) are not thread-safe: if a
+# parallel make tries to run `mkdir -p a/b' and `mkdir -p a/c'
+# concurrently, both version can detect that a/ is missing, but only
+# one can create it and the other will error out. Consequently we
+# restrict ourselves to GNU make (using the --version option ensures
+# this.)
+AC_DEFUN([AM_PROG_MKDIR_P],
+[if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
+ # We used to keeping the `.' as first argument, in order to
+ # allow $(mkdir_p) to be used without argument. As in
+ # $(mkdir_p) $(somedir)
+ # where $(somedir) is conditionally defined. However this is wrong
+ # for two reasons:
+ # 1. if the package is installed by a user who cannot write `.'
+ # make install will fail,
+ # 2. the above comment should most certainly read
+ # $(mkdir_p) $(DESTDIR)$(somedir)
+ # so it does not work when $(somedir) is undefined and
+ # $(DESTDIR) is not.
+ # To support the latter case, we have to write
+ # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir),
+ # so the `.' trick is pointless.
+ mkdir_p='mkdir -p --'
+else
+ # On NextStep and OpenStep, the `mkdir' command does not
+ # recognize any option. It will interpret all options as
+ # directories to create, and then abort because `.' already
+ # exists.
+ for d in ./-p ./--version;
+ do
+ test -d $d && rmdir $d
+ done
+ # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists.
+ if test -f "$ac_aux_dir/mkinstalldirs"; then
+ mkdir_p='$(mkinstalldirs)'
+ else
+ mkdir_p='$(install_sh) -d'
+ fi
+fi
+AC_SUBST([mkdir_p])])
+
+# Helper functions for option handling. -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
+#
+# This file 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.
+
+# serial 3
+
+# _AM_MANGLE_OPTION(NAME)
+# -----------------------
+AC_DEFUN([_AM_MANGLE_OPTION],
+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+
+# _AM_SET_OPTION(NAME)
+# ------------------------------
+# Set option NAME. Presently that only means defining a flag for this option.
+AC_DEFUN([_AM_SET_OPTION],
+[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
+
+# _AM_SET_OPTIONS(OPTIONS)
+# ----------------------------------
+# OPTIONS is a space-separated list of Automake options.
+AC_DEFUN([_AM_SET_OPTIONS],
+[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+
+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+# -------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+AC_DEFUN([_AM_IF_OPTION],
+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+
+# Check to make sure that the build environment is sane. -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
+# Free Software Foundation, Inc.
+#
+# This file 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.
+
+# serial 4
+
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# 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 conftest.file 2> /dev/null`
+ if test "$[*]" = "X"; then
+ # -L didn't work.
+ set X `ls -t $srcdir/configure conftest.file`
+ fi
+ rm -f conftest.file
+ if test "$[*]" != "X $srcdir/configure conftest.file" \
+ && test "$[*]" != "X conftest.file $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]" = conftest.file
+ )
+then
+ # Ok.
+ :
+else
+ AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+AC_MSG_RESULT(yes)])
+
+# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
+#
+# This file 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.
+
+# AM_PROG_INSTALL_STRIP
+# ---------------------
+# One issue with vendor `install' (even GNU) is that you can't
+# specify the program used to strip binaries. This is especially
+# annoying in cross-compiling environments, where the build's strip
+# is unlikely to handle the host's binaries.
+# Fortunately install-sh will honor a STRIPPROG variable, so we
+# always use install-sh in `make install-strip', and initialize
+# STRIPPROG with the value of the STRIP variable (set by the user).
+AC_DEFUN([AM_PROG_INSTALL_STRIP],
+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'. However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
+if test "$cross_compiling" != no; then
+ AC_CHECK_TOOL([STRIP], [strip], :)
+fi
+INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+# Check how to create a tarball. -*- Autoconf -*-
+
+# Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+#
+# This file 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.
+
+# serial 2
+
+# _AM_PROG_TAR(FORMAT)
+# --------------------
+# Check how to create a tarball in format FORMAT.
+# FORMAT should be one of `v7', `ustar', or `pax'.
+#
+# Substitute a variable $(am__tar) that is a command
+# writing to stdout a FORMAT-tarball containing the directory
+# $tardir.
+# tardir=directory && $(am__tar) > result.tar
+#
+# Substitute a variable $(am__untar) that extract such
+# a tarball read from stdin.
+# $(am__untar) < result.tar
+AC_DEFUN([_AM_PROG_TAR],
+[# Always define AMTAR for backward compatibility.
+AM_MISSING_PROG([AMTAR], [tar])
+m4_if([$1], [v7],
+ [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
+ [m4_case([$1], [ustar],, [pax],,
+ [m4_fatal([Unknown tar format])])
+AC_MSG_CHECKING([how to create a $1 tar archive])
+# Loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+_am_tools=${am_cv_prog_tar_$1-$_am_tools}
+# Do not fold the above two line into one, because Tru64 sh and
+# Solaris sh will not grok spaces in the rhs of `-'.
+for _am_tool in $_am_tools
+do
+ case $_am_tool in
+ gnutar)
+ for _am_tar in tar gnutar gtar;
+ do
+ AM_RUN_LOG([$_am_tar --version]) && break
+ done
+ am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
+ am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
+ am__untar="$_am_tar -xf -"
+ ;;
+ plaintar)
+ # Must skip GNU tar: if it does not support --format= it doesn't create
+ # ustar tarball either.
+ (tar --version) >/dev/null 2>&1 && continue
+ am__tar='tar chf - "$$tardir"'
+ am__tar_='tar chf - "$tardir"'
+ am__untar='tar xf -'
+ ;;
+ pax)
+ am__tar='pax -L -x $1 -w "$$tardir"'
+ am__tar_='pax -L -x $1 -w "$tardir"'
+ am__untar='pax -r'
+ ;;
+ cpio)
+ am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+ am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+ am__untar='cpio -i -H $1 -d'
+ ;;
+ none)
+ am__tar=false
+ am__tar_=false
+ am__untar=false
+ ;;
+ esac
+
+ # If the value was cached, stop now. We just wanted to have am__tar
+ # and am__untar set.
+ test -n "${am_cv_prog_tar_$1}" && break
+
+ # tar/untar a dummy directory, and stop if the command works
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ echo GrepMe > conftest.dir/file
+ AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+ rm -rf conftest.dir
+ if test -s conftest.tar; then
+ AM_RUN_LOG([$am__untar <conftest.tar])
+ grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+ fi
+done
+rm -rf conftest.dir
+
+AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+AC_SUBST([am__tar])
+AC_SUBST([am__untar])
+]) # _AM_PROG_TAR
+
+m4_include([m4/curl-compilers.m4])
+m4_include([m4/curl-confopts.m4])
+m4_include([m4/curl-functions.m4])
+m4_include([m4/curl-override.m4])
+m4_include([m4/curl-reentrant.m4])
+m4_include([m4/curl-system.m4])
+m4_include([m4/libtool.m4])
+m4_include([m4/ltoptions.m4])
+m4_include([m4/ltsugar.m4])
+m4_include([m4/ltversion.m4])
+m4_include([m4/lt~obsolete.m4])
+m4_include([acinclude.m4])
diff --git a/buildconf b/buildconf
new file mode 100755
index 0000000..76e310e
--- /dev/null
+++ b/buildconf
@@ -0,0 +1,411 @@
+#!/bin/sh
+#***************************************************************************
+# _ _ ____ _
+# Project ___| | | | _ \| |
+# / __| | | | |_) | |
+# | (__| |_| | _ <| |___
+# \___|\___/|_| \_\_____|
+#
+# Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+#
+# This software is licensed as described in the file COPYING, which
+# you should have received as part of this distribution. The terms
+# are also available at http://curl.haxx.se/docs/copyright.html.
+#
+# You may opt to use, copy, modify, merge, publish, distribute and/or sell
+# copies of the Software, and permit persons to whom the Software is
+# furnished to do so, under the terms of the COPYING file.
+#
+# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+# KIND, either express or implied.
+#
+###########################################################################
+
+die(){
+ echo "$@"
+ exit
+}
+
+#--------------------------------------------------------------------------
+# findtool works as 'which' but we use a different name to make it more
+# obvious we aren't using 'which'! ;-)
+#
+findtool(){
+ file="$1"
+
+ if { echo $file | grep "/" >/dev/null 2>&1; } then
+ # we only check for the explicit file name if the file is given
+ # including a slash. Use ./ for current dir. Previously this would
+ # otherwise always cause findtool to search the local dir first, which
+ # is wrong.
+ if test -f "$file"; then
+ echo "$file"
+ return
+ fi
+ fi
+
+ old_IFS=$IFS; IFS=':'
+ for path in $PATH
+ do
+ IFS=$old_IFS
+ # echo "checks for $file in $path" >&2
+ if test -f "$path/$file"; then
+ echo "$path/$file"
+ return
+ fi
+ done
+ IFS=$old_IFS
+}
+
+#--------------------------------------------------------------------------
+# removethis() removes all files and subdirectories with the given name,
+# inside and below the current subdirectory at invocation time.
+#
+removethis(){
+ if test "$#" = "1"; then
+ find . -depth -name $1 -print > buildconf.tmp.$$
+ while read fdname
+ do
+ if test -f "$fdname"; then
+ rm -f "$fdname"
+ elif test -d "$fdname"; then
+ rm -f -r "$fdname"
+ fi
+ done < buildconf.tmp.$$
+ rm -f buildconf.tmp.$$
+ fi
+}
+
+#--------------------------------------------------------------------------
+# Ensure that buildconf runs from the subdirectory where configure.ac lives
+#
+if test ! -f configure.ac ||
+ test ! -f src/main.c ||
+ test ! -f lib/urldata.h ||
+ test ! -f include/curl/curl.h; then
+ echo "Can not run buildconf from outside of curl's source subdirectory!"
+ echo "Change to the subdirectory where buildconf is found, and try again."
+ exit 1
+fi
+
+#--------------------------------------------------------------------------
+# autoconf 2.57 or newer
+#
+need_autoconf="2.57"
+ac_version=`${AUTOCONF:-autoconf} --version 2>/dev/null|head -n 1| sed -e 's/^[^0-9]*//' -e 's/[a-z]* *$//'`
+if test -z "$ac_version"; then
+ echo "buildconf: autoconf not found."
+ echo " You need autoconf version $need_autoconf or newer installed."
+ exit 1
+fi
+old_IFS=$IFS; IFS='.'; set $ac_version; IFS=$old_IFS
+if test "$1" = "2" -a "$2" -lt "57" || test "$1" -lt "2"; then
+ echo "buildconf: autoconf version $ac_version found."
+ echo " You need autoconf version $need_autoconf or newer installed."
+ echo " If you have a sufficient autoconf installed, but it"
+ echo " is not named 'autoconf', then try setting the"
+ echo " AUTOCONF environment variable."
+ exit 1
+fi
+
+echo "buildconf: autoconf version $ac_version (ok)"
+
+am4te_version=`${AUTOM4TE:-autom4te} --version 2>/dev/null|head -n 1| sed -e 's/autom4te\(.*\)/\1/' -e 's/^[^0-9]*//' -e 's/[a-z]* *$//'`
+if test -z "$am4te_version"; then
+ echo "buildconf: autom4te not found. Weird autoconf installation!"
+ exit 1
+fi
+if test "$am4te_version" = "$ac_version"; then
+ echo "buildconf: autom4te version $am4te_version (ok)"
+else
+ echo "buildconf: autom4te version $am4te_version (ERROR: does not match autoconf version)"
+ exit 1
+fi
+
+#--------------------------------------------------------------------------
+# autoheader 2.50 or newer
+#
+ah_version=`${AUTOHEADER:-autoheader} --version 2>/dev/null|head -n 1| sed -e 's/^[^0-9]*//' -e 's/[a-z]* *$//'`
+if test -z "$ah_version"; then
+ echo "buildconf: autoheader not found."
+ echo " You need autoheader version 2.50 or newer installed."
+ exit 1
+fi
+old_IFS=$IFS; IFS='.'; set $ah_version; IFS=$old_IFS
+if test "$1" = "2" -a "$2" -lt "50" || test "$1" -lt "2"; then
+ echo "buildconf: autoheader version $ah_version found."
+ echo " You need autoheader version 2.50 or newer installed."
+ echo " If you have a sufficient autoheader installed, but it"
+ echo " is not named 'autoheader', then try setting the"
+ echo " AUTOHEADER environment variable."
+ exit 1
+fi
+
+echo "buildconf: autoheader version $ah_version (ok)"
+
+#--------------------------------------------------------------------------
+# automake 1.7 or newer
+#
+need_automake="1.7"
+am_version=`${AUTOMAKE:-automake} --version 2>/dev/null|head -n 1| sed -e 's/^.* \([0-9]\)/\1/' -e 's/[a-z]* *$//' -e 's/\(.*\)\(-p.*\)/\1/'`
+if test -z "$am_version"; then
+ echo "buildconf: automake not found."
+ echo " You need automake version $need_automake or newer installed."
+ exit 1
+fi
+old_IFS=$IFS; IFS='.'; set $am_version; IFS=$old_IFS
+if test "$1" = "1" -a "$2" -lt "7" || test "$1" -lt "1"; then
+ echo "buildconf: automake version $am_version found."
+ echo " You need automake version $need_automake or newer installed."
+ echo " If you have a sufficient automake installed, but it"
+ echo " is not named 'automake', then try setting the"
+ echo " AUTOMAKE environment variable."
+ exit 1
+fi
+
+echo "buildconf: automake version $am_version (ok)"
+
+acloc_version=`${ACLOCAL:-aclocal} --version 2>/dev/null|head -n 1| sed -e 's/^.* \([0-9]\)/\1/' -e 's/[a-z]* *$//' -e 's/\(.*\)\(-p.*\)/\1/'`
+if test -z "$acloc_version"; then
+ echo "buildconf: aclocal not found. Weird automake installation!"
+ exit 1
+fi
+if test "$acloc_version" = "$am_version"; then
+ echo "buildconf: aclocal version $acloc_version (ok)"
+else
+ echo "buildconf: aclocal version $acloc_version (ERROR: does not match automake version)"
+ exit 1
+fi
+
+#--------------------------------------------------------------------------
+# libtool check
+#
+LIBTOOL_WANTED_MAJOR=1
+LIBTOOL_WANTED_MINOR=4
+LIBTOOL_WANTED_PATCH=2
+LIBTOOL_WANTED_VERSION=1.4.2
+
+# this approach that tries 'glibtool' first is some kind of work-around for
+# some BSD-systems I believe that use to provide the GNU libtool named
+# glibtool, with 'libtool' being something completely different.
+libtool=`findtool glibtool 2>/dev/null`
+if test ! -x "$libtool"; then
+ libtool=`findtool ${LIBTOOL:-libtool}`
+fi
+
+if test -z "$LIBTOOLIZE"; then
+ # set the LIBTOOLIZE here so that glibtoolize is used if glibtool was found
+ # $libtool is already the full path
+ libtoolize="${libtool}ize"
+else
+ libtoolize=`findtool $LIBTOOLIZE`
+fi
+
+lt_pver=`$libtool --version 2>/dev/null|head -n 1`
+lt_qver=`echo $lt_pver|sed -e "s/([^)]*)//g" -e "s/^[^0-9]*//g"`
+lt_version=`echo $lt_qver|sed -e "s/[- ].*//" -e "s/\([a-z]*\)$//"`
+if test -z "$lt_version"; then
+ echo "buildconf: libtool not found."
+ echo " You need libtool version $LIBTOOL_WANTED_VERSION or newer installed"
+ exit 1
+fi
+old_IFS=$IFS; IFS='.'; set $lt_version; IFS=$old_IFS
+lt_major=$1
+lt_minor=$2
+lt_patch=$3
+lt_status="good"
+
+if test "$lt_major" = "$LIBTOOL_WANTED_MAJOR"; then
+ if test "$lt_minor" -lt "$LIBTOOL_WANTED_MINOR"; then
+ lt_status="bad"
+ elif test -n "$LIBTOOL_WANTED_PATCH"; then
+ if test "$lt_minor" -gt "$LIBTOOL_WANTED_MINOR"; then
+ lt_status="good"
+ elif test -n "$lt_patch"; then
+ if test "$lt_patch" -lt "$LIBTOOL_WANTED_PATCH"; then
+ lt_status="bad"
+ fi
+ else
+ lt_status="bad"
+ fi
+ fi
+fi
+if test $lt_status != "good"; then
+ echo "buildconf: libtool version $lt_version found."
+ echo " You need libtool version $LIBTOOL_WANTED_VERSION or newer installed"
+ exit 1
+fi
+
+echo "buildconf: libtool version $lt_version (ok)"
+
+if test -f "$libtoolize"; then
+ echo "buildconf: libtoolize found"
+else
+ echo "buildconf: libtoolize not found. Weird libtool installation!"
+ exit 1
+fi
+
+#--------------------------------------------------------------------------
+# m4 check
+#
+m4=`(${M4:-m4} --version || ${M4:-gm4} --version) 2>/dev/null | head -n 1`;
+m4_version=`echo $m4 | sed -e 's/^.* \([0-9]\)/\1/' -e 's/[a-z]* *$//'`
+
+if { echo $m4 | grep "GNU" >/dev/null 2>&1; } then
+ echo "buildconf: GNU m4 version $m4_version (ok)"
+else
+ if test -z "$m4"; then
+ echo "buildconf: m4 version not recognized. You need a GNU m4 installed!"
+ else
+ echo "buildconf: m4 version $m4 found. You need a GNU m4 installed!"
+ fi
+ exit 1
+fi
+
+#--------------------------------------------------------------------------
+# perl check
+#
+PERL=`findtool ${PERL:-perl}`
+
+#--------------------------------------------------------------------------
+# Remove files generated on previous buildconf/configure run.
+#
+for fname in .deps \
+ .libs \
+ *.la \
+ *.lo \
+ *.a \
+ *.o \
+ Makefile \
+ Makefile.in \
+ aclocal.m4 \
+ aclocal.m4.bak \
+ ares_build.h \
+ ares_config.h \
+ ares_config.h.in \
+ autom4te.cache \
+ compile \
+ config.guess \
+ curl_config.h \
+ curl_config.h.in \
+ config.log \
+ config.lt \
+ config.status \
+ config.sub \
+ configure \
+ curl-config \
+ curlbuild.h \
+ depcomp \
+ libcares.pc \
+ libcurl.pc \
+ libtool \
+ libtool.m4 \
+ ltmain.sh \
+ ltoptions.m4 \
+ ltsugar.m4 \
+ ltversion.m4 \
+ lt~obsolete.m4 \
+ stamp-h1 \
+ stamp-h2 \
+ stamp-h3 ; do
+ removethis "$fname"
+done
+
+#--------------------------------------------------------------------------
+# run the correct scripts now
+#
+
+echo "buildconf: running libtoolize"
+$libtoolize --copy --automake --force || die "The libtoolize command failed"
+
+if test ! -f m4/curl-functions.m4; then
+ echo "buildconf: cURL m4 macros not found"
+ exit 1
+fi
+
+echo "buildconf: running aclocal"
+${ACLOCAL:-aclocal} -I m4 $ACLOCAL_FLAGS || die "The aclocal command line failed"
+
+if test -n "$PERL"; then
+ echo "buildconf: running aclocal hack to convert all mv to mv -f"
+ $PERL -i.bak -pe 's/\bmv +([^-\s])/mv -f $1/g' aclocal.m4
+else
+ echo "buildconf: perl not found"
+ exit 1
+fi
+
+echo "buildconf: running autoheader"
+${AUTOHEADER:-autoheader} || die "The autoheader command failed"
+
+echo "buildconf: cp lib/curl_config.h.in src/curl_config.h.in"
+cp lib/curl_config.h.in src/curl_config.h.in
+
+echo "buildconf: running autoconf"
+${AUTOCONF:-autoconf} || die "The autoconf command failed"
+
+if test -d ares; then
+ cd ares
+ echo "buildconf: running in ares"
+ ./buildconf
+ cd ..
+fi
+
+echo "buildconf: running automake"
+${AUTOMAKE:-automake} -a -c || die "The automake command failed"
+
+#--------------------------------------------------------------------------
+# Depending on the libtool and automake versions being used, config.guess
+# might not be installed in the subdirectory until automake has finished.
+# So we can not attempt to use it until this very last buildconf stage.
+#
+
+if test ! -f ./config.guess; then
+ echo "buildconf: config.guess not found"
+else
+ buildhost=`./config.guess 2>/dev/null|head -n 1`
+ case $buildhost in
+ *-*-hpux*)
+ need_lt_major=1
+ need_lt_minor=5
+ need_lt_patch=24
+ need_lt_check="yes"
+ ;;
+ esac
+ if test ! -z "$need_lt_check"; then
+ if test -z "$lt_major"; then
+ lt_status="bad"
+ elif test "$lt_major" -gt "$need_lt_major"; then
+ lt_status="good"
+ elif test "$lt_major" -lt "$need_lt_major"; then
+ lt_status="bad"
+ elif test -z "$lt_minor"; then
+ lt_status="bad"
+ elif test "$lt_minor" -gt "$need_lt_minor"; then
+ lt_status="good"
+ elif test "$lt_minor" -lt "$need_lt_minor"; then
+ lt_status="bad"
+ elif test -z "$lt_patch"; then
+ lt_status="bad"
+ elif test "$lt_patch" -gt "$need_lt_patch"; then
+ lt_status="good"
+ elif test "$lt_patch" -lt "$need_lt_patch"; then
+ lt_status="bad"
+ else
+ lt_status="good"
+ fi
+ if test "$lt_status" != "good"; then
+ need_lt_version="$need_lt_major.$need_lt_minor.$need_lt_patch"
+ echo "buildconf: libtool version $lt_version found."
+ echo " $buildhost requires libtool $need_lt_version or newer installed."
+ rm -f configure
+ exit 1
+ fi
+ fi
+fi
+
+#--------------------------------------------------------------------------
+# Finished succesfully.
+#
+
+echo "buildconf: OK"
+exit 0
diff --git a/compile b/compile
new file mode 100755
index 0000000..1b1d232
--- /dev/null
+++ b/compile
@@ -0,0 +1,142 @@
+#! /bin/sh
+# Wrapper for compilers which do not understand `-c -o'.
+
+scriptversion=2005-05-14.22
+
+# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
+# Written by Tom Tromey <tromey@cygnus.com>.
+#
+# 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 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.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-automake@gnu.org> or send patches to
+# <automake-patches@gnu.org>.
+
+case $1 in
+ '')
+ echo "$0: No command. Try \`$0 --help' for more information." 1>&2
+ exit 1;
+ ;;
+ -h | --h*)
+ cat <<\EOF
+Usage: compile [--help] [--version] PROGRAM [ARGS]
+
+Wrapper for compilers which do not understand `-c -o'.
+Remove `-o dest.o' from ARGS, run PROGRAM with the remaining
+arguments, and rename the output as expected.
+
+If you are trying to build a whole package this is not the
+right script to run: please start by reading the file `INSTALL'.
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+ exit $?
+ ;;
+ -v | --v*)
+ echo "compile $scriptversion"
+ exit $?
+ ;;
+esac
+
+ofile=
+cfile=
+eat=
+
+for arg
+do
+ if test -n "$eat"; then
+ eat=
+ else
+ case $1 in
+ -o)
+ # configure might choose to run compile as `compile cc -o foo foo.c'.
+ # So we strip `-o arg' only if arg is an object.
+ eat=1
+ case $2 in
+ *.o | *.obj)
+ ofile=$2
+ ;;
+ *)
+ set x "$@" -o "$2"
+ shift
+ ;;
+ esac
+ ;;
+ *.c)
+ cfile=$1
+ set x "$@" "$1"
+ shift
+ ;;
+ *)
+ set x "$@" "$1"
+ shift
+ ;;
+ esac
+ fi
+ shift
+done
+
+if test -z "$ofile" || test -z "$cfile"; then
+ # If no `-o' option was seen then we might have been invoked from a
+ # pattern rule where we don't need one. That is ok -- this is a
+ # normal compilation that the losing compiler can handle. If no
+ # `.c' file was seen then we are probably linking. That is also
+ # ok.
+ exec "$@"
+fi
+
+# Name of file we expect compiler to create.
+cofile=`echo "$cfile" | sed -e 's|^.*/||' -e 's/\.c$/.o/'`
+
+# Create the lock directory.
+# Note: use `[/.-]' here to ensure that we don't use the same name
+# that we are using for the .o file. Also, base the name on the expected
+# object file name, since that is what matters with a parallel build.
+lockdir=`echo "$cofile" | sed -e 's|[/.-]|_|g'`.d
+while true; do
+ if mkdir "$lockdir" >/dev/null 2>&1; then
+ break
+ fi
+ sleep 1
+done
+# FIXME: race condition here if user kills between mkdir and trap.
+trap "rmdir '$lockdir'; exit 1" 1 2 15
+
+# Run the compile.
+"$@"
+ret=$?
+
+if test -f "$cofile"; then
+ mv "$cofile" "$ofile"
+elif test -f "${cofile}bj"; then
+ mv "${cofile}bj" "$ofile"
+fi
+
+rmdir "$lockdir"
+exit $ret
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
diff --git a/config.guess b/config.guess
new file mode 100755
index 0000000..c2246a4
--- /dev/null
+++ b/config.guess
@@ -0,0 +1,1502 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+# Free Software Foundation, Inc.
+
+timestamp='2009-12-30'
+
+# 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., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, 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.
+
+
+# Originally written by Per Bothner. Please send patches (context
+# diff format) to <config-patches@gnu.org> and include a ChangeLog
+# entry.
+#
+# 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.
+#
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION]
+
+Output the configuration name of the system \`$me' is run on.
+
+Operation modes:
+ -h, --help print this help, then exit
+ -t, --time-stamp print date of last modification, then exit
+ -v, --version print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.guess ($timestamp)
+
+Originally written by Per Bothner.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free
+Software Foundation, Inc.
+
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+ case $1 in
+ --time-stamp | --time* | -t )
+ echo "$timestamp" ; exit ;;
+ --version | -v )
+ echo "$version" ; exit ;;
+ --help | --h* | -h )
+ echo "$usage"; exit ;;
+ -- ) # Stop option processing
+ shift; break ;;
+ - ) # Use stdin as input.
+ break ;;
+ -* )
+ echo "$me: invalid option $1$help" >&2
+ exit 1 ;;
+ * )
+ break ;;
+ esac
+done
+
+if test $# != 0; then
+ echo "$me: too many arguments$help" >&2
+ exit 1
+fi
+
+trap 'exit 1' 1 2 15
+
+# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
+# compiler to aid in system detection is discouraged as it requires
+# temporary files to be created and, as you can see below, it is a
+# headache to deal with in a portable fashion.
+
+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
+# use `HOST_CC' if defined, but it is deprecated.
+
+# Portable tmp directory creation inspired by the Autoconf team.
+
+set_cc_for_build='
+trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
+trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
+: ${TMPDIR=/tmp} ;
+ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
+ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
+dummy=$tmp/dummy ;
+tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
+case $CC_FOR_BUILD,$HOST_CC,$CC in
+ ,,) echo "int x;" > $dummy.c ;
+ for c in cc gcc c89 c99 ; do
+ if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
+ CC_FOR_BUILD="$c"; break ;
+ fi ;
+ done ;
+ if test x"$CC_FOR_BUILD" = x ; then
+ CC_FOR_BUILD=no_compiler_found ;
+ fi
+ ;;
+ ,,*) CC_FOR_BUILD=$CC ;;
+ ,*,*) CC_FOR_BUILD=$HOST_CC ;;
+esac ; set_cc_for_build= ;'
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# (ghazi@noc.rutgers.edu 1994-08-24)
+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
+
+# Note: order is significant - the case branches are not exclusive.
+
+case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+ *:NetBSD:*:*)
+ # NetBSD (nbsd) targets should (where applicable) match one or
+ # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
+ # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
+ # switched to ELF, *-*-netbsd* would select the old
+ # object file format. This provides both forward
+ # compatibility and a consistent mechanism for selecting the
+ # object file format.
+ #
+ # Note: NetBSD doesn't particularly care about the vendor
+ # portion of the name. We always set it to "unknown".
+ sysctl="sysctl -n hw.machine_arch"
+ UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
+ /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+ case "${UNAME_MACHINE_ARCH}" in
+ armeb) machine=armeb-unknown ;;
+ arm*) machine=arm-unknown ;;
+ sh3el) machine=shl-unknown ;;
+ sh3eb) machine=sh-unknown ;;
+ sh5el) machine=sh5le-unknown ;;
+ *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
+ esac
+ # The Operating System including object format, if it has switched
+ # to ELF recently, or will in the future.
+ case "${UNAME_MACHINE_ARCH}" in
+ arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+ eval $set_cc_for_build
+ if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep -q __ELF__
+ then
+ # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
+ # Return netbsd for either. FIX?
+ os=netbsd
+ else
+ os=netbsdelf
+ fi
+ ;;
+ *)
+ os=netbsd
+ ;;
+ esac
+ # The OS release
+ # Debian GNU/NetBSD machines have a different userland, and
+ # thus, need a distinct triplet. However, they do not need
+ # kernel version information, so it can be replaced with a
+ # suitable tag, in the style of linux-gnu.
+ case "${UNAME_VERSION}" in
+ Debian*)
+ release='-gnu'
+ ;;
+ *)
+ release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+ ;;
+ esac
+ # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
+ # contains redundant information, the shorter form:
+ # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+ echo "${machine}-${os}${release}"
+ exit ;;
+ *:OpenBSD:*:*)
+ UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
+ echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
+ exit ;;
+ *:ekkoBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
+ exit ;;
+ *:SolidBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
+ exit ;;
+ macppc:MirBSD:*:*)
+ echo powerpc-unknown-mirbsd${UNAME_RELEASE}
+ exit ;;
+ *:MirBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
+ exit ;;
+ alpha:OSF1:*:*)
+ case $UNAME_RELEASE in
+ *4.0)
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+ ;;
+ *5.*)
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+ ;;
+ esac
+ # According to Compaq, /usr/sbin/psrinfo has been available on
+ # OSF/1 and Tru64 systems produced since 1995. I hope that
+ # covers most systems running today. This code pipes the CPU
+ # types through head -n 1, so we only detect the type of CPU 0.
+ ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1`
+ case "$ALPHA_CPU_TYPE" in
+ "EV4 (21064)")
+ UNAME_MACHINE="alpha" ;;
+ "EV4.5 (21064)")
+ UNAME_MACHINE="alpha" ;;
+ "LCA4 (21066/21068)")
+ UNAME_MACHINE="alpha" ;;
+ "EV5 (21164)")
+ UNAME_MACHINE="alphaev5" ;;
+ "EV5.6 (21164A)")
+ UNAME_MACHINE="alphaev56" ;;
+ "EV5.6 (21164PC)")
+ UNAME_MACHINE="alphapca56" ;;
+ "EV5.7 (21164PC)")
+ UNAME_MACHINE="alphapca57" ;;
+ "EV6 (21264)")
+ UNAME_MACHINE="alphaev6" ;;
+ "EV6.7 (21264A)")
+ UNAME_MACHINE="alphaev67" ;;
+ "EV6.8CB (21264C)")
+ UNAME_MACHINE="alphaev68" ;;
+ "EV6.8AL (21264B)")
+ UNAME_MACHINE="alphaev68" ;;
+ "EV6.8CX (21264D)")
+ UNAME_MACHINE="alphaev68" ;;
+ "EV6.9A (21264/EV69A)")
+ UNAME_MACHINE="alphaev69" ;;
+ "EV7 (21364)")
+ UNAME_MACHINE="alphaev7" ;;
+ "EV7.9 (21364A)")
+ UNAME_MACHINE="alphaev79" ;;
+ esac
+ # A Pn.n version is a patched version.
+ # 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.
+ echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+ exit ;;
+ Alpha\ *:Windows_NT*:*)
+ # How do we know it's Interix rather than the generic POSIX subsystem?
+ # Should we change UNAME_MACHINE based on the output of uname instead
+ # of the specific Alpha model?
+ echo alpha-pc-interix
+ exit ;;
+ 21064:Windows_NT:50:3)
+ echo alpha-dec-winnt3.5
+ exit ;;
+ Amiga*:UNIX_System_V:4.0:*)
+ echo m68k-unknown-sysv4
+ exit ;;
+ *:[Aa]miga[Oo][Ss]:*:*)
+ echo ${UNAME_MACHINE}-unknown-amigaos
+ exit ;;
+ *:[Mm]orph[Oo][Ss]:*:*)
+ echo ${UNAME_MACHINE}-unknown-morphos
+ exit ;;
+ *:OS/390:*:*)
+ echo i370-ibm-openedition
+ exit ;;
+ *:z/VM:*:*)
+ echo s390-ibm-zvmoe
+ exit ;;
+ *:OS400:*:*)
+ echo powerpc-ibm-os400
+ exit ;;
+ arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+ echo arm-acorn-riscix${UNAME_RELEASE}
+ exit ;;
+ arm:riscos:*:*|arm:RISCOS:*:*)
+ echo arm-unknown-riscos
+ exit ;;
+ SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+ echo hppa1.1-hitachi-hiuxmpp
+ exit ;;
+ 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 ;;
+ NILE*:*:*:dcosx)
+ echo pyramid-pyramid-svr4
+ exit ;;
+ DRS?6000:unix:4.0:6*)
+ echo sparc-icl-nx6
+ exit ;;
+ DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
+ case `/usr/bin/uname -p` in
+ sparc) echo sparc-icl-nx7; exit ;;
+ esac ;;
+ s390x:SunOS:*:*)
+ echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ sun4H:SunOS:5.*:*)
+ echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+ echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
+ echo i386-pc-auroraux${UNAME_RELEASE}
+ exit ;;
+ i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
+ eval $set_cc_for_build
+ SUN_ARCH="i386"
+ # If there is a compiler, see if it is configured for 64-bit objects.
+ # Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
+ # This test works for both compilers.
+ if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+ if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
+ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+ grep IS_64BIT_ARCH >/dev/null
+ then
+ SUN_ARCH="x86_64"
+ fi
+ fi
+ echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ 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 ;;
+ 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 ;;
+ sun3*:SunOS:*:*)
+ echo m68k-sun-sunos${UNAME_RELEASE}
+ exit ;;
+ sun*:*:4.2BSD:*)
+ UNAME_RELEASE=`(sed 1q /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 ;;
+ aushp:SunOS:*:*)
+ echo sparc-auspex-sunos${UNAME_RELEASE}
+ exit ;;
+ # The situation for MiNT is a little confusing. The machine name
+ # can be virtually everything (everything which is not
+ # "atarist" or "atariste" at least should have a processor
+ # > m68000). The system name ranges from "MiNT" over "FreeMiNT"
+ # to the lowercase version "mint" (or "freemint"). Finally
+ # the system name "TOS" denotes a system which is actually not
+ # MiNT. But MiNT is downward compatible to TOS, so this should
+ # be no problem.
+ atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit ;;
+ atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit ;;
+ *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit ;;
+ milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+ echo m68k-milan-mint${UNAME_RELEASE}
+ exit ;;
+ hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+ echo m68k-hades-mint${UNAME_RELEASE}
+ exit ;;
+ *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+ echo m68k-unknown-mint${UNAME_RELEASE}
+ exit ;;
+ m68k:machten:*:*)
+ echo m68k-apple-machten${UNAME_RELEASE}
+ exit ;;
+ powerpc:machten:*:*)
+ echo powerpc-apple-machten${UNAME_RELEASE}
+ exit ;;
+ RISC*:Mach:*:*)
+ echo mips-dec-mach_bsd4.3
+ exit ;;
+ RISC*:ULTRIX:*:*)
+ echo mips-dec-ultrix${UNAME_RELEASE}
+ exit ;;
+ VAX*:ULTRIX*:*:*)
+ echo vax-dec-ultrix${UNAME_RELEASE}
+ exit ;;
+ 2020:CLIX:*:* | 2430:CLIX:*:*)
+ echo clipper-intergraph-clix${UNAME_RELEASE}
+ exit ;;
+ mips:*:*:UMIPS | mips:*:*:RISCos)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+#ifdef __cplusplus
+#include <stdio.h> /* for printf() prototype */
+ 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_FOR_BUILD -o $dummy $dummy.c &&
+ dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
+ SYSTEM_NAME=`$dummy $dummyarg` &&
+ { echo "$SYSTEM_NAME"; exit; }
+ echo mips-mips-riscos${UNAME_RELEASE}
+ exit ;;
+ Motorola:PowerMAX_OS:*:*)
+ echo powerpc-motorola-powermax
+ exit ;;
+ Motorola:*:4.3:PL8-*)
+ echo powerpc-harris-powermax
+ exit ;;
+ Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
+ echo powerpc-harris-powermax
+ exit ;;
+ Night_Hawk:Power_UNIX:*:*)
+ echo powerpc-harris-powerunix
+ exit ;;
+ m88k:CX/UX:7*:*)
+ echo m88k-harris-cxux7
+ exit ;;
+ m88k:*:4*:R4*)
+ echo m88k-motorola-sysv4
+ exit ;;
+ m88k:*:3*:R3*)
+ echo m88k-motorola-sysv3
+ exit ;;
+ AViiON:dgux:*:*)
+ # DG/UX returns AViiON for all architectures
+ UNAME_PROCESSOR=`/usr/bin/uname -p`
+ if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
+ then
+ if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
+ [ ${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 ;;
+ M88*:DolphinOS:*:*) # DolphinOS (SVR3)
+ echo m88k-dolphin-sysv3
+ exit ;;
+ M88*:*:R3*:*)
+ # Delta 88k system running SVR3
+ echo m88k-motorola-sysv3
+ exit ;;
+ XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+ echo m88k-tektronix-sysv3
+ exit ;;
+ Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+ echo m68k-tektronix-bsd
+ exit ;;
+ *:IRIX*:*:*)
+ echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+ exit ;;
+ ????????: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 ;; # Note that: echo "'`uname -s`'" gives 'AIX '
+ i*86:AIX:*:*)
+ echo i386-ibm-aix
+ exit ;;
+ ia64:AIX:*:*)
+ if [ -x /usr/bin/oslevel ] ; then
+ IBM_REV=`/usr/bin/oslevel`
+ else
+ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+ fi
+ echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
+ exit ;;
+ *:AIX:2:3)
+ if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #include <sys/systemcfg.h>
+
+ main()
+ {
+ if (!__power_pc())
+ exit(1);
+ puts("powerpc-ibm-aix3.2.5");
+ exit(0);
+ }
+EOF
+ if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
+ then
+ echo "$SYSTEM_NAME"
+ else
+ echo rs6000-ibm-aix3.2.5
+ fi
+ 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 ;;
+ *:AIX:*:[456])
+ IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
+ if /usr/sbin/lsattr -El ${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=${UNAME_VERSION}.${UNAME_RELEASE}
+ fi
+ echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+ exit ;;
+ *:AIX:*:*)
+ echo rs6000-ibm-aix
+ exit ;;
+ ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+ echo romp-ibm-bsd4.4
+ exit ;;
+ ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
+ echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
+ exit ;; # report: romp-ibm BSD 4.3
+ *:BOSX:*:*)
+ echo rs6000-bull-bosx
+ exit ;;
+ DPX/2?00:B.O.S.:*:*)
+ echo m68k-bull-sysv3
+ exit ;;
+ 9000/[34]??:4.3bsd:1.*:*)
+ echo m68k-hp-bsd
+ exit ;;
+ hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+ echo m68k-hp-bsd4.4
+ exit ;;
+ 9000/[34678]??:HP-UX:*:*)
+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+ case "${UNAME_MACHINE}" in
+ 9000/31? ) HP_ARCH=m68000 ;;
+ 9000/[34]?? ) HP_ARCH=m68k ;;
+ 9000/[678][0-9][0-9])
+ if [ -x /usr/bin/getconf ]; then
+ sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+ sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+ case "${sc_cpu_version}" in
+ 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+ 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+ 532) # CPU_PA_RISC2_0
+ case "${sc_kernel_bits}" in
+ 32) HP_ARCH="hppa2.0n" ;;
+ 64) HP_ARCH="hppa2.0w" ;;
+ '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20
+ esac ;;
+ esac
+ fi
+ if [ "${HP_ARCH}" = "" ]; then
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+
+ #define _HPUX_SOURCE
+ #include <stdlib.h>
+ #include <unistd.h>
+
+ 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
+ (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
+ test -z "$HP_ARCH" && HP_ARCH=hppa
+ fi ;;
+ esac
+ if [ ${HP_ARCH} = "hppa2.0w" ]
+ then
+ eval $set_cc_for_build
+
+ # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
+ # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler
+ # generating 64-bit code. GNU and HP use different nomenclature:
+ #
+ # $ CC_FOR_BUILD=cc ./config.guess
+ # => hppa2.0w-hp-hpux11.23
+ # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
+ # => hppa64-hp-hpux11.23
+
+ if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
+ grep -q __LP64__
+ then
+ HP_ARCH="hppa2.0w"
+ else
+ HP_ARCH="hppa64"
+ fi
+ fi
+ echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+ exit ;;
+ ia64:HP-UX:*:*)
+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+ echo ia64-hp-hpux${HPUX_REV}
+ exit ;;
+ 3050*:HI-UX:*:*)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #include <unistd.h>
+ 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_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
+ { echo "$SYSTEM_NAME"; exit; }
+ echo unknown-hitachi-hiuxwe2
+ exit ;;
+ 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+ echo hppa1.1-hp-bsd
+ exit ;;
+ 9000/8??:4.3bsd:*:*)
+ echo hppa1.0-hp-bsd
+ exit ;;
+ *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
+ echo hppa1.0-hp-mpeix
+ exit ;;
+ hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+ echo hppa1.1-hp-osf
+ exit ;;
+ hp8??:OSF1:*:*)
+ echo hppa1.0-hp-osf
+ exit ;;
+ i*86:OSF1:*:*)
+ if [ -x /usr/sbin/sysversion ] ; then
+ echo ${UNAME_MACHINE}-unknown-osf1mk
+ else
+ echo ${UNAME_MACHINE}-unknown-osf1
+ fi
+ exit ;;
+ parisc*:Lites*:*:*)
+ echo hppa1.1-hp-lites
+ exit ;;
+ C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+ echo c1-convex-bsd
+ exit ;;
+ C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+ if getsysinfo -f scalar_acc
+ then echo c32-convex-bsd
+ else echo c2-convex-bsd
+ fi
+ exit ;;
+ C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+ echo c34-convex-bsd
+ exit ;;
+ C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+ echo c38-convex-bsd
+ exit ;;
+ C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+ echo c4-convex-bsd
+ exit ;;
+ CRAY*Y-MP:*:*:*)
+ echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*[A-Z]90:*:*:*)
+ echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+ -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*TS:*:*:*)
+ echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*T3E:*:*:*)
+ echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*SV1:*:*:*)
+ echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ *:UNICOS/mp:*:*)
+ echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+ FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+ FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+ echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+ exit ;;
+ 5000:UNIX_System_V:4.*:*)
+ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+ FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+ echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+ exit ;;
+ i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+ echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+ exit ;;
+ sparc*:BSD/OS:*:*)
+ echo sparc-unknown-bsdi${UNAME_RELEASE}
+ exit ;;
+ *:BSD/OS:*:*)
+ echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+ exit ;;
+ *:FreeBSD:*:*)
+ case ${UNAME_MACHINE} in
+ pc98)
+ echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+ amd64)
+ echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+ *)
+ echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+ esac
+ exit ;;
+ i*:CYGWIN*:*)
+ echo ${UNAME_MACHINE}-pc-cygwin
+ exit ;;
+ *:MINGW*:*)
+ echo ${UNAME_MACHINE}-pc-mingw32
+ exit ;;
+ i*:windows32*:*)
+ # uname -m includes "-pc" on this system.
+ echo ${UNAME_MACHINE}-mingw32
+ exit ;;
+ i*:PW*:*)
+ echo ${UNAME_MACHINE}-pc-pw32
+ exit ;;
+ *:Interix*:*)
+ case ${UNAME_MACHINE} in
+ x86)
+ echo i586-pc-interix${UNAME_RELEASE}
+ exit ;;
+ authenticamd | genuineintel | EM64T)
+ echo x86_64-unknown-interix${UNAME_RELEASE}
+ exit ;;
+ IA64)
+ echo ia64-unknown-interix${UNAME_RELEASE}
+ exit ;;
+ esac ;;
+ [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
+ echo i${UNAME_MACHINE}-pc-mks
+ exit ;;
+ 8664:Windows_NT:*)
+ echo x86_64-pc-mks
+ exit ;;
+ i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
+ # How do we know it's Interix rather than the generic POSIX subsystem?
+ # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
+ # UNAME_MACHINE based on the output of uname instead of i386?
+ echo i586-pc-interix
+ exit ;;
+ i*:UWIN*:*)
+ echo ${UNAME_MACHINE}-pc-uwin
+ exit ;;
+ amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
+ echo x86_64-unknown-cygwin
+ exit ;;
+ p*:CYGWIN*:*)
+ echo powerpcle-unknown-cygwin
+ exit ;;
+ prep*:SunOS:5.*:*)
+ echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ *:GNU:*:*)
+ # the GNU system
+ echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+ exit ;;
+ *:GNU/*:*:*)
+ # other systems with GNU libc and userland
+ echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
+ exit ;;
+ i*86:Minix:*:*)
+ echo ${UNAME_MACHINE}-pc-minix
+ exit ;;
+ alpha:Linux:*:*)
+ case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+ EV5) UNAME_MACHINE=alphaev5 ;;
+ EV56) UNAME_MACHINE=alphaev56 ;;
+ PCA56) UNAME_MACHINE=alphapca56 ;;
+ PCA57) UNAME_MACHINE=alphapca56 ;;
+ EV6) UNAME_MACHINE=alphaev6 ;;
+ EV67) UNAME_MACHINE=alphaev67 ;;
+ EV68*) UNAME_MACHINE=alphaev68 ;;
+ esac
+ objdump --private-headers /bin/sh | grep -q ld.so.1
+ if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
+ echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+ exit ;;
+ arm*:Linux:*:*)
+ eval $set_cc_for_build
+ if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep -q __ARM_EABI__
+ then
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ else
+ echo ${UNAME_MACHINE}-unknown-linux-gnueabi
+ fi
+ exit ;;
+ avr32*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ cris:Linux:*:*)
+ echo cris-axis-linux-gnu
+ exit ;;
+ crisv32:Linux:*:*)
+ echo crisv32-axis-linux-gnu
+ exit ;;
+ frv:Linux:*:*)
+ echo frv-unknown-linux-gnu
+ exit ;;
+ i*86:Linux:*:*)
+ LIBC=gnu
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #ifdef __dietlibc__
+ LIBC=dietlibc
+ #endif
+EOF
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
+ echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
+ exit ;;
+ ia64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ m32r*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ m68*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ mips:Linux:*:* | mips64:Linux:*:*)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #undef CPU
+ #undef ${UNAME_MACHINE}
+ #undef ${UNAME_MACHINE}el
+ #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+ CPU=${UNAME_MACHINE}el
+ #else
+ #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+ CPU=${UNAME_MACHINE}
+ #else
+ CPU=
+ #endif
+ #endif
+EOF
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
+ test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
+ ;;
+ or32:Linux:*:*)
+ echo or32-unknown-linux-gnu
+ exit ;;
+ padre:Linux:*:*)
+ echo sparc-unknown-linux-gnu
+ exit ;;
+ parisc64:Linux:*:* | hppa64:Linux:*:*)
+ echo hppa64-unknown-linux-gnu
+ exit ;;
+ parisc:Linux:*:* | hppa:Linux:*:*)
+ # Look for CPU level
+ case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+ PA7*) echo hppa1.1-unknown-linux-gnu ;;
+ PA8*) echo hppa2.0-unknown-linux-gnu ;;
+ *) echo hppa-unknown-linux-gnu ;;
+ esac
+ exit ;;
+ ppc64:Linux:*:*)
+ echo powerpc64-unknown-linux-gnu
+ exit ;;
+ ppc:Linux:*:*)
+ echo powerpc-unknown-linux-gnu
+ exit ;;
+ s390:Linux:*:* | s390x:Linux:*:*)
+ echo ${UNAME_MACHINE}-ibm-linux
+ exit ;;
+ sh64*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ sh*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ sparc:Linux:*:* | sparc64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ vax:Linux:*:*)
+ echo ${UNAME_MACHINE}-dec-linux-gnu
+ exit ;;
+ x86_64:Linux:*:*)
+ echo x86_64-unknown-linux-gnu
+ exit ;;
+ xtensa*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ i*86:DYNIX/ptx:4*:*)
+ # 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.
+ echo i386-sequent-sysv4
+ exit ;;
+ 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 ;;
+ i*86:OS/2:*:*)
+ # If we were able to find `uname', then EMX Unix compatibility
+ # is probably installed.
+ echo ${UNAME_MACHINE}-pc-os2-emx
+ exit ;;
+ i*86:XTS-300:*:STOP)
+ echo ${UNAME_MACHINE}-unknown-stop
+ exit ;;
+ i*86:atheos:*:*)
+ echo ${UNAME_MACHINE}-unknown-atheos
+ exit ;;
+ i*86:syllable:*:*)
+ echo ${UNAME_MACHINE}-pc-syllable
+ exit ;;
+ i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
+ echo i386-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ i*86:*DOS:*:*)
+ echo ${UNAME_MACHINE}-pc-msdosdjgpp
+ exit ;;
+ i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
+ UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
+ if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+ echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
+ else
+ echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
+ fi
+ exit ;;
+ i*86:*:5:[678]*)
+ # UnixWare 7.x, OpenUNIX and OpenServer 6.
+ case `/bin/uname -X | grep "^Machine"` in
+ *486*) UNAME_MACHINE=i486 ;;
+ *Pentium) UNAME_MACHINE=i586 ;;
+ *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+ esac
+ echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+ exit ;;
+ i*86:*:3.2:*)
+ if test -f /usr/options/cb.name; then
+ UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+ echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
+ elif /bin/uname -X 2>/dev/null >/dev/null ; then
+ UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
+ (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
+ (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
+ && UNAME_MACHINE=i586
+ (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
+ && UNAME_MACHINE=i686
+ (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
+ && UNAME_MACHINE=i686
+ echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+ else
+ echo ${UNAME_MACHINE}-pc-sysv32
+ fi
+ exit ;;
+ pc:*:*:*)
+ # Left here for compatibility:
+ # uname -m prints for DJGPP always 'pc', but it prints nothing about
+ # the processor, so we play safe by assuming i586.
+ # Note: whatever this is, it MUST be the same as what config.sub
+ # prints for the "djgpp" host, or else GDB configury will decide that
+ # this is a cross-build.
+ echo i586-pc-msdosdjgpp
+ exit ;;
+ Intel:Mach:3*:*)
+ echo i386-pc-mach3
+ exit ;;
+ paragon:*:*:*)
+ echo i860-intel-osf1
+ exit ;;
+ 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 ;;
+ mini*:CTIX:SYS*5:*)
+ # "miniframe"
+ echo m68010-convergent-sysv
+ exit ;;
+ mc68k:UNIX:SYSTEM5:3.51m)
+ echo m68k-convergent-sysv
+ exit ;;
+ M680?0:D-NIX:5.3:*)
+ echo m68k-diab-dnix
+ exit ;;
+ M68*:*:R3V[5678]*:*)
+ test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
+ 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*: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; }
+ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+ 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && { echo i486-ncr-sysv4; exit; } ;;
+ NCR*:*:4.2:* | MPRAS*:*:4.2:*)
+ OS_REL='.3'
+ 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; }
+ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+ && { echo i586-ncr-sysv4.3${OS_REL}; exit; }
+ /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
+ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+ m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
+ echo m68k-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ mc68030:UNIX_System_V:4.*:*)
+ echo m68k-atari-sysv4
+ exit ;;
+ TSUNAMI:LynxOS:2.*:*)
+ echo sparc-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ rs6000:LynxOS:2.*:*)
+ echo rs6000-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
+ echo powerpc-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ SM[BE]S:UNIX_SV:*:*)
+ echo mips-dde-sysv${UNAME_RELEASE}
+ exit ;;
+ RM*:ReliantUNIX-*:*:*)
+ echo mips-sni-sysv4
+ exit ;;
+ RM*:SINIX-*:*:*)
+ echo mips-sni-sysv4
+ exit ;;
+ *: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 ;;
+ PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+ # says <Richard.M.Bartel@ccMail.Census.GOV>
+ echo i586-unisys-sysv4
+ exit ;;
+ *:UNIX_System_V:4*:FTX*)
+ # From Gerald Hewes <hewes@openmarket.com>.
+ # How about differentiating between stratus architectures? -djm
+ echo hppa1.1-stratus-sysv4
+ exit ;;
+ *:*:*:FTX*)
+ # From seanf@swdc.stratus.com.
+ echo i860-stratus-sysv4
+ exit ;;
+ i*86:VOS:*:*)
+ # From Paul.Green@stratus.com.
+ echo ${UNAME_MACHINE}-stratus-vos
+ exit ;;
+ *:VOS:*:*)
+ # From Paul.Green@stratus.com.
+ echo hppa1.1-stratus-vos
+ exit ;;
+ mc68*:A/UX:*:*)
+ echo m68k-apple-aux${UNAME_RELEASE}
+ exit ;;
+ news*:NEWS-OS:6*:*)
+ echo mips-sony-newsos6
+ exit ;;
+ R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+ if [ -d /usr/nec ]; then
+ echo mips-nec-sysv${UNAME_RELEASE}
+ else
+ echo mips-unknown-sysv${UNAME_RELEASE}
+ fi
+ exit ;;
+ BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
+ echo powerpc-be-beos
+ exit ;;
+ BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
+ echo powerpc-apple-beos
+ exit ;;
+ BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
+ echo i586-pc-beos
+ exit ;;
+ BePC:Haiku:*:*) # Haiku running on Intel PC compatible.
+ echo i586-pc-haiku
+ exit ;;
+ SX-4:SUPER-UX:*:*)
+ echo sx4-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-5:SUPER-UX:*:*)
+ echo sx5-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-6:SUPER-UX:*:*)
+ echo sx6-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-7:SUPER-UX:*:*)
+ echo sx7-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-8:SUPER-UX:*:*)
+ echo sx8-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-8R:SUPER-UX:*:*)
+ echo sx8r-nec-superux${UNAME_RELEASE}
+ exit ;;
+ Power*:Rhapsody:*:*)
+ echo powerpc-apple-rhapsody${UNAME_RELEASE}
+ exit ;;
+ *:Rhapsody:*:*)
+ echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+ exit ;;
+ *:Darwin:*:*)
+ UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
+ case $UNAME_PROCESSOR in
+ i386)
+ eval $set_cc_for_build
+ if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+ if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
+ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+ grep IS_64BIT_ARCH >/dev/null
+ then
+ UNAME_PROCESSOR="x86_64"
+ fi
+ fi ;;
+ unknown) UNAME_PROCESSOR=powerpc ;;
+ esac
+ echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
+ exit ;;
+ *:procnto*:*:* | *:QNX:[0123456789]*:*)
+ UNAME_PROCESSOR=`uname -p`
+ if test "$UNAME_PROCESSOR" = "x86"; then
+ UNAME_PROCESSOR=i386
+ UNAME_MACHINE=pc
+ fi
+ echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
+ exit ;;
+ *:QNX:*:4*)
+ echo i386-pc-qnx
+ exit ;;
+ NSE-?:NONSTOP_KERNEL:*:*)
+ echo nse-tandem-nsk${UNAME_RELEASE}
+ exit ;;
+ NSR-?:NONSTOP_KERNEL:*:*)
+ echo nsr-tandem-nsk${UNAME_RELEASE}
+ exit ;;
+ *:NonStop-UX:*:*)
+ echo mips-compaq-nonstopux
+ exit ;;
+ BS2000:POSIX*:*:*)
+ echo bs2000-siemens-sysv
+ exit ;;
+ DS/*:UNIX_System_V:*:*)
+ echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
+ exit ;;
+ *:Plan9:*:*)
+ # "uname -m" is not consistent, so use $cputype instead. 386
+ # is converted to i386 for consistency with other x86
+ # operating systems.
+ if test "$cputype" = "386"; then
+ UNAME_MACHINE=i386
+ else
+ UNAME_MACHINE="$cputype"
+ fi
+ echo ${UNAME_MACHINE}-unknown-plan9
+ exit ;;
+ *:TOPS-10:*:*)
+ echo pdp10-unknown-tops10
+ exit ;;
+ *:TENEX:*:*)
+ echo pdp10-unknown-tenex
+ exit ;;
+ KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+ echo pdp10-dec-tops20
+ exit ;;
+ XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+ echo pdp10-xkl-tops20
+ exit ;;
+ *:TOPS-20:*:*)
+ echo pdp10-unknown-tops20
+ exit ;;
+ *:ITS:*:*)
+ echo pdp10-unknown-its
+ exit ;;
+ SEI:*:*:SEIUX)
+ echo mips-sei-seiux${UNAME_RELEASE}
+ exit ;;
+ *:DragonFly:*:*)
+ echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+ exit ;;
+ *:*VMS:*:*)
+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
+ case "${UNAME_MACHINE}" in
+ A*) echo alpha-dec-vms ; exit ;;
+ I*) echo ia64-dec-vms ; exit ;;
+ V*) echo vax-dec-vms ; exit ;;
+ esac ;;
+ *:XENIX:*:SysV)
+ echo i386-pc-xenix
+ exit ;;
+ i*86:skyos:*:*)
+ echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
+ exit ;;
+ i*86:rdos:*:*)
+ echo ${UNAME_MACHINE}-pc-rdos
+ exit ;;
+ i*86:AROS:*:*)
+ echo ${UNAME_MACHINE}-pc-aros
+ exit ;;
+esac
+
+#echo '(No uname command or uname output not recognized.)' 1>&2
+#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
+
+eval $set_cc_for_build
+cat >$dummy.c <<EOF
+#ifdef _SEQUENT_
+# include <sys/types.h>
+# include <sys/utsname.h>
+#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 <sys/param.h>
+ 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\n"); 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)
+# include <sys/param.h>
+# if defined (BSD)
+# if BSD == 43
+ printf ("vax-dec-bsd4.3\n"); exit (0);
+# else
+# if BSD == 199006
+ printf ("vax-dec-bsd4.3reno\n"); exit (0);
+# else
+ printf ("vax-dec-bsd\n"); exit (0);
+# endif
+# endif
+# else
+ printf ("vax-dec-bsd\n"); exit (0);
+# endif
+# 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_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
+ { echo "$SYSTEM_NAME"; exit; }
+
+# Apollos put the system type in the environment.
+
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
+
+# 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 ;;
+ c2*)
+ if getsysinfo -f scalar_acc
+ then echo c32-convex-bsd
+ else echo c2-convex-bsd
+ fi
+ exit ;;
+ c34*)
+ echo c34-convex-bsd
+ exit ;;
+ c38*)
+ echo c38-convex-bsd
+ exit ;;
+ c4*)
+ echo c4-convex-bsd
+ exit ;;
+ esac
+fi
+
+cat >&2 <<EOF
+$0: unable to guess system type
+
+This script, last modified $timestamp, has failed to recognize
+the operating system you are using. It is advised that you
+download the most up to date version of the config scripts from
+
+ http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+and
+ http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+
+If the version you run ($0) is already up to date, please
+send the following data and any information you think might be
+pertinent to <config-patches@gnu.org> in order to provide the needed
+information to handle your system.
+
+config.guess timestamp = $timestamp
+
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null`
+
+hostinfo = `(hostinfo) 2>/dev/null`
+/bin/universe = `(/bin/universe) 2>/dev/null`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null`
+/bin/arch = `(/bin/arch) 2>/dev/null`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
+
+UNAME_MACHINE = ${UNAME_MACHINE}
+UNAME_RELEASE = ${UNAME_RELEASE}
+UNAME_SYSTEM = ${UNAME_SYSTEM}
+UNAME_VERSION = ${UNAME_VERSION}
+EOF
+
+exit 1
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/config.sub b/config.sub
new file mode 100755
index 0000000..c2d1257
--- /dev/null
+++ b/config.sub
@@ -0,0 +1,1714 @@
+#! /bin/sh
+# Configuration validation subroutine script.
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+# Free Software Foundation, Inc.
+
+timestamp='2010-01-22'
+
+# 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., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, 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.
+
+
+# Please send patches to <config-patches@gnu.org>. Submit a context
+# diff and a properly formatted GNU ChangeLog entry.
+#
+# 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.
+
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+
+# 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.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION] CPU-MFR-OPSYS
+ $0 [OPTION] ALIAS
+
+Canonicalize a configuration name.
+
+Operation modes:
+ -h, --help print this help, then exit
+ -t, --time-stamp print date of last modification, then exit
+ -v, --version print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.sub ($timestamp)
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free
+Software Foundation, Inc.
+
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+ case $1 in
+ --time-stamp | --time* | -t )
+ echo "$timestamp" ; exit ;;
+ --version | -v )
+ echo "$version" ; exit ;;
+ --help | --h* | -h )
+ echo "$usage"; exit ;;
+ -- ) # Stop option processing
+ shift; break ;;
+ - ) # Use stdin as input.
+ break ;;
+ -* )
+ echo "$me: invalid option $1$help"
+ exit 1 ;;
+
+ *local*)
+ # First pass through any local machine types.
+ echo $1
+ exit ;;
+
+ * )
+ break ;;
+ esac
+done
+
+case $# in
+ 0) echo "$me: missing argument$help" >&2
+ exit 1;;
+ 1) ;;
+ *) echo "$me: too many arguments$help" >&2
+ exit 1;;
+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
+ nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
+ uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
+ kopensolaris*-gnu* | \
+ storm-chaos* | os2-emx* | rtmk-nova*)
+ 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 | -axis | -knuth | -cray | -microblaze)
+ os=
+ basic_machine=$1
+ ;;
+ -bluegene*)
+ os=-cnk
+ ;;
+ -sim | -cisco | -oki | -wec | -winbond)
+ os=
+ basic_machine=$1
+ ;;
+ -scout)
+ ;;
+ -wrs)
+ os=-vxworks
+ basic_machine=$1
+ ;;
+ -chorusos*)
+ os=-chorusos
+ basic_machine=$1
+ ;;
+ -chorusrdb)
+ os=-chorusrdb
+ basic_machine=$1
+ ;;
+ -hiux*)
+ os=-hiuxwe2
+ ;;
+ -sco6)
+ os=-sco5v6
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -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/'`
+ ;;
+ -sco5v6*)
+ # 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/'`
+ ;;
+ -udk*)
+ 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
+ ;;
+ -mint | -mint[0-9]*)
+ basic_machine=m68k-atari
+ os=-mint
+ ;;
+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.
+ 1750a | 580 \
+ | a29k \
+ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+ | am33_2.0 \
+ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
+ | bfin \
+ | c4x | clipper \
+ | d10v | d30v | dlx | dsp16xx \
+ | fido | fr30 | frv \
+ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+ | i370 | i860 | i960 | ia64 \
+ | ip2k | iq2000 \
+ | lm32 \
+ | m32c | m32r | m32rle | m68000 | m68k | m88k \
+ | maxq | mb | microblaze | mcore | mep | metag \
+ | mips | mipsbe | mipseb | mipsel | mipsle \
+ | mips16 \
+ | mips64 | mips64el \
+ | mips64octeon | mips64octeonel \
+ | mips64orion | mips64orionel \
+ | mips64r5900 | mips64r5900el \
+ | mips64vr | mips64vrel \
+ | mips64vr4100 | mips64vr4100el \
+ | mips64vr4300 | mips64vr4300el \
+ | mips64vr5000 | mips64vr5000el \
+ | mips64vr5900 | mips64vr5900el \
+ | mipsisa32 | mipsisa32el \
+ | mipsisa32r2 | mipsisa32r2el \
+ | mipsisa64 | mipsisa64el \
+ | mipsisa64r2 | mipsisa64r2el \
+ | mipsisa64sb1 | mipsisa64sb1el \
+ | mipsisa64sr71k | mipsisa64sr71kel \
+ | mipstx39 | mipstx39el \
+ | mn10200 | mn10300 \
+ | moxie \
+ | mt \
+ | msp430 \
+ | nios | nios2 \
+ | ns16k | ns32k \
+ | or32 \
+ | pdp10 | pdp11 | pj | pjl \
+ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+ | pyramid \
+ | rx \
+ | score \
+ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
+ | sh64 | sh64le \
+ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
+ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \
+ | spu | strongarm \
+ | tahoe | thumb | tic4x | tic80 | tron \
+ | ubicom32 \
+ | v850 | v850e \
+ | we32k \
+ | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \
+ | z8k | z80)
+ basic_machine=$basic_machine-unknown
+ ;;
+ m6811 | m68hc11 | m6812 | m68hc12 | picochip)
+ # Motorola 68HC11/12.
+ basic_machine=$basic_machine-unknown
+ os=-none
+ ;;
+ m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+ ;;
+ ms1)
+ basic_machine=mt-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*86 | x86_64)
+ 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.
+ 580-* \
+ | a29k-* \
+ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \
+ | avr-* | avr32-* \
+ | bfin-* | bs2000-* \
+ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
+ | clipper-* | craynv-* | cydra-* \
+ | d10v-* | d30v-* | dlx-* \
+ | elxsi-* \
+ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
+ | h8300-* | h8500-* \
+ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+ | i*86-* | i860-* | i960-* | ia64-* \
+ | ip2k-* | iq2000-* \
+ | lm32-* \
+ | m32c-* | m32r-* | m32rle-* \
+ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \
+ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+ | mips16-* \
+ | mips64-* | mips64el-* \
+ | mips64octeon-* | mips64octeonel-* \
+ | mips64orion-* | mips64orionel-* \
+ | mips64r5900-* | mips64r5900el-* \
+ | mips64vr-* | mips64vrel-* \
+ | mips64vr4100-* | mips64vr4100el-* \
+ | mips64vr4300-* | mips64vr4300el-* \
+ | mips64vr5000-* | mips64vr5000el-* \
+ | mips64vr5900-* | mips64vr5900el-* \
+ | mipsisa32-* | mipsisa32el-* \
+ | mipsisa32r2-* | mipsisa32r2el-* \
+ | mipsisa64-* | mipsisa64el-* \
+ | mipsisa64r2-* | mipsisa64r2el-* \
+ | mipsisa64sb1-* | mipsisa64sb1el-* \
+ | mipsisa64sr71k-* | mipsisa64sr71kel-* \
+ | mipstx39-* | mipstx39el-* \
+ | mmix-* \
+ | mt-* \
+ | msp430-* \
+ | nios-* | nios2-* \
+ | none-* | np1-* | ns16k-* | ns32k-* \
+ | orion-* \
+ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+ | pyramid-* \
+ | romp-* | rs6000-* | rx-* \
+ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
+ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
+ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
+ | sparclite-* \
+ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \
+ | tahoe-* | thumb-* \
+ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+ | tile-* | tilegx-* \
+ | tron-* \
+ | ubicom32-* \
+ | v850-* | v850e-* | vax-* \
+ | we32k-* \
+ | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
+ | xstormy16-* | xtensa*-* \
+ | ymp-* \
+ | z8k-* | z80-*)
+ ;;
+ # Recognize the basic CPU types without company name, with glob match.
+ xtensa*)
+ basic_machine=$basic_machine-unknown
+ ;;
+ # Recognize the various machine names and aliases which stand
+ # for a CPU type and a company and sometimes even an OS.
+ 386bsd)
+ basic_machine=i386-unknown
+ os=-bsd
+ ;;
+ 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+ basic_machine=m68000-att
+ ;;
+ 3b*)
+ basic_machine=we32k-att
+ ;;
+ a29khif)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ abacus)
+ basic_machine=abacus-unknown
+ ;;
+ adobe68k)
+ basic_machine=m68010-adobe
+ os=-scout
+ ;;
+ alliant | fx80)
+ basic_machine=fx80-alliant
+ ;;
+ altos | altos3068)
+ basic_machine=m68k-altos
+ ;;
+ am29k)
+ basic_machine=a29k-none
+ os=-bsd
+ ;;
+ amd64)
+ basic_machine=x86_64-pc
+ ;;
+ amd64-*)
+ basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ amdahl)
+ basic_machine=580-amdahl
+ os=-sysv
+ ;;
+ amiga | amiga-*)
+ basic_machine=m68k-unknown
+ ;;
+ amigaos | amigados)
+ basic_machine=m68k-unknown
+ os=-amigaos
+ ;;
+ amigaunix | amix)
+ basic_machine=m68k-unknown
+ os=-sysv4
+ ;;
+ apollo68)
+ basic_machine=m68k-apollo
+ os=-sysv
+ ;;
+ apollo68bsd)
+ basic_machine=m68k-apollo
+ os=-bsd
+ ;;
+ aros)
+ basic_machine=i386-pc
+ os=-aros
+ ;;
+ aux)
+ basic_machine=m68k-apple
+ os=-aux
+ ;;
+ balance)
+ basic_machine=ns32k-sequent
+ os=-dynix
+ ;;
+ blackfin)
+ basic_machine=bfin-unknown
+ os=-linux
+ ;;
+ blackfin-*)
+ basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
+ os=-linux
+ ;;
+ bluegene*)
+ basic_machine=powerpc-ibm
+ os=-cnk
+ ;;
+ c90)
+ basic_machine=c90-cray
+ os=-unicos
+ ;;
+ cegcc)
+ basic_machine=arm-unknown
+ os=-cegcc
+ ;;
+ 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 | j90)
+ basic_machine=j90-cray
+ os=-unicos
+ ;;
+ craynv)
+ basic_machine=craynv-cray
+ os=-unicosmp
+ ;;
+ cr16)
+ basic_machine=cr16-unknown
+ os=-elf
+ ;;
+ crds | unos)
+ basic_machine=m68k-crds
+ ;;
+ crisv32 | crisv32-* | etraxfs*)
+ basic_machine=crisv32-axis
+ ;;
+ cris | cris-* | etrax*)
+ basic_machine=cris-axis
+ ;;
+ crx)
+ basic_machine=crx-unknown
+ os=-elf
+ ;;
+ da30 | da30-*)
+ basic_machine=m68k-da30
+ ;;
+ decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
+ basic_machine=mips-dec
+ ;;
+ decsystem10* | dec10*)
+ basic_machine=pdp10-dec
+ os=-tops10
+ ;;
+ decsystem20* | dec20*)
+ basic_machine=pdp10-dec
+ os=-tops20
+ ;;
+ delta | 3300 | motorola-3300 | motorola-delta \
+ | 3300-motorola | delta-motorola)
+ basic_machine=m68k-motorola
+ ;;
+ delta88)
+ basic_machine=m88k-motorola
+ os=-sysv3
+ ;;
+ dicos)
+ basic_machine=i686-pc
+ os=-dicos
+ ;;
+ djgpp)
+ basic_machine=i586-pc
+ os=-msdosdjgpp
+ ;;
+ 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
+ ;;
+ es1800 | OSE68k | ose68k | ose | OSE)
+ basic_machine=m68k-ericsson
+ os=-ose
+ ;;
+ fx2800)
+ basic_machine=i860-alliant
+ ;;
+ genix)
+ basic_machine=ns32k-ns
+ ;;
+ gmicro)
+ basic_machine=tron-gmicro
+ os=-sysv
+ ;;
+ go32)
+ basic_machine=i386-pc
+ os=-go32
+ ;;
+ h3050r* | hiux*)
+ basic_machine=hppa1.1-hitachi
+ os=-hiuxwe2
+ ;;
+ h8300hms)
+ basic_machine=h8300-hitachi
+ os=-hms
+ ;;
+ h8300xray)
+ basic_machine=h8300-hitachi
+ os=-xray
+ ;;
+ h8500hms)
+ basic_machine=h8500-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
+ ;;
+ hp3k9[0-9][0-9] | hp9[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hp9k2[0-9][0-9] | hp9k31[0-9])
+ basic_machine=m68000-hp
+ ;;
+ hp9k3[2-9][0-9])
+ basic_machine=m68k-hp
+ ;;
+ hp9k6[0-9][0-9] | hp6[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hp9k7[0-79][0-9] | hp7[0-79][0-9])
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k78[0-9] | hp78[0-9])
+ # FIXME: really hppa2.0-hp
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
+ # FIXME: really hppa2.0-hp
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[0-9][13679] | hp8[0-9][13679])
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[0-9][0-9] | hp8[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hppa-next)
+ os=-nextstep3
+ ;;
+ hppaosf)
+ basic_machine=hppa1.1-hp
+ os=-osf
+ ;;
+ hppro)
+ basic_machine=hppa1.1-hp
+ os=-proelf
+ ;;
+ i370-ibm* | ibm*)
+ basic_machine=i370-ibm
+ ;;
+# I'm not sure what "Sysv32" means. Should this be sysv3.2?
+ i*86v32)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv32
+ ;;
+ i*86v4*)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv4
+ ;;
+ i*86v)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv
+ ;;
+ i*86sol2)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-solaris2
+ ;;
+ i386mach)
+ basic_machine=i386-mach
+ os=-mach
+ ;;
+ i386-vsta | vsta)
+ basic_machine=i386-unknown
+ os=-vsta
+ ;;
+ iris | iris4d)
+ basic_machine=mips-sgi
+ case $os in
+ -irix*)
+ ;;
+ *)
+ os=-irix4
+ ;;
+ esac
+ ;;
+ isi68 | isi)
+ basic_machine=m68k-isi
+ os=-sysv
+ ;;
+ m68knommu)
+ basic_machine=m68k-unknown
+ os=-linux
+ ;;
+ m68knommu-*)
+ basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
+ os=-linux
+ ;;
+ m88k-omron*)
+ basic_machine=m88k-omron
+ ;;
+ magnum | m3230)
+ basic_machine=mips-mips
+ os=-sysv
+ ;;
+ merlin)
+ basic_machine=ns32k-utek
+ os=-sysv
+ ;;
+ microblaze)
+ basic_machine=microblaze-xilinx
+ ;;
+ mingw32)
+ basic_machine=i386-pc
+ os=-mingw32
+ ;;
+ mingw32ce)
+ basic_machine=arm-unknown
+ os=-mingw32ce
+ ;;
+ miniframe)
+ basic_machine=m68000-convergent
+ ;;
+ *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
+ basic_machine=m68k-atari
+ os=-mint
+ ;;
+ mips3*-*)
+ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
+ ;;
+ mips3*)
+ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
+ ;;
+ monitor)
+ basic_machine=m68k-rom68k
+ os=-coff
+ ;;
+ morphos)
+ basic_machine=powerpc-unknown
+ os=-morphos
+ ;;
+ msdos)
+ basic_machine=i386-pc
+ os=-msdos
+ ;;
+ ms1-*)
+ basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
+ ;;
+ mvs)
+ basic_machine=i370-ibm
+ os=-mvs
+ ;;
+ ncr3000)
+ basic_machine=i486-ncr
+ os=-sysv4
+ ;;
+ netbsd386)
+ basic_machine=i386-unknown
+ os=-netbsd
+ ;;
+ netwinder)
+ basic_machine=armv4l-rebel
+ 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
+ ;;
+ necv70)
+ basic_machine=v70-nec
+ os=-sysv
+ ;;
+ 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
+ ;;
+ mon960)
+ basic_machine=i960-intel
+ os=-mon960
+ ;;
+ nonstopux)
+ basic_machine=mips-compaq
+ os=-nonstopux
+ ;;
+ np1)
+ basic_machine=np1-gould
+ ;;
+ nsr-tandem)
+ basic_machine=nsr-tandem
+ ;;
+ op50n-* | op60c-*)
+ basic_machine=hppa1.1-oki
+ os=-proelf
+ ;;
+ openrisc | openrisc-*)
+ basic_machine=or32-unknown
+ ;;
+ os400)
+ basic_machine=powerpc-ibm
+ os=-os400
+ ;;
+ OSE68000 | ose68000)
+ basic_machine=m68000-ericsson
+ os=-ose
+ ;;
+ os68k)
+ basic_machine=m68k-none
+ os=-os68k
+ ;;
+ pa-hitachi)
+ basic_machine=hppa1.1-hitachi
+ os=-hiuxwe2
+ ;;
+ paragon)
+ basic_machine=i860-intel
+ os=-osf
+ ;;
+ parisc)
+ basic_machine=hppa-unknown
+ os=-linux
+ ;;
+ parisc-*)
+ basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
+ os=-linux
+ ;;
+ pbd)
+ basic_machine=sparc-tti
+ ;;
+ pbb)
+ basic_machine=m68k-tti
+ ;;
+ pc532 | pc532-*)
+ basic_machine=ns32k-pc532
+ ;;
+ pc98)
+ basic_machine=i386-pc
+ ;;
+ pc98-*)
+ basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentium | p5 | k5 | k6 | nexgen | viac3)
+ basic_machine=i586-pc
+ ;;
+ pentiumpro | p6 | 6x86 | athlon | athlon_*)
+ basic_machine=i686-pc
+ ;;
+ pentiumii | pentium2 | pentiumiii | pentium3)
+ basic_machine=i686-pc
+ ;;
+ pentium4)
+ basic_machine=i786-pc
+ ;;
+ pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
+ basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentiumpro-* | p6-* | 6x86-* | athlon-*)
+ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
+ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentium4-*)
+ basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pn)
+ basic_machine=pn-gould
+ ;;
+ power) basic_machine=power-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/^[^-]*-//'`
+ ;;
+ ppc64) basic_machine=powerpc64-unknown
+ ;;
+ ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppc64le | powerpc64little | ppc64-le | powerpc64-little)
+ basic_machine=powerpc64le-unknown
+ ;;
+ ppc64le-* | powerpc64little-*)
+ basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ps2)
+ basic_machine=i386-ibm
+ ;;
+ pw32)
+ basic_machine=i586-unknown
+ os=-pw32
+ ;;
+ rdos)
+ basic_machine=i386-pc
+ os=-rdos
+ ;;
+ rom68k)
+ basic_machine=m68k-rom68k
+ os=-coff
+ ;;
+ rm[46]00)
+ basic_machine=mips-siemens
+ ;;
+ rtpc | rtpc-*)
+ basic_machine=romp-ibm
+ ;;
+ s390 | s390-*)
+ basic_machine=s390-ibm
+ ;;
+ s390x | s390x-*)
+ basic_machine=s390x-ibm
+ ;;
+ sa29200)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ sb1)
+ basic_machine=mipsisa64sb1-unknown
+ ;;
+ sb1el)
+ basic_machine=mipsisa64sb1el-unknown
+ ;;
+ sde)
+ basic_machine=mipsisa32-sde
+ os=-elf
+ ;;
+ sei)
+ basic_machine=mips-sei
+ os=-seiux
+ ;;
+ sequent)
+ basic_machine=i386-sequent
+ ;;
+ sh)
+ basic_machine=sh-hitachi
+ os=-hms
+ ;;
+ sh5el)
+ basic_machine=sh5le-unknown
+ ;;
+ sh64)
+ basic_machine=sh64-unknown
+ ;;
+ sparclite-wrs | simso-wrs)
+ basic_machine=sparclite-wrs
+ os=-vxworks
+ ;;
+ sps7)
+ basic_machine=m68k-bull
+ os=-sysv2
+ ;;
+ spur)
+ basic_machine=spur-unknown
+ ;;
+ st2000)
+ basic_machine=m68k-tandem
+ ;;
+ stratus)
+ basic_machine=i860-stratus
+ os=-sysv4
+ ;;
+ 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
+ ;;
+ sv1)
+ basic_machine=sv1-cray
+ os=-unicos
+ ;;
+ symmetry)
+ basic_machine=i386-sequent
+ os=-dynix
+ ;;
+ t3e)
+ basic_machine=alphaev5-cray
+ os=-unicos
+ ;;
+ t90)
+ basic_machine=t90-cray
+ os=-unicos
+ ;;
+ tic54x | c54x*)
+ basic_machine=tic54x-unknown
+ os=-coff
+ ;;
+ tic55x | c55x*)
+ basic_machine=tic55x-unknown
+ os=-coff
+ ;;
+ tic6x | c6x*)
+ basic_machine=tic6x-unknown
+ os=-coff
+ ;;
+ # This must be matched before tile*.
+ tilegx*)
+ basic_machine=tilegx-unknown
+ os=-linux-gnu
+ ;;
+ tile*)
+ basic_machine=tile-unknown
+ os=-linux-gnu
+ ;;
+ tx39)
+ basic_machine=mipstx39-unknown
+ ;;
+ tx39el)
+ basic_machine=mipstx39el-unknown
+ ;;
+ toad1)
+ basic_machine=pdp10-xkl
+ os=-tops20
+ ;;
+ tower | tower-32)
+ basic_machine=m68k-ncr
+ ;;
+ tpf)
+ basic_machine=s390x-ibm
+ os=-tpf
+ ;;
+ udi29k)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ ultra3)
+ basic_machine=a29k-nyu
+ os=-sym1
+ ;;
+ v810 | necv810)
+ basic_machine=v810-nec
+ os=-none
+ ;;
+ 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
+ ;;
+ w65*)
+ basic_machine=w65-wdc
+ os=-none
+ ;;
+ w89k-*)
+ basic_machine=hppa1.1-winbond
+ os=-proelf
+ ;;
+ xbox)
+ basic_machine=i686-pc
+ os=-mingw32
+ ;;
+ xps | xps100)
+ basic_machine=xps100-honeywell
+ ;;
+ ymp)
+ basic_machine=ymp-cray
+ os=-unicos
+ ;;
+ z8k-*-coff)
+ basic_machine=z8k-unknown
+ os=-sim
+ ;;
+ z80-*-coff)
+ basic_machine=z80-unknown
+ os=-sim
+ ;;
+ 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.
+ w89k)
+ basic_machine=hppa1.1-winbond
+ ;;
+ op50n)
+ basic_machine=hppa1.1-oki
+ ;;
+ op60c)
+ basic_machine=hppa1.1-oki
+ ;;
+ romp)
+ basic_machine=romp-ibm
+ ;;
+ mmix)
+ basic_machine=mmix-knuth
+ ;;
+ rs6000)
+ basic_machine=rs6000-ibm
+ ;;
+ vax)
+ basic_machine=vax-dec
+ ;;
+ pdp10)
+ # there are many clones, so DEC is not a safe bet
+ basic_machine=pdp10-unknown
+ ;;
+ pdp11)
+ basic_machine=pdp11-dec
+ ;;
+ we32k)
+ basic_machine=we32k-att
+ ;;
+ sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
+ basic_machine=sh-unknown
+ ;;
+ sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
+ basic_machine=sparc-sun
+ ;;
+ cydra)
+ basic_machine=cydra-cydrome
+ ;;
+ orion)
+ basic_machine=orion-highlevel
+ ;;
+ orion105)
+ basic_machine=clipper-highlevel
+ ;;
+ mac | mpw | mac-mpw)
+ basic_machine=m68k-apple
+ ;;
+ pmac | pmac-mpw)
+ basic_machine=powerpc-apple
+ ;;
+ *-unknown)
+ # Make sure to match an already-canonicalized machine name.
+ ;;
+ *)
+ 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.
+ -auroraux)
+ os=-auroraux
+ ;;
+ -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* | -cnk* | -sunos | -sunos[34]*\
+ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
+ | -sym* | -kopensolaris* \
+ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+ | -aos* | -aros* \
+ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
+ | -openbsd* | -solidbsd* \
+ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
+ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+ | -chorusos* | -chorusrdb* | -cegcc* \
+ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+ | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
+ | -uxpv* | -beos* | -mpeix* | -udk* \
+ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
+ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
+ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
+ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*)
+ # Remember, each alternative MUST END IN *, to match a version number.
+ ;;
+ -qnx*)
+ case $basic_machine in
+ x86-* | i*86-*)
+ ;;
+ *)
+ os=-nto$os
+ ;;
+ esac
+ ;;
+ -nto-qnx*)
+ ;;
+ -nto*)
+ os=`echo $os | sed -e 's|nto|nto-qnx|'`
+ ;;
+ -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
+ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
+ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+ ;;
+ -mac*)
+ os=`echo $os | sed -e 's|mac|macos|'`
+ ;;
+ -linux-dietlibc)
+ os=-linux-dietlibc
+ ;;
+ -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|'`
+ ;;
+ -opened*)
+ os=-openedition
+ ;;
+ -os400*)
+ os=-os400
+ ;;
+ -wince*)
+ os=-wince
+ ;;
+ -osfrose*)
+ os=-osfrose
+ ;;
+ -osf*)
+ os=-osf
+ ;;
+ -utek*)
+ os=-bsd
+ ;;
+ -dynix*)
+ os=-bsd
+ ;;
+ -acis*)
+ os=-aos
+ ;;
+ -atheos*)
+ os=-atheos
+ ;;
+ -syllable*)
+ os=-syllable
+ ;;
+ -386bsd)
+ os=-bsd
+ ;;
+ -ctix* | -uts*)
+ os=-sysv
+ ;;
+ -nova*)
+ os=-rtmk-nova
+ ;;
+ -ns2 )
+ os=-nextstep2
+ ;;
+ -nsk*)
+ os=-nsk
+ ;;
+ # Preserve the version number of sinix5.
+ -sinix5.*)
+ os=`echo $os | sed -e 's|sinix|sysv|'`
+ ;;
+ -sinix*)
+ os=-sysv4
+ ;;
+ -tpf*)
+ os=-tpf
+ ;;
+ -triton*)
+ os=-sysv3
+ ;;
+ -oss*)
+ os=-sysv3
+ ;;
+ -svr4)
+ os=-sysv4
+ ;;
+ -svr3)
+ os=-sysv3
+ ;;
+ -sysvr4)
+ os=-sysv4
+ ;;
+ # This must come after -sysvr4.
+ -sysv*)
+ ;;
+ -ose*)
+ os=-ose
+ ;;
+ -es1800*)
+ os=-ose
+ ;;
+ -xenix)
+ os=-xenix
+ ;;
+ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+ os=-mint
+ ;;
+ -aros*)
+ os=-aros
+ ;;
+ -kaos*)
+ os=-kaos
+ ;;
+ -zvmoe)
+ os=-zvmoe
+ ;;
+ -dicos*)
+ os=-dicos
+ ;;
+ -nacl*)
+ ;;
+ -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
+ score-*)
+ os=-elf
+ ;;
+ spu-*)
+ os=-elf
+ ;;
+ *-acorn)
+ os=-riscix1.2
+ ;;
+ arm*-rebel)
+ os=-linux
+ ;;
+ arm*-semi)
+ os=-aout
+ ;;
+ c4x-* | tic4x-*)
+ os=-coff
+ ;;
+ # This must come before the *-dec entry.
+ pdp10-*)
+ os=-tops20
+ ;;
+ 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
+ ;;
+ m68*-cisco)
+ os=-aout
+ ;;
+ mep-*)
+ os=-elf
+ ;;
+ mips*-cisco)
+ os=-elf
+ ;;
+ mips*-*)
+ os=-elf
+ ;;
+ or32-*)
+ os=-coff
+ ;;
+ *-tti) # must be before sparc entry or we get the wrong os.
+ os=-sysv3
+ ;;
+ sparc-* | *-sun)
+ os=-sunos4.1.1
+ ;;
+ *-be)
+ os=-beos
+ ;;
+ *-haiku)
+ os=-haiku
+ ;;
+ *-ibm)
+ os=-aix
+ ;;
+ *-knuth)
+ os=-mmixware
+ ;;
+ *-wec)
+ os=-proelf
+ ;;
+ *-winbond)
+ os=-proelf
+ ;;
+ *-oki)
+ os=-proelf
+ ;;
+ *-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
+ ;;
+ f30[01]-fujitsu | f700-fujitsu)
+ os=-uxpv
+ ;;
+ *-rom68k)
+ os=-coff
+ ;;
+ *-*bug)
+ os=-coff
+ ;;
+ *-apple)
+ os=-macos
+ ;;
+ *-atari*)
+ os=-mint
+ ;;
+ *)
+ 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
+ ;;
+ -cnk*|-aix*)
+ vendor=ibm
+ ;;
+ -beos*)
+ vendor=be
+ ;;
+ -hpux*)
+ vendor=hp
+ ;;
+ -mpeix*)
+ vendor=hp
+ ;;
+ -hiux*)
+ vendor=hitachi
+ ;;
+ -unos*)
+ vendor=crds
+ ;;
+ -dgux*)
+ vendor=dg
+ ;;
+ -luna*)
+ vendor=omron
+ ;;
+ -genix*)
+ vendor=ns
+ ;;
+ -mvs* | -opened*)
+ vendor=ibm
+ ;;
+ -os400*)
+ vendor=ibm
+ ;;
+ -ptx*)
+ vendor=sequent
+ ;;
+ -tpf*)
+ vendor=ibm
+ ;;
+ -vxsim* | -vxworks* | -windiss*)
+ vendor=wrs
+ ;;
+ -aux*)
+ vendor=apple
+ ;;
+ -hms*)
+ vendor=hitachi
+ ;;
+ -mpw* | -macos*)
+ vendor=apple
+ ;;
+ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+ vendor=atari
+ ;;
+ -vos*)
+ vendor=stratus
+ ;;
+ esac
+ basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
+ ;;
+esac
+
+echo $basic_machine$os
+exit
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/configure b/configure
new file mode 100755
index 0000000..576e62f
--- /dev/null
+++ b/configure
@@ -0,0 +1,37342 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.67 for curl -.
+#
+# Report bugs to <a suitable curl mailing list: http://curl.haxx.se/mail/>.
+#
+#
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
+# Foundation, Inc.
+#
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+#
+# Copyright (c) 1998 - 2010 Daniel Stenberg, <daniel@haxx.se>
+# This configure script may be copied, distributed and modified under the
+# terms of the curl license; see COPYING for more details
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='print -r --'
+ as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='printf %s\n'
+ as_echo_n='printf %s'
+else
+ if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+ as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+ as_echo_n='/usr/ucb/echo -n'
+ else
+ as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+ as_echo_n_body='eval
+ arg=$1;
+ case $arg in #(
+ *"$as_nl"*)
+ expr "X$arg" : "X\\(.*\\)$as_nl";
+ arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+ esac;
+ expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+ '
+ export as_echo_n_body
+ as_echo_n='sh -c $as_echo_n_body as_echo'
+ fi
+ export as_echo_body
+ as_echo='sh -c $as_echo_body as_echo'
+fi
+
+
+ if test -z "$curl_cv_PATH_SEPARATOR"; then
+ if test -z "$PATH"; then
+ as_fn_error $? "PATH not set. Cannot continue without PATH being set."
+ fi
+ tst_dirs_col=0
+ tst_save_IFS=$IFS; IFS=':'
+ for tst_dir in $PATH; do
+ IFS=$tst_save_IFS
+ test -d "$tst_dir" && tst_dirs_col=`expr $tst_dirs_col + 1`
+ done
+ IFS=$tst_save_IFS
+ tst_dirs_sem=0
+ tst_save_IFS=$IFS; IFS=';'
+ for tst_dir in $PATH; do
+ IFS=$tst_save_IFS
+ test -d "$tst_dir" && tst_dirs_sem=`expr $tst_dirs_sem + 1`
+ done
+ IFS=$tst_save_IFS
+ if test $tst_dirs_sem -eq $tst_dirs_col; then
+ if test -z "$PATH_SEPARATOR"; then
+ as_fn_error $? "PATH_SEPARATOR not set. Cannot continue without it."
+ fi
+ else
+ if test $tst_dirs_sem -gt $tst_dirs_col; then
+ tst_auto_separator=';'
+ else
+ tst_auto_separator=':'
+ fi
+ if test -z "$PATH_SEPARATOR"; then
+ PATH_SEPARATOR="$tst_auto_separator"
+ fi
+ fi
+ curl_cv_PATH_SEPARATOR="$PATH_SEPARATOR"
+ fi
+
+
+
+
+
+# IFS
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" "" $as_nl"
+
+# Find who we are. Look in the path if we contain no directory separator.
+case $0 in #((
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+ as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+ $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there. '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+if test "x$CONFIG_SHELL" = x; then
+ as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '\${1+\"\$@\"}'='\"\$@\"'
+ setopt NO_GLOB_SUBST
+else
+ case \`(set -o) 2>/dev/null\` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+"
+ as_required="as_fn_return () { (exit \$1); }
+as_fn_success () { as_fn_return 0; }
+as_fn_failure () { as_fn_return 1; }
+as_fn_ret_success () { return 0; }
+as_fn_ret_failure () { return 1; }
+
+exitcode=0
+as_fn_success || { exitcode=1; echo as_fn_success failed.; }
+as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
+as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
+as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
+if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
+
+else
+ exitcode=1; echo positional parameters were not saved.
+fi
+test x\$exitcode = x0 || exit 1"
+ as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
+ as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
+ eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
+ test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
+test \$(( 1 + 1 )) = 2 || exit 1"
+ if (eval "$as_required") 2>/dev/null; then :
+ as_have_required=yes
+else
+ as_have_required=no
+fi
+ if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
+
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ as_found=:
+ case $as_dir in #(
+ /*)
+ for as_base in sh bash ksh sh5; do
+ # Try only shells that exist, to save several forks.
+ as_shell=$as_dir/$as_base
+ if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+ { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
+ CONFIG_SHELL=$as_shell as_have_required=yes
+ if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
+ break 2
+fi
+fi
+ done;;
+ esac
+ as_found=false
+done
+$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
+ { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
+ CONFIG_SHELL=$SHELL as_have_required=yes
+fi; }
+IFS=$as_save_IFS
+
+
+ if test "x$CONFIG_SHELL" != x; then :
+ # We cannot yet assume a decent shell, so we have to provide a
+ # neutralization value for shells without unset; and this also
+ # works around shells that cannot unset nonexistent variables.
+ BASH_ENV=/dev/null
+ ENV=/dev/null
+ (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+ export CONFIG_SHELL
+ exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
+fi
+
+ if test x$as_have_required = xno; then :
+ $as_echo "$0: This script requires a shell more modern than all"
+ $as_echo "$0: the shells that I found on your system."
+ if test x${ZSH_VERSION+set} = xset ; then
+ $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
+ $as_echo "$0: be upgraded to zsh 4.3.4 or later."
+ else
+ $as_echo "$0: Please tell bug-autoconf@gnu.org and a suitable curl
+$0: mailing list: http://curl.haxx.se/mail/ about your
+$0: system, including any error possibly output before this
+$0: message. Then install a modern shell, or manually run
+$0: the script under such a shell if you do have one."
+ fi
+ exit 1
+fi
+fi
+fi
+SHELL=${CONFIG_SHELL-/bin/sh}
+export SHELL
+# Unset more variables known to interfere with behavior of common tools.
+CLICOLOR_FORCE= GREP_OPTIONS=
+unset CLICOLOR_FORCE GREP_OPTIONS
+
+## --------------------- ##
+## M4sh Shell Functions. ##
+## --------------------- ##
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+ { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+ return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+ set +e
+ as_fn_set_status $1
+ exit $1
+} # as_fn_exit
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || eval $as_mkdir_p || {
+ as_dirs=
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
+ done
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+ eval 'as_fn_append ()
+ {
+ eval $1+=\$2
+ }'
+else
+ as_fn_append ()
+ {
+ eval $1=\$$1\$2
+ }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+ eval 'as_fn_arith ()
+ {
+ as_val=$(( $* ))
+ }'
+else
+ as_fn_arith ()
+ {
+ as_val=`expr "$@" || test $? -eq 1`
+ }
+fi # as_fn_arith
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+ as_status=$1; test $as_status -eq 0 && as_status=1
+ if test "$4"; then
+ as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ fi
+ $as_echo "$as_me: error: $2" >&2
+ as_fn_exit $as_status
+} # as_fn_error
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+
+ as_lineno_1=$LINENO as_lineno_1a=$LINENO
+ as_lineno_2=$LINENO as_lineno_2a=$LINENO
+ eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
+ test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
+ # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-)
+ sed -n '
+ p
+ /[$]LINENO/=
+ ' <$as_myself |
+ sed '
+ s/[$]LINENO.*/&-/
+ t lineno
+ b
+ :lineno
+ N
+ :loop
+ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+ t loop
+ s/-\n.*//
+ ' >$as_me.lineno &&
+ chmod +x "$as_me.lineno" ||
+ { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+
+ # Don't try to exec as it changes $[0], causing all sort of problems
+ # (the dirname of $[0] is not the place where we might find the
+ # original and so on. Autoconf is especially sensitive to this).
+ . "./$as_me.lineno"
+ # Exit status is that of the last command.
+ exit
+}
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+ case `echo 'xy\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ xy) ECHO_C='\c';;
+ *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
+ ECHO_T=' ';;
+ esac;;
+*)
+ ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -p'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -p'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -p'
+ fi
+else
+ as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p='mkdir -p "$as_dir"'
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+ as_test_x='test -x'
+else
+ if ls -dL / >/dev/null 2>&1; then
+ as_ls_L_option=L
+ else
+ as_ls_L_option=
+ fi
+ as_test_x='
+ eval sh -c '\''
+ if test -d "$1"; then
+ test -d "$1/.";
+ else
+ case $1 in #(
+ -*)set "./$1";;
+ esac;
+ case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
+ ???[sx]*):;;*)false;;esac;fi
+ '\'' sh
+ '
+fi
+as_executable_p=$as_test_x
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+
+# Check that we are running under the correct shell.
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+case X$lt_ECHO in
+X*--fallback-echo)
+ # Remove one level of quotation (which was required for Make).
+ ECHO=`echo "$lt_ECHO" | sed 's,\\\\\$\\$0,'$0','`
+ ;;
+esac
+
+ECHO=${lt_ECHO-echo}
+if test "X$1" = X--no-reexec; then
+ # Discard the --no-reexec flag, and continue.
+ shift
+elif test "X$1" = X--fallback-echo; then
+ # Avoid inline document here, it may be left over
+ :
+elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then
+ # Yippee, $ECHO works!
+ :
+else
+ # Restart under the correct shell.
+ exec $SHELL "$0" --no-reexec ${1+"$@"}
+fi
+
+if test "X$1" = X--fallback-echo; then
+ # used as fallback echo
+ shift
+ cat <<_LT_EOF
+$*
+_LT_EOF
+ exit 0
+fi
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+if test -z "$lt_ECHO"; then
+ if test "X${echo_test_string+set}" != Xset; then
+ # find a string as large as possible, as long as the shell can cope with it
+ for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do
+ # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
+ if { echo_test_string=`eval $cmd`; } 2>/dev/null &&
+ { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null
+ then
+ break
+ fi
+ done
+ fi
+
+ if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ :
+ else
+ # The Solaris, AIX, and Digital Unix default echo programs unquote
+ # backslashes. This makes it impossible to quote backslashes using
+ # echo "$something" | sed 's/\\/\\\\/g'
+ #
+ # So, first we look for a working echo in the user's PATH.
+
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for dir in $PATH /usr/ucb; do
+ IFS="$lt_save_ifs"
+ if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
+ test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ ECHO="$dir/echo"
+ break
+ fi
+ done
+ IFS="$lt_save_ifs"
+
+ if test "X$ECHO" = Xecho; then
+ # We didn't find a better echo, so look for alternatives.
+ if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ # This shell has a builtin print -r that does the trick.
+ ECHO='print -r'
+ elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } &&
+ test "X$CONFIG_SHELL" != X/bin/ksh; then
+ # If we have ksh, try running configure again with it.
+ ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+ export ORIGINAL_CONFIG_SHELL
+ CONFIG_SHELL=/bin/ksh
+ export CONFIG_SHELL
+ exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"}
+ else
+ # Try using printf.
+ ECHO='printf %s\n'
+ if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ # Cool, printf works
+ :
+ elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
+ test "X$echo_testing_string" = 'X\t' &&
+ echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
+ export CONFIG_SHELL
+ SHELL="$CONFIG_SHELL"
+ export SHELL
+ ECHO="$CONFIG_SHELL $0 --fallback-echo"
+ elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
+ test "X$echo_testing_string" = 'X\t' &&
+ echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ ECHO="$CONFIG_SHELL $0 --fallback-echo"
+ else
+ # maybe with a smaller string...
+ prev=:
+
+ for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do
+ if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null
+ then
+ break
+ fi
+ prev="$cmd"
+ done
+
+ if test "$prev" != 'sed 50q "$0"'; then
+ echo_test_string=`eval $prev`
+ export echo_test_string
+ exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"}
+ else
+ # Oops. We lost completely, so just stick with echo.
+ ECHO=echo
+ fi
+ fi
+ fi
+ fi
+ fi
+fi
+
+# Copy echo and quote the copy suitably for passing to libtool from
+# the Makefile, instead of quoting the original, which is used later.
+lt_ECHO=$ECHO
+if test "X$lt_ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then
+ lt_ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo"
+fi
+
+
+
+
+test -n "$DJDIR" || exec 7<&0 </dev/null
+exec 6>&1
+
+# Name of the host.
+# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_clean_files=
+ac_config_libobj_dir=.
+LIBOBJS=
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+
+# Identity of this package.
+PACKAGE_NAME='curl'
+PACKAGE_TARNAME='curl'
+PACKAGE_VERSION='-'
+PACKAGE_STRING='curl -'
+PACKAGE_BUGREPORT='a suitable curl mailing list: http://curl.haxx.se/mail/'
+PACKAGE_URL=''
+
+ac_unique_file="lib/urldata.h"
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# ifdef HAVE_STDLIB_H
+# include <stdlib.h>
+# endif
+#endif
+#ifdef HAVE_STRING_H
+# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
+# include <memory.h>
+# endif
+# include <string.h>
+#endif
+#ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#ifdef HAVE_INTTYPES_H
+# include <inttypes.h>
+#endif
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#endif
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+enable_option_checking=no
+ac_subst_vars='LTLIBOBJS
+LIBOBJS
+SUPPORT_PROTOCOLS
+SUPPORT_FEATURES
+ENABLE_SHARED
+CROSSCOMPILING_FALSE
+CROSSCOMPILING_TRUE
+CURL_NETWORK_LIBS
+TEST_SERVER_LIBS
+CURL_LIBS
+LIBCURL_LIBS
+SONAME_BUMP_FALSE
+SONAME_BUMP_TRUE
+USE_WINDOWS_SSPI
+BUILD_LIBHOSTNAME_FALSE
+BUILD_LIBHOSTNAME_TRUE
+USE_EMBEDDED_ARES_FALSE
+USE_EMBEDDED_ARES_TRUE
+USE_ARES
+subdirs
+USE_MANUAL_FALSE
+USE_MANUAL_TRUE
+MANOPT
+NROFF
+PERL
+IPV6_ENABLED
+IDN_ENABLED
+USE_LIBRTMP
+USE_LIBSSH2
+CURL_CA_BUNDLE
+SSL_ENABLED
+USE_NSS
+HAVE_PK11_CREATEGENERICOBJECT
+USE_POLARSSL
+USE_GNUTLS
+RANDOM_FILE
+HAVE_LIBZ_FALSE
+HAVE_LIBZ_TRUE
+HAVE_LIBZ
+USE_SSLEAY
+PKGCONFIG
+KRB4_ENABLED
+USE_OPENLDAP
+CURL_DISABLE_GOPHER
+CURL_DISABLE_SMTP
+CURL_DISABLE_IMAP
+CURL_DISABLE_POP3
+CURL_DISABLE_TFTP
+CURL_DISABLE_TELNET
+CURL_DISABLE_DICT
+CURL_DISABLE_PROXY
+HAVE_LDAP_SSL
+CURL_DISABLE_LDAPS
+CURL_DISABLE_LDAP
+CURL_DISABLE_FILE
+CURL_DISABLE_FTP
+CURL_DISABLE_RTSP
+CURL_DISABLE_HTTP
+CURLDEBUG_FALSE
+CURLDEBUG_TRUE
+NO_UNDEFINED_FALSE
+NO_UNDEFINED_TRUE
+REQUIRE_LIB_DEPS
+STATICLIB_FALSE
+STATICLIB_TRUE
+MIMPURE_FALSE
+MIMPURE_TRUE
+OTOOL64
+OTOOL
+LIPO
+NMEDIT
+DSYMUTIL
+lt_ECHO
+RANLIB
+LN_S
+NM
+ac_ct_DUMPBIN
+DUMPBIN
+LD
+FGREP
+LIBTOOL
+OBJDUMP
+DLLTOOL
+AS
+CPP
+am__fastdepCC_FALSE
+am__fastdepCC_TRUE
+CCDEPMODE
+AMDEPBACKSLASH
+AMDEP_FALSE
+AMDEP_TRUE
+am__quote
+am__include
+DEPDIR
+OBJEXT
+EXEEXT
+ac_ct_CC
+CPPFLAGS
+LDFLAGS
+CFLAGS
+CC
+host_os
+host_vendor
+host_cpu
+host
+build_os
+build_vendor
+build_cpu
+build
+PKGADD_VENDOR
+PKGADD_NAME
+PKGADD_PKG
+VERSIONNUM
+am__untar
+am__tar
+AMTAR
+am__leading_dot
+SET_MAKE
+AWK
+mkdir_p
+INSTALL_STRIP_PROGRAM
+STRIP
+install_sh
+MAKEINFO
+AUTOHEADER
+AUTOMAKE
+AUTOCONF
+ACLOCAL
+VERSION
+PACKAGE
+CYGPATH_W
+INSTALL_DATA
+INSTALL_SCRIPT
+INSTALL_PROGRAM
+libext
+AR
+EGREP
+GREP
+SED
+CURL_CFLAG_EXTRAS
+CONFIGURE_OPTIONS
+MAINT
+MAINTAINER_MODE_FALSE
+MAINTAINER_MODE_TRUE
+target_alias
+host_alias
+build_alias
+LIBS
+ECHO_T
+ECHO_N
+ECHO_C
+DEFS
+mandir
+localedir
+libdir
+psdir
+pdfdir
+dvidir
+htmldir
+infodir
+docdir
+oldincludedir
+includedir
+localstatedir
+sharedstatedir
+sysconfdir
+datadir
+datarootdir
+libexecdir
+sbindir
+bindir
+program_transform_name
+prefix
+exec_prefix
+PACKAGE_URL
+PACKAGE_BUGREPORT
+PACKAGE_STRING
+PACKAGE_VERSION
+PACKAGE_TARNAME
+PACKAGE_NAME
+SHELL
+PATH
+PATH_SEPARATOR'
+ac_subst_files=''
+ac_user_opts='
+enable_option_checking
+enable_maintainer_mode
+enable_debug
+enable_optimize
+enable_warnings
+enable_werror
+enable_curldebug
+enable_ares
+enable_dependency_tracking
+enable_largefile
+enable_shared
+enable_static
+with_pic
+enable_fast_install
+with_gnu_ld
+enable_libtool_lock
+enable_http
+enable_ftp
+enable_file
+enable_ldap
+enable_ldaps
+enable_rtsp
+enable_proxy
+enable_dict
+enable_telnet
+enable_tftp
+enable_pop3
+enable_imap
+enable_smtp
+enable_gopher
+enable_manual
+enable_libgcc
+with_ldap_lib
+with_lber_lib
+enable_ipv6
+with_krb4_includes
+with_krb4_libs
+with_krb4
+with_spnego
+with_gssapi_includes
+with_gssapi_libs
+with_gssapi
+with_ssl
+with_zlib
+with_egd_socket
+with_random
+with_gnutls
+with_polarssl
+with_nss
+with_ca_bundle
+with_ca_path
+with_libssh2
+with_librtmp
+with_libidn
+enable_nonblocking
+enable_threaded_resolver
+enable_verbose
+enable_sspi
+enable_crypto_auth
+enable_cookies
+enable_hidden_symbols
+enable_soname_bump
+'
+ ac_precious_vars='build_alias
+host_alias
+target_alias
+CC
+CFLAGS
+LDFLAGS
+LIBS
+CPPFLAGS
+CPP'
+ac_subdirs_all='ares'
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+ac_unrecognized_opts=
+ac_unrecognized_sep=
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+# (The list follows the same order as the GNU Coding Standards.)
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datarootdir='${prefix}/share'
+datadir='${datarootdir}'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
+infodir='${datarootdir}/info'
+htmldir='${docdir}'
+dvidir='${docdir}'
+pdfdir='${docdir}'
+psdir='${docdir}'
+libdir='${exec_prefix}/lib'
+localedir='${datarootdir}/locale'
+mandir='${datarootdir}/man'
+
+ac_prev=
+ac_dashdash=
+for ac_option
+do
+ # If the previous option needs an argument, assign it.
+ if test -n "$ac_prev"; then
+ eval $ac_prev=\$ac_option
+ ac_prev=
+ continue
+ fi
+
+ case $ac_option in
+ *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+ *=) ac_optarg= ;;
+ *) ac_optarg=yes ;;
+ esac
+
+ # Accept the important Cygnus configure options, so we can diagnose typos.
+
+ case $ac_dashdash$ac_option in
+ --)
+ ac_dashdash=yes ;;
+
+ -bindir | --bindir | --bindi | --bind | --bin | --bi)
+ ac_prev=bindir ;;
+ -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+ bindir=$ac_optarg ;;
+
+ -build | --build | --buil | --bui | --bu)
+ ac_prev=build_alias ;;
+ -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+ build_alias=$ac_optarg ;;
+
+ -cache-file | --cache-file | --cache-fil | --cache-fi \
+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+ ac_prev=cache_file ;;
+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+ cache_file=$ac_optarg ;;
+
+ --config-cache | -C)
+ cache_file=config.cache ;;
+
+ -datadir | --datadir | --datadi | --datad)
+ ac_prev=datadir ;;
+ -datadir=* | --datadir=* | --datadi=* | --datad=*)
+ datadir=$ac_optarg ;;
+
+ -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
+ | --dataroo | --dataro | --datar)
+ ac_prev=datarootdir ;;
+ -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
+ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
+ datarootdir=$ac_optarg ;;
+
+ -disable-* | --disable-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid feature name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"enable_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval enable_$ac_useropt=no ;;
+
+ -docdir | --docdir | --docdi | --doc | --do)
+ ac_prev=docdir ;;
+ -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
+ docdir=$ac_optarg ;;
+
+ -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
+ ac_prev=dvidir ;;
+ -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
+ dvidir=$ac_optarg ;;
+
+ -enable-* | --enable-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid feature name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"enable_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval enable_$ac_useropt=\$ac_optarg ;;
+
+ -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+ | --exec | --exe | --ex)
+ ac_prev=exec_prefix ;;
+ -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+ | --exec=* | --exe=* | --ex=*)
+ exec_prefix=$ac_optarg ;;
+
+ -gas | --gas | --ga | --g)
+ # Obsolete; use --with-gas.
+ with_gas=yes ;;
+
+ -help | --help | --hel | --he | -h)
+ ac_init_help=long ;;
+ -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+ ac_init_help=recursive ;;
+ -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+ ac_init_help=short ;;
+
+ -host | --host | --hos | --ho)
+ ac_prev=host_alias ;;
+ -host=* | --host=* | --hos=* | --ho=*)
+ host_alias=$ac_optarg ;;
+
+ -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
+ ac_prev=htmldir ;;
+ -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
+ | --ht=*)
+ htmldir=$ac_optarg ;;
+
+ -includedir | --includedir | --includedi | --included | --include \
+ | --includ | --inclu | --incl | --inc)
+ ac_prev=includedir ;;
+ -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+ | --includ=* | --inclu=* | --incl=* | --inc=*)
+ includedir=$ac_optarg ;;
+
+ -infodir | --infodir | --infodi | --infod | --info | --inf)
+ ac_prev=infodir ;;
+ -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+ infodir=$ac_optarg ;;
+
+ -libdir | --libdir | --libdi | --libd)
+ ac_prev=libdir ;;
+ -libdir=* | --libdir=* | --libdi=* | --libd=*)
+ libdir=$ac_optarg ;;
+
+ -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+ | --libexe | --libex | --libe)
+ ac_prev=libexecdir ;;
+ -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+ | --libexe=* | --libex=* | --libe=*)
+ libexecdir=$ac_optarg ;;
+
+ -localedir | --localedir | --localedi | --localed | --locale)
+ ac_prev=localedir ;;
+ -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
+ localedir=$ac_optarg ;;
+
+ -localstatedir | --localstatedir | --localstatedi | --localstated \
+ | --localstate | --localstat | --localsta | --localst | --locals)
+ ac_prev=localstatedir ;;
+ -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
+ localstatedir=$ac_optarg ;;
+
+ -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+ ac_prev=mandir ;;
+ -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+ mandir=$ac_optarg ;;
+
+ -nfp | --nfp | --nf)
+ # Obsolete; use --without-fp.
+ with_fp=no ;;
+
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c | -n)
+ no_create=yes ;;
+
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+ no_recursion=yes ;;
+
+ -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+ | --oldin | --oldi | --old | --ol | --o)
+ ac_prev=oldincludedir ;;
+ -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+ oldincludedir=$ac_optarg ;;
+
+ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+ ac_prev=prefix ;;
+ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+ prefix=$ac_optarg ;;
+
+ -program-prefix | --program-prefix | --program-prefi | --program-pref \
+ | --program-pre | --program-pr | --program-p)
+ ac_prev=program_prefix ;;
+ -program-prefix=* | --program-prefix=* | --program-prefi=* \
+ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+ program_prefix=$ac_optarg ;;
+
+ -program-suffix | --program-suffix | --program-suffi | --program-suff \
+ | --program-suf | --program-su | --program-s)
+ ac_prev=program_suffix ;;
+ -program-suffix=* | --program-suffix=* | --program-suffi=* \
+ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+ program_suffix=$ac_optarg ;;
+
+ -program-transform-name | --program-transform-name \
+ | --program-transform-nam | --program-transform-na \
+ | --program-transform-n | --program-transform- \
+ | --program-transform | --program-transfor \
+ | --program-transfo | --program-transf \
+ | --program-trans | --program-tran \
+ | --progr-tra | --program-tr | --program-t)
+ ac_prev=program_transform_name ;;
+ -program-transform-name=* | --program-transform-name=* \
+ | --program-transform-nam=* | --program-transform-na=* \
+ | --program-transform-n=* | --program-transform-=* \
+ | --program-transform=* | --program-transfor=* \
+ | --program-transfo=* | --program-transf=* \
+ | --program-trans=* | --program-tran=* \
+ | --progr-tra=* | --program-tr=* | --program-t=*)
+ program_transform_name=$ac_optarg ;;
+
+ -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
+ ac_prev=pdfdir ;;
+ -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
+ pdfdir=$ac_optarg ;;
+
+ -psdir | --psdir | --psdi | --psd | --ps)
+ ac_prev=psdir ;;
+ -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
+ psdir=$ac_optarg ;;
+
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ silent=yes ;;
+
+ -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+ ac_prev=sbindir ;;
+ -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+ | --sbi=* | --sb=*)
+ sbindir=$ac_optarg ;;
+
+ -sharedstatedir | --sharedstatedir | --sharedstatedi \
+ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+ | --sharedst | --shareds | --shared | --share | --shar \
+ | --sha | --sh)
+ ac_prev=sharedstatedir ;;
+ -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+ | --sha=* | --sh=*)
+ sharedstatedir=$ac_optarg ;;
+
+ -site | --site | --sit)
+ ac_prev=site ;;
+ -site=* | --site=* | --sit=*)
+ site=$ac_optarg ;;
+
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ ac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ srcdir=$ac_optarg ;;
+
+ -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+ | --syscon | --sysco | --sysc | --sys | --sy)
+ ac_prev=sysconfdir ;;
+ -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+ sysconfdir=$ac_optarg ;;
+
+ -target | --target | --targe | --targ | --tar | --ta | --t)
+ ac_prev=target_alias ;;
+ -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+ target_alias=$ac_optarg ;;
+
+ -v | -verbose | --verbose | --verbos | --verbo | --verb)
+ verbose=yes ;;
+
+ -version | --version | --versio | --versi | --vers | -V)
+ ac_init_version=: ;;
+
+ -with-* | --with-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid package name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"with_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval with_$ac_useropt=\$ac_optarg ;;
+
+ -without-* | --without-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid package name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"with_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval with_$ac_useropt=no ;;
+
+ --x)
+ # Obsolete; use --with-x.
+ with_x=yes ;;
+
+ -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+ | --x-incl | --x-inc | --x-in | --x-i)
+ ac_prev=x_includes ;;
+ -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+ x_includes=$ac_optarg ;;
+
+ -x-libraries | --x-libraries | --x-librarie | --x-librari \
+ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+ ac_prev=x_libraries ;;
+ -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+ x_libraries=$ac_optarg ;;
+
+ -*) as_fn_error $? "unrecognized option: \`$ac_option'
+Try \`$0 --help' for more information"
+ ;;
+
+ *=*)
+ ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+ # Reject names that are not valid shell variable names.
+ case $ac_envvar in #(
+ '' | [0-9]* | *[!_$as_cr_alnum]* )
+ as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
+ esac
+ eval $ac_envvar=\$ac_optarg
+ export $ac_envvar ;;
+
+ *)
+ # FIXME: should be removed in autoconf 3.0.
+ $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+ expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+ $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+ : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+ ;;
+
+ esac
+done
+
+if test -n "$ac_prev"; then
+ ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+ as_fn_error $? "missing argument to $ac_option"
+fi
+
+if test -n "$ac_unrecognized_opts"; then
+ case $enable_option_checking in
+ no) ;;
+ fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
+ *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
+ esac
+fi
+
+# Check all directory arguments for consistency.
+for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
+ datadir sysconfdir sharedstatedir localstatedir includedir \
+ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
+ libdir localedir mandir
+do
+ eval ac_val=\$$ac_var
+ # Remove trailing slashes.
+ case $ac_val in
+ */ )
+ ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
+ eval $ac_var=\$ac_val;;
+ esac
+ # Be sure to have absolute directory names.
+ case $ac_val in
+ [\\/$]* | ?:[\\/]* ) continue;;
+ NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+ esac
+ as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+ if test "x$build_alias" = x; then
+ cross_compiling=maybe
+ $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host.
+ If a cross compiler is detected then cross compile mode will be used" >&2
+ elif test "x$build_alias" != "x$host_alias"; then
+ cross_compiling=yes
+ fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+ac_pwd=`pwd` && test -n "$ac_pwd" &&
+ac_ls_di=`ls -di .` &&
+ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
+ as_fn_error $? "working directory cannot be determined"
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+ as_fn_error $? "pwd does not report name of working directory"
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+ ac_srcdir_defaulted=yes
+ # Try the directory containing this script, then the parent directory.
+ ac_confdir=`$as_dirname -- "$as_myself" ||
+$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_myself" : 'X\(//\)[^/]' \| \
+ X"$as_myself" : 'X\(//\)$' \| \
+ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_myself" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ srcdir=$ac_confdir
+ if test ! -r "$srcdir/$ac_unique_file"; then
+ srcdir=..
+ fi
+else
+ ac_srcdir_defaulted=no
+fi
+if test ! -r "$srcdir/$ac_unique_file"; then
+ test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+ as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
+fi
+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_abs_confdir=`(
+ cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
+ pwd)`
+# When building in place, set srcdir=.
+if test "$ac_abs_confdir" = "$ac_pwd"; then
+ srcdir=.
+fi
+# Remove unnecessary trailing slashes from srcdir.
+# Double slashes in file names in object file debugging info
+# mess up M-x gdb in Emacs.
+case $srcdir in
+*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
+esac
+for ac_var in $ac_precious_vars; do
+ eval ac_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_env_${ac_var}_value=\$${ac_var}
+ eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_cv_env_${ac_var}_value=\$${ac_var}
+done
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+ # Omit some internal or obsolete options to make the list less imposing.
+ # This message is too long to be a string in the A/UX 3.1 sh.
+ cat <<_ACEOF
+\`configure' configures curl - to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE. See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+ -h, --help display this help and exit
+ --help=short display options specific to this package
+ --help=recursive display the short help of all the included packages
+ -V, --version display version information and exit
+ -q, --quiet, --silent do not print \`checking ...' messages
+ --cache-file=FILE cache test results in FILE [disabled]
+ -C, --config-cache alias for \`--cache-file=config.cache'
+ -n, --no-create do not create output files
+ --srcdir=DIR find the sources in DIR [configure dir or \`..']
+
+Installation directories:
+ --prefix=PREFIX install architecture-independent files in PREFIX
+ [$ac_default_prefix]
+ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
+ [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+ --bindir=DIR user executables [EPREFIX/bin]
+ --sbindir=DIR system admin executables [EPREFIX/sbin]
+ --libexecdir=DIR program executables [EPREFIX/libexec]
+ --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
+ --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
+ --localstatedir=DIR modifiable single-machine data [PREFIX/var]
+ --libdir=DIR object code libraries [EPREFIX/lib]
+ --includedir=DIR C header files [PREFIX/include]
+ --oldincludedir=DIR C header files for non-gcc [/usr/include]
+ --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
+ --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
+ --infodir=DIR info documentation [DATAROOTDIR/info]
+ --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
+ --mandir=DIR man documentation [DATAROOTDIR/man]
+ --docdir=DIR documentation root [DATAROOTDIR/doc/curl]
+ --htmldir=DIR html documentation [DOCDIR]
+ --dvidir=DIR dvi documentation [DOCDIR]
+ --pdfdir=DIR pdf documentation [DOCDIR]
+ --psdir=DIR ps documentation [DOCDIR]
+_ACEOF
+
+ cat <<\_ACEOF
+
+Program names:
+ --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
+
+System types:
+ --build=BUILD configure for building on BUILD [guessed]
+ --host=HOST cross-compile to build programs to run on HOST [BUILD]
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+ case $ac_init_help in
+ short | recursive ) echo "Configuration of curl -:";;
+ esac
+ cat <<\_ACEOF
+
+Optional Features:
+ --disable-option-checking ignore unrecognized --enable/--with options
+ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
+ --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
+ --enable-maintainer-mode enable make rules and dependencies not useful
+ (and sometimes confusing) to the casual installer
+ --enable-debug Enable debug build options
+ --disable-debug Disable debug build options
+ --enable-optimize Enable compiler optimizations
+ --disable-optimize Disable compiler optimizations
+ --enable-warnings Enable strict compiler warnings
+ --disable-warnings Disable strict compiler warnings
+ --enable-werror Enable compiler warnings as errors
+ --disable-werror Disable compiler warnings as errors
+ --enable-curldebug Enable curl debug memory tracking
+ --disable-curldebug Disable curl debug memory tracking
+ --enable-ares[=PATH] Enable c-ares for DNS lookups
+ --disable-ares Disable c-ares for DNS lookups
+ --disable-dependency-tracking speeds up one-time build
+ --enable-dependency-tracking do not reject slow dependency extractors
+ --disable-largefile omit support for large files
+ --enable-shared[=PKGS] build shared libraries [default=yes]
+ --enable-static[=PKGS] build static libraries [default=yes]
+ --enable-fast-install[=PKGS]
+ optimize for fast installation [default=yes]
+ --disable-libtool-lock avoid locking (might break parallel builds)
+ --enable-http Enable HTTP support
+ --disable-http Disable HTTP support
+ --enable-ftp Enable FTP support
+ --disable-ftp Disable FTP support
+ --enable-file Enable FILE support
+ --disable-file Disable FILE support
+ --enable-ldap Enable LDAP support
+ --disable-ldap Disable LDAP support
+ --enable-ldaps Enable LDAPS support
+ --disable-ldaps Disable LDAPS support
+ --enable-rtsp Enable RTSP support
+ --disable-rtsp Disable RTSP support
+ --enable-proxy Enable proxy support
+ --disable-proxy Disable proxy support
+ --enable-dict Enable DICT support
+ --disable-dict Disable DICT support
+ --enable-telnet Enable TELNET support
+ --disable-telnet Disable TELNET support
+ --enable-tftp Enable TFTP support
+ --disable-tftp Disable TFTP support
+ --enable-pop3 Enable POP3 support
+ --disable-pop3 Disable POP3 support
+ --enable-imap Enable IMAP support
+ --disable-imap Disable IMAP support
+ --enable-smtp Enable SMTP support
+ --disable-smtp Disable SMTP support
+ --enable-gopher Enable Gopher support
+ --disable-gopher Disable Gopher support
+ --enable-manual Enable built-in manual
+ --disable-manual Disable built-in manual
+ --enable-libgcc use libgcc when linking
+ --enable-ipv6 Enable ipv6 (with ipv4) support
+ --disable-ipv6 Disable ipv6 support
+ --enable-nonblocking Enable non-blocking communications
+ --disable-nonblocking Disable non-blocking communications
+ --enable-threaded-resolver
+ Enable threaded resolver
+ --disable-threaded-resolver
+ Disable threaded resolver
+ --enable-verbose Enable verbose strings
+ --disable-verbose Disable verbose strings
+ --enable-sspi Enable SSPI
+ --disable-sspi Disable SSPI
+ --enable-crypto-auth Enable cryptographic authentication
+ --disable-crypto-auth Disable cryptographic authentication
+ --enable-cookies Enable cookies support
+ --disable-cookies Disable cookies support
+ --enable-hidden-symbols Hide internal symbols in library
+ --disable-hidden-symbols
+ Leave all symbols with default visibility in library
+ --enable-soname-bump Enable enforced SONAME bump
+ --disable-soname-bump Disable enforced SONAME bump
+
+Optional Packages:
+ --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
+ --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
+ --with-pic try to use only PIC/non-PIC objects [default=use
+ both]
+ --with-gnu-ld assume the C compiler uses GNU ld [default=no]
+ --with-ldap-lib=libname Specify name of ldap lib file
+ --with-lber-lib=libname Specify name of lber lib file
+ --with-krb4-includes=DIR
+ Specify location of kerberos4 headers
+ --with-krb4-libs=DIR Specify location of kerberos4 libs
+ --with-krb4=DIR where to look for Kerberos4
+ --with-spnego=DIR Specify location of SPNEGO library fbopenssl
+ --with-gssapi-includes=DIR
+ Specify location of GSSAPI header
+ --with-gssapi-libs=DIR Specify location of GSSAPI libs
+ --with-gssapi=DIR Where to look for GSSAPI
+ --with-ssl=PATH Where to look for OpenSSL, PATH points to the SSL
+ installation (default: /usr/local/ssl); when
+ possible, set the PKG_CONFIG_PATH environment
+ variable instead of using this option
+ --without-ssl disable OpenSSL
+ --with-zlib=PATH search for zlib in PATH
+ --without-zlib disable use of zlib
+ --with-egd-socket=FILE Entropy Gathering Daemon socket pathname
+ --with-random=FILE read randomness from FILE (default=/dev/urandom)
+ --with-gnutls=PATH where to look for GnuTLS, PATH points to the
+ installation root (default: /usr/local/)
+ --without-gnutls disable GnuTLS detection
+ --with-polarssl=PATH where to look for PolarSSL, PATH points to the
+ installation root (default: /usr/local/)
+ --without-polarssl disable PolarSSL detection
+ --with-nss=PATH where to look for NSS, PATH points to the
+ installation root (default: /usr/local/)
+ --without-nss disable NSS detection
+ --with-ca-bundle=FILE File name to use as CA bundle
+ --without-ca-bundle Don't use a default CA bundle
+ --with-ca-path=DIRECTORY
+ Directory to use as CA path
+ --without-ca-path Don't use a default CA path
+ --with-libssh2=PATH Where to look for libssh2, PATH points to the
+ LIBSSH2 installation (default: /usr/local/lib); when
+ possible, set the PKG_CONFIG_PATH environment
+ variable instead of using this option
+ --without-libssh2 disable LIBSSH2
+ --with-librtmp=PATH Where to look for librtmp, PATH points to the
+ LIBRTMP installation (default: /usr/local/lib); when
+ possible, set the PKG_CONFIG_PATH environment
+ variable instead of using this option
+ --without-librtmp disable LIBRTMP
+ --with-libidn=PATH Enable libidn usage
+ --without-libidn Disable libidn usage
+
+Some influential environment variables:
+ CC C compiler command
+ CFLAGS C compiler flags
+ LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
+ nonstandard directory <lib dir>
+ LIBS libraries to pass to the linker, e.g. -l<library>
+ CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
+ you have headers in a nonstandard directory <include dir>
+ CPP C preprocessor
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+Report bugs to <a suitable curl mailing list: http://curl.haxx.se/mail/>.
+_ACEOF
+ac_status=$?
+fi
+
+if test "$ac_init_help" = "recursive"; then
+ # If there are subdirs, report their specific --help.
+ for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+ test -d "$ac_dir" ||
+ { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
+ continue
+ ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+ cd "$ac_dir" || { ac_status=$?; continue; }
+ # Check for guested configure.
+ if test -f "$ac_srcdir/configure.gnu"; then
+ echo &&
+ $SHELL "$ac_srcdir/configure.gnu" --help=recursive
+ elif test -f "$ac_srcdir/configure"; then
+ echo &&
+ $SHELL "$ac_srcdir/configure" --help=recursive
+ else
+ $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+ fi || ac_status=$?
+ cd "$ac_pwd" || { ac_status=$?; break; }
+ done
+fi
+
+test -n "$ac_init_help" && exit $ac_status
+if $ac_init_version; then
+ cat <<\_ACEOF
+curl configure -
+generated by GNU Autoconf 2.67
+
+Copyright (C) 2010 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+
+Copyright (c) 1998 - 2010 Daniel Stenberg, <daniel@haxx.se>
+This configure script may be copied, distributed and modified under the
+terms of the curl license; see COPYING for more details
+_ACEOF
+ exit
+fi
+
+## ------------------------ ##
+## Autoconf initialization. ##
+## ------------------------ ##
+
+# ac_fn_c_try_compile LINENO
+# --------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_compile ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext
+ if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_compile
+
+# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists and can be compiled using the include files in
+# INCLUDES, setting the cache variable VAR accordingly.
+ac_fn_c_check_header_compile ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval "test \"\${$3+set}\"" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ eval "$3=yes"
+else
+ eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+
+} # ac_fn_c_check_header_compile
+
+# ac_fn_c_try_run LINENO
+# ----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
+# that executables *can* be run.
+ac_fn_c_try_run ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
+ { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: program exited with status $ac_status" >&5
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=$ac_status
+fi
+ rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_run
+
+# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES
+# --------------------------------------------
+# Tries to find the compile-time value of EXPR in a program that includes
+# INCLUDES, setting VAR accordingly. Returns whether the value could be
+# computed
+ac_fn_c_compute_int ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if test "$cross_compiling" = yes; then
+ # Depending upon the size, compute the lo and hi bounds.
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int main (void)
+{
+static int test_array [1 - 2 * !(($2) >= 0)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_lo=0 ac_mid=0
+ while :; do
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int main (void)
+{
+static int test_array [1 - 2 * !(($2) <= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_hi=$ac_mid; break
+else
+ as_fn_arith $ac_mid + 1 && ac_lo=$as_val
+ if test $ac_lo -le $ac_mid; then
+ ac_lo= ac_hi=
+ break
+ fi
+ as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int main (void)
+{
+static int test_array [1 - 2 * !(($2) < 0)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_hi=-1 ac_mid=-1
+ while :; do
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int main (void)
+{
+static int test_array [1 - 2 * !(($2) >= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_lo=$ac_mid; break
+else
+ as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val
+ if test $ac_mid -le $ac_hi; then
+ ac_lo= ac_hi=
+ break
+ fi
+ as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ ac_lo= ac_hi=
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+ as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int main (void)
+{
+static int test_array [1 - 2 * !(($2) <= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_hi=$ac_mid
+else
+ as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in #((
+?*) eval "$3=\$ac_lo"; ac_retval=0 ;;
+'') ac_retval=1 ;;
+esac
+ else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+static long int longval () { return $2; }
+static unsigned long int ulongval () { return $2; }
+#include <stdio.h>
+#include <stdlib.h>
+int main (void)
+{
+
+ FILE *f = fopen ("conftest.val", "w");
+ if (! f)
+ return 1;
+ if (($2) < 0)
+ {
+ long int i = longval ();
+ if (i != ($2))
+ return 1;
+ fprintf (f, "%ld", i);
+ }
+ else
+ {
+ unsigned long int i = ulongval ();
+ if (i != ($2))
+ return 1;
+ fprintf (f, "%lu", i);
+ }
+ /* Do not output a trailing newline, as this causes \r\n confusion
+ on some platforms. */
+ return ferror (f) || fclose (f) != 0;
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+ echo >>conftest.val; read $3 <conftest.val; ac_retval=0
+else
+ ac_retval=1
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+rm -f conftest.val
+
+ fi
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_compute_int
+
+# ac_fn_c_try_cpp LINENO
+# ----------------------
+# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_cpp ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if { { ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } > conftest.i && {
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ }; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_cpp
+
+# ac_fn_c_try_link LINENO
+# -----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_link ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext conftest$ac_exeext
+ if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+ # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+ # interfere with the next link command; also delete a directory that is
+ # left behind by Apple's compiler. We do this before executing the actions.
+ rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_link
+
+# ac_fn_c_check_func LINENO FUNC VAR
+# ----------------------------------
+# Tests whether FUNC exists, setting the cache variable VAR accordingly
+ac_fn_c_check_func ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval "test \"\${$3+set}\"" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#define $2 innocuous_$2
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+#undef $2
+#ifdef __cplusplus
+extern "C"
+#endif
+char $2 ();
+#if defined __stub_$2 || defined __stub___$2
+choke me
+#endif
+
+int main (void)
+{
+return $2 ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ eval "$3=yes"
+else
+ eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+
+} # ac_fn_c_check_func
+
+# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists, giving a warning if it cannot be compiled using
+# the include files in INCLUDES and setting the cache variable VAR
+# accordingly.
+ac_fn_c_check_header_mongrel ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if eval "test \"\${$3+set}\"" = set; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval "test \"\${$3+set}\"" = set; then :
+ $as_echo_n "(cached) " >&6
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+else
+ # Is the header compilable?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
+$as_echo_n "checking $2 usability... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_header_compiler=yes
+else
+ ac_header_compiler=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
+$as_echo_n "checking $2 presence... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <$2>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+ ac_header_preproc=yes
+else
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
+ yes:no: )
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+ ;;
+ no:yes:* )
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+( $as_echo "## ---------------------------------------------------------------------- ##
+## Report this to a suitable curl mailing list: http://curl.haxx.se/mail/ ##
+## ---------------------------------------------------------------------- ##"
+ ) | sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval "test \"\${$3+set}\"" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ eval "$3=\$ac_header_compiler"
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+fi
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+
+} # ac_fn_c_check_header_mongrel
+
+# ac_fn_c_check_type LINENO TYPE VAR INCLUDES
+# -------------------------------------------
+# Tests whether TYPE exists after having included INCLUDES, setting cache
+# variable VAR accordingly.
+ac_fn_c_check_type ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval "test \"\${$3+set}\"" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ eval "$3=no"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int main (void)
+{
+if (sizeof ($2))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int main (void)
+{
+if (sizeof (($2)))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+ eval "$3=yes"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+
+} # ac_fn_c_check_type
+cat >config.log <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by curl $as_me -, which was
+generated by GNU Autoconf 2.67. Invocation command line was
+
+ $ $0 $@
+
+_ACEOF
+exec 5>>config.log
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
+
+/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown`
+/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
+/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ $as_echo "PATH: $as_dir"
+ done
+IFS=$as_save_IFS
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+ for ac_arg
+ do
+ case $ac_arg in
+ -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ continue ;;
+ *\'*)
+ ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ case $ac_pass in
+ 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
+ 2)
+ as_fn_append ac_configure_args1 " '$ac_arg'"
+ if test $ac_must_keep_next = true; then
+ ac_must_keep_next=false # Got value, back to normal.
+ else
+ case $ac_arg in
+ *=* | --config-cache | -C | -disable-* | --disable-* \
+ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+ | -with-* | --with-* | -without-* | --without-* | --x)
+ case "$ac_configure_args0 " in
+ "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+ esac
+ ;;
+ -* ) ac_must_keep_next=true ;;
+ esac
+ fi
+ as_fn_append ac_configure_args " '$ac_arg'"
+ ;;
+ esac
+ done
+done
+{ ac_configure_args0=; unset ac_configure_args0;}
+{ ac_configure_args1=; unset ac_configure_args1;}
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log. We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Use '\'' to represent an apostrophe within the trap.
+# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
+trap 'exit_status=$?
+ # Save into config.log some information that might help in debugging.
+ {
+ echo
+
+ $as_echo "## ---------------- ##
+## Cache variables. ##
+## ---------------- ##"
+ echo
+ # The following way of writing the cache mishandles newlines in values,
+(
+ for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+ *) { eval $ac_var=; unset $ac_var;} ;;
+ esac ;;
+ esac
+ done
+ (set) 2>&1 |
+ case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
+ sed -n \
+ "s/'\''/'\''\\\\'\'''\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
+ ;; #(
+ *)
+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+ ;;
+ esac |
+ sort
+)
+ echo
+
+ $as_echo "## ----------------- ##
+## Output variables. ##
+## ----------------- ##"
+ echo
+ for ac_var in $ac_subst_vars
+ do
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ esac
+ $as_echo "$ac_var='\''$ac_val'\''"
+ done | sort
+ echo
+
+ if test -n "$ac_subst_files"; then
+ $as_echo "## ------------------- ##
+## File substitutions. ##
+## ------------------- ##"
+ echo
+ for ac_var in $ac_subst_files
+ do
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ esac
+ $as_echo "$ac_var='\''$ac_val'\''"
+ done | sort
+ echo
+ fi
+
+ if test -s confdefs.h; then
+ $as_echo "## ----------- ##
+## confdefs.h. ##
+## ----------- ##"
+ echo
+ cat confdefs.h
+ echo
+ fi
+ test "$ac_signal" != 0 &&
+ $as_echo "$as_me: caught signal $ac_signal"
+ $as_echo "$as_me: exit $exit_status"
+ } >&5
+ rm -f core *.core core.conftest.* &&
+ rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
+ exit $exit_status
+' 0
+for ac_signal in 1 2 13 15; do
+ trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -f -r conftest* confdefs.h
+
+$as_echo "/* confdefs.h */" > confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_URL "$PACKAGE_URL"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer an explicitly selected file to automatically selected ones.
+ac_site_file1=NONE
+ac_site_file2=NONE
+if test -n "$CONFIG_SITE"; then
+ # We do not want a PATH search for config.site.
+ case $CONFIG_SITE in #((
+ -*) ac_site_file1=./$CONFIG_SITE;;
+ */*) ac_site_file1=$CONFIG_SITE;;
+ *) ac_site_file1=./$CONFIG_SITE;;
+ esac
+elif test "x$prefix" != xNONE; then
+ ac_site_file1=$prefix/share/config.site
+ ac_site_file2=$prefix/etc/config.site
+else
+ ac_site_file1=$ac_default_prefix/share/config.site
+ ac_site_file2=$ac_default_prefix/etc/config.site
+fi
+for ac_site_file in "$ac_site_file1" "$ac_site_file2"
+do
+ test "x$ac_site_file" = xNONE && continue
+ if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
+$as_echo "$as_me: loading site script $ac_site_file" >&6;}
+ sed 's/^/| /' "$ac_site_file" >&5
+ . "$ac_site_file" \
+ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "failed to load site script $ac_site_file
+See \`config.log' for more details" "$LINENO" 5 ; }
+ fi
+done
+
+if test -r "$cache_file"; then
+ # Some versions of bash will fail to source /dev/null (special files
+ # actually), so we avoid doing that. DJGPP emulates it as a regular file.
+ if test /dev/null != "$cache_file" && test -f "$cache_file"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
+$as_echo "$as_me: loading cache $cache_file" >&6;}
+ case $cache_file in
+ [\\/]* | ?:[\\/]* ) . "$cache_file";;
+ *) . "./$cache_file";;
+ esac
+ fi
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
+$as_echo "$as_me: creating cache $cache_file" >&6;}
+ >$cache_file
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in $ac_precious_vars; do
+ eval ac_old_set=\$ac_cv_env_${ac_var}_set
+ eval ac_new_set=\$ac_env_${ac_var}_set
+ eval ac_old_val=\$ac_cv_env_${ac_var}_value
+ eval ac_new_val=\$ac_env_${ac_var}_value
+ case $ac_old_set,$ac_new_set in
+ set,)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,set)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,);;
+ *)
+ if test "x$ac_old_val" != "x$ac_new_val"; then
+ # differences in whitespace do not lead to failure.
+ ac_old_val_w=`echo x $ac_old_val`
+ ac_new_val_w=`echo x $ac_new_val`
+ if test "$ac_old_val_w" != "$ac_new_val_w"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
+$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+ ac_cache_corrupted=:
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+ eval $ac_var=\$ac_old_val
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
+$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
+$as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
+ fi;;
+ esac
+ # Pass precious variables to config.status.
+ if test "$ac_new_set" = set; then
+ case $ac_new_val in
+ *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *) ac_arg=$ac_var=$ac_new_val ;;
+ esac
+ case " $ac_configure_args " in
+ *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
+ *) as_fn_append ac_configure_args " '$ac_arg'" ;;
+ esac
+ fi
+done
+if $ac_cache_corrupted; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
+$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+ as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
+fi
+## -------------------- ##
+## Main body of script. ##
+## -------------------- ##
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+
+
+# using curl-override.m4
+
+
+
+
+
+ac_config_headers="$ac_config_headers lib/curl_config.h src/curl_config.h include/curl/curlbuild.h"
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5
+$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; }
+ # Check whether --enable-maintainer-mode was given.
+if test "${enable_maintainer_mode+set}" = set; then :
+ enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval
+else
+ USE_MAINTAINER_MODE=no
+fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5
+$as_echo "$USE_MAINTAINER_MODE" >&6; }
+
+
+if test $USE_MAINTAINER_MODE = yes; then
+ MAINTAINER_MODE_TRUE=
+ MAINTAINER_MODE_FALSE='#'
+else
+ MAINTAINER_MODE_TRUE='#'
+ MAINTAINER_MODE_FALSE=
+fi
+
+ MAINT=$MAINTAINER_MODE_TRUE
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable debug build options" >&5
+$as_echo_n "checking whether to enable debug build options... " >&6; }
+ OPT_DEBUG_BUILD="default"
+ # Check whether --enable-debug was given.
+if test "${enable_debug+set}" = set; then :
+ enableval=$enable_debug; OPT_DEBUG_BUILD=$enableval
+fi
+
+ case "$OPT_DEBUG_BUILD" in
+ no)
+ want_debug="no"
+ ;;
+ default)
+ want_debug="no"
+ ;;
+ *)
+ want_debug="yes"
+ ;;
+ esac
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $want_debug" >&5
+$as_echo "$want_debug" >&6; }
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable compiler optimizer" >&5
+$as_echo_n "checking whether to enable compiler optimizer... " >&6; }
+ OPT_COMPILER_OPTIMIZE="default"
+ # Check whether --enable-optimize was given.
+if test "${enable_optimize+set}" = set; then :
+ enableval=$enable_optimize; OPT_COMPILER_OPTIMIZE=$enableval
+fi
+
+ case "$OPT_COMPILER_OPTIMIZE" in
+ no)
+ want_optimize="no"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ;;
+ default)
+ if test "$want_debug" = "yes"; then
+ want_optimize="assume_no"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: (assumed) no" >&5
+$as_echo "(assumed) no" >&6; }
+ else
+ want_optimize="assume_yes"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: (assumed) yes" >&5
+$as_echo "(assumed) yes" >&6; }
+ fi
+ ;;
+ *)
+ want_optimize="yes"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ ;;
+ esac
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable strict compiler warnings" >&5
+$as_echo_n "checking whether to enable strict compiler warnings... " >&6; }
+ OPT_COMPILER_WARNINGS="default"
+ # Check whether --enable-warnings was given.
+if test "${enable_warnings+set}" = set; then :
+ enableval=$enable_warnings; OPT_COMPILER_WARNINGS=$enableval
+fi
+
+ case "$OPT_COMPILER_WARNINGS" in
+ no)
+ want_warnings="no"
+ ;;
+ default)
+ want_warnings="$want_debug"
+ ;;
+ *)
+ want_warnings="yes"
+ ;;
+ esac
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $want_warnings" >&5
+$as_echo "$want_warnings" >&6; }
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable compiler warnings as errors" >&5
+$as_echo_n "checking whether to enable compiler warnings as errors... " >&6; }
+ OPT_COMPILER_WERROR="default"
+ # Check whether --enable-werror was given.
+if test "${enable_werror+set}" = set; then :
+ enableval=$enable_werror; OPT_COMPILER_WERROR=$enableval
+fi
+
+ case "$OPT_COMPILER_WERROR" in
+ no)
+ want_werror="no"
+ ;;
+ default)
+ want_werror="no"
+ ;;
+ *)
+ want_werror="yes"
+ ;;
+ esac
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $want_werror" >&5
+$as_echo "$want_werror" >&6; }
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable curl debug memory tracking" >&5
+$as_echo_n "checking whether to enable curl debug memory tracking... " >&6; }
+ OPT_CURLDEBUG_BUILD="default"
+ # Check whether --enable-curldebug was given.
+if test "${enable_curldebug+set}" = set; then :
+ enableval=$enable_curldebug; OPT_CURLDEBUG_BUILD=$enableval
+fi
+
+ case "$OPT_CURLDEBUG_BUILD" in
+ no)
+ want_curldebug="no"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ;;
+ default)
+ if test "$want_debug" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: (assumed) yes" >&5
+$as_echo "(assumed) yes" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ fi
+ want_curldebug_assumed="yes"
+ want_curldebug="$want_debug"
+ ;;
+ *)
+ want_curldebug="yes"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ ;;
+ esac
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable c-ares for DNS lookups" >&5
+$as_echo_n "checking whether to enable c-ares for DNS lookups... " >&6; }
+ OPT_ARES="default"
+ # Check whether --enable-ares was given.
+if test "${enable_ares+set}" = set; then :
+ enableval=$enable_ares; OPT_ARES=$enableval
+fi
+
+ case "$OPT_ARES" in
+ no)
+ want_ares="no"
+ ;;
+ default)
+ want_ares="no"
+ ;;
+ *)
+ want_ares="yes"
+ if test -n "$enableval" && test "$enableval" != "yes"; then
+ want_ares_path="$enableval"
+ fi
+ ;;
+ esac
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $want_ares" >&5
+$as_echo "$want_ares" >&6; }
+
+
+
+
+
+#
+# save the configure arguments
+#
+CONFIGURE_OPTIONS="\"$ac_configure_args\""
+
+
+CURL_CFLAG_EXTRAS=""
+if test X"$want_werror" = Xyes; then
+ CURL_CFLAG_EXTRAS="-Werror"
+fi
+
+
+if test -z "$SED"; then
+ # Extract the first word of "sed", so it can be a program name with args.
+set dummy sed; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_SED+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $SED in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_SED="$SED" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_dummy="$PATH:/usr/bin:/usr/local/bin"
+for as_dir in $as_dummy
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_SED="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_path_SED" && ac_cv_path_SED="not_found"
+ ;;
+esac
+fi
+SED=$ac_cv_path_SED
+if test -n "$SED"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SED" >&5
+$as_echo "$SED" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ if test -z "$SED" || test "$SED" = "not_found"; then
+ as_fn_error $? "sed not found in PATH. Cannot continue without sed." "$LINENO" 5
+ fi
+fi
+
+
+if test -z "$GREP"; then
+ # Extract the first word of "grep", so it can be a program name with args.
+set dummy grep; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_GREP+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $GREP in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_GREP="$GREP" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_dummy="$PATH:/usr/bin:/usr/local/bin"
+for as_dir in $as_dummy
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_GREP="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_path_GREP" && ac_cv_path_GREP="not_found"
+ ;;
+esac
+fi
+GREP=$ac_cv_path_GREP
+if test -n "$GREP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GREP" >&5
+$as_echo "$GREP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ if test -z "$GREP" || test "$GREP" = "not_found"; then
+ as_fn_error $? "grep not found in PATH. Cannot continue without grep." "$LINENO" 5
+ fi
+fi
+
+
+if test -z "$EGREP"; then
+ if echo a | ($GREP -E '(a|b)') >/dev/null 2>&1; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
+$as_echo_n "checking for egrep... " >&6; }
+ EGREP="$GREP -E"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $EGREP" >&5
+$as_echo "$EGREP" >&6; }
+ else
+ # Extract the first word of "egrep", so it can be a program name with args.
+set dummy egrep; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_EGREP+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $EGREP in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_EGREP="$EGREP" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_dummy="$PATH:/usr/bin:/usr/local/bin"
+for as_dir in $as_dummy
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_EGREP="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_path_EGREP" && ac_cv_path_EGREP="not_found"
+ ;;
+esac
+fi
+EGREP=$ac_cv_path_EGREP
+if test -n "$EGREP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $EGREP" >&5
+$as_echo "$EGREP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ fi
+fi
+if test -z "$EGREP" || test "$EGREP" = "not_found"; then
+ as_fn_error $? "egrep not found in PATH. Cannot continue without egrep." "$LINENO" 5
+fi
+
+
+if test -z "$AR"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ar; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_AR+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $AR in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_AR="$AR" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_dummy="$PATH:/usr/bin:/usr/local/bin"
+for as_dir in $as_dummy
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_AR="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+AR=$ac_cv_path_AR
+if test -n "$AR"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
+$as_echo "$AR" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_path_AR"; then
+ ac_pt_AR=$AR
+ # Extract the first word of "ar", so it can be a program name with args.
+set dummy ar; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_ac_pt_AR+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $ac_pt_AR in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_ac_pt_AR="$ac_pt_AR" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_dummy="$PATH:/usr/bin:/usr/local/bin"
+for as_dir in $as_dummy
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_ac_pt_AR="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+ac_pt_AR=$ac_cv_path_ac_pt_AR
+if test -n "$ac_pt_AR"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_AR" >&5
+$as_echo "$ac_pt_AR" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_pt_AR" = x; then
+ AR="not_found"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ AR=$ac_pt_AR
+ fi
+else
+ AR="$ac_cv_path_AR"
+fi
+
+ if test -z "$AR" || test "$AR" = "not_found"; then
+ as_fn_error $? "ar not found in PATH. Cannot continue without ar." "$LINENO" 5
+ fi
+fi
+
+
+
+
+if test -f ${srcdir}/include/curl/curlbuild.h; then
+ rm -f ${srcdir}/include/curl/curlbuild.h
+fi
+
+VERSION=`$SED -ne 's/^#define LIBCURL_VERSION "\(.*\)"/\1/p' ${srcdir}/include/curl/curlver.h`
+am__api_version="1.9"
+ac_aux_dir=
+for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
+ if test -f "$ac_dir/install-sh"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install-sh -c"
+ break
+ elif test -f "$ac_dir/install.sh"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install.sh -c"
+ break
+ elif test -f "$ac_dir/shtool"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/shtool install -c"
+ break
+ fi
+done
+if test -z "$ac_aux_dir"; then
+ as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5
+fi
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.
+ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
+ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
+
+
+# Find a good install program. We prefer a C program (faster),
+# so one script is as good as another. But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+ ./ | .// | /[cC]/* | \
+ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+ /usr/ucb/* ) ;;
+ *)
+ # OSF1 and SCO ODT 3.0 have their own names for install.
+ # Don't use installbsd from OSF since it installs stuff as root
+ # by default.
+ for ac_prog in ginstall scoinst install; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+ if test $ac_prog = install &&
+ grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # AIX install. It has an incompatible calling convention.
+ :
+ elif test $ac_prog = install &&
+ grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # program-specific install script used by HP pwplus--don't use.
+ :
+ else
+ rm -rf conftest.one conftest.two conftest.dir
+ echo one > conftest.one
+ echo two > conftest.two
+ mkdir conftest.dir
+ if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+ test -s conftest.one && test -s conftest.two &&
+ test -s conftest.dir/conftest.one &&
+ test -s conftest.dir/conftest.two
+ then
+ ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+ break 3
+ fi
+ fi
+ fi
+ done
+ done
+ ;;
+esac
+
+ done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+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. Don't cache a
+ # value for INSTALL within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the value is a relative name.
+ INSTALL=$ac_install_sh
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
+$as_echo_n "checking whether build environment is sane... " >&6; }
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# 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 conftest.file 2> /dev/null`
+ if test "$*" = "X"; then
+ # -L didn't work.
+ set X `ls -t $srcdir/configure conftest.file`
+ fi
+ rm -f conftest.file
+ if test "$*" != "X $srcdir/configure conftest.file" \
+ && test "$*" != "X conftest.file $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".
+ as_fn_error $? "ls -t appears to fail. Make sure there is not a broken
+alias in your environment" "$LINENO" 5
+ fi
+
+ test "$2" = conftest.file
+ )
+then
+ # Ok.
+ :
+else
+ as_fn_error $? "newly created file is older than distributed files!
+Check your system clock" "$LINENO" 5
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+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"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+
+test x"${MISSING+set}" = xset || MISSING="\${SHELL} \"$am_aux_dir/missing\""
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+ am_missing_run="$MISSING --run "
+else
+ am_missing_run=
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5
+$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
+fi
+
+if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
+ # We used to keeping the `.' as first argument, in order to
+ # allow $(mkdir_p) to be used without argument. As in
+ # $(mkdir_p) $(somedir)
+ # where $(somedir) is conditionally defined. However this is wrong
+ # for two reasons:
+ # 1. if the package is installed by a user who cannot write `.'
+ # make install will fail,
+ # 2. the above comment should most certainly read
+ # $(mkdir_p) $(DESTDIR)$(somedir)
+ # so it does not work when $(somedir) is undefined and
+ # $(DESTDIR) is not.
+ # To support the latter case, we have to write
+ # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir),
+ # so the `.' trick is pointless.
+ mkdir_p='mkdir -p --'
+else
+ # On NextStep and OpenStep, the `mkdir' command does not
+ # recognize any option. It will interpret all options as
+ # directories to create, and then abort because `.' already
+ # exists.
+ for d in ./-p ./--version;
+ do
+ test -d $d && rmdir $d
+ done
+ # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists.
+ if test -f "$ac_aux_dir/mkinstalldirs"; then
+ mkdir_p='$(mkinstalldirs)'
+ else
+ mkdir_p='$(install_sh) -d'
+ fi
+fi
+
+for ac_prog in gawk mawk nawk awk
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_AWK+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$AWK"; then
+ ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_AWK="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
+$as_echo "$AWK" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$AWK" && break
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+set x ${MAKE-make}
+ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\"" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
+all:
+ @echo '@@@%%%=$(MAKE)=@@@%%%'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
+case `${MAKE-make} -f conftest.make 2>/dev/null` in
+ *@@@%%%=?*=@@@%%%*)
+ eval ac_cv_prog_make_${ac_make}_set=yes;;
+ *)
+ eval ac_cv_prog_make_${ac_make}_set=no;;
+esac
+rm -f conftest.make
+fi
+if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ SET_MAKE=
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+ am__leading_dot=.
+else
+ am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+# test to see if srcdir already configured
+if test "`cd $srcdir && pwd`" != "`pwd`" &&
+ test -f $srcdir/config.status; then
+ as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+ if (cygpath --version) >/dev/null 2>/dev/null; then
+ CYGPATH_W='cygpath -w'
+ else
+ CYGPATH_W=echo
+ fi
+fi
+
+
+# Define the identity of the package.
+ PACKAGE=curl
+ VERSION=$VERSION
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define VERSION "$VERSION"
+_ACEOF
+
+# Some tools Automake needs.
+
+ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
+
+
+AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
+
+
+AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
+
+
+AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
+
+
+MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+
+install_sh=${install_sh-"$am_aux_dir/install-sh"}
+
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'. However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+if test "$cross_compiling" != no; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_STRIP+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$STRIP"; then
+ ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+ ac_ct_STRIP=$STRIP
+ # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_STRIP"; then
+ ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_STRIP="strip"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_STRIP" = x; then
+ STRIP=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ STRIP=$ac_ct_STRIP
+ fi
+else
+ STRIP="$ac_cv_prog_STRIP"
+fi
+
+fi
+INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
+
+# We need awk for the "check" target. The system "awk" is bad on
+# some platforms.
+# Always define AMTAR for backward compatibility.
+
+AMTAR=${AMTAR-"${am_missing_run}tar"}
+
+am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking curl version" >&5
+$as_echo_n "checking curl version... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $VERSION" >&5
+$as_echo "$VERSION" >&6; }
+
+VERSIONNUM=`$SED -ne 's/^#define LIBCURL_VERSION_NUM 0x\(.*\)/\1/p' ${srcdir}/include/curl/curlver.h`
+
+
+PKGADD_PKG="HAXXcurl"
+PKGADD_NAME="cURL - a client that groks URLs"
+PKGADD_VENDOR="curl.haxx.se"
+
+
+
+
+ curl_ssl_msg="no (--with-{ssl,gnutls,nss,polarssl} )"
+ curl_ssh_msg="no (--with-libssh2)"
+ curl_zlib_msg="no (--with-zlib)"
+ curl_krb4_msg="no (--with-krb4*)"
+ curl_gss_msg="no (--with-gssapi)"
+ curl_spnego_msg="no (--with-spnego)"
+ curl_res_msg="default (--enable-ares / --enable-threaded-resolver)"
+ curl_ipv6_msg="no (--enable-ipv6)"
+ curl_idn_msg="no (--with-libidn)"
+ curl_manual_msg="no (--enable-manual)"
+curl_verbose_msg="enabled (--disable-verbose)"
+ curl_sspi_msg="no (--enable-sspi)"
+ curl_ldap_msg="no (--enable-ldap / --with-ldap-lib / --with-lber-lib)"
+ curl_ldaps_msg="no (--enable-ldaps)"
+ curl_rtsp_msg="no (--enable-rtsp)"
+ curl_rtmp_msg="no (--with-librtmp)"
+
+ALL_LIBS=$LIBS
+
+
+# Make sure we can run config.sub.
+$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
+ as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
+$as_echo_n "checking build system type... " >&6; }
+if test "${ac_cv_build+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_build_alias=$build_alias
+test "x$ac_build_alias" = x &&
+ ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+test "x$ac_build_alias" = x &&
+ as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
+ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
+ as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
+$as_echo "$ac_cv_build" >&6; }
+case $ac_cv_build in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5 ;;
+esac
+build=$ac_cv_build
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_build
+shift
+build_cpu=$1
+build_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+build_os=$*
+IFS=$ac_save_IFS
+case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
+$as_echo_n "checking host system type... " >&6; }
+if test "${ac_cv_host+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test "x$host_alias" = x; then
+ ac_cv_host=$ac_cv_build
+else
+ ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
+ as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
+$as_echo "$ac_cv_host" >&6; }
+case $ac_cv_host in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5 ;;
+esac
+host=$ac_cv_host
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_host
+shift
+host_cpu=$1
+host_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+host_os=$*
+IFS=$ac_save_IFS
+case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define OS "${host}"
+_ACEOF
+
+
+DEPDIR="${am__leading_dot}deps"
+
+ac_config_commands="$ac_config_commands depfiles"
+
+
+am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+ @echo done
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5
+$as_echo_n "checking for style of include used by $am_make... " >&6; }
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# We grep out `Entering directory' and `Leaving directory'
+# messages which can occur if `w' ends up in MAKEFLAGS.
+# In particular we don't look at `^make:' because GNU make might
+# be invoked under some other name (usually "gmake"), in which
+# case it prints its new name instead of `make'.
+if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
+ am__include=include
+ am__quote=
+ _am_result=GNU
+fi
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+ echo '.include "confinc"' > confmf
+ if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
+ am__include=.include
+ am__quote="\""
+ _am_result=BSD
+ fi
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5
+$as_echo "$_am_result" >&6; }
+rm -f confinc confmf
+
+# Check whether --enable-dependency-tracking was given.
+if test "${enable_dependency_tracking+set}" = set; then :
+ enableval=$enable_dependency_tracking;
+fi
+
+if test "x$enable_dependency_tracking" != xno; then
+ am_depcomp="$ac_aux_dir/depcomp"
+ AMDEPBACKSLASH='\'
+fi
+
+
+if test "x$enable_dependency_tracking" != xno; then
+ AMDEP_TRUE=
+ AMDEP_FALSE='#'
+else
+ AMDEP_TRUE='#'
+ AMDEP_FALSE=
+fi
+
+
+
+
+ ac_save_CFLAGS="$CFLAGS"
+ ac_save_CPPFLAGS="$CPPFLAGS"
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_CC="${ac_tool_prefix}gcc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_CC="gcc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+else
+ CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_CC="${ac_tool_prefix}cc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ fi
+fi
+if test -z "$CC"; then
+ # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+ ac_prog_rejected=yes
+ continue
+ fi
+ ac_cv_prog_CC="cc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+ # We found a bogon in the path, so make sure we never use it.
+ set dummy $ac_cv_prog_CC
+ shift
+ if test $# != 0; then
+ # We chose a different compiler from the bogus one.
+ # However, it has the same basename, so the bogon will be chosen
+ # first if we set CC to just the basename; use the full file name.
+ shift
+ ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+ fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in cl.exe
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$CC" && break
+ done
+fi
+if test -z "$CC"; then
+ ac_ct_CC=$CC
+ for ac_prog in cl.exe
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_CC="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_CC" && break
+done
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+fi
+
+fi
+
+
+test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "no acceptable C compiler found in \$PATH
+See \`config.log' for more details" "$LINENO" 5 ; }
+
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+ { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ sed '10a\
+... rest of stderr output deleted ...
+ 10q' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ fi
+ rm -f conftest.er1 conftest.err
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+done
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
+$as_echo_n "checking whether the C compiler works... " >&6; }
+ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+
+# The possible output files:
+ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
+
+ac_rmfiles=
+for ac_file in $ac_files
+do
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+ * ) ac_rmfiles="$ac_rmfiles $ac_file";;
+ esac
+done
+rm -f $ac_rmfiles
+
+if { { ac_try="$ac_link_default"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link_default") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
+ # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
+# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
+# in a Makefile. We should not override ac_cv_exeext if it was cached,
+# so that the user can short-circuit this test for compilers unknown to
+# Autoconf.
+for ac_file in $ac_files ''
+do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
+ ;;
+ [ab].out )
+ # We found the default executable, but exeext='' is most
+ # certainly right.
+ break;;
+ *.* )
+ if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+ then :; else
+ ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ fi
+ # We set ac_cv_exeext here because the later test for it is not
+ # safe: cross compilers may not add the suffix if given an `-o'
+ # argument, so we may need to know it at that point already.
+ # Even if this section looks crufty: it has the advantage of
+ # actually working.
+ break;;
+ * )
+ break;;
+ esac
+done
+test "$ac_cv_exeext" = no && ac_cv_exeext=
+
+else
+ ac_file=''
+fi
+if test -z "$ac_file"; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "C compiler cannot create executables
+See \`config.log' for more details" "$LINENO" 5 ; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
+$as_echo_n "checking for C compiler default output file name... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
+$as_echo "$ac_file" >&6; }
+ac_exeext=$ac_cv_exeext
+
+rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
+$as_echo_n "checking for suffix of executables... " >&6; }
+if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
+ # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+ *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ break;;
+ * ) break;;
+ esac
+done
+else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details" "$LINENO" 5 ; }
+fi
+rm -f conftest conftest$ac_cv_exeext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
+$as_echo "$ac_cv_exeext" >&6; }
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdio.h>
+int main (void)
+{
+FILE *f = fopen ("conftest.out", "w");
+ return ferror (f) || fclose (f) != 0;
+
+ ;
+ return 0;
+}
+_ACEOF
+ac_clean_files="$ac_clean_files conftest.out"
+# Check that the compiler produces executables we can run. If not, either
+# the compiler is broken, or we cross compile.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
+$as_echo_n "checking whether we are cross compiling... " >&6; }
+if test "$cross_compiling" != yes; then
+ { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ if { ac_try='./conftest$ac_cv_exeext'
+ { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }; then
+ cross_compiling=no
+ else
+ if test "$cross_compiling" = maybe; then
+ cross_compiling=yes
+ else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details" "$LINENO" 5 ; }
+ fi
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+$as_echo "$cross_compiling" >&6; }
+
+rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
+$as_echo_n "checking for suffix of object files... " >&6; }
+if test "${ac_cv_objext+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
+ for ac_file in conftest.o conftest.obj conftest.*; do
+ test -f "$ac_file" || continue;
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
+ *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+ break;;
+ esac
+done
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of object files: cannot compile
+See \`config.log' for more details" "$LINENO" 5 ; }
+fi
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
+$as_echo "$ac_cv_objext" >&6; }
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
+$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+if test "${ac_cv_c_compiler_gnu+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int main (void)
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_compiler_gnu=yes
+else
+ ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+ GCC=yes
+else
+ GCC=
+fi
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+$as_echo_n "checking whether $CC accepts -g... " >&6; }
+if test "${ac_cv_prog_cc_g+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_save_c_werror_flag=$ac_c_werror_flag
+ ac_c_werror_flag=yes
+ ac_cv_prog_cc_g=no
+ CFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_g=yes
+else
+ CFLAGS=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+ ac_c_werror_flag=$ac_save_c_werror_flag
+ CFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+$as_echo "$ac_cv_prog_cc_g" >&6; }
+if test "$ac_test_CFLAGS" = set; then
+ CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+ if test "$GCC" = yes; then
+ CFLAGS="-g -O2"
+ else
+ CFLAGS="-g"
+ fi
+else
+ if test "$GCC" = yes; then
+ CFLAGS="-O2"
+ else
+ CFLAGS=
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if test "${ac_cv_prog_cc_c89+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+ char **p;
+ int i;
+{
+ return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+ char *s;
+ va_list v;
+ va_start (v,p);
+ s = g (p, va_arg (v,int));
+ va_end (v);
+ return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
+ function prototypes and stuff, but not '\xHH' hex character constants.
+ These don't provoke an error unfortunately, instead are silently treated
+ as 'x'. The following induces an error, until -std is added to get
+ proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
+ array size at least. It's necessary to write '\x00'==0 to get something
+ that's true only with -std. */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+ inside strings and character constants. */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int main (void)
+{
+return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
+ ;
+ return 0;
+}
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_c89=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext
+ test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+ x)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+ xno)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+ *)
+ CC="$CC $ac_cv_prog_cc_c89"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+if test "x$ac_cv_prog_cc_c89" != xno; then :
+
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+depcc="$CC" am_compiler_list=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named `D' -- because `-MD' means `put the output
+ # in D'.
+ mkdir conftest.dir
+ # Copy depcomp to subdir because otherwise we won't find it if we're
+ # using a relative directory.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_CC_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+ fi
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+ # Solaris 8's {/usr,}/bin/sh.
+ touch sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ case $depmode in
+ nosideeffect)
+ # after this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ none) break ;;
+ esac
+ # We check with `-c' and `-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle `-M -o', and we need to detect this.
+ if depmode=$depmode \
+ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_CC_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+
+
+if
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+ am__fastdepCC_TRUE=
+ am__fastdepCC_FALSE='#'
+else
+ am__fastdepCC_TRUE='#'
+ am__fastdepCC_FALSE=
+fi
+
+
+ CFLAGS="$ac_save_CFLAGS"
+ CPPFLAGS="$ac_save_CPPFLAGS"
+
+
+
+
+curl_includes_inttypes="\
+/* includes start */
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#endif
+#ifdef HAVE_INTTYPES_H
+# include <inttypes.h>
+#endif
+/* includes end */"
+ case $host_os in
+ irix*)
+ ac_cv_header_stdint_h="no"
+ ;;
+ esac
+ for ac_header in sys/types.h stdint.h inttypes.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$curl_includes_inttypes
+"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
+$as_echo_n "checking how to run the C preprocessor... " >&6; }
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+ CPP=
+fi
+if test -z "$CPP"; then
+ if test "${ac_cv_prog_CPP+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ # Double quotes because CPP needs to be expanded
+ for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+ do
+ ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ # <limits.h> exists even on freestanding compilers.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+ Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+else
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether nonexistent headers
+ # can be detected and how.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+ # Broken: success on invalid input.
+continue
+else
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+ break
+fi
+
+ done
+ ac_cv_prog_CPP=$CPP
+
+fi
+ CPP=$ac_cv_prog_CPP
+else
+ ac_cv_prog_CPP=$CPP
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
+$as_echo "$CPP" >&6; }
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ # <limits.h> exists even on freestanding compilers.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+ Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+else
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether nonexistent headers
+ # can be detected and how.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+ # Broken: success on invalid input.
+continue
+else
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+
+else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5 ; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
+$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
+if test "${ac_cv_path_GREP+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -z "$GREP"; then
+ ac_path_GREP_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in grep ggrep; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
+ { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
+# Check for GNU ac_path_GREP and select it if it is found.
+ # Check for GNU $ac_path_GREP
+case `"$ac_path_GREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+*)
+ ac_count=0
+ $as_echo_n 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ $as_echo 'GREP' >> "conftest.nl"
+ "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_GREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_GREP="$ac_path_GREP"
+ ac_path_GREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_GREP_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_GREP"; then
+ as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ fi
+else
+ ac_cv_path_GREP=$GREP
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
+$as_echo "$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
+$as_echo_n "checking for egrep... " >&6; }
+if test "${ac_cv_path_EGREP+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+ then ac_cv_path_EGREP="$GREP -E"
+ else
+ if test -z "$EGREP"; then
+ ac_path_EGREP_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in egrep; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
+ { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
+# Check for GNU ac_path_EGREP and select it if it is found.
+ # Check for GNU $ac_path_EGREP
+case `"$ac_path_EGREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
+*)
+ ac_count=0
+ $as_echo_n 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ $as_echo 'EGREP' >> "conftest.nl"
+ "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_EGREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_EGREP="$ac_path_EGREP"
+ ac_path_EGREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_EGREP_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_EGREP"; then
+ as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ fi
+else
+ ac_cv_path_EGREP=$EGREP
+fi
+
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
+$as_echo "$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
+$as_echo_n "checking for ANSI C header files... " >&6; }
+if test "${ac_cv_header_stdc+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_header_stdc=yes
+else
+ ac_cv_header_stdc=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+ # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "memchr" >/dev/null 2>&1; then :
+
+else
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "free" >/dev/null 2>&1; then :
+
+else
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+ if test "$cross_compiling" = yes; then :
+ :
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <ctype.h>
+#include <stdlib.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+ (('a' <= (c) && (c) <= 'i') \
+ || ('j' <= (c) && (c) <= 'r') \
+ || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+ int i;
+ for (i = 0; i < 256; i++)
+ if (XOR (islower (i), ISLOWER (i))
+ || toupper (i) != TOUPPER (i))
+ return 2;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+
+else
+ ac_cv_header_stdc=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
+$as_echo "$ac_cv_header_stdc" >&6; }
+if test $ac_cv_header_stdc = yes; then
+
+$as_echo "#define STDC_HEADERS 1" >>confdefs.h
+
+fi
+
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+ inttypes.h stdint.h unistd.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
+"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+ #
+ #
+ if test -z "$SED"; then
+ as_fn_error $? "SED not set. Cannot continue without SED being set." "$LINENO" 5
+ fi
+ #
+ # The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5
+$as_echo_n "checking size of long... " >&6; }
+if test "${ac_cv_sizeof_long+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default"; then :
+
+else
+ if test "$ac_cv_type_long" = yes; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (long)
+See \`config.log' for more details" "$LINENO" 5 ; }
+ else
+ ac_cv_sizeof_long=0
+ fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5
+$as_echo "$ac_cv_sizeof_long" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_LONG $ac_cv_sizeof_long
+_ACEOF
+
+
+ # The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of void*" >&5
+$as_echo_n "checking size of void*... " >&6; }
+if test "${ac_cv_sizeof_voidp+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ac_cv_sizeof_voidp" "$ac_includes_default"; then :
+
+else
+ if test "$ac_cv_type_voidp" = yes; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (void*)
+See \`config.log' for more details" "$LINENO" 5 ; }
+ else
+ ac_cv_sizeof_voidp=0
+ fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_voidp" >&5
+$as_echo "$ac_cv_sizeof_voidp" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_VOIDP $ac_cv_sizeof_voidp
+_ACEOF
+
+
+ #
+ if test -z "$ac_cv_sizeof_long" ||
+ test "$ac_cv_sizeof_long" -eq "0"; then
+ as_fn_error $? "cannot find out size of long." "$LINENO" 5
+ fi
+ if test -z "$ac_cv_sizeof_voidp" ||
+ test "$ac_cv_sizeof_voidp" -eq "0"; then
+ as_fn_error $? "cannot find out size of void*." "$LINENO" 5
+ fi
+ #
+ x_LP64_long=""
+ x_LP32_long=""
+ x_LP16_long=""
+ #
+ if test "$ac_cv_sizeof_long" -eq "8" &&
+ test "$ac_cv_sizeof_voidp" -ge "8"; then
+ x_LP64_long="long"
+ elif test "$ac_cv_sizeof_long" -eq "4" &&
+ test "$ac_cv_sizeof_voidp" -ge "4"; then
+ x_LP32_long="long"
+ elif test "$ac_cv_sizeof_long" -eq "2" &&
+ test "$ac_cv_sizeof_voidp" -ge "2"; then
+ x_LP16_long="long"
+ fi
+ #
+ #
+ curl_typeof_curl_off_t="unknown"
+ curl_sizeof_curl_off_t="unknown"
+ curl_format_curl_off_t="unknown"
+ curl_format_curl_off_tu="unknown"
+ #
+ if test "$curl_typeof_curl_off_t" = "unknown"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit curl_off_t data type" >&5
+$as_echo_n "checking for 64-bit curl_off_t data type... " >&6; }
+ for t8 in \
+ "$x_LP64_long" \
+ 'int64_t' \
+ '__int64' \
+ 'long long' \
+ '__longlong' \
+ '__longlong_t' ; do
+
+ if test "$curl_typeof_curl_off_t" = "unknown" && test ! -z "$t8"; then
+ tmp_includes=""
+ tmp_source=""
+ tmp_fmt=""
+ case `$as_echo "$t8" | $as_tr_sh` in
+ int64_t)
+ tmp_includes="$curl_includes_inttypes"
+ tmp_source="char f[] = PRId64;"
+ tmp_fmt="PRId64"
+ ;;
+ int32_t)
+ tmp_includes="$curl_includes_inttypes"
+ tmp_source="char f[] = PRId32;"
+ tmp_fmt="PRId32"
+ ;;
+ int16_t)
+ tmp_includes="$curl_includes_inttypes"
+ tmp_source="char f[] = PRId16;"
+ tmp_fmt="PRId16"
+ ;;
+ esac
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $tmp_includes
+ typedef $t8 curl_off_t;
+ typedef char dummy_arr[sizeof(curl_off_t) == 8 ? 1 : -1];
+
+int main (void)
+{
+
+ $tmp_source
+ curl_off_t dummy;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ if test -z "$tmp_fmt"; then
+ curl_typeof_curl_off_t="$t8"
+ curl_sizeof_curl_off_t="8"
+ else
+
+ as_ac_HaveDef=`$as_echo "curl_cv_have_def_$tmp_fmt" | $as_tr_sh`
+ as_ac_Def=`$as_echo "curl_cv_def_$tmp_fmt" | $as_tr_sh`
+ if test -z "$SED"; then
+ as_fn_error $? "SED not set. Cannot continue without SED being set." "$LINENO" 5
+ fi
+ if test -z "$GREP"; then
+ as_fn_error $? "GREP not set. Cannot continue without GREP being set." "$LINENO" 5
+ fi
+
+ tmp_exp=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ $curl_includes_inttypes
+#ifdef $tmp_fmt
+CURL_DEF_TOKEN $tmp_fmt
+#endif
+
+
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+ tmp_exp=`eval "$ac_cpp conftest.$ac_ext" 2>/dev/null | \
+ "$GREP" CURL_DEF_TOKEN 2>/dev/null | \
+ "$SED" 's/.*CURL_DEF_TOKEN[ ]//' 2>/dev/null | \
+ "$SED" 's/["][ ]*["]//g' 2>/dev/null`
+ if test -z "$tmp_exp" || test "$tmp_exp" = "$tmp_fmt"; then
+ tmp_exp=""
+ fi
+
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+ if test -z "$tmp_exp"; then
+ eval "$as_ac_HaveDef=no"
+
+ else
+ eval "$as_ac_HaveDef=yes"
+ eval "$as_ac_Def=\$tmp_exp"
+
+ fi
+
+ as_tmp_HaveFmtDef=`$as_echo "curl_cv_have_def_$tmp_fmt" | $as_tr_sh`
+ as_tmp_FmtDef=`$as_echo "curl_cv_def_$tmp_fmt" | $as_tr_sh`
+ if test `eval 'as_val=${'$as_tmp_HaveFmtDef'};$as_echo "$as_val"'` = "yes"; then
+ curl_format_curl_off_t=`eval 'as_val=${'$as_tmp_FmtDef'};$as_echo "$as_val"'`
+ curl_typeof_curl_off_t="$t8"
+ curl_sizeof_curl_off_t="8"
+ fi
+ fi
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+
+ done
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $curl_typeof_curl_off_t" >&5
+$as_echo "$curl_typeof_curl_off_t" >&6; }
+ fi
+ if test "$curl_typeof_curl_off_t" = "unknown"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 32-bit curl_off_t data type" >&5
+$as_echo_n "checking for 32-bit curl_off_t data type... " >&6; }
+ for t4 in \
+ "$x_LP32_long" \
+ 'int32_t' \
+ '__int32' \
+ 'int' ; do
+
+ if test "$curl_typeof_curl_off_t" = "unknown" && test ! -z "$t4"; then
+ tmp_includes=""
+ tmp_source=""
+ tmp_fmt=""
+ case `$as_echo "$t4" | $as_tr_sh` in
+ int64_t)
+ tmp_includes="$curl_includes_inttypes"
+ tmp_source="char f[] = PRId64;"
+ tmp_fmt="PRId64"
+ ;;
+ int32_t)
+ tmp_includes="$curl_includes_inttypes"
+ tmp_source="char f[] = PRId32;"
+ tmp_fmt="PRId32"
+ ;;
+ int16_t)
+ tmp_includes="$curl_includes_inttypes"
+ tmp_source="char f[] = PRId16;"
+ tmp_fmt="PRId16"
+ ;;
+ esac
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $tmp_includes
+ typedef $t4 curl_off_t;
+ typedef char dummy_arr[sizeof(curl_off_t) == 4 ? 1 : -1];
+
+int main (void)
+{
+
+ $tmp_source
+ curl_off_t dummy;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ if test -z "$tmp_fmt"; then
+ curl_typeof_curl_off_t="$t4"
+ curl_sizeof_curl_off_t="4"
+ else
+
+ as_ac_HaveDef=`$as_echo "curl_cv_have_def_$tmp_fmt" | $as_tr_sh`
+ as_ac_Def=`$as_echo "curl_cv_def_$tmp_fmt" | $as_tr_sh`
+ if test -z "$SED"; then
+ as_fn_error $? "SED not set. Cannot continue without SED being set." "$LINENO" 5
+ fi
+ if test -z "$GREP"; then
+ as_fn_error $? "GREP not set. Cannot continue without GREP being set." "$LINENO" 5
+ fi
+
+ tmp_exp=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ $curl_includes_inttypes
+#ifdef $tmp_fmt
+CURL_DEF_TOKEN $tmp_fmt
+#endif
+
+
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+ tmp_exp=`eval "$ac_cpp conftest.$ac_ext" 2>/dev/null | \
+ "$GREP" CURL_DEF_TOKEN 2>/dev/null | \
+ "$SED" 's/.*CURL_DEF_TOKEN[ ]//' 2>/dev/null | \
+ "$SED" 's/["][ ]*["]//g' 2>/dev/null`
+ if test -z "$tmp_exp" || test "$tmp_exp" = "$tmp_fmt"; then
+ tmp_exp=""
+ fi
+
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+ if test -z "$tmp_exp"; then
+ eval "$as_ac_HaveDef=no"
+
+ else
+ eval "$as_ac_HaveDef=yes"
+ eval "$as_ac_Def=\$tmp_exp"
+
+ fi
+
+ as_tmp_HaveFmtDef=`$as_echo "curl_cv_have_def_$tmp_fmt" | $as_tr_sh`
+ as_tmp_FmtDef=`$as_echo "curl_cv_def_$tmp_fmt" | $as_tr_sh`
+ if test `eval 'as_val=${'$as_tmp_HaveFmtDef'};$as_echo "$as_val"'` = "yes"; then
+ curl_format_curl_off_t=`eval 'as_val=${'$as_tmp_FmtDef'};$as_echo "$as_val"'`
+ curl_typeof_curl_off_t="$t4"
+ curl_sizeof_curl_off_t="4"
+ fi
+ fi
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+
+ done
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $curl_typeof_curl_off_t" >&5
+$as_echo "$curl_typeof_curl_off_t" >&6; }
+ fi
+ if test "$curl_typeof_curl_off_t" = "unknown"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 16-bit curl_off_t data type" >&5
+$as_echo_n "checking for 16-bit curl_off_t data type... " >&6; }
+ for t2 in \
+ "$x_LP16_long" \
+ 'int16_t' \
+ '__int16' \
+ 'int' ; do
+
+ if test "$curl_typeof_curl_off_t" = "unknown" && test ! -z "$t2"; then
+ tmp_includes=""
+ tmp_source=""
+ tmp_fmt=""
+ case `$as_echo "$t2" | $as_tr_sh` in
+ int64_t)
+ tmp_includes="$curl_includes_inttypes"
+ tmp_source="char f[] = PRId64;"
+ tmp_fmt="PRId64"
+ ;;
+ int32_t)
+ tmp_includes="$curl_includes_inttypes"
+ tmp_source="char f[] = PRId32;"
+ tmp_fmt="PRId32"
+ ;;
+ int16_t)
+ tmp_includes="$curl_includes_inttypes"
+ tmp_source="char f[] = PRId16;"
+ tmp_fmt="PRId16"
+ ;;
+ esac
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $tmp_includes
+ typedef $t2 curl_off_t;
+ typedef char dummy_arr[sizeof(curl_off_t) == 2 ? 1 : -1];
+
+int main (void)
+{
+
+ $tmp_source
+ curl_off_t dummy;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ if test -z "$tmp_fmt"; then
+ curl_typeof_curl_off_t="$t2"
+ curl_sizeof_curl_off_t="2"
+ else
+
+ as_ac_HaveDef=`$as_echo "curl_cv_have_def_$tmp_fmt" | $as_tr_sh`
+ as_ac_Def=`$as_echo "curl_cv_def_$tmp_fmt" | $as_tr_sh`
+ if test -z "$SED"; then
+ as_fn_error $? "SED not set. Cannot continue without SED being set." "$LINENO" 5
+ fi
+ if test -z "$GREP"; then
+ as_fn_error $? "GREP not set. Cannot continue without GREP being set." "$LINENO" 5
+ fi
+
+ tmp_exp=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ $curl_includes_inttypes
+#ifdef $tmp_fmt
+CURL_DEF_TOKEN $tmp_fmt
+#endif
+
+
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+ tmp_exp=`eval "$ac_cpp conftest.$ac_ext" 2>/dev/null | \
+ "$GREP" CURL_DEF_TOKEN 2>/dev/null | \
+ "$SED" 's/.*CURL_DEF_TOKEN[ ]//' 2>/dev/null | \
+ "$SED" 's/["][ ]*["]//g' 2>/dev/null`
+ if test -z "$tmp_exp" || test "$tmp_exp" = "$tmp_fmt"; then
+ tmp_exp=""
+ fi
+
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+ if test -z "$tmp_exp"; then
+ eval "$as_ac_HaveDef=no"
+
+ else
+ eval "$as_ac_HaveDef=yes"
+ eval "$as_ac_Def=\$tmp_exp"
+
+ fi
+
+ as_tmp_HaveFmtDef=`$as_echo "curl_cv_have_def_$tmp_fmt" | $as_tr_sh`
+ as_tmp_FmtDef=`$as_echo "curl_cv_def_$tmp_fmt" | $as_tr_sh`
+ if test `eval 'as_val=${'$as_tmp_HaveFmtDef'};$as_echo "$as_val"'` = "yes"; then
+ curl_format_curl_off_t=`eval 'as_val=${'$as_tmp_FmtDef'};$as_echo "$as_val"'`
+ curl_typeof_curl_off_t="$t2"
+ curl_sizeof_curl_off_t="2"
+ fi
+ fi
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+
+ done
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $curl_typeof_curl_off_t" >&5
+$as_echo "$curl_typeof_curl_off_t" >&6; }
+ fi
+ if test "$curl_typeof_curl_off_t" = "unknown"; then
+ as_fn_error $? "cannot find data type for curl_off_t." "$LINENO" 5
+ fi
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of curl_off_t" >&5
+$as_echo_n "checking size of curl_off_t... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $curl_sizeof_curl_off_t" >&5
+$as_echo "$curl_sizeof_curl_off_t" >&6; }
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking formatting string directive for curl_off_t" >&5
+$as_echo_n "checking formatting string directive for curl_off_t... " >&6; }
+ if test "$curl_format_curl_off_t" != "unknown"; then
+ x_pull_headers="yes"
+ curl_format_curl_off_t=`echo "$curl_format_curl_off_t" | "$SED" 's/["]//g'`
+ curl_format_curl_off_tu=`echo "$curl_format_curl_off_t" | "$SED" 's/i$/u/'`
+ curl_format_curl_off_tu=`echo "$curl_format_curl_off_tu" | "$SED" 's/d$/u/'`
+ curl_format_curl_off_tu=`echo "$curl_format_curl_off_tu" | "$SED" 's/D$/U/'`
+ else
+ x_pull_headers="no"
+ case `$as_echo "$curl_typeof_curl_off_t" | $as_tr_sh` in
+ long_long | __longlong | __longlong_t)
+ curl_format_curl_off_t="lld"
+ curl_format_curl_off_tu="llu"
+ ;;
+ long)
+ curl_format_curl_off_t="ld"
+ curl_format_curl_off_tu="lu"
+ ;;
+ int)
+ curl_format_curl_off_t="d"
+ curl_format_curl_off_tu="u"
+ ;;
+ __int64)
+ curl_format_curl_off_t="I64d"
+ curl_format_curl_off_tu="I64u"
+ ;;
+ __int32)
+ curl_format_curl_off_t="I32d"
+ curl_format_curl_off_tu="I32u"
+ ;;
+ __int16)
+ curl_format_curl_off_t="I16d"
+ curl_format_curl_off_tu="I16u"
+ ;;
+ *)
+ as_fn_error $? "cannot find print format string for curl_off_t." "$LINENO" 5
+ ;;
+ esac
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: \"$curl_format_curl_off_t\"" >&5
+$as_echo "\"$curl_format_curl_off_t\"" >&6; }
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking formatting string directive for unsigned curl_off_t" >&5
+$as_echo_n "checking formatting string directive for unsigned curl_off_t... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: \"$curl_format_curl_off_tu\"" >&5
+$as_echo "\"$curl_format_curl_off_tu\"" >&6; }
+ #
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking constant suffix string for curl_off_t" >&5
+$as_echo_n "checking constant suffix string for curl_off_t... " >&6; }
+ #
+ curl_suffix_curl_off_t="unknown"
+ curl_suffix_curl_off_tu="unknown"
+ #
+ case `$as_echo "$curl_typeof_curl_off_t" | $as_tr_sh` in
+ long_long | __longlong | __longlong_t)
+ tst_suffixes="LL::"
+ ;;
+ long)
+ tst_suffixes="L::"
+ ;;
+ int)
+ tst_suffixes="::"
+ ;;
+ __int64 | int64_t)
+ tst_suffixes="LL:i64::"
+ ;;
+ __int32 | int32_t)
+ tst_suffixes="L:i32::"
+ ;;
+ __int16 | int16_t)
+ tst_suffixes="L:i16::"
+ ;;
+ *)
+ as_fn_error $? "unexpected data type $curl_typeof_curl_off_t" "$LINENO" 5
+ ;;
+ esac
+ #
+ old_IFS=$IFS; IFS=':'
+ for tmp_ssuf in $tst_suffixes ; do
+ IFS=$old_IFS
+ if test "x$curl_suffix_curl_off_t" = "xunknown"; then
+ case $tmp_ssuf in
+ i64 | i32 | i16)
+ tmp_usuf="u$tmp_ssuf"
+ ;;
+ LL | L)
+ tmp_usuf="U$tmp_ssuf"
+ ;;
+ *)
+ tmp_usuf=""
+ ;;
+ esac
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_inttypes
+ typedef $curl_typeof_curl_off_t new_t;
+
+int main (void)
+{
+
+ new_t s1;
+ new_t s2;
+ s1 = -10$tmp_ssuf ;
+ s2 = 20$tmp_ssuf ;
+ if(s1 > s2)
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ curl_suffix_curl_off_t="$tmp_ssuf"
+ curl_suffix_curl_off_tu="$tmp_usuf"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ done
+ IFS=$old_IFS
+ #
+ if test "x$curl_suffix_curl_off_t" = "xunknown"; then
+ as_fn_error $? "cannot find constant suffix string for curl_off_t." "$LINENO" 5
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $curl_suffix_curl_off_t" >&5
+$as_echo "$curl_suffix_curl_off_t" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking constant suffix string for unsigned curl_off_t" >&5
+$as_echo_n "checking constant suffix string for unsigned curl_off_t... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $curl_suffix_curl_off_tu" >&5
+$as_echo "$curl_suffix_curl_off_tu" >&6; }
+ fi
+ #
+
+ #
+ if test "$x_pull_headers" = "yes"; then
+ if test "x$ac_cv_header_sys_types_h" = "xyes"; then
+
+cat >>confdefs.h <<_EOF
+#define CURL_PULL_SYS_TYPES_H 1
+_EOF
+
+ fi
+ if test "x$ac_cv_header_stdint_h" = "xyes"; then
+
+cat >>confdefs.h <<_EOF
+#define CURL_PULL_STDINT_H 1
+_EOF
+
+ fi
+ if test "x$ac_cv_header_inttypes_h" = "xyes"; then
+
+cat >>confdefs.h <<_EOF
+#define CURL_PULL_INTTYPES_H 1
+_EOF
+
+ fi
+ fi
+ #
+
+cat >>confdefs.h <<_EOF
+#define CURL_TYPEOF_CURL_OFF_T $curl_typeof_curl_off_t
+_EOF
+
+
+cat >>confdefs.h <<_EOF
+#define CURL_FORMAT_CURL_OFF_T "$curl_format_curl_off_t"
+_EOF
+
+
+cat >>confdefs.h <<_EOF
+#define CURL_FORMAT_CURL_OFF_TU "$curl_format_curl_off_tu"
+_EOF
+
+
+cat >>confdefs.h <<_EOF
+#define CURL_FORMAT_OFF_T "%$curl_format_curl_off_t"
+_EOF
+
+
+cat >>confdefs.h <<_EOF
+#define CURL_SIZEOF_CURL_OFF_T $curl_sizeof_curl_off_t
+_EOF
+
+
+cat >>confdefs.h <<_EOF
+#define CURL_SUFFIX_CURL_OFF_T $curl_suffix_curl_off_t
+_EOF
+
+
+cat >>confdefs.h <<_EOF
+#define CURL_SUFFIX_CURL_OFF_TU $curl_suffix_curl_off_tu
+_EOF
+
+ #
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if OS is AIX (to define _ALL_SOURCE)" >&5
+$as_echo_n "checking if OS is AIX (to define _ALL_SOURCE)... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef _AIX
+ yes_this_is_aix
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "yes_this_is_aix" >/dev/null 2>&1; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ $as_echo "#define _ALL_SOURCE 1" >>confdefs.h
+
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+fi
+rm -f conftest*
+
+
+
+
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if _THREAD_SAFE is already defined" >&5
+$as_echo_n "checking if _THREAD_SAFE is already defined... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+
+int main (void)
+{
+
+#ifdef _THREAD_SAFE
+ int dummy=1;
+#else
+ force compilation error
+#endif
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tmp_thread_safe_initially_defined="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tmp_thread_safe_initially_defined="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ #
+ if test "$tmp_thread_safe_initially_defined" = "no"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if _THREAD_SAFE is actually needed" >&5
+$as_echo_n "checking if _THREAD_SAFE is actually needed... " >&6; }
+
+ case $host_os in
+ aix[123].* | aix4.[012].*)
+ tmp_need_thread_safe="no"
+ ;;
+ aix*)
+ tmp_need_thread_safe="yes"
+ ;;
+ *)
+ tmp_need_thread_safe="no"
+ ;;
+ esac
+
+ if test "$tmp_need_thread_safe" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ fi
+ fi
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if _THREAD_SAFE is onwards defined" >&5
+$as_echo_n "checking if _THREAD_SAFE is onwards defined... " >&6; }
+ if test "$tmp_thread_safe_initially_defined" = "yes" ||
+ test "$tmp_need_thread_safe" = "yes"; then
+
+
+$as_echo "#define NEED_THREAD_SAFE 1" >>confdefs.h
+
+cat >>confdefs.h <<_EOF
+#ifndef _THREAD_SAFE
+# define _THREAD_SAFE
+#endif
+_EOF
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ fi
+ #
+
+
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if _REENTRANT is already defined" >&5
+$as_echo_n "checking if _REENTRANT is already defined... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+
+int main (void)
+{
+
+#ifdef _REENTRANT
+ int dummy=1;
+#else
+ force compilation error
+#endif
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tmp_reentrant_initially_defined="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tmp_reentrant_initially_defined="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ #
+ if test "$tmp_reentrant_initially_defined" = "no"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if _REENTRANT is actually needed" >&5
+$as_echo_n "checking if _REENTRANT is actually needed... " >&6; }
+
+ case $host_os in
+ solaris*)
+ tmp_need_reentrant="yes"
+ ;;
+ *)
+ tmp_need_reentrant="no"
+ ;;
+ esac
+
+ if test "$tmp_need_reentrant" = "no"; then
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#include <errno.h>
+
+int main (void)
+{
+
+ if(0 != errno)
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ tmp_errno="yes"
+
+else
+
+ tmp_errno="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ if test "$tmp_errno" = "yes"; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#include <errno.h>
+
+int main (void)
+{
+
+#ifdef errno
+ int dummy=1;
+#else
+ force compilation error
+#endif
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ tmp_errno="errno_macro_defined"
+
+else
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#define _REENTRANT
+#include <errno.h>
+
+int main (void)
+{
+
+#ifdef errno
+ int dummy=1;
+#else
+ force compilation error
+#endif
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ tmp_errno="errno_macro_needs_reentrant"
+ tmp_need_reentrant="yes"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+
+ fi
+ if test "$tmp_need_reentrant" = "no"; then
+
+ if test "$tmp_need_reentrant" = "no"; then
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#define gmtime_r innocuous_gmtime_r
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+#undef gmtime_r
+#ifdef __cplusplus
+extern "C"
+#endif
+char gmtime_r ();
+#if defined __stub_gmtime_r || defined __stub___gmtime_r
+choke me
+#endif
+
+int main (void)
+{
+return gmtime_r ();
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ tmp_gmtime_r="yes"
+
+else
+
+ tmp_gmtime_r="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ if test "$tmp_gmtime_r" = "yes"; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <sys/types.h>
+#include <time.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "gmtime_r" >/dev/null 2>&1; then :
+
+ tmp_gmtime_r="proto_declared"
+
+else
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#define _REENTRANT
+#include <sys/types.h>
+#include <time.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "gmtime_r" >/dev/null 2>&1; then :
+
+ tmp_gmtime_r="proto_needs_reentrant"
+ tmp_need_reentrant="yes"
+
+fi
+rm -f conftest*
+
+
+fi
+rm -f conftest*
+
+ fi
+
+ fi
+ if test "$tmp_need_reentrant" = "no"; then
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#define localtime_r innocuous_localtime_r
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+#undef localtime_r
+#ifdef __cplusplus
+extern "C"
+#endif
+char localtime_r ();
+#if defined __stub_localtime_r || defined __stub___localtime_r
+choke me
+#endif
+
+int main (void)
+{
+return localtime_r ();
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ tmp_localtime_r="yes"
+
+else
+
+ tmp_localtime_r="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ if test "$tmp_localtime_r" = "yes"; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <sys/types.h>
+#include <time.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "localtime_r" >/dev/null 2>&1; then :
+
+ tmp_localtime_r="proto_declared"
+
+else
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#define _REENTRANT
+#include <sys/types.h>
+#include <time.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "localtime_r" >/dev/null 2>&1; then :
+
+ tmp_localtime_r="proto_needs_reentrant"
+ tmp_need_reentrant="yes"
+
+fi
+rm -f conftest*
+
+
+fi
+rm -f conftest*
+
+ fi
+
+ fi
+ if test "$tmp_need_reentrant" = "no"; then
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#define strerror_r innocuous_strerror_r
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+#undef strerror_r
+#ifdef __cplusplus
+extern "C"
+#endif
+char strerror_r ();
+#if defined __stub_strerror_r || defined __stub___strerror_r
+choke me
+#endif
+
+int main (void)
+{
+return strerror_r ();
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ tmp_strerror_r="yes"
+
+else
+
+ tmp_strerror_r="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ if test "$tmp_strerror_r" = "yes"; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <sys/types.h>
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "strerror_r" >/dev/null 2>&1; then :
+
+ tmp_strerror_r="proto_declared"
+
+else
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#define _REENTRANT
+#include <sys/types.h>
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "strerror_r" >/dev/null 2>&1; then :
+
+ tmp_strerror_r="proto_needs_reentrant"
+ tmp_need_reentrant="yes"
+
+fi
+rm -f conftest*
+
+
+fi
+rm -f conftest*
+
+ fi
+
+ fi
+ if test "$tmp_need_reentrant" = "no"; then
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#define strtok_r innocuous_strtok_r
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+#undef strtok_r
+#ifdef __cplusplus
+extern "C"
+#endif
+char strtok_r ();
+#if defined __stub_strtok_r || defined __stub___strtok_r
+choke me
+#endif
+
+int main (void)
+{
+return strtok_r ();
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ tmp_strtok_r="yes"
+
+else
+
+ tmp_strtok_r="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ if test "$tmp_strtok_r" = "yes"; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <sys/types.h>
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "strtok_r" >/dev/null 2>&1; then :
+
+ tmp_strtok_r="proto_declared"
+
+else
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#define _REENTRANT
+#include <sys/types.h>
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "strtok_r" >/dev/null 2>&1; then :
+
+ tmp_strtok_r="proto_needs_reentrant"
+ tmp_need_reentrant="yes"
+
+fi
+rm -f conftest*
+
+
+fi
+rm -f conftest*
+
+ fi
+
+ fi
+ if test "$tmp_need_reentrant" = "no"; then
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#define inet_ntoa_r innocuous_inet_ntoa_r
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+#undef inet_ntoa_r
+#ifdef __cplusplus
+extern "C"
+#endif
+char inet_ntoa_r ();
+#if defined __stub_inet_ntoa_r || defined __stub___inet_ntoa_r
+choke me
+#endif
+
+int main (void)
+{
+return inet_ntoa_r ();
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ tmp_inet_ntoa_r="yes"
+
+else
+
+ tmp_inet_ntoa_r="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ if test "$tmp_inet_ntoa_r" = "yes"; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "inet_ntoa_r" >/dev/null 2>&1; then :
+
+ tmp_inet_ntoa_r="proto_declared"
+
+else
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#define _REENTRANT
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "inet_ntoa_r" >/dev/null 2>&1; then :
+
+ tmp_inet_ntoa_r="proto_needs_reentrant"
+ tmp_need_reentrant="yes"
+
+fi
+rm -f conftest*
+
+
+fi
+rm -f conftest*
+
+ fi
+
+ fi
+ if test "$tmp_need_reentrant" = "no"; then
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#define gethostbyaddr_r innocuous_gethostbyaddr_r
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+#undef gethostbyaddr_r
+#ifdef __cplusplus
+extern "C"
+#endif
+char gethostbyaddr_r ();
+#if defined __stub_gethostbyaddr_r || defined __stub___gethostbyaddr_r
+choke me
+#endif
+
+int main (void)
+{
+return gethostbyaddr_r ();
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ tmp_gethostbyaddr_r="yes"
+
+else
+
+ tmp_gethostbyaddr_r="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ if test "$tmp_gethostbyaddr_r" = "yes"; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <sys/types.h>
+#include <netdb.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "gethostbyaddr_r" >/dev/null 2>&1; then :
+
+ tmp_gethostbyaddr_r="proto_declared"
+
+else
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#define _REENTRANT
+#include <sys/types.h>
+#include <netdb.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "gethostbyaddr_r" >/dev/null 2>&1; then :
+
+ tmp_gethostbyaddr_r="proto_needs_reentrant"
+ tmp_need_reentrant="yes"
+
+fi
+rm -f conftest*
+
+
+fi
+rm -f conftest*
+
+ fi
+
+ fi
+ if test "$tmp_need_reentrant" = "no"; then
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#define gethostbyname_r innocuous_gethostbyname_r
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+#undef gethostbyname_r
+#ifdef __cplusplus
+extern "C"
+#endif
+char gethostbyname_r ();
+#if defined __stub_gethostbyname_r || defined __stub___gethostbyname_r
+choke me
+#endif
+
+int main (void)
+{
+return gethostbyname_r ();
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ tmp_gethostbyname_r="yes"
+
+else
+
+ tmp_gethostbyname_r="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ if test "$tmp_gethostbyname_r" = "yes"; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <sys/types.h>
+#include <netdb.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "gethostbyname_r" >/dev/null 2>&1; then :
+
+ tmp_gethostbyname_r="proto_declared"
+
+else
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#define _REENTRANT
+#include <sys/types.h>
+#include <netdb.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "gethostbyname_r" >/dev/null 2>&1; then :
+
+ tmp_gethostbyname_r="proto_needs_reentrant"
+ tmp_need_reentrant="yes"
+
+fi
+rm -f conftest*
+
+
+fi
+rm -f conftest*
+
+ fi
+
+ fi
+ if test "$tmp_need_reentrant" = "no"; then
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#define getprotobyname_r innocuous_getprotobyname_r
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+#undef getprotobyname_r
+#ifdef __cplusplus
+extern "C"
+#endif
+char getprotobyname_r ();
+#if defined __stub_getprotobyname_r || defined __stub___getprotobyname_r
+choke me
+#endif
+
+int main (void)
+{
+return getprotobyname_r ();
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ tmp_getprotobyname_r="yes"
+
+else
+
+ tmp_getprotobyname_r="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ if test "$tmp_getprotobyname_r" = "yes"; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <sys/types.h>
+#include <netdb.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "getprotobyname_r" >/dev/null 2>&1; then :
+
+ tmp_getprotobyname_r="proto_declared"
+
+else
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#define _REENTRANT
+#include <sys/types.h>
+#include <netdb.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "getprotobyname_r" >/dev/null 2>&1; then :
+
+ tmp_getprotobyname_r="proto_needs_reentrant"
+ tmp_need_reentrant="yes"
+
+fi
+rm -f conftest*
+
+
+fi
+rm -f conftest*
+
+ fi
+
+ fi
+ if test "$tmp_need_reentrant" = "no"; then
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#define getservbyport_r innocuous_getservbyport_r
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+#undef getservbyport_r
+#ifdef __cplusplus
+extern "C"
+#endif
+char getservbyport_r ();
+#if defined __stub_getservbyport_r || defined __stub___getservbyport_r
+choke me
+#endif
+
+int main (void)
+{
+return getservbyport_r ();
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ tmp_getservbyport_r="yes"
+
+else
+
+ tmp_getservbyport_r="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ if test "$tmp_getservbyport_r" = "yes"; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <sys/types.h>
+#include <netdb.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "getservbyport_r" >/dev/null 2>&1; then :
+
+ tmp_getservbyport_r="proto_declared"
+
+else
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#define _REENTRANT
+#include <sys/types.h>
+#include <netdb.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "getservbyport_r" >/dev/null 2>&1; then :
+
+ tmp_getservbyport_r="proto_needs_reentrant"
+ tmp_need_reentrant="yes"
+
+fi
+rm -f conftest*
+
+
+fi
+rm -f conftest*
+
+ fi
+
+ fi
+
+ fi
+ if test "$tmp_need_reentrant" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ fi
+ fi
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if _REENTRANT is onwards defined" >&5
+$as_echo_n "checking if _REENTRANT is onwards defined... " >&6; }
+ if test "$tmp_reentrant_initially_defined" = "yes" ||
+ test "$tmp_need_reentrant" = "yes"; then
+
+
+$as_echo "#define NEED_REENTRANT 1" >>confdefs.h
+
+cat >>confdefs.h <<_EOF
+#ifndef _REENTRANT
+# define _REENTRANT
+#endif
+_EOF
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ fi
+ #
+
+
+# Check whether --enable-largefile was given.
+if test "${enable_largefile+set}" = set; then :
+ enableval=$enable_largefile;
+fi
+
+if test "$enable_largefile" != no; then
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5
+$as_echo_n "checking for special C compiler options needed for large files... " >&6; }
+if test "${ac_cv_sys_largefile_CC+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_cv_sys_largefile_CC=no
+ if test "$GCC" != yes; then
+ ac_save_CC=$CC
+ while :; do
+ # IRIX 6.2 and later do not support large files by default,
+ # so use the C compiler's -n32 option if that helps.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+ We can't simply define LARGE_OFF_T to be 9223372036854775807,
+ since some C++ compilers masquerading as C compilers
+ incorrectly reject 9223372036854775807. */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+ && LARGE_OFF_T % 2147483647 == 1)
+ ? 1 : -1];
+int main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+ if ac_fn_c_try_compile "$LINENO"; then :
+ break
+fi
+rm -f core conftest.err conftest.$ac_objext
+ CC="$CC -n32"
+ if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_sys_largefile_CC=' -n32'; break
+fi
+rm -f core conftest.err conftest.$ac_objext
+ break
+ done
+ CC=$ac_save_CC
+ rm -f conftest.$ac_ext
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5
+$as_echo "$ac_cv_sys_largefile_CC" >&6; }
+ if test "$ac_cv_sys_largefile_CC" != no; then
+ CC=$CC$ac_cv_sys_largefile_CC
+ fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5
+$as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; }
+if test "${ac_cv_sys_file_offset_bits+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ while :; do
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+ We can't simply define LARGE_OFF_T to be 9223372036854775807,
+ since some C++ compilers masquerading as C compilers
+ incorrectly reject 9223372036854775807. */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+ && LARGE_OFF_T % 2147483647 == 1)
+ ? 1 : -1];
+int main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_sys_file_offset_bits=no; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#define _FILE_OFFSET_BITS 64
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+ We can't simply define LARGE_OFF_T to be 9223372036854775807,
+ since some C++ compilers masquerading as C compilers
+ incorrectly reject 9223372036854775807. */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+ && LARGE_OFF_T % 2147483647 == 1)
+ ? 1 : -1];
+int main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_sys_file_offset_bits=64; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_cv_sys_file_offset_bits=unknown
+ break
+done
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5
+$as_echo "$ac_cv_sys_file_offset_bits" >&6; }
+case $ac_cv_sys_file_offset_bits in #(
+ no | unknown) ;;
+ *)
+cat >>confdefs.h <<_ACEOF
+#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits
+_ACEOF
+;;
+esac
+rm -rf conftest*
+ if test $ac_cv_sys_file_offset_bits = unknown; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5
+$as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; }
+if test "${ac_cv_sys_large_files+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ while :; do
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+ We can't simply define LARGE_OFF_T to be 9223372036854775807,
+ since some C++ compilers masquerading as C compilers
+ incorrectly reject 9223372036854775807. */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+ && LARGE_OFF_T % 2147483647 == 1)
+ ? 1 : -1];
+int main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_sys_large_files=no; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#define _LARGE_FILES 1
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+ We can't simply define LARGE_OFF_T to be 9223372036854775807,
+ since some C++ compilers masquerading as C compilers
+ incorrectly reject 9223372036854775807. */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+ && LARGE_OFF_T % 2147483647 == 1)
+ ? 1 : -1];
+int main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_sys_large_files=1; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_cv_sys_large_files=unknown
+ break
+done
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5
+$as_echo "$ac_cv_sys_large_files" >&6; }
+case $ac_cv_sys_large_files in #(
+ no | unknown) ;;
+ *)
+cat >>confdefs.h <<_ACEOF
+#define _LARGE_FILES $ac_cv_sys_large_files
+_ACEOF
+;;
+esac
+rm -rf conftest*
+ fi
+fi
+
+
+enable_win32_dll=yes
+
+case $host in
+*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*)
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args.
+set dummy ${ac_tool_prefix}as; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_AS+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$AS"; then
+ ac_cv_prog_AS="$AS" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_AS="${ac_tool_prefix}as"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+AS=$ac_cv_prog_AS
+if test -n "$AS"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS" >&5
+$as_echo "$AS" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_AS"; then
+ ac_ct_AS=$AS
+ # Extract the first word of "as", so it can be a program name with args.
+set dummy as; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_AS+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_AS"; then
+ ac_cv_prog_ac_ct_AS="$ac_ct_AS" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_AS="as"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_AS=$ac_cv_prog_ac_ct_AS
+if test -n "$ac_ct_AS"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AS" >&5
+$as_echo "$ac_ct_AS" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_AS" = x; then
+ AS="false"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ AS=$ac_ct_AS
+ fi
+else
+ AS="$ac_cv_prog_AS"
+fi
+
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dlltool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_DLLTOOL+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$DLLTOOL"; then
+ ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+DLLTOOL=$ac_cv_prog_DLLTOOL
+if test -n "$DLLTOOL"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
+$as_echo "$DLLTOOL" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_DLLTOOL"; then
+ ac_ct_DLLTOOL=$DLLTOOL
+ # Extract the first word of "dlltool", so it can be a program name with args.
+set dummy dlltool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_DLLTOOL+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_DLLTOOL"; then
+ ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_DLLTOOL="dlltool"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
+if test -n "$ac_ct_DLLTOOL"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
+$as_echo "$ac_ct_DLLTOOL" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_DLLTOOL" = x; then
+ DLLTOOL="false"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ DLLTOOL=$ac_ct_DLLTOOL
+ fi
+else
+ DLLTOOL="$ac_cv_prog_DLLTOOL"
+fi
+
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
+set dummy ${ac_tool_prefix}objdump; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_OBJDUMP+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$OBJDUMP"; then
+ ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+OBJDUMP=$ac_cv_prog_OBJDUMP
+if test -n "$OBJDUMP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5
+$as_echo "$OBJDUMP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OBJDUMP"; then
+ ac_ct_OBJDUMP=$OBJDUMP
+ # Extract the first word of "objdump", so it can be a program name with args.
+set dummy objdump; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_OBJDUMP"; then
+ ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_OBJDUMP="objdump"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP
+if test -n "$ac_ct_OBJDUMP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5
+$as_echo "$ac_ct_OBJDUMP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_OBJDUMP" = x; then
+ OBJDUMP="false"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ OBJDUMP=$ac_ct_OBJDUMP
+ fi
+else
+ OBJDUMP="$ac_cv_prog_OBJDUMP"
+fi
+
+ ;;
+esac
+
+test -z "$AS" && AS=as
+
+
+
+
+
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+
+
+
+
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if arch-OS host is AMD64-Linux/FreeBSD (to build static libraries with PIC)" >&5
+$as_echo_n "checking if arch-OS host is AMD64-Linux/FreeBSD (to build static libraries with PIC)... " >&6; }
+case $host in
+ x86_64*linux*|amd64*freebsd*|ia64*freebsd*)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ with_pic=yes
+ ;;
+ *)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ;;
+esac
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler is icc (to build with PIC)" >&5
+$as_echo_n "checking if compiler is icc (to build with PIC)... " >&6; }
+case $CC in
+ icc | */icc)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ with_pic=yes
+ ;;
+ *)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ;;
+esac
+
+case `pwd` in
+ *\ * | *\ *)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
+$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;;
+esac
+
+
+
+macro_version='2.2.6b'
+macro_revision='1.3017'
+
+
+
+
+
+
+
+
+
+
+
+
+
+ltmain="$ac_aux_dir/ltmain.sh"
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
+$as_echo_n "checking for a sed that does not truncate output... " >&6; }
+if test "${ac_cv_path_SED+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
+ for ac_i in 1 2 3 4 5 6 7; do
+ ac_script="$ac_script$as_nl$ac_script"
+ done
+ echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed
+ { ac_script=; unset ac_script;}
+ if test -z "$SED"; then
+ ac_path_SED_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in sed gsed; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
+ { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue
+# Check for GNU ac_path_SED and select it if it is found.
+ # Check for GNU $ac_path_SED
+case `"$ac_path_SED" --version 2>&1` in
+*GNU*)
+ ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;;
+*)
+ ac_count=0
+ $as_echo_n 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ $as_echo '' >> "conftest.nl"
+ "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_SED_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_SED="$ac_path_SED"
+ ac_path_SED_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_SED_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_SED"; then
+ as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5
+ fi
+else
+ ac_cv_path_SED=$SED
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5
+$as_echo "$ac_cv_path_SED" >&6; }
+ SED="$ac_cv_path_SED"
+ rm -f conftest.sed
+
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
+
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5
+$as_echo_n "checking for fgrep... " >&6; }
+if test "${ac_cv_path_FGREP+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1
+ then ac_cv_path_FGREP="$GREP -F"
+ else
+ if test -z "$FGREP"; then
+ ac_path_FGREP_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in fgrep; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext"
+ { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue
+# Check for GNU ac_path_FGREP and select it if it is found.
+ # Check for GNU $ac_path_FGREP
+case `"$ac_path_FGREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;;
+*)
+ ac_count=0
+ $as_echo_n 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ $as_echo 'FGREP' >> "conftest.nl"
+ "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_FGREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_FGREP="$ac_path_FGREP"
+ ac_path_FGREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_FGREP_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_FGREP"; then
+ as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ fi
+else
+ ac_cv_path_FGREP=$FGREP
+fi
+
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5
+$as_echo "$ac_cv_path_FGREP" >&6; }
+ FGREP="$ac_cv_path_FGREP"
+
+
+test -z "$GREP" && GREP=grep
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# Check whether --with-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then :
+ withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
+else
+ with_gnu_ld=no
+fi
+
+ac_prog=ld
+if test "$GCC" = yes; then
+ # Check if gcc -print-prog-name=ld gives a path.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
+$as_echo_n "checking for ld used by $CC... " >&6; }
+ case $host in
+ *-*-mingw*)
+ # gcc leaves a trailing carriage return which upsets mingw
+ ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+ *)
+ ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+ esac
+ case $ac_prog in
+ # Accept absolute paths.
+ [\\/]* | ?:[\\/]*)
+ re_direlt='/[^/][^/]*/\.\./'
+ # Canonicalize the pathname of ld
+ ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+ while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+ ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+ done
+ test -z "$LD" && LD="$ac_prog"
+ ;;
+ "")
+ # If it fails, then pretend we aren't using GCC.
+ ac_prog=ld
+ ;;
+ *)
+ # If it is relative, then search for the first ld in PATH.
+ with_gnu_ld=unknown
+ ;;
+ esac
+elif test "$with_gnu_ld" = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
+$as_echo_n "checking for GNU ld... " >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
+$as_echo_n "checking for non-GNU ld... " >&6; }
+fi
+if test "${lt_cv_path_LD+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -z "$LD"; then
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+ lt_cv_path_LD="$ac_dir/$ac_prog"
+ # Check to see if the program is GNU ld. I'd rather use --version,
+ # but apparently some variants of GNU ld only accept -v.
+ # Break only if it was the GNU/non-GNU ld that we prefer.
+ case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+ *GNU* | *'with BFD'*)
+ test "$with_gnu_ld" != no && break
+ ;;
+ *)
+ test "$with_gnu_ld" != yes && break
+ ;;
+ esac
+ fi
+ done
+ IFS="$lt_save_ifs"
+else
+ lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+$as_echo "$LD" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
+$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
+if test "${lt_cv_prog_gnu_ld+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ # I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+ lt_cv_prog_gnu_ld=yes
+ ;;
+*)
+ lt_cv_prog_gnu_ld=no
+ ;;
+esac
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5
+$as_echo "$lt_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5
+$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; }
+if test "${lt_cv_path_NM+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$NM"; then
+ # Let the user override the test.
+ lt_cv_path_NM="$NM"
+else
+ lt_nm_to_check="${ac_tool_prefix}nm"
+ if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+ lt_nm_to_check="$lt_nm_to_check nm"
+ fi
+ for lt_tmp_nm in $lt_nm_to_check; do
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ tmp_nm="$ac_dir/$lt_tmp_nm"
+ if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+ # Check to see if the nm accepts a BSD-compat flag.
+ # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+ # nm: unknown option "B" ignored
+ # Tru64's nm complains that /dev/null is an invalid object file
+ case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+ */dev/null* | *'Invalid file or object type'*)
+ lt_cv_path_NM="$tmp_nm -B"
+ break
+ ;;
+ *)
+ case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+ */dev/null*)
+ lt_cv_path_NM="$tmp_nm -p"
+ break
+ ;;
+ *)
+ lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+ continue # so that we can try to find one that supports BSD flags
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ done
+ IFS="$lt_save_ifs"
+ done
+ : ${lt_cv_path_NM=no}
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5
+$as_echo "$lt_cv_path_NM" >&6; }
+if test "$lt_cv_path_NM" != "no"; then
+ NM="$lt_cv_path_NM"
+else
+ # Didn't find any BSD compatible name lister, look for dumpbin.
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in "dumpbin -symbols" "link -dump -symbols"
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_DUMPBIN+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$DUMPBIN"; then
+ ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+DUMPBIN=$ac_cv_prog_DUMPBIN
+if test -n "$DUMPBIN"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5
+$as_echo "$DUMPBIN" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$DUMPBIN" && break
+ done
+fi
+if test -z "$DUMPBIN"; then
+ ac_ct_DUMPBIN=$DUMPBIN
+ for ac_prog in "dumpbin -symbols" "link -dump -symbols"
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_DUMPBIN"; then
+ ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_DUMPBIN="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN
+if test -n "$ac_ct_DUMPBIN"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5
+$as_echo "$ac_ct_DUMPBIN" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_DUMPBIN" && break
+done
+
+ if test "x$ac_ct_DUMPBIN" = x; then
+ DUMPBIN=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ DUMPBIN=$ac_ct_DUMPBIN
+ fi
+fi
+
+
+ if test "$DUMPBIN" != ":"; then
+ NM="$DUMPBIN"
+ fi
+fi
+test -z "$NM" && NM=nm
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5
+$as_echo_n "checking the name lister ($NM) interface... " >&6; }
+if test "${lt_cv_nm_interface+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_nm_interface="BSD nm"
+ echo "int some_variable = 0;" > conftest.$ac_ext
+ (eval echo "\"\$as_me:7909: $ac_compile\"" >&5)
+ (eval "$ac_compile" 2>conftest.err)
+ cat conftest.err >&5
+ (eval echo "\"\$as_me:7912: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+ (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+ cat conftest.err >&5
+ (eval echo "\"\$as_me:7915: output\"" >&5)
+ cat conftest.out >&5
+ if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+ lt_cv_nm_interface="MS dumpbin"
+ fi
+ rm -f conftest*
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5
+$as_echo "$lt_cv_nm_interface" >&6; }
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
+$as_echo_n "checking whether ln -s works... " >&6; }
+LN_S=$as_ln_s
+if test "$LN_S" = "ln -s"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
+$as_echo "no, using $LN_S" >&6; }
+fi
+
+# find the maximum length of command line arguments
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5
+$as_echo_n "checking the maximum length of command line arguments... " >&6; }
+if test "${lt_cv_sys_max_cmd_len+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ i=0
+ teststring="ABCD"
+
+ case $build_os in
+ msdosdjgpp*)
+ # On DJGPP, this test can blow up pretty badly due to problems in libc
+ # (any single argument exceeding 2000 bytes causes a buffer overrun
+ # during glob expansion). Even if it were fixed, the result of this
+ # check would be larger than it should be.
+ lt_cv_sys_max_cmd_len=12288; # 12K is about right
+ ;;
+
+ gnu*)
+ # Under GNU Hurd, this test is not required because there is
+ # no limit to the length of command line arguments.
+ # Libtool will interpret -1 as no limit whatsoever
+ lt_cv_sys_max_cmd_len=-1;
+ ;;
+
+ cygwin* | mingw* | cegcc*)
+ # On Win9x/ME, this test blows up -- it succeeds, but takes
+ # about 5 minutes as the teststring grows exponentially.
+ # Worse, since 9x/ME are not pre-emptively multitasking,
+ # you end up with a "frozen" computer, even though with patience
+ # the test eventually succeeds (with a max line length of 256k).
+ # Instead, let's just punt: use the minimum linelength reported by
+ # all of the supported platforms: 8192 (on NT/2K/XP).
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ amigaos*)
+ # On AmigaOS with pdksh, this test takes hours, literally.
+ # So we just punt and use a minimum line length of 8192.
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
+ # This has been around since 386BSD, at least. Likely further.
+ if test -x /sbin/sysctl; then
+ lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+ elif test -x /usr/sbin/sysctl; then
+ lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+ else
+ lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs
+ fi
+ # And add a safety zone
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+ ;;
+
+ interix*)
+ # We know the value 262144 and hardcode it with a safety zone (like BSD)
+ lt_cv_sys_max_cmd_len=196608
+ ;;
+
+ osf*)
+ # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+ # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+ # nice to cause kernel panics so lets avoid the loop below.
+ # First set a reasonable default.
+ lt_cv_sys_max_cmd_len=16384
+ #
+ if test -x /sbin/sysconfig; then
+ case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+ *1*) lt_cv_sys_max_cmd_len=-1 ;;
+ esac
+ fi
+ ;;
+ sco3.2v5*)
+ lt_cv_sys_max_cmd_len=102400
+ ;;
+ sysv5* | sco5v6* | sysv4.2uw2*)
+ kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+ if test -n "$kargmax"; then
+ lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'`
+ else
+ lt_cv_sys_max_cmd_len=32768
+ fi
+ ;;
+ *)
+ lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+ if test -n "$lt_cv_sys_max_cmd_len"; then
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+ else
+ # Make teststring a little bigger before we do anything with it.
+ # a 1K string should be a reasonable start.
+ for i in 1 2 3 4 5 6 7 8 ; do
+ teststring=$teststring$teststring
+ done
+ SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+ # If test is not a shell built-in, we'll probably end up computing a
+ # maximum length that is only half of the actual maximum length, but
+ # we can't tell.
+ while { test "X"`$SHELL $0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \
+ = "XX$teststring$teststring"; } >/dev/null 2>&1 &&
+ test $i != 17 # 1/2 MB should be enough
+ do
+ i=`expr $i + 1`
+ teststring=$teststring$teststring
+ done
+ # Only check the string length outside the loop.
+ lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+ teststring=
+ # Add a significant safety factor because C++ compilers can tack on
+ # massive amounts of additional arguments before passing them to the
+ # linker. It appears as though 1/2 is a usable value.
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+ fi
+ ;;
+ esac
+
+fi
+
+if test -n $lt_cv_sys_max_cmd_len ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5
+$as_echo "$lt_cv_sys_max_cmd_len" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5
+$as_echo "none" >&6; }
+fi
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+
+
+
+
+
+: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5
+$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; }
+# Try some XSI features
+xsi_shell=no
+( _lt_dummy="a/b/c"
+ test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
+ = c,a/b,, \
+ && eval 'test $(( 1 + 1 )) -eq 2 \
+ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
+ && xsi_shell=yes
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5
+$as_echo "$xsi_shell" >&6; }
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5
+$as_echo_n "checking whether the shell understands \"+=\"... " >&6; }
+lt_shell_append=no
+( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \
+ >/dev/null 2>&1 \
+ && lt_shell_append=yes
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5
+$as_echo "$lt_shell_append" >&6; }
+
+
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+ lt_unset=unset
+else
+ lt_unset=false
+fi
+
+
+
+
+
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+ # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+ lt_SP2NL='tr \040 \012'
+ lt_NL2SP='tr \015\012 \040\040'
+ ;;
+ *) # EBCDIC based system
+ lt_SP2NL='tr \100 \n'
+ lt_NL2SP='tr \r\n \100\100'
+ ;;
+esac
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
+$as_echo_n "checking for $LD option to reload object files... " >&6; }
+if test "${lt_cv_ld_reload_flag+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_ld_reload_flag='-r'
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5
+$as_echo "$lt_cv_ld_reload_flag" >&6; }
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+ darwin*)
+ if test "$GCC" = yes; then
+ reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+ else
+ reload_cmds='$LD$reload_flag -o $output$reload_objs'
+ fi
+ ;;
+esac
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
+set dummy ${ac_tool_prefix}objdump; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_OBJDUMP+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$OBJDUMP"; then
+ ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+OBJDUMP=$ac_cv_prog_OBJDUMP
+if test -n "$OBJDUMP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5
+$as_echo "$OBJDUMP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OBJDUMP"; then
+ ac_ct_OBJDUMP=$OBJDUMP
+ # Extract the first word of "objdump", so it can be a program name with args.
+set dummy objdump; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_OBJDUMP"; then
+ ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_OBJDUMP="objdump"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP
+if test -n "$ac_ct_OBJDUMP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5
+$as_echo "$ac_ct_OBJDUMP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_OBJDUMP" = x; then
+ OBJDUMP="false"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ OBJDUMP=$ac_ct_OBJDUMP
+ fi
+else
+ OBJDUMP="$ac_cv_prog_OBJDUMP"
+fi
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5
+$as_echo_n "checking how to recognize dependent libraries... " >&6; }
+if test "${lt_cv_deplibs_check_method+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix[4-9]*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+beos*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+bsdi[45]*)
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
+ lt_cv_file_magic_cmd='/usr/bin/file -L'
+ lt_cv_file_magic_test_file=/shlib/libc.so
+ ;;
+
+cygwin*)
+ # func_win32_libid is a shell function defined in ltmain.sh
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ ;;
+
+mingw* | pw32*)
+ # Base MSYS/MinGW do not provide the 'file' command needed by
+ # func_win32_libid shell function, so use a weaker test based on 'objdump',
+ # unless we find 'file', for example because we are cross-compiling.
+ if ( file / ) >/dev/null 2>&1; then
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ else
+ lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ fi
+ ;;
+
+cegcc)
+ # use the weaker test based on 'objdump'. See mingw*.
+ lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ ;;
+
+darwin* | rhapsody*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+freebsd* | dragonfly*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+ case $host_cpu in
+ i*86 )
+ # Not sure whether the presence of OpenBSD here was a mistake.
+ # Let's accept both of them until this is cleared up.
+ lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library'
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+ ;;
+ esac
+ else
+ lt_cv_deplibs_check_method=pass_all
+ fi
+ ;;
+
+gnu*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+hpux10.20* | hpux11*)
+ lt_cv_file_magic_cmd=/usr/bin/file
+ case $host_cpu in
+ ia64*)
+ lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64'
+ lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+ ;;
+ hppa*64*)
+ lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'
+ lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+ ;;
+ *)
+ lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library'
+ lt_cv_file_magic_test_file=/usr/lib/libc.sl
+ ;;
+ esac
+ ;;
+
+interix[3-9]*)
+ # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$'
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $LD in
+ *-32|*"-32 ") libmagic=32-bit;;
+ *-n32|*"-n32 ") libmagic=N32;;
+ *-64|*"-64 ") libmagic=64-bit;;
+ *) libmagic=never-match;;
+ esac
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+netbsd* | netbsdelf*-gnu)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$'
+ fi
+ ;;
+
+newos6*)
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=/usr/lib/libnls.so
+ ;;
+
+*nto* | *qnx*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+openbsd*)
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+ fi
+ ;;
+
+osf3* | osf4* | osf5*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+rdos*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+solaris*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+sysv4 | sysv4.3*)
+ case $host_vendor in
+ motorola)
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+ ;;
+ ncr)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ sequent)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
+ ;;
+ sni)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"
+ lt_cv_file_magic_test_file=/lib/libc.so
+ ;;
+ siemens)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ pc)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ esac
+ ;;
+
+tpf*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+esac
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
+$as_echo "$lt_cv_deplibs_check_method" >&6; }
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+
+
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ar; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_AR+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$AR"; then
+ ac_cv_prog_AR="$AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_AR="${ac_tool_prefix}ar"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
+$as_echo "$AR" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_AR"; then
+ ac_ct_AR=$AR
+ # Extract the first word of "ar", so it can be a program name with args.
+set dummy ar; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_AR+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_AR"; then
+ ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_AR="ar"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
+$as_echo "$ac_ct_AR" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_AR" = x; then
+ AR="false"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ AR=$ac_ct_AR
+ fi
+else
+ AR="$ac_cv_prog_AR"
+fi
+
+test -z "$AR" && AR=ar
+test -z "$AR_FLAGS" && AR_FLAGS=cru
+
+
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_STRIP+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$STRIP"; then
+ ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+ ac_ct_STRIP=$STRIP
+ # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_STRIP"; then
+ ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_STRIP="strip"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_STRIP" = x; then
+ STRIP=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ STRIP=$ac_ct_STRIP
+ fi
+else
+ STRIP="$ac_cv_prog_STRIP"
+fi
+
+test -z "$STRIP" && STRIP=:
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_RANLIB+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$RANLIB"; then
+ ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
+$as_echo "$RANLIB" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+ ac_ct_RANLIB=$RANLIB
+ # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_RANLIB"; then
+ ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_RANLIB="ranlib"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
+$as_echo "$ac_ct_RANLIB" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_RANLIB" = x; then
+ RANLIB=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ RANLIB=$ac_ct_RANLIB
+ fi
+else
+ RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+test -z "$RANLIB" && RANLIB=:
+
+
+
+
+
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+ case $host_os in
+ openbsd*)
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
+ ;;
+ *)
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
+ ;;
+ esac
+ old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5
+$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; }
+if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix. What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[BCDEGRST]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+ symcode='[BCDT]'
+ ;;
+cygwin* | mingw* | pw32* | cegcc*)
+ symcode='[ABCDGISTW]'
+ ;;
+hpux*)
+ if test "$host_cpu" = ia64; then
+ symcode='[ABCDEGRST]'
+ fi
+ ;;
+irix* | nonstopux*)
+ symcode='[BCDEGRST]'
+ ;;
+osf*)
+ symcode='[BCDEGQRST]'
+ ;;
+solaris*)
+ symcode='[BDRT]'
+ ;;
+sco3.2v5*)
+ symcode='[DT]'
+ ;;
+sysv4.2uw2*)
+ symcode='[DT]'
+ ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+ symcode='[ABDT]'
+ ;;
+sysv4)
+ symcode='[DFNSTU]'
+ ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+ symcode='[ABCDGIRSTW]' ;;
+esac
+
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'"
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+ opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+ ;;
+esac
+
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
+
+ # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+ symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+ # Write the raw and C identifiers.
+ if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+ # Fake it for dumpbin and say T for any non-static function
+ # and D for any global variable.
+ # Also find C++ and __fastcall symbols from MSVC++,
+ # which start with @ or ?.
+ lt_cv_sys_global_symbol_pipe="$AWK '"\
+" {last_section=section; section=\$ 3};"\
+" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+" \$ 0!~/External *\|/{next};"\
+" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+" {if(hide[section]) next};"\
+" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
+" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
+" s[1]~/^[@?]/{print s[1], s[1]; next};"\
+" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
+" ' prfx=^$ac_symprfx"
+ else
+ lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+ fi
+
+ # Check to see that the pipe works correctly.
+ pipe_works=no
+
+ rm -f conftest*
+ cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
+
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ # Now try to grab the symbols.
+ nlist=conftest.nm
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\""; } >&5
+ (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s "$nlist"; then
+ # Try sorting and uniquifying the output.
+ if sort "$nlist" | uniq > "$nlist"T; then
+ mv -f "$nlist"T "$nlist"
+ else
+ rm -f "$nlist"T
+ fi
+
+ # Make sure that we snagged all the symbols we need.
+ if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+ if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+ cat <<_LT_EOF > conftest.$ac_ext
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_LT_EOF
+ # Now generate the symbol file.
+ eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+
+ cat <<_LT_EOF >> conftest.$ac_ext
+
+/* The mapping between symbol names and symbols. */
+const struct {
+ const char *name;
+ void *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[] =
+{
+ { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+ $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+ cat <<\_LT_EOF >> conftest.$ac_ext
+ {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+ return lt__PROGRAM__LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+_LT_EOF
+ # Now try linking the two files.
+ mv conftest.$ac_objext conftstm.$ac_objext
+ lt_save_LIBS="$LIBS"
+ lt_save_CFLAGS="$CFLAGS"
+ LIBS="conftstm.$ac_objext"
+ CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s conftest${ac_exeext}; then
+ pipe_works=yes
+ fi
+ LIBS="$lt_save_LIBS"
+ CFLAGS="$lt_save_CFLAGS"
+ else
+ echo "cannot find nm_test_func in $nlist" >&5
+ fi
+ else
+ echo "cannot find nm_test_var in $nlist" >&5
+ fi
+ else
+ echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5
+ fi
+ else
+ echo "$progname: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ fi
+ rm -rf conftest* conftst*
+
+ # Do not use the global_symbol_pipe unless it works.
+ if test "$pipe_works" = yes; then
+ break
+ else
+ lt_cv_sys_global_symbol_pipe=
+ fi
+done
+
+fi
+
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+ lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5
+$as_echo "failed" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
+$as_echo "ok" >&6; }
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# Check whether --enable-libtool-lock was given.
+if test "${enable_libtool_lock+set}" = set; then :
+ enableval=$enable_libtool_lock;
+fi
+
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ case `/usr/bin/file conftest.$ac_objext` in
+ *ELF-32*)
+ HPUX_IA64_MODE="32"
+ ;;
+ *ELF-64*)
+ HPUX_IA64_MODE="64"
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+*-*-irix6*)
+ # Find out which ABI we are using.
+ echo '#line 9117 "configure"' > conftest.$ac_ext
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ if test "$lt_cv_prog_gnu_ld" = yes; then
+ case `/usr/bin/file conftest.$ac_objext` in
+ *32-bit*)
+ LD="${LD-ld} -melf32bsmip"
+ ;;
+ *N32*)
+ LD="${LD-ld} -melf32bmipn32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -melf64bmip"
+ ;;
+ esac
+ else
+ case `/usr/bin/file conftest.$ac_objext` in
+ *32-bit*)
+ LD="${LD-ld} -32"
+ ;;
+ *N32*)
+ LD="${LD-ld} -n32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -64"
+ ;;
+ esac
+ fi
+ fi
+ rm -rf conftest*
+ ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ case `/usr/bin/file conftest.o` in
+ *32-bit*)
+ case $host in
+ x86_64-*kfreebsd*-gnu)
+ LD="${LD-ld} -m elf_i386_fbsd"
+ ;;
+ x86_64-*linux*)
+ LD="${LD-ld} -m elf_i386"
+ ;;
+ ppc64-*linux*|powerpc64-*linux*)
+ LD="${LD-ld} -m elf32ppclinux"
+ ;;
+ s390x-*linux*)
+ LD="${LD-ld} -m elf_s390"
+ ;;
+ sparc64-*linux*)
+ LD="${LD-ld} -m elf32_sparc"
+ ;;
+ esac
+ ;;
+ *64-bit*)
+ case $host in
+ x86_64-*kfreebsd*-gnu)
+ LD="${LD-ld} -m elf_x86_64_fbsd"
+ ;;
+ x86_64-*linux*)
+ LD="${LD-ld} -m elf_x86_64"
+ ;;
+ ppc*-*linux*|powerpc*-*linux*)
+ LD="${LD-ld} -m elf64ppc"
+ ;;
+ s390*-*linux*|s390*-*tpf*)
+ LD="${LD-ld} -m elf64_s390"
+ ;;
+ sparc*-*linux*)
+ LD="${LD-ld} -m elf64_sparc"
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+
+*-*-sco3.2v5*)
+ # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+ SAVE_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -belf"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5
+$as_echo_n "checking whether the C compiler needs -belf... " >&6; }
+if test "${lt_cv_cc_needs_belf+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ lt_cv_cc_needs_belf=yes
+else
+ lt_cv_cc_needs_belf=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5
+$as_echo "$lt_cv_cc_needs_belf" >&6; }
+ if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+ # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+ CFLAGS="$SAVE_CFLAGS"
+ fi
+ ;;
+sparc*-*solaris*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ case `/usr/bin/file conftest.o` in
+ *64-bit*)
+ case $lt_cv_prog_gnu_ld in
+ yes*) LD="${LD-ld} -m elf64_sparc" ;;
+ *)
+ if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+ LD="${LD-ld} -64"
+ fi
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+esac
+
+need_locks="$enable_libtool_lock"
+
+
+ case $host_os in
+ rhapsody* | darwin*)
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dsymutil; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_DSYMUTIL+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$DSYMUTIL"; then
+ ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+DSYMUTIL=$ac_cv_prog_DSYMUTIL
+if test -n "$DSYMUTIL"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5
+$as_echo "$DSYMUTIL" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_DSYMUTIL"; then
+ ac_ct_DSYMUTIL=$DSYMUTIL
+ # Extract the first word of "dsymutil", so it can be a program name with args.
+set dummy dsymutil; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_DSYMUTIL"; then
+ ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_DSYMUTIL="dsymutil"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL
+if test -n "$ac_ct_DSYMUTIL"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5
+$as_echo "$ac_ct_DSYMUTIL" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_DSYMUTIL" = x; then
+ DSYMUTIL=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ DSYMUTIL=$ac_ct_DSYMUTIL
+ fi
+else
+ DSYMUTIL="$ac_cv_prog_DSYMUTIL"
+fi
+
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args.
+set dummy ${ac_tool_prefix}nmedit; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_NMEDIT+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$NMEDIT"; then
+ ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+NMEDIT=$ac_cv_prog_NMEDIT
+if test -n "$NMEDIT"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5
+$as_echo "$NMEDIT" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_NMEDIT"; then
+ ac_ct_NMEDIT=$NMEDIT
+ # Extract the first word of "nmedit", so it can be a program name with args.
+set dummy nmedit; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_NMEDIT"; then
+ ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_NMEDIT="nmedit"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT
+if test -n "$ac_ct_NMEDIT"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5
+$as_echo "$ac_ct_NMEDIT" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_NMEDIT" = x; then
+ NMEDIT=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ NMEDIT=$ac_ct_NMEDIT
+ fi
+else
+ NMEDIT="$ac_cv_prog_NMEDIT"
+fi
+
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args.
+set dummy ${ac_tool_prefix}lipo; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_LIPO+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$LIPO"; then
+ ac_cv_prog_LIPO="$LIPO" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_LIPO="${ac_tool_prefix}lipo"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+LIPO=$ac_cv_prog_LIPO
+if test -n "$LIPO"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5
+$as_echo "$LIPO" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_LIPO"; then
+ ac_ct_LIPO=$LIPO
+ # Extract the first word of "lipo", so it can be a program name with args.
+set dummy lipo; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_LIPO+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_LIPO"; then
+ ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_LIPO="lipo"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO
+if test -n "$ac_ct_LIPO"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5
+$as_echo "$ac_ct_LIPO" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_LIPO" = x; then
+ LIPO=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ LIPO=$ac_ct_LIPO
+ fi
+else
+ LIPO="$ac_cv_prog_LIPO"
+fi
+
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args.
+set dummy ${ac_tool_prefix}otool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_OTOOL+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$OTOOL"; then
+ ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_OTOOL="${ac_tool_prefix}otool"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+OTOOL=$ac_cv_prog_OTOOL
+if test -n "$OTOOL"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5
+$as_echo "$OTOOL" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OTOOL"; then
+ ac_ct_OTOOL=$OTOOL
+ # Extract the first word of "otool", so it can be a program name with args.
+set dummy otool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_OTOOL"; then
+ ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_OTOOL="otool"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL
+if test -n "$ac_ct_OTOOL"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5
+$as_echo "$ac_ct_OTOOL" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_OTOOL" = x; then
+ OTOOL=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ OTOOL=$ac_ct_OTOOL
+ fi
+else
+ OTOOL="$ac_cv_prog_OTOOL"
+fi
+
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args.
+set dummy ${ac_tool_prefix}otool64; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_OTOOL64+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$OTOOL64"; then
+ ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+OTOOL64=$ac_cv_prog_OTOOL64
+if test -n "$OTOOL64"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5
+$as_echo "$OTOOL64" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OTOOL64"; then
+ ac_ct_OTOOL64=$OTOOL64
+ # Extract the first word of "otool64", so it can be a program name with args.
+set dummy otool64; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_OTOOL64"; then
+ ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_OTOOL64="otool64"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64
+if test -n "$ac_ct_OTOOL64"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5
+$as_echo "$ac_ct_OTOOL64" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_OTOOL64" = x; then
+ OTOOL64=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ OTOOL64=$ac_ct_OTOOL64
+ fi
+else
+ OTOOL64="$ac_cv_prog_OTOOL64"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5
+$as_echo_n "checking for -single_module linker flag... " >&6; }
+if test "${lt_cv_apple_cc_single_mod+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_apple_cc_single_mod=no
+ if test -z "${LT_MULTI_MODULE}"; then
+ # By default we will add the -single_module flag. You can override
+ # by either setting the environment variable LT_MULTI_MODULE
+ # non-empty at configure time, or by adding -multi_module to the
+ # link flags.
+ rm -rf libconftest.dylib*
+ echo "int foo(void){return 1;}" > conftest.c
+ echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+-dynamiclib -Wl,-single_module conftest.c" >&5
+ $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
+ _lt_result=$?
+ if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
+ lt_cv_apple_cc_single_mod=yes
+ else
+ cat conftest.err >&5
+ fi
+ rm -rf libconftest.dylib*
+ rm -f conftest.*
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5
+$as_echo "$lt_cv_apple_cc_single_mod" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5
+$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; }
+if test "${lt_cv_ld_exported_symbols_list+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_ld_exported_symbols_list=no
+ save_LDFLAGS=$LDFLAGS
+ echo "_main" > conftest.sym
+ LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ lt_cv_ld_exported_symbols_list=yes
+else
+ lt_cv_ld_exported_symbols_list=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ LDFLAGS="$save_LDFLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5
+$as_echo "$lt_cv_ld_exported_symbols_list" >&6; }
+ case $host_os in
+ rhapsody* | darwin1.[012])
+ _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
+ darwin1.*)
+ _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+ darwin*) # darwin 5.x on
+ # if running on 10.5 or later, the deployment target defaults
+ # to the OS version, if on x86, and 10.4, the deployment
+ # target defaults to 10.4. Don't you love it?
+ case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
+ 10.0,*86*-darwin8*|10.0,*-darwin[91]*)
+ _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+ 10.[012]*)
+ _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+ 10.*)
+ _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+ esac
+ ;;
+ esac
+ if test "$lt_cv_apple_cc_single_mod" = "yes"; then
+ _lt_dar_single_mod='$single_module'
+ fi
+ if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
+ _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
+ else
+ _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ fi
+ if test "$DSYMUTIL" != ":"; then
+ _lt_dsymutil='~$DSYMUTIL $lib || :'
+ else
+ _lt_dsymutil=
+ fi
+ ;;
+ esac
+
+for ac_header in dlfcn.h
+do :
+ ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default
+"
+if test "x$ac_cv_header_dlfcn_h" = x""yes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_DLFCN_H 1
+_ACEOF
+
+fi
+
+done
+
+
+
+# Set options
+
+
+
+ enable_dlopen=no
+
+
+
+ # Check whether --enable-shared was given.
+if test "${enable_shared+set}" = set; then :
+ enableval=$enable_shared; p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_shared=yes ;;
+ no) enable_shared=no ;;
+ *)
+ enable_shared=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_shared=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac
+else
+ enable_shared=yes
+fi
+
+
+
+
+
+
+
+
+
+ # Check whether --enable-static was given.
+if test "${enable_static+set}" = set; then :
+ enableval=$enable_static; p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_static=yes ;;
+ no) enable_static=no ;;
+ *)
+ enable_static=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_static=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac
+else
+ enable_static=yes
+fi
+
+
+
+
+
+
+
+
+
+
+# Check whether --with-pic was given.
+if test "${with_pic+set}" = set; then :
+ withval=$with_pic; pic_mode="$withval"
+else
+ pic_mode=default
+fi
+
+
+test -z "$pic_mode" && pic_mode=default
+
+
+
+
+
+
+
+ # Check whether --enable-fast-install was given.
+if test "${enable_fast_install+set}" = set; then :
+ enableval=$enable_fast_install; p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_fast_install=yes ;;
+ no) enable_fast_install=no ;;
+ *)
+ enable_fast_install=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_fast_install=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac
+else
+ enable_fast_install=yes
+fi
+
+
+
+
+
+
+
+
+
+
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ltmain"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+test -z "$LN_S" && LN_S="ln -s"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+if test -n "${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5
+$as_echo_n "checking for objdir... " >&6; }
+if test "${lt_cv_objdir+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+ lt_cv_objdir=.libs
+else
+ # MS-DOS does not allow filenames that begin with a dot.
+ lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5
+$as_echo "$lt_cv_objdir" >&6; }
+objdir=$lt_cv_objdir
+
+
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define LT_OBJDIR "$lt_cv_objdir/"
+_ACEOF
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+case $host_os in
+aix3*)
+ # AIX sometimes has problems with the GCC collect2 program. For some
+ # reason, if we set the COLLECT_NAMES environment variable, the problems
+ # vanish in a puff of smoke.
+ if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+ fi
+ ;;
+esac
+
+# Sed substitution that helps us do robust quoting. It backslashifies
+# metacharacters that are still active within double-quoted strings.
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+# Global variables:
+ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
+
+for cc_temp in $compiler""; do
+ case $cc_temp in
+ compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+ distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+done
+cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+
+
+# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+case $deplibs_check_method in
+file_magic*)
+ if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5
+$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; }
+if test "${lt_cv_path_MAGIC_CMD+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $MAGIC_CMD in
+[\\/*] | ?:[\\/]*)
+ lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+ ;;
+*)
+ lt_save_MAGIC_CMD="$MAGIC_CMD"
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+ for ac_dir in $ac_dummy; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/${ac_tool_prefix}file; then
+ lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file"
+ if test -n "$file_magic_test_file"; then
+ case $deplibs_check_method in
+ "file_magic "*)
+ file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+ MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+ $EGREP "$file_magic_regex" > /dev/null; then
+ :
+ else
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such. This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem. Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+ fi ;;
+ esac
+ fi
+ break
+ fi
+ done
+ IFS="$lt_save_ifs"
+ MAGIC_CMD="$lt_save_MAGIC_CMD"
+ ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
+$as_echo "$MAGIC_CMD" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+
+
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+ if test -n "$ac_tool_prefix"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5
+$as_echo_n "checking for file... " >&6; }
+if test "${lt_cv_path_MAGIC_CMD+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $MAGIC_CMD in
+[\\/*] | ?:[\\/]*)
+ lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+ ;;
+*)
+ lt_save_MAGIC_CMD="$MAGIC_CMD"
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+ for ac_dir in $ac_dummy; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/file; then
+ lt_cv_path_MAGIC_CMD="$ac_dir/file"
+ if test -n "$file_magic_test_file"; then
+ case $deplibs_check_method in
+ "file_magic "*)
+ file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+ MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+ $EGREP "$file_magic_regex" > /dev/null; then
+ :
+ else
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such. This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem. Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+ fi ;;
+ esac
+ fi
+ break
+ fi
+ done
+ IFS="$lt_save_ifs"
+ MAGIC_CMD="$lt_save_MAGIC_CMD"
+ ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
+$as_echo "$MAGIC_CMD" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ else
+ MAGIC_CMD=:
+ fi
+fi
+
+ fi
+ ;;
+esac
+
+# Use C for the default configuration in the libtool script
+
+lt_save_CC="$CC"
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+objext=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
+
+# save warnings/boilerplate of simple test code
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+
+lt_prog_compiler_no_builtin_flag=
+
+if test "$GCC" = yes; then
+ lt_prog_compiler_no_builtin_flag=' -fno-builtin'
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; }
+if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler_rtti_exceptions=no
+ ac_outfile=conftest.$ac_objext
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="-fno-rtti -fno-exceptions"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:10375: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+ echo "$as_me:10379: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+ $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_rtti_exceptions=yes
+ fi
+ fi
+ $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
+$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; }
+
+if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
+ lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions"
+else
+ :
+fi
+
+fi
+
+
+
+
+
+
+ lt_prog_compiler_wl=
+lt_prog_compiler_pic=
+lt_prog_compiler_static=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+
+ if test "$GCC" = yes; then
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_static='-static'
+
+ case $host_os in
+ aix*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ lt_prog_compiler_static='-Bstatic'
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ lt_prog_compiler_pic='-fPIC'
+ ;;
+ m68k)
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the `-m68020' flag to GCC prevents building anything better,
+ # like `-m68040'.
+ lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'
+ ;;
+ esac
+ ;;
+
+ beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+
+ mingw* | cygwin* | pw32* | os2* | cegcc*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ # Although the cygwin gcc ignores -fPIC, still need this for old-style
+ # (--disable-auto-import) libraries
+ lt_prog_compiler_pic='-DDLL_EXPORT'
+ ;;
+
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ lt_prog_compiler_pic='-fno-common'
+ ;;
+
+ hpux*)
+ # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+ # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag
+ # sets the default TLS model and affects inlining.
+ case $host_cpu in
+ hppa*64*)
+ # +Z the default
+ ;;
+ *)
+ lt_prog_compiler_pic='-fPIC'
+ ;;
+ esac
+ ;;
+
+ interix[3-9]*)
+ # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+ # Instead, we relocate shared libraries at runtime.
+ ;;
+
+ msdosdjgpp*)
+ # Just because we use GCC doesn't mean we suddenly get shared libraries
+ # on systems that don't support them.
+ lt_prog_compiler_can_build_shared=no
+ enable_shared=no
+ ;;
+
+ *nto* | *qnx*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ lt_prog_compiler_pic='-fPIC -shared'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ lt_prog_compiler_pic=-Kconform_pic
+ fi
+ ;;
+
+ *)
+ lt_prog_compiler_pic='-fPIC'
+ ;;
+ esac
+ else
+ # PORTME Check for flag to pass linker flags through the system compiler.
+ case $host_os in
+ aix*)
+ lt_prog_compiler_wl='-Wl,'
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ lt_prog_compiler_static='-Bstatic'
+ else
+ lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+
+ mingw* | cygwin* | pw32* | os2* | cegcc*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ lt_prog_compiler_pic='-DDLL_EXPORT'
+ ;;
+
+ hpux9* | hpux10* | hpux11*)
+ lt_prog_compiler_wl='-Wl,'
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case $host_cpu in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ lt_prog_compiler_pic='+Z'
+ ;;
+ esac
+ # Is there a better lt_prog_compiler_static that works with the bundled CC?
+ lt_prog_compiler_static='${wl}-a ${wl}archive'
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ lt_prog_compiler_wl='-Wl,'
+ # PIC (with -KPIC) is the default.
+ lt_prog_compiler_static='-non_shared'
+ ;;
+
+ linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ case $cc_basename in
+ # old Intel for x86_64 which still supported -KPIC.
+ ecc*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-static'
+ ;;
+ # icc used to be incompatible with GCC.
+ # ICC 10 doesn't accept -KPIC any more.
+ icc* | ifort*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-fPIC'
+ lt_prog_compiler_static='-static'
+ ;;
+ # Lahey Fortran 8.1.
+ lf95*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='--shared'
+ lt_prog_compiler_static='--static'
+ ;;
+ pgcc* | pgf77* | pgf90* | pgf95*)
+ # Portland Group compilers (*not* the Pentium gcc compiler,
+ # which looks to be a dead project)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-fpic'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+ ccc*)
+ lt_prog_compiler_wl='-Wl,'
+ # All Alpha code is PIC.
+ lt_prog_compiler_static='-non_shared'
+ ;;
+ xl*)
+ # IBM XL C 8.0/Fortran 10.1 on PPC
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-qpic'
+ lt_prog_compiler_static='-qstaticlink'
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*)
+ # Sun C 5.9
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ lt_prog_compiler_wl='-Wl,'
+ ;;
+ *Sun\ F*)
+ # Sun Fortran 8.3 passes all unrecognized flags to the linker
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ lt_prog_compiler_wl=''
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+
+ newsos6)
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ *nto* | *qnx*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ lt_prog_compiler_pic='-fPIC -shared'
+ ;;
+
+ osf3* | osf4* | osf5*)
+ lt_prog_compiler_wl='-Wl,'
+ # All OSF/1 code is PIC.
+ lt_prog_compiler_static='-non_shared'
+ ;;
+
+ rdos*)
+ lt_prog_compiler_static='-non_shared'
+ ;;
+
+ solaris*)
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ case $cc_basename in
+ f77* | f90* | f95*)
+ lt_prog_compiler_wl='-Qoption ld ';;
+ *)
+ lt_prog_compiler_wl='-Wl,';;
+ esac
+ ;;
+
+ sunos4*)
+ lt_prog_compiler_wl='-Qoption ld '
+ lt_prog_compiler_pic='-PIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ sysv4 | sysv4.2uw2* | sysv4.3*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec ;then
+ lt_prog_compiler_pic='-Kconform_pic'
+ lt_prog_compiler_static='-Bstatic'
+ fi
+ ;;
+
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ unicos*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_can_build_shared=no
+ ;;
+
+ uts4*)
+ lt_prog_compiler_pic='-pic'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ *)
+ lt_prog_compiler_can_build_shared=no
+ ;;
+ esac
+ fi
+
+case $host_os in
+ # For platforms which do not support PIC, -DPIC is meaningless:
+ *djgpp*)
+ lt_prog_compiler_pic=
+ ;;
+ *)
+ lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
+ ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5
+$as_echo "$lt_prog_compiler_pic" >&6; }
+
+
+
+
+
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
+$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; }
+if test "${lt_cv_prog_compiler_pic_works+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler_pic_works=no
+ ac_outfile=conftest.$ac_objext
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="$lt_prog_compiler_pic -DPIC"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:10714: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+ echo "$as_me:10718: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+ $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_pic_works=yes
+ fi
+ fi
+ $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5
+$as_echo "$lt_cv_prog_compiler_pic_works" >&6; }
+
+if test x"$lt_cv_prog_compiler_pic_works" = xyes; then
+ case $lt_prog_compiler_pic in
+ "" | " "*) ;;
+ *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;;
+ esac
+else
+ lt_prog_compiler_pic=
+ lt_prog_compiler_can_build_shared=no
+fi
+
+fi
+
+
+
+
+
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
+if test "${lt_cv_prog_compiler_static_works+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler_static_works=no
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
+ echo "$lt_simple_link_test_code" > conftest.$ac_ext
+ if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+ # The linker can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test -s conftest.err; then
+ # Append any errors to the config.log.
+ cat conftest.err 1>&5
+ $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if diff conftest.exp conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_static_works=yes
+ fi
+ else
+ lt_cv_prog_compiler_static_works=yes
+ fi
+ fi
+ $RM -r conftest*
+ LDFLAGS="$save_LDFLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5
+$as_echo "$lt_cv_prog_compiler_static_works" >&6; }
+
+if test x"$lt_cv_prog_compiler_static_works" = xyes; then
+ :
+else
+ lt_prog_compiler_static=
+fi
+
+
+
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if test "${lt_cv_prog_compiler_c_o+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler_c_o=no
+ $RM -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:10819: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+ echo "$as_me:10823: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_c_o=yes
+ fi
+ fi
+ chmod u+w . 2>&5
+ $RM conftest*
+ # SGI C++ compiler will create directory out/ii_files/ for
+ # template instantiation
+ test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+ $RM out/* && rmdir out
+ cd ..
+ $RM -r conftest
+ $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
+$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
+
+
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if test "${lt_cv_prog_compiler_c_o+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler_c_o=no
+ $RM -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:10874: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+ echo "$as_me:10878: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_c_o=yes
+ fi
+ fi
+ chmod u+w . 2>&5
+ $RM conftest*
+ # SGI C++ compiler will create directory out/ii_files/ for
+ # template instantiation
+ test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+ $RM out/* && rmdir out
+ cd ..
+ $RM -r conftest
+ $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
+$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
+
+
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then
+ # do not overwrite the value of need_locks provided by the user
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
+$as_echo_n "checking if we can lock with hard links... " >&6; }
+ hard_links=yes
+ $RM conftest*
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ touch conftest.a
+ ln conftest.a conftest.b 2>&5 || hard_links=no
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
+$as_echo "$hard_links" >&6; }
+ if test "$hard_links" = no; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+ need_locks=warn
+ fi
+else
+ need_locks=no
+fi
+
+
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+
+ runpath_var=
+ allow_undefined_flag=
+ always_export_symbols=no
+ archive_cmds=
+ archive_expsym_cmds=
+ compiler_needs_object=no
+ enable_shared_with_static_runtimes=no
+ export_dynamic_flag_spec=
+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ hardcode_automatic=no
+ hardcode_direct=no
+ hardcode_direct_absolute=no
+ hardcode_libdir_flag_spec=
+ hardcode_libdir_flag_spec_ld=
+ hardcode_libdir_separator=
+ hardcode_minus_L=no
+ hardcode_shlibpath_var=unsupported
+ inherit_rpath=no
+ link_all_deplibs=unknown
+ module_cmds=
+ module_expsym_cmds=
+ old_archive_from_new_cmds=
+ old_archive_from_expsyms_cmds=
+ thread_safe_flag_spec=
+ whole_archive_flag_spec=
+ # include_expsyms should be a list of space-separated symbols to be *always*
+ # included in the symbol list
+ include_expsyms=
+ # exclude_expsyms can be an extended regexp of symbols to exclude
+ # it will be wrapped by ` (' and `)$', so one must not match beginning or
+ # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+ # as well as any symbol that contains `d'.
+ exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
+ # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+ # platforms (ab)use it in PIC code, but their linkers get confused if
+ # the symbol is explicitly referenced. Since portable code cannot
+ # rely on this symbol name, it's probably fine to never include it in
+ # preloaded symbol tables.
+ # Exclude shared library initialization/finalization symbols.
+ extract_expsyms_cmds=
+
+ case $host_os in
+ cygwin* | mingw* | pw32* | cegcc*)
+ # FIXME: the MSVC++ port hasn't been tested in a loooong time
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ if test "$GCC" != yes; then
+ with_gnu_ld=no
+ fi
+ ;;
+ interix*)
+ # we just hope/assume this is gcc and not c89 (= MSVC++)
+ with_gnu_ld=yes
+ ;;
+ openbsd*)
+ with_gnu_ld=no
+ ;;
+ linux* | k*bsd*-gnu)
+ link_all_deplibs=no
+ ;;
+ esac
+
+ ld_shlibs=yes
+ if test "$with_gnu_ld" = yes; then
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ wlarc='${wl}'
+
+ # Set some defaults for GNU ld with shared library support. These
+ # are reset later if shared libraries are not supported. Putting them
+ # here allows them to be overridden if necessary.
+ runpath_var=LD_RUN_PATH
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ export_dynamic_flag_spec='${wl}--export-dynamic'
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+ whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ else
+ whole_archive_flag_spec=
+ fi
+ supports_anon_versioning=no
+ case `$LD -v 2>&1` in
+ *GNU\ gold*) supports_anon_versioning=yes ;;
+ *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
+ *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+ *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+ *\ 2.11.*) ;; # other 2.11 versions
+ *) supports_anon_versioning=yes ;;
+ esac
+
+ # See if GNU ld supports shared libraries.
+ case $host_os in
+ aix[3-9]*)
+ # On AIX/PPC, the GNU linker is very broken
+ if test "$host_cpu" != ia64; then
+ ld_shlibs=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support. If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+_LT_EOF
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds=''
+ ;;
+ m68k)
+ archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ ;;
+ esac
+ ;;
+
+ beos*)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ allow_undefined_flag=unsupported
+ # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ cygwin* | mingw* | pw32* | cegcc*)
+ # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
+ # as there is no search path for DLLs.
+ hardcode_libdir_flag_spec='-L$libdir'
+ allow_undefined_flag=unsupported
+ always_export_symbols=no
+ enable_shared_with_static_runtimes=yes
+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
+
+ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ # If the export-symbols file already is a .def file (1st line
+ # is EXPORTS), use it as is; otherwise, prepend...
+ archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+ cp $export_symbols $output_objdir/$soname.def;
+ else
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ interix[3-9]*)
+ hardcode_direct=no
+ hardcode_shlibpath_var=no
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ export_dynamic_flag_spec='${wl}-E'
+ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+ # Instead, shared libraries are loaded at an image base (0x10000000 by
+ # default) and relocated if they conflict, which is a slow very memory
+ # consuming and fragmenting process. To avoid this, we pick a random,
+ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+ # time. Moving up from 0x10000000 also allows more sbrk(2) space.
+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ ;;
+
+ gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
+ tmp_diet=no
+ if test "$host_os" = linux-dietlibc; then
+ case $cc_basename in
+ diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn)
+ esac
+ fi
+ if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+ && test "$tmp_diet" = no
+ then
+ tmp_addflag=
+ tmp_sharedflag='-shared'
+ case $cc_basename,$host_cpu in
+ pgcc*) # Portland Group C compiler
+ whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+ tmp_addflag=' $pic_flag'
+ ;;
+ pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers
+ whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+ tmp_addflag=' $pic_flag -Mnomain' ;;
+ ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64
+ tmp_addflag=' -i_dynamic' ;;
+ efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64
+ tmp_addflag=' -i_dynamic -nofor_main' ;;
+ ifc* | ifort*) # Intel Fortran compiler
+ tmp_addflag=' -nofor_main' ;;
+ lf95*) # Lahey Fortran 8.1
+ whole_archive_flag_spec=
+ tmp_sharedflag='--shared' ;;
+ xl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
+ tmp_sharedflag='-qmkshrobj'
+ tmp_addflag= ;;
+ esac
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*) # Sun C 5.9
+ whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+ compiler_needs_object=yes
+ tmp_sharedflag='-G' ;;
+ *Sun\ F*) # Sun Fortran 8.3
+ tmp_sharedflag='-G' ;;
+ esac
+ archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+
+ if test "x$supports_anon_versioning" = xyes; then
+ archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+ fi
+
+ case $cc_basename in
+ xlf*)
+ # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+ whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
+ hardcode_libdir_flag_spec=
+ hardcode_libdir_flag_spec_ld='-rpath $libdir'
+ archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
+ if test "x$supports_anon_versioning" = xyes; then
+ archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+ fi
+ ;;
+ esac
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ netbsd* | netbsdelf*-gnu)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+ else
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ fi
+ ;;
+
+ solaris*)
+ if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+ ld_shlibs=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+ case `$LD -v 2>&1` in
+ *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+ ld_shlibs=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** reliably create shared libraries on SCO systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ ;;
+ *)
+ # For security reasons, it is highly recommended that you always
+ # use absolute paths for naming shared libraries, and exclude the
+ # DT_RUNPATH tag from executables and libraries. But doing so
+ # requires that you compile everything twice, which is a pain.
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+ ;;
+
+ sunos4*)
+ archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ wlarc=
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ *)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+
+ if test "$ld_shlibs" = no; then
+ runpath_var=
+ hardcode_libdir_flag_spec=
+ export_dynamic_flag_spec=
+ whole_archive_flag_spec=
+ fi
+ else
+ # PORTME fill in a description of your system's linker (not GNU ld)
+ case $host_os in
+ aix3*)
+ allow_undefined_flag=unsupported
+ always_export_symbols=yes
+ archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+ # Note: this linker hardcodes the directories in LIBPATH if there
+ # are no directories specified by -L.
+ hardcode_minus_L=yes
+ if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+ # Neither direct hardcoding nor static linking is supported with a
+ # broken collect2.
+ hardcode_direct=unsupported
+ fi
+ ;;
+
+ aix[4-9]*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=""
+ else
+ # If we're using GNU nm, then we don't want the "-C" option.
+ # -C means demangle to AIX nm, but means don't demangle with GNU nm
+ if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+ export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ else
+ export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ fi
+ aix_use_runtimelinking=no
+
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # need to do runtime linking.
+ case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+ for ld_flag in $LDFLAGS; do
+ if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+ aix_use_runtimelinking=yes
+ break
+ fi
+ done
+ ;;
+ esac
+
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ archive_cmds=''
+ hardcode_direct=yes
+ hardcode_direct_absolute=yes
+ hardcode_libdir_separator=':'
+ link_all_deplibs=yes
+ file_list_spec='${wl}-f,'
+
+ if test "$GCC" = yes; then
+ case $host_os in aix4.[012]|aix4.[012].*)
+ # We only want to do this on AIX 4.2 and lower, the check
+ # below for broken collect2 doesn't work under 4.3+
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" &&
+ strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ :
+ else
+ # We have old collect2
+ hardcode_direct=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ hardcode_minus_L=yes
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_libdir_separator=
+ fi
+ ;;
+ esac
+ shared_flag='-shared'
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag="$shared_flag "'${wl}-G'
+ fi
+ link_all_deplibs=no
+ else
+ # not using gcc
+ if test "$host_cpu" = ia64; then
+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+ # chokes on -Wl,-G. The following line is correct:
+ shared_flag='-G'
+ else
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag='${wl}-G'
+ else
+ shared_flag='${wl}-bM:SRE'
+ fi
+ fi
+ fi
+
+ export_dynamic_flag_spec='${wl}-bexpall'
+ # It seems that -bexpall does not export symbols beginning with
+ # underscore (_), so it is better to generate a list of symbols to export.
+ always_export_symbols=yes
+ if test "$aix_use_runtimelinking" = yes; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ allow_undefined_flag='-berok'
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+lt_aix_libpath_sed='
+ /Import File Strings/,/^$/ {
+ /^0/ {
+ s/^0 *\(.*\)$/\1/
+ p
+ }
+ }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+ aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ else
+ if test "$host_cpu" = ia64; then
+ hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+ allow_undefined_flag="-z nodefs"
+ archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+ else
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+lt_aix_libpath_sed='
+ /Import File Strings/,/^$/ {
+ /^0/ {
+ s/^0 *\(.*\)$/\1/
+ p
+ }
+ }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+ aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ no_undefined_flag=' ${wl}-bernotok'
+ allow_undefined_flag=' ${wl}-berok'
+ # Exported symbols can be pulled into shared objects from archives
+ whole_archive_flag_spec='$convenience'
+ archive_cmds_need_lc=yes
+ # This is similar to how AIX traditionally builds its shared libraries.
+ archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+ fi
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds=''
+ ;;
+ m68k)
+ archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ ;;
+ esac
+ ;;
+
+ bsdi[45]*)
+ export_dynamic_flag_spec=-rdynamic
+ ;;
+
+ cygwin* | mingw* | pw32* | cegcc*)
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ hardcode_libdir_flag_spec=' '
+ allow_undefined_flag=unsupported
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # Tell ltmain to make .dll files, not .so files.
+ shrext_cmds=".dll"
+ # FIXME: Setting linknames here is a bad hack.
+ archive_cmds='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames='
+ # The linker will automatically build a .lib file if we build a DLL.
+ old_archive_from_new_cmds='true'
+ # FIXME: Should let the user specify the lib program.
+ old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
+ fix_srcfile_path='`cygpath -w "$srcfile"`'
+ enable_shared_with_static_runtimes=yes
+ ;;
+
+ darwin* | rhapsody*)
+
+
+ archive_cmds_need_lc=no
+ hardcode_direct=no
+ hardcode_automatic=yes
+ hardcode_shlibpath_var=unsupported
+ whole_archive_flag_spec=''
+ link_all_deplibs=yes
+ allow_undefined_flag="$_lt_dar_allow_undefined"
+ case $cc_basename in
+ ifort*) _lt_dar_can_shared=yes ;;
+ *) _lt_dar_can_shared=$GCC ;;
+ esac
+ if test "$_lt_dar_can_shared" = "yes"; then
+ output_verbose_link_cmd=echo
+ archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
+ module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
+ archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
+ module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+
+ else
+ ld_shlibs=no
+ fi
+
+ ;;
+
+ dgux*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_shlibpath_var=no
+ ;;
+
+ freebsd1*)
+ ld_shlibs=no
+ ;;
+
+ # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+ # support. Future versions do this automatically, but an explicit c++rt0.o
+ # does not break anything, and helps significantly (at the cost of a little
+ # extra space).
+ freebsd2.2*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+ freebsd2*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+ freebsd* | dragonfly*)
+ archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ hpux9*)
+ if test "$GCC" = yes; then
+ archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ fi
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ export_dynamic_flag_spec='${wl}-E'
+ ;;
+
+ hpux10*)
+ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+ archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ if test "$with_gnu_ld" = no; then
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_flag_spec_ld='+b $libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+ hardcode_direct_absolute=yes
+ export_dynamic_flag_spec='${wl}-E'
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ fi
+ ;;
+
+ hpux11*)
+ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+ case $host_cpu in
+ hppa*64*)
+ archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ else
+ case $host_cpu in
+ hppa*64*)
+ archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ fi
+ if test "$with_gnu_ld" = no; then
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+
+ case $host_cpu in
+ hppa*64*|ia64*)
+ hardcode_direct=no
+ hardcode_shlibpath_var=no
+ ;;
+ *)
+ hardcode_direct=yes
+ hardcode_direct_absolute=yes
+ export_dynamic_flag_spec='${wl}-E'
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ ;;
+ esac
+ fi
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ if test "$GCC" = yes; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ # Try to use the -exported_symbol ld option, if it does not
+ # work, assume that -exports_file does not work either and
+ # implicitly export all symbols.
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+int foo(void) {}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ LDFLAGS="$save_LDFLAGS"
+ else
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+ fi
+ archive_cmds_need_lc='no'
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ inherit_rpath=yes
+ link_all_deplibs=yes
+ ;;
+
+ netbsd* | netbsdelf*-gnu)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
+ else
+ archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
+ fi
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ newsos6)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_shlibpath_var=no
+ ;;
+
+ *nto* | *qnx*)
+ ;;
+
+ openbsd*)
+ if test -f /usr/libexec/ld.so; then
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ hardcode_direct_absolute=yes
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ export_dynamic_flag_spec='${wl}-E'
+ else
+ case $host_os in
+ openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='-R$libdir'
+ ;;
+ *)
+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ ;;
+ esac
+ fi
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ os2*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ allow_undefined_flag=unsupported
+ archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+ old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+ ;;
+
+ osf3*)
+ if test "$GCC" = yes; then
+ allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ allow_undefined_flag=' -expect_unresolved \*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+ fi
+ archive_cmds_need_lc='no'
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ ;;
+
+ osf4* | osf5*) # as osf3* with the addition of -msym flag
+ if test "$GCC" = yes; then
+ allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ else
+ allow_undefined_flag=' -expect_unresolved \*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+ archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+
+ # Both c and cxx compiler support -rpath directly
+ hardcode_libdir_flag_spec='-rpath $libdir'
+ fi
+ archive_cmds_need_lc='no'
+ hardcode_libdir_separator=:
+ ;;
+
+ solaris*)
+ no_undefined_flag=' -z defs'
+ if test "$GCC" = yes; then
+ wlarc='${wl}'
+ archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ else
+ case `$CC -V 2>&1` in
+ *"Compilers 5.0"*)
+ wlarc=''
+ archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+ ;;
+ *)
+ wlarc='${wl}'
+ archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ ;;
+ esac
+ fi
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_shlibpath_var=no
+ case $host_os in
+ solaris2.[0-5] | solaris2.[0-5].*) ;;
+ *)
+ # The compiler driver will combine and reorder linker options,
+ # but understands `-z linker_flag'. GCC discards it without `$wl',
+ # but is careful enough not to reorder.
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
+ if test "$GCC" = yes; then
+ whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+ else
+ whole_archive_flag_spec='-z allextract$convenience -z defaultextract'
+ fi
+ ;;
+ esac
+ link_all_deplibs=yes
+ ;;
+
+ sunos4*)
+ if test "x$host_vendor" = xsequent; then
+ # Use $CC to link under sequent, because it throws in some extra .o
+ # files that make .init and .fini sections work.
+ archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ sysv4)
+ case $host_vendor in
+ sni)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes # is this really true???
+ ;;
+ siemens)
+ ## LD is ld it makes a PLAMLIB
+ ## CC just makes a GrossModule.
+ archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+ reload_cmds='$CC -r -o $output$reload_objs'
+ hardcode_direct=no
+ ;;
+ motorola)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+ ;;
+ esac
+ runpath_var='LD_RUN_PATH'
+ hardcode_shlibpath_var=no
+ ;;
+
+ sysv4.3*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var=no
+ export_dynamic_flag_spec='-Bexport'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var=no
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ ld_shlibs=yes
+ fi
+ ;;
+
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+ no_undefined_flag='${wl}-z,text'
+ archive_cmds_need_lc=no
+ hardcode_shlibpath_var=no
+ runpath_var='LD_RUN_PATH'
+
+ if test "$GCC" = yes; then
+ archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6*)
+ # Note: We can NOT use -z defs as we might desire, because we do not
+ # link with -lc, and that would cause any symbols used from libc to
+ # always be unresolved, which means just about no library would
+ # ever link correctly. If we're not using GNU ld we use -z text
+ # though, which does catch some bad symbols but isn't as heavy-handed
+ # as -z defs.
+ no_undefined_flag='${wl}-z,text'
+ allow_undefined_flag='${wl}-z,nodefs'
+ archive_cmds_need_lc=no
+ hardcode_shlibpath_var=no
+ hardcode_libdir_flag_spec='${wl}-R,$libdir'
+ hardcode_libdir_separator=':'
+ link_all_deplibs=yes
+ export_dynamic_flag_spec='${wl}-Bexport'
+ runpath_var='LD_RUN_PATH'
+
+ if test "$GCC" = yes; then
+ archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ uts4*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_shlibpath_var=no
+ ;;
+
+ *)
+ ld_shlibs=no
+ ;;
+ esac
+
+ if test x$host_vendor = xsni; then
+ case $host in
+ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ export_dynamic_flag_spec='${wl}-Blargedynsym'
+ ;;
+ esac
+ fi
+ fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5
+$as_echo "$ld_shlibs" >&6; }
+test "$ld_shlibs" = no && can_build_shared=no
+
+with_gnu_ld=$with_gnu_ld
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc" in
+x|xyes)
+ # Assume -lc should be added
+ archive_cmds_need_lc=yes
+
+ if test "$enable_shared" = yes && test "$GCC" = yes; then
+ case $archive_cmds in
+ *'~'*)
+ # FIXME: we may have to deal with multi-command sequences.
+ ;;
+ '$CC '*)
+ # Test whether the compiler implicitly links with -lc since on some
+ # systems, -lgcc has to come before -lc. If gcc already passes -lc
+ # to ld, don't add -lc before -lgcc.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
+$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
+ $RM conftest*
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } 2>conftest.err; then
+ soname=conftest
+ lib=conftest
+ libobjs=conftest.$ac_objext
+ deplibs=
+ wl=$lt_prog_compiler_wl
+ pic_flag=$lt_prog_compiler_pic
+ compiler_flags=-v
+ linker_flags=-v
+ verstring=
+ output_objdir=.
+ libname=conftest
+ lt_save_allow_undefined_flag=$allow_undefined_flag
+ allow_undefined_flag=
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
+ (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ then
+ archive_cmds_need_lc=no
+ else
+ archive_cmds_need_lc=yes
+ fi
+ allow_undefined_flag=$lt_save_allow_undefined_flag
+ else
+ cat conftest.err 1>&5
+ fi
+ $RM conftest*
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc" >&5
+$as_echo "$archive_cmds_need_lc" >&6; }
+ ;;
+ esac
+ fi
+ ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
+$as_echo_n "checking dynamic linker characteristics... " >&6; }
+
+if test "$GCC" = yes; then
+ case $host_os in
+ darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
+ *) lt_awk_arg="/^libraries:/" ;;
+ esac
+ lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+ if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then
+ # if the path contains ";" then we assume it to be the separator
+ # otherwise default to the standard path separator (i.e. ":") - it is
+ # assumed that no part of a normal pathname contains ";" but that should
+ # okay in the real world where ";" in dirpaths is itself problematic.
+ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+ # Ok, now we have the path, separated by spaces, we can step through it
+ # and add multilib dir if necessary.
+ lt_tmp_lt_search_path_spec=
+ lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+ for lt_sys_path in $lt_search_path_spec; do
+ if test -d "$lt_sys_path/$lt_multi_os_dir"; then
+ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
+ else
+ test -d "$lt_sys_path" && \
+ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+ fi
+ done
+ lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk '
+BEGIN {RS=" "; FS="/|\n";} {
+ lt_foo="";
+ lt_count=0;
+ for (lt_i = NF; lt_i > 0; lt_i--) {
+ if ($lt_i != "" && $lt_i != ".") {
+ if ($lt_i == "..") {
+ lt_count++;
+ } else {
+ if (lt_count == 0) {
+ lt_foo="/" $lt_i lt_foo;
+ } else {
+ lt_count--;
+ }
+ }
+ }
+ }
+ if (lt_foo != "") { lt_freq[lt_foo]++; }
+ if (lt_freq[lt_foo] == 1) { print lt_foo; }
+}'`
+ sys_lib_search_path_spec=`$ECHO $lt_search_path_spec`
+else
+ sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+ shlibpath_var=LIBPATH
+
+ # AIX 3 has no versioning support, so we append a major version to the name.
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+
+aix[4-9]*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ hardcode_into_libs=yes
+ if test "$host_cpu" = ia64; then
+ # AIX 5 supports IA64
+ library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ else
+ # With GCC up to 2.95.x, collect2 would create an import file
+ # for dependence libraries. The import file would start with
+ # the line `#! .'. This would cause the generated library to
+ # depend on `.', always an invalid library. This was fixed in
+ # development snapshots of GCC prior to 3.0.
+ case $host_os in
+ aix4 | aix4.[01] | aix4.[01].*)
+ if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+ echo ' yes '
+ echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+ :
+ else
+ can_build_shared=no
+ fi
+ ;;
+ esac
+ # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+ # soname into executable. Probably we can add versioning support to
+ # collect2, so additional links can be useful in future.
+ if test "$aix_use_runtimelinking" = yes; then
+ # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+ # instead of lib<name>.a to let people know that these are not
+ # typical AIX shared libraries.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ else
+ # We preserve .a as extension for shared libraries through AIX4.2
+ # and later when we are not doing run time linking.
+ library_names_spec='${libname}${release}.a $libname.a'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ fi
+ shlibpath_var=LIBPATH
+ fi
+ ;;
+
+amigaos*)
+ case $host_cpu in
+ powerpc)
+ # Since July 2007 AmigaOS4 officially supports .so libraries.
+ # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ ;;
+ m68k)
+ library_names_spec='$libname.ixlibrary $libname.a'
+ # Create ${libname}_ixlibrary.a entries in /sys/libs.
+ finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+ ;;
+ esac
+ ;;
+
+beos*)
+ library_names_spec='${libname}${shared_ext}'
+ dynamic_linker="$host_os ld.so"
+ shlibpath_var=LIBRARY_PATH
+ ;;
+
+bsdi[45]*)
+ version_type=linux
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+ sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+ # the default ld.so.conf also contains /usr/contrib/lib and
+ # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+ # libtool to hard-code these into programs
+ ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+ version_type=windows
+ shrext_cmds=".dll"
+ need_version=no
+ need_lib_prefix=no
+
+ case $GCC,$host_os in
+ yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
+ library_names_spec='$libname.dll.a'
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \${file}`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname~
+ chmod a+x \$dldir/$dlname~
+ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+ eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+ fi'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $RM \$dlpath'
+ shlibpath_overrides_runpath=yes
+
+ case $host_os in
+ cygwin*)
+ # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+ soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+ ;;
+ mingw* | cegcc*)
+ # MinGW DLLs use traditional 'lib' prefix
+ soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+ if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
+ # It is most probably a Windows format PATH printed by
+ # mingw gcc, but we are running on Cygwin. Gcc prints its search
+ # path with ; separators, and with drive letters. We can handle the
+ # drive letters (cygwin fileutils understands them), so leave them,
+ # especially as we might pass files found there to a mingw objdump,
+ # which wouldn't understand a cygwinified path. Ahh.
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+ ;;
+ pw32*)
+ # pw32 DLLs use 'pw' prefix rather than 'lib'
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ ;;
+ esac
+ ;;
+
+ *)
+ library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+ ;;
+ esac
+ dynamic_linker='Win32 ld.exe'
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ ;;
+
+darwin* | rhapsody*)
+ dynamic_linker="$host_os dyld"
+ version_type=darwin
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+ soname_spec='${libname}${release}${major}$shared_ext'
+ shlibpath_overrides_runpath=yes
+ shlibpath_var=DYLD_LIBRARY_PATH
+ shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"
+ sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+ ;;
+
+dgux*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+freebsd1*)
+ dynamic_linker=no
+ ;;
+
+freebsd* | dragonfly*)
+ # DragonFly does not have aout. When/if they implement a new
+ # versioning mechanism, adjust this.
+ if test -x /usr/bin/objformat; then
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+ freebsd[123]*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+ version_type=freebsd-$objformat
+ case $version_type in
+ freebsd-elf*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ need_version=no
+ need_lib_prefix=no
+ ;;
+ freebsd-*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+ need_version=yes
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+ freebsd2*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
+ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+ *) # from 4.6 on, and DragonFly
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ esac
+ ;;
+
+gnu*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ hardcode_into_libs=yes
+ ;;
+
+hpux9* | hpux10* | hpux11*)
+ # Give a soname corresponding to the major version so that dld.sl refuses to
+ # link against other versions.
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ case $host_cpu in
+ ia64*)
+ shrext_cmds='.so'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.so"
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ if test "X$HPUX_IA64_MODE" = X32; then
+ sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+ else
+ sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+ fi
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ hppa*64*)
+ shrext_cmds='.sl'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ *)
+ shrext_cmds='.sl'
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=SHLIB_PATH
+ shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+ esac
+ # HP-UX runs *really* slowly unless shared libraries are mode 555.
+ postinstall_cmds='chmod 555 $lib'
+ ;;
+
+interix[3-9]*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $host_os in
+ nonstopux*) version_type=nonstopux ;;
+ *)
+ if test "$lt_cv_prog_gnu_ld" = yes; then
+ version_type=linux
+ else
+ version_type=irix
+ fi ;;
+ esac
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+ case $host_os in
+ irix5* | nonstopux*)
+ libsuff= shlibsuff=
+ ;;
+ *)
+ case $LD in # libtool.m4 will add one of these switches to LD
+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+ libsuff= shlibsuff= libmagic=32-bit;;
+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+ libsuff=32 shlibsuff=N32 libmagic=N32;;
+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+ libsuff=64 shlibsuff=64 libmagic=64-bit;;
+ *) libsuff= shlibsuff= libmagic=never-match;;
+ esac
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+ sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+ hardcode_into_libs=yes
+ ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+ dynamic_linker=no
+ ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ # Some binutils ld are patched to set DT_RUNPATH
+ save_LDFLAGS=$LDFLAGS
+ save_libdir=$libdir
+ eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \
+ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
+ shlibpath_overrides_runpath=yes
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ LDFLAGS=$save_LDFLAGS
+ libdir=$save_libdir
+
+ # This implies no fast_install, which is unacceptable.
+ # Some rework will be needed to allow for fast_install
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+ # Append ld.so.conf contents to the search path
+ if test -f /etc/ld.so.conf; then
+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+ sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+ fi
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+ # powerpc, because MkLinux only supported shared libraries with the
+ # GNU dynamic linker. Since this was broken with cross compilers,
+ # most powerpc-linux boxes support dynamic linking these days and
+ # people can always --disable-shared, the test was removed, and we
+ # assume the GNU/Linux dynamic linker is in use.
+ dynamic_linker='GNU/Linux ld.so'
+ ;;
+
+netbsdelf*-gnu)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='NetBSD ld.elf_so'
+ ;;
+
+netbsd*)
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ dynamic_linker='NetBSD (a.out) ld.so'
+ else
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='NetBSD ld.elf_so'
+ fi
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+
+newsos6)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
+*nto* | *qnx*)
+ version_type=qnx
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='ldqnx.so'
+ ;;
+
+openbsd*)
+ version_type=sunos
+ sys_lib_dlsearch_path_spec="/usr/lib"
+ need_lib_prefix=no
+ # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+ case $host_os in
+ openbsd3.3 | openbsd3.3.*) need_version=yes ;;
+ *) need_version=no ;;
+ esac
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ case $host_os in
+ openbsd2.[89] | openbsd2.[89].*)
+ shlibpath_overrides_runpath=no
+ ;;
+ *)
+ shlibpath_overrides_runpath=yes
+ ;;
+ esac
+ else
+ shlibpath_overrides_runpath=yes
+ fi
+ ;;
+
+os2*)
+ libname_spec='$name'
+ shrext_cmds=".dll"
+ need_lib_prefix=no
+ library_names_spec='$libname${shared_ext} $libname.a'
+ dynamic_linker='OS/2 ld.exe'
+ shlibpath_var=LIBPATH
+ ;;
+
+osf3* | osf4* | osf5*)
+ version_type=osf
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+ sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+ ;;
+
+rdos*)
+ dynamic_linker=no
+ ;;
+
+solaris*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ # ldd complains unless libraries are executable
+ postinstall_cmds='chmod +x $lib'
+ ;;
+
+sunos4*)
+ version_type=sunos
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ if test "$with_gnu_ld" = yes; then
+ need_lib_prefix=no
+ fi
+ need_version=yes
+ ;;
+
+sysv4 | sysv4.3*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_vendor in
+ sni)
+ shlibpath_overrides_runpath=no
+ need_lib_prefix=no
+ runpath_var=LD_RUN_PATH
+ ;;
+ siemens)
+ need_lib_prefix=no
+ ;;
+ motorola)
+ need_lib_prefix=no
+ need_version=no
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+ ;;
+ esac
+ ;;
+
+sysv4*MP*)
+ if test -d /usr/nec ;then
+ version_type=linux
+ library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+ soname_spec='$libname${shared_ext}.$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ fi
+ ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ version_type=freebsd-elf
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ if test "$with_gnu_ld" = yes; then
+ sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+ else
+ sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+ case $host_os in
+ sco3.2v5*)
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+ ;;
+ esac
+ fi
+ sys_lib_dlsearch_path_spec='/usr/lib'
+ ;;
+
+tpf*)
+ # TPF is a cross-target only. Preferred cross-host = GNU/Linux.
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+uts4*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+*)
+ dynamic_linker=no
+ ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
+$as_echo "$dynamic_linker" >&6; }
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+ variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
+ sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+fi
+if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
+ sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
+$as_echo_n "checking how to hardcode library paths into programs... " >&6; }
+hardcode_action=
+if test -n "$hardcode_libdir_flag_spec" ||
+ test -n "$runpath_var" ||
+ test "X$hardcode_automatic" = "Xyes" ; then
+
+ # We can hardcode non-existent directories.
+ if test "$hardcode_direct" != no &&
+ # If the only mechanism to avoid hardcoding is shlibpath_var, we
+ # have to relink, otherwise we might link with an installed library
+ # when we should be linking with a yet-to-be-installed one
+ ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no &&
+ test "$hardcode_minus_L" != no; then
+ # Linking always hardcodes the temporary library directory.
+ hardcode_action=relink
+ else
+ # We can link without hardcoding, and we can hardcode nonexisting dirs.
+ hardcode_action=immediate
+ fi
+else
+ # We cannot hardcode anything, or else we can only hardcode existing
+ # directories.
+ hardcode_action=unsupported
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5
+$as_echo "$hardcode_action" >&6; }
+
+if test "$hardcode_action" = relink ||
+ test "$inherit_rpath" = yes; then
+ # Fast installation is not supported
+ enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+ test "$enable_shared" = no; then
+ # Fast installation is not necessary
+ enable_fast_install=needless
+fi
+
+
+
+
+
+
+ if test "x$enable_dlopen" != xyes; then
+ enable_dlopen=unknown
+ enable_dlopen_self=unknown
+ enable_dlopen_self_static=unknown
+else
+ lt_cv_dlopen=no
+ lt_cv_dlopen_libs=
+
+ case $host_os in
+ beos*)
+ lt_cv_dlopen="load_add_on"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+ ;;
+
+ mingw* | pw32* | cegcc*)
+ lt_cv_dlopen="LoadLibrary"
+ lt_cv_dlopen_libs=
+ ;;
+
+ cygwin*)
+ lt_cv_dlopen="dlopen"
+ lt_cv_dlopen_libs=
+ ;;
+
+ darwin*)
+ # if libdl is installed we need to link against it
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+$as_echo_n "checking for dlopen in -ldl... " >&6; }
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int main (void)
+{
+return dlopen ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_dl_dlopen=yes
+else
+ ac_cv_lib_dl_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = x""yes; then :
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+
+ lt_cv_dlopen="dyld"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+
+fi
+
+ ;;
+
+ *)
+ ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load"
+if test "x$ac_cv_func_shl_load" = x""yes; then :
+ lt_cv_dlopen="shl_load"
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5
+$as_echo_n "checking for shl_load in -ldld... " >&6; }
+if test "${ac_cv_lib_dld_shl_load+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#ifdef __cplusplus
+extern "C"
+#endif
+char shl_load ();
+int main (void)
+{
+return shl_load ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_dld_shl_load=yes
+else
+ ac_cv_lib_dld_shl_load=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5
+$as_echo "$ac_cv_lib_dld_shl_load" >&6; }
+if test "x$ac_cv_lib_dld_shl_load" = x""yes; then :
+ lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"
+else
+ ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen"
+if test "x$ac_cv_func_dlopen" = x""yes; then :
+ lt_cv_dlopen="dlopen"
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+$as_echo_n "checking for dlopen in -ldl... " >&6; }
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int main (void)
+{
+return dlopen ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_dl_dlopen=yes
+else
+ ac_cv_lib_dl_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = x""yes; then :
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5
+$as_echo_n "checking for dlopen in -lsvld... " >&6; }
+if test "${ac_cv_lib_svld_dlopen+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsvld $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int main (void)
+{
+return dlopen ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_svld_dlopen=yes
+else
+ ac_cv_lib_svld_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5
+$as_echo "$ac_cv_lib_svld_dlopen" >&6; }
+if test "x$ac_cv_lib_svld_dlopen" = x""yes; then :
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5
+$as_echo_n "checking for dld_link in -ldld... " >&6; }
+if test "${ac_cv_lib_dld_dld_link+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#ifdef __cplusplus
+extern "C"
+#endif
+char dld_link ();
+int main (void)
+{
+return dld_link ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_dld_dld_link=yes
+else
+ ac_cv_lib_dld_dld_link=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5
+$as_echo "$ac_cv_lib_dld_dld_link" >&6; }
+if test "x$ac_cv_lib_dld_dld_link" = x""yes; then :
+ lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+ ;;
+ esac
+
+ if test "x$lt_cv_dlopen" != xno; then
+ enable_dlopen=yes
+ else
+ enable_dlopen=no
+ fi
+
+ case $lt_cv_dlopen in
+ dlopen)
+ save_CPPFLAGS="$CPPFLAGS"
+ test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+ save_LDFLAGS="$LDFLAGS"
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+ save_LIBS="$LIBS"
+ LIBS="$lt_cv_dlopen_libs $LIBS"
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5
+$as_echo_n "checking whether a program can dlopen itself... " >&6; }
+if test "${lt_cv_dlopen_self+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test "$cross_compiling" = yes; then :
+ lt_cv_dlopen_self=cross
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+#line 13240 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ /* dlclose (self); */
+ }
+ else
+ puts (dlerror ());
+
+ return status;
+}
+_LT_EOF
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then
+ (./conftest; exit; ) >&5 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
+ x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
+ x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;;
+ esac
+ else :
+ # compilation failed
+ lt_cv_dlopen_self=no
+ fi
+fi
+rm -fr conftest*
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5
+$as_echo "$lt_cv_dlopen_self" >&6; }
+
+ if test "x$lt_cv_dlopen_self" = xyes; then
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5
+$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; }
+if test "${lt_cv_dlopen_self_static+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test "$cross_compiling" = yes; then :
+ lt_cv_dlopen_self_static=cross
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+#line 13336 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ /* dlclose (self); */
+ }
+ else
+ puts (dlerror ());
+
+ return status;
+}
+_LT_EOF
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then
+ (./conftest; exit; ) >&5 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
+ x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
+ x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;;
+ esac
+ else :
+ # compilation failed
+ lt_cv_dlopen_self_static=no
+ fi
+fi
+rm -fr conftest*
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5
+$as_echo "$lt_cv_dlopen_self_static" >&6; }
+ fi
+
+ CPPFLAGS="$save_CPPFLAGS"
+ LDFLAGS="$save_LDFLAGS"
+ LIBS="$save_LIBS"
+ ;;
+ esac
+
+ case $lt_cv_dlopen_self in
+ yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+ *) enable_dlopen_self=unknown ;;
+ esac
+
+ case $lt_cv_dlopen_self_static in
+ yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+ *) enable_dlopen_self_static=unknown ;;
+ esac
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+striplib=
+old_striplib=
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5
+$as_echo_n "checking whether stripping libraries is possible... " >&6; }
+if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+ test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+ test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+ case $host_os in
+ darwin*)
+ if test -n "$STRIP" ; then
+ striplib="$STRIP -x"
+ old_striplib="$STRIP -S"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ fi
+ ;;
+ *)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ;;
+ esac
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+ # Report which library types will actually be built
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5
+$as_echo_n "checking if libtool supports shared libraries... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5
+$as_echo "$can_build_shared" >&6; }
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5
+$as_echo_n "checking whether to build shared libraries... " >&6; }
+ test "$can_build_shared" = "no" && enable_shared=no
+
+ # On AIX, shared libraries and static libraries use the same namespace, and
+ # are all built from PIC.
+ case $host_os in
+ aix3*)
+ test "$enable_shared" = yes && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+
+ aix[4-9]*)
+ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+ test "$enable_shared" = yes && enable_static=no
+ fi
+ ;;
+ esac
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5
+$as_echo "$enable_shared" >&6; }
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5
+$as_echo_n "checking whether to build static libraries... " >&6; }
+ # Make sure either enable_shared or enable_static is yes.
+ test "$enable_shared" = yes || enable_static=yes
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5
+$as_echo "$enable_static" >&6; }
+
+
+
+
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+CC="$lt_save_CC"
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ac_config_commands="$ac_config_commands libtool"
+
+
+
+
+# Only expand once:
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we need -mimpure-text" >&5
+$as_echo_n "checking if we need -mimpure-text... " >&6; }
+mimpure=no
+case $host in
+ *-*-solaris2*)
+ if test "$GCC" = "yes"; then
+ mimpure="yes"
+ fi
+ ;;
+ *)
+ ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $mimpure" >&5
+$as_echo "$mimpure" >&6; }
+
+
+if test x$mimpure = xyes; then
+ MIMPURE_TRUE=
+ MIMPURE_FALSE='#'
+else
+ MIMPURE_TRUE='#'
+ MIMPURE_FALSE=
+fi
+
+
+
+
+if false; then
+ STATICLIB_TRUE=
+ STATICLIB_FALSE='#'
+else
+ STATICLIB_TRUE='#'
+ STATICLIB_FALSE=
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we need BUILDING_LIBCURL" >&5
+$as_echo_n "checking if we need BUILDING_LIBCURL... " >&6; }
+case $host in
+ *-*-mingw*)
+
+$as_echo "#define BUILDING_LIBCURL 1" >>confdefs.h
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we need CURL_STATICLIB" >&5
+$as_echo_n "checking if we need CURL_STATICLIB... " >&6; }
+ if test "X$enable_shared" = "Xno"
+ then
+
+$as_echo "#define CURL_STATICLIB 1" >>confdefs.h
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+
+if true; then
+ STATICLIB_TRUE=
+ STATICLIB_FALSE='#'
+else
+ STATICLIB_TRUE='#'
+ STATICLIB_FALSE=
+fi
+
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ fi
+ ;;
+ *)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ;;
+esac
+
+# Determine whether all dependent libraries must be specified when linking
+if test "X$enable_shared" = "Xyes" -a "X$link_all_deplibs" = "Xno"
+then
+ REQUIRE_LIB_DEPS=no
+else
+ REQUIRE_LIB_DEPS=yes
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+set x ${MAKE-make}
+ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\"" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
+all:
+ @echo '@@@%%%=$(MAKE)=@@@%%%'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
+case `${MAKE-make} -f conftest.make 2>/dev/null` in
+ *@@@%%%=?*=@@@%%%*)
+ eval ac_cv_prog_make_${ac_make}_set=yes;;
+ *)
+ eval ac_cv_prog_make_${ac_make}_set=no;;
+esac
+rm -f conftest.make
+fi
+if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ SET_MAKE=
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5
+$as_echo_n "checking for inline... " >&6; }
+if test "${ac_cv_c_inline+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_cv_c_inline=no
+for ac_kw in inline __inline__ __inline; do
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifndef __cplusplus
+typedef int foo_t;
+static $ac_kw foo_t static_foo () {return 0; }
+$ac_kw foo_t foo () {return 0; }
+#endif
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_c_inline=$ac_kw
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ test "$ac_cv_c_inline" != no && break
+done
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5
+$as_echo "$ac_cv_c_inline" >&6; }
+
+case $ac_cv_c_inline in
+ inline | yes) ;;
+ *)
+ case $ac_cv_c_inline in
+ no) ac_val=;;
+ *) ac_val=$ac_cv_c_inline;;
+ esac
+ cat >>confdefs.h <<_ACEOF
+#ifndef __cplusplus
+#define inline $ac_val
+#endif
+_ACEOF
+ ;;
+esac
+
+
+
+
+ #
+ compiler_id="unknown"
+ compiler_num="0"
+ #
+ flags_dbg_all="unknown"
+ flags_dbg_yes="unknown"
+ flags_dbg_off="unknown"
+ flags_opt_all="unknown"
+ flags_opt_yes="unknown"
+ flags_opt_off="unknown"
+ #
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler is DEC/Compaq/HP C" >&5
+$as_echo_n "checking if compiler is DEC/Compaq/HP C... " >&6; }
+
+ if test -z "$SED"; then
+ as_fn_error $? "SED not set. Cannot continue without SED being set." "$LINENO" 5
+ fi
+ if test -z "$GREP"; then
+ as_fn_error $? "GREP not set. Cannot continue without GREP being set." "$LINENO" 5
+ fi
+
+ tmp_exp=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#ifdef __DECC
+CURL_DEF_TOKEN __DECC
+#endif
+
+
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+ tmp_exp=`eval "$ac_cpp conftest.$ac_ext" 2>/dev/null | \
+ "$GREP" CURL_DEF_TOKEN 2>/dev/null | \
+ "$SED" 's/.*CURL_DEF_TOKEN[ ]//' 2>/dev/null | \
+ "$SED" 's/["][ ]*["]//g' 2>/dev/null`
+ if test -z "$tmp_exp" || test "$tmp_exp" = "__DECC"; then
+ tmp_exp=""
+ fi
+
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+ if test -z "$tmp_exp"; then
+ curl_cv_have_def___DECC=no
+
+ else
+ curl_cv_have_def___DECC=yes
+ curl_cv_def___DECC=$tmp_exp
+
+ fi
+
+
+ if test -z "$SED"; then
+ as_fn_error $? "SED not set. Cannot continue without SED being set." "$LINENO" 5
+ fi
+ if test -z "$GREP"; then
+ as_fn_error $? "GREP not set. Cannot continue without GREP being set." "$LINENO" 5
+ fi
+
+ tmp_exp=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#ifdef __DECC_VER
+CURL_DEF_TOKEN __DECC_VER
+#endif
+
+
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+ tmp_exp=`eval "$ac_cpp conftest.$ac_ext" 2>/dev/null | \
+ "$GREP" CURL_DEF_TOKEN 2>/dev/null | \
+ "$SED" 's/.*CURL_DEF_TOKEN[ ]//' 2>/dev/null | \
+ "$SED" 's/["][ ]*["]//g' 2>/dev/null`
+ if test -z "$tmp_exp" || test "$tmp_exp" = "__DECC_VER"; then
+ tmp_exp=""
+ fi
+
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+ if test -z "$tmp_exp"; then
+ curl_cv_have_def___DECC_VER=no
+
+ else
+ curl_cv_have_def___DECC_VER=yes
+ curl_cv_def___DECC_VER=$tmp_exp
+
+ fi
+
+ if test "$curl_cv_have_def___DECC" = "yes" &&
+ test "$curl_cv_have_def___DECC_VER" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ compiler_id="DEC_C"
+ flags_dbg_all="-g -g0 -g1 -g2 -g3"
+ flags_dbg_yes="-g2"
+ flags_dbg_off="-g0"
+ flags_opt_all="-O -O0 -O1 -O2 -O3 -O4"
+ flags_opt_yes="-O1"
+ flags_opt_off="-O0"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ fi
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler is HP-UX C" >&5
+$as_echo_n "checking if compiler is HP-UX C... " >&6; }
+
+ if test -z "$SED"; then
+ as_fn_error $? "SED not set. Cannot continue without SED being set." "$LINENO" 5
+ fi
+ if test -z "$GREP"; then
+ as_fn_error $? "GREP not set. Cannot continue without GREP being set." "$LINENO" 5
+ fi
+
+ tmp_exp=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#ifdef __HP_cc
+CURL_DEF_TOKEN __HP_cc
+#endif
+
+
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+ tmp_exp=`eval "$ac_cpp conftest.$ac_ext" 2>/dev/null | \
+ "$GREP" CURL_DEF_TOKEN 2>/dev/null | \
+ "$SED" 's/.*CURL_DEF_TOKEN[ ]//' 2>/dev/null | \
+ "$SED" 's/["][ ]*["]//g' 2>/dev/null`
+ if test -z "$tmp_exp" || test "$tmp_exp" = "__HP_cc"; then
+ tmp_exp=""
+ fi
+
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+ if test -z "$tmp_exp"; then
+ curl_cv_have_def___HP_cc=no
+
+ else
+ curl_cv_have_def___HP_cc=yes
+ curl_cv_def___HP_cc=$tmp_exp
+
+ fi
+
+ if test "$curl_cv_have_def___HP_cc" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ compiler_id="HP_UX_C"
+ flags_dbg_all="-g -s"
+ flags_dbg_yes="-g"
+ flags_dbg_off="-s"
+ flags_opt_all="-O +O0 +O1 +O2 +O3 +O4"
+ flags_opt_yes="+O2"
+ flags_opt_off="+O0"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ fi
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler is IBM C" >&5
+$as_echo_n "checking if compiler is IBM C... " >&6; }
+
+ if test -z "$SED"; then
+ as_fn_error $? "SED not set. Cannot continue without SED being set." "$LINENO" 5
+ fi
+ if test -z "$GREP"; then
+ as_fn_error $? "GREP not set. Cannot continue without GREP being set." "$LINENO" 5
+ fi
+
+ tmp_exp=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#ifdef __IBMC__
+CURL_DEF_TOKEN __IBMC__
+#endif
+
+
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+ tmp_exp=`eval "$ac_cpp conftest.$ac_ext" 2>/dev/null | \
+ "$GREP" CURL_DEF_TOKEN 2>/dev/null | \
+ "$SED" 's/.*CURL_DEF_TOKEN[ ]//' 2>/dev/null | \
+ "$SED" 's/["][ ]*["]//g' 2>/dev/null`
+ if test -z "$tmp_exp" || test "$tmp_exp" = "__IBMC__"; then
+ tmp_exp=""
+ fi
+
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+ if test -z "$tmp_exp"; then
+ curl_cv_have_def___IBMC__=no
+
+ else
+ curl_cv_have_def___IBMC__=yes
+ curl_cv_def___IBMC__=$tmp_exp
+
+ fi
+
+ if test "$curl_cv_have_def___IBMC__" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ compiler_id="IBM_C"
+ flags_dbg_all="-g -g0 -g1 -g2 -g3"
+ flags_dbg_yes="-g"
+ flags_dbg_off=""
+ flags_opt_all="-O -O0 -O1 -O2 -O3 -O4 -O5"
+ flags_opt_all="$flags_opt_all -qnooptimize"
+ flags_opt_all="$flags_opt_all -qoptimize=0"
+ flags_opt_all="$flags_opt_all -qoptimize=1"
+ flags_opt_all="$flags_opt_all -qoptimize=2"
+ flags_opt_all="$flags_opt_all -qoptimize=3"
+ flags_opt_all="$flags_opt_all -qoptimize=4"
+ flags_opt_all="$flags_opt_all -qoptimize=5"
+ flags_opt_yes="-O2"
+ flags_opt_off="-qnooptimize"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ fi
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler is Intel C" >&5
+$as_echo_n "checking if compiler is Intel C... " >&6; }
+
+ if test -z "$SED"; then
+ as_fn_error $? "SED not set. Cannot continue without SED being set." "$LINENO" 5
+ fi
+ if test -z "$GREP"; then
+ as_fn_error $? "GREP not set. Cannot continue without GREP being set." "$LINENO" 5
+ fi
+
+ tmp_exp=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#ifdef __INTEL_COMPILER
+CURL_DEF_TOKEN __INTEL_COMPILER
+#endif
+
+
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+ tmp_exp=`eval "$ac_cpp conftest.$ac_ext" 2>/dev/null | \
+ "$GREP" CURL_DEF_TOKEN 2>/dev/null | \
+ "$SED" 's/.*CURL_DEF_TOKEN[ ]//' 2>/dev/null | \
+ "$SED" 's/["][ ]*["]//g' 2>/dev/null`
+ if test -z "$tmp_exp" || test "$tmp_exp" = "__INTEL_COMPILER"; then
+ tmp_exp=""
+ fi
+
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+ if test -z "$tmp_exp"; then
+ curl_cv_have_def___INTEL_COMPILER=no
+
+ else
+ curl_cv_have_def___INTEL_COMPILER=yes
+ curl_cv_def___INTEL_COMPILER=$tmp_exp
+
+ fi
+
+ if test "$curl_cv_have_def___INTEL_COMPILER" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ compiler_num="$curl_cv_def___INTEL_COMPILER"
+
+ if test -z "$SED"; then
+ as_fn_error $? "SED not set. Cannot continue without SED being set." "$LINENO" 5
+ fi
+ if test -z "$GREP"; then
+ as_fn_error $? "GREP not set. Cannot continue without GREP being set." "$LINENO" 5
+ fi
+
+ tmp_exp=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#ifdef __unix__
+CURL_DEF_TOKEN __unix__
+#endif
+
+
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+ tmp_exp=`eval "$ac_cpp conftest.$ac_ext" 2>/dev/null | \
+ "$GREP" CURL_DEF_TOKEN 2>/dev/null | \
+ "$SED" 's/.*CURL_DEF_TOKEN[ ]//' 2>/dev/null | \
+ "$SED" 's/["][ ]*["]//g' 2>/dev/null`
+ if test -z "$tmp_exp" || test "$tmp_exp" = ""; then
+ tmp_exp=""
+ fi
+
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+ if test -z "$tmp_exp"; then
+ curl_cv_have_def___unix__=no
+
+ else
+ curl_cv_have_def___unix__=yes
+ curl_cv_def___unix__=$tmp_exp
+
+ fi
+
+ if test "$curl_cv_have_def___unix__" = "yes"; then
+ compiler_id="INTEL_UNIX_C"
+ flags_dbg_all="-g -g0"
+ flags_dbg_yes="-g"
+ flags_dbg_off="-g0"
+ flags_opt_all="-O -O0 -O1 -O2 -O3 -Os"
+ flags_opt_yes="-O2"
+ flags_opt_off="-O0"
+ else
+ compiler_id="INTEL_WINDOWS_C"
+ flags_dbg_all="/ZI /Zi /zI /zi /ZD /Zd /zD /zd /Z7 /z7 /Oy /Oy-"
+ flags_dbg_all="$flags_dbg_all /debug"
+ flags_dbg_all="$flags_dbg_all /debug:none"
+ flags_dbg_all="$flags_dbg_all /debug:minimal"
+ flags_dbg_all="$flags_dbg_all /debug:partial"
+ flags_dbg_all="$flags_dbg_all /debug:full"
+ flags_dbg_all="$flags_dbg_all /debug:semantic_stepping"
+ flags_dbg_all="$flags_dbg_all /debug:extended"
+ flags_dbg_yes="/Zi /Oy-"
+ flags_dbg_off="/debug:none /Oy-"
+ flags_opt_all="/O /O0 /O1 /O2 /O3 /Od /Og /Og- /Oi /Oi-"
+ flags_opt_yes="/O2"
+ flags_opt_off="/Od"
+ fi
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ fi
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler is clang" >&5
+$as_echo_n "checking if compiler is clang... " >&6; }
+
+ if test -z "$SED"; then
+ as_fn_error $? "SED not set. Cannot continue without SED being set." "$LINENO" 5
+ fi
+ if test -z "$GREP"; then
+ as_fn_error $? "GREP not set. Cannot continue without GREP being set." "$LINENO" 5
+ fi
+
+ tmp_exp=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#ifdef __clang__
+CURL_DEF_TOKEN __clang__
+#endif
+
+
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+ tmp_exp=`eval "$ac_cpp conftest.$ac_ext" 2>/dev/null | \
+ "$GREP" CURL_DEF_TOKEN 2>/dev/null | \
+ "$SED" 's/.*CURL_DEF_TOKEN[ ]//' 2>/dev/null | \
+ "$SED" 's/["][ ]*["]//g' 2>/dev/null`
+ if test -z "$tmp_exp" || test "$tmp_exp" = "__clang__"; then
+ tmp_exp=""
+ fi
+
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+ if test -z "$tmp_exp"; then
+ curl_cv_have_def___clang__=no
+
+ else
+ curl_cv_have_def___clang__=yes
+ curl_cv_def___clang__=$tmp_exp
+
+ fi
+
+ if test "$curl_cv_have_def___clang__" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ compiler_id="CLANG"
+ clangver=`$CC -dumpversion`
+ clangvhi=`echo $clangver | cut -d . -f1`
+ clangvlo=`echo $clangver | cut -d . -f2`
+ compiler_num=`(expr $clangvhi "*" 100 + $clangvlo) 2>/dev/null`
+ flags_dbg_all="-g -g0 -g1 -g2 -g3"
+ flags_dbg_all="$flags_dbg_all -ggdb"
+ flags_dbg_all="$flags_dbg_all -gstabs"
+ flags_dbg_all="$flags_dbg_all -gstabs+"
+ flags_dbg_all="$flags_dbg_all -gcoff"
+ flags_dbg_all="$flags_dbg_all -gxcoff"
+ flags_dbg_all="$flags_dbg_all -gdwarf-2"
+ flags_dbg_all="$flags_dbg_all -gvms"
+ flags_dbg_yes="-g"
+ flags_dbg_off="-g0"
+ flags_opt_all="-O -O0 -O1 -O2 -Os -O3 -O4"
+ flags_opt_yes="-Os"
+ flags_opt_off="-O0"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ fi
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler is GNU C" >&5
+$as_echo_n "checking if compiler is GNU C... " >&6; }
+
+ if test -z "$SED"; then
+ as_fn_error $? "SED not set. Cannot continue without SED being set." "$LINENO" 5
+ fi
+ if test -z "$GREP"; then
+ as_fn_error $? "GREP not set. Cannot continue without GREP being set." "$LINENO" 5
+ fi
+
+ tmp_exp=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#ifdef __GNUC__
+CURL_DEF_TOKEN __GNUC__
+#endif
+
+
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+ tmp_exp=`eval "$ac_cpp conftest.$ac_ext" 2>/dev/null | \
+ "$GREP" CURL_DEF_TOKEN 2>/dev/null | \
+ "$SED" 's/.*CURL_DEF_TOKEN[ ]//' 2>/dev/null | \
+ "$SED" 's/["][ ]*["]//g' 2>/dev/null`
+ if test -z "$tmp_exp" || test "$tmp_exp" = "__GNUC__"; then
+ tmp_exp=""
+ fi
+
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+ if test -z "$tmp_exp"; then
+ curl_cv_have_def___GNUC__=no
+
+ else
+ curl_cv_have_def___GNUC__=yes
+ curl_cv_def___GNUC__=$tmp_exp
+
+ fi
+
+ if test "$curl_cv_have_def___GNUC__" = "yes" &&
+ test "$compiler_id" = "unknown"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ compiler_id="GNU_C"
+ gccver=`$CC -dumpversion`
+ gccvhi=`echo $gccver | cut -d . -f1`
+ gccvlo=`echo $gccver | cut -d . -f2`
+ compiler_num=`(expr $gccvhi "*" 100 + $gccvlo) 2>/dev/null`
+ flags_dbg_all="-g -g0 -g1 -g2 -g3"
+ flags_dbg_all="$flags_dbg_all -ggdb"
+ flags_dbg_all="$flags_dbg_all -gstabs"
+ flags_dbg_all="$flags_dbg_all -gstabs+"
+ flags_dbg_all="$flags_dbg_all -gcoff"
+ flags_dbg_all="$flags_dbg_all -gxcoff"
+ flags_dbg_all="$flags_dbg_all -gdwarf-2"
+ flags_dbg_all="$flags_dbg_all -gvms"
+ flags_dbg_yes="-g"
+ flags_dbg_off="-g0"
+ flags_opt_all="-O -O0 -O1 -O2 -O3 -Os"
+ flags_opt_yes="-O2"
+ flags_opt_off="-O0"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ fi
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler is LCC" >&5
+$as_echo_n "checking if compiler is LCC... " >&6; }
+
+ if test -z "$SED"; then
+ as_fn_error $? "SED not set. Cannot continue without SED being set." "$LINENO" 5
+ fi
+ if test -z "$GREP"; then
+ as_fn_error $? "GREP not set. Cannot continue without GREP being set." "$LINENO" 5
+ fi
+
+ tmp_exp=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#ifdef __LCC__
+CURL_DEF_TOKEN __LCC__
+#endif
+
+
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+ tmp_exp=`eval "$ac_cpp conftest.$ac_ext" 2>/dev/null | \
+ "$GREP" CURL_DEF_TOKEN 2>/dev/null | \
+ "$SED" 's/.*CURL_DEF_TOKEN[ ]//' 2>/dev/null | \
+ "$SED" 's/["][ ]*["]//g' 2>/dev/null`
+ if test -z "$tmp_exp" || test "$tmp_exp" = "__LCC__"; then
+ tmp_exp=""
+ fi
+
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+ if test -z "$tmp_exp"; then
+ curl_cv_have_def___LCC__=no
+
+ else
+ curl_cv_have_def___LCC__=yes
+ curl_cv_def___LCC__=$tmp_exp
+
+ fi
+
+ if test "$curl_cv_have_def___LCC__" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ compiler_id="LCC"
+ flags_dbg_all="-g"
+ flags_dbg_yes="-g"
+ flags_dbg_off=""
+ flags_opt_all=""
+ flags_opt_yes=""
+ flags_opt_off=""
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ fi
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler is SGI MIPSpro C" >&5
+$as_echo_n "checking if compiler is SGI MIPSpro C... " >&6; }
+
+ if test -z "$SED"; then
+ as_fn_error $? "SED not set. Cannot continue without SED being set." "$LINENO" 5
+ fi
+ if test -z "$GREP"; then
+ as_fn_error $? "GREP not set. Cannot continue without GREP being set." "$LINENO" 5
+ fi
+
+ tmp_exp=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#ifdef __GNUC__
+CURL_DEF_TOKEN __GNUC__
+#endif
+
+
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+ tmp_exp=`eval "$ac_cpp conftest.$ac_ext" 2>/dev/null | \
+ "$GREP" CURL_DEF_TOKEN 2>/dev/null | \
+ "$SED" 's/.*CURL_DEF_TOKEN[ ]//' 2>/dev/null | \
+ "$SED" 's/["][ ]*["]//g' 2>/dev/null`
+ if test -z "$tmp_exp" || test "$tmp_exp" = "__GNUC__"; then
+ tmp_exp=""
+ fi
+
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+ if test -z "$tmp_exp"; then
+ curl_cv_have_def___GNUC__=no
+
+ else
+ curl_cv_have_def___GNUC__=yes
+ curl_cv_def___GNUC__=$tmp_exp
+
+ fi
+
+
+ if test -z "$SED"; then
+ as_fn_error $? "SED not set. Cannot continue without SED being set." "$LINENO" 5
+ fi
+ if test -z "$GREP"; then
+ as_fn_error $? "GREP not set. Cannot continue without GREP being set." "$LINENO" 5
+ fi
+
+ tmp_exp=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#ifdef _COMPILER_VERSION
+CURL_DEF_TOKEN _COMPILER_VERSION
+#endif
+
+
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+ tmp_exp=`eval "$ac_cpp conftest.$ac_ext" 2>/dev/null | \
+ "$GREP" CURL_DEF_TOKEN 2>/dev/null | \
+ "$SED" 's/.*CURL_DEF_TOKEN[ ]//' 2>/dev/null | \
+ "$SED" 's/["][ ]*["]//g' 2>/dev/null`
+ if test -z "$tmp_exp" || test "$tmp_exp" = "_COMPILER_VERSION"; then
+ tmp_exp=""
+ fi
+
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+ if test -z "$tmp_exp"; then
+ curl_cv_have_def__COMPILER_VERSION=no
+
+ else
+ curl_cv_have_def__COMPILER_VERSION=yes
+ curl_cv_def__COMPILER_VERSION=$tmp_exp
+
+ fi
+
+
+ if test -z "$SED"; then
+ as_fn_error $? "SED not set. Cannot continue without SED being set." "$LINENO" 5
+ fi
+ if test -z "$GREP"; then
+ as_fn_error $? "GREP not set. Cannot continue without GREP being set." "$LINENO" 5
+ fi
+
+ tmp_exp=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#ifdef _SGI_COMPILER_VERSION
+CURL_DEF_TOKEN _SGI_COMPILER_VERSION
+#endif
+
+
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+ tmp_exp=`eval "$ac_cpp conftest.$ac_ext" 2>/dev/null | \
+ "$GREP" CURL_DEF_TOKEN 2>/dev/null | \
+ "$SED" 's/.*CURL_DEF_TOKEN[ ]//' 2>/dev/null | \
+ "$SED" 's/["][ ]*["]//g' 2>/dev/null`
+ if test -z "$tmp_exp" || test "$tmp_exp" = "_SGI_COMPILER_VERSION"; then
+ tmp_exp=""
+ fi
+
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+ if test -z "$tmp_exp"; then
+ curl_cv_have_def__SGI_COMPILER_VERSION=no
+
+ else
+ curl_cv_have_def__SGI_COMPILER_VERSION=yes
+ curl_cv_def__SGI_COMPILER_VERSION=$tmp_exp
+
+ fi
+
+ if test "$curl_cv_have_def___GNUC__" = "no" &&
+ (test "$curl_cv_have_def__SGI_COMPILER_VERSION" = "yes" ||
+ test "$curl_cv_have_def__COMPILER_VERSION" = "yes"); then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ compiler_id="SGI_MIPSPRO_C"
+ flags_dbg_all="-g -g0 -g1 -g2 -g3"
+ flags_dbg_yes="-g"
+ flags_dbg_off="-g0"
+ flags_opt_all="-O -O0 -O1 -O2 -O3 -Ofast"
+ flags_opt_yes="-O2"
+ flags_opt_off="-O0"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ fi
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler is SGI MIPS C" >&5
+$as_echo_n "checking if compiler is SGI MIPS C... " >&6; }
+
+ if test -z "$SED"; then
+ as_fn_error $? "SED not set. Cannot continue without SED being set." "$LINENO" 5
+ fi
+ if test -z "$GREP"; then
+ as_fn_error $? "GREP not set. Cannot continue without GREP being set." "$LINENO" 5
+ fi
+
+ tmp_exp=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#ifdef __GNUC__
+CURL_DEF_TOKEN __GNUC__
+#endif
+
+
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+ tmp_exp=`eval "$ac_cpp conftest.$ac_ext" 2>/dev/null | \
+ "$GREP" CURL_DEF_TOKEN 2>/dev/null | \
+ "$SED" 's/.*CURL_DEF_TOKEN[ ]//' 2>/dev/null | \
+ "$SED" 's/["][ ]*["]//g' 2>/dev/null`
+ if test -z "$tmp_exp" || test "$tmp_exp" = "__GNUC__"; then
+ tmp_exp=""
+ fi
+
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+ if test -z "$tmp_exp"; then
+ curl_cv_have_def___GNUC__=no
+
+ else
+ curl_cv_have_def___GNUC__=yes
+ curl_cv_def___GNUC__=$tmp_exp
+
+ fi
+
+
+ if test -z "$SED"; then
+ as_fn_error $? "SED not set. Cannot continue without SED being set." "$LINENO" 5
+ fi
+ if test -z "$GREP"; then
+ as_fn_error $? "GREP not set. Cannot continue without GREP being set." "$LINENO" 5
+ fi
+
+ tmp_exp=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#ifdef __sgi
+CURL_DEF_TOKEN __sgi
+#endif
+
+
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+ tmp_exp=`eval "$ac_cpp conftest.$ac_ext" 2>/dev/null | \
+ "$GREP" CURL_DEF_TOKEN 2>/dev/null | \
+ "$SED" 's/.*CURL_DEF_TOKEN[ ]//' 2>/dev/null | \
+ "$SED" 's/["][ ]*["]//g' 2>/dev/null`
+ if test -z "$tmp_exp" || test "$tmp_exp" = "__sgi"; then
+ tmp_exp=""
+ fi
+
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+ if test -z "$tmp_exp"; then
+ curl_cv_have_def___sgi=no
+
+ else
+ curl_cv_have_def___sgi=yes
+ curl_cv_def___sgi=$tmp_exp
+
+ fi
+
+ if test "$curl_cv_have_def___GNUC__" = "no" &&
+ test "$curl_cv_have_def___sgi" = "yes" &&
+ test "$compiler_id" = "unknown"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ compiler_id="SGI_MIPS_C"
+ flags_dbg_all="-g -g0 -g1 -g2 -g3"
+ flags_dbg_yes="-g"
+ flags_dbg_off="-g0"
+ flags_opt_all="-O -O0 -O1 -O2 -O3 -Ofast"
+ flags_opt_yes="-O2"
+ flags_opt_off="-O0"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ fi
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler is SunPro C" >&5
+$as_echo_n "checking if compiler is SunPro C... " >&6; }
+
+ if test -z "$SED"; then
+ as_fn_error $? "SED not set. Cannot continue without SED being set." "$LINENO" 5
+ fi
+ if test -z "$GREP"; then
+ as_fn_error $? "GREP not set. Cannot continue without GREP being set." "$LINENO" 5
+ fi
+
+ tmp_exp=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#ifdef __SUNPRO_C
+CURL_DEF_TOKEN __SUNPRO_C
+#endif
+
+
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+ tmp_exp=`eval "$ac_cpp conftest.$ac_ext" 2>/dev/null | \
+ "$GREP" CURL_DEF_TOKEN 2>/dev/null | \
+ "$SED" 's/.*CURL_DEF_TOKEN[ ]//' 2>/dev/null | \
+ "$SED" 's/["][ ]*["]//g' 2>/dev/null`
+ if test -z "$tmp_exp" || test "$tmp_exp" = "__SUNPRO_C"; then
+ tmp_exp=""
+ fi
+
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+ if test -z "$tmp_exp"; then
+ curl_cv_have_def___SUNPRO_C=no
+
+ else
+ curl_cv_have_def___SUNPRO_C=yes
+ curl_cv_def___SUNPRO_C=$tmp_exp
+
+ fi
+
+ if test "$curl_cv_have_def___SUNPRO_C" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ compiler_id="SUNPRO_C"
+ flags_dbg_all="-g -s"
+ flags_dbg_yes="-g"
+ flags_dbg_off="-s"
+ flags_opt_all="-O -xO -xO1 -xO2 -xO3 -xO4 -xO5"
+ flags_opt_yes="-xO2"
+ flags_opt_off=""
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ fi
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler is Tiny C" >&5
+$as_echo_n "checking if compiler is Tiny C... " >&6; }
+
+ if test -z "$SED"; then
+ as_fn_error $? "SED not set. Cannot continue without SED being set." "$LINENO" 5
+ fi
+ if test -z "$GREP"; then
+ as_fn_error $? "GREP not set. Cannot continue without GREP being set." "$LINENO" 5
+ fi
+
+ tmp_exp=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#ifdef __TINYC__
+CURL_DEF_TOKEN __TINYC__
+#endif
+
+
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+ tmp_exp=`eval "$ac_cpp conftest.$ac_ext" 2>/dev/null | \
+ "$GREP" CURL_DEF_TOKEN 2>/dev/null | \
+ "$SED" 's/.*CURL_DEF_TOKEN[ ]//' 2>/dev/null | \
+ "$SED" 's/["][ ]*["]//g' 2>/dev/null`
+ if test -z "$tmp_exp" || test "$tmp_exp" = "__TINYC__"; then
+ tmp_exp=""
+ fi
+
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+ if test -z "$tmp_exp"; then
+ curl_cv_have_def___TINYC__=no
+
+ else
+ curl_cv_have_def___TINYC__=yes
+ curl_cv_def___TINYC__=$tmp_exp
+
+ fi
+
+ if test "$curl_cv_have_def___TINYC__" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ compiler_id="TINY_C"
+ flags_dbg_all="-g -b"
+ flags_dbg_yes="-g"
+ flags_dbg_off=""
+ flags_opt_all=""
+ flags_opt_yes=""
+ flags_opt_off=""
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ fi
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler is Watcom C" >&5
+$as_echo_n "checking if compiler is Watcom C... " >&6; }
+
+ if test -z "$SED"; then
+ as_fn_error $? "SED not set. Cannot continue without SED being set." "$LINENO" 5
+ fi
+ if test -z "$GREP"; then
+ as_fn_error $? "GREP not set. Cannot continue without GREP being set." "$LINENO" 5
+ fi
+
+ tmp_exp=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#ifdef __WATCOMC__
+CURL_DEF_TOKEN __WATCOMC__
+#endif
+
+
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+ tmp_exp=`eval "$ac_cpp conftest.$ac_ext" 2>/dev/null | \
+ "$GREP" CURL_DEF_TOKEN 2>/dev/null | \
+ "$SED" 's/.*CURL_DEF_TOKEN[ ]//' 2>/dev/null | \
+ "$SED" 's/["][ ]*["]//g' 2>/dev/null`
+ if test -z "$tmp_exp" || test "$tmp_exp" = "__WATCOMC__"; then
+ tmp_exp=""
+ fi
+
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+ if test -z "$tmp_exp"; then
+ curl_cv_have_def___WATCOMC__=no
+
+ else
+ curl_cv_have_def___WATCOMC__=yes
+ curl_cv_def___WATCOMC__=$tmp_exp
+
+ fi
+
+ if test "$curl_cv_have_def___WATCOMC__" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+ if test -z "$SED"; then
+ as_fn_error $? "SED not set. Cannot continue without SED being set." "$LINENO" 5
+ fi
+ if test -z "$GREP"; then
+ as_fn_error $? "GREP not set. Cannot continue without GREP being set." "$LINENO" 5
+ fi
+
+ tmp_exp=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#ifdef __UNIX__
+CURL_DEF_TOKEN __UNIX__
+#endif
+
+
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+ tmp_exp=`eval "$ac_cpp conftest.$ac_ext" 2>/dev/null | \
+ "$GREP" CURL_DEF_TOKEN 2>/dev/null | \
+ "$SED" 's/.*CURL_DEF_TOKEN[ ]//' 2>/dev/null | \
+ "$SED" 's/["][ ]*["]//g' 2>/dev/null`
+ if test -z "$tmp_exp" || test "$tmp_exp" = "__UNIX__"; then
+ tmp_exp=""
+ fi
+
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+ if test -z "$tmp_exp"; then
+ curl_cv_have_def___UNIX__=no
+
+ else
+ curl_cv_have_def___UNIX__=yes
+ curl_cv_def___UNIX__=$tmp_exp
+
+ fi
+
+ if test "$curl_cv_have_def___UNIX__" = "yes"; then
+ compiler_id="WATCOM_UNIX_C"
+ flags_dbg_all="-g1 -g1+ -g2 -g3"
+ flags_dbg_yes="-g2"
+ flags_dbg_off=""
+ flags_opt_all="-O0 -O1 -O2 -O3"
+ flags_opt_yes="-O2"
+ flags_opt_off="-O0"
+ else
+ compiler_id="WATCOM_WINDOWS_C"
+ flags_dbg_all=""
+ flags_dbg_yes=""
+ flags_dbg_off=""
+ flags_opt_all=""
+ flags_opt_yes=""
+ flags_opt_off=""
+ fi
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ fi
+
+ #
+ if test "$compiler_id" = "unknown"; then
+ cat <<_EOF 1>&2
+***
+*** Warning: This configure script does not have information about the
+*** compiler you are using, relative to the flags required to enable or
+*** disable generation of debug info, optimization options or warnings.
+***
+*** Whatever settings are present in CFLAGS will be used for this run.
+***
+*** If you wish to help the cURL project to better support your compiler
+*** you can report this and the required info on the libcurl development
+*** mailing list: http://cool.haxx.se/mailman/listinfo/curl-library/
+***
+_EOF
+ fi
+
+
+squeeze() {
+ _sqz_result=""
+ eval _sqz_input=\$$1
+ for _sqz_token in $_sqz_input; do
+ if test -z "$_sqz_result"; then
+ _sqz_result="$_sqz_token"
+ else
+ _sqz_result="$_sqz_result $_sqz_token"
+ fi
+ done
+ eval $1=\$_sqz_result
+ return 0
+}
+
+
+ #
+ if test "$compiler_id" != "unknown"; then
+ #
+ if test "$compiler_id" = "GNU_C" ||
+ test "$compiler_id" = "CLANG"; then
+
+ tmp_has_include="no"
+ tmp_chg_FLAGS="$CFLAGS"
+ for word1 in $tmp_chg_FLAGS; do
+ case "$word1" in
+ -I*)
+ tmp_has_include="yes"
+ ;;
+ esac
+ done
+ if test "$tmp_has_include" = "yes"; then
+ tmp_chg_FLAGS=`echo "$tmp_chg_FLAGS" | "$SED" 's/^-I/ -isystem /g'`
+ tmp_chg_FLAGS=`echo "$tmp_chg_FLAGS" | "$SED" 's/ -I/ -isystem /g'`
+ CFLAGS="$tmp_chg_FLAGS"
+ squeeze CFLAGS
+ fi
+ tmp_has_include="no"
+ tmp_chg_FLAGS="$CPPFLAGS"
+ for word1 in $tmp_chg_FLAGS; do
+ case "$word1" in
+ -I*)
+ tmp_has_include="yes"
+ ;;
+ esac
+ done
+ if test "$tmp_has_include" = "yes"; then
+ tmp_chg_FLAGS=`echo "$tmp_chg_FLAGS" | "$SED" 's/^-I/ -isystem /g'`
+ tmp_chg_FLAGS=`echo "$tmp_chg_FLAGS" | "$SED" 's/ -I/ -isystem /g'`
+ CPPFLAGS="$tmp_chg_FLAGS"
+ squeeze CPPFLAGS
+ fi
+
+ fi
+ #
+ tmp_save_CPPFLAGS="$CPPFLAGS"
+ tmp_save_CFLAGS="$CFLAGS"
+ tmp_CPPFLAGS=""
+ tmp_CFLAGS=""
+ #
+ case "$compiler_id" in
+ #
+ CLANG)
+ #
+ tmp_CFLAGS="$tmp_CFLAGS -Qunused-arguments"
+ ;;
+ #
+ DEC_C)
+ #
+ tmp_CFLAGS="$tmp_CFLAGS -std1"
+ tmp_CFLAGS="$tmp_CFLAGS -noansi_alias"
+ tmp_CFLAGS="$tmp_CFLAGS -warnprotos"
+ tmp_CFLAGS="$tmp_CFLAGS -msg_fatal toofewargs,toomanyargs"
+ ;;
+ #
+ GNU_C)
+ #
+ tmp_CFLAGS="$tmp_CFLAGS"
+ ;;
+ #
+ HP_UX_C)
+ #
+ tmp_CFLAGS="$tmp_CFLAGS -z"
+ tmp_CFLAGS="$tmp_CFLAGS +W 4227,4255"
+ ;;
+ #
+ IBM_C)
+ #
+ tmp_CFLAGS="$tmp_CFLAGS -qthreaded"
+ tmp_CFLAGS="$tmp_CFLAGS -qnoansialias"
+ tmp_CFLAGS="$tmp_CFLAGS -qhalt=e"
+ ;;
+ #
+ INTEL_UNIX_C)
+ #
+ tmp_CFLAGS="$tmp_CFLAGS -std=gnu89"
+ tmp_CPPFLAGS="$tmp_CPPFLAGS -we 140,147,165,266"
+ tmp_CPPFLAGS="$tmp_CPPFLAGS -wd 279,981,1469"
+ ;;
+ #
+ INTEL_WINDOWS_C)
+ #
+ tmp_CFLAGS="$tmp_CFLAGS"
+ ;;
+ #
+ LCC)
+ #
+ tmp_CFLAGS="$tmp_CFLAGS -n"
+ ;;
+ #
+ SGI_MIPS_C)
+ #
+ tmp_CFLAGS="$tmp_CFLAGS"
+ ;;
+ #
+ SGI_MIPSPRO_C)
+ #
+ tmp_CFLAGS="$tmp_CFLAGS"
+ ;;
+ #
+ SUNPRO_C)
+ #
+ tmp_CFLAGS="$tmp_CFLAGS"
+ ;;
+ #
+ TINY_C)
+ #
+ tmp_CFLAGS="$tmp_CFLAGS"
+ ;;
+ #
+ WATCOM_UNIX_C)
+ #
+ tmp_CFLAGS="$tmp_CFLAGS"
+ ;;
+ #
+ WATCOM_WINDOWS_C)
+ #
+ tmp_CFLAGS="$tmp_CFLAGS"
+ ;;
+ #
+ esac
+ #
+ squeeze tmp_CPPFLAGS
+ squeeze tmp_CFLAGS
+ #
+ if test ! -z "$tmp_CFLAGS" || test ! -z "$tmp_CPPFLAGS"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler accepts some basic options" >&5
+$as_echo_n "checking if compiler accepts some basic options... " >&6; }
+ CPPFLAGS="$tmp_save_CPPFLAGS $tmp_CPPFLAGS"
+ CFLAGS="$tmp_save_CFLAGS $tmp_CFLAGS"
+ squeeze CPPFLAGS
+ squeeze CFLAGS
+
+ tmp_compiler_works="unknown"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+
+int main (void)
+{
+
+ int i = 1;
+ return i;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ tmp_compiler_works="yes"
+
+else
+
+ tmp_compiler_works="no"
+ echo " " >&6
+ sed 's/^/cc-fail: /' conftest.err >&6
+ echo " " >&6
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ if test "$tmp_compiler_works" = "yes"; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+
+int main (void)
+{
+
+ int i = 1;
+ return i;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ tmp_compiler_works="yes"
+
+else
+
+ tmp_compiler_works="no"
+ echo " " >&6
+ sed 's/^/link-fail: /' conftest.err >&6
+ echo " " >&6
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ fi
+ if test "x$cross_compiling" != "xyes" &&
+ test "$tmp_compiler_works" = "yes"; then
+ if test "$cross_compiling" = yes; then :
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run test program while cross compiling
+See \`config.log' for more details" "$LINENO" 5 ; }
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+# ifdef __STDC__
+# include <stdlib.h>
+# endif
+
+int main (void)
+{
+
+ int i = 0;
+ exit(i);
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+
+ tmp_compiler_works="yes"
+
+else
+
+ tmp_compiler_works="no"
+ echo " " >&6
+ echo "run-fail: test program exited with status $ac_status" >&6
+ echo " " >&6
+
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ fi
+ if test "$tmp_compiler_works" = "yes"; then
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: compiler options added: $tmp_CFLAGS $tmp_CPPFLAGS" >&5
+$as_echo "$as_me: compiler options added: $tmp_CFLAGS $tmp_CPPFLAGS" >&6;}
+
+ else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: compiler options rejected: $tmp_CFLAGS $tmp_CPPFLAGS" >&5
+$as_echo "$as_me: WARNING: compiler options rejected: $tmp_CFLAGS $tmp_CPPFLAGS" >&2;}
+ CPPFLAGS="$tmp_save_CPPFLAGS"
+ CFLAGS="$tmp_save_CFLAGS"
+
+ fi
+
+ fi
+ #
+ fi
+
+
+ #
+ if test "$compiler_id" != "unknown"; then
+ #
+ tmp_save_CFLAGS="$CFLAGS"
+ tmp_save_CPPFLAGS="$CPPFLAGS"
+ #
+ tmp_options=""
+ tmp_CFLAGS="$CFLAGS"
+ tmp_CPPFLAGS="$CPPFLAGS"
+
+ ac_var_stripped=""
+ for word1 in $tmp_CFLAGS; do
+ ac_var_strip_word="no"
+ for word2 in $flags_dbg_all; do
+ if test "$word1" = "$word2"; then
+ ac_var_strip_word="yes"
+ fi
+ done
+ if test "$ac_var_strip_word" = "no"; then
+ ac_var_stripped="$ac_var_stripped $word1"
+ fi
+ done
+ tmp_CFLAGS="$ac_var_stripped"
+ squeeze tmp_CFLAGS
+
+
+ ac_var_stripped=""
+ for word1 in $tmp_CPPFLAGS; do
+ ac_var_strip_word="no"
+ for word2 in $flags_dbg_all; do
+ if test "$word1" = "$word2"; then
+ ac_var_strip_word="yes"
+ fi
+ done
+ if test "$ac_var_strip_word" = "no"; then
+ ac_var_stripped="$ac_var_stripped $word1"
+ fi
+ done
+ tmp_CPPFLAGS="$ac_var_stripped"
+ squeeze tmp_CPPFLAGS
+
+ #
+ if test "$want_debug" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler accepts debug enabling options" >&5
+$as_echo_n "checking if compiler accepts debug enabling options... " >&6; }
+ tmp_options="$flags_dbg_yes"
+ fi
+ if test "$want_debug" = "no"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler accepts debug disabling options" >&5
+$as_echo_n "checking if compiler accepts debug disabling options... " >&6; }
+ tmp_options="$flags_dbg_off"
+ fi
+ #
+ CPPFLAGS="$tmp_CPPFLAGS"
+ CFLAGS="$tmp_CFLAGS $tmp_options"
+ squeeze CPPFLAGS
+ squeeze CFLAGS
+
+ tmp_compiler_works="unknown"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+
+int main (void)
+{
+
+ int i = 1;
+ return i;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ tmp_compiler_works="yes"
+
+else
+
+ tmp_compiler_works="no"
+ echo " " >&6
+ sed 's/^/cc-fail: /' conftest.err >&6
+ echo " " >&6
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ if test "$tmp_compiler_works" = "yes"; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+
+int main (void)
+{
+
+ int i = 1;
+ return i;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ tmp_compiler_works="yes"
+
+else
+
+ tmp_compiler_works="no"
+ echo " " >&6
+ sed 's/^/link-fail: /' conftest.err >&6
+ echo " " >&6
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ fi
+ if test "x$cross_compiling" != "xyes" &&
+ test "$tmp_compiler_works" = "yes"; then
+ if test "$cross_compiling" = yes; then :
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run test program while cross compiling
+See \`config.log' for more details" "$LINENO" 5 ; }
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+# ifdef __STDC__
+# include <stdlib.h>
+# endif
+
+int main (void)
+{
+
+ int i = 0;
+ exit(i);
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+
+ tmp_compiler_works="yes"
+
+else
+
+ tmp_compiler_works="no"
+ echo " " >&6
+ echo "run-fail: test program exited with status $ac_status" >&6
+ echo " " >&6
+
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ fi
+ if test "$tmp_compiler_works" = "yes"; then
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: compiler options added: $tmp_options" >&5
+$as_echo "$as_me: compiler options added: $tmp_options" >&6;}
+
+ else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: compiler options rejected: $tmp_options" >&5
+$as_echo "$as_me: WARNING: compiler options rejected: $tmp_options" >&2;}
+ CPPFLAGS="$tmp_save_CPPFLAGS"
+ CFLAGS="$tmp_save_CFLAGS"
+
+ fi
+
+ #
+ fi
+
+
+ #
+ if test "$compiler_id" != "unknown"; then
+ #
+ tmp_save_CFLAGS="$CFLAGS"
+ tmp_save_CPPFLAGS="$CPPFLAGS"
+ #
+ tmp_options=""
+ tmp_CFLAGS="$CFLAGS"
+ tmp_CPPFLAGS="$CPPFLAGS"
+ honor_optimize_option="yes"
+ #
+ #
+ if test "$want_optimize" = "assume_no" ||
+ test "$want_optimize" = "assume_yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler optimizer assumed setting might be used" >&5
+$as_echo_n "checking if compiler optimizer assumed setting might be used... " >&6; }
+
+
+ ac_var_match_word="no"
+ for word1 in $tmp_CFLAGS; do
+ for word2 in $flags_opt_all; do
+ if test "$word1" = "$word2"; then
+ ac_var_match_word="yes"
+ fi
+ done
+ done
+
+ if test "$ac_var_match_word" = "yes"; then
+
+ honor_optimize_option="no"
+
+
+ fi
+
+
+
+ ac_var_match_word="no"
+ for word1 in $tmp_CPPFLAGS; do
+ for word2 in $flags_opt_all; do
+ if test "$word1" = "$word2"; then
+ ac_var_match_word="yes"
+ fi
+ done
+ done
+
+ if test "$ac_var_match_word" = "yes"; then
+
+ honor_optimize_option="no"
+
+
+ fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $honor_optimize_option" >&5
+$as_echo "$honor_optimize_option" >&6; }
+ if test "$honor_optimize_option" = "yes"; then
+ if test "$want_optimize" = "assume_yes"; then
+ want_optimize="yes"
+ fi
+ if test "$want_optimize" = "assume_no"; then
+ want_optimize="no"
+ fi
+ fi
+ fi
+ #
+ if test "$honor_optimize_option" = "yes"; then
+
+ ac_var_stripped=""
+ for word1 in $tmp_CFLAGS; do
+ ac_var_strip_word="no"
+ for word2 in $flags_opt_all; do
+ if test "$word1" = "$word2"; then
+ ac_var_strip_word="yes"
+ fi
+ done
+ if test "$ac_var_strip_word" = "no"; then
+ ac_var_stripped="$ac_var_stripped $word1"
+ fi
+ done
+ tmp_CFLAGS="$ac_var_stripped"
+ squeeze tmp_CFLAGS
+
+
+ ac_var_stripped=""
+ for word1 in $tmp_CPPFLAGS; do
+ ac_var_strip_word="no"
+ for word2 in $flags_opt_all; do
+ if test "$word1" = "$word2"; then
+ ac_var_strip_word="yes"
+ fi
+ done
+ if test "$ac_var_strip_word" = "no"; then
+ ac_var_stripped="$ac_var_stripped $word1"
+ fi
+ done
+ tmp_CPPFLAGS="$ac_var_stripped"
+ squeeze tmp_CPPFLAGS
+
+ if test "$want_optimize" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler accepts optimizer enabling options" >&5
+$as_echo_n "checking if compiler accepts optimizer enabling options... " >&6; }
+ tmp_options="$flags_opt_yes"
+ fi
+ if test "$want_optimize" = "no"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler accepts optimizer disabling options" >&5
+$as_echo_n "checking if compiler accepts optimizer disabling options... " >&6; }
+ tmp_options="$flags_opt_off"
+ fi
+ CPPFLAGS="$tmp_CPPFLAGS"
+ CFLAGS="$tmp_CFLAGS $tmp_options"
+ squeeze CPPFLAGS
+ squeeze CFLAGS
+
+ tmp_compiler_works="unknown"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+
+int main (void)
+{
+
+ int i = 1;
+ return i;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ tmp_compiler_works="yes"
+
+else
+
+ tmp_compiler_works="no"
+ echo " " >&6
+ sed 's/^/cc-fail: /' conftest.err >&6
+ echo " " >&6
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ if test "$tmp_compiler_works" = "yes"; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+
+int main (void)
+{
+
+ int i = 1;
+ return i;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ tmp_compiler_works="yes"
+
+else
+
+ tmp_compiler_works="no"
+ echo " " >&6
+ sed 's/^/link-fail: /' conftest.err >&6
+ echo " " >&6
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ fi
+ if test "x$cross_compiling" != "xyes" &&
+ test "$tmp_compiler_works" = "yes"; then
+ if test "$cross_compiling" = yes; then :
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run test program while cross compiling
+See \`config.log' for more details" "$LINENO" 5 ; }
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+# ifdef __STDC__
+# include <stdlib.h>
+# endif
+
+int main (void)
+{
+
+ int i = 0;
+ exit(i);
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+
+ tmp_compiler_works="yes"
+
+else
+
+ tmp_compiler_works="no"
+ echo " " >&6
+ echo "run-fail: test program exited with status $ac_status" >&6
+ echo " " >&6
+
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ fi
+ if test "$tmp_compiler_works" = "yes"; then
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: compiler options added: $tmp_options" >&5
+$as_echo "$as_me: compiler options added: $tmp_options" >&6;}
+
+ else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: compiler options rejected: $tmp_options" >&5
+$as_echo "$as_me: WARNING: compiler options rejected: $tmp_options" >&2;}
+ CPPFLAGS="$tmp_save_CPPFLAGS"
+ CFLAGS="$tmp_save_CFLAGS"
+
+ fi
+
+ fi
+ #
+ fi
+
+
+ #
+ if test "$compiler_id" != "unknown"; then
+ #
+ tmp_save_CPPFLAGS="$CPPFLAGS"
+ tmp_save_CFLAGS="$CFLAGS"
+ tmp_CPPFLAGS=""
+ tmp_CFLAGS=""
+ #
+ case "$compiler_id" in
+ #
+ CLANG)
+ #
+ if test "$want_warnings" = "yes"; then
+ tmp_CFLAGS="$tmp_CFLAGS -pedantic"
+ tmp_CFLAGS="$tmp_CFLAGS -Wall -Wextra"
+ tmp_CFLAGS="$tmp_CFLAGS -Wpointer-arith -Wwrite-strings"
+ tmp_CFLAGS="$tmp_CFLAGS -Wshadow"
+ tmp_CFLAGS="$tmp_CFLAGS -Winline -Wnested-externs"
+ tmp_CFLAGS="$tmp_CFLAGS -Wmissing-declarations"
+ tmp_CFLAGS="$tmp_CFLAGS -Wmissing-prototypes"
+ tmp_CFLAGS="$tmp_CFLAGS -Wno-long-long"
+ tmp_CFLAGS="$tmp_CFLAGS -Wfloat-equal"
+ tmp_CFLAGS="$tmp_CFLAGS -Wno-multichar -Wsign-compare"
+ tmp_CFLAGS="$tmp_CFLAGS -Wundef"
+ tmp_CFLAGS="$tmp_CFLAGS -Wno-format-nonliteral"
+ tmp_CFLAGS="$tmp_CFLAGS -Wendif-labels -Wstrict-prototypes"
+ tmp_CFLAGS="$tmp_CFLAGS -Wdeclaration-after-statement"
+ tmp_CFLAGS="$tmp_CFLAGS -Wcast-align"
+ tmp_CFLAGS="$tmp_CFLAGS -Wno-system-headers"
+ tmp_CFLAGS="$tmp_CFLAGS -Wshorten-64-to-32"
+ #
+ if test "$compiler_num" -ge "101"; then
+ tmp_CFLAGS="$tmp_CFLAGS -Wunused"
+ fi
+ fi
+ ;;
+ #
+ DEC_C)
+ #
+ if test "$want_warnings" = "yes"; then
+ tmp_CFLAGS="$tmp_CFLAGS -msg_enable level3"
+ fi
+ ;;
+ #
+ GNU_C)
+ #
+ if test "$want_warnings" = "yes"; then
+ #
+ if test "x$cross_compiling" != "xyes" ||
+ test "$compiler_num" -ge "300"; then
+ tmp_CFLAGS="$tmp_CFLAGS -pedantic"
+ fi
+ #
+ tmp_CFLAGS="$tmp_CFLAGS -Wall -W"
+ #
+ if test "$compiler_num" -ge "104"; then
+ tmp_CFLAGS="$tmp_CFLAGS -Wpointer-arith -Wwrite-strings"
+ if test "x$cross_compiling" != "xyes" ||
+ test "$compiler_num" -ge "300"; then
+ tmp_CFLAGS="$tmp_CFLAGS -Wunused -Wshadow"
+ fi
+ fi
+ #
+ if test "$compiler_num" -ge "207"; then
+ tmp_CFLAGS="$tmp_CFLAGS -Winline -Wnested-externs"
+ if test "x$cross_compiling" != "xyes" ||
+ test "$compiler_num" -ge "300"; then
+ tmp_CFLAGS="$tmp_CFLAGS -Wmissing-declarations"
+ tmp_CFLAGS="$tmp_CFLAGS -Wmissing-prototypes"
+ fi
+ fi
+ #
+ if test "$compiler_num" -ge "295"; then
+ tmp_CFLAGS="$tmp_CFLAGS -Wno-long-long"
+ fi
+ #
+ if test "$compiler_num" -ge "296"; then
+ tmp_CFLAGS="$tmp_CFLAGS -Wfloat-equal"
+ tmp_CFLAGS="$tmp_CFLAGS -Wno-multichar -Wsign-compare"
+ tmp_CFLAGS="$tmp_CFLAGS -Wundef"
+ fi
+ #
+ if test "$compiler_num" -ge "297"; then
+ tmp_CFLAGS="$tmp_CFLAGS -Wno-format-nonliteral"
+ fi
+ #
+ if test "$compiler_num" -ge "300"; then
+ tmp_CFLAGS="$tmp_CFLAGS"
+ fi
+ #
+ if test "$compiler_num" -ge "303"; then
+ tmp_CFLAGS="$tmp_CFLAGS -Wendif-labels -Wstrict-prototypes"
+ fi
+ #
+ if test "$compiler_num" -ge "304"; then
+ tmp_CFLAGS="$tmp_CFLAGS -Wdeclaration-after-statement"
+ fi
+ #
+ if test "$compiler_num" -ge "402"; then
+ tmp_CFLAGS="$tmp_CFLAGS -Wcast-align"
+ fi
+ if test "$compiler_num" -ge "403"; then
+ tmp_CFLAGS="$tmp_CFLAGS -Wtype-limits -Wold-style-declaration"
+ tmp_CFLAGS="$tmp_CFLAGS -Wmissing-parameter-type -Wempty-body"
+ tmp_CFLAGS="$tmp_CFLAGS -Wclobbered -Wignored-qualifiers"
+ tmp_CFLAGS="$tmp_CFLAGS -Wconversion -Wno-sign-conversion -Wvla"
+ fi
+ #
+ fi
+ #
+ if test "$compiler_num" -ge "300"; then
+ tmp_CFLAGS="$tmp_CFLAGS -Wno-system-headers"
+ else
+ if test "x$cross_compiling" = "xyes"; then
+ if test "$compiler_num" -ge "104"; then
+ tmp_CFLAGS="$tmp_CFLAGS -Wno-unused -Wno-shadow"
+ fi
+ if test "$compiler_num" -ge "207"; then
+ tmp_CFLAGS="$tmp_CFLAGS -Wno-missing-declarations"
+ tmp_CFLAGS="$tmp_CFLAGS -Wno-missing-prototypes"
+ fi
+ fi
+ fi
+ ;;
+ #
+ HP_UX_C)
+ #
+ if test "$want_warnings" = "yes"; then
+ tmp_CFLAGS="$tmp_CFLAGS +w1"
+ fi
+ ;;
+ #
+ IBM_C)
+ #
+ tmp_CFLAGS="$tmp_CFLAGS"
+ ;;
+ #
+ INTEL_UNIX_C)
+ #
+ if test "$want_warnings" = "yes"; then
+ if test "$compiler_num" -gt "600"; then
+ tmp_CPPFLAGS="$tmp_CPPFLAGS -Wall -w2"
+ tmp_CPPFLAGS="$tmp_CPPFLAGS -Wcheck"
+ tmp_CPPFLAGS="$tmp_CPPFLAGS -Wcomment"
+ tmp_CPPFLAGS="$tmp_CPPFLAGS -Wdeprecated"
+ tmp_CPPFLAGS="$tmp_CPPFLAGS -Wmissing-prototypes"
+ tmp_CPPFLAGS="$tmp_CPPFLAGS -Wp64"
+ tmp_CPPFLAGS="$tmp_CPPFLAGS -Wpointer-arith"
+ tmp_CPPFLAGS="$tmp_CPPFLAGS -Wreturn-type"
+ tmp_CPPFLAGS="$tmp_CPPFLAGS -Wshadow"
+ tmp_CPPFLAGS="$tmp_CPPFLAGS -Wuninitialized"
+ tmp_CPPFLAGS="$tmp_CPPFLAGS -Wunused-function"
+ fi
+ fi
+ tmp_CFLAGS="$tmp_CFLAGS -fno-omit-frame-pointer"
+ tmp_CFLAGS="$tmp_CFLAGS -fno-strict-aliasing"
+ tmp_CFLAGS="$tmp_CFLAGS -fp-model precise"
+ if test "$compiler_num" -ge "1000"; then
+ tmp_CFLAGS="$tmp_CFLAGS -vec-report0"
+ fi
+ ;;
+ #
+ INTEL_WINDOWS_C)
+ #
+ tmp_CFLAGS="$tmp_CFLAGS"
+ ;;
+ #
+ LCC)
+ #
+ if test "$want_warnings" = "yes"; then
+ tmp_CFLAGS="$tmp_CFLAGS"
+ fi
+ ;;
+ #
+ SGI_MIPS_C)
+ #
+ if test "$want_warnings" = "yes"; then
+ tmp_CFLAGS="$tmp_CFLAGS -fullwarn"
+ fi
+ ;;
+ #
+ SGI_MIPSPRO_C)
+ #
+ if test "$want_warnings" = "yes"; then
+ tmp_CFLAGS="$tmp_CFLAGS -fullwarn"
+ tmp_CFLAGS="$tmp_CFLAGS -woff 1209"
+ fi
+ ;;
+ #
+ SUNPRO_C)
+ #
+ if test "$want_warnings" = "yes"; then
+ tmp_CFLAGS="$tmp_CFLAGS -v"
+ fi
+ ;;
+ #
+ TINY_C)
+ #
+ if test "$want_warnings" = "yes"; then
+ tmp_CFLAGS="$tmp_CFLAGS -Wall"
+ tmp_CFLAGS="$tmp_CFLAGS -Wwrite-strings"
+ tmp_CFLAGS="$tmp_CFLAGS -Wunsupported"
+ fi
+ ;;
+ #
+ WATCOM_UNIX_C)
+ #
+ if test "$want_warnings" = "yes"; then
+ tmp_CFLAGS="$tmp_CFLAGS -Wall -Wextra"
+ fi
+ ;;
+ #
+ WATCOM_WINDOWS_C)
+ #
+ tmp_CFLAGS="$tmp_CFLAGS"
+ ;;
+ #
+ esac
+ #
+ squeeze tmp_CPPFLAGS
+ squeeze tmp_CFLAGS
+ #
+ if test ! -z "$tmp_CFLAGS" || test ! -z "$tmp_CPPFLAGS"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler accepts strict warning options" >&5
+$as_echo_n "checking if compiler accepts strict warning options... " >&6; }
+ CPPFLAGS="$tmp_save_CPPFLAGS $tmp_CPPFLAGS"
+ CFLAGS="$tmp_save_CFLAGS $tmp_CFLAGS"
+ squeeze CPPFLAGS
+ squeeze CFLAGS
+
+ tmp_compiler_works="unknown"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+
+int main (void)
+{
+
+ int i = 1;
+ return i;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ tmp_compiler_works="yes"
+
+else
+
+ tmp_compiler_works="no"
+ echo " " >&6
+ sed 's/^/cc-fail: /' conftest.err >&6
+ echo " " >&6
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ if test "$tmp_compiler_works" = "yes"; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+
+int main (void)
+{
+
+ int i = 1;
+ return i;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ tmp_compiler_works="yes"
+
+else
+
+ tmp_compiler_works="no"
+ echo " " >&6
+ sed 's/^/link-fail: /' conftest.err >&6
+ echo " " >&6
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ fi
+ if test "x$cross_compiling" != "xyes" &&
+ test "$tmp_compiler_works" = "yes"; then
+ if test "$cross_compiling" = yes; then :
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run test program while cross compiling
+See \`config.log' for more details" "$LINENO" 5 ; }
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+# ifdef __STDC__
+# include <stdlib.h>
+# endif
+
+int main (void)
+{
+
+ int i = 0;
+ exit(i);
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+
+ tmp_compiler_works="yes"
+
+else
+
+ tmp_compiler_works="no"
+ echo " " >&6
+ echo "run-fail: test program exited with status $ac_status" >&6
+ echo " " >&6
+
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ fi
+ if test "$tmp_compiler_works" = "yes"; then
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: compiler options added: $tmp_CFLAGS $tmp_CPPFLAGS" >&5
+$as_echo "$as_me: compiler options added: $tmp_CFLAGS $tmp_CPPFLAGS" >&6;}
+
+ else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: compiler options rejected: $tmp_CFLAGS $tmp_CPPFLAGS" >&5
+$as_echo "$as_me: WARNING: compiler options rejected: $tmp_CFLAGS $tmp_CPPFLAGS" >&2;}
+ CPPFLAGS="$tmp_save_CPPFLAGS"
+ CFLAGS="$tmp_save_CFLAGS"
+
+ fi
+
+ fi
+ #
+ fi
+
+
+if test "$compiler_id" = "INTEL_UNIX_C"; then
+ #
+ if test "$compiler_num" -ge "1000"; then
+ CFLAGS="$CFLAGS -shared-intel"
+ elif test "$compiler_num" -ge "900"; then
+ CFLAGS="$CFLAGS -i-dynamic"
+ fi
+ #
+fi
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler halts on compilation errors" >&5
+$as_echo_n "checking if compiler halts on compilation errors... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+
+int main (void)
+{
+
+ force compilation error
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ as_fn_error $? "compiler does not halt on compilation errors." "$LINENO" 5
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler halts on negative sized arrays" >&5
+$as_echo_n "checking if compiler halts on negative sized arrays... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ typedef char bad_t[sizeof(char) == sizeof(int) ? -1 : -1 ];
+
+int main (void)
+{
+
+ bad_t dummy;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ as_fn_error $? "compiler does not halt on negative sized arrays." "$LINENO" 5
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if shared libraries need -no-undefined" >&5
+$as_echo_n "checking if shared libraries need -no-undefined... " >&6; }
+ need_no_undefined="no"
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc* | *-*-aix*)
+ need_no_undefined="yes"
+ ;;
+ esac
+ if test "x$allow_undefined" = "xno"; then
+ need_no_undefined="yes"
+ elif test "x$allow_undefined_flag" = "xunsupported"; then
+ need_no_undefined="yes"
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $need_no_undefined" >&5
+$as_echo "$need_no_undefined" >&6; }
+
+
+
+if test x$need_no_undefined = xyes; then
+ NO_UNDEFINED_TRUE=
+ NO_UNDEFINED_FALSE='#'
+else
+ NO_UNDEFINED_TRUE='#'
+ NO_UNDEFINED_FALSE=
+fi
+
+
+
+ supports_curldebug="unknown"
+ if test "$want_curldebug" = "yes"; then
+ if test "x$enable_shared" != "xno" &&
+ test "x$enable_shared" != "xyes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unknown enable_shared setting." >&5
+$as_echo "$as_me: WARNING: unknown enable_shared setting." >&2;}
+ supports_curldebug="no"
+ fi
+ if test "x$enable_static" != "xno" &&
+ test "x$enable_static" != "xyes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unknown enable_static setting." >&5
+$as_echo "$as_me: WARNING: unknown enable_static setting." >&2;}
+ supports_curldebug="no"
+ fi
+ if test "$supports_curldebug" != "no"; then
+ if test "$enable_shared" = "yes" &&
+ test "$need_no_undefined" = "yes"; then
+ supports_curldebug="no"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: shared library does not support undefined symbols." >&5
+$as_echo "$as_me: WARNING: shared library does not support undefined symbols." >&2;}
+ fi
+ fi
+ fi
+ #
+ if test "$want_curldebug" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if curl debug memory tracking can be enabled" >&5
+$as_echo_n "checking if curl debug memory tracking can be enabled... " >&6; }
+ test "$supports_curldebug" = "no" || supports_curldebug="yes"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supports_curldebug" >&5
+$as_echo "$supports_curldebug" >&6; }
+ if test "$supports_curldebug" = "no"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot enable curl debug memory tracking." >&5
+$as_echo "$as_me: WARNING: cannot enable curl debug memory tracking." >&2;}
+ want_curldebug="no"
+ fi
+ fi
+ #
+ if test "$want_curldebug" = "yes"; then
+ CPPFLAGS="$CPPFLAGS -DCURLDEBUG"
+ squeeze CPPFLAGS
+ fi
+ if test "$want_debug" = "yes"; then
+ CPPFLAGS="$CPPFLAGS -DDEBUGBUILD"
+ squeeze CPPFLAGS
+ fi
+
+
+
+if test x$want_curldebug = xyes; then
+ CURLDEBUG_TRUE=
+ CURLDEBUG_FALSE='#'
+else
+ CURLDEBUG_TRUE='#'
+ CURLDEBUG_FALSE=
+fi
+
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for windows.h" >&5
+$as_echo_n "checking for windows.h... " >&6; }
+if test "${ac_cv_header_windows_h+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#undef inline
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+
+int main (void)
+{
+
+#if defined(__CYGWIN__) || defined(__CEGCC__)
+ HAVE_WINDOWS_H shall not be defined.
+#else
+ int dummy=2*WINVER;
+#endif
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ ac_cv_header_windows_h="yes"
+
+else
+
+ ac_cv_header_windows_h="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_windows_h" >&5
+$as_echo "$ac_cv_header_windows_h" >&6; }
+ case "$ac_cv_header_windows_h" in
+ yes)
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_WINDOWS_H 1
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define WIN32_LEAN_AND_MEAN 1
+_ACEOF
+
+ ;;
+ esac
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build target is a native Windows one" >&5
+$as_echo_n "checking whether build target is a native Windows one... " >&6; }
+if test "${ac_cv_native_windows+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ if test "$ac_cv_header_windows_h" = "no"; then
+ ac_cv_native_windows="no"
+ else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+
+int main (void)
+{
+
+#if defined(__MINGW32__) || defined(__MINGW32CE__) || \
+ (defined(_MSC_VER) && (defined(_WIN32) || defined(_WIN64)))
+ int dummy=1;
+#else
+ Not a native Windows build target.
+#endif
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ ac_cv_native_windows="yes"
+
+else
+
+ ac_cv_native_windows="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_native_windows" >&5
+$as_echo "$ac_cv_native_windows" >&6; }
+ case "$ac_cv_native_windows" in
+ yes)
+
+cat >>confdefs.h <<_ACEOF
+#define NATIVE_WINDOWS 1
+_ACEOF
+
+ ;;
+ esac
+
+case X-"$ac_cv_native_windows" in
+ X-yes)
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for winsock.h" >&5
+$as_echo_n "checking for winsock.h... " >&6; }
+if test "${ac_cv_header_winsock_h+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#undef inline
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#include <winsock.h>
+
+int main (void)
+{
+
+#if defined(__CYGWIN__) || defined(__CEGCC__)
+ HAVE_WINSOCK_H shall not be defined.
+#else
+ int dummy=WSACleanup();
+#endif
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ ac_cv_header_winsock_h="yes"
+
+else
+
+ ac_cv_header_winsock_h="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_winsock_h" >&5
+$as_echo "$ac_cv_header_winsock_h" >&6; }
+ case "$ac_cv_header_winsock_h" in
+ yes)
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_WINSOCK_H 1
+_ACEOF
+
+ ;;
+ esac
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for winsock2.h" >&5
+$as_echo_n "checking for winsock2.h... " >&6; }
+if test "${ac_cv_header_winsock2_h+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#undef inline
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#include <winsock2.h>
+
+int main (void)
+{
+
+#if defined(__CYGWIN__) || defined(__CEGCC__) || defined(__MINGW32CE__)
+ HAVE_WINSOCK2_H shall not be defined.
+#else
+ int dummy=2*IPPROTO_ESP;
+#endif
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ ac_cv_header_winsock2_h="yes"
+
+else
+
+ ac_cv_header_winsock2_h="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_winsock2_h" >&5
+$as_echo "$ac_cv_header_winsock2_h" >&6; }
+ case "$ac_cv_header_winsock2_h" in
+ yes)
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_WINSOCK2_H 1
+_ACEOF
+
+ ;;
+ esac
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ws2tcpip.h" >&5
+$as_echo_n "checking for ws2tcpip.h... " >&6; }
+if test "${ac_cv_header_ws2tcpip_h+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#undef inline
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#include <winsock2.h>
+#include <ws2tcpip.h>
+
+int main (void)
+{
+
+#if defined(__CYGWIN__) || defined(__CEGCC__) || defined(__MINGW32CE__)
+ HAVE_WS2TCPIP_H shall not be defined.
+#else
+ int dummy=2*IP_PKTINFO;
+#endif
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ ac_cv_header_ws2tcpip_h="yes"
+
+else
+
+ ac_cv_header_ws2tcpip_h="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_ws2tcpip_h" >&5
+$as_echo "$ac_cv_header_ws2tcpip_h" >&6; }
+ case "$ac_cv_header_ws2tcpip_h" in
+ yes)
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_WS2TCPIP_H 1
+_ACEOF
+
+ ;;
+ esac
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for winldap.h" >&5
+$as_echo_n "checking for winldap.h... " >&6; }
+if test "${ac_cv_header_winldap_h+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#undef inline
+#ifdef HAVE_WINDOWS_H
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#endif
+#include <winldap.h>
+
+int main (void)
+{
+
+#if defined(__CYGWIN__) || defined(__CEGCC__)
+ HAVE_WINLDAP_H shall not be defined.
+#else
+ LDAP *ldp = ldap_init("dummy", LDAP_PORT);
+ ULONG res = ldap_unbind(ldp);
+#endif
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ ac_cv_header_winldap_h="yes"
+
+else
+
+ ac_cv_header_winldap_h="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_winldap_h" >&5
+$as_echo "$ac_cv_header_winldap_h" >&6; }
+ case "$ac_cv_header_winldap_h" in
+ yes)
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_WINLDAP_H 1
+_ACEOF
+
+ ;;
+ esac
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for winber.h" >&5
+$as_echo_n "checking for winber.h... " >&6; }
+if test "${ac_cv_header_winber_h+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#undef inline
+#ifdef HAVE_WINDOWS_H
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#endif
+#include <winldap.h>
+#include <winber.h>
+
+int main (void)
+{
+
+#if defined(__CYGWIN__) || defined(__CEGCC__)
+ HAVE_WINBER_H shall not be defined.
+#else
+ BERVAL *bvp = NULL;
+ BerElement *bep = ber_init(bvp);
+ ber_free(bep, 1);
+#endif
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ ac_cv_header_winber_h="yes"
+
+else
+
+ ac_cv_header_winber_h="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_winber_h" >&5
+$as_echo "$ac_cv_header_winber_h" >&6; }
+ case "$ac_cv_header_winber_h" in
+ yes)
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_WINBER_H 1
+_ACEOF
+
+ ;;
+ esac
+
+ ;;
+ *)
+ ac_cv_header_winsock_h="no"
+ ac_cv_header_winsock2_h="no"
+ ac_cv_header_ws2tcpip_h="no"
+ ac_cv_header_winldap_h="no"
+ ac_cv_header_winber_h="no"
+ ;;
+esac
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build target supports WIN32 file API" >&5
+$as_echo_n "checking whether build target supports WIN32 file API... " >&6; }
+ curl_win32_file_api="no"
+ if test "$ac_cv_header_windows_h" = "yes"; then
+ if test x"$enable_largefile" != "xno"; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+
+int main (void)
+{
+
+#if !defined(_WIN32_WCE) && \
+ (defined(__MINGW32__) || \
+ (defined(_MSC_VER) && (defined(_WIN32) || defined(_WIN64))))
+ int dummy=1;
+#else
+ WIN32 large file API not supported.
+#endif
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ curl_win32_file_api="win32_large_files"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ if test "$curl_win32_file_api" = "no"; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+
+int main (void)
+{
+
+#if defined(_WIN32_WCE) || defined(__MINGW32__) || defined(_MSC_VER)
+ int dummy=1;
+#else
+ WIN32 small file API not supported.
+#endif
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ curl_win32_file_api="win32_small_files"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ fi
+ case "$curl_win32_file_api" in
+ win32_large_files)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes (large file enabled)" >&5
+$as_echo "yes (large file enabled)" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define USE_WIN32_LARGE_FILES 1
+_ACEOF
+
+ ;;
+ win32_small_files)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes (large file disabled)" >&5
+$as_echo "yes (large file disabled)" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define USE_WIN32_LARGE_FILES 1
+_ACEOF
+
+ ;;
+ *)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ;;
+ esac
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to support http" >&5
+$as_echo_n "checking whether to support http... " >&6; }
+# Check whether --enable-http was given.
+if test "${enable_http+set}" = set; then :
+ enableval=$enable_http; case "$enableval" in
+ no)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+$as_echo "#define CURL_DISABLE_HTTP 1" >>confdefs.h
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: disable HTTP disables FTP over proxy and RTSP" >&5
+$as_echo "$as_me: WARNING: disable HTTP disables FTP over proxy and RTSP" >&2;}
+ CURL_DISABLE_HTTP=1
+
+
+$as_echo "#define CURL_DISABLE_RTSP 1" >>confdefs.h
+
+ CURL_DISABLE_RTSP=1
+
+ ;;
+ *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ ;;
+ esac
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to support ftp" >&5
+$as_echo_n "checking whether to support ftp... " >&6; }
+# Check whether --enable-ftp was given.
+if test "${enable_ftp+set}" = set; then :
+ enableval=$enable_ftp; case "$enableval" in
+ no)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+$as_echo "#define CURL_DISABLE_FTP 1" >>confdefs.h
+
+ CURL_DISABLE_FTP=1
+
+ ;;
+ *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ ;;
+ esac
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to support file" >&5
+$as_echo_n "checking whether to support file... " >&6; }
+# Check whether --enable-file was given.
+if test "${enable_file+set}" = set; then :
+ enableval=$enable_file; case "$enableval" in
+ no)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+$as_echo "#define CURL_DISABLE_FILE 1" >>confdefs.h
+
+ CURL_DISABLE_FILE=1
+
+ ;;
+ *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ ;;
+ esac
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to support ldap" >&5
+$as_echo_n "checking whether to support ldap... " >&6; }
+# Check whether --enable-ldap was given.
+if test "${enable_ldap+set}" = set; then :
+ enableval=$enable_ldap; case "$enableval" in
+ no)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+$as_echo "#define CURL_DISABLE_LDAP 1" >>confdefs.h
+
+ CURL_DISABLE_LDAP=1
+
+ ;;
+ *)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ ;;
+ esac
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to support ldaps" >&5
+$as_echo_n "checking whether to support ldaps... " >&6; }
+# Check whether --enable-ldaps was given.
+if test "${enable_ldaps+set}" = set; then :
+ enableval=$enable_ldaps; case "$enableval" in
+ no)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+$as_echo "#define CURL_DISABLE_LDAPS 1" >>confdefs.h
+
+ CURL_DISABLE_LDAPS=1
+
+ ;;
+ *) if test "x$CURL_DISABLE_LDAP" = "x1" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: LDAP needs to be enabled to support LDAPS" >&5
+$as_echo "LDAP needs to be enabled to support LDAPS" >&6; }
+
+$as_echo "#define CURL_DISABLE_LDAPS 1" >>confdefs.h
+
+ CURL_DISABLE_LDAPS=1
+
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+$as_echo "#define HAVE_LDAP_SSL 1" >>confdefs.h
+
+ HAVE_LDAP_SSL=1
+
+ fi
+ ;;
+ esac
+else
+
+ if test "x$CURL_DISABLE_LDAP" = "x1" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+$as_echo "#define CURL_DISABLE_LDAPS 1" >>confdefs.h
+
+ CURL_DISABLE_LDAPS=1
+
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+$as_echo "#define HAVE_LDAP_SSL 1" >>confdefs.h
+
+ HAVE_LDAP_SSL=1
+
+ fi
+
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to support rtsp" >&5
+$as_echo_n "checking whether to support rtsp... " >&6; }
+# Check whether --enable-rtsp was given.
+if test "${enable_rtsp+set}" = set; then :
+ enableval=$enable_rtsp; case "$enableval" in
+ no)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+$as_echo "#define CURL_DISABLE_RTSP 1" >>confdefs.h
+
+ CURL_DISABLE_RTSP=1
+
+ ;;
+ *) if test x$CURL_DISABLE_HTTP = x1 ; then
+ as_fn_error $? "HTTP support needs to be enabled in order to enable RTSP support!" "$LINENO" 5
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ curl_rtsp_msg="enabled"
+ fi
+ ;;
+ esac
+else
+ if test "x$CURL_DISABLE_HTTP" != "x1"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ curl_rtsp_msg="enabled"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ fi
+
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to support proxies" >&5
+$as_echo_n "checking whether to support proxies... " >&6; }
+# Check whether --enable-proxy was given.
+if test "${enable_proxy+set}" = set; then :
+ enableval=$enable_proxy; case "$enableval" in
+ no)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+$as_echo "#define CURL_DISABLE_PROXY 1" >>confdefs.h
+
+ CURL_DISABLE_PROXY=1
+
+ ;;
+ *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ ;;
+ esac
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to support dict" >&5
+$as_echo_n "checking whether to support dict... " >&6; }
+# Check whether --enable-dict was given.
+if test "${enable_dict+set}" = set; then :
+ enableval=$enable_dict; case "$enableval" in
+ no)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+$as_echo "#define CURL_DISABLE_DICT 1" >>confdefs.h
+
+ CURL_DISABLE_DICT=1
+
+ ;;
+ *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ ;;
+ esac
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to support telnet" >&5
+$as_echo_n "checking whether to support telnet... " >&6; }
+# Check whether --enable-telnet was given.
+if test "${enable_telnet+set}" = set; then :
+ enableval=$enable_telnet; case "$enableval" in
+ no)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+$as_echo "#define CURL_DISABLE_TELNET 1" >>confdefs.h
+
+ CURL_DISABLE_TELNET=1
+
+ ;;
+ *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ ;;
+ esac
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to support tftp" >&5
+$as_echo_n "checking whether to support tftp... " >&6; }
+# Check whether --enable-tftp was given.
+if test "${enable_tftp+set}" = set; then :
+ enableval=$enable_tftp; case "$enableval" in
+ no)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+$as_echo "#define CURL_DISABLE_TFTP 1" >>confdefs.h
+
+ CURL_DISABLE_TFTP=1
+
+ ;;
+ *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ ;;
+ esac
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to support pop3" >&5
+$as_echo_n "checking whether to support pop3... " >&6; }
+# Check whether --enable-pop3 was given.
+if test "${enable_pop3+set}" = set; then :
+ enableval=$enable_pop3; case "$enableval" in
+ no)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+$as_echo "#define CURL_DISABLE_POP3 1" >>confdefs.h
+
+ CURL_DISABLE_POP3=1
+
+ ;;
+ *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ ;;
+ esac
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+fi
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to support imap" >&5
+$as_echo_n "checking whether to support imap... " >&6; }
+# Check whether --enable-imap was given.
+if test "${enable_imap+set}" = set; then :
+ enableval=$enable_imap; case "$enableval" in
+ no)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+$as_echo "#define CURL_DISABLE_IMAP 1" >>confdefs.h
+
+ CURL_DISABLE_IMAP=1
+
+ ;;
+ *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ ;;
+ esac
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+fi
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to support smtp" >&5
+$as_echo_n "checking whether to support smtp... " >&6; }
+# Check whether --enable-smtp was given.
+if test "${enable_smtp+set}" = set; then :
+ enableval=$enable_smtp; case "$enableval" in
+ no)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+$as_echo "#define CURL_DISABLE_SMTP 1" >>confdefs.h
+
+ CURL_DISABLE_SMTP=1
+
+ ;;
+ *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ ;;
+ esac
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to support gopher" >&5
+$as_echo_n "checking whether to support gopher... " >&6; }
+# Check whether --enable-gopher was given.
+if test "${enable_gopher+set}" = set; then :
+ enableval=$enable_gopher; case "$enableval" in
+ no)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+$as_echo "#define CURL_DISABLE_GOPHER 1" >>confdefs.h
+
+ CURL_DISABLE_GOPHER=1
+
+ ;;
+ *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ ;;
+ esac
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+fi
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to provide built-in manual" >&5
+$as_echo_n "checking whether to provide built-in manual... " >&6; }
+# Check whether --enable-manual was given.
+if test "${enable_manual+set}" = set; then :
+ enableval=$enable_manual; case "$enableval" in
+ no)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ;;
+ *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ USE_MANUAL="1"
+ ;;
+ esac
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ USE_MANUAL="1"
+
+fi
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if X/Open network library is required" >&5
+$as_echo_n "checking if X/Open network library is required... " >&6; }
+ tst_lib_xnet_required="no"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+int main (void)
+{
+#if defined(__hpux) && defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE >= 600)
+ return 0;
+#elif defined(__hpux) && defined(_XOPEN_SOURCE_EXTENDED)
+ return 0;
+#else
+ force compilation error
+#endif
+}
+
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ tst_lib_xnet_required="yes"
+ LIBS="$LIBS -lxnet"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tst_lib_xnet_required" >&5
+$as_echo "$tst_lib_xnet_required" >&6; }
+
+
+ac_fn_c_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname"
+if test "x$ac_cv_func_gethostbyname" = x""yes; then :
+ HAVE_GETHOSTBYNAME="1"
+
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5
+$as_echo_n "checking for gethostbyname in -lnsl... " >&6; }
+if test "${ac_cv_lib_nsl_gethostbyname+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lnsl $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#ifdef __cplusplus
+extern "C"
+#endif
+char gethostbyname ();
+int main (void)
+{
+return gethostbyname ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_nsl_gethostbyname=yes
+else
+ ac_cv_lib_nsl_gethostbyname=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname" >&5
+$as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; }
+if test "x$ac_cv_lib_nsl_gethostbyname" = x""yes; then :
+ HAVE_GETHOSTBYNAME="1"
+ LIBS="$LIBS -lnsl"
+
+fi
+
+
+fi
+
+
+if test "$HAVE_GETHOSTBYNAME" != "1"
+then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lsocket" >&5
+$as_echo_n "checking for gethostbyname in -lsocket... " >&6; }
+if test "${ac_cv_lib_socket_gethostbyname+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsocket $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#ifdef __cplusplus
+extern "C"
+#endif
+char gethostbyname ();
+int main (void)
+{
+return gethostbyname ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_socket_gethostbyname=yes
+else
+ ac_cv_lib_socket_gethostbyname=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_gethostbyname" >&5
+$as_echo "$ac_cv_lib_socket_gethostbyname" >&6; }
+if test "x$ac_cv_lib_socket_gethostbyname" = x""yes; then :
+ HAVE_GETHOSTBYNAME="1"
+ LIBS="$LIBS -lsocket"
+
+fi
+
+fi
+
+if test "$HAVE_GETHOSTBYNAME" != "1"
+then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname with both nsl and socket libs" >&5
+$as_echo_n "checking for gethostbyname with both nsl and socket libs... " >&6; }
+ my_ac_save_LIBS=$LIBS
+ LIBS="-lnsl -lsocket $LIBS"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+
+int main (void)
+{
+
+ gethostbyname();
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ HAVE_GETHOSTBYNAME="1"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ LIBS=$my_ac_save_LIBS
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+
+if test "$HAVE_GETHOSTBYNAME" != "1"
+then
+ if test "$ac_cv_header_windows_h" = "yes"; then
+ if test "$ac_cv_header_winsock_h" = "yes"; then
+ case $host in
+ *-*-mingw32ce*)
+ winsock_LIB="-lwinsock"
+ ;;
+ *)
+ winsock_LIB="-lwsock32"
+ ;;
+ esac
+ fi
+ if test "$ac_cv_header_winsock2_h" = "yes"; then
+ winsock_LIB="-lws2_32"
+ fi
+ if test ! -z "$winsock_LIB"; then
+ my_ac_save_LIBS=$LIBS
+ LIBS="$winsock_LIB $LIBS"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in $winsock_LIB" >&5
+$as_echo_n "checking for gethostbyname in $winsock_LIB... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#ifdef HAVE_WINDOWS_H
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#ifdef HAVE_WINSOCK2_H
+#include <winsock2.h>
+#else
+#ifdef HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
+#endif
+#endif
+
+int main (void)
+{
+
+ gethostbyname("www.dummysite.com");
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ HAVE_GETHOSTBYNAME="1"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ winsock_LIB=""
+ LIBS=$my_ac_save_LIBS
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ fi
+ fi
+fi
+
+if test "$HAVE_GETHOSTBYNAME" != "1"
+then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname for Minix 3" >&5
+$as_echo_n "checking for gethostbyname for Minix 3... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+/* Older Minix versions may need <net/gen/netdb.h> here instead */
+#include <netdb.h>
+
+int main (void)
+{
+
+ gethostbyname("www.dummysite.com");
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ HAVE_GETHOSTBYNAME="1"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+
+if test "$HAVE_GETHOSTBYNAME" != "1"
+then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname for eCos" >&5
+$as_echo_n "checking for gethostbyname for eCos... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#include <stdio.h>
+#include <netdb.h>
+
+int main (void)
+{
+
+ gethostbyname("www.dummysite.com");
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ HAVE_GETHOSTBYNAME="1"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+
+if test "$HAVE_GETHOSTBYNAME" != "1"
+then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnetwork" >&5
+$as_echo_n "checking for gethostbyname in -lnetwork... " >&6; }
+if test "${ac_cv_lib_network_gethostbyname+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lnetwork $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#ifdef __cplusplus
+extern "C"
+#endif
+char gethostbyname ();
+int main (void)
+{
+return gethostbyname ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_network_gethostbyname=yes
+else
+ ac_cv_lib_network_gethostbyname=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_network_gethostbyname" >&5
+$as_echo "$ac_cv_lib_network_gethostbyname" >&6; }
+if test "x$ac_cv_lib_network_gethostbyname" = x""yes; then :
+ HAVE_GETHOSTBYNAME="1"
+ LIBS="$LIBS -lnetwork"
+
+fi
+
+fi
+
+if test "$HAVE_GETHOSTBYNAME" != "1"
+then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnet" >&5
+$as_echo_n "checking for gethostbyname in -lnet... " >&6; }
+if test "${ac_cv_lib_net_gethostbyname+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lnet $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#ifdef __cplusplus
+extern "C"
+#endif
+char gethostbyname ();
+int main (void)
+{
+return gethostbyname ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_net_gethostbyname=yes
+else
+ ac_cv_lib_net_gethostbyname=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_net_gethostbyname" >&5
+$as_echo "$ac_cv_lib_net_gethostbyname" >&6; }
+if test "x$ac_cv_lib_net_gethostbyname" = x""yes; then :
+ HAVE_GETHOSTBYNAME="1"
+ LIBS="$LIBS -lnet"
+
+fi
+
+fi
+
+
+if test "$HAVE_GETHOSTBYNAME" != "1"; then
+ as_fn_error $? "couldn't find libraries for gethostbyname()" "$LINENO" 5
+fi
+
+ac_fn_c_check_func "$LINENO" "strcasecmp" "ac_cv_func_strcasecmp"
+if test "x$ac_cv_func_strcasecmp" = x""yes; then :
+
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for strcasecmp in -lresolve" >&5
+$as_echo_n "checking for strcasecmp in -lresolve... " >&6; }
+if test "${ac_cv_lib_resolve_strcasecmp+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lresolve $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#ifdef __cplusplus
+extern "C"
+#endif
+char strcasecmp ();
+int main (void)
+{
+return strcasecmp ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_resolve_strcasecmp=yes
+else
+ ac_cv_lib_resolve_strcasecmp=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_resolve_strcasecmp" >&5
+$as_echo "$ac_cv_lib_resolve_strcasecmp" >&6; }
+if test "x$ac_cv_lib_resolve_strcasecmp" = x""yes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBRESOLVE 1
+_ACEOF
+
+ LIBS="-lresolve $LIBS"
+
+fi
+
+fi
+
+
+if test "$ac_cv_lib_resolve_strcasecmp" = "$ac_cv_func_strcasecmp"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for strcasecmp in -lresolve" >&5
+$as_echo_n "checking for strcasecmp in -lresolve... " >&6; }
+if test "${ac_cv_lib_resolve_strcasecmp+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lresolve -lnsl $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#ifdef __cplusplus
+extern "C"
+#endif
+char strcasecmp ();
+int main (void)
+{
+return strcasecmp ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_resolve_strcasecmp=yes
+else
+ ac_cv_lib_resolve_strcasecmp=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_resolve_strcasecmp" >&5
+$as_echo "$ac_cv_lib_resolve_strcasecmp" >&6; }
+if test "x$ac_cv_lib_resolve_strcasecmp" = x""yes; then :
+ LIBS="-lresolve $LIBS"
+fi
+
+fi
+ac_cv_func_strcasecmp="no"
+
+
+curl_includes_winsock2="\
+/* includes start */
+#ifdef HAVE_WINDOWS_H
+# ifndef WIN32_LEAN_AND_MEAN
+# define WIN32_LEAN_AND_MEAN
+# endif
+# include <windows.h>
+# ifdef HAVE_WINSOCK2_H
+# include <winsock2.h>
+# else
+# ifdef HAVE_WINSOCK_H
+# include <winsock.h>
+# endif
+# endif
+#endif
+/* includes end */"
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for windows.h" >&5
+$as_echo_n "checking for windows.h... " >&6; }
+if test "${ac_cv_header_windows_h+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#undef inline
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+
+int main (void)
+{
+
+#if defined(__CYGWIN__) || defined(__CEGCC__)
+ HAVE_WINDOWS_H shall not be defined.
+#else
+ int dummy=2*WINVER;
+#endif
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ ac_cv_header_windows_h="yes"
+
+else
+
+ ac_cv_header_windows_h="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_windows_h" >&5
+$as_echo "$ac_cv_header_windows_h" >&6; }
+ case "$ac_cv_header_windows_h" in
+ yes)
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_WINDOWS_H 1
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define WIN32_LEAN_AND_MEAN 1
+_ACEOF
+
+ ;;
+ esac
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for winsock.h" >&5
+$as_echo_n "checking for winsock.h... " >&6; }
+if test "${ac_cv_header_winsock_h+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#undef inline
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#include <winsock.h>
+
+int main (void)
+{
+
+#if defined(__CYGWIN__) || defined(__CEGCC__)
+ HAVE_WINSOCK_H shall not be defined.
+#else
+ int dummy=WSACleanup();
+#endif
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ ac_cv_header_winsock_h="yes"
+
+else
+
+ ac_cv_header_winsock_h="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_winsock_h" >&5
+$as_echo "$ac_cv_header_winsock_h" >&6; }
+ case "$ac_cv_header_winsock_h" in
+ yes)
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_WINSOCK_H 1
+_ACEOF
+
+ ;;
+ esac
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for winsock2.h" >&5
+$as_echo_n "checking for winsock2.h... " >&6; }
+if test "${ac_cv_header_winsock2_h+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#undef inline
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#include <winsock2.h>
+
+int main (void)
+{
+
+#if defined(__CYGWIN__) || defined(__CEGCC__) || defined(__MINGW32CE__)
+ HAVE_WINSOCK2_H shall not be defined.
+#else
+ int dummy=2*IPPROTO_ESP;
+#endif
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ ac_cv_header_winsock2_h="yes"
+
+else
+
+ ac_cv_header_winsock2_h="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_winsock2_h" >&5
+$as_echo "$ac_cv_header_winsock2_h" >&6; }
+ case "$ac_cv_header_winsock2_h" in
+ yes)
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_WINSOCK2_H 1
+_ACEOF
+
+ ;;
+ esac
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for connect in libraries" >&5
+$as_echo_n "checking for connect in libraries... " >&6; }
+ tst_connect_save_LIBS="$LIBS"
+ tst_connect_need_LIBS="unknown"
+ for tst_lib in '' '-lsocket' ; do
+ if test "$tst_connect_need_LIBS" = "unknown"; then
+ LIBS="$tst_lib $tst_connect_save_LIBS"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_winsock2
+ #ifndef HAVE_WINDOWS_H
+ int connect(int, void*, int);
+ #endif
+
+int main (void)
+{
+
+ if(0 != connect(0, 0, 0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ tst_connect_need_LIBS="$tst_lib"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ fi
+ done
+ LIBS="$tst_connect_save_LIBS"
+ #
+ case X-"$tst_connect_need_LIBS" in
+ X-unknown)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: cannot find connect" >&5
+$as_echo "cannot find connect" >&6; }
+ as_fn_error $? "cannot find connect function in libraries." "$LINENO" 5
+ ;;
+ X-)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ ;;
+ *)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tst_connect_need_LIBS" >&5
+$as_echo "$tst_connect_need_LIBS" >&6; }
+ LIBS="$tst_connect_need_LIBS $tst_connect_save_LIBS"
+ ;;
+ esac
+
+
+CURL_NETWORK_LIBS=$LIBS
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether time.h and sys/time.h may both be included" >&5
+$as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; }
+if test "${ac_cv_header_time+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+#include <sys/time.h>
+#include <time.h>
+
+int main (void)
+{
+if ((struct tm *) 0)
+return 0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_header_time=yes
+else
+ ac_cv_header_time=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_time" >&5
+$as_echo "$ac_cv_header_time" >&6; }
+if test $ac_cv_header_time = yes; then
+
+$as_echo "#define TIME_WITH_SYS_TIME 1" >>confdefs.h
+
+fi
+
+
+ for ac_header in sys/types.h sys/time.h time.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for monotonic clock_gettime" >&5
+$as_echo_n "checking for monotonic clock_gettime... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h>
+#ifdef TIME_WITH_SYS_TIME
+#include <time.h>
+#endif
+#else
+#ifdef HAVE_TIME_H
+#include <time.h>
+#endif
+#endif
+
+int main (void)
+{
+
+ struct timespec ts;
+ (void)clock_gettime(CLOCK_MONOTONIC, &ts);
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ ac_cv_func_clock_gettime="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ac_cv_func_clock_gettime="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+
+ #
+ if test "$ac_cv_func_clock_gettime" = "yes"; then
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clock_gettime in libraries" >&5
+$as_echo_n "checking for clock_gettime in libraries... " >&6; }
+ #
+ curl_cv_save_LIBS="$LIBS"
+ curl_cv_gclk_LIBS="unknown"
+ #
+ for x_xlibs in '' '-lrt' '-lposix4' ; do
+ if test "$curl_cv_gclk_LIBS" = "unknown"; then
+ if test -z "$x_xlibs"; then
+ LIBS="$curl_cv_save_LIBS"
+ else
+ LIBS="$x_xlibs $curl_cv_save_LIBS"
+ fi
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h>
+#ifdef TIME_WITH_SYS_TIME
+#include <time.h>
+#endif
+#else
+#ifdef HAVE_TIME_H
+#include <time.h>
+#endif
+#endif
+
+int main (void)
+{
+
+ struct timespec ts;
+ (void)clock_gettime(CLOCK_MONOTONIC, &ts);
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ curl_cv_gclk_LIBS="$x_xlibs"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ fi
+ done
+ #
+ LIBS="$curl_cv_save_LIBS"
+ #
+ case X-"$curl_cv_gclk_LIBS" in
+ X-unknown)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: cannot find clock_gettime" >&5
+$as_echo "cannot find clock_gettime" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: HAVE_CLOCK_GETTIME_MONOTONIC will not be defined" >&5
+$as_echo "$as_me: WARNING: HAVE_CLOCK_GETTIME_MONOTONIC will not be defined" >&2;}
+ ac_cv_func_clock_gettime="no"
+ ;;
+ X-)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no additional lib required" >&5
+$as_echo "no additional lib required" >&6; }
+ ac_cv_func_clock_gettime="yes"
+ ;;
+ *)
+ if test -z "$curl_cv_save_LIBS"; then
+ LIBS="$curl_cv_gclk_LIBS"
+ else
+ LIBS="$curl_cv_gclk_LIBS $curl_cv_save_LIBS"
+ fi
+ CURL_LIBS="$CURL_LIBS $curl_cv_gclk_LIBS"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $curl_cv_gclk_LIBS" >&5
+$as_echo "$curl_cv_gclk_LIBS" >&6; }
+ ac_cv_func_clock_gettime="yes"
+ ;;
+ esac
+ #
+ if test "x$cross_compiling" != "xyes" &&
+ test "$ac_cv_func_clock_gettime" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if monotonic clock_gettime works" >&5
+$as_echo_n "checking if monotonic clock_gettime works... " >&6; }
+ if test "$cross_compiling" = yes; then :
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run test program while cross compiling
+See \`config.log' for more details" "$LINENO" 5 ; }
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h>
+#ifdef TIME_WITH_SYS_TIME
+#include <time.h>
+#endif
+#else
+#ifdef HAVE_TIME_H
+#include <time.h>
+#endif
+#endif
+
+int main (void)
+{
+
+ struct timespec ts;
+ if (0 == clock_gettime(CLOCK_MONOTONIC, &ts))
+ exit(0);
+ else
+ exit(1);
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: HAVE_CLOCK_GETTIME_MONOTONIC will not be defined" >&5
+$as_echo "$as_me: WARNING: HAVE_CLOCK_GETTIME_MONOTONIC will not be defined" >&2;}
+ ac_cv_func_clock_gettime="no"
+ LIBS="$curl_cv_save_LIBS"
+
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ fi
+ #
+ case "$ac_cv_func_clock_gettime" in
+ yes)
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_CLOCK_GETTIME_MONOTONIC 1
+_ACEOF
+
+ ;;
+ esac
+ #
+ fi
+ #
+
+
+TEST_SERVER_LIBS=$LIBS
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use libgcc" >&5
+$as_echo_n "checking whether to use libgcc... " >&6; }
+# Check whether --enable-libgcc was given.
+if test "${enable_libgcc+set}" = set; then :
+ enableval=$enable_libgcc; case "$enableval" in
+ yes)
+ ALL_LIBS="$ALL_LIBS -lgcc"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ ;;
+ *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ;;
+ esac
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+fi
+
+
+
+LDAPLIBNAME=""
+
+# Check whether --with-ldap-lib was given.
+if test "${with_ldap_lib+set}" = set; then :
+ withval=$with_ldap_lib; LDAPLIBNAME="$withval"
+fi
+
+
+LBERLIBNAME=""
+
+# Check whether --with-lber-lib was given.
+if test "${with_lber_lib+set}" = set; then :
+ withval=$with_lber_lib; LBERLIBNAME="$withval"
+fi
+
+
+if test x$CURL_DISABLE_LDAP != x1 ; then
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lber.h" >&5
+$as_echo_n "checking for lber.h... " >&6; }
+if test "${ac_cv_header_lber_h+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#undef inline
+#ifdef HAVE_WINDOWS_H
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#else
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#endif
+#ifndef NULL
+#define NULL (void *)0
+#endif
+#include <lber.h>
+
+int main (void)
+{
+
+ BerValue *bvp = NULL;
+ BerElement *bep = ber_init(bvp);
+ ber_free(bep, 1);
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ ac_cv_header_lber_h="yes"
+
+else
+
+ ac_cv_header_lber_h="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_lber_h" >&5
+$as_echo "$ac_cv_header_lber_h" >&6; }
+ if test "$ac_cv_header_lber_h" = "yes"; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_LBER_H 1
+_ACEOF
+
+ #
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#undef inline
+#ifdef HAVE_WINDOWS_H
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#else
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#endif
+#ifndef NULL
+#define NULL (void *)0
+#endif
+#ifndef LDAP_DEPRECATED
+#define LDAP_DEPRECATED 1
+#endif
+#include <ldap.h>
+
+int main (void)
+{
+
+ BerValue *bvp = NULL;
+ BerElement *bep = ber_init(bvp);
+ ber_free(bep, 1);
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ curl_cv_need_header_lber_h="no"
+
+else
+
+ curl_cv_need_header_lber_h="yes"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ #
+ case "$curl_cv_need_header_lber_h" in
+ yes)
+
+cat >>confdefs.h <<_ACEOF
+#define NEED_LBER_H 1
+_ACEOF
+
+ ;;
+ esac
+ fi
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldap.h" >&5
+$as_echo_n "checking for ldap.h... " >&6; }
+if test "${ac_cv_header_ldap_h+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#undef inline
+#ifdef HAVE_WINDOWS_H
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#else
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#endif
+#ifndef LDAP_DEPRECATED
+#define LDAP_DEPRECATED 1
+#endif
+#ifdef NEED_LBER_H
+#include <lber.h>
+#endif
+#include <ldap.h>
+
+int main (void)
+{
+
+ LDAP *ldp = ldap_init("dummy", LDAP_PORT);
+ int res = ldap_unbind(ldp);
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ ac_cv_header_ldap_h="yes"
+
+else
+
+ ac_cv_header_ldap_h="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_ldap_h" >&5
+$as_echo "$ac_cv_header_ldap_h" >&6; }
+ case "$ac_cv_header_ldap_h" in
+ yes)
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_LDAP_H 1
+_ACEOF
+
+ ;;
+ esac
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl.h" >&5
+$as_echo_n "checking for ldapssl.h... " >&6; }
+if test "${ac_cv_header_ldapssl_h+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#undef inline
+#ifdef HAVE_WINDOWS_H
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#else
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#endif
+#ifndef NULL
+#define NULL (void *)0
+#endif
+#ifndef LDAP_DEPRECATED
+#define LDAP_DEPRECATED 1
+#endif
+#ifdef NEED_LBER_H
+#include <lber.h>
+#endif
+#ifdef HAVE_LDAP_H
+#include <ldap.h>
+#endif
+#include <ldapssl.h>
+
+int main (void)
+{
+
+ char *cert_label = NULL;
+ LDAP *ldp = ldap_ssl_init("dummy", LDAPS_PORT, cert_label);
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ ac_cv_header_ldapssl_h="yes"
+
+else
+
+ ac_cv_header_ldapssl_h="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_ldapssl_h" >&5
+$as_echo "$ac_cv_header_ldapssl_h" >&6; }
+ case "$ac_cv_header_ldapssl_h" in
+ yes)
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_LDAPSSL_H 1
+_ACEOF
+
+ ;;
+ esac
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldap_ssl.h" >&5
+$as_echo_n "checking for ldap_ssl.h... " >&6; }
+if test "${ac_cv_header_ldap_ssl_h+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#undef inline
+#ifdef HAVE_WINDOWS_H
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#else
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#endif
+#ifndef LDAP_DEPRECATED
+#define LDAP_DEPRECATED 1
+#endif
+#ifdef NEED_LBER_H
+#include <lber.h>
+#endif
+#ifdef HAVE_LDAP_H
+#include <ldap.h>
+#endif
+#include <ldap_ssl.h>
+
+int main (void)
+{
+
+ LDAP *ldp = ldapssl_init("dummy", LDAPS_PORT, 1);
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ ac_cv_header_ldap_ssl_h="yes"
+
+else
+
+ ac_cv_header_ldap_ssl_h="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_ldap_ssl_h" >&5
+$as_echo "$ac_cv_header_ldap_ssl_h" >&6; }
+ case "$ac_cv_header_ldap_ssl_h" in
+ yes)
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_LDAP_SSL_H 1
+_ACEOF
+
+ ;;
+ esac
+
+
+ if test -z "$LDAPLIBNAME" ; then
+ if test "$ac_cv_native_windows" = "yes"; then
+ LDAPLIBNAME="wldap32"
+ LBERLIBNAME="no"
+ fi
+ fi
+
+ if test "$LDAPLIBNAME" ; then
+ as_ac_Lib=`$as_echo "ac_cv_lib_"$LDAPLIBNAME"''_ldap_init" | $as_tr_sh`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldap_init in -l\"$LDAPLIBNAME\"" >&5
+$as_echo_n "checking for ldap_init in -l\"$LDAPLIBNAME\"... " >&6; }
+if eval "test \"\${$as_ac_Lib+set}\"" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-l"$LDAPLIBNAME" $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#ifdef __cplusplus
+extern "C"
+#endif
+char ldap_init ();
+int main (void)
+{
+return ldap_init ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ eval "$as_ac_Lib=yes"
+else
+ eval "$as_ac_Lib=no"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+eval ac_res=\$$as_ac_Lib
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_LIB"$LDAPLIBNAME"" | $as_tr_cpp` 1
+_ACEOF
+
+ LIBS="-l"$LDAPLIBNAME" $LIBS"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"$LDAPLIBNAME\" is not an LDAP library: LDAP disabled" >&5
+$as_echo "$as_me: WARNING: \"$LDAPLIBNAME\" is not an LDAP library: LDAP disabled" >&2;}
+
+$as_echo "#define CURL_DISABLE_LDAP 1" >>confdefs.h
+
+ CURL_DISABLE_LDAP=1
+
+fi
+
+
+$as_echo "#define CURL_DISABLE_LDAPS 1" >>confdefs.h
+
+ CURL_DISABLE_LDAPS=1
+
+ else
+
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LDAP libraries" >&5
+$as_echo_n "checking for LDAP libraries... " >&6; }
+ #
+ u_libs=""
+ #
+
+ #
+ curl_cv_save_LIBS="$LIBS"
+ curl_cv_ldap_LIBS="unknown"
+ #
+ for x_nlibs in '' "$u_libs" \
+ '-lldap' \
+ '-llber -lldap' \
+ '-lldap -llber' \
+ '-lldapssl -lldapx -lldapsdk' \
+ '-lldapsdk -lldapx -lldapssl' ; do
+ if test "$curl_cv_ldap_LIBS" = "unknown"; then
+ if test -z "$x_nlibs"; then
+ LIBS="$curl_cv_save_LIBS"
+ else
+ LIBS="$x_nlibs $curl_cv_save_LIBS"
+ fi
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#undef inline
+#ifdef HAVE_WINDOWS_H
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#else
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#endif
+#ifndef NULL
+#define NULL (void *)0
+#endif
+#ifndef LDAP_DEPRECATED
+#define LDAP_DEPRECATED 1
+#endif
+#ifdef NEED_LBER_H
+#include <lber.h>
+#endif
+#ifdef HAVE_LDAP_H
+#include <ldap.h>
+#endif
+
+int main (void)
+{
+
+ BerValue *bvp = NULL;
+ BerElement *bep = ber_init(bvp);
+ LDAP *ldp = ldap_init("dummy", LDAP_PORT);
+ int res = ldap_unbind(ldp);
+ ber_free(bep, 1);
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ curl_cv_ldap_LIBS="$x_nlibs"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ fi
+ done
+ #
+ LIBS="$curl_cv_save_LIBS"
+ #
+ case X-"$curl_cv_ldap_LIBS" in
+ X-unknown)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: cannot find LDAP libraries" >&5
+$as_echo "cannot find LDAP libraries" >&6; }
+ ;;
+ X-)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no additional lib required" >&5
+$as_echo "no additional lib required" >&6; }
+ ;;
+ *)
+ if test -z "$curl_cv_save_LIBS"; then
+ LIBS="$curl_cv_ldap_LIBS"
+ else
+ LIBS="$curl_cv_ldap_LIBS $curl_cv_save_LIBS"
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $curl_cv_ldap_LIBS" >&5
+$as_echo "$curl_cv_ldap_LIBS" >&6; }
+ ;;
+ esac
+ #
+
+ case X-"$curl_cv_ldap_LIBS" in
+ X-unknown)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Cannot find libraries for LDAP support: LDAP disabled" >&5
+$as_echo "$as_me: WARNING: Cannot find libraries for LDAP support: LDAP disabled" >&2;}
+
+$as_echo "#define CURL_DISABLE_LDAP 1" >>confdefs.h
+
+ CURL_DISABLE_LDAP=1
+
+
+$as_echo "#define CURL_DISABLE_LDAPS 1" >>confdefs.h
+
+ CURL_DISABLE_LDAPS=1
+
+ ;;
+ esac
+ fi
+fi
+
+if test x$CURL_DISABLE_LDAP != x1 ; then
+
+ if test "$LBERLIBNAME" ; then
+ if test "$LBERLIBNAME" != "no" ; then
+ as_ac_Lib=`$as_echo "ac_cv_lib_"$LBERLIBNAME"''_ber_free" | $as_tr_sh`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ber_free in -l\"$LBERLIBNAME\"" >&5
+$as_echo_n "checking for ber_free in -l\"$LBERLIBNAME\"... " >&6; }
+if eval "test \"\${$as_ac_Lib+set}\"" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-l"$LBERLIBNAME" $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#ifdef __cplusplus
+extern "C"
+#endif
+char ber_free ();
+int main (void)
+{
+return ber_free ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ eval "$as_ac_Lib=yes"
+else
+ eval "$as_ac_Lib=no"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+eval ac_res=\$$as_ac_Lib
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_LIB"$LBERLIBNAME"" | $as_tr_cpp` 1
+_ACEOF
+
+ LIBS="-l"$LBERLIBNAME" $LIBS"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"$LBERLIBNAME\" is not an LBER library: LDAP disabled" >&5
+$as_echo "$as_me: WARNING: \"$LBERLIBNAME\" is not an LBER library: LDAP disabled" >&2;}
+
+$as_echo "#define CURL_DISABLE_LDAP 1" >>confdefs.h
+
+ CURL_DISABLE_LDAP=1
+
+fi
+
+
+$as_echo "#define CURL_DISABLE_LDAPS 1" >>confdefs.h
+
+ CURL_DISABLE_LDAPS=1
+
+ fi
+ fi
+fi
+
+if test x$CURL_DISABLE_LDAP != x1 ; then
+ for ac_func in ldap_url_parse ldap_init_fd
+do :
+ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+ if test "$LDAPLIBNAME" = "wldap32"; then
+ curl_ldap_msg="enabled (winldap)"
+
+$as_echo "#define CURL_LDAP_WIN 1" >>confdefs.h
+
+ else
+ curl_ldap_msg="enabled (OpenLDAP)"
+ if test "x$ac_cv_func_ldap_init_fd" = "xyes"; then
+
+$as_echo "#define USE_OPENLDAP 1" >>confdefs.h
+
+ USE_OPENLDAP=1
+
+ fi
+ fi
+fi
+
+if test x$CURL_DISABLE_LDAPS != x1 ; then
+ curl_ldaps_msg="enabled"
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable ipv6" >&5
+$as_echo_n "checking whether to enable ipv6... " >&6; }
+# Check whether --enable-ipv6 was given.
+if test "${enable_ipv6+set}" = set; then :
+ enableval=$enable_ipv6; case "$enableval" in
+ no)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ipv6=no
+ ;;
+ *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ ipv6=yes
+ ;;
+ esac
+else
+ if test "$cross_compiling" = yes; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ipv6=no
+
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+ /* is AF_INET6 available? */
+#include <sys/types.h>
+#include <sys/socket.h>
+main()
+{
+ if (socket(AF_INET6, SOCK_STREAM, 0) < 0)
+ exit(1);
+ else
+ exit(0);
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ ipv6=yes
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ipv6=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+
+
+if test "$ipv6" = "yes"; then
+ curl_ipv6_msg="enabled"
+fi
+
+# Check if struct sockaddr_in6 have sin6_scope_id member
+if test "$ipv6" = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if struct sockaddr_in6 has sin6_scope_id member" >&5
+$as_echo_n "checking if struct sockaddr_in6 has sin6_scope_id member... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <sys/types.h>
+#include <netinet/in.h>
+int main (void)
+{
+struct sockaddr_in6 s; s.sin6_scope_id = 0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ have_sin6_scope_id=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ if test "$have_sin6_scope_id" = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+$as_echo "#define HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID 1" >>confdefs.h
+
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ fi
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if argv can be written to" >&5
+$as_echo_n "checking if argv can be written to... " >&6; }
+if test "${curl_cv_writable_argv+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+
+if test "$cross_compiling" = yes; then :
+ curl_cv_writable_argv=cross
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int main(int argc, char ** argv) {
+ argv[0][0] = ' ';
+ return (argv[0][0] == ' ')?0:1;
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+ curl_cv_writable_argv=yes
+else
+ curl_cv_writable_argv=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+
+case $curl_cv_writable_argv in
+yes)
+
+$as_echo "#define HAVE_WRITABLE_ARGV 1" >>confdefs.h
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ ;;
+no)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ;;
+*)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: the previous check could not be made default was used" >&5
+$as_echo "$as_me: WARNING: the previous check could not be made default was used" >&2;}
+ ;;
+esac
+
+
+
+# Check whether --with-krb4-includes was given.
+if test "${with_krb4_includes+set}" = set; then :
+ withval=$with_krb4_includes;
+ CPPFLAGS="$CPPFLAGS -I$withval"
+ KRB4INC="$withval"
+ want_krb4=yes
+
+fi
+
+
+
+# Check whether --with-krb4-libs was given.
+if test "${with_krb4_libs+set}" = set; then :
+ withval=$with_krb4_libs;
+ LDFLAGS="$LDFLAGS -L$withval"
+ KRB4LIB="$withval"
+ want_krb4=yes
+
+fi
+
+
+
+OPT_KRB4=off
+
+# Check whether --with-krb4 was given.
+if test "${with_krb4+set}" = set; then :
+ withval=$with_krb4;
+ OPT_KRB4="$withval"
+ if test X"$OPT_KRB4" != Xno; then
+ want_krb4="yes"
+ if test X"$OPT_KRB4" != Xyes; then
+ LDFLAGS="$LDFLAGS -L$OPT_KRB4/lib$libsuff"
+ KRB4LIB="$OPT_KRB4/lib$libsuff"
+ CPPFLAGS="$CPPFLAGS -I$OPT_KRB4/include"
+ KRB4INC="$OPT_KRB4/include"
+ fi
+ fi
+
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if Kerberos4 support is requested" >&5
+$as_echo_n "checking if Kerberos4 support is requested... " >&6; }
+
+if test "$want_krb4" = yes
+then
+ if test "$ipv6" = "yes"; then
+ echo krb4 is not compatible with IPv6
+ exit 1
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking where to look for Kerberos4" >&5
+$as_echo_n "checking where to look for Kerberos4... " >&6; }
+ if test X"$OPT_KRB4" = Xyes
+ then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: defaults" >&5
+$as_echo "defaults" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: libs in $KRB4LIB, headers in $KRB4INC" >&5
+$as_echo "libs in $KRB4LIB, headers in $KRB4INC" >&6; }
+ fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for des_pcbc_encrypt in -ldes" >&5
+$as_echo_n "checking for des_pcbc_encrypt in -ldes... " >&6; }
+if test "${ac_cv_lib_des_des_pcbc_encrypt+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldes $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#ifdef __cplusplus
+extern "C"
+#endif
+char des_pcbc_encrypt ();
+int main (void)
+{
+return des_pcbc_encrypt ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_des_des_pcbc_encrypt=yes
+else
+ ac_cv_lib_des_des_pcbc_encrypt=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_des_des_pcbc_encrypt" >&5
+$as_echo "$ac_cv_lib_des_des_pcbc_encrypt" >&6; }
+if test "x$ac_cv_lib_des_des_pcbc_encrypt" = x""yes; then :
+
+ for ac_header in des.h
+do :
+ ac_fn_c_check_header_mongrel "$LINENO" "des.h" "ac_cv_header_des_h" "$ac_includes_default"
+if test "x$ac_cv_header_des_h" = x""yes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_DES_H 1
+_ACEOF
+
+fi
+
+done
+
+
+ ac_fn_c_check_func "$LINENO" "res_search" "ac_cv_func_res_search"
+if test "x$ac_cv_func_res_search" = x""yes; then :
+
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for res_search in -lresolv" >&5
+$as_echo_n "checking for res_search in -lresolv... " >&6; }
+if test "${ac_cv_lib_resolv_res_search+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lresolv $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#ifdef __cplusplus
+extern "C"
+#endif
+char res_search ();
+int main (void)
+{
+return res_search ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_resolv_res_search=yes
+else
+ ac_cv_lib_resolv_res_search=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_resolv_res_search" >&5
+$as_echo "$ac_cv_lib_resolv_res_search" >&6; }
+if test "x$ac_cv_lib_resolv_res_search" = x""yes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBRESOLV 1
+_ACEOF
+
+ LIBS="-lresolv $LIBS"
+
+fi
+
+fi
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for krb_net_read in -lkrb" >&5
+$as_echo_n "checking for krb_net_read in -lkrb... " >&6; }
+if test "${ac_cv_lib_krb_krb_net_read+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lkrb $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#ifdef __cplusplus
+extern "C"
+#endif
+char krb_net_read ();
+int main (void)
+{
+return krb_net_read ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_krb_krb_net_read=yes
+else
+ ac_cv_lib_krb_krb_net_read=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_krb_krb_net_read" >&5
+$as_echo "$ac_cv_lib_krb_krb_net_read" >&6; }
+if test "x$ac_cv_lib_krb_krb_net_read" = x""yes; then :
+
+ for ac_header in krb.h
+do :
+ ac_fn_c_check_header_mongrel "$LINENO" "krb.h" "ac_cv_header_krb_h" "$ac_includes_default"
+if test "x$ac_cv_header_krb_h" = x""yes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_KRB_H 1
+_ACEOF
+
+fi
+
+done
+
+
+ LIBS="-lkrb -lcom_err -ldes $LIBS"
+
+ for ac_func in krb_get_our_ip_for_realm
+do :
+ ac_fn_c_check_func "$LINENO" "krb_get_our_ip_for_realm" "ac_cv_func_krb_get_our_ip_for_realm"
+if test "x$ac_cv_func_krb_get_our_ip_for_realm" = x""yes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_KRB_GET_OUR_IP_FOR_REALM 1
+_ACEOF
+
+fi
+done
+
+
+
+$as_echo "#define HAVE_KRB4 1" >>confdefs.h
+
+
+ KRB4_ENABLED=1
+
+
+ curl_krb4_msg="enabled"
+
+ for ac_func in strlcpy
+do :
+ ac_fn_c_check_func "$LINENO" "strlcpy" "ac_cv_func_strlcpy"
+if test "x$ac_cv_func_strlcpy" = x""yes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_STRLCPY 1
+_ACEOF
+
+fi
+done
+
+
+
+fi
+
+
+fi
+
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+# Check whether --with-spnego was given.
+if test "${with_spnego+set}" = set; then :
+ withval=$with_spnego;
+ SPNEGO_ROOT="$withval"
+ if test x"$SPNEGO_ROOT" != xno; then
+ want_spnego="yes"
+ fi
+
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if SPNEGO support is requested" >&5
+$as_echo_n "checking if SPNEGO support is requested... " >&6; }
+if test x"$want_spnego" = xyes; then
+
+ if test X"$SPNEGO_ROOT" = Xyes; then
+ as_fn_error $? "FBOpenSSL libs and/or directories were not found where specified!" "$LINENO" 5
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ else
+ if test -z "$SPNEGO_LIB_DIR"; then
+ LDFLAGS="$LDFLAGS -L$SPNEGO_ROOT -lfbopenssl"
+ else
+ LDFLAGS="$LDFLAGS $SPNEGO_LIB_DIR"
+ fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+$as_echo "#define HAVE_SPNEGO 1" >>confdefs.h
+
+ curl_spnego_msg="enabled"
+ fi
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+GSSAPI_ROOT="/usr"
+
+# Check whether --with-gssapi-includes was given.
+if test "${with_gssapi_includes+set}" = set; then :
+ withval=$with_gssapi_includes; GSSAPI_INCS="-I$withval"
+ want_gss="yes"
+
+fi
+
+
+
+# Check whether --with-gssapi-libs was given.
+if test "${with_gssapi_libs+set}" = set; then :
+ withval=$with_gssapi_libs; GSSAPI_LIB_DIR="-L$withval"
+ want_gss="yes"
+
+fi
+
+
+
+# Check whether --with-gssapi was given.
+if test "${with_gssapi+set}" = set; then :
+ withval=$with_gssapi;
+ GSSAPI_ROOT="$withval"
+ if test x"$GSSAPI_ROOT" != xno; then
+ want_gss="yes"
+ if test x"$GSSAPI_ROOT" = xyes; then
+ GSSAPI_ROOT="/usr"
+ fi
+ fi
+
+fi
+
+
+save_CPPFLAGS="$CPPFLAGS"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if GSSAPI support is requested" >&5
+$as_echo_n "checking if GSSAPI support is requested... " >&6; }
+if test x"$want_gss" = xyes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+ if test -z "$GSSAPI_INCS"; then
+ if test -f "$GSSAPI_ROOT/bin/krb5-config"; then
+ GSSAPI_INCS=`$GSSAPI_ROOT/bin/krb5-config --cflags gssapi`
+ elif test "$GSSAPI_ROOT" != "yes"; then
+ GSSAPI_INCS="-I$GSSAPI_ROOT/include"
+ fi
+ fi
+
+ CPPFLAGS="$CPPFLAGS $GSSAPI_INCS"
+
+ ac_fn_c_check_header_mongrel "$LINENO" "gss.h" "ac_cv_header_gss_h" "$ac_includes_default"
+if test "x$ac_cv_header_gss_h" = x""yes; then :
+
+
+$as_echo "#define HAVE_GSSGNU 1" >>confdefs.h
+
+ gnu_gss=yes
+
+else
+
+ for ac_header in gssapi/gssapi.h
+do :
+ ac_fn_c_check_header_mongrel "$LINENO" "gssapi/gssapi.h" "ac_cv_header_gssapi_gssapi_h" "$ac_includes_default"
+if test "x$ac_cv_header_gssapi_gssapi_h" = x""yes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_GSSAPI_GSSAPI_H 1
+_ACEOF
+
+else
+ not_mit=1
+fi
+
+done
+
+ for ac_header in gssapi/gssapi_generic.h gssapi/gssapi_krb5.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "
+$ac_includes_default
+#ifdef HAVE_GSSAPI_GSSAPI_H
+#include <gssapi/gssapi.h>
+#endif
+
+"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+else
+ not_mit=1
+fi
+
+done
+
+ if test "x$not_mit" = "x1"; then
+ ac_fn_c_check_header_mongrel "$LINENO" "gssapi.h" "ac_cv_header_gssapi_h" "$ac_includes_default"
+if test "x$ac_cv_header_gssapi_h" = x""yes; then :
+
+
+$as_echo "#define HAVE_GSSHEIMDAL 1" >>confdefs.h
+
+
+else
+
+ want_gss=no
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: disabling GSSAPI since no header files was found" >&5
+$as_echo "$as_me: WARNING: disabling GSSAPI since no header files was found" >&2;}
+
+
+fi
+
+
+ else
+
+$as_echo "#define HAVE_GSSMIT 1" >>confdefs.h
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if gssapi headers declare GSS_C_NT_HOSTBASED_SERVICE" >&5
+$as_echo_n "checking if gssapi headers declare GSS_C_NT_HOSTBASED_SERVICE... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#include <gssapi/gssapi.h>
+#include <gssapi/gssapi_generic.h>
+#include <gssapi/gssapi_krb5.h>
+
+int main (void)
+{
+
+ gss_import_name(
+ (OM_uint32 *)0,
+ (gss_buffer_t)0,
+ GSS_C_NT_HOSTBASED_SERVICE,
+ (gss_name_t *)0);
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+$as_echo "#define HAVE_OLD_GSSMIT 1" >>confdefs.h
+
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+
+
+fi
+
+
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+if test x"$want_gss" = xyes; then
+
+$as_echo "#define HAVE_GSSAPI 1" >>confdefs.h
+
+
+ curl_gss_msg="enabled (MIT/Heimdal)"
+
+ if test -n "$gnu_gss"; then
+ curl_gss_msg="enabled (GNU GSS)"
+ LDFLAGS="$LDFLAGS $GSSAPI_LIB_DIR"
+ LIBS="$LIBS -lgss"
+ elif test -z "$GSSAPI_LIB_DIR"; then
+ case $host in
+ *-*-darwin*)
+ LIBS="$LIBS -lgssapi_krb5 -lresolv"
+ ;;
+ *)
+ if test -f "$GSSAPI_ROOT/bin/krb5-config"; then
+ gss_libs=`$GSSAPI_ROOT/bin/krb5-config --libs gssapi`
+ LIBS="$LIBS $gss_libs"
+ elif test "$GSSAPI_ROOT" != "yes"; then
+ LDFLAGS="$LDFLAGS -L$GSSAPI_ROOT/lib$libsuff"
+ LIBS="$LIBS -lgssapi"
+ else
+ LIBS="$LIBS -lgssapi"
+ fi
+ ;;
+ esac
+ else
+ LDFLAGS="$LDFLAGS $GSSAPI_LIB_DIR"
+ LIBS="$LIBS -lgssapi"
+ fi
+else
+ CPPFLAGS="$save_CPPFLAGS"
+fi
+
+
+OPT_SSL=off
+ca="no"
+
+# Check whether --with-ssl was given.
+if test "${with_ssl+set}" = set; then :
+ withval=$with_ssl; OPT_SSL=$withval
+fi
+
+
+if test X"$OPT_SSL" != Xno; then
+ CLEANLDFLAGS="$LDFLAGS"
+ CLEANCPPFLAGS="$CPPFLAGS"
+ CLEANLIBS="$LIBS"
+
+ case "$OPT_SSL" in
+ yes)
+ if test x$cross_compiling != xyes; then
+ PKGTEST="yes"
+ fi
+ PREFIX_OPENSSL=/usr/local/ssl
+ LIB_OPENSSL="$PREFIX_OPENSSL/lib$libsuff"
+ ;;
+ off)
+ if test x$cross_compiling != xyes; then
+ PKGTEST="yes"
+ fi
+ PREFIX_OPENSSL=
+ ;;
+ *)
+ PKGTEST="no"
+ PREFIX_OPENSSL=$OPT_SSL
+
+ OPENSSL_PCDIR="$OPT_SSL/lib/pkgconfig"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: PKG_CONFIG_LIBDIR will be set to \"$OPENSSL_PCDIR\"" >&5
+$as_echo "$as_me: PKG_CONFIG_LIBDIR will be set to \"$OPENSSL_PCDIR\"" >&6;}
+ if test -e "$OPENSSL_PCDIR/openssl.pc"; then
+ PKGTEST="yes"
+ fi
+
+ LIB_OPENSSL="$PREFIX_OPENSSL/lib$libsuff"
+ if test "$PREFIX_OPENSSL" != "/usr" ; then
+ SSL_LDFLAGS="-L$LIB_OPENSSL"
+ SSL_CPPFLAGS="-I$PREFIX_OPENSSL/include"
+ fi
+ SSL_CPPFLAGS="$SSL_CPPFLAGS -I$PREFIX_OPENSSL/include/openssl"
+ ;;
+ esac
+
+ if test "$PKGTEST" = "yes"; then
+
+
+
+ PKGCONFIG="no"
+
+ if test x$cross_compiling = xyes; then
+ # Extract the first word of "${host}-pkg-config", so it can be a program name with args.
+set dummy ${host}-pkg-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_PKGCONFIG+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $PKGCONFIG in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_PKGCONFIG="$PKGCONFIG" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_dummy="$PATH:/usr/bin:/usr/local/bin"
+for as_dir in $as_dummy
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_PKGCONFIG="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_path_PKGCONFIG" && ac_cv_path_PKGCONFIG="no"
+ ;;
+esac
+fi
+PKGCONFIG=$ac_cv_path_PKGCONFIG
+if test -n "$PKGCONFIG"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKGCONFIG" >&5
+$as_echo "$PKGCONFIG" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ fi
+
+ if test x$PKGCONFIG = xno; then
+ # Extract the first word of "pkg-config", so it can be a program name with args.
+set dummy pkg-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_PKGCONFIG+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $PKGCONFIG in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_PKGCONFIG="$PKGCONFIG" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_dummy="$PATH:/usr/bin:/usr/local/bin"
+for as_dir in $as_dummy
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_PKGCONFIG="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_path_PKGCONFIG" && ac_cv_path_PKGCONFIG="no"
+ ;;
+esac
+fi
+PKGCONFIG=$ac_cv_path_PKGCONFIG
+if test -n "$PKGCONFIG"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKGCONFIG" >&5
+$as_echo "$PKGCONFIG" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ fi
+
+ if test x$PKGCONFIG != xno; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for openssl options with pkg-config" >&5
+$as_echo_n "checking for openssl options with pkg-config... " >&6; }
+ itexists=`
+ if test -n "$OPENSSL_PCDIR"; then
+ PKG_CONFIG_LIBDIR="$OPENSSL_PCDIR"
+ export PKG_CONFIG_LIBDIR
+ fi
+ $PKGCONFIG --exists openssl >/dev/null 2>&1 && echo 1`
+
+ if test -z "$itexists"; then
+ PKGCONFIG="no"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: found" >&5
+$as_echo "found" >&6; }
+ fi
+ fi
+
+
+ if test "$PKGCONFIG" != "no" ; then
+ SSL_LIBS=`
+ if test -n "$OPENSSL_PCDIR"; then
+ PKG_CONFIG_LIBDIR="$OPENSSL_PCDIR"
+ export PKG_CONFIG_LIBDIR
+ fi
+ $PKGCONFIG --libs-only-l openssl 2>/dev/null`
+
+ SSL_LDFLAGS=`
+ if test -n "$OPENSSL_PCDIR"; then
+ PKG_CONFIG_LIBDIR="$OPENSSL_PCDIR"
+ export PKG_CONFIG_LIBDIR
+ fi
+ $PKGCONFIG --libs-only-L openssl 2>/dev/null`
+
+ SSL_CPPFLAGS=`
+ if test -n "$OPENSSL_PCDIR"; then
+ PKG_CONFIG_LIBDIR="$OPENSSL_PCDIR"
+ export PKG_CONFIG_LIBDIR
+ fi
+ $PKGCONFIG --cflags-only-I openssl 2>/dev/null`
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: pkg-config: SSL_LIBS: \"$SSL_LIBS\"" >&5
+$as_echo "$as_me: pkg-config: SSL_LIBS: \"$SSL_LIBS\"" >&6;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: pkg-config: SSL_LDFLAGS: \"$SSL_LDFLAGS\"" >&5
+$as_echo "$as_me: pkg-config: SSL_LDFLAGS: \"$SSL_LDFLAGS\"" >&6;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: pkg-config: SSL_CPPFLAGS: \"$SSL_CPPFLAGS\"" >&5
+$as_echo "$as_me: pkg-config: SSL_CPPFLAGS: \"$SSL_CPPFLAGS\"" >&6;}
+
+ LIB_OPENSSL=`echo $SSL_LDFLAGS | sed -e 's/-L//g'`
+
+ LIBS="$LIBS $SSL_LIBS"
+ fi
+ fi
+
+ CPPFLAGS="$CPPFLAGS $SSL_CPPFLAGS"
+ LDFLAGS="$LDFLAGS $SSL_LDFLAGS"
+
+ case $host in
+ *-*-msys* | *-*-mingw*)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gdi32" >&5
+$as_echo_n "checking for gdi32... " >&6; }
+ my_ac_save_LIBS=$LIBS
+ LIBS="-lgdi32 $LIBS"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <windef.h>
+ #include <wingdi.h>
+int main (void)
+{
+GdiFlush();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+ LIBS=$my_ac_save_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ ;;
+ esac
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CRYPTO_lock in -lcrypto" >&5
+$as_echo_n "checking for CRYPTO_lock in -lcrypto... " >&6; }
+if test "${ac_cv_lib_crypto_CRYPTO_lock+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lcrypto $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#ifdef __cplusplus
+extern "C"
+#endif
+char CRYPTO_lock ();
+int main (void)
+{
+return CRYPTO_lock ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_crypto_CRYPTO_lock=yes
+else
+ ac_cv_lib_crypto_CRYPTO_lock=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_crypto_CRYPTO_lock" >&5
+$as_echo "$ac_cv_lib_crypto_CRYPTO_lock" >&6; }
+if test "x$ac_cv_lib_crypto_CRYPTO_lock" = x""yes; then :
+
+ HAVECRYPTO="yes"
+ LIBS="-lcrypto $LIBS"
+
+else
+
+ LDFLAGS="$CLEANLDFLAGS -L$LIB_OPENSSL"
+ CPPFLAGS="$CLEANCPPFLAGS -I$PREFIX_OPENSSL/include/openssl -I$PREFIX_OPENSSL/include"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CRYPTO_add_lock in -lcrypto" >&5
+$as_echo_n "checking for CRYPTO_add_lock in -lcrypto... " >&6; }
+if test "${ac_cv_lib_crypto_CRYPTO_add_lock+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lcrypto $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#ifdef __cplusplus
+extern "C"
+#endif
+char CRYPTO_add_lock ();
+int main (void)
+{
+return CRYPTO_add_lock ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_crypto_CRYPTO_add_lock=yes
+else
+ ac_cv_lib_crypto_CRYPTO_add_lock=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_crypto_CRYPTO_add_lock" >&5
+$as_echo "$ac_cv_lib_crypto_CRYPTO_add_lock" >&6; }
+if test "x$ac_cv_lib_crypto_CRYPTO_add_lock" = x""yes; then :
+
+ HAVECRYPTO="yes"
+ LIBS="-lcrypto $LIBS"
+else
+
+ LDFLAGS="$CLEANLDFLAGS"
+ CPPFLAGS="$CLEANCPPFLAGS"
+ LIBS="$CLEANLIBS"
+
+fi
+
+
+fi
+
+
+
+ if test X"$HAVECRYPTO" = X"yes"; then
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SSL_connect in -lssl" >&5
+$as_echo_n "checking for SSL_connect in -lssl... " >&6; }
+if test "${ac_cv_lib_ssl_SSL_connect+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lssl $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#ifdef __cplusplus
+extern "C"
+#endif
+char SSL_connect ();
+int main (void)
+{
+return SSL_connect ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_ssl_SSL_connect=yes
+else
+ ac_cv_lib_ssl_SSL_connect=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ssl_SSL_connect" >&5
+$as_echo "$ac_cv_lib_ssl_SSL_connect" >&6; }
+if test "x$ac_cv_lib_ssl_SSL_connect" = x""yes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBSSL 1
+_ACEOF
+
+ LIBS="-lssl $LIBS"
+
+fi
+
+
+ if test "$ac_cv_lib_ssl_SSL_connect" != yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ssl with RSAglue/rsaref libs in use" >&5
+$as_echo_n "checking for ssl with RSAglue/rsaref libs in use... " >&6; };
+ OLIBS=$LIBS
+ LIBS="$LIBS -lRSAglue -lrsaref"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SSL_connect in -lssl" >&5
+$as_echo_n "checking for SSL_connect in -lssl... " >&6; }
+if test "${ac_cv_lib_ssl_SSL_connect+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lssl $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#ifdef __cplusplus
+extern "C"
+#endif
+char SSL_connect ();
+int main (void)
+{
+return SSL_connect ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_ssl_SSL_connect=yes
+else
+ ac_cv_lib_ssl_SSL_connect=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ssl_SSL_connect" >&5
+$as_echo "$ac_cv_lib_ssl_SSL_connect" >&6; }
+if test "x$ac_cv_lib_ssl_SSL_connect" = x""yes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBSSL 1
+_ACEOF
+
+ LIBS="-lssl $LIBS"
+
+fi
+
+ if test "$ac_cv_lib_ssl_SSL_connect" != yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ LIBS=$OLIBS
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ fi
+
+ else
+
+ for ac_header in openssl/x509.h openssl/rsa.h openssl/crypto.h \
+ openssl/pem.h openssl/ssl.h openssl/err.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+ curl_ssl_msg="enabled (OpenSSL)"
+ OPENSSL_ENABLED=1
+
+$as_echo "#define USE_OPENSSL 1" >>confdefs.h
+
+fi
+
+done
+
+
+ if test $ac_cv_header_openssl_x509_h = no; then
+ for ac_header in x509.h rsa.h crypto.h pem.h ssl.h err.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+ if test $ac_cv_header_x509_h = yes &&
+ test $ac_cv_header_crypto_h = yes &&
+ test $ac_cv_header_ssl_h = yes; then
+ curl_ssl_msg="enabled (OpenSSL)"
+ OPENSSL_ENABLED=1
+ fi
+ fi
+ fi
+
+ if test X"$OPENSSL_ENABLED" = X"1"; then
+
+$as_echo "#define USE_SSLEAY 1" >>confdefs.h
+
+
+ for ac_header in openssl/pkcs12.h
+do :
+ ac_fn_c_check_header_mongrel "$LINENO" "openssl/pkcs12.h" "ac_cv_header_openssl_pkcs12_h" "$ac_includes_default"
+if test "x$ac_cv_header_openssl_pkcs12_h" = x""yes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_OPENSSL_PKCS12_H 1
+_ACEOF
+
+fi
+
+done
+
+ else
+ LIBS="$CLEANLIBS"
+ fi
+ USE_SSLEAY="$OPENSSL_ENABLED"
+
+
+ if test X"$OPT_SSL" != Xoff &&
+ test "$OPENSSL_ENABLED" != "1"; then
+ as_fn_error $? "OpenSSL libs and/or directories were not found where specified!" "$LINENO" 5
+ fi
+ fi
+
+ if test X"$OPENSSL_ENABLED" = X"1"; then
+ ac_fn_c_check_func "$LINENO" "ENGINE_init" "ac_cv_func_ENGINE_init"
+if test "x$ac_cv_func_ENGINE_init" = x""yes; then :
+
+ for ac_header in openssl/engine.h
+do :
+ ac_fn_c_check_header_mongrel "$LINENO" "openssl/engine.h" "ac_cv_header_openssl_engine_h" "$ac_includes_default"
+if test "x$ac_cv_header_openssl_engine_h" = x""yes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_OPENSSL_ENGINE_H 1
+_ACEOF
+
+fi
+
+done
+
+ for ac_func in ENGINE_load_builtin_engines
+do :
+ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+fi
+
+
+
+ for ac_func in RAND_status \
+ RAND_screen \
+ RAND_egd \
+ ENGINE_cleanup \
+ CRYPTO_cleanup_all_ex_data \
+ SSL_get_shutdown
+do :
+ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for yaSSL using OpenSSL compatibility mode" >&5
+$as_echo_n "checking for yaSSL using OpenSSL compatibility mode... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#include <openssl/ssl.h>
+
+int main (void)
+{
+
+#if defined(YASSL_VERSION) && defined(OPENSSL_VERSION_NUMBER)
+ int dummy = SSL_ERROR_NONE;
+#else
+ Not the yaSSL OpenSSL compatibility header.
+#endif
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define USE_YASSLEMUL 1
+_ACEOF
+
+ curl_ssl_msg="enabled (OpenSSL emulation by yaSSL)"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+
+ if test "$OPENSSL_ENABLED" = "1"; then
+ if test -n "$LIB_OPENSSL"; then
+
+ LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$LIB_OPENSSL"
+ export LD_LIBRARY_PATH
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Added $LIB_OPENSSL to LD_LIBRARY_PATH" >&5
+$as_echo "$as_me: Added $LIB_OPENSSL to LD_LIBRARY_PATH" >&6;}
+ fi
+ fi
+
+fi
+
+
+
+_cppflags=$CPPFLAGS
+_ldflags=$LDFLAGS
+
+# Check whether --with-zlib was given.
+if test "${with_zlib+set}" = set; then :
+ withval=$with_zlib; OPT_ZLIB="$withval"
+fi
+
+
+if test "$OPT_ZLIB" = "no" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: zlib disabled" >&5
+$as_echo "$as_me: WARNING: zlib disabled" >&2;}
+else
+ if test "$OPT_ZLIB" = "yes" ; then
+ OPT_ZLIB=""
+ fi
+
+ if test -z "$OPT_ZLIB" ; then
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inflateEnd in -lz" >&5
+$as_echo_n "checking for inflateEnd in -lz... " >&6; }
+if test "${ac_cv_lib_z_inflateEnd+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lz $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#ifdef __cplusplus
+extern "C"
+#endif
+char inflateEnd ();
+int main (void)
+{
+return inflateEnd ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_z_inflateEnd=yes
+else
+ ac_cv_lib_z_inflateEnd=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_inflateEnd" >&5
+$as_echo "$ac_cv_lib_z_inflateEnd" >&6; }
+if test "x$ac_cv_lib_z_inflateEnd" = x""yes; then :
+ HAVE_LIBZ="1"
+else
+ OPT_ZLIB="/usr/local"
+fi
+
+
+ fi
+
+ if test -n "$OPT_ZLIB"; then
+ CPPFLAGS="$CPPFLAGS -I$OPT_ZLIB/include"
+ LDFLAGS="$LDFLAGS -L$OPT_ZLIB/lib$libsuff"
+ fi
+
+ ac_fn_c_check_header_mongrel "$LINENO" "zlib.h" "ac_cv_header_zlib_h" "$ac_includes_default"
+if test "x$ac_cv_header_zlib_h" = x""yes; then :
+
+ HAVE_ZLIB_H="1"
+ if test "$HAVE_LIBZ" != "1"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gzread in -lz" >&5
+$as_echo_n "checking for gzread in -lz... " >&6; }
+if test "${ac_cv_lib_z_gzread+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lz $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#ifdef __cplusplus
+extern "C"
+#endif
+char gzread ();
+int main (void)
+{
+return gzread ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_z_gzread=yes
+else
+ ac_cv_lib_z_gzread=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_gzread" >&5
+$as_echo "$ac_cv_lib_z_gzread" >&6; }
+if test "x$ac_cv_lib_z_gzread" = x""yes; then :
+
+ HAVE_LIBZ="1"
+
+else
+ CPPFLAGS=$_cppflags
+ LDFLAGS=$_ldflags
+fi
+
+ fi
+
+else
+
+ CPPFLAGS=$_cppflags
+ LDFLAGS=$_ldflags
+
+fi
+
+
+
+ if test "$HAVE_LIBZ" = "1" && test "$HAVE_ZLIB_H" != "1"
+ then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: configure found only the libz lib, not the header file!" >&5
+$as_echo "$as_me: WARNING: configure found only the libz lib, not the header file!" >&2;}
+ HAVE_LIBZ=""
+ elif test "$HAVE_LIBZ" != "1" && test "$HAVE_ZLIB_H" = "1"
+ then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: configure found only the libz header file, not the lib!" >&5
+$as_echo "$as_me: WARNING: configure found only the libz header file, not the lib!" >&2;}
+ elif test "$HAVE_LIBZ" = "1" && test "$HAVE_ZLIB_H" = "1"
+ then
+
+
+$as_echo "#define HAVE_ZLIB_H 1" >>confdefs.h
+
+
+$as_echo "#define HAVE_LIBZ 1" >>confdefs.h
+
+
+ CURL_LIBS="$CURL_LIBS -lz"
+ LIBS="$LIBS -lz"
+
+ AMFIXLIB="1"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: found both libz and libz.h header" >&5
+$as_echo "$as_me: found both libz and libz.h header" >&6;}
+ curl_zlib_msg="enabled"
+ fi
+fi
+
+
+
+if test x"$AMFIXLIB" = x1; then
+ HAVE_LIBZ_TRUE=
+ HAVE_LIBZ_FALSE='#'
+else
+ HAVE_LIBZ_TRUE='#'
+ HAVE_LIBZ_FALSE=
+fi
+
+
+
+if test X"$OPENSSL_ENABLED" = X"1"; then
+
+# Check whether --with-egd-socket was given.
+if test "${with_egd_socket+set}" = set; then :
+ withval=$with_egd_socket; EGD_SOCKET="$withval"
+
+fi
+
+ if test -n "$EGD_SOCKET" ; then
+
+cat >>confdefs.h <<_ACEOF
+#define EGD_SOCKET "$EGD_SOCKET"
+_ACEOF
+
+ fi
+
+
+# Check whether --with-random was given.
+if test "${with_random+set}" = set; then :
+ withval=$with_random; RANDOM_FILE="$withval"
+else
+
+ as_ac_File=`$as_echo "ac_cv_file_"/dev/urandom"" | $as_tr_sh`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for \"/dev/urandom\"" >&5
+$as_echo_n "checking for \"/dev/urandom\"... " >&6; }
+if eval "test \"\${$as_ac_File+set}\"" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ test "$cross_compiling" = yes &&
+ as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
+if test -r ""/dev/urandom""; then
+ eval "$as_ac_File=yes"
+else
+ eval "$as_ac_File=no"
+fi
+fi
+eval ac_res=\$$as_ac_File
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+if eval test \"x\$"$as_ac_File"\" = x"yes"; then :
+ RANDOM_FILE="/dev/urandom"
+fi
+
+
+
+fi
+
+ if test -n "$RANDOM_FILE" && test X"$RANDOM_FILE" != Xno ; then
+
+
+cat >>confdefs.h <<_ACEOF
+#define RANDOM_FILE "$RANDOM_FILE"
+_ACEOF
+
+ fi
+fi
+
+
+OPT_GNUTLS=no
+
+
+# Check whether --with-gnutls was given.
+if test "${with_gnutls+set}" = set; then :
+ withval=$with_gnutls; OPT_GNUTLS=$withval
+fi
+
+
+if test "$OPENSSL_ENABLED" != "1"; then
+
+ if test X"$OPT_GNUTLS" != Xno; then
+
+ addld=""
+ if test "x$OPT_GNUTLS" = "xyes"; then
+
+
+ PKGCONFIG="no"
+
+ if test x$cross_compiling = xyes; then
+ # Extract the first word of "${host}-pkg-config", so it can be a program name with args.
+set dummy ${host}-pkg-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_PKGCONFIG+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $PKGCONFIG in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_PKGCONFIG="$PKGCONFIG" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_dummy="$PATH:/usr/bin:/usr/local/bin"
+for as_dir in $as_dummy
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_PKGCONFIG="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_path_PKGCONFIG" && ac_cv_path_PKGCONFIG="no"
+ ;;
+esac
+fi
+PKGCONFIG=$ac_cv_path_PKGCONFIG
+if test -n "$PKGCONFIG"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKGCONFIG" >&5
+$as_echo "$PKGCONFIG" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ fi
+
+ if test x$PKGCONFIG = xno; then
+ # Extract the first word of "pkg-config", so it can be a program name with args.
+set dummy pkg-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_PKGCONFIG+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $PKGCONFIG in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_PKGCONFIG="$PKGCONFIG" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_dummy="$PATH:/usr/bin:/usr/local/bin"
+for as_dir in $as_dummy
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_PKGCONFIG="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_path_PKGCONFIG" && ac_cv_path_PKGCONFIG="no"
+ ;;
+esac
+fi
+PKGCONFIG=$ac_cv_path_PKGCONFIG
+if test -n "$PKGCONFIG"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKGCONFIG" >&5
+$as_echo "$PKGCONFIG" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ fi
+
+ if test x$PKGCONFIG != xno; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gnutls options with pkg-config" >&5
+$as_echo_n "checking for gnutls options with pkg-config... " >&6; }
+ itexists=`
+ if test -n ""; then
+ PKG_CONFIG_LIBDIR=""
+ export PKG_CONFIG_LIBDIR
+ fi
+ $PKGCONFIG --exists gnutls >/dev/null 2>&1 && echo 1`
+
+ if test -z "$itexists"; then
+ PKGCONFIG="no"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: found" >&5
+$as_echo "found" >&6; }
+ fi
+ fi
+
+
+ if test "$PKGCONFIG" != "no" ; then
+ addlib=`$PKGCONFIG --libs-only-l gnutls`
+ addld=`$PKGCONFIG --libs-only-L gnutls`
+ addcflags=`$PKGCONFIG --cflags-only-I gnutls`
+ version=`$PKGCONFIG --modversion gnutls`
+ gtlslib=`echo $addld | $SED -e 's/-L//'`
+ else
+ check=`libgnutls-config --version 2>/dev/null`
+ if test -n "$check"; then
+ addlib=`libgnutls-config --libs`
+ addcflags=`libgnutls-config --cflags`
+ version=`libgnutls-config --version`
+ gtlslib=`libgnutls-config --prefix`/lib$libsuff
+ fi
+ fi
+ else
+ cfg=$OPT_GNUTLS/bin/libgnutls-config
+ check=`$cfg --version 2>/dev/null`
+ if test -n "$check"; then
+ addlib=`$cfg --libs`
+ addcflags=`$cfg --cflags`
+ version=`$cfg --version`
+ gtlslib=`$cfg --prefix`/lib$libsuff
+ else
+ addlib=-lgnutls
+ addld=-L$OPT_GNUTLS/lib$libsuff
+ addcflags=-I$OPT_GNUTLS/include
+ version="" # we just don't know
+ gtlslib=$OPT_GNUTLS/lib$libsuff
+ fi
+ fi
+
+ if test -z "$version"; then
+ version="unknown"
+ fi
+
+ if test -n "$addlib"; then
+
+ CLEANLIBS="$LIBS"
+ CLEANCPPFLAGS="$CPPFLAGS"
+ CLEADLDFLAGS="$LDFLAGS"
+
+ LIBS="$LIBS $addlib"
+ LDFLAGS="$LDFLAGS $addld"
+ if test "$addcflags" != "-I/usr/include"; then
+ CPPFLAGS="$CPPFLAGS $addcflags"
+ fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gnutls_check_version in -lgnutls" >&5
+$as_echo_n "checking for gnutls_check_version in -lgnutls... " >&6; }
+if test "${ac_cv_lib_gnutls_gnutls_check_version+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lgnutls $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#ifdef __cplusplus
+extern "C"
+#endif
+char gnutls_check_version ();
+int main (void)
+{
+return gnutls_check_version ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_gnutls_gnutls_check_version=yes
+else
+ ac_cv_lib_gnutls_gnutls_check_version=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gnutls_gnutls_check_version" >&5
+$as_echo "$ac_cv_lib_gnutls_gnutls_check_version" >&6; }
+if test "x$ac_cv_lib_gnutls_gnutls_check_version" = x""yes; then :
+
+
+$as_echo "#define USE_GNUTLS 1" >>confdefs.h
+
+ USE_GNUTLS=1
+
+ GNUTLS_ENABLED=1
+ USE_GNUTLS="yes"
+ curl_ssl_msg="enabled (GnuTLS)"
+
+else
+
+ LIBS="$CLEANLIBS"
+ CPPFLAGS="$CLEANCPPFLAGS"
+
+fi
+
+
+ if test "x$USE_GNUTLS" = "xyes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: detected GnuTLS version $version" >&5
+$as_echo "$as_me: detected GnuTLS version $version" >&6;}
+
+ if test -n "$gtlslib"; then
+
+ LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$gtlslib"
+ export LD_LIBRARY_PATH
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Added $gtlslib to LD_LIBRARY_PATH" >&5
+$as_echo "$as_me: Added $gtlslib to LD_LIBRARY_PATH" >&6;}
+ fi
+ fi
+
+ fi
+
+ fi
+fi
+
+if test "$GNUTLS_ENABLED" = "1"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gcry_control in -lgcrypt" >&5
+$as_echo_n "checking for gcry_control in -lgcrypt... " >&6; }
+if test "${ac_cv_lib_gcrypt_gcry_control+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lgcrypt $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#ifdef __cplusplus
+extern "C"
+#endif
+char gcry_control ();
+int main (void)
+{
+return gcry_control ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_gcrypt_gcry_control=yes
+else
+ ac_cv_lib_gcrypt_gcry_control=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gcrypt_gcry_control" >&5
+$as_echo "$ac_cv_lib_gcrypt_gcry_control" >&6; }
+if test "x$ac_cv_lib_gcrypt_gcry_control" = x""yes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBGCRYPT 1
+_ACEOF
+
+ LIBS="-lgcrypt $LIBS"
+
+else
+
+ as_fn_error $? "need GnuTLS built with gcrypt to function with GnuTLS" "$LINENO" 5
+
+fi
+
+fi
+
+
+OPT_POLARSSL=no
+
+_cppflags=$CPPFLAGS
+_ldflags=$LDFLAGS
+
+# Check whether --with-polarssl was given.
+if test "${with_polarssl+set}" = set; then :
+ withval=$with_polarssl; OPT_POLARSSL=$withval
+fi
+
+
+if test "$OPENSSL_ENABLED" != "1"; then
+
+ if test X"$OPT_POLARSSL" != Xno; then
+
+ if test "$OPT_POLARSSL" = "yes"; then
+ OPT_POLARSSL=""
+ fi
+
+ if test -z "$OPT_POLARSSL" ; then
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for havege_init in -lpolarssl" >&5
+$as_echo_n "checking for havege_init in -lpolarssl... " >&6; }
+if test "${ac_cv_lib_polarssl_havege_init+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lpolarssl $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#ifdef __cplusplus
+extern "C"
+#endif
+char havege_init ();
+int main (void)
+{
+return havege_init ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_polarssl_havege_init=yes
+else
+ ac_cv_lib_polarssl_havege_init=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_polarssl_havege_init" >&5
+$as_echo "$ac_cv_lib_polarssl_havege_init" >&6; }
+if test "x$ac_cv_lib_polarssl_havege_init" = x""yes; then :
+
+
+$as_echo "#define USE_POLARSSL 1" >>confdefs.h
+
+ USE_POLARSSL=1
+
+ POLARSSL_ENABLED=1
+ USE_POLARSSL="yes"
+ curl_ssl_msg="enabled (PolarSSL)"
+
+fi
+
+ fi
+
+ if test "x$USE_POLARSSL" != "xyes"; then
+ addld=-L$OPT_POLARSSL/lib$libsuff
+ addcflags=-I$OPT_POLARSSL/include
+ polarssllib=$OPT_POLARSSL/lib$libsuff
+
+ LDFLAGS="$LDFLAGS $addld"
+ if test "$addcflags" != "-I/usr/include"; then
+ CPPFLAGS="$CPPFLAGS $addcflags"
+ fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ssl_init in -lpolarssl" >&5
+$as_echo_n "checking for ssl_init in -lpolarssl... " >&6; }
+if test "${ac_cv_lib_polarssl_ssl_init+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lpolarssl $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#ifdef __cplusplus
+extern "C"
+#endif
+char ssl_init ();
+int main (void)
+{
+return ssl_init ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_polarssl_ssl_init=yes
+else
+ ac_cv_lib_polarssl_ssl_init=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_polarssl_ssl_init" >&5
+$as_echo "$ac_cv_lib_polarssl_ssl_init" >&6; }
+if test "x$ac_cv_lib_polarssl_ssl_init" = x""yes; then :
+
+
+$as_echo "#define USE_POLARSSL 1" >>confdefs.h
+
+ USE_POLARSSL=1
+
+ POLARSSL_ENABLED=1
+ USE_POLARSSL="yes"
+ curl_ssl_msg="enabled (PolarSSL)"
+
+else
+
+ CPPFLAGS=$_cppflags
+ LDFLAGS=$_ldflags
+
+fi
+
+ fi
+
+ if test "x$USE_POLARSSL" = "xyes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: detected PolarSSL" >&5
+$as_echo "$as_me: detected PolarSSL" >&6;}
+
+ CURL_LIBS="$CURL_LIBS -lpolarssl"
+ LIBS="$LIBS -lpolarssl"
+
+ if test -n "$polarssllib"; then
+
+ LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$polarssllib"
+ export LD_LIBRARY_PATH
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Added $polarssllib to LD_LIBRARY_PATH" >&5
+$as_echo "$as_me: Added $polarssllib to LD_LIBRARY_PATH" >&6;}
+ fi
+
+ fi
+
+ fi
+fi
+
+OPT_NSS=no
+
+
+# Check whether --with-nss was given.
+if test "${with_nss+set}" = set; then :
+ withval=$with_nss; OPT_NSS=$withval
+fi
+
+
+if test "$OPENSSL_ENABLED" != "1" -a "$GNUTLS_ENABLED" != "1"; then
+
+ if test X"$OPT_NSS" != Xno; then
+ if test "x$OPT_NSS" = "xyes"; then
+
+
+
+ PKGCONFIG="no"
+
+ if test x$cross_compiling = xyes; then
+ # Extract the first word of "${host}-pkg-config", so it can be a program name with args.
+set dummy ${host}-pkg-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_PKGCONFIG+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $PKGCONFIG in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_PKGCONFIG="$PKGCONFIG" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_dummy="$PATH:/usr/bin:/usr/local/bin"
+for as_dir in $as_dummy
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_PKGCONFIG="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_path_PKGCONFIG" && ac_cv_path_PKGCONFIG="no"
+ ;;
+esac
+fi
+PKGCONFIG=$ac_cv_path_PKGCONFIG
+if test -n "$PKGCONFIG"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKGCONFIG" >&5
+$as_echo "$PKGCONFIG" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ fi
+
+ if test x$PKGCONFIG = xno; then
+ # Extract the first word of "pkg-config", so it can be a program name with args.
+set dummy pkg-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_PKGCONFIG+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $PKGCONFIG in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_PKGCONFIG="$PKGCONFIG" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_dummy="$PATH:/usr/bin:/usr/local/bin"
+for as_dir in $as_dummy
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_PKGCONFIG="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_path_PKGCONFIG" && ac_cv_path_PKGCONFIG="no"
+ ;;
+esac
+fi
+PKGCONFIG=$ac_cv_path_PKGCONFIG
+if test -n "$PKGCONFIG"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKGCONFIG" >&5
+$as_echo "$PKGCONFIG" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ fi
+
+ if test x$PKGCONFIG != xno; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nss options with pkg-config" >&5
+$as_echo_n "checking for nss options with pkg-config... " >&6; }
+ itexists=`
+ if test -n ""; then
+ PKG_CONFIG_LIBDIR=""
+ export PKG_CONFIG_LIBDIR
+ fi
+ $PKGCONFIG --exists nss >/dev/null 2>&1 && echo 1`
+
+ if test -z "$itexists"; then
+ PKGCONFIG="no"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: found" >&5
+$as_echo "found" >&6; }
+ fi
+ fi
+
+
+ if test "$PKGCONFIG" != "no" ; then
+ addlib=`$PKGCONFIG --libs nss`
+ addcflags=`$PKGCONFIG --cflags nss`
+ version=`$PKGCONFIG --modversion nss`
+ nssprefix=`$PKGCONFIG --variable=prefix nss`
+ else
+
+ check=`nss-config --version 2>/dev/null`
+ if test -n "$check"; then
+ addlib=`nss-config --libs`
+ addcflags=`nss-config --cflags`
+ version=`nss-config --version`
+ nssprefix=`nss-config --prefix`
+ else
+ addlib="-lnss3"
+ addcflags=""
+ version="unknown"
+ fi
+ fi
+ else
+ # Without pkg-config, we'll kludge in some defaults
+ addlib="-L$OPT_NSS/lib -lssl3 -lsmime3 -lnss3 -lplds4 -lplc4 -lnspr4 -lpthread -ldl"
+ addcflags="-I$OPT_NSS/include"
+ version="unknown"
+ nssprefix=$OPT_NSS
+ fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PK11_CreateGenericObject in -lnss3" >&5
+$as_echo_n "checking for PK11_CreateGenericObject in -lnss3... " >&6; }
+if test "${ac_cv_lib_nss3_PK11_CreateGenericObject+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lnss3 $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#ifdef __cplusplus
+extern "C"
+#endif
+char PK11_CreateGenericObject ();
+int main (void)
+{
+return PK11_CreateGenericObject ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_nss3_PK11_CreateGenericObject=yes
+else
+ ac_cv_lib_nss3_PK11_CreateGenericObject=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nss3_PK11_CreateGenericObject" >&5
+$as_echo "$ac_cv_lib_nss3_PK11_CreateGenericObject" >&6; }
+if test "x$ac_cv_lib_nss3_PK11_CreateGenericObject" = x""yes; then :
+
+
+$as_echo "#define HAVE_PK11_CREATEGENERICOBJECT 1" >>confdefs.h
+
+ HAVE_PK11_CREATEGENERICOBJECT=1
+
+
+fi
+
+ if test -n "$addlib"; then
+
+ CLEANLIBS="$LIBS"
+ CLEANCPPFLAGS="$CPPFLAGS"
+
+ LIBS="$LIBS $addlib"
+ if test "$addcflags" != "-I/usr/include"; then
+ CPPFLAGS="$CPPFLAGS $addcflags"
+ fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for NSS_Initialize in -lnss3" >&5
+$as_echo_n "checking for NSS_Initialize in -lnss3... " >&6; }
+if test "${ac_cv_lib_nss3_NSS_Initialize+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lnss3 $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#ifdef __cplusplus
+extern "C"
+#endif
+char NSS_Initialize ();
+int main (void)
+{
+return NSS_Initialize ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_nss3_NSS_Initialize=yes
+else
+ ac_cv_lib_nss3_NSS_Initialize=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nss3_NSS_Initialize" >&5
+$as_echo "$ac_cv_lib_nss3_NSS_Initialize" >&6; }
+if test "x$ac_cv_lib_nss3_NSS_Initialize" = x""yes; then :
+
+
+$as_echo "#define USE_NSS 1" >>confdefs.h
+
+ USE_NSS=1
+
+ USE_NSS="yes"
+ NSS_ENABLED=1
+ curl_ssl_msg="enabled (NSS)"
+
+else
+
+ LIBS="$CLEANLIBS"
+ CPPFLAGS="$CLEANCPPFLAGS"
+
+fi
+
+
+ if test "x$USE_NSS" = "xyes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: detected NSS version $version" >&5
+$as_echo "$as_me: detected NSS version $version" >&6;}
+
+
+ LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$nssprefix/lib$libsuff"
+ export LD_LIBRARY_PATH
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Added $nssprefix/lib$libsuff to LD_LIBRARY_PATH" >&5
+$as_echo "$as_me: Added $nssprefix/lib$libsuff to LD_LIBRARY_PATH" >&6;}
+ fi
+
+ fi
+
+ fi
+fi
+if test "x$OPENSSL_ENABLED$GNUTLS_ENABLED$NSS_ENABLED$POLARSSL_ENABLED" = "x"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: SSL disabled, you will not be able to use HTTPS, FTPS, NTLM and more." >&5
+$as_echo "$as_me: WARNING: SSL disabled, you will not be able to use HTTPS, FTPS, NTLM and more." >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Use --with-ssl, --with-gnutls, --with-polarssl or --with-nss to address this." >&5
+$as_echo "$as_me: WARNING: Use --with-ssl, --with-gnutls, --with-polarssl or --with-nss to address this." >&2;}
+else
+ # SSL is enabled, genericly
+
+ SSL_ENABLED="1"
+fi
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking default CA cert bundle/path" >&5
+$as_echo_n "checking default CA cert bundle/path... " >&6; }
+
+
+# Check whether --with-ca-bundle was given.
+if test "${with_ca_bundle+set}" = set; then :
+ withval=$with_ca_bundle;
+ want_ca="$withval"
+ if test "x$want_ca" = "xyes"; then
+ as_fn_error $? "--with-ca-bundle=FILE requires a path to the CA bundle" "$LINENO" 5
+ fi
+
+else
+ want_ca="unset"
+fi
+
+
+# Check whether --with-ca-path was given.
+if test "${with_ca_path+set}" = set; then :
+ withval=$with_ca_path;
+ want_capath="$withval"
+ if test "x$want_capath" = "xyes"; then
+ as_fn_error $? "--with-ca-path=DIRECTORY requires a path to the CA path directory" "$LINENO" 5
+ fi
+
+else
+ want_capath="unset"
+fi
+
+
+ if test "x$want_ca" != "xno" -a "x$want_ca" != "xunset" -a \
+ "x$want_capath" != "xno" -a "x$want_capath" != "xunset"; then
+ as_fn_error $? "Can't specify both --with-ca-bundle and --with-ca-path." "$LINENO" 5
+ elif test "x$want_ca" != "xno" -a "x$want_ca" != "xunset"; then
+ ca="$want_ca"
+ capath="no"
+ elif test "x$want_capath" != "xno" -a "x$want_capath" != "xunset"; then
+ if test "x$OPENSSL_ENABLED" != "x1"; then
+ as_fn_error $? "--with-ca-path only works with openSSL" "$LINENO" 5
+ fi
+ capath="$want_capath"
+ ca="no"
+ else
+ ca="no"
+ capath="no"
+ if test "x$want_ca" = "xunset"; then
+ if test "x$prefix" != xNONE; then
+ cac="${prefix}/share/curl/curl-ca-bundle.crt"
+ else
+ cac="$ac_default_prefix/share/curl/curl-ca-bundle.crt"
+ fi
+
+ for a in /etc/ssl/certs/ca-certificates.crt \
+ /etc/pki/tls/certs/ca-bundle.crt \
+ /usr/share/ssl/certs/ca-bundle.crt \
+ /usr/local/share/certs/ca-root.crt \
+ /etc/ssl/cert.pem \
+ "$cac"; do
+ if test -f "$a"; then
+ ca="$a"
+ break
+ fi
+ done
+ fi
+ if test "x$want_capath" = "xunset" -a "x$ca" = "xno" -a \
+ "x$OPENSSL_ENABLED" = "x1"; then
+ for a in /etc/ssl/certs/; do
+ if test -d "$a" && ls "$a"/[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f].0 >/dev/null 2>/dev/null; then
+ capath="$a"
+ break
+ fi
+ done
+ fi
+ fi
+
+
+
+ if test "x$ca" != "xno"; then
+ CURL_CA_BUNDLE='"'$ca'"'
+
+cat >>confdefs.h <<_ACEOF
+#define CURL_CA_BUNDLE "$ca"
+_ACEOF
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ca" >&5
+$as_echo "$ca" >&6; }
+ elif test "x$capath" != "xno"; then
+ CURL_CA_PATH="\"$capath\""
+
+cat >>confdefs.h <<_ACEOF
+#define CURL_CA_PATH "$capath"
+_ACEOF
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $capath (capath)" >&5
+$as_echo "$capath (capath)" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ fi
+
+
+
+OPT_LIBSSH2=off
+
+# Check whether --with-libssh2 was given.
+if test "${with_libssh2+set}" = set; then :
+ withval=$with_libssh2; OPT_LIBSSH2=$withval
+fi
+
+
+if test X"$OPT_LIBSSH2" != Xno; then
+ CLEANLDFLAGS="$LDFLAGS"
+ CLEANCPPFLAGS="$CPPFLAGS"
+ CLEANLIBS="$LIBS"
+
+ case "$OPT_LIBSSH2" in
+ yes)
+
+
+ PKGCONFIG="no"
+
+ if test x$cross_compiling = xyes; then
+ # Extract the first word of "${host}-pkg-config", so it can be a program name with args.
+set dummy ${host}-pkg-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_PKGCONFIG+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $PKGCONFIG in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_PKGCONFIG="$PKGCONFIG" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_dummy="$PATH:/usr/bin:/usr/local/bin"
+for as_dir in $as_dummy
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_PKGCONFIG="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_path_PKGCONFIG" && ac_cv_path_PKGCONFIG="no"
+ ;;
+esac
+fi
+PKGCONFIG=$ac_cv_path_PKGCONFIG
+if test -n "$PKGCONFIG"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKGCONFIG" >&5
+$as_echo "$PKGCONFIG" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ fi
+
+ if test x$PKGCONFIG = xno; then
+ # Extract the first word of "pkg-config", so it can be a program name with args.
+set dummy pkg-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_PKGCONFIG+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $PKGCONFIG in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_PKGCONFIG="$PKGCONFIG" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_dummy="$PATH:/usr/bin:/usr/local/bin"
+for as_dir in $as_dummy
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_PKGCONFIG="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_path_PKGCONFIG" && ac_cv_path_PKGCONFIG="no"
+ ;;
+esac
+fi
+PKGCONFIG=$ac_cv_path_PKGCONFIG
+if test -n "$PKGCONFIG"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKGCONFIG" >&5
+$as_echo "$PKGCONFIG" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ fi
+
+ if test x$PKGCONFIG != xno; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libssh2 options with pkg-config" >&5
+$as_echo_n "checking for libssh2 options with pkg-config... " >&6; }
+ itexists=`
+ if test -n ""; then
+ PKG_CONFIG_LIBDIR=""
+ export PKG_CONFIG_LIBDIR
+ fi
+ $PKGCONFIG --exists libssh2 >/dev/null 2>&1 && echo 1`
+
+ if test -z "$itexists"; then
+ PKGCONFIG="no"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: found" >&5
+$as_echo "found" >&6; }
+ fi
+ fi
+
+
+ if test "$PKGCONFIG" != "no" ; then
+ LIB_SSH2=`$PKGCONFIG --libs-only-l libssh2`
+ LD_SSH2=`$PKGCONFIG --libs-only-L libssh2`
+ CPP_SSH2=`$PKGCONFIG --cflags-only-I libssh2`
+ version=`$PKGCONFIG --modversion libssh2`
+ DIR_SSH2=`echo $LD_SSH2 | $SED -e 's/-L//'`
+ fi
+
+ ;;
+ off)
+ ;;
+ *)
+ PREFIX_SSH2=$OPT_LIBSSH2
+ ;;
+ esac
+
+ if test -n "$PREFIX_SSH2"; then
+ LD_SSH2=-L${PREFIX_SSH2}/lib$libsuff
+ CPP_SSH2=-I${PREFIX_SSH2}/include
+ DIR_SSH2=${PREFIX_SSH2}/lib$libsuff
+ fi
+
+ LDFLAGS="$LDFLAGS $LD_SSH2"
+ CPPFLAGS="$CPPFLAGS $CPP_SSH2"
+ LIBS="$LIBS $LIB_SSH2"
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libssh2_channel_open_ex in -lssh2" >&5
+$as_echo_n "checking for libssh2_channel_open_ex in -lssh2... " >&6; }
+if test "${ac_cv_lib_ssh2_libssh2_channel_open_ex+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lssh2 $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#ifdef __cplusplus
+extern "C"
+#endif
+char libssh2_channel_open_ex ();
+int main (void)
+{
+return libssh2_channel_open_ex ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_ssh2_libssh2_channel_open_ex=yes
+else
+ ac_cv_lib_ssh2_libssh2_channel_open_ex=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ssh2_libssh2_channel_open_ex" >&5
+$as_echo "$ac_cv_lib_ssh2_libssh2_channel_open_ex" >&6; }
+if test "x$ac_cv_lib_ssh2_libssh2_channel_open_ex" = x""yes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBSSH2 1
+_ACEOF
+
+ LIBS="-lssh2 $LIBS"
+
+fi
+
+
+ for ac_header in libssh2.h
+do :
+ ac_fn_c_check_header_mongrel "$LINENO" "libssh2.h" "ac_cv_header_libssh2_h" "$ac_includes_default"
+if test "x$ac_cv_header_libssh2_h" = x""yes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBSSH2_H 1
+_ACEOF
+ curl_ssh_msg="enabled (libSSH2)"
+ LIBSSH2_ENABLED=1
+
+$as_echo "#define USE_LIBSSH2 1" >>confdefs.h
+
+ USE_LIBSSH2=1
+
+
+fi
+
+done
+
+
+ if test X"$OPT_LIBSSH2" != Xoff &&
+ test "$LIBSSH2_ENABLED" != "1"; then
+ as_fn_error $? "libSSH2 libs and/or directories were not found where specified!" "$LINENO" 5
+ fi
+
+ if test "$LIBSSH2_ENABLED" = "1"; then
+ if test -n "$DIR_SSH2"; then
+
+ for ac_func in libssh2_version libssh2_init libssh2_exit \
+ libssh2_scp_send64
+do :
+ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+ LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$DIR_SSH2"
+ export LD_LIBRARY_PATH
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Added $DIR_SSH2 to LD_LIBRARY_PATH" >&5
+$as_echo "$as_me: Added $DIR_SSH2 to LD_LIBRARY_PATH" >&6;}
+ fi
+ else
+ LDFLAGS=$CLEANLDFLAGS
+ CPPFLAGS=$CLEANCPPFLAGS
+ LIBS=$CLEANLIBS
+ fi
+fi
+
+
+OPT_LIBRTMP=off
+
+# Check whether --with-librtmp was given.
+if test "${with_librtmp+set}" = set; then :
+ withval=$with_librtmp; OPT_LIBRTMP=$withval
+fi
+
+
+if test X"$OPT_LIBRTMP" != Xno; then
+ CLEANLDFLAGS="$LDFLAGS"
+ CLEANCPPFLAGS="$CPPFLAGS"
+ CLEANLIBS="$LIBS"
+
+ case "$OPT_LIBRTMP" in
+ yes)
+
+
+ PKGCONFIG="no"
+
+ if test x$cross_compiling = xyes; then
+ # Extract the first word of "${host}-pkg-config", so it can be a program name with args.
+set dummy ${host}-pkg-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_PKGCONFIG+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $PKGCONFIG in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_PKGCONFIG="$PKGCONFIG" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_dummy="$PATH:/usr/bin:/usr/local/bin"
+for as_dir in $as_dummy
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_PKGCONFIG="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_path_PKGCONFIG" && ac_cv_path_PKGCONFIG="no"
+ ;;
+esac
+fi
+PKGCONFIG=$ac_cv_path_PKGCONFIG
+if test -n "$PKGCONFIG"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKGCONFIG" >&5
+$as_echo "$PKGCONFIG" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ fi
+
+ if test x$PKGCONFIG = xno; then
+ # Extract the first word of "pkg-config", so it can be a program name with args.
+set dummy pkg-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_PKGCONFIG+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $PKGCONFIG in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_PKGCONFIG="$PKGCONFIG" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_dummy="$PATH:/usr/bin:/usr/local/bin"
+for as_dir in $as_dummy
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_PKGCONFIG="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_path_PKGCONFIG" && ac_cv_path_PKGCONFIG="no"
+ ;;
+esac
+fi
+PKGCONFIG=$ac_cv_path_PKGCONFIG
+if test -n "$PKGCONFIG"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKGCONFIG" >&5
+$as_echo "$PKGCONFIG" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ fi
+
+ if test x$PKGCONFIG != xno; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for librtmp options with pkg-config" >&5
+$as_echo_n "checking for librtmp options with pkg-config... " >&6; }
+ itexists=`
+ if test -n ""; then
+ PKG_CONFIG_LIBDIR=""
+ export PKG_CONFIG_LIBDIR
+ fi
+ $PKGCONFIG --exists librtmp >/dev/null 2>&1 && echo 1`
+
+ if test -z "$itexists"; then
+ PKGCONFIG="no"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: found" >&5
+$as_echo "found" >&6; }
+ fi
+ fi
+
+
+ if test "$PKGCONFIG" != "no" ; then
+ LIB_RTMP=`$PKGCONFIG --libs-only-l librtmp`
+ LD_RTMP=`$PKGCONFIG --libs-only-L librtmp`
+ CPP_RTMP=`$PKGCONFIG --cflags-only-I librtmp`
+ version=`$PKGCONFIG --modversion librtmp`
+ DIR_RTMP=`echo $LD_RTMP | $SED -e 's/-L//'`
+ fi
+
+ ;;
+ off)
+ LIB_RTMP="-lrtmp"
+ ;;
+ *)
+ PREFIX_RTMP=$OPT_LIBRTMP
+ ;;
+ esac
+
+ if test -n "$PREFIX_RTMP"; then
+ LD_RTMP=-L${PREFIX_RTMP}/lib$libsuff
+ CPP_RTMP=-I${PREFIX_RTMP}/include
+ DIR_RTMP=${PREFIX_RTMP}/lib$libsuff
+ fi
+
+ LDFLAGS="$LDFLAGS $LD_RTMP"
+ CPPFLAGS="$CPPFLAGS $CPP_RTMP"
+ LIBS="$LIBS $LIB_RTMP"
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for RTMP_Init in -lrtmp" >&5
+$as_echo_n "checking for RTMP_Init in -lrtmp... " >&6; }
+if test "${ac_cv_lib_rtmp_RTMP_Init+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lrtmp $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#ifdef __cplusplus
+extern "C"
+#endif
+char RTMP_Init ();
+int main (void)
+{
+return RTMP_Init ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_rtmp_RTMP_Init=yes
+else
+ ac_cv_lib_rtmp_RTMP_Init=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rtmp_RTMP_Init" >&5
+$as_echo "$ac_cv_lib_rtmp_RTMP_Init" >&6; }
+if test "x$ac_cv_lib_rtmp_RTMP_Init" = x""yes; then :
+
+ for ac_header in librtmp/rtmp.h
+do :
+ ac_fn_c_check_header_mongrel "$LINENO" "librtmp/rtmp.h" "ac_cv_header_librtmp_rtmp_h" "$ac_includes_default"
+if test "x$ac_cv_header_librtmp_rtmp_h" = x""yes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBRTMP_RTMP_H 1
+_ACEOF
+ curl_rtmp_msg="enabled (librtmp)"
+ LIBRTMP_ENABLED=1
+
+$as_echo "#define USE_LIBRTMP 1" >>confdefs.h
+
+ USE_LIBRTMP=1
+
+
+fi
+
+done
+
+
+else
+ LDFLAGS=$CLEANLDFLAGS
+ CPPFLAGS=$CLEANCPPFLAGS
+ LIBS=$CLEANLIBS
+
+fi
+
+
+ if test X"$OPT_LIBRTMP" != Xoff &&
+ test "$LIBRTMP_ENABLED" != "1"; then
+ as_fn_error $? "librtmp libs and/or directories were not found where specified!" "$LINENO" 5
+ fi
+
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build with libidn" >&5
+$as_echo_n "checking whether to build with libidn... " >&6; }
+
+# Check whether --with-libidn was given.
+if test "${with_libidn+set}" = set; then :
+ withval=$with_libidn; LIBIDN="$withval"
+fi
+
+
+case "$LIBIDN" in
+ no)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ;;
+ *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+ idn=""
+ if test -n "$LIBIDN"; then
+ if test "x$LIBIDN" != "xyes"; then
+ oldLDFLAGS=$LDFLAGS
+ oldCPPFLAGS=$CPPFLAGS
+ LDFLAGS="$LDFLAGS -L$LIBIDN/lib"
+ CPPFLAGS="$CPPFLAGS -I$LIBIDN/include"
+ idn="yes"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for idna_to_ascii_4i in -lidn" >&5
+$as_echo_n "checking for idna_to_ascii_4i in -lidn... " >&6; }
+if test "${ac_cv_lib_idn_idna_to_ascii_4i+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lidn $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#ifdef __cplusplus
+extern "C"
+#endif
+char idna_to_ascii_4i ();
+int main (void)
+{
+return idna_to_ascii_4i ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_idn_idna_to_ascii_4i=yes
+else
+ ac_cv_lib_idn_idna_to_ascii_4i=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_idn_idna_to_ascii_4i" >&5
+$as_echo "$ac_cv_lib_idn_idna_to_ascii_4i" >&6; }
+if test "x$ac_cv_lib_idn_idna_to_ascii_4i" = x""yes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBIDN 1
+_ACEOF
+
+ LIBS="-lidn $LIBS"
+
+else
+ idn=""
+ LDFLAGS=$oldLDFLAGS
+ CPPFLAGS=$oldCPPFLAGS
+fi
+
+ fi
+ fi
+
+ if test "x$idn" != "xyes"; then
+ idn="yes"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for idna_to_ascii_lz in -lidn" >&5
+$as_echo_n "checking for idna_to_ascii_lz in -lidn... " >&6; }
+if test "${ac_cv_lib_idn_idna_to_ascii_lz+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lidn $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#ifdef __cplusplus
+extern "C"
+#endif
+char idna_to_ascii_lz ();
+int main (void)
+{
+return idna_to_ascii_lz ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_idn_idna_to_ascii_lz=yes
+else
+ ac_cv_lib_idn_idna_to_ascii_lz=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_idn_idna_to_ascii_lz" >&5
+$as_echo "$ac_cv_lib_idn_idna_to_ascii_lz" >&6; }
+if test "x$ac_cv_lib_idn_idna_to_ascii_lz" = x""yes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBIDN 1
+_ACEOF
+
+ LIBS="-lidn $LIBS"
+
+else
+ idn=""
+fi
+
+ fi
+
+ if test "x$idn" = "xyes"; then
+ curl_idn_msg="enabled"
+ IDN_ENABLED=1
+
+ for ac_func in idn_free idna_strerror tld_strerror
+do :
+ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+ for ac_header in idn-free.h tld.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+ fi
+
+ ;;
+esac
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
+$as_echo_n "checking for ANSI C header files... " >&6; }
+if test "${ac_cv_header_stdc+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_header_stdc=yes
+else
+ ac_cv_header_stdc=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+ # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "memchr" >/dev/null 2>&1; then :
+
+else
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "free" >/dev/null 2>&1; then :
+
+else
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+ if test "$cross_compiling" = yes; then :
+ :
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <ctype.h>
+#include <stdlib.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+ (('a' <= (c) && (c) <= 'i') \
+ || ('j' <= (c) && (c) <= 'r') \
+ || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+ int i;
+ for (i = 0; i < 256; i++)
+ if (XOR (islower (i), ISLOWER (i))
+ || toupper (i) != TOUPPER (i))
+ return 2;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+
+else
+ ac_cv_header_stdc=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
+$as_echo "$ac_cv_header_stdc" >&6; }
+if test $ac_cv_header_stdc = yes; then
+
+$as_echo "#define STDC_HEADERS 1" >>confdefs.h
+
+fi
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for malloc.h" >&5
+$as_echo_n "checking for malloc.h... " >&6; }
+if test "${ac_cv_header_malloc_h+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#include <malloc.h>
+
+int main (void)
+{
+
+ void *p = malloc(10);
+ void *q = calloc(10,10);
+ free(p);
+ free(q);
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ ac_cv_header_malloc_h="yes"
+
+else
+
+ ac_cv_header_malloc_h="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_malloc_h" >&5
+$as_echo "$ac_cv_header_malloc_h" >&6; }
+ if test "$ac_cv_header_malloc_h" = "yes"; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_MALLOC_H 1
+_ACEOF
+
+ #
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#include <stdlib.h>
+
+int main (void)
+{
+
+ void *p = malloc(10);
+ void *q = calloc(10,10);
+ free(p);
+ free(q);
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ curl_cv_need_header_malloc_h="no"
+
+else
+
+ curl_cv_need_header_malloc_h="yes"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ #
+ case "$curl_cv_need_header_malloc_h" in
+ yes)
+
+cat >>confdefs.h <<_ACEOF
+#define NEED_MALLOC_H 1
+_ACEOF
+
+ ;;
+ esac
+ fi
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for memory.h" >&5
+$as_echo_n "checking for memory.h... " >&6; }
+if test "${ac_cv_header_memory_h+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#include <memory.h>
+
+int main (void)
+{
+
+ void *p = malloc(10);
+ void *q = calloc(10,10);
+ free(p);
+ free(q);
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ ac_cv_header_memory_h="yes"
+
+else
+
+ ac_cv_header_memory_h="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_memory_h" >&5
+$as_echo "$ac_cv_header_memory_h" >&6; }
+ if test "$ac_cv_header_memory_h" = "yes"; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_MEMORY_H 1
+_ACEOF
+
+ #
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#include <stdlib.h>
+
+int main (void)
+{
+
+ void *p = malloc(10);
+ void *q = calloc(10,10);
+ free(p);
+ free(q);
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ curl_cv_need_header_memory_h="no"
+
+else
+
+ curl_cv_need_header_memory_h="yes"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ #
+ case "$curl_cv_need_header_memory_h" in
+ yes)
+
+cat >>confdefs.h <<_ACEOF
+#define NEED_MEMORY_H 1
+_ACEOF
+
+ ;;
+ esac
+ fi
+
+
+for ac_header in sys/types.h \
+ sys/time.h \
+ sys/select.h \
+ sys/socket.h \
+ sys/ioctl.h \
+ sys/uio.h \
+ assert.h \
+ unistd.h \
+ stdlib.h \
+ limits.h \
+ arpa/inet.h \
+ net/if.h \
+ netinet/in.h \
+ sys/un.h \
+ netinet/tcp.h \
+ netdb.h \
+ sys/sockio.h \
+ sys/stat.h \
+ sys/param.h \
+ termios.h \
+ termio.h \
+ sgtty.h \
+ fcntl.h \
+ alloca.h \
+ time.h \
+ io.h \
+ pwd.h \
+ utime.h \
+ sys/utime.h \
+ sys/poll.h \
+ poll.h \
+ socket.h \
+ sys/resource.h \
+ libgen.h \
+ locale.h \
+ errno.h \
+ stdbool.h \
+ arpa/tftp.h \
+ sys/filio.h \
+ setjmp.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h>
+#endif
+#ifdef HAVE_SYS_SELECT_H
+#include <sys/select.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#ifdef HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+#ifdef HAVE_SYS_UN_H
+#include <sys/un.h>
+#endif
+
+
+"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5
+$as_echo_n "checking for an ANSI C-conforming const... " >&6; }
+if test "${ac_cv_c_const+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int main (void)
+{
+/* FIXME: Include the comments suggested by Paul. */
+#ifndef __cplusplus
+ /* Ultrix mips cc rejects this. */
+ typedef int charset[2];
+ const charset cs;
+ /* SunOS 4.1.1 cc rejects this. */
+ char const *const *pcpcc;
+ char **ppc;
+ /* NEC SVR4.0.2 mips cc rejects this. */
+ struct point {int x, y;};
+ static struct point const zero = {0,0};
+ /* AIX XL C 1.02.0.0 rejects this.
+ It does not let you subtract one const X* pointer from another in
+ an arm of an if-expression whose if-part is not a constant
+ expression */
+ const char *g = "string";
+ pcpcc = &g + (g ? g-g : 0);
+ /* HPUX 7.0 cc rejects these. */
+ ++pcpcc;
+ ppc = (char**) pcpcc;
+ pcpcc = (char const *const *) ppc;
+ { /* SCO 3.2v4 cc rejects this. */
+ char *t;
+ char const *s = 0 ? (char *) 0 : (char const *) 0;
+
+ *t++ = 0;
+ if (s) return 0;
+ }
+ { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */
+ int x[] = {25, 17};
+ const int *foo = &x[0];
+ ++foo;
+ }
+ { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
+ typedef const int *iptr;
+ iptr p = 0;
+ ++p;
+ }
+ { /* AIX XL C 1.02.0.0 rejects this saying
+ "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
+ struct s { int j; const int *ap[3]; };
+ struct s *b; b->j = 5;
+ }
+ { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
+ const int foo = 10;
+ if (!foo) return 0;
+ }
+ return !cs[0] && !zero.x;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_c_const=yes
+else
+ ac_cv_c_const=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5
+$as_echo "$ac_cv_c_const" >&6; }
+if test $ac_cv_c_const = no; then
+
+$as_echo "#define const /**/" >>confdefs.h
+
+fi
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for compiler support of C99 variadic macro style" >&5
+$as_echo_n "checking for compiler support of C99 variadic macro style... " >&6; }
+if test "${curl_cv_variadic_macros_c99+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#define c99_vmacro3(first, ...) fun3(first, __VA_ARGS__)
+#define c99_vmacro2(first, ...) fun2(first, __VA_ARGS__)
+ int fun3(int arg1, int arg2, int arg3);
+ int fun2(int arg1, int arg2);
+ int fun3(int arg1, int arg2, int arg3)
+ { return arg1 + arg2 + arg3; }
+ int fun2(int arg1, int arg2)
+ { return arg1 + arg2; }
+
+int main (void)
+{
+
+ int res3 = c99_vmacro3(1, 2, 3);
+ int res2 = c99_vmacro2(1, 2);
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ curl_cv_variadic_macros_c99="yes"
+
+else
+
+ curl_cv_variadic_macros_c99="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $curl_cv_variadic_macros_c99" >&5
+$as_echo "$curl_cv_variadic_macros_c99" >&6; }
+ case "$curl_cv_variadic_macros_c99" in
+ yes)
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_VARIADIC_MACROS_C99 1
+_ACEOF
+
+ ;;
+ esac
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for compiler support of old gcc variadic macro style" >&5
+$as_echo_n "checking for compiler support of old gcc variadic macro style... " >&6; }
+if test "${curl_cv_variadic_macros_gcc+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#define gcc_vmacro3(first, args...) fun3(first, args)
+#define gcc_vmacro2(first, args...) fun2(first, args)
+ int fun3(int arg1, int arg2, int arg3);
+ int fun2(int arg1, int arg2);
+ int fun3(int arg1, int arg2, int arg3)
+ { return arg1 + arg2 + arg3; }
+ int fun2(int arg1, int arg2)
+ { return arg1 + arg2; }
+
+int main (void)
+{
+
+ int res3 = gcc_vmacro3(1, 2, 3);
+ int res2 = gcc_vmacro2(1, 2);
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ curl_cv_variadic_macros_gcc="yes"
+
+else
+
+ curl_cv_variadic_macros_gcc="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $curl_cv_variadic_macros_gcc" >&5
+$as_echo "$curl_cv_variadic_macros_gcc" >&6; }
+ case "$curl_cv_variadic_macros_gcc" in
+ yes)
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_VARIADIC_MACROS_GCC 1
+_ACEOF
+
+ ;;
+ esac
+
+ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default"
+if test "x$ac_cv_type_size_t" = x""yes; then :
+
+else
+
+cat >>confdefs.h <<_ACEOF
+#define size_t unsigned int
+_ACEOF
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether time.h and sys/time.h may both be included" >&5
+$as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; }
+if test "${ac_cv_header_time+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+#include <sys/time.h>
+#include <time.h>
+
+int main (void)
+{
+if ((struct tm *) 0)
+return 0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_header_time=yes
+else
+ ac_cv_header_time=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_time" >&5
+$as_echo "$ac_cv_header_time" >&6; }
+if test $ac_cv_header_time = yes; then
+
+$as_echo "#define TIME_WITH_SYS_TIME 1" >>confdefs.h
+
+fi
+
+
+ for ac_header in sys/types.h sys/time.h time.h sys/socket.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct timeval" >&5
+$as_echo_n "checking for struct timeval... " >&6; }
+if test "${ac_cv_struct_timeval+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#undef inline
+#ifdef HAVE_WINDOWS_H
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#ifdef HAVE_WINSOCK2_H
+#include <winsock2.h>
+#else
+#ifdef HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
+#endif
+#endif
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h>
+#ifdef TIME_WITH_SYS_TIME
+#include <time.h>
+#endif
+#else
+#ifdef HAVE_TIME_H
+#include <time.h>
+#endif
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+
+int main (void)
+{
+
+ struct timeval ts;
+ ts.tv_sec = 0;
+ ts.tv_usec = 0;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ ac_cv_struct_timeval="yes"
+
+else
+
+ ac_cv_struct_timeval="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_timeval" >&5
+$as_echo "$ac_cv_struct_timeval" >&6; }
+ case "$ac_cv_struct_timeval" in
+ yes)
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_TIMEVAL 1
+_ACEOF
+
+ ;;
+ esac
+
+
+
+ if test "x$cross_compiling" != xyes; then
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking run-time libs availability" >&5
+$as_echo_n "checking run-time libs availability... " >&6; }
+ if test "$cross_compiling" = yes; then :
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run test program while cross compiling
+See \`config.log' for more details" "$LINENO" 5 ; }
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+main()
+{
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: fine" >&5
+$as_echo "fine" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5
+$as_echo "failed" >&6; }
+ as_fn_error $? "one or more libs available at link-time are not available run-time. Libs used at link-time: $LIBS" "$LINENO" 5
+
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+ fi
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of size_t" >&5
+$as_echo_n "checking size of size_t... " >&6; }
+if test "${ac_cv_sizeof_size_t+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (size_t))" "ac_cv_sizeof_size_t" "$ac_includes_default"; then :
+
+else
+ if test "$ac_cv_type_size_t" = yes; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (size_t)
+See \`config.log' for more details" "$LINENO" 5 ; }
+ else
+ ac_cv_sizeof_size_t=0
+ fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_size_t" >&5
+$as_echo "$ac_cv_sizeof_size_t" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_SIZE_T $ac_cv_sizeof_size_t
+_ACEOF
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5
+$as_echo_n "checking size of long... " >&6; }
+if test "${ac_cv_sizeof_long+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default"; then :
+
+else
+ if test "$ac_cv_type_long" = yes; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (long)
+See \`config.log' for more details" "$LINENO" 5 ; }
+ else
+ ac_cv_sizeof_long=0
+ fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5
+$as_echo "$ac_cv_sizeof_long" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_LONG $ac_cv_sizeof_long
+_ACEOF
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int" >&5
+$as_echo_n "checking size of int... " >&6; }
+if test "${ac_cv_sizeof_int+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int" "$ac_includes_default"; then :
+
+else
+ if test "$ac_cv_type_int" = yes; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (int)
+See \`config.log' for more details" "$LINENO" 5 ; }
+ else
+ ac_cv_sizeof_int=0
+ fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5
+$as_echo "$ac_cv_sizeof_int" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_INT $ac_cv_sizeof_int
+_ACEOF
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of short" >&5
+$as_echo_n "checking size of short... " >&6; }
+if test "${ac_cv_sizeof_short+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (short))" "ac_cv_sizeof_short" "$ac_includes_default"; then :
+
+else
+ if test "$ac_cv_type_short" = yes; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (short)
+See \`config.log' for more details" "$LINENO" 5 ; }
+ else
+ ac_cv_sizeof_short=0
+ fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_short" >&5
+$as_echo "$ac_cv_sizeof_short" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_SHORT $ac_cv_sizeof_short
+_ACEOF
+
+
+
+ if test -z "$ac_cv_sizeof_long" ||
+ test "$ac_cv_sizeof_long" -eq "0"; then
+ as_fn_error $? "cannot find out size of long." "$LINENO" 5
+ fi
+
+cat >>confdefs.h <<_EOF
+#define CURL_SIZEOF_LONG $ac_cv_sizeof_long
+_EOF
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of time_t" >&5
+$as_echo_n "checking size of time_t... " >&6; }
+if test "${ac_cv_sizeof_time_t+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (time_t))" "ac_cv_sizeof_time_t" "$ac_includes_default"; then :
+
+else
+ if test "$ac_cv_type_time_t" = yes; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (time_t)
+See \`config.log' for more details" "$LINENO" 5 ; }
+ else
+ ac_cv_sizeof_time_t=0
+ fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_time_t" >&5
+$as_echo "$ac_cv_sizeof_time_t" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_TIME_T $ac_cv_sizeof_time_t
+_ACEOF
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of off_t" >&5
+$as_echo_n "checking size of off_t... " >&6; }
+if test "${ac_cv_sizeof_off_t+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (off_t))" "ac_cv_sizeof_off_t" "$ac_includes_default"; then :
+
+else
+ if test "$ac_cv_type_off_t" = yes; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (off_t)
+See \`config.log' for more details" "$LINENO" 5 ; }
+ else
+ ac_cv_sizeof_off_t=0
+ fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_off_t" >&5
+$as_echo "$ac_cv_sizeof_off_t" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_OFF_T $ac_cv_sizeof_off_t
+_ACEOF
+
+
+
+soname_bump=no
+if test x"$ac_cv_native_windows" != "xyes" &&
+ test $ac_cv_sizeof_off_t -ne $curl_sizeof_curl_off_t; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: This libcurl built is probably not ABI compatible with previous" >&5
+$as_echo "$as_me: WARNING: This libcurl built is probably not ABI compatible with previous" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: builds! You MUST read lib/README.curl_off_t to figure it out." >&5
+$as_echo "$as_me: WARNING: builds! You MUST read lib/README.curl_off_t to figure it out." >&2;}
+ soname_bump=yes
+fi
+
+
+ac_fn_c_check_type "$LINENO" "long long" "ac_cv_type_long_long" "$ac_includes_default"
+if test "x$ac_cv_type_long_long" = x""yes; then :
+
+$as_echo "#define HAVE_LONGLONG 1" >>confdefs.h
+
+ longlong="yes"
+
+fi
+
+
+if test "xyes" = "x$longlong"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if numberLL works" >&5
+$as_echo_n "checking if numberLL works... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+long long val = 1000LL;
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+$as_echo "#define HAVE_LL 1" >>confdefs.h
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+# check for ssize_t
+ac_fn_c_check_type "$LINENO" "ssize_t" "ac_cv_type_ssize_t" "$ac_includes_default"
+if test "x$ac_cv_type_ssize_t" = x""yes; then :
+
+else
+
+$as_echo "#define ssize_t int" >>confdefs.h
+
+fi
+
+
+# check for bool type
+ac_fn_c_check_type "$LINENO" "bool" "ac_cv_type_bool" "
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_STDBOOL_H
+#include <stdbool.h>
+#endif
+
+"
+if test "x$ac_cv_type_bool" = x""yes; then :
+
+
+$as_echo "#define HAVE_BOOL_T 1" >>confdefs.h
+
+
+fi
+
+
+
+curl_includes_ws2tcpip="\
+/* includes start */
+#ifdef HAVE_WINDOWS_H
+# ifndef WIN32_LEAN_AND_MEAN
+# define WIN32_LEAN_AND_MEAN
+# endif
+# include <windows.h>
+# ifdef HAVE_WINSOCK2_H
+# include <winsock2.h>
+# ifdef HAVE_WS2TCPIP_H
+# include <ws2tcpip.h>
+# endif
+# endif
+#endif
+/* includes end */"
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for windows.h" >&5
+$as_echo_n "checking for windows.h... " >&6; }
+if test "${ac_cv_header_windows_h+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#undef inline
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+
+int main (void)
+{
+
+#if defined(__CYGWIN__) || defined(__CEGCC__)
+ HAVE_WINDOWS_H shall not be defined.
+#else
+ int dummy=2*WINVER;
+#endif
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ ac_cv_header_windows_h="yes"
+
+else
+
+ ac_cv_header_windows_h="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_windows_h" >&5
+$as_echo "$ac_cv_header_windows_h" >&6; }
+ case "$ac_cv_header_windows_h" in
+ yes)
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_WINDOWS_H 1
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define WIN32_LEAN_AND_MEAN 1
+_ACEOF
+
+ ;;
+ esac
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for winsock2.h" >&5
+$as_echo_n "checking for winsock2.h... " >&6; }
+if test "${ac_cv_header_winsock2_h+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#undef inline
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#include <winsock2.h>
+
+int main (void)
+{
+
+#if defined(__CYGWIN__) || defined(__CEGCC__) || defined(__MINGW32CE__)
+ HAVE_WINSOCK2_H shall not be defined.
+#else
+ int dummy=2*IPPROTO_ESP;
+#endif
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ ac_cv_header_winsock2_h="yes"
+
+else
+
+ ac_cv_header_winsock2_h="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_winsock2_h" >&5
+$as_echo "$ac_cv_header_winsock2_h" >&6; }
+ case "$ac_cv_header_winsock2_h" in
+ yes)
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_WINSOCK2_H 1
+_ACEOF
+
+ ;;
+ esac
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ws2tcpip.h" >&5
+$as_echo_n "checking for ws2tcpip.h... " >&6; }
+if test "${ac_cv_header_ws2tcpip_h+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#undef inline
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#include <winsock2.h>
+#include <ws2tcpip.h>
+
+int main (void)
+{
+
+#if defined(__CYGWIN__) || defined(__CEGCC__) || defined(__MINGW32CE__)
+ HAVE_WS2TCPIP_H shall not be defined.
+#else
+ int dummy=2*IP_PKTINFO;
+#endif
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ ac_cv_header_ws2tcpip_h="yes"
+
+else
+
+ ac_cv_header_ws2tcpip_h="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_ws2tcpip_h" >&5
+$as_echo "$ac_cv_header_ws2tcpip_h" >&6; }
+ case "$ac_cv_header_ws2tcpip_h" in
+ yes)
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_WS2TCPIP_H 1
+_ACEOF
+
+ ;;
+ esac
+
+
+
+curl_includes_sys_socket="\
+/* includes start */
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+# include <sys/socket.h>
+#endif
+/* includes end */"
+ for ac_header in sys/types.h sys/socket.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$curl_includes_sys_socket
+"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+curl_preprocess_callconv="\
+/* preprocess start */
+#ifdef HAVE_WINDOWS_H
+# define FUNCALLCONV __stdcall
+#else
+# define FUNCALLCONV
+#endif
+/* preprocess end */"
+
+
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for curl_socklen_t data type" >&5
+$as_echo_n "checking for curl_socklen_t data type... " >&6; }
+ curl_typeof_curl_socklen_t="unknown"
+ for arg1 in int SOCKET; do
+ for arg2 in 'struct sockaddr' void; do
+ for t in socklen_t int size_t 'unsigned int' long 'unsigned long' void; do
+ if test "$curl_typeof_curl_socklen_t" = "unknown"; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_ws2tcpip
+ $curl_includes_sys_socket
+ $curl_preprocess_callconv
+ extern int FUNCALLCONV getpeername($arg1, $arg2 *, $t *);
+
+int main (void)
+{
+
+ $t *lenptr = 0;
+ if(0 != getpeername(0, 0, lenptr))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ curl_typeof_curl_socklen_t="$t"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ done
+ done
+ done
+ for t in socklen_t int; do
+ if test "$curl_typeof_curl_socklen_t" = "void"; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_sys_socket
+ typedef $t curl_socklen_t;
+
+int main (void)
+{
+
+ curl_socklen_t dummy;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ curl_typeof_curl_socklen_t="$t"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ done
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $curl_typeof_curl_socklen_t" >&5
+$as_echo "$curl_typeof_curl_socklen_t" >&6; }
+ if test "$curl_typeof_curl_socklen_t" = "void" ||
+ test "$curl_typeof_curl_socklen_t" = "unknown"; then
+ as_fn_error $? "cannot find data type for curl_socklen_t." "$LINENO" 5
+ fi
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of curl_socklen_t" >&5
+$as_echo_n "checking size of curl_socklen_t... " >&6; }
+ curl_sizeof_curl_socklen_t="unknown"
+ curl_pull_headers_socklen_t="unknown"
+ if test "$ac_cv_header_ws2tcpip_h" = "yes"; then
+ tst_pull_header_checks='none ws2tcpip'
+ tst_size_checks='4'
+ else
+ tst_pull_header_checks='none systypes syssocket'
+ tst_size_checks='4 8 2'
+ fi
+ for tst_size in $tst_size_checks; do
+ for tst_pull_headers in $tst_pull_header_checks; do
+ if test "$curl_sizeof_curl_socklen_t" = "unknown"; then
+ case $tst_pull_headers in
+ ws2tcpip)
+ tmp_includes="$curl_includes_ws2tcpip"
+ ;;
+ systypes)
+ tmp_includes="$curl_includes_sys_types"
+ ;;
+ syssocket)
+ tmp_includes="$curl_includes_sys_socket"
+ ;;
+ *)
+ tmp_includes=""
+ ;;
+ esac
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $tmp_includes
+ typedef $curl_typeof_curl_socklen_t curl_socklen_t;
+ typedef char dummy_arr[sizeof(curl_socklen_t) == $tst_size ? 1 : -1];
+
+int main (void)
+{
+
+ curl_socklen_t dummy;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ curl_sizeof_curl_socklen_t="$tst_size"
+ curl_pull_headers_socklen_t="$tst_pull_headers"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ done
+ done
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $curl_sizeof_curl_socklen_t" >&5
+$as_echo "$curl_sizeof_curl_socklen_t" >&6; }
+ if test "$curl_sizeof_curl_socklen_t" = "unknown"; then
+ as_fn_error $? "cannot find out size of curl_socklen_t." "$LINENO" 5
+ fi
+ #
+ case $curl_pull_headers_socklen_t in
+ ws2tcpip)
+
+cat >>confdefs.h <<_EOF
+#define CURL_PULL_WS2TCPIP_H 1
+_EOF
+
+ ;;
+ systypes)
+
+cat >>confdefs.h <<_EOF
+#define CURL_PULL_SYS_TYPES_H 1
+_EOF
+
+ ;;
+ syssocket)
+
+cat >>confdefs.h <<_EOF
+#define CURL_PULL_SYS_TYPES_H 1
+_EOF
+
+
+cat >>confdefs.h <<_EOF
+#define CURL_PULL_SYS_SOCKET_H 1
+_EOF
+
+ ;;
+ esac
+
+cat >>confdefs.h <<_EOF
+#define CURL_TYPEOF_CURL_SOCKLEN_T $curl_typeof_curl_socklen_t
+_EOF
+
+
+cat >>confdefs.h <<_EOF
+#define CURL_SIZEOF_CURL_SOCKLEN_T $curl_sizeof_curl_socklen_t
+_EOF
+
+
+
+
+ ac_fn_c_check_type "$LINENO" "in_addr_t" "ac_cv_type_in_addr_t" "
+#undef inline
+#ifdef HAVE_WINDOWS_H
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#ifdef HAVE_WINSOCK2_H
+#include <winsock2.h>
+#else
+#ifdef HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
+#endif
+#else
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#ifdef HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+#ifdef HAVE_ARPA_INET_H
+#include <arpa/inet.h>
+#endif
+#endif
+
+"
+if test "x$ac_cv_type_in_addr_t" = x""yes; then :
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for in_addr_t equivalent" >&5
+$as_echo_n "checking for in_addr_t equivalent... " >&6; }
+if test "${curl_cv_in_addr_t_equiv+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ curl_cv_in_addr_t_equiv="unknown"
+ for t in "unsigned long" int size_t unsigned long; do
+ if test "$curl_cv_in_addr_t_equiv" = "unknown"; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#undef inline
+#ifdef HAVE_WINDOWS_H
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#ifdef HAVE_WINSOCK2_H
+#include <winsock2.h>
+#else
+#ifdef HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
+#endif
+#else
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#ifdef HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+#ifdef HAVE_ARPA_INET_H
+#include <arpa/inet.h>
+#endif
+#endif
+
+int main (void)
+{
+
+ $t data = inet_addr ("1.2.3.4");
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ curl_cv_in_addr_t_equiv="$t"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ fi
+ done
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $curl_cv_in_addr_t_equiv" >&5
+$as_echo "$curl_cv_in_addr_t_equiv" >&6; }
+ case "$curl_cv_in_addr_t_equiv" in
+ unknown)
+ as_fn_error $? "Cannot find a type to use in place of in_addr_t" "$LINENO" 5
+ ;;
+ *)
+
+cat >>confdefs.h <<_ACEOF
+#define in_addr_t $curl_cv_in_addr_t_equiv
+_ACEOF
+
+ ;;
+ esac
+
+fi
+
+
+
+
+ ac_fn_c_check_type "$LINENO" "struct sockaddr_storage" "ac_cv_type_struct_sockaddr_storage" "
+#undef inline
+#ifdef HAVE_WINDOWS_H
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#ifdef HAVE_WINSOCK2_H
+#include <winsock2.h>
+#endif
+#else
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#ifdef HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+#ifdef HAVE_ARPA_INET_H
+#include <arpa/inet.h>
+#endif
+#endif
+
+"
+if test "x$ac_cv_type_struct_sockaddr_storage" = x""yes; then :
+
+$as_echo "#define HAVE_STRUCT_SOCKADDR_STORAGE 1" >>confdefs.h
+
+fi
+
+
+
+
+ for ac_header in signal.h
+do :
+ ac_fn_c_check_header_mongrel "$LINENO" "signal.h" "ac_cv_header_signal_h" "$ac_includes_default"
+if test "x$ac_cv_header_signal_h" = x""yes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_SIGNAL_H 1
+_ACEOF
+
+fi
+
+done
+
+ ac_fn_c_check_type "$LINENO" "sig_atomic_t" "ac_cv_type_sig_atomic_t" "
+#ifdef HAVE_SIGNAL_H
+#include <signal.h>
+#endif
+
+"
+if test "x$ac_cv_type_sig_atomic_t" = x""yes; then :
+
+
+$as_echo "#define HAVE_SIG_ATOMIC_T 1" >>confdefs.h
+
+
+fi
+
+ case "$ac_cv_type_sig_atomic_t" in
+ yes)
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if sig_atomic_t is already defined as volatile" >&5
+$as_echo_n "checking if sig_atomic_t is already defined as volatile... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#ifdef HAVE_SIGNAL_H
+#include <signal.h>
+#endif
+
+int main (void)
+{
+
+ static volatile sig_atomic_t dummy = 0;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ac_cv_sig_atomic_t_volatile="no"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ ac_cv_sig_atomic_t_volatile="yes"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ #
+ if test "$ac_cv_sig_atomic_t_volatile" = "yes"; then
+
+$as_echo "#define HAVE_SIG_ATOMIC_T_VOLATILE 1" >>confdefs.h
+
+ fi
+ ;;
+ esac
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking return type of signal handlers" >&5
+$as_echo_n "checking return type of signal handlers... " >&6; }
+if test "${ac_cv_type_signal+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+#include <signal.h>
+
+int main (void)
+{
+return *(signal (0, 0)) (0) == 1;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_type_signal=int
+else
+ ac_cv_type_signal=void
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_signal" >&5
+$as_echo "$ac_cv_type_signal" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define RETSIGTYPE $ac_cv_type_signal
+_ACEOF
+
+
+
+
+ for ac_header in sys/select.h sys/socket.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for select" >&5
+$as_echo_n "checking for select... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#undef inline
+#ifdef HAVE_WINDOWS_H
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#ifdef HAVE_WINSOCK2_H
+#include <winsock2.h>
+#else
+#ifdef HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
+#endif
+#endif
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h>
+#ifdef TIME_WITH_SYS_TIME
+#include <time.h>
+#endif
+#else
+#ifdef HAVE_TIME_H
+#include <time.h>
+#endif
+#endif
+#ifndef HAVE_WINDOWS_H
+#ifdef HAVE_SYS_SELECT_H
+#include <sys/select.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#endif
+
+int main (void)
+{
+
+ select(0, 0, 0, 0, 0);
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ curl_cv_select="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ curl_cv_select="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ #
+ if test "$curl_cv_select" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking types of args and return type for select" >&5
+$as_echo_n "checking types of args and return type for select... " >&6; }
+if test "${curl_cv_func_select_args+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ curl_cv_func_select_args="unknown"
+ for sel_retv in 'int' 'ssize_t'; do
+ for sel_arg1 in 'int' 'ssize_t' 'size_t' 'unsigned long int' 'unsigned int'; do
+ for sel_arg234 in 'fd_set *' 'int *' 'void *'; do
+ for sel_arg5 in 'struct timeval *' 'const struct timeval *'; do
+ if test "$curl_cv_func_select_args" = "unknown"; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#undef inline
+#ifdef HAVE_WINDOWS_H
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#ifdef HAVE_WINSOCK2_H
+#include <winsock2.h>
+#else
+#ifdef HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
+#endif
+#define SELECTCALLCONV PASCAL
+#endif
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h>
+#ifdef TIME_WITH_SYS_TIME
+#include <time.h>
+#endif
+#else
+#ifdef HAVE_TIME_H
+#include <time.h>
+#endif
+#endif
+#ifndef HAVE_WINDOWS_H
+#ifdef HAVE_SYS_SELECT_H
+#include <sys/select.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#define SELECTCALLCONV
+#endif
+#ifndef HAVE_STRUCT_TIMEVAL
+ struct timeval {
+ long tv_sec;
+ long tv_usec;
+ };
+#endif
+ extern $sel_retv SELECTCALLCONV select($sel_arg1,
+ $sel_arg234,
+ $sel_arg234,
+ $sel_arg234,
+ $sel_arg5);
+
+int main (void)
+{
+
+ $sel_arg1 nfds=0;
+ $sel_arg234 rfds=0;
+ $sel_arg234 wfds=0;
+ $sel_arg234 efds=0;
+ $sel_retv res = select(nfds, rfds, wfds, efds, 0);
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ curl_cv_func_select_args="$sel_arg1,$sel_arg234,$sel_arg5,$sel_retv"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ done
+ done
+ done
+ done
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $curl_cv_func_select_args" >&5
+$as_echo "$curl_cv_func_select_args" >&6; } # AC-CACHE-CHECK
+ if test "$curl_cv_func_select_args" = "unknown"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Cannot find proper types to use for select args" >&5
+$as_echo "$as_me: WARNING: Cannot find proper types to use for select args" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: HAVE_SELECT will not be defined" >&5
+$as_echo "$as_me: WARNING: HAVE_SELECT will not be defined" >&2;}
+ else
+ select_prev_IFS=$IFS; IFS=','
+ set dummy `echo "$curl_cv_func_select_args" | sed 's/\*/\*/g'`
+ IFS=$select_prev_IFS
+ shift
+ #
+ sel_qual_type_arg5=$3
+ #
+
+cat >>confdefs.h <<_ACEOF
+#define SELECT_TYPE_ARG1 $1
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define SELECT_TYPE_ARG234 $2
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define SELECT_TYPE_RETV $4
+_ACEOF
+
+ #
+ prev_sh_opts=$-
+ #
+ case $prev_sh_opts in
+ *f*)
+ ;;
+ *)
+ set -f
+ ;;
+ esac
+ #
+ case "$sel_qual_type_arg5" in
+ const*)
+ sel_qual_arg5=const
+ sel_type_arg5=`echo $sel_qual_type_arg5 | sed 's/^const //'`
+ ;;
+ *)
+ sel_qual_arg5=
+ sel_type_arg5=$sel_qual_type_arg5
+ ;;
+ esac
+ #
+
+cat >>confdefs.h <<_ACEOF
+#define SELECT_QUAL_ARG5 $sel_qual_arg5
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define SELECT_TYPE_ARG5 $sel_type_arg5
+_ACEOF
+
+ #
+ case $prev_sh_opts in
+ *f*)
+ ;;
+ *)
+ set +f
+ ;;
+ esac
+ #
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_SELECT 1
+_ACEOF
+
+ ac_cv_func_select="yes"
+ fi
+ fi
+
+
+
+ for ac_header in sys/types.h sys/socket.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for recv" >&5
+$as_echo_n "checking for recv... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#undef inline
+#ifdef HAVE_WINDOWS_H
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#ifdef HAVE_WINSOCK2_H
+#include <winsock2.h>
+#else
+#ifdef HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
+#endif
+#else
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#endif
+
+int main (void)
+{
+
+ recv(0, 0, 0, 0);
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ curl_cv_recv="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ curl_cv_recv="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ #
+ if test "$curl_cv_recv" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking types of args and return type for recv" >&5
+$as_echo_n "checking types of args and return type for recv... " >&6; }
+if test "${curl_cv_func_recv_args+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ curl_cv_func_recv_args="unknown"
+ for recv_retv in 'int' 'ssize_t'; do
+ for recv_arg1 in 'int' 'ssize_t' 'SOCKET'; do
+ for recv_arg2 in 'char *' 'void *'; do
+ for recv_arg3 in 'size_t' 'int' 'socklen_t' 'unsigned int'; do
+ for recv_arg4 in 'int' 'unsigned int'; do
+ if test "$curl_cv_func_recv_args" = "unknown"; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#undef inline
+#ifdef HAVE_WINDOWS_H
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#ifdef HAVE_WINSOCK2_H
+#include <winsock2.h>
+#else
+#ifdef HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
+#endif
+#define RECVCALLCONV PASCAL
+#else
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#define RECVCALLCONV
+#endif
+ extern $recv_retv RECVCALLCONV
+ recv($recv_arg1, $recv_arg2, $recv_arg3, $recv_arg4);
+
+int main (void)
+{
+
+ $recv_arg1 s=0;
+ $recv_arg2 buf=0;
+ $recv_arg3 len=0;
+ $recv_arg4 flags=0;
+ $recv_retv res = recv(s, buf, len, flags);
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ curl_cv_func_recv_args="$recv_arg1,$recv_arg2,$recv_arg3,$recv_arg4,$recv_retv"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ done
+ done
+ done
+ done
+ done
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $curl_cv_func_recv_args" >&5
+$as_echo "$curl_cv_func_recv_args" >&6; } # AC-CACHE-CHECK
+ if test "$curl_cv_func_recv_args" = "unknown"; then
+ as_fn_error $? "Cannot find proper types to use for recv args" "$LINENO" 5
+ else
+ recv_prev_IFS=$IFS; IFS=','
+ set dummy `echo "$curl_cv_func_recv_args" | sed 's/\*/\*/g'`
+ IFS=$recv_prev_IFS
+ shift
+ #
+
+cat >>confdefs.h <<_ACEOF
+#define RECV_TYPE_ARG1 $1
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define RECV_TYPE_ARG2 $2
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define RECV_TYPE_ARG3 $3
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define RECV_TYPE_ARG4 $4
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define RECV_TYPE_RETV $5
+_ACEOF
+
+ #
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_RECV 1
+_ACEOF
+
+ ac_cv_func_recv="yes"
+ fi
+ else
+ as_fn_error $? "Unable to link function recv" "$LINENO" 5
+ fi
+
+
+ for ac_header in sys/types.h sys/socket.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for recvfrom" >&5
+$as_echo_n "checking for recvfrom... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#undef inline
+#ifdef HAVE_WINDOWS_H
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#ifdef HAVE_WINSOCK2_H
+#include <winsock2.h>
+#else
+#ifdef HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
+#endif
+#else
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#endif
+
+int main (void)
+{
+
+ recvfrom(0, 0, 0, 0, 0, 0);
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ curl_cv_recvfrom="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ curl_cv_recvfrom="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ #
+ if test "$curl_cv_recvfrom" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking types of args and return type for recvfrom" >&5
+$as_echo_n "checking types of args and return type for recvfrom... " >&6; }
+if test "${curl_cv_func_recvfrom_args+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ curl_cv_func_recvfrom_args="unknown"
+ for recvfrom_retv in 'int' 'ssize_t'; do
+ for recvfrom_arg1 in 'int' 'ssize_t' 'SOCKET'; do
+ for recvfrom_arg2 in 'char *' 'void *'; do
+ for recvfrom_arg3 in 'size_t' 'int' 'socklen_t' 'unsigned int'; do
+ for recvfrom_arg4 in 'int' 'unsigned int'; do
+ for recvfrom_arg5 in 'struct sockaddr *' 'void *'; do
+ for recvfrom_arg6 in 'socklen_t *' 'int *' 'unsigned int *' 'size_t *' 'void *'; do
+ if test "$curl_cv_func_recvfrom_args" = "unknown"; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#undef inline
+#ifdef HAVE_WINDOWS_H
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#ifdef HAVE_WINSOCK2_H
+#include <winsock2.h>
+#else
+#ifdef HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
+#endif
+#define RECVFROMCALLCONV PASCAL
+#else
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#define RECVFROMCALLCONV
+#endif
+ extern $recvfrom_retv RECVFROMCALLCONV
+ recvfrom($recvfrom_arg1, $recvfrom_arg2,
+ $recvfrom_arg3, $recvfrom_arg4,
+ $recvfrom_arg5, $recvfrom_arg6);
+
+int main (void)
+{
+
+ $recvfrom_arg1 s=0;
+ $recvfrom_arg2 buf=0;
+ $recvfrom_arg3 len=0;
+ $recvfrom_arg4 flags=0;
+ $recvfrom_arg5 addr=0;
+ $recvfrom_arg6 addrlen=0;
+ $recvfrom_retv res=0;
+ res = recvfrom(s, buf, len, flags, addr, addrlen);
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ curl_cv_func_recvfrom_args="$recvfrom_arg1,$recvfrom_arg2,$recvfrom_arg3,$recvfrom_arg4,$recvfrom_arg5,$recvfrom_arg6,$recvfrom_retv"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ done
+ done
+ done
+ done
+ done
+ done
+ done
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $curl_cv_func_recvfrom_args" >&5
+$as_echo "$curl_cv_func_recvfrom_args" >&6; } # AC-CACHE-CHECK
+ # Nearly last minute change for this release starts here
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_RECVFROM 1
+_ACEOF
+
+ ac_cv_func_recvfrom="yes"
+ # Nearly last minute change for this release ends here
+ if test "$curl_cv_func_recvfrom_args" = "unknown"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Cannot find proper types to use for recvfrom args" >&5
+$as_echo "$as_me: WARNING: Cannot find proper types to use for recvfrom args" >&2;}
+ else
+ recvfrom_prev_IFS=$IFS; IFS=','
+ set dummy `echo "$curl_cv_func_recvfrom_args" | sed 's/\*/\*/g'`
+ IFS=$recvfrom_prev_IFS
+ shift
+ #
+ recvfrom_ptrt_arg2=$2
+ recvfrom_ptrt_arg5=$5
+ recvfrom_ptrt_arg6=$6
+ #
+
+cat >>confdefs.h <<_ACEOF
+#define RECVFROM_TYPE_ARG1 $1
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define RECVFROM_TYPE_ARG3 $3
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define RECVFROM_TYPE_ARG4 $4
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define RECVFROM_TYPE_RETV $7
+_ACEOF
+
+ #
+ prev_sh_opts=$-
+ #
+ case $prev_sh_opts in
+ *f*)
+ ;;
+ *)
+ set -f
+ ;;
+ esac
+ #
+ recvfrom_type_arg2=`echo $recvfrom_ptrt_arg2 | sed 's/ \*//'`
+ recvfrom_type_arg5=`echo $recvfrom_ptrt_arg5 | sed 's/ \*//'`
+ recvfrom_type_arg6=`echo $recvfrom_ptrt_arg6 | sed 's/ \*//'`
+ #
+
+cat >>confdefs.h <<_ACEOF
+#define RECVFROM_TYPE_ARG2 $recvfrom_type_arg2
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define RECVFROM_TYPE_ARG5 $recvfrom_type_arg5
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define RECVFROM_TYPE_ARG6 $recvfrom_type_arg6
+_ACEOF
+
+ #
+ if test "$recvfrom_type_arg2" = "void"; then
+
+cat >>confdefs.h <<_ACEOF
+#define RECVFROM_TYPE_ARG2_IS_VOID 1
+_ACEOF
+
+ fi
+ if test "$recvfrom_type_arg5" = "void"; then
+
+cat >>confdefs.h <<_ACEOF
+#define RECVFROM_TYPE_ARG5_IS_VOID 1
+_ACEOF
+
+ fi
+ if test "$recvfrom_type_arg6" = "void"; then
+
+cat >>confdefs.h <<_ACEOF
+#define RECVFROM_TYPE_ARG6_IS_VOID 1
+_ACEOF
+
+ fi
+ #
+ case $prev_sh_opts in
+ *f*)
+ ;;
+ *)
+ set +f
+ ;;
+ esac
+ #
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_RECVFROM 1
+_ACEOF
+
+ ac_cv_func_recvfrom="yes"
+ fi
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to link function recvfrom" >&5
+$as_echo "$as_me: WARNING: Unable to link function recvfrom" >&2;}
+ fi
+
+
+ for ac_header in sys/types.h sys/socket.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for send" >&5
+$as_echo_n "checking for send... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#undef inline
+#ifdef HAVE_WINDOWS_H
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#ifdef HAVE_WINSOCK2_H
+#include <winsock2.h>
+#else
+#ifdef HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
+#endif
+#else
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#endif
+
+int main (void)
+{
+
+ send(0, 0, 0, 0);
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ curl_cv_send="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ curl_cv_send="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ #
+ if test "$curl_cv_send" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking types of args and return type for send" >&5
+$as_echo_n "checking types of args and return type for send... " >&6; }
+if test "${curl_cv_func_send_args+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ curl_cv_func_send_args="unknown"
+ for send_retv in 'int' 'ssize_t'; do
+ for send_arg1 in 'int' 'ssize_t' 'SOCKET'; do
+ for send_arg2 in 'char *' 'void *' 'const char *' 'const void *'; do
+ for send_arg3 in 'size_t' 'int' 'socklen_t' 'unsigned int'; do
+ for send_arg4 in 'int' 'unsigned int'; do
+ if test "$curl_cv_func_send_args" = "unknown"; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#undef inline
+#ifdef HAVE_WINDOWS_H
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#ifdef HAVE_WINSOCK2_H
+#include <winsock2.h>
+#else
+#ifdef HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
+#endif
+#define SENDCALLCONV PASCAL
+#else
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#define SENDCALLCONV
+#endif
+ extern $send_retv SENDCALLCONV
+ send($send_arg1, $send_arg2, $send_arg3, $send_arg4);
+
+int main (void)
+{
+
+ $send_arg1 s=0;
+ $send_arg3 len=0;
+ $send_arg4 flags=0;
+ $send_retv res = send(s, 0, len, flags);
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ curl_cv_func_send_args="$send_arg1,$send_arg2,$send_arg3,$send_arg4,$send_retv"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ done
+ done
+ done
+ done
+ done
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $curl_cv_func_send_args" >&5
+$as_echo "$curl_cv_func_send_args" >&6; } # AC-CACHE-CHECK
+ if test "$curl_cv_func_send_args" = "unknown"; then
+ as_fn_error $? "Cannot find proper types to use for send args" "$LINENO" 5
+ else
+ send_prev_IFS=$IFS; IFS=','
+ set dummy `echo "$curl_cv_func_send_args" | sed 's/\*/\*/g'`
+ IFS=$send_prev_IFS
+ shift
+ #
+ send_qual_type_arg2=$2
+ #
+
+cat >>confdefs.h <<_ACEOF
+#define SEND_TYPE_ARG1 $1
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define SEND_TYPE_ARG3 $3
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define SEND_TYPE_ARG4 $4
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define SEND_TYPE_RETV $5
+_ACEOF
+
+ #
+ prev_sh_opts=$-
+ #
+ case $prev_sh_opts in
+ *f*)
+ ;;
+ *)
+ set -f
+ ;;
+ esac
+ #
+ case "$send_qual_type_arg2" in
+ const*)
+ send_qual_arg2=const
+ send_type_arg2=`echo $send_qual_type_arg2 | sed 's/^const //'`
+ ;;
+ *)
+ send_qual_arg2=
+ send_type_arg2=$send_qual_type_arg2
+ ;;
+ esac
+ #
+
+cat >>confdefs.h <<_ACEOF
+#define SEND_QUAL_ARG2 $send_qual_arg2
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define SEND_TYPE_ARG2 $send_type_arg2
+_ACEOF
+
+ #
+ case $prev_sh_opts in
+ *f*)
+ ;;
+ *)
+ set +f
+ ;;
+ esac
+ #
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_SEND 1
+_ACEOF
+
+ ac_cv_func_send="yes"
+ fi
+ else
+ as_fn_error $? "Unable to link function send" "$LINENO" 5
+ fi
+
+
+ for ac_header in sys/types.h sys/socket.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for MSG_NOSIGNAL" >&5
+$as_echo_n "checking for MSG_NOSIGNAL... " >&6; }
+if test "${ac_cv_msg_nosignal+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#undef inline
+#ifdef HAVE_WINDOWS_H
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#ifdef HAVE_WINSOCK2_H
+#include <winsock2.h>
+#else
+#ifdef HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
+#endif
+#else
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#endif
+
+int main (void)
+{
+
+ int flag=MSG_NOSIGNAL;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ ac_cv_msg_nosignal="yes"
+
+else
+
+ ac_cv_msg_nosignal="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_msg_nosignal" >&5
+$as_echo "$ac_cv_msg_nosignal" >&6; }
+ case "$ac_cv_msg_nosignal" in
+ yes)
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_MSG_NOSIGNAL 1
+_ACEOF
+
+ ;;
+ esac
+
+
+
+curl_includes_unistd="\
+/* includes start */
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+/* includes end */"
+ for ac_header in sys/types.h unistd.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$curl_includes_unistd
+"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+ #
+ tst_links_alarm="unknown"
+ tst_proto_alarm="unknown"
+ tst_compi_alarm="unknown"
+ tst_allow_alarm="unknown"
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if alarm can be linked" >&5
+$as_echo_n "checking if alarm can be linked... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#define alarm innocuous_alarm
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+#undef alarm
+#ifdef __cplusplus
+extern "C"
+#endif
+char alarm ();
+#if defined __stub_alarm || defined __stub___alarm
+choke me
+#endif
+
+int main (void)
+{
+return alarm ();
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_links_alarm="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_links_alarm="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ #
+ if test "$tst_links_alarm" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if alarm is prototyped" >&5
+$as_echo_n "checking if alarm is prototyped... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ $curl_includes_unistd
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "alarm" >/dev/null 2>&1; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_proto_alarm="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_proto_alarm="no"
+
+fi
+rm -f conftest*
+
+ fi
+ #
+ if test "$tst_proto_alarm" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if alarm is compilable" >&5
+$as_echo_n "checking if alarm is compilable... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_unistd
+
+int main (void)
+{
+
+ if(0 != alarm(0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_compi_alarm="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_compi_alarm="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ #
+ if test "$tst_compi_alarm" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if alarm usage allowed" >&5
+$as_echo_n "checking if alarm usage allowed... " >&6; }
+ if test "x$curl_disallow_alarm" != "xyes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_allow_alarm="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_allow_alarm="no"
+ fi
+ fi
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if alarm might be used" >&5
+$as_echo_n "checking if alarm might be used... " >&6; }
+ if test "$tst_links_alarm" = "yes" &&
+ test "$tst_proto_alarm" = "yes" &&
+ test "$tst_compi_alarm" = "yes" &&
+ test "$tst_allow_alarm" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_ALARM 1
+_ACEOF
+
+ ac_cv_func_alarm="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ac_cv_func_alarm="no"
+ fi
+
+
+curl_includes_string="\
+/* includes start */
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_STRING_H
+# include <string.h>
+#endif
+#ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif
+/* includes end */"
+ for ac_header in sys/types.h string.h strings.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$curl_includes_string
+"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+curl_includes_libgen="\
+/* includes start */
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_LIBGEN_H
+# include <libgen.h>
+#endif
+/* includes end */"
+ for ac_header in sys/types.h libgen.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$curl_includes_libgen
+"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+ #
+ tst_links_basename="unknown"
+ tst_proto_basename="unknown"
+ tst_compi_basename="unknown"
+ tst_allow_basename="unknown"
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if basename can be linked" >&5
+$as_echo_n "checking if basename can be linked... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#define basename innocuous_basename
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+#undef basename
+#ifdef __cplusplus
+extern "C"
+#endif
+char basename ();
+#if defined __stub_basename || defined __stub___basename
+choke me
+#endif
+
+int main (void)
+{
+return basename ();
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_links_basename="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_links_basename="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ #
+ if test "$tst_links_basename" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if basename is prototyped" >&5
+$as_echo_n "checking if basename is prototyped... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ $curl_includes_string
+ $curl_includes_libgen
+ $curl_includes_unistd
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "basename" >/dev/null 2>&1; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_proto_basename="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_proto_basename="no"
+
+fi
+rm -f conftest*
+
+ fi
+ #
+ if test "$tst_proto_basename" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if basename is compilable" >&5
+$as_echo_n "checking if basename is compilable... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_string
+ $curl_includes_libgen
+ $curl_includes_unistd
+
+int main (void)
+{
+
+ if(0 != basename(0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_compi_basename="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_compi_basename="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ #
+ if test "$tst_compi_basename" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if basename usage allowed" >&5
+$as_echo_n "checking if basename usage allowed... " >&6; }
+ if test "x$curl_disallow_basename" != "xyes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_allow_basename="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_allow_basename="no"
+ fi
+ fi
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if basename might be used" >&5
+$as_echo_n "checking if basename might be used... " >&6; }
+ if test "$tst_links_basename" = "yes" &&
+ test "$tst_proto_basename" = "yes" &&
+ test "$tst_compi_basename" = "yes" &&
+ test "$tst_allow_basename" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_BASENAME 1
+_ACEOF
+
+ ac_cv_func_basename="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ac_cv_func_basename="no"
+ fi
+
+
+curl_includes_socket="\
+/* includes start */
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SOCKET_H
+# include <socket.h>
+#endif
+/* includes end */"
+ for ac_header in sys/types.h socket.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$curl_includes_socket
+"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+ #
+ tst_links_closesocket="unknown"
+ tst_proto_closesocket="unknown"
+ tst_compi_closesocket="unknown"
+ tst_allow_closesocket="unknown"
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if closesocket can be linked" >&5
+$as_echo_n "checking if closesocket can be linked... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_winsock2
+ $curl_includes_socket
+
+int main (void)
+{
+
+ if(0 != closesocket(0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_links_closesocket="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_links_closesocket="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ #
+ if test "$tst_links_closesocket" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if closesocket is prototyped" >&5
+$as_echo_n "checking if closesocket is prototyped... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ $curl_includes_winsock2
+ $curl_includes_socket
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "closesocket" >/dev/null 2>&1; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_proto_closesocket="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_proto_closesocket="no"
+
+fi
+rm -f conftest*
+
+ fi
+ #
+ if test "$tst_proto_closesocket" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if closesocket is compilable" >&5
+$as_echo_n "checking if closesocket is compilable... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_winsock2
+ $curl_includes_socket
+
+int main (void)
+{
+
+ if(0 != closesocket(0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_compi_closesocket="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_compi_closesocket="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ #
+ if test "$tst_compi_closesocket" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if closesocket usage allowed" >&5
+$as_echo_n "checking if closesocket usage allowed... " >&6; }
+ if test "x$curl_disallow_closesocket" != "xyes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_allow_closesocket="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_allow_closesocket="no"
+ fi
+ fi
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if closesocket might be used" >&5
+$as_echo_n "checking if closesocket might be used... " >&6; }
+ if test "$tst_links_closesocket" = "yes" &&
+ test "$tst_proto_closesocket" = "yes" &&
+ test "$tst_compi_closesocket" = "yes" &&
+ test "$tst_allow_closesocket" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_CLOSESOCKET 1
+_ACEOF
+
+ ac_cv_func_closesocket="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ac_cv_func_closesocket="no"
+ fi
+
+
+ #
+ tst_links_closesocket_camel="unknown"
+ tst_proto_closesocket_camel="unknown"
+ tst_compi_closesocket_camel="unknown"
+ tst_allow_closesocket_camel="unknown"
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if CloseSocket can be linked" >&5
+$as_echo_n "checking if CloseSocket can be linked... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_sys_socket
+
+int main (void)
+{
+
+ if(0 != CloseSocket(0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_links_closesocket_camel="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_links_closesocket_camel="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ #
+ if test "$tst_links_closesocket_camel" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if CloseSocket is prototyped" >&5
+$as_echo_n "checking if CloseSocket is prototyped... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ $curl_includes_sys_socket
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "CloseSocket" >/dev/null 2>&1; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_proto_closesocket_camel="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_proto_closesocket_camel="no"
+
+fi
+rm -f conftest*
+
+ fi
+ #
+ if test "$tst_proto_closesocket_camel" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if CloseSocket is compilable" >&5
+$as_echo_n "checking if CloseSocket is compilable... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_sys_socket
+
+int main (void)
+{
+
+ if(0 != CloseSocket(0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_compi_closesocket_camel="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_compi_closesocket_camel="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ #
+ if test "$tst_compi_closesocket_camel" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if CloseSocket usage allowed" >&5
+$as_echo_n "checking if CloseSocket usage allowed... " >&6; }
+ if test "x$curl_disallow_closesocket_camel" != "xyes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_allow_closesocket_camel="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_allow_closesocket_camel="no"
+ fi
+ fi
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if CloseSocket might be used" >&5
+$as_echo_n "checking if CloseSocket might be used... " >&6; }
+ if test "$tst_links_closesocket_camel" = "yes" &&
+ test "$tst_proto_closesocket_camel" = "yes" &&
+ test "$tst_compi_closesocket_camel" = "yes" &&
+ test "$tst_allow_closesocket_camel" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_CLOSESOCKET_CAMEL 1
+_ACEOF
+
+ ac_cv_func_closesocket_camel="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ac_cv_func_closesocket_camel="no"
+ fi
+
+
+ #
+ tst_links_connect="unknown"
+ tst_proto_connect="unknown"
+ tst_compi_connect="unknown"
+ tst_allow_connect="unknown"
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if connect can be linked" >&5
+$as_echo_n "checking if connect can be linked... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_winsock2
+ $curl_includes_sys_socket
+ $curl_includes_socket
+
+int main (void)
+{
+
+ if(0 != connect(0, 0, 0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_links_connect="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_links_connect="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ #
+ if test "$tst_links_connect" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if connect is prototyped" >&5
+$as_echo_n "checking if connect is prototyped... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ $curl_includes_winsock2
+ $curl_includes_sys_socket
+ $curl_includes_socket
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "connect" >/dev/null 2>&1; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_proto_connect="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_proto_connect="no"
+
+fi
+rm -f conftest*
+
+ fi
+ #
+ if test "$tst_proto_connect" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if connect is compilable" >&5
+$as_echo_n "checking if connect is compilable... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_winsock2
+ $curl_includes_sys_socket
+ $curl_includes_socket
+
+int main (void)
+{
+
+ if(0 != connect(0, 0, 0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_compi_connect="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_compi_connect="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ #
+ if test "$tst_compi_connect" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if connect usage allowed" >&5
+$as_echo_n "checking if connect usage allowed... " >&6; }
+ if test "x$curl_disallow_connect" != "xyes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_allow_connect="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_allow_connect="no"
+ fi
+ fi
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if connect might be used" >&5
+$as_echo_n "checking if connect might be used... " >&6; }
+ if test "$tst_links_connect" = "yes" &&
+ test "$tst_proto_connect" = "yes" &&
+ test "$tst_compi_connect" = "yes" &&
+ test "$tst_allow_connect" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_CONNECT 1
+_ACEOF
+
+ ac_cv_func_connect="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ac_cv_func_connect="no"
+ fi
+
+
+curl_includes_fcntl="\
+/* includes start */
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+#ifdef HAVE_FCNTL_H
+# include <fcntl.h>
+#endif
+/* includes end */"
+ for ac_header in sys/types.h unistd.h fcntl.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$curl_includes_fcntl
+"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+ #
+ tst_links_fcntl="unknown"
+ tst_proto_fcntl="unknown"
+ tst_compi_fcntl="unknown"
+ tst_allow_fcntl="unknown"
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if fcntl can be linked" >&5
+$as_echo_n "checking if fcntl can be linked... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#define fcntl innocuous_fcntl
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+#undef fcntl
+#ifdef __cplusplus
+extern "C"
+#endif
+char fcntl ();
+#if defined __stub_fcntl || defined __stub___fcntl
+choke me
+#endif
+
+int main (void)
+{
+return fcntl ();
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_links_fcntl="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_links_fcntl="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ #
+ if test "$tst_links_fcntl" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if fcntl is prototyped" >&5
+$as_echo_n "checking if fcntl is prototyped... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ $curl_includes_fcntl
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "fcntl" >/dev/null 2>&1; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_proto_fcntl="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_proto_fcntl="no"
+
+fi
+rm -f conftest*
+
+ fi
+ #
+ if test "$tst_proto_fcntl" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if fcntl is compilable" >&5
+$as_echo_n "checking if fcntl is compilable... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_fcntl
+
+int main (void)
+{
+
+ if(0 != fcntl(0, 0, 0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_compi_fcntl="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_compi_fcntl="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ #
+ if test "$tst_compi_fcntl" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if fcntl usage allowed" >&5
+$as_echo_n "checking if fcntl usage allowed... " >&6; }
+ if test "x$curl_disallow_fcntl" != "xyes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_allow_fcntl="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_allow_fcntl="no"
+ fi
+ fi
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if fcntl might be used" >&5
+$as_echo_n "checking if fcntl might be used... " >&6; }
+ if test "$tst_links_fcntl" = "yes" &&
+ test "$tst_proto_fcntl" = "yes" &&
+ test "$tst_compi_fcntl" = "yes" &&
+ test "$tst_allow_fcntl" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_FCNTL 1
+_ACEOF
+
+ ac_cv_func_fcntl="yes"
+
+ #
+ tst_compi_fcntl_o_nonblock="unknown"
+ tst_allow_fcntl_o_nonblock="unknown"
+ #
+ case $host_os in
+ sunos4* | aix3* | beos*)
+ curl_disallow_fcntl_o_nonblock="yes"
+ ;;
+ esac
+ #
+ if test "$ac_cv_func_fcntl" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if fcntl O_NONBLOCK is compilable" >&5
+$as_echo_n "checking if fcntl O_NONBLOCK is compilable... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_fcntl
+
+int main (void)
+{
+
+ int flags = 0;
+ if(0 != fcntl(0, F_SETFL, flags | O_NONBLOCK))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_compi_fcntl_o_nonblock="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_compi_fcntl_o_nonblock="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ #
+ if test "$tst_compi_fcntl_o_nonblock" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if fcntl O_NONBLOCK usage allowed" >&5
+$as_echo_n "checking if fcntl O_NONBLOCK usage allowed... " >&6; }
+ if test "x$curl_disallow_fcntl_o_nonblock" != "xyes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_allow_fcntl_o_nonblock="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_allow_fcntl_o_nonblock="no"
+ fi
+ fi
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if fcntl O_NONBLOCK might be used" >&5
+$as_echo_n "checking if fcntl O_NONBLOCK might be used... " >&6; }
+ if test "$tst_compi_fcntl_o_nonblock" = "yes" &&
+ test "$tst_allow_fcntl_o_nonblock" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_FCNTL_O_NONBLOCK 1
+_ACEOF
+
+ ac_cv_func_fcntl_o_nonblock="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ac_cv_func_fcntl_o_nonblock="no"
+ fi
+
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ac_cv_func_fcntl="no"
+ fi
+
+
+curl_includes_stdio="\
+/* includes start */
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_STDIO_H
+# include <stdio.h>
+#endif
+/* includes end */"
+ for ac_header in sys/types.h stdio.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$curl_includes_stdio
+"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+ #
+ tst_links_fdopen="unknown"
+ tst_proto_fdopen="unknown"
+ tst_compi_fdopen="unknown"
+ tst_allow_fdopen="unknown"
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if fdopen can be linked" >&5
+$as_echo_n "checking if fdopen can be linked... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#define fdopen innocuous_fdopen
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+#undef fdopen
+#ifdef __cplusplus
+extern "C"
+#endif
+char fdopen ();
+#if defined __stub_fdopen || defined __stub___fdopen
+choke me
+#endif
+
+int main (void)
+{
+return fdopen ();
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_links_fdopen="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_links_fdopen="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ #
+ if test "$tst_links_fdopen" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if fdopen is prototyped" >&5
+$as_echo_n "checking if fdopen is prototyped... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ $curl_includes_stdio
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "fdopen" >/dev/null 2>&1; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_proto_fdopen="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_proto_fdopen="no"
+
+fi
+rm -f conftest*
+
+ fi
+ #
+ if test "$tst_proto_fdopen" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if fdopen is compilable" >&5
+$as_echo_n "checking if fdopen is compilable... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_stdio
+
+int main (void)
+{
+
+ if(0 != fdopen(0, 0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_compi_fdopen="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_compi_fdopen="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ #
+ if test "$tst_compi_fdopen" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if fdopen usage allowed" >&5
+$as_echo_n "checking if fdopen usage allowed... " >&6; }
+ if test "x$curl_disallow_fdopen" != "xyes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_allow_fdopen="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_allow_fdopen="no"
+ fi
+ fi
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if fdopen might be used" >&5
+$as_echo_n "checking if fdopen might be used... " >&6; }
+ if test "$tst_links_fdopen" = "yes" &&
+ test "$tst_proto_fdopen" = "yes" &&
+ test "$tst_compi_fdopen" = "yes" &&
+ test "$tst_allow_fdopen" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_FDOPEN 1
+_ACEOF
+
+ ac_cv_func_fdopen="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ac_cv_func_fdopen="no"
+ fi
+
+
+curl_includes_netdb="\
+/* includes start */
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_NETDB_H
+# include <netdb.h>
+#endif
+/* includes end */"
+ for ac_header in sys/types.h netdb.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$curl_includes_netdb
+"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+ #
+ tst_links_freeaddrinfo="unknown"
+ tst_proto_freeaddrinfo="unknown"
+ tst_compi_freeaddrinfo="unknown"
+ tst_allow_freeaddrinfo="unknown"
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if freeaddrinfo can be linked" >&5
+$as_echo_n "checking if freeaddrinfo can be linked... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_ws2tcpip
+ $curl_includes_sys_socket
+ $curl_includes_netdb
+
+int main (void)
+{
+
+ freeaddrinfo(0);
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_links_freeaddrinfo="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_links_freeaddrinfo="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ #
+ if test "$tst_links_freeaddrinfo" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if freeaddrinfo is prototyped" >&5
+$as_echo_n "checking if freeaddrinfo is prototyped... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ $curl_includes_ws2tcpip
+ $curl_includes_sys_socket
+ $curl_includes_netdb
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "freeaddrinfo" >/dev/null 2>&1; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_proto_freeaddrinfo="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_proto_freeaddrinfo="no"
+
+fi
+rm -f conftest*
+
+ fi
+ #
+ if test "$tst_proto_freeaddrinfo" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if freeaddrinfo is compilable" >&5
+$as_echo_n "checking if freeaddrinfo is compilable... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_ws2tcpip
+ $curl_includes_sys_socket
+ $curl_includes_netdb
+
+int main (void)
+{
+
+ freeaddrinfo(0);
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_compi_freeaddrinfo="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_compi_freeaddrinfo="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ #
+ if test "$tst_compi_freeaddrinfo" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if freeaddrinfo usage allowed" >&5
+$as_echo_n "checking if freeaddrinfo usage allowed... " >&6; }
+ if test "x$curl_disallow_freeaddrinfo" != "xyes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_allow_freeaddrinfo="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_allow_freeaddrinfo="no"
+ fi
+ fi
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if freeaddrinfo might be used" >&5
+$as_echo_n "checking if freeaddrinfo might be used... " >&6; }
+ if test "$tst_links_freeaddrinfo" = "yes" &&
+ test "$tst_proto_freeaddrinfo" = "yes" &&
+ test "$tst_compi_freeaddrinfo" = "yes" &&
+ test "$tst_allow_freeaddrinfo" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_FREEADDRINFO 1
+_ACEOF
+
+ ac_cv_func_freeaddrinfo="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ac_cv_func_freeaddrinfo="no"
+ fi
+
+
+curl_includes_ifaddrs="\
+/* includes start */
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+# include <sys/socket.h>
+#endif
+#ifdef HAVE_NETINET_IN_H
+# include <netinet/in.h>
+#endif
+#ifdef HAVE_IFADDRS_H
+# include <ifaddrs.h>
+#endif
+/* includes end */"
+ for ac_header in sys/types.h sys/socket.h netinet/in.h ifaddrs.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$curl_includes_ifaddrs
+"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+ #
+ tst_links_freeifaddrs="unknown"
+ tst_proto_freeifaddrs="unknown"
+ tst_compi_freeifaddrs="unknown"
+ tst_allow_freeifaddrs="unknown"
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if freeifaddrs can be linked" >&5
+$as_echo_n "checking if freeifaddrs can be linked... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#define freeifaddrs innocuous_freeifaddrs
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+#undef freeifaddrs
+#ifdef __cplusplus
+extern "C"
+#endif
+char freeifaddrs ();
+#if defined __stub_freeifaddrs || defined __stub___freeifaddrs
+choke me
+#endif
+
+int main (void)
+{
+return freeifaddrs ();
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_links_freeifaddrs="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_links_freeifaddrs="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ #
+ if test "$tst_links_freeifaddrs" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if freeifaddrs is prototyped" >&5
+$as_echo_n "checking if freeifaddrs is prototyped... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ $curl_includes_ifaddrs
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "freeifaddrs" >/dev/null 2>&1; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_proto_freeifaddrs="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_proto_freeifaddrs="no"
+
+fi
+rm -f conftest*
+
+ fi
+ #
+ if test "$tst_proto_freeifaddrs" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if freeifaddrs is compilable" >&5
+$as_echo_n "checking if freeifaddrs is compilable... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_ifaddrs
+
+int main (void)
+{
+
+ freeifaddrs(0);
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_compi_freeifaddrs="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_compi_freeifaddrs="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ #
+ if test "$tst_compi_freeifaddrs" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if freeifaddrs usage allowed" >&5
+$as_echo_n "checking if freeifaddrs usage allowed... " >&6; }
+ if test "x$curl_disallow_freeifaddrs" != "xyes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_allow_freeifaddrs="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_allow_freeifaddrs="no"
+ fi
+ fi
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if freeifaddrs might be used" >&5
+$as_echo_n "checking if freeifaddrs might be used... " >&6; }
+ if test "$tst_links_freeifaddrs" = "yes" &&
+ test "$tst_proto_freeifaddrs" = "yes" &&
+ test "$tst_compi_freeifaddrs" = "yes" &&
+ test "$tst_allow_freeifaddrs" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_FREEIFADDRS 1
+_ACEOF
+
+ ac_cv_func_freeifaddrs="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ac_cv_func_freeifaddrs="no"
+ fi
+
+
+ #
+ tst_links_ftruncate="unknown"
+ tst_proto_ftruncate="unknown"
+ tst_compi_ftruncate="unknown"
+ tst_allow_ftruncate="unknown"
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if ftruncate can be linked" >&5
+$as_echo_n "checking if ftruncate can be linked... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#define ftruncate innocuous_ftruncate
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+#undef ftruncate
+#ifdef __cplusplus
+extern "C"
+#endif
+char ftruncate ();
+#if defined __stub_ftruncate || defined __stub___ftruncate
+choke me
+#endif
+
+int main (void)
+{
+return ftruncate ();
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_links_ftruncate="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_links_ftruncate="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ #
+ if test "$tst_links_ftruncate" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if ftruncate is prototyped" >&5
+$as_echo_n "checking if ftruncate is prototyped... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ $curl_includes_unistd
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "ftruncate" >/dev/null 2>&1; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_proto_ftruncate="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_proto_ftruncate="no"
+
+fi
+rm -f conftest*
+
+ fi
+ #
+ if test "$tst_proto_ftruncate" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if ftruncate is compilable" >&5
+$as_echo_n "checking if ftruncate is compilable... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_unistd
+
+int main (void)
+{
+
+ if(0 != ftruncate(0, 0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_compi_ftruncate="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_compi_ftruncate="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ #
+ if test "$tst_compi_ftruncate" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if ftruncate usage allowed" >&5
+$as_echo_n "checking if ftruncate usage allowed... " >&6; }
+ if test "x$curl_disallow_ftruncate" != "xyes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_allow_ftruncate="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_allow_ftruncate="no"
+ fi
+ fi
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if ftruncate might be used" >&5
+$as_echo_n "checking if ftruncate might be used... " >&6; }
+ if test "$tst_links_ftruncate" = "yes" &&
+ test "$tst_proto_ftruncate" = "yes" &&
+ test "$tst_compi_ftruncate" = "yes" &&
+ test "$tst_allow_ftruncate" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_FTRUNCATE 1
+_ACEOF
+
+ ac_cv_func_ftruncate="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ac_cv_func_ftruncate="no"
+ fi
+
+
+curl_includes_stdlib="\
+/* includes start */
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_STDLIB_H
+# include <stdlib.h>
+#endif
+/* includes end */"
+ for ac_header in sys/types.h stdlib.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$curl_includes_stdlib
+"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+ #
+ tst_links_getaddrinfo="unknown"
+ tst_proto_getaddrinfo="unknown"
+ tst_compi_getaddrinfo="unknown"
+ tst_works_getaddrinfo="unknown"
+ tst_allow_getaddrinfo="unknown"
+ tst_tsafe_getaddrinfo="unknown"
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if getaddrinfo can be linked" >&5
+$as_echo_n "checking if getaddrinfo can be linked... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_ws2tcpip
+ $curl_includes_sys_socket
+ $curl_includes_netdb
+
+int main (void)
+{
+
+ if(0 != getaddrinfo(0, 0, 0, 0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_links_getaddrinfo="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_links_getaddrinfo="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ #
+ if test "$tst_links_getaddrinfo" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if getaddrinfo is prototyped" >&5
+$as_echo_n "checking if getaddrinfo is prototyped... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ $curl_includes_ws2tcpip
+ $curl_includes_sys_socket
+ $curl_includes_netdb
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "getaddrinfo" >/dev/null 2>&1; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_proto_getaddrinfo="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_proto_getaddrinfo="no"
+
+fi
+rm -f conftest*
+
+ fi
+ #
+ if test "$tst_proto_getaddrinfo" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if getaddrinfo is compilable" >&5
+$as_echo_n "checking if getaddrinfo is compilable... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_ws2tcpip
+ $curl_includes_sys_socket
+ $curl_includes_netdb
+
+int main (void)
+{
+
+ if(0 != getaddrinfo(0, 0, 0, 0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_compi_getaddrinfo="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_compi_getaddrinfo="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ #
+ if test "x$cross_compiling" != "xyes" &&
+ test "$tst_compi_getaddrinfo" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if getaddrinfo seems to work" >&5
+$as_echo_n "checking if getaddrinfo seems to work... " >&6; }
+ if test "$cross_compiling" = yes; then :
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run test program while cross compiling
+See \`config.log' for more details" "$LINENO" 5 ; }
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_ws2tcpip
+ $curl_includes_stdlib
+ $curl_includes_string
+ $curl_includes_sys_socket
+ $curl_includes_netdb
+
+int main (void)
+{
+
+ struct addrinfo hints;
+ struct addrinfo *ai = 0;
+ int error;
+
+ memset(&hints, 0, sizeof(hints));
+ hints.ai_flags = AI_NUMERICHOST;
+ hints.ai_family = AF_UNSPEC;
+ hints.ai_socktype = SOCK_STREAM;
+ error = getaddrinfo("127.0.0.1", 0, &hints, &ai);
+ if(error || !ai)
+ exit(1); /* fail */
+ else
+ exit(0);
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_works_getaddrinfo="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_works_getaddrinfo="no"
+
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ fi
+ #
+ if test "$tst_compi_getaddrinfo" = "yes" &&
+ test "$tst_works_getaddrinfo" != "no"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if getaddrinfo usage allowed" >&5
+$as_echo_n "checking if getaddrinfo usage allowed... " >&6; }
+ if test "x$curl_disallow_getaddrinfo" != "xyes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_allow_getaddrinfo="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_allow_getaddrinfo="no"
+ fi
+ fi
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if getaddrinfo might be used" >&5
+$as_echo_n "checking if getaddrinfo might be used... " >&6; }
+ if test "$tst_links_getaddrinfo" = "yes" &&
+ test "$tst_proto_getaddrinfo" = "yes" &&
+ test "$tst_compi_getaddrinfo" = "yes" &&
+ test "$tst_allow_getaddrinfo" = "yes" &&
+ test "$tst_works_getaddrinfo" != "no"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_GETADDRINFO 1
+_ACEOF
+
+ ac_cv_func_getaddrinfo="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ac_cv_func_getaddrinfo="no"
+ ac_cv_func_getaddrinfo_threadsafe="no"
+ fi
+ #
+ if test "$ac_cv_func_getaddrinfo" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if getaddrinfo is threadsafe" >&5
+$as_echo_n "checking if getaddrinfo is threadsafe... " >&6; }
+ case $host_os in
+ aix[1234].* | aix5.[01].*)
+ tst_tsafe_getaddrinfo="no"
+ ;;
+ aix*)
+ tst_tsafe_getaddrinfo="yes"
+ ;;
+ darwin[12345].*)
+ tst_tsafe_getaddrinfo="no"
+ ;;
+ darwin*)
+ tst_tsafe_getaddrinfo="yes"
+ ;;
+ freebsd[1234].* | freebsd5.[1234]*)
+ tst_tsafe_getaddrinfo="no"
+ ;;
+ freebsd*)
+ tst_tsafe_getaddrinfo="yes"
+ ;;
+ hpux[123456789].* | hpux10.* | hpux11.0* | hpux11.10*)
+ tst_tsafe_getaddrinfo="no"
+ ;;
+ hpux*)
+ tst_tsafe_getaddrinfo="yes"
+ ;;
+ netbsd[123].*)
+ tst_tsafe_getaddrinfo="no"
+ ;;
+ netbsd*)
+ tst_tsafe_getaddrinfo="yes"
+ ;;
+ *bsd*)
+ tst_tsafe_getaddrinfo="no"
+ ;;
+ solaris2*)
+ tst_tsafe_getaddrinfo="yes"
+ ;;
+ esac
+ if test "$tst_tsafe_getaddrinfo" = "unknown"; then
+
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_ws2tcpip
+ $curl_includes_sys_socket
+ $curl_includes_netdb
+
+int main (void)
+{
+#ifdef h_errno
+ return 0;
+#else
+ force compilation error
+#endif
+}
+
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ tst_symbol_defined="yes"
+
+else
+
+ tst_symbol_defined="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ if test "$tst_symbol_defined" = "yes"; then
+ curl_cv_have_def_h_errno=yes
+
+ else
+ curl_cv_have_def_h_errno=no
+
+ fi
+
+ if test "$curl_cv_have_def_h_errno" = "no"; then
+ tst_tsafe_getaddrinfo="no"
+ fi
+ fi
+ if test "$tst_tsafe_getaddrinfo" = "unknown"; then
+ tst_tsafe_getaddrinfo="yes"
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tst_tsafe_getaddrinfo" >&5
+$as_echo "$tst_tsafe_getaddrinfo" >&6; }
+ if test "$tst_tsafe_getaddrinfo" = "yes"; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_GETADDRINFO_THREADSAFE 1
+_ACEOF
+
+ ac_cv_func_getaddrinfo_threadsafe="yes"
+ else
+ ac_cv_func_getaddrinfo_threadsafe="no"
+ fi
+ fi
+
+
+ #
+ tst_links_gethostbyaddr="unknown"
+ tst_proto_gethostbyaddr="unknown"
+ tst_compi_gethostbyaddr="unknown"
+ tst_allow_gethostbyaddr="unknown"
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if gethostbyaddr can be linked" >&5
+$as_echo_n "checking if gethostbyaddr can be linked... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_winsock2
+ $curl_includes_netdb
+
+int main (void)
+{
+
+ if(0 != gethostbyaddr(0, 0, 0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_links_gethostbyaddr="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_links_gethostbyaddr="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ #
+ if test "$tst_links_gethostbyaddr" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if gethostbyaddr is prototyped" >&5
+$as_echo_n "checking if gethostbyaddr is prototyped... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ $curl_includes_winsock2
+ $curl_includes_netdb
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "gethostbyaddr" >/dev/null 2>&1; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_proto_gethostbyaddr="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_proto_gethostbyaddr="no"
+
+fi
+rm -f conftest*
+
+ fi
+ #
+ if test "$tst_proto_gethostbyaddr" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if gethostbyaddr is compilable" >&5
+$as_echo_n "checking if gethostbyaddr is compilable... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_winsock2
+ $curl_includes_netdb
+
+int main (void)
+{
+
+ if(0 != gethostbyaddr(0, 0, 0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_compi_gethostbyaddr="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_compi_gethostbyaddr="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ #
+ if test "$tst_compi_gethostbyaddr" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if gethostbyaddr usage allowed" >&5
+$as_echo_n "checking if gethostbyaddr usage allowed... " >&6; }
+ if test "x$curl_disallow_gethostbyaddr" != "xyes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_allow_gethostbyaddr="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_allow_gethostbyaddr="no"
+ fi
+ fi
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if gethostbyaddr might be used" >&5
+$as_echo_n "checking if gethostbyaddr might be used... " >&6; }
+ if test "$tst_links_gethostbyaddr" = "yes" &&
+ test "$tst_proto_gethostbyaddr" = "yes" &&
+ test "$tst_compi_gethostbyaddr" = "yes" &&
+ test "$tst_allow_gethostbyaddr" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_GETHOSTBYADDR 1
+_ACEOF
+
+ ac_cv_func_gethostbyaddr="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ac_cv_func_gethostbyaddr="no"
+ fi
+
+
+ #
+ tst_links_gethostbyaddr_r="unknown"
+ tst_proto_gethostbyaddr_r="unknown"
+ tst_compi_gethostbyaddr_r="unknown"
+ tst_allow_gethostbyaddr_r="unknown"
+ tst_nargs_gethostbyaddr_r="unknown"
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if gethostbyaddr_r can be linked" >&5
+$as_echo_n "checking if gethostbyaddr_r can be linked... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#define gethostbyaddr_r innocuous_gethostbyaddr_r
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+#undef gethostbyaddr_r
+#ifdef __cplusplus
+extern "C"
+#endif
+char gethostbyaddr_r ();
+#if defined __stub_gethostbyaddr_r || defined __stub___gethostbyaddr_r
+choke me
+#endif
+
+int main (void)
+{
+return gethostbyaddr_r ();
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_links_gethostbyaddr_r="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_links_gethostbyaddr_r="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ #
+ if test "$tst_links_gethostbyaddr_r" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if gethostbyaddr_r is prototyped" >&5
+$as_echo_n "checking if gethostbyaddr_r is prototyped... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ $curl_includes_netdb
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "gethostbyaddr_r" >/dev/null 2>&1; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_proto_gethostbyaddr_r="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_proto_gethostbyaddr_r="no"
+
+fi
+rm -f conftest*
+
+ fi
+ #
+ if test "$tst_proto_gethostbyaddr_r" = "yes"; then
+ if test "$tst_nargs_gethostbyaddr_r" = "unknown"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if gethostbyaddr_r takes 5 args." >&5
+$as_echo_n "checking if gethostbyaddr_r takes 5 args.... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_netdb
+
+int main (void)
+{
+
+ if(0 != gethostbyaddr_r(0, 0, 0, 0, 0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_compi_gethostbyaddr_r="yes"
+ tst_nargs_gethostbyaddr_r="5"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_compi_gethostbyaddr_r="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ if test "$tst_nargs_gethostbyaddr_r" = "unknown"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if gethostbyaddr_r takes 7 args." >&5
+$as_echo_n "checking if gethostbyaddr_r takes 7 args.... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_netdb
+
+int main (void)
+{
+
+ if(0 != gethostbyaddr_r(0, 0, 0, 0, 0, 0, 0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_compi_gethostbyaddr_r="yes"
+ tst_nargs_gethostbyaddr_r="7"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_compi_gethostbyaddr_r="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ if test "$tst_nargs_gethostbyaddr_r" = "unknown"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if gethostbyaddr_r takes 8 args." >&5
+$as_echo_n "checking if gethostbyaddr_r takes 8 args.... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_netdb
+
+int main (void)
+{
+
+ if(0 != gethostbyaddr_r(0, 0, 0, 0, 0, 0, 0, 0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_compi_gethostbyaddr_r="yes"
+ tst_nargs_gethostbyaddr_r="8"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_compi_gethostbyaddr_r="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if gethostbyaddr_r is compilable" >&5
+$as_echo_n "checking if gethostbyaddr_r is compilable... " >&6; }
+ if test "$tst_compi_gethostbyaddr_r" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ fi
+ fi
+ #
+ if test "$tst_compi_gethostbyaddr_r" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if gethostbyaddr_r usage allowed" >&5
+$as_echo_n "checking if gethostbyaddr_r usage allowed... " >&6; }
+ if test "x$curl_disallow_gethostbyaddr_r" != "xyes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_allow_gethostbyaddr_r="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_allow_gethostbyaddr_r="no"
+ fi
+ fi
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if gethostbyaddr_r might be used" >&5
+$as_echo_n "checking if gethostbyaddr_r might be used... " >&6; }
+ if test "$tst_links_gethostbyaddr_r" = "yes" &&
+ test "$tst_proto_gethostbyaddr_r" = "yes" &&
+ test "$tst_compi_gethostbyaddr_r" = "yes" &&
+ test "$tst_allow_gethostbyaddr_r" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_GETHOSTBYADDR_R 1
+_ACEOF
+
+ #
+ if test "$tst_nargs_gethostbyaddr_r" -eq "5"; then
+
+$as_echo "#define HAVE_GETHOSTBYADDR_R_5 1" >>confdefs.h
+
+ elif test "$tst_nargs_gethostbyaddr_r" -eq "7"; then
+
+$as_echo "#define HAVE_GETHOSTBYADDR_R_7 1" >>confdefs.h
+
+ elif test "$tst_nargs_gethostbyaddr_r" -eq "8"; then
+
+$as_echo "#define HAVE_GETHOSTBYADDR_R_8 1" >>confdefs.h
+
+ fi
+ #
+ ac_cv_func_gethostbyaddr_r="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ac_cv_func_gethostbyaddr_r="no"
+ fi
+
+
+ #
+ tst_links_gethostbyname="unknown"
+ tst_proto_gethostbyname="unknown"
+ tst_compi_gethostbyname="unknown"
+ tst_allow_gethostbyname="unknown"
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if gethostbyname can be linked" >&5
+$as_echo_n "checking if gethostbyname can be linked... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_winsock2
+ $curl_includes_netdb
+
+int main (void)
+{
+
+ if(0 != gethostbyname(0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_links_gethostbyname="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_links_gethostbyname="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ #
+ if test "$tst_links_gethostbyname" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if gethostbyname is prototyped" >&5
+$as_echo_n "checking if gethostbyname is prototyped... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ $curl_includes_winsock2
+ $curl_includes_netdb
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "gethostbyname" >/dev/null 2>&1; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_proto_gethostbyname="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_proto_gethostbyname="no"
+
+fi
+rm -f conftest*
+
+ fi
+ #
+ if test "$tst_proto_gethostbyname" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if gethostbyname is compilable" >&5
+$as_echo_n "checking if gethostbyname is compilable... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_winsock2
+ $curl_includes_netdb
+
+int main (void)
+{
+
+ if(0 != gethostbyname(0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_compi_gethostbyname="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_compi_gethostbyname="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ #
+ if test "$tst_compi_gethostbyname" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if gethostbyname usage allowed" >&5
+$as_echo_n "checking if gethostbyname usage allowed... " >&6; }
+ if test "x$curl_disallow_gethostbyname" != "xyes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_allow_gethostbyname="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_allow_gethostbyname="no"
+ fi
+ fi
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if gethostbyname might be used" >&5
+$as_echo_n "checking if gethostbyname might be used... " >&6; }
+ if test "$tst_links_gethostbyname" = "yes" &&
+ test "$tst_proto_gethostbyname" = "yes" &&
+ test "$tst_compi_gethostbyname" = "yes" &&
+ test "$tst_allow_gethostbyname" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_GETHOSTBYNAME 1
+_ACEOF
+
+ ac_cv_func_gethostbyname="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ac_cv_func_gethostbyname="no"
+ fi
+
+
+ #
+ tst_links_gethostbyname_r="unknown"
+ tst_proto_gethostbyname_r="unknown"
+ tst_compi_gethostbyname_r="unknown"
+ tst_allow_gethostbyname_r="unknown"
+ tst_nargs_gethostbyname_r="unknown"
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if gethostbyname_r can be linked" >&5
+$as_echo_n "checking if gethostbyname_r can be linked... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#define gethostbyname_r innocuous_gethostbyname_r
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+#undef gethostbyname_r
+#ifdef __cplusplus
+extern "C"
+#endif
+char gethostbyname_r ();
+#if defined __stub_gethostbyname_r || defined __stub___gethostbyname_r
+choke me
+#endif
+
+int main (void)
+{
+return gethostbyname_r ();
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_links_gethostbyname_r="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_links_gethostbyname_r="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ #
+ if test "$tst_links_gethostbyname_r" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if gethostbyname_r is prototyped" >&5
+$as_echo_n "checking if gethostbyname_r is prototyped... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ $curl_includes_netdb
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "gethostbyname_r" >/dev/null 2>&1; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_proto_gethostbyname_r="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_proto_gethostbyname_r="no"
+
+fi
+rm -f conftest*
+
+ fi
+ #
+ if test "$tst_proto_gethostbyname_r" = "yes"; then
+ if test "$tst_nargs_gethostbyname_r" = "unknown"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if gethostbyname_r takes 3 args." >&5
+$as_echo_n "checking if gethostbyname_r takes 3 args.... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_netdb
+
+int main (void)
+{
+
+ if(0 != gethostbyname_r(0, 0, 0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_compi_gethostbyname_r="yes"
+ tst_nargs_gethostbyname_r="3"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_compi_gethostbyname_r="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ if test "$tst_nargs_gethostbyname_r" = "unknown"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if gethostbyname_r takes 5 args." >&5
+$as_echo_n "checking if gethostbyname_r takes 5 args.... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_netdb
+
+int main (void)
+{
+
+ if(0 != gethostbyname_r(0, 0, 0, 0, 0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_compi_gethostbyname_r="yes"
+ tst_nargs_gethostbyname_r="5"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_compi_gethostbyname_r="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ if test "$tst_nargs_gethostbyname_r" = "unknown"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if gethostbyname_r takes 6 args." >&5
+$as_echo_n "checking if gethostbyname_r takes 6 args.... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_netdb
+
+int main (void)
+{
+
+ if(0 != gethostbyname_r(0, 0, 0, 0, 0, 0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_compi_gethostbyname_r="yes"
+ tst_nargs_gethostbyname_r="6"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_compi_gethostbyname_r="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if gethostbyname_r is compilable" >&5
+$as_echo_n "checking if gethostbyname_r is compilable... " >&6; }
+ if test "$tst_compi_gethostbyname_r" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ fi
+ fi
+ #
+ if test "$tst_compi_gethostbyname_r" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if gethostbyname_r usage allowed" >&5
+$as_echo_n "checking if gethostbyname_r usage allowed... " >&6; }
+ if test "x$curl_disallow_gethostbyname_r" != "xyes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_allow_gethostbyname_r="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_allow_gethostbyname_r="no"
+ fi
+ fi
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if gethostbyname_r might be used" >&5
+$as_echo_n "checking if gethostbyname_r might be used... " >&6; }
+ if test "$tst_links_gethostbyname_r" = "yes" &&
+ test "$tst_proto_gethostbyname_r" = "yes" &&
+ test "$tst_compi_gethostbyname_r" = "yes" &&
+ test "$tst_allow_gethostbyname_r" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_GETHOSTBYNAME_R 1
+_ACEOF
+
+ #
+ if test "$tst_nargs_gethostbyname_r" -eq "3"; then
+
+$as_echo "#define HAVE_GETHOSTBYNAME_R_3 1" >>confdefs.h
+
+ elif test "$tst_nargs_gethostbyname_r" -eq "5"; then
+
+$as_echo "#define HAVE_GETHOSTBYNAME_R_5 1" >>confdefs.h
+
+ elif test "$tst_nargs_gethostbyname_r" -eq "6"; then
+
+$as_echo "#define HAVE_GETHOSTBYNAME_R_6 1" >>confdefs.h
+
+ fi
+ #
+ ac_cv_func_gethostbyname_r="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ac_cv_func_gethostbyname_r="no"
+ fi
+
+
+ #
+ tst_links_gethostname="unknown"
+ tst_proto_gethostname="unknown"
+ tst_compi_gethostname="unknown"
+ tst_allow_gethostname="unknown"
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if gethostname can be linked" >&5
+$as_echo_n "checking if gethostname can be linked... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_winsock2
+ $curl_includes_unistd
+
+int main (void)
+{
+
+ if(0 != gethostname(0, 0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_links_gethostname="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_links_gethostname="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ #
+ if test "$tst_links_gethostname" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if gethostname is prototyped" >&5
+$as_echo_n "checking if gethostname is prototyped... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ $curl_includes_winsock2
+ $curl_includes_unistd
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "gethostname" >/dev/null 2>&1; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_proto_gethostname="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_proto_gethostname="no"
+
+fi
+rm -f conftest*
+
+ fi
+ #
+ if test "$tst_proto_gethostname" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if gethostname is compilable" >&5
+$as_echo_n "checking if gethostname is compilable... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_winsock2
+ $curl_includes_unistd
+
+int main (void)
+{
+
+ if(0 != gethostname(0, 0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_compi_gethostname="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_compi_gethostname="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ #
+ if test "$tst_compi_gethostname" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if gethostname usage allowed" >&5
+$as_echo_n "checking if gethostname usage allowed... " >&6; }
+ if test "x$curl_disallow_gethostname" != "xyes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_allow_gethostname="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_allow_gethostname="no"
+ fi
+ fi
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if gethostname might be used" >&5
+$as_echo_n "checking if gethostname might be used... " >&6; }
+ if test "$tst_links_gethostname" = "yes" &&
+ test "$tst_proto_gethostname" = "yes" &&
+ test "$tst_compi_gethostname" = "yes" &&
+ test "$tst_allow_gethostname" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_GETHOSTNAME 1
+_ACEOF
+
+ ac_cv_func_gethostname="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ac_cv_func_gethostname="no"
+ fi
+
+
+ #
+ tst_links_getifaddrs="unknown"
+ tst_proto_getifaddrs="unknown"
+ tst_compi_getifaddrs="unknown"
+ tst_works_getifaddrs="unknown"
+ tst_allow_getifaddrs="unknown"
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if getifaddrs can be linked" >&5
+$as_echo_n "checking if getifaddrs can be linked... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#define getifaddrs innocuous_getifaddrs
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+#undef getifaddrs
+#ifdef __cplusplus
+extern "C"
+#endif
+char getifaddrs ();
+#if defined __stub_getifaddrs || defined __stub___getifaddrs
+choke me
+#endif
+
+int main (void)
+{
+return getifaddrs ();
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_links_getifaddrs="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_links_getifaddrs="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ #
+ if test "$tst_links_getifaddrs" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if getifaddrs is prototyped" >&5
+$as_echo_n "checking if getifaddrs is prototyped... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ $curl_includes_ifaddrs
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "getifaddrs" >/dev/null 2>&1; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_proto_getifaddrs="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_proto_getifaddrs="no"
+
+fi
+rm -f conftest*
+
+ fi
+ #
+ if test "$tst_proto_getifaddrs" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if getifaddrs is compilable" >&5
+$as_echo_n "checking if getifaddrs is compilable... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_ifaddrs
+
+int main (void)
+{
+
+ if(0 != getifaddrs(0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_compi_getifaddrs="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_compi_getifaddrs="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ #
+ if test "x$cross_compiling" != "xyes" &&
+ test "$tst_compi_getifaddrs" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if getifaddrs seems to work" >&5
+$as_echo_n "checking if getifaddrs seems to work... " >&6; }
+ if test "$cross_compiling" = yes; then :
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run test program while cross compiling
+See \`config.log' for more details" "$LINENO" 5 ; }
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_stdlib
+ $curl_includes_ifaddrs
+
+int main (void)
+{
+
+ struct ifaddrs *ifa = 0;
+ int error;
+
+ error = getifaddrs(&ifa);
+ if(error || !ifa)
+ exit(1); /* fail */
+ else
+ exit(0);
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_works_getifaddrs="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_works_getifaddrs="no"
+
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ fi
+ #
+ if test "$tst_compi_getifaddrs" = "yes" &&
+ test "$tst_works_getifaddrs" != "no"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if getifaddrs usage allowed" >&5
+$as_echo_n "checking if getifaddrs usage allowed... " >&6; }
+ if test "x$curl_disallow_getifaddrs" != "xyes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_allow_getifaddrs="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_allow_getifaddrs="no"
+ fi
+ fi
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if getifaddrs might be used" >&5
+$as_echo_n "checking if getifaddrs might be used... " >&6; }
+ if test "$tst_links_getifaddrs" = "yes" &&
+ test "$tst_proto_getifaddrs" = "yes" &&
+ test "$tst_compi_getifaddrs" = "yes" &&
+ test "$tst_allow_getifaddrs" = "yes" &&
+ test "$tst_works_getifaddrs" != "no"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_GETIFADDRS 1
+_ACEOF
+
+ ac_cv_func_getifaddrs="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ac_cv_func_getifaddrs="no"
+ fi
+
+
+ #
+ tst_links_getservbyport_r="unknown"
+ tst_proto_getservbyport_r="unknown"
+ tst_compi_getservbyport_r="unknown"
+ tst_allow_getservbyport_r="unknown"
+ tst_nargs_getservbyport_r="unknown"
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if getservbyport_r can be linked" >&5
+$as_echo_n "checking if getservbyport_r can be linked... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#define getservbyport_r innocuous_getservbyport_r
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+#undef getservbyport_r
+#ifdef __cplusplus
+extern "C"
+#endif
+char getservbyport_r ();
+#if defined __stub_getservbyport_r || defined __stub___getservbyport_r
+choke me
+#endif
+
+int main (void)
+{
+return getservbyport_r ();
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_links_getservbyport_r="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_links_getservbyport_r="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ #
+ if test "$tst_links_getservbyport_r" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if getservbyport_r is prototyped" >&5
+$as_echo_n "checking if getservbyport_r is prototyped... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ $curl_includes_netdb
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "getservbyport_r" >/dev/null 2>&1; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_proto_getservbyport_r="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_proto_getservbyport_r="no"
+
+fi
+rm -f conftest*
+
+ fi
+ #
+ if test "$tst_proto_getservbyport_r" = "yes"; then
+ if test "$tst_nargs_getservbyport_r" = "unknown"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if getservbyport_r takes 4 args." >&5
+$as_echo_n "checking if getservbyport_r takes 4 args.... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_netdb
+
+int main (void)
+{
+
+ if(0 != getservbyport_r(0, 0, 0, 0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_compi_getservbyport_r="yes"
+ tst_nargs_getservbyport_r="4"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_compi_getservbyport_r="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ if test "$tst_nargs_getservbyport_r" = "unknown"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if getservbyport_r takes 5 args." >&5
+$as_echo_n "checking if getservbyport_r takes 5 args.... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_netdb
+
+int main (void)
+{
+
+ if(0 != getservbyport_r(0, 0, 0, 0, 0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_compi_getservbyport_r="yes"
+ tst_nargs_getservbyport_r="5"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_compi_getservbyport_r="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ if test "$tst_nargs_getservbyport_r" = "unknown"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if getservbyport_r takes 6 args." >&5
+$as_echo_n "checking if getservbyport_r takes 6 args.... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_netdb
+
+int main (void)
+{
+
+ if(0 != getservbyport_r(0, 0, 0, 0, 0, 0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_compi_getservbyport_r="yes"
+ tst_nargs_getservbyport_r="6"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_compi_getservbyport_r="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if getservbyport_r is compilable" >&5
+$as_echo_n "checking if getservbyport_r is compilable... " >&6; }
+ if test "$tst_compi_getservbyport_r" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ fi
+ fi
+ #
+ if test "$tst_compi_getservbyport_r" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if getservbyport_r usage allowed" >&5
+$as_echo_n "checking if getservbyport_r usage allowed... " >&6; }
+ if test "x$curl_disallow_getservbyport_r" != "xyes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_allow_getservbyport_r="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_allow_getservbyport_r="no"
+ fi
+ fi
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if getservbyport_r might be used" >&5
+$as_echo_n "checking if getservbyport_r might be used... " >&6; }
+ if test "$tst_links_getservbyport_r" = "yes" &&
+ test "$tst_proto_getservbyport_r" = "yes" &&
+ test "$tst_compi_getservbyport_r" = "yes" &&
+ test "$tst_allow_getservbyport_r" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_GETSERVBYPORT_R 1
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define GETSERVBYPORT_R_ARGS $tst_nargs_getservbyport_r
+_ACEOF
+
+ if test "$tst_nargs_getservbyport_r" -eq "4"; then
+
+$as_echo "#define GETSERVBYPORT_R_BUFSIZE sizeof(struct servent_data)" >>confdefs.h
+
+ else
+
+$as_echo "#define GETSERVBYPORT_R_BUFSIZE 4096" >>confdefs.h
+
+ fi
+ ac_cv_func_getservbyport_r="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ac_cv_func_getservbyport_r="no"
+ fi
+
+
+curl_includes_time="\
+/* includes start */
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_TIME_H
+# include <sys/time.h>
+# ifdef TIME_WITH_SYS_TIME
+# include <time.h>
+# endif
+#else
+# ifdef HAVE_TIME_H
+# include <time.h>
+# endif
+#endif
+/* includes end */"
+ for ac_header in sys/types.h sys/time.h time.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$curl_includes_time
+"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+ #
+ tst_links_gmtime_r="unknown"
+ tst_proto_gmtime_r="unknown"
+ tst_compi_gmtime_r="unknown"
+ tst_works_gmtime_r="unknown"
+ tst_allow_gmtime_r="unknown"
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if gmtime_r can be linked" >&5
+$as_echo_n "checking if gmtime_r can be linked... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#define gmtime_r innocuous_gmtime_r
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+#undef gmtime_r
+#ifdef __cplusplus
+extern "C"
+#endif
+char gmtime_r ();
+#if defined __stub_gmtime_r || defined __stub___gmtime_r
+choke me
+#endif
+
+int main (void)
+{
+return gmtime_r ();
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_links_gmtime_r="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_links_gmtime_r="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ #
+ if test "$tst_links_gmtime_r" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if gmtime_r is prototyped" >&5
+$as_echo_n "checking if gmtime_r is prototyped... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ $curl_includes_time
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "gmtime_r" >/dev/null 2>&1; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_proto_gmtime_r="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_proto_gmtime_r="no"
+
+fi
+rm -f conftest*
+
+ fi
+ #
+ if test "$tst_proto_gmtime_r" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if gmtime_r is compilable" >&5
+$as_echo_n "checking if gmtime_r is compilable... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_time
+
+int main (void)
+{
+
+ if(0 != gmtime_r(0, 0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_compi_gmtime_r="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_compi_gmtime_r="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ #
+ if test "x$cross_compiling" != "xyes" &&
+ test "$tst_compi_gmtime_r" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if gmtime_r seems to work" >&5
+$as_echo_n "checking if gmtime_r seems to work... " >&6; }
+ if test "$cross_compiling" = yes; then :
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run test program while cross compiling
+See \`config.log' for more details" "$LINENO" 5 ; }
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_stdlib
+ $curl_includes_time
+
+int main (void)
+{
+
+ time_t local = 1170352587;
+ struct tm *gmt = 0;
+ struct tm result;
+ gmt = gmtime_r(&local, &result);
+ if(gmt)
+ exit(0);
+ else
+ exit(1);
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_works_gmtime_r="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_works_gmtime_r="no"
+
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ fi
+ #
+ if test "$tst_compi_gmtime_r" = "yes" &&
+ test "$tst_works_gmtime_r" != "no"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if gmtime_r usage allowed" >&5
+$as_echo_n "checking if gmtime_r usage allowed... " >&6; }
+ if test "x$curl_disallow_gmtime_r" != "xyes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_allow_gmtime_r="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_allow_gmtime_r="no"
+ fi
+ fi
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if gmtime_r might be used" >&5
+$as_echo_n "checking if gmtime_r might be used... " >&6; }
+ if test "$tst_links_gmtime_r" = "yes" &&
+ test "$tst_proto_gmtime_r" = "yes" &&
+ test "$tst_compi_gmtime_r" = "yes" &&
+ test "$tst_allow_gmtime_r" = "yes" &&
+ test "$tst_works_gmtime_r" != "no"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_GMTIME_R 1
+_ACEOF
+
+ ac_cv_func_gmtime_r="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ac_cv_func_gmtime_r="no"
+ fi
+
+
+curl_includes_arpa_inet="\
+/* includes start */
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+# include <sys/socket.h>
+#endif
+#ifdef HAVE_NETINET_IN_H
+# include <netinet/in.h>
+#endif
+#ifdef HAVE_ARPA_INET_H
+# include <arpa/inet.h>
+#endif
+/* includes end */"
+ for ac_header in sys/types.h sys/socket.h netinet/in.h arpa/inet.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$curl_includes_arpa_inet
+"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+ #
+ tst_links_inet_ntoa_r="unknown"
+ tst_proto_inet_ntoa_r="unknown"
+ tst_compi_inet_ntoa_r="unknown"
+ tst_allow_inet_ntoa_r="unknown"
+ tst_nargs_inet_ntoa_r="unknown"
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if inet_ntoa_r can be linked" >&5
+$as_echo_n "checking if inet_ntoa_r can be linked... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#define inet_ntoa_r innocuous_inet_ntoa_r
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+#undef inet_ntoa_r
+#ifdef __cplusplus
+extern "C"
+#endif
+char inet_ntoa_r ();
+#if defined __stub_inet_ntoa_r || defined __stub___inet_ntoa_r
+choke me
+#endif
+
+int main (void)
+{
+return inet_ntoa_r ();
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_links_inet_ntoa_r="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_links_inet_ntoa_r="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ #
+ if test "$tst_links_inet_ntoa_r" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if inet_ntoa_r is prototyped" >&5
+$as_echo_n "checking if inet_ntoa_r is prototyped... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ $curl_includes_arpa_inet
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "inet_ntoa_r" >/dev/null 2>&1; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_proto_inet_ntoa_r="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_proto_inet_ntoa_r="no"
+
+fi
+rm -f conftest*
+
+ fi
+ #
+ if test "$tst_proto_inet_ntoa_r" = "yes"; then
+ if test "$tst_nargs_inet_ntoa_r" = "unknown"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if inet_ntoa_r takes 2 args." >&5
+$as_echo_n "checking if inet_ntoa_r takes 2 args.... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_arpa_inet
+
+int main (void)
+{
+
+ struct in_addr addr;
+ if(0 != inet_ntoa_r(addr, 0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_compi_inet_ntoa_r="yes"
+ tst_nargs_inet_ntoa_r="2"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_compi_inet_ntoa_r="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ if test "$tst_nargs_inet_ntoa_r" = "unknown"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if inet_ntoa_r takes 3 args." >&5
+$as_echo_n "checking if inet_ntoa_r takes 3 args.... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_arpa_inet
+
+int main (void)
+{
+
+ struct in_addr addr;
+ if(0 != inet_ntoa_r(addr, 0, 0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_compi_inet_ntoa_r="yes"
+ tst_nargs_inet_ntoa_r="3"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_compi_inet_ntoa_r="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if inet_ntoa_r is compilable" >&5
+$as_echo_n "checking if inet_ntoa_r is compilable... " >&6; }
+ if test "$tst_compi_inet_ntoa_r" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ fi
+ fi
+ #
+ if test "$tst_compi_inet_ntoa_r" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if inet_ntoa_r usage allowed" >&5
+$as_echo_n "checking if inet_ntoa_r usage allowed... " >&6; }
+ if test "x$curl_disallow_inet_ntoa_r" != "xyes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_allow_inet_ntoa_r="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_allow_inet_ntoa_r="no"
+ fi
+ fi
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if inet_ntoa_r might be used" >&5
+$as_echo_n "checking if inet_ntoa_r might be used... " >&6; }
+ if test "$tst_links_inet_ntoa_r" = "yes" &&
+ test "$tst_proto_inet_ntoa_r" = "yes" &&
+ test "$tst_compi_inet_ntoa_r" = "yes" &&
+ test "$tst_allow_inet_ntoa_r" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_INET_NTOA_R 1
+_ACEOF
+
+ #
+ if test "$tst_nargs_inet_ntoa_r" -eq "2"; then
+
+$as_echo "#define HAVE_INET_NTOA_R_2 1" >>confdefs.h
+
+ elif test "$tst_nargs_inet_ntoa_r" -eq "3"; then
+
+$as_echo "#define HAVE_INET_NTOA_R_3 1" >>confdefs.h
+
+ fi
+ #
+ ac_cv_func_inet_ntoa_r="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ac_cv_func_inet_ntoa_r="no"
+ fi
+
+
+ #
+ tst_links_inet_ntop="unknown"
+ tst_proto_inet_ntop="unknown"
+ tst_compi_inet_ntop="unknown"
+ tst_works_inet_ntop="unknown"
+ tst_allow_inet_ntop="unknown"
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if inet_ntop can be linked" >&5
+$as_echo_n "checking if inet_ntop can be linked... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#define inet_ntop innocuous_inet_ntop
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+#undef inet_ntop
+#ifdef __cplusplus
+extern "C"
+#endif
+char inet_ntop ();
+#if defined __stub_inet_ntop || defined __stub___inet_ntop
+choke me
+#endif
+
+int main (void)
+{
+return inet_ntop ();
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_links_inet_ntop="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_links_inet_ntop="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ #
+ if test "$tst_links_inet_ntop" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if inet_ntop is prototyped" >&5
+$as_echo_n "checking if inet_ntop is prototyped... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ $curl_includes_arpa_inet
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "inet_ntop" >/dev/null 2>&1; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_proto_inet_ntop="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_proto_inet_ntop="no"
+
+fi
+rm -f conftest*
+
+ fi
+ #
+ if test "$tst_proto_inet_ntop" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if inet_ntop is compilable" >&5
+$as_echo_n "checking if inet_ntop is compilable... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_arpa_inet
+
+int main (void)
+{
+
+ if(0 != inet_ntop(0, 0, 0, 0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_compi_inet_ntop="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_compi_inet_ntop="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ #
+ if test "x$cross_compiling" != "xyes" &&
+ test "$tst_compi_inet_ntop" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if inet_ntop seems to work" >&5
+$as_echo_n "checking if inet_ntop seems to work... " >&6; }
+ if test "$cross_compiling" = yes; then :
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run test program while cross compiling
+See \`config.log' for more details" "$LINENO" 5 ; }
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_stdlib
+ $curl_includes_arpa_inet
+ $curl_includes_string
+
+int main (void)
+{
+
+ char ipv6res[sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255")];
+ char ipv4res[sizeof "255.255.255.255"];
+ unsigned char ipv6a[26];
+ unsigned char ipv4a[5];
+ char *ipv6ptr = 0;
+ char *ipv4ptr = 0;
+ /* - */
+ ipv4res[0] = '\0';
+ ipv4a[0] = 0xc0;
+ ipv4a[1] = 0xa8;
+ ipv4a[2] = 0x64;
+ ipv4a[3] = 0x01;
+ ipv4a[4] = 0x01;
+ /* - */
+ ipv4ptr = inet_ntop(AF_INET, ipv4a, ipv4res, sizeof(ipv4res));
+ if(!ipv4ptr)
+ exit(1); /* fail */
+ if(ipv4ptr != ipv4res)
+ exit(1); /* fail */
+ if(!ipv4ptr[0])
+ exit(1); /* fail */
+ if(memcmp(ipv4res, "192.168.100.1", 13) != 0)
+ exit(1); /* fail */
+ /* - */
+ ipv6res[0] = '\0';
+ memset(ipv6a, 0, sizeof(ipv6a));
+ ipv6a[0] = 0xfe;
+ ipv6a[1] = 0x80;
+ ipv6a[8] = 0x02;
+ ipv6a[9] = 0x14;
+ ipv6a[10] = 0x4f;
+ ipv6a[11] = 0xff;
+ ipv6a[12] = 0xfe;
+ ipv6a[13] = 0x0b;
+ ipv6a[14] = 0x76;
+ ipv6a[15] = 0xc8;
+ ipv6a[25] = 0x01;
+ /* - */
+ ipv6ptr = inet_ntop(AF_INET6, ipv6a, ipv6res, sizeof(ipv6res));
+ if(!ipv6ptr)
+ exit(1); /* fail */
+ if(ipv6ptr != ipv6res)
+ exit(1); /* fail */
+ if(!ipv6ptr[0])
+ exit(1); /* fail */
+ if(memcmp(ipv6res, "fe80::214:4fff:fe0b:76c8", 24) != 0)
+ exit(1); /* fail */
+ /* - */
+ exit(0);
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_works_inet_ntop="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_works_inet_ntop="no"
+
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ fi
+ #
+ if test "$tst_compi_inet_ntop" = "yes" &&
+ test "$tst_works_inet_ntop" != "no"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if inet_ntop usage allowed" >&5
+$as_echo_n "checking if inet_ntop usage allowed... " >&6; }
+ if test "x$curl_disallow_inet_ntop" != "xyes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_allow_inet_ntop="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_allow_inet_ntop="no"
+ fi
+ fi
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if inet_ntop might be used" >&5
+$as_echo_n "checking if inet_ntop might be used... " >&6; }
+ if test "$tst_links_inet_ntop" = "yes" &&
+ test "$tst_proto_inet_ntop" = "yes" &&
+ test "$tst_compi_inet_ntop" = "yes" &&
+ test "$tst_allow_inet_ntop" = "yes" &&
+ test "$tst_works_inet_ntop" != "no"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_INET_NTOP 1
+_ACEOF
+
+ ac_cv_func_inet_ntop="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ac_cv_func_inet_ntop="no"
+ fi
+
+
+ #
+ tst_links_inet_pton="unknown"
+ tst_proto_inet_pton="unknown"
+ tst_compi_inet_pton="unknown"
+ tst_works_inet_pton="unknown"
+ tst_allow_inet_pton="unknown"
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if inet_pton can be linked" >&5
+$as_echo_n "checking if inet_pton can be linked... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#define inet_pton innocuous_inet_pton
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+#undef inet_pton
+#ifdef __cplusplus
+extern "C"
+#endif
+char inet_pton ();
+#if defined __stub_inet_pton || defined __stub___inet_pton
+choke me
+#endif
+
+int main (void)
+{
+return inet_pton ();
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_links_inet_pton="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_links_inet_pton="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ #
+ if test "$tst_links_inet_pton" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if inet_pton is prototyped" >&5
+$as_echo_n "checking if inet_pton is prototyped... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ $curl_includes_arpa_inet
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "inet_pton" >/dev/null 2>&1; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_proto_inet_pton="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_proto_inet_pton="no"
+
+fi
+rm -f conftest*
+
+ fi
+ #
+ if test "$tst_proto_inet_pton" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if inet_pton is compilable" >&5
+$as_echo_n "checking if inet_pton is compilable... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_arpa_inet
+
+int main (void)
+{
+
+ if(0 != inet_pton(0, 0, 0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_compi_inet_pton="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_compi_inet_pton="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ #
+ if test "x$cross_compiling" != "xyes" &&
+ test "$tst_compi_inet_pton" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if inet_pton seems to work" >&5
+$as_echo_n "checking if inet_pton seems to work... " >&6; }
+ if test "$cross_compiling" = yes; then :
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run test program while cross compiling
+See \`config.log' for more details" "$LINENO" 5 ; }
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_stdlib
+ $curl_includes_arpa_inet
+ $curl_includes_string
+
+int main (void)
+{
+
+ unsigned char ipv6a[16+1];
+ unsigned char ipv4a[4+1];
+ const char *ipv6src = "fe80::214:4fff:fe0b:76c8";
+ const char *ipv4src = "192.168.100.1";
+ /* - */
+ memset(ipv4a, 1, sizeof(ipv4a));
+ if(1 != inet_pton(AF_INET, ipv4src, ipv4a))
+ exit(1); /* fail */
+ /* - */
+ if( (ipv4a[0] != 0xc0) ||
+ (ipv4a[1] != 0xa8) ||
+ (ipv4a[2] != 0x64) ||
+ (ipv4a[3] != 0x01) ||
+ (ipv4a[4] != 0x01) )
+ exit(1); /* fail */
+ /* - */
+ memset(ipv6a, 1, sizeof(ipv6a));
+ if(1 != inet_pton(AF_INET6, ipv6src, ipv6a))
+ exit(1); /* fail */
+ /* - */
+ if( (ipv6a[0] != 0xfe) ||
+ (ipv6a[1] != 0x80) ||
+ (ipv6a[8] != 0x02) ||
+ (ipv6a[9] != 0x14) ||
+ (ipv6a[10] != 0x4f) ||
+ (ipv6a[11] != 0xff) ||
+ (ipv6a[12] != 0xfe) ||
+ (ipv6a[13] != 0x0b) ||
+ (ipv6a[14] != 0x76) ||
+ (ipv6a[15] != 0xc8) ||
+ (ipv6a[16] != 0x01) )
+ exit(1); /* fail */
+ /* - */
+ if( (ipv6a[2] != 0x0) ||
+ (ipv6a[3] != 0x0) ||
+ (ipv6a[4] != 0x0) ||
+ (ipv6a[5] != 0x0) ||
+ (ipv6a[6] != 0x0) ||
+ (ipv6a[7] != 0x0) )
+ exit(1); /* fail */
+ /* - */
+ exit(0);
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_works_inet_pton="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_works_inet_pton="no"
+
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ fi
+ #
+ if test "$tst_compi_inet_pton" = "yes" &&
+ test "$tst_works_inet_pton" != "no"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if inet_pton usage allowed" >&5
+$as_echo_n "checking if inet_pton usage allowed... " >&6; }
+ if test "x$curl_disallow_inet_pton" != "xyes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_allow_inet_pton="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_allow_inet_pton="no"
+ fi
+ fi
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if inet_pton might be used" >&5
+$as_echo_n "checking if inet_pton might be used... " >&6; }
+ if test "$tst_links_inet_pton" = "yes" &&
+ test "$tst_proto_inet_pton" = "yes" &&
+ test "$tst_compi_inet_pton" = "yes" &&
+ test "$tst_allow_inet_pton" = "yes" &&
+ test "$tst_works_inet_pton" != "no"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_INET_PTON 1
+_ACEOF
+
+ ac_cv_func_inet_pton="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ac_cv_func_inet_pton="no"
+ fi
+
+
+curl_includes_stropts="\
+/* includes start */
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+# include <sys/socket.h>
+#endif
+#ifdef HAVE_SYS_IOCTL_H
+# include <sys/ioctl.h>
+#endif
+#ifdef HAVE_STROPTS_H
+# include <stropts.h>
+#endif
+/* includes end */"
+ for ac_header in sys/types.h unistd.h sys/socket.h sys/ioctl.h stropts.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$curl_includes_stropts
+"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+ #
+ tst_links_ioctl="unknown"
+ tst_proto_ioctl="unknown"
+ tst_compi_ioctl="unknown"
+ tst_allow_ioctl="unknown"
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if ioctl can be linked" >&5
+$as_echo_n "checking if ioctl can be linked... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#define ioctl innocuous_ioctl
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+#undef ioctl
+#ifdef __cplusplus
+extern "C"
+#endif
+char ioctl ();
+#if defined __stub_ioctl || defined __stub___ioctl
+choke me
+#endif
+
+int main (void)
+{
+return ioctl ();
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_links_ioctl="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_links_ioctl="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ #
+ if test "$tst_links_ioctl" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if ioctl is prototyped" >&5
+$as_echo_n "checking if ioctl is prototyped... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ $curl_includes_stropts
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "ioctl" >/dev/null 2>&1; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_proto_ioctl="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_proto_ioctl="no"
+
+fi
+rm -f conftest*
+
+ fi
+ #
+ if test "$tst_proto_ioctl" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if ioctl is compilable" >&5
+$as_echo_n "checking if ioctl is compilable... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_stropts
+
+int main (void)
+{
+
+ if(0 != ioctl(0, 0, 0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_compi_ioctl="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_compi_ioctl="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ #
+ if test "$tst_compi_ioctl" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if ioctl usage allowed" >&5
+$as_echo_n "checking if ioctl usage allowed... " >&6; }
+ if test "x$curl_disallow_ioctl" != "xyes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_allow_ioctl="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_allow_ioctl="no"
+ fi
+ fi
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if ioctl might be used" >&5
+$as_echo_n "checking if ioctl might be used... " >&6; }
+ if test "$tst_links_ioctl" = "yes" &&
+ test "$tst_proto_ioctl" = "yes" &&
+ test "$tst_compi_ioctl" = "yes" &&
+ test "$tst_allow_ioctl" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_IOCTL 1
+_ACEOF
+
+ ac_cv_func_ioctl="yes"
+
+ #
+ tst_compi_ioctl_fionbio="unknown"
+ tst_allow_ioctl_fionbio="unknown"
+ #
+ if test "$ac_cv_func_ioctl" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if ioctl FIONBIO is compilable" >&5
+$as_echo_n "checking if ioctl FIONBIO is compilable... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_stropts
+
+int main (void)
+{
+
+ int flags = 0;
+ if(0 != ioctl(0, FIONBIO, &flags))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_compi_ioctl_fionbio="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_compi_ioctl_fionbio="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ #
+ if test "$tst_compi_ioctl_fionbio" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if ioctl FIONBIO usage allowed" >&5
+$as_echo_n "checking if ioctl FIONBIO usage allowed... " >&6; }
+ if test "x$curl_disallow_ioctl_fionbio" != "xyes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_allow_ioctl_fionbio="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_allow_ioctl_fionbio="no"
+ fi
+ fi
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if ioctl FIONBIO might be used" >&5
+$as_echo_n "checking if ioctl FIONBIO might be used... " >&6; }
+ if test "$tst_compi_ioctl_fionbio" = "yes" &&
+ test "$tst_allow_ioctl_fionbio" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_IOCTL_FIONBIO 1
+_ACEOF
+
+ ac_cv_func_ioctl_fionbio="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ac_cv_func_ioctl_fionbio="no"
+ fi
+
+
+ #
+ tst_compi_ioctl_siocgifaddr="unknown"
+ tst_allow_ioctl_siocgifaddr="unknown"
+ #
+ if test "$ac_cv_func_ioctl" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if ioctl SIOCGIFADDR is compilable" >&5
+$as_echo_n "checking if ioctl SIOCGIFADDR is compilable... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_stropts
+ #include <net/if.h>
+
+int main (void)
+{
+
+ struct ifreq ifr;
+ if(0 != ioctl(0, SIOCGIFADDR, &ifr))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_compi_ioctl_siocgifaddr="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_compi_ioctl_siocgifaddr="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ #
+ if test "$tst_compi_ioctl_siocgifaddr" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if ioctl SIOCGIFADDR usage allowed" >&5
+$as_echo_n "checking if ioctl SIOCGIFADDR usage allowed... " >&6; }
+ if test "x$curl_disallow_ioctl_siocgifaddr" != "xyes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_allow_ioctl_siocgifaddr="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_allow_ioctl_siocgifaddr="no"
+ fi
+ fi
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if ioctl SIOCGIFADDR might be used" >&5
+$as_echo_n "checking if ioctl SIOCGIFADDR might be used... " >&6; }
+ if test "$tst_compi_ioctl_siocgifaddr" = "yes" &&
+ test "$tst_allow_ioctl_siocgifaddr" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_IOCTL_SIOCGIFADDR 1
+_ACEOF
+
+ ac_cv_func_ioctl_siocgifaddr="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ac_cv_func_ioctl_siocgifaddr="no"
+ fi
+
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ac_cv_func_ioctl="no"
+ fi
+
+
+ #
+ tst_links_ioctlsocket="unknown"
+ tst_proto_ioctlsocket="unknown"
+ tst_compi_ioctlsocket="unknown"
+ tst_allow_ioctlsocket="unknown"
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if ioctlsocket can be linked" >&5
+$as_echo_n "checking if ioctlsocket can be linked... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_winsock2
+
+int main (void)
+{
+
+ if(0 != ioctlsocket(0, 0, 0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_links_ioctlsocket="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_links_ioctlsocket="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ #
+ if test "$tst_links_ioctlsocket" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if ioctlsocket is prototyped" >&5
+$as_echo_n "checking if ioctlsocket is prototyped... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ $curl_includes_winsock2
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "ioctlsocket" >/dev/null 2>&1; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_proto_ioctlsocket="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_proto_ioctlsocket="no"
+
+fi
+rm -f conftest*
+
+ fi
+ #
+ if test "$tst_proto_ioctlsocket" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if ioctlsocket is compilable" >&5
+$as_echo_n "checking if ioctlsocket is compilable... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_winsock2
+
+int main (void)
+{
+
+ if(0 != ioctlsocket(0, 0, 0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_compi_ioctlsocket="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_compi_ioctlsocket="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ #
+ if test "$tst_compi_ioctlsocket" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if ioctlsocket usage allowed" >&5
+$as_echo_n "checking if ioctlsocket usage allowed... " >&6; }
+ if test "x$curl_disallow_ioctlsocket" != "xyes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_allow_ioctlsocket="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_allow_ioctlsocket="no"
+ fi
+ fi
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if ioctlsocket might be used" >&5
+$as_echo_n "checking if ioctlsocket might be used... " >&6; }
+ if test "$tst_links_ioctlsocket" = "yes" &&
+ test "$tst_proto_ioctlsocket" = "yes" &&
+ test "$tst_compi_ioctlsocket" = "yes" &&
+ test "$tst_allow_ioctlsocket" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_IOCTLSOCKET 1
+_ACEOF
+
+ ac_cv_func_ioctlsocket="yes"
+
+ #
+ tst_compi_ioctlsocket_fionbio="unknown"
+ tst_allow_ioctlsocket_fionbio="unknown"
+ #
+ if test "$ac_cv_func_ioctlsocket" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if ioctlsocket FIONBIO is compilable" >&5
+$as_echo_n "checking if ioctlsocket FIONBIO is compilable... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_winsock2
+
+int main (void)
+{
+
+ int flags = 0;
+ if(0 != ioctlsocket(0, FIONBIO, &flags))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_compi_ioctlsocket_fionbio="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_compi_ioctlsocket_fionbio="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ #
+ if test "$tst_compi_ioctlsocket_fionbio" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if ioctlsocket FIONBIO usage allowed" >&5
+$as_echo_n "checking if ioctlsocket FIONBIO usage allowed... " >&6; }
+ if test "x$curl_disallow_ioctlsocket_fionbio" != "xyes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_allow_ioctlsocket_fionbio="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_allow_ioctlsocket_fionbio="no"
+ fi
+ fi
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if ioctlsocket FIONBIO might be used" >&5
+$as_echo_n "checking if ioctlsocket FIONBIO might be used... " >&6; }
+ if test "$tst_compi_ioctlsocket_fionbio" = "yes" &&
+ test "$tst_allow_ioctlsocket_fionbio" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_IOCTLSOCKET_FIONBIO 1
+_ACEOF
+
+ ac_cv_func_ioctlsocket_fionbio="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ac_cv_func_ioctlsocket_fionbio="no"
+ fi
+
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ac_cv_func_ioctlsocket="no"
+ fi
+
+
+ #
+ tst_links_ioctlsocket_camel="unknown"
+ tst_proto_ioctlsocket_camel="unknown"
+ tst_compi_ioctlsocket_camel="unknown"
+ tst_allow_ioctlsocket_camel="unknown"
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if IoctlSocket can be linked" >&5
+$as_echo_n "checking if IoctlSocket can be linked... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#define IoctlSocket innocuous_IoctlSocket
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+#undef IoctlSocket
+#ifdef __cplusplus
+extern "C"
+#endif
+char IoctlSocket ();
+#if defined __stub_IoctlSocket || defined __stub___IoctlSocket
+choke me
+#endif
+
+int main (void)
+{
+return IoctlSocket ();
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_links_ioctlsocket_camel="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_links_ioctlsocket_camel="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ #
+ if test "$tst_links_ioctlsocket_camel" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if IoctlSocket is prototyped" >&5
+$as_echo_n "checking if IoctlSocket is prototyped... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ $curl_includes_stropts
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "IoctlSocket" >/dev/null 2>&1; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_proto_ioctlsocket_camel="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_proto_ioctlsocket_camel="no"
+
+fi
+rm -f conftest*
+
+ fi
+ #
+ if test "$tst_proto_ioctlsocket_camel" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if IoctlSocket is compilable" >&5
+$as_echo_n "checking if IoctlSocket is compilable... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_stropts
+
+int main (void)
+{
+
+ if(0 != IoctlSocket(0, 0, 0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_compi_ioctlsocket_camel="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_compi_ioctlsocket_camel="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ #
+ if test "$tst_compi_ioctlsocket_camel" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if IoctlSocket usage allowed" >&5
+$as_echo_n "checking if IoctlSocket usage allowed... " >&6; }
+ if test "x$curl_disallow_ioctlsocket_camel" != "xyes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_allow_ioctlsocket_camel="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_allow_ioctlsocket_camel="no"
+ fi
+ fi
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if IoctlSocket might be used" >&5
+$as_echo_n "checking if IoctlSocket might be used... " >&6; }
+ if test "$tst_links_ioctlsocket_camel" = "yes" &&
+ test "$tst_proto_ioctlsocket_camel" = "yes" &&
+ test "$tst_compi_ioctlsocket_camel" = "yes" &&
+ test "$tst_allow_ioctlsocket_camel" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_IOCTLSOCKET_CAMEL 1
+_ACEOF
+
+ ac_cv_func_ioctlsocket_camel="yes"
+
+ #
+ tst_compi_ioctlsocket_camel_fionbio="unknown"
+ tst_allow_ioctlsocket_camel_fionbio="unknown"
+ #
+ if test "$ac_cv_func_ioctlsocket_camel" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if IoctlSocket FIONBIO is compilable" >&5
+$as_echo_n "checking if IoctlSocket FIONBIO is compilable... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_stropts
+
+int main (void)
+{
+
+ long flags = 0;
+ if(0 != ioctlsocket(0, FIONBIO, &flags))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_compi_ioctlsocket_camel_fionbio="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_compi_ioctlsocket_camel_fionbio="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ #
+ if test "$tst_compi_ioctlsocket_camel_fionbio" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if IoctlSocket FIONBIO usage allowed" >&5
+$as_echo_n "checking if IoctlSocket FIONBIO usage allowed... " >&6; }
+ if test "x$curl_disallow_ioctlsocket_camel_fionbio" != "xyes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_allow_ioctlsocket_camel_fionbio="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_allow_ioctlsocket_camel_fionbio="no"
+ fi
+ fi
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if IoctlSocket FIONBIO might be used" >&5
+$as_echo_n "checking if IoctlSocket FIONBIO might be used... " >&6; }
+ if test "$tst_compi_ioctlsocket_camel_fionbio" = "yes" &&
+ test "$tst_allow_ioctlsocket_camel_fionbio" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_IOCTLSOCKET_CAMEL_FIONBIO 1
+_ACEOF
+
+ ac_cv_func_ioctlsocket_camel_fionbio="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ac_cv_func_ioctlsocket_camel_fionbio="no"
+ fi
+
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ac_cv_func_ioctlsocket_camel="no"
+ fi
+
+
+ #
+ tst_links_localtime_r="unknown"
+ tst_proto_localtime_r="unknown"
+ tst_compi_localtime_r="unknown"
+ tst_works_localtime_r="unknown"
+ tst_allow_localtime_r="unknown"
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if localtime_r can be linked" >&5
+$as_echo_n "checking if localtime_r can be linked... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#define localtime_r innocuous_localtime_r
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+#undef localtime_r
+#ifdef __cplusplus
+extern "C"
+#endif
+char localtime_r ();
+#if defined __stub_localtime_r || defined __stub___localtime_r
+choke me
+#endif
+
+int main (void)
+{
+return localtime_r ();
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_links_localtime_r="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_links_localtime_r="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ #
+ if test "$tst_links_localtime_r" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if localtime_r is prototyped" >&5
+$as_echo_n "checking if localtime_r is prototyped... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ $curl_includes_time
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "localtime_r" >/dev/null 2>&1; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_proto_localtime_r="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_proto_localtime_r="no"
+
+fi
+rm -f conftest*
+
+ fi
+ #
+ if test "$tst_proto_localtime_r" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if localtime_r is compilable" >&5
+$as_echo_n "checking if localtime_r is compilable... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_time
+
+int main (void)
+{
+
+ if(0 != localtime_r(0, 0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_compi_localtime_r="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_compi_localtime_r="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ #
+ if test "x$cross_compiling" != "xyes" &&
+ test "$tst_compi_localtime_r" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if localtime_r seems to work" >&5
+$as_echo_n "checking if localtime_r seems to work... " >&6; }
+ if test "$cross_compiling" = yes; then :
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run test program while cross compiling
+See \`config.log' for more details" "$LINENO" 5 ; }
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_stdlib
+ $curl_includes_time
+
+int main (void)
+{
+
+ time_t clock = 1170352587;
+ struct tm *tmp = 0;
+ struct tm result;
+ tmp = localtime_r(&clock, &result);
+ if(tmp)
+ exit(0);
+ else
+ exit(1);
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_works_localtime_r="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_works_localtime_r="no"
+
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ fi
+ #
+ if test "$tst_compi_localtime_r" = "yes" &&
+ test "$tst_works_localtime_r" != "no"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if localtime_r usage allowed" >&5
+$as_echo_n "checking if localtime_r usage allowed... " >&6; }
+ if test "x$curl_disallow_localtime_r" != "xyes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_allow_localtime_r="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_allow_localtime_r="no"
+ fi
+ fi
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if localtime_r might be used" >&5
+$as_echo_n "checking if localtime_r might be used... " >&6; }
+ if test "$tst_links_localtime_r" = "yes" &&
+ test "$tst_proto_localtime_r" = "yes" &&
+ test "$tst_compi_localtime_r" = "yes" &&
+ test "$tst_allow_localtime_r" = "yes" &&
+ test "$tst_works_localtime_r" != "no"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_LOCALTIME_R 1
+_ACEOF
+
+ ac_cv_func_localtime_r="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ac_cv_func_localtime_r="no"
+ fi
+
+
+ #
+ tst_links_memrchr="unknown"
+ tst_macro_memrchr="unknown"
+ tst_proto_memrchr="unknown"
+ tst_compi_memrchr="unknown"
+ tst_allow_memrchr="unknown"
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if memrchr can be linked" >&5
+$as_echo_n "checking if memrchr can be linked... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#define memrchr innocuous_memrchr
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+#undef memrchr
+#ifdef __cplusplus
+extern "C"
+#endif
+char memrchr ();
+#if defined __stub_memrchr || defined __stub___memrchr
+choke me
+#endif
+
+int main (void)
+{
+return memrchr ();
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_links_memrchr="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_links_memrchr="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ #
+ if test "$tst_links_memrchr" = "no"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if memrchr seems a macro" >&5
+$as_echo_n "checking if memrchr seems a macro... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_string
+
+int main (void)
+{
+
+ if(0 != memrchr(0, 0, 0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_macro_memrchr="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_macro_memrchr="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ fi
+ #
+ if test "$tst_links_memrchr" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if memrchr is prototyped" >&5
+$as_echo_n "checking if memrchr is prototyped... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ $curl_includes_string
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "memrchr" >/dev/null 2>&1; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_proto_memrchr="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_proto_memrchr="no"
+
+fi
+rm -f conftest*
+
+ fi
+ #
+ if test "$tst_proto_memrchr" = "yes" ||
+ test "$tst_macro_memrchr" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if memrchr is compilable" >&5
+$as_echo_n "checking if memrchr is compilable... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_string
+
+int main (void)
+{
+
+ if(0 != memrchr(0, 0, 0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_compi_memrchr="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_compi_memrchr="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ #
+ if test "$tst_compi_memrchr" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if memrchr usage allowed" >&5
+$as_echo_n "checking if memrchr usage allowed... " >&6; }
+ if test "x$curl_disallow_memrchr" != "xyes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_allow_memrchr="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_allow_memrchr="no"
+ fi
+ fi
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if memrchr might be used" >&5
+$as_echo_n "checking if memrchr might be used... " >&6; }
+ if (test "$tst_proto_memrchr" = "yes" ||
+ test "$tst_macro_memrchr" = "yes") &&
+ test "$tst_compi_memrchr" = "yes" &&
+ test "$tst_allow_memrchr" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_MEMRCHR 1
+_ACEOF
+
+ ac_cv_func_memrchr="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ac_cv_func_memrchr="no"
+ fi
+
+
+curl_includes_poll="\
+/* includes start */
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_POLL_H
+# include <poll.h>
+#endif
+#ifdef HAVE_SYS_POLL_H
+# include <sys/poll.h>
+#endif
+/* includes end */"
+ for ac_header in sys/types.h poll.h sys/poll.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$curl_includes_poll
+"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+ #
+ tst_links_poll="unknown"
+ tst_proto_poll="unknown"
+ tst_compi_poll="unknown"
+ tst_works_poll="unknown"
+ tst_allow_poll="unknown"
+ #
+ case $host_os in
+ darwin*|interix*)
+ curl_disallow_poll="yes"
+ ;;
+ esac
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if poll can be linked" >&5
+$as_echo_n "checking if poll can be linked... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_poll
+
+int main (void)
+{
+
+ if(0 != poll(0, 0, 0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_links_poll="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_links_poll="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ #
+ if test "$tst_links_poll" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if poll is prototyped" >&5
+$as_echo_n "checking if poll is prototyped... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ $curl_includes_poll
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "poll" >/dev/null 2>&1; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_proto_poll="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_proto_poll="no"
+
+fi
+rm -f conftest*
+
+ fi
+ #
+ if test "$tst_proto_poll" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if poll is compilable" >&5
+$as_echo_n "checking if poll is compilable... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_poll
+
+int main (void)
+{
+
+ if(0 != poll(0, 0, 0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_compi_poll="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_compi_poll="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ #
+ if test "x$cross_compiling" != "xyes" &&
+ test "$tst_compi_poll" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if poll seems to work" >&5
+$as_echo_n "checking if poll seems to work... " >&6; }
+ if test "$cross_compiling" = yes; then :
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run test program while cross compiling
+See \`config.log' for more details" "$LINENO" 5 ; }
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_stdlib
+ $curl_includes_poll
+
+int main (void)
+{
+
+ if(0 != poll(0, 0, 10))
+ exit(1); /* fail */
+ else
+ exit(0);
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_works_poll="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_works_poll="no"
+
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ fi
+ #
+ if test "$tst_compi_poll" = "yes" &&
+ test "$tst_works_poll" != "no"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if poll usage allowed" >&5
+$as_echo_n "checking if poll usage allowed... " >&6; }
+ if test "x$curl_disallow_poll" != "xyes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_allow_poll="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_allow_poll="no"
+ fi
+ fi
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if poll might be used" >&5
+$as_echo_n "checking if poll might be used... " >&6; }
+ if test "$tst_links_poll" = "yes" &&
+ test "$tst_proto_poll" = "yes" &&
+ test "$tst_compi_poll" = "yes" &&
+ test "$tst_allow_poll" = "yes" &&
+ test "$tst_works_poll" != "no"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_POLL 1
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_POLL_FINE 1
+_ACEOF
+
+ ac_cv_func_poll="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ac_cv_func_poll="no"
+ fi
+
+
+ #
+ tst_links_setsockopt="unknown"
+ tst_proto_setsockopt="unknown"
+ tst_compi_setsockopt="unknown"
+ tst_allow_setsockopt="unknown"
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if setsockopt can be linked" >&5
+$as_echo_n "checking if setsockopt can be linked... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_winsock2
+ $curl_includes_sys_socket
+
+int main (void)
+{
+
+ if(0 != setsockopt(0, 0, 0, 0, 0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_links_setsockopt="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_links_setsockopt="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ #
+ if test "$tst_links_setsockopt" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if setsockopt is prototyped" >&5
+$as_echo_n "checking if setsockopt is prototyped... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ $curl_includes_winsock2
+ $curl_includes_sys_socket
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "setsockopt" >/dev/null 2>&1; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_proto_setsockopt="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_proto_setsockopt="no"
+
+fi
+rm -f conftest*
+
+ fi
+ #
+ if test "$tst_proto_setsockopt" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if setsockopt is compilable" >&5
+$as_echo_n "checking if setsockopt is compilable... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_winsock2
+ $curl_includes_sys_socket
+
+int main (void)
+{
+
+ if(0 != setsockopt(0, 0, 0, 0, 0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_compi_setsockopt="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_compi_setsockopt="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ #
+ if test "$tst_compi_setsockopt" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if setsockopt usage allowed" >&5
+$as_echo_n "checking if setsockopt usage allowed... " >&6; }
+ if test "x$curl_disallow_setsockopt" != "xyes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_allow_setsockopt="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_allow_setsockopt="no"
+ fi
+ fi
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if setsockopt might be used" >&5
+$as_echo_n "checking if setsockopt might be used... " >&6; }
+ if test "$tst_links_setsockopt" = "yes" &&
+ test "$tst_proto_setsockopt" = "yes" &&
+ test "$tst_compi_setsockopt" = "yes" &&
+ test "$tst_allow_setsockopt" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_SETSOCKOPT 1
+_ACEOF
+
+ ac_cv_func_setsockopt="yes"
+
+ #
+ tst_compi_setsockopt_so_nonblock="unknown"
+ tst_allow_setsockopt_so_nonblock="unknown"
+ #
+ if test "$ac_cv_func_setsockopt" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if setsockopt SO_NONBLOCK is compilable" >&5
+$as_echo_n "checking if setsockopt SO_NONBLOCK is compilable... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_winsock2
+ $curl_includes_sys_socket
+
+int main (void)
+{
+
+ if(0 != setsockopt(0, SOL_SOCKET, SO_NONBLOCK, 0, 0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_compi_setsockopt_so_nonblock="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_compi_setsockopt_so_nonblock="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ #
+ if test "$tst_compi_setsockopt_so_nonblock" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if setsockopt SO_NONBLOCK usage allowed" >&5
+$as_echo_n "checking if setsockopt SO_NONBLOCK usage allowed... " >&6; }
+ if test "x$curl_disallow_setsockopt_so_nonblock" != "xyes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_allow_setsockopt_so_nonblock="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_allow_setsockopt_so_nonblock="no"
+ fi
+ fi
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if setsockopt SO_NONBLOCK might be used" >&5
+$as_echo_n "checking if setsockopt SO_NONBLOCK might be used... " >&6; }
+ if test "$tst_compi_setsockopt_so_nonblock" = "yes" &&
+ test "$tst_allow_setsockopt_so_nonblock" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_SETSOCKOPT_SO_NONBLOCK 1
+_ACEOF
+
+ ac_cv_func_setsockopt_so_nonblock="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ac_cv_func_setsockopt_so_nonblock="no"
+ fi
+
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ac_cv_func_setsockopt="no"
+ fi
+
+
+curl_includes_signal="\
+/* includes start */
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SIGNAL_H
+# include <signal.h>
+#endif
+/* includes end */"
+ for ac_header in sys/types.h signal.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$curl_includes_signal
+"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+ #
+ tst_links_sigaction="unknown"
+ tst_proto_sigaction="unknown"
+ tst_compi_sigaction="unknown"
+ tst_allow_sigaction="unknown"
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if sigaction can be linked" >&5
+$as_echo_n "checking if sigaction can be linked... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#define sigaction innocuous_sigaction
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+#undef sigaction
+#ifdef __cplusplus
+extern "C"
+#endif
+char sigaction ();
+#if defined __stub_sigaction || defined __stub___sigaction
+choke me
+#endif
+
+int main (void)
+{
+return sigaction ();
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_links_sigaction="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_links_sigaction="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ #
+ if test "$tst_links_sigaction" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if sigaction is prototyped" >&5
+$as_echo_n "checking if sigaction is prototyped... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ $curl_includes_signal
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "sigaction" >/dev/null 2>&1; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_proto_sigaction="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_proto_sigaction="no"
+
+fi
+rm -f conftest*
+
+ fi
+ #
+ if test "$tst_proto_sigaction" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if sigaction is compilable" >&5
+$as_echo_n "checking if sigaction is compilable... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_signal
+
+int main (void)
+{
+
+ if(0 != sigaction(0, 0, 0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_compi_sigaction="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_compi_sigaction="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ #
+ if test "$tst_compi_sigaction" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if sigaction usage allowed" >&5
+$as_echo_n "checking if sigaction usage allowed... " >&6; }
+ if test "x$curl_disallow_sigaction" != "xyes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_allow_sigaction="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_allow_sigaction="no"
+ fi
+ fi
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if sigaction might be used" >&5
+$as_echo_n "checking if sigaction might be used... " >&6; }
+ if test "$tst_links_sigaction" = "yes" &&
+ test "$tst_proto_sigaction" = "yes" &&
+ test "$tst_compi_sigaction" = "yes" &&
+ test "$tst_allow_sigaction" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_SIGACTION 1
+_ACEOF
+
+ ac_cv_func_sigaction="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ac_cv_func_sigaction="no"
+ fi
+
+
+ #
+ tst_links_siginterrupt="unknown"
+ tst_proto_siginterrupt="unknown"
+ tst_compi_siginterrupt="unknown"
+ tst_allow_siginterrupt="unknown"
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if siginterrupt can be linked" >&5
+$as_echo_n "checking if siginterrupt can be linked... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#define siginterrupt innocuous_siginterrupt
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+#undef siginterrupt
+#ifdef __cplusplus
+extern "C"
+#endif
+char siginterrupt ();
+#if defined __stub_siginterrupt || defined __stub___siginterrupt
+choke me
+#endif
+
+int main (void)
+{
+return siginterrupt ();
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_links_siginterrupt="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_links_siginterrupt="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ #
+ if test "$tst_links_siginterrupt" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if siginterrupt is prototyped" >&5
+$as_echo_n "checking if siginterrupt is prototyped... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ $curl_includes_signal
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "siginterrupt" >/dev/null 2>&1; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_proto_siginterrupt="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_proto_siginterrupt="no"
+
+fi
+rm -f conftest*
+
+ fi
+ #
+ if test "$tst_proto_siginterrupt" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if siginterrupt is compilable" >&5
+$as_echo_n "checking if siginterrupt is compilable... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_signal
+
+int main (void)
+{
+
+ if(0 != siginterrupt(0, 0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_compi_siginterrupt="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_compi_siginterrupt="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ #
+ if test "$tst_compi_siginterrupt" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if siginterrupt usage allowed" >&5
+$as_echo_n "checking if siginterrupt usage allowed... " >&6; }
+ if test "x$curl_disallow_siginterrupt" != "xyes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_allow_siginterrupt="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_allow_siginterrupt="no"
+ fi
+ fi
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if siginterrupt might be used" >&5
+$as_echo_n "checking if siginterrupt might be used... " >&6; }
+ if test "$tst_links_siginterrupt" = "yes" &&
+ test "$tst_proto_siginterrupt" = "yes" &&
+ test "$tst_compi_siginterrupt" = "yes" &&
+ test "$tst_allow_siginterrupt" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_SIGINTERRUPT 1
+_ACEOF
+
+ ac_cv_func_siginterrupt="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ac_cv_func_siginterrupt="no"
+ fi
+
+
+ #
+ tst_links_signal="unknown"
+ tst_proto_signal="unknown"
+ tst_compi_signal="unknown"
+ tst_allow_signal="unknown"
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if signal can be linked" >&5
+$as_echo_n "checking if signal can be linked... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#define signal innocuous_signal
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+#undef signal
+#ifdef __cplusplus
+extern "C"
+#endif
+char signal ();
+#if defined __stub_signal || defined __stub___signal
+choke me
+#endif
+
+int main (void)
+{
+return signal ();
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_links_signal="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_links_signal="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ #
+ if test "$tst_links_signal" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if signal is prototyped" >&5
+$as_echo_n "checking if signal is prototyped... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ $curl_includes_signal
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "signal" >/dev/null 2>&1; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_proto_signal="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_proto_signal="no"
+
+fi
+rm -f conftest*
+
+ fi
+ #
+ if test "$tst_proto_signal" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if signal is compilable" >&5
+$as_echo_n "checking if signal is compilable... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_signal
+
+int main (void)
+{
+
+ if(0 != signal(0, 0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_compi_signal="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_compi_signal="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ #
+ if test "$tst_compi_signal" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if signal usage allowed" >&5
+$as_echo_n "checking if signal usage allowed... " >&6; }
+ if test "x$curl_disallow_signal" != "xyes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_allow_signal="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_allow_signal="no"
+ fi
+ fi
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if signal might be used" >&5
+$as_echo_n "checking if signal might be used... " >&6; }
+ if test "$tst_links_signal" = "yes" &&
+ test "$tst_proto_signal" = "yes" &&
+ test "$tst_compi_signal" = "yes" &&
+ test "$tst_allow_signal" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_SIGNAL 1
+_ACEOF
+
+ ac_cv_func_signal="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ac_cv_func_signal="no"
+ fi
+
+
+curl_includes_setjmp="\
+/* includes start */
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SETJMP_H
+# include <setjmp.h>
+#endif
+/* includes end */"
+ for ac_header in sys/types.h setjmp.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$curl_includes_setjmp
+"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+ #
+ tst_links_sigsetjmp="unknown"
+ tst_macro_sigsetjmp="unknown"
+ tst_proto_sigsetjmp="unknown"
+ tst_compi_sigsetjmp="unknown"
+ tst_allow_sigsetjmp="unknown"
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if sigsetjmp can be linked" >&5
+$as_echo_n "checking if sigsetjmp can be linked... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#define sigsetjmp innocuous_sigsetjmp
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+#undef sigsetjmp
+#ifdef __cplusplus
+extern "C"
+#endif
+char sigsetjmp ();
+#if defined __stub_sigsetjmp || defined __stub___sigsetjmp
+choke me
+#endif
+
+int main (void)
+{
+return sigsetjmp ();
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_links_sigsetjmp="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_links_sigsetjmp="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ #
+ if test "$tst_links_sigsetjmp" = "no"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if sigsetjmp seems a macro" >&5
+$as_echo_n "checking if sigsetjmp seems a macro... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_setjmp
+
+int main (void)
+{
+
+ sigjmp_buf env;
+ if(0 != sigsetjmp(env, 0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_macro_sigsetjmp="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_macro_sigsetjmp="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ fi
+ #
+ if test "$tst_links_sigsetjmp" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if sigsetjmp is prototyped" >&5
+$as_echo_n "checking if sigsetjmp is prototyped... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ $curl_includes_setjmp
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "sigsetjmp" >/dev/null 2>&1; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_proto_sigsetjmp="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_proto_sigsetjmp="no"
+
+fi
+rm -f conftest*
+
+ fi
+ #
+ if test "$tst_proto_sigsetjmp" = "yes" ||
+ test "$tst_macro_sigsetjmp" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if sigsetjmp is compilable" >&5
+$as_echo_n "checking if sigsetjmp is compilable... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_setjmp
+
+int main (void)
+{
+
+ sigjmp_buf env;
+ if(0 != sigsetjmp(env, 0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_compi_sigsetjmp="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_compi_sigsetjmp="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ #
+ if test "$tst_compi_sigsetjmp" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if sigsetjmp usage allowed" >&5
+$as_echo_n "checking if sigsetjmp usage allowed... " >&6; }
+ if test "x$curl_disallow_sigsetjmp" != "xyes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_allow_sigsetjmp="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_allow_sigsetjmp="no"
+ fi
+ fi
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if sigsetjmp might be used" >&5
+$as_echo_n "checking if sigsetjmp might be used... " >&6; }
+ if (test "$tst_proto_sigsetjmp" = "yes" ||
+ test "$tst_macro_sigsetjmp" = "yes") &&
+ test "$tst_compi_sigsetjmp" = "yes" &&
+ test "$tst_allow_sigsetjmp" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_SIGSETJMP 1
+_ACEOF
+
+ ac_cv_func_sigsetjmp="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ac_cv_func_sigsetjmp="no"
+ fi
+
+
+ #
+ tst_links_socket="unknown"
+ tst_proto_socket="unknown"
+ tst_compi_socket="unknown"
+ tst_allow_socket="unknown"
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if socket can be linked" >&5
+$as_echo_n "checking if socket can be linked... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_winsock2
+ $curl_includes_sys_socket
+ $curl_includes_socket
+
+int main (void)
+{
+
+ if(0 != socket(0, 0, 0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_links_socket="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_links_socket="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ #
+ if test "$tst_links_socket" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if socket is prototyped" >&5
+$as_echo_n "checking if socket is prototyped... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ $curl_includes_winsock2
+ $curl_includes_sys_socket
+ $curl_includes_socket
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "socket" >/dev/null 2>&1; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_proto_socket="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_proto_socket="no"
+
+fi
+rm -f conftest*
+
+ fi
+ #
+ if test "$tst_proto_socket" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if socket is compilable" >&5
+$as_echo_n "checking if socket is compilable... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_winsock2
+ $curl_includes_sys_socket
+ $curl_includes_socket
+
+int main (void)
+{
+
+ if(0 != socket(0, 0, 0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_compi_socket="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_compi_socket="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ #
+ if test "$tst_compi_socket" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if socket usage allowed" >&5
+$as_echo_n "checking if socket usage allowed... " >&6; }
+ if test "x$curl_disallow_socket" != "xyes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_allow_socket="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_allow_socket="no"
+ fi
+ fi
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if socket might be used" >&5
+$as_echo_n "checking if socket might be used... " >&6; }
+ if test "$tst_links_socket" = "yes" &&
+ test "$tst_proto_socket" = "yes" &&
+ test "$tst_compi_socket" = "yes" &&
+ test "$tst_allow_socket" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_SOCKET 1
+_ACEOF
+
+ ac_cv_func_socket="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ac_cv_func_socket="no"
+ fi
+
+
+ #
+ tst_links_strcasecmp="unknown"
+ tst_proto_strcasecmp="unknown"
+ tst_compi_strcasecmp="unknown"
+ tst_allow_strcasecmp="unknown"
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if strcasecmp can be linked" >&5
+$as_echo_n "checking if strcasecmp can be linked... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#define strcasecmp innocuous_strcasecmp
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+#undef strcasecmp
+#ifdef __cplusplus
+extern "C"
+#endif
+char strcasecmp ();
+#if defined __stub_strcasecmp || defined __stub___strcasecmp
+choke me
+#endif
+
+int main (void)
+{
+return strcasecmp ();
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_links_strcasecmp="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_links_strcasecmp="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ #
+ if test "$tst_links_strcasecmp" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if strcasecmp is prototyped" >&5
+$as_echo_n "checking if strcasecmp is prototyped... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ $curl_includes_string
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "strcasecmp" >/dev/null 2>&1; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_proto_strcasecmp="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_proto_strcasecmp="no"
+
+fi
+rm -f conftest*
+
+ fi
+ #
+ if test "$tst_proto_strcasecmp" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if strcasecmp is compilable" >&5
+$as_echo_n "checking if strcasecmp is compilable... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_string
+
+int main (void)
+{
+
+ if(0 != strcasecmp(0, 0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_compi_strcasecmp="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_compi_strcasecmp="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ #
+ if test "$tst_compi_strcasecmp" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if strcasecmp usage allowed" >&5
+$as_echo_n "checking if strcasecmp usage allowed... " >&6; }
+ if test "x$curl_disallow_strcasecmp" != "xyes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_allow_strcasecmp="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_allow_strcasecmp="no"
+ fi
+ fi
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if strcasecmp might be used" >&5
+$as_echo_n "checking if strcasecmp might be used... " >&6; }
+ if test "$tst_links_strcasecmp" = "yes" &&
+ test "$tst_proto_strcasecmp" = "yes" &&
+ test "$tst_compi_strcasecmp" = "yes" &&
+ test "$tst_allow_strcasecmp" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRCASECMP 1
+_ACEOF
+
+ ac_cv_func_strcasecmp="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ac_cv_func_strcasecmp="no"
+ fi
+
+
+ #
+ tst_links_strcasestr="unknown"
+ tst_proto_strcasestr="unknown"
+ tst_compi_strcasestr="unknown"
+ tst_allow_strcasestr="unknown"
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if strcasestr can be linked" >&5
+$as_echo_n "checking if strcasestr can be linked... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#define strcasestr innocuous_strcasestr
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+#undef strcasestr
+#ifdef __cplusplus
+extern "C"
+#endif
+char strcasestr ();
+#if defined __stub_strcasestr || defined __stub___strcasestr
+choke me
+#endif
+
+int main (void)
+{
+return strcasestr ();
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_links_strcasestr="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_links_strcasestr="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ #
+ if test "$tst_links_strcasestr" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if strcasestr is prototyped" >&5
+$as_echo_n "checking if strcasestr is prototyped... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ $curl_includes_string
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "strcasestr" >/dev/null 2>&1; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_proto_strcasestr="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_proto_strcasestr="no"
+
+fi
+rm -f conftest*
+
+ fi
+ #
+ if test "$tst_proto_strcasestr" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if strcasestr is compilable" >&5
+$as_echo_n "checking if strcasestr is compilable... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_string
+
+int main (void)
+{
+
+ if(0 != strcasestr(0, 0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_compi_strcasestr="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_compi_strcasestr="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ #
+ if test "$tst_compi_strcasestr" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if strcasestr usage allowed" >&5
+$as_echo_n "checking if strcasestr usage allowed... " >&6; }
+ if test "x$curl_disallow_strcasestr" != "xyes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_allow_strcasestr="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_allow_strcasestr="no"
+ fi
+ fi
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if strcasestr might be used" >&5
+$as_echo_n "checking if strcasestr might be used... " >&6; }
+ if test "$tst_links_strcasestr" = "yes" &&
+ test "$tst_proto_strcasestr" = "yes" &&
+ test "$tst_compi_strcasestr" = "yes" &&
+ test "$tst_allow_strcasestr" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRCASESTR 1
+_ACEOF
+
+ ac_cv_func_strcasestr="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ac_cv_func_strcasestr="no"
+ fi
+
+
+ #
+ tst_links_strcmpi="unknown"
+ tst_proto_strcmpi="unknown"
+ tst_compi_strcmpi="unknown"
+ tst_allow_strcmpi="unknown"
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if strcmpi can be linked" >&5
+$as_echo_n "checking if strcmpi can be linked... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#define strcmpi innocuous_strcmpi
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+#undef strcmpi
+#ifdef __cplusplus
+extern "C"
+#endif
+char strcmpi ();
+#if defined __stub_strcmpi || defined __stub___strcmpi
+choke me
+#endif
+
+int main (void)
+{
+return strcmpi ();
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_links_strcmpi="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_links_strcmpi="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ #
+ if test "$tst_links_strcmpi" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if strcmpi is prototyped" >&5
+$as_echo_n "checking if strcmpi is prototyped... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ $curl_includes_string
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "strcmpi" >/dev/null 2>&1; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_proto_strcmpi="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_proto_strcmpi="no"
+
+fi
+rm -f conftest*
+
+ fi
+ #
+ if test "$tst_proto_strcmpi" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if strcmpi is compilable" >&5
+$as_echo_n "checking if strcmpi is compilable... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_string
+
+int main (void)
+{
+
+ if(0 != strcmpi(0, 0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_compi_strcmpi="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_compi_strcmpi="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ #
+ if test "$tst_compi_strcmpi" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if strcmpi usage allowed" >&5
+$as_echo_n "checking if strcmpi usage allowed... " >&6; }
+ if test "x$curl_disallow_strcmpi" != "xyes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_allow_strcmpi="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_allow_strcmpi="no"
+ fi
+ fi
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if strcmpi might be used" >&5
+$as_echo_n "checking if strcmpi might be used... " >&6; }
+ if test "$tst_links_strcmpi" = "yes" &&
+ test "$tst_proto_strcmpi" = "yes" &&
+ test "$tst_compi_strcmpi" = "yes" &&
+ test "$tst_allow_strcmpi" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRCMPI 1
+_ACEOF
+
+ ac_cv_func_strcmpi="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ac_cv_func_strcmpi="no"
+ fi
+
+
+ #
+ tst_links_strdup="unknown"
+ tst_proto_strdup="unknown"
+ tst_compi_strdup="unknown"
+ tst_allow_strdup="unknown"
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if strdup can be linked" >&5
+$as_echo_n "checking if strdup can be linked... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#define strdup innocuous_strdup
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+#undef strdup
+#ifdef __cplusplus
+extern "C"
+#endif
+char strdup ();
+#if defined __stub_strdup || defined __stub___strdup
+choke me
+#endif
+
+int main (void)
+{
+return strdup ();
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_links_strdup="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_links_strdup="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ #
+ if test "$tst_links_strdup" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if strdup is prototyped" >&5
+$as_echo_n "checking if strdup is prototyped... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ $curl_includes_string
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "strdup" >/dev/null 2>&1; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_proto_strdup="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_proto_strdup="no"
+
+fi
+rm -f conftest*
+
+ fi
+ #
+ if test "$tst_proto_strdup" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if strdup is compilable" >&5
+$as_echo_n "checking if strdup is compilable... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_string
+
+int main (void)
+{
+
+ if(0 != strdup(0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_compi_strdup="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_compi_strdup="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ #
+ if test "$tst_compi_strdup" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if strdup usage allowed" >&5
+$as_echo_n "checking if strdup usage allowed... " >&6; }
+ if test "x$curl_disallow_strdup" != "xyes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_allow_strdup="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_allow_strdup="no"
+ fi
+ fi
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if strdup might be used" >&5
+$as_echo_n "checking if strdup might be used... " >&6; }
+ if test "$tst_links_strdup" = "yes" &&
+ test "$tst_proto_strdup" = "yes" &&
+ test "$tst_compi_strdup" = "yes" &&
+ test "$tst_allow_strdup" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRDUP 1
+_ACEOF
+
+ ac_cv_func_strdup="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ac_cv_func_strdup="no"
+ fi
+
+
+ #
+ tst_links_strerror_r="unknown"
+ tst_proto_strerror_r="unknown"
+ tst_compi_strerror_r="unknown"
+ tst_glibc_strerror_r="unknown"
+ tst_posix_strerror_r="unknown"
+ tst_allow_strerror_r="unknown"
+ tst_works_glibc_strerror_r="unknown"
+ tst_works_posix_strerror_r="unknown"
+ tst_glibc_strerror_r_type_arg3="unknown"
+ tst_posix_strerror_r_type_arg3="unknown"
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if strerror_r can be linked" >&5
+$as_echo_n "checking if strerror_r can be linked... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#define strerror_r innocuous_strerror_r
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+#undef strerror_r
+#ifdef __cplusplus
+extern "C"
+#endif
+char strerror_r ();
+#if defined __stub_strerror_r || defined __stub___strerror_r
+choke me
+#endif
+
+int main (void)
+{
+return strerror_r ();
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_links_strerror_r="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_links_strerror_r="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ #
+ if test "$tst_links_strerror_r" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if strerror_r is prototyped" >&5
+$as_echo_n "checking if strerror_r is prototyped... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ $curl_includes_string
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "strerror_r" >/dev/null 2>&1; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_proto_strerror_r="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_proto_strerror_r="no"
+
+fi
+rm -f conftest*
+
+ fi
+ #
+ if test "$tst_proto_strerror_r" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if strerror_r is compilable" >&5
+$as_echo_n "checking if strerror_r is compilable... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_string
+
+int main (void)
+{
+
+ if(0 != strerror_r(0, 0, 0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_compi_strerror_r="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_compi_strerror_r="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ #
+ if test "$tst_compi_strerror_r" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if strerror_r is glibc like" >&5
+$as_echo_n "checking if strerror_r is glibc like... " >&6; }
+ tst_glibc_strerror_r_type_arg3="unknown"
+ for arg3 in 'size_t' 'int' 'unsigned int'; do
+ if test "$tst_glibc_strerror_r_type_arg3" = "unknown"; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_string
+
+int main (void)
+{
+
+ char *strerror_r(int errnum, char *workbuf, $arg3 bufsize);
+ if(0 != strerror_r(0, 0, 0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ tst_glibc_strerror_r_type_arg3="$arg3"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ done
+ case "$tst_glibc_strerror_r_type_arg3" in
+ unknown)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_glibc_strerror_r="no"
+ ;;
+ *)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_glibc_strerror_r="yes"
+ ;;
+ esac
+ fi
+ #
+ if test "x$cross_compiling" != "xyes" &&
+ test "$tst_glibc_strerror_r" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if strerror_r seems to work" >&5
+$as_echo_n "checking if strerror_r seems to work... " >&6; }
+ if test "$cross_compiling" = yes; then :
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run test program while cross compiling
+See \`config.log' for more details" "$LINENO" 5 ; }
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_stdlib
+ $curl_includes_string
+# include <errno.h>
+
+int main (void)
+{
+
+ char buffer[1024];
+ char *string = 0;
+ buffer[0] = '\0';
+ string = strerror_r(EACCES, buffer, sizeof(buffer));
+ if(!string)
+ exit(1); /* fail */
+ if(!string[0])
+ exit(1); /* fail */
+ else
+ exit(0);
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_works_glibc_strerror_r="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_works_glibc_strerror_r="no"
+
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ fi
+ #
+ if test "$tst_compi_strerror_r" = "yes" &&
+ test "$tst_works_glibc_strerror_r" != "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if strerror_r is POSIX like" >&5
+$as_echo_n "checking if strerror_r is POSIX like... " >&6; }
+ tst_posix_strerror_r_type_arg3="unknown"
+ for arg3 in 'size_t' 'int' 'unsigned int'; do
+ if test "$tst_posix_strerror_r_type_arg3" = "unknown"; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_string
+
+int main (void)
+{
+
+ int strerror_r(int errnum, char *resultbuf, $arg3 bufsize);
+ if(0 != strerror_r(0, 0, 0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ tst_posix_strerror_r_type_arg3="$arg3"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ done
+ case "$tst_posix_strerror_r_type_arg3" in
+ unknown)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_posix_strerror_r="no"
+ ;;
+ *)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_posix_strerror_r="yes"
+ ;;
+ esac
+ fi
+ #
+ if test "x$cross_compiling" != "xyes" &&
+ test "$tst_posix_strerror_r" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if strerror_r seems to work" >&5
+$as_echo_n "checking if strerror_r seems to work... " >&6; }
+ if test "$cross_compiling" = yes; then :
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run test program while cross compiling
+See \`config.log' for more details" "$LINENO" 5 ; }
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_stdlib
+ $curl_includes_string
+# include <errno.h>
+
+int main (void)
+{
+
+ char buffer[1024];
+ int error = 1;
+ buffer[0] = '\0';
+ error = strerror_r(EACCES, buffer, sizeof(buffer));
+ if(error)
+ exit(1); /* fail */
+ if(buffer[0] == '\0')
+ exit(1); /* fail */
+ else
+ exit(0);
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_works_posix_strerror_r="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_works_posix_strerror_r="no"
+
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ fi
+ #
+ if test "$tst_works_glibc_strerror_r" = "yes"; then
+ tst_posix_strerror_r="no"
+ fi
+ if test "$tst_works_posix_strerror_r" = "yes"; then
+ tst_glibc_strerror_r="no"
+ fi
+ if test "$tst_glibc_strerror_r" = "yes" &&
+ test "$tst_works_glibc_strerror_r" != "no" &&
+ test "$tst_posix_strerror_r" != "yes"; then
+ tst_allow_strerror_r="check"
+ fi
+ if test "$tst_posix_strerror_r" = "yes" &&
+ test "$tst_works_posix_strerror_r" != "no" &&
+ test "$tst_glibc_strerror_r" != "yes"; then
+ tst_allow_strerror_r="check"
+ fi
+ if test "$tst_allow_strerror_r" = "check"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if strerror_r usage allowed" >&5
+$as_echo_n "checking if strerror_r usage allowed... " >&6; }
+ if test "x$curl_disallow_strerror_r" != "xyes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_allow_strerror_r="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_allow_strerror_r="no"
+ fi
+ fi
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if strerror_r might be used" >&5
+$as_echo_n "checking if strerror_r might be used... " >&6; }
+ if test "$tst_links_strerror_r" = "yes" &&
+ test "$tst_proto_strerror_r" = "yes" &&
+ test "$tst_compi_strerror_r" = "yes" &&
+ test "$tst_allow_strerror_r" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ if test "$tst_glibc_strerror_r" = "yes"; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRERROR_R 1
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_GLIBC_STRERROR_R 1
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define STRERROR_R_TYPE_ARG3 $tst_glibc_strerror_r_type_arg3
+_ACEOF
+
+ fi
+ if test "$tst_posix_strerror_r" = "yes"; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRERROR_R 1
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_POSIX_STRERROR_R 1
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define STRERROR_R_TYPE_ARG3 $tst_posix_strerror_r_type_arg3
+_ACEOF
+
+ fi
+ ac_cv_func_strerror_r="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ac_cv_func_strerror_r="no"
+ fi
+ #
+ if test "$tst_compi_strerror_r" = "yes" &&
+ test "$tst_allow_strerror_r" = "unknown"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot determine strerror_r() style: edit lib/curl_config.h manually." >&5
+$as_echo "$as_me: WARNING: cannot determine strerror_r() style: edit lib/curl_config.h manually." >&2;}
+ fi
+ #
+
+
+ #
+ tst_links_stricmp="unknown"
+ tst_proto_stricmp="unknown"
+ tst_compi_stricmp="unknown"
+ tst_allow_stricmp="unknown"
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if stricmp can be linked" >&5
+$as_echo_n "checking if stricmp can be linked... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#define stricmp innocuous_stricmp
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+#undef stricmp
+#ifdef __cplusplus
+extern "C"
+#endif
+char stricmp ();
+#if defined __stub_stricmp || defined __stub___stricmp
+choke me
+#endif
+
+int main (void)
+{
+return stricmp ();
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_links_stricmp="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_links_stricmp="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ #
+ if test "$tst_links_stricmp" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if stricmp is prototyped" >&5
+$as_echo_n "checking if stricmp is prototyped... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ $curl_includes_string
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "stricmp" >/dev/null 2>&1; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_proto_stricmp="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_proto_stricmp="no"
+
+fi
+rm -f conftest*
+
+ fi
+ #
+ if test "$tst_proto_stricmp" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if stricmp is compilable" >&5
+$as_echo_n "checking if stricmp is compilable... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_string
+
+int main (void)
+{
+
+ if(0 != stricmp(0, 0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_compi_stricmp="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_compi_stricmp="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ #
+ if test "$tst_compi_stricmp" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if stricmp usage allowed" >&5
+$as_echo_n "checking if stricmp usage allowed... " >&6; }
+ if test "x$curl_disallow_stricmp" != "xyes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_allow_stricmp="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_allow_stricmp="no"
+ fi
+ fi
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if stricmp might be used" >&5
+$as_echo_n "checking if stricmp might be used... " >&6; }
+ if test "$tst_links_stricmp" = "yes" &&
+ test "$tst_proto_stricmp" = "yes" &&
+ test "$tst_compi_stricmp" = "yes" &&
+ test "$tst_allow_stricmp" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRICMP 1
+_ACEOF
+
+ ac_cv_func_stricmp="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ac_cv_func_stricmp="no"
+ fi
+
+
+ #
+ tst_links_strlcat="unknown"
+ tst_proto_strlcat="unknown"
+ tst_compi_strlcat="unknown"
+ tst_allow_strlcat="unknown"
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if strlcat can be linked" >&5
+$as_echo_n "checking if strlcat can be linked... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#define strlcat innocuous_strlcat
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+#undef strlcat
+#ifdef __cplusplus
+extern "C"
+#endif
+char strlcat ();
+#if defined __stub_strlcat || defined __stub___strlcat
+choke me
+#endif
+
+int main (void)
+{
+return strlcat ();
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_links_strlcat="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_links_strlcat="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ #
+ if test "$tst_links_strlcat" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if strlcat is prototyped" >&5
+$as_echo_n "checking if strlcat is prototyped... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ $curl_includes_string
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "strlcat" >/dev/null 2>&1; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_proto_strlcat="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_proto_strlcat="no"
+
+fi
+rm -f conftest*
+
+ fi
+ #
+ if test "$tst_proto_strlcat" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if strlcat is compilable" >&5
+$as_echo_n "checking if strlcat is compilable... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_string
+
+int main (void)
+{
+
+ if(0 != strlcat(0, 0, 0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_compi_strlcat="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_compi_strlcat="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ #
+ if test "$tst_compi_strlcat" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if strlcat usage allowed" >&5
+$as_echo_n "checking if strlcat usage allowed... " >&6; }
+ if test "x$curl_disallow_strlcat" != "xyes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_allow_strlcat="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_allow_strlcat="no"
+ fi
+ fi
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if strlcat might be used" >&5
+$as_echo_n "checking if strlcat might be used... " >&6; }
+ if test "$tst_links_strlcat" = "yes" &&
+ test "$tst_proto_strlcat" = "yes" &&
+ test "$tst_compi_strlcat" = "yes" &&
+ test "$tst_allow_strlcat" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRLCAT 1
+_ACEOF
+
+ ac_cv_func_strlcat="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ac_cv_func_strlcat="no"
+ fi
+
+
+ #
+ tst_links_strncasecmp="unknown"
+ tst_proto_strncasecmp="unknown"
+ tst_compi_strncasecmp="unknown"
+ tst_allow_strncasecmp="unknown"
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if strncasecmp can be linked" >&5
+$as_echo_n "checking if strncasecmp can be linked... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#define strncasecmp innocuous_strncasecmp
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+#undef strncasecmp
+#ifdef __cplusplus
+extern "C"
+#endif
+char strncasecmp ();
+#if defined __stub_strncasecmp || defined __stub___strncasecmp
+choke me
+#endif
+
+int main (void)
+{
+return strncasecmp ();
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_links_strncasecmp="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_links_strncasecmp="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ #
+ if test "$tst_links_strncasecmp" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if strncasecmp is prototyped" >&5
+$as_echo_n "checking if strncasecmp is prototyped... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ $curl_includes_string
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "strncasecmp" >/dev/null 2>&1; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_proto_strncasecmp="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_proto_strncasecmp="no"
+
+fi
+rm -f conftest*
+
+ fi
+ #
+ if test "$tst_proto_strncasecmp" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if strncasecmp is compilable" >&5
+$as_echo_n "checking if strncasecmp is compilable... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_string
+
+int main (void)
+{
+
+ if(0 != strncasecmp(0, 0, 0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_compi_strncasecmp="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_compi_strncasecmp="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ #
+ if test "$tst_compi_strncasecmp" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if strncasecmp usage allowed" >&5
+$as_echo_n "checking if strncasecmp usage allowed... " >&6; }
+ if test "x$curl_disallow_strncasecmp" != "xyes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_allow_strncasecmp="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_allow_strncasecmp="no"
+ fi
+ fi
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if strncasecmp might be used" >&5
+$as_echo_n "checking if strncasecmp might be used... " >&6; }
+ if test "$tst_links_strncasecmp" = "yes" &&
+ test "$tst_proto_strncasecmp" = "yes" &&
+ test "$tst_compi_strncasecmp" = "yes" &&
+ test "$tst_allow_strncasecmp" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRNCASECMP 1
+_ACEOF
+
+ ac_cv_func_strncasecmp="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ac_cv_func_strncasecmp="no"
+ fi
+
+
+ #
+ tst_links_strncmpi="unknown"
+ tst_proto_strncmpi="unknown"
+ tst_compi_strncmpi="unknown"
+ tst_allow_strncmpi="unknown"
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if strncmpi can be linked" >&5
+$as_echo_n "checking if strncmpi can be linked... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#define strncmpi innocuous_strncmpi
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+#undef strncmpi
+#ifdef __cplusplus
+extern "C"
+#endif
+char strncmpi ();
+#if defined __stub_strncmpi || defined __stub___strncmpi
+choke me
+#endif
+
+int main (void)
+{
+return strncmpi ();
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_links_strncmpi="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_links_strncmpi="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ #
+ if test "$tst_links_strncmpi" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if strncmpi is prototyped" >&5
+$as_echo_n "checking if strncmpi is prototyped... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ $curl_includes_string
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "strncmpi" >/dev/null 2>&1; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_proto_strncmpi="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_proto_strncmpi="no"
+
+fi
+rm -f conftest*
+
+ fi
+ #
+ if test "$tst_proto_strncmpi" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if strncmpi is compilable" >&5
+$as_echo_n "checking if strncmpi is compilable... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_string
+
+int main (void)
+{
+
+ if(0 != strncmpi(0, 0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_compi_strncmpi="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_compi_strncmpi="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ #
+ if test "$tst_compi_strncmpi" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if strncmpi usage allowed" >&5
+$as_echo_n "checking if strncmpi usage allowed... " >&6; }
+ if test "x$curl_disallow_strncmpi" != "xyes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_allow_strncmpi="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_allow_strncmpi="no"
+ fi
+ fi
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if strncmpi might be used" >&5
+$as_echo_n "checking if strncmpi might be used... " >&6; }
+ if test "$tst_links_strncmpi" = "yes" &&
+ test "$tst_proto_strncmpi" = "yes" &&
+ test "$tst_compi_strncmpi" = "yes" &&
+ test "$tst_allow_strncmpi" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRNCMPI 1
+_ACEOF
+
+ ac_cv_func_strncmpi="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ac_cv_func_strncmpi="no"
+ fi
+
+
+ #
+ tst_links_strnicmp="unknown"
+ tst_proto_strnicmp="unknown"
+ tst_compi_strnicmp="unknown"
+ tst_allow_strnicmp="unknown"
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if strnicmp can be linked" >&5
+$as_echo_n "checking if strnicmp can be linked... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#define strnicmp innocuous_strnicmp
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+#undef strnicmp
+#ifdef __cplusplus
+extern "C"
+#endif
+char strnicmp ();
+#if defined __stub_strnicmp || defined __stub___strnicmp
+choke me
+#endif
+
+int main (void)
+{
+return strnicmp ();
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_links_strnicmp="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_links_strnicmp="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ #
+ if test "$tst_links_strnicmp" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if strnicmp is prototyped" >&5
+$as_echo_n "checking if strnicmp is prototyped... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ $curl_includes_string
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "strnicmp" >/dev/null 2>&1; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_proto_strnicmp="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_proto_strnicmp="no"
+
+fi
+rm -f conftest*
+
+ fi
+ #
+ if test "$tst_proto_strnicmp" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if strnicmp is compilable" >&5
+$as_echo_n "checking if strnicmp is compilable... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_string
+
+int main (void)
+{
+
+ if(0 != strnicmp(0, 0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_compi_strnicmp="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_compi_strnicmp="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ #
+ if test "$tst_compi_strnicmp" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if strnicmp usage allowed" >&5
+$as_echo_n "checking if strnicmp usage allowed... " >&6; }
+ if test "x$curl_disallow_strnicmp" != "xyes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_allow_strnicmp="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_allow_strnicmp="no"
+ fi
+ fi
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if strnicmp might be used" >&5
+$as_echo_n "checking if strnicmp might be used... " >&6; }
+ if test "$tst_links_strnicmp" = "yes" &&
+ test "$tst_proto_strnicmp" = "yes" &&
+ test "$tst_compi_strnicmp" = "yes" &&
+ test "$tst_allow_strnicmp" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRNICMP 1
+_ACEOF
+
+ ac_cv_func_strnicmp="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ac_cv_func_strnicmp="no"
+ fi
+
+
+ #
+ tst_links_strstr="unknown"
+ tst_proto_strstr="unknown"
+ tst_compi_strstr="unknown"
+ tst_allow_strstr="unknown"
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if strstr can be linked" >&5
+$as_echo_n "checking if strstr can be linked... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#define strstr innocuous_strstr
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+#undef strstr
+#ifdef __cplusplus
+extern "C"
+#endif
+char strstr ();
+#if defined __stub_strstr || defined __stub___strstr
+choke me
+#endif
+
+int main (void)
+{
+return strstr ();
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_links_strstr="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_links_strstr="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ #
+ if test "$tst_links_strstr" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if strstr is prototyped" >&5
+$as_echo_n "checking if strstr is prototyped... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ $curl_includes_string
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "strstr" >/dev/null 2>&1; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_proto_strstr="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_proto_strstr="no"
+
+fi
+rm -f conftest*
+
+ fi
+ #
+ if test "$tst_proto_strstr" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if strstr is compilable" >&5
+$as_echo_n "checking if strstr is compilable... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_string
+
+int main (void)
+{
+
+ if(0 != strstr(0, 0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_compi_strstr="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_compi_strstr="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ #
+ if test "$tst_compi_strstr" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if strstr usage allowed" >&5
+$as_echo_n "checking if strstr usage allowed... " >&6; }
+ if test "x$curl_disallow_strstr" != "xyes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_allow_strstr="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_allow_strstr="no"
+ fi
+ fi
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if strstr might be used" >&5
+$as_echo_n "checking if strstr might be used... " >&6; }
+ if test "$tst_links_strstr" = "yes" &&
+ test "$tst_proto_strstr" = "yes" &&
+ test "$tst_compi_strstr" = "yes" &&
+ test "$tst_allow_strstr" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRSTR 1
+_ACEOF
+
+ ac_cv_func_strstr="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ac_cv_func_strstr="no"
+ fi
+
+
+ #
+ tst_links_strtok_r="unknown"
+ tst_proto_strtok_r="unknown"
+ tst_compi_strtok_r="unknown"
+ tst_allow_strtok_r="unknown"
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if strtok_r can be linked" >&5
+$as_echo_n "checking if strtok_r can be linked... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#define strtok_r innocuous_strtok_r
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+#undef strtok_r
+#ifdef __cplusplus
+extern "C"
+#endif
+char strtok_r ();
+#if defined __stub_strtok_r || defined __stub___strtok_r
+choke me
+#endif
+
+int main (void)
+{
+return strtok_r ();
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_links_strtok_r="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_links_strtok_r="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ #
+ if test "$tst_links_strtok_r" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if strtok_r is prototyped" >&5
+$as_echo_n "checking if strtok_r is prototyped... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ $curl_includes_string
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "strtok_r" >/dev/null 2>&1; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_proto_strtok_r="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_proto_strtok_r="no"
+
+fi
+rm -f conftest*
+
+ fi
+ #
+ if test "$tst_proto_strtok_r" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if strtok_r is compilable" >&5
+$as_echo_n "checking if strtok_r is compilable... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_string
+
+int main (void)
+{
+
+ if(0 != strtok_r(0, 0, 0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_compi_strtok_r="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_compi_strtok_r="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ #
+ if test "$tst_compi_strtok_r" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if strtok_r usage allowed" >&5
+$as_echo_n "checking if strtok_r usage allowed... " >&6; }
+ if test "x$curl_disallow_strtok_r" != "xyes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_allow_strtok_r="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_allow_strtok_r="no"
+ fi
+ fi
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if strtok_r might be used" >&5
+$as_echo_n "checking if strtok_r might be used... " >&6; }
+ if test "$tst_links_strtok_r" = "yes" &&
+ test "$tst_proto_strtok_r" = "yes" &&
+ test "$tst_compi_strtok_r" = "yes" &&
+ test "$tst_allow_strtok_r" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRTOK_R 1
+_ACEOF
+
+ ac_cv_func_strtok_r="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ac_cv_func_strtok_r="no"
+ fi
+
+
+ #
+ tst_links_strtoll="unknown"
+ tst_proto_strtoll="unknown"
+ tst_compi_strtoll="unknown"
+ tst_allow_strtoll="unknown"
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if strtoll can be linked" >&5
+$as_echo_n "checking if strtoll can be linked... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#define strtoll innocuous_strtoll
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+#undef strtoll
+#ifdef __cplusplus
+extern "C"
+#endif
+char strtoll ();
+#if defined __stub_strtoll || defined __stub___strtoll
+choke me
+#endif
+
+int main (void)
+{
+return strtoll ();
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_links_strtoll="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_links_strtoll="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ #
+ if test "$tst_links_strtoll" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if strtoll is prototyped" >&5
+$as_echo_n "checking if strtoll is prototyped... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ $curl_includes_stdlib
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "strtoll" >/dev/null 2>&1; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_proto_strtoll="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_proto_strtoll="no"
+
+fi
+rm -f conftest*
+
+ fi
+ #
+ if test "$tst_proto_strtoll" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if strtoll is compilable" >&5
+$as_echo_n "checking if strtoll is compilable... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_stdlib
+
+int main (void)
+{
+
+ if(0 != strtoll(0, 0, 0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_compi_strtoll="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_compi_strtoll="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ #
+ if test "$tst_compi_strtoll" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if strtoll usage allowed" >&5
+$as_echo_n "checking if strtoll usage allowed... " >&6; }
+ if test "x$curl_disallow_strtoll" != "xyes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_allow_strtoll="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_allow_strtoll="no"
+ fi
+ fi
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if strtoll might be used" >&5
+$as_echo_n "checking if strtoll might be used... " >&6; }
+ if test "$tst_links_strtoll" = "yes" &&
+ test "$tst_proto_strtoll" = "yes" &&
+ test "$tst_compi_strtoll" = "yes" &&
+ test "$tst_allow_strtoll" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRTOLL 1
+_ACEOF
+
+ ac_cv_func_strtoll="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ac_cv_func_strtoll="no"
+ fi
+
+
+curl_includes_sys_uio="\
+/* includes start */
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_UIO_H
+# include <sys/uio.h>
+#endif
+/* includes end */"
+ for ac_header in sys/types.h sys/uio.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$curl_includes_sys_uio
+"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+ #
+ tst_links_writev="unknown"
+ tst_proto_writev="unknown"
+ tst_compi_writev="unknown"
+ tst_allow_writev="unknown"
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if writev can be linked" >&5
+$as_echo_n "checking if writev can be linked... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#define writev innocuous_writev
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+#undef writev
+#ifdef __cplusplus
+extern "C"
+#endif
+char writev ();
+#if defined __stub_writev || defined __stub___writev
+choke me
+#endif
+
+int main (void)
+{
+return writev ();
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_links_writev="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_links_writev="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ #
+ if test "$tst_links_writev" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if writev is prototyped" >&5
+$as_echo_n "checking if writev is prototyped... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ $curl_includes_sys_uio
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "writev" >/dev/null 2>&1; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_proto_writev="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_proto_writev="no"
+
+fi
+rm -f conftest*
+
+ fi
+ #
+ if test "$tst_proto_writev" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if writev is compilable" >&5
+$as_echo_n "checking if writev is compilable... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_sys_uio
+
+int main (void)
+{
+
+ if(0 != writev(0, 0, 0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_compi_writev="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_compi_writev="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ #
+ if test "$tst_compi_writev" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if writev usage allowed" >&5
+$as_echo_n "checking if writev usage allowed... " >&6; }
+ if test "x$curl_disallow_writev" != "xyes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ tst_allow_writev="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ tst_allow_writev="no"
+ fi
+ fi
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if writev might be used" >&5
+$as_echo_n "checking if writev might be used... " >&6; }
+ if test "$tst_links_writev" = "yes" &&
+ test "$tst_proto_writev" = "yes" &&
+ test "$tst_compi_writev" = "yes" &&
+ test "$tst_allow_writev" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_WRITEV 1
+_ACEOF
+
+ ac_cv_func_writev="yes"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ac_cv_func_writev="no"
+ fi
+
+
+
+case $host in
+ *msdosdjgpp)
+ ac_cv_func_pipe=no
+ skipcheck_pipe=yes
+ { $as_echo "$as_me:${as_lineno-$LINENO}: skip check for pipe on msdosdjgpp" >&5
+$as_echo "$as_me: skip check for pipe on msdosdjgpp" >&6;}
+ ;;
+esac
+
+for ac_func in fork \
+ geteuid \
+ getpass_r \
+ getppid \
+ getprotobyname \
+ getpwuid \
+ getrlimit \
+ gettimeofday \
+ inet_addr \
+ perror \
+ pipe \
+ setlocale \
+ setmode \
+ setrlimit \
+ uname \
+ utime
+
+do :
+ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+
+else
+
+ func="$ac_func"
+ eval skipcheck=\$skipcheck_$func
+ if test "x$skipcheck" != "xyes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking deeper for $func" >&5
+$as_echo_n "checking deeper for $func... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+
+int main (void)
+{
+
+ $func ();
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ eval "ac_cv_func_$func=yes"
+
+cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$func" | $as_tr_cpp` 1
+_ACEOF
+
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: but still no" >&5
+$as_echo "but still no" >&6; }
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ fi
+
+fi
+done
+
+
+
+ for ac_header in sys/types.h sys/socket.h netdb.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for getnameinfo" >&5
+$as_echo_n "checking for getnameinfo... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#define getnameinfo innocuous_getnameinfo
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+#undef getnameinfo
+#ifdef __cplusplus
+extern "C"
+#endif
+char getnameinfo ();
+#if defined __stub_getnameinfo || defined __stub___getnameinfo
+choke me
+#endif
+
+int main (void)
+{
+return getnameinfo ();
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ curl_cv_getnameinfo="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ curl_cv_getnameinfo="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ #
+ if test "$curl_cv_getnameinfo" != "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking deeper for getnameinfo" >&5
+$as_echo_n "checking deeper for getnameinfo... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+
+int main (void)
+{
+
+ getnameinfo();
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ curl_cv_getnameinfo="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: but still no" >&5
+$as_echo "but still no" >&6; }
+ curl_cv_getnameinfo="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ fi
+ #
+ if test "$curl_cv_getnameinfo" != "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking deeper and deeper for getnameinfo" >&5
+$as_echo_n "checking deeper and deeper for getnameinfo... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#undef inline
+#ifdef HAVE_WINDOWS_H
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#ifdef HAVE_WINSOCK2_H
+#include <winsock2.h>
+#ifdef HAVE_WS2TCPIP_H
+#include <ws2tcpip.h>
+#endif
+#endif
+#else
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#ifdef HAVE_NETDB_H
+#include <netdb.h>
+#endif
+#endif
+
+int main (void)
+{
+
+ getnameinfo(0, 0, 0, 0, 0, 0, 0);
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ curl_cv_getnameinfo="yes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: but still no" >&5
+$as_echo "but still no" >&6; }
+ curl_cv_getnameinfo="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ fi
+ #
+ if test "$curl_cv_getnameinfo" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking types of arguments for getnameinfo" >&5
+$as_echo_n "checking types of arguments for getnameinfo... " >&6; }
+if test "${curl_cv_func_getnameinfo_args+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ curl_cv_func_getnameinfo_args="unknown"
+ for gni_arg1 in 'struct sockaddr *' 'const struct sockaddr *' 'void *'; do
+ for gni_arg2 in 'socklen_t' 'size_t' 'int'; do
+ for gni_arg46 in 'size_t' 'int' 'socklen_t' 'unsigned int' 'DWORD'; do
+ for gni_arg7 in 'int' 'unsigned int'; do
+ if test "$curl_cv_func_getnameinfo_args" = "unknown"; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#undef inline
+#ifdef HAVE_WINDOWS_H
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#if (!defined(_WIN32_WINNT)) || (_WIN32_WINNT < 0x0501)
+#undef _WIN32_WINNT
+#define _WIN32_WINNT 0x0501
+#endif
+#include <windows.h>
+#ifdef HAVE_WINSOCK2_H
+#include <winsock2.h>
+#ifdef HAVE_WS2TCPIP_H
+#include <ws2tcpip.h>
+#endif
+#endif
+#define GNICALLCONV WSAAPI
+#else
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#ifdef HAVE_NETDB_H
+#include <netdb.h>
+#endif
+#define GNICALLCONV
+#endif
+ extern int GNICALLCONV getnameinfo($gni_arg1, $gni_arg2,
+ char *, $gni_arg46,
+ char *, $gni_arg46,
+ $gni_arg7);
+
+int main (void)
+{
+
+ $gni_arg2 salen=0;
+ $gni_arg46 hostlen=0;
+ $gni_arg46 servlen=0;
+ $gni_arg7 flags=0;
+ int res = getnameinfo(0, salen, 0, hostlen, 0, servlen, flags);
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ curl_cv_func_getnameinfo_args="$gni_arg1,$gni_arg2,$gni_arg46,$gni_arg7"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ done
+ done
+ done
+ done
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $curl_cv_func_getnameinfo_args" >&5
+$as_echo "$curl_cv_func_getnameinfo_args" >&6; } # AC-CACHE-CHECK
+ if test "$curl_cv_func_getnameinfo_args" = "unknown"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Cannot find proper types to use for getnameinfo args" >&5
+$as_echo "$as_me: WARNING: Cannot find proper types to use for getnameinfo args" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: HAVE_GETNAMEINFO will not be defined" >&5
+$as_echo "$as_me: WARNING: HAVE_GETNAMEINFO will not be defined" >&2;}
+ else
+ gni_prev_IFS=$IFS; IFS=','
+ set dummy `echo "$curl_cv_func_getnameinfo_args" | sed 's/\*/\*/g'`
+ IFS=$gni_prev_IFS
+ shift
+ #
+ gni_qual_type_arg1=$1
+ #
+
+cat >>confdefs.h <<_ACEOF
+#define GETNAMEINFO_TYPE_ARG2 $2
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define GETNAMEINFO_TYPE_ARG46 $3
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define GETNAMEINFO_TYPE_ARG7 $4
+_ACEOF
+
+ #
+ prev_sh_opts=$-
+ #
+ case $prev_sh_opts in
+ *f*)
+ ;;
+ *)
+ set -f
+ ;;
+ esac
+ #
+ case "$gni_qual_type_arg1" in
+ const*)
+ gni_qual_arg1=const
+ gni_type_arg1=`echo $gni_qual_type_arg1 | sed 's/^const //'`
+ ;;
+ *)
+ gni_qual_arg1=
+ gni_type_arg1=$gni_qual_type_arg1
+ ;;
+ esac
+ #
+
+cat >>confdefs.h <<_ACEOF
+#define GETNAMEINFO_QUAL_ARG1 $gni_qual_arg1
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define GETNAMEINFO_TYPE_ARG1 $gni_type_arg1
+_ACEOF
+
+ #
+ case $prev_sh_opts in
+ *f*)
+ ;;
+ *)
+ set +f
+ ;;
+ esac
+ #
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_GETNAMEINFO 1
+_ACEOF
+
+ ac_cv_func_getnameinfo="yes"
+ fi
+ fi
+
+
+if test "$ipv6" = "yes"; then
+ if test "$ac_cv_func_getaddrinfo" = "yes"; then
+
+$as_echo "#define ENABLE_IPV6 1" >>confdefs.h
+
+ IPV6_ENABLED=1
+
+ fi
+
+ for ac_header in stdio.h sys/types.h sys/socket.h \
+ netdb.h netinet/in.h arpa/inet.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working NI_WITHSCOPEID" >&5
+$as_echo_n "checking for working NI_WITHSCOPEID... " >&6; }
+if test "${ac_cv_working_ni_withscopeid+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ if test "$cross_compiling" = yes; then :
+
+ # Program is not run when cross-compiling. So we assume
+ # NI_WITHSCOPEID will work if we are able to compile it.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netdb.h>
+
+int main (void)
+{
+
+ unsigned int dummy= NI_NUMERICHOST | NI_NUMERICSERV | NI_WITHSCOPEID;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ ac_cv_working_ni_withscopeid="yes"
+
+else
+
+ ac_cv_working_ni_withscopeid="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # AC-COMPILE-IFELSE
+
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_STDIO_H
+#include <stdio.h>
+#endif
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#ifdef HAVE_NETDB_H
+#include <netdb.h>
+#endif
+#ifdef HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+#ifdef HAVE_ARPA_INET_H
+#include <arpa/inet.h>
+#endif
+
+int main (void)
+{
+
+#if defined(NI_WITHSCOPEID) && defined(HAVE_GETNAMEINFO)
+#ifdef HAVE_STRUCT_SOCKADDR_STORAGE
+ struct sockaddr_storage sa;
+#else
+ unsigned char sa[256];
+#endif
+ char hostbuf[NI_MAXHOST];
+ int rc;
+ GETNAMEINFO_TYPE_ARG2 salen = (GETNAMEINFO_TYPE_ARG2)sizeof(sa);
+ GETNAMEINFO_TYPE_ARG46 hostlen = (GETNAMEINFO_TYPE_ARG46)sizeof(hostbuf);
+ GETNAMEINFO_TYPE_ARG7 flags = NI_NUMERICHOST | NI_NUMERICSERV | NI_WITHSCOPEID;
+ int fd = socket(AF_INET6, SOCK_STREAM, 0);
+ if(fd < 0) {
+ perror("socket()");
+ return 1; /* Error creating socket */
+ }
+ rc = getsockname(fd, (GETNAMEINFO_TYPE_ARG1)&sa, &salen);
+ if(rc) {
+ perror("getsockname()");
+ return 2; /* Error retrieving socket name */
+ }
+ rc = getnameinfo((GETNAMEINFO_TYPE_ARG1)&sa, salen, hostbuf, hostlen, NULL, 0, flags);
+ if(rc) {
+ printf("rc = %s\n", gai_strerror(rc));
+ return 3; /* Error translating socket address */
+ }
+ return 0; /* Ok, NI_WITHSCOPEID works */
+#else
+ return 4; /* Error, NI_WITHSCOPEID not defined or no getnameinfo() */
+#endif
+
+ ;
+ return 0;
+} # AC-LANG-PROGRAM
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+
+ # Exit code == 0. Program worked.
+ ac_cv_working_ni_withscopeid="yes"
+
+else
+
+ # Exit code != 0. Program failed.
+ ac_cv_working_ni_withscopeid="no"
+
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+ # AC-RUN-IFELSE
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_ni_withscopeid" >&5
+$as_echo "$ac_cv_working_ni_withscopeid" >&6; } # AC-CACHE-CHECK
+ case "$ac_cv_working_ni_withscopeid" in
+ yes)
+
+$as_echo "#define HAVE_NI_WITHSCOPEID 1" >>confdefs.h
+
+ ;;
+ esac
+
+fi
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable non-blocking communications" >&5
+$as_echo_n "checking whether to enable non-blocking communications... " >&6; }
+ OPT_NONBLOCKING="default"
+ # Check whether --enable-nonblocking was given.
+if test "${enable_nonblocking+set}" = set; then :
+ enableval=$enable_nonblocking; OPT_NONBLOCKING=$enableval
+fi
+
+ case "$OPT_NONBLOCKING" in
+ no)
+ want_nonblocking="no"
+ ;;
+ default)
+ want_nonblocking="yes"
+ ;;
+ *)
+ want_nonblocking="yes"
+ ;;
+ esac
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $want_nonblocking" >&5
+$as_echo "$want_nonblocking" >&6; }
+
+
+ #
+ tst_method="unknown"
+ if test "$want_nonblocking" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to set a socket into non-blocking mode" >&5
+$as_echo_n "checking how to set a socket into non-blocking mode... " >&6; }
+ if test "x$ac_cv_func_fcntl_o_nonblock" = "xyes"; then
+ tst_method="fcntl O_NONBLOCK"
+ elif test "x$ac_cv_func_ioctl_fionbio" = "xyes"; then
+ tst_method="ioctl FIONBIO"
+ elif test "x$ac_cv_func_ioctlsocket_fionbio" = "xyes"; then
+ tst_method="ioctlsocket FIONBIO"
+ elif test "x$ac_cv_func_ioctlsocket_camel_fionbio" = "xyes"; then
+ tst_method="IoctlSocket FIONBIO"
+ elif test "x$ac_cv_func_setsockopt_so_nonblock" = "xyes"; then
+ tst_method="setsockopt SO_NONBLOCK"
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tst_method" >&5
+$as_echo "$tst_method" >&6; }
+ if test "$tst_method" = "unknown"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot determine non-blocking socket method." >&5
+$as_echo "$as_me: WARNING: cannot determine non-blocking socket method." >&2;}
+ fi
+ fi
+ if test "$tst_method" = "unknown"; then
+
+cat >>confdefs.h <<_ACEOF
+#define USE_BLOCKING_SOCKETS 1
+_ACEOF
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: non-blocking sockets disabled." >&5
+$as_echo "$as_me: WARNING: non-blocking sockets disabled." >&2;}
+ fi
+
+
+
+# Extract the first word of "perl", so it can be a program name with args.
+set dummy perl; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_PERL+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $PERL in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_PERL="$PERL" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_dummy="$PATH:/usr/local/bin/perl:/usr/bin/:/usr/local/bin "
+for as_dir in $as_dummy
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+PERL=$ac_cv_path_PERL
+if test -n "$PERL"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5
+$as_echo "$PERL" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+
+for ac_prog in gnroff nroff
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_NROFF+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $NROFF in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_NROFF="$NROFF" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_dummy="$PATH:/usr/bin/:/usr/local/bin "
+for as_dir in $as_dummy
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_NROFF="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+NROFF=$ac_cv_path_NROFF
+if test -n "$NROFF"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NROFF" >&5
+$as_echo "$NROFF" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$NROFF" && break
+done
+
+
+
+if test -n "$NROFF"; then
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to use *nroff to get plain text from man pages" >&5
+$as_echo_n "checking how to use *nroff to get plain text from man pages... " >&6; }
+ MANOPT="-man"
+ mancheck=`echo foo | $NROFF $MANOPT 2>/dev/null`
+ if test -z "$mancheck"; then
+ MANOPT="-mandoc"
+ mancheck=`echo foo | $NROFF $MANOPT 2>/dev/null`
+ if test -z "$mancheck"; then
+ MANOPT=""
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5
+$as_echo "failed" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: found no *nroff option to get plaintext from man pages" >&5
+$as_echo "$as_me: WARNING: found no *nroff option to get plaintext from man pages" >&2;}
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANOPT" >&5
+$as_echo "$MANOPT" >&6; }
+ fi
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANOPT" >&5
+$as_echo "$MANOPT" >&6; }
+ fi
+
+fi
+
+if test -z "$MANOPT"
+then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: disabling built-in manual" >&5
+$as_echo "$as_me: WARNING: disabling built-in manual" >&2;}
+ USE_MANUAL="no";
+fi
+
+
+if test "$USE_MANUAL" = "1"; then
+
+$as_echo "#define USE_MANUAL 1" >>confdefs.h
+
+ curl_manual_msg="enabled"
+fi
+
+
+
+if test x"$USE_MANUAL" = x1; then
+ USE_MANUAL_TRUE=
+ USE_MANUAL_FALSE='#'
+else
+ USE_MANUAL_TRUE='#'
+ USE_MANUAL_FALSE=
+fi
+
+
+
+
+
+ #
+ if test "$want_ares" = "yes"; then
+ clean_CPPFLAGS="$CPPFLAGS"
+ clean_LDFLAGS="$LDFLAGS"
+ clean_LIBS="$LIBS"
+ embedded_ares="unknown"
+ configure_runpath=`pwd`
+ embedded_ares_builddir="$configure_runpath/ares"
+ if test -n "$want_ares_path"; then
+ ares_CPPFLAGS="-I$want_ares_path/include"
+ ares_LDFLAGS="-L$want_ares_path/lib"
+ ares_LIBS="-lcares"
+ else
+ if test -d "$srcdir/ares"; then
+ embedded_ares="yes"
+ subdirs="$subdirs ares"
+
+ ares_CPPFLAGS=""
+ ares_LDFLAGS="-L$embedded_ares_builddir"
+ ares_LIBS="-lcares"
+ else
+ ares_CPPFLAGS=""
+ ares_LDFLAGS=""
+ ares_LIBS="-lcares"
+ fi
+ fi
+ #
+ CPPFLAGS="$ares_CPPFLAGS $clean_CPPFLAGS"
+ LDFLAGS="$ares_LDFLAGS $clean_LDFLAGS"
+ LIBS="$ares_LIBS $clean_LIBS"
+ #
+ if test "$embedded_ares" != "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking that c-ares is good and recent enough" >&5
+$as_echo_n "checking that c-ares is good and recent enough... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#include <ares.h>
+ /* set of dummy functions in case c-ares was built with debug */
+ void curl_dofree() { }
+ void curl_sclose() { }
+ void curl_domalloc() { }
+ void curl_docalloc() { }
+ void curl_socket() { }
+
+int main (void)
+{
+
+ ares_channel channel;
+ ares_cancel(channel); /* added in 1.2.0 */
+ ares_process_fd(channel, 0, 0); /* added in 1.4.0 */
+ ares_dup(&channel, channel); /* added in 1.6.0 */
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ as_fn_error $? "c-ares library defective or too old" "$LINENO" 5
+ CPPFLAGS="$clean_CPPFLAGS"
+ LDFLAGS="$clean_LDFLAGS"
+ LIBS="$clean_LIBS"
+ # prevent usage
+ want_ares="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ fi
+ if test "$want_ares" = "yes"; then
+
+$as_echo "#define USE_ARES 1" >>confdefs.h
+
+ USE_ARES=1
+
+ curl_res_msg="c-ares"
+ fi
+ fi
+
+
+
+if test x$embedded_ares = xyes; then
+ USE_EMBEDDED_ARES_TRUE=
+ USE_EMBEDDED_ARES_FALSE='#'
+else
+ USE_EMBEDDED_ARES_TRUE='#'
+ USE_EMBEDDED_ARES_FALSE=
+fi
+
+
+if test "x$enable_shared" = "xyes"; then
+ build_libhostname=yes
+else
+ build_libhostname=no
+fi
+
+
+if test x$build_libhostname = xyes; then
+ BUILD_LIBHOSTNAME_TRUE=
+ BUILD_LIBHOSTNAME_FALSE='#'
+else
+ BUILD_LIBHOSTNAME_TRUE='#'
+ BUILD_LIBHOSTNAME_FALSE=
+fi
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable the threaded resolver" >&5
+$as_echo_n "checking whether to enable the threaded resolver... " >&6; }
+ OPT_THRES="default"
+ # Check whether --enable-threaded_resolver was given.
+if test "${enable_threaded_resolver+set}" = set; then :
+ enableval=$enable_threaded_resolver; OPT_THRES=$enableval
+fi
+
+ case "$OPT_THRES" in
+ yes)
+ want_thres="yes"
+ ;;
+ *)
+ want_thres="no"
+ ;;
+ esac
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $want_thres" >&5
+$as_echo "$want_thres" >&6; }
+
+
+if test "x$want_thres" = xyes && test "x$want_ares" = xyes; then
+ as_fn_error $? "Options --enable-threaded-resolver and --enable-ares are mutually exclusive" "$LINENO" 5
+fi
+
+if test "$want_thres" = "yes"; then
+ ac_fn_c_check_header_mongrel "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default"
+if test "x$ac_cv_header_pthread_h" = x""yes; then :
+
+$as_echo "#define HAVE_PTHREAD_H 1" >>confdefs.h
+
+ save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -pthread"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lpthread" >&5
+$as_echo_n "checking for pthread_create in -lpthread... " >&6; }
+if test "${ac_cv_lib_pthread_pthread_create+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lpthread $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#ifdef __cplusplus
+extern "C"
+#endif
+char pthread_create ();
+int main (void)
+{
+return pthread_create ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_pthread_pthread_create=yes
+else
+ ac_cv_lib_pthread_pthread_create=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_create" >&5
+$as_echo "$ac_cv_lib_pthread_pthread_create" >&6; }
+if test "x$ac_cv_lib_pthread_pthread_create" = x""yes; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: using POSIX threaded DNS lookup" >&5
+$as_echo "$as_me: using POSIX threaded DNS lookup" >&6;}
+
+$as_echo "#define USE_THREADS_POSIX 1" >>confdefs.h
+
+ USE_THREADS_POSIX=1
+ curl_res_msg="threaded"
+
+else
+ CFLAGS="$save_CFLAGS"
+fi
+
+
+fi
+
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable verbose strings" >&5
+$as_echo_n "checking whether to enable verbose strings... " >&6; }
+# Check whether --enable-verbose was given.
+if test "${enable_verbose+set}" = set; then :
+ enableval=$enable_verbose; case "$enableval" in
+ no)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+$as_echo "#define CURL_DISABLE_VERBOSE_STRINGS 1" >>confdefs.h
+
+ curl_verbose_msg="no"
+ ;;
+ *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ ;;
+ esac
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable SSPI support (Windows native builds only)" >&5
+$as_echo_n "checking whether to enable SSPI support (Windows native builds only)... " >&6; }
+# Check whether --enable-sspi was given.
+if test "${enable_sspi+set}" = set; then :
+ enableval=$enable_sspi; case "$enableval" in
+ yes)
+ if test "$ac_cv_native_windows" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+$as_echo "#define USE_WINDOWS_SSPI 1" >>confdefs.h
+
+ USE_WINDOWS_SSPI=1
+
+ curl_sspi_msg="enabled"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --enable-sspi Ignored. Only supported on native Windows builds." >&5
+$as_echo "$as_me: WARNING: --enable-sspi Ignored. Only supported on native Windows builds." >&2;}
+ fi
+ ;;
+ *)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ;;
+ esac
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable cryptographic authentication methods" >&5
+$as_echo_n "checking whether to enable cryptographic authentication methods... " >&6; }
+# Check whether --enable-crypto-auth was given.
+if test "${enable_crypto_auth+set}" = set; then :
+ enableval=$enable_crypto_auth; case "$enableval" in
+ no)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+$as_echo "#define CURL_DISABLE_CRYPTO_AUTH 1" >>confdefs.h
+
+ ;;
+ *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ ;;
+ esac
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable support for cookies" >&5
+$as_echo_n "checking whether to enable support for cookies... " >&6; }
+# Check whether --enable-cookies was given.
+if test "${enable_cookies+set}" = set; then :
+ enableval=$enable_cookies; case "$enableval" in
+ no)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+$as_echo "#define CURL_DISABLE_COOKIES 1" >>confdefs.h
+
+ ;;
+ *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ ;;
+ esac
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable hidden symbols in the library" >&5
+$as_echo_n "checking whether to enable hidden symbols in the library... " >&6; }
+# Check whether --enable-hidden-symbols was given.
+if test "${enable_hidden_symbols+set}" = set; then :
+ enableval=$enable_hidden_symbols; case "$enableval" in
+ no)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ;;
+ *)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports it" >&5
+$as_echo_n "checking whether $CC supports it... " >&6; }
+ if test "$GCC" = yes ; then
+ if $CC --help --verbose 2>&1 | grep fvisibility= > /dev/null ||
+ test "$compiler_id" = "CLANG"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+$as_echo "#define CURL_HIDDEN_SYMBOLS 1" >>confdefs.h
+
+
+$as_echo "#define CURL_EXTERN_SYMBOL __attribute__ ((visibility (\"default\")))" >>confdefs.h
+
+ CFLAGS="$CFLAGS -fvisibility=hidden"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ fi
+
+ else
+ if $CC 2>&1 | grep flags >/dev/null && $CC -flags | grep xldscope= >/dev/null ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+$as_echo "#define CURL_HIDDEN_SYMBOLS 1" >>confdefs.h
+
+
+$as_echo "#define CURL_EXTERN_SYMBOL __global" >>confdefs.h
+
+ CFLAGS="$CFLAGS -xldscope=hidden"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ fi
+ fi
+ ;;
+ esac
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+fi
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enforce SONAME bump" >&5
+$as_echo_n "checking whether to enforce SONAME bump... " >&6; }
+# Check whether --enable-soname-bump was given.
+if test "${enable_soname_bump+set}" = set; then :
+ enableval=$enable_soname_bump; case "$enableval" in
+ yes) { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ soname_bump=yes
+ ;;
+ *)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ;;
+ esac
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $soname_bump" >&5
+$as_echo "$soname_bump" >&6; }
+
+fi
+
+
+
+if test x$soname_bump = xyes; then
+ SONAME_BUMP_TRUE=
+ SONAME_BUMP_FALSE='#'
+else
+ SONAME_BUMP_TRUE='#'
+ SONAME_BUMP_FALSE=
+fi
+
+
+
+if test ! -z "$winsock_LIB"; then
+
+
+ LIBS="$LIBS $winsock_LIB"
+ TEST_SERVER_LIBS="$TEST_SERVER_LIBS $winsock_LIB"
+
+fi
+
+LIBCURL_LIBS=$LIBS
+
+
+
+
+
+LIBS=$ALL_LIBS
+
+
+if test x$cross_compiling = xyes; then
+ CROSSCOMPILING_TRUE=
+ CROSSCOMPILING_FALSE='#'
+else
+ CROSSCOMPILING_TRUE='#'
+ CROSSCOMPILING_FALSE=
+fi
+
+
+ENABLE_SHARED="$enable_shared"
+
+
+
+if test "x$USE_SSLEAY" = "x1"; then
+ SUPPORT_FEATURES="$SUPPORT_FEATURES SSL"
+elif test -n "$SSL_ENABLED"; then
+ SUPPORT_FEATURES="$SUPPORT_FEATURES SSL"
+fi
+if test "@KRB4_ENABLED@" = "x1"; then
+ SUPPORT_FEATURES="$SUPPORT_FEATURES KRB4"
+fi
+if test "x$IPV6_ENABLED" = "x1"; then
+ SUPPORT_FEATURES="$SUPPORT_FEATURES IPv6"
+fi
+if test "x$HAVE_LIBZ" = "x1"; then
+ SUPPORT_FEATURES="$SUPPORT_FEATURES libz"
+fi
+if test "x$USE_ARES" = "x1" -o "x$USE_THREADS_POSIX" = "x1"; then
+ SUPPORT_FEATURES="$SUPPORT_FEATURES AsynchDNS"
+fi
+if test "x$IDN_ENABLED" = "x1"; then
+ SUPPORT_FEATURES="$SUPPORT_FEATURES IDN"
+fi
+if test "x$USE_WINDOWS_SSPI" = "x1"; then
+ SUPPORT_FEATURES="$SUPPORT_FEATURES SSPI"
+fi
+if test "x$USE_SSLEAY" = "x1" -o "x$USE_WINDOWS_SSPI" = "x1" \
+ -o "x$GNUTLS_ENABLED" = "x1" -o "x$NSS_ENABLED" = "x1"; then
+ SUPPORT_FEATURES="$SUPPORT_FEATURES NTLM"
+fi
+
+
+
+if test "x$CURL_DISABLE_HTTP" != "x1"; then
+ SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS HTTP"
+ if test "x$SSL_ENABLED" = "x1"; then
+ SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS HTTPS"
+ fi
+fi
+if test "x$CURL_DISABLE_FTP" != "x1"; then
+ SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS FTP"
+ if test "x$SSL_ENABLED" = "x1"; then
+ SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS FTPS"
+ fi
+fi
+if test "x$CURL_DISABLE_FILE" != "x1"; then
+ SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS FILE"
+fi
+if test "x$CURL_DISABLE_TELNET" != "x1"; then
+ SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS TELNET"
+fi
+if test "x$CURL_DISABLE_LDAP" != "x1"; then
+ SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS LDAP"
+ if test "x$CURL_DISABLE_LDAPS" != "x1"; then
+ if (test "x$USE_OPENLDAP" = "x1" && test "x$SSL_ENABLED" = "x1") ||
+ (test "x$USE_OPENLDAP" != "x1" && test "x$HAVE_LDAP_SSL" = "x1"); then
+ SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS LDAPS"
+ fi
+ fi
+fi
+if test "x$CURL_DISABLE_DICT" != "x1"; then
+ SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS DICT"
+fi
+if test "x$CURL_DISABLE_TFTP" != "x1"; then
+ SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS TFTP"
+fi
+if test "x$CURL_DISABLE_GOPHER" != "x1"; then
+ SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS GOPHER"
+fi
+if test "x$CURL_DISABLE_POP3" != "x1"; then
+ SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS POP3"
+ if test "x$SSL_ENABLED" = "x1"; then
+ SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS POP3S"
+ fi
+fi
+if test "x$CURL_DISABLE_IMAP" != "x1"; then
+ SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS IMAP"
+ if test "x$SSL_ENABLED" = "x1"; then
+ SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS IMAPS"
+ fi
+fi
+if test "x$CURL_DISABLE_SMTP" != "x1"; then
+ SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS SMTP"
+ if test "x$SSL_ENABLED" = "x1"; then
+ SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS SMTPS"
+ fi
+fi
+if test "x$USE_LIBSSH2" = "x1"; then
+ SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS SCP"
+ SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS SFTP"
+fi
+if test "x$CURL_DISABLE_RTSP" != "x1"; then
+ SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS RTSP"
+fi
+if test "x$USE_LIBRTMP" = "x1"; then
+ SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS RTMP"
+fi
+
+SUPPORT_PROTOCOLS=`echo $SUPPORT_PROTOCOLS | tr ' ' '\012' | sort | tr '\012' ' '`
+
+
+
+
+squeeze CFLAGS
+squeeze CPPFLAGS
+squeeze DEFS
+squeeze LDFLAGS
+squeeze LIBS
+
+squeeze CURL_LIBS
+squeeze LIBCURL_LIBS
+squeeze TEST_SERVER_LIBS
+squeeze CURL_NETWORK_LIBS
+
+squeeze SUPPORT_FEATURES
+squeeze SUPPORT_PROTOCOLS
+
+if test "x$want_curldebug_assumed" = "xyes" &&
+ test "x$want_curldebug" = "xyes" && test "x$USE_ARES" = "x1"; then
+ ac_configure_args="$ac_configure_args --enable-curldebug"
+fi
+
+ac_config_files="$ac_config_files Makefile docs/Makefile docs/examples/Makefile docs/libcurl/Makefile include/Makefile include/curl/Makefile src/Makefile lib/Makefile tests/Makefile tests/data/Makefile tests/server/Makefile tests/libtest/Makefile packages/Makefile packages/Win32/Makefile packages/Win32/cygwin/Makefile packages/Linux/Makefile packages/Linux/RPM/Makefile packages/Linux/RPM/curl.spec packages/Linux/RPM/curl-ssl.spec packages/Solaris/Makefile packages/EPM/curl.list packages/EPM/Makefile packages/vms/Makefile packages/AIX/Makefile packages/AIX/RPM/Makefile packages/AIX/RPM/curl.spec curl-config libcurl.pc"
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems. If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, we kill variables containing newlines.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(
+ for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+ *) { eval $ac_var=; unset $ac_var;} ;;
+ esac ;;
+ esac
+ done
+
+ (set) 2>&1 |
+ case $as_nl`(ac_space=' '; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
+ # `set' does not quote correctly, so add quotes: double-quote
+ # substitution turns \\\\ into \\, and sed turns \\ into \.
+ sed -n \
+ "s/'/'\\\\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+ ;; #(
+ *)
+ # `set' quotes correctly as required by POSIX, so do not add quotes.
+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+ ;;
+ esac |
+ sort
+) |
+ sed '
+ /^ac_cv_env_/b end
+ t clear
+ :clear
+ s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+ t end
+ s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+ :end' >>confcache
+if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
+ if test -w "$cache_file"; then
+ test "x$cache_file" != "x/dev/null" &&
+ { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
+$as_echo "$as_me: updating cache $cache_file" >&6;}
+ cat confcache >$cache_file
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
+$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+ fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+DEFS=-DHAVE_CONFIG_H
+
+ac_libobjs=
+ac_ltlibobjs=
+U=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+ # 1. Remove the extension, and $U if already installed.
+ ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+ ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
+ # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
+ # will be set to the directory where LIBOBJS objects are built.
+ as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+ as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
+ as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
+ as_fn_error $? "conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+ as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${MIMPURE_TRUE}" && test -z "${MIMPURE_FALSE}"; then
+ as_fn_error $? "conditional \"MIMPURE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${STATICLIB_TRUE}" && test -z "${STATICLIB_FALSE}"; then
+ as_fn_error $? "conditional \"STATICLIB\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${STATICLIB_TRUE}" && test -z "${STATICLIB_FALSE}"; then
+ as_fn_error $? "conditional \"STATICLIB\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${NO_UNDEFINED_TRUE}" && test -z "${NO_UNDEFINED_FALSE}"; then
+ as_fn_error $? "conditional \"NO_UNDEFINED\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${CURLDEBUG_TRUE}" && test -z "${CURLDEBUG_FALSE}"; then
+ as_fn_error $? "conditional \"CURLDEBUG\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_LIBZ_TRUE}" && test -z "${HAVE_LIBZ_FALSE}"; then
+ as_fn_error $? "conditional \"HAVE_LIBZ\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_MANUAL_TRUE}" && test -z "${USE_MANUAL_FALSE}"; then
+ as_fn_error $? "conditional \"USE_MANUAL\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_EMBEDDED_ARES_TRUE}" && test -z "${USE_EMBEDDED_ARES_FALSE}"; then
+ as_fn_error $? "conditional \"USE_EMBEDDED_ARES\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${BUILD_LIBHOSTNAME_TRUE}" && test -z "${BUILD_LIBHOSTNAME_FALSE}"; then
+ as_fn_error $? "conditional \"BUILD_LIBHOSTNAME\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${SONAME_BUMP_TRUE}" && test -z "${SONAME_BUMP_FALSE}"; then
+ as_fn_error $? "conditional \"SONAME_BUMP\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${CROSSCOMPILING_TRUE}" && test -z "${CROSSCOMPILING_FALSE}"; then
+ as_fn_error $? "conditional \"CROSSCOMPILING\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+
+: ${CONFIG_STATUS=./config.status}
+ac_write_fail=0
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
+$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+as_write_fail=0
+cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='print -r --'
+ as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='printf %s\n'
+ as_echo_n='printf %s'
+else
+ if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+ as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+ as_echo_n='/usr/ucb/echo -n'
+ else
+ as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+ as_echo_n_body='eval
+ arg=$1;
+ case $arg in #(
+ *"$as_nl"*)
+ expr "X$arg" : "X\\(.*\\)$as_nl";
+ arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+ esac;
+ expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+ '
+ export as_echo_n_body
+ as_echo_n='sh -c $as_echo_n_body as_echo'
+ fi
+ export as_echo_body
+ as_echo='sh -c $as_echo_body as_echo'
+fi
+
+
+
+# IFS
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" "" $as_nl"
+
+# Find who we are. Look in the path if we contain no directory separator.
+case $0 in #((
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+ as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+ $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there. '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+ as_status=$1; test $as_status -eq 0 && as_status=1
+ if test "$4"; then
+ as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ fi
+ $as_echo "$as_me: error: $2" >&2
+ as_fn_exit $as_status
+} # as_fn_error
+
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+ return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+ set +e
+ as_fn_set_status $1
+ exit $1
+} # as_fn_exit
+
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+ { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+ eval 'as_fn_append ()
+ {
+ eval $1+=\$2
+ }'
+else
+ as_fn_append ()
+ {
+ eval $1=\$$1\$2
+ }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+ eval 'as_fn_arith ()
+ {
+ as_val=$(( $* ))
+ }'
+else
+ as_fn_arith ()
+ {
+ as_val=`expr "$@" || test $? -eq 1`
+ }
+fi # as_fn_arith
+
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+ case `echo 'xy\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ xy) ECHO_C='\c';;
+ *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
+ ECHO_T=' ';;
+ esac;;
+*)
+ ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -p'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -p'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -p'
+ fi
+else
+ as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || eval $as_mkdir_p || {
+ as_dirs=
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
+ done
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p='mkdir -p "$as_dir"'
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+ as_test_x='test -x'
+else
+ if ls -dL / >/dev/null 2>&1; then
+ as_ls_L_option=L
+ else
+ as_ls_L_option=
+ fi
+ as_test_x='
+ eval sh -c '\''
+ if test -d "$1"; then
+ test -d "$1/.";
+ else
+ case $1 in #(
+ -*)set "./$1";;
+ esac;
+ case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
+ ???[sx]*):;;*)false;;esac;fi
+ '\'' sh
+ '
+fi
+as_executable_p=$as_test_x
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+exec 6>&1
+## ----------------------------------- ##
+## Main body of $CONFIG_STATUS script. ##
+## ----------------------------------- ##
+_ASEOF
+test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# Save the log message, to keep $0 and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.
+ac_log="
+This file was extended by curl $as_me -, which was
+generated by GNU Autoconf 2.67. Invocation command line was
+
+ CONFIG_FILES = $CONFIG_FILES
+ CONFIG_HEADERS = $CONFIG_HEADERS
+ CONFIG_LINKS = $CONFIG_LINKS
+ CONFIG_COMMANDS = $CONFIG_COMMANDS
+ $ $0 $@
+
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
+_ACEOF
+
+case $ac_config_files in *"
+"*) set x $ac_config_files; shift; ac_config_files=$*;;
+esac
+
+case $ac_config_headers in *"
+"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
+esac
+
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+# Files that config.status was made for.
+config_files="$ac_config_files"
+config_headers="$ac_config_headers"
+config_commands="$ac_config_commands"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ac_cs_usage="\
+\`$as_me' instantiates files and other configuration actions
+from templates according to the current configuration. Unless the files
+and actions are specified as TAGs, all are instantiated by default.
+
+Usage: $0 [OPTION]... [TAG]...
+
+ -h, --help print this help, then exit
+ -V, --version print version number and configuration settings, then exit
+ --config print configuration, then exit
+ -q, --quiet, --silent
+ do not print progress messages
+ -d, --debug don't remove temporary files
+ --recheck update $as_me by reconfiguring in the same conditions
+ --file=FILE[:TEMPLATE]
+ instantiate the configuration file FILE
+ --header=FILE[:TEMPLATE]
+ instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Configuration commands:
+$config_commands
+
+Report bugs to <a suitable curl mailing list: http://curl.haxx.se/mail/>."
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
+ac_cs_version="\\
+curl config.status -
+configured by $0, generated by GNU Autoconf 2.67,
+ with options \\"\$ac_cs_config\\"
+
+Copyright (C) 2010 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+
+ac_pwd='$ac_pwd'
+srcdir='$srcdir'
+INSTALL='$INSTALL'
+AWK='$AWK'
+test -n "\$AWK" || AWK=awk
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# The default lists apply if the user does not specify any file.
+ac_need_defaults=:
+while test $# != 0
+do
+ case $1 in
+ --*=?*)
+ ac_option=`expr "X$1" : 'X\([^=]*\)='`
+ ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
+ ac_shift=:
+ ;;
+ --*=)
+ ac_option=`expr "X$1" : 'X\([^=]*\)='`
+ ac_optarg=
+ ac_shift=:
+ ;;
+ *)
+ ac_option=$1
+ ac_optarg=$2
+ ac_shift=shift
+ ;;
+ esac
+
+ case $ac_option in
+ # Handling of the options.
+ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+ ac_cs_recheck=: ;;
+ --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+ $as_echo "$ac_cs_version"; exit ;;
+ --config | --confi | --conf | --con | --co | --c )
+ $as_echo "$ac_cs_config"; exit ;;
+ --debug | --debu | --deb | --de | --d | -d )
+ debug=: ;;
+ --file | --fil | --fi | --f )
+ $ac_shift
+ case $ac_optarg in
+ *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ '') as_fn_error $? "missing file argument" ;;
+ esac
+ as_fn_append CONFIG_FILES " '$ac_optarg'"
+ ac_need_defaults=false;;
+ --header | --heade | --head | --hea )
+ $ac_shift
+ case $ac_optarg in
+ *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ as_fn_append CONFIG_HEADERS " '$ac_optarg'"
+ ac_need_defaults=false;;
+ --he | --h)
+ # Conflict between --help and --header
+ as_fn_error $? "ambiguous option: \`$1'
+Try \`$0 --help' for more information.";;
+ --help | --hel | -h )
+ $as_echo "$ac_cs_usage"; exit ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil | --si | --s)
+ ac_cs_silent=: ;;
+
+ # This is an error.
+ -*) as_fn_error $? "unrecognized option: \`$1'
+Try \`$0 --help' for more information." ;;
+
+ *) as_fn_append ac_config_targets " $1"
+ ac_need_defaults=false ;;
+
+ esac
+ shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+ exec 6>/dev/null
+ ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+if \$ac_cs_recheck; then
+ set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+ shift
+ \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+ CONFIG_SHELL='$SHELL'
+ export CONFIG_SHELL
+ exec "\$@"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+exec 5>>config.log
+{
+ echo
+ sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+ $as_echo "$ac_log"
+} >&5
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+#
+# INIT-COMMANDS
+#
+AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
+
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+AS='`$ECHO "X$AS" | $Xsed -e "$delay_single_quote_subst"`'
+DLLTOOL='`$ECHO "X$DLLTOOL" | $Xsed -e "$delay_single_quote_subst"`'
+OBJDUMP='`$ECHO "X$OBJDUMP" | $Xsed -e "$delay_single_quote_subst"`'
+macro_version='`$ECHO "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`'
+macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`'
+enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`'
+enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`'
+pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`'
+enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`'
+host_alias='`$ECHO "X$host_alias" | $Xsed -e "$delay_single_quote_subst"`'
+host='`$ECHO "X$host" | $Xsed -e "$delay_single_quote_subst"`'
+host_os='`$ECHO "X$host_os" | $Xsed -e "$delay_single_quote_subst"`'
+build_alias='`$ECHO "X$build_alias" | $Xsed -e "$delay_single_quote_subst"`'
+build='`$ECHO "X$build" | $Xsed -e "$delay_single_quote_subst"`'
+build_os='`$ECHO "X$build_os" | $Xsed -e "$delay_single_quote_subst"`'
+SED='`$ECHO "X$SED" | $Xsed -e "$delay_single_quote_subst"`'
+Xsed='`$ECHO "X$Xsed" | $Xsed -e "$delay_single_quote_subst"`'
+GREP='`$ECHO "X$GREP" | $Xsed -e "$delay_single_quote_subst"`'
+EGREP='`$ECHO "X$EGREP" | $Xsed -e "$delay_single_quote_subst"`'
+FGREP='`$ECHO "X$FGREP" | $Xsed -e "$delay_single_quote_subst"`'
+LD='`$ECHO "X$LD" | $Xsed -e "$delay_single_quote_subst"`'
+NM='`$ECHO "X$NM" | $Xsed -e "$delay_single_quote_subst"`'
+LN_S='`$ECHO "X$LN_S" | $Xsed -e "$delay_single_quote_subst"`'
+max_cmd_len='`$ECHO "X$max_cmd_len" | $Xsed -e "$delay_single_quote_subst"`'
+ac_objext='`$ECHO "X$ac_objext" | $Xsed -e "$delay_single_quote_subst"`'
+exeext='`$ECHO "X$exeext" | $Xsed -e "$delay_single_quote_subst"`'
+lt_unset='`$ECHO "X$lt_unset" | $Xsed -e "$delay_single_quote_subst"`'
+lt_SP2NL='`$ECHO "X$lt_SP2NL" | $Xsed -e "$delay_single_quote_subst"`'
+lt_NL2SP='`$ECHO "X$lt_NL2SP" | $Xsed -e "$delay_single_quote_subst"`'
+reload_flag='`$ECHO "X$reload_flag" | $Xsed -e "$delay_single_quote_subst"`'
+reload_cmds='`$ECHO "X$reload_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+deplibs_check_method='`$ECHO "X$deplibs_check_method" | $Xsed -e "$delay_single_quote_subst"`'
+file_magic_cmd='`$ECHO "X$file_magic_cmd" | $Xsed -e "$delay_single_quote_subst"`'
+AR='`$ECHO "X$AR" | $Xsed -e "$delay_single_quote_subst"`'
+AR_FLAGS='`$ECHO "X$AR_FLAGS" | $Xsed -e "$delay_single_quote_subst"`'
+STRIP='`$ECHO "X$STRIP" | $Xsed -e "$delay_single_quote_subst"`'
+RANLIB='`$ECHO "X$RANLIB" | $Xsed -e "$delay_single_quote_subst"`'
+old_postinstall_cmds='`$ECHO "X$old_postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+old_postuninstall_cmds='`$ECHO "X$old_postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_cmds='`$ECHO "X$old_archive_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+CC='`$ECHO "X$CC" | $Xsed -e "$delay_single_quote_subst"`'
+CFLAGS='`$ECHO "X$CFLAGS" | $Xsed -e "$delay_single_quote_subst"`'
+compiler='`$ECHO "X$compiler" | $Xsed -e "$delay_single_quote_subst"`'
+GCC='`$ECHO "X$GCC" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_pipe='`$ECHO "X$lt_cv_sys_global_symbol_pipe" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_cdecl='`$ECHO "X$lt_cv_sys_global_symbol_to_cdecl" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`'
+objdir='`$ECHO "X$objdir" | $Xsed -e "$delay_single_quote_subst"`'
+SHELL='`$ECHO "X$SHELL" | $Xsed -e "$delay_single_quote_subst"`'
+ECHO='`$ECHO "X$ECHO" | $Xsed -e "$delay_single_quote_subst"`'
+MAGIC_CMD='`$ECHO "X$MAGIC_CMD" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag='`$ECHO "X$lt_prog_compiler_no_builtin_flag" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_wl='`$ECHO "X$lt_prog_compiler_wl" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_static='`$ECHO "X$lt_prog_compiler_static" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o='`$ECHO "X$lt_cv_prog_compiler_c_o" | $Xsed -e "$delay_single_quote_subst"`'
+need_locks='`$ECHO "X$need_locks" | $Xsed -e "$delay_single_quote_subst"`'
+DSYMUTIL='`$ECHO "X$DSYMUTIL" | $Xsed -e "$delay_single_quote_subst"`'
+NMEDIT='`$ECHO "X$NMEDIT" | $Xsed -e "$delay_single_quote_subst"`'
+LIPO='`$ECHO "X$LIPO" | $Xsed -e "$delay_single_quote_subst"`'
+OTOOL='`$ECHO "X$OTOOL" | $Xsed -e "$delay_single_quote_subst"`'
+OTOOL64='`$ECHO "X$OTOOL64" | $Xsed -e "$delay_single_quote_subst"`'
+libext='`$ECHO "X$libext" | $Xsed -e "$delay_single_quote_subst"`'
+shrext_cmds='`$ECHO "X$shrext_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+extract_expsyms_cmds='`$ECHO "X$extract_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+archive_cmds_need_lc='`$ECHO "X$archive_cmds_need_lc" | $Xsed -e "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes='`$ECHO "X$enable_shared_with_static_runtimes" | $Xsed -e "$delay_single_quote_subst"`'
+export_dynamic_flag_spec='`$ECHO "X$export_dynamic_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
+whole_archive_flag_spec='`$ECHO "X$whole_archive_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
+compiler_needs_object='`$ECHO "X$compiler_needs_object" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_from_new_cmds='`$ECHO "X$old_archive_from_new_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds='`$ECHO "X$old_archive_from_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+archive_cmds='`$ECHO "X$archive_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+archive_expsym_cmds='`$ECHO "X$archive_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+module_cmds='`$ECHO "X$module_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+module_expsym_cmds='`$ECHO "X$module_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+with_gnu_ld='`$ECHO "X$with_gnu_ld" | $Xsed -e "$delay_single_quote_subst"`'
+allow_undefined_flag='`$ECHO "X$allow_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`'
+no_undefined_flag='`$ECHO "X$no_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec='`$ECHO "X$hardcode_libdir_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_ld='`$ECHO "X$hardcode_libdir_flag_spec_ld" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_separator='`$ECHO "X$hardcode_libdir_separator" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_direct='`$ECHO "X$hardcode_direct" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_direct_absolute='`$ECHO "X$hardcode_direct_absolute" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_minus_L='`$ECHO "X$hardcode_minus_L" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_shlibpath_var='`$ECHO "X$hardcode_shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_automatic='`$ECHO "X$hardcode_automatic" | $Xsed -e "$delay_single_quote_subst"`'
+inherit_rpath='`$ECHO "X$inherit_rpath" | $Xsed -e "$delay_single_quote_subst"`'
+link_all_deplibs='`$ECHO "X$link_all_deplibs" | $Xsed -e "$delay_single_quote_subst"`'
+fix_srcfile_path='`$ECHO "X$fix_srcfile_path" | $Xsed -e "$delay_single_quote_subst"`'
+always_export_symbols='`$ECHO "X$always_export_symbols" | $Xsed -e "$delay_single_quote_subst"`'
+export_symbols_cmds='`$ECHO "X$export_symbols_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+exclude_expsyms='`$ECHO "X$exclude_expsyms" | $Xsed -e "$delay_single_quote_subst"`'
+include_expsyms='`$ECHO "X$include_expsyms" | $Xsed -e "$delay_single_quote_subst"`'
+prelink_cmds='`$ECHO "X$prelink_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+file_list_spec='`$ECHO "X$file_list_spec" | $Xsed -e "$delay_single_quote_subst"`'
+variables_saved_for_relink='`$ECHO "X$variables_saved_for_relink" | $Xsed -e "$delay_single_quote_subst"`'
+need_lib_prefix='`$ECHO "X$need_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`'
+need_version='`$ECHO "X$need_version" | $Xsed -e "$delay_single_quote_subst"`'
+version_type='`$ECHO "X$version_type" | $Xsed -e "$delay_single_quote_subst"`'
+runpath_var='`$ECHO "X$runpath_var" | $Xsed -e "$delay_single_quote_subst"`'
+shlibpath_var='`$ECHO "X$shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`'
+shlibpath_overrides_runpath='`$ECHO "X$shlibpath_overrides_runpath" | $Xsed -e "$delay_single_quote_subst"`'
+libname_spec='`$ECHO "X$libname_spec" | $Xsed -e "$delay_single_quote_subst"`'
+library_names_spec='`$ECHO "X$library_names_spec" | $Xsed -e "$delay_single_quote_subst"`'
+soname_spec='`$ECHO "X$soname_spec" | $Xsed -e "$delay_single_quote_subst"`'
+postinstall_cmds='`$ECHO "X$postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+postuninstall_cmds='`$ECHO "X$postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+finish_cmds='`$ECHO "X$finish_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+finish_eval='`$ECHO "X$finish_eval" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_into_libs='`$ECHO "X$hardcode_into_libs" | $Xsed -e "$delay_single_quote_subst"`'
+sys_lib_search_path_spec='`$ECHO "X$sys_lib_search_path_spec" | $Xsed -e "$delay_single_quote_subst"`'
+sys_lib_dlsearch_path_spec='`$ECHO "X$sys_lib_dlsearch_path_spec" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_action='`$ECHO "X$hardcode_action" | $Xsed -e "$delay_single_quote_subst"`'
+enable_dlopen='`$ECHO "X$enable_dlopen" | $Xsed -e "$delay_single_quote_subst"`'
+enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quote_subst"`'
+enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`'
+old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`'
+striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`'
+
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# Quote evaled strings.
+for var in SED \
+GREP \
+EGREP \
+FGREP \
+LD \
+NM \
+LN_S \
+lt_SP2NL \
+lt_NL2SP \
+reload_flag \
+deplibs_check_method \
+file_magic_cmd \
+AR \
+AR_FLAGS \
+STRIP \
+RANLIB \
+CC \
+CFLAGS \
+compiler \
+lt_cv_sys_global_symbol_pipe \
+lt_cv_sys_global_symbol_to_cdecl \
+lt_cv_sys_global_symbol_to_c_name_address \
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
+SHELL \
+ECHO \
+lt_prog_compiler_no_builtin_flag \
+lt_prog_compiler_wl \
+lt_prog_compiler_pic \
+lt_prog_compiler_static \
+lt_cv_prog_compiler_c_o \
+need_locks \
+DSYMUTIL \
+NMEDIT \
+LIPO \
+OTOOL \
+OTOOL64 \
+shrext_cmds \
+export_dynamic_flag_spec \
+whole_archive_flag_spec \
+compiler_needs_object \
+with_gnu_ld \
+allow_undefined_flag \
+no_undefined_flag \
+hardcode_libdir_flag_spec \
+hardcode_libdir_flag_spec_ld \
+hardcode_libdir_separator \
+fix_srcfile_path \
+exclude_expsyms \
+include_expsyms \
+file_list_spec \
+variables_saved_for_relink \
+libname_spec \
+library_names_spec \
+soname_spec \
+finish_eval \
+old_striplib \
+striplib; do
+ case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+ *[\\\\\\\`\\"\\\$]*)
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+ ;;
+ *)
+ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+ ;;
+ esac
+done
+
+# Double-quote double-evaled strings.
+for var in reload_cmds \
+old_postinstall_cmds \
+old_postuninstall_cmds \
+old_archive_cmds \
+extract_expsyms_cmds \
+old_archive_from_new_cmds \
+old_archive_from_expsyms_cmds \
+archive_cmds \
+archive_expsym_cmds \
+module_cmds \
+module_expsym_cmds \
+export_symbols_cmds \
+prelink_cmds \
+postinstall_cmds \
+postuninstall_cmds \
+finish_cmds \
+sys_lib_search_path_spec \
+sys_lib_dlsearch_path_spec; do
+ case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+ *[\\\\\\\`\\"\\\$]*)
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+ ;;
+ *)
+ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+ ;;
+ esac
+done
+
+# Fix-up fallback echo if it was mangled by the above quoting rules.
+case \$lt_ECHO in
+*'\\\$0 --fallback-echo"') lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\$0 --fallback-echo"\$/\$0 --fallback-echo"/'\`
+ ;;
+esac
+
+ac_aux_dir='$ac_aux_dir'
+xsi_shell='$xsi_shell'
+lt_shell_append='$lt_shell_append'
+
+# See if we are running on zsh, and set the options which allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+fi
+
+
+ PACKAGE='$PACKAGE'
+ VERSION='$VERSION'
+ TIMESTAMP='$TIMESTAMP'
+ RM='$RM'
+ ofile='$ofile'
+
+
+
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+
+# Handling of arguments.
+for ac_config_target in $ac_config_targets
+do
+ case $ac_config_target in
+ "lib/curl_config.h") CONFIG_HEADERS="$CONFIG_HEADERS lib/curl_config.h" ;;
+ "src/curl_config.h") CONFIG_HEADERS="$CONFIG_HEADERS src/curl_config.h" ;;
+ "include/curl/curlbuild.h") CONFIG_HEADERS="$CONFIG_HEADERS include/curl/curlbuild.h" ;;
+ "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+ "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
+ "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+ "docs/Makefile") CONFIG_FILES="$CONFIG_FILES docs/Makefile" ;;
+ "docs/examples/Makefile") CONFIG_FILES="$CONFIG_FILES docs/examples/Makefile" ;;
+ "docs/libcurl/Makefile") CONFIG_FILES="$CONFIG_FILES docs/libcurl/Makefile" ;;
+ "include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;;
+ "include/curl/Makefile") CONFIG_FILES="$CONFIG_FILES include/curl/Makefile" ;;
+ "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
+ "lib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;;
+ "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;;
+ "tests/data/Makefile") CONFIG_FILES="$CONFIG_FILES tests/data/Makefile" ;;
+ "tests/server/Makefile") CONFIG_FILES="$CONFIG_FILES tests/server/Makefile" ;;
+ "tests/libtest/Makefile") CONFIG_FILES="$CONFIG_FILES tests/libtest/Makefile" ;;
+ "packages/Makefile") CONFIG_FILES="$CONFIG_FILES packages/Makefile" ;;
+ "packages/Win32/Makefile") CONFIG_FILES="$CONFIG_FILES packages/Win32/Makefile" ;;
+ "packages/Win32/cygwin/Makefile") CONFIG_FILES="$CONFIG_FILES packages/Win32/cygwin/Makefile" ;;
+ "packages/Linux/Makefile") CONFIG_FILES="$CONFIG_FILES packages/Linux/Makefile" ;;
+ "packages/Linux/RPM/Makefile") CONFIG_FILES="$CONFIG_FILES packages/Linux/RPM/Makefile" ;;
+ "packages/Linux/RPM/curl.spec") CONFIG_FILES="$CONFIG_FILES packages/Linux/RPM/curl.spec" ;;
+ "packages/Linux/RPM/curl-ssl.spec") CONFIG_FILES="$CONFIG_FILES packages/Linux/RPM/curl-ssl.spec" ;;
+ "packages/Solaris/Makefile") CONFIG_FILES="$CONFIG_FILES packages/Solaris/Makefile" ;;
+ "packages/EPM/curl.list") CONFIG_FILES="$CONFIG_FILES packages/EPM/curl.list" ;;
+ "packages/EPM/Makefile") CONFIG_FILES="$CONFIG_FILES packages/EPM/Makefile" ;;
+ "packages/vms/Makefile") CONFIG_FILES="$CONFIG_FILES packages/vms/Makefile" ;;
+ "packages/AIX/Makefile") CONFIG_FILES="$CONFIG_FILES packages/AIX/Makefile" ;;
+ "packages/AIX/RPM/Makefile") CONFIG_FILES="$CONFIG_FILES packages/AIX/RPM/Makefile" ;;
+ "packages/AIX/RPM/curl.spec") CONFIG_FILES="$CONFIG_FILES packages/AIX/RPM/curl.spec" ;;
+ "curl-config") CONFIG_FILES="$CONFIG_FILES curl-config" ;;
+ "libcurl.pc") CONFIG_FILES="$CONFIG_FILES libcurl.pc" ;;
+
+ *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5 ;;
+ esac
+done
+
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used. Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+ test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+ test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+ test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+fi
+
+# Have a temporary directory for convenience. Make it in the build tree
+# simply because there is no reason against having it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Hook for its removal unless debugging.
+# Note that there is a small window in which the directory will not be cleaned:
+# after its creation but before its name has been assigned to `$tmp'.
+$debug ||
+{
+ tmp=
+ trap 'exit_status=$?
+ { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
+' 0
+ trap 'as_fn_exit 1' 1 2 13 15
+}
+# Create a (secure) tmp directory for tmp files.
+
+{
+ tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
+ test -n "$tmp" && test -d "$tmp"
+} ||
+{
+ tmp=./conf$$-$RANDOM
+ (umask 077 && mkdir "$tmp")
+} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
+
+# Set up the scripts for CONFIG_FILES section.
+# No need to generate them if there are no CONFIG_FILES.
+# This happens for instance with `./config.status config.h'.
+if test -n "$CONFIG_FILES"; then
+
+
+ac_cr=`echo X | tr X '\015'`
+# On cygwin, bash can eat \r inside `` if the user requested igncr.
+# But we know of no other shell where ac_cr would be empty at this
+# point, so we can use a bashism as a fallback.
+if test "x$ac_cr" = x; then
+ eval ac_cr=\$\'\\r\'
+fi
+ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
+if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
+ ac_cs_awk_cr='\\r'
+else
+ ac_cs_awk_cr=$ac_cr
+fi
+
+echo 'BEGIN {' >"$tmp/subs1.awk" &&
+_ACEOF
+
+
+{
+ echo "cat >conf$$subs.awk <<_ACEOF" &&
+ echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
+ echo "_ACEOF"
+} >conf$$subs.sh ||
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+ . ./conf$$subs.sh ||
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+
+ ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
+ if test $ac_delim_n = $ac_delim_num; then
+ break
+ elif $ac_last_try; then
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ else
+ ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+ fi
+done
+rm -f conf$$subs.sh
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+cat >>"\$tmp/subs1.awk" <<\\_ACAWK &&
+_ACEOF
+sed -n '
+h
+s/^/S["/; s/!.*/"]=/
+p
+g
+s/^[^!]*!//
+:repl
+t repl
+s/'"$ac_delim"'$//
+t delim
+:nl
+h
+s/\(.\{148\}\)..*/\1/
+t more1
+s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
+p
+n
+b repl
+:more1
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t nl
+:delim
+h
+s/\(.\{148\}\)..*/\1/
+t more2
+s/["\\]/\\&/g; s/^/"/; s/$/"/
+p
+b
+:more2
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t delim
+' <conf$$subs.awk | sed '
+/^[^""]/{
+ N
+ s/\n//
+}
+' >>$CONFIG_STATUS || ac_write_fail=1
+rm -f conf$$subs.awk
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+_ACAWK
+cat >>"\$tmp/subs1.awk" <<_ACAWK &&
+ for (key in S) S_is_set[key] = 1
+ FS = ""
+
+}
+{
+ line = $ 0
+ nfields = split(line, field, "@")
+ substed = 0
+ len = length(field[1])
+ for (i = 2; i < nfields; i++) {
+ key = field[i]
+ keylen = length(key)
+ if (S_is_set[key]) {
+ value = S[key]
+ line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
+ len += length(value) + length(field[++i])
+ substed = 1
+ } else
+ len += 1 + keylen
+ }
+
+ print line
+}
+
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
+ sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
+else
+ cat
+fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \
+ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
+_ACEOF
+
+# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
+# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+ ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{
+h
+s///
+s/^/:/
+s/[ ]*$/:/
+s/:\$(srcdir):/:/g
+s/:\${srcdir}:/:/g
+s/:@srcdir@:/:/g
+s/^:*//
+s/:*$//
+x
+s/\(=[ ]*\).*/\1/
+G
+s/\n//
+s/^[^=]*=[ ]*$//
+}'
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+fi # test -n "$CONFIG_FILES"
+
+# Set up the scripts for CONFIG_HEADERS section.
+# No need to generate them if there are no CONFIG_HEADERS.
+# This happens for instance with `./config.status Makefile'.
+if test -n "$CONFIG_HEADERS"; then
+cat >"$tmp/defines.awk" <<\_ACAWK ||
+BEGIN {
+_ACEOF
+
+# Transform confdefs.h into an awk script `defines.awk', embedded as
+# here-document in config.status, that substitutes the proper values into
+# config.h.in to produce config.h.
+
+# Create a delimiter string that does not exist in confdefs.h, to ease
+# handling of long lines.
+ac_delim='%!_!# '
+for ac_last_try in false false :; do
+ ac_t=`sed -n "/$ac_delim/p" confdefs.h`
+ if test -z "$ac_t"; then
+ break
+ elif $ac_last_try; then
+ as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
+ else
+ ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+ fi
+done
+
+# For the awk script, D is an array of macro values keyed by name,
+# likewise P contains macro parameters if any. Preserve backslash
+# newline sequences.
+
+ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
+sed -n '
+s/.\{148\}/&'"$ac_delim"'/g
+t rset
+:rset
+s/^[ ]*#[ ]*define[ ][ ]*/ /
+t def
+d
+:def
+s/\\$//
+t bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3"/p
+s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p
+d
+:bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3\\\\\\n"\\/p
+t cont
+s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
+t cont
+d
+:cont
+n
+s/.\{148\}/&'"$ac_delim"'/g
+t clear
+:clear
+s/\\$//
+t bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/"/p
+d
+:bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
+b cont
+' <confdefs.h | sed '
+s/'"$ac_delim"'/"\\\
+"/g' >>$CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ for (key in D) D_is_set[key] = 1
+ FS = ""
+}
+/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
+ line = \$ 0
+ split(line, arg, " ")
+ if (arg[1] == "#") {
+ defundef = arg[2]
+ mac1 = arg[3]
+ } else {
+ defundef = substr(arg[1], 2)
+ mac1 = arg[2]
+ }
+ split(mac1, mac2, "(") #)
+ macro = mac2[1]
+ prefix = substr(line, 1, index(line, defundef) - 1)
+ if (D_is_set[macro]) {
+ # Preserve the white space surrounding the "#".
+ print prefix "define", macro P[macro] D[macro]
+ next
+ } else {
+ # Replace #undef with comments. This is necessary, for example,
+ # in the case of _POSIX_SOURCE, which is predefined and required
+ # on some systems where configure will not decide to define it.
+ if (defundef == "undef") {
+ print "/*", prefix defundef, macro, "*/"
+ next
+ }
+ }
+}
+{ print }
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ as_fn_error $? "could not setup config headers machinery" "$LINENO" 5
+fi # test -n "$CONFIG_HEADERS"
+
+
+eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS"
+shift
+for ac_tag
+do
+ case $ac_tag in
+ :[FHLC]) ac_mode=$ac_tag; continue;;
+ esac
+ case $ac_mode$ac_tag in
+ :[FHL]*:*);;
+ :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5 ;;
+ :[FH]-) ac_tag=-:-;;
+ :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
+ esac
+ ac_save_IFS=$IFS
+ IFS=:
+ set x $ac_tag
+ IFS=$ac_save_IFS
+ shift
+ ac_file=$1
+ shift
+
+ case $ac_mode in
+ :L) ac_source=$1;;
+ :[FH])
+ ac_file_inputs=
+ for ac_f
+ do
+ case $ac_f in
+ -) ac_f="$tmp/stdin";;
+ *) # Look for the file first in the build tree, then in the source tree
+ # (if the path is not absolute). The absolute path cannot be DOS-style,
+ # because $ac_f cannot contain `:'.
+ test -f "$ac_f" ||
+ case $ac_f in
+ [\\/$]*) false;;
+ *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+ esac ||
+ as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5 ;;
+ esac
+ case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+ as_fn_append ac_file_inputs " '$ac_f'"
+ done
+
+ # Let's still pretend it is `configure' which instantiates (i.e., don't
+ # use $as_me), people would be surprised to read:
+ # /* config.h. Generated by config.status. */
+ configure_input='Generated from '`
+ $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+ `' by configure.'
+ if test x"$ac_file" != x-; then
+ configure_input="$ac_file. $configure_input"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
+$as_echo "$as_me: creating $ac_file" >&6;}
+ fi
+ # Neutralize special characters interpreted by sed in replacement strings.
+ case $configure_input in #(
+ *\&* | *\|* | *\\* )
+ ac_sed_conf_input=`$as_echo "$configure_input" |
+ sed 's/[\\\\&|]/\\\\&/g'`;; #(
+ *) ac_sed_conf_input=$configure_input;;
+ esac
+
+ case $ac_tag in
+ *:-:* | *:-) cat >"$tmp/stdin" \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
+ esac
+ ;;
+ esac
+
+ ac_dir=`$as_dirname -- "$ac_file" ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_file" : 'X\(//\)[^/]' \| \
+ X"$ac_file" : 'X\(//\)$' \| \
+ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$ac_file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ as_dir="$ac_dir"; as_fn_mkdir_p
+ ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+
+ case $ac_mode in
+ :F)
+ #
+ # CONFIG_FILE
+ #
+
+ case $INSTALL in
+ [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+ *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
+ esac
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# If the template does not know about datarootdir, expand it.
+# FIXME: This hack should be removed a few years after 2.60.
+ac_datarootdir_hack=; ac_datarootdir_seen=
+ac_sed_dataroot='
+/datarootdir/ {
+ p
+ q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p'
+case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
+*datarootdir*) ac_datarootdir_seen=yes;;
+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ ac_datarootdir_hack='
+ s&@datadir@&$datadir&g
+ s&@docdir@&$docdir&g
+ s&@infodir@&$infodir&g
+ s&@localedir@&$localedir&g
+ s&@mandir@&$mandir&g
+ s&\\\${datarootdir}&$datarootdir&g' ;;
+esac
+_ACEOF
+
+# Neutralize VPATH when `$srcdir' = `.'.
+# Shell code in configure.ac might set extrasub.
+# FIXME: do we really want to maintain this feature?
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_sed_extra="$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s|@configure_input@|$ac_sed_conf_input|;t t
+s&@top_builddir@&$ac_top_builddir_sub&;t t
+s&@top_build_prefix@&$ac_top_build_prefix&;t t
+s&@srcdir@&$ac_srcdir&;t t
+s&@abs_srcdir@&$ac_abs_srcdir&;t t
+s&@top_srcdir@&$ac_top_srcdir&;t t
+s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
+s&@builddir@&$ac_builddir&;t t
+s&@abs_builddir@&$ac_abs_builddir&;t t
+s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
+s&@INSTALL@&$ac_INSTALL&;t t
+$ac_datarootdir_hack
+"
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+
+test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+ { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
+ { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined. Please make sure it is defined" >&5
+$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined. Please make sure it is defined" >&2;}
+
+ rm -f "$tmp/stdin"
+ case $ac_file in
+ -) cat "$tmp/out" && rm -f "$tmp/out";;
+ *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
+ esac \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ ;;
+ :H)
+ #
+ # CONFIG_HEADER
+ #
+ if test x"$ac_file" != x-; then
+ {
+ $as_echo "/* $configure_input */" \
+ && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs"
+ } >"$tmp/config.h" \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
+$as_echo "$as_me: $ac_file is unchanged" >&6;}
+ else
+ rm -f "$ac_file"
+ mv "$tmp/config.h" "$ac_file" \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ fi
+ else
+ $as_echo "/* $configure_input */" \
+ && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \
+ || as_fn_error $? "could not create -" "$LINENO" 5
+ fi
+# Compute "$ac_file"'s index in $config_headers.
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+ case $_am_header in
+ "$ac_file" | "$ac_file":* )
+ break ;;
+ * )
+ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+ esac
+done
+echo "timestamp for "$ac_file"" >`$as_dirname -- "$ac_file" ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_file" : 'X\(//\)[^/]' \| \
+ X"$ac_file" : 'X\(//\)$' \| \
+ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$ac_file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`/stamp-h$_am_stamp_count
+ ;;
+
+ :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
+$as_echo "$as_me: executing $ac_file commands" >&6;}
+ ;;
+ esac
+
+
+ case $ac_file$ac_mode in
+ "depfiles":C) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do
+ # Strip MF so we end up with the name of the file.
+ mf=`echo "$mf" | sed -e 's/:.*$//'`
+ # Check whether this is an Automake generated Makefile or not.
+ # We used to match only the files named `Makefile.in', but
+ # some people rename them; so instead we look at the file content.
+ # Grep'ing the first line is not enough: some people post-process
+ # each Makefile.in and add a new line on top of each file to say so.
+ # So let's grep whole file.
+ if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then
+ dirpart=`$as_dirname -- "$mf" ||
+$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$mf" : 'X\(//\)[^/]' \| \
+ X"$mf" : 'X\(//\)$' \| \
+ X"$mf" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$mf" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ else
+ continue
+ fi
+ # Extract the definition of DEPDIR, am__include, and am__quote
+ # from the Makefile without running `make'.
+ DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+ test -z "$DEPDIR" && continue
+ am__include=`sed -n 's/^am__include = //p' < "$mf"`
+ test -z "am__include" && continue
+ am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+ # When using ansi2knr, U may be empty or an underscore; expand it
+ U=`sed -n 's/^U = //p' < "$mf"`
+ # Find all dependency output files, they are included files with
+ # $(DEPDIR) in their names. We invoke sed twice because it is the
+ # simplest approach to changing $(DEPDIR) to its actual value in the
+ # expansion.
+ for file in `sed -n "
+ s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+ # Make sure the directory exists.
+ test -f "$dirpart/$file" && continue
+ fdir=`$as_dirname -- "$file" ||
+$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$file" : 'X\(//\)[^/]' \| \
+ X"$file" : 'X\(//\)$' \| \
+ X"$file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ as_dir=$dirpart/$fdir; as_fn_mkdir_p
+ # echo "creating $dirpart/$file"
+ echo '# dummy' > "$dirpart/$file"
+ done
+done
+ ;;
+ "libtool":C)
+
+ # See if we are running on zsh, and set the options which allow our
+ # commands through without removal of \ escapes.
+ if test -n "${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+ fi
+
+ cfgfile="${ofile}T"
+ trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+ $RM "$cfgfile"
+
+ cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+
+# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+# 2006, 2007, 2008 Free Software Foundation, Inc.
+# Written by Gordon Matzigkeit, 1996
+#
+# This file is part of GNU Libtool.
+#
+# GNU Libtool 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.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy
+# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
+# obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+
+# The names of the tagged configurations supported by this script.
+available_tags=""
+
+# ### BEGIN LIBTOOL CONFIG
+
+# Assembler program.
+AS=$AS
+
+# DLL creation program.
+DLLTOOL=$DLLTOOL
+
+# Object dumper program.
+OBJDUMP=$OBJDUMP
+
+# Which release of libtool.m4 was used?
+macro_version=$macro_version
+macro_revision=$macro_revision
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# What type of objects to build.
+pic_mode=$pic_mode
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+host_os=$host_os
+
+# The build system.
+build_alias=$build_alias
+build=$build
+build_os=$build_os
+
+# A sed program that does not truncate output.
+SED=$lt_SED
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="\$SED -e 1s/^X//"
+
+# A grep program that handles long lines.
+GREP=$lt_GREP
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# A literal string matcher.
+FGREP=$lt_FGREP
+
+# A BSD- or MS-compatible name lister.
+NM=$lt_NM
+
+# Whether we need soft or hard links.
+LN_S=$lt_LN_S
+
+# What is the maximum length of a command?
+max_cmd_len=$max_cmd_len
+
+# Object file suffix (normally "o").
+objext=$ac_objext
+
+# Executable file suffix (normally "").
+exeext=$exeext
+
+# whether the shell understands "unset".
+lt_unset=$lt_unset
+
+# turn spaces into newlines.
+SP2NL=$lt_lt_SP2NL
+
+# turn newlines into spaces.
+NL2SP=$lt_lt_NL2SP
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == "file_magic".
+file_magic_cmd=$lt_file_magic_cmd
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A symbol stripping program.
+STRIP=$lt_STRIP
+
+# Commands used to install an old-style archive.
+RANLIB=$lt_RANLIB
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# A C compiler.
+LTCC=$lt_CC
+
+# LTCC compiler flags.
+LTCFLAGS=$lt_CFLAGS
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration.
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair.
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# Transform the output of nm in a C name address pair when lib prefix is needed.
+global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# An echo program that does not interpret backslashes.
+ECHO=$lt_ECHO
+
+# Used to examine libraries when file_magic_cmd begins with "file".
+MAGIC_CMD=$MAGIC_CMD
+
+# Must we lock files when doing compilation?
+need_locks=$lt_need_locks
+
+# Tool to manipulate archived DWARF debug symbol files on Mac OS X.
+DSYMUTIL=$lt_DSYMUTIL
+
+# Tool to change global to local symbols on Mac OS X.
+NMEDIT=$lt_NMEDIT
+
+# Tool to manipulate fat objects and archives on Mac OS X.
+LIPO=$lt_LIPO
+
+# ldd/readelf like tool for Mach-O binaries on Mac OS X.
+OTOOL=$lt_OTOOL
+
+# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4.
+OTOOL64=$lt_OTOOL64
+
+# Old archive suffix (normally "a").
+libext=$libext
+
+# Shared library suffix (normally ".so").
+shrext_cmds=$lt_shrext_cmds
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at link time.
+variables_saved_for_relink=$lt_variables_saved_for_relink
+
+# Do we need the "lib" prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Library versioning type.
+version_type=$version_type
+
+# Shared library runtime path variable.
+runpath_var=$runpath_var
+
+# Shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names. First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Command to use after installation of a shared archive.
+postinstall_cmds=$lt_postinstall_cmds
+
+# Command to use after uninstallation of a shared archive.
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# As "finish_cmds", except a single script fragment to be evaled but
+# not shown.
+finish_eval=$lt_finish_eval
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Compile-time system search path for libraries.
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries.
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+
+# The linker used to build libraries.
+LD=$lt_LD
+
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds
+
+# A language specific compiler.
+CC=$lt_compiler
+
+# Is the compiler the GNU compiler?
+with_gcc=$GCC
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc
+
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec
+
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
+
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds
+archive_expsym_cmds=$lt_archive_expsym_cmds
+
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds
+module_expsym_cmds=$lt_module_expsym_cmds
+
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag
+
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
+
+# If ld is used when linking, flag to hardcode \$libdir into a binary
+# during linking. This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld
+
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \${shlibpath_var} if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute
+
+# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+# into the resulting binary.
+hardcode_minus_L=$hardcode_minus_L
+
+# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+# into the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var
+
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic
+
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path=$lt_fix_srcfile_path
+
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms
+
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds
+
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action
+
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+ case $host_os in
+ aix3*)
+ cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program. For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+fi
+_LT_EOF
+ ;;
+ esac
+
+
+ltmain="$ac_aux_dir/ltmain.sh"
+
+
+ # We use sed instead of cat because bash on DJGPP gets confused if
+ # if finds mixed CR/LF and LF-only lines. Since sed operates in
+ # text mode, it properly converts lines to CR/LF. This bash problem
+ # is reportedly fixed, but why not run on old versions too?
+ sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
+ || (rm -f "$cfgfile"; exit 1)
+
+ case $xsi_shell in
+ yes)
+ cat << \_LT_EOF >> "$cfgfile"
+
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+ case ${1} in
+ */*) func_dirname_result="${1%/*}${2}" ;;
+ * ) func_dirname_result="${3}" ;;
+ esac
+}
+
+# func_basename file
+func_basename ()
+{
+ func_basename_result="${1##*/}"
+}
+
+# func_dirname_and_basename file append nondir_replacement
+# perform func_basename and func_dirname in a single function
+# call:
+# dirname: Compute the dirname of FILE. If nonempty,
+# add APPEND to the result, otherwise set result
+# to NONDIR_REPLACEMENT.
+# value returned in "$func_dirname_result"
+# basename: Compute filename of FILE.
+# value retuned in "$func_basename_result"
+# Implementation must be kept synchronized with func_dirname
+# and func_basename. For efficiency, we do not delegate to
+# those functions but instead duplicate the functionality here.
+func_dirname_and_basename ()
+{
+ case ${1} in
+ */*) func_dirname_result="${1%/*}${2}" ;;
+ * ) func_dirname_result="${3}" ;;
+ esac
+ func_basename_result="${1##*/}"
+}
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+func_stripname ()
+{
+ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+ # positional parameters, so assign one to ordinary parameter first.
+ func_stripname_result=${3}
+ func_stripname_result=${func_stripname_result#"${1}"}
+ func_stripname_result=${func_stripname_result%"${2}"}
+}
+
+# func_opt_split
+func_opt_split ()
+{
+ func_opt_split_opt=${1%%=*}
+ func_opt_split_arg=${1#*=}
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+ case ${1} in
+ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+ *) func_lo2o_result=${1} ;;
+ esac
+}
+
+# func_xform libobj-or-source
+func_xform ()
+{
+ func_xform_result=${1%.*}.lo
+}
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+ func_arith_result=$(( $* ))
+}
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+ func_len_result=${#1}
+}
+
+_LT_EOF
+ ;;
+ *) # Bourne compatible functions.
+ cat << \_LT_EOF >> "$cfgfile"
+
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+ # Extract subdirectory from the argument.
+ func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
+ if test "X$func_dirname_result" = "X${1}"; then
+ func_dirname_result="${3}"
+ else
+ func_dirname_result="$func_dirname_result${2}"
+ fi
+}
+
+# func_basename file
+func_basename ()
+{
+ func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
+}
+
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+# func_strip_suffix prefix name
+func_stripname ()
+{
+ case ${2} in
+ .*) func_stripname_result=`$ECHO "X${3}" \
+ | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;;
+ *) func_stripname_result=`$ECHO "X${3}" \
+ | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;;
+ esac
+}
+
+# sed scripts:
+my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q'
+my_sed_long_arg='1s/^-[^=]*=//'
+
+# func_opt_split
+func_opt_split ()
+{
+ func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"`
+ func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"`
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+ func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"`
+}
+
+# func_xform libobj-or-source
+func_xform ()
+{
+ func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[^.]*$/.lo/'`
+}
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+ func_arith_result=`expr "$@"`
+}
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+ func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
+}
+
+_LT_EOF
+esac
+
+case $lt_shell_append in
+ yes)
+ cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+ eval "$1+=\$2"
+}
+_LT_EOF
+ ;;
+ *)
+ cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+ eval "$1=\$$1\$2"
+}
+
+_LT_EOF
+ ;;
+ esac
+
+
+ sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
+ || (rm -f "$cfgfile"; exit 1)
+
+ mv -f "$cfgfile" "$ofile" ||
+ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+ chmod +x "$ofile"
+
+ ;;
+
+ esac
+done # for ac_tag
+
+
+as_fn_exit 0
+_ACEOF
+ac_clean_files=$ac_clean_files_save
+
+test $ac_write_fail = 0 ||
+ as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded. So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status. When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+ ac_cs_success=:
+ ac_config_status_args=
+ test "$silent" = yes &&
+ ac_config_status_args="$ac_config_status_args --quiet"
+ exec 5>/dev/null
+ $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+ exec 5>>config.log
+ # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+ # would make configure fail if this is the last instruction.
+ $ac_cs_success || as_fn_exit 1
+fi
+
+#
+# CONFIG_SUBDIRS section.
+#
+if test "$no_recursion" != yes; then
+
+ # Remove --cache-file, --srcdir, and --disable-option-checking arguments
+ # so they do not pile up.
+ ac_sub_configure_args=
+ ac_prev=
+ eval "set x $ac_configure_args"
+ shift
+ for ac_arg
+ do
+ if test -n "$ac_prev"; then
+ ac_prev=
+ continue
+ fi
+ case $ac_arg in
+ -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=*)
+ ;;
+ --config-cache | -C)
+ ;;
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ ac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ ;;
+ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+ ac_prev=prefix ;;
+ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+ ;;
+ --disable-option-checking)
+ ;;
+ *)
+ case $ac_arg in
+ *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ as_fn_append ac_sub_configure_args " '$ac_arg'" ;;
+ esac
+ done
+
+ # Always prepend --prefix to ensure using the same prefix
+ # in subdir configurations.
+ ac_arg="--prefix=$prefix"
+ case $ac_arg in
+ *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ ac_sub_configure_args="'$ac_arg' $ac_sub_configure_args"
+
+ # Pass --silent
+ if test "$silent" = yes; then
+ ac_sub_configure_args="--silent $ac_sub_configure_args"
+ fi
+
+ # Always prepend --disable-option-checking to silence warnings, since
+ # different subdirs can have different --enable and --with options.
+ ac_sub_configure_args="--disable-option-checking $ac_sub_configure_args"
+
+ ac_popdir=`pwd`
+ for ac_dir in : $subdirs; do test "x$ac_dir" = x: && continue
+
+ # Do not complain, so a configure script can configure whichever
+ # parts of a large source tree are present.
+ test -d "$srcdir/$ac_dir" || continue
+
+ ac_msg="=== configuring in $ac_dir (`pwd`/$ac_dir)"
+ $as_echo "$as_me:${as_lineno-$LINENO}: $ac_msg" >&5
+ $as_echo "$ac_msg" >&6
+ as_dir="$ac_dir"; as_fn_mkdir_p
+ ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+
+ cd "$ac_dir"
+
+ # Check for guested configure; otherwise get Cygnus style configure.
+ if test -f "$ac_srcdir/configure.gnu"; then
+ ac_sub_configure=$ac_srcdir/configure.gnu
+ elif test -f "$ac_srcdir/configure"; then
+ ac_sub_configure=$ac_srcdir/configure
+ elif test -f "$ac_srcdir/configure.in"; then
+ # This should be Cygnus configure.
+ ac_sub_configure=$ac_aux_dir/configure
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no configuration information is in $ac_dir" >&5
+$as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2;}
+ ac_sub_configure=
+ fi
+
+ # The recursion is here.
+ if test -n "$ac_sub_configure"; then
+ # Make the cache file name correct relative to the subdirectory.
+ case $cache_file in
+ [\\/]* | ?:[\\/]* ) ac_sub_cache_file=$cache_file ;;
+ *) # Relative name.
+ ac_sub_cache_file=$ac_top_build_prefix$cache_file ;;
+ esac
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&5
+$as_echo "$as_me: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&6;}
+ # The eval makes quoting arguments work.
+ eval "\$SHELL \"\$ac_sub_configure\" $ac_sub_configure_args \
+ --cache-file=\"\$ac_sub_cache_file\" --srcdir=\"\$ac_srcdir\"" ||
+ as_fn_error $? "$ac_sub_configure failed for $ac_dir" "$LINENO" 5
+ fi
+
+ cd "$ac_popdir"
+ done
+fi
+if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: Configured to build curl/libcurl:
+
+ curl version: ${VERSION}
+ Host setup: ${host}
+ Install prefix: ${prefix}
+ Compiler: ${CC}
+ SSL support: ${curl_ssl_msg}
+ SSH support: ${curl_ssh_msg}
+ zlib support: ${curl_zlib_msg}
+ krb4 support: ${curl_krb4_msg}
+ GSSAPI support: ${curl_gss_msg}
+ SPNEGO support: ${curl_spnego_msg}
+ resolver: ${curl_res_msg}
+ ipv6 support: ${curl_ipv6_msg}
+ IDN support: ${curl_idn_msg}
+ Build libcurl: Shared=${enable_shared}, Static=${enable_static}
+ Built-in manual: ${curl_manual_msg}
+ Verbose errors: ${curl_verbose_msg}
+ SSPI support: ${curl_sspi_msg}
+ ca cert bundle: ${ca}
+ ca cert path: ${capath}
+ LDAP support: ${curl_ldap_msg}
+ LDAPS support: ${curl_ldaps_msg}
+ RTSP support: ${curl_rtsp_msg}
+ RTMP support: ${curl_rtmp_msg}
+ Protocols: ${SUPPORT_PROTOCOLS}
+" >&5
+$as_echo "$as_me: Configured to build curl/libcurl:
+
+ curl version: ${VERSION}
+ Host setup: ${host}
+ Install prefix: ${prefix}
+ Compiler: ${CC}
+ SSL support: ${curl_ssl_msg}
+ SSH support: ${curl_ssh_msg}
+ zlib support: ${curl_zlib_msg}
+ krb4 support: ${curl_krb4_msg}
+ GSSAPI support: ${curl_gss_msg}
+ SPNEGO support: ${curl_spnego_msg}
+ resolver: ${curl_res_msg}
+ ipv6 support: ${curl_ipv6_msg}
+ IDN support: ${curl_idn_msg}
+ Build libcurl: Shared=${enable_shared}, Static=${enable_static}
+ Built-in manual: ${curl_manual_msg}
+ Verbose errors: ${curl_verbose_msg}
+ SSPI support: ${curl_sspi_msg}
+ ca cert bundle: ${ca}
+ ca cert path: ${capath}
+ LDAP support: ${curl_ldap_msg}
+ LDAPS support: ${curl_ldaps_msg}
+ RTSP support: ${curl_rtsp_msg}
+ RTMP support: ${curl_rtmp_msg}
+ Protocols: ${SUPPORT_PROTOCOLS}
+" >&6;}
+
+if test "x$soname_bump" = "xyes"; then
+
+cat <<EOM
+ SONAME bump: yes - WARNING: this library will be built with the SONAME
+ number bumped due to (a detected) ABI breakage.
+ See lib/README.curl_off_t for details on this.
+EOM
+
+fi
+
diff --git a/configure.ac b/configure.ac
new file mode 100644
index 0000000..28a1955
--- /dev/null
+++ b/configure.ac
@@ -0,0 +1,2902 @@
+#***************************************************************************
+# _ _ ____ _
+# Project ___| | | | _ \| |
+# / __| | | | |_) | |
+# | (__| |_| | _ <| |___
+# \___|\___/|_| \_\_____|
+#
+# Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+#
+# This software is licensed as described in the file COPYING, which
+# you should have received as part of this distribution. The terms
+# are also available at http://curl.haxx.se/docs/copyright.html.
+#
+# You may opt to use, copy, modify, merge, publish, distribute and/or sell
+# copies of the Software, and permit persons to whom the Software is
+# furnished to do so, under the terms of the COPYING file.
+#
+# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+# KIND, either express or implied.
+#
+#***************************************************************************
+dnl Process this file with autoconf to produce a configure script.
+
+AC_PREREQ(2.57)
+
+dnl We don't know the version number "statically" so we use a dash here
+AC_INIT([curl], [-], [a suitable curl mailing list: http://curl.haxx.se/mail/])
+
+CURL_OVERRIDE_AUTOCONF
+
+dnl configure script copyright
+AC_COPYRIGHT([Copyright (c) 1998 - 2010 Daniel Stenberg, <daniel@haxx.se>
+This configure script may be copied, distributed and modified under the
+terms of the curl license; see COPYING for more details])
+
+AC_CONFIG_SRCDIR([lib/urldata.h])
+AM_CONFIG_HEADER(lib/curl_config.h src/curl_config.h include/curl/curlbuild.h)
+AM_MAINTAINER_MODE
+
+CURL_CHECK_OPTION_DEBUG
+CURL_CHECK_OPTION_OPTIMIZE
+CURL_CHECK_OPTION_WARNINGS
+CURL_CHECK_OPTION_WERROR
+CURL_CHECK_OPTION_CURLDEBUG
+CURL_CHECK_OPTION_ARES
+
+CURL_CHECK_PATH_SEPARATOR_REQUIRED
+
+#
+# save the configure arguments
+#
+CONFIGURE_OPTIONS="\"$ac_configure_args\""
+AC_SUBST(CONFIGURE_OPTIONS)
+
+CURL_CFLAG_EXTRAS=""
+if test X"$want_werror" = Xyes; then
+ CURL_CFLAG_EXTRAS="-Werror"
+fi
+AC_SUBST(CURL_CFLAG_EXTRAS)
+
+dnl SED is mandatory for configure process and libtool.
+dnl Set it now, allowing it to be changed later.
+if test -z "$SED"; then
+ dnl allow it to be overridden
+ AC_PATH_PROG([SED], [sed], [not_found],
+ [$PATH:/usr/bin:/usr/local/bin])
+ if test -z "$SED" || test "$SED" = "not_found"; then
+ AC_MSG_ERROR([sed not found in PATH. Cannot continue without sed.])
+ fi
+fi
+AC_SUBST([SED])
+
+dnl GREP is mandatory for configure process and libtool.
+dnl Set it now, allowing it to be changed later.
+if test -z "$GREP"; then
+ dnl allow it to be overridden
+ AC_PATH_PROG([GREP], [grep], [not_found],
+ [$PATH:/usr/bin:/usr/local/bin])
+ if test -z "$GREP" || test "$GREP" = "not_found"; then
+ AC_MSG_ERROR([grep not found in PATH. Cannot continue without grep.])
+ fi
+fi
+AC_SUBST([GREP])
+
+dnl EGREP is mandatory for configure process and libtool.
+dnl Set it now, allowing it to be changed later.
+if test -z "$EGREP"; then
+ dnl allow it to be overridden
+ if echo a | ($GREP -E '(a|b)') >/dev/null 2>&1; then
+ AC_MSG_CHECKING([for egrep])
+ EGREP="$GREP -E"
+ AC_MSG_RESULT([$EGREP])
+ else
+ AC_PATH_PROG([EGREP], [egrep], [not_found],
+ [$PATH:/usr/bin:/usr/local/bin])
+ fi
+fi
+if test -z "$EGREP" || test "$EGREP" = "not_found"; then
+ AC_MSG_ERROR([egrep not found in PATH. Cannot continue without egrep.])
+fi
+AC_SUBST([EGREP])
+
+dnl AR is mandatory for configure process and libtool.
+dnl This is target dependent, so check it as a tool.
+if test -z "$AR"; then
+ dnl allow it to be overridden
+ AC_PATH_TOOL([AR], [ar], [not_found],
+ [$PATH:/usr/bin:/usr/local/bin])
+ if test -z "$AR" || test "$AR" = "not_found"; then
+ AC_MSG_ERROR([ar not found in PATH. Cannot continue without ar.])
+ fi
+fi
+AC_SUBST([AR])
+
+AC_SUBST(libext)
+
+dnl Remove non-configure distributed curlbuild.h
+if test -f ${srcdir}/include/curl/curlbuild.h; then
+ rm -f ${srcdir}/include/curl/curlbuild.h
+fi
+
+dnl figure out the libcurl version
+VERSION=`$SED -ne 's/^#define LIBCURL_VERSION "\(.*\)"/\1/p' ${srcdir}/include/curl/curlver.h`
+AM_INIT_AUTOMAKE(curl,$VERSION)
+AC_MSG_CHECKING([curl version])
+AC_MSG_RESULT($VERSION)
+
+dnl
+dnl we extract the numerical version for curl-config only
+VERSIONNUM=`$SED -ne 's/^#define LIBCURL_VERSION_NUM 0x\(.*\)/\1/p' ${srcdir}/include/curl/curlver.h`
+AC_SUBST(VERSIONNUM)
+
+dnl Solaris pkgadd support definitions
+PKGADD_PKG="HAXXcurl"
+PKGADD_NAME="cURL - a client that groks URLs"
+PKGADD_VENDOR="curl.haxx.se"
+AC_SUBST(PKGADD_PKG)
+AC_SUBST(PKGADD_NAME)
+AC_SUBST(PKGADD_VENDOR)
+
+dnl
+dnl initialize all the info variables
+ curl_ssl_msg="no (--with-{ssl,gnutls,nss,polarssl} )"
+ curl_ssh_msg="no (--with-libssh2)"
+ curl_zlib_msg="no (--with-zlib)"
+ curl_krb4_msg="no (--with-krb4*)"
+ curl_gss_msg="no (--with-gssapi)"
+ curl_spnego_msg="no (--with-spnego)"
+ curl_res_msg="default (--enable-ares / --enable-threaded-resolver)"
+ curl_ipv6_msg="no (--enable-ipv6)"
+ curl_idn_msg="no (--with-libidn)"
+ curl_manual_msg="no (--enable-manual)"
+curl_verbose_msg="enabled (--disable-verbose)"
+ curl_sspi_msg="no (--enable-sspi)"
+ curl_ldap_msg="no (--enable-ldap / --with-ldap-lib / --with-lber-lib)"
+ curl_ldaps_msg="no (--enable-ldaps)"
+ curl_rtsp_msg="no (--enable-rtsp)"
+ curl_rtmp_msg="no (--with-librtmp)"
+
+dnl
+dnl Save anything in $LIBS for later
+dnl
+ALL_LIBS=$LIBS
+
+dnl
+dnl Detect the canonical host and target build environment
+dnl
+
+AC_CANONICAL_HOST
+dnl Get system canonical name
+AC_DEFINE_UNQUOTED(OS, "${host}", [cpu-machine-OS])
+
+dnl Checks for programs.
+CURL_CHECK_PROG_CC
+
+dnl Our curl_off_t internal and external configure settings
+CURL_CONFIGURE_CURL_OFF_T
+
+dnl This defines _ALL_SOURCE for AIX
+CURL_CHECK_AIX_ALL_SOURCE
+
+dnl Our configure and build reentrant settings
+CURL_CONFIGURE_THREAD_SAFE
+CURL_CONFIGURE_REENTRANT
+
+dnl check for how to do large files
+AC_SYS_LARGEFILE
+
+dnl support building of Windows DLLs
+AC_LIBTOOL_WIN32_DLL
+
+dnl force libtool to build static libraries with PIC on AMD64-Linux & FreeBSD
+AC_MSG_CHECKING([if arch-OS host is AMD64-Linux/FreeBSD (to build static libraries with PIC)])
+case $host in
+ x86_64*linux*|amd64*freebsd*|ia64*freebsd*)
+ AC_MSG_RESULT([yes])
+ with_pic=yes
+ ;;
+ *)
+ AC_MSG_RESULT([no])
+ ;;
+esac
+
+AC_MSG_CHECKING([if compiler is icc (to build with PIC)])
+case $CC in
+ icc | */icc)
+ AC_MSG_RESULT([yes])
+ with_pic=yes
+ ;;
+ *)
+ AC_MSG_RESULT([no])
+ ;;
+esac
+
+dnl libtool setup
+AC_PROG_LIBTOOL
+
+AC_MSG_CHECKING([if we need -mimpure-text])
+mimpure=no
+case $host in
+ *-*-solaris2*)
+ if test "$GCC" = "yes"; then
+ mimpure="yes"
+ fi
+ ;;
+ *)
+ ;;
+esac
+AC_MSG_RESULT($mimpure)
+AM_CONDITIONAL(MIMPURE, test x$mimpure = xyes)
+
+dnl 'STATICLIB' is, in spite of its name, not generic but only for static-only
+dnl builds on Windows
+AM_CONDITIONAL(STATICLIB, false)
+
+AC_MSG_CHECKING([if we need BUILDING_LIBCURL])
+case $host in
+ *-*-mingw*)
+ AC_DEFINE(BUILDING_LIBCURL, 1, [when building libcurl itself])
+ AC_MSG_RESULT(yes)
+ AC_MSG_CHECKING([if we need CURL_STATICLIB])
+ if test "X$enable_shared" = "Xno"
+ then
+ AC_DEFINE(CURL_STATICLIB, 1, [when not building a shared library])
+ AC_MSG_RESULT(yes)
+ AM_CONDITIONAL(STATICLIB, true)
+ else
+ AC_MSG_RESULT(no)
+ fi
+ ;;
+ *)
+ AC_MSG_RESULT(no)
+ ;;
+esac
+
+# Determine whether all dependent libraries must be specified when linking
+if test "X$enable_shared" = "Xyes" -a "X$link_all_deplibs" = "Xno"
+then
+ REQUIRE_LIB_DEPS=no
+else
+ REQUIRE_LIB_DEPS=yes
+fi
+AC_SUBST(REQUIRE_LIB_DEPS)
+
+dnl The install stuff has already been taken care of by the automake stuff
+dnl AC_PROG_INSTALL
+AC_PROG_MAKE_SET
+
+dnl check if there's a way to force code inline
+AC_C_INLINE
+
+dnl **********************************************************************
+dnl platform/compiler/architecture specific checks/flags
+dnl **********************************************************************
+
+CURL_CHECK_COMPILER
+CURL_SET_COMPILER_BASIC_OPTS
+CURL_SET_COMPILER_DEBUG_OPTS
+CURL_SET_COMPILER_OPTIMIZE_OPTS
+CURL_SET_COMPILER_WARNING_OPTS
+
+if test "$compiler_id" = "INTEL_UNIX_C"; then
+ #
+ if test "$compiler_num" -ge "1000"; then
+ dnl icc 10.X or later
+ CFLAGS="$CFLAGS -shared-intel"
+ elif test "$compiler_num" -ge "900"; then
+ dnl icc 9.X specific
+ CFLAGS="$CFLAGS -i-dynamic"
+ fi
+ #
+fi
+
+CURL_CHECK_COMPILER_HALT_ON_ERROR
+CURL_CHECK_COMPILER_ARRAY_SIZE_NEGATIVE
+
+CURL_CHECK_NO_UNDEFINED
+AM_CONDITIONAL(NO_UNDEFINED, test x$need_no_undefined = xyes)
+
+CURL_CHECK_CURLDEBUG
+AM_CONDITIONAL(CURLDEBUG, test x$want_curldebug = xyes)
+
+dnl **********************************************************************
+dnl Compilation based checks should not be done before this point.
+dnl **********************************************************************
+
+dnl **********************************************************************
+dnl Make sure that our checks for headers windows.h winsock.h winsock2.h
+dnl and ws2tcpip.h take precedence over any other further checks which
+dnl could be done later using AC_CHECK_HEADER or AC_CHECK_HEADERS for
+dnl this specific header files. And do them before its results are used.
+dnl **********************************************************************
+
+CURL_CHECK_HEADER_WINDOWS
+CURL_CHECK_NATIVE_WINDOWS
+case X-"$ac_cv_native_windows" in
+ X-yes)
+ CURL_CHECK_HEADER_WINSOCK
+ CURL_CHECK_HEADER_WINSOCK2
+ CURL_CHECK_HEADER_WS2TCPIP
+ CURL_CHECK_HEADER_WINLDAP
+ CURL_CHECK_HEADER_WINBER
+ ;;
+ *)
+ ac_cv_header_winsock_h="no"
+ ac_cv_header_winsock2_h="no"
+ ac_cv_header_ws2tcpip_h="no"
+ ac_cv_header_winldap_h="no"
+ ac_cv_header_winber_h="no"
+ ;;
+esac
+CURL_CHECK_WIN32_LARGEFILE
+
+dnl ************************************************************
+dnl switch off particular protocols
+dnl
+AC_MSG_CHECKING([whether to support http])
+AC_ARG_ENABLE(http,
+AC_HELP_STRING([--enable-http],[Enable HTTP support])
+AC_HELP_STRING([--disable-http],[Disable HTTP support]),
+[ case "$enableval" in
+ no)
+ AC_MSG_RESULT(no)
+ AC_DEFINE(CURL_DISABLE_HTTP, 1, [to disable HTTP])
+ AC_MSG_WARN([disable HTTP disables FTP over proxy and RTSP])
+ AC_SUBST(CURL_DISABLE_HTTP, [1])
+ AC_DEFINE(CURL_DISABLE_RTSP, 1, [to disable RTSP])
+ AC_SUBST(CURL_DISABLE_RTSP, [1])
+ ;;
+ *) AC_MSG_RESULT(yes)
+ ;;
+ esac ],
+ AC_MSG_RESULT(yes)
+)
+AC_MSG_CHECKING([whether to support ftp])
+AC_ARG_ENABLE(ftp,
+AC_HELP_STRING([--enable-ftp],[Enable FTP support])
+AC_HELP_STRING([--disable-ftp],[Disable FTP support]),
+[ case "$enableval" in
+ no)
+ AC_MSG_RESULT(no)
+ AC_DEFINE(CURL_DISABLE_FTP, 1, [to disable FTP])
+ AC_SUBST(CURL_DISABLE_FTP, [1])
+ ;;
+ *) AC_MSG_RESULT(yes)
+ ;;
+ esac ],
+ AC_MSG_RESULT(yes)
+)
+AC_MSG_CHECKING([whether to support file])
+AC_ARG_ENABLE(file,
+AC_HELP_STRING([--enable-file],[Enable FILE support])
+AC_HELP_STRING([--disable-file],[Disable FILE support]),
+[ case "$enableval" in
+ no)
+ AC_MSG_RESULT(no)
+ AC_DEFINE(CURL_DISABLE_FILE, 1, [to disable FILE])
+ AC_SUBST(CURL_DISABLE_FILE, [1])
+ ;;
+ *) AC_MSG_RESULT(yes)
+ ;;
+ esac ],
+ AC_MSG_RESULT(yes)
+)
+AC_MSG_CHECKING([whether to support ldap])
+AC_ARG_ENABLE(ldap,
+AC_HELP_STRING([--enable-ldap],[Enable LDAP support])
+AC_HELP_STRING([--disable-ldap],[Disable LDAP support]),
+[ case "$enableval" in
+ no)
+ AC_MSG_RESULT(no)
+ AC_DEFINE(CURL_DISABLE_LDAP, 1, [to disable LDAP])
+ AC_SUBST(CURL_DISABLE_LDAP, [1])
+ ;;
+ *)
+ AC_MSG_RESULT(yes)
+ ;;
+ esac ],[
+ AC_MSG_RESULT(yes) ]
+)
+AC_MSG_CHECKING([whether to support ldaps])
+AC_ARG_ENABLE(ldaps,
+AC_HELP_STRING([--enable-ldaps],[Enable LDAPS support])
+AC_HELP_STRING([--disable-ldaps],[Disable LDAPS support]),
+[ case "$enableval" in
+ no)
+ AC_MSG_RESULT(no)
+ AC_DEFINE(CURL_DISABLE_LDAPS, 1, [to disable LDAPS])
+ AC_SUBST(CURL_DISABLE_LDAPS, [1])
+ ;;
+ *) if test "x$CURL_DISABLE_LDAP" = "x1" ; then
+ AC_MSG_RESULT(LDAP needs to be enabled to support LDAPS)
+ AC_DEFINE(CURL_DISABLE_LDAPS, 1, [to disable LDAPS])
+ AC_SUBST(CURL_DISABLE_LDAPS, [1])
+ else
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_LDAP_SSL, 1, [Use LDAPS implementation])
+ AC_SUBST(HAVE_LDAP_SSL, [1])
+ fi
+ ;;
+ esac ],[
+ if test "x$CURL_DISABLE_LDAP" = "x1" ; then
+ AC_MSG_RESULT(no)
+ AC_DEFINE(CURL_DISABLE_LDAPS, 1, [to disable LDAPS])
+ AC_SUBST(CURL_DISABLE_LDAPS, [1])
+ else
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_LDAP_SSL, 1, [Use LDAPS implementation])
+ AC_SUBST(HAVE_LDAP_SSL, [1])
+ fi ]
+)
+
+AC_MSG_CHECKING([whether to support rtsp])
+AC_ARG_ENABLE(rtsp,
+AC_HELP_STRING([--enable-rtsp],[Enable RTSP support])
+AC_HELP_STRING([--disable-rtsp],[Disable RTSP support]),
+[ case "$enableval" in
+ no)
+ AC_MSG_RESULT(no)
+ AC_DEFINE(CURL_DISABLE_RTSP, 1, [to disable RTSP])
+ AC_SUBST(CURL_DISABLE_RTSP, [1])
+ ;;
+ *) if test x$CURL_DISABLE_HTTP = x1 ; then
+ AC_MSG_ERROR(HTTP support needs to be enabled in order to enable RTSP support!)
+ else
+ AC_MSG_RESULT(yes)
+ curl_rtsp_msg="enabled"
+ fi
+ ;;
+ esac ],
+ if test "x$CURL_DISABLE_HTTP" != "x1"; then
+ AC_MSG_RESULT(yes)
+ curl_rtsp_msg="enabled"
+ else
+ AC_MSG_RESULT(no)
+ fi
+)
+
+AC_MSG_CHECKING([whether to support proxies])
+AC_ARG_ENABLE(proxy,
+AC_HELP_STRING([--enable-proxy],[Enable proxy support])
+AC_HELP_STRING([--disable-proxy],[Disable proxy support]),
+[ case "$enableval" in
+ no)
+ AC_MSG_RESULT(no)
+ AC_DEFINE(CURL_DISABLE_PROXY, 1, [to disable proxies])
+ AC_SUBST(CURL_DISABLE_PROXY, [1])
+ ;;
+ *) AC_MSG_RESULT(yes)
+ ;;
+ esac ],
+ AC_MSG_RESULT(yes)
+)
+
+AC_MSG_CHECKING([whether to support dict])
+AC_ARG_ENABLE(dict,
+AC_HELP_STRING([--enable-dict],[Enable DICT support])
+AC_HELP_STRING([--disable-dict],[Disable DICT support]),
+[ case "$enableval" in
+ no)
+ AC_MSG_RESULT(no)
+ AC_DEFINE(CURL_DISABLE_DICT, 1, [to disable DICT])
+ AC_SUBST(CURL_DISABLE_DICT, [1])
+ ;;
+ *) AC_MSG_RESULT(yes)
+ ;;
+ esac ],
+ AC_MSG_RESULT(yes)
+)
+AC_MSG_CHECKING([whether to support telnet])
+AC_ARG_ENABLE(telnet,
+AC_HELP_STRING([--enable-telnet],[Enable TELNET support])
+AC_HELP_STRING([--disable-telnet],[Disable TELNET support]),
+[ case "$enableval" in
+ no)
+ AC_MSG_RESULT(no)
+ AC_DEFINE(CURL_DISABLE_TELNET, 1, [to disable TELNET])
+ AC_SUBST(CURL_DISABLE_TELNET, [1])
+ ;;
+ *) AC_MSG_RESULT(yes)
+ ;;
+ esac ],
+ AC_MSG_RESULT(yes)
+)
+AC_MSG_CHECKING([whether to support tftp])
+AC_ARG_ENABLE(tftp,
+AC_HELP_STRING([--enable-tftp],[Enable TFTP support])
+AC_HELP_STRING([--disable-tftp],[Disable TFTP support]),
+[ case "$enableval" in
+ no)
+ AC_MSG_RESULT(no)
+ AC_DEFINE(CURL_DISABLE_TFTP, 1, [to disable TFTP])
+ AC_SUBST(CURL_DISABLE_TFTP, [1])
+ ;;
+ *) AC_MSG_RESULT(yes)
+ ;;
+ esac ],
+ AC_MSG_RESULT(yes)
+)
+
+AC_MSG_CHECKING([whether to support pop3])
+AC_ARG_ENABLE(pop3,
+AC_HELP_STRING([--enable-pop3],[Enable POP3 support])
+AC_HELP_STRING([--disable-pop3],[Disable POP3 support]),
+[ case "$enableval" in
+ no)
+ AC_MSG_RESULT(no)
+ AC_DEFINE(CURL_DISABLE_POP3, 1, [to disable POP3])
+ AC_SUBST(CURL_DISABLE_POP3, [1])
+ ;;
+ *) AC_MSG_RESULT(yes)
+ ;;
+ esac ],
+ AC_MSG_RESULT(yes)
+)
+
+
+AC_MSG_CHECKING([whether to support imap])
+AC_ARG_ENABLE(imap,
+AC_HELP_STRING([--enable-imap],[Enable IMAP support])
+AC_HELP_STRING([--disable-imap],[Disable IMAP support]),
+[ case "$enableval" in
+ no)
+ AC_MSG_RESULT(no)
+ AC_DEFINE(CURL_DISABLE_IMAP, 1, [to disable IMAP])
+ AC_SUBST(CURL_DISABLE_IMAP, [1])
+ ;;
+ *) AC_MSG_RESULT(yes)
+ ;;
+ esac ],
+ AC_MSG_RESULT(yes)
+)
+
+
+AC_MSG_CHECKING([whether to support smtp])
+AC_ARG_ENABLE(smtp,
+AC_HELP_STRING([--enable-smtp],[Enable SMTP support])
+AC_HELP_STRING([--disable-smtp],[Disable SMTP support]),
+[ case "$enableval" in
+ no)
+ AC_MSG_RESULT(no)
+ AC_DEFINE(CURL_DISABLE_SMTP, 1, [to disable SMTP])
+ AC_SUBST(CURL_DISABLE_SMTP, [1])
+ ;;
+ *) AC_MSG_RESULT(yes)
+ ;;
+ esac ],
+ AC_MSG_RESULT(yes)
+)
+
+AC_MSG_CHECKING([whether to support gopher])
+AC_ARG_ENABLE(gopher,
+AC_HELP_STRING([--enable-gopher],[Enable Gopher support])
+AC_HELP_STRING([--disable-gopher],[Disable Gopher support]),
+[ case "$enableval" in
+ no)
+ AC_MSG_RESULT(no)
+ AC_DEFINE(CURL_DISABLE_GOPHER, 1, [to disable Gopher])
+ AC_SUBST(CURL_DISABLE_GOPHER, [1])
+ ;;
+ *) AC_MSG_RESULT(yes)
+ ;;
+ esac ],
+ AC_MSG_RESULT(yes)
+)
+
+
+dnl **********************************************************************
+dnl Check for built-in manual
+dnl **********************************************************************
+
+AC_MSG_CHECKING([whether to provide built-in manual])
+AC_ARG_ENABLE(manual,
+AC_HELP_STRING([--enable-manual],[Enable built-in manual])
+AC_HELP_STRING([--disable-manual],[Disable built-in manual]),
+[ case "$enableval" in
+ no)
+ AC_MSG_RESULT(no)
+ ;;
+ *) AC_MSG_RESULT(yes)
+ USE_MANUAL="1"
+ ;;
+ esac ],
+ AC_MSG_RESULT(yes)
+ USE_MANUAL="1"
+)
+dnl The actual use of the USE_MANUAL variable is done much later in this
+dnl script to allow other actions to disable it as well.
+
+dnl **********************************************************************
+dnl Checks for libraries.
+dnl **********************************************************************
+
+CURL_CHECK_LIB_XNET
+
+dnl gethostbyname without lib or in the nsl lib?
+AC_CHECK_FUNC(gethostbyname,
+ [HAVE_GETHOSTBYNAME="1"
+ ],
+ [ AC_CHECK_LIB(nsl, gethostbyname,
+ [HAVE_GETHOSTBYNAME="1"
+ LIBS="$LIBS -lnsl"
+ ])
+ ])
+
+if test "$HAVE_GETHOSTBYNAME" != "1"
+then
+ dnl gethostbyname in the socket lib?
+ AC_CHECK_LIB(socket, gethostbyname,
+ [HAVE_GETHOSTBYNAME="1"
+ LIBS="$LIBS -lsocket"
+ ])
+fi
+
+dnl At least one system has been identified to require BOTH nsl and socket
+dnl libs at the same time to link properly.
+if test "$HAVE_GETHOSTBYNAME" != "1"
+then
+ AC_MSG_CHECKING([for gethostbyname with both nsl and socket libs])
+ my_ac_save_LIBS=$LIBS
+ LIBS="-lnsl -lsocket $LIBS"
+ AC_LINK_IFELSE([
+ AC_LANG_PROGRAM([[
+ ]],[[
+ gethostbyname();
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ HAVE_GETHOSTBYNAME="1"
+ ],[
+ AC_MSG_RESULT([no])
+ LIBS=$my_ac_save_LIBS
+ ])
+fi
+
+if test "$HAVE_GETHOSTBYNAME" != "1"
+then
+ dnl This is for winsock systems
+ if test "$ac_cv_header_windows_h" = "yes"; then
+ if test "$ac_cv_header_winsock_h" = "yes"; then
+ case $host in
+ *-*-mingw32ce*)
+ winsock_LIB="-lwinsock"
+ ;;
+ *)
+ winsock_LIB="-lwsock32"
+ ;;
+ esac
+ fi
+ if test "$ac_cv_header_winsock2_h" = "yes"; then
+ winsock_LIB="-lws2_32"
+ fi
+ if test ! -z "$winsock_LIB"; then
+ my_ac_save_LIBS=$LIBS
+ LIBS="$winsock_LIB $LIBS"
+ AC_MSG_CHECKING([for gethostbyname in $winsock_LIB])
+ AC_LINK_IFELSE([
+ AC_LANG_PROGRAM([[
+#ifdef HAVE_WINDOWS_H
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#ifdef HAVE_WINSOCK2_H
+#include <winsock2.h>
+#else
+#ifdef HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
+#endif
+#endif
+ ]],[[
+ gethostbyname("www.dummysite.com");
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ HAVE_GETHOSTBYNAME="1"
+ ],[
+ AC_MSG_RESULT([no])
+ winsock_LIB=""
+ LIBS=$my_ac_save_LIBS
+ ])
+ fi
+ fi
+fi
+
+if test "$HAVE_GETHOSTBYNAME" != "1"
+then
+ dnl This is for Minix 3.1
+ AC_MSG_CHECKING([for gethostbyname for Minix 3])
+ AC_LINK_IFELSE([
+ AC_LANG_PROGRAM([[
+/* Older Minix versions may need <net/gen/netdb.h> here instead */
+#include <netdb.h>
+ ]],[[
+ gethostbyname("www.dummysite.com");
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ HAVE_GETHOSTBYNAME="1"
+ ],[
+ AC_MSG_RESULT([no])
+ ])
+fi
+
+if test "$HAVE_GETHOSTBYNAME" != "1"
+then
+ dnl This is for eCos with a stubbed DNS implementation
+ AC_MSG_CHECKING([for gethostbyname for eCos])
+ AC_LINK_IFELSE([
+ AC_LANG_PROGRAM([[
+#include <stdio.h>
+#include <netdb.h>
+ ]],[[
+ gethostbyname("www.dummysite.com");
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ HAVE_GETHOSTBYNAME="1"
+ ],[
+ AC_MSG_RESULT([no])
+ ])
+fi
+
+if test "$HAVE_GETHOSTBYNAME" != "1"
+then
+ dnl gethostbyname in the network lib - for Haiku OS
+ AC_CHECK_LIB(network, gethostbyname,
+ [HAVE_GETHOSTBYNAME="1"
+ LIBS="$LIBS -lnetwork"
+ ])
+fi
+
+if test "$HAVE_GETHOSTBYNAME" != "1"
+then
+ dnl gethostbyname in the net lib - for BeOS
+ AC_CHECK_LIB(net, gethostbyname,
+ [HAVE_GETHOSTBYNAME="1"
+ LIBS="$LIBS -lnet"
+ ])
+fi
+
+
+if test "$HAVE_GETHOSTBYNAME" != "1"; then
+ AC_MSG_ERROR([couldn't find libraries for gethostbyname()])
+fi
+
+dnl resolve lib?
+AC_CHECK_FUNC(strcasecmp, , [ AC_CHECK_LIB(resolve, strcasecmp) ])
+
+if test "$ac_cv_lib_resolve_strcasecmp" = "$ac_cv_func_strcasecmp"; then
+ AC_CHECK_LIB(resolve, strcasecmp,
+ [LIBS="-lresolve $LIBS"],
+ ,
+ -lnsl)
+fi
+ac_cv_func_strcasecmp="no"
+
+CURL_CHECK_LIBS_CONNECT
+
+CURL_NETWORK_LIBS=$LIBS
+
+dnl **********************************************************************
+dnl In case that function clock_gettime with monotonic timer is available,
+dnl check for additional required libraries.
+dnl **********************************************************************
+CURL_CHECK_LIBS_CLOCK_GETTIME_MONOTONIC
+
+dnl **********************************************************************
+dnl The preceding library checks are all potentially useful for test
+dnl servers (for providing networking support). Save the list of required
+dnl libraries at this point for use while linking those test servers.
+dnl **********************************************************************
+TEST_SERVER_LIBS=$LIBS
+
+dnl **********************************************************************
+AC_MSG_CHECKING([whether to use libgcc])
+AC_ARG_ENABLE(libgcc,
+AC_HELP_STRING([--enable-libgcc],[use libgcc when linking]),
+[ case "$enableval" in
+ yes)
+ ALL_LIBS="$ALL_LIBS -lgcc"
+ AC_MSG_RESULT(yes)
+ ;;
+ *) AC_MSG_RESULT(no)
+ ;;
+ esac ],
+ AC_MSG_RESULT(no)
+)
+
+dnl **********************************************************************
+dnl Check for LDAP
+dnl **********************************************************************
+
+LDAPLIBNAME=""
+AC_ARG_WITH(ldap-lib,
+AC_HELP_STRING([--with-ldap-lib=libname],[Specify name of ldap lib file]),
+ [LDAPLIBNAME="$withval"])
+
+LBERLIBNAME=""
+AC_ARG_WITH(lber-lib,
+AC_HELP_STRING([--with-lber-lib=libname],[Specify name of lber lib file]),
+ [LBERLIBNAME="$withval"])
+
+if test x$CURL_DISABLE_LDAP != x1 ; then
+
+ CURL_CHECK_HEADER_LBER
+ CURL_CHECK_HEADER_LDAP
+ CURL_CHECK_HEADER_LDAPSSL
+ CURL_CHECK_HEADER_LDAP_SSL
+
+ if test -z "$LDAPLIBNAME" ; then
+ if test "$ac_cv_native_windows" = "yes"; then
+ dnl Windows uses a single and unique LDAP library name
+ LDAPLIBNAME="wldap32"
+ LBERLIBNAME="no"
+ fi
+ fi
+
+ if test "$LDAPLIBNAME" ; then
+ AC_CHECK_LIB("$LDAPLIBNAME", ldap_init,, [
+ AC_MSG_WARN(["$LDAPLIBNAME" is not an LDAP library: LDAP disabled])
+ AC_DEFINE(CURL_DISABLE_LDAP, 1, [to disable LDAP])
+ AC_SUBST(CURL_DISABLE_LDAP, [1])])
+ AC_DEFINE(CURL_DISABLE_LDAPS, 1, [to disable LDAPS])
+ AC_SUBST(CURL_DISABLE_LDAPS, [1])
+ else
+ dnl Try to find the right ldap libraries for this system
+ CURL_CHECK_LIBS_LDAP
+ case X-"$curl_cv_ldap_LIBS" in
+ X-unknown)
+ AC_MSG_WARN([Cannot find libraries for LDAP support: LDAP disabled])
+ AC_DEFINE(CURL_DISABLE_LDAP, 1, [to disable LDAP])
+ AC_SUBST(CURL_DISABLE_LDAP, [1])
+ AC_DEFINE(CURL_DISABLE_LDAPS, 1, [to disable LDAPS])
+ AC_SUBST(CURL_DISABLE_LDAPS, [1])
+ ;;
+ esac
+ fi
+fi
+
+if test x$CURL_DISABLE_LDAP != x1 ; then
+
+ if test "$LBERLIBNAME" ; then
+ dnl If name is "no" then don't define this library at all
+ dnl (it's only needed if libldap.so's dependencies are broken).
+ if test "$LBERLIBNAME" != "no" ; then
+ AC_CHECK_LIB("$LBERLIBNAME", ber_free,, [
+ AC_MSG_WARN(["$LBERLIBNAME" is not an LBER library: LDAP disabled])
+ AC_DEFINE(CURL_DISABLE_LDAP, 1, [to disable LDAP])
+ AC_SUBST(CURL_DISABLE_LDAP, [1])])
+ AC_DEFINE(CURL_DISABLE_LDAPS, 1, [to disable LDAPS])
+ AC_SUBST(CURL_DISABLE_LDAPS, [1])
+ fi
+ fi
+fi
+
+if test x$CURL_DISABLE_LDAP != x1 ; then
+ AC_CHECK_FUNCS([ldap_url_parse ldap_init_fd])
+
+ if test "$LDAPLIBNAME" = "wldap32"; then
+ curl_ldap_msg="enabled (winldap)"
+ AC_DEFINE(CURL_LDAP_WIN, 1, [Use Windows LDAP implementation])
+ else
+ curl_ldap_msg="enabled (OpenLDAP)"
+ if test "x$ac_cv_func_ldap_init_fd" = "xyes"; then
+ AC_DEFINE(USE_OPENLDAP, 1, [Use OpenLDAP-specific code])
+ AC_SUBST(USE_OPENLDAP, [1])
+ fi
+ fi
+fi
+
+if test x$CURL_DISABLE_LDAPS != x1 ; then
+ curl_ldaps_msg="enabled"
+fi
+
+dnl **********************************************************************
+dnl Checks for IPv6
+dnl **********************************************************************
+
+AC_MSG_CHECKING([whether to enable ipv6])
+AC_ARG_ENABLE(ipv6,
+AC_HELP_STRING([--enable-ipv6],[Enable ipv6 (with ipv4) support])
+AC_HELP_STRING([--disable-ipv6],[Disable ipv6 support]),
+[ case "$enableval" in
+ no)
+ AC_MSG_RESULT(no)
+ ipv6=no
+ ;;
+ *) AC_MSG_RESULT(yes)
+ ipv6=yes
+ ;;
+ esac ],
+
+ AC_TRY_RUN([ /* is AF_INET6 available? */
+#include <sys/types.h>
+#include <sys/socket.h>
+main()
+{
+ if (socket(AF_INET6, SOCK_STREAM, 0) < 0)
+ exit(1);
+ else
+ exit(0);
+}
+],
+ AC_MSG_RESULT(yes)
+ ipv6=yes,
+ AC_MSG_RESULT(no)
+ ipv6=no,
+ AC_MSG_RESULT(no)
+ ipv6=no
+))
+
+if test "$ipv6" = "yes"; then
+ curl_ipv6_msg="enabled"
+fi
+
+# Check if struct sockaddr_in6 have sin6_scope_id member
+if test "$ipv6" = yes; then
+ AC_MSG_CHECKING([if struct sockaddr_in6 has sin6_scope_id member])
+ AC_TRY_COMPILE([
+#include <sys/types.h>
+#include <netinet/in.h>] ,
+ struct sockaddr_in6 s; s.sin6_scope_id = 0; , have_sin6_scope_id=yes)
+ if test "$have_sin6_scope_id" = yes; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE(HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID, 1, [Define to 1 if struct sockaddr_in6 has the sin6_scope_id member])
+ else
+ AC_MSG_RESULT([no])
+ fi
+fi
+
+dnl **********************************************************************
+dnl Check if the operating system allows programs to write to their own argv[]
+dnl **********************************************************************
+
+AC_MSG_CHECKING([if argv can be written to])
+AC_CACHE_VAL(curl_cv_writable_argv, [
+AC_RUN_IFELSE([[
+int main(int argc, char ** argv) {
+ argv[0][0] = ' ';
+ return (argv[0][0] == ' ')?0:1;
+}
+ ]],
+ curl_cv_writable_argv=yes,
+ curl_cv_writable_argv=no,
+ curl_cv_writable_argv=cross)
+])
+case $curl_cv_writable_argv in
+yes)
+ AC_DEFINE(HAVE_WRITABLE_ARGV, 1, [Define this symbol if your OS supports changing the contents of argv])
+ AC_MSG_RESULT(yes)
+ ;;
+no)
+ AC_MSG_RESULT(no)
+ ;;
+*)
+ AC_MSG_RESULT(no)
+ AC_MSG_WARN([the previous check could not be made default was used])
+ ;;
+esac
+
+dnl **********************************************************************
+dnl Check for the presence of Kerberos4 libraries and headers
+dnl **********************************************************************
+
+AC_ARG_WITH(krb4-includes,
+AC_HELP_STRING([--with-krb4-includes=DIR],
+ [Specify location of kerberos4 headers]),[
+ CPPFLAGS="$CPPFLAGS -I$withval"
+ KRB4INC="$withval"
+ want_krb4=yes
+ ])
+
+AC_ARG_WITH(krb4-libs,
+AC_HELP_STRING([--with-krb4-libs=DIR],[Specify location of kerberos4 libs]),[
+ LDFLAGS="$LDFLAGS -L$withval"
+ KRB4LIB="$withval"
+ want_krb4=yes
+ ])
+
+
+OPT_KRB4=off
+AC_ARG_WITH(krb4,dnl
+AC_HELP_STRING([--with-krb4=DIR],[where to look for Kerberos4]),[
+ OPT_KRB4="$withval"
+ if test X"$OPT_KRB4" != Xno; then
+ want_krb4="yes"
+ if test X"$OPT_KRB4" != Xyes; then
+ LDFLAGS="$LDFLAGS -L$OPT_KRB4/lib$libsuff"
+ KRB4LIB="$OPT_KRB4/lib$libsuff"
+ CPPFLAGS="$CPPFLAGS -I$OPT_KRB4/include"
+ KRB4INC="$OPT_KRB4/include"
+ fi
+ fi
+ ])
+
+AC_MSG_CHECKING([if Kerberos4 support is requested])
+
+if test "$want_krb4" = yes
+then
+ if test "$ipv6" = "yes"; then
+ echo krb4 is not compatible with IPv6
+ exit 1
+ fi
+ AC_MSG_RESULT(yes)
+
+ dnl Check for & handle argument to --with-krb4
+
+ AC_MSG_CHECKING(where to look for Kerberos4)
+ if test X"$OPT_KRB4" = Xyes
+ then
+ AC_MSG_RESULT([defaults])
+ else
+ AC_MSG_RESULT([libs in $KRB4LIB, headers in $KRB4INC])
+ fi
+
+ dnl Check for DES library
+ AC_CHECK_LIB(des, des_pcbc_encrypt,
+ [
+ AC_CHECK_HEADERS(des.h)
+
+ dnl resolv lib?
+ AC_CHECK_FUNC(res_search, , [AC_CHECK_LIB(resolv, res_search)])
+
+ dnl Check for the Kerberos4 library
+ AC_CHECK_LIB(krb, krb_net_read,
+ [
+ dnl Check for header files
+ AC_CHECK_HEADERS(krb.h)
+
+ dnl we found the required libraries, add to LIBS
+ LIBS="-lkrb -lcom_err -ldes $LIBS"
+
+ dnl Check for function krb_get_our_ip_for_realm
+ dnl this is needed for NAT networks
+ AC_CHECK_FUNCS(krb_get_our_ip_for_realm)
+
+ dnl add define KRB4
+ AC_DEFINE(HAVE_KRB4, 1,
+ [if you have the Kerberos4 libraries (including -ldes)])
+
+ dnl substitute it too!
+ KRB4_ENABLED=1
+ AC_SUBST(KRB4_ENABLED)
+
+ curl_krb4_msg="enabled"
+
+ dnl the krb4 stuff needs a strlcpy()
+ AC_CHECK_FUNCS(strlcpy)
+
+ ])
+ ])
+else
+ AC_MSG_RESULT(no)
+fi
+
+dnl **********************************************************************
+dnl Check for FBopenssl(SPNEGO) libraries
+dnl **********************************************************************
+
+AC_ARG_WITH(spnego,
+ AC_HELP_STRING([--with-spnego=DIR],
+ [Specify location of SPNEGO library fbopenssl]), [
+ SPNEGO_ROOT="$withval"
+ if test x"$SPNEGO_ROOT" != xno; then
+ want_spnego="yes"
+ fi
+])
+
+AC_MSG_CHECKING([if SPNEGO support is requested])
+if test x"$want_spnego" = xyes; then
+
+ if test X"$SPNEGO_ROOT" = Xyes; then
+ AC_MSG_ERROR([FBOpenSSL libs and/or directories were not found where specified!])
+ AC_MSG_RESULT(no)
+ else
+ if test -z "$SPNEGO_LIB_DIR"; then
+ LDFLAGS="$LDFLAGS -L$SPNEGO_ROOT -lfbopenssl"
+ else
+ LDFLAGS="$LDFLAGS $SPNEGO_LIB_DIR"
+ fi
+
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_SPNEGO, 1,
+ [Define this if you have the SPNEGO library fbopenssl])
+ curl_spnego_msg="enabled"
+ fi
+else
+ AC_MSG_RESULT(no)
+fi
+
+dnl **********************************************************************
+dnl Check for GSS-API libraries
+dnl **********************************************************************
+
+dnl check for gss stuff in the /usr as default
+
+GSSAPI_ROOT="/usr"
+AC_ARG_WITH(gssapi-includes,
+ AC_HELP_STRING([--with-gssapi-includes=DIR],
+ [Specify location of GSSAPI header]),
+ [ GSSAPI_INCS="-I$withval"
+ want_gss="yes" ]
+)
+
+AC_ARG_WITH(gssapi-libs,
+ AC_HELP_STRING([--with-gssapi-libs=DIR],
+ [Specify location of GSSAPI libs]),
+ [ GSSAPI_LIB_DIR="-L$withval"
+ want_gss="yes" ]
+)
+
+AC_ARG_WITH(gssapi,
+ AC_HELP_STRING([--with-gssapi=DIR],
+ [Where to look for GSSAPI]), [
+ GSSAPI_ROOT="$withval"
+ if test x"$GSSAPI_ROOT" != xno; then
+ want_gss="yes"
+ if test x"$GSSAPI_ROOT" = xyes; then
+ dnl if yes, then use default root
+ GSSAPI_ROOT="/usr"
+ fi
+ fi
+])
+
+save_CPPFLAGS="$CPPFLAGS"
+AC_MSG_CHECKING([if GSSAPI support is requested])
+if test x"$want_gss" = xyes; then
+ AC_MSG_RESULT(yes)
+
+ if test -z "$GSSAPI_INCS"; then
+ if test -f "$GSSAPI_ROOT/bin/krb5-config"; then
+ GSSAPI_INCS=`$GSSAPI_ROOT/bin/krb5-config --cflags gssapi`
+ elif test "$GSSAPI_ROOT" != "yes"; then
+ GSSAPI_INCS="-I$GSSAPI_ROOT/include"
+ fi
+ fi
+
+ CPPFLAGS="$CPPFLAGS $GSSAPI_INCS"
+
+ AC_CHECK_HEADER(gss.h,
+ [
+ dnl found in the given dirs
+ AC_DEFINE(HAVE_GSSGNU, 1, [if you have the GNU gssapi libraries])
+ gnu_gss=yes
+ ],
+ [
+ dnl not found, check Heimdal or MIT
+ AC_CHECK_HEADERS([gssapi/gssapi.h], [], [not_mit=1])
+ AC_CHECK_HEADERS(
+ [gssapi/gssapi_generic.h gssapi/gssapi_krb5.h],
+ [],
+ [not_mit=1],
+ [
+AC_INCLUDES_DEFAULT
+#ifdef HAVE_GSSAPI_GSSAPI_H
+#include <gssapi/gssapi.h>
+#endif
+ ])
+ if test "x$not_mit" = "x1"; then
+ dnl MIT not found, check for Heimdal
+ AC_CHECK_HEADER(gssapi.h,
+ [
+ dnl found
+ AC_DEFINE(HAVE_GSSHEIMDAL, 1, [if you have the Heimdal gssapi libraries])
+ ],
+ [
+ dnl no header found, disabling GSS
+ want_gss=no
+ AC_MSG_WARN(disabling GSSAPI since no header files was found)
+ ]
+ )
+ else
+ dnl MIT found
+ AC_DEFINE(HAVE_GSSMIT, 1, [if you have the MIT gssapi libraries])
+ dnl check if we have a really old MIT kerberos (<= 1.2)
+ AC_MSG_CHECKING([if gssapi headers declare GSS_C_NT_HOSTBASED_SERVICE])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+#include <gssapi/gssapi.h>
+#include <gssapi/gssapi_generic.h>
+#include <gssapi/gssapi_krb5.h>
+ ]],[[
+ gss_import_name(
+ (OM_uint32 *)0,
+ (gss_buffer_t)0,
+ GSS_C_NT_HOSTBASED_SERVICE,
+ (gss_name_t *)0);
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ ],[
+ AC_MSG_RESULT([no])
+ AC_DEFINE(HAVE_OLD_GSSMIT, 1,
+ [if you have an old MIT gssapi library, lacking GSS_C_NT_HOSTBASED_SERVICE])
+ ])
+ fi
+ ]
+ )
+else
+ AC_MSG_RESULT(no)
+fi
+if test x"$want_gss" = xyes; then
+ AC_DEFINE(HAVE_GSSAPI, 1, [if you have the gssapi libraries])
+
+ curl_gss_msg="enabled (MIT/Heimdal)"
+
+ if test -n "$gnu_gss"; then
+ curl_gss_msg="enabled (GNU GSS)"
+ LDFLAGS="$LDFLAGS $GSSAPI_LIB_DIR"
+ LIBS="$LIBS -lgss"
+ elif test -z "$GSSAPI_LIB_DIR"; then
+ case $host in
+ *-*-darwin*)
+ LIBS="$LIBS -lgssapi_krb5 -lresolv"
+ ;;
+ *)
+ if test -f "$GSSAPI_ROOT/bin/krb5-config"; then
+ dnl krb5-config doesn't have --libs-only-L or similar, put everything
+ dnl into LIBS
+ gss_libs=`$GSSAPI_ROOT/bin/krb5-config --libs gssapi`
+ LIBS="$LIBS $gss_libs"
+ elif test "$GSSAPI_ROOT" != "yes"; then
+ LDFLAGS="$LDFLAGS -L$GSSAPI_ROOT/lib$libsuff"
+ LIBS="$LIBS -lgssapi"
+ else
+ LIBS="$LIBS -lgssapi"
+ fi
+ ;;
+ esac
+ else
+ LDFLAGS="$LDFLAGS $GSSAPI_LIB_DIR"
+ LIBS="$LIBS -lgssapi"
+ fi
+else
+ CPPFLAGS="$save_CPPFLAGS"
+fi
+
+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
+dnl Default to no CA bundle
+ca="no"
+AC_ARG_WITH(ssl,dnl
+AC_HELP_STRING([--with-ssl=PATH],[Where to look for OpenSSL, PATH points to the SSL installation (default: /usr/local/ssl); when possible, set the PKG_CONFIG_PATH environment variable instead of using this option])
+AC_HELP_STRING([--without-ssl], [disable OpenSSL]),
+ OPT_SSL=$withval)
+
+if test X"$OPT_SSL" != Xno; then
+ dnl backup the pre-ssl variables
+ CLEANLDFLAGS="$LDFLAGS"
+ CLEANCPPFLAGS="$CPPFLAGS"
+ CLEANLIBS="$LIBS"
+
+ case "$OPT_SSL" in
+ yes)
+ dnl --with-ssl (without path) used
+ if test x$cross_compiling != xyes; then
+ dnl only do pkg-config magic when not cross-compiling
+ PKGTEST="yes"
+ fi
+ PREFIX_OPENSSL=/usr/local/ssl
+ LIB_OPENSSL="$PREFIX_OPENSSL/lib$libsuff"
+ ;;
+ off)
+ dnl no --with-ssl option given, just check default places
+ if test x$cross_compiling != xyes; then
+ dnl only do pkg-config magic when not cross-compiling
+ PKGTEST="yes"
+ fi
+ PREFIX_OPENSSL=
+ ;;
+ *)
+ dnl check the given --with-ssl spot
+ PKGTEST="no"
+ PREFIX_OPENSSL=$OPT_SSL
+
+ dnl Try pkg-config even when cross-compiling. Since we
+ dnl specify PKG_CONFIG_LIBDIR we're only looking where
+ dnl the user told us to look
+ OPENSSL_PCDIR="$OPT_SSL/lib/pkgconfig"
+ AC_MSG_NOTICE([PKG_CONFIG_LIBDIR will be set to "$OPENSSL_PCDIR"])
+ if test -e "$OPENSSL_PCDIR/openssl.pc"; then
+ PKGTEST="yes"
+ fi
+
+ dnl in case pkg-config comes up empty, use what we got
+ dnl via --with-ssl
+ LIB_OPENSSL="$PREFIX_OPENSSL/lib$libsuff"
+ if test "$PREFIX_OPENSSL" != "/usr" ; then
+ SSL_LDFLAGS="-L$LIB_OPENSSL"
+ SSL_CPPFLAGS="-I$PREFIX_OPENSSL/include"
+ fi
+ SSL_CPPFLAGS="$SSL_CPPFLAGS -I$PREFIX_OPENSSL/include/openssl"
+ ;;
+ esac
+
+ if test "$PKGTEST" = "yes"; then
+
+ CURL_CHECK_PKGCONFIG(openssl, [$OPENSSL_PCDIR])
+
+ if test "$PKGCONFIG" != "no" ; then
+ SSL_LIBS=`CURL_EXPORT_PCDIR([$OPENSSL_PCDIR]) dnl
+ $PKGCONFIG --libs-only-l openssl 2>/dev/null`
+
+ SSL_LDFLAGS=`CURL_EXPORT_PCDIR([$OPENSSL_PCDIR]) dnl
+ $PKGCONFIG --libs-only-L openssl 2>/dev/null`
+
+ SSL_CPPFLAGS=`CURL_EXPORT_PCDIR([$OPENSSL_PCDIR]) dnl
+ $PKGCONFIG --cflags-only-I openssl 2>/dev/null`
+
+ AC_MSG_NOTICE([pkg-config: SSL_LIBS: "$SSL_LIBS"])
+ AC_MSG_NOTICE([pkg-config: SSL_LDFLAGS: "$SSL_LDFLAGS"])
+ AC_MSG_NOTICE([pkg-config: SSL_CPPFLAGS: "$SSL_CPPFLAGS"])
+
+ LIB_OPENSSL=`echo $SSL_LDFLAGS | sed -e 's/-L//g'`
+
+ dnl use the values pkg-config reported. This is here
+ dnl instead of below with CPPFLAGS and LDFLAGS because we only
+ dnl learn about this via pkg-config. If we only have
+ dnl the argument to --with-ssl we don't know what
+ dnl additional libs may be necessary. Hope that we
+ dnl don't need any.
+ LIBS="$LIBS $SSL_LIBS"
+ fi
+ fi
+
+ dnl finally, set flags to use SSL
+ CPPFLAGS="$CPPFLAGS $SSL_CPPFLAGS"
+ LDFLAGS="$LDFLAGS $SSL_LDFLAGS"
+
+ dnl This is for Msys/Mingw
+ case $host in
+ *-*-msys* | *-*-mingw*)
+ AC_MSG_CHECKING([for gdi32])
+ my_ac_save_LIBS=$LIBS
+ LIBS="-lgdi32 $LIBS"
+ AC_TRY_LINK([#include <windef.h>
+ #include <wingdi.h>],
+ [GdiFlush();],
+ [ dnl worked!
+ AC_MSG_RESULT([yes])],
+ [ dnl failed, restore LIBS
+ LIBS=$my_ac_save_LIBS
+ AC_MSG_RESULT(no)]
+ )
+ ;;
+ esac
+
+ AC_CHECK_LIB(crypto, CRYPTO_lock,[
+ HAVECRYPTO="yes"
+ LIBS="-lcrypto $LIBS"
+ ],[
+ LDFLAGS="$CLEANLDFLAGS -L$LIB_OPENSSL"
+ CPPFLAGS="$CLEANCPPFLAGS -I$PREFIX_OPENSSL/include/openssl -I$PREFIX_OPENSSL/include"
+ AC_CHECK_LIB(crypto, CRYPTO_add_lock,[
+ HAVECRYPTO="yes"
+ LIBS="-lcrypto $LIBS"], [
+ LDFLAGS="$CLEANLDFLAGS"
+ CPPFLAGS="$CLEANCPPFLAGS"
+ LIBS="$CLEANLIBS"
+ ])
+ ])
+
+
+ if test X"$HAVECRYPTO" = X"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)
+
+ if test "$ac_cv_lib_ssl_SSL_connect" != yes; then
+ dnl we didn't find the SSL lib, try the RSAglue/rsaref stuff
+ AC_MSG_CHECKING(for ssl with RSAglue/rsaref libs in use);
+ OLIBS=$LIBS
+ LIBS="$LIBS -lRSAglue -lrsaref"
+ AC_CHECK_LIB(ssl, SSL_connect)
+ if test "$ac_cv_lib_ssl_SSL_connect" != yes; then
+ dnl still no SSL_connect
+ AC_MSG_RESULT(no)
+ LIBS=$OLIBS
+ else
+ AC_MSG_RESULT(yes)
+ fi
+
+ else
+
+ dnl Have the libraries--check for SSLeay/OpenSSL headers
+ AC_CHECK_HEADERS(openssl/x509.h openssl/rsa.h openssl/crypto.h \
+ openssl/pem.h openssl/ssl.h openssl/err.h,
+ curl_ssl_msg="enabled (OpenSSL)"
+ OPENSSL_ENABLED=1
+ AC_DEFINE(USE_OPENSSL, 1, [if OpenSSL is in use]))
+
+ if test $ac_cv_header_openssl_x509_h = no; then
+ dnl we don't use the "action" part of the AC_CHECK_HEADERS macro
+ dnl since 'err.h' might in fact find a krb4 header with the same
+ dnl name
+ AC_CHECK_HEADERS(x509.h rsa.h crypto.h pem.h ssl.h err.h)
+
+ if test $ac_cv_header_x509_h = yes &&
+ test $ac_cv_header_crypto_h = yes &&
+ test $ac_cv_header_ssl_h = yes; then
+ dnl three matches
+ curl_ssl_msg="enabled (OpenSSL)"
+ OPENSSL_ENABLED=1
+ fi
+ fi
+ fi
+
+ if test X"$OPENSSL_ENABLED" = X"1"; then
+ AC_DEFINE(USE_SSLEAY, 1, [if SSL is enabled])
+
+ dnl is there a pkcs12.h header present?
+ AC_CHECK_HEADERS(openssl/pkcs12.h)
+ else
+ LIBS="$CLEANLIBS"
+ fi
+ dnl USE_SSLEAY is the historical name for what configure calls
+ dnl OPENSSL_ENABLED; the names should really be unified
+ USE_SSLEAY="$OPENSSL_ENABLED"
+ AC_SUBST(USE_SSLEAY)
+
+ if test X"$OPT_SSL" != Xoff &&
+ test "$OPENSSL_ENABLED" != "1"; then
+ AC_MSG_ERROR([OpenSSL libs and/or directories were not found where specified!])
+ fi
+ fi
+
+ if test X"$OPENSSL_ENABLED" = X"1"; then
+ dnl If the ENGINE library seems to be around, check for the OpenSSL engine
+ dnl stuff, it is kind of "separated" from the main SSL check
+ AC_CHECK_FUNC(ENGINE_init,
+ [
+ AC_CHECK_HEADERS(openssl/engine.h)
+ AC_CHECK_FUNCS( ENGINE_load_builtin_engines )
+ ])
+
+ dnl these can only exist if openssl exists
+ dnl yassl doesn't have SSL_get_shutdown
+
+ AC_CHECK_FUNCS( RAND_status \
+ RAND_screen \
+ RAND_egd \
+ ENGINE_cleanup \
+ CRYPTO_cleanup_all_ex_data \
+ SSL_get_shutdown )
+
+ dnl Make an attempt to detect if this is actually yassl's headers and
+ dnl OpenSSL emulation layer. We still leave everything else believing
+ dnl and acting like OpenSSL.
+
+ AC_MSG_CHECKING([for yaSSL using OpenSSL compatibility mode])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+#include <openssl/ssl.h>
+ ]],[[
+#if defined(YASSL_VERSION) && defined(OPENSSL_VERSION_NUMBER)
+ int dummy = SSL_ERROR_NONE;
+#else
+ Not the yaSSL OpenSSL compatibility header.
+#endif
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ AC_DEFINE_UNQUOTED(USE_YASSLEMUL, 1,
+ [Define to 1 if using yaSSL in OpenSSL compatibility mode.])
+ curl_ssl_msg="enabled (OpenSSL emulation by yaSSL)"
+ ],[
+ AC_MSG_RESULT([no])
+ ])
+ fi
+
+ if test "$OPENSSL_ENABLED" = "1"; then
+ if test -n "$LIB_OPENSSL"; then
+ dnl when the ssl shared libs were found in a path that the run-time
+ dnl linker doesn't search through, we need to add it to LD_LIBRARY_PATH
+ dnl to prevent further configure tests to fail due to this
+
+ LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$LIB_OPENSSL"
+ export LD_LIBRARY_PATH
+ AC_MSG_NOTICE([Added $LIB_OPENSSL to LD_LIBRARY_PATH])
+ fi
+ fi
+
+fi
+
+dnl **********************************************************************
+dnl Check for the presence of ZLIB libraries and headers
+dnl **********************************************************************
+
+dnl Check for & handle argument to --with-zlib.
+
+_cppflags=$CPPFLAGS
+_ldflags=$LDFLAGS
+AC_ARG_WITH(zlib,
+AC_HELP_STRING([--with-zlib=PATH],[search for zlib in PATH])
+AC_HELP_STRING([--without-zlib],[disable use of zlib]),
+ [OPT_ZLIB="$withval"])
+
+if test "$OPT_ZLIB" = "no" ; then
+ AC_MSG_WARN([zlib disabled])
+else
+ if test "$OPT_ZLIB" = "yes" ; then
+ OPT_ZLIB=""
+ fi
+
+ if test -z "$OPT_ZLIB" ; then
+ dnl check for the lib first without setting any new path, since many
+ dnl people have it in the default path
+
+ AC_CHECK_LIB(z, inflateEnd,
+ dnl libz found, set the variable
+ [HAVE_LIBZ="1"],
+ dnl if no lib found, try /usr/local
+ [OPT_ZLIB="/usr/local"])
+
+ fi
+
+ dnl Add a nonempty path to the compiler flags
+ if test -n "$OPT_ZLIB"; then
+ CPPFLAGS="$CPPFLAGS -I$OPT_ZLIB/include"
+ LDFLAGS="$LDFLAGS -L$OPT_ZLIB/lib$libsuff"
+ fi
+
+ AC_CHECK_HEADER(zlib.h,
+ [
+ dnl zlib.h was found
+ HAVE_ZLIB_H="1"
+ dnl if the lib wasn't found already, try again with the new paths
+ if test "$HAVE_LIBZ" != "1"; then
+ AC_CHECK_LIB(z, gzread,
+ [
+ dnl the lib was found!
+ HAVE_LIBZ="1"
+ ],
+ [ CPPFLAGS=$_cppflags
+ LDFLAGS=$_ldflags])
+ fi
+ ],
+ [
+ dnl zlib.h was not found, restore the flags
+ CPPFLAGS=$_cppflags
+ LDFLAGS=$_ldflags]
+ )
+
+ if test "$HAVE_LIBZ" = "1" && test "$HAVE_ZLIB_H" != "1"
+ then
+ AC_MSG_WARN([configure found only the libz lib, not the header file!])
+ HAVE_LIBZ=""
+ elif test "$HAVE_LIBZ" != "1" && test "$HAVE_ZLIB_H" = "1"
+ then
+ AC_MSG_WARN([configure found only the libz header file, not the lib!])
+ elif test "$HAVE_LIBZ" = "1" && test "$HAVE_ZLIB_H" = "1"
+ then
+ dnl both header and lib were found!
+ AC_SUBST(HAVE_LIBZ)
+ AC_DEFINE(HAVE_ZLIB_H, 1, [if you have the zlib.h header file])
+ AC_DEFINE(HAVE_LIBZ, 1, [if zlib is available])
+
+ CURL_LIBS="$CURL_LIBS -lz"
+ LIBS="$LIBS -lz"
+
+ dnl replace 'HAVE_LIBZ' in the automake makefile.ams
+ AMFIXLIB="1"
+ AC_MSG_NOTICE([found both libz and libz.h header])
+ curl_zlib_msg="enabled"
+ fi
+fi
+
+dnl set variable for use in automakefile(s)
+AM_CONDITIONAL(HAVE_LIBZ, test x"$AMFIXLIB" = x1)
+
+dnl **********************************************************************
+dnl Check for the random seed preferences
+dnl **********************************************************************
+
+if test X"$OPENSSL_ENABLED" = X"1"; then
+ AC_ARG_WITH(egd-socket,
+ AC_HELP_STRING([--with-egd-socket=FILE],
+ [Entropy Gathering Daemon socket pathname]),
+ [ EGD_SOCKET="$withval" ]
+ )
+ if test -n "$EGD_SOCKET" ; then
+ AC_DEFINE_UNQUOTED(EGD_SOCKET, "$EGD_SOCKET",
+ [your Entropy Gathering Daemon socket pathname] )
+ fi
+
+ dnl Check for user-specified random device
+ AC_ARG_WITH(random,
+ AC_HELP_STRING([--with-random=FILE],
+ [read randomness from FILE (default=/dev/urandom)]),
+ [ RANDOM_FILE="$withval" ],
+ [
+ dnl Check for random device
+ AC_CHECK_FILE("/dev/urandom", [ RANDOM_FILE="/dev/urandom"] )
+ ]
+ )
+ if test -n "$RANDOM_FILE" && test X"$RANDOM_FILE" != Xno ; then
+ AC_SUBST(RANDOM_FILE)
+ AC_DEFINE_UNQUOTED(RANDOM_FILE, "$RANDOM_FILE",
+ [a suitable file to read random data from])
+ fi
+fi
+
+dnl ----------------------------------------------------
+dnl check for GnuTLS
+dnl ----------------------------------------------------
+
+dnl Default to compiler & linker defaults for GnuTLS files & libraries.
+OPT_GNUTLS=no
+
+AC_ARG_WITH(gnutls,dnl
+AC_HELP_STRING([--with-gnutls=PATH],[where to look for GnuTLS, PATH points to the installation root (default: /usr/local/)])
+AC_HELP_STRING([--without-gnutls], [disable GnuTLS detection]),
+ OPT_GNUTLS=$withval)
+
+if test "$OPENSSL_ENABLED" != "1"; then
+
+ if test X"$OPT_GNUTLS" != Xno; then
+
+ addld=""
+ if test "x$OPT_GNUTLS" = "xyes"; then
+ dnl this is with no partiular path given
+ CURL_CHECK_PKGCONFIG(gnutls)
+
+ if test "$PKGCONFIG" != "no" ; then
+ addlib=`$PKGCONFIG --libs-only-l gnutls`
+ addld=`$PKGCONFIG --libs-only-L gnutls`
+ addcflags=`$PKGCONFIG --cflags-only-I gnutls`
+ version=`$PKGCONFIG --modversion gnutls`
+ gtlslib=`echo $addld | $SED -e 's/-L//'`
+ else
+ dnl without pkg-config, we try libgnutls-config as that was how it
+ dnl used to be done
+ check=`libgnutls-config --version 2>/dev/null`
+ if test -n "$check"; then
+ addlib=`libgnutls-config --libs`
+ addcflags=`libgnutls-config --cflags`
+ version=`libgnutls-config --version`
+ gtlslib=`libgnutls-config --prefix`/lib$libsuff
+ fi
+ fi
+ else
+ dnl this is with a given path, first check if there's a libgnutls-config
+ dnl there and if not, make an educated guess
+ cfg=$OPT_GNUTLS/bin/libgnutls-config
+ check=`$cfg --version 2>/dev/null`
+ if test -n "$check"; then
+ addlib=`$cfg --libs`
+ addcflags=`$cfg --cflags`
+ version=`$cfg --version`
+ gtlslib=`$cfg --prefix`/lib$libsuff
+ else
+ dnl without pkg-config and libgnutls-config, we guess a lot!
+ addlib=-lgnutls
+ addld=-L$OPT_GNUTLS/lib$libsuff
+ addcflags=-I$OPT_GNUTLS/include
+ version="" # we just don't know
+ gtlslib=$OPT_GNUTLS/lib$libsuff
+ fi
+ fi
+
+ if test -z "$version"; then
+ dnl lots of efforts, still no go
+ version="unknown"
+ fi
+
+ if test -n "$addlib"; then
+
+ CLEANLIBS="$LIBS"
+ CLEANCPPFLAGS="$CPPFLAGS"
+ CLEADLDFLAGS="$LDFLAGS"
+
+ LIBS="$LIBS $addlib"
+ LDFLAGS="$LDFLAGS $addld"
+ if test "$addcflags" != "-I/usr/include"; then
+ CPPFLAGS="$CPPFLAGS $addcflags"
+ fi
+
+ AC_CHECK_LIB(gnutls, gnutls_check_version,
+ [
+ AC_DEFINE(USE_GNUTLS, 1, [if GnuTLS is enabled])
+ AC_SUBST(USE_GNUTLS, [1])
+ GNUTLS_ENABLED=1
+ USE_GNUTLS="yes"
+ curl_ssl_msg="enabled (GnuTLS)"
+ ],
+ [
+ LIBS="$CLEANLIBS"
+ CPPFLAGS="$CLEANCPPFLAGS"
+ ])
+
+ if test "x$USE_GNUTLS" = "xyes"; then
+ AC_MSG_NOTICE([detected GnuTLS version $version])
+
+ if test -n "$gtlslib"; then
+ dnl when shared libs were found in a path that the run-time
+ dnl linker doesn't search through, we need to add it to
+ dnl LD_LIBRARY_PATH to prevent further configure tests to fail
+ dnl due to this
+
+ LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$gtlslib"
+ export LD_LIBRARY_PATH
+ AC_MSG_NOTICE([Added $gtlslib to LD_LIBRARY_PATH])
+ fi
+ fi
+
+ fi
+
+ fi dnl GNUTLS not disabled
+
+fi dnl OPENSSL != 1
+
+dnl ---
+dnl If GnuTLS is enabled, we MUST verify that it uses libgcrypt since
+dnl curl code relies on that but recent GnuTLS versions can in fact build
+dnl with different crypto libraries which curl right now cannot handle
+dnl ---
+
+if test "$GNUTLS_ENABLED" = "1"; then
+ AC_CHECK_LIB(gcrypt,
+ gcry_control, ,
+ [
+ AC_MSG_ERROR([need GnuTLS built with gcrypt to function with GnuTLS])
+ ])
+fi
+
+dnl ----------------------------------------------------
+dnl check for PolarSSL
+dnl ----------------------------------------------------
+
+dnl Default to compiler & linker defaults for PolarSSL files & libraries.
+OPT_POLARSSL=no
+
+_cppflags=$CPPFLAGS
+_ldflags=$LDFLAGS
+AC_ARG_WITH(polarssl,dnl
+AC_HELP_STRING([--with-polarssl=PATH],[where to look for PolarSSL, PATH points to the installation root (default: /usr/local/)])
+AC_HELP_STRING([--without-polarssl], [disable PolarSSL detection]),
+ OPT_POLARSSL=$withval)
+
+if test "$OPENSSL_ENABLED" != "1"; then
+
+ if test X"$OPT_POLARSSL" != Xno; then
+
+ if test "$OPT_POLARSSL" = "yes"; then
+ OPT_POLARSSL=""
+ fi
+
+ if test -z "$OPT_POLARSSL" ; then
+ dnl check for lib first without setting any new path
+
+ AC_CHECK_LIB(polarssl, havege_init,
+ dnl libpolarssl found, set the variable
+ [
+ AC_DEFINE(USE_POLARSSL, 1, [if PolarSSL is enabled])
+ AC_SUBST(USE_POLARSSL, [1])
+ POLARSSL_ENABLED=1
+ USE_POLARSSL="yes"
+ curl_ssl_msg="enabled (PolarSSL)"
+ ])
+ fi
+
+ if test "x$USE_POLARSSL" != "xyes"; then
+ dnl add the path and test again
+ addld=-L$OPT_POLARSSL/lib$libsuff
+ addcflags=-I$OPT_POLARSSL/include
+ polarssllib=$OPT_POLARSSL/lib$libsuff
+
+ LDFLAGS="$LDFLAGS $addld"
+ if test "$addcflags" != "-I/usr/include"; then
+ CPPFLAGS="$CPPFLAGS $addcflags"
+ fi
+
+ AC_CHECK_LIB(polarssl, ssl_init,
+ [
+ AC_DEFINE(USE_POLARSSL, 1, [if PolarSSL is enabled])
+ AC_SUBST(USE_POLARSSL, [1])
+ POLARSSL_ENABLED=1
+ USE_POLARSSL="yes"
+ curl_ssl_msg="enabled (PolarSSL)"
+ ],
+ [
+ CPPFLAGS=$_cppflags
+ LDFLAGS=$_ldflags
+ ])
+ fi
+
+ if test "x$USE_POLARSSL" = "xyes"; then
+ AC_MSG_NOTICE([detected PolarSSL])
+
+ CURL_LIBS="$CURL_LIBS -lpolarssl"
+ LIBS="$LIBS -lpolarssl"
+
+ if test -n "$polarssllib"; then
+ dnl when shared libs were found in a path that the run-time
+ dnl linker doesn't search through, we need to add it to
+ dnl LD_LIBRARY_PATH to prevent further configure tests to fail
+ dnl due to this
+
+ LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$polarssllib"
+ export LD_LIBRARY_PATH
+ AC_MSG_NOTICE([Added $polarssllib to LD_LIBRARY_PATH])
+ fi
+
+ fi
+
+ fi dnl PolarSSL not disabled
+
+fi dnl OPENSSL != 1
+
+dnl ----------------------------------------------------
+dnl NSS. Only check if GnuTLS and OpenSSL are not enabled
+dnl ----------------------------------------------------
+
+dnl Default to compiler & linker defaults for NSS files & libraries.
+OPT_NSS=no
+
+AC_ARG_WITH(nss,dnl
+AC_HELP_STRING([--with-nss=PATH],[where to look for NSS, PATH points to the installation root (default: /usr/local/)])
+AC_HELP_STRING([--without-nss], [disable NSS detection]),
+ OPT_NSS=$withval)
+
+if test "$OPENSSL_ENABLED" != "1" -a "$GNUTLS_ENABLED" != "1"; then
+
+ if test X"$OPT_NSS" != Xno; then
+ if test "x$OPT_NSS" = "xyes"; then
+
+ CURL_CHECK_PKGCONFIG(nss)
+
+ if test "$PKGCONFIG" != "no" ; then
+ addlib=`$PKGCONFIG --libs nss`
+ addcflags=`$PKGCONFIG --cflags nss`
+ version=`$PKGCONFIG --modversion nss`
+ nssprefix=`$PKGCONFIG --variable=prefix nss`
+ else
+ dnl Without pkg-config, we check for nss-config
+
+ check=`nss-config --version 2>/dev/null`
+ if test -n "$check"; then
+ addlib=`nss-config --libs`
+ addcflags=`nss-config --cflags`
+ version=`nss-config --version`
+ nssprefix=`nss-config --prefix`
+ else
+ addlib="-lnss3"
+ addcflags=""
+ version="unknown"
+ fi
+ fi
+ else
+ # Without pkg-config, we'll kludge in some defaults
+ addlib="-L$OPT_NSS/lib -lssl3 -lsmime3 -lnss3 -lplds4 -lplc4 -lnspr4 -lpthread -ldl"
+ addcflags="-I$OPT_NSS/include"
+ version="unknown"
+ nssprefix=$OPT_NSS
+ fi
+
+ dnl Check for functionPK11_CreateGenericObject
+ dnl this is needed for using the PEM PKCS#11 module
+ AC_CHECK_LIB(nss3, PK11_CreateGenericObject,
+ [
+ AC_DEFINE(HAVE_PK11_CREATEGENERICOBJECT, 1, [if you have the function PK11_CreateGenericObject])
+ AC_SUBST(HAVE_PK11_CREATEGENERICOBJECT, [1])
+ ])
+ if test -n "$addlib"; then
+
+ CLEANLIBS="$LIBS"
+ CLEANCPPFLAGS="$CPPFLAGS"
+
+ LIBS="$LIBS $addlib"
+ if test "$addcflags" != "-I/usr/include"; then
+ CPPFLAGS="$CPPFLAGS $addcflags"
+ fi
+
+ AC_CHECK_LIB(nss3, NSS_Initialize,
+ [
+ AC_DEFINE(USE_NSS, 1, [if NSS is enabled])
+ AC_SUBST(USE_NSS, [1])
+ USE_NSS="yes"
+ NSS_ENABLED=1
+ curl_ssl_msg="enabled (NSS)"
+ ],
+ [
+ LIBS="$CLEANLIBS"
+ CPPFLAGS="$CLEANCPPFLAGS"
+ ])
+
+ if test "x$USE_NSS" = "xyes"; then
+ AC_MSG_NOTICE([detected NSS version $version])
+
+ dnl when shared libs were found in a path that the run-time
+ dnl linker doesn't search through, we need to add it to
+ dnl LD_LIBRARY_PATH to prevent further configure tests to fail
+ dnl due to this
+
+ LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$nssprefix/lib$libsuff"
+ export LD_LIBRARY_PATH
+ AC_MSG_NOTICE([Added $nssprefix/lib$libsuff to LD_LIBRARY_PATH])
+ fi
+
+ fi
+
+ fi dnl NSS not disabled
+
+fi dnl OPENSSL != 1 -a GNUTLS_ENABLED != 1
+
+if test "x$OPENSSL_ENABLED$GNUTLS_ENABLED$NSS_ENABLED$POLARSSL_ENABLED" = "x"; then
+ AC_MSG_WARN([SSL disabled, you will not be able to use HTTPS, FTPS, NTLM and more.])
+ AC_MSG_WARN([Use --with-ssl, --with-gnutls, --with-polarssl or --with-nss to address this.])
+else
+ # SSL is enabled, genericly
+ AC_SUBST(SSL_ENABLED)
+ SSL_ENABLED="1"
+fi
+
+dnl **********************************************************************
+dnl Check for the CA bundle
+dnl **********************************************************************
+
+CURL_CHECK_CA_BUNDLE
+
+dnl **********************************************************************
+dnl Check for the presence of LIBSSH2 libraries and headers
+dnl **********************************************************************
+
+dnl Default to compiler & linker defaults for LIBSSH2 files & libraries.
+OPT_LIBSSH2=off
+AC_ARG_WITH(libssh2,dnl
+AC_HELP_STRING([--with-libssh2=PATH],[Where to look for libssh2, PATH points to the LIBSSH2 installation (default: /usr/local/lib); when possible, set the PKG_CONFIG_PATH environment variable instead of using this option])
+AC_HELP_STRING([--without-libssh2], [disable LIBSSH2]),
+ OPT_LIBSSH2=$withval)
+
+if test X"$OPT_LIBSSH2" != Xno; then
+ dnl backup the pre-libssh2 variables
+ CLEANLDFLAGS="$LDFLAGS"
+ CLEANCPPFLAGS="$CPPFLAGS"
+ CLEANLIBS="$LIBS"
+
+ case "$OPT_LIBSSH2" in
+ yes)
+ dnl --with-libssh2 (without path) used
+ CURL_CHECK_PKGCONFIG(libssh2)
+
+ if test "$PKGCONFIG" != "no" ; then
+ LIB_SSH2=`$PKGCONFIG --libs-only-l libssh2`
+ LD_SSH2=`$PKGCONFIG --libs-only-L libssh2`
+ CPP_SSH2=`$PKGCONFIG --cflags-only-I libssh2`
+ version=`$PKGCONFIG --modversion libssh2`
+ DIR_SSH2=`echo $LD_SSH2 | $SED -e 's/-L//'`
+ fi
+
+ ;;
+ off)
+ dnl no --with-libssh2 option given, just check default places
+ ;;
+ *)
+ dnl use the given --with-libssh2 spot
+ PREFIX_SSH2=$OPT_LIBSSH2
+ ;;
+ esac
+
+ dnl if given with a prefix, we set -L and -I based on that
+ if test -n "$PREFIX_SSH2"; then
+ LD_SSH2=-L${PREFIX_SSH2}/lib$libsuff
+ CPP_SSH2=-I${PREFIX_SSH2}/include
+ DIR_SSH2=${PREFIX_SSH2}/lib$libsuff
+ fi
+
+ LDFLAGS="$LDFLAGS $LD_SSH2"
+ CPPFLAGS="$CPPFLAGS $CPP_SSH2"
+ LIBS="$LIBS $LIB_SSH2"
+
+ AC_CHECK_LIB(ssh2, libssh2_channel_open_ex)
+
+ AC_CHECK_HEADERS(libssh2.h,
+ curl_ssh_msg="enabled (libSSH2)"
+ LIBSSH2_ENABLED=1
+ AC_DEFINE(USE_LIBSSH2, 1, [if libSSH2 is in use])
+ AC_SUBST(USE_LIBSSH2, [1])
+ )
+
+ if test X"$OPT_LIBSSH2" != Xoff &&
+ test "$LIBSSH2_ENABLED" != "1"; then
+ AC_MSG_ERROR([libSSH2 libs and/or directories were not found where specified!])
+ fi
+
+ if test "$LIBSSH2_ENABLED" = "1"; then
+ if test -n "$DIR_SSH2"; then
+ dnl when the libssh2 shared libs were found in a path that the run-time
+ dnl linker doesn't search through, we need to add it to LD_LIBRARY_PATH
+ dnl to prevent further configure tests to fail due to this
+
+ dnl libssh2_version is a post 1.0 addition
+ dnl libssh2_init and libssh2_exit were added in 1.2.5
+ dnl libssh2_scp_send64 was added in 1.2.6
+ AC_CHECK_FUNCS( libssh2_version libssh2_init libssh2_exit \
+ libssh2_scp_send64 )
+
+ LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$DIR_SSH2"
+ export LD_LIBRARY_PATH
+ AC_MSG_NOTICE([Added $DIR_SSH2 to LD_LIBRARY_PATH])
+ fi
+ else
+ dnl no libssh2, revert back to clean variables
+ LDFLAGS=$CLEANLDFLAGS
+ CPPFLAGS=$CLEANCPPFLAGS
+ LIBS=$CLEANLIBS
+ fi
+fi
+
+dnl **********************************************************************
+dnl Check for the presence of LIBRTMP libraries and headers
+dnl **********************************************************************
+
+dnl Default to compiler & linker defaults for LIBRTMP files & libraries.
+OPT_LIBRTMP=off
+AC_ARG_WITH(librtmp,dnl
+AC_HELP_STRING([--with-librtmp=PATH],[Where to look for librtmp, PATH points to the LIBRTMP installation (default: /usr/local/lib); when possible, set the PKG_CONFIG_PATH environment variable instead of using this option])
+AC_HELP_STRING([--without-librtmp], [disable LIBRTMP]),
+ OPT_LIBRTMP=$withval)
+
+if test X"$OPT_LIBRTMP" != Xno; then
+ dnl backup the pre-librtmp variables
+ CLEANLDFLAGS="$LDFLAGS"
+ CLEANCPPFLAGS="$CPPFLAGS"
+ CLEANLIBS="$LIBS"
+
+ case "$OPT_LIBRTMP" in
+ yes)
+ dnl --with-librtmp (without path) used
+ CURL_CHECK_PKGCONFIG(librtmp)
+
+ if test "$PKGCONFIG" != "no" ; then
+ LIB_RTMP=`$PKGCONFIG --libs-only-l librtmp`
+ LD_RTMP=`$PKGCONFIG --libs-only-L librtmp`
+ CPP_RTMP=`$PKGCONFIG --cflags-only-I librtmp`
+ version=`$PKGCONFIG --modversion librtmp`
+ DIR_RTMP=`echo $LD_RTMP | $SED -e 's/-L//'`
+ fi
+
+ ;;
+ off)
+ dnl no --with-librtmp option given, just check default places
+ LIB_RTMP="-lrtmp"
+ ;;
+ *)
+ dnl use the given --with-librtmp spot
+ PREFIX_RTMP=$OPT_LIBRTMP
+ ;;
+ esac
+
+ dnl if given with a prefix, we set -L and -I based on that
+ if test -n "$PREFIX_RTMP"; then
+ LD_RTMP=-L${PREFIX_RTMP}/lib$libsuff
+ CPP_RTMP=-I${PREFIX_RTMP}/include
+ DIR_RTMP=${PREFIX_RTMP}/lib$libsuff
+ fi
+
+ LDFLAGS="$LDFLAGS $LD_RTMP"
+ CPPFLAGS="$CPPFLAGS $CPP_RTMP"
+ LIBS="$LIBS $LIB_RTMP"
+
+ AC_CHECK_LIB(rtmp, RTMP_Init,
+ [
+ AC_CHECK_HEADERS(librtmp/rtmp.h,
+ curl_rtmp_msg="enabled (librtmp)"
+ LIBRTMP_ENABLED=1
+ AC_DEFINE(USE_LIBRTMP, 1, [if librtmp is in use])
+ AC_SUBST(USE_LIBRTMP, [1])
+ )
+ ],
+ dnl not found, revert back to clean variables
+ LDFLAGS=$CLEANLDFLAGS
+ CPPFLAGS=$CLEANCPPFLAGS
+ LIBS=$CLEANLIBS
+ )
+
+ if test X"$OPT_LIBRTMP" != Xoff &&
+ test "$LIBRTMP_ENABLED" != "1"; then
+ AC_MSG_ERROR([librtmp libs and/or directories were not found where specified!])
+ fi
+
+fi
+
+dnl **********************************************************************
+dnl Check for the presence of IDN libraries and headers
+dnl **********************************************************************
+
+AC_MSG_CHECKING([whether to build with libidn])
+AC_ARG_WITH(libidn,
+AC_HELP_STRING([--with-libidn=PATH],[Enable libidn usage])
+AC_HELP_STRING([--without-libidn],[Disable libidn usage]),
+ [LIBIDN="$withval"])
+
+case "$LIBIDN" in
+ no)
+ AC_MSG_RESULT(no)
+ ;;
+ *) AC_MSG_RESULT(yes)
+
+ idn=""
+ dnl if there is a given path, check that FIRST
+ if test -n "$LIBIDN"; then
+ if test "x$LIBIDN" != "xyes"; then
+ oldLDFLAGS=$LDFLAGS
+ oldCPPFLAGS=$CPPFLAGS
+ LDFLAGS="$LDFLAGS -L$LIBIDN/lib"
+ CPPFLAGS="$CPPFLAGS -I$LIBIDN/include"
+ idn="yes"
+ AC_CHECK_LIB(idn, idna_to_ascii_4i, ,
+ idn=""
+ LDFLAGS=$oldLDFLAGS
+ CPPFLAGS=$oldCPPFLAGS)
+ fi
+ fi
+
+ if test "x$idn" != "xyes"; then
+ dnl check with default paths
+ idn="yes"
+ AC_CHECK_LIB(idn, idna_to_ascii_lz, ,
+ idn="")
+ fi
+
+ if test "x$idn" = "xyes"; then
+ curl_idn_msg="enabled"
+ AC_SUBST(IDN_ENABLED, [1])
+ dnl different versions of libidn have different setups of these:
+ AC_CHECK_FUNCS( idn_free idna_strerror tld_strerror)
+ AC_CHECK_HEADERS( idn-free.h tld.h )
+ fi
+
+ ;;
+esac
+
+
+dnl Let's hope this split URL remains working:
+dnl http://publibn.boulder.ibm.com/doc_link/en_US/a_doc_lib/aixprggd/ \
+dnl genprogc/thread_quick_ref.htm
+
+
+dnl **********************************************************************
+dnl Back to "normal" configuring
+dnl **********************************************************************
+
+dnl Checks for header files.
+AC_HEADER_STDC
+
+CURL_CHECK_HEADER_MALLOC
+CURL_CHECK_HEADER_MEMORY
+
+dnl Now check for the very most basic headers. Then we can use these
+dnl ones as default-headers when checking for the rest!
+AC_CHECK_HEADERS(
+ sys/types.h \
+ sys/time.h \
+ sys/select.h \
+ sys/socket.h \
+ sys/ioctl.h \
+ sys/uio.h \
+ assert.h \
+ unistd.h \
+ stdlib.h \
+ limits.h \
+ arpa/inet.h \
+ net/if.h \
+ netinet/in.h \
+ sys/un.h \
+ netinet/tcp.h \
+ netdb.h \
+ sys/sockio.h \
+ sys/stat.h \
+ sys/param.h \
+ termios.h \
+ termio.h \
+ sgtty.h \
+ fcntl.h \
+ alloca.h \
+ time.h \
+ io.h \
+ pwd.h \
+ utime.h \
+ sys/utime.h \
+ sys/poll.h \
+ poll.h \
+ socket.h \
+ sys/resource.h \
+ libgen.h \
+ locale.h \
+ errno.h \
+ stdbool.h \
+ arpa/tftp.h \
+ sys/filio.h \
+ setjmp.h,
+dnl to do if not found
+[],
+dnl to do if found
+[],
+dnl default includes
+[
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h>
+#endif
+#ifdef HAVE_SYS_SELECT_H
+#include <sys/select.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#ifdef HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+#ifdef HAVE_SYS_UN_H
+#include <sys/un.h>
+#endif
+]
+)
+
+dnl Checks for typedefs, structures, and compiler characteristics.
+AC_C_CONST
+CURL_CHECK_VARIADIC_MACROS
+AC_TYPE_SIZE_T
+AC_HEADER_TIME
+CURL_CHECK_STRUCT_TIMEVAL
+CURL_VERIFY_RUNTIMELIBS
+
+AC_CHECK_SIZEOF(size_t)
+AC_CHECK_SIZEOF(long)
+AC_CHECK_SIZEOF(int)
+AC_CHECK_SIZEOF(short)
+CURL_CONFIGURE_LONG
+AC_CHECK_SIZEOF(time_t)
+AC_CHECK_SIZEOF(off_t)
+
+soname_bump=no
+if test x"$ac_cv_native_windows" != "xyes" &&
+ test $ac_cv_sizeof_off_t -ne $curl_sizeof_curl_off_t; then
+ AC_MSG_WARN([This libcurl built is probably not ABI compatible with previous])
+ AC_MSG_WARN([builds! You MUST read lib/README.curl_off_t to figure it out.])
+ soname_bump=yes
+fi
+
+
+AC_CHECK_TYPE(long long,
+ [AC_DEFINE(HAVE_LONGLONG, 1,
+ [Define to 1 if the compiler supports the 'long long' data type.])]
+ longlong="yes"
+)
+
+if test "xyes" = "x$longlong"; then
+ AC_MSG_CHECKING([if numberLL works])
+ AC_COMPILE_IFELSE([long long val = 1000LL;],
+ [AC_DEFINE(HAVE_LL, 1, [if your compiler supports LL])]
+ AC_MSG_RESULT(yes),
+ AC_MSG_RESULT(no)
+ )
+fi
+
+
+# check for ssize_t
+AC_CHECK_TYPE(ssize_t, ,
+ AC_DEFINE(ssize_t, int, [the signed version of size_t]))
+
+# check for bool type
+AC_CHECK_TYPE([bool],[
+ AC_DEFINE(HAVE_BOOL_T, 1,
+ [Define to 1 if bool is an available type.])
+], ,[
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_STDBOOL_H
+#include <stdbool.h>
+#endif
+])
+
+CURL_CONFIGURE_CURL_SOCKLEN_T
+
+TYPE_IN_ADDR_T
+
+TYPE_SOCKADDR_STORAGE
+
+TYPE_SIG_ATOMIC_T
+
+AC_TYPE_SIGNAL
+
+CURL_CHECK_FUNC_SELECT
+
+CURL_CHECK_FUNC_RECV
+CURL_CHECK_FUNC_RECVFROM
+CURL_CHECK_FUNC_SEND
+CURL_CHECK_MSG_NOSIGNAL
+
+CURL_CHECK_FUNC_ALARM
+CURL_CHECK_FUNC_BASENAME
+CURL_CHECK_FUNC_CLOSESOCKET
+CURL_CHECK_FUNC_CLOSESOCKET_CAMEL
+CURL_CHECK_FUNC_CONNECT
+CURL_CHECK_FUNC_FCNTL
+CURL_CHECK_FUNC_FDOPEN
+CURL_CHECK_FUNC_FREEADDRINFO
+CURL_CHECK_FUNC_FREEIFADDRS
+CURL_CHECK_FUNC_FTRUNCATE
+CURL_CHECK_FUNC_GETADDRINFO
+CURL_CHECK_FUNC_GETHOSTBYADDR
+CURL_CHECK_FUNC_GETHOSTBYADDR_R
+CURL_CHECK_FUNC_GETHOSTBYNAME
+CURL_CHECK_FUNC_GETHOSTBYNAME_R
+CURL_CHECK_FUNC_GETHOSTNAME
+CURL_CHECK_FUNC_GETIFADDRS
+CURL_CHECK_FUNC_GETSERVBYPORT_R
+CURL_CHECK_FUNC_GMTIME_R
+CURL_CHECK_FUNC_INET_NTOA_R
+CURL_CHECK_FUNC_INET_NTOP
+CURL_CHECK_FUNC_INET_PTON
+CURL_CHECK_FUNC_IOCTL
+CURL_CHECK_FUNC_IOCTLSOCKET
+CURL_CHECK_FUNC_IOCTLSOCKET_CAMEL
+CURL_CHECK_FUNC_LOCALTIME_R
+CURL_CHECK_FUNC_MEMRCHR
+CURL_CHECK_FUNC_POLL
+CURL_CHECK_FUNC_SETSOCKOPT
+CURL_CHECK_FUNC_SIGACTION
+CURL_CHECK_FUNC_SIGINTERRUPT
+CURL_CHECK_FUNC_SIGNAL
+CURL_CHECK_FUNC_SIGSETJMP
+CURL_CHECK_FUNC_SOCKET
+CURL_CHECK_FUNC_STRCASECMP
+CURL_CHECK_FUNC_STRCASESTR
+CURL_CHECK_FUNC_STRCMPI
+CURL_CHECK_FUNC_STRDUP
+CURL_CHECK_FUNC_STRERROR_R
+CURL_CHECK_FUNC_STRICMP
+CURL_CHECK_FUNC_STRLCAT
+CURL_CHECK_FUNC_STRNCASECMP
+CURL_CHECK_FUNC_STRNCMPI
+CURL_CHECK_FUNC_STRNICMP
+CURL_CHECK_FUNC_STRSTR
+CURL_CHECK_FUNC_STRTOK_R
+CURL_CHECK_FUNC_STRTOLL
+CURL_CHECK_FUNC_WRITEV
+
+dnl Checks for library functions.
+dnl AC_PROG_GCC_TRADITIONAL
+
+dnl AC_FUNC_VPRINTF
+case $host in
+ *msdosdjgpp)
+ ac_cv_func_pipe=no
+ skipcheck_pipe=yes
+ AC_MSG_NOTICE([skip check for pipe on msdosdjgpp])
+ ;;
+esac
+
+AC_CHECK_FUNCS([fork \
+ geteuid \
+ getpass_r \
+ getppid \
+ getprotobyname \
+ getpwuid \
+ getrlimit \
+ gettimeofday \
+ inet_addr \
+ perror \
+ pipe \
+ setlocale \
+ setmode \
+ setrlimit \
+ uname \
+ utime
+],[
+],[
+ func="$ac_func"
+ eval skipcheck=\$skipcheck_$func
+ if test "x$skipcheck" != "xyes"; then
+ AC_MSG_CHECKING([deeper for $func])
+ AC_LINK_IFELSE([
+ AC_LANG_PROGRAM([[
+ ]],[[
+ $func ();
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ eval "ac_cv_func_$func=yes"
+ AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_$func]), [1],
+ [Define to 1 if you have the $func function.])
+ ],[
+ AC_MSG_RESULT([but still no])
+ ])
+ fi
+])
+
+dnl Check if the getnameinfo function is available
+dnl and get the types of five of its arguments.
+CURL_CHECK_FUNC_GETNAMEINFO
+
+if test "$ipv6" = "yes"; then
+ if test "$ac_cv_func_getaddrinfo" = "yes"; then
+ AC_DEFINE(ENABLE_IPV6, 1, [Define if you want to enable IPv6 support])
+ IPV6_ENABLED=1
+ AC_SUBST(IPV6_ENABLED)
+ fi
+ CURL_CHECK_NI_WITHSCOPEID
+fi
+
+dnl ************************************************************
+dnl enable non-blocking communications
+dnl
+CURL_CHECK_OPTION_NONBLOCKING
+CURL_CHECK_NONBLOCKING_SOCKET
+
+dnl ************************************************************
+dnl nroff tool stuff
+dnl
+
+AC_PATH_PROG( PERL, perl, ,
+ $PATH:/usr/local/bin/perl:/usr/bin/:/usr/local/bin )
+AC_SUBST(PERL)
+
+AC_PATH_PROGS( NROFF, gnroff nroff, ,
+ $PATH:/usr/bin/:/usr/local/bin )
+AC_SUBST(NROFF)
+
+if test -n "$NROFF"; then
+ dnl only check for nroff options if an nroff command was found
+
+ AC_MSG_CHECKING([how to use *nroff to get plain text from man pages])
+ MANOPT="-man"
+ mancheck=`echo foo | $NROFF $MANOPT 2>/dev/null`
+ if test -z "$mancheck"; then
+ MANOPT="-mandoc"
+ mancheck=`echo foo | $NROFF $MANOPT 2>/dev/null`
+ if test -z "$mancheck"; then
+ MANOPT=""
+ AC_MSG_RESULT([failed])
+ AC_MSG_WARN([found no *nroff option to get plaintext from man pages])
+ else
+ AC_MSG_RESULT([$MANOPT])
+ fi
+ else
+ AC_MSG_RESULT([$MANOPT])
+ fi
+ AC_SUBST(MANOPT)
+fi
+
+if test -z "$MANOPT"
+then
+ dnl if no nroff tool was found, or no option that could convert man pages
+ dnl was found, then disable the built-in manual stuff
+ AC_MSG_WARN([disabling built-in manual])
+ USE_MANUAL="no";
+fi
+
+dnl *************************************************************************
+dnl If the manual variable still is set, then we go with providing a built-in
+dnl manual
+
+if test "$USE_MANUAL" = "1"; then
+ AC_DEFINE(USE_MANUAL, 1, [If you want to build curl with the built-in manual])
+ curl_manual_msg="enabled"
+fi
+
+dnl set variable for use in automakefile(s)
+AM_CONDITIONAL(USE_MANUAL, test x"$USE_MANUAL" = x1)
+
+CURL_CHECK_LIB_ARES
+AM_CONDITIONAL(USE_EMBEDDED_ARES, test x$embedded_ares = xyes)
+
+if test "x$enable_shared" = "xyes"; then
+ build_libhostname=yes
+else
+ build_libhostname=no
+fi
+AM_CONDITIONAL(BUILD_LIBHOSTNAME, test x$build_libhostname = xyes)
+
+CURL_CHECK_OPTION_THREADED_RESOLVER
+
+if test "x$want_thres" = xyes && test "x$want_ares" = xyes; then
+ AC_MSG_ERROR(
+[Options --enable-threaded-resolver and --enable-ares are mutually exclusive])
+fi
+
+if test "$want_thres" = "yes"; then
+ AC_CHECK_HEADER(pthread.h,
+ [ AC_DEFINE(HAVE_PTHREAD_H, 1, [if you have <pthread.h>])
+ save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -pthread"
+ AC_CHECK_LIB(pthread, pthread_create,
+ [ AC_MSG_NOTICE([using POSIX threaded DNS lookup])
+ AC_DEFINE(USE_THREADS_POSIX, 1, [if you want POSIX threaded DNS lookup])
+ USE_THREADS_POSIX=1
+ curl_res_msg="threaded"
+ ],
+ [ CFLAGS="$save_CFLAGS"])
+ ])
+fi
+
+dnl ************************************************************
+dnl disable verbose text strings
+dnl
+AC_MSG_CHECKING([whether to enable verbose strings])
+AC_ARG_ENABLE(verbose,
+AC_HELP_STRING([--enable-verbose],[Enable verbose strings])
+AC_HELP_STRING([--disable-verbose],[Disable verbose strings]),
+[ case "$enableval" in
+ no)
+ AC_MSG_RESULT(no)
+ AC_DEFINE(CURL_DISABLE_VERBOSE_STRINGS, 1, [to disable verbose strings])
+ curl_verbose_msg="no"
+ ;;
+ *) AC_MSG_RESULT(yes)
+ ;;
+ esac ],
+ AC_MSG_RESULT(yes)
+)
+
+dnl ************************************************************
+dnl enable SSPI support
+dnl
+AC_MSG_CHECKING([whether to enable SSPI support (Windows native builds only)])
+AC_ARG_ENABLE(sspi,
+AC_HELP_STRING([--enable-sspi],[Enable SSPI])
+AC_HELP_STRING([--disable-sspi],[Disable SSPI]),
+[ case "$enableval" in
+ yes)
+ if test "$ac_cv_native_windows" = "yes"; then
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(USE_WINDOWS_SSPI, 1, [to enable SSPI support])
+ AC_SUBST(USE_WINDOWS_SSPI, [1])
+ curl_sspi_msg="enabled"
+ else
+ AC_MSG_RESULT(no)
+ AC_MSG_WARN([--enable-sspi Ignored. Only supported on native Windows builds.])
+ fi
+ ;;
+ *)
+ AC_MSG_RESULT(no)
+ ;;
+ esac ],
+ AC_MSG_RESULT(no)
+)
+
+dnl ************************************************************
+dnl disable cryptographic authentication
+dnl
+AC_MSG_CHECKING([whether to enable cryptographic authentication methods])
+AC_ARG_ENABLE(crypto-auth,
+AC_HELP_STRING([--enable-crypto-auth],[Enable cryptographic authentication])
+AC_HELP_STRING([--disable-crypto-auth],[Disable cryptographic authentication]),
+[ case "$enableval" in
+ no)
+ AC_MSG_RESULT(no)
+ AC_DEFINE(CURL_DISABLE_CRYPTO_AUTH, 1, [to disable cryptographic authentication])
+ ;;
+ *) AC_MSG_RESULT(yes)
+ ;;
+ esac ],
+ AC_MSG_RESULT(yes)
+)
+
+dnl ************************************************************
+dnl disable cookies support
+dnl
+AC_MSG_CHECKING([whether to enable support for cookies])
+AC_ARG_ENABLE(cookies,
+AC_HELP_STRING([--enable-cookies],[Enable cookies support])
+AC_HELP_STRING([--disable-cookies],[Disable cookies support]),
+[ case "$enableval" in
+ no)
+ AC_MSG_RESULT(no)
+ AC_DEFINE(CURL_DISABLE_COOKIES, 1, [to disable cookies support])
+ ;;
+ *) AC_MSG_RESULT(yes)
+ ;;
+ esac ],
+ AC_MSG_RESULT(yes)
+)
+
+dnl ************************************************************
+dnl Enable hiding of internal symbols in library to reduce its size and
+dnl speed dynamic linking of applications. This currently is only supported
+dnl on gcc >= 4.0 and SunPro C.
+dnl
+AC_MSG_CHECKING([whether to enable hidden symbols in the library])
+AC_ARG_ENABLE(hidden-symbols,
+AC_HELP_STRING([--enable-hidden-symbols],[Hide internal symbols in library])
+AC_HELP_STRING([--disable-hidden-symbols],[Leave all symbols with default visibility in library]),
+[ case "$enableval" in
+ no)
+ AC_MSG_RESULT(no)
+ ;;
+ *)
+ AC_MSG_CHECKING([whether $CC supports it])
+ if test "$GCC" = yes ; then
+ if $CC --help --verbose 2>&1 | grep fvisibility= > /dev/null ||
+ dnl clang always supports -fvisibility= but it doesn't show up
+ dnl under --help.
+ test "$compiler_id" = "CLANG"; then
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(CURL_HIDDEN_SYMBOLS, 1, [to enable hidden symbols])
+ AC_DEFINE(CURL_EXTERN_SYMBOL, [__attribute__ ((visibility ("default")))], [to make a symbol visible])
+ CFLAGS="$CFLAGS -fvisibility=hidden"
+ else
+ AC_MSG_RESULT(no)
+ fi
+
+ else
+ dnl Test for SunPro cc
+ if $CC 2>&1 | grep flags >/dev/null && $CC -flags | grep xldscope= >/dev/null ; then
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(CURL_HIDDEN_SYMBOLS, 1, [to enable hidden symbols])
+ AC_DEFINE(CURL_EXTERN_SYMBOL, [__global], [to make a symbol visible])
+ CFLAGS="$CFLAGS -xldscope=hidden"
+ else
+ AC_MSG_RESULT(no)
+ fi
+ fi
+ ;;
+ esac ],
+ AC_MSG_RESULT(no)
+)
+
+dnl ************************************************************
+dnl enforce SONAME bump
+dnl
+
+AC_MSG_CHECKING([whether to enforce SONAME bump])
+AC_ARG_ENABLE(soname-bump,
+AC_HELP_STRING([--enable-soname-bump],[Enable enforced SONAME bump])
+AC_HELP_STRING([--disable-soname-bump],[Disable enforced SONAME bump]),
+[ case "$enableval" in
+ yes) AC_MSG_RESULT(yes)
+ soname_bump=yes
+ ;;
+ *)
+ AC_MSG_RESULT(no)
+ ;;
+ esac ],
+ AC_MSG_RESULT($soname_bump)
+)
+AM_CONDITIONAL(SONAME_BUMP, test x$soname_bump = xyes)
+
+
+dnl ************************************************************
+if test ! -z "$winsock_LIB"; then
+
+ dnl If ws2_32 is wanted, make sure it is the _last_ lib in LIBS (makes
+ dnl things work when built with c-ares). But we can't just move it last
+ dnl since then other stuff (SSL) won't build. So we simply append it to the
+ dnl end.
+
+ LIBS="$LIBS $winsock_LIB"
+ TEST_SERVER_LIBS="$TEST_SERVER_LIBS $winsock_LIB"
+
+fi
+
+dnl
+dnl All the library dependencies put into $LIB apply to libcurl only.
+dnl Those in $CURL_LIBS apply to the curl command-line client only.
+dnl Those in $TEST_SERVER_LIBS apply to test servers only.
+dnl Those in $ALL_LIBS apply to all targets, including test targets.
+dnl
+LIBCURL_LIBS=$LIBS
+
+AC_SUBST(LIBCURL_LIBS)
+AC_SUBST(CURL_LIBS)
+AC_SUBST(TEST_SERVER_LIBS)
+AC_SUBST(CURL_NETWORK_LIBS)
+LIBS=$ALL_LIBS dnl LIBS is a magic variable that's used for every link
+
+AM_CONDITIONAL(CROSSCOMPILING, test x$cross_compiling = xyes)
+
+dnl yes or no
+ENABLE_SHARED="$enable_shared"
+AC_SUBST(ENABLE_SHARED)
+
+dnl
+dnl For keeping supported features and protocols also in pkg-config file
+dnl since it is more cross-compile frient than curl-config
+dnl
+
+if test "x$USE_SSLEAY" = "x1"; then
+ SUPPORT_FEATURES="$SUPPORT_FEATURES SSL"
+elif test -n "$SSL_ENABLED"; then
+ SUPPORT_FEATURES="$SUPPORT_FEATURES SSL"
+fi
+if test "@KRB4_ENABLED@" = "x1"; then
+ SUPPORT_FEATURES="$SUPPORT_FEATURES KRB4"
+fi
+if test "x$IPV6_ENABLED" = "x1"; then
+ SUPPORT_FEATURES="$SUPPORT_FEATURES IPv6"
+fi
+if test "x$HAVE_LIBZ" = "x1"; then
+ SUPPORT_FEATURES="$SUPPORT_FEATURES libz"
+fi
+if test "x$USE_ARES" = "x1" -o "x$USE_THREADS_POSIX" = "x1"; then
+ SUPPORT_FEATURES="$SUPPORT_FEATURES AsynchDNS"
+fi
+if test "x$IDN_ENABLED" = "x1"; then
+ SUPPORT_FEATURES="$SUPPORT_FEATURES IDN"
+fi
+if test "x$USE_WINDOWS_SSPI" = "x1"; then
+ SUPPORT_FEATURES="$SUPPORT_FEATURES SSPI"
+fi
+if test "x$USE_SSLEAY" = "x1" -o "x$USE_WINDOWS_SSPI" = "x1" \
+ -o "x$GNUTLS_ENABLED" = "x1" -o "x$NSS_ENABLED" = "x1"; then
+ SUPPORT_FEATURES="$SUPPORT_FEATURES NTLM"
+fi
+
+AC_SUBST(SUPPORT_FEATURES)
+
+dnl For supported protocols in pkg-config file
+if test "x$CURL_DISABLE_HTTP" != "x1"; then
+ SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS HTTP"
+ if test "x$SSL_ENABLED" = "x1"; then
+ SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS HTTPS"
+ fi
+fi
+if test "x$CURL_DISABLE_FTP" != "x1"; then
+ SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS FTP"
+ if test "x$SSL_ENABLED" = "x1"; then
+ SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS FTPS"
+ fi
+fi
+if test "x$CURL_DISABLE_FILE" != "x1"; then
+ SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS FILE"
+fi
+if test "x$CURL_DISABLE_TELNET" != "x1"; then
+ SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS TELNET"
+fi
+if test "x$CURL_DISABLE_LDAP" != "x1"; then
+ SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS LDAP"
+ if test "x$CURL_DISABLE_LDAPS" != "x1"; then
+ if (test "x$USE_OPENLDAP" = "x1" && test "x$SSL_ENABLED" = "x1") ||
+ (test "x$USE_OPENLDAP" != "x1" && test "x$HAVE_LDAP_SSL" = "x1"); then
+ SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS LDAPS"
+ fi
+ fi
+fi
+if test "x$CURL_DISABLE_DICT" != "x1"; then
+ SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS DICT"
+fi
+if test "x$CURL_DISABLE_TFTP" != "x1"; then
+ SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS TFTP"
+fi
+if test "x$CURL_DISABLE_GOPHER" != "x1"; then
+ SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS GOPHER"
+fi
+if test "x$CURL_DISABLE_POP3" != "x1"; then
+ SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS POP3"
+ if test "x$SSL_ENABLED" = "x1"; then
+ SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS POP3S"
+ fi
+fi
+if test "x$CURL_DISABLE_IMAP" != "x1"; then
+ SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS IMAP"
+ if test "x$SSL_ENABLED" = "x1"; then
+ SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS IMAPS"
+ fi
+fi
+if test "x$CURL_DISABLE_SMTP" != "x1"; then
+ SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS SMTP"
+ if test "x$SSL_ENABLED" = "x1"; then
+ SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS SMTPS"
+ fi
+fi
+if test "x$USE_LIBSSH2" = "x1"; then
+ SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS SCP"
+ SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS SFTP"
+fi
+if test "x$CURL_DISABLE_RTSP" != "x1"; then
+ SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS RTSP"
+fi
+if test "x$USE_LIBRTMP" = "x1"; then
+ SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS RTMP"
+fi
+
+dnl replace spaces with newlines
+dnl sort the lines
+dnl replace the newlines back to spaces
+SUPPORT_PROTOCOLS=`echo $SUPPORT_PROTOCOLS | tr ' ' '\012' | sort | tr '\012' ' '`
+
+AC_SUBST(SUPPORT_PROTOCOLS)
+
+dnl squeeze whitespace out of some variables
+
+squeeze CFLAGS
+squeeze CPPFLAGS
+squeeze DEFS
+squeeze LDFLAGS
+squeeze LIBS
+
+squeeze CURL_LIBS
+squeeze LIBCURL_LIBS
+squeeze TEST_SERVER_LIBS
+squeeze CURL_NETWORK_LIBS
+
+squeeze SUPPORT_FEATURES
+squeeze SUPPORT_PROTOCOLS
+
+if test "x$want_curldebug_assumed" = "xyes" &&
+ test "x$want_curldebug" = "xyes" && test "x$USE_ARES" = "x1"; then
+ ac_configure_args="$ac_configure_args --enable-curldebug"
+fi
+
+AC_CONFIG_FILES([Makefile \
+ docs/Makefile \
+ docs/examples/Makefile \
+ docs/libcurl/Makefile \
+ include/Makefile \
+ include/curl/Makefile \
+ src/Makefile \
+ lib/Makefile \
+ tests/Makefile \
+ tests/data/Makefile \
+ tests/server/Makefile \
+ tests/libtest/Makefile \
+ packages/Makefile \
+ packages/Win32/Makefile \
+ packages/Win32/cygwin/Makefile \
+ packages/Linux/Makefile \
+ packages/Linux/RPM/Makefile \
+ packages/Linux/RPM/curl.spec \
+ packages/Linux/RPM/curl-ssl.spec \
+ packages/Solaris/Makefile \
+ packages/EPM/curl.list \
+ packages/EPM/Makefile \
+ packages/vms/Makefile \
+ packages/AIX/Makefile \
+ packages/AIX/RPM/Makefile \
+ packages/AIX/RPM/curl.spec \
+ curl-config \
+ libcurl.pc
+])
+AC_OUTPUT
+
+AC_MSG_NOTICE([Configured to build curl/libcurl:
+
+ curl version: ${VERSION}
+ Host setup: ${host}
+ Install prefix: ${prefix}
+ Compiler: ${CC}
+ SSL support: ${curl_ssl_msg}
+ SSH support: ${curl_ssh_msg}
+ zlib support: ${curl_zlib_msg}
+ krb4 support: ${curl_krb4_msg}
+ GSSAPI support: ${curl_gss_msg}
+ SPNEGO support: ${curl_spnego_msg}
+ resolver: ${curl_res_msg}
+ ipv6 support: ${curl_ipv6_msg}
+ IDN support: ${curl_idn_msg}
+ Build libcurl: Shared=${enable_shared}, Static=${enable_static}
+ Built-in manual: ${curl_manual_msg}
+ Verbose errors: ${curl_verbose_msg}
+ SSPI support: ${curl_sspi_msg}
+ ca cert bundle: ${ca}
+ ca cert path: ${capath}
+ LDAP support: ${curl_ldap_msg}
+ LDAPS support: ${curl_ldaps_msg}
+ RTSP support: ${curl_rtsp_msg}
+ RTMP support: ${curl_rtmp_msg}
+ Protocols: ${SUPPORT_PROTOCOLS}
+])
+
+if test "x$soname_bump" = "xyes"; then
+
+cat <<EOM
+ SONAME bump: yes - WARNING: this library will be built with the SONAME
+ number bumped due to (a detected) ABI breakage.
+ See lib/README.curl_off_t for details on this.
+EOM
+
+fi
+
diff --git a/curl-config.in b/curl-config.in
new file mode 100644
index 0000000..27b9f7f
--- /dev/null
+++ b/curl-config.in
@@ -0,0 +1,167 @@
+#! /bin/sh
+#***************************************************************************
+# _ _ ____ _
+# Project ___| | | | _ \| |
+# / __| | | | |_) | |
+# | (__| |_| | _ <| |___
+# \___|\___/|_| \_\_____|
+#
+# Copyright (C) 2001 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+#
+# This software is licensed as described in the file COPYING, which
+# you should have received as part of this distribution. The terms
+# are also available at http://curl.haxx.se/docs/copyright.html.
+#
+# You may opt to use, copy, modify, merge, publish, distribute and/or sell
+# copies of the Software, and permit persons to whom the Software is
+# furnished to do so, under the terms of the COPYING file.
+#
+# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+# KIND, either express or implied.
+#
+###########################################################################
+
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+includedir=@includedir@
+
+usage()
+{
+ cat <<EOF
+Usage: curl-config [OPTION]
+
+Available values for OPTION include:
+
+ --built-shared says 'yes' if libcurl was built shared
+ --ca ca bundle install path
+ --cc compiler
+ --cflags pre-processor and compiler flags
+ --checkfor [version] check for (lib)curl of the specified version
+ --configure the arguments given to configure when building curl
+ --features newline separated list of enabled features
+ --help display this help and exit
+ --libs library linking information
+ --prefix curl install prefix
+ --protocols newline separated list of enabled protocols
+ --static-libs static libcurl library linking information
+ --version output version information
+ --vernum output the version information as a number (hexadecimal)
+EOF
+
+ exit $1
+}
+
+if test $# -eq 0; then
+ usage 1
+fi
+
+while test $# -gt 0; do
+ case "$1" in
+ # this deals with options in the style
+ # --option=value and extracts the value part
+ # [not currently used]
+ -*=*) value=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
+ *) value= ;;
+ esac
+
+ case "$1" in
+ --built-shared)
+ echo @ENABLE_SHARED@
+ ;;
+
+ --ca)
+ echo "@CURL_CA_BUNDLE@"
+ ;;
+
+ --cc)
+ echo "@CC@"
+ ;;
+
+ --prefix)
+ echo "$prefix"
+ ;;
+
+ --feature|--features)
+ for feature in @SUPPORT_FEATURES@ ""; do
+ test -n "$feature" && echo "$feature"
+ done
+ ;;
+
+ --protocols)
+ for protocol in @SUPPORT_PROTOCOLS@; do
+ echo "$protocol"
+ done
+ ;;
+
+ --version)
+ echo libcurl @VERSION@
+ exit 0
+ ;;
+
+ --checkfor)
+ checkfor=$2
+ cmajor=`echo $checkfor | cut -d. -f1`
+ cminor=`echo $checkfor | cut -d. -f2`
+ # when extracting the patch part we strip off everything after a
+ # dash as that's used for things like version 1.2.3-CVS
+ cpatch=`echo $checkfor | cut -d. -f3 | cut -d- -f1`
+ checknum=`echo "$cmajor*256*256 + $cminor*256 + ${cpatch:-0}" | bc`
+ numuppercase=`echo @VERSIONNUM@ | tr 'a-f' 'A-F'`
+ nownum=`echo "obase=10; ibase=16; $numuppercase" | bc`
+
+ if test "$nownum" -ge "$checknum"; then
+ # silent success
+ exit 0
+ else
+ echo "requested version $checkfor is newer than existing @VERSION@"
+ exit 1
+ fi
+ ;;
+
+ --vernum)
+ echo @VERSIONNUM@
+ exit 0
+ ;;
+
+ --help)
+ usage 0
+ ;;
+
+ --cflags)
+ if test "X@includedir@" = "X/usr/include"; then
+ echo ""
+ else
+ echo "-I@includedir@"
+ fi
+ ;;
+
+ --libs)
+ if test "X@libdir@" != "X/usr/lib" -a "X@libdir@" != "X/usr/lib64"; then
+ CURLLIBDIR="-L@libdir@ "
+ else
+ CURLLIBDIR=""
+ fi
+ if test "X@REQUIRE_LIB_DEPS@" = "Xyes"; then
+ echo ${CURLLIBDIR}-lcurl @LDFLAGS@ @LIBCURL_LIBS@ @LIBS@
+ else
+ echo ${CURLLIBDIR}-lcurl @LDFLAGS@ @LIBS@
+ fi
+ ;;
+
+ --static-libs)
+ echo @libdir@/libcurl.@libext@ @LDFLAGS@ @LIBCURL_LIBS@ @LIBS@
+ ;;
+
+ --configure)
+ echo @CONFIGURE_OPTIONS@
+ ;;
+
+ *)
+ echo "unknown option: $1"
+ usage 1
+ ;;
+ esac
+ shift
+done
+
+exit 0
diff --git a/curl-style.el b/curl-style.el
new file mode 100644
index 0000000..83cf8cc
--- /dev/null
+++ b/curl-style.el
@@ -0,0 +1,50 @@
+;;;; Emacs Lisp help for writing curl code. ;;;;
+
+;;; The curl hacker's C conventions.
+;;; See the sample.emacs file on how this file can be made to take
+;;; effect automatically when editing curl source files.
+
+(defconst curl-c-style
+ '((c-basic-offset . 2)
+ (c-comment-only-line-offset . 0)
+ (c-hanging-braces-alist . ((substatement-open before after)))
+ (c-offsets-alist . ((topmost-intro . 0)
+ (topmost-intro-cont . 0)
+ (substatement . +)
+ (substatement-open . 0)
+ (statement-case-intro . +)
+ (statement-case-open . 0)
+ (case-label . 0)
+ ))
+ )
+ "Curl C Programming Style")
+
+(defun curl-code-cleanup ()
+ "no docs"
+ (interactive)
+ (untabify (point-min) (point-max))
+ (delete-trailing-whitespace)
+)
+
+;; Customizations for all of c-mode, c++-mode, and objc-mode
+(defun curl-c-mode-common-hook ()
+ "Curl C mode hook"
+ ;; add curl style and set it for the current buffer
+ (c-add-style "curl" curl-c-style t)
+ (setq tab-width 8
+ indent-tabs-mode nil ; Use spaces. Not tabs.
+ comment-column 40
+ c-font-lock-extra-types (append '("bool" "CURL" "CURLcode" "ssize_t" "size_t" "curl_socklen_t" "fd_set" "time_t" "curl_off_t" "curl_socket_t" "in_addr_t" "CURLSHcode" "CURLMcode" "Curl_addrinfo"))
+ )
+ ;; keybindings for C, C++, and Objective-C. We can put these in
+ ;; c-mode-base-map because of inheritance ...
+ (define-key c-mode-base-map "\M-q" 'c-fill-paragraph)
+ (define-key c-mode-base-map "\M-m" 'curl-code-cleanup)
+ (setq c-recognize-knr-p nil)
+ ;;; (add-hook 'write-file-hooks 'delete-trailing-whitespace t)
+ (setq show-trailing-whitespace t)
+ )
+
+;; Set this is in your .emacs if you want to use the c-mode-hook as
+;; defined here right out of the box.
+; (add-hook 'c-mode-common-hook 'curl-c-mode-common-hook)
diff --git a/curl.sln b/curl.sln
new file mode 100755
index 0000000..81580c3
--- /dev/null
+++ b/curl.sln
@@ -0,0 +1,35 @@
+Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "curlsrc", "src\curlsrc.vcproj", "{01F90008-9A5F-42AD-9ADB-1E2EADE41CFD}"
+ ProjectSection(ProjectDependencies) = postProject
+ {F6829817-CDBC-4BBE-B629-3BD21F4A797D} = {F6829817-CDBC-4BBE-B629-3BD21F4A797D}
+ {D2A464CD-AF25-4EC5-AA38-384766A7D817} = {D2A464CD-AF25-4EC5-AA38-384766A7D817}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libcurl", "lib\libcurl.vcproj", "{F6829817-CDBC-4BBE-B629-3BD21F4A797D}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlib", "..\zlib-1.2.3\projects\vs2008\zlibstatic.vcproj", "{D2A464CD-AF25-4EC5-AA38-384766A7D817}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {01F90008-9A5F-42AD-9ADB-1E2EADE41CFD}.Debug|Win32.ActiveCfg = Debug|Win32
+ {01F90008-9A5F-42AD-9ADB-1E2EADE41CFD}.Debug|Win32.Build.0 = Debug|Win32
+ {01F90008-9A5F-42AD-9ADB-1E2EADE41CFD}.Release|Win32.ActiveCfg = Release|Win32
+ {01F90008-9A5F-42AD-9ADB-1E2EADE41CFD}.Release|Win32.Build.0 = Release|Win32
+ {F6829817-CDBC-4BBE-B629-3BD21F4A797D}.Debug|Win32.ActiveCfg = Debug|Win32
+ {F6829817-CDBC-4BBE-B629-3BD21F4A797D}.Debug|Win32.Build.0 = Debug|Win32
+ {F6829817-CDBC-4BBE-B629-3BD21F4A797D}.Release|Win32.ActiveCfg = Release|Win32
+ {F6829817-CDBC-4BBE-B629-3BD21F4A797D}.Release|Win32.Build.0 = Release|Win32
+ {D2A464CD-AF25-4EC5-AA38-384766A7D817}.Debug|Win32.ActiveCfg = Debug|Win32
+ {D2A464CD-AF25-4EC5-AA38-384766A7D817}.Debug|Win32.Build.0 = Debug|Win32
+ {D2A464CD-AF25-4EC5-AA38-384766A7D817}.Release|Win32.ActiveCfg = Release|Win32
+ {D2A464CD-AF25-4EC5-AA38-384766A7D817}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/curl.xcodeproj/project.pbxproj b/curl.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..3744d30
--- /dev/null
+++ b/curl.xcodeproj/project.pbxproj
@@ -0,0 +1,138 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 45;
+ objects = {
+
+/* Begin PBXAggregateTarget section */
+ B009C3C9127FA7CA008F0D2B /* curl */ = {
+ isa = PBXAggregateTarget;
+ buildConfigurationList = B009C3D0127FA7D7008F0D2B /* Build configuration list for PBXAggregateTarget "curl" */;
+ buildPhases = (
+ B009C3C8127FA7CA008F0D2B /* ShellScript */,
+ );
+ dependencies = (
+ );
+ name = curl;
+ productName = curl;
+ };
+/* End PBXAggregateTarget section */
+
+/* Begin PBXFileReference section */
+ FA0FFB9212838F22007C5050 /* MacBuild.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = MacBuild.sh; sourceTree = "<group>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXGroup section */
+ B009C3BE127FA7BA008F0D2B = {
+ isa = PBXGroup;
+ children = (
+ FA0FFB9212838F22007C5050 /* MacBuild.sh */,
+ );
+ sourceTree = "<group>";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXProject section */
+ B009C3C0127FA7BA008F0D2B /* Project object */ = {
+ isa = PBXProject;
+ buildConfigurationList = B009C3C3127FA7BA008F0D2B /* Build configuration list for PBXProject "curl" */;
+ compatibilityVersion = "Xcode 3.1";
+ developmentRegion = English;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ English,
+ Japanese,
+ French,
+ German,
+ );
+ mainGroup = B009C3BE127FA7BA008F0D2B;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ B009C3C9127FA7CA008F0D2B /* curl */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXShellScriptBuildPhase section */
+ B009C3C8127FA7CA008F0D2B /* ShellScript */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "# \n./MacBuild.sh\n\n# We are done\nexit 0";
+ };
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+ B009C3C2127FA7BA008F0D2B /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = YES;
+ SDKROOT = macosx10.5;
+ };
+ name = Release;
+ };
+ B009C3CB127FA7CA008F0D2B /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = YES;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ GCC_ENABLE_FIX_AND_CONTINUE = NO;
+ PRODUCT_NAME = curl;
+ ZERO_LINK = NO;
+ };
+ name = Release;
+ };
+ B0D669C21280788000FAB970 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = YES;
+ SDKROOT = macosx10.5;
+ };
+ name = Debug;
+ };
+ B0D669C31280788000FAB970 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = YES;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ GCC_ENABLE_FIX_AND_CONTINUE = NO;
+ PRODUCT_NAME = curl;
+ ZERO_LINK = NO;
+ };
+ name = Debug;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ B009C3C3127FA7BA008F0D2B /* Build configuration list for PBXProject "curl" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ B0D669C21280788000FAB970 /* Debug */,
+ B009C3C2127FA7BA008F0D2B /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ B009C3D0127FA7D7008F0D2B /* Build configuration list for PBXAggregateTarget "curl" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ B0D669C31280788000FAB970 /* Debug */,
+ B009C3CB127FA7CA008F0D2B /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = B009C3C0127FA7BA008F0D2B /* Project object */;
+}
diff --git a/depcomp b/depcomp
new file mode 100755
index 0000000..04701da
--- /dev/null
+++ b/depcomp
@@ -0,0 +1,530 @@
+#! /bin/sh
+# depcomp - compile a program generating dependencies as side-effects
+
+scriptversion=2005-07-09.11
+
+# Copyright (C) 1999, 2000, 2003, 2004, 2005 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., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, 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.
+
+# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
+
+case $1 in
+ '')
+ echo "$0: No command. Try \`$0 --help' for more information." 1>&2
+ exit 1;
+ ;;
+ -h | --h*)
+ cat <<\EOF
+Usage: depcomp [--help] [--version] PROGRAM [ARGS]
+
+Run PROGRAMS ARGS to compile a file, generating dependencies
+as side-effects.
+
+Environment variables:
+ depmode Dependency tracking mode.
+ source Source file read by `PROGRAMS ARGS'.
+ object Object file output by `PROGRAMS ARGS'.
+ DEPDIR directory where to store dependencies.
+ depfile Dependency file to output.
+ tmpdepfile Temporary file to use when outputing dependencies.
+ libtool Whether libtool is used (yes/no).
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+ exit $?
+ ;;
+ -v | --v*)
+ echo "depcomp $scriptversion"
+ exit $?
+ ;;
+esac
+
+if test -z "$depmode" || test -z "$source" || test -z "$object"; then
+ echo "depcomp: Variables source, object and depmode must be set" 1>&2
+ exit 1
+fi
+
+# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
+depfile=${depfile-`echo "$object" |
+ sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
+tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
+
+rm -f "$tmpdepfile"
+
+# Some modes work just like other modes, but use different flags. We
+# parameterize here, but still list the modes in the big case below,
+# to make depend.m4 easier to write. Note that we *cannot* use a case
+# here, because this file can only contain one case statement.
+if test "$depmode" = hp; then
+ # HP compiler uses -M and no extra arg.
+ gccflag=-M
+ depmode=gcc
+fi
+
+if test "$depmode" = dashXmstdout; then
+ # This is just like dashmstdout with a different argument.
+ dashmflag=-xM
+ depmode=dashmstdout
+fi
+
+case "$depmode" in
+gcc3)
+## gcc 3 implements dependency tracking that does exactly what
+## we want. Yay! Note: for some reason libtool 1.4 doesn't like
+## it if -MD -MP comes after the -MF stuff. Hmm.
+ "$@" -MT "$object" -MD -MP -MF "$tmpdepfile"
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ mv "$tmpdepfile" "$depfile"
+ ;;
+
+gcc)
+## There are various ways to get dependency output from gcc. Here's
+## why we pick this rather obscure method:
+## - Don't want to use -MD because we'd like the dependencies to end
+## up in a subdir. Having to rename by hand is ugly.
+## (We might end up doing this anyway to support other compilers.)
+## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
+## -MM, not -M (despite what the docs say).
+## - Using -M directly means running the compiler twice (even worse
+## than renaming).
+ if test -z "$gccflag"; then
+ gccflag=-MD,
+ fi
+ "$@" -Wp,"$gccflag$tmpdepfile"
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
+## The second -e expression handles DOS-style file names with drive letters.
+ sed -e 's/^[^:]*: / /' \
+ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
+## This next piece of magic avoids the `deleted header file' problem.
+## The problem is that when a header file which appears in a .P file
+## is deleted, the dependency causes make to die (because there is
+## typically no way to rebuild the header). We avoid this by adding
+## dummy dependencies for each header file. Too bad gcc doesn't do
+## this for us directly.
+ tr ' ' '
+' < "$tmpdepfile" |
+## Some versions of gcc put a space before the `:'. On the theory
+## that the space means something, we add a space to the output as
+## well.
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly. Breaking it into two sed invocations is a workaround.
+ sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+hp)
+ # This case exists only to let depend.m4 do its work. It works by
+ # looking at the text of this script. This case will never be run,
+ # since it is checked for above.
+ exit 1
+ ;;
+
+sgi)
+ if test "$libtool" = yes; then
+ "$@" "-Wp,-MDupdate,$tmpdepfile"
+ else
+ "$@" -MDupdate "$tmpdepfile"
+ fi
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+
+ if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
+ echo "$object : \\" > "$depfile"
+
+ # Clip off the initial element (the dependent). Don't try to be
+ # clever and replace this with sed code, as IRIX sed won't handle
+ # lines with more than a fixed number of characters (4096 in
+ # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
+ # the IRIX cc adds comments like `#:fec' to the end of the
+ # dependency line.
+ tr ' ' '
+' < "$tmpdepfile" \
+ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
+ tr '
+' ' ' >> $depfile
+ echo >> $depfile
+
+ # The second pass generates a dummy entry for each header file.
+ tr ' ' '
+' < "$tmpdepfile" \
+ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
+ >> $depfile
+ else
+ # The sourcefile does not contain any dependencies, so just
+ # store a dummy comment line, to avoid errors with the Makefile
+ # "include basename.Plo" scheme.
+ echo "#dummy" > "$depfile"
+ fi
+ rm -f "$tmpdepfile"
+ ;;
+
+aix)
+ # The C for AIX Compiler uses -M and outputs the dependencies
+ # in a .u file. In older versions, this file always lives in the
+ # current directory. Also, the AIX compiler puts `$object:' at the
+ # start of each line; $object doesn't have directory information.
+ # Version 6 uses the directory in both cases.
+ stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
+ tmpdepfile="$stripped.u"
+ if test "$libtool" = yes; then
+ "$@" -Wc,-M
+ else
+ "$@" -M
+ fi
+ stat=$?
+
+ if test -f "$tmpdepfile"; then :
+ else
+ stripped=`echo "$stripped" | sed 's,^.*/,,'`
+ tmpdepfile="$stripped.u"
+ fi
+
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+
+ if test -f "$tmpdepfile"; then
+ outname="$stripped.o"
+ # Each line is of the form `foo.o: dependent.h'.
+ # Do two passes, one to just change these to
+ # `$object: dependent.h' and one to simply `dependent.h:'.
+ sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
+ sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
+ else
+ # The sourcefile does not contain any dependencies, so just
+ # store a dummy comment line, to avoid errors with the Makefile
+ # "include basename.Plo" scheme.
+ echo "#dummy" > "$depfile"
+ fi
+ rm -f "$tmpdepfile"
+ ;;
+
+icc)
+ # Intel's C compiler understands `-MD -MF file'. However on
+ # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
+ # ICC 7.0 will fill foo.d with something like
+ # foo.o: sub/foo.c
+ # foo.o: sub/foo.h
+ # which is wrong. We want:
+ # sub/foo.o: sub/foo.c
+ # sub/foo.o: sub/foo.h
+ # sub/foo.c:
+ # sub/foo.h:
+ # ICC 7.1 will output
+ # foo.o: sub/foo.c sub/foo.h
+ # and will wrap long lines using \ :
+ # foo.o: sub/foo.c ... \
+ # sub/foo.h ... \
+ # ...
+
+ "$@" -MD -MF "$tmpdepfile"
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+ # Each line is of the form `foo.o: dependent.h',
+ # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
+ # Do two passes, one to just change these to
+ # `$object: dependent.h' and one to simply `dependent.h:'.
+ sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
+ # Some versions of the HPUX 10.20 sed can't process this invocation
+ # correctly. Breaking it into two sed invocations is a workaround.
+ sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
+ sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+tru64)
+ # The Tru64 compiler uses -MD to generate dependencies as a side
+ # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
+ # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
+ # dependencies in `foo.d' instead, so we check for that too.
+ # Subdirectories are respected.
+ dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+ test "x$dir" = "x$object" && dir=
+ base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+
+ if test "$libtool" = yes; then
+ # With Tru64 cc, shared objects can also be used to make a
+ # static library. This mecanism is used in libtool 1.4 series to
+ # handle both shared and static libraries in a single compilation.
+ # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
+ #
+ # With libtool 1.5 this exception was removed, and libtool now
+ # generates 2 separate objects for the 2 libraries. These two
+ # compilations output dependencies in in $dir.libs/$base.o.d and
+ # in $dir$base.o.d. We have to check for both files, because
+ # one of the two compilations can be disabled. We should prefer
+ # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
+ # automatically cleaned when .libs/ is deleted, while ignoring
+ # the former would cause a distcleancheck panic.
+ tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4
+ tmpdepfile2=$dir$base.o.d # libtool 1.5
+ tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5
+ tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504
+ "$@" -Wc,-MD
+ else
+ tmpdepfile1=$dir$base.o.d
+ tmpdepfile2=$dir$base.d
+ tmpdepfile3=$dir$base.d
+ tmpdepfile4=$dir$base.d
+ "$@" -MD
+ fi
+
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
+ exit $stat
+ fi
+
+ for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
+ do
+ test -f "$tmpdepfile" && break
+ done
+ if test -f "$tmpdepfile"; then
+ sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
+ # That's a tab and a space in the [].
+ sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
+ else
+ echo "#dummy" > "$depfile"
+ fi
+ rm -f "$tmpdepfile"
+ ;;
+
+#nosideeffect)
+ # This comment above is used by automake to tell side-effect
+ # dependency tracking mechanisms from slower ones.
+
+dashmstdout)
+ # Important note: in order to support this mode, a compiler *must*
+ # always write the preprocessed file to stdout, regardless of -o.
+ "$@" || exit $?
+
+ # Remove the call to Libtool.
+ if test "$libtool" = yes; then
+ while test $1 != '--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+
+ # Remove `-o $object'.
+ IFS=" "
+ for arg
+ do
+ case $arg in
+ -o)
+ shift
+ ;;
+ $object)
+ shift
+ ;;
+ *)
+ set fnord "$@" "$arg"
+ shift # fnord
+ shift # $arg
+ ;;
+ esac
+ done
+
+ test -z "$dashmflag" && dashmflag=-M
+ # Require at least two characters before searching for `:'
+ # in the target name. This is to cope with DOS-style filenames:
+ # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
+ "$@" $dashmflag |
+ sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile"
+ rm -f "$depfile"
+ cat < "$tmpdepfile" > "$depfile"
+ tr ' ' '
+' < "$tmpdepfile" | \
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly. Breaking it into two sed invocations is a workaround.
+ sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+dashXmstdout)
+ # This case only exists to satisfy depend.m4. It is never actually
+ # run, as this mode is specially recognized in the preamble.
+ exit 1
+ ;;
+
+makedepend)
+ "$@" || exit $?
+ # Remove any Libtool call
+ if test "$libtool" = yes; then
+ while test $1 != '--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+ # X makedepend
+ shift
+ cleared=no
+ for arg in "$@"; do
+ case $cleared in
+ no)
+ set ""; shift
+ cleared=yes ;;
+ esac
+ case "$arg" in
+ -D*|-I*)
+ set fnord "$@" "$arg"; shift ;;
+ # Strip any option that makedepend may not understand. Remove
+ # the object too, otherwise makedepend will parse it as a source file.
+ -*|$object)
+ ;;
+ *)
+ set fnord "$@" "$arg"; shift ;;
+ esac
+ done
+ obj_suffix="`echo $object | sed 's/^.*\././'`"
+ touch "$tmpdepfile"
+ ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
+ rm -f "$depfile"
+ cat < "$tmpdepfile" > "$depfile"
+ sed '1,2d' "$tmpdepfile" | tr ' ' '
+' | \
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly. Breaking it into two sed invocations is a workaround.
+ sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile" "$tmpdepfile".bak
+ ;;
+
+cpp)
+ # Important note: in order to support this mode, a compiler *must*
+ # always write the preprocessed file to stdout.
+ "$@" || exit $?
+
+ # Remove the call to Libtool.
+ if test "$libtool" = yes; then
+ while test $1 != '--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+
+ # Remove `-o $object'.
+ IFS=" "
+ for arg
+ do
+ case $arg in
+ -o)
+ shift
+ ;;
+ $object)
+ shift
+ ;;
+ *)
+ set fnord "$@" "$arg"
+ shift # fnord
+ shift # $arg
+ ;;
+ esac
+ done
+
+ "$@" -E |
+ sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
+ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
+ sed '$ s: \\$::' > "$tmpdepfile"
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ cat < "$tmpdepfile" >> "$depfile"
+ sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+msvisualcpp)
+ # Important note: in order to support this mode, a compiler *must*
+ # always write the preprocessed file to stdout, regardless of -o,
+ # because we must use -o when running libtool.
+ "$@" || exit $?
+ IFS=" "
+ for arg
+ do
+ case "$arg" in
+ "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
+ set fnord "$@"
+ shift
+ shift
+ ;;
+ *)
+ set fnord "$@" "$arg"
+ shift
+ shift
+ ;;
+ esac
+ done
+ "$@" -E |
+ sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile"
+ echo " " >> "$depfile"
+ . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+none)
+ exec "$@"
+ ;;
+
+*)
+ echo "Unknown depmode $depmode" 1>&2
+ exit 1
+ ;;
+esac
+
+exit 0
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
diff --git a/docs/BINDINGS b/docs/BINDINGS
new file mode 100644
index 0000000..5cf07fe
--- /dev/null
+++ b/docs/BINDINGS
@@ -0,0 +1,228 @@
+ _ _ ____ _
+ ___| | | | _ \| |
+ / __| | | | |_) | |
+ | (__| |_| | _ <| |___
+ \___|\___/|_| \_\_____|
+
+ libcurl bindings
+
+Creative people have written bindings or interfaces for various environments
+and programming languages. Using one of these allows you to take advantage of
+curl powers from within your favourite language or system.
+
+This is a list of all known interfaces as of this writing.
+
+The bindings listed below are not part of the curl/libcurl distribution
+archives, but must be downloaded and installed separately.
+
+Ada95
+
+ Writtten by Andreas Almroth
+ http://www.almroth.com/adacurl/index.html
+
+Basic
+
+ ScriptBasic bindings to libcurl. Writtten by Peter Verhas
+ http://scriptbasic.com/
+
+C
+ libcurl is a C library in itself!
+ http://curl.haxx.se/libcurl/
+
+C++
+
+ Written by Jean-Philippe Barrette-LaPierre
+ http://curlpp.org/
+
+Ch
+
+ Written by Stephen Nestinger and Jonathan Rogado
+ http://chcurl.sourceforge.net/
+
+Cocoa
+
+ Written by Dan Wood
+ http://curlhandle.sourceforge.net/
+
+D
+
+ Written by Kenneth Bogert
+ http://curl.haxx.se/libcurl/d/
+
+Dylan
+
+ Written by Chris Double
+ http://dylanlibs.sourceforge.net/
+
+Eiffel
+ Written by Eiffel Software
+ http://curl.haxx.se/libcurl/eiffel/
+
+Euphoria
+
+ Written by Ray Smith
+ http://rays-web.com/eulibcurl.htm
+
+Falcon
+
+ http://www.falconpl.org/index.ftd?page_id=prjs&prj_id=curl
+
+Ferite
+
+ Written by Paul Querna
+ http://www.ferite.org/
+
+Gambas
+
+ http://gambas.sourceforge.net
+
+glib/GTK+
+
+ Written by Richard Atterer
+ http://atterer.net/glibcurl/
+
+Haskell
+
+ Written by Galois, Inc
+ http://hackage.haskell.org/cgi-bin/hackage-scripts/package/curl
+
+Java
+
+ Maintained by [blank]
+ http://curl.haxx.se/libcurl/java/
+
+Lisp
+
+ Written by Liam Healy
+ http://common-lisp.net/project/cl-curl/
+
+Lua
+
+ luacurl by Alexander Marinov
+ http://luacurl.luaforge.net/
+
+ Lua-cURL by Jürgen Hötzel
+ http://luaforge.net/projects/lua-curl/
+
+Mono
+
+ Written by Jeffrey Phillips
+ http://forge.novell.com/modules/xfmod/project/?libcurl-mono
+
+.NET
+
+ libcurl-net by Jeffrey Phillips
+ http://sourceforge.net/projects/libcurl-net/
+
+Object-Pascal
+
+ Free Pascal, Delphi and Kylix binding written by Christophe Espern.
+ http://www.tekool.com/opcurl
+
+O'Caml
+
+ Written by Lars Nilsson
+ http://sourceforge.net/projects/ocurl/
+
+Pascal
+
+ Free Pascal, Delphi and Kylix binding written by Jeffrey Pohlmeyer.
+ http://houston.quik.com/jkp/curlpas/
+
+Perl
+
+ Maintained by Cris Bailiff
+ http://curl.haxx.se/libcurl/perl/
+
+PHP
+
+ Written by Sterling Hughes
+ http://curl.haxx.se/libcurl/php/
+
+PostgreSQL
+
+ Written by Gian Paolo Ciceri
+ http://gborg.postgresql.org/project/pgcurl/projdisplay.php
+
+Python
+
+ PycURL by Kjetil Jacobsen
+ http://pycurl.sourceforge.net/
+
+R
+
+ RCurl by Duncan Temple Lang
+ http://www.omegahat.org/RCurl/
+
+Rexx
+
+ Written Mark Hessling
+ http://rexxcurl.sourceforge.net/
+
+RPG
+
+ Support for ILE/RPG on OS/400 is included in source distribution
+ http://curl.haxx.se/libcurl/
+ See packages/OS400/README.OS400 and packages/OS400/curl.inc.in
+
+Ruby
+
+ curb - written by Ross Bamford
+ http://curb.rubyforge.org/
+
+ ruby-curl-multi - written by Kristjan Petursson and Keith Rarick
+ http://curl-multi.rubyforge.org/
+
+Scheme
+
+ Bigloo binding by Kirill Lisovsky
+ http://curl.haxx.se/libcurl/scheme/
+
+S-Lang
+
+ S-Lang binding by John E Davis
+ http://www.jedsoft.org/slang/modules/curl.html
+
+Smalltalk
+
+ Smalltalk binding by Danil Osipchuk
+ http://www.squeaksource.com/CurlPlugin/
+
+SP-Forth
+
+ SP-Forth binding by ygrek
+ http://www.forth.org.ru/~ac/lib/lin/curl/
+
+SPL
+
+ SPL binding by Clifford Wolf
+ http://www.clifford.at/spl/
+
+Tcl
+
+ Tclcurl by Andrés García
+ http://personal1.iddeo.es/andresgarci/tclcurl/english/docs.html
+
+Visual Basic
+
+ libcurl-vb by Jeffrey Phillips
+ http://sourceforge.net/projects/libcurl-vb/
+
+Visual Foxpro
+
+ by Carlos Alloatti
+ http://www.ctl32.com.ar/libcurl.asp
+
+Q
+ The libcurl module is part of the default install
+ http://q-lang.sourceforge.net/
+
+wxWidgets
+
+ Written by Casey O'Donnell
+ http://wxcode.sourceforge.net/components/wxcurl/
+
+XBLite
+
+ Written by David Szafranski
+ http://perso.wanadoo.fr/xblite/libraries.html
diff --git a/docs/BUGS b/docs/BUGS
new file mode 100644
index 0000000..8cbad04
--- /dev/null
+++ b/docs/BUGS
@@ -0,0 +1,81 @@
+ _ _ ____ _
+ ___| | | | _ \| |
+ / __| | | | |_) | |
+ | (__| |_| | _ <| |___
+ \___|\___/|_| \_\_____|
+
+BUGS
+
+ Curl and libcurl have grown substantially since the beginning. At the time
+ of writing (July 2007), there are about 47000 lines of source code, and by
+ the time you read this it has probably grown even more.
+
+ Of course there are lots of bugs left. And lots of misfeatures.
+
+ To help us make curl the stable and solid product we want it to be, we need
+ bug reports and bug fixes.
+
+WHERE TO REPORT
+
+ If you can't fix a bug yourself and submit a fix for it, try to report an as
+ detailed report as possible to a curl mailing list to allow one of us to
+ have a go at a solution. You should also post your bug/problem at curl's bug
+ tracking system over at
+
+ http://sourceforge.net/bugs/?group_id=976
+
+ (but please read the sections below first before doing that)
+
+ If you feel you need to ask around first, find a suitable mailing list and
+ post there. The lists are available on http://curl.haxx.se/mail/
+
+WHAT TO REPORT
+
+ When reporting a bug, you should include all information that will help us
+ understand what's wrong, what you expected to happen and how to repeat the
+ bad behavior. You therefore need to tell us:
+
+ - your operating system's name and version number (uname -a under a unix
+ is fine)
+ - what version of curl you're using (curl -V is fine)
+ - versions of the used libraries that libcurl is built to use
+ - what URL you were working with (if possible), at least which protocol
+
+ and anything and everything else you think matters. Tell us what you
+ expected to happen, tell use what did happen, tell us how you could make it
+ work another way. Dig around, try out, test. Then include all the tiny bits
+ and pieces in your report. You will benefit from this yourself, as it will
+ enable us to help you quicker and more accurately.
+
+ Since curl deals with networks, it often helps us if you include a protocol
+ debug dump with your bug report. The output you get by using the -v or
+ --trace options.
+
+ If curl crashed, causing a core dump (in unix), there is hardly any use to
+ send that huge file to anyone of us. Unless we have an exact same system
+ setup as you, we can't do much with it. Instead we ask you to get a stack
+ trace and send that (much smaller) output to us instead!
+
+ The address and how to subscribe to the mailing lists are detailed in the
+ MANUAL file.
+
+HOW TO GET A STACK TRACE
+
+ First, you must make sure that you compile all sources with -g and that you
+ don't 'strip' the final executable. Try to avoid optimizing the code as
+ well, remove -O, -O2 etc from the compiler options.
+
+ Run the program until it cores.
+
+ Run your debugger on the core file, like '<debugger> curl core'. <debugger>
+ should be replaced with the name of your debugger, in most cases that will
+ be 'gdb', but 'dbx' and others also occur.
+
+ When the debugger has finished loading the core file and presents you a
+ prompt, enter 'where' (without the quotes) and press return.
+
+ The list that is presented is the stack trace. If everything worked, it is
+ supposed to contain the chain of functions that were called when curl
+ crashed. Include the stack trace with your detailed bug report. It'll help a
+ lot.
+
diff --git a/docs/CONTRIBUTE b/docs/CONTRIBUTE
new file mode 100644
index 0000000..db03c42
--- /dev/null
+++ b/docs/CONTRIBUTE
@@ -0,0 +1,279 @@
+ _ _ ____ _
+ ___| | | | _ \| |
+ / __| | | | |_) | |
+ | (__| |_| | _ <| |___
+ \___|\___/|_| \_\_____|
+
+ When Contributing Source Code
+
+ This document is intended to offer guidelines that can be useful to keep in
+ mind when you decide to contribute to the project. This concerns new features
+ as well as corrections to existing flaws or bugs.
+
+ 1. Learning cURL
+ 1.1 Join the Community
+ 1.2 License
+ 1.3 What To Read
+
+ 2. cURL Coding Standards
+ 2.1 Naming
+ 2.2 Indenting
+ 2.3 Commenting
+ 2.4 Line Lengths
+ 2.5 General Style
+ 2.6 Non-clobbering All Over
+ 2.7 Platform Dependent Code
+ 2.8 Write Separate Patches
+ 2.9 Patch Against Recent Sources
+ 2.10 Document
+ 2.11 Test Cases
+
+ 3. Pushing Out Your Changes
+ 3.1 Write Access to git Repository
+ 3.2 How To Make a Patch with git
+ 3.3 How To Make a Patch without git
+ 3.4 How to get your changes into the main sources
+ 3.5 Write good commit messages
+
+==============================================================================
+
+1. Learning cURL
+
+1.1 Join the Community
+
+ Skip over to http://curl.haxx.se/mail/ and join the appropriate mailing
+ list(s). Read up on details before you post questions. Read this file before
+ you start sending patches! We prefer patches and discussions being held on
+ the mailing list(s), not sent to individuals.
+
+ Before posting to one of the curl mailing lists, please read up on the mailing
+ list etiquette: http://curl.haxx.se/mail/etiquette.html
+
+ We also hang out on IRC in #curl on irc.freenode.net
+
+1.2. License
+
+ When contributing with code, you agree to put your changes and new code under
+ the same license curl and libcurl is already using unless stated and agreed
+ otherwise.
+
+ If you add a larger piece of code, you can opt to make that file or set of
+ files to use a different license as long as they don't enforce any changes to
+ the rest of the package and they make sense. Such "separate parts" can not be
+ GPL licensed (as we don't want copyleft to affect users of libcurl) but they
+ must use "GPL compatible" licenses (as we want to allow users to use libcurl
+ properly in GPL licensed environments).
+
+ When changing existing source code, you do not alter the copyright of the
+ original file(s). The copyright will still be owned by the original
+ creator(s) or those who have been assigned copyright by the original
+ author(s).
+
+ By submitting a patch to the curl project, you are assumed to have the right
+ to the code and to be allowed by your employer or whatever to hand over that
+ patch/code to us. We will credit you for your changes as far as possible, to
+ give credit but also to keep a trace back to who made what changes. Please
+ always provide us with your full real name when contributing!
+
+1.3 What To Read
+
+ Source code, the man pages, the INTERNALS document, TODO, KNOWN_BUGS, the
+ most recent CHANGES. Just lurking on the libcurl mailing list is gonna give
+ you a lot of insights on what's going on right now. Asking there is a good
+ idea too.
+
+2. cURL Coding Standards
+
+2.1 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. File-local
+ functions should be made static. We like lower case names.
+
+ See the INTERNALS document on how we name non-exported library-global
+ symbols.
+
+2.2 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. We don't ask you to like it, we
+ just ask you to follow the tradition! ;-) This mainly means: 2-level indents,
+ using spaces only (no tabs) and having the opening brace ({) on the same line
+ as the if() or while().
+
+ Also note that we use if() and while() with no space before the parenthesis.
+
+2.3 Commenting
+
+ Comment your source code extensively using C comments (/* comment */), DO NOT
+ use C++ comments (// this style). Commented code is quality code and enables
+ future modifications much more. Uncommented code risk having to be completely
+ replaced when someone wants to extend things, since other persons' source
+ code can get quite hard to read.
+
+2.4 Line Lengths
+
+ We write source lines shorter than 80 columns.
+
+2.5 General Style
+
+ Keep your functions small. If they're small you avoid a lot of mistakes and
+ you don't accidentally mix up variables etc.
+
+2.6 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.
+
+2.7 Platform Dependent Code
+
+ Use #ifdef HAVE_FEATURE to do conditional code. We avoid checking for
+ particular operating systems or hardware in the #ifdef lines. The
+ HAVE_FEATURE shall be generated by the configure script for unix-like systems
+ and they are hard-coded in the config-[system].h files for the others.
+
+2.8 Write Separate Patches
+
+ 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.
+
+2.9 Patch Against Recent Sources
+
+ Please try to get the latest available sources to make your patches
+ against. It makes the life of the developers so much easier. The very best is
+ if you get the most up-to-date sources from the git repository, but the
+ latest release archive is quite OK as well!
+
+2.10 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.
+
+ The documentation is always made in man pages (nroff formatted) or plain
+ ASCII files. All HTML files on the web site and in the release archives are
+ generated from the nroff/ASCII versions.
+
+2.11 Test Cases
+
+ Since the introduction of the test suite, we can quickly verify that the main
+ features are working as they're supposed to. To maintain this situation and
+ improve it, all new features and functions that are added need to be tested
+ in the test suite. Every feature that is added should get at least one valid
+ test case that verifies that it works as documented. If every submitter also
+ posts a few test cases, it won't end up as a heavy burden on a single person!
+
+3. Pushing Out Your Changes
+
+3.1 Write Access to git Repository
+
+ If you are a frequent contributor, or have another good reason, you can of
+ course get write access to the git repository and then you'll be able to push
+ your changes straight into the git repo instead of sending changes by mail as
+ patches. Just ask if this is what you'd want. You will be required to have
+ posted a few quality patches first, before you can be granted push access.
+
+3.2 How To Make a Patch with git
+
+ You need to first checkout the respository:
+
+ git clone git://github.com/bagder/curl.git
+
+ You then proceed and edit all the files you like and you commit them to your
+ local repository:
+
+ git commit [file]
+
+ As usual, group your commits so that you commit all changes that at once that
+ constitutes a logical change. See also section "3.5 Write good commit
+ messages".
+
+ Once you have done all your commits and you're happy with what you see, you
+ can make patches out of your changes that are suitable for mailing:
+
+ git format-patch remotes/origin/master
+
+ This creates files in your local directory named NNNN-[name].patch for each
+ commit.
+
+ Now send those patches off to the curl-library list. You can of course opt to
+ do that with the 'get send-email' command.
+
+3.3 How To Make a Patch without git
+
+ Keep a copy of the unmodified curl sources. Make your changes in a separate
+ source tree. When you think you have something that you want to offer the
+ curl community, use GNU diff to generate patches.
+
+ If you have modified a single file, try something like:
+
+ diff -u unmodified-file.c my-changed-one.c > my-fixes.diff
+
+ If you have modified several files, possibly in different directories, you
+ can use diff recursively:
+
+ diff -ur curl-original-dir curl-modified-sources-dir > my-fixes.diff
+
+ The GNU diff and GNU patch tools exist for virtually all platforms, including
+ all kinds of Unixes and Windows:
+
+ For unix-like operating systems:
+
+ http://www.gnu.org/software/patch/patch.html
+ http://www.gnu.org/directory/diffutils.html
+
+ For Windows:
+
+ http://gnuwin32.sourceforge.net/packages/patch.htm
+ http://gnuwin32.sourceforge.net/packages/diffutils.htm
+
+3.4 How to get your changes into the main sources
+
+ 1. Submit your patch to the curl-library mailing list
+
+ 2. Make the patch against as recent sources as possible.
+
+ 3. Make sure your patch adheres to the source indent and coding style of
+ already existing source code. Failing to do so just adds more work for me.
+
+ 4. Respond to replies on the list about the patch and answer questions and/or
+ fix nits/flaws. This is very important. I will take lack of replies as a
+ sign that you're not very anxious to get your patch accepted and I tend to
+ simply drop such patches from my TODO list.
+
+ 5. If you've followed the above mentioned paragraphs and your patch still
+ hasn't been incorporated after some weeks, consider resubmitting it to the
+ list.
+
+3.5 Write good commit messages
+
+ A short guide to how to do fine commit messages in the curl project.
+
+ ---- start ----
+ [area]: [short line describing the main effect]
+
+ [separate the above single line from the rest with an empty line]
+
+ [full description, no wider than 72 columns that describe as much as
+ possible as to why this change is made, and possibly what things
+ it fixes and everything else that is related]
+ ---- stop ----
+
+ Don't forget to use commit --author="" if you commit someone else's work,
+ and make sure that you have your own user and email setup correctly in git
+ before you commit
+
diff --git a/docs/DISTRO-DILEMMA b/docs/DISTRO-DILEMMA
new file mode 100644
index 0000000..108e6ba
--- /dev/null
+++ b/docs/DISTRO-DILEMMA
@@ -0,0 +1,176 @@
+ Date: February 11, 2007
+ Author: Daniel Stenberg <daniel@haxx.se>
+ URL: http://curl.haxx.se/legal/distro-dilemma.html
+
+Condition
+
+ This document is written to describe the situation as it is right now.
+ libcurl 7.16.1 is currently the latest version available. Things may of
+ course change in the future.
+
+ This document reflects my view and understanding of these things. Please tell
+ me where and how you think I'm wrong, and I'll try to correct my mistakes.
+
+Background
+
+ The Free Software Foundation has deemed the Original BSD license[1] to be
+ "incompatible"[2] with GPL[3]. I'd rather say it is the other way around, but
+ the point is the same: if you distribute a binary version of a GPL program,
+ it MUST NOT be linked with any Original BSD-licensed parts or libraries.
+ Doing so will violate the GPL license. For a long time, very many GPL
+ licensed programs have avoided this license mess by adding an exception[8] to
+ their license. And many others have just closed their eyes for this problem.
+
+ libcurl is MIT-style[4] licensed - how on earth did this dilemma fall onto
+ our plates?
+
+ libcurl is only a little library. libcurl can be built to use OpenSSL for its
+ SSL/TLS capabilities. OpenSSL is basically Original BSD licensed[5].
+
+ If libcurl built to use OpenSSL is used by a GPL-licensed application and you
+ decide to distribute a binary version of it (Linux distros - for example -
+ tend to), you have a clash. GPL vs Original BSD.
+
+ This dilemma is not libcurl-specific nor is it specific to any particular
+ Linux distro. (This article mentions and refers to Debian several times, but
+ only because Debian seems to be the only Linux distro to have faced this
+ issue yet since no other distro is shipping libcurl built with two SSL
+ libraries.)
+
+Part of the Operating System
+
+ This would not be a problem if the used lib would be considered part of the
+ underlying operating system, as then the GPL license has an exception
+ clause[6] that allows applications to use such libs without having to be
+ allowed to distribute it or its sources. Possibly some distros will claim
+ that OpenSSL is part of their operating system.
+
+ Debian does however not take this stance and has officially(?) claimed that
+ OpenSSL is not a required part of the Debian operating system
+
+ Some people claim that this paragraph cannot be exploited this way by a Linux
+ distro, but I am not a lawyer and that is a discussion left outside of this
+ document.
+
+GnuTLS
+
+ Since May 2005 libcurl can get built to use GnuTLS instead of OpenSSL. GnuTLS
+ is an LGPL[7] licensed library that offers a matching set of features as
+ OpenSSL does. Now, you can build and distribute an TLS/SSL capable libcurl
+ without including any Original BSD licensed code.
+
+ I believe Debian is the first (only?) distro that provides libcurl/GnutTLS
+ packages.
+
+yassl
+
+ libcurl can get also get built to use yassl for the TLS/SSL layer. yassl is a
+ GPL[3] licensed library.
+
+
+GnuTLS vs OpenSSL vs yassl
+
+ While these three libraries offer similar features, they are not equal.
+ libcurl does not (yet) offer a standardized stable ABI if you decide to
+ switch from using libcurl-openssl to libcurl-gnutls or vice versa. The GnuTLS
+ and yassl support is very recent in libcurl and it has not been tested nor
+ used very extensively, while the OpenSSL equivalent code has been used and
+ thus matured since 1999.
+
+ GnuTLS
+ - LGPL licensened
+ - supports SRP
+ - lacks SSLv2 support
+ - lacks MD2 support (used by at least some CA certs)
+ - lacks the crypto functions libcurl uses for NTLM
+
+ OpenSSL
+ - Original BSD licensened
+ - lacks SRP
+ - supports SSLv2
+ - older and more widely used
+ - provides crypto functions libcurl uses for NTLM
+ - libcurl can do non-blocking connects with it in 7.15.4 and later
+
+ yassl
+ - GPL licensed
+ - much untested and unproven in the real work by (lib)curl users so we don't
+ know a lot about restrictions or benefits from using this
+
+The Better License, Original BSD, GPL or LGPL?
+
+ It isn't obvious or without debate to any objective interested party that
+ either of these licenses are the "better" or even the "preferred" one in a
+ generic situation.
+
+ Instead, I think we should accept the fact that the SSL/TLS libraries and
+ their different licenses will fit different applications and their authors
+ differently depending on the applications' licenses and their general usage
+ pattern (considering how GPL and LGPL libraries for example can be burdensome
+ for embedded systems usage).
+
+ In Debian land, there seems to be a common opinion that LGPL is "maximally
+ compatible" with apps while Original BSD is not. Like this:
+
+ http://lists.debian.org/debian-devel/2005/09/msg01417.html
+
+More SSL Libraries
+
+ In libcurl, there's no stopping us here. There are more Open Source/Free
+ SSL/TLS libraries out there and we would very much like to support them as
+ well, to offer application authors an even wider scope of choice.
+
+Application Angle of this Problem
+
+ libcurl is built to use one SSL/TLS library. It uses a single fixed name (by
+ default) on the built/created lib file, and applications are built/linked to
+ use that single lib. Replacing one libcurl instance with another one that
+ uses the other SSL/TLS library might break one or more applications (due to
+ ABI differences and/or different feature set). You want your application to
+ use the libcurl it was built for.
+
+Project cURL Angle of this Problem
+
+ We distribute libcurl and everyone may build libcurl with either library at
+ their choice. This problem is not directly a problem of ours. It merely
+ affects users - GPL application authors only - of our lib as it comes
+ included and delivered on some distros.
+
+ libcurl has different ABI when built with different SSL/TLS libraries due to
+ these reasons:
+
+ 1. No one has worked on fixing this. The mutex/lock callbacks should be set
+ with a generic libcurl function that should use the proper underlying
+ functions.
+
+ 2. The CURLOPT_SSL_CTX_FUNCTION option is not possible to "emulate" on GnuTLS
+ but simply requires OpenSSL.
+
+ 3. There might be some other subtle differences just because nobody has yet
+ tried to make a fixed ABI like this.
+
+Distro Angle of this Problem
+
+ To my knowledge there is only one distro that ships libcurl built with either
+ OpenSSL or GnuTLS.
+
+ Debian Linux is now (since mid September 2005) providing two different
+ libcurl packages, one for libcurl built with OpenSSL and one built with
+ GnuTLS. They use different .so names and can this both be installed in a
+ single system simultaneously. This has been said to be a transitional system
+ not desired to keep in the long run.
+
+Footnotes
+
+ [1] = http://www.xfree86.org/3.3.6/COPYRIGHT2.html#6
+ [2] = http://www.fsf.org/licensing/essays/bsd.html
+ [3] = http://www.fsf.org/licensing/licenses/gpl.html
+ [4] = http://curl.haxx.se/docs/copyright.html
+ [5] = http://www.openssl.org/source/license.html
+ [6] = http://www.fsf.org/licensing/licenses/gpl.html end of section 3
+ [7] = http://www.fsf.org/licensing/licenses/lgpl.html
+ [8] = http://en.wikipedia.org/wiki/OpenSSL_exception
+
+Feedback/Updates provided by
+
+ Eric Cooper
diff --git a/docs/FAQ b/docs/FAQ
new file mode 100644
index 0000000..2e35dd6
--- /dev/null
+++ b/docs/FAQ
@@ -0,0 +1,1379 @@
+Updated: October 6, 2010 (http://curl.haxx.se/docs/faq.html)
+ _ _ ____ _
+ ___| | | | _ \| |
+ / __| | | | |_) | |
+ | (__| |_| | _ <| |___
+ \___|\___/|_| \_\_____|
+
+FAQ
+
+ 1. Philosophy
+ 1.1 What is cURL?
+ 1.2 What is libcurl?
+ 1.3 What is curl not?
+ 1.4 When will you make curl do XXXX ?
+ 1.5 Who makes curl?
+ 1.6 What do you get for making curl?
+ 1.7 What about CURL from curl.com?
+ 1.8 I have a problem who do I mail?
+ 1.9 Where do I buy commercial support for curl?
+ 1.10 How many are using curl?
+ 1.11 Why don't you update ca-bundle.crt
+ 1.12 I have a problem who can I chat with?
+ 1.13 curl's ECCN number?
+ 1.14 How do I submit my patch?
+
+ 2. Install Related Problems
+ 2.1 configure doesn't find OpenSSL even when it is installed
+ 2.1.1 native linker doesn't find OpenSSL
+ 2.1.2 only the libssl lib is missing
+ 2.2 Does curl work/build with other SSL libraries?
+ 2.3 Where can I find a copy of LIBEAY32.DLL?
+ 2.4 Does curl support SOCKS (RFC 1928) ?
+
+ 3. Usage Problems
+ 3.1 curl: (1) SSL is disabled, https: not supported
+ 3.2 How do I tell curl to resume a transfer?
+ 3.3 Why doesn't my posting using -F work?
+ 3.4 How do I tell curl to run custom FTP commands?
+ 3.5 How can I disable the Pragma: nocache header?
+ 3.6 Does curl support ASP, XML, XHTML or HTML version Y?
+ 3.7 Can I use curl to delete/rename a file through FTP?
+ 3.8 How do I tell curl to follow HTTP redirects?
+ 3.9 How do I use curl in my favorite programming language?
+ 3.10 What about SOAP, WebDAV, XML-RPC or similar protocols over HTTP?
+ 3.11 How do I POST with a different Content-Type?
+ 3.12 Why do FTP specific features over HTTP proxy fail?
+ 3.13 Why does my single/double quotes fail?
+ 3.14 Does curl support Javascript or PAC (automated proxy config)?
+ 3.15 Can I do recursive fetches with curl?
+ 3.16 What certificates do I need when I use SSL?
+ 3.17 How do I list the root dir of an FTP server?
+ 3.18 Can I use curl to send a POST/PUT and not wait for a response?
+ 3.19 How do I get HTTP from a host using a specific IP address?
+
+ 4. Running Problems
+ 4.1 Problems connecting to SSL servers.
+ 4.2 Why do I get problems when I use & or % in the URL?
+ 4.3 How can I use {, }, [ or ] to specify multiple URLs?
+ 4.4 Why do I get downloaded data even though the web page doesn't exist?
+ 4.5 Why do I get return code XXX from a HTTP server?
+ 4.5.1 "400 Bad Request"
+ 4.5.2 "401 Unauthorized"
+ 4.5.3 "403 Forbidden"
+ 4.5.4 "404 Not Found"
+ 4.5.5 "405 Method Not Allowed"
+ 4.5.6 "301 Moved Permanently"
+ 4.6 Can you tell me what error code 142 means?
+ 4.7 How do I keep user names and passwords secret in Curl command lines?
+ 4.8 I found a bug!
+ 4.9 Curl can't authenticate to the server that requires NTLM?
+ 4.10 My HTTP request using HEAD, PUT or DELETE doesn't work!
+ 4.11 Why does my HTTP range requests return the full document?
+ 4.12 Why do I get "certificate verify failed" ?
+ 4.13 Why is curl -R on Windows one hour off?
+ 4.14 Redirects work in browser but not with curl!
+ 4.15 FTPS doesn't work
+ 4.16 My HTTP POST or PUT requests are slow!
+ 4.17 Non-functional connect timeouts on Windows
+ 4.18 file:// URLs containing drive letters (Windows, NetWare)
+ 4.19 Why doesn't cURL return an error when the network cable is unplugged?
+
+ 5. libcurl Issues
+ 5.1 Is libcurl thread-safe?
+ 5.2 How can I receive all data into a large memory chunk?
+ 5.3 How do I fetch multiple files with libcurl?
+ 5.4 Does libcurl do Winsock initing on win32 systems?
+ 5.5 Does CURLOPT_WRITEDATA and CURLOPT_READDATA work on win32 ?
+ 5.6 What about Keep-Alive or persistent connections?
+ 5.7 Link errors when building libcurl on Windows!
+ 5.8 libcurl.so.X: open failed: No such file or directory
+ 5.9 How does libcurl resolve host names?
+ 5.10 How do I prevent libcurl from writing the response to stdout?
+ 5.11 How do I make libcurl not receive the whole HTTP response?
+ 5.12 Can I make libcurl fake or hide my real IP address?
+ 5.13 How do I stop an ongoing transfer?
+ 5.14 Using C++ non-static functions for callbacks?
+ 5.15 How do I get an FTP directory listing?
+
+ 6. License Issues
+ 6.1 I have a GPL program, can I use the libcurl library?
+ 6.2 I have a closed-source program, can I use the libcurl library?
+ 6.3 I have a BSD licensed program, can I use the libcurl library?
+ 6.4 I have a program that uses LGPL libraries, can I use libcurl?
+ 6.5 Can I modify curl/libcurl for my program and keep the changes secret?
+ 6.6 Can you please change the curl/libcurl license to XXXX?
+ 6.7 What are my obligations when using libcurl in my commercial apps?
+
+ 7. PHP/CURL Issues
+ 7.1 What is PHP/CURL?
+ 7.2 Who write PHP/CURL?
+ 7.3 Can I perform multiple requests using the same handle?
+
+==============================================================================
+
+1. Philosophy
+
+ 1.1 What is cURL?
+
+ cURL is the name of the project. The name is a play on 'Client for URLs',
+ originally with URL spelled in uppercase to make it obvious it deals with
+ URLs. The fact it can also be pronounced 'see URL' also helped, it works as
+ an abbreviation for "Client URL Request Library" or why not the recursive
+ version: "Curl URL Request Library".
+
+ The cURL project produces two products:
+
+ libcurl
+
+ A free and easy-to-use client-side URL transfer library, supporting DICT,
+ FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3,
+ POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, TELNET and TFTP.
+
+ libcurl supports HTTPS certificates, HTTP POST, HTTP PUT, FTP uploading,
+ kerberos, HTTP form based upload, proxies, cookies, user+password
+ authentication, file transfer resume, http proxy tunneling and more!
+
+ libcurl is highly portable, it builds and works identically on numerous
+ platforms, including Solaris, NetBSD, FreeBSD, OpenBSD, Darwin, HPUX,
+ IRIX, AIX, Tru64, Linux, UnixWare, HURD, Windows, Amiga, OS/2, BeOs, Mac
+ OS X, Ultrix, QNX, OpenVMS, RISC OS, Novell NetWare, DOS, Symbian, OSF,
+ Android, Minix, IBM TPF and more...
+
+ libcurl is free, thread-safe, IPv6 compatible, feature rich, well
+ supported and fast.
+
+ curl
+
+ A command line tool for getting or sending files using URL syntax.
+
+ Since curl uses libcurl, curl supports the same wide range of common
+ Internet protocols that libcurl does.
+
+ We pronounce curl and cURL with an initial k sound: [kurl].
+
+ There are numerous sub-projects and related projects that also use the word
+ curl in the project names in various combinations, but you should take
+ notice that this FAQ is directed at the command-line tool named curl (and
+ libcurl the library), and may therefore not be valid for other curl-related
+ projects. (There is however a small section for the PHP/CURL in this FAQ.)
+
+ 1.2 What is libcurl?
+
+ libcurl is a reliable and portable library which provides you with an easy
+ interface to a range of common Internet protocols.
+
+ You can use libcurl for free in your application, be it open source,
+ commercial or closed-source.
+
+ libcurl is most probably the most portable, most powerful and most often
+ used C-based multi-platform file transfer library on this planet - be it
+ open source or commercial.
+
+ 1.3 What is curl not?
+
+ Curl is not a wget clone. That is a common misconception. Never, during
+ curl's development, have we intended curl to replace wget or compete on its
+ market. Curl is targeted at single-shot file transfers.
+
+ Curl is not a web site mirroring program. If you want to use curl to mirror
+ something: fine, go ahead and write a script that wraps around curl to make
+ it reality (like curlmirror.pl does).
+
+ Curl is not an FTP site mirroring program. Sure, get and send FTP with curl
+ but if you want systematic and sequential behavior you should write a
+ script (or write a new program that interfaces libcurl) and do it.
+
+ Curl is not a PHP tool, even though it works perfectly well when used from
+ or with PHP (when using the PHP/CURL module).
+
+ Curl is not a program for a single operating system. Curl exists, compiles,
+ builds and runs under a wide range of operating systems, including all
+ modern Unixes (and a bunch of older ones too), Windows, Amiga, BeOS, OS/2,
+ OS X, QNX etc.
+
+ 1.4 When will you make curl do XXXX ?
+
+ We love suggestions of what to change in order to make curl and libcurl
+ better. We do however believe in a few rules when it comes to the future of
+ curl:
+
+ * Curl -- the command line tool -- is to remain a non-graphical command line
+ tool. If you want GUIs or fancy scripting capabilities, you should look
+ for another tool that uses libcurl.
+
+ * We do not add things to curl that other small and available tools already
+ do very fine at the side. Curl's output is fine to pipe into another
+ program or redirect to another file for the next program to interpret.
+
+ * We focus on protocol related issues and improvements. If you wanna do more
+ magic with the supported protocols than curl currently does, chances are
+ big we will agree. If you wanna add more protocols, we may very well
+ agree.
+
+ * If you want someone else to make all the work while you wait for us to
+ implement it for you, that is not a very friendly attitude. We spend a
+ considerable time already on maintaining and developing curl. In order to
+ get more out of us, you should consider trading in some of your time and
+ efforts in return.
+
+ * If you write the code, chances are bigger that it will get into curl
+ faster.
+
+ 1.5 Who makes curl?
+
+ curl and libcurl are not made by any single individual. Daniel Stenberg is
+ project leader and main developer, but other persons' submissions are
+ important and crucial. Anyone can contribute and post their changes and
+ improvements and have them inserted in the main sources (of course on the
+ condition that developers agree on that the fixes are good).
+
+ The full list of all contributors is found in the docs/THANKS file.
+
+ curl is developed by a community, with Daniel at the wheel.
+
+ 1.6 What do you get for making curl?
+
+ Project cURL is entirely free and open. No person gets paid for developing
+ (lib)curl on full or even part time. We do this voluntarily on our spare
+ time. Occasionally companies pay individual developers to work on curl, but
+ that's up to each company and developer. It is not controlled by nor
+ supervised in any way by the project.
+
+ We still get help from companies. Haxx provides web site, bandwidth, mailing
+ lists etc and sourceforge.net hosts project services we take advantage from,
+ like the bug tracker. Also again, some companies have sponsored certain
+ parts of the development in the past and I hope some will continue to do so
+ in the future.
+
+ If you want to support our project, consider a donation or a banner-program
+ or even better: by helping us coding, documenting, testing etc.
+
+ 1.7 What about CURL from curl.com?
+
+ During the summer 2001, curl.com was busy advertising their client-side
+ programming language for the web, named CURL.
+
+ We are in no way associated with curl.com or their CURL programming
+ language.
+
+ Our project name curl has been in effective use since 1998. We were not the
+ first computer related project to use the name "curl" and do not claim any
+ first-hand rights to the name.
+
+ We recognize that we will be living in parallel with curl.com and wish them
+ every success.
+
+ 1.8 I have a problem who do I mail?
+
+ Please do not mail any single individual unless you really need to. Keep
+ curl-related questions on a suitable mailing list. All available mailing
+ lists are listed in the MANUAL document and online at
+ http://curl.haxx.se/mail/
+
+ Keeping curl-related questions and discussions on mailing lists allows
+ others to join in and help, to share their ideas, contribute their
+ suggestions and spread their wisdom. Keeping discussions on public mailing
+ lists also allows for others to learn from this (both current and future
+ users thanks to the web based archives of the mailing lists), thus saving us
+ from having to repeat ourselves even more. Thanks for respecting this.
+
+ If you have found or simply suspect a security problem in curl or libcurl,
+ mail curl-security at haxx.se (closed list of receivers, mails are not
+ disclosed) and tell. Then we can produce a fix in a timely manner before the
+ flaw is announced to the world, thus lessen the impact the problem will have
+ on existing users.
+
+ 1.9 Where do I buy commercial support for curl?
+
+ curl is fully open source. It means you can hire any skilled engineer to fix
+ your curl-related problems.
+
+ We list available alternatives on the curl web site:
+ http://curl.haxx.se/support.html
+
+ 1.10 How many are using curl?
+
+ It is impossible to tell.
+
+ We don't know how many users that knowingly have installed and use curl.
+
+ We don't know how many users that use curl without knowing that they are in
+ fact using it.
+
+ We don't know how many users that downloaded or installed curl and then
+ never use it.
+
+ Some facts to use as input to the math:
+
+ curl packages are downloaded from the curl.haxx.se and mirrors over a
+ million times per year. curl is installed by default with most Linux
+ distributions. curl is installed by default with Mac OS X. curl and libcurl
+ as used by numerous applications that include libcurl binaries in their
+ distribution packages (like Adobe Acrobat Reader and Google Earth).
+
+ More than a hundred known named companies use curl in commercial
+ environments and products and more than a hundred known named open source
+ projects depend on (lib)curl.
+
+ In a poll on the curl web site mid-2005, more than 50% of the 300+ answers
+ estimated a user base of one million users or more.
+
+ In March 2005, the "Linux Counter project" estimated a total Linux user base
+ of some 29 millions, while Netcraft detected some 4 million "active" Linux
+ based web servers. A guess is that a fair amount of these Linux
+ installations have curl installed.
+
+ The Debian project maintains statistics on packages installed by people
+ who have voluntarily run their package counting application. In mid-2010,
+ libcurl3 was installed on over 55000 such systems (62% of reporting systems)
+ and was one of the 320 most popular installed packages (out of about 107000
+ possible packages).
+
+ All this taken together, there is no doubt that there are millions of
+ (lib)curl users.
+
+ http://curl.haxx.se/docs/companies.html
+ http://curl.haxx.se/docs/programs.html
+ http://curl.haxx.se/libcurl/using/apps.html
+ http://counter.li.org/estimates.php
+ http://news.netcraft.com/archives/2005/03/14/fedora_makes_rapid_progress.html
+ http://qa.debian.org/popcon.php?package=curl
+
+ 1.11 Why don't you update ca-bundle.crt
+
+ The ca-bundle.crt file that used to be bundled with curl was very outdated
+ (it being last modified year 2000 should tell) and must be replaced with a
+ much more modern and up-to-date version by anyone who wants to verify peers
+ anyway. It is no longer provided, the last curl release that shipped it was
+ curl 7.18.0.
+
+ In the cURL project we've decided not to attempt to keep this file updated
+ (or even present anymore) since deciding what to add to a ca cert bundle is
+ an undertaking we've not been ready to accept, and the one we can get from
+ Mozilla is perfectly fine so there's no need to duplicate that work.
+
+ Today, with many services performed over HTTPS, every operating system
+ should come with a default ca cert bundle that can be deemed somewhat
+ trustworthy and that collection (if reasonably updated) should be deemed to
+ be a lot better than a private curl version.
+
+ If you want the most recent collection of ca certs that Mozilla Firefox
+ uses, we recommend that you extract the collection yourself from Mozilla
+ Firefox (by running 'make ca-bundle), or by using our online service setup
+ for this purpose: http://curl.haxx.se/docs/caextract.html
+
+ 1.12 I have a problem who can I chat with?
+
+ There's a bunch of friendly people hanging out in the #curl channel on the
+ IRC network irc.freenode.net. If you're polite and nice, chances are big
+ that you can get -- or provide -- help instantly.
+
+ 1.13 curl's ECCN number?
+
+ The US government restricts exports of software that contains or uses
+ cryptography. When doing so, the Export Control Classification Number (ECCN)
+ is used to identify the level of export control etc.
+
+ ASF gives a good explanation at http://www.apache.org/dev/crypto.html
+
+ We believe curl's number might be ECCN 5D002, another possibility is
+ 5D992. It seems necessary to write them, asking to confirm.
+
+ Comprehensible explanations of the meaning of such numbers and how to
+ obtain them (resp.) are here
+
+ http://www.bis.doc.gov/licensing/exportingbasics.htm
+ http://www.bis.doc.gov/licensing/do_i_needaneccn.html
+
+ An incomprehensible description of the two numbers above is here
+ http://www.access.gpo.gov/bis/ear/pdf/ccl5-pt2.pdf
+
+ 1.14 How do I submit my patch?
+
+ When you have made a patch or a change of whatever sort, and want to submit
+ that to the project, there are a few different ways we prefer:
+
+ o send a patch to the curl-library mailing list. We're many subscribers
+ there and there are lots of people who can review patches, comment on them
+ and "receive" them properly.
+
+ o if your patch changes or fixes a bug, you can also opt to submit a bug
+ report in the bug tracker and attach your patch there. There are less
+ people involved there.
+
+ Lots of more details are found in the CONTRIBUTE and INTERNALS docs.
+
+
+2. Install Related Problems
+
+ 2.1 configure doesn't find OpenSSL even when it is installed
+
+ This may be because of several reasons.
+
+ 2.1.1 native linker doesn't find openssl
+
+ Affected platforms:
+ Solaris (native cc compiler)
+ HPUX (native cc compiler)
+ SGI IRIX (native cc compiler)
+ SCO UNIX (native cc compiler)
+
+ When configuring curl, I specify --with-ssl. OpenSSL is installed in
+ /usr/local/ssl Configure reports SSL in /usr/local/ssl, but fails to find
+ CRYPTO_lock in -lcrypto
+
+ Cause: The cc for this test places the -L/usr/local/ssl/lib AFTER
+ -lcrypto, so ld can't find the library. This is due to a bug in the GNU
+ autoconf tool.
+
+ Workaround: Specifying "LDFLAGS=-L/usr/local/ssl/lib" in front of
+ ./configure places the -L/usr/local/ssl/lib early enough in the command
+ line to make things work
+
+ 2.1.2 only the libssl lib is missing
+
+ If all include files and the libcrypto lib is present, with only the
+ libssl being missing according to configure, this is mostly likely because
+ a few functions are left out from the libssl.
+
+ If the function names missing include RSA or RSAREF you can be certain
+ that this is because libssl requires the RSA and RSAREF libs to build.
+
+ See the INSTALL file section that explains how to add those libs to
+ configure. Make sure that you remove the config.cache file before you
+ rerun configure with the new flags.
+
+ 2.2 Does curl work/build with other SSL libraries?
+
+ Curl has been written to use OpenSSL, GnuTLS, yassl, NSS or PolarSSL,
+ although there should not be many problems using a different library. If
+ anyone does "port" curl to use a different SSL library, we are of course
+ very interested in getting the patch!
+
+ 2.3 Where can I find a copy of LIBEAY32.DLL?
+
+ That is an OpenSSL binary built for Windows.
+
+ Curl uses OpenSSL to do the SSL stuff. The LIBEAY32.DLL is what curl needs
+ on a windows machine to do https://. Check out the curl web site to find
+ accurate and up-to-date pointers to recent OpenSSL DLLs and other binary
+ packages.
+
+ 2.4 Does curl support SOCKS (RFC 1928) ?
+
+ Yes, SOCKS 4 and 5 are supported.
+
+
+3. Usage problems
+
+ 3.1 curl: (1) SSL is disabled, https: not supported
+
+ If you get this output when trying to get anything from a https:// server,
+ it means that the configure script couldn't find all libs and include files
+ it requires for SSL to work. If the configure script fails to find them,
+ curl is simply built without SSL support.
+
+ To get the https:// support into a curl that was previously built but that
+ reports that https:// is not supported, you should dig through the document
+ and logs and check out why the configure script doesn't find the SSL libs
+ and/or include files.
+
+ Also, check out the other paragraph in this FAQ labelled "configure doesn't
+ find OpenSSL even when it is installed".
+
+ 3.2 How do I tell curl to resume a transfer?
+
+ Curl supports resumed transfers both ways on both FTP and HTTP.
+
+ Try the -C option.
+
+ 3.3 Why doesn't my posting using -F work?
+
+ You can't simply use -F or -d at your choice. The web server that will
+ receive your post assumes one of the formats. If the form you're trying to
+ "fake" sets the type to 'multipart/form-data', then and only then you must
+ use the -F type. In all the most common cases, you should use -d which then
+ causes a posting with the type 'application/x-www-form-urlencoded'.
+
+ This is described in some detail in the MANUAL and TheArtOfHttpScripting
+ documents, and if you don't understand it the first time, read it again
+ before you post questions about this to the mailing list. Also, try reading
+ through the mailing list archives for old postings and questions regarding
+ this.
+
+ 3.4 How do I tell curl to run custom FTP commands?
+
+ You can tell curl to perform optional commands both before and/or after a
+ file transfer. Study the -Q/--quote option.
+
+ Since curl is used for file transfers, you don't use curl to just perform
+ FTP commands without transferring anything. Therefore you must always specify
+ a URL to transfer to/from even when doing custom FTP commands.
+
+ 3.5 How can I disable the Pragma: nocache header?
+
+ You can change all internally generated headers by adding a replacement with
+ the -H/--header option. By adding a header with empty contents you safely
+ disable that one. Use -H "Pragma:" to disable that specific header.
+
+ 3.6 Does curl support ASP, XML, XHTML or HTML version Y?
+
+ To curl, all contents are alike. It doesn't matter how the page was
+ generated. It may be ASP, PHP, Perl, shell-script, SSI or plain
+ HTML-files. There's no difference to curl and it doesn't even know what kind
+ of language that generated the page.
+
+ See also item 3.14 regarding javascript.
+
+ 3.7 Can I use curl to delete/rename a file through FTP?
+
+ Yes. You specify custom FTP commands with -Q/--quote.
+
+ One example would be to delete a file after you have downloaded it:
+
+ curl -O ftp://download.com/coolfile -Q '-DELE coolfile'
+
+ or rename a file after upload:
+
+ curl -T infile ftp://upload.com/dir/ -Q "-RNFR infile" -Q "-RNTO newname"
+
+ 3.8 How do I tell curl to follow HTTP redirects?
+
+ Curl does not follow so-called redirects by default. The Location: header
+ that informs the client about this is only interpreted if you're using the
+ -L/--location option. As in:
+
+ curl -L http://redirector.com
+
+ Not all redirects are HTTP ones, see 4.14
+
+ 3.9 How do I use curl in my favorite programming language?
+
+ There exist many language interfaces/bindings for curl that integrates it
+ better with various languages. If you are fluid in a script language, you
+ may very well opt to use such an interface instead of using the command line
+ tool.
+
+ Find out more about which languages that support curl directly, and how to
+ install and use them, in the libcurl section of the curl web site:
+ http://curl.haxx.se/libcurl/
+
+ In October 2009, there were interfaces available for the following
+ languages: Ada95, Basic, C, C++, Ch, Cocoa, D, Dylan, Eiffel, Euphoria,
+ Ferite, Gambas, glib/GTK+, Haskell, ILE/RPG, Java, Lisp, Lua, Mono, .NET,
+ Object-Pascal, O'Caml, Pascal, Perl, PHP, PostgreSQL, Python, R, Rexx, Ruby,
+ Scheme, S-Lang, Smalltalk, SP-Forth, SPL, Tcl, Visual Basic, Visual FoxPro,
+ Q, wxwidgets and XBLite. By the time you read this, additional ones may have
+ appeared!
+
+ 3.10 What about SOAP, WebDAV, XML-RPC or similar protocols over HTTP?
+
+ Curl adheres to the HTTP spec, which basically means you can play with *any*
+ protocol that is built on top of HTTP. Protocols such as SOAP, WEBDAV and
+ XML-RPC are all such ones. You can use -X to set custom requests and -H to
+ set custom headers (or replace internally generated ones).
+
+ Using libcurl is of course just as fine and you'd just use the proper
+ library options to do the same.
+
+ 3.11 How do I POST with a different Content-Type?
+
+ You can always replace the internally generated headers with -H/--header.
+ To make a simple HTTP POST with text/xml as content-type, do something like:
+
+ curl -d "datatopost" -H "Content-Type: text/xml" [URL]
+
+ 3.12 Why do FTP specific features over HTTP proxy fail?
+
+ Because when you use a HTTP proxy, the protocol spoken on the network will
+ be HTTP, even if you specify a FTP URL. This effectively means that you
+ normally can't use FTP specific features such as FTP upload and FTP quote
+ etc.
+
+ There is one exception to this rule, and that is if you can "tunnel through"
+ the given HTTP proxy. Proxy tunneling is enabled with a special option (-p)
+ and is generally not available as proxy admins usually disable tunneling to
+ other ports than 443 (which is used for HTTPS access through proxies).
+
+ 3.13 Why does my single/double quotes fail?
+
+ To specify a command line option that includes spaces, you might need to
+ put the entire option within quotes. Like in:
+
+ curl -d " with spaces " url.com
+
+ or perhaps
+
+ curl -d ' with spaces ' url.com
+
+ Exactly what kind of quotes and how to do this is entirely up to the shell
+ or command line interpreter that you are using. For most unix shells, you
+ can more or less pick either single (') or double (") quotes. For
+ Windows/DOS prompts I believe you're forced to use double (") quotes.
+
+ Please study the documentation for your particular environment. Examples in
+ the curl docs will use a mix of both these ones as shown above. You must
+ adjust them to work in your environment.
+
+ Remember that curl works and runs on more operating systems than most single
+ individuals have ever tried.
+
+ 3.14 Does curl support Javascript or PAC (automated proxy config)?
+
+ Many web pages do magic stuff using embedded Javascript. Curl and libcurl
+ have no built-in support for that, so it will be treated just like any other
+ contents.
+
+ .pac files are a netscape invention and are sometimes used by organizations
+ to allow them to differentiate which proxies to use. The .pac contents is
+ just a Javascript program that gets invoked by the browser and that returns
+ the name of the proxy to connect to. Since curl doesn't support Javascript,
+ it can't support .pac proxy configuration either.
+
+ Some workarounds usually suggested to overcome this Javascript dependency:
+
+ - Depending on the Javascript complexity, write up a script that
+ translates it to another language and execute that.
+
+ - Read the Javascript code and rewrite the same logic in another language.
+
+ - Implement a Javascript interpreter, people have successfully used the
+ Mozilla Javascript engine in the past.
+
+ - Ask your admins to stop this, for a static proxy setup or similar.
+
+ 3.15 Can I do recursive fetches with curl?
+
+ No. curl itself has no code that performs recursive operations, such as
+ those performed by wget and similar tools.
+
+ There exist wrapper scripts with that functionality (for example the
+ curlmirror perl script), and you can write programs based on libcurl to do
+ it, but the command line tool curl itself cannot.
+
+ 3.16 What certificates do I need when I use SSL?
+
+ There are three different kinds of "certificates" to keep track of when we
+ talk about using SSL-based protocols (HTTPS or FTPS) using curl or libcurl.
+
+ - Client certificate. The server you communicate may require that you can
+ provide this in order to prove that you actually are who you claim to be.
+ If the server doesn't require this, you don't need a client certificate.
+
+ A client certificate is always used together with a private key, and the
+ private key has a pass phrase that protects it.
+
+ - Server certificate. The server you communicate with has a server
+ certificate. You can and should verify this certificate to make sure that
+ you are truly talking to the real server and not a server impersonating
+ it.
+
+ - Certificate Authority certificate ("CA cert"). You often have several CA
+ certs in a CA cert bundle that can be used to verify a server certificate
+ that was signed by one of the authorities in the bundle. curl does not
+ come with a CA cert bundle but most curl installs provide one. You can
+ also override the default.
+
+ The server certificate verification process is made by using a Certificate
+ Authority certificate ("CA cert") that was used to sign the server
+ certificate. Server certificate verification is enabled by default in curl
+ and libcurl and is often the reason for problems as explained in FAQ entry
+ 4.12 and the SSLCERTS document
+ (http://curl.haxx.se/docs/sslcerts.html). Server certificates that are
+ "self-signed" or otherwise signed by a CA that you do not have a CA cert
+ for, cannot be verified. If the verification during a connect fails, you
+ are refused access. You then need to explicitly disable the verification
+ to connect to the server.
+
+ 3.17 How do I list the root dir of an FTP server?
+
+ There are two ways. The way defined in the RFC is to use an encoded slash
+ in the first path part. List the "/tmp" dir like this:
+
+ curl ftp://ftp.sunet.se/%2ftmp/
+
+ or the not-quite-kosher-but-more-readable way, by simply starting the path
+ section of the URL with a slash:
+
+ curl ftp://ftp.sunet.se//tmp/
+
+ 3.18 Can I use curl to send a POST/PUT and not wait for a response?
+
+ No.
+
+ But you could easily write your own program using libcurl to do such stunts.
+
+ 3.19 How do I get HTTP from a host using a specific IP address?
+
+ For example, you may be trying out a web site installation that isn't yet in
+ the DNS. Or you have a site using multiple IP addresses for a given host
+ name and you want to address a specific one out of the set.
+
+ Set a custom Host: header that identifies the server name you want to reach
+ but use the target IP address in the URL:
+
+ curl --header "Host: www.example.com" http://127.0.0.1/
+
+
+4. Running Problems
+
+ 4.1 Problems connecting to SSL servers.
+
+ It took a very long time before we 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).
+
+ There have also been examples where the remote server didn't like the SSLv2
+ request and instead you had to force curl to use SSLv3 with -3/--sslv3.
+
+ 4.2 Why do I get problems when I use & or % in the URL?
+
+ In general unix shells, the & symbol is treated specially and when used, it
+ runs the specified command in the background. To safely send the & as a part
+ of a URL, you should quote the entire URL by using single (') or double (")
+ quotes around it. Similar problems can also occur on some shells with other
+ characters, including ?*!$~(){}<>\|;`. When in doubt, quote the URL.
+
+ An example that would invoke a remote CGI that uses &-symbols could be:
+
+ curl 'http://www.altavista.com/cgi-bin/query?text=yes&q=curl'
+
+ In Windows, the standard DOS shell treats the %-symbol specially and you
+ need to use TWO %-symbols for each single one you want to use in the URL.
+
+ Also note that if you want the literal %-symbol to be part of the data you
+ pass in a POST using -d/--data you must encode it as '%25' (which then also
+ needs the %-symbol doubled on Windows machines).
+
+ 4.3 How can I use {, }, [ or ] to specify multiple URLs?
+
+ Because those letters have a special meaning to the shell, and to be used in
+ a URL specified to curl you must quote them.
+
+ An example that downloads two URLs (sequentially) would do:
+
+ curl '{curl,www}.haxx.se'
+
+ To be able to use those letters as actual parts of the URL (without using
+ them for the curl URL "globbing" system), use the -g/--globoff option:
+
+ curl -g 'www.site.com/weirdname[].html'
+
+ 4.4 Why do I get downloaded data even though the web page doesn't exist?
+
+ Curl asks remote servers for the page you specify. If the page doesn't exist
+ at the server, the HTTP protocol defines how the server should respond and
+ that means that headers and a "page" will be returned. That's simply how
+ HTTP works.
+
+ By using the --fail option you can tell curl explicitly to not get any data
+ if the HTTP return code doesn't say success.
+
+ 4.5 Why do I get return code XXX from a HTTP server?
+
+ RFC2616 clearly explains the return codes. This is a short transcript. Go
+ read the RFC for exact details:
+
+ 4.5.1 "400 Bad Request"
+
+ The request could not be understood by the server due to malformed
+ syntax. The client SHOULD NOT repeat the request without modifications.
+
+ 4.5.2 "401 Unauthorized"
+
+ The request requires user authentication.
+
+ 4.5.3 "403 Forbidden"
+
+ The server understood the request, but is refusing to fulfill it.
+ Authorization will not help and the request SHOULD NOT be repeated.
+
+ 4.5.4 "404 Not Found"
+
+ The server has not found anything matching the Request-URI. No indication
+ is given of whether the condition is temporary or permanent.
+
+ 4.5.5 "405 Method Not Allowed"
+
+ The method specified in the Request-Line is not allowed for the resource
+ identified by the Request-URI. The response MUST include an Allow header
+ containing a list of valid methods for the requested resource.
+
+ 4.5.6 "301 Moved Permanently"
+
+ If you get this return code and an HTML output similar to this:
+
+ <H1>Moved Permanently</H1> The document has moved <A
+ HREF="http://same_url_now_with_a_trailing_slash/">here</A>.
+
+ it might be because you request a directory URL but without the trailing
+ slash. Try the same operation again _with_ the trailing URL, or use the
+ -L/--location option to follow the redirection.
+
+ 4.6 Can you tell me what error code 142 means?
+
+ All curl error codes are described at the end of the man page, in the
+ section called "EXIT CODES".
+
+ Error codes that are larger than the highest documented error code means
+ that curl has exited due to a crash. This is a serious error, and we
+ appreciate a detailed bug report from you that describes how we could go
+ ahead and repeat this!
+
+ 4.7 How do I keep user names and passwords secret in Curl command lines?
+
+ This problem has two sides:
+
+ The first part is to avoid having clear-text passwords in the command line
+ so that they don't appear in 'ps' outputs and similar. That is easily
+ avoided by using the "-K" option to tell curl to read parameters from a file
+ or stdin to which you can pass the secret info. curl itself will also
+ attempt to "hide" the given password by blanking out the option - this
+ doesn't work on all platforms.
+
+ To keep the passwords in your account secret from the rest of the world is
+ not a task that curl addresses. You could of course encrypt them somehow to
+ at least hide them from being read by human eyes, but that is not what
+ anyone would call security.
+
+ Also note that regular HTTP (using Basic authentication) and FTP passwords
+ are sent in clear across the network. All it takes for anyone to fetch them
+ is to listen on the network. Eavesdropping is very easy. Use more secure
+ authentication methods (like Digest, Negotiate or even NTLM) or consider the
+ SSL-based alternatives HTTPS and FTPS.
+
+ 4.8 I found a bug!
+
+ It is not a bug if the behavior is documented. Read the docs first.
+ Especially check out the KNOWN_BUGS file, it may be a documented bug!
+
+ If it is a problem with a binary you've downloaded or a package for your
+ particular platform, try contacting the person who built the package/archive
+ you have.
+
+ If there is a bug, read the BUGS document first. Then report it as described
+ in there.
+
+ 4.9 Curl can't authenticate to the server that requires NTLM?
+
+ NTLM support requires OpenSSL, GnuTLS, NSS or Microsoft Windows libraries at
+ build-time to provide this functionality.
+
+ NTLM is a Microsoft proprietary protocol. Proprietary formats are evil. You
+ should not use such ones.
+
+ 4.10 My HTTP request using HEAD, PUT or DELETE doesn't work!
+
+ Many web servers allow or demand that the administrator configures the
+ server properly for these requests to work on the web server.
+
+ Some servers seem to support HEAD only on certain kinds of URLs.
+
+ To fully grasp this, try the documentation for the particular server
+ software you're trying to interact with. This is not anything curl can do
+ anything about.
+
+ 4.11 Why does my HTTP range requests return the full document?
+
+ Because the range may not be supported by the server, or the server may
+ choose to ignore it and return the full document anyway.
+
+ 4.12 Why do I get "certificate verify failed" ?
+
+ You invoke curl 7.10 or later to communicate on a https:// URL and get an
+ error back looking something similar to this:
+
+ curl: (35) SSL: error:14090086:SSL routines:
+ SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
+
+ Then it means that curl couldn't verify that the server's certificate was
+ good. Curl verifies the certificate using the CA cert bundle that comes with
+ the curl installation.
+
+ To disable the verification (which makes it act like curl did before 7.10),
+ use -k. This does however enable man-in-the-middle attacks.
+
+ If you get this failure but are having a CA cert bundle installed and used,
+ the server's certificate is not signed by one of the CA's in the bundle. It
+ might for example be self-signed. You then correct this problem by obtaining
+ a valid CA cert for the server. Or again, decrease the security by disabling
+ this check.
+
+ Details are also in the SSLCERTS file in the release archives, found online
+ here: http://curl.haxx.se/docs/sslcerts.html
+
+ 4.13 Why is curl -R on Windows one hour off?
+
+ During daylight savings time, when -R is used, curl will set a time that
+ appears one hour off. This happens due to a flaw in how Windows stores and
+ uses file modification times and it is not easily worked around. For details
+ on this problem, read this: http://www.codeproject.com/datetime/dstbugs.asp
+
+ 4.14 Redirects work in browser but not with curl!
+
+ curl supports HTTP redirects fine (see item 3.8). Browsers generally support
+ at least two other ways to perform directs that curl does not:
+
+ - Meta tags. You can write a HTML tag that will cause the browser to
+ redirect to another given URL after a certain time.
+
+ - Javascript. You can write a Javascript program embedded in a HTML page
+ that redirects the browser to another given URL.
+
+ There is no way to make curl follow these redirects. You must either
+ manually figure out what the page is set to do, or you write a script that
+ parses the results and fetches the new URL.
+
+ 4.15 FTPS doesn't work
+
+ curl supports FTPS (sometimes known as FTP-SSL) both implicit and explicit
+ mode.
+
+ When a URL is used that starts with FTPS://, curl assumes implicit SSL on
+ the control connection and will therefore immediately connect and try to
+ speak SSL. FTPS:// connections default to port 990.
+
+ To use explicit FTPS, you use a FTP:// URL and the --ftp-ssl option (or one
+ of its related flavours). This is the most common method, and the one
+ mandated by RFC4217. This kind of connection then of course uses the
+ standard FTP port 21 by default.
+
+ 4.16 My HTTP POST or PUT requests are slow!
+
+ libcurl makes all POST and PUT requests (except for POST requests with a
+ very tiny request body) use the "Expect: 100-continue" header. This header
+ allows the server to deny the operation early so that libcurl can bail out
+ already before having to send any data. This is useful in authentication
+ cases and others.
+
+ However, many servers don't implement the Expect: stuff properly and if the
+ server doesn't respond (positively) within 1 second libcurl will continue
+ and send off the data anyway.
+
+ You can disable libcurl's use of the Expect: header the same way you disable
+ any header, using -H / CURLOPT_HTTPHEADER, or by forcing it to use HTTP 1.0.
+
+ 4.17 Non-functional connect timeouts
+
+ In most Windows setups having a timeout longer than 21 seconds make no
+ difference, as it will only send 3 TCP SYN packets and no more. The second
+ packet sent three seconds after the first and the third six seconds after
+ the second. No more than three packets are sent, no matter how long the
+ timeout is set.
+
+ See option TcpMaxConnectRetransmissions on this page:
+ http://support.microsoft.com/?scid=kb%3Ben-us%3B175523&x=6&y=7
+
+ Also, even on non-Windows systems there may run a firewall or anti-virus
+ software or similar that accepts the connection but does not actually do
+ anything else. This will make (lib)curl to consider the connection connected
+ and thus the connect timeout won't trigger.
+
+ 4.18 file:// URLs containing drive letters (Windows, NetWare)
+
+ When using cURL to try to download a local file, one might use a URL
+ in this format:
+
+ file://D:/blah.txt
+
+ You'll find that even if D:\blah.txt does exist, cURL returns a 'file
+ not found' error.
+
+ According to RFC 1738 (http://www.faqs.org/rfcs/rfc1738.html),
+ file:// URLs must contain a host component, but it is ignored by
+ most implementations. In the above example, 'D:' is treated as the
+ host component, and is taken away. Thus, cURL tries to open '/blah.txt'.
+ If your system is installed to drive C:, that will resolve to 'C:\blah.txt',
+ and if that doesn't exist you will get the not found error.
+
+ To fix this problem, use file:// URLs with *three* leading slashes:
+
+ file:///D:/blah.txt
+
+ Alternatively, if it makes more sense, specify 'localhost' as the host
+ component:
+
+ file://localhost/D:/blah.txt
+
+ In either case, cURL should now be looking for the correct file.
+
+ 4.19 Why doesn't cURL return an error when the network cable is unplugged?
+
+ Unplugging the cable is not an error situation. The TCP/IP protocol stack
+ was designed to be fault tolerant, so even though there may be a physical
+ break somewhere the connection shouldn't be affected, just possibly
+ delayed. Eventually, the physical break will be fixed or the data will be
+ re-routed around the physical problem.
+
+ In such cases, the TCP/IP stack is responsible for detecting when the
+ network connection is irrevocably lost. Since with some protocols it is
+ perfectly legal for the client wait indefinitely for data, the stack may
+ never report a problem, and even when it does, it can take up to 20 minutes
+ for it to detect an issue. The curl option --keepalive-time enables
+ keep-alive support in the TCP/IP stack which makes it periodically probe the
+ connection to make sure it is still available to send data. That should
+ reliably detect any TCP/IP network failure.
+
+ But even that won't detect the network going down before the TCP/IP
+ connection is established (e.g. during a DNS lookup) or using protocols that
+ don't use TCP. To handle those situations, curl offers a number of timeouts
+ on its own. --speed-limit/--speed-time will abort if the data transfer rate
+ falls too low, and --connect-timeout and --max-time can be used to put an
+ overall timeout on the connection phase or the entire transfer.
+
+
+5. libcurl Issues
+
+ 5.1 Is libcurl thread-safe?
+
+ Yes.
+
+ We have written the libcurl code specifically adjusted for multi-threaded
+ programs. libcurl will use thread-safe functions instead of non-safe ones if
+ your system has such.
+
+ If you use a OpenSSL-powered libcurl in a multi-threaded environment, you
+ need to provide one or two locking functions:
+
+ http://www.openssl.org/docs/crypto/threads.html
+
+ If you use a GnuTLS-powered libcurl in a multi-threaded environment, you
+ need to provide locking function(s) for libgcrypt (which is used by GnuTLS
+ for the crypto functions).
+
+ http://www.gnu.org/software/gnutls/manual/html_node/Multi_002dthreaded-applications.html
+
+ No special locking is needed with a NSS-powered libcurl. NSS is thread-safe.
+
+ 5.2 How can I receive all data into a large memory chunk?
+
+ [ See also the examples/getinmemory.c source ]
+
+ You are in full control of the callback function that gets called every time
+ there is data received from the remote server. You can make that callback do
+ whatever you want. You do not have to write the received data to a file.
+
+ One solution to this problem could be to have a pointer to a struct that you
+ pass to the callback function. You set the pointer using the
+ CURLOPT_WRITEDATA option. Then that pointer will be passed to the callback
+ instead of a FILE * to a file:
+
+ /* imaginary struct */
+ struct MemoryStruct {
+ char *memory;
+ size_t size;
+ };
+
+ /* imaginary callback function */
+ size_t
+ WriteMemoryCallback(void *ptr, size_t size, size_t nmemb, void *data)
+ {
+ size_t realsize = size * nmemb;
+ struct MemoryStruct *mem = (struct MemoryStruct *)data;
+
+ mem->memory = (char *)realloc(mem->memory, mem->size + realsize + 1);
+ if (mem->memory) {
+ memcpy(&(mem->memory[mem->size]), ptr, realsize);
+ mem->size += realsize;
+ mem->memory[mem->size] = 0;
+ }
+ return realsize;
+ }
+
+ 5.3 How do I fetch multiple files with libcurl?
+
+ libcurl has excellent support for transferring multiple files. You should
+ just repeatedly set new URLs with curl_easy_setopt() and then transfer it
+ with curl_easy_perform(). The handle you get from curl_easy_init() is not
+ only reusable, but you're even encouraged to reuse it if you can, as that
+ will enable libcurl to use persistent connections.
+
+ 5.4 Does libcurl do Winsock initialization on win32 systems?
+
+ Yes, if told to in the curl_global_init() call.
+
+ 5.5 Does CURLOPT_WRITEDATA and CURLOPT_READDATA work on win32 ?
+
+ Yes, but you cannot open a FILE * and pass the pointer to a DLL and have
+ that DLL use the FILE * (as the DLL and the client application cannot access
+ each others' variable memory areas). If you set CURLOPT_WRITEDATA you must
+ also use CURLOPT_WRITEFUNCTION as well to set a function that writes the
+ file, even if that simply writes the data to the specified FILE *.
+ Similarly, if you use CURLOPT_READDATA you must also specify
+ CURLOPT_READFUNCTION.
+
+ 5.6 What about Keep-Alive or persistent connections?
+
+ curl and libcurl have excellent support for persistent connections when
+ transferring several files from the same server. Curl will attempt to reuse
+ connections for all URLs specified on the same command line/config file, and
+ libcurl will reuse connections for all transfers that are made using the
+ same libcurl handle.
+
+ 5.7 Link errors when building libcurl on Windows!
+
+ You need to make sure that your project, and all the libraries (both static
+ and dynamic) that it links against, are compiled/linked against the same run
+ time library.
+
+ This is determined by the /MD, /ML, /MT (and their corresponding /M?d)
+ options to the command line compiler. /MD (linking against MSVCRT dll) seems
+ to be the most commonly used option.
+
+ When building an application that uses the static libcurl library, you must
+ add -DCURL_STATICLIB to your CFLAGS. Otherwise the linker will look for
+ dynamic import symbols. If you're using Visual Studio, you need to instead
+ add CURL_STATICLIB in the "Preprocessor Definitions" section.
+
+ If you get linker error like "unknown symbol __imp__curl_easy_init ..." you
+ have linked against the wrong (static) library. If you want to use the
+ libcurl.dll and import lib, you don't need any extra CFLAGS, but use one of
+ the import libraries below. These are the libraries produced by the various
+ lib/Makefile.* files:
+
+ Target: static lib. import lib for libcurl*.dll.
+ -----------------------------------------------------------
+ MingW: libcurl.a libcurldll.a
+ MSVC (release): libcurl.lib libcurl_imp.lib
+ MSVC (debug): libcurld.lib libcurld_imp.lib
+ Borland: libcurl.lib libcurl_imp.lib
+
+
+ 5.8 libcurl.so.X: open failed: No such file or directory
+
+ This is an error message you might get when you try to run a program linked
+ with a shared version of libcurl and your run-time linker (ld.so) couldn't
+ find the shared library named libcurl.so.X. (Where X is the number of the
+ current libcurl ABI, typically 3 or 4).
+
+ You need to make sure that ld.so finds libcurl.so.X. You can do that
+ multiple ways, and it differs somewhat between different operating systems,
+ but they are usually:
+
+ * Add an option to the linker command line that specify the hard-coded path
+ the run-time linker should check for the lib (usually -R)
+
+ * Set an environment variable (LD_LIBRARY_PATH for example) where ld.so
+ should check for libs
+
+ * Adjust the system's config to check for libs in the directory where you've
+ put the dir (like Linux's /etc/ld.so.conf)
+
+ 'man ld.so' and 'man ld' will tell you more details
+
+ 5.9 How does libcurl resolve host names?
+
+ libcurl supports a large a number of different name resolve functions. One
+ of them is picked at build-time and will be used unconditionally. Thus, if
+ you want to change name resolver function you must rebuild libcurl and tell
+ it to use a different function.
+
+ - The non-ipv6 resolver that can use one out of four host name resolve calls
+ (depending on what your system supports):
+
+ A - gethostbyname()
+ B - gethostbyname_r() with 3 arguments
+ C - gethostbyname_r() with 5 arguments
+ D - gethostbyname_r() with 6 arguments
+
+ - The ipv6-resolver that uses getaddrinfo()
+
+ - The c-ares based name resolver that uses the c-ares library for resolves.
+ Using this offers asynchronous name resolves but it currently has no IPv6
+ support.
+
+ - The threaded resolver (default option on Windows). It uses:
+
+ A - gethostbyname() on plain ipv4 hosts
+ B - getaddrinfo() on ipv6-enabled hosts
+
+ Also note that libcurl never resolves or reverse-lookups addresses given as
+ pure numbers, such as 127.0.0.1 or ::1.
+
+ 5.10 How do I prevent libcurl from writing the response to stdout?
+
+ libcurl provides a default built-in write function that writes received data
+ to stdout. Set the CURLOPT_WRITEFUNCTION to receive the data, or possibly
+ set CURLOPT_WRITEDATA to a different FILE * handle.
+
+ 5.11 How do I make libcurl not receive the whole HTTP response?
+
+ You make the write callback (or progress callback) return an error and
+ libcurl will then abort the transfer.
+
+ 5.12 Can I make libcurl fake or hide my real IP address?
+
+ No. libcurl operates on a higher level than so. Besides, faking IP address
+ would imply sending IP packages with a made-up source address, and then you
+ normally get a problem with intercepting the packages sent back as they
+ would then not be routed to you!
+
+ If you use a proxy to access remote sites, the sites will not see your local
+ IP address but instead the address of the proxy.
+
+ Also note that on many networks NATs or other IP-munging techniques are used
+ that makes you see and use a different IP address locally than what the
+ remote server will see you coming from.
+
+ 5.13 How do I stop an ongoing transfer?
+
+ There are several ways, but none of them are instant. There is no function
+ you can call from another thread or similar that will stop it immediately.
+ Instead you need to make sure that one of the callbacks you use return an
+ appropriate value that will stop the transfer.
+
+ Suitable callbacks that you can do this with include the progress callback,
+ the read callback and the write callback.
+
+ If you're using the multi interface, you also stop a transfer by removing
+ the particular easy handle from the multi stack.
+
+ 5.14 Using C++ non-static functions for callbacks?
+
+ libcurl is a C library, it doesn't know anything about C++ member functions.
+
+ You can overcome this "limitation" with a relative ease using a static
+ member function that is passed a pointer to the class:
+
+ // f is the pointer to your object.
+ static YourClass::staticFunction(void *buffer, size_t sz, size_t n, void *f)
+ {
+ // Call non-static member function.
+ static_cast<YourClass*>(f)->nonStaticFunction();
+ }
+
+ // This is how you pass pointer to the static function:
+ curl_easy_setopt(hcurl, CURLOPT_WRITEFUNCTION, YourClass:staticFunction);
+ curl_easy_setopt(hcurl, CURLOPT_WRITEDATA, this);
+
+ 5.15 How do I get an FTP directory listing?
+
+ If you end the FTP URL you request with a slash, libcurl will provide you
+ with a directory listing of that given directory. You can also set
+ CURLOPT_CUSTOMREQUEST to alter what exact listing command libcurl would use
+ to list the files.
+
+ The follow-up question that tend to follow the previous one, is how a
+ program is supposed to parse the directory listing. How does it know what's
+ a file and what's a dir and what's a symlink etc. The harsh reality is that
+ FTP provides no such fine and easy-to-parse output. The output format FTP
+ servers respond to LIST commands are entirely at the server's own liking and
+ the NLST output doesn't reveal any types and in many cases don't even
+ include all the directory entries. Also, both LIST and NLST tend to hide
+ unix-style hidden files (those that start with a dot) by default so you need
+ to do "LIST -a" or similar to see them.
+
+ The application thus needs to parse the LIST output. One such existing
+ list parser is available at http://cr.yp.to/ftpparse.html Versions of
+ libcurl since 7.21.0 also provide the ability to specify a wildcard to
+ download multiple files from one FTP directory.
+
+
+6. License Issues
+
+ Curl and libcurl are released under a MIT/X derivate license. The license is
+ very liberal and should not impose a problem for your project. This section
+ is just a brief summary for the cases we get the most questions. (Parts of
+ this section was much enhanced by Bjorn Reese.)
+
+ We are not lawyers and this is not legal advice. You should probably consult
+ one if you want true and accurate legal insights without our prejudice.
+
+ 6.1 I have a GPL program, can I use the libcurl library?
+
+ Yes!
+
+ Since libcurl may be distributed under the MIT/X derivate license, it can be
+ used together with GPL in any software.
+
+ 6.2 I have a closed-source program, can I use the libcurl library?
+
+ Yes!
+
+ libcurl does not put any restrictions on the program that uses the library.
+
+ 6.3 I have a BSD licensed program, can I use the libcurl library?
+
+ Yes!
+
+ libcurl does not put any restrictions on the program that uses the library.
+
+ 6.4 I have a program that uses LGPL libraries, can I use libcurl?
+
+ Yes!
+
+ The LGPL license doesn't clash with other licenses.
+
+ 6.5 Can I modify curl/libcurl for my program and keep the changes secret?
+
+ Yes!
+
+ The MIT/X derivate license practically allows you to do almost anything with
+ the sources, on the condition that the copyright texts in the sources are
+ left intact.
+
+ 6.6 Can you please change the curl/libcurl license to XXXX?
+
+ No.
+
+ We have carefully picked this license after years of development and
+ discussions and a large amount of people have contributed with source code
+ knowing that this is the license we use. This license puts the restrictions
+ we want on curl/libcurl and it does not spread to other programs or
+ libraries that use it. It should be possible for everyone to use libcurl or
+ curl in their projects, no matter what license they already have in use.
+
+ 6.7 What are my obligations when using libcurl in my commercial apps?
+
+ Next to none. All you need to adhere to is the MIT-style license (stated in
+ the COPYING file) which basically says you have to include the copyright
+ notice in "all copies" and that you may not use the copyright holder's name
+ when promoting your software.
+
+ You do not have to release any of your source code.
+
+ You do not have to reveal or make public any changes to the libcurl source
+ code.
+
+ You do not have to reveal or make public that you are using libcurl within
+ your app.
+
+ As can be seen here: http://curl.haxx.se/docs/companies.html and
+ elsewhere, more and more companies are discovering the power
+ of libcurl and take advantage of it even in commercial environments.
+
+
+7. PHP/CURL Issues
+
+ 7.1 What is PHP/CURL?
+
+ The module for PHP that makes it possible for PHP programs to access curl-
+ functions from within PHP.
+
+ In the cURL project we call this module PHP/CURL to differentiate it from
+ curl the command line tool and libcurl the library. The PHP team however
+ does not refer to it like this (for unknown reasons). They call it plain
+ CURL (often using all caps) or sometimes ext/curl, but both cause much
+ confusion to users which in turn gives us a higher question load.
+
+ 7.2 Who write PHP/CURL?
+
+ PHP/CURL is a module that comes with the regular PHP package. It depends and
+ uses libcurl, so you need to have libcurl installed properly first before
+ PHP/CURL can be used. PHP/CURL was initially written by Sterling Hughes.
+
+ 7.3 Can I perform multiple requests using the same handle?
+
+ Yes - at least in PHP version 4.3.8 and later (this has been known to not
+ work in earlier versions, but the exact version when it started to work is
+ unknown to me).
+
+ After a transfer, you just set new options in the handle and make another
+ transfer. This will make libcurl to re-use the same connection if it can.
diff --git a/docs/FEATURES b/docs/FEATURES
new file mode 100644
index 0000000..32589e1
--- /dev/null
+++ b/docs/FEATURES
@@ -0,0 +1,136 @@
+ _ _ ____ _
+ ___| | | | _ \| |
+ / __| | | | |_) | |
+ | (__| |_| | _ <| |___
+ \___|\___/|_| \_\_____|
+
+FEATURES
+
+curl tool
+ - config file support
+ - multiple URLs in a single command line
+ - range "globbing" support: [0-13], {one,two,three}
+ - multiple file upload on a single command line
+ - custom maximum transfer rate
+ - redirectable stderr
+
+libcurl supports
+ - full URL syntax with no length limit
+ - custom maximum download time
+ - custom least download speed acceptable
+ - custom output result after completion
+ - guesses protocol from host name unless specified
+ - uses .netrc
+ - progress bar/time specs while downloading
+ - "standard" proxy environment variables support
+ - compiles on win32 (reported builds on 40+ operating systems)
+ - selectable network interface for outgoing traffic
+ - IPv6 support on unix and Windows
+ - persistant connections
+ - socks5 support
+ - supports user name + password in proxy environment variables
+ - operations through proxy "tunnel" (using CONNECT)
+ - supports large files (>2GB and >4GB) both upload/download
+ - replacable memory functions (malloc, free, realloc, etc)
+ - asynchronous name resolving (*6)
+ - both a push and a pull style interface
+
+HTTP
+ - HTTP/1.1 compliant (optionally uses 1.0)
+ - GET
+ - PUT
+ - HEAD
+ - POST
+ - Pipelining
+ - multipart formpost (RFC1867-style)
+ - authentication: Basic, Digest, NTLM(*9), GSS-Negotiate/Negotiate(*3) and
+ SPNEGO (*4) to server and proxy
+ - resume (both GET and PUT)
+ - follow redirects
+ - maximum amount of redirects to follow
+ - custom HTTP request
+ - cookie get/send fully parsed
+ - reads/writes the netscape cookie file format
+ - custom headers (replace/remove internally generated headers)
+ - custom user-agent string
+ - custom referer string
+ - range
+ - proxy authentication
+ - time conditions
+ - via http-proxy
+ - retrieve file modification date
+ - Content-Encoding support for deflate and gzip
+ - "Transfer-Encoding: chunked" support for "uploads"
+
+HTTPS (*1)
+ - (all the HTTP features)
+ - using client certificates
+ - verify server certificate
+ - via http-proxy
+ - select desired encryption
+ - force usage of a specific SSL version (SSLv2(*7), SSLv3 or TLSv1)
+
+FTP
+ - download
+ - authentication
+ - kerberos4 (*5), kerberos5 (*3)
+ - active/passive using PORT, EPRT, PASV or EPSV
+ - 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
+ - custom ftp commands (before and/or after the transfer)
+ - simple "range" support
+ - via http-proxy
+ - all operations can be tunneled through a http-proxy
+ - customizable to retrieve file modification date
+ - no dir depth limit
+
+FTPS (*1)
+ - implicit ftps:// support that use SSL on both connections
+ - explicit "AUTH TSL" and "AUTH SSL" usage to "upgrade" plain ftp://
+ connection to use SSL for both or one of the connections
+
+SCP (*8)
+ - both password and public key auth
+
+SFTP (*8)
+ - both password and public key auth
+ - with custom commands sent before/after the transfer
+
+TFTP
+ - download / upload
+
+TELNET
+ - connection negotiation
+ - custom telnet options
+ - stdin/stdout I/O
+
+LDAP (*2)
+ - full LDAP URL support
+
+DICT
+ - extended DICT URL support
+
+FILE
+ - URL support
+ - "uploads"
+ - resume
+
+FOOTNOTES
+=========
+
+ *1 = requires OpenSSL, GnuTLS, NSS, yassl or PolarSSL
+ *2 = requires OpenLDAP
+ *3 = requires a GSSAPI-compliant library, such as Heimdal or similar.
+ *4 = requires FBopenssl
+ *5 = requires a krb4 library, such as the MIT one or similar.
+ *6 = requires c-ares
+ *7 = requires OpenSSL or NSS, as GnuTLS only supports SSLv3 and TLSv1
+ *8 = requires libssh2
+ *9 = requires OpenSSL, GnuTLS, NSS or yassl
diff --git a/docs/HISTORY b/docs/HISTORY
new file mode 100644
index 0000000..e04fb53
--- /dev/null
+++ b/docs/HISTORY
@@ -0,0 +1,244 @@
+ _ _ ____ _
+ ___| | | | _ \| |
+ / __| | | | |_) | |
+ | (__| |_| | _ <| |___
+ \___|\___/|_| \_\_____|
+
+ How cURL Became Like This
+
+
+In the second half of 1997, Daniel Stenberg came up with the idea to make
+currency-exchange calculations available to Internet Relay Chat (IRC)
+users. All the necessary data are published on the Web; he just needed to
+automate their retrieval.
+
+Daniel simply adopted an existing command-line open-source tool, httpget, that
+Brazilian Rafael Sagula had written. After a few minor adjustments, it did
+just what he needed.
+
+Soon, he found currencies on a GOPHER site, so support for that had to go in,
+and not before long FTP download support was added as well. The name of the
+project was changed to urlget to better fit what it actually did now, since
+the http-only days were already passed.
+
+The project slowly grew bigger. When upload capabilities were added and the
+name once again was misleading, a second name change was made and on March 20,
+1998 curl 4 was released. (The version numbering from the previous names was
+kept.)
+
+(Unrelated to this project a company called Curl Corporation registered a US
+trademark on the name "CURL" on May 18 1998. That company had then already
+registered the curl.com domain back in November of the previous year. All this
+was revealed to us much later.)
+
+SSL support was added, powered by the SSLeay library.
+
+August 1998, first announcement of curl on freshmeat.net.
+
+October 1998, with the curl 4.9 release and the introduction of cookie
+support, curl was no longer released under the GPL license. Now we're at 4000
+lines of code, we switched over to the MPL license to restrict the effects of
+"copyleft".
+
+November 1998, configure script and reported successful compiles on several
+major operating systems. The never-quite-understood -F option was added and
+curl could now simulate quite a lot of a browser. TELNET support was added.
+
+Curl 5 was released in December 1998 and introduced the first ever curl man
+page. People started making Linux RPM packages out of it.
+
+January 1999, DICT support added.
+
+OpenSSL took over where SSLeay was abandoned.
+
+May 1999, first Debian package.
+
+August 1999, LDAP:// and FILE:// support added. The curl web site gets 1300
+visits weekly.
+
+Released curl 6.0 in September. 15000 lines of code.
+
+December 28 1999, added the project on Sourceforge and started using its
+services for managing the project.
+
+Spring 2000, major internal overhaul to provide a suitable library interface.
+The first non-beta release was named 7.1 and arrived in August. This offered
+the easy interface and turned out to be the beginning of actually getting
+other software and programs to get based on and powered by libcurl. Almost
+20000 lines of code.
+
+August 2000, the curl web site gets 4000 visits weekly.
+
+The PHP guys adopted libcurl already the same month, when the first ever third
+party libcurl binding showed up. CURL has been a supported module in PHP since
+the release of PHP 4.0.2. This would soon get followers. More than 16
+different bindings exist at the time of this writing.
+
+September 2000, kerberos4 support was added.
+
+In November 2000 started the work on a test suite for curl. It was later
+re-written from scratch again. The libcurl major SONAME number was set to 1.
+
+January 2001, Daniel released curl 7.5.2 under a new license again: MIT (or
+MPL). The MIT license is extremely liberal and can be used combined with GPL
+in other projects. This would finally put an end to the "complaints" from
+people involved in GPLed projects that previously were prohibited from using
+libcurl while it was released under MPL only. (Due to the fact that MPL is
+deemed "GPL incompatible".)
+
+curl supports HTTP 1.1 starting with the release of 7.7, March 22 2001. This
+also introduced libcurl's ability to do persistent connections. 24000 lines of
+code. The libcurl major SONAME number was bumped to 2 due to this overhaul.
+
+The first experimental ftps:// support was added in March 2001.
+
+August 2001. curl is bundled in Mac OS X, 10.1. It was already becoming more
+and more of a standard utility of Linux distributions and a regular in the BSD
+ports collections. The curl web site gets 8000 visits weekly. Curl Corporation
+contacted Daniel to discuss "the name issue". After Daniel's reply, they have
+never since got in touch again.
+
+September 2001, libcurl 7.9 introduces cookie jar and curl_formadd(). During
+the forthcoming 7.9.x releases, we introduced the multi interface slowly and
+without much whistles.
+
+June 2002, the curl web site gets 13000 visits weekly. curl and libcurl is
+35000 lines of code. Reported successful compiles on more than 40 combinations
+of CPUs and operating systems.
+
+To estimate number of users of the curl tool or libcurl library is next to
+impossible. Around 5000 downloaded packages each week from the main site gives
+a hint, but the packages are mirrored extensively, bundled with numerous OS
+distributions and otherwise retrieved as part of other software.
+
+September 2002, with the release of curl 7.10 it is released under the MIT
+license only.
+
+January 2003. Started working on the distributed curl tests. The autobuilds.
+
+February 2003, the curl site averages at 20000 visits weekly. At any given
+moment, there's an average of 3 people browsing the curl.haxx.se site.
+
+Multiple new authentication schemes are supported: Digest (May), NTLM (June)
+and Negotiate (June).
+
+November 2003: curl 7.10.8 is released. 45000 lines of code. ~55000 unique
+visitors to the curl.haxx.se site. Five official web mirrors.
+
+December 2003, full-fledged SSL for FTP is supported.
+
+January 2004: curl 7.11.0 introduced large file support.
+
+June 2004:
+
+ curl 7.12.0 introduced IDN support. 10 official web mirrors.
+
+ This release bumped the major SONAME to 3 due to the removal of the
+ curl_formparse() function
+
+August 2004:
+ Curl and libcurl 7.12.1
+
+ Public curl release number: 82
+ Releases counted from the very beginning: 109
+ Available command line options: 96
+ Available curl_easy_setopt() options: 120
+ Number of public functions in libcurl: 36
+ Amount of public web site mirrors: 12
+ Number of known libcurl bindings: 26
+
+April 2005:
+
+ GnuTLS can now optionally be used for the secure layer when curl is built.
+
+September 2005:
+
+ TFTP support was added.
+
+ More than 100,000 unique visitors of the curl web site. 25 mirrors.
+
+December 2005:
+
+ security vulnerability: libcurl URL Buffer Overflow
+
+January 2006:
+
+ We dropped support for Gopher. We found bugs in the implementation that
+ turned out having been introduced years ago, so with the conclusion that
+ nobody had found out in all this time we removed it instead of fixing it.
+
+March 2006:
+
+ security vulnerability: libcurl TFTP Packet Buffer Overflow
+
+April 2006:
+
+ Added the multi_socket() API
+
+September 2006:
+
+ The major SONAME number for libcurl was bumped to 4 due to the removal of
+ ftp third party transfer support.
+
+November 2006:
+
+ Added SCP and SFTP support
+
+February 2007:
+
+ Added support for the Mozilla NSS library to do the SSL/TLS stuff
+
+July 2007:
+
+ security vulnerability: libcurl GnuTLS insufficient cert verification
+
+November 2008:
+
+ Command line options: 128
+ curl_easy_setopt() options: 158
+ Public functions in libcurl: 58
+ Known libcurl bindings: 37
+ Contributors: 683
+
+ 145,000 unique visitors. >100 GB downloaded.
+
+March 2009:
+
+ security vulnerability: libcurl Arbitrary File Access
+
+August 2009:
+
+ security vulnerability: libcurl embedded zero in cert name
+
+December 2009:
+
+ Added support for IMAP, POP3 and SMTP
+
+January 2010:
+
+ Added support for RTSP
+
+February 2010:
+
+ security vulnerability: libcurl data callback excessive length
+
+March 2010:
+
+ The project switched over to use git instead of CVS for source code control
+
+May 2010:
+
+ Added support for RTMP
+
+ Added support for PolarSSL to do the SSL/TLS stuff
+
+August 2010:
+
+ Public curl releases: 117
+ Command line options: 138
+ curl_easy_setopt() options: 180
+ Public functions in libcurl: 58
+ Known libcurl bindings: 39
+ Contributors: 808
+
+ Gopher support added (re-added actually)
diff --git a/docs/INSTALL b/docs/INSTALL
new file mode 100644
index 0000000..9a5844f
--- /dev/null
+++ b/docs/INSTALL
@@ -0,0 +1,996 @@
+ _ _ ____ _
+ ___| | | | _ \| |
+ / __| | | | |_) | |
+ | (__| |_| | _ <| |___
+ \___|\___/|_| \_\_____|
+
+ How To Compile
+
+Installing Binary Packages
+==========================
+
+ Lots of people download binary distributions of curl and libcurl. This
+ document does not describe how to install curl or libcurl using such a
+ binary package. This document describes how to compile, build and install
+ curl and libcurl from source code.
+
+UNIX
+====
+ A normal unix installation is made in three or four steps (after you've
+ unpacked the source archive):
+
+ ./configure
+ make
+ make test (optional)
+ make install
+
+ You probably need to be root when doing the last command.
+
+ If you have checked out the sources from the git repository, read the
+ GIT-INFO on how to proceed.
+
+ Get a full listing of all available configure options by invoking it like:
+
+ ./configure --help
+
+ If you want to install curl in a different file hierarchy than /usr/local,
+ you need to specify that already when running configure:
+
+ ./configure --prefix=/path/to/curl/tree
+
+ If you happen to have write permission in that directory, you can do 'make
+ install' without being root. An example of this would be to make a local
+ install in your own home directory:
+
+ ./configure --prefix=$HOME
+ make
+ make install
+
+ The configure script always tries to find a working SSL library unless
+ explicitly told not to. If you have OpenSSL installed in the default search
+ path for your compiler/linker, you don't need to do anything special. If
+ you have OpenSSL installed in /usr/local/ssl, you can run configure like:
+
+ ./configure --with-ssl
+
+ If you have OpenSSL installed somewhere else (for example, /opt/OpenSSL)
+ and you have pkg-config installed, set the pkg-config path first, like this:
+
+ env PKG_CONFIG_PATH=/opt/OpenSSL/lib/pkgconfig ./configure --with-ssl
+
+ Without pkg-config installed, use this:
+
+ ./configure --with-ssl=/opt/OpenSSL
+
+ If you insist on forcing a build without SSL support, even though you may
+ have OpenSSL installed in your system, you can run configure like this:
+
+ ./configure --without-ssl
+
+ If you have OpenSSL installed, but with the libraries in one place and the
+ header files somewhere else, you 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 you have shared SSL libs installed in a directory where your run-time
+ linker doesn't find them (which usually causes configure failures), you can
+ provide the -R option to ld on some operating systems to set a hard-coded
+ path to the run-time linker:
+
+ env LDFLAGS=-R/usr/local/ssl/lib ./configure --with-ssl
+
+ MORE OPTIONS
+ ------------
+
+ 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
+
+ To force a static library compile, disable the shared library creation
+ by running configure like:
+
+ ./configure --disable-shared
+
+ To tell the configure script to skip searching for thread-safe functions,
+ add an option like:
+
+ ./configure --disable-thread
+
+ To build curl with kerberos4 support enabled, curl requires the krb4 libs
+ and headers installed. You can then use a set of options to tell
+ configure where those are:
+
+ --with-krb4-includes[=DIR] Specify location of kerberos4 headers
+ --with-krb4-libs[=DIR] Specify location of kerberos4 libs
+ --with-krb4[=DIR] where to look for Kerberos4
+
+ In most cases, /usr/athena is the install prefix and then it works with
+
+ ./configure --with-krb4=/usr/athena
+
+ If you're a curl developer and use gcc, you might want to enable more
+ debug options with the --enable-debug option.
+
+ curl can be built to use a whole range of libraries to provide various
+ useful services, and configure will try to auto-detect a decent
+ default. But if you want to alter it, you can select how to deal with
+ each individual library.
+
+ To build with GnuTLS support instead of OpenSSL for SSL/TLS, note that
+ you need to use both --without-ssl and --with-gnutls.
+
+ To build with yassl support instead of OpenSSL or GnuTLS, you must build
+ yassl with its OpenSSL emulation enabled and point to that directory root
+ with configure --with-ssl.
+
+ To build with NSS support instead of OpenSSL for SSL/TLS, note that
+ you need to use both --without-ssl and --with-nss.
+
+ To build with PolarSSL support instead of OpenSSL for SSL/TLS, note that
+ you need to use both --without-ssl and --with-polarssl.
+
+ To get GSSAPI support, build with --with-gssapi and have the MIT or
+ Heimdal Kerberos 5 packages installed.
+
+ To get support for SCP and SFTP, build with --with-libssh2 and have
+ libssh2 0.16 or later installed.
+
+ SPECIAL CASES
+ -------------
+ Some versions of uClibc require configuring with CPPFLAGS=-D_GNU_SOURCE=1
+ to get correct large file support.
+
+ The Open Watcom C compiler on Linux requires configuring with the variables:
+
+ ./configure CC=owcc AR="$WATCOM/binl/wlib" AR_FLAGS=-q \
+ RANLIB=/bin/true STRIP="$WATCOM/binl/wstrip" CFLAGS=-Wextra
+
+
+Win32
+=====
+
+ Building Windows DLLs and C run-time (CRT) linkage issues
+ ---------------------------------------------------------
+
+ As a general rule, building a DLL with static CRT linkage is highly
+ discouraged, and intermixing CRTs in the same app is something to
+ avoid at any cost.
+
+ Reading and comprehension of Microsoft Knowledge Base articles
+ KB94248 and KB140584 is a must for any Windows developer. Especially
+ important is full understanding if you are not going to follow the
+ advice given above.
+
+ KB94248 - How To Use the C Run-Time
+ http://support.microsoft.com/kb/94248/en-us
+
+ KB140584 - How to link with the correct C Run-Time (CRT) library
+ http://support.microsoft.com/kb/140584/en-us
+
+ KB190799 - Potential Errors Passing CRT Objects Across DLL Boundaries
+ http://msdn.microsoft.com/en-us/library/ms235460
+
+ If your app is misbehaving in some strange way, or it is suffering
+ from memory corruption, before asking for further help, please try
+ first to rebuild every single library your app uses as well as your
+ app using the debug multithreaded dynamic C runtime.
+
+ MingW32
+ -------
+
+ Make sure that MinGW32's bin dir is in the search path, for example:
+
+ set PATH=c:\mingw32\bin;%PATH%
+
+ then run 'mingw32-make mingw32' in the root dir. There are other
+ make targets available to build libcurl with more features, use:
+ 'mingw32-make mingw32-zlib' to build with Zlib support;
+ 'mingw32-make mingw32-ssl-zlib' to build with SSL and Zlib enabled;
+ 'mingw32-make mingw32-ssh2-ssl-zlib' to build with SSH2, SSL, Zlib;
+ 'mingw32-make mingw32-ssh2-ssl-sspi-zlib' to build with SSH2, SSL, Zlib
+ and SSPI support.
+
+ If you have any problems linking libraries or finding header files, be sure
+ to verify that the provided "Makefile.m32" files use the proper paths, and
+ adjust as necessary. It is also possible to override these paths with
+ environment variables, for example:
+
+ set ZLIB_PATH=c:\zlib-1.2.3
+ set OPENSSL_PATH=c:\openssl-0.9.8k
+ set LIBSSH2_PATH=c:\libssh2-1.1
+
+ ATTENTION: if you want to build with libssh2 support you have to use latest
+ version 0.17 - previous versions will NOT work with 7.17.0 and later!
+ Use 'mingw32-make mingw32-ssh2-ssl-zlib' to build with SSH2 and SSL enabled.
+
+ It is now also possible to build with other LDAP SDKs than MS LDAP;
+ currently it is possible to build with native Win32 OpenLDAP, or with the
+ Novell CLDAP SDK. If you want to use these you need to set these vars:
+
+ set LDAP_SDK=c:\openldap
+ set USE_LDAP_OPENLDAP=1
+
+ or for using the Novell SDK:
+
+ set USE_LDAP_NOVELL=1
+
+ If you want to enable LDAPS support then set LDAPS=1.
+
+ - optional MingW32-built OpenlDAP SDK available from:
+ http://www.gknw.net/mirror/openldap/
+ - optional recent Novell CLDAP SDK available from:
+ http://developer.novell.com/ndk/cldap.htm
+
+
+ Cygwin
+ ------
+
+ 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 toward the end.
+
+ Run 'make'
+
+ Dev-Cpp
+ -------
+
+ See the separate INSTALL.devcpp file for details.
+
+ MSVC 6 caveats
+ --------------
+
+ If you use MSVC 6 it is required that you use the February 2003 edition PSDK:
+ http://www.microsoft.com/msdownload/platformsdk/sdkupdate/psdk-full.htm
+
+ Building any software with MSVC 6 without having PSDK installed is just
+ asking for trouble down the road once you have released it, you might notice
+ the problems in the first corner or ten miles ahead, depending mostly on your
+ choice of static vs dynamic runtime and third party libraries. Anyone using
+ software built in such way will at some point regret having done so.
+
+ When someone uses MSVC 6 without PSDK he is using a compiler back from 1998.
+
+ If the compiler has been updated with the installation of a service pack as
+ those mentioned in http://support.microsoft.com/kb/194022 the compiler can be
+ safely used to read source code, translate and make it object code.
+
+ But, even with the service packs mentioned above installed, the resulting
+ software generated in such an environment will be using outdated system
+ header files and libraries with bugs and security issues which have already
+ been addressed and fixed long time ago.
+
+ In order to make use of the updated system headers and fixed libraries
+ for MSVC 6, it is required that 'Platform SDK', PSDK from now onwards,
+ is installed. The specific PSDK that must be installed for MSVC 6 is the
+ February 2003 edition, which is the latest one supporting the MSVC 6 compiler,
+ this PSDK is also known as 'Windows Server 2003 PSDK' and can be downloaded
+ from http://www.microsoft.com/msdownload/platformsdk/sdkupdate/psdk-full.htm
+
+ So, building curl and libcurl with MSVC 6 without PSDK is absolutely
+ discouraged for the benefit of anyone using software built in such
+ environment. And it will not be supported in any way, as we could just
+ be hunting bugs which have already been fixed way back in 2003.
+
+ When building with MSVC 6 we attempt to detect if PSDK is not being used,
+ and if this is the case the build process will fail hard with an error
+ message stating that the February 2003 PSDK is required. This is done to
+ protect the unsuspecting and avoid PEBKAC issues.
+
+ Additionally it might happen that a die hard MSVC hacker still wants to
+ build curl and libcurl with MSVC 6 without PSDK installed, even knowing
+ that this is a highly discouraged and unsupported build environment. In
+ this case the brave of heart will be able to build in such an environment
+ with the requisite of defining preprocessor symbol ALLOW_MSVC6_WITHOUT_PSDK
+ in lib/config-win32.h and knowing that LDAP and IPv6 support will be missing.
+
+ MSVC from command line
+ ----------------------
+
+ Run the 'vcvars32.bat' file to get a proper environment. The
+ vcvars32.bat file is part of the Microsoft development environment and
+ you may find it in 'C:\Program Files\Microsoft Visual Studio\vc98\bin'
+ provided that you installed Visual C/C++ 6 in the default directory.
+
+ Then run 'nmake vc' in curl's root directory.
+
+ If you want to compile with zlib support, you will need to build
+ zlib (http://www.gzip.org/zlib/) as well. Please read the zlib
+ documentation on how to compile zlib. Define the ZLIB_PATH environment
+ variable to the location of zlib.h and zlib.lib, for example:
+
+ set ZLIB_PATH=c:\zlib-1.2.3
+
+ Then run 'nmake vc-zlib' in curl's root directory.
+
+ If you want to compile with SSL support you need the OpenSSL package.
+ Please read the OpenSSL documentation on how to compile and install
+ the OpenSSL libraries. The build process of OpenSSL generates the
+ libeay32.dll and ssleay32.dll files in the out32dll subdirectory in
+ the OpenSSL home directory. OpenSSL static libraries (libeay32.lib,
+ ssleay32.lib, RSAglue.lib) are created in the out32 subdirectory.
+
+ Before running nmake define the OPENSSL_PATH environment variable with
+ the root/base directory of OpenSSL, for example:
+
+ set OPENSSL_PATH=c:\openssl-0.9.8k
+
+ Then run 'nmake vc-ssl' or 'nmake vc-ssl-dll' in curl's root
+ directory. 'nmake vc-ssl' will create a libcurl static and dynamic
+ libraries in the lib subdirectory, as well as a statically linked
+ version of curl.exe in the src subdirectory. This statically linked
+ version is a standalone executable not requiring any DLL at
+ runtime. This make method requires that you have the static OpenSSL
+ libraries available in OpenSSL's out32 subdirectory.
+ 'nmake vc-ssl-dll' creates the libcurl dynamic library and
+ links curl.exe against libcurl and OpenSSL dynamically.
+ This executable requires libcurl.dll and the OpenSSL DLLs
+ at runtime.
+ Run 'nmake vc-ssl-zlib' to build with both ssl and zlib support.
+
+ MSVC 6 IDE
+ ----------
+
+ A minimal VC++ 6.0 reference workspace (vc6curl.dsw) is available with the
+ source distribution archive to allow proper building of the two included
+ projects, the libcurl library and the curl tool.
+
+ 1) Open the vc6curl.dsw workspace with MSVC6's IDE.
+ 2) Select 'Build' from top menu.
+ 3) Select 'Batch Build' from dropdown menu.
+ 4) Make sure that the eight project configurations are 'checked'.
+ 5) Click on the 'Build' button.
+ 6) Once the eight project configurations are built you are done.
+
+ Dynamic and static libcurl libraries are built in debug and release flavours,
+ and can be located each one in its own subdirectory, DLL-Debug, DLL-Release,
+ LIB-Debug and LIB-Release, all of them below the 'lib' subdirectory.
+
+ In the same way four curl executables are created, each using its respective
+ library. The resulting curl executables are located in its own subdirectory,
+ DLL-Debug, DLL-Release, LIB-Debug and LIB-Release, below the 'src' subdir.
+
+ These reference VC++ 6.0 configurations are generated using the dynamic CRT.
+
+ Intentionally, these reference VC++ 6.0 projects and configurations don't use
+ third party libraries, such as OpenSSL or Zlib, to allow proper compilation
+ and configuration for all new users without further requirements.
+
+ If you need something more 'involved' you might adjust them for your own use,
+ or explore the world of makefiles described above 'MSVC from command line'.
+
+ Borland C++ compiler
+ ---------------------
+
+ compile openssl
+
+ Make sure you include the paths to curl/include and openssl/inc32 in
+ your bcc32.cnf file
+
+ eg : -I"c:\Bcc55\include;c:\path_curl\include;c:\path_openssl\inc32"
+
+ Check to make sure that all of the sources listed in lib/Makefile.b32
+ are present in the /path_to_curl/lib directory. (Check the src
+ directory for missing ones.)
+
+ Make sure the environment variable "BCCDIR" is set to the install
+ location for the compiler eg : c:\Borland\BCC55
+
+ command line:
+ make -f /path_to_curl/lib/Makefile-ssl.b32
+
+ compile simplessl.c with appropriate links
+
+ c:\curl\docs\examples\> bcc32 -L c:\path_to_curl\lib\libcurl.lib
+ -L c:\borland\bcc55\lib\psdk\ws2_32.lib
+ -L c:\openssl\out32\libeay32.lib
+ -L c:\openssl\out32\ssleay32.lib
+ simplessl.c
+
+ OTHER MSVC IDEs
+ ---------------
+
+ 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.
+
+
+ Disabling Specific Protocols in Win32 builds
+ --------------------------------------------
+
+ The configure utility, unfortunately, is not available for the Windows
+ environment, therefore, you cannot use the various disable-protocol
+ options of the configure utility on this platform.
+
+ However, you can use the following defines to disable specific
+ protocols:
+
+ HTTP_ONLY disables all protocols except HTTP
+ CURL_DISABLE_FTP disables FTP
+ CURL_DISABLE_LDAP disables LDAP
+ CURL_DISABLE_TELNET disables TELNET
+ CURL_DISABLE_DICT disables DICT
+ CURL_DISABLE_FILE disables FILE
+ CURL_DISABLE_TFTP disables TFTP
+ CURL_DISABLE_HTTP disables HTTP
+
+ If you want to set any of these defines you have the following
+ possibilities:
+
+ - Modify lib/config-win32.h
+ - Modify lib/setup.h
+ - Modify lib/Makefile.vc6
+ - Add defines to Project/Settings/C/C++/General/Preprocessor Definitions
+ in the vc6libcurl.dsw/vc6libcurl.dsp Visual C++ 6 IDE project.
+
+
+ Important static libcurl usage note
+ -----------------------------------
+
+ When building an application that uses the static libcurl library, you must
+ add '-DCURL_STATICLIB' to your CFLAGS. Otherwise the linker will look for
+ dynamic import symbols.
+
+
+IBM OS/2
+========
+ Building under OS/2 is not much different from building under unix.
+ You need:
+
+ - emx 0.9d
+ - GNU make
+ - GNU patch
+ - ksh
+ - GNU bison
+ - GNU file utilities
+ - GNU sed
+ - autoconf 2.13
+
+ If you want to build with OpenSSL or OpenLDAP support, you'll need to
+ download those libraries, too. Dirk Ohme has done some work to port SSL
+ libraries under OS/2, but it looks like he doesn't care about emx. You'll
+ find his patches on: http://come.to/Dirk_Ohme
+
+ If during the linking you get an error about _errno being an undefined
+ symbol referenced from the text segment, you need to add -D__ST_MT_ERRNO__
+ in your definitions.
+
+ If everything seems to work fine but there's no curl.exe, you need to add
+ -Zexe to your linker flags.
+
+ If you're getting huge binaries, probably your makefiles have the -g in
+ CFLAGS.
+
+
+VMS
+===
+ (The VMS section is in whole contributed by the friendly Nico Baggus)
+
+ Curl seems to work with FTP & HTTP other protocols are not tested. (the
+ perl http/ftp testing server supplied as testing too cannot work on VMS
+ because vms has no concept of fork(). [ I tried to give it a whack, but
+ thats of no use.
+
+ SSL stuff has not been ported.
+
+ Telnet has about the same issues as for Win32. When the changes for Win32
+ are clear maybe they'll work for VMS too. The basic problem is that select
+ ONLY works for sockets.
+
+ Marked instances of fopen/[f]stat that might become a problem, especially
+ for non stream files. In this regard, the files opened for writing will be
+ created stream/lf and will thus be safe. Just keep in mind that non-binary
+ read/wring from/to files will have a records size limit of 32767 bytes
+ imposed.
+
+ Stat to get the size of the files is again only safe for stream files &
+ fixed record files without implied CC.
+
+ -- My guess is that only allowing access to stream files is the quickest
+ way to get around the most issues. Therefore all files need to to be
+ checked to be sure they will be stream/lf before processing them. This is
+ the easiest way out, I know. The reason for this is that code that needs to
+ report the filesize will become a pain in the ass otherwise.
+
+ Exit status.... Well we needed something done here,
+
+ VMS has a structured exist status:
+ | 3 | 2 | 1 | 0|
+ |1098|765432109876|5432109876543|210|
+ +----+------------+-------------+---+
+ |Ctrl| Facility | Error code |sev|
+ +----+------------+-------------+---+
+
+ With the Ctrl-bits an application can tell if part or the whole message has
+ already been printed from the program, DCL doesn't need to print it again.
+
+ Facility - basically the program ID. A code assigned to the program
+ the name can be fetched from external or internal message libraries
+ Error code - the err codes assigned by the application
+ Sev. - severity: Even = error, off = non error
+ 0 = Warning
+ 1 = Success
+ 2 = Error
+ 3 = Information
+ 4 = Fatal
+ <5-7> reserved.
+
+ This all presents itself with:
+ %<FACILITY>-<Sev>-<Errorname>, <Error message>
+
+ See also the src/curlmsg.msg file, it has the source for the messages In
+ src/main.c a section is devoted to message status values, the globalvalues
+ create symbols with certain values, referenced from a compiled message
+ file. Have all exit function use a exit status derived from a translation
+ table with the compiled message codes.
+
+ This was all compiled with:
+
+ Compaq C V6.2-003 on OpenVMS Alpha V7.1-1H2
+
+ So far for porting notes as of:
+ 13-jul-2001
+ N. Baggus
+
+
+QNX
+===
+ (This section was graciously brought to us by David Bentham)
+
+ As QNX is targeted for resource constrained environments, the QNX headers
+ set conservative limits. This includes the FD_SETSIZE macro, set by default
+ to 32. Socket descriptors returned within the CURL library may exceed this,
+ resulting in memory faults/SIGSEGV crashes when passed into select(..)
+ calls using fd_set macros.
+
+ A good all-round solution to this is to override the default when building
+ libcurl, by overriding CFLAGS during configure, example
+ # configure CFLAGS='-DFD_SETSIZE=64 -g -O2'
+
+
+RISC OS
+=======
+ The library can be cross-compiled using gccsdk as follows:
+
+ CC=riscos-gcc AR=riscos-ar RANLIB='riscos-ar -s' ./configure \
+ --host=arm-riscos-aof --without-random --disable-shared
+ make
+
+ where riscos-gcc and riscos-ar are links to the gccsdk tools.
+ You can then link your program with curl/lib/.libs/libcurl.a
+
+
+AmigaOS
+=======
+ (This section was graciously brought to us by Diego Casorran)
+
+ To build cURL/libcurl on AmigaOS just type 'make amiga' ...
+
+ What you need is: (not tested with others versions)
+
+ GeekGadgets / gcc 2.95.3 (http://www.geekgadgets.org/)
+
+ AmiTCP SDK v4.3 (http://www.aminet.net/comm/tcp/AmiTCP-SDK-4.3.lha)
+
+ Native Developer Kit (http://www.amiga.com/3.9/download/NDK3.9.lha)
+
+ As no ixemul.library is required you will be able to build it for
+ WarpOS/PowerPC (not tested by me), as well a MorphOS version should be
+ possible with no problems.
+
+ To enable SSL support, you need a OpenSSL native version (without ixemul),
+ you can find a precompiled package at http://amiga.sourceforge.net/OpenSSL/
+
+
+NetWare
+=======
+ To compile curl.nlm / libcurl.nlm you need:
+ - either any gcc / nlmconv, or CodeWarrior 7 PDK 4 or later.
+ - gnu make and awk running on the platform you compile on;
+ native Win32 versions can be downloaded from:
+ http://www.gknw.net/development/prgtools/
+ - recent Novell LibC SDK available from:
+ http://developer.novell.com/ndk/libc.htm
+ - or recent Novell CLib SDK available from:
+ http://developer.novell.com/ndk/clib.htm
+ - optional recent Novell CLDAP SDK available from:
+ http://developer.novell.com/ndk/cldap.htm
+ - optional zlib sources (static or dynamic linking with zlib.imp);
+ sources with NetWare Makefile can be obtained from:
+ http://www.gknw.net/mirror/zlib/
+ - optional OpenSSL sources (version 0.9.8 or later build with BSD sockets);
+ you can find precompiled packages at:
+ http://www.gknw.net/development/ossl/netware/
+ for CLIB-based builds OpenSSL 0.9.8h or later is required - earlier versions
+ dont support buildunf with CLIB BSD sockets.
+ - optional SSH2 sources (version 0.17 or later);
+
+ Set a search path to your compiler, linker and tools; on Linux make
+ sure that the var OSTYPE contains the string 'linux'; set the var
+ NDKBASE to point to the base of your Novell NDK; and then type
+ 'make netware' from the top source directory; other targets available
+ are 'netware-ssl', 'netware-ssl-zlib', 'netware-zlib' and 'netware-ares';
+ if you need other combinations you can control the build with the
+ environment variables WITH_SSL, WITH_ZLIB, WITH_ARES, WITH_SSH2, and
+ ENABLE_IPV6; you can set LINK_STATIC=1 to link curl.nlm statically.
+ By default LDAP support is enabled, however currently you will need a patch
+ in order to use the CLDAP NDK with BSD sockets (Novell Bug 300237):
+ http://www.gknw.net/test/curl/cldap_ndk/ldap_ndk.diff
+ I found on some Linux systems (RH9) that OS detection didn't work although
+ a 'set | grep OSTYPE' shows the var present and set; I simply overwrote it
+ with 'OSTYPE=linux-rh9-gnu' and the detection in the Makefile worked...
+ Any help in testing appreciated!
+ Builds automatically created 8 times a day from current git are here:
+ http://www.gknw.net/mirror/curl/autobuilds/
+ the status of these builds can be viewed at the autobuild table:
+ http://curl.haxx.se/auto/
+
+
+eCos
+====
+ curl does not use the eCos build system, so you must first build eCos
+ separately, then link curl to the resulting eCos library. Here's a sample
+ configure line to do so on an x86 Linux box targeting x86:
+
+ GCCLIB=`gcc -print-libgcc-file-name` && \
+ CFLAGS="-D__ECOS=1 -nostdinc -I$ECOS_INSTALL/include \
+ -I`dirname $GCCLIB`/include" \
+ LDFLAGS="-nostdlib -Wl,--gc-sections -Wl,-static \
+ -L$ECOS_INSTALL/lib -Ttarget.ld -ltarget" \
+ ./configure --host=i386 --disable-shared \
+ --without-ssl --without-zlib --disable-manual --disable-ldap
+
+ In most cases, eCos users will be using libcurl from within a custom
+ embedded application. Using the standard 'curl' executable from
+ within eCos means facing the limitation of the standard eCos C
+ startup code which does not allow passing arguments in main(). To
+ run 'curl' from eCos and have it do something useful, you will need
+ to either modify the eCos startup code to pass in some arguments, or
+ modify the curl application itself to retrieve its arguments from
+ some location set by the bootloader or hard-code them.
+
+ Something like the following patch could be used to hard-code some
+ arguments. The MTAB_ENTRY line mounts a RAM disk as the root filesystem
+ (without mounting some kind of filesystem, eCos errors out all file
+ operations which curl does not take to well). The next section synthesizes
+ some command-line arguments for curl to use, in this case to direct curl
+ to read further arguments from a file. It then creates that file on the
+ RAM disk and places within it a URL to download: a file: URL that
+ just happens to point to the configuration file itself. The results
+ of running curl in this way is the contents of the configuration file
+ printed to the console.
+
+--- src/main.c 19 Jul 2006 19:09:56 -0000 1.363
++++ src/main.c 24 Jul 2006 21:37:23 -0000
+@@ -4286,11 +4286,31 @@
+ }
+
+
++#ifdef __ECOS
++#include <cyg/fileio/fileio.h>
++MTAB_ENTRY( testfs_mte1,
++ "/",
++ "ramfs",
++ "",
++ 0);
++#endif
+
+ int main(int argc, char *argv[])
+ {
+ int res;
+ struct Configurable config;
++#ifdef __ECOS
++ char *args[] = {"ecos-curl", "-K", "curlconf.txt"};
++ FILE *f;
++ argc = sizeof(args)/sizeof(args[0]);
++ argv = args;
++
++ f = fopen("curlconf.txt", "w");
++ if (f) {
++ fprintf(f, "--url file:curlconf.txt");
++ fclose(f);
++ }
++#endif
+ memset(&config, 0, sizeof(struct Configurable));
+
+ config.errors = stderr; /* default errors to stderr */
+
+
+Minix
+=====
+ curl can be compiled on Minix 3 using gcc or ACK (starting with
+ ver. 3.1.3). Ensure that GNU gawk and bash are both installed and
+ available in the PATH.
+
+ ACK
+ ---
+ Increase the heap sizes of the compiler with the command:
+
+ binsizes xxl
+
+ then configure and compile curl with:
+
+ ./configure CC=cc LD=cc AR=/usr/bin/aal GREP=grep \
+ CPPFLAGS='-D_POSIX_SOURCE=1 -I/usr/local/include'
+ make
+ chmem =256000 src/curl
+
+ GCC
+ ---
+ Make sure gcc is in your PATH with the command:
+
+ export PATH=/usr/gnu/bin:$PATH
+
+ then configure and compile curl with:
+
+ ./configure CC=gcc AR=/usr/gnu/bin/gar GREP=grep
+ make
+ chmem =256000 src/curl
+
+
+Symbian OS
+==========
+ The Symbian OS port uses the Symbian build system to compile. From the
+ packages/Symbian/group/ directory, run:
+
+ bldmake bldfiles
+ abld build
+
+ to compile and install curl and libcurl using SBSv1. If your Symbian
+ SDK doesn't include support for P.I.P.S., you will need to contact
+ your SDK vendor to obtain that first.
+
+
+VxWorks
+========
+ Build for VxWorks is performed using cross compilation.
+ That means you build on Windows machine using VxWorks tools and
+ run the built image on the VxWorks device.
+
+ To build libcurl for VxWorks you need:
+
+ - CYGWIN (free, http://cygwin.com/)
+ - Wind River Workbench (commercial)
+
+ If you have CYGWIN and Workbench installed on you machine
+ follow after next steps:
+
+ 1. Open the Command Prompt window and change directory ('cd')
+ to the libcurl 'lib' folder.
+ 2. Add CYGWIN 'bin' folder to the PATH environment variable.
+ For example, type 'set PATH=C:/embedded/cygwin/bin;%PATH%'.
+ 3. Adjust environment variables defined in 'Environment' section
+ of the Makefile.vxworks file to point to your software folders.
+ 4. Build the libcurl by typing 'make -f ./Makefile.vxworks'
+
+ As a result the libcurl.a library should be created in the 'lib' folder.
+ To clean the build results type 'make -f ./Makefile.vxworks clean'.
+
+
+Android
+=======
+ See the build notes in the Android.mk file.
+
+
+CROSS COMPILE
+=============
+ (This section was graciously brought to us by Jim Duey, with additions by
+ Dan Fandrich)
+
+ Download and unpack the cURL package.
+
+ 'cd' to the new directory. (e.g. cd curl-7.12.3)
+
+ Set environment variables to point to the cross-compile toolchain and call
+ configure with any options you need. Be sure and specify the '--host' and
+ '--build' parameters at configuration time. The following script is an
+ example of cross-compiling for the IBM 405GP PowerPC processor using the
+ toolchain from MonteVista for Hardhat Linux.
+
+ (begin script)
+
+ #! /bin/sh
+
+ export PATH=$PATH:/opt/hardhat/devkit/ppc/405/bin
+ export CPPFLAGS="-I/opt/hardhat/devkit/ppc/405/target/usr/include"
+ export AR=ppc_405-ar
+ export AS=ppc_405-as
+ export LD=ppc_405-ld
+ export RANLIB=ppc_405-ranlib
+ export CC=ppc_405-gcc
+ export NM=ppc_405-nm
+
+ ./configure --target=powerpc-hardhat-linux \
+ --host=powerpc-hardhat-linux \
+ --build=i586-pc-linux-gnu \
+ --prefix=/opt/hardhat/devkit/ppc/405/target/usr/local \
+ --exec-prefix=/usr/local
+
+ (end script)
+
+ You may also need to provide a parameter like '--with-random=/dev/urandom'
+ to configure as it cannot detect the presence of a random number
+ generating device for a target system. The '--prefix' parameter
+ specifies where cURL will be installed. If 'configure' completes
+ successfully, do 'make' and 'make install' as usual.
+
+ In some cases, you may be able to simplify the above commands to as
+ little as:
+
+ ./configure --host=ARCH-OS
+
+
+REDUCING SIZE
+=============
+ There are a number of configure options that can be used to reduce the
+ size of libcurl for embedded applications where binary size is an
+ important factor. First, be sure to set the CFLAGS variable when
+ configuring with any relevant compiler optimization flags to reduce the
+ size of the binary. For gcc, this would mean at minimum the -Os option,
+ and potentially the -march=X and -mdynamic-no-pic options as well, e.g.
+
+ ./configure CFLAGS='-Os' ...
+
+ Note that newer compilers often produce smaller code than older versions
+ due to improved optimization.
+
+ Be sure to specify as many --disable- and --without- flags on the configure
+ command-line as you can to disable all the libcurl features that you
+ know your application is not going to need. Besides specifying the
+ --disable-PROTOCOL flags for all the types of URLs your application
+ will not use, here are some other flags that can reduce the size of the
+ library:
+
+ --disable-ares (disables support for the C-ARES DNS library)
+ --disable-cookies (disables support for HTTP cookies)
+ --disable-crypto-auth (disables HTTP cryptographic authentication)
+ --disable-ipv6 (disables support for IPv6)
+ --disable-manual (disables support for the built-in documentation)
+ --disable-proxy (disables support for HTTP and SOCKS proxies)
+ --disable-verbose (eliminates debugging strings and error code strings)
+ --enable-hidden-symbols (eliminates unneeded symbols in the shared library)
+ --without-libidn (disables support for the libidn DNS library)
+ --without-ssl (disables support for SSL/TLS)
+ --without-zlib (disables support for on-the-fly decompression)
+
+ The GNU compiler and linker have a number of options that can reduce the
+ size of the libcurl dynamic libraries on some platforms even further.
+ Specify them by providing appropriate CFLAGS and LDFLAGS variables on the
+ configure command-line:
+ CFLAGS="-ffunction-sections -fdata-sections" \
+ LDFLAGS="-Wl,-s -Wl,-Bsymbolic -Wl,--gc-sections"
+
+ Be sure also to strip debugging symbols from your binaries after
+ compiling using 'strip' (or the appropriate variant if cross-compiling).
+ If space is really tight, you may be able to remove some unneeded
+ sections of the shared library using the -R option to objcopy (e.g. the
+ .comment section).
+
+ Using these techniques it is possible to create a basic HTTP-only shared
+ libcurl library for i386 Linux platforms that is only 98 KiB in size, and
+ an FTP-only library that is 94 KiB in size (as of libcurl version 7.20.0,
+ using gcc 4.3.3).
+
+ You may find that statically linking libcurl to your application will
+ result in a lower total size than dynamically linking.
+
+ Note that the curl test harness can detect the use of some, but not all, of
+ the --disable statements suggested above. Use will cause tests relying on
+ those features to fail. The test harness can be manually forced to skip
+ the relevant tests by specifying certain key words on the runtests.pl
+ command line. Following is a list of appropriate key words:
+
+ --disable-cookies !cookies
+ --disable-crypto-auth !HTTP\ Digest\ auth !HTTP\ proxy\ Digest\ auth
+ --disable-manual !--manual
+ --disable-proxy !HTTP\ proxy !proxytunnel !SOCKS4 !SOCKS5
+
+
+PORTS
+=====
+ This is a probably incomplete list of known hardware and operating systems
+ that curl has been compiled for. If you know a system curl compiles and
+ runs on, that isn't listed, please let us know!
+
+ - Alpha DEC OSF 4
+ - Alpha Digital UNIX v3.2
+ - Alpha FreeBSD 4.1, 4.5
+ - Alpha Linux 2.2, 2.4
+ - Alpha NetBSD 1.5.2
+ - Alpha OpenBSD 3.0
+ - Alpha OpenVMS V7.1-1H2
+ - Alpha Tru64 v5.0 5.1
+ - AVR32 Linux
+ - ARM Android 1.5, 2.1
+ - ARM INTEGRITY
+ - ARM iPhone OS
+ - Cell Linux
+ - Cell Cell OS
+ - HP-PA HP-UX 9.X 10.X 11.X
+ - HP-PA Linux
+ - HP3000 MPE/iX
+ - MicroBlaze uClinux
+ - MIPS IRIX 6.2, 6.5
+ - MIPS Linux
+ - OS/400
+ - Pocket PC/Win CE 3.0
+ - Power AIX 3.2.5, 4.2, 4.3.1, 4.3.2, 5.1, 5.2
+ - PowerPC Darwin 1.0
+ - PowerPC INTEGRITY
+ - PowerPC Linux
+ - PowerPC Mac OS 9
+ - PowerPC Mac OS X
+ - SH4 Linux 2.6.X
+ - SH4 OS21
+ - SINIX-Z v5
+ - Sparc Linux
+ - Sparc Solaris 2.4, 2.5, 2.5.1, 2.6, 7, 8, 9, 10
+ - Sparc SunOS 4.1.X
+ - StrongARM (and other ARM) RISC OS 3.1, 4.02
+ - StrongARM/ARM7/ARM9 Linux 2.4, 2.6
+ - StrongARM NetBSD 1.4.1
+ - Symbian OS (P.I.P.S.) 9.x
+ - TPF
+ - Ultrix 4.3a
+ - UNICOS 9.0
+ - i386 BeOS
+ - i386 DOS
+ - i386 eCos 1.3.1
+ - i386 Esix 4.1
+ - i386 FreeBSD
+ - i386 HURD
+ - i386 Haiku OS
+ - i386 Linux 1.3, 2.0, 2.2, 2.3, 2.4, 2.6
+ - i386 MINIX 3.1
+ - i386 NetBSD
+ - i386 Novell NetWare
+ - i386 OS/2
+ - i386 OpenBSD
+ - i386 QNX 6
+ - i386 SCO unix
+ - i386 Solaris 2.7
+ - i386 Windows 95, 98, ME, NT, 2000, XP, 2003
+ - i486 ncr-sysv4.3.03 (NCR MP-RAS)
+ - ia64 Linux 2.3.99
+ - m68k AmigaOS 3
+ - m68k Linux
+ - m68k uClinux
+ - m68k OpenBSD
+ - m88k dg-dgux5.4R3.00
+ - s390 Linux
+ - x86_64 Linux
+ - XScale/PXA250 Linux 2.4
+ - Nios II uClinux
+
+Useful URLs
+===========
+
+c-ares http://daniel.haxx.se/projects/c-ares/license.html
+GNU GSS http://www.gnu.org/software/gss/
+GnuTLS http://www.gnu.org/software/gnutls/
+Heimdal http://www.pdc.kth.se/heimdal/
+libidn http://www.gnu.org/software/libidn/
+libssh2 http://www.libssh2.org
+MingW http://www.mingw.org
+MIT Kerberos http://web.mit.edu/kerberos/www/dist/
+NSS http://www.mozilla.org/projects/security/pki/nss/
+OpenLDAP http://www.openldap.org
+OpenSSL http://www.openssl.org
+PolarSSL http://polarssl.org
+yassl http://www.yassl.com/
+Zlib http://www.gzip.org/zlib/
diff --git a/docs/INSTALL.devcpp b/docs/INSTALL.devcpp
new file mode 100644
index 0000000..7f58e4b
--- /dev/null
+++ b/docs/INSTALL.devcpp
@@ -0,0 +1,302 @@
+DevCpp-Mingw Install & Compilation Sept 2005
+==================================
+
+Reference Emails available at curl@haxx.se:
+
+ Libcurl Install and Use Issues
+ Awaiting an Answer for Win 32 Install
+ res = curl_easy_perform(curl); Error
+ Makefile Issues
+
+
+Having previously done a thorough review of what was available that met my
+requirements under GPL, I settled for Libcurl as the software of choice for
+many reasons not the least of which was the support.
+
+Background
+----------
+
+This quest started when I innocently tried to incorporate the libcurl library
+into my simple source code. I figured that a few easy steps would accomplish
+this without major headaches. I had no idea that I would be facing an almost
+insurmountable challenge.
+
+The main problem lies in two areas. First the bulk of support for libcurl
+exists for a Unix/linux command line environments. This is of little help when
+it comes to Windows O/S.
+
+Secondly the help that does exist for the Windows O/S focused around mingw
+thru a command line argument environment.
+
+You may ask "Why is this a problem?"
+
+I'm using a Windows O/S with DevCpp. For those of you who are unfamiliar with
+DevCpp, it is a window shell GUI that replaces the command line environment
+for gcc. A definite improvement that I am unwilling to give up. However using
+DevCpp presented its own set of issues. Inadvertently I also made some
+careless errors such as compiling the 7.14 version of Makefile with an older
+version of source code. Thanks to Dan Fandrich for picking this up.
+
+I did eventually with the help of Daniel, Phillipe and others manage to
+implement successfully (the only mingw available version)
+curl-7.13.0-win32-ssl-devel-mingw32 into the DevCpp environment. Only the
+dynamic libcurl.dll libcurldll.a libraries worked. The static library which I
+was interested in did not. Furthermore when I tried to implement one of the
+examples included with the curl package (get info.c) it caused the executable
+to crash. Tracing the bug I found it in the code and function res =
+curl_easy_perform(curl);.
+
+At this point I had to make a choice as to whether invest my limited
+time-energy resource to fixing the bug or to compile the new version
+available. After searching the archives I found a very similar or the same bug
+reported from version 7.12x on. Daniel did inform me that he thought that this
+bug had been fixed with the latest version. So I proceeded to compile the
+latest SSL version where I faced other challenges.
+
+In order to make this process unremarkable for others using the same
+environment I decided to document the process so that others will find it
+routine. It would be a shame if newbies could not implement this excellent
+package for their use.
+
+I would like to thank the many others in this forum and in the DevCpp forum
+for their help. Without your help I may either have given up or it would have
+taken me many times longer to achieve success.
+
+The Cookbook Approach
+---------------------
+
+This discussion will be confined to a SSL static library compilation and
+installation. Limited mention and comments will be inserted where appropriate
+to help with non-SSL, dynamic libraries and executables.
+
+
+ Using Makefile from DevCpp to compile Libcurl libraries
+
+Preamble
+--------
+
+Using the latest version release - curl-7.14.0.tar.gz. Curl source code is
+platform independent. This simply means that the source code can be compiled
+for any Operating System (Linux/Unix Windows etc. and variations of thereof).
+
+The first thing to note is that inside curl-7.14.0 you will find two folders
+lib and src. Both contain Makefile.m32 (required for win mingw library or exe
+compilation) files which are different. The main difference between these two
+folders and the makefiles is that the src folder contents are used to compile
+an executable file(curl.exe) while the lib folder contents are used to compile
+a static (libcurl.a) and dynamic (libcurl.dll & libcurldll.a) file that can be
+used to compile libcurl with your own source code so that one can use and
+access all libcurl functions.
+
+Before we start please make sure that DevCpp is installed properly. In
+particular make sure you have no spaces in the name of any of the directories
+and subdirectories where DevCpp is installed. Failure to comply with the
+install instructions may produce erratic behaviour in DevCpp. For further info
+check the following sites
+
+http://aditsu.freeunixhost.com/dev-cpp-faq.html
+http://sourceforge.net/forum/message.php?msg_id=3252213
+
+As I have mentioned before I will confine this to the SSL Library compilations
+but the process is very similar for compilation of the executable - curl.exe;
+just substitute the src folder makefile in its stead.
+
+First use a text processor Notepad, or your own favourite text processor. To
+engage your favourite text processor, select Makefile.m32 click once with your
+mouse on file icon; icon turns blue, press the shift key and right-click on
+mouse, menu appears select "Open with", select your favourite text processor.
+
+Next read the contents of Makefile.m32. It includes instructions on its use.
+
+Method I - DOS Command Line
+---------------------------
+
+Note - The only reason I have included this method is that Method II which is
+the preferred method for compiling does not allow for the setting of option
+switches (e.g. SSL = 1 or SSL =0). At least that's what they tell me at the
+Dev-Cpp forum.
+
+1 - Make a copy of (D:\Dev-Cpp\bin) bin folder and name it "bin Original"
+place it in the Dev-Cpp installed directory (D:\Dev-Cpp\ for this example)
+
+2 - Copy the entire contents of the LIB folder of curl-7.14.0.tar.gz or zip
+version into the bin folder above (D:\Dev-Cpp\bin). The reason being is that
+the make.exe file resides in this folder. Make.exe will use - Makefile.m32,
+Makefile.inc, and the source code included in the lib folder to compile the
+source code. There is a PATH issue with make.exe that remains unresolved at
+least for me. Unless the entire source code to be compiled is placed entirely
+within the directory of make.exe an error message will be generated - "file
+xxxx.yyy not available".
+
+3- Go to Dev-Cpp\bin and double click on make .exe. You will see a DOS window
+quickly pop up and close very quickly. Not to worry! Please do not skip this
+step.
+
+4- Click on the start button\Programs\MS-DOS Prompt.Once the DOS Window is up
+Type the disk drive letter (e.g. E: ) engage the enter button. The path should
+automatically take you to the directory of the make.exe file.
+
+5- To compile the source code simply type at the DOS prompt make -f
+Makefile.m32 as per instructions contained in the Makefile.m32 file (use any
+text processor to read instructions). I don't believe that this makefile
+allows for the option of non SSL. Ignore any warnings.
+
+6- Collect and make copies of libcurl.a, libcurl.dll, libcurldll.a and any *.o
+compilations you might need in another directory outside of the bin directory
+as you will need this files shortly to set up libcurl for use with
+Dev-cpp. For most apps *.o is not required. Later on we will show what to do
+with these files.
+
+7- You are finished but before closing we need to do cleanup - erase the bin
+folder and rename the "bin Original" folder created in step 1 to bin.
+
+Note to compile a curl executable the process is probably similar but instead
+of using the LIB folder contents use the SRC folder contents and Makefiles in
+curl-7.14.0.tar.gz. File directories relative placements must be respected for
+compiling to take place successfully. This may not be possible with the PATH
+problem that make.exe experiences. If anyone has solved this PATH issue and
+please make sure it actually works on Win 9x/2000/XP before letting me
+know. Then please let me or Daniel in on the solution so that it can be
+included with these instructions. Thanks.
+
+or
+
+Method II - Dev-Cpp GUI
+-----------------------
+
+1- Copy the entire contents of the LIB folder of curl-7.14.0.tar.gz or zip
+version into any folder outside of (Dev-Cpp\bin).
+
+2- Drop the File/New/click on Project.
+
+3- New Project Dialogue box appears. Double click on the Static Library.
+
+4- Create Project Dialogue box appears. Select the LIB folder location to
+place and locate your Project File Name. Placing the Project File Name
+elsewhere may cause problems (PATH issue problem again).
+
+5- Drop down the Project/Project Options. Project Options Dialogue box
+appears.
+
+6- Select the Makefile tab in the Project Options Dialogue Box. Check Box -
+Use Custom Makefile. Click on the Folder icon at the extreme right of the
+Check Box. Select Makefile.m32 in the folder wherever you have placed the
+contents of the LIB Folder. Press OK and close the Dialogue Box.
+
+7- Drop the Menu Project/Click on Add to Project. Open File Dialogue Box
+appears. The Dialogue Box should open in the folder wherever you have placed
+the contents of the LIB Folder. If not go there.
+
+8- Select Crtl-A to select all files in the LIB folder. Click on open to add
+files and close box. Wait till all files are added. This may take 30 seconds
+or longer.
+
+9- Drop the Menu Execute/Click on Compile.
+
+10- That's it.
+
+
+ The following steps must be completed if Curl is to work properly
+ =================================================================
+
+LIB folder inclusions (*.a placement)
+-------------------------------------
+
+1- Refer to Method I - DOS Command Line point # 6 Take libcurl.a, libcurldll.a
+and install it in the directory C( or whichever drive Dev is installed)
+:\Dev-Cpp\lib.
+
+
+Include Folder
+--------------
+
+1- Create a new folder by the name of curl (do not change the name curl to
+some other name as it will cause major issues) in the directory
+C:\Dev-Cpp\include.
+
+2- Copy the entire contents of the curl folder of curl-7.14.0.tar.gz or zip
+ version into the newly created curl directory - C:\Dev-Cpp\include\curl.
+
+Links To Include And Lib Folder
+-------------------------------
+
+1- Drop the Menu - Tools\Compiler Options\Directories\Libraries. Make sure
+that C( or whichever drive Dev is installed):\DEV-CPP\lib is included.
+
+2- Next select the Menu - Tools\Compiler Options\Directories\C Includes. Make
+sure that C:\DEV-CPP\include and C:\Dev-Cpp\include\curl are included.
+
+3- Next select the Menu - Tools\Compiler Options\Directories\C++
+Includes. Make sure that C:\DEV-CPP\include and C:\Dev-Cpp\include\curl are
+included.
+
+Linker Links
+------------
+
+1- Drop the Menu - Tools\Compiler Options\Directories\Compiler.
+
+2- Make sure that the box "Add these commands to the linker command line" is
+checked.
+
+3- Include in the white space immediately below the box referred in 2 -lcurl
+-lws2_32.
+
+SSL Files
+---------
+
+1- Get the latest openSSL (as of time of this writing)
+openssl-0.9.7e-win32-bin.zip for the minimalist package of the openssl-0.9.7e
+binaries ported to MS Windows 95/98/NT/XP using the MingW32/GCC-3.1
+development environment. The file may be downloaded at
+http://curl.haxx.se/download/.
+
+2- Open the above zip file. You will find two files - SDL.dll,
+SDL_mixer.dll. Install them in the directory C:\WINDOWS\SYSTEM32 for Win 9x
+users and c:\winnt\system32 for NT-family users.
+
+Multithreading Files
+--------------------
+
+To be completed
+
+#define
+-------
+
+1- Make sure that your program includes the following - #define CURL_STATICLIB
+must be declared FIRST before any other define functions may be
+added. Otherwise you may experience link errors.
+
+2- Don't forget to include #include "curl/curl.h".
+
+e.g.
+ #define CURL_STATICLIB
+#include <windows.h>
+ #include "curl/curl.h"
+#include <fstream>
+#include <iostream>
+#include <vector>
+etc...
+
+
+Static or Dynamic Library
+-------------------------
+
+The above steps apply for the use by a static library. Should you choose to
+use a dynamic library you will be required to perform these additional steps.
+
+1- Refer to Method I - DOS Command Line point # 6. Install libcurl.dll in the
+directory C:\WINDOWS\SYSTEM32 for Win 9x users and c:\winnt\system32 for
+NT-family users.
+
+2- Refer to Linker Links point 3 - Replace -lcurl with -lcurldll.
+
+Voila you're done.
+
+The non-SSL static Library build may not be possible to use at least as of the
+time of this writing - v7.14. Check reference emails - Phillipe and I found it
+impossible to fully compile as certain files were missing for linking. No big
+loss as SSL is a major plus.
+
+Hope this Helps
+
+Tom
diff --git a/docs/INTERNALS b/docs/INTERNALS
new file mode 100644
index 0000000..9d0bdba
--- /dev/null
+++ b/docs/INTERNALS
@@ -0,0 +1,488 @@
+ _ _ ____ _
+ ___| | | | _ \| |
+ / __| | | | |_) | |
+ | (__| |_| | _ <| |___
+ \___|\___/|_| \_\_____|
+
+INTERNALS
+
+ The project is split in two. The library and the client. The client part uses
+ the library, but the library is designed to allow other applications to use
+ it.
+
+ The largest amount of code and complexity is in the library part.
+
+GIT
+===
+ All changes to the sources are committed to the git repository as soon as
+ they're somewhat verified to work. Changes shall be commited as independently
+ as possible so that individual changes can be easier spotted and tracked
+ afterwards.
+
+ Tagging shall be used extensively, and by the time we release new archives we
+ should tag the sources with a name similar to the released version number.
+
+Portability
+===========
+
+ We write curl and libcurl to compile with C89 compilers. On 32bit and up
+ machines. Most of libcurl assumes more or less POSIX compliance but that's
+ not a requirement.
+
+ We write libcurl to build and work with lots of third party tools, and we
+ want it to remain functional and buildable with these and later versions
+ (older versions may still work but is not what we work hard to maintain):
+
+ OpenSSL 0.9.6
+ GnuTLS 1.2
+ zlib 1.1.4
+ libssh2 0.16
+ c-ares 1.6.0
+ libidn 0.4.1
+ *yassl 1.4.0 (http://curl.haxx.se/mail/lib-2008-02/0093.html)
+ openldap 2.0
+ MIT krb5 lib 1.2.4
+ qsossl V5R2M0
+ NSS 3.11.x
+ Heimdal ?
+
+ * = only partly functional, but that's due to bugs in the third party lib, not
+ because of libcurl code
+
+ On systems where configure runs, we aim at working on them all - if they have
+ a suitable C compiler. On systems that don't run configure, we strive to keep
+ curl running fine on:
+
+ Windows 98
+ AS/400 V5R2M0
+ Symbian 9.1
+ Windows CE ?
+ TPF ?
+
+ When writing code (mostly for generating stuff included in release tarballs)
+ we use a few "build tools" and we make sure that we remain functional with
+ these versions:
+
+ GNU Libtool 1.4.2
+ GNU Autoconf 2.57
+ GNU Automake 1.7 (we currently avoid 1.10 due to Solaris-related bugs)
+ GNU M4 1.4
+ perl 4
+ roffit 0.5
+ groff ? (any version that supports "groff -Tps -man [in] [out]")
+ ps2pdf (gs) ?
+
+Windows vs Unix
+===============
+
+ There are a few differences in how to program curl the unix way compared to
+ the Windows way. The four perhaps most notable details are:
+
+ 1. Different function names for socket operations.
+
+ In curl, this is solved with defines and macros, so that the source looks
+ the same at all places except for the header file that defines them. The
+ macros in use are sclose(), sread() and swrite().
+
+ 2. Windows requires a couple of init calls for the socket stuff.
+
+ That's taken care of by the curl_global_init() call, but if other libs also
+ do it etc there might be reasons for applications to alter that behaviour.
+
+ 3. The file descriptors for network communication and file operations are
+ not easily interchangable as in unix.
+
+ We avoid this by not trying any funny tricks on file descriptors.
+
+ 4. When writing data to stdout, Windows makes end-of-lines the DOS way, thus
+ destroying binary data, although you do want that conversion if it is
+ text coming through... (sigh)
+
+ We set stdout to binary under windows
+
+ Inside the source code, We make an effort to avoid '#ifdef [Your OS]'. All
+ conditionals that deal with features *should* instead be in the format
+ '#ifdef HAVE_THAT_WEIRD_FUNCTION'. Since Windows can't run configure scripts,
+ we maintain two curl_config-win32.h files (one in lib/ and one in src/) that
+ are supposed to look exactly as a curl_config.h file would have looked like on
+ a Windows machine!
+
+ Generally speaking: always remember that this will be compiled on dozens of
+ operating systems. Don't walk on the edge.
+
+Library
+=======
+
+ There are plenty of entry points to the library, namely each publicly defined
+ function that libcurl offers to applications. All of those functions are
+ rather small and easy-to-follow. All the ones prefixed with 'curl_easy' are
+ put in the lib/easy.c file.
+
+ curl_global_init_() and curl_global_cleanup() should be called by the
+ application to initialize and clean up global stuff in the library. As of
+ today, it can handle the global SSL initing if SSL is enabled and it can init
+ the socket layer on windows machines. libcurl itself has no "global" scope.
+
+ All printf()-style functions use the supplied clones in lib/mprintf.c. This
+ makes sure we stay absolutely platform independent.
+
+ curl_easy_init() allocates an internal struct and makes some initializations.
+ The returned handle does not reveal internals. This is the 'SessionHandle'
+ struct which works as an "anchor" struct for all curl_easy functions. All
+ connections performed will get connect-specific data allocated that should be
+ used for things related to particular connections/requests.
+
+ curl_easy_setopt() takes three arguments, where the option stuff must be
+ passed in pairs: the parameter-ID and the parameter-value. The list of
+ options is documented in the man page. This function mainly sets things in
+ the 'SessionHandle' struct.
+
+ curl_easy_perform() does a whole lot of things:
+
+ It starts off in the lib/easy.c file by calling Curl_perform() and the main
+ work then continues in lib/url.c. The flow continues with a call to
+ Curl_connect() to connect to the remote site.
+
+ o Curl_connect()
+
+ ... analyzes the URL, it separates the different components and connects to
+ the remote host. This may involve using a proxy and/or using SSL. The
+ Curl_resolv() function in lib/hostip.c is used for looking up host names
+ (it does then use the proper underlying method, which may vary between
+ platforms and builds).
+
+ When Curl_connect is done, we are connected to the remote site. Then it is
+ time to tell the server to get a document/file. Curl_do() arranges this.
+
+ This function makes sure there's an allocated and initiated 'connectdata'
+ struct that is used for this particular connection only (although there may
+ be several requests performed on the same connect). A bunch of things are
+ inited/inherited from the SessionHandle struct.
+
+ o Curl_do()
+
+ Curl_do() makes sure the proper protocol-specific function is called. The
+ functions are named after the protocols they handle. Curl_ftp(),
+ Curl_http(), Curl_dict(), etc. They all reside in their respective files
+ (ftp.c, http.c and dict.c). HTTPS is handled by Curl_http() and FTPS by
+ Curl_ftp().
+
+ The protocol-specific functions of course deal with protocol-specific
+ negotiations and setup. They have access to the Curl_sendf() (from
+ lib/sendf.c) function to send printf-style formatted data to the remote
+ host and when they're ready to make the actual file transfer they call the
+ Curl_Transfer() function (in lib/transfer.c) to setup the transfer and
+ returns.
+
+ If this DO function fails and the connection is being re-used, libcurl will
+ then close this connection, setup a new connection and re-issue the DO
+ request on that. This is because there is no way to be perfectly sure that
+ we have discovered a dead connection before the DO function and thus we
+ might wrongly be re-using a connection that was closed by the remote peer.
+
+ Some time during the DO function, the Curl_setup_transfer() function must
+ be called with some basic info about the upcoming transfer: what socket(s)
+ to read/write and the expected file tranfer sizes (if known).
+
+ o Transfer()
+
+ Curl_perform() then calls Transfer() in lib/transfer.c that performs the
+ entire file transfer.
+
+ During transfer, the progress functions in lib/progress.c are called at a
+ frequent interval (or at the user's choice, a specified callback might get
+ called). The speedcheck functions in lib/speedcheck.c are also used to
+ verify that the transfer is as fast as required.
+
+ o Curl_done()
+
+ Called after a transfer is done. This function takes care of everything
+ that has to be done after a transfer. This function attempts to leave
+ matters in a state so that Curl_do() should be possible to call again on
+ the same connection (in a persistent connection case). It might also soon
+ be closed with Curl_disconnect().
+
+ o Curl_disconnect()
+
+ When doing normal connections and transfers, no one ever tries to close any
+ connections so this is not normally called when curl_easy_perform() is
+ used. This function is only used when we are certain that no more transfers
+ is going to be made on the connection. It can be also closed by force, or
+ it can be called to make sure that libcurl doesn't keep too many
+ connections alive at the same time (there's a default amount of 5 but that
+ can be changed with the CURLOPT_MAXCONNECTS option).
+
+ This function cleans up all resources that are associated with a single
+ connection.
+
+ Curl_perform() is the function that does the main "connect - do - transfer -
+ done" loop. It loops if there's a Location: to follow.
+
+ When completed, the curl_easy_cleanup() should be called to free up used
+ resources. It runs Curl_disconnect() on all open connectons.
+
+ A quick roundup on internal function sequences (many of these call
+ protocol-specific function-pointers):
+
+ curl_connect - connects to a remote site and does initial connect fluff
+ This also checks for an existing connection to the requested site and uses
+ that one if it is possible.
+
+ curl_do - starts a transfer
+ curl_transfer() - transfers data
+ curl_done - ends a transfer
+
+ curl_disconnect - disconnects from a remote site. This is called when the
+ disconnect is really requested, which doesn't necessarily have to be
+ exactly after curl_done in case we want to keep the connection open for
+ a while.
+
+ HTTP(S)
+
+ HTTP offers a lot and is the protocol in curl that uses the most lines of
+ code. There is a special file (lib/formdata.c) that offers all the multipart
+ post functions.
+
+ base64-functions for user+password stuff (and more) is in (lib/base64.c) and
+ all functions for parsing and sending cookies are found in (lib/cookie.c).
+
+ HTTPS uses in almost every means the same procedure as HTTP, with only two
+ exceptions: the connect procedure is different and the function used to read
+ or write from the socket is different, although the latter fact is hidden in
+ the source by the use of curl_read() for reading and curl_write() for writing
+ data to the remote server.
+
+ http_chunks.c contains functions that understands HTTP 1.1 chunked transfer
+ encoding.
+
+ An interesting detail with the HTTP(S) request, is the add_buffer() series of
+ functions we use. They append data to one single buffer, and when the
+ building is done the entire request is sent off in one single write. This is
+ done this way to overcome problems with flawed firewalls and lame servers.
+
+ FTP
+
+ The Curl_if2ip() function can be used for getting the IP number of a
+ specified network interface, and it resides in lib/if2ip.c.
+
+ Curl_ftpsendf() is used for sending FTP commands to the remote server. It was
+ made a separate function to prevent us programmers from forgetting that they
+ must be CRLF terminated. They must also be sent in one single write() to make
+ firewalls and similar happy.
+
+ Kerberos
+
+ The kerberos support is mainly in lib/krb4.c and lib/security.c.
+
+ TELNET
+
+ Telnet is implemented in lib/telnet.c.
+
+ FILE
+
+ The file:// protocol is dealt with in lib/file.c.
+
+ LDAP
+
+ Everything LDAP is in lib/ldap.c.
+
+ GENERAL
+
+ URL encoding and decoding, called escaping and unescaping in the source code,
+ is found in lib/escape.c.
+
+ While transfering data in Transfer() a few functions might get used.
+ curl_getdate() in lib/parsedate.c is for HTTP date comparisons (and more).
+
+ lib/getenv.c offers curl_getenv() which is for reading environment variables
+ in a neat platform independent way. That's used in the client, but also in
+ lib/url.c when checking the proxy environment variables. Note that contrary
+ to the normal unix getenv(), this returns an allocated buffer that must be
+ free()ed after use.
+
+ lib/netrc.c holds the .netrc parser
+
+ lib/timeval.c features replacement functions for systems that don't have
+ gettimeofday() and a few support functions for timeval convertions.
+
+ A function named curl_version() that returns the full curl version string is
+ found in lib/version.c.
+
+Persistent Connections
+======================
+
+ The persistent connection support in libcurl requires some considerations on
+ how to do things inside of the library.
+
+ o The 'SessionHandle' struct returned in the curl_easy_init() call must never
+ hold connection-oriented data. It is meant to hold the root data as well as
+ all the options etc that the library-user may choose.
+ o The 'SessionHandle' struct holds the "connection cache" (an array of
+ pointers to 'connectdata' structs). There's one connectdata struct
+ allocated for each connection that libcurl knows about. Note that when you
+ use the multi interface, the multi handle will hold the connection cache
+ and not the particular easy handle. This of course to allow all easy handles
+ in a multi stack to be able to share and re-use connections.
+ o This enables the 'curl handle' to be reused on subsequent transfers.
+ o When we are about to perform a transfer with curl_easy_perform(), we first
+ check for an already existing connection in the cache that we can use,
+ otherwise we create a new one and add to the cache. If the cache is full
+ already when we add a new connection, we close one of the present ones. We
+ select which one to close dependent on the close policy that may have been
+ previously set.
+ o When the transfer operation is complete, we try to leave the connection
+ open. Particular options may tell us not to, and protocols may signal
+ closure on connections and then we don't keep it open of course.
+ o When curl_easy_cleanup() is called, we close all still opened connections,
+ unless of course the multi interface "owns" the connections.
+
+ You do realize that the curl handle must be re-used in order for the
+ persistent connections to work.
+
+multi interface/non-blocking
+============================
+
+ We make an effort to provide a non-blocking interface to the library, the
+ multi interface. To make that interface work as good as possible, no
+ low-level functions within libcurl must be written to work in a blocking
+ manner.
+
+ One of the primary reasons we introduced c-ares support was to allow the name
+ resolve phase to be perfectly non-blocking as well.
+
+ The ultimate goal is to provide the easy interface simply by wrapping the
+ multi interface functions and thus treat everything internally as the multi
+ interface is the single interface we have.
+
+ The FTP and the SFTP/SCP protocols are thus perfect examples of how we adapt
+ and adjust the code to allow non-blocking operations even on multi-stage
+ protocols. The DICT, LDAP and TELNET are crappy examples and they are subject
+ for rewrite in the future to better fit the libcurl protocol family.
+
+SSL libraries
+=============
+
+ Originally libcurl supported SSLeay for SSL/TLS transports, but that was then
+ extended to its successor OpenSSL but has since also been extended to several
+ other SSL/TLS libraries and we expect and hope to further extend the support
+ in future libcurl versions.
+
+ To deal with this internally in the best way possible, we have a generic SSL
+ function API as provided by the sslgen.[ch] system, and they are the only SSL
+ functions we must use from within libcurl. sslgen is then crafted to use the
+ appropriate lower-level function calls to whatever SSL library that is in
+ use.
+
+Library Symbols
+===============
+
+ All symbols used internally in libcurl must use a 'Curl_' prefix if they're
+ used in more than a single file. Single-file symbols must be made static.
+ Public ("exported") symbols must use a 'curl_' prefix. (There are exceptions,
+ but they are to be changed to follow this pattern in future versions.)
+
+Return Codes and Informationals
+===============================
+
+ I've made things simple. Almost every function in libcurl returns a CURLcode,
+ that must be CURLE_OK if everything is OK or otherwise a suitable error code
+ as the curl/curl.h include file defines. The very spot that detects an error
+ must use the Curl_failf() function to set the human-readable error
+ description.
+
+ In aiding the user to understand what's happening and to debug curl usage, we
+ must supply a fair amount of informational messages by using the Curl_infof()
+ function. Those messages are only displayed when the user explicitly asks for
+ them. They are best used when revealing information that isn't otherwise
+ obvious.
+
+API/ABI
+=======
+
+ We make an effort to not export or show internals or how internals work, as
+ that makes it easier to keep a solid API/ABI over time. See docs/libcurl/ABI
+ for our promise to users.
+
+Client
+======
+
+ main() resides in src/main.c together with most of the client code.
+
+ src/hugehelp.c is automatically generated by the mkhelp.pl perl script to
+ display the complete "manual" and the src/urlglob.c file holds the functions
+ used for the URL-"globbing" support. Globbing in the sense that the {} and []
+ expansion stuff is there.
+
+ The client mostly messes around to setup its 'config' struct properly, then
+ it calls the curl_easy_*() functions of the library and when it gets back
+ control after the curl_easy_perform() it cleans up the library, checks status
+ and exits.
+
+ When the operation is done, the ourWriteOut() function in src/writeout.c may
+ be called to report about the operation. That function is using the
+ curl_easy_getinfo() function to extract useful information from the curl
+ session.
+
+ Recent versions may loop and do all this several times if many URLs were
+ specified on the command line or config file.
+
+Memory Debugging
+================
+
+ The file lib/memdebug.c contains debug-versions of a few functions. Functions
+ such as malloc, free, fopen, fclose, etc that somehow deal with resources
+ that might give us problems if we "leak" them. The functions in the memdebug
+ system do nothing fancy, they do their normal function and then log
+ information about what they just did. The logged data can then be analyzed
+ after a complete session,
+
+ memanalyze.pl is the perl script present in tests/ that analyzes a log file
+ generated by the memory tracking system. It detects if resources are
+ allocated but never freed and other kinds of errors related to resource
+ management.
+
+ Internally, definition of preprocessor symbol DEBUGBUILD restricts code which
+ is only compiled for debug enabled builds. And symbol CURLDEBUG is used to
+ differentiate code which is _only_ used for memory tracking/debugging.
+
+ Use -DCURLDEBUG when compiling to enable memory debugging, this is also
+ switched on by running configure with --enable-curldebug. Use -DDEBUGBUILD
+ when compiling to enable a debug build or run configure with --enable-debug.
+
+ curl --version will list 'Debug' feature for debug enabled builds, and
+ will list 'TrackMemory' feature for curl debug memory tracking capable
+ builds. These features are independent and can be controlled when running
+ the configure script. When --enable-debug is given both features will be
+ enabled, unless some restriction prevents memory tracking from being used.
+
+Test Suite
+==========
+
+ Since November 2000, a test suite has evolved. It is placed in its own
+ subdirectory directly off the root in the curl archive tree, and it contains
+ a bunch of scripts and a lot of test case data.
+
+ The main test script is runtests.pl that will invoke the two servers
+ httpserver.pl and ftpserver.pl before all the test cases are performed. The
+ test suite currently only runs on unix-like platforms.
+
+ You'll find a complete description of the test case data files in the
+ tests/README file.
+
+ The test suite automatically detects if curl was built with the memory
+ debugging enabled, and if it was it will detect memory leaks too.
+
+Building Releases
+=================
+
+ There's no magic to this. When you consider everything stable enough to be
+ released, run the 'maketgz' script (using 'make distcheck' will give you a
+ pretty good view on the status of the current sources). maketgz prompts for
+ version number of the client and the library before it creates a release
+ archive. maketgz uses 'make dist' for the actual archive building, why you
+ need to fill in the Makefile.am files properly for which files that should
+ be included in the release archives.
+
+ NOTE: you need to have curl checked out from git to be able to do a proper
+ release build. The release tarballs do not have everything setup in order to
+ do releases properly.
diff --git a/docs/KNOWN_BUGS b/docs/KNOWN_BUGS
new file mode 100644
index 0000000..9647891
--- /dev/null
+++ b/docs/KNOWN_BUGS
@@ -0,0 +1,232 @@
+These are problems known to exist at the time of this release. Feel free to
+join in and help us correct one or more of these! Also be sure to check the
+changelog of the current development status, as one or more of these problems
+may have been fixed since this was written!
+
+76. The SOCKET type in Win64 is 64 bits large (and thus so is curl_socket_t on
+ that platform), and long is only 32 bits. It makes it impossible for
+ curl_easy_getinfo() to return a socket properly with the CURLINFO_LASTSOCKET
+ option as for all other operating systems.
+
+75. NTLM authentication involving unicode user name or password.
+ http://curl.haxx.se/mail/lib-2009-10/0024.html
+ http://curl.haxx.se/bug/view.cgi?id=2944325
+
+74. The HTTP spec allows headers to be merged and become comma-separated
+ instead of being repeated several times. This also include Authenticate: and
+ Proxy-Authenticate: headers and while this hardly every happens in real life
+ it will confuse libcurl which does not properly support it for all headers -
+ like those Authenticate headers.
+
+73. if a connection is made to a FTP server but the server then just never
+ sends the 220 response or otherwise is dead slow, libcurl will not
+ acknowledge the connection timeout during that phase but only the "real"
+ timeout - which may surprise users as it is probably considered to be the
+ connect phase to most people. Brought up (and is being misunderstood) in:
+ http://curl.haxx.se/bug/view.cgi?id=2844077
+
+72. "Pausing pipeline problems."
+ http://curl.haxx.se/mail/lib-2009-07/0214.html
+
+70. Problem re-using easy handle after call to curl_multi_remove_handle
+ http://curl.haxx.se/mail/lib-2009-07/0249.html
+
+68. "More questions about ares behavior".
+ http://curl.haxx.se/mail/lib-2009-08/0012.html
+
+67. When creating multipart formposts. The file name part can be encoded with
+ something beyond ascii but currently libcurl will only pass in the verbatim
+ string the app provides. There are several browsers that already do this
+ encoding. The key seems to be the updated draft to RFC2231:
+ http://tools.ietf.org/html/draft-reschke-rfc2231-in-http-02
+
+66. When using telnet, the time limitation options don't work.
+ http://curl.haxx.se/bug/view.cgi?id=2818950
+
+65. When doing FTP over a socks proxy or CONNECT through HTTP proxy and the
+ multi interface is used, libcurl will fail if the (passive) TCP connection
+ for the data transfer isn't more or less instant as the code does not
+ properly wait for the connect to be confirmed. See test case 564 for a first
+ shot at a test case.
+
+63. When CURLOPT_CONNECT_ONLY is used, the handle cannot reliably be re-used
+ for any further requests or transfers. The work-around is then to close that
+ handle with curl_easy_cleanup() and create a new. Some more details:
+ http://curl.haxx.se/mail/lib-2009-04/0300.html
+
+61. If an upload using Expect: 100-continue receives an HTTP 417 response,
+ it ought to be automatically resent without the Expect:. A workaround is
+ for the client application to redo the transfer after disabling Expect:.
+ http://curl.haxx.se/mail/archive-2008-02/0043.html
+
+60. libcurl closes the connection if an HTTP 401 reply is received while it
+ is waiting for the the 100-continue response.
+ http://curl.haxx.se/mail/lib-2008-08/0462.html
+
+58. It seems sensible to be able to use CURLOPT_NOBODY and
+ CURLOPT_FAILONERROR with FTP to detect if a file exists or not, but it is
+ not working: http://curl.haxx.se/mail/lib-2008-07/0295.html
+
+57. On VMS-Alpha: When using an http-file-upload the file is not sent to the
+ Server with the correct content-length. Sending a file with 511 or less
+ bytes, content-length 512 is used. Sending a file with 513 - 1023 bytes,
+ content-length 1024 is used. Files with a length of a multiple of 512 Bytes
+ show the correct content-length. Only these files work for upload.
+ http://curl.haxx.se/bug/view.cgi?id=2057858
+
+56. When libcurl sends CURLOPT_POSTQUOTE commands when connected to a SFTP
+ server using the multi interface, the commands are not being sent correctly
+ and instead the connection is "cancelled" (the operation is considered done)
+ prematurely. There is a half-baked (busy-looping) patch provided in the bug
+ report but it cannot be accepted as-is. See
+ http://curl.haxx.se/bug/view.cgi?id=2006544
+
+55. libcurl fails to build with MIT Kerberos for Windows (KfW) due to KfW's
+ library header files exporting symbols/macros that should be kept private
+ to the KfW library. See ticket #5601 at http://krbdev.mit.edu/rt/
+
+52. Gautam Kachroo's issue that identifies a problem with the multi interface
+ where a connection can be re-used without actually being properly
+ SSL-negotiated:
+ http://curl.haxx.se/mail/lib-2008-01/0277.html
+
+49. If using --retry and the transfer timeouts (possibly due to using -m or
+ -y/-Y) the next attempt doesn't resume the transfer properly from what was
+ downloaded in the previous attempt but will truncate and restart at the
+ original position where it was at before the previous failed attempt. See
+ http://curl.haxx.se/mail/lib-2008-01/0080.html and Mandriva bug report
+ https://qa.mandriva.com/show_bug.cgi?id=22565
+
+48. If a CONNECT response-headers are larger than BUFSIZE (16KB) when the
+ connection is meant to be kept alive (like for NTLM proxy auth), the
+ function will return prematurely and will confuse the rest of the HTTP
+ protocol code. This should be very rare.
+
+43. There seems to be a problem when connecting to the Microsoft telnet server.
+ http://curl.haxx.se/bug/view.cgi?id=1720605
+
+41. When doing an operation over FTP that requires the ACCT command (but not
+ when logging in), the operation will fail since libcurl doesn't detect this
+ and thus fails to issue the correct command:
+ http://curl.haxx.se/bug/view.cgi?id=1693337
+
+39. Steffen Rumler's Race Condition in Curl_proxyCONNECT:
+ http://curl.haxx.se/mail/lib-2007-01/0045.html
+
+38. Kumar Swamy Bhatt's problem in ftp/ssl "LIST" operation:
+ http://curl.haxx.se/mail/lib-2007-01/0103.html
+
+37. Having more than one connection to the same host when doing NTLM
+ authentication (with performs multiple "passes" and authenticates a
+ connection rather than a HTTP request), and particularly when using the
+ multi interface, there's a risk that libcurl will re-use a wrong connection
+ when doing the different passes in the NTLM negotiation and thus fail to
+ negotiate (in seemingly mysterious ways).
+
+35. Both SOCKS5 and SOCKS4 proxy connections are done blocking, which is very
+ bad when used with the multi interface.
+
+34. The SOCKS4 connection codes don't properly acknowledge (connect) timeouts.
+ Also see #12. According to bug #1556528, even the SOCKS5 connect code does
+ not do it right: http://curl.haxx.se/bug/view.cgi?id=1556528,
+
+31. "curl-config --libs" will include details set in LDFLAGS when configure is
+ run that might be needed only for building libcurl. Further, curl-config
+ --cflags suffers from the same effects with CFLAGS/CPPFLAGS.
+
+30. You need to use -g to the command line tool in order to use RFC2732-style
+ IPv6 numerical addresses in URLs.
+
+29. IPv6 URLs with zone ID is not nicely supported.
+ http://www.ietf.org/internet-drafts/draft-fenner-literal-zone-02.txt (expired)
+ specifies the use of a plus sign instead of a percent when specifying zone
+ IDs in URLs to get around the problem of percent signs being
+ special. According to the reporter, Firefox deals with the URL _with_ a
+ percent letter (which seems like a blatant URL spec violation).
+ libcurl supports zone IDs where the percent sign is URL-escaped (i.e. %25).
+
+ See http://curl.haxx.se/bug/view.cgi?id=1371118
+
+26. NTLM authentication using SSPI (on Windows) when (lib)curl is running in
+ "system context" will make it use wrong(?) user name - at least when compared
+ to what winhttp does. See http://curl.haxx.se/bug/view.cgi?id=1281867
+
+23. SOCKS-related problems:
+ A) libcurl doesn't support SOCKS for IPv6.
+ B) libcurl doesn't support FTPS over a SOCKS proxy.
+ E) libcurl doesn't support active FTP over a SOCKS proxy
+
+ We probably have even more bugs and lack of features when a SOCKS proxy is
+ used.
+
+22. Sending files to a FTP server using curl on VMS, might lead to curl
+ complaining on "unaligned file size" on completion. The problem is related
+ to VMS file structures and the perceived file sizes stat() returns. A
+ possible fix would involve sending a "STRU VMS" command.
+ http://curl.haxx.se/bug/view.cgi?id=1156287
+
+21. FTP ASCII transfers do not follow RFC959. They don't convert the data
+ accordingly (not for sending nor for receiving). RFC 959 section 3.1.1.1
+ clearly describes how this should be done:
+
+ The sender converts the data from an internal character representation to
+ the standard 8-bit NVT-ASCII representation (see the Telnet
+ specification). The receiver will convert the data from the standard
+ form to his own internal form.
+
+ Since 7.15.4 at least line endings are converted.
+
+16. FTP URLs passed to curl may contain NUL (0x00) in the RFC 1738 <user>,
+ <password>, and <fpath> components, encoded as "%00". The problem is that
+ curl_unescape does not detect this, but instead returns a shortened C
+ string. From a strict FTP protocol standpoint, NUL is a valid character
+ within RFC 959 <string>, so the way to handle this correctly in curl would
+ be to use a data structure other than a plain C string, one that can handle
+ embedded NUL characters. From a practical standpoint, most FTP servers
+ would not meaningfully support NUL characters within RFC 959 <string>,
+ anyway (e.g., UNIX pathnames may not contain NUL).
+
+14. Test case 165 might fail on a system which has libidn present, but with an
+ old iconv version (2.1.3 is a known bad version), since it doesn't recognize
+ the charset when named ISO8859-1. Changing the name to ISO-8859-1 makes the
+ test pass, but instead makes it fail on Solaris hosts that use its native
+ iconv.
+
+13. curl version 7.12.2 fails on AIX if compiled with --enable-ares.
+ The workaround is to combine --enable-ares with --disable-shared
+
+12. When connecting to a SOCKS proxy, the (connect) timeout is not properly
+ acknowledged after the actual TCP connect (during the SOCKS "negotiate"
+ phase).
+
+10. To get HTTP Negotiate authentication to work fine, you need to provide a
+ (fake) user name (this concerns both curl and the lib) because the code
+ wrongly only considers authentication if there's a user name provided.
+ http://curl.haxx.se/bug/view.cgi?id=1004841. How?
+ http://curl.haxx.se/mail/lib-2004-08/0182.html
+
+8. Doing resumed upload over HTTP does not work with '-C -', because curl
+ doesn't do a HEAD first to get the initial size. This needs to be done
+ manually for HTTP PUT resume to work, and then '-C [index]'.
+
+6. libcurl ignores empty path parts in FTP URLs, whereas RFC1738 states that
+ such parts should be sent to the server as 'CWD ' (without an argument).
+ The only exception to this rule, is that we knowingly break this if the
+ empty part is first in the path, as then we use the double slashes to
+ indicate that the user wants to reach the root dir (this exception SHALL
+ remain even when this bug is fixed).
+
+5. libcurl doesn't treat the content-length of compressed data properly, as
+ it seems HTTP servers send the *uncompressed* length in that header and
+ libcurl thinks of it as the *compressed* length. Some explanations are here:
+ http://curl.haxx.se/mail/lib-2003-06/0146.html
+
+2. If a HTTP server responds to a HEAD request and includes a body (thus
+ violating the RFC2616), curl won't wait to read the response but just stop
+ reading and return back. If a second request (let's assume a GET) is then
+ immediately made to the same server again, the connection will be re-used
+ fine of course, and the second request will be sent off but when the
+ response is to get read, the previous response-body is what curl will read
+ and havoc is what happens.
+ More details on this is found in this libcurl mailing list thread:
+ http://curl.haxx.se/mail/lib-2002-08/0000.html
diff --git a/docs/LICENSE-MIXING b/docs/LICENSE-MIXING
new file mode 100644
index 0000000..3db1a3d
--- /dev/null
+++ b/docs/LICENSE-MIXING
@@ -0,0 +1,126 @@
+ License Mixing with apps, libcurl and Third Party Libraries
+ ===========================================================
+
+libcurl can be built to use a fair amount of various third party libraries,
+libraries that are written and provided by other parties that are distributed
+using their own licenses. Even libcurl itself contains code that may cause
+problems to some. This document attempts to describe what licenses libcurl and
+the other libraries use and what possible dilemmas linking and mixing them all
+can lead to for end users.
+
+I am not a lawyer and this is not legal advice!
+
+One common dilemma is that GPL[1]-licensed code is not allowed to be linked
+with code licensed under the Original BSD license (with the announcement
+clause). You may still build your own copies that use them all, but
+distributing them as binaries would be to violate the GPL license - unless you
+accompany your license with an exception[2]. This particular problem was
+addressed when the Modified BSD license was created, which does not have the
+announcement clause that collides with GPL.
+
+libcurl http://curl.haxx.se/docs/copyright.html
+
+ Uses an MIT (or Modified BSD)-style license that is as liberal as
+ possible. Some of the source files that deal with KRB4 have Original
+ BSD-style announce-clause licenses. You may not distribute binaries
+ with krb4-enabled libcurl that also link with GPL-licensed code!
+
+OpenSSL http://www.openssl.org/source/license.html
+
+ (May be used for SSL/TLS support) Uses an Original BSD-style license
+ with an announcement clause that makes it "incompatible" with GPL. You
+ are not allowed to ship binaries that link with OpenSSL that includes
+ GPL code (unless that specific GPL code includes an exception for
+ OpenSSL - a habit that is growing more and more common). If OpenSSL's
+ licensing is a problem for you, consider using GnuTLS or yassl
+ instead.
+
+GnuTLS http://www.gnutls.org/
+
+ (May be used for SSL/TLS support) Uses the LGPL[3] license. If this is
+ a problem for you, consider using OpenSSL instead. Also note that
+ GnuTLS itself depends on and uses other libs (libgcrypt and
+ libgpg-error) and they too are LGPL- or GPL-licensed.
+
+yassl http://www.yassl.com/
+
+ (May be used for SSL/TLS support) Uses the GPL[1] license. If this is
+ a problem for you, consider using OpenSSL or GnuTLS instead.
+
+NSS http://www.mozilla.org/projects/security/pki/nss/
+
+ (May be used for SSL/TLS support) Is covered by the MPL[4] license,
+ the GPL[1] license and the LGPL[3] license. You may choose to license
+ the code under MPL terms, GPL terms, or LGPL terms. These licenses
+ grant you different permissions and impose different obligations. You
+ should select the license that best meets your needs.
+
+c-ares http://daniel.haxx.se/projects/c-ares/license.html
+
+ (Used for asynchronous name resolves) Uses an MIT license that is very
+ liberal and imposes no restrictions on any other library or part you
+ may link with.
+
+zlib http://www.gzip.org/zlib/zlib_license.html
+
+ (Used for compressed Transfer-Encoding support) Uses an MIT-style
+ license that shouldn't collide with any other library.
+
+krb4
+
+ While nothing in particular says that a Kerberos4 library must use any
+ particular license, the one I've tried and used successfully so far
+ (kth-krb4) is partly Original BSD-licensed with the announcement
+ clause. Some of the code in libcurl that is written to deal with
+ Kerberos4 is Modified BSD-licensed.
+
+MIT Kerberos http://web.mit.edu/kerberos/www/dist/
+
+ (May be used for GSS support) MIT licensed, that shouldn't collide
+ with any other parts.
+
+Heimdal http://www.pdc.kth.se/heimdal/
+
+ (May be used for GSS support) Heimdal is Original BSD licensed with
+ the announcement clause.
+
+GNU GSS http://www.gnu.org/software/gss/
+
+ (May be used for GSS support) GNU GSS is GPL licensed. Note that you
+ may not distribute binary curl packages that uses this if you build
+ curl to also link and use any Original BSD licensed libraries!
+
+fbopenssl
+
+ (Used for SPNEGO support) Unclear license. Based on its name, I assume
+ that it uses the OpenSSL license and thus shares the same issues as
+ described for OpenSSL above.
+
+libidn http://josefsson.org/libidn/
+
+ (Used for IDNA support) Uses the GNU Lesser General Public
+ License [3]. LGPL is a variation of GPL with slightly less aggressive
+ "copyleft". This license requires more requirements to be met when
+ distributing binaries, see the license for details. Also note that if
+ you distribute a binary that includes this library, you must also
+ include the full LGPL license text. Please properly point out what
+ parts of the distributed package that the license addresses.
+
+OpenLDAP http://www.openldap.org/software/release/license.html
+
+ (Used for LDAP support) Uses a Modified BSD-style license. Since
+ libcurl uses OpenLDAP as a shared library only, I have not heard of
+ anyone that ships OpenLDAP linked with libcurl in an app.
+
+libssh2 http://www.libssh2.org/
+
+ (Used for scp and sftp support) libssh2 uses a Modified BSD-style
+ license.
+
+[1] = GPL - GNU General Public License: http://www.gnu.org/licenses/gpl.html
+[2] = http://www.fsf.org/licenses/gpl-faq.html#GPLIncompatibleLibs details on
+ how to write such an exception to the GPL
+[3] = LGPL - GNU Lesser General Public License:
+ http://www.gnu.org/licenses/lgpl.html
+[4] = MPL - Mozilla Public License:
+ http://www.mozilla.org/MPL/
diff --git a/docs/MANUAL b/docs/MANUAL
new file mode 100644
index 0000000..d7085b7
--- /dev/null
+++ b/docs/MANUAL
@@ -0,0 +1,971 @@
+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.se
+
+SIMPLE USAGE
+
+ Get the main page from Netscape's web-server:
+
+ curl http://www.netscape.com/
+
+ Get the README file the user's home directory at funet's ftp-server:
+
+ curl ftp://ftp.funet.fi/README
+
+ Get a web page from a server using port 8000:
+
+ curl http://www.weirdserver.com:8000/
+
+ Get a list of a directory of an FTP site:
+
+ curl ftp://cool.haxx.se/
+
+ Get the definition of curl from a dictionary:
+
+ curl dict://dict.org/m:curl
+
+ Fetch two documents at once:
+
+ curl ftp://cool.haxx.se/ http://www.weirdserver.com:8000/
+
+ Get a file off an FTPS server:
+
+ curl ftps://files.are.secure.com/secrets.txt
+
+ or use the more appropriate FTPS way to get the same file:
+
+ curl --ftp-ssl ftp://files.are.secure.com/secrets.txt
+
+ Get a file from an SSH server using SFTP:
+
+ curl -u username sftp://shell.example.com/etc/issue
+
+ Get a file from an SSH server using SCP using a private key to authenticate:
+
+ curl -u username: --key ~/.ssh/id_dsa --pubkey ~/.ssh/id_dsa.pub \
+ scp://shell.example.com/~/personal.txt
+
+ Get the main page from an IPv6 web server:
+
+ curl -g "http://[2001:1890:1112:1::20]/"
+
+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
+
+ Fetch two files and store them with their remote names:
+
+ curl -O www.haxx.se/index.html -O curl.haxx.se/download.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
+
+ FTPS
+
+ It is just like for FTP, but you may also want to specify and use
+ SSL-specific options for certificates etc.
+
+ Note that using FTPS:// as prefix is the "implicit" way as described in the
+ standards while the recommended "explicit" way is done by using FTP:// and
+ the --ftp-ssl option.
+
+ SFTP / SCP
+
+ This is similar to FTP, but you can specify a private key to use instead of
+ a password. Note that the private key may itself be protected by a password
+ that is unrelated to the login password of the remote system. If you
+ provide a private key file you must also provide a public key file.
+
+ HTTP
+
+ Curl also supports user and password in HTTP URLs, 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
+
+ HTTP offers many different methods of authentication and curl supports
+ several: Basic, Digest, NTLM and Negotiate. Without telling which method to
+ use, curl defaults to Basic. You can also ask curl to pick the most secure
+ ones out of the ones that the server accepts for the given URL, by using
+ --anyauth.
+
+ 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.
+
+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/
+
+ A comma-separated list of hosts and domains which do not use the proxy can
+ be specified as:
+
+ curl --noproxy localhost,get.this -x my-proxy:888 http://www.get.this/
+
+ If the proxy is specified with --proxy1.0 instead of --proxy or -x, then
+ curl will use HTTP/1.0 instead of HTTP/1.1 for any CONNECT attempts.
+
+ curl also supports SOCKS4 and SOCKS5 proxies with --socks4 and --socks5.
+
+ 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 / FTPS / SFTP / SCP
+
+ Upload all data on stdin to a specified server:
+
+ 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/
+
+ Upload a local file to get appended to the remote file:
+
+ curl -T localfile -a ftp://ftp.upload.com/remotefile
+
+ Curl also supports ftp upload through a proxy, but only if the proxy is
+ configured to allow that kind of tunneling. If it does, you can run curl in
+ a fashion similar to:
+
+ curl --proxytunnel -x proxy:port -T localfile ftp.upload.com
+
+ HTTP
+
+ Upload all data on stdin to a specified http site:
+
+ curl -T - http://www.upload.com/myfile
+
+ Note that the http server must have 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 what it sends and receives in
+ order to let the user see all client-server interaction (but it won't show
+ you the actual data).
+
+ curl -v ftp://ftp.upload.com/
+
+ To get even more details and information on what curl does, try using the
+ --trace or --trace-ascii options with a given file name to log to, like
+ this:
+
+ curl --trace trace.txt www.haxx.se
+
+
+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 (headers.txt in the example):
+
+ curl --dump-header headers.txt curl.haxx.se
+
+ 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 <data>
+ 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
+
+ How to post a form with curl, lesson #1:
+
+ Dig out all the <input> tags in the form that you want to fill in. (There's
+ a perl program called formfind.pl on the curl site that helps with this).
+
+ If there's a "normal" post, you use -d to post. -d takes a full "post
+ string", which is in the format
+
+ <variable1>=<data1>&<variable2>=<data2>&...
+
+ The 'variable' names are the names set with "name=" in the <input> tags, and
+ the data is the contents you want to fill in for the inputs. The data *must*
+ be properly URL encoded. That means you replace space with + and that you
+ write weird letters with %XX where XX is the hexadecimal representation of
+ the letter's ASCII code.
+
+ Example:
+
+ (page located at http://www.formpost.com/getthis/
+
+ <form action="post.cgi" method="post">
+ <input name=user size=10>
+ <input name=pass type=password size=10>
+ <input name=id type=hidden value="blablabla">
+ <input name=ding value="submit">
+ </form>
+
+ We want to enter user 'foobar' with password '12345'.
+
+ To post to this, you enter a curl command line like:
+
+ curl -d "user=foobar&pass=12345&id=blablabla&ding=submit" (continues)
+ http://www.formpost.com/getthis/post.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 the file content type by appending ';type=<mime type>'
+ to the file name. You can also post the contents of several files in one
+ field. For example, the field name 'coolfiles' is used to send three files,
+ with different content types using the following syntax:
+
+ curl -F "coolfiles=@fil1.gif;type=image/gif,fil2.txt,fil3.html" \
+ http://www.post.com/postit.cgi
+
+ If the content-type is not specified, curl will try to guess from the file
+ 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 else it will
+ 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 read the HTML source of the form page and
+ find 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
+
+ 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"
+
+ To send a field value literally without interpreting a leading '@'
+ or '<', or an embedded ';type=', use --form-string instead of
+ -F. This is recommended when the value is obtained from a user or
+ some other unpredictable source. Under these circumstances, using
+ -F instead of --form-string would allow a user to trick curl into
+ uploading a file.
+
+REFERRER
+
+ A HTTP request has the option to include information about which address
+ that referred to actual page. Curl allows you to specify the
+ referrer to be used 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/
+
+ NOTE: The Referer: [sic] field is defined in the HTTP spec to be a full URL.
+
+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: <data>' 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
+
+ While saving headers to a file is a working way to store cookies, it is
+ however error-prone and not the preferred way to do this. Instead, make curl
+ save the incoming cookies using the well-known netscape cookie format like
+ this:
+
+ curl -c cookies.txt 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 trigger the cookie awareness like:
+
+ curl -L -b empty.txt 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. In the above command, curl will parse the header and store
+ the cookies received from www.example.com. curl will send to the server the
+ stored cookies which match the request as it follows the location. The
+ file "empty.txt" may be a nonexistent file.
+
+ Alas, to both read and write cookies from a netscape cookie file, you can
+ set both -b and -c to use the same file:
+
+ curl -b cookies.txt -c cookies.txt www.example.com
+
+PROGRESS METER
+
+ The progress meter exists to show a user that something actually is
+ happening. The different fields in the output have the following meaning:
+
+ % Total % Received % Xferd Average Speed Time Curr.
+ Dload Upload Total Current Left Speed
+ 0 151M 0 38608 0 0 9406 0 4:41:43 0:00:04 4:41:39 9287
+
+ From left-to-right:
+ % - percentage completed of the whole transfer
+ Total - total size of the whole expected transfer
+ % - percentage completed of the download
+ Received - currently downloaded amount of bytes
+ % - percentage completed of the upload
+ Xferd - currently uploaded amount of bytes
+ Average Speed
+ Dload - the average transfer speed of the download
+ Average Speed
+ Upload - the average transfer speed of the upload
+ Time Total - expected time to complete the operation
+ Time Current - time passed since the invoke
+ Time Left - expected time left to completion
+ Curr.Speed - the average transfer speed the last 5 seconds (the first
+ 5 seconds of a transfer is based on less time of course.)
+
+ The -# option will display a totally different progress bar that doesn't
+ need much explanation!
+
+SPEED LIMIT
+
+ Curl allows the user to set the transfer speed conditions 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 is below the specified
+ lowest limit for a specified time.
+
+ To have curl abort the download if the speed is 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 operation must be completed in whole within 30 minutes:
+
+ curl -m 1800 -Y 3000 -y 60 www.far-away-site.com
+
+ Forcing curl not to transfer data faster than a given rate is also possible,
+ which might be useful if you're using a limited bandwidth connection and you
+ don't want your transfer to use all of it (sometimes referred to as
+ "bandwidth throttle").
+
+ Make curl transfer data no faster than 10 kilobytes per second:
+
+ curl --limit-rate 10K www.far-away-site.com
+
+ or
+
+ curl --limit-rate 10240 www.far-away-site.com
+
+ Or prevent curl from uploading data faster than 1 megabyte per second:
+
+ curl -T upload --limit-rate 1M ftp://uploadshereplease.com
+
+ When using the --limit-rate option, the transfer rate is regulated on a
+ per-second basis, which will cause the total transfer speed to become lower
+ than the given number. Sometimes of course substantially lower, if your
+ transfer stalls during periods.
+
+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 could be made up with normal command line switches, but you
+ can also specify the long options without the dashes to make it more
+ readable. You can separate the options and the parameter with spaces, or
+ with = or :. Comments can be used within the file. If the first letter on a
+ line is a '#'-symbol the rest of the line is treated as a comment.
+
+ If you want the parameter to contain spaces, you must enclose the entire
+ parameter within double quotes ("). Within those quotes, you specify a
+ quote as \".
+
+ NOTE: You must specify options and their arguments on the same line.
+
+ 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:
+ proxy = 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
+ url = "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 "user = 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. If you replace an internal header with an
+ empty one, you prevent that header from being sent. To prevent the Host:
+ header from being used:
+
+ curl -H "Host:" www.server.com
+
+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.)
+
+SFTP and SCP and PATH NAMES
+
+ With sftp: and scp: URLs, the path name given is the absolute name on the
+ server. To access a file relative to the remote user's home directory,
+ prefix the file with /~/ , such as:
+
+ curl -u $USER sftp://home.example.com/~/.bashrc
+
+FTP and firewalls
+
+ The FTP protocol requires one of the involved parties to open a second
+ connection 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 supports a few 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 (this does
+ not work on windows):
+
+ 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
+
+NETWORK INTERFACE
+
+ Get a web page from a server using a specified port for the interface:
+
+ curl --interface eth0:1 http://www.netscape.com/
+
+ or
+
+ curl --interface 192.168.1.10 http://www.netscape.com/
+
+HTTPS
+
+ Secure HTTP requires SSL libraries to be installed and used when curl is
+ built. If that is done, curl is capable of retrieving and posting documents
+ using the HTTPS protocol.
+
+ 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 MSIE 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. This kind of converter is
+ included in recent versions of OpenSSL, and for older versions 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, -2 or -1 to specify that exact SSL
+ version to use (for SSLv3, SSLv2 or TLSv1 respectively):
+
+ curl -2 https://secure.site.com/
+
+ Otherwise, curl will first attempt to use v3 and then v2.
+
+ To use OpenSSL to convert your favourite browser's certificate into a PEM
+ formatted one that curl can use, do something like this (assuming netscape,
+ but IE is likely to work similarly):
+
+ You start with hitting the 'security' menu button in netscape.
+
+ Select 'certificates->yours' and then pick a certificate in the list
+
+ Press the 'export' button
+
+ enter your PIN code for the certs
+
+ select a proper place to save it
+
+ Run the 'openssl' application to convert the certificate. If you cd to the
+ openssl installation, you can do it like:
+
+ # ./apps/openssl pkcs12 -in [file you saved] -clcerts -out [PEMfile]
+
+
+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 web 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 January 12, 2012:
+
+ curl -z "Jan 12 2012" 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. Two places
+ that might suit you are:
+
+ Netscape's "Netscape Directory SDK 3.0 for C Programmer's Guide Chapter 10:
+ Working with LDAP URLs":
+ http://developer.netscape.com/docs/manuals/dirsdk/csdk30/url.htm
+
+ RFC 2255, "The LDAP URL Format" http://curl.haxx.se/rfc/rfc2255.txt
+
+ 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
+
+ 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 the host name matches one of these strings, or the host is within the
+ domain of one of these strings, transactions with that node will not be
+ proxied.
+
+
+ The usage of the -x/--proxy flag overrides the environment variables.
+
+NETRC
+
+ Unix introduced the .netrc concept a long time ago. It is a way for a user
+ to specify name and password for commonly visited ftp sites in a file so
+ that you don't have to type them in each time you visit those sites. You
+ realize this is a big security risk if someone else gets hold of your
+ passwords, so therefore most unix programs won't read this file unless it is
+ only readable by yourself (curl doesn't care though).
+
+ Curl supports .netrc files if told so (using the -n/--netrc and
+ --netrc-optional options). This is not restricted to only ftp,
+ but curl can use it for all protocols where authentication is used.
+
+ A very simple .netrc file could look something like:
+
+ machine curl.haxx.se login iamdaniel password mysecret
+
+CUSTOM OUTPUT
+
+ To better allow script programmers to get to know about the progress of
+ curl, the -w/--write-out option was introduced. Using this, you can specify
+ what information from the previous transfer you want to extract.
+
+ To display the amount of bytes downloaded together with some text and an
+ ending newline:
+
+ curl -w 'We downloaded %{size_download} bytes\n' www.download.com
+
+KERBEROS FTP TRANSFER
+
+ Curl supports kerberos4 and kerberos5/GSSAPI for FTP transfers. You need
+ the kerberos package installed and used at curl build time for it to be
+ used.
+
+ First, get the krb-ticket the normal way, like with the kinit/kauth tool.
+ Then use curl in way similar to:
+
+ curl --krb private ftp://krb4site.com -u username:fakepwd
+
+ There's no use for a password on the -u switch, but a blank one will make
+ curl ask for one and you already entered the real password to kinit/kauth.
+
+TELNET
+
+ The curl telnet support is basic and very easy to use. Curl passes all data
+ passed to it on stdin to the remote server. Connect to a remote telnet
+ server using a command line similar to:
+
+ curl telnet://remote.server.com
+
+ And enter the data to pass to the server on stdin. The result will be sent
+ to stdout or to the file you specify with -o.
+
+ You might want the -N/--no-buffer option to switch off the buffered output
+ for slow connections or similar.
+
+ Pass options to the telnet protocol negotiation, by using the -t option. To
+ tell the server we use a vt100 terminal, try something like:
+
+ curl -tTTYPE=vt100 telnet://remote.server.com
+
+ Other interesting options for it -t include:
+
+ - XDISPLOC=<X display> Sets the X display location.
+
+ - NEW_ENV=<var,val> Sets an environment variable.
+
+ NOTE: the telnet protocol does not specify any way to login with a specified
+ user and password so curl can't do that automatically. To do that, you need
+ to track when the login prompt is received and send the username and
+ password accordingly.
+
+PERSISTENT CONNECTIONS
+
+ Specifying multiple files on a single command line will make curl transfer
+ all of them, one after the other in the specified order.
+
+ libcurl will attempt to use persistent connections for the transfers so that
+ the second transfer to the same host can use the same connection that was
+ already initiated and was left open in the previous transfer. This greatly
+ decreases connection time for all but the first transfer and it makes a far
+ better use of the network.
+
+ Note that curl cannot use persistent connections for transfers that are used
+ in subsequence curl invokes. Try to stuff as many URLs as possible on the
+ same command line if they are using the same host, as that'll make the
+ transfers faster. If you use a http proxy for file transfers, practically
+ all transfers will be persistent.
+
+MULTIPLE TRANSFERS WITH A SINGLE COMMAND LINE
+
+ As is mentioned above, you can download multiple files with one command line
+ by simply adding more URLs. If you want those to get saved to a local file
+ instead of just printed to stdout, you need to add one save option for each
+ URL you specify. Note that this also goes for the -O option (but not
+ --remote-name-all).
+
+ For example: get two files and use -O for the first and a custom file
+ name for the second:
+
+ curl -O http://url.com/file.txt ftp://ftp.com/moo.exe -o moo.jpg
+
+ You can also upload multiple files in a similar fashion:
+
+ curl -T local1 ftp://ftp.com/moo.exe -T local2 ftp://ftp.com/moo2.txt
+
+IPv6
+
+ curl will connect to a server with IPv6 when a host lookup returns an IPv6
+ address and fall back to IPv4 if the connection fails. The --ipv4 and --ipv6
+ options can specify which address to use when both are available. IPv6
+ addresses can also be specified directly in URLs using the syntax:
+
+ http://[2001:1890:1112:1::20]/overview.html
+
+ When this style is used, the -g option must be given to stop curl from
+ interpreting the square brackets as special globbing characters. Link local
+ and site local addresses including a scope identifier, such as fe80::1234%1,
+ may also be used, but the scope portion must be numeric and the percent
+ character must be URL escaped. The previous example in an SFTP URL might
+ look like:
+
+ sftp://[fe80::1234%251]/
+
+ IPv6 addresses provided other than in URLs (e.g. to the --proxy, --interface
+ or --ftp-port options) should not be URL encoded.
+
+
+MAILING LISTS
+
+ For your convenience, we have several open mailing lists to discuss curl,
+ its development and things relevant to this. Get all info at
+ http://curl.haxx.se/mail/. Some of the lists available are:
+
+ curl-users
+
+ Users of the command line tool. How to use it, what doesn't work, new
+ features, related tools, questions, news, installations, compilations,
+ running, porting etc.
+
+ curl-library
+
+ Developers using or developing libcurl. Bugs, extensions, improvements.
+
+ curl-announce
+
+ Low-traffic. Only receives announcements of new public versions. At worst,
+ that makes something like one or two mails per month, but usually only one
+ mail every second month.
+
+ curl-and-php
+
+ Using the curl functions in PHP. Everything curl with a PHP angle. Or PHP
+ with a curl angle.
+
+ curl-and-python
+
+ Python hackers using curl with or without the python binding pycurl.
+
+ Please direct curl questions, feature requests and trouble reports to one of
+ these mailing lists instead of mailing any individual.
diff --git a/docs/Makefile.am b/docs/Makefile.am
new file mode 100644
index 0000000..316b4f4
--- /dev/null
+++ b/docs/Makefile.am
@@ -0,0 +1,40 @@
+#
+#
+
+AUTOMAKE_OPTIONS = foreign no-dependencies
+
+man_MANS = curl.1 curl-config.1
+GENHTMLPAGES = curl.html curl-config.html
+PDFPAGES = curl.pdf curl-config.pdf
+
+HTMLPAGES = $(GENHTMLPAGES) index.html
+
+SUBDIRS = examples libcurl
+
+CLEANFILES = $(GENHTMLPAGES) $(PDFPAGES)
+
+EXTRA_DIST = MANUAL BUGS CONTRIBUTE FAQ FEATURES INTERNALS SSLCERTS \
+ README.win32 RESOURCES TODO TheArtOfHttpScripting THANKS VERSIONS \
+ KNOWN_BUGS BINDINGS $(man_MANS) $(HTMLPAGES) HISTORY INSTALL \
+ $(PDFPAGES) LICENSE-MIXING README.netware DISTRO-DILEMMA INSTALL.devcpp
+
+MAN2HTML= roffit < $< >$@
+
+SUFFIXES = .1 .html .pdf
+
+html: $(HTMLPAGES)
+ cd libcurl; make html
+
+pdf: $(PDFPAGES)
+ cd libcurl; make pdf
+
+.1.html:
+ $(MAN2HTML)
+
+.1.pdf:
+ @(foo=`echo $@ | sed -e 's/\.[0-9]$$//g'`; \
+ groff -Tps -man $< >$$foo.ps; \
+ ps2pdf $$foo.ps $@; \
+ rm $$foo.ps; \
+ echo "converted $< to $@")
+
diff --git a/docs/Makefile.in b/docs/Makefile.in
new file mode 100644
index 0000000..3cc2e3b
--- /dev/null
+++ b/docs/Makefile.in
@@ -0,0 +1,649 @@
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005 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.
+
+@SET_MAKE@
+
+#
+#
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = docs
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in INSTALL \
+ THANKS TODO
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
+ $(top_srcdir)/m4/curl-confopts.m4 \
+ $(top_srcdir)/m4/curl-functions.m4 \
+ $(top_srcdir)/m4/curl-override.m4 \
+ $(top_srcdir)/m4/curl-reentrant.m4 \
+ $(top_srcdir)/m4/curl-system.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/lib/curl_config.h \
+ $(top_builddir)/src/curl_config.h \
+ $(top_builddir)/include/curl/curlbuild.h
+CONFIG_CLEAN_FILES =
+depcomp =
+am__depfiles_maybe =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-recursive \
+ install-exec-recursive install-info-recursive \
+ install-recursive installcheck-recursive installdirs-recursive \
+ pdf-recursive ps-recursive uninstall-info-recursive \
+ uninstall-recursive
+man1dir = $(mandir)/man1
+am__installdirs = "$(DESTDIR)$(man1dir)"
+MANS = $(man_MANS)
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_LIBHOSTNAME_FALSE = @BUILD_LIBHOSTNAME_FALSE@
+BUILD_LIBHOSTNAME_TRUE = @BUILD_LIBHOSTNAME_TRUE@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_OPTIONS = @CONFIGURE_OPTIONS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CROSSCOMPILING_FALSE = @CROSSCOMPILING_FALSE@
+CROSSCOMPILING_TRUE = @CROSSCOMPILING_TRUE@
+CURLDEBUG_FALSE = @CURLDEBUG_FALSE@
+CURLDEBUG_TRUE = @CURLDEBUG_TRUE@
+CURL_CA_BUNDLE = @CURL_CA_BUNDLE@
+CURL_CFLAG_EXTRAS = @CURL_CFLAG_EXTRAS@
+CURL_DISABLE_DICT = @CURL_DISABLE_DICT@
+CURL_DISABLE_FILE = @CURL_DISABLE_FILE@
+CURL_DISABLE_FTP = @CURL_DISABLE_FTP@
+CURL_DISABLE_GOPHER = @CURL_DISABLE_GOPHER@
+CURL_DISABLE_HTTP = @CURL_DISABLE_HTTP@
+CURL_DISABLE_IMAP = @CURL_DISABLE_IMAP@
+CURL_DISABLE_LDAP = @CURL_DISABLE_LDAP@
+CURL_DISABLE_LDAPS = @CURL_DISABLE_LDAPS@
+CURL_DISABLE_POP3 = @CURL_DISABLE_POP3@
+CURL_DISABLE_PROXY = @CURL_DISABLE_PROXY@
+CURL_DISABLE_RTSP = @CURL_DISABLE_RTSP@
+CURL_DISABLE_SMTP = @CURL_DISABLE_SMTP@
+CURL_DISABLE_TELNET = @CURL_DISABLE_TELNET@
+CURL_DISABLE_TFTP = @CURL_DISABLE_TFTP@
+CURL_LIBS = @CURL_LIBS@
+CURL_NETWORK_LIBS = @CURL_NETWORK_LIBS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_SHARED = @ENABLE_SHARED@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_LDAP_SSL = @HAVE_LDAP_SSL@
+HAVE_LIBZ = @HAVE_LIBZ@
+HAVE_LIBZ_FALSE = @HAVE_LIBZ_FALSE@
+HAVE_LIBZ_TRUE = @HAVE_LIBZ_TRUE@
+HAVE_PK11_CREATEGENERICOBJECT = @HAVE_PK11_CREATEGENERICOBJECT@
+IDN_ENABLED = @IDN_ENABLED@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+IPV6_ENABLED = @IPV6_ENABLED@
+KRB4_ENABLED = @KRB4_ENABLED@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBCURL_LIBS = @LIBCURL_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+MANOPT = @MANOPT@
+MIMPURE_FALSE = @MIMPURE_FALSE@
+MIMPURE_TRUE = @MIMPURE_TRUE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NO_UNDEFINED_FALSE = @NO_UNDEFINED_FALSE@
+NO_UNDEFINED_TRUE = @NO_UNDEFINED_TRUE@
+NROFF = @NROFF@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH = @PATH@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+PKGADD_NAME = @PKGADD_NAME@
+PKGADD_PKG = @PKGADD_PKG@
+PKGADD_VENDOR = @PKGADD_VENDOR@
+PKGCONFIG = @PKGCONFIG@
+RANDOM_FILE = @RANDOM_FILE@
+RANLIB = @RANLIB@
+REQUIRE_LIB_DEPS = @REQUIRE_LIB_DEPS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SONAME_BUMP_FALSE = @SONAME_BUMP_FALSE@
+SONAME_BUMP_TRUE = @SONAME_BUMP_TRUE@
+SSL_ENABLED = @SSL_ENABLED@
+STATICLIB_FALSE = @STATICLIB_FALSE@
+STATICLIB_TRUE = @STATICLIB_TRUE@
+STRIP = @STRIP@
+SUPPORT_FEATURES = @SUPPORT_FEATURES@
+SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
+TEST_SERVER_LIBS = @TEST_SERVER_LIBS@
+USE_ARES = @USE_ARES@
+USE_EMBEDDED_ARES_FALSE = @USE_EMBEDDED_ARES_FALSE@
+USE_EMBEDDED_ARES_TRUE = @USE_EMBEDDED_ARES_TRUE@
+USE_GNUTLS = @USE_GNUTLS@
+USE_LIBRTMP = @USE_LIBRTMP@
+USE_LIBSSH2 = @USE_LIBSSH2@
+USE_MANUAL_FALSE = @USE_MANUAL_FALSE@
+USE_MANUAL_TRUE = @USE_MANUAL_TRUE@
+USE_NSS = @USE_NSS@
+USE_OPENLDAP = @USE_OPENLDAP@
+USE_POLARSSL = @USE_POLARSSL@
+USE_SSLEAY = @USE_SSLEAY@
+USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
+VERSION = @VERSION@
+VERSIONNUM = @VERSIONNUM@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+libext = @libext@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+AUTOMAKE_OPTIONS = foreign no-dependencies
+man_MANS = curl.1 curl-config.1
+GENHTMLPAGES = curl.html curl-config.html
+PDFPAGES = curl.pdf curl-config.pdf
+HTMLPAGES = $(GENHTMLPAGES) index.html
+SUBDIRS = examples libcurl
+CLEANFILES = $(GENHTMLPAGES) $(PDFPAGES)
+EXTRA_DIST = MANUAL BUGS CONTRIBUTE FAQ FEATURES INTERNALS SSLCERTS \
+ README.win32 RESOURCES TODO TheArtOfHttpScripting THANKS VERSIONS \
+ KNOWN_BUGS BINDINGS $(man_MANS) $(HTMLPAGES) HISTORY INSTALL \
+ $(PDFPAGES) LICENSE-MIXING README.netware DISTRO-DILEMMA INSTALL.devcpp
+
+MAN2HTML = roffit < $< >$@
+SUFFIXES = .1 .html .pdf
+all: all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .1 .html .pdf
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign docs/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --foreign docs/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+ -rm -f libtool
+uninstall-info-am:
+install-man1: $(man1_MANS) $(man_MANS)
+ @$(NORMAL_INSTALL)
+ test -z "$(man1dir)" || $(mkdir_p) "$(DESTDIR)$(man1dir)"
+ @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+ l2='$(man_MANS) $(dist_man_MANS) $(nodist_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/^.*\\.//'`; \
+ case "$$ext" in \
+ 1*) ;; \
+ *) ext='1' ;; \
+ esac; \
+ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+ inst=`echo $$inst | sed -e 's/^.*\///'`; \
+ inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \
+ done
+uninstall-man1:
+ @$(NORMAL_UNINSTALL)
+ @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+ l2='$(man_MANS) $(dist_man_MANS) $(nodist_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/^.*\\.//'`; \
+ case "$$ext" in \
+ 1*) ;; \
+ *) ext='1' ;; \
+ esac; \
+ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+ inst=`echo $$inst | sed -e 's/^.*\///'`; \
+ inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+ echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \
+ rm -f "$(DESTDIR)$(man1dir)/$$inst"; \
+ done
+
+# 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.
+$(RECURSIVE_TARGETS):
+ @failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ 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) \
+ || eval $$failcom; \
+ 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:
+ @failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ rev=''; for subdir in $$list; do \
+ if test "$$subdir" = "."; then :; else \
+ rev="$$subdir $$rev"; \
+ fi; \
+ done; \
+ 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) \
+ || eval $$failcom; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique; \
+ fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ list='$(DISTFILES)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkdir_p) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+ list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -d "$(distdir)/$$subdir" \
+ || $(mkdir_p) "$(distdir)/$$subdir" \
+ || exit 1; \
+ distdir=`$(am__cd) $(distdir) && pwd`; \
+ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
+ (cd $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$top_distdir" \
+ distdir="$$distdir/$$subdir" \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(MANS)
+installdirs: installdirs-recursive
+installdirs-am:
+ for dir in "$(DESTDIR)$(man1dir)"; do \
+ test -z "$$dir" || $(mkdir_p) "$$dir"; \
+ done
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-libtool \
+ distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am: install-man
+
+install-exec-am:
+
+install-info: install-info-recursive
+
+install-man: install-man1
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-info-am uninstall-man
+
+uninstall-info: uninstall-info-recursive
+
+uninstall-man: uninstall-man1
+
+.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \
+ clean clean-generic clean-libtool clean-recursive ctags \
+ ctags-recursive distclean distclean-generic distclean-libtool \
+ distclean-recursive distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-exec install-exec-am install-info \
+ install-info-am install-man install-man1 install-strip \
+ installcheck installcheck-am installdirs installdirs-am \
+ maintainer-clean maintainer-clean-generic \
+ maintainer-clean-recursive mostlyclean mostlyclean-generic \
+ mostlyclean-libtool mostlyclean-recursive pdf pdf-am ps ps-am \
+ tags tags-recursive uninstall uninstall-am uninstall-info-am \
+ uninstall-man uninstall-man1
+
+
+html: $(HTMLPAGES)
+ cd libcurl; make html
+
+pdf: $(PDFPAGES)
+ cd libcurl; make pdf
+
+.1.html:
+ $(MAN2HTML)
+
+.1.pdf:
+ @(foo=`echo $@ | sed -e 's/\.[0-9]$$//g'`; \
+ groff -Tps -man $< >$$foo.ps; \
+ ps2pdf $$foo.ps $@; \
+ rm $$foo.ps; \
+ echo "converted $< to $@")
+# 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/docs/README.netware b/docs/README.netware
new file mode 100644
index 0000000..41da2e8
--- /dev/null
+++ b/docs/README.netware
@@ -0,0 +1,27 @@
+ _ _ ____ _
+ ___| | | | _ \| |
+ / __| | | | |_) | |
+ | (__| |_| | _ <| |___
+ \___|\___/|_| \_\_____|
+
+README.netware
+
+ Read the README file first.
+
+ Curl has been successfully compiled with gcc / nlmconv on different flavours
+ of Linux as well as with the official Metrowerks CodeWarrior compiler.
+ While not being the main development target, a continously growing share of
+ curl users are NetWare-based, specially also consuming the lib from PHP.
+
+ The unix-style man pages are tricky to read on windows, so therefore are all
+ those pages converted to HTML as well as pdf, and included in the release
+ archives.
+
+ The main curl.1 man page is also "built-in" in the command line tool. Use a
+ command line similar to this in order to extract a separate text file:
+
+ curl -M >manual.txt
+
+ Read the INSTALL file for instructions how to compile curl self.
+
+
diff --git a/docs/README.win32 b/docs/README.win32
new file mode 100644
index 0000000..cfd45dd
--- /dev/null
+++ b/docs/README.win32
@@ -0,0 +1,26 @@
+ _ _ ____ _
+ ___| | | | _ \| |
+ / __| | | | |_) | |
+ | (__| |_| | _ <| |___
+ \___|\___/|_| \_\_____|
+
+README.win32
+
+ Read the README file first.
+
+ Curl has been compiled, built and run on all sorts of Windows and win32
+ systems. While not being the main develop target, a fair share of curl users
+ are win32-based.
+
+ The unix-style man pages are tricky to read on windows, so therefore are all
+ those pages converted to HTML as well as pdf, and included in the release
+ archives.
+
+ The main curl.1 man page is also "built-in" in the command line tool. Use a
+ command line similar to this in order to extract a separate text file:
+
+ curl -M >manual.txt
+
+ Read the INSTALL file for instructions how to compile curl self.
+
+
diff --git a/docs/RESOURCES b/docs/RESOURCES
new file mode 100644
index 0000000..760e759
--- /dev/null
+++ b/docs/RESOURCES
@@ -0,0 +1,83 @@
+ _ _ ____ _
+ Project ___| | | | _ \| |
+ / __| | | | |_) | |
+ | (__| |_| | _ <| |___
+ \___|\___/|_| \_\_____|
+
+
+This document lists documents and standards used by curl.
+
+ RFC 959 - The FTP protocol
+
+ RFC 1635 - How to Use Anonymous FTP
+
+ 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 2104 - Keyed-Hashing for Message Authentication
+
+ RFC 2109 - HTTP State Management Mechanism (cookie stuff)
+ - Also, read Netscape's specification at
+ http://curl.haxx.se/rfc/cookie_spec.html
+
+ RFC 2183 - The Content-Disposition Header Field
+
+ RFC 2195 - CRAM-MD5 authentication
+
+ RFC 2229 - A Dictionary Server Protocol
+
+ RFC 2255 - Newer LDAP URL syntax document.
+
+ 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 RFC1867
+
+ RFC 2396 - "Uniform Resource Identifiers: Generic Syntax and Semantics" This
+ one obsoletes RFC 1738, but since RFC 1738 is often mentioned
+ I've left it in this list.
+
+ RFC 2428 - FTP Extensions for IPv6 and NATs
+
+ RFC 2577 - FTP Security Considerations
+
+ RFC 2616 - HTTP 1.1, the latest
+
+ RFC 2617 - HTTP Authentication
+
+ RFC 2718 - Guidelines for new URL Schemes
+
+ RFC 2732 - Format for Literal IPv6 Addresses in URL's
+
+ RFC 2818 - HTTP Over TLS (TLS is the successor to SSL)
+
+ RFC 2821 - SMTP protocol
+
+ RFC 2964 - Use of HTTP State Management
+
+ RFC 2965 - HTTP State Management Mechanism. Cookies. Obsoletes RFC2109
+
+ RFC 3207 - SMTP over TLS
+
+ RFC 4616 - PLAIN authentication
+
+ RFC 4954 - SMTP Authentication
diff --git a/docs/SSLCERTS b/docs/SSLCERTS
new file mode 100644
index 0000000..0d1414c
--- /dev/null
+++ b/docs/SSLCERTS
@@ -0,0 +1,116 @@
+ Peer SSL Certificate Verification
+ =================================
+
+libcurl performs peer SSL certificate verification by default. This is done
+by using CA cert bundle that the SSL library can use to make sure the peer's
+server certificate is valid.
+
+If you communicate with HTTPS or FTPS servers using certificates that are
+signed by CAs present in the bundle, you can be sure that the remote server
+really is the one it claims to be.
+
+Until 7.18.0, curl bundled a severely outdated ca bundle file that was
+installed by default. These days, the curl archives include no ca certs at
+all. You need to get them elsewhere. See below for example.
+
+If the remote server uses a self-signed certificate, if you don't install a CA
+cert bundle, if the server uses a certificate signed by a CA that isn't
+included in the bundle you use or if the remote host is an impostor
+impersonating your favorite site, and you want to transfer files from this
+server, do one of the following:
+
+ 1. Tell libcurl to *not* verify the peer. With libcurl you disable this with
+ curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, FALSE);
+
+ With the curl command line tool, you disable this with -k/--insecure.
+
+ 2. Get a CA certificate that can verify the remote server and use the proper
+ option to point out this CA cert for verification when connecting. For
+ libcurl hackers: curl_easy_setopt(curl, CURLOPT_CAPATH, capath);
+
+ With the curl command line tool: --cacert [file]
+
+ 3. Add the CA cert for your server to the existing default CA cert bundle.
+ The default path of the CA bundle used can be changed by running configure
+ with the --with-ca-bundle option pointing out the path of your choice.
+
+ To do this, you need to get the CA cert for your server in PEM format and
+ then append that to your CA cert bundle.
+
+ If you use Internet Explorer, this is one way to get extract the CA cert
+ for a particular server:
+
+ o View the certificate by double-clicking the padlock
+ o Find out where the CA certificate is kept (Certificate>
+ Authority Information Access>URL)
+ o Get a copy of the crt file using curl
+ o Convert it from crt to PEM using the openssl tool:
+ openssl x509 -inform DES -in yourdownloaded.crt \
+ -out outcert.pem -text
+ o Append the 'outcert.pem' to the CA cert bundle or use it stand-alone
+ as described below.
+
+ If you use the 'openssl' tool, this is one way to get extract the CA cert
+ for a particular server:
+
+ o openssl s_client -connect xxxxx.com:443 |tee logfile
+ o type "QUIT", followed by the "ENTER" key
+ o The certificate will have "BEGIN CERTIFICATE" and "END CERTIFICATE"
+ markers.
+ o If you want to see the data in the certificate, you can do: "openssl
+ x509 -inform PEM -in certfile -text -out certdata" where certfile is
+ the cert you extracted from logfile. Look in certdata.
+ o If you want to trust the certificate, you can append it to your
+ cert_bundle or use it stand-alone as described. Just remember that the
+ security is no better than the way you obtained the certificate.
+
+ 4. If you're using the curl command line tool, you can specify your own CA
+ cert path by setting the environment variable CURL_CA_BUNDLE to the path
+ of your choice.
+
+ If you're using the curl command line tool on Windows, curl will search
+ for a CA cert file named "curl-ca-bundle.crt" in these directories and in
+ this order:
+ 1. application's directory
+ 2. current working directory
+ 3. Windows System directory (e.g. C:\windows\system32)
+ 4. Windows Directory (e.g. C:\windows)
+ 5. all directories along %PATH%
+
+ 5. Get a better/different/newer CA cert bundle! One option is to extract the
+ one a recent Firefox browser uses by running 'make ca-bundle' in the curl
+ build tree root, or possibly download a version that was generated this
+ way for you:
+
+ http://curl.haxx.se/docs/caextract.html
+
+Neglecting to use one of the above methods when dealing with a server using a
+certificate that isn't signed by one of the certificates in the installed CA
+cert bundle, will cause SSL to report an error ("certificate verify failed")
+during the handshake and SSL will then refuse further communication with that
+server.
+
+ Peer SSL Certificate Verification with NSS
+ ==========================================
+
+If libcurl is build with NSS support then depending on the OS distribution it
+is probably required to take some additional steps to use the system-wide CA
+cert db. RedHat ships with an additional module libnsspem.so which enables NSS
+to read the OpenSSL PEM CA bundle. With OpenSuSE this lib is missing, and NSS
+can only work with its own internal formats. Also NSS got a new database
+format:
+https://wiki.mozilla.org/NSS_Shared_DB
+Starting with version 7.19.7 libcurl will check for the NSS version it runs,
+and add automatically the 'sql:' prefix to the certdb directory (either the
+hardcoded default /etc/pki/nssdb or the directory configured with SSL_DIR
+environment variable) if a version 3.12.0 or later is detected.
+To check which certdb format your distribution provides examine the default
+certdb location /etc/pki/nssdb; the new certdb format can be identified by
+the filenames cert9.db, key4.db, pkcs11.txt; filenames of older versions are
+cert8.db, key3.db, modsec.db.
+Usually these cert databases are empty; but NSS also has built-in CAs which are
+provided through a shared library libnssckbi.so; if you want to use these
+built-in CAs then create a symlink to libnssckbi.so in /etc/pki/nssdb:
+ln -s /usr/lib[64]/libnssckbi.so /etc/pki/nssdb/libnssckbi.so
+
+
diff --git a/docs/THANKS b/docs/THANKS
new file mode 100644
index 0000000..a85f488
--- /dev/null
+++ b/docs/THANKS
@@ -0,0 +1,823 @@
+ This project has been alive for many years. Countless people have provided
+ feedback that have improved curl. Here follows a list of people that have
+ contributed (a-z order).
+
+ If you have contributed but are missing here, please let us know!
+
+Aaron Oneal
+Adam D. Moss
+Adam Light
+Adam Piggott
+Adrian Schuur
+Akos Pasztory
+Alan Pinstein
+Albert Chin-A-Young
+Albert Choy
+Ale Vesely
+Aleksandar Milivojevic
+Alessandro Vesely
+Alex Bligh
+Alex Fishman
+Alex Neblett
+Alex Suykov
+Alex aka WindEagle
+Alexander Beedie
+Alexander Kourakos
+Alexander Krasnostavsky
+Alexander Lazic
+Alexander Zhuravlev
+Alexey Borzov
+Alexey Pesternikov
+Alexey Simak
+Alexis Carvalho
+Allen Pulsifer
+Amol Pattekar
+Anatoli Tubman
+Anders Gustafsson
+Andi Jahja
+Andre Guibert de Bruet
+Andreas Damm
+Andreas Faerber
+Andreas Farber
+Andreas Ntaflos
+Andreas Olsson
+Andreas Rieke
+Andreas Schuldei
+Andreas Wurf
+Andrei Benea
+Andres Garcia
+Andrew Benham
+Andrew Biggs
+Andrew Bushnell
+Andrew Francis
+Andrew Fuller
+Andrew Moise
+Andrew Wansink
+Andrew de los Reyes
+Andrés García
+Andy Cedilnik
+Andy Serpa
+Andy Tsouladze
+Angus Mackay
+Anthony Bryan
+Antoine Calando
+Anton Kalmykov
+Arkadiusz Miskiewicz
+Armel Asselin
+Arnaud Ebalard
+Arve Knudsen
+Ates Goral
+Augustus Saunders
+Avery Fay
+Axel Tillequin
+Balint Szilakszi
+Bart Whiteley
+Bas Mevissen
+Ben Darnell
+Ben Greear
+Ben Madsen
+Ben Van Hof
+Benbuck Nason
+Benjamin Gerard
+Bernard Leak
+Bertrand Demiddelaer
+Bill Egert
+Bill Hoffman
+Bjorn Augustsson
+Bjorn Reese
+Björn Stenberg
+Bob Richmond
+Bob Schader
+Bogdan Nicula
+Brad Burdick
+Bradford Bruce
+Brendan Jurd
+Brent Beardsley
+Brian Akins
+Brian Dessent
+Brian J. Murrell
+Brian R Duffy
+Brian Ulm
+Brock Noland
+Bruce Mitchener
+Bryan Henderson
+Bryan Kemp
+Camille Moncelier
+Caolan McNamara
+Carsten Lange
+Casey O'Donnell
+Chad Monroe
+Charles Kerr
+Chih-Chung Chang
+Chris "Bob Bob"
+Chris Combes
+Chris Conroy
+Chris Deidun
+Chris Flerackers
+Chris Gaukroger
+Chris Maltby
+Chris Mumford
+Christian Krause
+Christian Kurz
+Christian Robottom Reis
+Christian Schmitz
+Christian Vogt
+Christophe Demory
+Christophe Legry
+Christopher Conroy
+Christopher Palow
+Christopher R. Palmer
+Ciprian Badescu
+Claes Jakobsson
+Clarence Gardner
+Clifford Wolf
+Cody Jones
+Colin Hogben
+Colin Watson
+Colm Buckley
+Constantine Sapuntzakis
+Cory Nelson
+Craig A West
+Craig Davison
+Craig Markwardt
+Cris Bailiff
+Curt Bogmine
+Cyrill Osterwalder
+Damien Adant
+Dan Becker
+Dan C
+Dan Fandrich
+Dan Nelson
+Dan Petitt
+Dan Torop
+Dan Zitter
+Daniel Black
+Daniel Cater
+Daniel Egger
+Daniel Fandrich
+Daniel Johnson
+Daniel Steinberg
+Daniel Stenberg
+Daniel at touchtunes
+Darryl House
+Dave Dribin
+Dave Halbakken
+Dave Hamilton
+Dave May
+Dave Vasilevsky
+David Bau
+David Binderman
+David Byron
+David Cohen
+David Eriksson
+David Houlder
+David Hull
+David J Meyer
+David James
+David Kierznowski
+David Kimdon
+David Lang
+David LeBlanc
+David McCreedy
+David Odin
+David Phillips
+David Rosenstrauch
+David Shaw
+David Tarendash
+David Thiel
+David Wright
+David Yan
+Dengminwen
+Detlef Schmier
+Didier Brisebourg
+Diego Casorran
+Dima Barsky
+Dimitris Sarris
+Dinar
+Dirk Eddelbuettel
+Dirk Manske
+Dmitriy Sergeyev
+Dmitry Bartsevich
+Dmitry Kurochkin
+Dmitry Popov
+Dmitry Rechkin
+Dolbneff A.V
+Domenico Andreoli
+Dominick Meglio
+Doug Kaufman
+Doug Porter
+Douglas E. Wegscheid
+Douglas Kilpatrick
+Douglas R. Horner
+Douglas Steinwand
+Dov Murik
+Duane Cathey
+Duncan Mac-Vicar Prett
+Dustin Boswell
+Dylan Ellicott
+Dylan Salisbury
+Early Ehlinger
+Ebenezer Ikonne
+Edin Kadribasic
+Eduard Bloch
+Eetu Ojanen
+Ellis Pritchard
+Emanuele Bovisio
+Emil Romanus
+Emiliano Ida
+Enrico Scholz
+Enrik Berkhan
+Eric Cooper
+Eric Landes
+Eric Lavigne
+Eric Melville
+Eric Mertens
+Eric Rautman
+Eric Thelin
+Eric Vergnaud
+Eric Wong
+Eric Young
+Erick Nuwendam
+Erwan Legrand
+Erwin Authried
+Eugene Kotlyarov
+Evan Jordan
+Eygene Ryabinkin
+Fabian Keil
+Fabrizio Ammollo
+Fedor Karpelevitch
+Felix von Leitner
+Feng Tu
+Florian Schoppmann
+Forrest Cahoon
+Frank Hempel
+Frank Keeney
+Frank McGeough
+Frank Meier
+Frank Ticheler
+Fred Machado
+Fred New
+Fred Noz
+Frederic Lepied
+Gabriel Kuri
+Gary Maxwell
+Gautam Kachroo
+Gautam Mani
+Gavrie Philipson
+Gaz Iqbal
+Georg Horn
+Georg Huettenegger
+Georg Lippitsch
+Georg Wicherski
+Gerd v. Egidy
+Gerhard Herre
+Gerrit Bruchhäuser
+Giancarlo Formicuccia
+Giaslas Georgios
+Gil Weber
+Gilad
+Gilbert Ramirez Jr.
+Gilles Blanc
+Gisle Vanem
+Giuseppe Attardi
+Giuseppe D'Ambrosio
+Glen Nakamura
+Glen Scott
+Grant Erickson
+Greg Hewgill
+Greg Morse
+Greg Onufer
+Greg Zavertnik
+Grigory Entin
+Guenole Bescon
+Guenter Knauf
+Guillaume Arluison
+Gustaf Hui
+Gwenole Beauchesne
+Götz Babin-Ebell
+Hamish Mackenzie
+Hang Kin Lau
+Hanno Kranzhoff
+Hans Steegers
+Hans-Jurgen May
+Hardeep Singh
+Harshal Pradhan
+Hauke Duden
+Heikki Korpela
+Henrik Storner
+Hidemoto Nakada
+Hoi-Ho Chan
+Howard Chu
+Hzhijun
+Ian Ford
+Ian Gulliver
+Ian Lynagh
+Ian Turner
+Ian Wilkes
+Ignacio Vazquez-Abrams
+Igor Franchuk
+Igor Novoseltsev
+Igor Polyakov
+Ilguiz Latypov
+Ilja van Sprundel
+Immanuel Gregoire
+Ingmar Runge
+Ingo Ralf Blum
+Ingo Wilken
+Jack Zhang
+Jacky Lam
+Jacob Meuser
+Jacob Moshenko
+Jad Chamcham
+James Bursa
+James Cheng
+James Clancy
+James Cone
+James Gallagher
+James Griffiths
+James Housley
+James MacMillan
+Jamie Lokier
+Jamie Newton
+Jamie Wilkinson
+Jan Kunder
+Jan Van Boghout
+Jared Lundell
+Jari Sundell
+Jason McDonald
+Jason S. Priebe
+Jay Austin
+Jayesh A Shah
+Jaz Fresh
+Jean Jacques Drouin
+Jean-Claude Chauve
+Jean-Francois Bertrand
+Jean-Louis Lemaire
+Jean-Marc Ranger
+Jean-Philippe Barrette-LaPierre
+Jeff Johnson
+Jeff Lawson
+Jeff Phillips
+Jeff Pohlmeyer
+Jeff Weber
+Jeffrey Pohlmeyer
+Jeremy Friesner
+Jerome Muffat-Meridol
+Jerome Vouillon
+Jes Badwal
+Jesper Jensen
+Jesse Noller
+Jim Drash
+Jim Freeman
+Jim Meyering
+Jocelyn Jaubert
+Joe Halpin
+Joe Malicki
+Joel Chen
+Jofell Gallardo
+Johan Anderson
+Johan Nilsson
+Johan van Selst
+John Crow
+John Dennis
+John E. Malmberg
+John Janssen
+John Kelly
+John Lask
+John Lightsey
+John McGowan
+John P. McCaskey
+John Wilkinson
+John-Mark Bell
+Johnny Luong
+Jon Grubbs
+Jon Nelson
+Jon Sargeant
+Jon Travis
+Jon Turner
+Jonas Forsman
+Jonatan Lander
+Jonathan Hseu
+Jongki Suwandi
+Jose Kahan
+Josef Wolf
+Josh Kapell
+Joshua Kwan
+Juan F. Codagnone
+Juan Ignacio Hervás
+Judson Bishop
+Juergen Wilke
+Jukka Pihl
+Julian Noble
+Julien Chaffraix
+Jun-ichiro itojun Hagino
+Jurij Smakov
+Justin Fletcher
+Jörg Mueller-Tolk
+Jörn Hartroth
+Kai Sommerfeld
+Kai-Uwe Rommel
+Kalle Vahlman
+Kamil Dudka
+Kang-Jin Lee
+Karl Moerder
+Karol Pietrzak
+Kaspar Brand
+Katie Wang
+Kees Cook
+Keith MacDonald
+Keith McGuigan
+Keith Mok
+Ken Hirsch
+Ken Rastatter
+Kenny To
+Kent Boortz
+Keshav Krity
+Kevin Baughman
+Kevin Fisk
+Kevin Lussier
+Kevin Reed
+Kevin Roth
+Kim Rinnewitz
+Kimmo Kinnunen
+Kjell Ericson
+Kjetil Jacobsen
+Klevtsov Vadim
+Kris Kennaway
+Krishnendu Majumdar
+Krister Johansen
+Kristian Gunstone
+Kristian Köhntopp
+Kyle Sallee
+Lachlan O'Dea
+Larry Campbell
+Larry Fahnoe
+Lars Gustafsson
+Lars J. Aas
+Lars Nilsson
+Lars Torben Wilson
+Lau Hang Kin
+Laurent Rabret
+Legoff Vincent
+Lehel Bernadt
+Len Krause
+Lenaic Lefever
+Lenny Rachitsky
+Liam Healy
+Linas Vepstas
+Ling Thio
+Linus Nielsen Feltzing
+Lisa Xu
+Liza Alenchery
+Loic Dachary
+Loren Kirkby
+Luca Altea
+Luca Alteas
+Lucas Adamski
+Lukasz Czekierda
+Luke Call
+Luong Dinh Dung
+Maciej Karpiuk
+Maciej W. Rozycki
+Manfred Schwarb
+Marc Boucher
+Marc Kleine-Budde
+Marcelo Juchem
+Marcin Konicki
+Marco G. Salvagno
+Marco Maggi
+Marcus Webster
+Mario Schroeder
+Mark Butler
+Mark Davies
+Mark Eichin
+Mark Incley
+Mark Karpeles
+Mark Lentczner
+Markus Duft
+Markus Koetter
+Markus Moeller
+Markus Oberhumer
+Martijn Koster
+Martin C. Martin
+Martin Drasar
+Martin Hager
+Martin Hedenfalk
+Martin Skinner
+Martin Storsjo
+Marty Kuhrt
+Maruko
+Massimiliano Ziccardi
+Massimo Callegari
+Mateusz Loskot
+Mathias Axelsson
+Mats Lidell
+Matt Kraai
+Matt Veenstra
+Matt Witherspoon
+Matt Wixson
+Matthew Blain
+Matthew Clarke
+Maurice Barnum
+Max Katsev
+Maxim Ivanov
+Maxim Perenesenko
+Mekonikum
+Mettgut Jamalla
+Michael Benedict
+Michael Calmer
+Michael Cronenworth
+Michael Curtis
+Michael Goffioul
+Michael Jahn
+Michael Jerris
+Michael Mealling
+Michael Smith
+Michael Stillwell
+Michael Wallner
+Michal Bonino
+Michal Marek
+Michele Bini
+Mihai Ionescu
+Mikael Johansson
+Mikael Sennerholm
+Mike Bytnar
+Mike Crowe
+Mike Dobbs
+Mike Hommey
+Mike Power
+Mike Protts
+Mike Revi
+Miklos Nemeth
+Mitz Wark
+Mohamed Lrhazi
+Mohun Biswas
+Moonesamy
+Nathan Coulter
+Nathan O'Sullivan
+Nathanael Nerode
+Naveen Noel
+Neil Dunbar
+Neil Spring
+Nic Roets
+Nick Gimbrone
+Nick Humfrey
+Nick Zitzmann
+Nico Baggus
+Nicolas Berloquin
+Nicolas Croiset
+Nicolas François
+Niels van Tongeren
+Nikita Schmidt
+Nikitinskit Dmitriy
+Niklas Angebrand
+Nikolai Kondrashov
+Nir Soffer
+Nis Jorgensen
+Nodak Sodak
+Norbert Frese
+Norbert Novotny
+Ofer
+Olaf Stueben
+Olaf Stüben
+Oren Tirosh
+P R Schaffner
+Pascal Terjan
+Pat Ray
+Patrick Bihan-Faou
+Patrick Monnerat
+Patrick Scott
+Patrick Smith
+Patrik Thunstrom
+Paul Harrington
+Paul Howarth
+Paul Marquis
+Paul Moore
+Paul Nolan
+Paul Querna
+Pavel Cenek
+Pavel Orehov
+Pavel Raiskup
+Pawel A. Gajda
+Pawel Kierski
+Pedro Neves
+Pete Su
+Peter Bray
+Peter Forret
+Peter Heuchert
+Peter Korsgaard
+Peter Lamberg
+Peter O'Gorman
+Peter Pentchev
+Peter Silva
+Peter Su
+Peter Sylvester
+Peter Todd
+Peter Verhas
+Peter Wullinger
+Peteris Krumins
+Phil Blundell
+Phil Karn
+Phil Lisiecki
+Phil Pellouchoud
+Philip Gladstone
+Philip Langdale
+Philippe Hameau
+Philippe Raoult
+Philippe Vaucher
+Pierre
+Pierre Brico
+Pierre Joye
+Pooyan McSporran
+Pramod Sharma
+Puneet Pawaia
+Quagmire
+Rafa Muyo
+Rafael Sagula
+Rainer Canavan
+Rainer Koenig
+Ralf S. Engelschall
+Ralph Beckmann
+Ralph Mitchell
+Ramana Mokkapati
+Randy McMurchy
+Ravi Pratap
+Ray Dassen
+Ray Pekowski
+Reinout van Schouwen
+Renato Botelho
+Renaud Chaillat
+Renaud Duhaut
+Rene Bernhardt
+Rene Rebe
+Reuven Wachtfogel
+Ricardo Cadime
+Rich Gray
+Rich Rauenzahn
+Richard Archer
+Richard Atterer
+Richard Bramante
+Richard Clayton
+Richard Cooper
+Richard Gorton
+Richard Prescott
+Rick Jones
+Rick Richardson
+Rob Crittenden
+Rob Jones
+Rob Stanzel
+Robert A. Monat
+Robert D. Young
+Robert Foreman
+Robert Iakobashvili
+Robert Olson
+Robert Weaver
+Robin Cornelius
+Robin Johnson
+Robin Kay
+Robson Braga Araujo
+Rodney Simmons
+Roland Blom
+Roland Krikava
+Roland Zimmermann
+Rolland Dudemaine
+Roman Koifman
+Ron Zapp
+Rosimildo da Silva
+Roy Shan
+Rune Kleveland
+Ruslan Gazizov
+Ryan Chan
+Ryan Nelson
+S. Moonesamy
+Salvador Dávila
+Salvatore Sorrentino
+Sam Listopad
+Sampo Kellomaki
+Samuel Díaz García
+Samuel Listopad
+Sander Gates
+Sandor Feldi
+Saul good
+Scott Barrett
+Scott Cantor
+Scott Davis
+Scott McCreary
+Sebastien Willemijns
+Senthil Raja Velu
+Sergio Ballestrero
+Seshubabu Pasam
+Sh Diao
+Sharad Gupta
+Shard
+Shawn Poulson
+Shmulik Regev
+Siddhartha Prakash Jain
+Sidney San Martin
+Siegfried Gyuricsko
+Simon Dick
+Simon Josefsson
+Simon Liu
+Song Ma
+Sonia Subramanian
+Spacen Jasset
+Spiridonoff A.V
+Stadler Stephan
+Stan van de Burgt
+Stefan Esser
+Stefan Krause
+Stefan Teleman
+Stefan Ulrich
+Stephan Bergmann
+Stephen Collyer
+Stephen Kick
+Stephen More
+Sterling Hughes
+Steve Green
+Steve Lhomme
+Steve Little
+Steve Marx
+Steve Oliphant
+Steve Roskowski
+Steven Bazyl
+Steven G. Johnson
+Steven M. Schweda
+Stoned Elipot
+Sven Anders
+Sven Neuhaus
+Sven Wegener
+Sébastien Willemijns
+T. Bharath
+T. Yamada
+Tanguy Fautre
+Temprimus
+Thomas J. Moore
+Thomas Klausner
+Thomas Lopatic
+Thomas Schwinge
+Thomas Tonino
+Tim Ansell
+Tim Baker
+Tim Bartley
+Tim Chen
+Tim Costello
+Tim Sneddon
+Tobias Rundström
+Toby Peterson
+Todd Kulesza
+Todd Vierling
+Tom Benoist
+Tom Donovan
+Tom Lee
+Tom Mattison
+Tom Moers
+Tom Mueller
+Tom Regner
+Tom Zerucha
+Tomas Pospisek
+Tomas Szepe
+Tomasz Lacki
+Tommy Tam
+Ton Voon
+Toon Verwaest
+Tor Arntsen
+Torsten Foertsch
+Toshio Kuratomi
+Toshiyuki Maezawa
+Traian Nicolescu
+Troels Walsted Hansen
+Troy Engel
+Tupone Alfredo
+Ulf Härnhammar
+Ulrich Zadow
+Venkat Akella
+Victor Snezhko
+Vikram Saxena
+Vilmos Nebehaj
+Vincent Bronner
+Vincent Le Normand
+Vincent Penquerc'h
+Vincent Sanders
+Vlad Grachov
+Vladimir Lazarenko
+Vojtech Janota
+Vojtech Minarik
+Walter J. Mack
+Wayne Haigh
+Werner Koch
+Wesley Laxton
+Wesley Miaw
+Wez Furlong
+Wilfredo Sanchez
+Wojciech Zwiefka
+Xavier Bouchoux
+Yang Tse
+Yarram Sunil
+Yehoshua Hershberg
+Yuriy Sosov
+Yves Lejeune
+Zmey Petroff
+Zvi Har'El
+nk
+swalkaus at yahoo.com
+tommink[at]post.pl
diff --git a/docs/TODO b/docs/TODO
new file mode 100644
index 0000000..0a4c981
--- /dev/null
+++ b/docs/TODO
@@ -0,0 +1,561 @@
+ _ _ ____ _
+ ___| | | | _ \| |
+ / __| | | | |_) | |
+ | (__| |_| | _ <| |___
+ \___|\___/|_| \_\_____|
+
+ Things that could be nice to do in the future
+
+ Things to do in project cURL. Please tell us what you think, contribute and
+ send us patches that improve things!
+
+ All bugs documented in the KNOWN_BUGS document are subject for fixing!
+
+ 1. libcurl
+ 1.1 Zero-copy interface
+ 1.2 More data sharing
+ 1.3 struct lifreq
+ 1.4 signal-based resolver timeouts
+
+ 2. libcurl - multi interface
+ 2.1 More non-blocking
+ 2.2 Remove easy interface internally
+ 2.3 Avoid having to remove/readd handles
+ 2.4 Fix HTTP Pipelining for PUT
+
+ 3. Documentation
+ 3.1 More and better
+
+ 4. FTP
+ 4.1 HOST
+ 4.2 Alter passive/active on failure and retry
+ 4.3 Earlier bad letter detection
+ 4.4 REST for large files
+ 4.5 FTP proxy support
+ 4.6 ASCII support
+
+ 5. HTTP
+ 5.1 Better persistency for HTTP 1.0
+ 5.2 support FF3 sqlite cookie files
+ 5.3 Rearrange request header order
+
+ 6. TELNET
+ 6.1 ditch stdin
+ 6.2 ditch telnet-specific select
+ 6.3 feature negotiation debug data
+ 6.4 send data in chunks
+
+ 7. SSL
+ 7.1 Disable specific versions
+ 7.2 Provide mutex locking API
+ 7.3 Evaluate SSL patches
+ 7.4 Cache OpenSSL contexts
+ 7.5 Export session ids
+ 7.6 Provide callback for cert verification
+ 7.7 Support other SSL libraries
+ 7.8 Support SRP on the TLS layer
+ 7.9 improve configure --with-ssl
+
+ 8. GnuTLS
+ 8.1 SSL engine stuff
+ 8.2 SRP
+ 8.3 check connection
+ 8.4 non-gcrypt
+
+ 9. Other protocols
+
+ 10. New protocols
+ 10.1 RSYNC
+
+ 11. Client
+ 11.1 sync
+ 11.2 glob posts
+ 11.3 prevent file overwriting
+ 11.4 simultaneous parallel transfers
+ 11.5 provide formpost headers
+ 11.6 url-specific options
+ 11.7 metalink support
+ 11.8 warning when setting an option
+
+ 12. Build
+ 12.1 roffit
+
+ 13. Test suite
+ 13.1 SSL tunnel
+ 13.2 nicer lacking perl message
+ 13.3 more protocols supported
+ 13.4 more platforms supported
+
+ 14. Next SONAME bump
+ 14.1 http-style HEAD output for ftp
+ 14.2 combine error codes
+ 14.3 extend CURLOPT_SOCKOPTFUNCTION prototype
+
+ 15. Next major release
+ 15.1 cleanup return codes
+ 15.2 remove obsolete defines
+ 15.3 size_t
+ 15.4 remove several functions
+ 15.5 remove CURLOPT_FAILONERROR
+ 15.6 remove CURLOPT_DNS_USE_GLOBAL_CACHE
+ 15.7 remove progress meter from libcurl
+
+==============================================================================
+
+1. libcurl
+
+1.1 Zero-copy interface
+
+ Introduce another callback interface for upload/download that makes one less
+ copy of data and thus a faster operation.
+ [http://curl.haxx.se/dev/no_copy_callbacks.txt]
+
+1.2 More data sharing
+
+ curl_share_* functions already exist and work, and they can be extended to
+ share more. For example, enable sharing of the ares channel and the
+ connection cache.
+
+1.3 struct lifreq
+
+ Use 'struct lifreq' and SIOCGLIFADDR instead of 'struct ifreq' and
+ SIOCGIFADDR on newer Solaris versions as they claim the latter is obsolete.
+ To support ipv6 interface addresses for network interfaces properly.
+
+1.4 signal-based resolver timeouts
+
+ libcurl built without an asynchronous resolver library uses alarm() to time
+ out DNS lookups. When a timeout occurs, this causes libcurl to jump from the
+ signal handler back into the library with a sigsetjmp, which effectively
+ causes libcurl to continue running within the signal handler. This is
+ non-portable and could cause problems on some platforms. A discussion on the
+ problem is available at http://curl.haxx.se/mail/lib-2008-09/0197.html
+
+ Also, alarm() provides timeout resolution only to the nearest second. alarm
+ ought to be replaced by setitimer on systems that support it.
+
+2. libcurl - multi interface
+
+2.1 More non-blocking
+
+ Make sure we don't ever loop because of non-blocking sockets returning
+ EWOULDBLOCK or similar. Blocking cases include:
+
+ - Name resolves on non-windows unless c-ares is used
+ - NSS SSL connections
+ - Active FTP connections
+ - HTTP proxy CONNECT operations
+ - SOCKS proxy handshakes
+ - file:// transfers
+ - TELNET transfers
+ - The "DONE" operation (post transfer protocol-specific actions) for the
+ protocols SFTP, SMTP, FTP. Fixing Curl_done() for this is a worthy task.
+
+2.2 Remove easy interface internally
+
+ Make curl_easy_perform() a wrapper-function that simply creates a multi
+ handle, adds the easy handle to it, runs curl_multi_perform() until the
+ transfer is done, then detach the easy handle, destroy the multi handle and
+ return the easy handle's return code. This will thus make everything
+ internally use and assume the multi interface. The select()-loop should use
+ curl_multi_socket().
+
+2.3 Avoid having to remove/readd handles
+
+ curl_multi_handle_control() - this can control the easy handle (while) added
+ to a multi handle in various ways:
+
+ o RESTART, unconditionally restart this easy handle's transfer from the
+ start, re-init the state
+
+ o RESTART_COMPLETED, restart this easy handle's transfer but only if the
+ existing transfer has already completed and it is in a "finished state".
+
+ o STOP, just stop this transfer and consider it completed
+
+ o PAUSE?
+
+ o RESUME?
+
+2.4 Fix HTTP Pipelining for PUT
+
+ HTTP Pipelining can be a way to greatly enhance performance for multiple
+ serial requests and currently libcurl only supports that for HEAD and GET
+ requests but it should also be possible for PUT.
+
+3. Documentation
+
+3.1 More and better
+
+ Exactly
+
+4. FTP
+
+4.1 HOST
+
+ HOST is a suggested command in the works for a client to tell which host name
+ to use, to offer FTP servers named-based virtual hosting:
+
+ http://tools.ietf.org/html/draft-hethmon-mcmurray-ftp-hosts-11
+
+4.2 Alter passive/active on failure and retry
+
+ When trying to connect passively to a server which only supports active
+ connections, libcurl returns CURLE_FTP_WEIRD_PASV_REPLY and closes the
+ connection. There could be a way to fallback to an active connection (and
+ vice versa). http://curl.haxx.se/bug/feature.cgi?id=1754793
+
+4.3 Earlier bad letter detection
+
+ Make the detection of (bad) %0d and %0a codes in FTP url parts earlier in the
+ process to avoid doing a resolve and connect in vain.
+
+4.4 REST for large files
+
+ REST fix for servers not behaving well on >2GB requests. This should fail if
+ the server doesn't set the pointer to the requested index. The tricky
+ (impossible?) part is to figure out if the server did the right thing or not.
+
+4.5 FTP proxy support
+
+ Support the most common FTP proxies, Philip Newton provided a list allegedly
+ from ncftp. This is not a subject without debate, and is probably not really
+ suitable for libcurl. http://curl.haxx.se/mail/archive-2003-04/0126.html
+
+4.6 ASCII support
+
+ FTP ASCII transfers do not follow RFC959. They don't convert the data
+ accordingly.
+
+5. HTTP
+
+5.1 Better persistency for HTTP 1.0
+
+ "Better" support for persistent connections over HTTP 1.0
+ http://curl.haxx.se/bug/feature.cgi?id=1089001
+
+5.2 support FF3 sqlite cookie files
+
+ Firefox 3 is changing from its former format to a a sqlite database instead.
+ We should consider how (lib)curl can/should support this.
+ http://curl.haxx.se/bug/feature.cgi?id=1871388
+
+5.3 Rearrange request header order
+
+ Server implementors often make an effort to detect browser and to reject
+ clients it can detect to not match. One of the last details we cannot yet
+ control in libcurl's HTTP requests, which also can be exploited to detect
+ that libcurl is in fact used even when it tries to impersonate a browser, is
+ the order of the request headers. I propose that we introduce a new option in
+ which you give headers a value, and then when the HTTP request is built it
+ sorts the headers based on that number. We could then have internally created
+ headers use a default value so only headers that need to be moved have to be
+ specified.
+
+
+6. TELNET
+
+6.1 ditch stdin
+
+Reading input (to send to the remote server) on stdin is a crappy solution for
+library purposes. We need to invent a good way for the application to be able
+to provide the data to send.
+
+6.2 ditch telnet-specific select
+
+ Move the telnet support's network select() loop go away and merge the code
+ into the main transfer loop. Until this is done, the multi interface won't
+ work for telnet.
+
+6.3 feature negotiation debug data
+
+ Add telnet feature negotiation data to the debug callback as header data.
+
+6.4 send data in chunks
+
+ Currently, telnet sends data one byte at a time. This is fine for interactive
+ use, but inefficient for any other. Sent data should be sent in larger
+ chunks.
+
+7. SSL
+
+7.1 Disable specific versions
+
+ Provide an option that allows for disabling specific SSL versions, such as
+ SSLv2 http://curl.haxx.se/bug/feature.cgi?id=1767276
+
+7.2 Provide mutex locking API
+
+ Provide a libcurl API for setting mutex callbacks in the underlying SSL
+ library, so that the same application code can use mutex-locking
+ independently of OpenSSL or GnutTLS being used.
+
+7.3 Evaluate SSL patches
+
+ Evaluate/apply Gertjan van Wingerde's SSL patches:
+ http://curl.haxx.se/mail/lib-2004-03/0087.html
+
+7.4 Cache OpenSSL contexts
+
+ "Look at SSL cafile - quick traces look to me like these are done on every
+ request as well, when they should only be necessary once per ssl context (or
+ once per handle)". The major improvement we can rather easily do is to make
+ sure we don't create and kill a new SSL "context" for every request, but
+ instead make one for every connection and re-use that SSL context in the same
+ style connections are re-used. It will make us use slightly more memory but
+ it will libcurl do less creations and deletions of SSL contexts.
+
+7.5 Export session ids
+
+ Add an interface to libcurl that enables "session IDs" to get
+ exported/imported. Cris Bailiff said: "OpenSSL has functions which can
+ serialise the current SSL state to a buffer of your choice, and recover/reset
+ the state from such a buffer at a later date - this is used by mod_ssl for
+ apache to implement and SSL session ID cache".
+
+7.6 Provide callback for cert verification
+
+ OpenSSL supports a callback for customised verification of the peer
+ certificate, but this doesn't seem to be exposed in the libcurl APIs. Could
+ it be? There's so much that could be done if it were!
+
+7.7 Support other SSL libraries
+
+ Make curl's SSL layer capable of using other free SSL libraries. Such as
+ MatrixSSL (http://www.matrixssl.org/).
+
+7.8 Support SRP on the TLS layer
+
+ Peter Sylvester's patch for SRP on the TLS layer. Awaits OpenSSL support for
+ this, no need to support this in libcurl before there's an OpenSSL release
+ that does it.
+
+7.9 improve configure --with-ssl
+
+ make the configure --with-ssl option first check for OpenSSL, then GnuTLS,
+ then NSS...
+
+8. GnuTLS
+
+8.1 SSL engine stuff
+
+ Is this even possible?
+
+8.2 SRP
+
+ Work out a common method with Peter Sylvester's OpenSSL-patch for SRP on the
+ TLS to provide name and password. GnuTLS already supports it...
+
+8.3 check connection
+
+ Add a way to check if the connection seems to be alive, to correspond to the
+ SSL_peak() way we use with OpenSSL.
+
+8.4 non-gcrypt
+
+ libcurl assumes that there are gcrypt functions available when
+ GnuTLS is.
+
+ GnuTLS can be built to use libnettle instead as crypto library,
+ which breaks the previously mentioned assumption
+
+ The correct fix would be to detect which crypto layer that is in use and
+ adapt our code to use that instead of blindly assuming gcrypt.
+
+9. Other protocols
+
+10. New protocols
+
+10.1 RSYNC
+
+ There's no RFC for protocol nor URI/URL format. An implementation should
+ most probably use an existing rsync library, such as librsync.
+
+11. Client
+
+11.1 sync
+
+ "curl --sync http://example.com/feed[1-100].rss" or
+ "curl --sync http://example.net/{index,calendar,history}.html"
+
+ Downloads a range or set of URLs using the remote name, but only if the
+ remote file is newer than the local file. A Last-Modified HTTP date header
+ should also be used to set the mod date on the downloaded file.
+
+11.2 glob posts
+
+ Globbing support for -d and -F, as in 'curl -d "name=foo[0-9]" URL'.
+ This is easily scripted though.
+
+11.3 prevent file overwriting
+
+ Add an option that prevents cURL from overwriting existing local files. When
+ used, and there already is an existing file with the target file name
+ (either -O or -o), a number should be appended (and increased if already
+ existing). So that index.html becomes first index.html.1 and then
+ index.html.2 etc.
+
+11.4 simultaneous parallel transfers
+
+ The client could be told to use maximum N simultaneous parallel transfers and
+ then just make sure that happens. It should of course not make more than one
+ connection to the same remote host. This would require the client to use the
+ multi interface. http://curl.haxx.se/bug/feature.cgi?id=1558595
+
+11.5 provide formpost headers
+
+ Extending the capabilities of the multipart formposting. How about leaving
+ the ';type=foo' syntax as it is and adding an extra tag (headers) which
+ works like this: curl -F "coolfiles=@fil1.txt;headers=@fil1.hdr" where
+ fil1.hdr contains extra headers like
+
+ Content-Type: text/plain; charset=KOI8-R"
+ Content-Transfer-Encoding: base64
+ X-User-Comment: Please don't use browser specific HTML code
+
+ which should overwrite the program reasonable defaults (plain/text,
+ 8bit...)
+
+11.6 url-specific options
+
+ Provide a way to make options bound to a specific URL among several on the
+ command line. Possibly by letting ':' separate options between URLs,
+ similar to this:
+
+ curl --data foo --url url.com : \
+ --url url2.com : \
+ --url url3.com --data foo3
+
+ (More details: http://curl.haxx.se/mail/archive-2004-07/0133.html)
+
+ The example would do a POST-GET-POST combination on a single command line.
+
+11.7 metalink support
+
+ Add metalink support to curl (http://www.metalinker.org/). This is most useful
+ with simultaneous parallel transfers (11.6) but not necessary.
+
+11.8 warning when setting an option
+
+ Display a warning when libcurl returns an error when setting an option.
+ This can be useful to tell when support for a particular feature hasn't been
+ compiled into the library.
+
+12. Build
+
+12.1 roffit
+
+ Consider extending 'roffit' to produce decent ASCII output, and use that
+ instead of (g)nroff when building src/hugehelp.c
+
+13. Test suite
+
+13.1 SSL tunnel
+
+ Make our own version of stunnel for simple port forwarding to enable HTTPS
+ and FTP-SSL tests without the stunnel dependency, and it could allow us to
+ provide test tools built with either OpenSSL or GnuTLS
+
+13.2 nicer lacking perl message
+
+ If perl wasn't found by the configure script, don't attempt to run the tests
+ but explain something nice why it doesn't.
+
+13.3 more protocols supported
+
+ Extend the test suite to include more protocols. The telnet could just do ftp
+ or http operations (for which we have test servers).
+
+13.4 more platforms supported
+
+ Make the test suite work on more platforms. OpenBSD and Mac OS. Remove
+ fork()s and it should become even more portable.
+
+14. Next SONAME bump
+
+14.1 http-style HEAD output for ftp
+
+ #undef CURL_FTP_HTTPSTYLE_HEAD in lib/ftp.c to remove the HTTP-style headers
+ from being output in NOBODY requests over ftp
+
+14.2 combine error codes
+
+ Combine some of the error codes to remove duplicates. The original
+ numbering should not be changed, and the old identifiers would be
+ macroed to the new ones in an CURL_NO_OLDIES section to help with
+ backward compatibility.
+
+ Candidates for removal and their replacements:
+
+ CURLE_FILE_COULDNT_READ_FILE => CURLE_REMOTE_FILE_NOT_FOUND
+ CURLE_FTP_COULDNT_RETR_FILE => CURLE_REMOTE_FILE_NOT_FOUND
+ CURLE_FTP_COULDNT_USE_REST => CURLE_RANGE_ERROR
+ CURLE_FUNCTION_NOT_FOUND => CURLE_FAILED_INIT
+ CURLE_LDAP_INVALID_URL => CURLE_URL_MALFORMAT
+ CURLE_TFTP_NOSUCHUSER => CURLE_TFTP_ILLEGAL
+ CURLE_TFTP_NOTFOUND => CURLE_REMOTE_FILE_NOT_FOUND
+ CURLE_TFTP_PERM => CURLE_REMOTE_ACCESS_DENIED
+
+14.3 extend CURLOPT_SOCKOPTFUNCTION prototype
+
+ The current prototype only provides 'purpose' that tells what the
+ connection/socket is for, but not any protocol or similar. It makes it hard
+ for applications to differentiate on TCP vs UDP and even HTTP vs FTP and
+ similar.
+
+15. Next major release
+
+15.1 cleanup return codes
+
+ curl_easy_cleanup() returns void, but curl_multi_cleanup() returns a
+ CURLMcode. These should be changed to be the same.
+
+15.2 remove obsolete defines
+
+ remove obsolete defines from curl/curl.h
+
+15.3 size_t
+
+ make several functions use size_t instead of int in their APIs
+
+15.4 remove several functions
+
+ remove the following functions from the public API:
+
+ curl_getenv
+
+ curl_mprintf (and variations)
+
+ curl_strequal
+
+ curl_strnequal
+
+ They will instead become curlx_ - alternatives. That makes the curl app
+ still capable of using them, by building with them from source.
+
+ These functions have no purpose anymore:
+
+ curl_multi_socket
+
+ curl_multi_socket_all
+
+15.5 remove CURLOPT_FAILONERROR
+
+ Remove support for CURLOPT_FAILONERROR, it has gotten too kludgy and weird
+ internally. Let the app judge success or not for itself.
+
+15.6 remove CURLOPT_DNS_USE_GLOBAL_CACHE
+
+ Remove support for a global DNS cache. Anything global is silly, and we
+ already offer the share interface for the same functionality but done
+ "right".
+
+15.7 remove progress meter from libcurl
+
+ The internally provided progress meter output doesn't belong in the library.
+ Basically no application wants it (apart from curl) but instead applications
+ can and should do their own progress meters using the progress callback.
+
+ The progress callback should then be bumped as well to get proper 64bit
+ variable types passed to it instead of doubles so that big files work
+ correctly.
diff --git a/docs/TheArtOfHttpScripting b/docs/TheArtOfHttpScripting
new file mode 100644
index 0000000..183dd17
--- /dev/null
+++ b/docs/TheArtOfHttpScripting
@@ -0,0 +1,491 @@
+Online: http://curl.haxx.se/docs/httpscripting.html
+Date: May 28, 2008
+
+ The Art Of Scripting HTTP Requests Using Curl
+ =============================================
+
+ This document will assume that you're familiar with HTML and general
+ networking.
+
+ The possibility to write scripts is essential to make a good computer
+ system. Unix' capability to be extended by shell scripts and various tools to
+ run various automated commands and scripts is one reason why it has succeeded
+ so well.
+
+ The increasing amount of applications moving to the web has made "HTTP
+ Scripting" more frequently requested and wanted. To be able to automatically
+ extract information from the web, to fake users, to post or upload data to
+ web servers are all important tasks today.
+
+ Curl is a command line tool for doing all sorts of URL manipulations and
+ transfers, but this particular document will focus on how to use it when
+ doing HTTP requests for fun and profit. I'll assume that you know how to
+ invoke 'curl --help' or 'curl --manual' to get basic information about it.
+
+ Curl is not written to do everything for you. It makes the requests, it gets
+ the data, it sends data and it retrieves the information. You probably need
+ to glue everything together using some kind of script language or repeated
+ manual invokes.
+
+1. The HTTP Protocol
+
+ HTTP is the protocol used to fetch data from web servers. It is a very simple
+ protocol that is built upon TCP/IP. The protocol also allows information to
+ get sent to the server from the client using a few different methods, as will
+ be shown here.
+
+ HTTP is plain ASCII text lines being sent by the client to a server to
+ request a particular action, and then the server replies a few text lines
+ before the actual requested content is sent to the client.
+
+ Using curl's option --verbose (-v as a short option) will display what kind of
+ commands curl sends to the server, as well as a few other informational texts.
+ --verbose is the single most useful option when it comes to debug or even
+ understand the curl<->server interaction.
+
+2. URL
+
+ The Uniform Resource Locator format is how you specify the address of a
+ particular resource on the Internet. You know these, you've seen URLs like
+ http://curl.haxx.se or https://yourbank.com a million times.
+
+3. GET a page
+
+ The simplest and most common request/operation made using HTTP is to get a
+ URL. The URL could itself refer to a web page, an image or a file. The client
+ issues a GET request to the server and receives the document it asked for.
+ If you issue the command line
+
+ curl http://curl.haxx.se
+
+ you get a web page returned in your terminal window. The entire HTML document
+ that that URL holds.
+
+ All HTTP replies contain a set of headers that are normally hidden, use
+ curl's --include (-i) option to display them as well as the rest of the
+ document. You can also ask the remote server for ONLY the headers by using the
+ --head (-I) option (which will make curl issue a HEAD request).
+
+4. Forms
+
+ Forms are the general way a web site can present a HTML page with fields for
+ the user to enter data in, and then press some kind of 'OK' or 'submit'
+ button to get that data sent to the server. The server then typically uses
+ the posted data to decide how to act. Like using the entered words to search
+ in a database, or to add the info in a bug track system, display the entered
+ address on a map or using the info as a login-prompt verifying that the user
+ is allowed to see what it is about to see.
+
+ Of course there has to be some kind of program in the server end to receive
+ the data you send. You cannot just invent something out of the air.
+
+ 4.1 GET
+
+ A GET-form uses the method GET, as specified in HTML like:
+
+ <form method="GET" action="junk.cgi">
+ <input type=text name="birthyear">
+ <input type=submit name=press value="OK">
+ </form>
+
+ In your favorite browser, this form will appear with a text box to fill in
+ and a press-button labeled "OK". If you fill in '1905' and press the OK
+ button, your browser will then create a new URL to get for you. The URL will
+ get "junk.cgi?birthyear=1905&press=OK" appended to the path part of the
+ previous URL.
+
+ If the original form was seen on the page "www.hotmail.com/when/birth.html",
+ the second page you'll get will become
+ "www.hotmail.com/when/junk.cgi?birthyear=1905&press=OK".
+
+ Most search engines work this way.
+
+ To make curl do the GET form post for you, just enter the expected created
+ URL:
+
+ curl "http://www.hotmail.com/when/junk.cgi?birthyear=1905&press=OK"
+
+ 4.2 POST
+
+ The GET method makes all input field names get displayed in the URL field of
+ your browser. That's generally a good thing when you want to be able to
+ bookmark that page with your given data, but it is an obvious disadvantage
+ if you entered secret information in one of the fields or if there are a
+ large amount of fields creating a very long and unreadable URL.
+
+ The HTTP protocol then offers the POST method. This way the client sends the
+ data separated from the URL and thus you won't see any of it in the URL
+ address field.
+
+ The form would look very similar to the previous one:
+
+ <form method="POST" action="junk.cgi">
+ <input type=text name="birthyear">
+ <input type=submit name=press value=" OK ">
+ </form>
+
+ And to use curl to post this form with the same data filled in as before, we
+ could do it like:
+
+ curl --data "birthyear=1905&press=%20OK%20" http://www.hotmail.com/when/junk.cgi
+
+ This kind of POST will use the Content-Type
+ application/x-www-form-urlencoded and is the most widely used POST kind.
+
+ The data you send to the server MUST already be properly encoded, curl will
+ not do that for you. For example, if you want the data to contain a space,
+ you need to replace that space with %20 etc. Failing to comply with this
+ will most likely cause your data to be received wrongly and messed up.
+
+ Recent curl versions can in fact url-encode POST data for you, like this:
+
+ curl --data-urlencode "name=I am Daniel" http://www.example.com
+
+ 4.3 File Upload POST
+
+ Back in late 1995 they defined an additional way to post data over HTTP. It
+ is documented in the RFC 1867, why this method sometimes is referred to as
+ RFC1867-posting.
+
+ This method is mainly designed to better support file uploads. A form that
+ allows a user to upload a file could be written like this in HTML:
+
+ <form method="POST" enctype='multipart/form-data' action="upload.cgi">
+ <input type=file name=upload>
+ <input type=submit name=press value="OK">
+ </form>
+
+ This clearly shows that the Content-Type about to be sent is
+ multipart/form-data.
+
+ To post to a form like this with curl, you enter a command line like:
+
+ curl --form upload=@localfilename --form press=OK [URL]
+
+ 4.4 Hidden Fields
+
+ A very common way for HTML based application to pass state information
+ between pages is to add hidden fields to the forms. Hidden fields are
+ already filled in, they aren't displayed to the user and they get passed
+ along just as all the other fields.
+
+ A similar example form with one visible field, one hidden field and one
+ submit button could look like:
+
+ <form method="POST" action="foobar.cgi">
+ <input type=text name="birthyear">
+ <input type=hidden name="person" value="daniel">
+ <input type=submit name="press" value="OK">
+ </form>
+
+ To post this with curl, you won't have to think about if the fields are
+ hidden or not. To curl they're all the same:
+
+ curl --data "birthyear=1905&press=OK&person=daniel" [URL]
+
+ 4.5 Figure Out What A POST Looks Like
+
+ When you're about fill in a form and send to a server by using curl instead
+ of a browser, you're of course very interested in sending a POST exactly the
+ way your browser does.
+
+ An easy way to get to see this, is to save the HTML page with the form on
+ your local disk, modify the 'method' to a GET, and press the submit button
+ (you could also change the action URL if you want to).
+
+ You will then clearly see the data get appended to the URL, separated with a
+ '?'-letter as GET forms are supposed to.
+
+5. PUT
+
+ The perhaps best way to upload data to a HTTP server is to use PUT. Then
+ again, this of course requires that someone put a program or script on the
+ server end that knows how to receive a HTTP PUT stream.
+
+ Put a file to a HTTP server with curl:
+
+ curl --upload-file uploadfile http://www.uploadhttp.com/receive.cgi
+
+6. HTTP Authentication
+
+ HTTP Authentication is the ability to tell the server your username and
+ password so that it can verify that you're allowed to do the request you're
+ doing. The Basic authentication used in HTTP (which is the type curl uses by
+ default) is *plain* *text* based, which means it sends username and password
+ only slightly obfuscated, but still fully readable by anyone that sniffs on
+ the network between you and the remote server.
+
+ To tell curl to use a user and password for authentication:
+
+ curl --user name:password http://www.secrets.com
+
+ The site might require a different authentication method (check the headers
+ returned by the server), and then --ntlm, --digest, --negotiate or even
+ --anyauth might be options that suit you.
+
+ Sometimes your HTTP access is only available through the use of a HTTP
+ proxy. This seems to be especially common at various companies. A HTTP proxy
+ may require its own user and password to allow the client to get through to
+ the Internet. To specify those with curl, run something like:
+
+ curl --proxy-user proxyuser:proxypassword curl.haxx.se
+
+ If your proxy requires the authentication to be done using the NTLM method,
+ use --proxy-ntlm, if it requires Digest use --proxy-digest.
+
+ If you use any one these user+password options but leave out the password
+ part, curl will prompt for the password interactively.
+
+ Do note that when a program is run, its parameters might be possible to see
+ when listing the running processes of the system. Thus, other users may be
+ able to watch your passwords if you pass them as plain command line
+ options. There are ways to circumvent this.
+
+ It is worth noting that while this is how HTTP Authentication works, very
+ many web sites will not use this concept when they provide logins etc. See
+ the Web Login chapter further below for more details on that.
+
+7. Referer
+
+ A HTTP request may include a 'referer' field (yes it is misspelled), which
+ can be used to tell from which URL the client got to this particular
+ resource. Some programs/scripts check the referer field of requests to verify
+ that this wasn't arriving from an external site or an unknown page. While
+ this is a stupid way to check something so easily forged, many scripts still
+ do it. Using curl, you can put anything you want in the referer-field and
+ thus more easily be able to fool the server into serving your request.
+
+ Use curl to set the referer field with:
+
+ curl --referer http://curl.haxx.se http://daniel.haxx.se
+
+8. User Agent
+
+ Very similar to the referer field, all HTTP requests may set the User-Agent
+ field. It names what user agent (client) that is being used. Many
+ applications use this information to decide how to display pages. Silly web
+ programmers try to make different pages for users of different browsers to
+ make them look the best possible for their particular browsers. They usually
+ also do different kinds of javascript, vbscript etc.
+
+ At times, you will see that getting a page with curl will not return the same
+ page that you see when getting the page with your browser. Then you know it
+ is time to set the User Agent field to fool the server into thinking you're
+ one of those browsers.
+
+ To make curl look like Internet Explorer on a Windows 2000 box:
+
+ curl --user-agent "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)" [URL]
+
+ Or why not look like you're using Netscape 4.73 on a Linux (PIII) box:
+
+ curl --user-agent "Mozilla/4.73 [en] (X11; U; Linux 2.2.15 i686)" [URL]
+
+9. Redirects
+
+ When a resource is requested from a server, the reply from the server may
+ include a hint about where the browser should go next to find this page, or a
+ new page keeping newly generated output. The header that tells the browser
+ to redirect is Location:.
+
+ Curl does not follow Location: headers by default, but will simply display
+ such pages in the same manner it display all HTTP replies. It does however
+ feature an option that will make it attempt to follow the Location: pointers.
+
+ To tell curl to follow a Location:
+
+ curl --location http://www.sitethatredirects.com
+
+ If you use curl to POST to a site that immediately redirects you to another
+ page, you can safely use --location (-L) and --data/--form together. Curl will
+ only use POST in the first request, and then revert to GET in the following
+ operations.
+
+10. Cookies
+
+ The way the web browsers do "client side state control" is by using
+ cookies. Cookies are just names with associated contents. The cookies are
+ sent to the client by the server. The server tells the client for what path
+ and host name it wants the cookie sent back, and it also sends an expiration
+ date and a few more properties.
+
+ When a client communicates with a server with a name and path as previously
+ specified in a received cookie, the client sends back the cookies and their
+ contents to the server, unless of course they are expired.
+
+ Many applications and servers use this method to connect a series of requests
+ into a single logical session. To be able to use curl in such occasions, we
+ must be able to record and send back cookies the way the web application
+ expects them. The same way browsers deal with them.
+
+ The simplest way to send a few cookies to the server when getting a page with
+ curl is to add them on the command line like:
+
+ curl --cookie "name=Daniel" http://www.cookiesite.com
+
+ Cookies are sent as common HTTP headers. This is practical as it allows curl
+ to record cookies simply by recording headers. Record cookies with curl by
+ using the --dump-header (-D) option like:
+
+ curl --dump-header headers_and_cookies http://www.cookiesite.com
+
+ (Take note that the --cookie-jar option described below is a better way to
+ store cookies.)
+
+ Curl has a full blown cookie parsing engine built-in that comes to use if you
+ want to reconnect to a server and use cookies that were stored from a
+ previous connection (or handicrafted manually to fool the server into
+ believing you had a previous connection). To use previously stored cookies,
+ you run curl like:
+
+ curl --cookie stored_cookies_in_file http://www.cookiesite.com
+
+ Curl's "cookie engine" gets enabled when you use the --cookie option. If you
+ only want curl to understand received cookies, use --cookie with a file that
+ doesn't exist. Example, if you want to let curl understand cookies from a page
+ and follow a location (and thus possibly send back cookies it received), you
+ can invoke it like:
+
+ curl --cookie nada --location http://www.cookiesite.com
+
+ Curl has the ability to read and write cookie files that use the same file
+ format that Netscape and Mozilla do. It is a convenient way to share cookies
+ between browsers and automatic scripts. The --cookie (-b) switch automatically
+ detects if a given file is such a cookie file and parses it, and by using the
+ --cookie-jar (-c) option you'll make curl write a new cookie file at the end of
+ an operation:
+
+ curl --cookie cookies.txt --cookie-jar newcookies.txt http://www.cookiesite.com
+
+11. HTTPS
+
+ There are a few ways to do secure HTTP transfers. The by far most common
+ protocol for doing this is what is generally known as HTTPS, HTTP over
+ SSL. SSL encrypts all the data that is sent and received over the network and
+ thus makes it harder for attackers to spy on sensitive information.
+
+ SSL (or TLS as the latest version of the standard is called) offers a
+ truckload of advanced features to allow all those encryptions and key
+ infrastructure mechanisms encrypted HTTP requires.
+
+ Curl supports encrypted fetches thanks to the freely available OpenSSL
+ libraries. To get a page from a HTTPS server, simply run curl like:
+
+ curl https://that.secure.server.com
+
+ 11.1 Certificates
+
+ In the HTTPS world, you use certificates to validate that you are the one
+ you claim to be, as an addition to normal passwords. Curl supports client-
+ side certificates. All certificates are locked with a pass phrase, which you
+ need to enter before the certificate can be used by curl. The pass phrase
+ can be specified on the command line or if not, entered interactively when
+ curl queries for it. Use a certificate with curl on a HTTPS server like:
+
+ curl --cert mycert.pem https://that.secure.server.com
+
+ curl also tries to verify that the server is who it claims to be, by
+ verifying the server's certificate against a locally stored CA cert
+ bundle. Failing the verification will cause curl to deny the connection. You
+ must then use --insecure (-k) in case you want to tell curl to ignore that
+ the server can't be verified.
+
+ More about server certificate verification and ca cert bundles can be read
+ in the SSLCERTS document, available online here:
+
+ http://curl.haxx.se/docs/sslcerts.html
+
+12. Custom Request Elements
+
+ Doing fancy stuff, you may need to add or change elements of a single curl
+ request.
+
+ For example, you can change the POST request to a PROPFIND and send the data
+ as "Content-Type: text/xml" (instead of the default Content-Type) like this:
+
+ curl --data "<xml>" --header "Content-Type: text/xml" --request PROPFIND url.com
+
+ You can delete a default header by providing one without content. Like you
+ can ruin the request by chopping off the Host: header:
+
+ curl --header "Host:" http://mysite.com
+
+ You can add headers the same way. Your server may want a "Destination:"
+ header, and you can add it:
+
+ curl --header "Destination: http://moo.com/nowhere" http://url.com
+
+13. Web Login
+
+ While not strictly just HTTP related, it still cause a lot of people problems
+ so here's the executive run-down of how the vast majority of all login forms
+ work and how to login to them using curl.
+
+ It can also be noted that to do this properly in an automated fashion, you
+ will most certainly need to script things and do multiple curl invokes etc.
+
+ First, servers mostly use cookies to track the logged-in status of the
+ client, so you will need to capture the cookies you receive in the
+ responses. Then, many sites also set a special cookie on the login page (to
+ make sure you got there through their login page) so you should make a habit
+ of first getting the login-form page to capture the cookies set there.
+
+ Some web-based login systems features various amounts of javascript, and
+ sometimes they use such code to set or modify cookie contents. Possibly they
+ do that to prevent programmed logins, like this manual describes how to...
+ Anyway, if reading the code isn't enough to let you repeat the behavior
+ manually, capturing the HTTP requests done by your browers and analyzing the
+ sent cookies is usually a working method to work out how to shortcut the
+ javascript need.
+
+ In the actual <form> tag for the login, lots of sites fill-in random/session
+ or otherwise secretly generated hidden tags and you may need to first capture
+ the HTML code for the login form and extract all the hidden fields to be able
+ to do a proper login POST. Remember that the contents need to be URL encoded
+ when sent in a normal POST.
+
+
+14. Debug
+
+ Many times when you run curl on a site, you'll notice that the site doesn't
+ seem to respond the same way to your curl requests as it does to your
+ browser's.
+
+ Then you need to start making your curl requests more similar to your
+ browser's requests:
+
+ * Use the --trace-ascii option to store fully detailed logs of the requests
+ for easier analyzing and better understanding
+
+ * Make sure you check for and use cookies when needed (both reading with
+ --cookie and writing with --cookie-jar)
+
+ * Set user-agent to one like a recent popular browser does
+
+ * Set referer like it is set by the browser
+
+ * If you use POST, make sure you send all the fields and in the same order as
+ the browser does it. (See chapter 4.5 above)
+
+ A very good helper to make sure you do this right, is the LiveHTTPHeader tool
+ that lets you view all headers you send and receive with Mozilla/Firefox
+ (even when using HTTPS).
+
+ A more raw approach is to capture the HTTP traffic on the network with tools
+ such as ethereal or tcpdump and check what headers that were sent and
+ received by the browser. (HTTPS makes this technique inefficient.)
+
+15. References
+
+ RFC 2616 is a must to read if you want in-depth understanding of the HTTP
+ protocol.
+
+ RFC 2396 explains the URL syntax.
+
+ RFC 2109 defines how cookies are supposed to work.
+
+ RFC 1867 defines the HTTP post upload format.
+
+ http://www.openssl.org is the home of the OpenSSL project
+
+ http://curl.haxx.se is the home of the cURL project
diff --git a/docs/VERSIONS b/docs/VERSIONS
new file mode 100644
index 0000000..21c0d90
--- /dev/null
+++ b/docs/VERSIONS
@@ -0,0 +1,67 @@
+ _ _ ____ _
+ ___| | | | _ \| |
+ / __| | | | |_) | |
+ | (__| |_| | _ <| |___
+ \___|\___/|_| \_\_____|
+
+Version Numbers and Releases
+
+ Curl is not only curl. Curl is also libcurl. They're actually individually
+ versioned, but they mostly follow each other rather closely.
+
+ The version numbering is always built up using the same system:
+
+ X.Y[.Z][-preN]
+
+ Where
+ X is main version number
+ Y is release number
+ Z is patch number
+ N is pre-release number
+
+ One of these numbers will get bumped in each new release. The numbers to the
+ right of a bumped number will be reset to zero. If Z is zero, it may not be
+ included in the version number. The pre release number is only included in
+ pre releases (they're never used in public, official, releases).
+
+ The main version number will get bumped when *really* big, world colliding
+ changes are made. The release number is bumped when big changes are
+ performed. The patch number is bumped when the changes are mere bugfixes and
+ only minor feature changes. The pre-release is a counter, to identify which
+ pre-release a certain release is.
+
+ When reaching the end of a pre-release period, the version without the
+ pre-release part will be released as a public release.
+
+ It means that after release 1.2.3, we can release 2.0 if something really big
+ has been made, 1.3 if not that big changes were made or 1.2.4 if mostly bugs
+ were fixed. Before 1.2.4 is released, we might release a 1.2.4-pre1 release
+ for the brave people to try before the actual release.
+
+ Bumping, as in increasing the number with 1, is unconditionally only
+ affecting one of the numbers (except the ones to the right of it, that may be
+ set to zero). 1 becomes 2, 3 becomes 4, 9 becomes 10, 88 becomes 89 and 99
+ becomes 100. So, after 1.2.9 comes 1.2.10. After 3.99.3, 3.100 might come.
+
+ All original curl source release archives are named according to the libcurl
+ version (not according to the curl client version that, as said before, might
+ differ).
+
+ As a service to any application that might want to support new libcurl
+ features while still being able to build with older versions, all releases
+ have the libcurl version stored in the curl/curlver.h file using a static
+ numbering scheme that can be used for comparison. The version number is
+ defined as:
+
+ #define LIBCURL_VERSION_NUM 0xXXYYZZ
+
+ Where XX, YY and ZZ are the main version, release and patch numbers in
+ hexadecimal. All three numbers are always represented using two digits. 1.2
+ would appear as "0x010200" while version 9.11.7 appears as "0x090b07".
+
+ This 6-digit hexadecimal number does not show pre-release number, and it is
+ always a greater number in a more recent release. It makes comparisons with
+ greater than and less than work.
+
+ This number is also available as three separate defines:
+ LIBCURL_VERSION_MAJOR, LIBCURL_VERSION_MINOR and LIBCURL_VERSION_PATCH.
diff --git a/docs/curl-config.1 b/docs/curl-config.1
new file mode 100644
index 0000000..c4f4e2b
--- /dev/null
+++ b/docs/curl-config.1
@@ -0,0 +1,99 @@
+.\" **************************************************************************
+.\" * _ _ ____ _
+.\" * Project ___| | | | _ \| |
+.\" * / __| | | | |_) | |
+.\" * | (__| |_| | _ <| |___
+.\" * \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" *
+.\" * This software is licensed as described in the file COPYING, which
+.\" * you should have received as part of this distribution. The terms
+.\" * are also available at http://curl.haxx.se/docs/copyright.html.
+.\" *
+.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+.\" * copies of the Software, and permit persons to whom the Software is
+.\" * furnished to do so, under the terms of the COPYING file.
+.\" *
+.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+.\" * KIND, either express or implied.
+.\" *
+.\" **************************************************************************
+.\"
+.TH curl-config 1 "25 Oct 2007" "Curl 7.17.1" "curl-config manual"
+.SH NAME
+curl-config \- Get information about a libcurl installation
+.SH SYNOPSIS
+.B curl-config [options]
+.SH DESCRIPTION
+.B curl-config
+displays information about the curl and libcurl installation.
+.SH OPTIONS
+.IP "--ca"
+Displays the built-in path to the CA cert bundle this libcurl uses.
+.IP "--cc"
+Displays the compiler used to build libcurl.
+.IP "--cflags"
+Set of compiler options (CFLAGS) to use when compiling files that use
+libcurl. Currently that is only the include path to the curl include files.
+.IP "--checkfor [version]"
+Specify the oldest possible libcurl version string you want, and this
+script will return 0 if the current installation is new enough or it
+returns 1 and outputs a text saying that the current version is not new
+enough. (Added in 7.15.4)
+.IP "--configure"
+Displays the arguments given to configure when building curl.
+.IP "--feature"
+Lists what particular main features the installed libcurl was built with. At
+the time of writing, this list may include SSL, KRB4 or IPv6. Do not assume
+any particular order. The keywords will be separated by newlines. There may be
+none, one, or several keywords in the list.
+.IP "--help"
+Displays the available options.
+.IP "--libs"
+Shows the complete set of libs and other linker options you will need in order
+to link your application with libcurl.
+.IP "--prefix"
+This is the prefix used when libcurl was installed. Libcurl is then installed
+in $prefix/lib and its header files are installed in $prefix/include and so
+on. The prefix is set with "configure --prefix".
+.IP "--protocols"
+Lists what particular protocols the installed libcurl was built to support. At
+the time of writing, this list may include HTTP, HTTPS, FTP, FTPS, FILE,
+TELNET, LDAP, DICT. Do not assume any particular order. The protocols will
+be listed using uppercase and are separated by newlines. There may be none,
+one, or several protocols in the list. (Added in 7.13.0)
+.IP "--static-libs"
+Shows the complete set of libs and other linker options you will need in order
+to link your application with libcurl statically. (Added in 7.17.1)
+.IP "--version"
+Outputs version information about the installed libcurl.
+.IP "--vernum"
+Outputs version information about the installed libcurl, in numerical mode.
+This outputs the version number, in hexadecimal, with 8 bits for each part;
+major, minor, patch. So that libcurl 7.7.4 would appear as 070704 and libcurl
+12.13.14 would appear as 0c0d0e... Note that the initial zero might be
+omitted. (This option was broken in the 7.15.0 release.)
+.SH "EXAMPLES"
+What linker options do I need when I link with libcurl?
+
+ $ curl-config --libs
+
+What compiler options do I need when I compile using libcurl functions?
+
+ $ curl-config --cflags
+
+How do I know if libcurl was built with SSL support?
+
+ $ curl-config --feature | grep SSL
+
+What's the installed libcurl version?
+
+ $ curl-config --version
+
+How do I build a single file with a one-line command?
+
+ $ `curl-config --cc --cflags --libs` -o example example.c
+
+.SH "SEE ALSO"
+.BR curl (1)
diff --git a/docs/curl-config.html b/docs/curl-config.html
new file mode 100644
index 0000000..3f49388
--- /dev/null
+++ b/docs/curl-config.html
@@ -0,0 +1,90 @@
+<html><head>
+<title>curl-config man page</title>
+<meta name="generator" content="roffit 0.7">
+<STYLE type="text/css">
+P.level0 {
+ padding-left: 2em;
+}
+
+P.level1 {
+ padding-left: 4em;
+}
+
+P.level2 {
+ padding-left: 6em;
+}
+
+span.emphasis {
+ font-style: italic;
+}
+
+span.bold {
+ font-weight: bold;
+}
+
+span.manpage {
+ font-weight: bold;
+}
+
+h2.nroffsh {
+ background-color: #e0e0e0;
+}
+
+span.nroffip {
+ font-weight: bold;
+ font-size: 120%;
+ font-family: monospace;
+}
+
+p.roffit {
+ text-align: center;
+ font-size: 80%;
+}
+</STYLE>
+</head><body>
+
+<p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
+<p class="level0">curl-config - Get information about a libcurl installation <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><span Class="bold">curl-config [options]</span> <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0"><span Class="bold">curl-config</span> displays information about the curl and libcurl installation. <a name="OPTIONS"></a><h2 class="nroffsh">OPTIONS</h2>
+<p class="level0">
+<p class="level0"><a name="--ca"></a><span class="nroffip">--ca</span>
+<p class="level1">Displays the built-in path to the CA cert bundle this libcurl uses.
+<p class="level0"><a name="--cc"></a><span class="nroffip">--cc</span>
+<p class="level1">Displays the compiler used to build libcurl.
+<p class="level0"><a name="--cflags"></a><span class="nroffip">--cflags</span>
+<p class="level1">Set of compiler options (CFLAGS) to use when compiling files that use libcurl. Currently that is only the include path to the curl include files.
+<p class="level0"><a name="--checkfor"></a><span class="nroffip">--checkfor [version]</span>
+<p class="level1">Specify the oldest possible libcurl version string you want, and this script will return 0 if the current installation is new enough or it returns 1 and outputs a text saying that the current version is not new enough. (Added in 7.15.4)
+<p class="level0"><a name="--configure"></a><span class="nroffip">--configure</span>
+<p class="level1">Displays the arguments given to configure when building curl.
+<p class="level0"><a name="--feature"></a><span class="nroffip">--feature</span>
+<p class="level1">Lists what particular main features the installed libcurl was built with. At the time of writing, this list may include SSL, KRB4 or IPv6. Do not assume any particular order. The keywords will be separated by newlines. There may be none, one, or several keywords in the list.
+<p class="level0"><a name="--help"></a><span class="nroffip">--help</span>
+<p class="level1">Displays the available options.
+<p class="level0"><a name="--libs"></a><span class="nroffip">--libs</span>
+<p class="level1">Shows the complete set of libs and other linker options you will need in order to link your application with libcurl.
+<p class="level0"><a name="--prefix"></a><span class="nroffip">--prefix</span>
+<p class="level1">This is the prefix used when libcurl was installed. Libcurl is then installed in $prefix/lib and its header files are installed in $prefix/include and so on. The prefix is set with "configure --prefix".
+<p class="level0"><a name="--protocols"></a><span class="nroffip">--protocols</span>
+<p class="level1">Lists what particular protocols the installed libcurl was built to support. At the time of writing, this list may include HTTP, HTTPS, FTP, FTPS, FILE, TELNET, LDAP, DICT. Do not assume any particular order. The protocols will be listed using uppercase and are separated by newlines. There may be none, one, or several protocols in the list. (Added in 7.13.0)
+<p class="level0"><a name="--static-libs"></a><span class="nroffip">--static-libs</span>
+<p class="level1">Shows the complete set of libs and other linker options you will need in order to link your application with libcurl statically. (Added in 7.17.1)
+<p class="level0"><a name="--version"></a><span class="nroffip">--version</span>
+<p class="level1">Outputs version information about the installed libcurl.
+<p class="level0"><a name="--vernum"></a><span class="nroffip">--vernum</span>
+<p class="level1">Outputs version information about the installed libcurl, in numerical mode. This outputs the version number, in hexadecimal, with 8 bits for each part; major, minor, patch. So that libcurl 7.7.4 would appear as 070704 and libcurl 12.13.14 would appear as 0c0d0e... Note that the initial zero might be omitted. (This option was broken in the 7.15.0 release.) <a name="EXAMPLES"></a><h2 class="nroffsh">EXAMPLES</h2>
+<p class="level0">What linker options do I need when I link with libcurl?
+<p class="level0">&nbsp; $ curl-config --libs
+<p class="level0">What compiler options do I need when I compile using libcurl functions?
+<p class="level0">&nbsp; $ curl-config --cflags
+<p class="level0">How do I know if libcurl was built with SSL support?
+<p class="level0">&nbsp; $ curl-config --feature | grep SSL
+<p class="level0">What's the installed libcurl version?
+<p class="level0">&nbsp; $ curl-config --version
+<p class="level0">How do I build a single file with a one-line command?
+<p class="level0">&nbsp; $ `curl-config --cc --cflags --libs` -o example example.c
+<p class="level0"><a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><span Class="manpage">curl (1)</span> <p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/curl-config.pdf b/docs/curl-config.pdf
new file mode 100644
index 0000000..074e1ca
--- /dev/null
+++ b/docs/curl-config.pdf
Binary files differ
diff --git a/docs/curl.1 b/docs/curl.1
new file mode 100644
index 0000000..2acd7b7
--- /dev/null
+++ b/docs/curl.1
@@ -0,0 +1,1767 @@
+.\" **************************************************************************
+.\" * _ _ ____ _
+.\" * Project ___| | | | _ \| |
+.\" * / __| | | | |_) | |
+.\" * | (__| |_| | _ <| |___
+.\" * \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" *
+.\" * This software is licensed as described in the file COPYING, which
+.\" * you should have received as part of this distribution. The terms
+.\" * are also available at http://curl.haxx.se/docs/copyright.html.
+.\" *
+.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+.\" * copies of the Software, and permit persons to whom the Software is
+.\" * furnished to do so, under the terms of the COPYING file.
+.\" *
+.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+.\" * KIND, either express or implied.
+.\" *
+.\" **************************************************************************
+.\"
+.TH curl 1 "28 November 2009" "Curl 7.20.0" "Curl Manual"
+.SH NAME
+curl \- transfer a URL
+.SH SYNOPSIS
+.B curl [options]
+.I [URL...]
+.SH DESCRIPTION
+.B curl
+is a tool to transfer data from or to a server, using one of the supported
+protocols (DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP,
+LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, TELNET and TFTP). The
+command is designed to work without user interaction.
+
+curl offers a busload of useful tricks like proxy support, user
+authentication, FTP upload, HTTP post, SSL connections, cookies, file transfer
+resume and more. As you will see below, the number of features will make your
+head spin!
+
+curl is powered by libcurl for all transfer-related features. See
+.BR libcurl (3)
+for details.
+.SH URL
+The URL syntax is protocol-dependent. You'll find a detailed description in
+RFC 3986.
+
+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
+
+Nested sequences are not supported, but you can use several ones next to each
+other:
+
+ http://any.org/archive[1996-1999]/vol[1-4]/part{a,b,c}.html
+
+You can specify any amount of URLs on the command line. They will be fetched
+in a sequential manner in the specified order.
+
+You can specify a step counter for the ranges to get every Nth number or
+letter:
+
+ http://www.numericals.com/file[1-100:10].txt
+ http://www.letters.com/file[a-z:2].txt
+
+If you specify URL without protocol:// prefix, curl will attempt to guess what
+protocol you might want. It will then default to HTTP but try other protocols
+based on often-used host name prefixes. For example, for host names starting
+with "ftp." curl will assume you want to speak FTP.
+
+curl will do its best to use what you pass to it as a URL. It is not trying to
+validate it as a syntactically correct URL by any means but is instead
+\fBvery\fP liberal with what it accepts.
+
+Curl will attempt to re-use connections for multiple file transfers, so that
+getting many files from the same server will not do multiple connects /
+handshakes. This improves speed. Of course this is only done on files
+specified on a single command line and cannot be used between separate curl
+invokes.
+.SH "PROGRESS METER"
+curl normally displays a progress meter during operations, indicating the amount
+of transferred data, transfer speeds and estimated time left, etc.
+
+curl displays this data to the terminal by default, so if you invoke curl to
+do an operation and it is about to write data to the terminal, it
+\fIdisables\fP the progress meter as otherwise it would mess up the output
+mixing progress meter and response data.
+
+If you want a progress meter for HTTP POST or PUT requests, you need to
+redirect the response output to a file, using shell redirect (>), -o [file] or
+similar.
+
+It is not the same case for FTP upload as that operation does not spit out
+any response data to the terminal.
+
+If you prefer a progress "bar" instead of the regular meter, \fI-#\fP is your
+friend.
+.SH OPTIONS
+In general, all boolean options are enabled with --option and yet again
+disabled with --\fBno-\fPoption. That is, you use the exact same option name
+but prefix it with "no-". However, in this list we mostly only list and show
+the --option version of them. (This concept with --no options was added in
+7.19.0. Previously most options were toggled on/off on repeated use of the
+same command line option.)
+.IP "-a/--append"
+(FTP/SFTP) When used in an 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.
+Note that this flag is ignored by some SSH servers (including OpenSSH).
+.IP "-A/--user-agent <agent string>"
+(HTTP) Specify the User-Agent string to send to the HTTP server. Some badly
+done CGIs fail if this field isn't 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 \fI-H/--header\fP option of course.
+
+If this option is set more than once, the last one will be the one that's
+used.
+.IP "--anyauth"
+(HTTP) Tells curl to figure out authentication method by itself, and use the
+most secure one the remote site claims to support. This is done by first
+doing a request and checking the response-headers, thus possibly inducing an
+extra network round-trip. This is used instead of setting a specific
+authentication method, which you can do with \fI--basic\fP, \fI--digest\fP,
+\fI--ntlm\fP, and \fI--negotiate\fP.
+
+Note that using --anyauth is not recommended if you do uploads from stdin,
+since it may require data to be sent twice and then the client must be able to
+rewind. If the need should arise when uploading from stdin, the upload
+operation will fail.
+.IP "-b/--cookie <name=data>"
+(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 '=' symbol 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 \fI-L/--location\fP option. The file format of the
+file to read cookies from should be plain HTTP headers or the Netscape/Mozilla
+cookie file format.
+
+\fBNOTE\fP that the file specified with \fI-b/--cookie\fP is only used as
+input. No cookies will be stored in the file. To store cookies, use the
+\fI-c/--cookie-jar\fP option or you could even save the HTTP headers to a file
+using \fI-D/--dump-header\fP!
+
+If this option is set more than once, the last one will be the one that's
+used.
+.IP "-B/--use-ascii"
+Enable ASCII transfer when using FTP or LDAP. For FTP, this can also be
+enforced by using an URL that ends with ";type=A". This option causes data
+sent to stdout to be in text mode for win32 systems.
+.IP "--basic"
+(HTTP) Tells curl to use HTTP Basic authentication. This is the default and
+this option is usually pointless, unless you use it to override a previously
+set option that sets a different authentication method (such as \fI--ntlm\fP,
+\fI--digest\fP, or \fI--negotiate\fP).
+.IP "--ciphers <list of ciphers>"
+(SSL) Specifies which ciphers to use in the connection. The list of ciphers
+must specify valid ciphers. Read up on SSL cipher list details on this URL:
+\fIhttp://www.openssl.org/docs/apps/ciphers.html\fP
+
+NSS ciphers are done differently than OpenSSL and GnuTLS. The full list of
+NSS ciphers is in the NSSCipherSuite entry at this URL:
+\fIhttp://directory.fedora.redhat.com/docs/mod_nss.html#Directives\fP
+
+If this option is used several times, the last one will override the others.
+.IP "--compressed"
+(HTTP) Request a compressed response using one of the algorithms libcurl
+supports, and return the uncompressed document. If this option is used and
+the server sends an unsupported encoding, curl will report an error.
+.IP "--connect-timeout <seconds>"
+Maximum time in seconds that you allow the connection to the server to take.
+This only limits the connection phase, once curl has connected this option is
+of no more use. See also the \fI-m/--max-time\fP option.
+
+If this option is used several times, the last one will be used.
+.IP "-c/--cookie-jar <file name>"
+Specify to which file you want curl to write all cookies after a completed
+operation. Curl writes all cookies previously read from a specified file as
+well as all cookies received from remote server(s). If no cookies are known,
+no file will be written. The file will be written using the Netscape cookie
+file format. If you set the file name to a single dash, "-", the cookies will
+be written to stdout.
+
+.B NOTE
+If the cookie jar can't be created or written to, the whole curl operation
+won't fail or even report an error clearly. Using -v will get a warning
+displayed, but that is the only visible feedback you get about this possibly
+lethal situation.
+
+If this option is used several times, the last specified file name will be
+used.
+.IP "-C/--continue-at <offset>"
+Continue/Resume a previous file transfer at the given offset. The given offset
+is the exact number of bytes that will be skipped, counting from the beginning
+of the source file before it is transferred to the destination. If used with
+uploads, the FTP server command SIZE will not be used by curl.
+
+Use "-C -" to tell curl to automatically find out where/how to resume the
+transfer. It then uses the given output/input files to figure that out.
+
+If this option is used several times, the last one will be used.
+.IP "--create-dirs"
+When used in conjunction with the -o option, curl will create the necessary
+local directory hierarchy as needed. This option creates the dirs mentioned
+with the -o option, nothing else. If the -o file name uses no dir or if the
+dirs it mentions already exist, no dir will be created.
+
+To create remote directories when using FTP or SFTP, try
+\fI--ftp-create-dirs\fP.
+.IP "--crlf"
+(FTP) Convert LF to CRLF in upload. Useful for MVS (OS/390).
+.IP "--crlfile <file>"
+(HTTPS/FTPS) Provide a file using PEM format with a Certificate Revocation
+List that may specify peer certificates that are to be considered revoked.
+
+If this option is used several times, the last one will be used.
+
+(Added in 7.19.7)
+.IP "-d/--data <data>"
+(HTTP) Sends the specified data in a POST request to the HTTP server, in the
+same way that a browser does when a user has filled in an HTML form and
+presses the submit button. This will cause curl to pass the data to the server
+using the content-type application/x-www-form-urlencoded. Compare to
+\fI-F/--form\fP.
+
+\fI-d/--data\fP is the same as \fI--data-ascii\fP. To post data purely binary,
+you should instead use the \fI--data-binary\fP option. To URL-encode the value
+of a form field you may use \fI--data-urlencode\fP.
+
+If any of these options is used more than once on the same command line, the
+data pieces specified will be merged together with a separating
+&-symbol. Thus, using '-d name=daniel -d skill=lousy' would generate a post
+chunk that looks like \&'name=daniel&skill=lousy'.
+
+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. Multiple files can also be
+specified. Posting data from a file named 'foobar' would thus be done with
+\fI--data @foobar\fP.
+.IP "--data-binary <data>"
+(HTTP) This posts data exactly as specified with no extra processing
+whatsoever.
+
+If you start the data with the letter @, the rest should be a filename. Data
+is posted in a similar manner as \fI--data-ascii\fP does, except that newlines
+are preserved and conversions are never done.
+
+If this option is used several times, the ones following the first will append
+data as described in \fI-d/--data\fP.
+.IP "--data-urlencode <data>"
+(HTTP) This posts data, similar to the other --data options with the exception
+that this performs URL-encoding. (Added in 7.18.0)
+
+To be CGI-compliant, the <data> part should begin with a \fIname\fP followed
+by a separator and a content specification. The <data> part can be passed to
+curl using one of the following syntaxes:
+.RS
+.IP "content"
+This will make curl URL-encode the content and pass that on. Just be careful
+so that the content doesn't contain any = or @ symbols, as that will then make
+the syntax match one of the other cases below!
+.IP "=content"
+This will make curl URL-encode the content and pass that on. The preceding =
+symbol is not included in the data.
+.IP "name=content"
+This will make curl URL-encode the content part and pass that on. Note that
+the name part is expected to be URL-encoded already.
+.IP "@filename"
+This will make curl load data from the given file (including any newlines),
+URL-encode that data and pass it on in the POST.
+.IP "name@filename"
+This will make curl load data from the given file (including any newlines),
+URL-encode that data and pass it on in the POST. The name part gets an equal
+sign appended, resulting in \fIname=urlencoded-file-content\fP. Note that the
+name is expected to be URL-encoded already.
+.RE
+.IP "--digest"
+(HTTP) Enables HTTP Digest authentication. This is a authentication that
+prevents the password from being sent over the wire in clear text. Use this in
+combination with the normal \fI-u/--user\fP option to set user name and
+password. See also \fI--ntlm\fP, \fI--negotiate\fP and \fI--anyauth\fP for
+related options.
+
+If this option is used several times, the following occurrences make no
+difference.
+.IP "--disable-eprt"
+(FTP) Tell curl to disable the use of the EPRT and LPRT commands when doing
+active FTP transfers. Curl will normally always first attempt to use EPRT,
+then LPRT before using PORT, but with this option, it will use PORT right
+away. EPRT and LPRT are extensions to the original FTP protocol, and may not work
+on all servers, but they enable more functionality in a better way than the
+traditional PORT command.
+
+\fB--eprt\fP can be used to explicitly enable EPRT again and \fB--no-eprt\fP
+is an alias for \fB--disable-eprt\fP.
+
+Disabling EPRT only changes the active behavior. If you want to switch to
+passive mode you need to not use \fI-P/--ftp-port\fP or force it with
+\fI--ftp-pasv\fP.
+.IP "--disable-epsv"
+(FTP) Tell curl to disable the use of the EPSV command when doing passive FTP
+transfers. Curl will normally always first attempt to use EPSV before PASV,
+but with this option, it will not try using EPSV.
+
+\fB--epsv\fP can be used to explicitly enable EPRT again and \fB--no-epsv\fP
+is an alias for \fB--disable-epsv\fP.
+
+Disabling EPSV only changes the passive behavior. If you want to switch to
+active mode you need to use \fI-P/--ftp-port\fP.
+.IP "-D/--dump-header <file>"
+Write the protocol headers to the specified file.
+
+This option is handy to use when you want to store the headers that a HTTP
+site sends to you. Cookies from the headers could then be read in a second
+curl invocation by using the \fI-b/--cookie\fP option! The \fI-c/--cookie-jar\fP
+option is however a better way to store cookies.
+
+When used in FTP, the FTP server response lines are considered being "headers"
+and thus are saved there.
+
+If this option is used several times, the last one will be used.
+.IP "-e/--referer <URL>"
+(HTTP) Sends the "Referer Page" information to the HTTP server. This can also
+be set with the \fI-H/--header\fP flag of course. When used with
+\fI-L/--location\fP you can append ";auto" to the --referer URL to make curl
+automatically set the previous URL when it follows a Location: header. The
+\&";auto" string can be used alone, even if you don't set an initial --referer.
+
+If this option is used several times, the last one will be used.
+.IP "--engine <name>"
+Select the OpenSSL crypto engine to use for cipher
+operations. Use \fI--engine list\fP to print a list of build-time supported
+engines. Note that not all (or none) of the engines may be available at
+run-time.
+.IP "--environment"
+(RISC OS ONLY) Sets a range of environment variables, using the names the -w
+option supports, to allow easier extraction of useful information after having
+run curl.
+.IP "--egd-file <file>"
+(SSL) Specify the path name to the Entropy Gathering Daemon socket. The socket
+is used to seed the random engine for SSL connections. See also the
+\fI--random-file\fP option.
+.IP "-E/--cert <certificate[:password]>"
+(SSL) Tells curl to use the specified certificate file when getting a file
+with HTTPS or FTPS. 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 option assumes a \&"certificate" file that is the private key and the
+private certificate concatenated! See \fI--cert\fP and \fI--key\fP to specify
+them independently.
+
+If curl is built against the NSS SSL library then this option tells
+curl the nickname of the certificate to use within the NSS database defined
+by the environment variable SSL_DIR (or by default /etc/pki/nssdb). If the
+NSS PEM PKCS#11 module (libnsspem.so) is available then PEM files may be
+loaded.
+
+If this option is used several times, the last one will be used.
+.IP "--cert-type <type>"
+(SSL) Tells curl what certificate type the provided certificate is in. PEM,
+DER and ENG are recognized types. If not specified, PEM is assumed.
+
+If this option is used several times, the last one will be used.
+.IP "--cacert <CA certificate>"
+(SSL) Tells curl to use the specified certificate file to verify the peer. The
+file may contain multiple CA certificates. The certificate(s) must be in PEM
+format. Normally curl is built to use a default file for this, so this option
+is typically used to alter that default file.
+
+curl recognizes the environment variable named 'CURL_CA_BUNDLE' if it is
+set, and uses the given path as a path to a CA cert bundle. This option
+overrides that variable.
+
+The windows version of curl will automatically look for a CA certs file named
+\'curl-ca-bundle.crt\', either in the same directory as curl.exe, or in the
+Current Working Directory, or in any folder along your PATH.
+
+If curl is built against the NSS SSL library then this option tells
+curl the nickname of the CA certificate to use within the NSS database
+defined by the environment variable SSL_DIR (or by default /etc/pki/nssdb).
+If the NSS PEM PKCS#11 module (libnsspem.so) is available then PEM files
+may be loaded.
+
+If this option is used several times, the last one will be used.
+.IP "--capath <CA certificate directory>"
+(SSL) Tells curl to use the specified certificate directory to verify the
+peer. The certificates must be in PEM format, and the directory must have been
+processed using the c_rehash utility supplied with openssl. Using
+\fI--capath\fP can allow curl to make SSL-connections much more efficiently
+than using \fI--cacert\fP if the \fI--cacert\fP file contains many CA
+certificates.
+
+If this option is used several times, the last one will be used.
+.IP "-f/--fail"
+(HTTP) Fail silently (no output at all) on server errors. This is mostly done
+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 an
+HTML document stating so (which often also describes why and more). This flag
+will prevent curl from outputting that and return error 22.
+
+This method is not fail-safe and there are occasions where non-successful
+response codes will slip through, especially when authentication is involved
+(response codes 401 and 407).
+.IP "--ftp-account [data]"
+(FTP) When an FTP server asks for "account data" after user name and password
+has been provided, this data is sent off using the ACCT command. (Added in
+7.13.0)
+
+If this option is used twice, the second will override the previous use.
+.IP "--ftp-create-dirs"
+(FTP/SFTP) When an FTP or SFTP URL/operation uses a path that doesn't
+currently exist on the server, the standard behavior of curl is to
+fail. Using this option, curl will instead attempt to create missing
+directories.
+.IP "--ftp-method [method]"
+(FTP) Control what method curl should use to reach a file on a FTP(S)
+server. The method argument should be one of the following alternatives:
+.RS
+.IP multicwd
+curl does a single CWD operation for each path part in the given URL. For deep
+hierarchies this means very many commands. This is how RFC1738 says it should
+be done. This is the default but the slowest behavior.
+.IP nocwd
+curl does no CWD at all. curl will do SIZE, RETR, STOR etc and give a full
+path to the server for all these commands. This is the fastest behavior.
+.IP singlecwd
+curl does one CWD with the full target directory and then operates on the file
+\&"normally" (like in the multicwd case). This is somewhat more standards
+compliant than 'nocwd' but without the full penalty of 'multicwd'.
+.RE
+(Added in 7.15.1)
+.IP "--ftp-pasv"
+(FTP) Use passive mode for the data conection. Passive is the internal default
+behavior, but using this option can be used to override a previous
+\fI-P/-ftp-port\fP option. (Added in 7.11.0)
+
+If this option is used several times, the following occurrences make no
+difference. Undoing an enforced passive really isn't doable but you must then
+instead enforce the correct \fI-P/--ftp-port\fP again.
+
+Passive mode means that curl will try the EPSV command first and then PASV,
+unless \fI--disable-epsv\fP is used.
+.IP "--ftp-alternative-to-user <command>"
+(FTP) If authenticating with the USER and PASS commands fails, send this
+command. When connecting to Tumbleweed's Secure Transport server over FTPS
+using a client certificate, using "SITE AUTH" will tell the server to retrieve
+the username from the certificate. (Added in 7.15.5)
+.IP "--ftp-skip-pasv-ip"
+(FTP) Tell curl to not use the IP address the server suggests in its response
+to curl's PASV command when curl connects the data connection. Instead curl
+will re-use the same IP address it already uses for the control
+connection. (Added in 7.14.2)
+
+This option has no effect if PORT, EPRT or EPSV is used instead of PASV.
+.IP "--ftp-pret"
+(FTP) Tell curl to send a PRET command before PASV (and EPSV). Certain
+FTP servers, mainly drftpd, require this non-standard command for
+directory listings as well as up and downloads in PASV mode.
+(Added in 7.20.x)
+.IP "--ssl"
+(FTP, POP3, IMAP, SMTP) Try to use SSL/TLS for the connection. Reverts to a
+non-secure connection if the server doesn't support SSL/TLS. See also
+\fI--ftp-ssl-control\fP and \fI--ssl-reqd\fP for different levels of
+encryption required. (Added in 7.20.0)
+
+This option was formerly known as \fI--ftp-ssl\fP (Added in 7.11.0) and that
+can still be used but will be removed in a future version.
+.IP "--ftp-ssl-control"
+(FTP) Require SSL/TLS for the FTP login, clear for transfer. Allows secure
+authentication, but non-encrypted data transfers for efficiency. Fails the
+transfer if the server doesn't support SSL/TLS. (Added in 7.16.0)
+.IP "--ssl-reqd"
+(FTP, POP3, IMAP, SMTP) Require SSL/TLS for the connection. Terminates the
+connection if the server doesn't support SSL/TLS. (Added in 7.20.0)
+
+This option was formerly known as \fI--ftp-ssl-reqd\fP (added in 7.15.5) and
+that can still be used but will be removed in a future version.
+.IP "--ftp-ssl-ccc"
+(FTP) Use CCC (Clear Command Channel)
+Shuts down the SSL/TLS layer after authenticating. The rest of the
+control channel communication will be unencrypted. This allows
+NAT routers to follow the FTP transaction. The default mode is
+passive. See --ftp-ssl-ccc-mode for other modes.
+(Added in 7.16.1)
+.IP "--ftp-ssl-ccc-mode [active/passive]"
+(FTP) Use CCC (Clear Command Channel)
+Sets the CCC mode. The passive mode will not initiate the shutdown, but
+instead wait for the server to do it, and will not reply to the
+shutdown from the server. The active mode initiates the shutdown and
+waits for a reply from the server.
+(Added in 7.16.2)
+.IP "-F/--form <name=content>"
+(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 RFC2388. This enables uploading of binary
+files etc. To force the 'content' part to be a file, prefix the file name
+with an @ sign. To just get the content part from a file, prefix the file name
+with the symbol <. The difference between @ and < is then that @ makes a file
+get attached in the post as a file upload, while the < makes a text field and
+just get the contents for that text field from a file.
+
+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:
+
+\fBcurl\fP -F password=@/etc/passwd www.mypasswords.com
+
+To read the file's content from stdin instead of a file, use - where the file
+name should've been. This goes for both @ and < constructs.
+
+You can also tell curl what Content-Type to use by using 'type=', in a manner
+similar to:
+
+\fBcurl\fP -F "web=@index.html;type=text/html" url.com
+
+or
+
+\fBcurl\fP -F "name=daniel;type=text/foo" url.com
+
+You can also explicitly change the name field of an file upload part by
+setting filename=, like this:
+
+\fBcurl\fP -F "file=@localfile;filename=nameinpost" url.com
+
+See further examples and details in the MANUAL.
+
+This option can be used multiple times.
+.IP "--form-string <name=string>"
+(HTTP) Similar to \fI--form\fP except that the value string for the named
+parameter is used literally. Leading \&'@' and \&'<' characters, and the
+\&';type=' string in the value have no special meaning. Use this in preference
+to \fI--form\fP if there's any possibility that the string value may
+accidentally trigger the \&'@' or \&'<' features of \fI--form\fP.
+.IP "-g/--globoff"
+This option switches off the "URL globbing parser". When you set this option,
+you can specify URLs that contain the letters {}[] without having them being
+interpreted by curl itself. Note that these letters are not normal legal URL
+contents but they should be encoded according to the URI standard.
+.IP "-G/--get"
+When used, this option will make all data specified with \fI-d/--data\fP or
+\fI--data-binary\fP to be used in a HTTP GET request instead of the POST
+request that otherwise would be used. The data will be appended to the URL
+with a '?' separator.
+
+If used in combination with -I, the POST data will instead be appended to the
+URL with a HEAD request.
+
+If this option is used several times, the following occurrences make no
+difference. This is because undoing a GET doesn't make sense, but you should
+then instead enforce the alternative method you prefer.
+.IP "-h/--help"
+Usage help.
+.IP "-H/--header <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. Remove an
+internal header by giving a replacement without content on the right side of
+the colon, as in: -H \&"Host:".
+
+curl will make sure that each header you add/replace is sent with the proper
+end-of-line marker, you should thus \fBnot\fP add that as a part of the header
+content: do not add newlines or carriage returns, they will only mess things up
+for you.
+
+See also the \fI-A/--user-agent\fP and \fI-e/--referer\fP options.
+
+This option can be used multiple times to add/replace/remove multiple headers.
+.IP "--hostpubmd5 <md5>"
+Pass a string containing 32 hexadecimal digits. The string should be the 128
+bit MD5 checksum of the remote host's public key, curl will refuse the
+connection with the host unless the md5sums match. This option is only for SCP
+and SFTP transfers. (Added in 7.17.1)
+.IP "--ignore-content-length"
+(HTTP)
+Ignore the Content-Length header. This is particularly useful for servers
+running Apache 1.x, which will report incorrect Content-Length for files
+larger than 2 gigabytes.
+.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 "--interface <name>"
+Perform an operation using a specified interface. You can enter interface
+name, IP address or host name. An example could look like:
+
+ curl --interface eth0:1 http://www.netscape.com/
+
+If this option is used several times, the last one will be used.
+.IP "-I/--head"
+(HTTP/FTP/FILE)
+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 or FILE file, curl displays the file size and last modification
+time only.
+.IP "-j/--junk-session-cookies"
+(HTTP) When curl is told to read cookies from a given file, this option will
+make it discard all "session cookies". This will basically have the same effect
+as if a new session is started. Typical browsers always discard session
+cookies when they're closed down.
+.IP "-J/--remote-header-name"
+(HTTP) This option tells the -O/--remote-name option to use the server-specified
+Content-Disposition filename instead of extracting a filename from the URL.
+.IP "-k/--insecure"
+(SSL) This option explicitly allows curl to perform "insecure" SSL connections
+and transfers. All SSL connections are attempted to be made secure by using
+the CA certificate bundle installed by default. This makes all connections
+considered "insecure" fail unless \fI-k/--insecure\fP is used.
+
+See this online resource for further details:
+\fBhttp://curl.haxx.se/docs/sslcerts.html\fP
+.IP "--keepalive-time <seconds>"
+This option sets the time a connection needs to remain idle before sending
+keepalive probes and the time between individual keepalive probes. It is
+currently effective on operating systems offering the TCP_KEEPIDLE and
+TCP_KEEPINTVL socket options (meaning Linux, recent AIX, HP-UX and more). This
+option has no effect if \fI--no-keepalive\fP is used. (Added in 7.18.0)
+
+If this option is used multiple times, the last occurrence sets the amount.
+.IP "--key <key>"
+(SSL/SSH) Private key file name. Allows you to provide your private key in this
+separate file.
+
+If this option is used several times, the last one will be used.
+.IP "--key-type <type>"
+(SSL) Private key file type. Specify which type your \fI--key\fP provided
+private key is. DER, PEM, and ENG are supported. If not specified, PEM is
+assumed.
+
+If this option is used several times, the last one will be used.
+.IP "--krb <level>"
+(FTP) Enable Kerberos authentication and use. The level must be entered and
+should be one of 'clear', 'safe', 'confidential', or 'private'. Should you use
+a level that is not one of these, 'private' will instead be used.
+
+This option requires a library built with kerberos4 or GSSAPI
+(GSS-Negotiate) support. This is not very common. Use \fI-V/--version\fP to
+see if your curl supports it.
+
+If this option is used several times, the last one will be used.
+.IP "-K/--config <config file>"
+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. Options and their
+parameters must be specified on the same config file line, separated by
+whitespace, colon, the equals sign or any combination thereof (however,
+the preferred separator is the equals sign). If the parameter is to contain
+whitespace, the parameter must be enclosed within quotes. Within double
+quotes, the following escape sequences are available: \\\\, \\", \\t, \\n,
+\\r and \\v. A backslash preceding any other letter is ignored. If the
+first column of a config line is a '#' character, the rest of the line will be
+treated as a comment. Only write one option per physical line in the config
+file.
+
+Specify the filename to -K/--config as '-' to make curl read the file from
+stdin.
+
+Note that to be able to specify a URL in the config file, you need to specify
+it using the \fI--url\fP option, and not by simply writing the URL on its own
+line. So, it could look similar to this:
+
+url = "http://curl.haxx.se/docs/"
+
+Long option names can optionally be given in the config file without the
+initial double dashes.
+
+When curl is invoked, it always (unless \fI-q\fP is used) checks for a default
+config file and uses it if found. The default config file is checked for in
+the following places in this order:
+
+1) curl tries to find the "home dir": It first checks for the CURL_HOME and
+then the HOME environment variables. Failing that, it uses getpwuid() on
+UNIX-like systems (which returns the home dir given the current user in your
+system). On Windows, it then checks for the APPDATA variable, or as a last
+resort the '%USERPROFILE%\\Application Data'.
+
+2) On windows, if there is no _curlrc file in the home dir, it checks for one
+in the same dir the curl executable is placed. On UNIX-like systems, it will
+simply try to load .curlrc from the determined home dir.
+
+.nf
+# --- Example file ---
+# this is a comment
+url = "curl.haxx.se"
+output = "curlhere.html"
+user-agent = "superagent/1.0"
+
+# and fetch another URL too
+url = "curl.haxx.se/docs/manpage.html"
+-O
+referer = "http://nowhereatall.com/"
+# --- End of example file ---
+.fi
+
+This option can be used multiple times to load multiple config files.
+.IP "--libcurl <file>"
+Append this option to any ordinary curl command line, and you will get a
+libcurl-using source code written to the file that does the equivalent
+of what your command-line operation does!
+
+NOTE: this does not properly support -F and the sending of multipart
+formposts, so in those cases the output program will be missing necessary
+calls to \fIcurl_formadd(3)\fP, and possibly more.
+
+If this option is used several times, the last given file name will be
+used. (Added in 7.16.1)
+.IP "--limit-rate <speed>"
+Specify the maximum transfer rate you want curl to use. This feature is useful
+if you have a limited pipe and you'd like your transfer not to use your entire
+bandwidth.
+
+The given speed is measured in bytes/second, unless a suffix is appended.
+Appending 'k' or 'K' will count the number as kilobytes, 'm' or M' makes it
+megabytes, while 'g' or 'G' makes it gigabytes. Examples: 200K, 3m and 1G.
+
+The given rate is the average speed counted during the entire transfer. It
+means that curl might use higher transfer speeds in short bursts, but over
+time it uses no more than the given rate.
+
+If you also use the \fI-Y/--speed-limit\fP option, that option will take
+precedence and might cripple the rate-limiting slightly, to help keeping the
+speed-limit logic working.
+
+If this option is used several times, the last one will be used.
+.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.
+
+This option causes an FTP NLST command to be sent. Some FTP servers
+list only files in their response to NLST; they do not include
+subdirectories and symbolic links.
+
+.IP "--local-port <num>[-num]"
+Set a preferred number or range of local port numbers to use for the
+connection(s). Note that port numbers by nature are a scarce resource that
+will be busy at times so setting this range to something too narrow might
+cause unnecessary connection setup failures. (Added in 7.15.2)
+.IP "-L/--location"
+(HTTP/HTTPS) If the server reports that the requested page has moved to a
+different location (indicated with a Location: header and a 3XX response code),
+this option will make curl redo the request on the new place. If used together
+with \fI-i/--include\fP or \fI-I/--head\fP, headers from all requested pages
+will be shown. When authentication is used, curl only sends its credentials to
+the initial host. If a redirect takes curl to a different host, it won't be
+able to intercept the user+password. See also \fI--location-trusted\fP on how
+to change this. You can limit the amount of redirects to follow by using the
+\fI--max-redirs\fP option.
+
+When curl follows a redirect and the request is not a plain GET (for example
+POST or PUT), it will do the following request with a GET if the HTTP response
+was 301, 302, or 303. If the response code was any other 3xx code, curl will
+re-send the following request using the same unmodified method.
+.IP "--location-trusted"
+(HTTP/HTTPS) Like \fI-L/--location\fP, but will allow sending the name +
+password to all hosts that the site may redirect to. This may or may not
+introduce a security breach if the site redirects you to a site to which
+you'll send your authentication info (which is plaintext in the case of HTTP
+Basic authentication).
+.IP "--mail-rcpt <address>"
+(SMTP) Specify a single address that the given mail should get sent to. This
+option can be used multiple times to specify many recipients.
+
+(Added in 7.20.0)
+.IP "--mail-from <address>"
+(SMTP) Specify a single address that the given mail should get sent from.
+
+(Added in 7.20.0)
+.IP "--max-filesize <bytes>"
+Specify the maximum size (in bytes) of a file to download. If the file
+requested is larger than this value, the transfer will not start and curl will
+return with exit code 63.
+
+\fBNOTE:\fP The file size is not always known prior to download, and for such files
+this option has no effect even if the file transfer ends up being larger than
+this given limit. This concerns both FTP and HTTP transfers.
+.IP "-m/--max-time <seconds>"
+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. See also the \fI--connect-timeout\fP option.
+
+If this option is used several times, the last one will be used.
+.IP "-M/--manual"
+Manual. Display the huge help text.
+.IP "-n/--netrc"
+Makes curl scan the \fI.netrc\fP (\fI_netrc\fP on Windows) 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)
+or
+.BR ftp(1)
+for details on the file format. Curl will not complain if that file
+doesn't have the right permissions (it should not be either world- or
+group-readable). The environment variable "HOME" is used to find the home
+directory.
+
+A quick and very simple example of how to setup a \fI.netrc\fP 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 login myself password secret"
+.IP "--netrc-optional"
+Very similar to \fI--netrc\fP, but this option makes the .netrc usage
+\fBoptional\fP and not mandatory as the \fI--netrc\fP option does.
+.IP "--negotiate"
+(HTTP) Enables GSS-Negotiate authentication. The GSS-Negotiate method was
+designed by Microsoft and is used in their web applications. It is primarily
+meant as a support for Kerberos5 authentication but may be also used along
+with another authentication method. For more information see IETF draft
+draft-brezak-spnego-http-04.txt.
+
+If you want to enable Negotiate for your proxy authentication, then use
+\fI--proxy-negotiate\fP.
+
+This option requires a library built with GSSAPI support. This is
+not very common. Use \fI-V/--version\fP to see if your version supports
+GSS-Negotiate.
+
+When using this option, you must also provide a fake -u/--user option to
+activate the authentication code properly. Sending a '-u :' is enough as the
+user name and password from the -u option aren't actually used.
+
+If this option is used several times, the following occurrences make no
+difference.
+.IP "-N/--no-buffer"
+Disables the buffering of the output stream. In normal work situations, curl
+will use a standard buffered output stream that will have the effect that it
+will output the data in chunks, not necessarily exactly when the data arrives.
+Using this option will disable that buffering.
+
+Note that this is the negated option name documented. You can thus use
+\fI--buffer\fP to enforce the buffering.
+.IP "--no-keepalive"
+Disables the use of keepalive messages on the TCP connection, as by default
+curl enables them.
+
+Note that this is the negated option name documented. You can thus use
+\fI--keepalive\fP to enforce keepalive.
+.IP "--no-sessionid"
+(SSL) Disable curl's use of SSL session-ID caching. By default all transfers
+are done using the cache. Note that while nothing should ever get hurt by
+attempting to reuse SSL session-IDs, there seem to be broken SSL
+implementations in the wild that may require you to disable this in order for
+you to succeed. (Added in 7.16.0)
+
+Note that this is the negated option name documented. You can thus use
+\fI--sessionid\fP to enforce session-ID caching.
+.IP "--noproxy <no-proxy-list>"
+Comma-separated list of hosts which do not use a proxy, if one is specified.
+The only wildcard is a single * character, which matches all hosts, and
+effectively disables the proxy. Each name in this list is matched as either
+a domain which contains the hostname, or the hostname itself. For example,
+local.com would match local.com, local.com:80, and www.local.com, but not
+www.notlocal.com. (Added in 7.19.4).
+.IP "--ntlm"
+(HTTP) Enables NTLM authentication. The NTLM authentication method was
+designed by Microsoft and is used by IIS web servers. It is a proprietary
+protocol, reverse-engineered by clever people and implemented in curl based
+on their efforts. This kind of behavior should not be endorsed, you should
+encourage everyone who uses NTLM to switch to a public and documented
+authentication method instead, such as Digest.
+
+If you want to enable NTLM for your proxy authentication, then use
+\fI--proxy-ntlm\fP.
+
+This option requires a library built with SSL support. Use
+\fI-V/--version\fP to see if your curl supports NTLM.
+
+If this option is used several times, the following occurrences make no
+difference.
+.IP "-o/--output <file>"
+Write output to <file> instead of stdout. If you are using {} or [] to fetch
+multiple documents, you can use '#' followed by a number in the <file>
+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"
+
+You may use this option as many times as the number of URLs you have.
+
+See also the \fI--create-dirs\fP option to create the local directories
+dynamically. Specifying the output as '-' (a single dash) will force the
+output to be done to stdout.
+.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.)
+
+The remote file name to use for saving is extracted from the given URL,
+nothing else.
+
+You may use this option as many times as the number of URLs you have.
+.IP "--remote-name-all"
+This option changes the default action for all given URLs to be dealt with as
+if \fI-O/--remote-name\fP were used for each one. So if you want to disable
+that for a specific URL after \fI--remote-name-all\fP has been used, you must
+use "-o -" or \fI--no-remote-name\fP. (Added in 7.19.0)
+.IP "--pass <phrase>"
+(SSL/SSH) Passphrase for the private key
+
+If this option is used several times, the last one will be used.
+.IP "--post301"
+Tells curl to respect RFC 2616/10.3.2 and not convert POST requests into GET
+requests when following a 301 redirection. The non-RFC behaviour is ubiquitous
+in web browsers, so curl does the conversion by default to maintain
+consistency. However, a server may require a POST to remain a POST after such
+a redirection. This option is meaningful only when using \fI-L/--location\fP
+(Added in 7.17.1)
+.IP "--post302"
+Tells curl to respect RFC 2616/10.3.2 and not convert POST requests into GET
+requests when following a 302 redirection. The non-RFC behaviour is ubiquitous
+in web browsers, so curl does the conversion by default to maintain
+consistency. However, a server may require a POST to remain a POST after such
+a redirection. This option is meaningful only when using \fI-L/--location\fP
+(Added in 7.19.1)
+.IP "--proto <protocols>"
+Tells curl to use the listed protocols for its initial retrieval. Protocols
+are evaluated left to right, are comma separated, and are each a protocol
+name or 'all', optionally prefixed by zero or more modifiers. Available
+modifiers are:
+.RS
+.TP 3
+.B +
+Permit this protocol in addition to protocols already permitted (this is
+the default if no modifier is used).
+.TP
+.B -
+Deny this protocol, removing it from the list of protocols already permitted.
+.TP
+.B =
+Permit only this protocol (ignoring the list already permitted), though
+subject to later modification by subsequent entries in the comma separated
+list.
+.RE
+.IP
+For example:
+.RS
+.TP 15
+.B --proto -ftps
+uses the default protocols, but disables ftps
+.TP
+.B --proto -all,https,+http
+only enables http and https
+.TP
+.B --proto =http,https
+also only enables http and https
+.RE
+.IP
+Unknown protocols produce a warning. This allows scripts to safely rely on
+being able to disable potentially dangerous protocols, without relying upon
+support for that protocol being built into curl to avoid an error.
+
+This option can be used multiple times, in which case the effect is the same
+as concatenating the protocols into one instance of the option.
+
+(Added in 7.20.2)
+.IP "--proto-redir <protocols>"
+Tells curl to use the listed protocols after a redirect. See --proto for
+how protocols are represented.
+
+(Added in 7.20.2)
+.IP "--proxy-anyauth"
+Tells curl to pick a suitable authentication method when communicating with
+the given proxy. This might cause an extra request/response round-trip. (Added
+in 7.13.2)
+.IP "--proxy-basic"
+Tells curl to use HTTP Basic authentication when communicating with the given
+proxy. Use \fI--basic\fP for enabling HTTP Basic with a remote host. Basic is
+the default authentication method curl uses with proxies.
+.IP "--proxy-digest"
+Tells curl to use HTTP Digest authentication when communicating with the given
+proxy. Use \fI--digest\fP for enabling HTTP Digest with a remote host.
+.IP "--proxy-negotiate"
+Tells curl to use HTTP Negotiate authentication when communicating
+with the given proxy. Use \fI--negotiate\fP for enabling HTTP Negotiate
+with a remote host. (Added in 7.17.1)
+.IP "--proxy-ntlm"
+Tells curl to use HTTP NTLM authentication when communicating with the given
+proxy. Use \fI--ntlm\fP for enabling NTLM with a remote host.
+.IP "--proxy1.0 <proxyhost[:port]>"
+Use the specified HTTP 1.0 proxy. If the port number is not specified, it is
+assumed at port 1080.
+
+The only difference between this and the HTTP proxy option (\fI-x/--proxy\fP),
+is that attempts to use CONNECT through the proxy will specify an HTTP 1.0
+protocol instead of the default HTTP 1.1.
+.IP "-p/--proxytunnel"
+When an HTTP proxy is used (\fI-x/--proxy\fP), this option will cause non-HTTP
+protocols to attempt to tunnel through the proxy instead of merely using it to
+do HTTP-like operations. The tunnel approach is made with the HTTP proxy
+CONNECT request and requires that the proxy allows direct connect to the
+remote port number curl wants to tunnel through to.
+.IP "--pubkey <key>"
+(SSH) Public key file name. Allows you to provide your public key in this
+separate file.
+
+If this option is used several times, the last one will be used.
+.IP "-P/--ftp-port <address>"
+(FTP) Reverses the default initiator/listener roles when connecting with
+FTP. This switch makes curl use active mode. In practice, curl then tells the
+server to connect back to the client's specified address and port, while
+passive mode asks the server to setup an IP address and port for it to connect
+to. <address> should be one of:
+.RS
+.IP interface
+i.e "eth0" to specify which interface's IP address you want to use (Unix only)
+.IP "IP address"
+i.e "192.168.10.1" to specify the exact IP address
+.IP "host name"
+i.e "my.host.domain" to specify the machine
+.IP "-"
+make curl pick the same IP address that is already used for the control
+connection
+.RE
+
+If this option is used several times, the last one will be used. Disable the
+use of PORT with \fI--ftp-pasv\fP. Disable the attempt to use the EPRT command
+instead of PORT by using \fI--disable-eprt\fP. EPRT is really PORT++.
+
+Starting in 7.19.5, you can append \&":[start]-[end]\&" to the right of the
+address, to tell curl what TCP port range to use. That means you specify a
+port range, from a lower to a higher number. A single number works as well,
+but do note that it increases the risk of failure since the port may not be
+available.
+.IP "-q"
+If used as the first parameter on the command line, the \fIcurlrc\fP config
+file will not be read and used. See the \fI-K/--config\fP for details on the
+default config file search path.
+.IP "-Q/--quote <command>"
+(FTP/SFTP) Send an arbitrary command to the remote FTP or SFTP server. Quote
+commands are sent BEFORE the transfer takes place (just after the
+initial PWD command in an FTP transfer, to be exact). To make commands
+take place after a successful transfer, prefix them with a dash '-'.
+To make commands be sent after libcurl has changed the working directory,
+just before the transfer command(s), prefix the command with a '+' (this
+is only supported for FTP). You may specify any number of commands. If
+the server returns failure for one of the commands, the entire operation
+will be aborted. You must send syntactically correct FTP commands as
+RFC959 defines to FTP servers, or one of the commands listed below to
+SFTP servers. This option can be used multiple times.
+
+SFTP is a binary protocol. Unlike for FTP, libcurl interprets SFTP quote
+commands before sending them to the server. Following is the list of
+all supported SFTP quote commands:
+.RS
+.IP "chgrp group file"
+The chgrp command sets the group ID of the file named by the file operand to the
+group ID specified by the group operand. The group operand is a decimal
+integer group ID.
+.IP "chmod mode file"
+The chmod command modifies the file mode bits of the specified file. The
+mode operand is an octal integer mode number.
+.IP "chown user file"
+The chown command sets the owner of the file named by the file operand to the
+user ID specified by the user operand. The user operand is a decimal
+integer user ID.
+.IP "ln source_file target_file"
+The ln and symlink commands create a symbolic link at the target_file location
+pointing to the source_file location.
+.IP "mkdir directory_name"
+The mkdir command creates the directory named by the directory_name operand.
+.IP "pwd"
+The pwd command returns the absolute pathname of the current working directory.
+.IP "rename source target"
+The rename command renames the file or directory named by the source
+operand to the destination path named by the target operand.
+.IP "rm file"
+The rm command removes the file specified by the file operand.
+.IP "rmdir directory"
+The rmdir command removes the directory entry specified by the directory
+operand, provided it is empty.
+.IP "symlink source_file target_file"
+See ln.
+.RE
+.IP "--random-file <file>"
+(SSL) Specify the path name to file containing what will be considered as
+random data. The data is used to seed the random engine for SSL connections.
+See also the \fI--egd-file\fP option.
+.IP "-r/--range <range>"
+(HTTP/FTP/SFTP/FILE) Retrieve a byte range (i.e a partial document) from a
+HTTP/1.1, FTP or SFTP server or a local FILE. Ranges can be specified
+in a number of ways.
+.RS
+.TP 10
+.B 0-499
+specifies the first 500 bytes
+.TP
+.B 500-999
+specifies the second 500 bytes
+.TP
+.B -500
+specifies the last 500 bytes
+.TP
+.B 9500-
+specifies the bytes from offset 9500 and forward
+.TP
+.B 0-0,-1
+specifies the first and last byte only(*)(H)
+.TP
+.B 500-700,600-799
+specifies 300 bytes from offset 500(H)
+.TP
+.B 100-199,500-599
+specifies two separate 100-byte ranges(*)(H)
+.RE
+
+(*) = NOTE that this will cause the server to reply with a multipart
+response!
+
+Only digit characters (0-9) are valid in the 'start' and 'stop' fields of
+the \&'start-stop' range syntax. If a non-digit character is given in the range, the server's
+response will be unspecified, depending on the server's configuration.
+
+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 and SFTP range downloads only support the simple 'start-stop' syntax
+(optionally with one of the numbers omitted). FTP use depends on the extended
+FTP command SIZE.
+
+If this option is used several times, the last one will be used.
+.IP "--raw"
+When used, it disables all internal HTTP decoding of content or transfer
+encodings and instead makes them passed on unaltered, raw. (Added in 7.16.2)
+.IP "-R/--remote-time"
+When used, this will make libcurl attempt to figure out the timestamp of the
+remote file, and if that is available make the local file get that same
+timestamp.
+.IP "--retry <num>"
+If a transient error is returned when curl tries to perform a transfer, it
+will retry this number of times before giving up. Setting the number to 0
+makes curl do no retries (which is the default). Transient error means either:
+a timeout, an FTP 4xx response code or an HTTP 5xx response code.
+
+When curl is about to retry a transfer, it will first wait one second and then
+for all forthcoming retries it will double the waiting time until it reaches
+10 minutes which then will be the delay between the rest of the retries. By
+using \fI--retry-delay\fP you disable this exponential backoff algorithm. See
+also \fI--retry-max-time\fP to limit the total time allowed for
+retries. (Added in 7.12.3)
+
+If this option is used multiple times, the last occurrence decide the amount.
+.IP "--retry-delay <seconds>"
+Make curl sleep this amount of time before each retry when a transfer has
+failed with a transient error (it changes the default backoff time algorithm
+between retries). This option is only interesting if \fI--retry\fP is also
+used. Setting this delay to zero will make curl use the default backoff time.
+(Added in 7.12.3)
+
+If this option is used multiple times, the last occurrence determines the amount.
+.IP "--retry-max-time <seconds>"
+The retry timer is reset before the first transfer attempt. Retries will be
+done as usual (see \fI--retry\fP) as long as the timer hasn't reached this
+given limit. Notice that if the timer hasn't reached the limit, the request
+will be made and while performing, it may take longer than this given time
+period. To limit a single request\'s maximum time, use \fI-m/--max-time\fP.
+Set this option to zero to not timeout retries. (Added in 7.12.3)
+
+If this option is used multiple times, the last occurrence determines the
+amount.
+.IP "-s/--silent"
+Silent or quiet mode. Don't show progress meter or error messages. Makes
+Curl mute.
+.IP "-S/--show-error"
+When used with -s it makes curl show an error message if it fails.
+.IP "--socks4 <host[:port]>"
+Use the specified SOCKS4 proxy. If the port number is not specified, it is
+assumed at port 1080. (Added in 7.15.2)
+
+This option overrides any previous use of \fI-x/--proxy\fP, as they are
+mutually exclusive.
+
+If this option is used several times, the last one will be used.
+.IP "--socks4a <host[:port]>"
+Use the specified SOCKS4a proxy. If the port number is not specified, it is
+assumed at port 1080. (Added in 7.18.0)
+
+This option overrides any previous use of \fI-x/--proxy\fP, as they are
+mutually exclusive.
+
+If this option is used several times, the last one will be used.
+.IP "--socks5-hostname <host[:port]>"
+Use the specified SOCKS5 proxy (and let the proxy resolve the host name). If
+the port number is not specified, it is assumed at port 1080. (Added in
+7.18.0)
+
+This option overrides any previous use of \fI-x/--proxy\fP, as they are
+mutually exclusive.
+
+If this option is used several times, the last one will be used. (This option
+was previously wrongly documented and used as --socks without the number
+appended.)
+.IP "--socks5 <host[:port]>"
+Use the specified SOCKS5 proxy - but resolve the host name locally. If the
+port number is not specified, it is assumed at port 1080.
+
+This option overrides any previous use of \fI-x/--proxy\fP, as they are
+mutually exclusive.
+
+If this option is used several times, the last one will be used. (This option
+was previously wrongly documented and used as --socks without the number
+appended.)
+
+This option (as well as \fI--socks4\fP) does not work with IPV6, FTPS or LDAP.
+.IP "--socks5-gssapi-service <servicename>"
+The default service name for a socks server is rcmd/server-fqdn. This option
+allows you to change it.
+
+Examples:
+ --socks5 proxy-name \fI--socks5-gssapi-service\fP sockd would use
+sockd/proxy-name
+ --socks5 proxy-name \fI--socks5-gssapi-service\fP sockd/real-name would use
+sockd/real-name for cases where the proxy-name does not match the princpal name.
+ (Added in 7.19.4).
+.IP "--socks5-gssapi-nec"
+As part of the gssapi negotiation a protection mode is negotiated. The rfc1961
+says in section 4.3/4.4 it should be protected, but the NEC reference
+implementation does not. The option \fI--socks5-gssapi-nec\fP allows the
+unprotected exchange of the protection mode negotiation. (Added in 7.19.4).
+.IP "--stderr <file>"
+Redirect all writes to stderr to the specified file instead. If the file name
+is a plain '-', it is instead written to stdout. This option has no point when
+you're using a shell with decent redirecting capabilities.
+
+If this option is used several times, the last one will be used.
+.IP "--tcp-nodelay"
+Turn on the TCP_NODELAY option. See the \fIcurl_easy_setopt(3)\fP man page for
+details about this option. (Added in 7.11.2)
+.IP "-t/--telnet-option <OPT=val>"
+Pass options to the telnet protocol. Supported options are:
+
+TTYPE=<term> Sets the terminal type.
+
+XDISPLOC=<X display> Sets the X display location.
+
+NEW_ENV=<var,val> Sets an environment variable.
+.IP "--tftp-blksize <value>"
+(TFTP) Set TFTP BLKSIZE option (must be >512). This is the block size that
+curl will try to use when tranferring data to or from a TFTP server. By
+default 512 bytes will be used.
+
+If this option is used several times, the last one will be used.
+
+(Added in 7.20.0)
+.IP "-T/--upload-file <file>"
+This transfers the specified local file to the remote URL. 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.
+
+Use the file name "-" (a single dash) to use stdin instead of a given file.
+Alternately, the file name "." (a single period) may be specified instead
+of "-" to use stdin in non-blocking mode to allow reading server output
+while stdin is being uploaded.
+
+You can specify one -T for each URL on the command line. Each -T + URL pair
+specifies what to upload and to where. curl also supports "globbing" of the -T
+argument, meaning that you can upload multiple files to a single URL by using
+the same URL globbing style supported in the URL, like this:
+
+curl -T "{file1,file2}" http://www.uploadtothissite.com
+
+or even
+
+curl -T "img[1-1000].png" ftp://ftp.picturemania.com/upload/
+.IP "--trace <file>"
+Enables a full trace dump of all incoming and outgoing data, including
+descriptive information, to the given output file. Use "-" as filename to have
+the output sent to stdout.
+
+This option overrides previous uses of \fI-v/--verbose\fP or
+\fI--trace-ascii\fP.
+
+If this option is used several times, the last one will be used.
+.IP "--trace-ascii <file>"
+Enables a full trace dump of all incoming and outgoing data, including
+descriptive information, to the given output file. Use "-" as filename to have
+the output sent to stdout.
+
+This is very similar to \fI--trace\fP, but leaves out the hex part and only
+shows the ASCII part of the dump. It makes smaller output that might be easier
+to read for untrained humans.
+
+This option overrides previous uses of \fI-v/--verbose\fP or \fI--trace\fP.
+
+If this option is used several times, the last one will be used.
+.IP "--trace-time"
+Prepends a time stamp to each trace or verbose line that curl displays.
+(Added in 7.14.0)
+.IP "-u/--user <user:password>"
+Specify the user name and password to use for server authentication. Overrides
+\fI-n/--netrc\fP and \fI--netrc-optional\fP.
+
+If you just give the user name (without entering a colon) curl will prompt for
+a password.
+
+If you use an SSPI-enabled curl binary and do NTLM authentication, you can
+force curl to pick up the user name and password from your environment by
+simply specifying a single colon with this option: "-u :".
+
+If this option is used several times, the last one will be used.
+.IP "-U/--proxy-user <user:password>"
+Specify the user name and password to use for proxy authentication.
+
+If you use an SSPI-enabled curl binary and do NTLM authentication, you can
+force curl to pick up the user name and password from your environment by
+simply specifying a single colon with this option: "-U :".
+
+If this option is used several times, the last one will be used.
+.IP "--url <URL>"
+Specify a URL to fetch. This option is mostly handy when you want to specify
+URL(s) in a config file.
+
+This option may be used any number of times. To control where this URL is
+written, use the \fI-o/--output\fP or the \fI-O/--remote-name\fP options.
+.IP "-v/--verbose"
+Makes the fetching more verbose/talkative. Mostly useful for debugging. A line
+starting with '>' means "header data" sent by curl, '<' means "header data"
+received by curl that is hidden in normal cases, and a line starting with '*'
+means additional info provided by curl.
+
+Note that if you only want HTTP headers in the output, \fI-i/--include\fP
+might be the option you're looking for.
+
+If you think this option still doesn't give you enough details, consider using
+\fI--trace\fP or \fI--trace-ascii\fP instead.
+
+This option overrides previous uses of \fI--trace-ascii\fP or \fI--trace\fP.
+
+Use \fI-S/--silent\fP to make curl quiet.
+.IP "-V/--version"
+Displays information about curl and the libcurl version it uses.
+
+The first line includes the full version of curl, libcurl and other 3rd party
+libraries linked with the executable.
+
+The second line (starts with "Protocols:") shows all protocols that libcurl
+reports to support.
+
+The third line (starts with "Features:") shows specific features libcurl
+reports to offer. Available features include:
+.RS
+.IP "IPv6"
+You can use IPv6 with this.
+.IP "krb4"
+Krb4 for FTP is supported.
+.IP "SSL"
+HTTPS and FTPS are supported.
+.IP "libz"
+Automatic decompression of compressed files over HTTP is supported.
+.IP "NTLM"
+NTLM authentication is supported.
+.IP "GSS-Negotiate"
+Negotiate authentication and krb5 for FTP is supported.
+.IP "Debug"
+This curl uses a libcurl built with Debug. This enables more error-tracking
+and memory debugging etc. For curl-developers only!
+.IP "AsynchDNS"
+This curl uses asynchronous name resolves.
+.IP "SPNEGO"
+SPNEGO Negotiate authentication is supported.
+.IP "Largefile"
+This curl supports transfers of large files, files larger than 2GB.
+.IP "IDN"
+This curl supports IDN - international domain names.
+.IP "SSPI"
+SSPI is supported. If you use NTLM and set a blank user name, curl will
+authenticate with your current user and password.
+.RE
+.IP "-w/--write-out <format>"
+Defines what to display on stdout after a completed and successful
+operation. The format is a string that may contain plain text mixed with any
+number of variables. The string can be specified as "string", to get read from
+a particular file you specify it "@filename" and to tell curl to read the
+format from stdin you write "@-".
+
+The variables present in the output format will be substituted by the value or
+text that curl thinks fit, as described below. All variables are specified
+as %{variable_name} and to output a normal % you just write them as
+%%. You can output a newline by using \\n, a carriage return with \\r and a tab
+space with \\t.
+
+.B NOTE:
+The %-symbol is a special symbol in the win32-environment, where all
+occurrences of % must be doubled when using this option.
+
+The variables available at this point are:
+.RS
+.TP 15
+.B url_effective
+The URL that was fetched last. This is most meaningful if you've told curl
+to follow location: headers.
+.TP
+.B http_code
+The numerical response code that was found in the last retrieved HTTP(S) or
+FTP(s) transfer. In 7.18.2 the alias \fBresponse_code\fP was added to show the
+same info.
+.TP
+.B http_connect
+The numerical code that was found in the last response (from a proxy) to a
+curl CONNECT request. (Added in 7.12.4)
+.TP
+.B time_total
+The total time, in seconds, that the full operation lasted. The time will be
+displayed with millisecond resolution.
+.TP
+.B time_namelookup
+The time, in seconds, it took from the start until the name resolving was
+completed.
+.TP
+.B time_connect
+The time, in seconds, it took from the start until the TCP connect to the
+remote host (or proxy) was completed.
+.TP
+.B time_appconnect
+The time, in seconds, it took from the start until the SSL/SSH/etc
+connect/handshake to the remote host was completed. (Added in 7.19.0)
+.TP
+.B time_pretransfer
+The time, in seconds, it took from the start until the file transfer was just
+about to begin. This includes all pre-transfer commands and negotiations that
+are specific to the particular protocol(s) involved.
+.TP
+.B time_redirect
+The time, in seconds, it took for all redirection steps include name lookup,
+connect, pretransfer and transfer before the final transaction was
+started. time_redirect shows the complete execution time for multiple
+redirections. (Added in 7.12.3)
+.TP
+.B time_starttransfer
+The time, in seconds, it took from the start until the first byte was just about
+to be transferred. This includes time_pretransfer and also the time the
+server needed to calculate the result.
+.TP
+.B size_download
+The total amount of bytes that were downloaded.
+.TP
+.B size_upload
+The total amount of bytes that were uploaded.
+.TP
+.B size_header
+The total amount of bytes of the downloaded headers.
+.TP
+.B size_request
+The total amount of bytes that were sent in the HTTP request.
+.TP
+.B speed_download
+The average download speed that curl measured for the complete download. Bytes
+per second.
+.TP
+.B speed_upload
+The average upload speed that curl measured for the complete upload. Bytes per
+second.
+.TP
+.B content_type
+The Content-Type of the requested document, if there was any.
+.TP
+.B num_connects
+Number of new connects made in the recent transfer. (Added in 7.12.3)
+.TP
+.B num_redirects
+Number of redirects that were followed in the request. (Added in 7.12.3)
+.TP
+.B redirect_url
+When a HTTP request was made without -L to follow redirects, this variable
+will show the actual URL a redirect \fIwould\fP take you to. (Added in 7.18.2)
+.TP
+.B ftp_entry_path
+The initial path libcurl ended up in when logging on to the remote FTP
+server. (Added in 7.15.4)
+.TP
+.B ssl_verify_result
+The result of the SSL peer certificate verification that was requested. 0
+means the verification was successful. (Added in 7.19.0)
+.RE
+
+If this option is used several times, the last one will be used.
+.IP "-x/--proxy <proxyhost[:port]>"
+Use the specified HTTP proxy. If the port number is not specified, it is assumed
+at port 1080.
+
+This option overrides existing environment variables that set the proxy to
+use. If there's an environment variable setting a proxy, you can set proxy to
+\&"" to override it.
+
+\fBNote\fP that all operations that are performed over a HTTP proxy will
+transparently be converted to HTTP. It means that certain protocol specific
+operations might not be available. This is not the case if you can tunnel
+through the proxy, as done with the \fI-p/--proxytunnel\fP option.
+
+Starting with 7.14.1, the proxy host can be specified the exact same way as
+the proxy environment variables, including the protocol prefix (http://) and
+the embedded user + password.
+
+If this option is used several times, the last one will be used.
+.IP "-X/--request <command>"
+(HTTP) Specifies a custom request method to use when communicating with the
+HTTP server. The specified request will be used instead of the method
+otherwise used (which defaults to GET). Read the HTTP 1.1 specification for
+details and explanations. Common additional HTTP requests include PUT and
+DELETE, but related technologies like WebDAV offers PROPFIND, COPY, MOVE and
+more.
+
+(FTP)
+Specifies a custom FTP command to use instead of LIST when doing file lists
+with FTP.
+
+If this option is used several times, the last one will be used.
+.IP "-y/--speed-time <time>"
+If a download is slower than speed-limit bytes per second during a speed-time
+period, the download gets aborted. If speed-time is used, the default
+speed-limit will be 1 unless set with -Y.
+
+This option controls transfers and thus will not affect slow connects etc. If
+this is a concern for you, try the \fI--connect-timeout\fP option.
+
+If this option is used several times, the last one will be used.
+.IP "-Y/--speed-limit <speed>"
+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.
+
+If this option is used several times, the last one will be used.
+.IP "-z/--time-cond <date expression>"
+(HTTP/FTP) Request a file that has been modified later than the given time and
+date, or one that has been modified before that time. The date expression can
+be all sorts of date strings or if it doesn't match any internal ones, it
+tries to get the time from a given file name instead! See the
+\fIcurl_getdate(3)\fP man pages for date expression details.
+
+Start the date expression with a dash (-) to make it request for a document
+that is older than the given date/time, default is a document that is newer
+than the specified date/time.
+
+If this option is used several times, the last one will be used.
+.IP "--max-redirs <num>"
+Set maximum number of redirection-followings allowed. If \fI-L/--location\fP
+is used, this option can be used to prevent curl from following redirections
+\&"in absurdum". By default, the limit is set to 50 redirections. Set this
+option to -1 to make it limitless.
+
+If this option is used several times, the last one will be used.
+.IP "-0/--http1.0"
+(HTTP) Forces curl to issue its requests using HTTP 1.0 instead of using its
+internally preferred: HTTP 1.1.
+.IP "-1/--tlsv1"
+(SSL)
+Forces curl to use TLS version 1 when negotiating with a remote TLS server.
+.IP "-2/--sslv2"
+(SSL)
+Forces curl to use SSL version 2 when negotiating with a remote SSL server.
+.IP "-3/--sslv3"
+(SSL)
+Forces curl to use SSL version 3 when negotiating with a remote SSL server.
+.IP "-4/--ipv4"
+If libcurl is capable of resolving an address to multiple IP versions (which
+it is if it is IPv6-capable), this option tells libcurl to resolve names to
+IPv4 addresses only.
+.IP "-6/--ipv6"
+If libcurl is capable of resolving an address to multiple IP versions (which
+it is if it is IPv6-capable), this option tells libcurl to resolve names to
+IPv6 addresses only.
+.IP "-#/--progress-bar"
+Make curl display progress information as a progress bar instead of the
+default statistics.
+.SH FILES
+.I ~/.curlrc
+.RS
+Default config file, see \fI-K/--config\fP for details.
+.SH ENVIRONMENT
+The environment variables can be specified in lower case or upper case. The
+lower case version has precedence. http_proxy is an exception as it is only
+available in lower case.
+.IP "http_proxy [protocol://]<host>[:port]"
+Sets the proxy server to use for HTTP.
+.IP "HTTPS_PROXY [protocol://]<host>[:port]"
+Sets the proxy server to use for HTTPS.
+.IP "FTP_PROXY [protocol://]<host>[:port]"
+Sets the proxy server to use for FTP.
+.IP "ALL_PROXY [protocol://]<host>[:port]"
+Sets the proxy server to use if no protocol-specific proxy is set.
+.IP "NO_PROXY <comma-separated list of hosts>"
+list of host names that shouldn't go through any proxy. If set to a asterisk
+\&'*' only, it matches all hosts.
+.SH EXIT CODES
+There are a bunch of different error codes and their corresponding error
+messages that may appear during bad conditions. At the time of this writing,
+the exit codes are:
+.IP 1
+Unsupported protocol. This build of curl has no support for this protocol.
+.IP 2
+Failed to initialize.
+.IP 3
+URL malformed. The syntax was not correct.
+.IP 5
+Couldn't resolve proxy. The given proxy host could not be resolved.
+.IP 6
+Couldn't resolve host. The given remote host was not resolved.
+.IP 7
+Failed to connect to host.
+.IP 8
+FTP weird server reply. The server sent data curl couldn't parse.
+.IP 9
+FTP access denied. The server denied login or denied access to the particular
+resource or directory you wanted to reach. Most often you tried to change to a
+directory that doesn't exist on the server.
+.IP 11
+FTP weird PASS reply. Curl couldn't parse the reply sent to the PASS request.
+.IP 13
+FTP weird PASV reply, Curl couldn't parse the reply sent to the PASV request.
+.IP 14
+FTP weird 227 format. Curl couldn't parse the 227-line the server sent.
+.IP 15
+FTP can't get host. Couldn't resolve the host IP we got in the 227-line.
+.IP 17
+FTP couldn't set binary. Couldn't change transfer method to binary.
+.IP 18
+Partial file. Only a part of the file was transferred.
+.IP 19
+FTP couldn't download/access the given file, the RETR (or similar) command
+failed.
+.IP 21
+FTP quote error. A quote command returned error from the server.
+.IP 22
+HTTP page not retrieved. The requested url was not found or returned another
+error with the HTTP error code being 400 or above. This return code only
+appears if \fI-f/--fail\fP is used.
+.IP 23
+Write error. Curl couldn't write data to a local filesystem or similar.
+.IP 25
+FTP couldn't STOR file. The server denied the STOR operation, used for FTP
+uploading.
+.IP 26
+Read error. Various reading problems.
+.IP 27
+Out of memory. A memory allocation request failed.
+.IP 28
+Operation timeout. The specified time-out period was reached according to the
+conditions.
+.IP 30
+FTP PORT failed. The PORT command failed. Not all FTP servers support the PORT
+command, try doing a transfer using PASV instead!
+.IP 31
+FTP couldn't use REST. The REST command failed. This command is used for
+resumed FTP transfers.
+.IP 33
+HTTP range error. The range "command" didn't work.
+.IP 34
+HTTP post error. Internal post-request generation error.
+.IP 35
+SSL connect error. The SSL handshaking failed.
+.IP 36
+FTP bad download resume. Couldn't continue an earlier aborted download.
+.IP 37
+FILE couldn't read file. Failed to open the file. Permissions?
+.IP 38
+LDAP cannot bind. LDAP bind operation failed.
+.IP 39
+LDAP search failed.
+.IP 41
+Function not found. A required LDAP function was not found.
+.IP 42
+Aborted by callback. An application told curl to abort the operation.
+.IP 43
+Internal error. A function was called with a bad parameter.
+.IP 45
+Interface error. A specified outgoing interface could not be used.
+.IP 47
+Too many redirects. When following redirects, curl hit the maximum amount.
+.IP 48
+Unknown TELNET option specified.
+.IP 49
+Malformed telnet option.
+.IP 51
+The peer's SSL certificate or SSH MD5 fingerprint was not ok.
+.IP 52
+The server didn't reply anything, which here is considered an error.
+.IP 53
+SSL crypto engine not found.
+.IP 54
+Cannot set SSL crypto engine as default.
+.IP 55
+Failed sending network data.
+.IP 56
+Failure in receiving network data.
+.IP 58
+Problem with the local certificate.
+.IP 59
+Couldn't use specified SSL cipher.
+.IP 60
+Peer certificate cannot be authenticated with known CA certificates.
+.IP 61
+Unrecognized transfer encoding.
+.IP 62
+Invalid LDAP URL.
+.IP 63
+Maximum file size exceeded.
+.IP 64
+Requested FTP SSL level failed.
+.IP 65
+Sending the data requires a rewind that failed.
+.IP 66
+Failed to initialise SSL Engine.
+.IP 67
+The user name, password, or similar was not accepted and curl failed to log in.
+.IP 68
+File not found on TFTP server.
+.IP 69
+Permission problem on TFTP server.
+.IP 70
+Out of disk space on TFTP server.
+.IP 71
+Illegal TFTP operation.
+.IP 72
+Unknown TFTP transfer ID.
+.IP 73
+File already exists (TFTP).
+.IP 74
+No such user (TFTP).
+.IP 75
+Character conversion failed.
+.IP 76
+Character conversion functions required.
+.IP 77
+Problem with reading the SSL CA cert (path? access rights?).
+.IP 78
+The resource referenced in the URL does not exist.
+.IP 79
+An unspecified error occurred during the SSH session.
+.IP 80
+Failed to shut down the SSL connection.
+.IP 82
+Could not load CRL file, missing or wrong format (added in 7.19.0).
+.IP 83
+Issuer check failed (added in 7.19.0).
+.IP XX
+More error codes will appear here in future releases. The existing ones
+are meant to never change.
+.SH AUTHORS / CONTRIBUTORS
+Daniel Stenberg is the main author, but the whole list of contributors is
+found in the separate THANKS file.
+.SH WWW
+http://curl.haxx.se
+.SH FTP
+ftp://ftp.sunet.se/pub/www/utilities/curl/
+.SH "SEE ALSO"
+.BR ftp (1),
+.BR wget (1)
+
diff --git a/docs/curl.html b/docs/curl.html
new file mode 100644
index 0000000..c578011
--- /dev/null
+++ b/docs/curl.html
@@ -0,0 +1,834 @@
+<html><head>
+<title>curl man page</title>
+<meta name="generator" content="roffit 0.7">
+<STYLE type="text/css">
+P.level0 {
+ padding-left: 2em;
+}
+
+P.level1 {
+ padding-left: 4em;
+}
+
+P.level2 {
+ padding-left: 6em;
+}
+
+span.emphasis {
+ font-style: italic;
+}
+
+span.bold {
+ font-weight: bold;
+}
+
+span.manpage {
+ font-weight: bold;
+}
+
+h2.nroffsh {
+ background-color: #e0e0e0;
+}
+
+span.nroffip {
+ font-weight: bold;
+ font-size: 120%;
+ font-family: monospace;
+}
+
+p.roffit {
+ text-align: center;
+ font-size: 80%;
+}
+</STYLE>
+</head><body>
+
+<p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
+<p class="level0">curl - transfer a URL <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><span Class="bold">curl [options]</span> <a class="emphasis" href="#URL">[URL...]</a> <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0"><span Class="bold">curl</span> is a tool to transfer data from or to a server, using one of the supported protocols (DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, TELNET and TFTP). The command is designed to work without user interaction.
+<p class="level0">curl offers a busload of useful tricks like proxy support, user authentication, FTP upload, HTTP post, SSL connections, cookies, file transfer resume and more. As you will see below, the number of features will make your head spin!
+<p class="level0">curl is powered by libcurl for all transfer-related features. See <span Class="manpage">libcurl (3)</span> for details. <a name="URL"></a><h2 class="nroffsh">URL</h2>
+<p class="level0">The URL syntax is protocol-dependent. You'll find a detailed description in RFC 3986.
+<p class="level0">You can specify multiple URLs or parts of URLs by writing part sets within braces as in:
+<p class="level0">&nbsp;<a href="http://site">http://site</a>.{one,two,three}.com
+<p class="level0">or you can get sequences of alphanumeric series by using [] as in:
+<p class="level0">&nbsp;<a href="ftp://ftp.numericals.com/file">ftp://ftp.numericals.com/file</a>[1-100].txt &nbsp;<a href="ftp://ftp.numericals.com/file">ftp://ftp.numericals.com/file</a>[001-100].txt (with leading zeros) &nbsp;<a href="ftp://ftp.letters.com/file">ftp://ftp.letters.com/file</a>[a-z].txt
+<p class="level0">Nested sequences are not supported, but you can use several ones next to each other:
+<p class="level0">&nbsp;<a href="http://any.org/archive">http://any.org/archive</a>[1996-1999]/vol[1-4]/part{a,b,c}.html
+<p class="level0">You can specify any amount of URLs on the command line. They will be fetched in a sequential manner in the specified order.
+<p class="level0">You can specify a step counter for the ranges to get every Nth number or letter:
+<p class="level0">&nbsp;<a href="http://www.numericals.com/file">http://www.numericals.com/file</a>[1-100:10].txt &nbsp;<a href="http://www.letters.com/file">http://www.letters.com/file</a>[a-z:2].txt
+<p class="level0">If you specify URL without protocol:// prefix, curl will attempt to guess what protocol you might want. It will then default to HTTP but try other protocols based on often-used host name prefixes. For example, for host names starting with "ftp." curl will assume you want to speak FTP.
+<p class="level0">curl will do its best to use what you pass to it as a URL. It is not trying to validate it as a syntactically correct URL by any means but is instead <span Class="bold">very</span> liberal with what it accepts.
+<p class="level0">Curl will attempt to re-use connections for multiple file transfers, so that getting many files from the same server will not do multiple connects / handshakes. This improves speed. Of course this is only done on files specified on a single command line and cannot be used between separate curl invokes. <a name="PROGRESS"></a><h2 class="nroffsh">PROGRESS METER</h2>
+<p class="level0">curl normally displays a progress meter during operations, indicating the amount of transferred data, transfer speeds and estimated time left, etc.
+<p class="level0">curl displays this data to the terminal by default, so if you invoke curl to do an operation and it is about to write data to the terminal, it <span Class="emphasis">disables</span> the progress meter as otherwise it would mess up the output mixing progress meter and response data.
+<p class="level0">If you want a progress meter for HTTP POST or PUT requests, you need to redirect the response output to a file, using shell redirect (&gt;), -o [file] or similar.
+<p class="level0">It is not the same case for FTP upload as that operation does not spit out any response data to the terminal.
+<p class="level0">If you prefer a progress "bar" instead of the regular meter, <a class="emphasis" href="#-">-#</a> is your friend. <a name="OPTIONS"></a><h2 class="nroffsh">OPTIONS</h2>
+<p class="level0">In general, all boolean options are enabled with --option and yet again disabled with --<span Class="bold">no-</span>option. That is, you use the exact same option name but prefix it with "no-". However, in this list we mostly only list and show the --option version of them. (This concept with --no options was added in 7.19.0. Previously most options were toggled on/off on repeated use of the same command line option.)
+<p class="level0"><a name="-a--append"></a><span class="nroffip">-a/--append</span>
+<p class="level1">(FTP/SFTP) When used in an 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. Note that this flag is ignored by some SSH servers (including OpenSSH).
+<p class="level0"><a name="-A--user-agent"></a><span class="nroffip">-A/--user-agent &lt;agent string&gt;</span>
+<p class="level1">(HTTP) Specify the User-Agent string to send to the HTTP server. Some badly done CGIs fail if this field isn't 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 <a class="emphasis" href="#-H--header">-H/--header</a> option of course.
+<p class="level1">If this option is set more than once, the last one will be the one that's used.
+<p class="level0"><a name="--anyauth"></a><span class="nroffip">--anyauth</span>
+<p class="level1">(HTTP) Tells curl to figure out authentication method by itself, and use the most secure one the remote site claims to support. This is done by first doing a request and checking the response-headers, thus possibly inducing an extra network round-trip. This is used instead of setting a specific authentication method, which you can do with <a class="emphasis" href="#--basic">--basic</a>, <a class="emphasis" href="#--digest">--digest</a>, <a class="emphasis" href="#--ntlm">--ntlm</a>, and <a class="emphasis" href="#--negotiate">--negotiate</a>.
+<p class="level1">Note that using --anyauth is not recommended if you do uploads from stdin, since it may require data to be sent twice and then the client must be able to rewind. If the need should arise when uploading from stdin, the upload operation will fail.
+<p class="level0"><a name="-b--cookie"></a><span class="nroffip">-b/--cookie &lt;name=data&gt;</span>
+<p class="level1">(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".
+<p class="level1">If no '=' symbol 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 <a class="emphasis" href="#-L--location">-L/--location</a> option. The file format of the file to read cookies from should be plain HTTP headers or the Netscape/Mozilla cookie file format.
+<p class="level1"><span Class="bold">NOTE</span> that the file specified with <a class="emphasis" href="#-b--cookie">-b/--cookie</a> is only used as input. No cookies will be stored in the file. To store cookies, use the <a class="emphasis" href="#-c--cookie-jar">-c/--cookie-jar</a> option or you could even save the HTTP headers to a file using <a class="emphasis" href="#-D--dump-header">-D/--dump-header</a>!
+<p class="level1">If this option is set more than once, the last one will be the one that's used.
+<p class="level0"><a name="-B--use-ascii"></a><span class="nroffip">-B/--use-ascii</span>
+<p class="level1">Enable ASCII transfer when using FTP or LDAP. For FTP, this can also be enforced by using an URL that ends with ";type=A". This option causes data sent to stdout to be in text mode for win32 systems.
+<p class="level0"><a name="--basic"></a><span class="nroffip">--basic</span>
+<p class="level1">(HTTP) Tells curl to use HTTP Basic authentication. This is the default and this option is usually pointless, unless you use it to override a previously set option that sets a different authentication method (such as <a class="emphasis" href="#--ntlm">--ntlm</a>, <a class="emphasis" href="#--digest">--digest</a>, or <a class="emphasis" href="#--negotiate">--negotiate</a>).
+<p class="level0"><a name="--ciphers"></a><span class="nroffip">--ciphers &lt;list of ciphers&gt;</span>
+<p class="level1">(SSL) Specifies which ciphers to use in the connection. The list of ciphers must specify valid ciphers. Read up on SSL cipher list details on this URL: <span Class="emphasis"><a href="http://www.openssl.org/docs/apps/ciphers.html">http://www.openssl.org/docs/apps/ciphers.html</a></span>
+<p class="level1">NSS ciphers are done differently than OpenSSL and GnuTLS. The full list of NSS ciphers is in the NSSCipherSuite entry at this URL: <span Class="emphasis"><a href="http://directory.fedora.redhat.com/docs/mod_nss.html">http://directory.fedora.redhat.com/docs/mod_nss.html</a>#Directives</span>
+<p class="level1">If this option is used several times, the last one will override the others.
+<p class="level0"><a name="--compressed"></a><span class="nroffip">--compressed</span>
+<p class="level1">(HTTP) Request a compressed response using one of the algorithms libcurl supports, and return the uncompressed document. If this option is used and the server sends an unsupported encoding, curl will report an error.
+<p class="level0"><a name="--connect-timeout"></a><span class="nroffip">--connect-timeout &lt;seconds&gt;</span>
+<p class="level1">Maximum time in seconds that you allow the connection to the server to take. This only limits the connection phase, once curl has connected this option is of no more use. See also the <a class="emphasis" href="#-m--max-time">-m/--max-time</a> option.
+<p class="level1">If this option is used several times, the last one will be used.
+<p class="level0"><a name="-c--cookie-jar"></a><span class="nroffip">-c/--cookie-jar &lt;file name&gt;</span>
+<p class="level1">Specify to which file you want curl to write all cookies after a completed operation. Curl writes all cookies previously read from a specified file as well as all cookies received from remote server(s). If no cookies are known, no file will be written. The file will be written using the Netscape cookie file format. If you set the file name to a single dash, "-", the cookies will be written to stdout.
+<p class="level1"><span Class="bold">NOTE</span> If the cookie jar can't be created or written to, the whole curl operation won't fail or even report an error clearly. Using -v will get a warning displayed, but that is the only visible feedback you get about this possibly lethal situation.
+<p class="level1">If this option is used several times, the last specified file name will be used.
+<p class="level0"><a name="-C--continue-at"></a><span class="nroffip">-C/--continue-at &lt;offset&gt;</span>
+<p class="level1">Continue/Resume a previous file transfer at the given offset. The given offset is the exact number of bytes that will be skipped, counting from the beginning of the source file before it is transferred to the destination. If used with uploads, the FTP server command SIZE will not be used by curl.
+<p class="level1">Use "-C -" to tell curl to automatically find out where/how to resume the transfer. It then uses the given output/input files to figure that out.
+<p class="level1">If this option is used several times, the last one will be used.
+<p class="level0"><a name="--create-dirs"></a><span class="nroffip">--create-dirs</span>
+<p class="level1">When used in conjunction with the -o option, curl will create the necessary local directory hierarchy as needed. This option creates the dirs mentioned with the -o option, nothing else. If the -o file name uses no dir or if the dirs it mentions already exist, no dir will be created.
+<p class="level1">To create remote directories when using FTP or SFTP, try <a class="emphasis" href="#--ftp-create-dirs">--ftp-create-dirs</a>.
+<p class="level0"><a name="--crlf"></a><span class="nroffip">--crlf</span>
+<p class="level1">(FTP) Convert LF to CRLF in upload. Useful for MVS (OS/390).
+<p class="level0"><a name="--crlfile"></a><span class="nroffip">--crlfile &lt;file&gt;</span>
+<p class="level1">(HTTPS/FTPS) Provide a file using PEM format with a Certificate Revocation List that may specify peer certificates that are to be considered revoked.
+<p class="level1">If this option is used several times, the last one will be used.
+<p class="level1">(Added in 7.19.7)
+<p class="level0"><a name="-d--data"></a><span class="nroffip">-d/--data &lt;data&gt;</span>
+<p class="level1">(HTTP) Sends the specified data in a POST request to the HTTP server, in the same way that a browser does when a user has filled in an HTML form and presses the submit button. This will cause curl to pass the data to the server using the content-type application/x-www-form-urlencoded. Compare to <a class="emphasis" href="#-F--form">-F/--form</a>.
+<p class="level1"><a class="emphasis" href="#-d--data">-d/--data</a> is the same as <span Class="emphasis">--data-ascii</span>. To post data purely binary, you should instead use the <a class="emphasis" href="#--data-binary">--data-binary</a> option. To URL-encode the value of a form field you may use <a class="emphasis" href="#--data-urlencode">--data-urlencode</a>.
+<p class="level1">If any of these options is used more than once on the same command line, the data pieces specified will be merged together with a separating &-symbol. Thus, using '-d name=daniel -d skill=lousy' would generate a post chunk that looks like 'name=daniel&skill=lousy'.
+<p class="level1">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. Multiple files can also be specified. Posting data from a file named 'foobar' would thus be done with <span Class="emphasis">--data @foobar</span>.
+<p class="level0"><a name="--data-binary"></a><span class="nroffip">--data-binary &lt;data&gt;</span>
+<p class="level1">(HTTP) This posts data exactly as specified with no extra processing whatsoever.
+<p class="level1">If you start the data with the letter @, the rest should be a filename. Data is posted in a similar manner as <span Class="emphasis">--data-ascii</span> does, except that newlines are preserved and conversions are never done.
+<p class="level1">If this option is used several times, the ones following the first will append data as described in <a class="emphasis" href="#-d--data">-d/--data</a>.
+<p class="level0"><a name="--data-urlencode"></a><span class="nroffip">--data-urlencode &lt;data&gt;</span>
+<p class="level1">(HTTP) This posts data, similar to the other --data options with the exception that this performs URL-encoding. (Added in 7.18.0)
+<p class="level1">To be CGI-compliant, the &lt;data&gt; part should begin with a <span Class="emphasis">name</span> followed by a separator and a content specification. The &lt;data&gt; part can be passed to curl using one of the following syntaxes:
+<p class="level2">
+<p class="level1"><a name="content"></a><span class="nroffip">content</span>
+<p class="level2">This will make curl URL-encode the content and pass that on. Just be careful so that the content doesn't contain any = or @ symbols, as that will then make the syntax match one of the other cases below!
+<p class="level1"><a name="content"></a><span class="nroffip">=content</span>
+<p class="level2">This will make curl URL-encode the content and pass that on. The preceding = symbol is not included in the data.
+<p class="level1"><a name="namecontent"></a><span class="nroffip">name=content</span>
+<p class="level2">This will make curl URL-encode the content part and pass that on. Note that the name part is expected to be URL-encoded already.
+<p class="level1"><a name="filename"></a><span class="nroffip">@filename</span>
+<p class="level2">This will make curl load data from the given file (including any newlines), URL-encode that data and pass it on in the POST.
+<p class="level1"><a name="namefilename"></a><span class="nroffip">name@filename</span>
+<p class="level2">This will make curl load data from the given file (including any newlines), URL-encode that data and pass it on in the POST. The name part gets an equal sign appended, resulting in <span Class="emphasis">name=urlencoded-file-content</span>. Note that the name is expected to be URL-encoded already.
+<p class="level1">
+<p class="level0"><a name="--digest"></a><span class="nroffip">--digest</span>
+<p class="level1">(HTTP) Enables HTTP Digest authentication. This is a authentication that prevents the password from being sent over the wire in clear text. Use this in combination with the normal <a class="emphasis" href="#-u--user">-u/--user</a> option to set user name and password. See also <a class="emphasis" href="#--ntlm">--ntlm</a>, <a class="emphasis" href="#--negotiate">--negotiate</a> and <a class="emphasis" href="#--anyauth">--anyauth</a> for related options.
+<p class="level1">If this option is used several times, the following occurrences make no difference.
+<p class="level0"><a name="--disable-eprt"></a><span class="nroffip">--disable-eprt</span>
+<p class="level1">(FTP) Tell curl to disable the use of the EPRT and LPRT commands when doing active FTP transfers. Curl will normally always first attempt to use EPRT, then LPRT before using PORT, but with this option, it will use PORT right away. EPRT and LPRT are extensions to the original FTP protocol, and may not work on all servers, but they enable more functionality in a better way than the traditional PORT command.
+<p class="level1"><span Class="bold">--eprt</span> can be used to explicitly enable EPRT again and <span Class="bold">--no-eprt</span> is an alias for <a class="bold" href="#--disable-eprt">--disable-eprt</a>.
+<p class="level1">Disabling EPRT only changes the active behavior. If you want to switch to passive mode you need to not use <a class="emphasis" href="#-P--ftp-port">-P/--ftp-port</a> or force it with <a class="emphasis" href="#--ftp-pasv">--ftp-pasv</a>.
+<p class="level0"><a name="--disable-epsv"></a><span class="nroffip">--disable-epsv</span>
+<p class="level1">(FTP) Tell curl to disable the use of the EPSV command when doing passive FTP transfers. Curl will normally always first attempt to use EPSV before PASV, but with this option, it will not try using EPSV.
+<p class="level1"><span Class="bold">--epsv</span> can be used to explicitly enable EPRT again and <span Class="bold">--no-epsv</span> is an alias for <a class="bold" href="#--disable-epsv">--disable-epsv</a>.
+<p class="level1">Disabling EPSV only changes the passive behavior. If you want to switch to active mode you need to use <a class="emphasis" href="#-P--ftp-port">-P/--ftp-port</a>.
+<p class="level0"><a name="-D--dump-header"></a><span class="nroffip">-D/--dump-header &lt;file&gt;</span>
+<p class="level1">Write the protocol headers to the specified file.
+<p class="level1">This option is handy to use when you want to store the headers that a HTTP site sends to you. Cookies from the headers could then be read in a second curl invocation by using the <a class="emphasis" href="#-b--cookie">-b/--cookie</a> option! The <a class="emphasis" href="#-c--cookie-jar">-c/--cookie-jar</a> option is however a better way to store cookies.
+<p class="level1">When used in FTP, the FTP server response lines are considered being "headers" and thus are saved there.
+<p class="level1">If this option is used several times, the last one will be used.
+<p class="level0"><a name="-e--referer"></a><span class="nroffip">-e/--referer &lt;URL&gt;</span>
+<p class="level1">(HTTP) Sends the "Referer Page" information to the HTTP server. This can also be set with the <a class="emphasis" href="#-H--header">-H/--header</a> flag of course. When used with <a class="emphasis" href="#-L--location">-L/--location</a> you can append ";auto" to the --referer URL to make curl automatically set the previous URL when it follows a Location: header. The ";auto" string can be used alone, even if you don't set an initial --referer.
+<p class="level1">If this option is used several times, the last one will be used.
+<p class="level0"><a name="--engine"></a><span class="nroffip">--engine &lt;name&gt;</span>
+<p class="level1">Select the OpenSSL crypto engine to use for cipher operations. Use <a class="emphasis" href="#--engine">--engine list</a> to print a list of build-time supported engines. Note that not all (or none) of the engines may be available at run-time.
+<p class="level0"><a name="--environment"></a><span class="nroffip">--environment</span>
+<p class="level1">(RISC OS ONLY) Sets a range of environment variables, using the names the -w option supports, to allow easier extraction of useful information after having run curl.
+<p class="level0"><a name="--egd-file"></a><span class="nroffip">--egd-file &lt;file&gt;</span>
+<p class="level1">(SSL) Specify the path name to the Entropy Gathering Daemon socket. The socket is used to seed the random engine for SSL connections. See also the <a class="emphasis" href="#--random-file">--random-file</a> option.
+<p class="level0"><a name="-E--cert"></a><span class="nroffip">-E/--cert &lt;certificate[:password]&gt;</span>
+<p class="level1">(SSL) Tells curl to use the specified certificate file when getting a file with HTTPS or FTPS. 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 option assumes a "certificate" file that is the private key and the private certificate concatenated! See <span Class="emphasis">--cert</span> and <a class="emphasis" href="#--key">--key</a> to specify them independently.
+<p class="level1">If curl is built against the NSS SSL library then this option tells curl the nickname of the certificate to use within the NSS database defined by the environment variable SSL_DIR (or by default /etc/pki/nssdb). If the NSS PEM PKCS#11 module (libnsspem.so) is available then PEM files may be loaded.
+<p class="level1">If this option is used several times, the last one will be used.
+<p class="level0"><a name="--cert-type"></a><span class="nroffip">--cert-type &lt;type&gt;</span>
+<p class="level1">(SSL) Tells curl what certificate type the provided certificate is in. PEM, DER and ENG are recognized types. If not specified, PEM is assumed.
+<p class="level1">If this option is used several times, the last one will be used.
+<p class="level0"><a name="--cacert"></a><span class="nroffip">--cacert &lt;CA certificate&gt;</span>
+<p class="level1">(SSL) Tells curl to use the specified certificate file to verify the peer. The file may contain multiple CA certificates. The certificate(s) must be in PEM format. Normally curl is built to use a default file for this, so this option is typically used to alter that default file.
+<p class="level1">curl recognizes the environment variable named 'CURL_CA_BUNDLE' if it is set, and uses the given path as a path to a CA cert bundle. This option overrides that variable.
+<p class="level1">The windows version of curl will automatically look for a CA certs file named &acute;curl-ca-bundle.crt&acute;, either in the same directory as curl.exe, or in the Current Working Directory, or in any folder along your PATH.
+<p class="level1">If curl is built against the NSS SSL library then this option tells curl the nickname of the CA certificate to use within the NSS database defined by the environment variable SSL_DIR (or by default /etc/pki/nssdb). If the NSS PEM PKCS#11 module (libnsspem.so) is available then PEM files may be loaded.
+<p class="level1">If this option is used several times, the last one will be used.
+<p class="level0"><a name="--capath"></a><span class="nroffip">--capath &lt;CA certificate directory&gt;</span>
+<p class="level1">(SSL) Tells curl to use the specified certificate directory to verify the peer. The certificates must be in PEM format, and the directory must have been processed using the c_rehash utility supplied with openssl. Using <a class="emphasis" href="#--capath">--capath</a> can allow curl to make SSL-connections much more efficiently than using <a class="emphasis" href="#--cacert">--cacert</a> if the <a class="emphasis" href="#--cacert">--cacert</a> file contains many CA certificates.
+<p class="level1">If this option is used several times, the last one will be used.
+<p class="level0"><a name="-f--fail"></a><span class="nroffip">-f/--fail</span>
+<p class="level1">(HTTP) Fail silently (no output at all) on server errors. This is mostly done 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 an HTML document stating so (which often also describes why and more). This flag will prevent curl from outputting that and return error 22.
+<p class="level1">This method is not fail-safe and there are occasions where non-successful response codes will slip through, especially when authentication is involved (response codes 401 and 407).
+<p class="level0"><a name="--ftp-account"></a><span class="nroffip">--ftp-account [data]</span>
+<p class="level1">(FTP) When an FTP server asks for "account data" after user name and password has been provided, this data is sent off using the ACCT command. (Added in 7.13.0)
+<p class="level1">If this option is used twice, the second will override the previous use.
+<p class="level0"><a name="--ftp-create-dirs"></a><span class="nroffip">--ftp-create-dirs</span>
+<p class="level1">(FTP/SFTP) When an FTP or SFTP URL/operation uses a path that doesn't currently exist on the server, the standard behavior of curl is to fail. Using this option, curl will instead attempt to create missing directories.
+<p class="level0"><a name="--ftp-method"></a><span class="nroffip">--ftp-method [method]</span>
+<p class="level1">(FTP) Control what method curl should use to reach a file on a FTP(S) server. The method argument should be one of the following alternatives:
+<p class="level2">
+<p class="level1"><a name="multicwd"></a><span class="nroffip">multicwd</span>
+<p class="level2">curl does a single CWD operation for each path part in the given URL. For deep hierarchies this means very many commands. This is how RFC1738 says it should be done. This is the default but the slowest behavior.
+<p class="level1"><a name="nocwd"></a><span class="nroffip">nocwd</span>
+<p class="level2">curl does no CWD at all. curl will do SIZE, RETR, STOR etc and give a full path to the server for all these commands. This is the fastest behavior.
+<p class="level1"><a name="singlecwd"></a><span class="nroffip">singlecwd</span>
+<p class="level2">curl does one CWD with the full target directory and then operates on the file "normally" (like in the multicwd case). This is somewhat more standards compliant than 'nocwd' but without the full penalty of 'multicwd'.
+<p class="level1">(Added in 7.15.1)
+<p class="level0"><a name="--ftp-pasv"></a><span class="nroffip">--ftp-pasv</span>
+<p class="level1">(FTP) Use passive mode for the data conection. Passive is the internal default behavior, but using this option can be used to override a previous <span Class="emphasis">-P/-ftp-port</span> option. (Added in 7.11.0)
+<p class="level1">If this option is used several times, the following occurrences make no difference. Undoing an enforced passive really isn't doable but you must then instead enforce the correct <a class="emphasis" href="#-P--ftp-port">-P/--ftp-port</a> again.
+<p class="level1">Passive mode means that curl will try the EPSV command first and then PASV, unless <a class="emphasis" href="#--disable-epsv">--disable-epsv</a> is used.
+<p class="level0"><a name="--ftp-alternative-to-user"></a><span class="nroffip">--ftp-alternative-to-user &lt;command&gt;</span>
+<p class="level1">(FTP) If authenticating with the USER and PASS commands fails, send this command. When connecting to Tumbleweed's Secure Transport server over FTPS using a client certificate, using "SITE AUTH" will tell the server to retrieve the username from the certificate. (Added in 7.15.5)
+<p class="level0"><a name="--ftp-skip-pasv-ip"></a><span class="nroffip">--ftp-skip-pasv-ip</span>
+<p class="level1">(FTP) Tell curl to not use the IP address the server suggests in its response to curl's PASV command when curl connects the data connection. Instead curl will re-use the same IP address it already uses for the control connection. (Added in 7.14.2)
+<p class="level1">This option has no effect if PORT, EPRT or EPSV is used instead of PASV.
+<p class="level0"><a name="--ftp-pret"></a><span class="nroffip">--ftp-pret</span>
+<p class="level1">(FTP) Tell curl to send a PRET command before PASV (and EPSV). Certain FTP servers, mainly drftpd, require this non-standard command for directory listings as well as up and downloads in PASV mode. (Added in 7.20.x)
+<p class="level0"><a name="--ssl"></a><span class="nroffip">--ssl</span>
+<p class="level1">(FTP, POP3, IMAP, SMTP) Try to use SSL/TLS for the connection. Reverts to a non-secure connection if the server doesn't support SSL/TLS. See also <a class="emphasis" href="#--ftp-ssl-control">--ftp-ssl-control</a> and <a class="emphasis" href="#--ssl-reqd">--ssl-reqd</a> for different levels of encryption required. (Added in 7.20.0)
+<p class="level1">This option was formerly known as <span Class="emphasis">--ftp-ssl</span> (Added in 7.11.0) and that can still be used but will be removed in a future version.
+<p class="level0"><a name="--ftp-ssl-control"></a><span class="nroffip">--ftp-ssl-control</span>
+<p class="level1">(FTP) Require SSL/TLS for the FTP login, clear for transfer. Allows secure authentication, but non-encrypted data transfers for efficiency. Fails the transfer if the server doesn't support SSL/TLS. (Added in 7.16.0)
+<p class="level0"><a name="--ssl-reqd"></a><span class="nroffip">--ssl-reqd</span>
+<p class="level1">(FTP, POP3, IMAP, SMTP) Require SSL/TLS for the connection. Terminates the connection if the server doesn't support SSL/TLS. (Added in 7.20.0)
+<p class="level1">This option was formerly known as <span Class="emphasis">--ftp-ssl-reqd</span> (added in 7.15.5) and that can still be used but will be removed in a future version.
+<p class="level0"><a name="--ftp-ssl-ccc"></a><span class="nroffip">--ftp-ssl-ccc</span>
+<p class="level1">(FTP) Use CCC (Clear Command Channel) Shuts down the SSL/TLS layer after authenticating. The rest of the control channel communication will be unencrypted. This allows NAT routers to follow the FTP transaction. The default mode is passive. See --ftp-ssl-ccc-mode for other modes. (Added in 7.16.1)
+<p class="level0"><a name="--ftp-ssl-ccc-mode"></a><span class="nroffip">--ftp-ssl-ccc-mode [active/passive]</span>
+<p class="level1">(FTP) Use CCC (Clear Command Channel) Sets the CCC mode. The passive mode will not initiate the shutdown, but instead wait for the server to do it, and will not reply to the shutdown from the server. The active mode initiates the shutdown and waits for a reply from the server. (Added in 7.16.2)
+<p class="level0"><a name="-F--form"></a><span class="nroffip">-F/--form &lt;name=content&gt;</span>
+<p class="level1">(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 RFC2388. This enables uploading of binary files etc. To force the 'content' part to be a file, prefix the file name with an @ sign. To just get the content part from a file, prefix the file name with the symbol &lt;. The difference between @ and &lt; is then that @ makes a file get attached in the post as a file upload, while the &lt; makes a text field and just get the contents for that text field from a file.
+<p class="level1">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:
+<p class="level1"><span Class="bold">curl</span> -F password=@/etc/passwd www.mypasswords.com
+<p class="level1">To read the file's content from stdin instead of a file, use - where the file name should've been. This goes for both @ and &lt; constructs.
+<p class="level1">You can also tell curl what Content-Type to use by using 'type=', in a manner similar to:
+<p class="level1"><span Class="bold">curl</span> -F "web=@index.html;type=text/html" url.com
+<p class="level1">or
+<p class="level1"><span Class="bold">curl</span> -F "name=daniel;type=text/foo" url.com
+<p class="level1">You can also explicitly change the name field of an file upload part by setting filename=, like this:
+<p class="level1"><span Class="bold">curl</span> -F "file=@localfile;filename=nameinpost" url.com
+<p class="level1">See further examples and details in the MANUAL.
+<p class="level1">This option can be used multiple times.
+<p class="level0"><a name="--form-string"></a><span class="nroffip">--form-string &lt;name=string&gt;</span>
+<p class="level1">(HTTP) Similar to <span Class="emphasis">--form</span> except that the value string for the named parameter is used literally. Leading '@' and '&lt;' characters, and the ';type=' string in the value have no special meaning. Use this in preference to <span Class="emphasis">--form</span> if there's any possibility that the string value may accidentally trigger the '@' or '&lt;' features of <span Class="emphasis">--form</span>.
+<p class="level0"><a name="-g--globoff"></a><span class="nroffip">-g/--globoff</span>
+<p class="level1">This option switches off the "URL globbing parser". When you set this option, you can specify URLs that contain the letters {}[] without having them being interpreted by curl itself. Note that these letters are not normal legal URL contents but they should be encoded according to the URI standard.
+<p class="level0"><a name="-G--get"></a><span class="nroffip">-G/--get</span>
+<p class="level1">When used, this option will make all data specified with <a class="emphasis" href="#-d--data">-d/--data</a> or <a class="emphasis" href="#--data-binary">--data-binary</a> to be used in a HTTP GET request instead of the POST request that otherwise would be used. The data will be appended to the URL with a '?' separator.
+<p class="level1">If used in combination with -I, the POST data will instead be appended to the URL with a HEAD request.
+<p class="level1">If this option is used several times, the following occurrences make no difference. This is because undoing a GET doesn't make sense, but you should then instead enforce the alternative method you prefer.
+<p class="level0"><a name="-h--help"></a><span class="nroffip">-h/--help</span>
+<p class="level1">Usage help.
+<p class="level0"><a name="-H--header"></a><span class="nroffip">-H/--header &lt;header&gt;</span>
+<p class="level1">(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. Remove an internal header by giving a replacement without content on the right side of the colon, as in: -H "Host:".
+<p class="level1">curl will make sure that each header you add/replace is sent with the proper end-of-line marker, you should thus <span Class="bold">not</span> add that as a part of the header content: do not add newlines or carriage returns, they will only mess things up for you.
+<p class="level1">See also the <a class="emphasis" href="#-A--user-agent">-A/--user-agent</a> and <a class="emphasis" href="#-e--referer">-e/--referer</a> options.
+<p class="level1">This option can be used multiple times to add/replace/remove multiple headers.
+<p class="level0"><a name="--hostpubmd5"></a><span class="nroffip">--hostpubmd5 &lt;md5&gt;</span>
+<p class="level1">Pass a string containing 32 hexadecimal digits. The string should be the 128 bit MD5 checksum of the remote host's public key, curl will refuse the connection with the host unless the md5sums match. This option is only for SCP and SFTP transfers. (Added in 7.17.1)
+<p class="level0"><a name="--ignore-content-length"></a><span class="nroffip">--ignore-content-length</span>
+<p class="level1">(HTTP) Ignore the Content-Length header. This is particularly useful for servers running Apache 1.x, which will report incorrect Content-Length for files larger than 2 gigabytes.
+<p class="level0"><a name="-i--include"></a><span class="nroffip">-i/--include</span>
+<p class="level1">(HTTP) Include the HTTP-header in the output. The HTTP-header includes things like server-name, date of the document, HTTP-version and more...
+<p class="level0"><a name="--interface"></a><span class="nroffip">--interface &lt;name&gt;</span>
+<p class="level1">Perform an operation using a specified interface. You can enter interface name, IP address or host name. An example could look like:
+<p class="level1">&nbsp;curl --interface eth0:1 <a href="http://www.netscape.com/">http://www.netscape.com/</a>
+<p class="level1">If this option is used several times, the last one will be used.
+<p class="level0"><a name="-I--head"></a><span class="nroffip">-I/--head</span>
+<p class="level1">(HTTP/FTP/FILE) 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 or FILE file, curl displays the file size and last modification time only.
+<p class="level0"><a name="-j--junk-session-cookies"></a><span class="nroffip">-j/--junk-session-cookies</span>
+<p class="level1">(HTTP) When curl is told to read cookies from a given file, this option will make it discard all "session cookies". This will basically have the same effect as if a new session is started. Typical browsers always discard session cookies when they're closed down.
+<p class="level0"><a name="-J--remote-header-name"></a><span class="nroffip">-J/--remote-header-name</span>
+<p class="level1">(HTTP) This option tells the -O/--remote-name option to use the server-specified Content-Disposition filename instead of extracting a filename from the URL.
+<p class="level0"><a name="-k--insecure"></a><span class="nroffip">-k/--insecure</span>
+<p class="level1">(SSL) This option explicitly allows curl to perform "insecure" SSL connections and transfers. All SSL connections are attempted to be made secure by using the CA certificate bundle installed by default. This makes all connections considered "insecure" fail unless <a class="emphasis" href="#-k--insecure">-k/--insecure</a> is used.
+<p class="level1">See this online resource for further details: <span Class="bold"><a href="http://curl.haxx.se/docs/sslcerts.html">http://curl.haxx.se/docs/sslcerts.html</a></span>
+<p class="level0"><a name="--keepalive-time"></a><span class="nroffip">--keepalive-time &lt;seconds&gt;</span>
+<p class="level1">This option sets the time a connection needs to remain idle before sending keepalive probes and the time between individual keepalive probes. It is currently effective on operating systems offering the TCP_KEEPIDLE and TCP_KEEPINTVL socket options (meaning Linux, recent AIX, HP-UX and more). This option has no effect if <a class="emphasis" href="#--no-keepalive">--no-keepalive</a> is used. (Added in 7.18.0)
+<p class="level1">If this option is used multiple times, the last occurrence sets the amount.
+<p class="level0"><a name="--key"></a><span class="nroffip">--key &lt;key&gt;</span>
+<p class="level1">(SSL/SSH) Private key file name. Allows you to provide your private key in this separate file.
+<p class="level1">If this option is used several times, the last one will be used.
+<p class="level0"><a name="--key-type"></a><span class="nroffip">--key-type &lt;type&gt;</span>
+<p class="level1">(SSL) Private key file type. Specify which type your <a class="emphasis" href="#--key">--key</a> provided private key is. DER, PEM, and ENG are supported. If not specified, PEM is assumed.
+<p class="level1">If this option is used several times, the last one will be used.
+<p class="level0"><a name="--krb"></a><span class="nroffip">--krb &lt;level&gt;</span>
+<p class="level1">(FTP) Enable Kerberos authentication and use. The level must be entered and should be one of 'clear', 'safe', 'confidential', or 'private'. Should you use a level that is not one of these, 'private' will instead be used.
+<p class="level1">This option requires a library built with kerberos4 or GSSAPI (GSS-Negotiate) support. This is not very common. Use <a class="emphasis" href="#-V--version">-V/--version</a> to see if your curl supports it.
+<p class="level1">If this option is used several times, the last one will be used.
+<p class="level0"><a name="-K--config"></a><span class="nroffip">-K/--config &lt;config file&gt;</span>
+<p class="level1">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. Options and their parameters must be specified on the same config file line, separated by whitespace, colon, the equals sign or any combination thereof (however, the preferred separator is the equals sign). If the parameter is to contain whitespace, the parameter must be enclosed within quotes. Within double quotes, the following escape sequences are available: \\, \", \t, \n, \r and \v. A backslash preceding any other letter is ignored. If the first column of a config line is a '#' character, the rest of the line will be treated as a comment. Only write one option per physical line in the config file.
+<p class="level1">Specify the filename to -K/--config as '-' to make curl read the file from stdin.
+<p class="level1">Note that to be able to specify a URL in the config file, you need to specify it using the <a class="emphasis" href="#--url">--url</a> option, and not by simply writing the URL on its own line. So, it could look similar to this:
+<p class="level1">url = "<a href="http://curl.haxx.se/docs/">http://curl.haxx.se/docs/</a>"
+<p class="level1">Long option names can optionally be given in the config file without the initial double dashes.
+<p class="level1">When curl is invoked, it always (unless <a class="emphasis" href="#-q">-q</a> is used) checks for a default config file and uses it if found. The default config file is checked for in the following places in this order:
+<p class="level1">1) curl tries to find the "home dir": It first checks for the CURL_HOME and then the HOME environment variables. Failing that, it uses getpwuid() on UNIX-like systems (which returns the home dir given the current user in your system). On Windows, it then checks for the APPDATA variable, or as a last resort the '%USERPROFILE%\Application Data'.
+<p class="level1">2) On windows, if there is no _curlrc file in the home dir, it checks for one in the same dir the curl executable is placed. On UNIX-like systems, it will simply try to load .curlrc from the determined home dir.
+<p class="level1"><pre>
+<p class="level1"># --- Example file ---
+ # this is a comment
+ url = "curl.haxx.se"
+ output = "curlhere.html"
+ user-agent = "superagent/1.0"
+ <p class="level1"># and fetch another URL too
+ url = "curl.haxx.se/docs/manpage.html"
+ -O
+ referer = "<a href="http://nowhereatall.com/">http://nowhereatall.com/</a>"
+ # --- End of example file ---
+ </pre>
+
+<p class="level1">
+<p class="level1">This option can be used multiple times to load multiple config files.
+<p class="level0"><a name="--libcurl"></a><span class="nroffip">--libcurl &lt;file&gt;</span>
+<p class="level1">Append this option to any ordinary curl command line, and you will get a libcurl-using source code written to the file that does the equivalent of what your command-line operation does!
+<p class="level1">NOTE: this does not properly support -F and the sending of multipart formposts, so in those cases the output program will be missing necessary calls to <span Class="emphasis">curl_formadd(3)</span>, and possibly more.
+<p class="level1">If this option is used several times, the last given file name will be used. (Added in 7.16.1)
+<p class="level0"><a name="--limit-rate"></a><span class="nroffip">--limit-rate &lt;speed&gt;</span>
+<p class="level1">Specify the maximum transfer rate you want curl to use. This feature is useful if you have a limited pipe and you'd like your transfer not to use your entire bandwidth.
+<p class="level1">The given speed is measured in bytes/second, unless a suffix is appended. Appending 'k' or 'K' will count the number as kilobytes, 'm' or M' makes it megabytes, while 'g' or 'G' makes it gigabytes. Examples: 200K, 3m and 1G.
+<p class="level1">The given rate is the average speed counted during the entire transfer. It means that curl might use higher transfer speeds in short bursts, but over time it uses no more than the given rate.
+<p class="level1">If you also use the <a class="emphasis" href="#-Y--speed-limit">-Y/--speed-limit</a> option, that option will take precedence and might cripple the rate-limiting slightly, to help keeping the speed-limit logic working.
+<p class="level1">If this option is used several times, the last one will be used.
+<p class="level0"><a name="-l--list-only"></a><span class="nroffip">-l/--list-only</span>
+<p class="level1">(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.
+<p class="level1">This option causes an FTP NLST command to be sent. Some FTP servers list only files in their response to NLST; they do not include subdirectories and symbolic links.
+<p class="level1">
+<p class="level0"><a name="--local-port"></a><span class="nroffip">--local-port &lt;num&gt;[-num]</span>
+<p class="level1">Set a preferred number or range of local port numbers to use for the connection(s). Note that port numbers by nature are a scarce resource that will be busy at times so setting this range to something too narrow might cause unnecessary connection setup failures. (Added in 7.15.2)
+<p class="level0"><a name="-L--location"></a><span class="nroffip">-L/--location</span>
+<p class="level1">(HTTP/HTTPS) If the server reports that the requested page has moved to a different location (indicated with a Location: header and a 3XX response code), this option will make curl redo the request on the new place. If used together with <a class="emphasis" href="#-i--include">-i/--include</a> or <a class="emphasis" href="#-I--head">-I/--head</a>, headers from all requested pages will be shown. When authentication is used, curl only sends its credentials to the initial host. If a redirect takes curl to a different host, it won't be able to intercept the user+password. See also <a class="emphasis" href="#--location-trusted">--location-trusted</a> on how to change this. You can limit the amount of redirects to follow by using the <a class="emphasis" href="#--max-redirs">--max-redirs</a> option.
+<p class="level1">When curl follows a redirect and the request is not a plain GET (for example POST or PUT), it will do the following request with a GET if the HTTP response was 301, 302, or 303. If the response code was any other 3xx code, curl will re-send the following request using the same unmodified method.
+<p class="level0"><a name="--location-trusted"></a><span class="nroffip">--location-trusted</span>
+<p class="level1">(HTTP/HTTPS) Like <a class="emphasis" href="#-L--location">-L/--location</a>, but will allow sending the name + password to all hosts that the site may redirect to. This may or may not introduce a security breach if the site redirects you to a site to which you'll send your authentication info (which is plaintext in the case of HTTP Basic authentication).
+<p class="level0"><a name="--mail-rcpt"></a><span class="nroffip">--mail-rcpt &lt;address&gt;</span>
+<p class="level1">(SMTP) Specify a single address that the given mail should get sent to. This option can be used multiple times to specify many recipients.
+<p class="level1">(Added in 7.20.0)
+<p class="level0"><a name="--mail-from"></a><span class="nroffip">--mail-from &lt;address&gt;</span>
+<p class="level1">(SMTP) Specify a single address that the given mail should get sent from.
+<p class="level1">(Added in 7.20.0)
+<p class="level0"><a name="--max-filesize"></a><span class="nroffip">--max-filesize &lt;bytes&gt;</span>
+<p class="level1">Specify the maximum size (in bytes) of a file to download. If the file requested is larger than this value, the transfer will not start and curl will return with exit code 63.
+<p class="level1"><span Class="bold">NOTE:</span> The file size is not always known prior to download, and for such files this option has no effect even if the file transfer ends up being larger than this given limit. This concerns both FTP and HTTP transfers.
+<p class="level0"><a name="-m--max-time"></a><span class="nroffip">-m/--max-time &lt;seconds&gt;</span>
+<p class="level1">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. See also the <a class="emphasis" href="#--connect-timeout">--connect-timeout</a> option.
+<p class="level1">If this option is used several times, the last one will be used.
+<p class="level0"><a name="-M--manual"></a><span class="nroffip">-M/--manual</span>
+<p class="level1">Manual. Display the huge help text.
+<p class="level0"><a name="-n--netrc"></a><span class="nroffip">-n/--netrc</span>
+<p class="level1">Makes curl scan the <span Class="emphasis">.netrc</span> (<span Class="emphasis">_netrc</span> on Windows) 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 <span Class="manpage">netrc(4)</span> or <span Class="manpage">ftp(1)</span> for details on the file format. Curl will not complain if that file doesn't have the right permissions (it should not be either world- or group-readable). The environment variable "HOME" is used to find the home directory.
+<p class="level1">A quick and very simple example of how to setup a <span Class="emphasis">.netrc</span> to allow curl to FTP to the machine host.domain.com with user name 'myself' and password 'secret' should look similar to:
+<p class="level1"><span Class="bold">machine host.domain.com login myself password secret</span>
+<p class="level0"><a name="--netrc-optional"></a><span class="nroffip">--netrc-optional</span>
+<p class="level1">Very similar to <span Class="emphasis">--netrc</span>, but this option makes the .netrc usage <span Class="bold">optional</span> and not mandatory as the <span Class="emphasis">--netrc</span> option does.
+<p class="level0"><a name="--negotiate"></a><span class="nroffip">--negotiate</span>
+<p class="level1">(HTTP) Enables GSS-Negotiate authentication. The GSS-Negotiate method was designed by Microsoft and is used in their web applications. It is primarily meant as a support for Kerberos5 authentication but may be also used along with another authentication method. For more information see IETF draft draft-brezak-spnego-http-04.txt.
+<p class="level1">If you want to enable Negotiate for your proxy authentication, then use <a class="emphasis" href="#--proxy-negotiate">--proxy-negotiate</a>.
+<p class="level1">This option requires a library built with GSSAPI support. This is not very common. Use <a class="emphasis" href="#-V--version">-V/--version</a> to see if your version supports GSS-Negotiate.
+<p class="level1">When using this option, you must also provide a fake -u/--user option to activate the authentication code properly. Sending a '-u :' is enough as the user name and password from the -u option aren't actually used.
+<p class="level1">If this option is used several times, the following occurrences make no difference.
+<p class="level0"><a name="-N--no-buffer"></a><span class="nroffip">-N/--no-buffer</span>
+<p class="level1">Disables the buffering of the output stream. In normal work situations, curl will use a standard buffered output stream that will have the effect that it will output the data in chunks, not necessarily exactly when the data arrives. Using this option will disable that buffering.
+<p class="level1">Note that this is the negated option name documented. You can thus use <span Class="emphasis">--buffer</span> to enforce the buffering.
+<p class="level0"><a name="--no-keepalive"></a><span class="nroffip">--no-keepalive</span>
+<p class="level1">Disables the use of keepalive messages on the TCP connection, as by default curl enables them.
+<p class="level1">Note that this is the negated option name documented. You can thus use <span Class="emphasis">--keepalive</span> to enforce keepalive.
+<p class="level0"><a name="--no-sessionid"></a><span class="nroffip">--no-sessionid</span>
+<p class="level1">(SSL) Disable curl's use of SSL session-ID caching. By default all transfers are done using the cache. Note that while nothing should ever get hurt by attempting to reuse SSL session-IDs, there seem to be broken SSL implementations in the wild that may require you to disable this in order for you to succeed. (Added in 7.16.0)
+<p class="level1">Note that this is the negated option name documented. You can thus use <span Class="emphasis">--sessionid</span> to enforce session-ID caching.
+<p class="level0"><a name="--noproxy"></a><span class="nroffip">--noproxy &lt;no-proxy-list&gt;</span>
+<p class="level1">Comma-separated list of hosts which do not use a proxy, if one is specified. The only wildcard is a single * character, which matches all hosts, and effectively disables the proxy. Each name in this list is matched as either a domain which contains the hostname, or the hostname itself. For example, local.com would match local.com, local.com:80, and www.local.com, but not www.notlocal.com. (Added in 7.19.4).
+<p class="level0"><a name="--ntlm"></a><span class="nroffip">--ntlm</span>
+<p class="level1">(HTTP) Enables NTLM authentication. The NTLM authentication method was designed by Microsoft and is used by IIS web servers. It is a proprietary protocol, reverse-engineered by clever people and implemented in curl based on their efforts. This kind of behavior should not be endorsed, you should encourage everyone who uses NTLM to switch to a public and documented authentication method instead, such as Digest.
+<p class="level1">If you want to enable NTLM for your proxy authentication, then use <a class="emphasis" href="#--proxy-ntlm">--proxy-ntlm</a>.
+<p class="level1">This option requires a library built with SSL support. Use <a class="emphasis" href="#-V--version">-V/--version</a> to see if your curl supports NTLM.
+<p class="level1">If this option is used several times, the following occurrences make no difference.
+<p class="level0"><a name="-o--output"></a><span class="nroffip">-o/--output &lt;file&gt;</span>
+<p class="level1">Write output to &lt;file&gt; instead of stdout. If you are using {} or [] to fetch multiple documents, you can use '#' followed by a number in the &lt;file&gt; specifier. That variable will be replaced with the current string for the URL being fetched. Like in:
+<p class="level1">&nbsp; curl http://{one,two}.site.com -o "file_#1.txt"
+<p class="level1">or use several variables like:
+<p class="level1">&nbsp; curl http://{site,host}.host[1-5].com -o "#1_#2"
+<p class="level1">You may use this option as many times as the number of URLs you have.
+<p class="level1">See also the <a class="emphasis" href="#--create-dirs">--create-dirs</a> option to create the local directories dynamically. Specifying the output as '-' (a single dash) will force the output to be done to stdout.
+<p class="level0"><a name="-O--remote-name"></a><span class="nroffip">-O/--remote-name</span>
+<p class="level1">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.)
+<p class="level1">The remote file name to use for saving is extracted from the given URL, nothing else.
+<p class="level1">You may use this option as many times as the number of URLs you have.
+<p class="level0"><a name="--remote-name-all"></a><span class="nroffip">--remote-name-all</span>
+<p class="level1">This option changes the default action for all given URLs to be dealt with as if <a class="emphasis" href="#-O--remote-name">-O/--remote-name</a> were used for each one. So if you want to disable that for a specific URL after <a class="emphasis" href="#--remote-name-all">--remote-name-all</a> has been used, you must use "-o -" or <span Class="emphasis">--no-remote-name</span>. (Added in 7.19.0)
+<p class="level0"><a name="--pass"></a><span class="nroffip">--pass &lt;phrase&gt;</span>
+<p class="level1">(SSL/SSH) Passphrase for the private key
+<p class="level1">If this option is used several times, the last one will be used.
+<p class="level0"><a name="--post301"></a><span class="nroffip">--post301</span>
+<p class="level1">Tells curl to respect RFC 2616/10.3.2 and not convert POST requests into GET requests when following a 301 redirection. The non-RFC behaviour is ubiquitous in web browsers, so curl does the conversion by default to maintain consistency. However, a server may require a POST to remain a POST after such a redirection. This option is meaningful only when using <a class="emphasis" href="#-L--location">-L/--location</a> (Added in 7.17.1)
+<p class="level0"><a name="--post302"></a><span class="nroffip">--post302</span>
+<p class="level1">Tells curl to respect RFC 2616/10.3.2 and not convert POST requests into GET requests when following a 302 redirection. The non-RFC behaviour is ubiquitous in web browsers, so curl does the conversion by default to maintain consistency. However, a server may require a POST to remain a POST after such a redirection. This option is meaningful only when using <a class="emphasis" href="#-L--location">-L/--location</a> (Added in 7.19.1)
+<p class="level0"><a name="--proto"></a><span class="nroffip">--proto &lt;protocols&gt;</span>
+<p class="level1">Tells curl to use the listed protocols for its initial retrieval. Protocols are evaluated left to right, are comma separated, and are each a protocol name or 'all', optionally prefixed by zero or more modifiers. Available modifiers are:
+<p class="level2">
+<p class="level2"><a class="bold" href="#">+</a> Permit this protocol in addition to protocols already permitted (this is the default if no modifier is used).
+<p class="level2"><a class="bold" href="#-">-</a> Deny this protocol, removing it from the list of protocols already permitted.
+<p class="level2"><a class="bold" href="#">=</a> Permit only this protocol (ignoring the list already permitted), though subject to later modification by subsequent entries in the comma separated list.
+<p class="level1">
+<p class="level0"><a name=""></a><span class="nroffip"></span>
+<p class="level1">For example:
+<p class="level2">
+<p class="level2"><a class="bold" href="#--proto">--proto -ftps</a> uses the default protocols, but disables ftps
+<p class="level2"><a class="bold" href="#--proto">--proto -all,https,+http</a> only enables http and https
+<p class="level2"><a class="bold" href="#--proto">--proto =http,https</a> also only enables http and https
+<p class="level1">
+<p class="level0"><a name=""></a><span class="nroffip"></span>
+<p class="level1">Unknown protocols produce a warning. This allows scripts to safely rely on being able to disable potentially dangerous protocols, without relying upon support for that protocol being built into curl to avoid an error.
+<p class="level1">This option can be used multiple times, in which case the effect is the same as concatenating the protocols into one instance of the option.
+<p class="level1">(Added in 7.20.2)
+<p class="level0"><a name="--proto-redir"></a><span class="nroffip">--proto-redir &lt;protocols&gt;</span>
+<p class="level1">Tells curl to use the listed protocols after a redirect. See --proto for how protocols are represented.
+<p class="level1">(Added in 7.20.2)
+<p class="level0"><a name="--proxy-anyauth"></a><span class="nroffip">--proxy-anyauth</span>
+<p class="level1">Tells curl to pick a suitable authentication method when communicating with the given proxy. This might cause an extra request/response round-trip. (Added in 7.13.2)
+<p class="level0"><a name="--proxy-basic"></a><span class="nroffip">--proxy-basic</span>
+<p class="level1">Tells curl to use HTTP Basic authentication when communicating with the given proxy. Use <a class="emphasis" href="#--basic">--basic</a> for enabling HTTP Basic with a remote host. Basic is the default authentication method curl uses with proxies.
+<p class="level0"><a name="--proxy-digest"></a><span class="nroffip">--proxy-digest</span>
+<p class="level1">Tells curl to use HTTP Digest authentication when communicating with the given proxy. Use <a class="emphasis" href="#--digest">--digest</a> for enabling HTTP Digest with a remote host.
+<p class="level0"><a name="--proxy-negotiate"></a><span class="nroffip">--proxy-negotiate</span>
+<p class="level1">Tells curl to use HTTP Negotiate authentication when communicating with the given proxy. Use <a class="emphasis" href="#--negotiate">--negotiate</a> for enabling HTTP Negotiate with a remote host. (Added in 7.17.1)
+<p class="level0"><a name="--proxy-ntlm"></a><span class="nroffip">--proxy-ntlm</span>
+<p class="level1">Tells curl to use HTTP NTLM authentication when communicating with the given proxy. Use <a class="emphasis" href="#--ntlm">--ntlm</a> for enabling NTLM with a remote host.
+<p class="level0"><a name="--proxy10"></a><span class="nroffip">--proxy1.0 &lt;proxyhost[:port]&gt;</span>
+<p class="level1">Use the specified HTTP 1.0 proxy. If the port number is not specified, it is assumed at port 1080.
+<p class="level1">The only difference between this and the HTTP proxy option (<a class="emphasis" href="#-x--proxy">-x/--proxy</a>), is that attempts to use CONNECT through the proxy will specify an HTTP 1.0 protocol instead of the default HTTP 1.1.
+<p class="level0"><a name="-p--proxytunnel"></a><span class="nroffip">-p/--proxytunnel</span>
+<p class="level1">When an HTTP proxy is used (<a class="emphasis" href="#-x--proxy">-x/--proxy</a>), this option will cause non-HTTP protocols to attempt to tunnel through the proxy instead of merely using it to do HTTP-like operations. The tunnel approach is made with the HTTP proxy CONNECT request and requires that the proxy allows direct connect to the remote port number curl wants to tunnel through to.
+<p class="level0"><a name="--pubkey"></a><span class="nroffip">--pubkey &lt;key&gt;</span>
+<p class="level1">(SSH) Public key file name. Allows you to provide your public key in this separate file.
+<p class="level1">If this option is used several times, the last one will be used.
+<p class="level0"><a name="-P--ftp-port"></a><span class="nroffip">-P/--ftp-port &lt;address&gt;</span>
+<p class="level1">(FTP) Reverses the default initiator/listener roles when connecting with FTP. This switch makes curl use active mode. In practice, curl then tells the server to connect back to the client's specified address and port, while passive mode asks the server to setup an IP address and port for it to connect to. &lt;address&gt; should be one of:
+<p class="level2">
+<p class="level1"><a name="interface"></a><span class="nroffip">interface</span>
+<p class="level2">i.e "eth0" to specify which interface's IP address you want to use (Unix only)
+<p class="level1"><a name="IP"></a><span class="nroffip">IP address</span>
+<p class="level2">i.e "192.168.10.1" to specify the exact IP address
+<p class="level1"><a name="host"></a><span class="nroffip">host name</span>
+<p class="level2">i.e "my.host.domain" to specify the machine
+<p class="level1"><a name="-"></a><span class="nroffip">-</span>
+<p class="level2">make curl pick the same IP address that is already used for the control connection
+<p class="level1">
+<p class="level1">If this option is used several times, the last one will be used. Disable the use of PORT with <a class="emphasis" href="#--ftp-pasv">--ftp-pasv</a>. Disable the attempt to use the EPRT command instead of PORT by using <a class="emphasis" href="#--disable-eprt">--disable-eprt</a>. EPRT is really PORT++.
+<p class="level1">Starting in 7.19.5, you can append ":[start]-[end]" to the right of the address, to tell curl what TCP port range to use. That means you specify a port range, from a lower to a higher number. A single number works as well, but do note that it increases the risk of failure since the port may not be available.
+<p class="level0"><a name="-q"></a><span class="nroffip">-q</span>
+<p class="level1">If used as the first parameter on the command line, the <span Class="emphasis">curlrc</span> config file will not be read and used. See the <a class="emphasis" href="#-K--config">-K/--config</a> for details on the default config file search path.
+<p class="level0"><a name="-Q--quote"></a><span class="nroffip">-Q/--quote &lt;command&gt;</span>
+<p class="level1">(FTP/SFTP) Send an arbitrary command to the remote FTP or SFTP server. Quote commands are sent BEFORE the transfer takes place (just after the initial PWD command in an FTP transfer, to be exact). To make commands take place after a successful transfer, prefix them with a dash '-'. To make commands be sent after libcurl has changed the working directory, just before the transfer command(s), prefix the command with a '+' (this is only supported for FTP). You may specify any number of commands. If the server returns failure for one of the commands, the entire operation will be aborted. You must send syntactically correct FTP commands as RFC959 defines to FTP servers, or one of the commands listed below to SFTP servers. This option can be used multiple times.
+<p class="level1">SFTP is a binary protocol. Unlike for FTP, libcurl interprets SFTP quote commands before sending them to the server. Following is the list of all supported SFTP quote commands:
+<p class="level2">
+<p class="level1"><a name="chgrp"></a><span class="nroffip">chgrp group file</span>
+<p class="level2">The chgrp command sets the group ID of the file named by the file operand to the group ID specified by the group operand. The group operand is a decimal integer group ID.
+<p class="level1"><a name="chmod"></a><span class="nroffip">chmod mode file</span>
+<p class="level2">The chmod command modifies the file mode bits of the specified file. The mode operand is an octal integer mode number.
+<p class="level1"><a name="chown"></a><span class="nroffip">chown user file</span>
+<p class="level2">The chown command sets the owner of the file named by the file operand to the user ID specified by the user operand. The user operand is a decimal integer user ID.
+<p class="level1"><a name="ln"></a><span class="nroffip">ln source_file target_file</span>
+<p class="level2">The ln and symlink commands create a symbolic link at the target_file location pointing to the source_file location.
+<p class="level1"><a name="mkdir"></a><span class="nroffip">mkdir directory_name</span>
+<p class="level2">The mkdir command creates the directory named by the directory_name operand.
+<p class="level1"><a name="pwd"></a><span class="nroffip">pwd</span>
+<p class="level2">The pwd command returns the absolute pathname of the current working directory.
+<p class="level1"><a name="rename"></a><span class="nroffip">rename source target</span>
+<p class="level2">The rename command renames the file or directory named by the source operand to the destination path named by the target operand.
+<p class="level1"><a name="rm"></a><span class="nroffip">rm file</span>
+<p class="level2">The rm command removes the file specified by the file operand.
+<p class="level1"><a name="rmdir"></a><span class="nroffip">rmdir directory</span>
+<p class="level2">The rmdir command removes the directory entry specified by the directory operand, provided it is empty.
+<p class="level1"><a name="symlink"></a><span class="nroffip">symlink source_file target_file</span>
+<p class="level2">See ln.
+<p class="level1">
+<p class="level0"><a name="--random-file"></a><span class="nroffip">--random-file &lt;file&gt;</span>
+<p class="level1">(SSL) Specify the path name to file containing what will be considered as random data. The data is used to seed the random engine for SSL connections. See also the <a class="emphasis" href="#--egd-file">--egd-file</a> option.
+<p class="level0"><a name="-r--range"></a><span class="nroffip">-r/--range &lt;range&gt;</span>
+<p class="level1">(HTTP/FTP/SFTP/FILE) Retrieve a byte range (i.e a partial document) from a HTTP/1.1, FTP or SFTP server or a local FILE. Ranges can be specified in a number of ways.
+<p class="level2">
+<p class="level2"><span Class="bold">0-499</span> specifies the first 500 bytes
+<p class="level2"><span Class="bold">500-999</span> specifies the second 500 bytes
+<p class="level2"><span Class="bold">-500</span> specifies the last 500 bytes
+<p class="level2"><span Class="bold">9500-</span> specifies the bytes from offset 9500 and forward
+<p class="level2"><span Class="bold">0-0,-1</span> specifies the first and last byte only(*)(H)
+<p class="level2"><span Class="bold">500-700,600-799</span> specifies 300 bytes from offset 500(H)
+<p class="level2"><span Class="bold">100-199,500-599</span> specifies two separate 100-byte ranges(*)(H)
+<p class="level1">
+<p class="level1">(*) = NOTE that this will cause the server to reply with a multipart response!
+<p class="level1">Only digit characters (0-9) are valid in the 'start' and 'stop' fields of the 'start-stop' range syntax. If a non-digit character is given in the range, the server's response will be unspecified, depending on the server's configuration.
+<p class="level1">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.
+<p class="level1">FTP and SFTP range downloads only support the simple 'start-stop' syntax (optionally with one of the numbers omitted). FTP use depends on the extended FTP command SIZE.
+<p class="level1">If this option is used several times, the last one will be used.
+<p class="level0"><a name="--raw"></a><span class="nroffip">--raw</span>
+<p class="level1">When used, it disables all internal HTTP decoding of content or transfer encodings and instead makes them passed on unaltered, raw. (Added in 7.16.2)
+<p class="level0"><a name="-R--remote-time"></a><span class="nroffip">-R/--remote-time</span>
+<p class="level1">When used, this will make libcurl attempt to figure out the timestamp of the remote file, and if that is available make the local file get that same timestamp.
+<p class="level0"><a name="--retry"></a><span class="nroffip">--retry &lt;num&gt;</span>
+<p class="level1">If a transient error is returned when curl tries to perform a transfer, it will retry this number of times before giving up. Setting the number to 0 makes curl do no retries (which is the default). Transient error means either: a timeout, an FTP 4xx response code or an HTTP 5xx response code.
+<p class="level1">When curl is about to retry a transfer, it will first wait one second and then for all forthcoming retries it will double the waiting time until it reaches 10 minutes which then will be the delay between the rest of the retries. By using <a class="emphasis" href="#--retry-delay">--retry-delay</a> you disable this exponential backoff algorithm. See also <a class="emphasis" href="#--retry-max-time">--retry-max-time</a> to limit the total time allowed for retries. (Added in 7.12.3)
+<p class="level1">If this option is used multiple times, the last occurrence decide the amount.
+<p class="level0"><a name="--retry-delay"></a><span class="nroffip">--retry-delay &lt;seconds&gt;</span>
+<p class="level1">Make curl sleep this amount of time before each retry when a transfer has failed with a transient error (it changes the default backoff time algorithm between retries). This option is only interesting if <a class="emphasis" href="#--retry">--retry</a> is also used. Setting this delay to zero will make curl use the default backoff time. (Added in 7.12.3)
+<p class="level1">If this option is used multiple times, the last occurrence determines the amount.
+<p class="level0"><a name="--retry-max-time"></a><span class="nroffip">--retry-max-time &lt;seconds&gt;</span>
+<p class="level1">The retry timer is reset before the first transfer attempt. Retries will be done as usual (see <a class="emphasis" href="#--retry">--retry</a>) as long as the timer hasn't reached this given limit. Notice that if the timer hasn't reached the limit, the request will be made and while performing, it may take longer than this given time period. To limit a single request&acute;s maximum time, use <a class="emphasis" href="#-m--max-time">-m/--max-time</a>. Set this option to zero to not timeout retries. (Added in 7.12.3)
+<p class="level1">If this option is used multiple times, the last occurrence determines the amount.
+<p class="level0"><a name="-s--silent"></a><span class="nroffip">-s/--silent</span>
+<p class="level1">Silent or quiet mode. Don't show progress meter or error messages. Makes Curl mute.
+<p class="level0"><a name="-S--show-error"></a><span class="nroffip">-S/--show-error</span>
+<p class="level1">When used with -s it makes curl show an error message if it fails.
+<p class="level0"><a name="--socks4"></a><span class="nroffip">--socks4 &lt;host[:port]&gt;</span>
+<p class="level1">Use the specified SOCKS4 proxy. If the port number is not specified, it is assumed at port 1080. (Added in 7.15.2)
+<p class="level1">This option overrides any previous use of <a class="emphasis" href="#-x--proxy">-x/--proxy</a>, as they are mutually exclusive.
+<p class="level1">If this option is used several times, the last one will be used.
+<p class="level0"><a name="--socks4a"></a><span class="nroffip">--socks4a &lt;host[:port]&gt;</span>
+<p class="level1">Use the specified SOCKS4a proxy. If the port number is not specified, it is assumed at port 1080. (Added in 7.18.0)
+<p class="level1">This option overrides any previous use of <a class="emphasis" href="#-x--proxy">-x/--proxy</a>, as they are mutually exclusive.
+<p class="level1">If this option is used several times, the last one will be used.
+<p class="level0"><a name="--socks5-hostname"></a><span class="nroffip">--socks5-hostname &lt;host[:port]&gt;</span>
+<p class="level1">Use the specified SOCKS5 proxy (and let the proxy resolve the host name). If the port number is not specified, it is assumed at port 1080. (Added in 7.18.0)
+<p class="level1">This option overrides any previous use of <a class="emphasis" href="#-x--proxy">-x/--proxy</a>, as they are mutually exclusive.
+<p class="level1">If this option is used several times, the last one will be used. (This option was previously wrongly documented and used as --socks without the number appended.)
+<p class="level0"><a name="--socks5"></a><span class="nroffip">--socks5 &lt;host[:port]&gt;</span>
+<p class="level1">Use the specified SOCKS5 proxy - but resolve the host name locally. If the port number is not specified, it is assumed at port 1080.
+<p class="level1">This option overrides any previous use of <a class="emphasis" href="#-x--proxy">-x/--proxy</a>, as they are mutually exclusive.
+<p class="level1">If this option is used several times, the last one will be used. (This option was previously wrongly documented and used as --socks without the number appended.)
+<p class="level1">This option (as well as <a class="emphasis" href="#--socks4">--socks4</a>) does not work with IPV6, FTPS or LDAP.
+<p class="level0"><a name="--socks5-gssapi-service"></a><span class="nroffip">--socks5-gssapi-service &lt;servicename&gt;</span>
+<p class="level1">The default service name for a socks server is rcmd/server-fqdn. This option allows you to change it.
+<p class="level1">Examples: &nbsp;--socks5 proxy-name <a class="emphasis" href="#--socks5-gssapi-service">--socks5-gssapi-service</a> sockd would use sockd/proxy-name &nbsp;--socks5 proxy-name <a class="emphasis" href="#--socks5-gssapi-service">--socks5-gssapi-service</a> sockd/real-name would use sockd/real-name for cases where the proxy-name does not match the princpal name. &nbsp;(Added in 7.19.4).
+<p class="level0"><a name="--socks5-gssapi-nec"></a><span class="nroffip">--socks5-gssapi-nec</span>
+<p class="level1">As part of the gssapi negotiation a protection mode is negotiated. The rfc1961 says in section 4.3/4.4 it should be protected, but the NEC reference implementation does not. The option <a class="emphasis" href="#--socks5-gssapi-nec">--socks5-gssapi-nec</a> allows the unprotected exchange of the protection mode negotiation. (Added in 7.19.4).
+<p class="level0"><a name="--stderr"></a><span class="nroffip">--stderr &lt;file&gt;</span>
+<p class="level1">Redirect all writes to stderr to the specified file instead. If the file name is a plain '-', it is instead written to stdout. This option has no point when you're using a shell with decent redirecting capabilities.
+<p class="level1">If this option is used several times, the last one will be used.
+<p class="level0"><a name="--tcp-nodelay"></a><span class="nroffip">--tcp-nodelay</span>
+<p class="level1">Turn on the TCP_NODELAY option. See the <span Class="emphasis">curl_easy_setopt(3)</span> man page for details about this option. (Added in 7.11.2)
+<p class="level0"><a name="-t--telnet-option"></a><span class="nroffip">-t/--telnet-option &lt;OPT=val&gt;</span>
+<p class="level1">Pass options to the telnet protocol. Supported options are:
+<p class="level1">TTYPE=&lt;term&gt; Sets the terminal type.
+<p class="level1">XDISPLOC=&lt;X display&gt; Sets the X display location.
+<p class="level1">NEW_ENV=&lt;var,val&gt; Sets an environment variable.
+<p class="level0"><a name="--tftp-blksize"></a><span class="nroffip">--tftp-blksize &lt;value&gt;</span>
+<p class="level1">(TFTP) Set TFTP BLKSIZE option (must be &gt;512). This is the block size that curl will try to use when tranferring data to or from a TFTP server. By default 512 bytes will be used.
+<p class="level1">If this option is used several times, the last one will be used.
+<p class="level1">(Added in 7.20.0)
+<p class="level0"><a name="-T--upload-file"></a><span class="nroffip">-T/--upload-file &lt;file&gt;</span>
+<p class="level1">This transfers the specified local file to the remote URL. 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.
+<p class="level1">Use the file name "-" (a single dash) to use stdin instead of a given file. Alternately, the file name "." (a single period) may be specified instead of "-" to use stdin in non-blocking mode to allow reading server output while stdin is being uploaded.
+<p class="level1">You can specify one -T for each URL on the command line. Each -T + URL pair specifies what to upload and to where. curl also supports "globbing" of the -T argument, meaning that you can upload multiple files to a single URL by using the same URL globbing style supported in the URL, like this:
+<p class="level1">curl -T "{file1,file2}" <a href="http://www.uploadtothissite.com">http://www.uploadtothissite.com</a>
+<p class="level1">or even
+<p class="level1">curl -T "img[1-1000].png" <a href="ftp://ftp.picturemania.com/upload/">ftp://ftp.picturemania.com/upload/</a>
+<p class="level0"><a name="--trace"></a><span class="nroffip">--trace &lt;file&gt;</span>
+<p class="level1">Enables a full trace dump of all incoming and outgoing data, including descriptive information, to the given output file. Use "-" as filename to have the output sent to stdout.
+<p class="level1">This option overrides previous uses of <a class="emphasis" href="#-v--verbose">-v/--verbose</a> or <a class="emphasis" href="#--trace-ascii">--trace-ascii</a>.
+<p class="level1">If this option is used several times, the last one will be used.
+<p class="level0"><a name="--trace-ascii"></a><span class="nroffip">--trace-ascii &lt;file&gt;</span>
+<p class="level1">Enables a full trace dump of all incoming and outgoing data, including descriptive information, to the given output file. Use "-" as filename to have the output sent to stdout.
+<p class="level1">This is very similar to <a class="emphasis" href="#--trace">--trace</a>, but leaves out the hex part and only shows the ASCII part of the dump. It makes smaller output that might be easier to read for untrained humans.
+<p class="level1">This option overrides previous uses of <a class="emphasis" href="#-v--verbose">-v/--verbose</a> or <a class="emphasis" href="#--trace">--trace</a>.
+<p class="level1">If this option is used several times, the last one will be used.
+<p class="level0"><a name="--trace-time"></a><span class="nroffip">--trace-time</span>
+<p class="level1">Prepends a time stamp to each trace or verbose line that curl displays. (Added in 7.14.0)
+<p class="level0"><a name="-u--user"></a><span class="nroffip">-u/--user &lt;user:password&gt;</span>
+<p class="level1">Specify the user name and password to use for server authentication. Overrides <a class="emphasis" href="#-n--netrc">-n/--netrc</a> and <a class="emphasis" href="#--netrc-optional">--netrc-optional</a>.
+<p class="level1">If you just give the user name (without entering a colon) curl will prompt for a password.
+<p class="level1">If you use an SSPI-enabled curl binary and do NTLM authentication, you can force curl to pick up the user name and password from your environment by simply specifying a single colon with this option: "-u :".
+<p class="level1">If this option is used several times, the last one will be used.
+<p class="level0"><a name="-U--proxy-user"></a><span class="nroffip">-U/--proxy-user &lt;user:password&gt;</span>
+<p class="level1">Specify the user name and password to use for proxy authentication.
+<p class="level1">If you use an SSPI-enabled curl binary and do NTLM authentication, you can force curl to pick up the user name and password from your environment by simply specifying a single colon with this option: "-U :".
+<p class="level1">If this option is used several times, the last one will be used.
+<p class="level0"><a name="--url"></a><span class="nroffip">--url &lt;URL&gt;</span>
+<p class="level1">Specify a URL to fetch. This option is mostly handy when you want to specify URL(s) in a config file.
+<p class="level1">This option may be used any number of times. To control where this URL is written, use the <a class="emphasis" href="#-o--output">-o/--output</a> or the <a class="emphasis" href="#-O--remote-name">-O/--remote-name</a> options.
+<p class="level0"><a name="-v--verbose"></a><span class="nroffip">-v/--verbose</span>
+<p class="level1">Makes the fetching more verbose/talkative. Mostly useful for debugging. A line starting with '&gt;' means "header data" sent by curl, '&lt;' means "header data" received by curl that is hidden in normal cases, and a line starting with '*' means additional info provided by curl.
+<p class="level1">Note that if you only want HTTP headers in the output, <a class="emphasis" href="#-i--include">-i/--include</a> might be the option you're looking for.
+<p class="level1">If you think this option still doesn't give you enough details, consider using <a class="emphasis" href="#--trace">--trace</a> or <a class="emphasis" href="#--trace-ascii">--trace-ascii</a> instead.
+<p class="level1">This option overrides previous uses of <a class="emphasis" href="#--trace-ascii">--trace-ascii</a> or <a class="emphasis" href="#--trace">--trace</a>.
+<p class="level1">Use <span Class="emphasis">-S/--silent</span> to make curl quiet.
+<p class="level0"><a name="-V--version"></a><span class="nroffip">-V/--version</span>
+<p class="level1">Displays information about curl and the libcurl version it uses.
+<p class="level1">The first line includes the full version of curl, libcurl and other 3rd party libraries linked with the executable.
+<p class="level1">The second line (starts with "Protocols:") shows all protocols that libcurl reports to support.
+<p class="level1">The third line (starts with "Features:") shows specific features libcurl reports to offer. Available features include:
+<p class="level2">
+<p class="level1"><a name="IPv6"></a><span class="nroffip">IPv6</span>
+<p class="level2">You can use IPv6 with this.
+<p class="level1"><a name="krb4"></a><span class="nroffip">krb4</span>
+<p class="level2">Krb4 for FTP is supported.
+<p class="level1"><a name="SSL"></a><span class="nroffip">SSL</span>
+<p class="level2">HTTPS and FTPS are supported.
+<p class="level1"><a name="libz"></a><span class="nroffip">libz</span>
+<p class="level2">Automatic decompression of compressed files over HTTP is supported.
+<p class="level1"><a name="NTLM"></a><span class="nroffip">NTLM</span>
+<p class="level2">NTLM authentication is supported.
+<p class="level1"><a name="GSS-Negotiate"></a><span class="nroffip">GSS-Negotiate</span>
+<p class="level2">Negotiate authentication and krb5 for FTP is supported.
+<p class="level1"><a name="Debug"></a><span class="nroffip">Debug</span>
+<p class="level2">This curl uses a libcurl built with Debug. This enables more error-tracking and memory debugging etc. For curl-developers only!
+<p class="level1"><a name="AsynchDNS"></a><span class="nroffip">AsynchDNS</span>
+<p class="level2">This curl uses asynchronous name resolves.
+<p class="level1"><a name="SPNEGO"></a><span class="nroffip">SPNEGO</span>
+<p class="level2">SPNEGO Negotiate authentication is supported.
+<p class="level1"><a name="Largefile"></a><span class="nroffip">Largefile</span>
+<p class="level2">This curl supports transfers of large files, files larger than 2GB.
+<p class="level1"><a name="IDN"></a><span class="nroffip">IDN</span>
+<p class="level2">This curl supports IDN - international domain names.
+<p class="level1"><a name="SSPI"></a><span class="nroffip">SSPI</span>
+<p class="level2">SSPI is supported. If you use NTLM and set a blank user name, curl will authenticate with your current user and password.
+<p class="level1">
+<p class="level0"><a name="-w--write-out"></a><span class="nroffip">-w/--write-out &lt;format&gt;</span>
+<p class="level1">Defines what to display on stdout after a completed and successful operation. The format is a string that may contain plain text mixed with any number of variables. The string can be specified as "string", to get read from a particular file you specify it "@filename" and to tell curl to read the format from stdin you write "@-".
+<p class="level1">The variables present in the output format will be substituted by the value or text that curl thinks fit, as described below. All variables are specified as %{variable_name} and to output a normal % you just write them as %%. You can output a newline by using \n, a carriage return with \r and a tab space with \t.
+<p class="level1"><span Class="bold">NOTE:</span> The %-symbol is a special symbol in the win32-environment, where all occurrences of % must be doubled when using this option.
+<p class="level1">The variables available at this point are:
+<p class="level2">
+<p class="level2"><span Class="bold">url_effective</span> The URL that was fetched last. This is most meaningful if you've told curl to follow location: headers.
+<p class="level2"><span Class="bold">http_code</span> The numerical response code that was found in the last retrieved HTTP(S) or FTP(s) transfer. In 7.18.2 the alias <span Class="bold">response_code</span> was added to show the same info.
+<p class="level2"><span Class="bold">http_connect</span> The numerical code that was found in the last response (from a proxy) to a curl CONNECT request. (Added in 7.12.4)
+<p class="level2"><span Class="bold">time_total</span> The total time, in seconds, that the full operation lasted. The time will be displayed with millisecond resolution.
+<p class="level2"><span Class="bold">time_namelookup</span> The time, in seconds, it took from the start until the name resolving was completed.
+<p class="level2"><span Class="bold">time_connect</span> The time, in seconds, it took from the start until the TCP connect to the remote host (or proxy) was completed.
+<p class="level2"><span Class="bold">time_appconnect</span> The time, in seconds, it took from the start until the SSL/SSH/etc connect/handshake to the remote host was completed. (Added in 7.19.0)
+<p class="level2"><span Class="bold">time_pretransfer</span> The time, in seconds, it took from the start until the file transfer was just about to begin. This includes all pre-transfer commands and negotiations that are specific to the particular protocol(s) involved.
+<p class="level2"><span Class="bold">time_redirect</span> The time, in seconds, it took for all redirection steps include name lookup, connect, pretransfer and transfer before the final transaction was started. time_redirect shows the complete execution time for multiple redirections. (Added in 7.12.3)
+<p class="level2"><span Class="bold">time_starttransfer</span> The time, in seconds, it took from the start until the first byte was just about to be transferred. This includes time_pretransfer and also the time the server needed to calculate the result.
+<p class="level2"><span Class="bold">size_download</span> The total amount of bytes that were downloaded.
+<p class="level2"><span Class="bold">size_upload</span> The total amount of bytes that were uploaded.
+<p class="level2"><span Class="bold">size_header</span> The total amount of bytes of the downloaded headers.
+<p class="level2"><span Class="bold">size_request</span> The total amount of bytes that were sent in the HTTP request.
+<p class="level2"><span Class="bold">speed_download</span> The average download speed that curl measured for the complete download. Bytes per second.
+<p class="level2"><span Class="bold">speed_upload</span> The average upload speed that curl measured for the complete upload. Bytes per second.
+<p class="level2"><span Class="bold">content_type</span> The Content-Type of the requested document, if there was any.
+<p class="level2"><span Class="bold">num_connects</span> Number of new connects made in the recent transfer. (Added in 7.12.3)
+<p class="level2"><span Class="bold">num_redirects</span> Number of redirects that were followed in the request. (Added in 7.12.3)
+<p class="level2"><span Class="bold">redirect_url</span> When a HTTP request was made without -L to follow redirects, this variable will show the actual URL a redirect <span Class="emphasis">would</span> take you to. (Added in 7.18.2)
+<p class="level2"><span Class="bold">ftp_entry_path</span> The initial path libcurl ended up in when logging on to the remote FTP server. (Added in 7.15.4)
+<p class="level2"><span Class="bold">ssl_verify_result</span> The result of the SSL peer certificate verification that was requested. 0 means the verification was successful. (Added in 7.19.0)
+<p class="level1">
+<p class="level1">If this option is used several times, the last one will be used.
+<p class="level0"><a name="-x--proxy"></a><span class="nroffip">-x/--proxy &lt;proxyhost[:port]&gt;</span>
+<p class="level1">Use the specified HTTP proxy. If the port number is not specified, it is assumed at port 1080.
+<p class="level1">This option overrides existing environment variables that set the proxy to use. If there's an environment variable setting a proxy, you can set proxy to "" to override it.
+<p class="level1"><span Class="bold">Note</span> that all operations that are performed over a HTTP proxy will transparently be converted to HTTP. It means that certain protocol specific operations might not be available. This is not the case if you can tunnel through the proxy, as done with the <a class="emphasis" href="#-p--proxytunnel">-p/--proxytunnel</a> option.
+<p class="level1">Starting with 7.14.1, the proxy host can be specified the exact same way as the proxy environment variables, including the protocol prefix (http://) and the embedded user + password.
+<p class="level1">If this option is used several times, the last one will be used.
+<p class="level0"><a name="-X--request"></a><span class="nroffip">-X/--request &lt;command&gt;</span>
+<p class="level1">(HTTP) Specifies a custom request method to use when communicating with the HTTP server. The specified request will be used instead of the method otherwise used (which defaults to GET). Read the HTTP 1.1 specification for details and explanations. Common additional HTTP requests include PUT and DELETE, but related technologies like WebDAV offers PROPFIND, COPY, MOVE and more.
+<p class="level1">(FTP) Specifies a custom FTP command to use instead of LIST when doing file lists with FTP.
+<p class="level1">If this option is used several times, the last one will be used.
+<p class="level0"><a name="-y--speed-time"></a><span class="nroffip">-y/--speed-time &lt;time&gt;</span>
+<p class="level1">If a download is slower than speed-limit bytes per second during a speed-time period, the download gets aborted. If speed-time is used, the default speed-limit will be 1 unless set with -Y.
+<p class="level1">This option controls transfers and thus will not affect slow connects etc. If this is a concern for you, try the <a class="emphasis" href="#--connect-timeout">--connect-timeout</a> option.
+<p class="level1">If this option is used several times, the last one will be used.
+<p class="level0"><a name="-Y--speed-limit"></a><span class="nroffip">-Y/--speed-limit &lt;speed&gt;</span>
+<p class="level1">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.
+<p class="level1">If this option is used several times, the last one will be used.
+<p class="level0"><a name="-z--time-cond"></a><span class="nroffip">-z/--time-cond &lt;date expression&gt;</span>
+<p class="level1">(HTTP/FTP) Request a file that has been modified later than the given time and date, or one that has been modified before that time. The date expression can be all sorts of date strings or if it doesn't match any internal ones, it tries to get the time from a given file name instead! See the <span Class="emphasis">curl_getdate(3)</span> man pages for date expression details.
+<p class="level1">Start the date expression with a dash (-) to make it request for a document that is older than the given date/time, default is a document that is newer than the specified date/time.
+<p class="level1">If this option is used several times, the last one will be used.
+<p class="level0"><a name="--max-redirs"></a><span class="nroffip">--max-redirs &lt;num&gt;</span>
+<p class="level1">Set maximum number of redirection-followings allowed. If <a class="emphasis" href="#-L--location">-L/--location</a> is used, this option can be used to prevent curl from following redirections "in absurdum". By default, the limit is set to 50 redirections. Set this option to -1 to make it limitless.
+<p class="level1">If this option is used several times, the last one will be used.
+<p class="level0"><a name="-0--http10"></a><span class="nroffip">-0/--http1.0</span>
+<p class="level1">(HTTP) Forces curl to issue its requests using HTTP 1.0 instead of using its internally preferred: HTTP 1.1.
+<p class="level0"><a name="-1--tlsv1"></a><span class="nroffip">-1/--tlsv1</span>
+<p class="level1">(SSL) Forces curl to use TLS version 1 when negotiating with a remote TLS server.
+<p class="level0"><a name="-2--sslv2"></a><span class="nroffip">-2/--sslv2</span>
+<p class="level1">(SSL) Forces curl to use SSL version 2 when negotiating with a remote SSL server.
+<p class="level0"><a name="-3--sslv3"></a><span class="nroffip">-3/--sslv3</span>
+<p class="level1">(SSL) Forces curl to use SSL version 3 when negotiating with a remote SSL server.
+<p class="level0"><a name="-4--ipv4"></a><span class="nroffip">-4/--ipv4</span>
+<p class="level1">If libcurl is capable of resolving an address to multiple IP versions (which it is if it is IPv6-capable), this option tells libcurl to resolve names to IPv4 addresses only.
+<p class="level0"><a name="-6--ipv6"></a><span class="nroffip">-6/--ipv6</span>
+<p class="level1">If libcurl is capable of resolving an address to multiple IP versions (which it is if it is IPv6-capable), this option tells libcurl to resolve names to IPv6 addresses only.
+<p class="level0"><a name="---progress-bar"></a><span class="nroffip">-#/--progress-bar</span>
+<p class="level1">Make curl display progress information as a progress bar instead of the default statistics. <a name="FILES"></a><h2 class="nroffsh">FILES</h2>
+<p class="level0"><span Class="emphasis">~/.curlrc</span>
+<p class="level1">Default config file, see <a class="emphasis" href="#-K--config">-K/--config</a> for details. <a name="ENVIRONMENT"></a><h2 class="nroffsh">ENVIRONMENT</h2>
+<p class="level0">The environment variables can be specified in lower case or upper case. The lower case version has precedence. http_proxy is an exception as it is only available in lower case.
+<p class="level0"><a name="httpproxy"></a><span class="nroffip">http_proxy [protocol://]&lt;host&gt;[:port]</span>
+<p class="level1">Sets the proxy server to use for HTTP.
+<p class="level0"><a name="HTTPSPROXY"></a><span class="nroffip">HTTPS_PROXY [protocol://]&lt;host&gt;[:port]</span>
+<p class="level1">Sets the proxy server to use for HTTPS.
+<p class="level0"><a name="FTPPROXY"></a><span class="nroffip">FTP_PROXY [protocol://]&lt;host&gt;[:port]</span>
+<p class="level1">Sets the proxy server to use for FTP.
+<p class="level0"><a name="ALLPROXY"></a><span class="nroffip">ALL_PROXY [protocol://]&lt;host&gt;[:port]</span>
+<p class="level1">Sets the proxy server to use if no protocol-specific proxy is set.
+<p class="level0"><a name="NOPROXY"></a><span class="nroffip">NO_PROXY &lt;comma-separated list of hosts&gt;</span>
+<p class="level1">list of host names that shouldn't go through any proxy. If set to a asterisk '*' only, it matches all hosts. <a name="EXIT"></a><h2 class="nroffsh">EXIT CODES</h2>
+<p class="level0">There are a bunch of different error codes and their corresponding error messages that may appear during bad conditions. At the time of this writing, the exit codes are:
+<p class="level0"><a name="1"></a><span class="nroffip">1</span>
+<p class="level1">Unsupported protocol. This build of curl has no support for this protocol.
+<p class="level0"><a name="2"></a><span class="nroffip">2</span>
+<p class="level1">Failed to initialize.
+<p class="level0"><a name="3"></a><span class="nroffip">3</span>
+<p class="level1">URL malformed. The syntax was not correct.
+<p class="level0"><a name="5"></a><span class="nroffip">5</span>
+<p class="level1">Couldn't resolve proxy. The given proxy host could not be resolved.
+<p class="level0"><a name="6"></a><span class="nroffip">6</span>
+<p class="level1">Couldn't resolve host. The given remote host was not resolved.
+<p class="level0"><a name="7"></a><span class="nroffip">7</span>
+<p class="level1">Failed to connect to host.
+<p class="level0"><a name="8"></a><span class="nroffip">8</span>
+<p class="level1">FTP weird server reply. The server sent data curl couldn't parse.
+<p class="level0"><a name="9"></a><span class="nroffip">9</span>
+<p class="level1">FTP access denied. The server denied login or denied access to the particular resource or directory you wanted to reach. Most often you tried to change to a directory that doesn't exist on the server.
+<p class="level0"><a name="11"></a><span class="nroffip">11</span>
+<p class="level1">FTP weird PASS reply. Curl couldn't parse the reply sent to the PASS request.
+<p class="level0"><a name="13"></a><span class="nroffip">13</span>
+<p class="level1">FTP weird PASV reply, Curl couldn't parse the reply sent to the PASV request.
+<p class="level0"><a name="14"></a><span class="nroffip">14</span>
+<p class="level1">FTP weird 227 format. Curl couldn't parse the 227-line the server sent.
+<p class="level0"><a name="15"></a><span class="nroffip">15</span>
+<p class="level1">FTP can't get host. Couldn't resolve the host IP we got in the 227-line.
+<p class="level0"><a name="17"></a><span class="nroffip">17</span>
+<p class="level1">FTP couldn't set binary. Couldn't change transfer method to binary.
+<p class="level0"><a name="18"></a><span class="nroffip">18</span>
+<p class="level1">Partial file. Only a part of the file was transferred.
+<p class="level0"><a name="19"></a><span class="nroffip">19</span>
+<p class="level1">FTP couldn't download/access the given file, the RETR (or similar) command failed.
+<p class="level0"><a name="21"></a><span class="nroffip">21</span>
+<p class="level1">FTP quote error. A quote command returned error from the server.
+<p class="level0"><a name="22"></a><span class="nroffip">22</span>
+<p class="level1">HTTP page not retrieved. The requested url was not found or returned another error with the HTTP error code being 400 or above. This return code only appears if <a class="emphasis" href="#-f--fail">-f/--fail</a> is used.
+<p class="level0"><a name="23"></a><span class="nroffip">23</span>
+<p class="level1">Write error. Curl couldn't write data to a local filesystem or similar.
+<p class="level0"><a name="25"></a><span class="nroffip">25</span>
+<p class="level1">FTP couldn't STOR file. The server denied the STOR operation, used for FTP uploading.
+<p class="level0"><a name="26"></a><span class="nroffip">26</span>
+<p class="level1">Read error. Various reading problems.
+<p class="level0"><a name="27"></a><span class="nroffip">27</span>
+<p class="level1">Out of memory. A memory allocation request failed.
+<p class="level0"><a name="28"></a><span class="nroffip">28</span>
+<p class="level1">Operation timeout. The specified time-out period was reached according to the conditions.
+<p class="level0"><a name="30"></a><span class="nroffip">30</span>
+<p class="level1">FTP PORT failed. The PORT command failed. Not all FTP servers support the PORT command, try doing a transfer using PASV instead!
+<p class="level0"><a name="31"></a><span class="nroffip">31</span>
+<p class="level1">FTP couldn't use REST. The REST command failed. This command is used for resumed FTP transfers.
+<p class="level0"><a name="33"></a><span class="nroffip">33</span>
+<p class="level1">HTTP range error. The range "command" didn't work.
+<p class="level0"><a name="34"></a><span class="nroffip">34</span>
+<p class="level1">HTTP post error. Internal post-request generation error.
+<p class="level0"><a name="35"></a><span class="nroffip">35</span>
+<p class="level1">SSL connect error. The SSL handshaking failed.
+<p class="level0"><a name="36"></a><span class="nroffip">36</span>
+<p class="level1">FTP bad download resume. Couldn't continue an earlier aborted download.
+<p class="level0"><a name="37"></a><span class="nroffip">37</span>
+<p class="level1">FILE couldn't read file. Failed to open the file. Permissions?
+<p class="level0"><a name="38"></a><span class="nroffip">38</span>
+<p class="level1">LDAP cannot bind. LDAP bind operation failed.
+<p class="level0"><a name="39"></a><span class="nroffip">39</span>
+<p class="level1">LDAP search failed.
+<p class="level0"><a name="41"></a><span class="nroffip">41</span>
+<p class="level1">Function not found. A required LDAP function was not found.
+<p class="level0"><a name="42"></a><span class="nroffip">42</span>
+<p class="level1">Aborted by callback. An application told curl to abort the operation.
+<p class="level0"><a name="43"></a><span class="nroffip">43</span>
+<p class="level1">Internal error. A function was called with a bad parameter.
+<p class="level0"><a name="45"></a><span class="nroffip">45</span>
+<p class="level1">Interface error. A specified outgoing interface could not be used.
+<p class="level0"><a name="47"></a><span class="nroffip">47</span>
+<p class="level1">Too many redirects. When following redirects, curl hit the maximum amount.
+<p class="level0"><a name="48"></a><span class="nroffip">48</span>
+<p class="level1">Unknown TELNET option specified.
+<p class="level0"><a name="49"></a><span class="nroffip">49</span>
+<p class="level1">Malformed telnet option.
+<p class="level0"><a name="51"></a><span class="nroffip">51</span>
+<p class="level1">The peer's SSL certificate or SSH MD5 fingerprint was not ok.
+<p class="level0"><a name="52"></a><span class="nroffip">52</span>
+<p class="level1">The server didn't reply anything, which here is considered an error.
+<p class="level0"><a name="53"></a><span class="nroffip">53</span>
+<p class="level1">SSL crypto engine not found.
+<p class="level0"><a name="54"></a><span class="nroffip">54</span>
+<p class="level1">Cannot set SSL crypto engine as default.
+<p class="level0"><a name="55"></a><span class="nroffip">55</span>
+<p class="level1">Failed sending network data.
+<p class="level0"><a name="56"></a><span class="nroffip">56</span>
+<p class="level1">Failure in receiving network data.
+<p class="level0"><a name="58"></a><span class="nroffip">58</span>
+<p class="level1">Problem with the local certificate.
+<p class="level0"><a name="59"></a><span class="nroffip">59</span>
+<p class="level1">Couldn't use specified SSL cipher.
+<p class="level0"><a name="60"></a><span class="nroffip">60</span>
+<p class="level1">Peer certificate cannot be authenticated with known CA certificates.
+<p class="level0"><a name="61"></a><span class="nroffip">61</span>
+<p class="level1">Unrecognized transfer encoding.
+<p class="level0"><a name="62"></a><span class="nroffip">62</span>
+<p class="level1">Invalid LDAP URL.
+<p class="level0"><a name="63"></a><span class="nroffip">63</span>
+<p class="level1">Maximum file size exceeded.
+<p class="level0"><a name="64"></a><span class="nroffip">64</span>
+<p class="level1">Requested FTP SSL level failed.
+<p class="level0"><a name="65"></a><span class="nroffip">65</span>
+<p class="level1">Sending the data requires a rewind that failed.
+<p class="level0"><a name="66"></a><span class="nroffip">66</span>
+<p class="level1">Failed to initialise SSL Engine.
+<p class="level0"><a name="67"></a><span class="nroffip">67</span>
+<p class="level1">The user name, password, or similar was not accepted and curl failed to log in.
+<p class="level0"><a name="68"></a><span class="nroffip">68</span>
+<p class="level1">File not found on TFTP server.
+<p class="level0"><a name="69"></a><span class="nroffip">69</span>
+<p class="level1">Permission problem on TFTP server.
+<p class="level0"><a name="70"></a><span class="nroffip">70</span>
+<p class="level1">Out of disk space on TFTP server.
+<p class="level0"><a name="71"></a><span class="nroffip">71</span>
+<p class="level1">Illegal TFTP operation.
+<p class="level0"><a name="72"></a><span class="nroffip">72</span>
+<p class="level1">Unknown TFTP transfer ID.
+<p class="level0"><a name="73"></a><span class="nroffip">73</span>
+<p class="level1">File already exists (TFTP).
+<p class="level0"><a name="74"></a><span class="nroffip">74</span>
+<p class="level1">No such user (TFTP).
+<p class="level0"><a name="75"></a><span class="nroffip">75</span>
+<p class="level1">Character conversion failed.
+<p class="level0"><a name="76"></a><span class="nroffip">76</span>
+<p class="level1">Character conversion functions required.
+<p class="level0"><a name="77"></a><span class="nroffip">77</span>
+<p class="level1">Problem with reading the SSL CA cert (path? access rights?).
+<p class="level0"><a name="78"></a><span class="nroffip">78</span>
+<p class="level1">The resource referenced in the URL does not exist.
+<p class="level0"><a name="79"></a><span class="nroffip">79</span>
+<p class="level1">An unspecified error occurred during the SSH session.
+<p class="level0"><a name="80"></a><span class="nroffip">80</span>
+<p class="level1">Failed to shut down the SSL connection.
+<p class="level0"><a name="82"></a><span class="nroffip">82</span>
+<p class="level1">Could not load CRL file, missing or wrong format (added in 7.19.0).
+<p class="level0"><a name="83"></a><span class="nroffip">83</span>
+<p class="level1">Issuer check failed (added in 7.19.0).
+<p class="level0"><a name="XX"></a><span class="nroffip">XX</span>
+<p class="level1">More error codes will appear here in future releases. The existing ones are meant to never change. <a name="AUTHORS"></a><h2 class="nroffsh">AUTHORS / CONTRIBUTORS</h2>
+<p class="level0">Daniel Stenberg is the main author, but the whole list of contributors is found in the separate THANKS file. <a name="WWW"></a><h2 class="nroffsh">WWW</h2>
+<p class="level0"><a href="http://curl.haxx.se">http://curl.haxx.se</a> <a name="FTP"></a><h2 class="nroffsh">FTP</h2>
+<p class="level0"><a href="ftp://ftp.sunet.se/pub/www/utilities/curl/">ftp://ftp.sunet.se/pub/www/utilities/curl/</a> <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><span Class="manpage">ftp (1)</span> <span Class="manpage">wget (1)</span>
+<p class="level0"><p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/curl.pdf b/docs/curl.pdf
new file mode 100644
index 0000000..d0e7ce2
--- /dev/null
+++ b/docs/curl.pdf
Binary files differ
diff --git a/docs/examples/10-at-a-time.c b/docs/examples/10-at-a-time.c
new file mode 100644
index 0000000..b215cbf
--- /dev/null
+++ b/docs/examples/10-at-a-time.c
@@ -0,0 +1,184 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ *
+ * Example application source code using the multi interface to download many
+ * files, but with a capped maximum amount of simultaneous transfers.
+ *
+ * Written by Michael Wallner
+ */
+
+#include <errno.h>
+#include <stdlib.h>
+#include <string.h>
+#ifndef WIN32
+# include <unistd.h>
+#endif
+#include <curl/multi.h>
+
+static const char *urls[] = {
+ "http://www.microsoft.com",
+ "http://www.opensource.org",
+ "http://www.google.com",
+ "http://www.yahoo.com",
+ "http://www.ibm.com",
+ "http://www.mysql.com",
+ "http://www.oracle.com",
+ "http://www.ripe.net",
+ "http://www.iana.org",
+ "http://www.amazon.com",
+ "http://www.netcraft.com",
+ "http://www.heise.de",
+ "http://www.chip.de",
+ "http://www.ca.com",
+ "http://www.cnet.com",
+ "http://www.news.com",
+ "http://www.cnn.com",
+ "http://www.wikipedia.org",
+ "http://www.dell.com",
+ "http://www.hp.com",
+ "http://www.cert.org",
+ "http://www.mit.edu",
+ "http://www.nist.gov",
+ "http://www.ebay.com",
+ "http://www.playstation.com",
+ "http://www.uefa.com",
+ "http://www.ieee.org",
+ "http://www.apple.com",
+ "http://www.sony.com",
+ "http://www.symantec.com",
+ "http://www.zdnet.com",
+ "http://www.fujitsu.com",
+ "http://www.supermicro.com",
+ "http://www.hotmail.com",
+ "http://www.ecma.com",
+ "http://www.bbc.co.uk",
+ "http://news.google.com",
+ "http://www.foxnews.com",
+ "http://www.msn.com",
+ "http://www.wired.com",
+ "http://www.sky.com",
+ "http://www.usatoday.com",
+ "http://www.cbs.com",
+ "http://www.nbc.com",
+ "http://slashdot.org",
+ "http://www.bloglines.com",
+ "http://www.techweb.com",
+ "http://www.newslink.org",
+ "http://www.un.org",
+};
+
+#define MAX 10 /* number of simultaneous transfers */
+#define CNT sizeof(urls)/sizeof(char*) /* total number of transfers to do */
+
+static size_t cb(char *d, size_t n, size_t l, void *p)
+{
+ /* take care of the data here, ignored in this example */
+ (void)d;
+ (void)p;
+ return n*l;
+}
+
+static void init(CURLM *cm, int i)
+{
+ CURL *eh = curl_easy_init();
+
+ curl_easy_setopt(eh, CURLOPT_WRITEFUNCTION, cb);
+ curl_easy_setopt(eh, CURLOPT_HEADER, 0L);
+ curl_easy_setopt(eh, CURLOPT_URL, urls[i]);
+ curl_easy_setopt(eh, CURLOPT_PRIVATE, urls[i]);
+ curl_easy_setopt(eh, CURLOPT_VERBOSE, 0L);
+
+ curl_multi_add_handle(cm, eh);
+}
+
+int main(void)
+{
+ CURLM *cm;
+ CURLMsg *msg;
+ long L;
+ unsigned int C=0;
+ int M, Q, U = -1;
+ fd_set R, W, E;
+ struct timeval T;
+
+ curl_global_init(CURL_GLOBAL_ALL);
+
+ cm = curl_multi_init();
+
+ /* we can optionally limit the total amount of connections this multi handle
+ uses */
+ curl_multi_setopt(cm, CURLMOPT_MAXCONNECTS, (long)MAX);
+
+ for (C = 0; C < MAX; ++C) {
+ init(cm, C);
+ }
+
+ while (U) {
+ curl_multi_perform(cm, &U);
+
+ if (U) {
+ FD_ZERO(&R);
+ FD_ZERO(&W);
+ FD_ZERO(&E);
+
+ if (curl_multi_fdset(cm, &R, &W, &E, &M)) {
+ fprintf(stderr, "E: curl_multi_fdset\n");
+ return EXIT_FAILURE;
+ }
+
+ if (curl_multi_timeout(cm, &L)) {
+ fprintf(stderr, "E: curl_multi_timeout\n");
+ return EXIT_FAILURE;
+ }
+ if (L == -1)
+ L = 100;
+
+ if (M == -1) {
+#ifdef WIN32
+ Sleep(L);
+#else
+ sleep(L / 1000);
+#endif
+ } else {
+ T.tv_sec = L/1000;
+ T.tv_usec = (L%1000)*1000;
+
+ if (0 > select(M+1, &R, &W, &E, &T)) {
+ fprintf(stderr, "E: select(%i,,,,%li): %i: %s\n",
+ M+1, L, errno, strerror(errno));
+ return EXIT_FAILURE;
+ }
+ }
+ }
+
+ while ((msg = curl_multi_info_read(cm, &Q))) {
+ if (msg->msg == CURLMSG_DONE) {
+ char *url;
+ CURL *e = msg->easy_handle;
+ curl_easy_getinfo(msg->easy_handle, CURLINFO_PRIVATE, &url);
+ fprintf(stderr, "R: %d - %s <%s>\n",
+ msg->data.result, curl_easy_strerror(msg->data.result), url);
+ curl_multi_remove_handle(cm, e);
+ curl_easy_cleanup(e);
+ }
+ else {
+ fprintf(stderr, "E: CURLMsg (%d)\n", msg->msg);
+ }
+ if (C < CNT) {
+ init(cm, C++);
+ U++; /* just to prevent it from remaining at 0 if there are more
+ URLs to get */
+ }
+ }
+ }
+
+ curl_multi_cleanup(cm);
+ curl_global_cleanup();
+
+ return EXIT_SUCCESS;
+}
diff --git a/docs/examples/Makefile.am b/docs/examples/Makefile.am
new file mode 100644
index 0000000..8d92f73
--- /dev/null
+++ b/docs/examples/Makefile.am
@@ -0,0 +1,37 @@
+#
+#
+
+AUTOMAKE_OPTIONS = foreign nostdinc
+
+EXTRA_DIST = README Makefile.example Makefile.inc Makefile.m32 \
+ makefile.dj $(COMPLICATED_EXAMPLES)
+
+# Specify our include paths here, and do it relative to $(top_srcdir) and
+# $(top_builddir), to ensure that these paths which belong to the library
+# being currently built and tested are searched before the library which
+# might possibly already be installed in the system.
+#
+# $(top_builddir)/include/curl for generated curlbuild.h included from curl.h
+# $(top_builddir)/include for generated curlbuild.h included from lib/setup.h
+# $(top_srcdir)/include is for libcurl's external include files
+
+INCLUDES = -I$(top_builddir)/include/curl \
+ -I$(top_builddir)/include \
+ -I$(top_srcdir)/include
+
+LIBDIR = $(top_builddir)/lib
+
+if STATICLIB
+# we need this define when building with a static lib on Windows
+STATICCPPFLAGS = -DCURL_STATICLIB
+endif
+
+CPPFLAGS = -DCURL_NO_OLDIES $(STATICCPPFLAGS)
+
+# Dependencies
+LDADD = $(LIBDIR)/libcurl.la
+
+# Makefile.inc provides the check_PROGRAMS and COMPLICATED_EXAMPLES defines
+include Makefile.inc
+
+
diff --git a/docs/examples/Makefile.example b/docs/examples/Makefile.example
new file mode 100644
index 0000000..29ca0d7
--- /dev/null
+++ b/docs/examples/Makefile.example
@@ -0,0 +1,40 @@
+#############################################################################
+# _ _ ____ _
+# Project ___| | | | _ \| |
+# / __| | | | |_) | |
+# | (__| |_| | _ <| |___
+# \___|\___/|_| \_\_____|
+#
+#
+
+# What to call the final executable
+TARGET = example
+
+# Which object files that the executable consists of
+OBJS= ftpget.o
+
+# What compiler to use
+CC = gcc
+
+# Compiler flags, -g for debug, -c to make an object file
+CFLAGS = -c -g
+
+# This should point to a directory that holds libcurl, if it isn't
+# in the system's standard lib dir
+# We also set a -L to include the directory where we have the openssl
+# libraries
+LDFLAGS = -L/home/dast/lib -L/usr/local/ssl/lib
+
+# We need -lcurl for the curl stuff
+# We need -lsocket and -lnsl when on Solaris
+# We need -lssl and -lcrypto when using libcurl with SSL support
+# We need -lpthread for the pthread example
+LIBS = -lcurl -lsocket -lnsl -lssl -lcrypto
+
+# Link the target with all objects and libraries
+$(TARGET) : $(OBJS)
+ $(CC) -o $(TARGET) $(OBJS) $(LDFLAGS) $(LIBS)
+
+# Compile the source files into object files
+ftpget.o : ftpget.c
+ $(CC) $(CFLAGS) $<
diff --git a/docs/examples/Makefile.in b/docs/examples/Makefile.in
new file mode 100644
index 0000000..aba3989
--- /dev/null
+++ b/docs/examples/Makefile.in
@@ -0,0 +1,820 @@
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005 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.
+
+@SET_MAKE@
+
+#
+#
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(srcdir)/Makefile.inc
+check_PROGRAMS = 10-at-a-time$(EXEEXT) anyauthput$(EXEEXT) \
+ cookie_interface$(EXEEXT) debug$(EXEEXT) fileupload$(EXEEXT) \
+ fopen$(EXEEXT) ftpget$(EXEEXT) ftpgetresp$(EXEEXT) \
+ ftpupload$(EXEEXT) getinfo$(EXEEXT) getinmemory$(EXEEXT) \
+ http-post$(EXEEXT) httpput$(EXEEXT) https$(EXEEXT) \
+ multi-app$(EXEEXT) multi-debugcallback$(EXEEXT) \
+ multi-double$(EXEEXT) multi-post$(EXEEXT) \
+ multi-single$(EXEEXT) persistant$(EXEEXT) \
+ post-callback$(EXEEXT) postit2$(EXEEXT) sepheaders$(EXEEXT) \
+ simple$(EXEEXT) simplepost$(EXEEXT) simplessl$(EXEEXT) \
+ sendrecv$(EXEEXT) httpcustomheader$(EXEEXT) certinfo$(EXEEXT) \
+ chkspeed$(EXEEXT) ftpgetinfo$(EXEEXT) ftp-wildcard$(EXEEXT)
+subdir = docs/examples
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
+ $(top_srcdir)/m4/curl-confopts.m4 \
+ $(top_srcdir)/m4/curl-functions.m4 \
+ $(top_srcdir)/m4/curl-override.m4 \
+ $(top_srcdir)/m4/curl-reentrant.m4 \
+ $(top_srcdir)/m4/curl-system.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/lib/curl_config.h \
+ $(top_builddir)/src/curl_config.h \
+ $(top_builddir)/include/curl/curlbuild.h
+CONFIG_CLEAN_FILES =
+10_at_a_time_SOURCES = 10-at-a-time.c
+10_at_a_time_OBJECTS = 10-at-a-time.$(OBJEXT)
+10_at_a_time_LDADD = $(LDADD)
+10_at_a_time_DEPENDENCIES = $(LIBDIR)/libcurl.la
+anyauthput_SOURCES = anyauthput.c
+anyauthput_OBJECTS = anyauthput.$(OBJEXT)
+anyauthput_LDADD = $(LDADD)
+anyauthput_DEPENDENCIES = $(LIBDIR)/libcurl.la
+certinfo_SOURCES = certinfo.c
+certinfo_OBJECTS = certinfo.$(OBJEXT)
+certinfo_LDADD = $(LDADD)
+certinfo_DEPENDENCIES = $(LIBDIR)/libcurl.la
+chkspeed_SOURCES = chkspeed.c
+chkspeed_OBJECTS = chkspeed.$(OBJEXT)
+chkspeed_LDADD = $(LDADD)
+chkspeed_DEPENDENCIES = $(LIBDIR)/libcurl.la
+cookie_interface_SOURCES = cookie_interface.c
+cookie_interface_OBJECTS = cookie_interface.$(OBJEXT)
+cookie_interface_LDADD = $(LDADD)
+cookie_interface_DEPENDENCIES = $(LIBDIR)/libcurl.la
+debug_SOURCES = debug.c
+debug_OBJECTS = debug.$(OBJEXT)
+debug_LDADD = $(LDADD)
+debug_DEPENDENCIES = $(LIBDIR)/libcurl.la
+fileupload_SOURCES = fileupload.c
+fileupload_OBJECTS = fileupload.$(OBJEXT)
+fileupload_LDADD = $(LDADD)
+fileupload_DEPENDENCIES = $(LIBDIR)/libcurl.la
+fopen_SOURCES = fopen.c
+fopen_OBJECTS = fopen.$(OBJEXT)
+fopen_LDADD = $(LDADD)
+fopen_DEPENDENCIES = $(LIBDIR)/libcurl.la
+ftp_wildcard_SOURCES = ftp-wildcard.c
+ftp_wildcard_OBJECTS = ftp-wildcard.$(OBJEXT)
+ftp_wildcard_LDADD = $(LDADD)
+ftp_wildcard_DEPENDENCIES = $(LIBDIR)/libcurl.la
+ftpget_SOURCES = ftpget.c
+ftpget_OBJECTS = ftpget.$(OBJEXT)
+ftpget_LDADD = $(LDADD)
+ftpget_DEPENDENCIES = $(LIBDIR)/libcurl.la
+ftpgetinfo_SOURCES = ftpgetinfo.c
+ftpgetinfo_OBJECTS = ftpgetinfo.$(OBJEXT)
+ftpgetinfo_LDADD = $(LDADD)
+ftpgetinfo_DEPENDENCIES = $(LIBDIR)/libcurl.la
+ftpgetresp_SOURCES = ftpgetresp.c
+ftpgetresp_OBJECTS = ftpgetresp.$(OBJEXT)
+ftpgetresp_LDADD = $(LDADD)
+ftpgetresp_DEPENDENCIES = $(LIBDIR)/libcurl.la
+ftpupload_SOURCES = ftpupload.c
+ftpupload_OBJECTS = ftpupload.$(OBJEXT)
+ftpupload_LDADD = $(LDADD)
+ftpupload_DEPENDENCIES = $(LIBDIR)/libcurl.la
+getinfo_SOURCES = getinfo.c
+getinfo_OBJECTS = getinfo.$(OBJEXT)
+getinfo_LDADD = $(LDADD)
+getinfo_DEPENDENCIES = $(LIBDIR)/libcurl.la
+getinmemory_SOURCES = getinmemory.c
+getinmemory_OBJECTS = getinmemory.$(OBJEXT)
+getinmemory_LDADD = $(LDADD)
+getinmemory_DEPENDENCIES = $(LIBDIR)/libcurl.la
+http_post_SOURCES = http-post.c
+http_post_OBJECTS = http-post.$(OBJEXT)
+http_post_LDADD = $(LDADD)
+http_post_DEPENDENCIES = $(LIBDIR)/libcurl.la
+httpcustomheader_SOURCES = httpcustomheader.c
+httpcustomheader_OBJECTS = httpcustomheader.$(OBJEXT)
+httpcustomheader_LDADD = $(LDADD)
+httpcustomheader_DEPENDENCIES = $(LIBDIR)/libcurl.la
+httpput_SOURCES = httpput.c
+httpput_OBJECTS = httpput.$(OBJEXT)
+httpput_LDADD = $(LDADD)
+httpput_DEPENDENCIES = $(LIBDIR)/libcurl.la
+https_SOURCES = https.c
+https_OBJECTS = https.$(OBJEXT)
+https_LDADD = $(LDADD)
+https_DEPENDENCIES = $(LIBDIR)/libcurl.la
+multi_app_SOURCES = multi-app.c
+multi_app_OBJECTS = multi-app.$(OBJEXT)
+multi_app_LDADD = $(LDADD)
+multi_app_DEPENDENCIES = $(LIBDIR)/libcurl.la
+multi_debugcallback_SOURCES = multi-debugcallback.c
+multi_debugcallback_OBJECTS = multi-debugcallback.$(OBJEXT)
+multi_debugcallback_LDADD = $(LDADD)
+multi_debugcallback_DEPENDENCIES = $(LIBDIR)/libcurl.la
+multi_double_SOURCES = multi-double.c
+multi_double_OBJECTS = multi-double.$(OBJEXT)
+multi_double_LDADD = $(LDADD)
+multi_double_DEPENDENCIES = $(LIBDIR)/libcurl.la
+multi_post_SOURCES = multi-post.c
+multi_post_OBJECTS = multi-post.$(OBJEXT)
+multi_post_LDADD = $(LDADD)
+multi_post_DEPENDENCIES = $(LIBDIR)/libcurl.la
+multi_single_SOURCES = multi-single.c
+multi_single_OBJECTS = multi-single.$(OBJEXT)
+multi_single_LDADD = $(LDADD)
+multi_single_DEPENDENCIES = $(LIBDIR)/libcurl.la
+persistant_SOURCES = persistant.c
+persistant_OBJECTS = persistant.$(OBJEXT)
+persistant_LDADD = $(LDADD)
+persistant_DEPENDENCIES = $(LIBDIR)/libcurl.la
+post_callback_SOURCES = post-callback.c
+post_callback_OBJECTS = post-callback.$(OBJEXT)
+post_callback_LDADD = $(LDADD)
+post_callback_DEPENDENCIES = $(LIBDIR)/libcurl.la
+postit2_SOURCES = postit2.c
+postit2_OBJECTS = postit2.$(OBJEXT)
+postit2_LDADD = $(LDADD)
+postit2_DEPENDENCIES = $(LIBDIR)/libcurl.la
+sendrecv_SOURCES = sendrecv.c
+sendrecv_OBJECTS = sendrecv.$(OBJEXT)
+sendrecv_LDADD = $(LDADD)
+sendrecv_DEPENDENCIES = $(LIBDIR)/libcurl.la
+sepheaders_SOURCES = sepheaders.c
+sepheaders_OBJECTS = sepheaders.$(OBJEXT)
+sepheaders_LDADD = $(LDADD)
+sepheaders_DEPENDENCIES = $(LIBDIR)/libcurl.la
+simple_SOURCES = simple.c
+simple_OBJECTS = simple.$(OBJEXT)
+simple_LDADD = $(LDADD)
+simple_DEPENDENCIES = $(LIBDIR)/libcurl.la
+simplepost_SOURCES = simplepost.c
+simplepost_OBJECTS = simplepost.$(OBJEXT)
+simplepost_LDADD = $(LDADD)
+simplepost_DEPENDENCIES = $(LIBDIR)/libcurl.la
+simplessl_SOURCES = simplessl.c
+simplessl_OBJECTS = simplessl.$(OBJEXT)
+simplessl_LDADD = $(LDADD)
+simplessl_DEPENDENCIES = $(LIBDIR)/libcurl.la
+DEFAULT_INCLUDES =
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = 10-at-a-time.c anyauthput.c certinfo.c chkspeed.c \
+ cookie_interface.c debug.c fileupload.c fopen.c ftp-wildcard.c \
+ ftpget.c ftpgetinfo.c ftpgetresp.c ftpupload.c getinfo.c \
+ getinmemory.c http-post.c httpcustomheader.c httpput.c https.c \
+ multi-app.c multi-debugcallback.c multi-double.c multi-post.c \
+ multi-single.c persistant.c post-callback.c postit2.c \
+ sendrecv.c sepheaders.c simple.c simplepost.c simplessl.c
+DIST_SOURCES = 10-at-a-time.c anyauthput.c certinfo.c chkspeed.c \
+ cookie_interface.c debug.c fileupload.c fopen.c ftp-wildcard.c \
+ ftpget.c ftpgetinfo.c ftpgetresp.c ftpupload.c getinfo.c \
+ getinmemory.c http-post.c httpcustomheader.c httpput.c https.c \
+ multi-app.c multi-debugcallback.c multi-double.c multi-post.c \
+ multi-single.c persistant.c post-callback.c postit2.c \
+ sendrecv.c sepheaders.c simple.c simplepost.c simplessl.c
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_LIBHOSTNAME_FALSE = @BUILD_LIBHOSTNAME_FALSE@
+BUILD_LIBHOSTNAME_TRUE = @BUILD_LIBHOSTNAME_TRUE@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_OPTIONS = @CONFIGURE_OPTIONS@
+CPP = @CPP@
+CPPFLAGS = -DCURL_NO_OLDIES $(STATICCPPFLAGS)
+CROSSCOMPILING_FALSE = @CROSSCOMPILING_FALSE@
+CROSSCOMPILING_TRUE = @CROSSCOMPILING_TRUE@
+CURLDEBUG_FALSE = @CURLDEBUG_FALSE@
+CURLDEBUG_TRUE = @CURLDEBUG_TRUE@
+CURL_CA_BUNDLE = @CURL_CA_BUNDLE@
+CURL_CFLAG_EXTRAS = @CURL_CFLAG_EXTRAS@
+CURL_DISABLE_DICT = @CURL_DISABLE_DICT@
+CURL_DISABLE_FILE = @CURL_DISABLE_FILE@
+CURL_DISABLE_FTP = @CURL_DISABLE_FTP@
+CURL_DISABLE_GOPHER = @CURL_DISABLE_GOPHER@
+CURL_DISABLE_HTTP = @CURL_DISABLE_HTTP@
+CURL_DISABLE_IMAP = @CURL_DISABLE_IMAP@
+CURL_DISABLE_LDAP = @CURL_DISABLE_LDAP@
+CURL_DISABLE_LDAPS = @CURL_DISABLE_LDAPS@
+CURL_DISABLE_POP3 = @CURL_DISABLE_POP3@
+CURL_DISABLE_PROXY = @CURL_DISABLE_PROXY@
+CURL_DISABLE_RTSP = @CURL_DISABLE_RTSP@
+CURL_DISABLE_SMTP = @CURL_DISABLE_SMTP@
+CURL_DISABLE_TELNET = @CURL_DISABLE_TELNET@
+CURL_DISABLE_TFTP = @CURL_DISABLE_TFTP@
+CURL_LIBS = @CURL_LIBS@
+CURL_NETWORK_LIBS = @CURL_NETWORK_LIBS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_SHARED = @ENABLE_SHARED@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_LDAP_SSL = @HAVE_LDAP_SSL@
+HAVE_LIBZ = @HAVE_LIBZ@
+HAVE_LIBZ_FALSE = @HAVE_LIBZ_FALSE@
+HAVE_LIBZ_TRUE = @HAVE_LIBZ_TRUE@
+HAVE_PK11_CREATEGENERICOBJECT = @HAVE_PK11_CREATEGENERICOBJECT@
+IDN_ENABLED = @IDN_ENABLED@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+IPV6_ENABLED = @IPV6_ENABLED@
+KRB4_ENABLED = @KRB4_ENABLED@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBCURL_LIBS = @LIBCURL_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+MANOPT = @MANOPT@
+MIMPURE_FALSE = @MIMPURE_FALSE@
+MIMPURE_TRUE = @MIMPURE_TRUE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NO_UNDEFINED_FALSE = @NO_UNDEFINED_FALSE@
+NO_UNDEFINED_TRUE = @NO_UNDEFINED_TRUE@
+NROFF = @NROFF@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH = @PATH@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+PKGADD_NAME = @PKGADD_NAME@
+PKGADD_PKG = @PKGADD_PKG@
+PKGADD_VENDOR = @PKGADD_VENDOR@
+PKGCONFIG = @PKGCONFIG@
+RANDOM_FILE = @RANDOM_FILE@
+RANLIB = @RANLIB@
+REQUIRE_LIB_DEPS = @REQUIRE_LIB_DEPS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SONAME_BUMP_FALSE = @SONAME_BUMP_FALSE@
+SONAME_BUMP_TRUE = @SONAME_BUMP_TRUE@
+SSL_ENABLED = @SSL_ENABLED@
+STATICLIB_FALSE = @STATICLIB_FALSE@
+STATICLIB_TRUE = @STATICLIB_TRUE@
+STRIP = @STRIP@
+SUPPORT_FEATURES = @SUPPORT_FEATURES@
+SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
+TEST_SERVER_LIBS = @TEST_SERVER_LIBS@
+USE_ARES = @USE_ARES@
+USE_EMBEDDED_ARES_FALSE = @USE_EMBEDDED_ARES_FALSE@
+USE_EMBEDDED_ARES_TRUE = @USE_EMBEDDED_ARES_TRUE@
+USE_GNUTLS = @USE_GNUTLS@
+USE_LIBRTMP = @USE_LIBRTMP@
+USE_LIBSSH2 = @USE_LIBSSH2@
+USE_MANUAL_FALSE = @USE_MANUAL_FALSE@
+USE_MANUAL_TRUE = @USE_MANUAL_TRUE@
+USE_NSS = @USE_NSS@
+USE_OPENLDAP = @USE_OPENLDAP@
+USE_POLARSSL = @USE_POLARSSL@
+USE_SSLEAY = @USE_SSLEAY@
+USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
+VERSION = @VERSION@
+VERSIONNUM = @VERSIONNUM@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+libext = @libext@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+AUTOMAKE_OPTIONS = foreign nostdinc
+EXTRA_DIST = README Makefile.example Makefile.inc Makefile.m32 \
+ makefile.dj $(COMPLICATED_EXAMPLES)
+
+
+# Specify our include paths here, and do it relative to $(top_srcdir) and
+# $(top_builddir), to ensure that these paths which belong to the library
+# being currently built and tested are searched before the library which
+# might possibly already be installed in the system.
+#
+# $(top_builddir)/include/curl for generated curlbuild.h included from curl.h
+# $(top_builddir)/include for generated curlbuild.h included from lib/setup.h
+# $(top_srcdir)/include is for libcurl's external include files
+INCLUDES = -I$(top_builddir)/include/curl \
+ -I$(top_builddir)/include \
+ -I$(top_srcdir)/include
+
+LIBDIR = $(top_builddir)/lib
+
+# we need this define when building with a static lib on Windows
+@STATICLIB_TRUE@STATICCPPFLAGS = -DCURL_STATICLIB
+
+# Dependencies
+LDADD = $(LIBDIR)/libcurl.la
+
+# These examples require external dependencies that may not be commonly
+# available on POSIX systems, so don't bother attempting to compile them here.
+COMPLICATED_EXAMPLES = curlgtk.c curlx.c htmltitle.cc cacertinmem.c \
+ ftpuploadresume.c ghiper.c hiperfifo.c htmltidy.c multithread.c \
+ opensslthreadlock.c sampleconv.c synctime.c threaded-ssl.c evhiperfifo.c
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/Makefile.inc $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign docs/examples/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --foreign docs/examples/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+clean-checkPROGRAMS:
+ @list='$(check_PROGRAMS)'; for p in $$list; do \
+ f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f $$p $$f"; \
+ rm -f $$p $$f ; \
+ done
+10-at-a-time$(EXEEXT): $(10_at_a_time_OBJECTS) $(10_at_a_time_DEPENDENCIES)
+ @rm -f 10-at-a-time$(EXEEXT)
+ $(LINK) $(10_at_a_time_LDFLAGS) $(10_at_a_time_OBJECTS) $(10_at_a_time_LDADD) $(LIBS)
+anyauthput$(EXEEXT): $(anyauthput_OBJECTS) $(anyauthput_DEPENDENCIES)
+ @rm -f anyauthput$(EXEEXT)
+ $(LINK) $(anyauthput_LDFLAGS) $(anyauthput_OBJECTS) $(anyauthput_LDADD) $(LIBS)
+certinfo$(EXEEXT): $(certinfo_OBJECTS) $(certinfo_DEPENDENCIES)
+ @rm -f certinfo$(EXEEXT)
+ $(LINK) $(certinfo_LDFLAGS) $(certinfo_OBJECTS) $(certinfo_LDADD) $(LIBS)
+chkspeed$(EXEEXT): $(chkspeed_OBJECTS) $(chkspeed_DEPENDENCIES)
+ @rm -f chkspeed$(EXEEXT)
+ $(LINK) $(chkspeed_LDFLAGS) $(chkspeed_OBJECTS) $(chkspeed_LDADD) $(LIBS)
+cookie_interface$(EXEEXT): $(cookie_interface_OBJECTS) $(cookie_interface_DEPENDENCIES)
+ @rm -f cookie_interface$(EXEEXT)
+ $(LINK) $(cookie_interface_LDFLAGS) $(cookie_interface_OBJECTS) $(cookie_interface_LDADD) $(LIBS)
+debug$(EXEEXT): $(debug_OBJECTS) $(debug_DEPENDENCIES)
+ @rm -f debug$(EXEEXT)
+ $(LINK) $(debug_LDFLAGS) $(debug_OBJECTS) $(debug_LDADD) $(LIBS)
+fileupload$(EXEEXT): $(fileupload_OBJECTS) $(fileupload_DEPENDENCIES)
+ @rm -f fileupload$(EXEEXT)
+ $(LINK) $(fileupload_LDFLAGS) $(fileupload_OBJECTS) $(fileupload_LDADD) $(LIBS)
+fopen$(EXEEXT): $(fopen_OBJECTS) $(fopen_DEPENDENCIES)
+ @rm -f fopen$(EXEEXT)
+ $(LINK) $(fopen_LDFLAGS) $(fopen_OBJECTS) $(fopen_LDADD) $(LIBS)
+ftp-wildcard$(EXEEXT): $(ftp_wildcard_OBJECTS) $(ftp_wildcard_DEPENDENCIES)
+ @rm -f ftp-wildcard$(EXEEXT)
+ $(LINK) $(ftp_wildcard_LDFLAGS) $(ftp_wildcard_OBJECTS) $(ftp_wildcard_LDADD) $(LIBS)
+ftpget$(EXEEXT): $(ftpget_OBJECTS) $(ftpget_DEPENDENCIES)
+ @rm -f ftpget$(EXEEXT)
+ $(LINK) $(ftpget_LDFLAGS) $(ftpget_OBJECTS) $(ftpget_LDADD) $(LIBS)
+ftpgetinfo$(EXEEXT): $(ftpgetinfo_OBJECTS) $(ftpgetinfo_DEPENDENCIES)
+ @rm -f ftpgetinfo$(EXEEXT)
+ $(LINK) $(ftpgetinfo_LDFLAGS) $(ftpgetinfo_OBJECTS) $(ftpgetinfo_LDADD) $(LIBS)
+ftpgetresp$(EXEEXT): $(ftpgetresp_OBJECTS) $(ftpgetresp_DEPENDENCIES)
+ @rm -f ftpgetresp$(EXEEXT)
+ $(LINK) $(ftpgetresp_LDFLAGS) $(ftpgetresp_OBJECTS) $(ftpgetresp_LDADD) $(LIBS)
+ftpupload$(EXEEXT): $(ftpupload_OBJECTS) $(ftpupload_DEPENDENCIES)
+ @rm -f ftpupload$(EXEEXT)
+ $(LINK) $(ftpupload_LDFLAGS) $(ftpupload_OBJECTS) $(ftpupload_LDADD) $(LIBS)
+getinfo$(EXEEXT): $(getinfo_OBJECTS) $(getinfo_DEPENDENCIES)
+ @rm -f getinfo$(EXEEXT)
+ $(LINK) $(getinfo_LDFLAGS) $(getinfo_OBJECTS) $(getinfo_LDADD) $(LIBS)
+getinmemory$(EXEEXT): $(getinmemory_OBJECTS) $(getinmemory_DEPENDENCIES)
+ @rm -f getinmemory$(EXEEXT)
+ $(LINK) $(getinmemory_LDFLAGS) $(getinmemory_OBJECTS) $(getinmemory_LDADD) $(LIBS)
+http-post$(EXEEXT): $(http_post_OBJECTS) $(http_post_DEPENDENCIES)
+ @rm -f http-post$(EXEEXT)
+ $(LINK) $(http_post_LDFLAGS) $(http_post_OBJECTS) $(http_post_LDADD) $(LIBS)
+httpcustomheader$(EXEEXT): $(httpcustomheader_OBJECTS) $(httpcustomheader_DEPENDENCIES)
+ @rm -f httpcustomheader$(EXEEXT)
+ $(LINK) $(httpcustomheader_LDFLAGS) $(httpcustomheader_OBJECTS) $(httpcustomheader_LDADD) $(LIBS)
+httpput$(EXEEXT): $(httpput_OBJECTS) $(httpput_DEPENDENCIES)
+ @rm -f httpput$(EXEEXT)
+ $(LINK) $(httpput_LDFLAGS) $(httpput_OBJECTS) $(httpput_LDADD) $(LIBS)
+https$(EXEEXT): $(https_OBJECTS) $(https_DEPENDENCIES)
+ @rm -f https$(EXEEXT)
+ $(LINK) $(https_LDFLAGS) $(https_OBJECTS) $(https_LDADD) $(LIBS)
+multi-app$(EXEEXT): $(multi_app_OBJECTS) $(multi_app_DEPENDENCIES)
+ @rm -f multi-app$(EXEEXT)
+ $(LINK) $(multi_app_LDFLAGS) $(multi_app_OBJECTS) $(multi_app_LDADD) $(LIBS)
+multi-debugcallback$(EXEEXT): $(multi_debugcallback_OBJECTS) $(multi_debugcallback_DEPENDENCIES)
+ @rm -f multi-debugcallback$(EXEEXT)
+ $(LINK) $(multi_debugcallback_LDFLAGS) $(multi_debugcallback_OBJECTS) $(multi_debugcallback_LDADD) $(LIBS)
+multi-double$(EXEEXT): $(multi_double_OBJECTS) $(multi_double_DEPENDENCIES)
+ @rm -f multi-double$(EXEEXT)
+ $(LINK) $(multi_double_LDFLAGS) $(multi_double_OBJECTS) $(multi_double_LDADD) $(LIBS)
+multi-post$(EXEEXT): $(multi_post_OBJECTS) $(multi_post_DEPENDENCIES)
+ @rm -f multi-post$(EXEEXT)
+ $(LINK) $(multi_post_LDFLAGS) $(multi_post_OBJECTS) $(multi_post_LDADD) $(LIBS)
+multi-single$(EXEEXT): $(multi_single_OBJECTS) $(multi_single_DEPENDENCIES)
+ @rm -f multi-single$(EXEEXT)
+ $(LINK) $(multi_single_LDFLAGS) $(multi_single_OBJECTS) $(multi_single_LDADD) $(LIBS)
+persistant$(EXEEXT): $(persistant_OBJECTS) $(persistant_DEPENDENCIES)
+ @rm -f persistant$(EXEEXT)
+ $(LINK) $(persistant_LDFLAGS) $(persistant_OBJECTS) $(persistant_LDADD) $(LIBS)
+post-callback$(EXEEXT): $(post_callback_OBJECTS) $(post_callback_DEPENDENCIES)
+ @rm -f post-callback$(EXEEXT)
+ $(LINK) $(post_callback_LDFLAGS) $(post_callback_OBJECTS) $(post_callback_LDADD) $(LIBS)
+postit2$(EXEEXT): $(postit2_OBJECTS) $(postit2_DEPENDENCIES)
+ @rm -f postit2$(EXEEXT)
+ $(LINK) $(postit2_LDFLAGS) $(postit2_OBJECTS) $(postit2_LDADD) $(LIBS)
+sendrecv$(EXEEXT): $(sendrecv_OBJECTS) $(sendrecv_DEPENDENCIES)
+ @rm -f sendrecv$(EXEEXT)
+ $(LINK) $(sendrecv_LDFLAGS) $(sendrecv_OBJECTS) $(sendrecv_LDADD) $(LIBS)
+sepheaders$(EXEEXT): $(sepheaders_OBJECTS) $(sepheaders_DEPENDENCIES)
+ @rm -f sepheaders$(EXEEXT)
+ $(LINK) $(sepheaders_LDFLAGS) $(sepheaders_OBJECTS) $(sepheaders_LDADD) $(LIBS)
+simple$(EXEEXT): $(simple_OBJECTS) $(simple_DEPENDENCIES)
+ @rm -f simple$(EXEEXT)
+ $(LINK) $(simple_LDFLAGS) $(simple_OBJECTS) $(simple_LDADD) $(LIBS)
+simplepost$(EXEEXT): $(simplepost_OBJECTS) $(simplepost_DEPENDENCIES)
+ @rm -f simplepost$(EXEEXT)
+ $(LINK) $(simplepost_LDFLAGS) $(simplepost_OBJECTS) $(simplepost_LDADD) $(LIBS)
+simplessl$(EXEEXT): $(simplessl_OBJECTS) $(simplessl_DEPENDENCIES)
+ @rm -f simplessl$(EXEEXT)
+ $(LINK) $(simplessl_LDFLAGS) $(simplessl_OBJECTS) $(simplessl_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/10-at-a-time.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/anyauthput.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/certinfo.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chkspeed.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cookie_interface.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/debug.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fileupload.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fopen.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ftp-wildcard.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ftpget.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ftpgetinfo.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ftpgetresp.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ftpupload.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getinfo.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getinmemory.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/http-post.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/httpcustomheader.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/httpput.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/https.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/multi-app.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/multi-debugcallback.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/multi-double.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/multi-post.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/multi-single.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/persistant.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/post-callback.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/postit2.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sendrecv.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sepheaders.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/simple.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/simplepost.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/simplessl.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+ -rm -f libtool
+uninstall-info-am:
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ list='$(DISTFILES)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkdir_p) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+ $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-libtool distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean \
+ clean-checkPROGRAMS clean-generic clean-libtool ctags \
+ distclean distclean-compile distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-exec install-exec-am install-info \
+ install-info-am install-man install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags uninstall uninstall-am uninstall-info-am
+
+
+# Makefile.inc provides the check_PROGRAMS and COMPLICATED_EXAMPLES defines
+# 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/docs/examples/Makefile.inc b/docs/examples/Makefile.inc
new file mode 100644
index 0000000..78d3126
--- /dev/null
+++ b/docs/examples/Makefile.inc
@@ -0,0 +1,12 @@
+# These are all libcurl example programs to be test compiled
+check_PROGRAMS = 10-at-a-time anyauthput cookie_interface debug fileupload \
+ fopen ftpget ftpgetresp ftpupload getinfo getinmemory http-post httpput \
+ https multi-app multi-debugcallback multi-double multi-post multi-single \
+ persistant post-callback postit2 sepheaders simple simplepost simplessl \
+ sendrecv httpcustomheader certinfo chkspeed ftpgetinfo ftp-wildcard
+
+# These examples require external dependencies that may not be commonly
+# available on POSIX systems, so don't bother attempting to compile them here.
+COMPLICATED_EXAMPLES = curlgtk.c curlx.c htmltitle.cc cacertinmem.c \
+ ftpuploadresume.c ghiper.c hiperfifo.c htmltidy.c multithread.c \
+ opensslthreadlock.c sampleconv.c synctime.c threaded-ssl.c evhiperfifo.c
diff --git a/docs/examples/Makefile.m32 b/docs/examples/Makefile.m32
new file mode 100644
index 0000000..15750d0
--- /dev/null
+++ b/docs/examples/Makefile.m32
@@ -0,0 +1,133 @@
+#########################################################################
+#
+## Makefile for building curl examples with MingW32
+## and optionally OpenSSL (0.9.8), libssh2 (0.18), zlib (1.2.3)
+##
+## Usage:
+## mingw32-make -f Makefile.m32 [SSL=1] [SSH2=1] [ZLIB=1] [SSPI=1] [IPV6=1] [DYN=1]
+##
+## Hint: you can also set environment vars to control the build, f.e.:
+## set ZLIB_PATH=c:/zlib-1.2.3
+## set ZLIB=1
+##
+#########################################################################
+
+# Edit the path below to point to the base of your Zlib sources.
+ifndef ZLIB_PATH
+ZLIB_PATH = ../../zlib-1.2.3
+endif
+# Edit the path below to point to the base of your OpenSSL package.
+ifndef OPENSSL_PATH
+OPENSSL_PATH = ../../openssl-0.9.8k
+endif
+# Edit the path below to point to the base of your LibSSH2 package.
+ifndef LIBSSH2_PATH
+LIBSSH2_PATH = ../../libssh2-1.2
+endif
+# Edit the path below to point to the base of your Novell LDAP NDK.
+ifndef LDAP_SDK
+LDAP_SDK = c:/novell/ndk/cldapsdk/win32
+endif
+
+PROOT = ../..
+ARES_LIB = $(PROOT)/ares
+
+SSL = 1
+ZLIB = 1
+
+CC = gcc
+CFLAGS = -g -O2 -Wall
+# comment LDFLAGS below to keep debug info
+LDFLAGS = -s
+RC = windres
+RCFLAGS = --include-dir=$(PROOT)/include -O COFF -i
+RM = del /q /f > NUL 2>&1
+CP = copy
+
+########################################################
+## Nothing more to do below this line!
+
+INCLUDES = -I. -I$(PROOT) -I$(PROOT)/include -I$(PROOT)/lib
+LINK = $(CC) $(LDFLAGS) -o $@
+
+ifdef DYN
+ curl_DEPENDENCIES = $(PROOT)/lib/libcurldll.a $(PROOT)/lib/libcurl.dll
+ curl_LDADD = -L$(PROOT)/lib -lcurldll
+else
+ curl_DEPENDENCIES = $(PROOT)/lib/libcurl.a
+ curl_LDADD = -L$(PROOT)/lib -lcurl
+ CFLAGS += -DCURL_STATICLIB
+endif
+ifdef ARES
+ ifndef DYN
+ curl_DEPENDENCIES += $(ARES_LIB)/libcares.a
+ endif
+ CFLAGS += -DUSE_ARES
+ curl_LDADD += -L$(ARES_LIB) -lcares
+endif
+ifdef SSH2
+ CFLAGS += -DUSE_LIBSSH2 -DHAVE_LIBSSH2_H
+ curl_LDADD += -L$(LIBSSH2_PATH)/win32 -lssh2
+endif
+ifdef SSL
+ INCLUDES += -I"$(OPENSSL_PATH)/outinc"
+ CFLAGS += -DUSE_SSLEAY -DHAVE_OPENSSL_ENGINE_H
+ ifdef DYN
+ curl_LDADD += -L$(OPENSSL_PATH)/out -leay32 -lssl32
+ else
+ curl_LDADD += -L$(OPENSSL_PATH)/out -lssl -lcrypto -lgdi32
+ endif
+endif
+ifdef ZLIB
+ INCLUDES += -I"$(ZLIB_PATH)"
+ CFLAGS += -DHAVE_LIBZ -DHAVE_ZLIB_H
+ curl_LDADD += -L$(ZLIB_PATH) -lz
+endif
+ifdef SSPI
+ CFLAGS += -DUSE_WINDOWS_SSPI
+endif
+ifdef IPV6
+ CFLAGS += -DENABLE_IPV6
+endif
+ifdef LDAPS
+ CFLAGS += -DHAVE_LDAP_SSL
+endif
+ifdef USE_LDAP_NOVELL
+ CFLAGS += -DCURL_HAS_NOVELL_LDAPSDK
+ curl_LDADD += -L"$(LDAP_SDK)/lib/mscvc" -lldapsdk -lldapssl -lldapx
+endif
+ifdef USE_LDAP_OPENLDAP
+ CFLAGS += -DCURL_HAS_OPENLDAP_LDAPSDK
+ curl_LDADD += -L"$(LDAP_SDK)/lib" -lldap -llber
+endif
+ifndef USE_LDAP_NOVELL
+ifndef USE_LDAP_OPENLDAP
+curl_LDADD += -lwldap32
+endif
+endif
+curl_LDADD += -lws2_32
+COMPILE = $(CC) $(INCLUDES) $(CFLAGS)
+
+# Makefile.inc provides the check_PROGRAMS and COMPLICATED_EXAMPLES defines
+include Makefile.inc
+
+example_PROGRAMS := $(patsubst %,%.exe,$(strip $(check_PROGRAMS)))
+
+.SUFFIXES: .rc .res .o .exe
+
+
+all: $(example_PROGRAMS)
+
+.o.exe: $(curl_DEPENDENCIES)
+ $(LINK) $< $(curl_LDADD)
+
+.c.o:
+ $(COMPILE) -c $<
+
+.rc.res:
+ $(RC) $(RCFLAGS) $< -o $@
+
+clean:
+ $(RM) $(example_PROGRAMS)
+
+
diff --git a/docs/examples/README b/docs/examples/README
new file mode 100644
index 0000000..d6c4785
--- /dev/null
+++ b/docs/examples/README
@@ -0,0 +1,76 @@
+ _ _ ____ _
+ ___| | | | _ \| |
+ / __| | | | |_) | |
+ | (__| |_| | _ <| |___
+ \___|\___/|_| \_\_____|
+
+This directory is for libcurl programming examples. They are meant to show
+some simple steps on how you can build your own application to take full
+advantage of libcurl.
+
+If you end up with other small but still useful example sources, please mail
+them for submission in future packages and on the web site.
+
+BUILDING
+
+The Makefile.example is an example makefile that could be used to build these
+examples. Just edit the file according to your system and requirements first.
+
+Most examples should build fine using a command line like this:
+
+ $ `curl-config --cc --cflags --libs` -o example example.c
+
+Some compilers don't like having the arguments in this order but instead
+want you do reorganize them like:
+
+ $ `curl-config --cc` -o example example.c `curl-config --cflags --libs`
+
+*PLEASE* do not use the curl.haxx.se site as a test target for your libcurl
+applications/experiments. Even if some of the examples use that site as a URL
+at some places, it doesn't mean that the URLs work or that we expect you to
+actually torture our web site with your tests! Thanks.
+
+EXAMPLES
+
+anyauthput.c - HTTP PUT using "any" authentication method
+cacertinmem.c - Use a built-in PEM certificate to retrieve a https page
+cookie_interface.c - shows usage of simple cookie interface
+curlgtk.c - download using a GTK progress bar
+curlx.c - getting file info from the remote cert data
+debug.c - showing how to use the debug callback
+fileupload.c - uploading to a file:// URL
+fopen.c - fopen() layer that supports opening URLs and files
+ftpget.c - simple getting a file from FTP
+ftpgetresp.c - get the response strings from the FTP server
+ftpupload.c - upload a file to an FTP server
+ftpuploadresume.c - resume an upload to an FTP server
+getinfo.c - get the Content-Type from the recent transfer
+getinmemory.c - download a file to memory only
+ghiper.c - curl_multi_socket() using code with glib-2
+hiperfifo.c - downloads all URLs written to the fifo, using
+ curl_multi_socket() and libevent
+htmltidy.c - download a document and use libtidy to parse the HTML
+htmltitle.cc - download a HTML file and extract the <title> tag from a HTML
+ page using libxml
+http-post.c - HTTP POST
+httpput.c - HTTP PUT a local file
+https.c - simple HTTPS transfer
+multi-app.c - a multi-interface app
+multi-debugcallback.c - a multi-interface app using the debug callback
+multi-double.c - a multi-interface app doing two simultaneous transfers
+multi-post.c - a multi-interface app doing a multipart formpost
+multi-single.c - a multi-interface app getting a single file
+multithread.c - an example using multi-treading transferring multiple files
+opensslthreadlock.c - show how to do locking when using OpenSSL multi-threaded
+persistant.c - request two URLs with a persistent connection
+post-callback.c - send a HTTP POST using a callback
+postit2.c - send a HTTP multipart formpost
+sampleconv.c - showing how a program on a non-ASCII platform would invoke
+ callbacks to do its own codeset conversions instead of using
+ the built-in iconv functions in libcurl
+sepheaders.c - download headers to a separate file
+simple.c - the most simple download a URL source
+simplepost.c - HTTP POST
+simplessl.c - HTTPS example with certificates many options set
+synctime.c - Sync local time by extracting date from remote HTTP servers
+10-at-a-time.c - Download many files simultaneously, 10 at a time.
diff --git a/docs/examples/anyauthput.c b/docs/examples/anyauthput.c
new file mode 100644
index 0000000..cec9fed
--- /dev/null
+++ b/docs/examples/anyauthput.c
@@ -0,0 +1,158 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include <stdio.h>
+#include <fcntl.h>
+#ifdef WIN32
+# include <io.h>
+#else
+# ifdef __VMS
+ typedef int intptr_t;
+# else
+# include <stdint.h>
+# endif
+# include <unistd.h>
+#endif
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#ifdef _MSC_VER
+# ifdef _WIN64
+ typedef __int64 intptr_t;
+# else
+ typedef int intptr_t;
+# endif
+#endif
+
+#include <curl/curl.h>
+
+#if LIBCURL_VERSION_NUM < 0x070c03
+#error "upgrade your libcurl to no less than 7.12.3"
+#endif
+
+#ifndef TRUE
+#define TRUE 1
+#endif
+
+/*
+ * This example shows a HTTP PUT operation with authentiction using "any"
+ * type. It PUTs a file given as a command line argument to the URL also given
+ * on the command line.
+ *
+ * Since libcurl 7.12.3, using "any" auth and POST/PUT requires a set ioctl
+ * function.
+ *
+ * This example also uses its own read callback.
+ */
+
+/* ioctl callback function */
+static curlioerr my_ioctl(CURL *handle, curliocmd cmd, void *userp)
+{
+ intptr_t fd = (intptr_t)userp;
+
+ (void)handle; /* not used in here */
+
+ switch(cmd) {
+ case CURLIOCMD_RESTARTREAD:
+ /* mr libcurl kindly asks as to rewind the read data stream to start */
+ if(-1 == lseek(fd, 0, SEEK_SET))
+ /* couldn't rewind */
+ return CURLIOE_FAILRESTART;
+
+ break;
+
+ default: /* ignore unknown commands */
+ return CURLIOE_UNKNOWNCMD;
+ }
+ return CURLIOE_OK; /* success! */
+}
+
+/* read callback function, fread() look alike */
+static size_t read_callback(void *ptr, size_t size, size_t nmemb, void *stream)
+{
+ size_t retcode;
+
+ intptr_t fd = (intptr_t)stream;
+
+ retcode = read(fd, ptr, size * nmemb);
+
+ fprintf(stderr, "*** We read %d bytes from file\n", retcode);
+
+ return retcode;
+}
+
+int main(int argc, char **argv)
+{
+ CURL *curl;
+ CURLcode res;
+ intptr_t hd ;
+ struct stat file_info;
+
+ char *file;
+ char *url;
+
+ if(argc < 3)
+ return 1;
+
+ file= argv[1];
+ url = argv[2];
+
+ /* get the file size of the local file */
+ hd = open(file, O_RDONLY) ;
+ fstat(hd, &file_info);
+
+ /* In windows, this will init the winsock stuff */
+ curl_global_init(CURL_GLOBAL_ALL);
+
+ /* get a curl handle */
+ curl = curl_easy_init();
+ if(curl) {
+ /* we want to use our own read function */
+ curl_easy_setopt(curl, CURLOPT_READFUNCTION, read_callback);
+
+ /* which file to upload */
+ curl_easy_setopt(curl, CURLOPT_READDATA, (void*)hd);
+
+ /* set the ioctl function */
+ curl_easy_setopt(curl, CURLOPT_IOCTLFUNCTION, my_ioctl);
+
+ /* pass the file descriptor to the ioctl callback as well */
+ curl_easy_setopt(curl, CURLOPT_IOCTLDATA, (void*)hd);
+
+ /* enable "uploading" (which means PUT when doing HTTP) */
+ curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L) ;
+
+ /* specify target URL, and note that this URL should also include a file
+ name, not only a directory (as you can do with GTP uploads) */
+ curl_easy_setopt(curl,CURLOPT_URL, url);
+
+ /* and give the size of the upload, this supports large file sizes
+ on systems that have general support for it */
+ curl_easy_setopt(curl, CURLOPT_INFILESIZE_LARGE,
+ (curl_off_t)file_info.st_size);
+
+ /* tell libcurl we can use "any" auth, which lets the lib pick one, but it
+ also costs one extra round-trip and possibly sending of all the PUT
+ data twice!!! */
+ curl_easy_setopt(curl, CURLOPT_HTTPAUTH, (long)CURLAUTH_ANY);
+
+ /* set user name and password for the authentication */
+ curl_easy_setopt(curl, CURLOPT_USERPWD, "user:password");
+
+ /* Now run off and do what you've been told! */
+ res = curl_easy_perform(curl);
+
+ /* always cleanup */
+ curl_easy_cleanup(curl);
+ }
+ close(hd); /* close the local file */
+
+ curl_global_cleanup();
+ return 0;
+}
diff --git a/docs/examples/cacertinmem.c b/docs/examples/cacertinmem.c
new file mode 100644
index 0000000..3870295
--- /dev/null
+++ b/docs/examples/cacertinmem.c
@@ -0,0 +1,138 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ *
+ * Example using a "in core" PEM certificate to retrieve a https page.
+ * Written by Theo Borm
+ */
+
+/* on a netBSD system with OPENSSL& LIBCURL installed from
+ * pkgsrc (using default paths) this program can be compiled using:
+ * gcc -I/usr/pkg/include -L/usr/pkg/lib -lcurl -Wl,-R/usr/pkg/lib -lssl
+ * -lcrypto -lz -o curlcacerttest curlcacerttest.c
+ * on other operating systems you may want to change paths to headers
+ * and libraries
+*/
+#include <openssl/ssl.h>
+#include <curl/curl.h>
+#include <stdio.h>
+
+size_t writefunction( void *ptr, size_t size, size_t nmemb, void *stream)
+{
+ fwrite(ptr,size,nmemb,stream);
+ return(nmemb*size);
+}
+
+static CURLcode sslctx_function(CURL * curl, void * sslctx, void * parm)
+{
+ X509_STORE * store;
+ X509 * cert=NULL;
+ BIO * bio;
+ char * mypem = /* www.cacert.org */
+ "-----BEGIN CERTIFICATE-----\n"\
+ "MIIHPTCCBSWgAwIBAgIBADANBgkqhkiG9w0BAQQFADB5MRAwDgYDVQQKEwdSb290\n"\
+ "IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAgBgNVBAMTGUNB\n"\
+ "IENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEWEnN1cHBvcnRA\n"\
+ "Y2FjZXJ0Lm9yZzAeFw0wMzAzMzAxMjI5NDlaFw0zMzAzMjkxMjI5NDlaMHkxEDAO\n"\
+ "BgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9yZzEi\n"\
+ "MCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJ\n"\
+ "ARYSc3VwcG9ydEBjYWNlcnQub3JnMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC\n"\
+ "CgKCAgEAziLA4kZ97DYoB1CW8qAzQIxL8TtmPzHlawI229Z89vGIj053NgVBlfkJ\n"\
+ "8BLPRoZzYLdufujAWGSuzbCtRRcMY/pnCujW0r8+55jE8Ez64AO7NV1sId6eINm6\n"\
+ "zWYyN3L69wj1x81YyY7nDl7qPv4coRQKFWyGhFtkZip6qUtTefWIonvuLwphK42y\n"\
+ "fk1WpRPs6tqSnqxEQR5YYGUFZvjARL3LlPdCfgv3ZWiYUQXw8wWRBB0bF4LsyFe7\n"\
+ "w2t6iPGwcswlWyCR7BYCEo8y6RcYSNDHBS4CMEK4JZwFaz+qOqfrU0j36NK2B5jc\n"\
+ "G8Y0f3/JHIJ6BVgrCFvzOKKrF11myZjXnhCLotLddJr3cQxyYN/Nb5gznZY0dj4k\n"\
+ "epKwDpUeb+agRThHqtdB7Uq3EvbXG4OKDy7YCbZZ16oE/9KTfWgu3YtLq1i6L43q\n"\
+ "laegw1SJpfvbi1EinbLDvhG+LJGGi5Z4rSDTii8aP8bQUWWHIbEZAWV/RRyH9XzQ\n"\
+ "QUxPKZgh/TMfdQwEUfoZd9vUFBzugcMd9Zi3aQaRIt0AUMyBMawSB3s42mhb5ivU\n"\
+ "fslfrejrckzzAeVLIL+aplfKkQABi6F1ITe1Yw1nPkZPcCBnzsXWWdsC4PDSy826\n"\
+ "YreQQejdIOQpvGQpQsgi3Hia/0PsmBsJUUtaWsJx8cTLc6nloQsCAwEAAaOCAc4w\n"\
+ "ggHKMB0GA1UdDgQWBBQWtTIb1Mfz4OaO873SsDrusjkY0TCBowYDVR0jBIGbMIGY\n"\
+ "gBQWtTIb1Mfz4OaO873SsDrusjkY0aF9pHsweTEQMA4GA1UEChMHUm9vdCBDQTEe\n"\
+ "MBwGA1UECxMVaHR0cDovL3d3dy5jYWNlcnQub3JnMSIwIAYDVQQDExlDQSBDZXJ0\n"\
+ "IFNpZ25pbmcgQXV0aG9yaXR5MSEwHwYJKoZIhvcNAQkBFhJzdXBwb3J0QGNhY2Vy\n"\
+ "dC5vcmeCAQAwDwYDVR0TAQH/BAUwAwEB/zAyBgNVHR8EKzApMCegJaAjhiFodHRw\n"\
+ "czovL3d3dy5jYWNlcnQub3JnL3Jldm9rZS5jcmwwMAYJYIZIAYb4QgEEBCMWIWh0\n"\
+ "dHBzOi8vd3d3LmNhY2VydC5vcmcvcmV2b2tlLmNybDA0BglghkgBhvhCAQgEJxYl\n"\
+ "aHR0cDovL3d3dy5jYWNlcnQub3JnL2luZGV4LnBocD9pZD0xMDBWBglghkgBhvhC\n"\
+ "AQ0ESRZHVG8gZ2V0IHlvdXIgb3duIGNlcnRpZmljYXRlIGZvciBGUkVFIGhlYWQg\n"\
+ "b3ZlciB0byBodHRwOi8vd3d3LmNhY2VydC5vcmcwDQYJKoZIhvcNAQEEBQADggIB\n"\
+ "ACjH7pyCArpcgBLKNQodgW+JapnM8mgPf6fhjViVPr3yBsOQWqy1YPaZQwGjiHCc\n"\
+ "nWKdpIevZ1gNMDY75q1I08t0AoZxPuIrA2jxNGJARjtT6ij0rPtmlVOKTV39O9lg\n"\
+ "18p5aTuxZZKmxoGCXJzN600BiqXfEVWqFcofN8CCmHBh22p8lqOOLlQ+TyGpkO/c\n"\
+ "gr/c6EWtTZBzCDyUZbAEmXZ/4rzCahWqlwQ3JNgelE5tDlG+1sSPypZt90Pf6DBl\n"\
+ "Jzt7u0NDY8RD97LsaMzhGY4i+5jhe1o+ATc7iwiwovOVThrLm82asduycPAtStvY\n"\
+ "sONvRUgzEv/+PDIqVPfE94rwiCPCR/5kenHA0R6mY7AHfqQv0wGP3J8rtsYIqQ+T\n"\
+ "SCX8Ev2fQtzzxD72V7DX3WnRBnc0CkvSyqD/HMaMyRa+xMwyN2hzXwj7UfdJUzYF\n"\
+ "CpUCTPJ5GhD22Dp1nPMd8aINcGeGG7MW9S/lpOt5hvk9C8JzC6WZrG/8Z7jlLwum\n"\
+ "GCSNe9FINSkYQKyTYOGWhlC0elnYjyELn8+CkcY7v2vcB5G5l1YjqrZslMZIBjzk\n"\
+ "zk6q5PYvCdxTby78dOs6Y5nCpqyJvKeyRKANihDjbPIky/qbn3BHLt4Ui9SyIAmW\n"\
+ "omTxJBzcoTWcFbLUvFUufQb1nA5V9FrWk9p2rSVzTMVD\n"\
+ "-----END CERTIFICATE-----\n";
+ /* get a BIO */
+ bio=BIO_new_mem_buf(mypem, -1);
+ /* use it to read the PEM formatted certificate from memory into an X509
+ * structure that SSL can use
+ */
+ PEM_read_bio_X509(bio, &cert, 0, NULL);
+ if (cert == NULL)
+ printf("PEM_read_bio_X509 failed...\n");
+
+ /* get a pointer to the X509 certificate store (which may be empty!) */
+ store=SSL_CTX_get_cert_store((SSL_CTX *)sslctx);
+
+ /* add our certificate to this store */
+ if (X509_STORE_add_cert(store, cert)==0)
+ printf("error adding certificate\n");
+
+ /* all set to go */
+ return CURLE_OK ;
+}
+
+int main(void)
+{
+ CURL * ch;
+ CURLcode rv;
+
+ rv=curl_global_init(CURL_GLOBAL_ALL);
+ ch=curl_easy_init();
+ rv=curl_easy_setopt(ch,CURLOPT_VERBOSE, 0L);
+ rv=curl_easy_setopt(ch,CURLOPT_HEADER, 0L);
+ rv=curl_easy_setopt(ch,CURLOPT_NOPROGRESS, 1L);
+ rv=curl_easy_setopt(ch,CURLOPT_NOSIGNAL, 1L);
+ rv=curl_easy_setopt(ch,CURLOPT_WRITEFUNCTION, *writefunction);
+ rv=curl_easy_setopt(ch,CURLOPT_WRITEDATA, stdout);
+ rv=curl_easy_setopt(ch,CURLOPT_HEADERFUNCTION, *writefunction);
+ rv=curl_easy_setopt(ch,CURLOPT_WRITEHEADER, stderr);
+ rv=curl_easy_setopt(ch,CURLOPT_SSLCERTTYPE,"PEM");
+ rv=curl_easy_setopt(ch,CURLOPT_SSL_VERIFYPEER,1L);
+ rv=curl_easy_setopt(ch, CURLOPT_URL, "https://www.example.com/");
+
+ /* first try: retrieve page without cacerts' certificate -> will fail
+ */
+ rv=curl_easy_perform(ch);
+ if (rv==CURLE_OK)
+ printf("*** transfer succeeded ***\n");
+ else
+ printf("*** transfer failed ***\n");
+
+ /* second try: retrieve page using cacerts' certificate -> will succeed
+ * load the certificate by installing a function doing the nescessary
+ * "modifications" to the SSL CONTEXT just before link init
+ */
+ rv=curl_easy_setopt(ch,CURLOPT_SSL_CTX_FUNCTION, *sslctx_function);
+ rv=curl_easy_perform(ch);
+ if (rv==CURLE_OK)
+ printf("*** transfer succeeded ***\n");
+ else
+ printf("*** transfer failed ***\n");
+
+ curl_easy_cleanup(ch);
+ curl_global_cleanup();
+ return rv;
+}
diff --git a/docs/examples/certinfo.c b/docs/examples/certinfo.c
new file mode 100644
index 0000000..ceb0ac2
--- /dev/null
+++ b/docs/examples/certinfo.c
@@ -0,0 +1,62 @@
+/*****************************************************************************
+ */
+
+#include <stdio.h>
+
+#include <curl/curl.h>
+#include <curl/types.h>
+#include <curl/easy.h>
+
+static size_t wrfu(void *ptr, size_t size, size_t nmemb, void *stream)
+{
+ return size * nmemb;
+}
+int main(int argc, char **argv)
+{
+ CURL *curl;
+ CURLcode res;
+
+ curl_global_init(CURL_GLOBAL_DEFAULT);
+
+ curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://www.example.com/");
+
+ curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, wrfu);
+
+ curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
+ curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
+
+ curl_easy_setopt(curl, CURLOPT_VERBOSE, 0L);
+ curl_easy_setopt(curl, CURLOPT_CERTINFO, 1L);
+
+ res = curl_easy_perform(curl);
+
+ if(!res) {
+ struct curl_certinfo *ci = NULL;
+
+ res = curl_easy_getinfo(curl, CURLINFO_CERTINFO, &ci);
+
+ if(!res && ci) {
+ int i;
+ printf("%d certs!\n", ci->num_of_certs);
+
+ for(i=0; i<ci->num_of_certs; i++) {
+ struct curl_slist *slist;
+
+ for(slist = ci->certinfo[i]; slist; slist = slist->next)
+ printf("%s\n", slist->data);
+
+ }
+ }
+
+ }
+
+
+ curl_easy_cleanup(curl);
+ }
+
+ curl_global_cleanup();
+
+ return 0;
+}
diff --git a/docs/examples/chkspeed.c b/docs/examples/chkspeed.c
new file mode 100644
index 0000000..d802469
--- /dev/null
+++ b/docs/examples/chkspeed.c
@@ -0,0 +1,165 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ *
+ * Example source code to show how the callback function can be used to
+ * download data into a chunk of memory instead of storing it in a file.
+ * After successful download we use curl_easy_getinfo() calls to get the
+ * amount of downloaded bytes, the time used for the whole download, and
+ * the average download speed.
+ * On Linux you can create the download test files with:
+ * dd if=/dev/urandom of=file_1M.bin bs=1M count=1
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+
+#include <curl/curl.h>
+#include <curl/types.h>
+#include <curl/easy.h>
+
+#define URL_BASE "http://speedtest.your.domain/"
+#define URL_1M URL_BASE "file_1M.bin"
+#define URL_2M URL_BASE "file_2M.bin"
+#define URL_5M URL_BASE "file_5M.bin"
+#define URL_10M URL_BASE "file_10M.bin"
+#define URL_20M URL_BASE "file_20M.bin"
+#define URL_50M URL_BASE "file_50M.bin"
+#define URL_100M URL_BASE "file_100M.bin"
+
+#define CHKSPEED_VERSION "1.0"
+
+static size_t WriteCallback(void *ptr, size_t size, size_t nmemb, void *data)
+{
+ /* we are not interested in the downloaded bytes itself,
+ so we only return the size we would have saved ... */
+ (void)ptr; /* unused */
+ (void)data; /* unused */
+ return (size_t)(size * nmemb);
+}
+
+int main(int argc, char *argv[])
+{
+ CURL *curl_handle;
+ CURLcode res;
+ int prtsep = 0, prttime = 0;
+ const char *url = URL_1M;
+ char *appname = argv[0];
+
+ if (argc > 1) {
+ /* parse input parameters */
+ for (argc--, argv++; *argv; argc--, argv++) {
+ if (strncasecmp(*argv, "-", 1) == 0) {
+ if (strncasecmp(*argv, "-H", 2) == 0) {
+ fprintf(stderr,
+ "\rUsage: %s [-m=1|2|5|10|20|50|100] [-t] [-x] [url]\n",
+ appname);
+ exit(1);
+ } else if (strncasecmp(*argv, "-V", 2) == 0) {
+ fprintf(stderr, "\r%s %s - %s\n",
+ appname, CHKSPEED_VERSION, curl_version());
+ exit(1);
+ } else if (strncasecmp(*argv, "-X", 2) == 0) {
+ prtsep = 1;
+ } else if (strncasecmp(*argv, "-T", 2) == 0) {
+ prttime = 1;
+ } else if (strncasecmp(*argv, "-M=", 3) == 0) {
+ int m = atoi(*argv + 3);
+ switch(m) {
+ case 1: url = URL_1M;
+ break;
+ case 2: url = URL_2M;
+ break;
+ case 5: url = URL_5M;
+ break;
+ case 10: url = URL_10M;
+ break;
+ case 20: url = URL_20M;
+ break;
+ case 50: url = URL_50M;
+ break;
+ case 100: url = URL_100M;
+ break;
+ default: fprintf(stderr, "\r%s: invalid parameter %s\n",
+ appname, *argv + 3);
+ exit(1);
+ }
+ } else {
+ fprintf(stderr, "\r%s: invalid or unknown option %s\n",
+ appname, *argv);
+ exit(1);
+ }
+ } else {
+ url = *argv;
+ }
+ }
+ }
+
+ /* print separator line */
+ if (prtsep) {
+ printf("-------------------------------------------------\n");
+ }
+ /* print localtime */
+ if (prttime) {
+ time_t t = time(NULL);
+ printf("Localtime: %s", ctime(&t));
+ }
+
+ /* init libcurl */
+ curl_global_init(CURL_GLOBAL_ALL);
+
+ /* init the curl session */
+ curl_handle = curl_easy_init();
+
+ /* specify URL to get */
+ curl_easy_setopt(curl_handle, CURLOPT_URL, url);
+
+ /* send all data to this function */
+ curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, WriteCallback);
+
+ /* some servers don't like requests that are made without a user-agent
+ field, so we provide one */
+ curl_easy_setopt(curl_handle, CURLOPT_USERAGENT,
+ "libcurl-speedchecker/" CHKSPEED_VERSION);
+
+ /* get it! */
+ res = curl_easy_perform(curl_handle);
+
+ if(CURLE_OK == res) {
+ double val;
+
+ /* check for bytes downloaded */
+ res = curl_easy_getinfo(curl_handle, CURLINFO_SIZE_DOWNLOAD, &val);
+ if((CURLE_OK == res) && (val>0))
+ printf("Data downloaded: %0.0f bytes.\n", val);
+
+ /* check for total download time */
+ res = curl_easy_getinfo(curl_handle, CURLINFO_TOTAL_TIME, &val);
+ if((CURLE_OK == res) && (val>0))
+ printf("Total download time: %0.3f sec.\n", val);
+
+ /* check for average download speed */
+ res = curl_easy_getinfo(curl_handle, CURLINFO_SPEED_DOWNLOAD, &val);
+ if((CURLE_OK == res) && (val>0))
+ printf("Average download speed: %0.3f kbyte/sec.\n", val / 1024);
+
+ } else {
+ fprintf(stderr, "Error while fetching '%s' : %s\n",
+ url, curl_easy_strerror(res));
+ }
+
+ /* cleanup curl stuff */
+ curl_easy_cleanup(curl_handle);
+
+ /* we're done with libcurl, so clean it up */
+ curl_global_cleanup();
+
+ return 0;
+}
diff --git a/docs/examples/cookie_interface.c b/docs/examples/cookie_interface.c
new file mode 100644
index 0000000..9f1e629
--- /dev/null
+++ b/docs/examples/cookie_interface.c
@@ -0,0 +1,111 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * This example shows usage of simple cookie interface.
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <time.h>
+
+#include <curl/curl.h>
+
+static void
+print_cookies(CURL *curl)
+{
+ CURLcode res;
+ struct curl_slist *cookies;
+ struct curl_slist *nc;
+ int i;
+
+ printf("Cookies, curl knows:\n");
+ res = curl_easy_getinfo(curl, CURLINFO_COOKIELIST, &cookies);
+ if (res != CURLE_OK) {
+ fprintf(stderr, "Curl curl_easy_getinfo failed: %s\n", curl_easy_strerror(res));
+ exit(1);
+ }
+ nc = cookies, i = 1;
+ while (nc) {
+ printf("[%d]: %s\n", i, nc->data);
+ nc = nc->next;
+ i++;
+ }
+ if (i == 1) {
+ printf("(none)\n");
+ }
+ curl_slist_free_all(cookies);
+}
+
+int
+main(void)
+{
+ CURL *curl;
+ CURLcode res;
+
+ curl_global_init(CURL_GLOBAL_ALL);
+ curl = curl_easy_init();
+ if (curl) {
+ char nline[256];
+
+ curl_easy_setopt(curl, CURLOPT_URL, "http://www.example.com/");
+ curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
+ curl_easy_setopt(curl, CURLOPT_COOKIEFILE, ""); /* just to start the cookie engine */
+ res = curl_easy_perform(curl);
+ if (res != CURLE_OK) {
+ fprintf(stderr, "Curl perform failed: %s\n", curl_easy_strerror(res));
+ return 1;
+ }
+
+ print_cookies(curl);
+
+ printf("Erasing curl's knowledge of cookies!\n");
+ curl_easy_setopt(curl, CURLOPT_COOKIELIST, "ALL");
+
+ print_cookies(curl);
+
+ printf("-----------------------------------------------\n"
+ "Setting a cookie \"PREF\" via cookie interface:\n");
+#ifdef WIN32
+#define snprintf _snprintf
+#endif
+ /* Netscape format cookie */
+ snprintf(nline, sizeof(nline), "%s\t%s\t%s\t%s\t%lu\t%s\t%s",
+ ".google.com", "TRUE", "/", "FALSE", time(NULL) + 31337, "PREF", "hello google, i like you very much!");
+ res = curl_easy_setopt(curl, CURLOPT_COOKIELIST, nline);
+ if (res != CURLE_OK) {
+ fprintf(stderr, "Curl curl_easy_setopt failed: %s\n", curl_easy_strerror(res));
+ return 1;
+ }
+
+ /* HTTP-header style cookie */
+ snprintf(nline, sizeof(nline),
+ "Set-Cookie: OLD_PREF=3d141414bf4209321; "
+ "expires=Sun, 17-Jan-2038 19:14:07 GMT; path=/; domain=.google.com");
+ res = curl_easy_setopt(curl, CURLOPT_COOKIELIST, nline);
+ if (res != CURLE_OK) {
+ fprintf(stderr, "Curl curl_easy_setopt failed: %s\n", curl_easy_strerror(res));
+ return 1;
+ }
+
+ print_cookies(curl);
+
+ res = curl_easy_perform(curl);
+ if (res != CURLE_OK) {
+ fprintf(stderr, "Curl perform failed: %s\n", curl_easy_strerror(res));
+ return 1;
+ }
+ }
+ else {
+ fprintf(stderr, "Curl init failed!\n");
+ return 1;
+ }
+
+ curl_global_cleanup();
+ return 0;
+}
diff --git a/docs/examples/curlgtk.c b/docs/examples/curlgtk.c
new file mode 100644
index 0000000..2c44280
--- /dev/null
+++ b/docs/examples/curlgtk.c
@@ -0,0 +1,108 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+/* Copyright (c) 2000 David Odin (aka DindinX) for MandrakeSoft */
+/* an attempt to use the curl library in concert with a gtk-threaded application */
+
+#include <stdio.h>
+#include <gtk/gtk.h>
+
+#include <curl/curl.h>
+#include <curl/types.h> /* new for v7 */
+#include <curl/easy.h> /* new for v7 */
+
+GtkWidget *Bar;
+
+size_t my_write_func(void *ptr, size_t size, size_t nmemb, FILE *stream)
+{
+ return fwrite(ptr, size, nmemb, stream);
+}
+
+size_t my_read_func(void *ptr, size_t size, size_t nmemb, FILE *stream)
+{
+ return fread(ptr, size, nmemb, stream);
+}
+
+int my_progress_func(GtkWidget *bar,
+ double t, /* dltotal */
+ double d, /* dlnow */
+ double ultotal,
+ double ulnow)
+{
+/* printf("%d / %d (%g %%)\n", d, t, d*100.0/t);*/
+ gdk_threads_enter();
+ gtk_progress_set_value(GTK_PROGRESS(bar), d*100.0/t);
+ gdk_threads_leave();
+ return 0;
+}
+
+void *my_thread(void *ptr)
+{
+ CURL *curl;
+ CURLcode res;
+ FILE *outfile;
+ gchar *url = ptr;
+
+ curl = curl_easy_init();
+ if(curl)
+ {
+ outfile = fopen("test.curl", "w");
+
+ curl_easy_setopt(curl, CURLOPT_URL, url);
+ curl_easy_setopt(curl, CURLOPT_WRITEDATA, outfile);
+ curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, my_write_func);
+ curl_easy_setopt(curl, CURLOPT_READFUNCTION, my_read_func);
+ curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0L);
+ curl_easy_setopt(curl, CURLOPT_PROGRESSFUNCTION, my_progress_func);
+ curl_easy_setopt(curl, CURLOPT_PROGRESSDATA, Bar);
+
+ res = curl_easy_perform(curl);
+
+ fclose(outfile);
+ /* always cleanup */
+ curl_easy_cleanup(curl);
+ }
+
+ return NULL;
+}
+
+int main(int argc, char **argv)
+{
+ GtkWidget *Window, *Frame, *Frame2;
+ GtkAdjustment *adj;
+
+ /* Must initialize libcurl before any threads are started */
+ curl_global_init(CURL_GLOBAL_ALL);
+
+ /* Init thread */
+ g_thread_init(NULL);
+
+ gtk_init(&argc, &argv);
+ Window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ Frame = gtk_frame_new(NULL);
+ gtk_frame_set_shadow_type(GTK_FRAME(Frame), GTK_SHADOW_OUT);
+ gtk_container_add(GTK_CONTAINER(Window), Frame);
+ Frame2 = gtk_frame_new(NULL);
+ gtk_frame_set_shadow_type(GTK_FRAME(Frame2), GTK_SHADOW_IN);
+ gtk_container_add(GTK_CONTAINER(Frame), Frame2);
+ gtk_container_set_border_width(GTK_CONTAINER(Frame2), 5);
+ adj = (GtkAdjustment*)gtk_adjustment_new(0, 0, 100, 0, 0, 0);
+ Bar = gtk_progress_bar_new_with_adjustment(adj);
+ gtk_container_add(GTK_CONTAINER(Frame2), Bar);
+ gtk_widget_show_all(Window);
+
+ if (!g_thread_create(&my_thread, argv[1], FALSE, NULL) != 0)
+ g_warning("can't create the thread");
+
+
+ gdk_threads_enter();
+ gtk_main();
+ gdk_threads_leave();
+ return 0;
+}
+
diff --git a/docs/examples/curlx.c b/docs/examples/curlx.c
new file mode 100644
index 0000000..62bdfe4
--- /dev/null
+++ b/docs/examples/curlx.c
@@ -0,0 +1,514 @@
+/*
+ curlx.c Authors: Peter Sylvester, Jean-Paul Merlin
+
+ This is a little program to demonstrate the usage of
+
+ - an ssl initialisation callback setting a user key and trustbases
+ coming from a pkcs12 file
+ - using an ssl application callback to find a URI in the
+ certificate presented during ssl session establishment.
+
+*/
+
+
+/*
+ * Copyright (c) 2003 The OpenEvidence Project. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions, the following disclaimer,
+ * and the original OpenSSL and SSLeay Licences below.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions, the following disclaimer
+ * and the original OpenSSL and SSLeay Licences below in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3. All advertising materials mentioning features or use of this
+ * software must display the following acknowledgments:
+ * "This product includes software developed by the Openevidence Project
+ * for use in the OpenEvidence Toolkit. (http://www.openevidence.org/)"
+ * This product includes software developed by the OpenSSL Project
+ * for use in the OpenSSL Toolkit (http://www.openssl.org/)"
+ * This product includes cryptographic software written by Eric Young
+ * (eay@cryptsoft.com). This product includes software written by Tim
+ * Hudson (tjh@cryptsoft.com)."
+ *
+ * 4. The names "OpenEvidence Toolkit" and "OpenEvidence Project" must not be
+ * used to endorse or promote products derived from this software without
+ * prior written permission. For written permission, please contact
+ * openevidence-core@openevidence.org.
+ *
+ * 5. Products derived from this software may not be called "OpenEvidence"
+ * nor may "OpenEvidence" appear in their names without prior written
+ * permission of the OpenEvidence Project.
+ *
+ * 6. Redistributions of any form whatsoever must retain the following
+ * acknowledgments:
+ * "This product includes software developed by the OpenEvidence Project
+ * for use in the OpenEvidence Toolkit (http://www.openevidence.org/)
+ * This product includes software developed by the OpenSSL Project
+ * for use in the OpenSSL Toolkit (http://www.openssl.org/)"
+ * This product includes cryptographic software written by Eric Young
+ * (eay@cryptsoft.com). This product includes software written by Tim
+ * Hudson (tjh@cryptsoft.com)."
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE OpenEvidence PROJECT ``AS IS'' AND ANY
+ * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenEvidence PROJECT OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This product includes software developed by the OpenSSL Project
+ * for use in the OpenSSL Toolkit (http://www.openssl.org/)
+ * This product includes cryptographic software written by Eric Young
+ * (eay@cryptsoft.com). This product includes software written by Tim
+ * Hudson (tjh@cryptsoft.com).
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <curl/curl.h>
+#include <openssl/x509v3.h>
+#include <openssl/x509_vfy.h>
+#include <openssl/crypto.h>
+#include <openssl/lhash.h>
+#include <openssl/objects.h>
+#include <openssl/err.h>
+#include <openssl/evp.h>
+#include <openssl/x509.h>
+#include <openssl/pkcs12.h>
+#include <openssl/bio.h>
+#include <openssl/ssl.h>
+
+static const char *curlx_usage[]={
+ "usage: curlx args\n",
+ " -p12 arg - tia file ",
+ " -envpass arg - environement variable which content the tia private key password",
+ " -out arg - output file (response)- default stdout",
+ " -in arg - input file (request)- default stdin",
+ " -connect arg - URL of the server for the connection ex: www.openevidence.org",
+ " -mimetype arg - MIME type for data in ex : application/timestamp-query or application/dvcs -default application/timestamp-query",
+ " -acceptmime arg - MIME type acceptable for the response ex : application/timestamp-response or application/dvcs -default none",
+ " -accesstype arg - an Object identifier in an AIA/SIA method, e.g. AD_DVCS or ad_timestamping",
+ NULL
+};
+
+/*
+
+./curlx -p12 psy.p12 -envpass XX -in request -verbose -accesstype AD_DVCS
+-mimetype application/dvcs -acceptmime application/dvcs -out response
+
+*/
+
+/*
+ * We use this ZERO_NULL to avoid picky compiler warnings,
+ * when assigning a NULL pointer to a function pointer var.
+ */
+
+#define ZERO_NULL 0
+
+/* This is a context that we pass to all callbacks */
+
+typedef struct sslctxparm_st {
+ unsigned char * p12file ;
+ const char * pst ;
+ PKCS12 * p12 ;
+ EVP_PKEY * pkey ;
+ X509 * usercert ;
+ STACK_OF(X509) * ca ;
+ CURL * curl;
+ BIO * errorbio;
+ int accesstype ;
+ int verbose;
+
+} sslctxparm;
+
+/* some helper function. */
+
+static char *i2s_ASN1_IA5STRING( ASN1_IA5STRING *ia5)
+{
+ char *tmp;
+ if(!ia5 || !ia5->length)
+ return NULL;
+ tmp = OPENSSL_malloc(ia5->length + 1);
+ memcpy(tmp, ia5->data, ia5->length);
+ tmp[ia5->length] = 0;
+ return tmp;
+}
+
+/* A conveniance routine to get an access URI. */
+
+static unsigned char *my_get_ext(X509 * cert, const int type, int extensiontype) {
+
+ int i;
+ STACK_OF(ACCESS_DESCRIPTION) * accessinfo ;
+ accessinfo = X509_get_ext_d2i(cert, extensiontype, NULL, NULL) ;
+
+ if (!sk_ACCESS_DESCRIPTION_num(accessinfo))
+ return NULL;
+ for (i = 0; i < sk_ACCESS_DESCRIPTION_num(accessinfo); i++) {
+ ACCESS_DESCRIPTION * ad = sk_ACCESS_DESCRIPTION_value(accessinfo, i);
+ if (OBJ_obj2nid(ad->method) == type) {
+ if (ad->location->type == GEN_URI) {
+ return i2s_ASN1_IA5STRING(ad->location->d.ia5);
+ }
+ return NULL;
+ }
+ }
+ return NULL;
+}
+
+/* This is an application verification call back, it does not
+ perform any addition verification but tries to find a URL
+ in the presented certificat. If found, this will become
+ the URL to be used in the POST.
+*/
+
+static int ssl_app_verify_callback(X509_STORE_CTX *ctx, void *arg)
+{
+ sslctxparm * p = (sslctxparm *) arg;
+ int ok;
+
+ if (p->verbose > 2)
+ BIO_printf(p->errorbio,"entering ssl_app_verify_callback\n");
+
+ if ((ok= X509_verify_cert(ctx)) && ctx->cert) {
+ unsigned char * accessinfo ;
+ if (p->verbose > 1)
+ X509_print_ex(p->errorbio,ctx->cert,0,0);
+
+ if (accessinfo = my_get_ext(ctx->cert,p->accesstype ,NID_sinfo_access)) {
+ if (p->verbose)
+ BIO_printf(p->errorbio,"Setting URL from SIA to: %s\n", accessinfo);
+
+ curl_easy_setopt(p->curl, CURLOPT_URL,accessinfo);
+ }
+ else if (accessinfo = my_get_ext(ctx->cert,p->accesstype,
+ NID_info_access)) {
+ if (p->verbose)
+ BIO_printf(p->errorbio,"Setting URL from AIA to: %s\n", accessinfo);
+
+ curl_easy_setopt(p->curl, CURLOPT_URL,accessinfo);
+ }
+ }
+ if (p->verbose > 2)
+ BIO_printf(p->errorbio,"leaving ssl_app_verify_callback with %d\n", ok);
+ return(ok);
+}
+
+
+/* This is an example of an curl SSL initialisation call back. The callback sets:
+ - a private key and certificate
+ - a trusted ca certificate
+ - a preferred cipherlist
+ - an application verification callback (the function above)
+*/
+
+static CURLcode sslctxfun(CURL * curl, void * sslctx, void * parm) {
+
+ sslctxparm * p = (sslctxparm *) parm;
+ SSL_CTX * ctx = (SSL_CTX *) sslctx ;
+
+ if (!SSL_CTX_use_certificate(ctx,p->usercert)) {
+ BIO_printf(p->errorbio, "SSL_CTX_use_certificate problem\n"); goto err;
+ }
+ if (!SSL_CTX_use_PrivateKey(ctx,p->pkey)) {
+ BIO_printf(p->errorbio, "SSL_CTX_use_PrivateKey\n"); goto err;
+ }
+
+ if (!SSL_CTX_check_private_key(ctx)) {
+ BIO_printf(p->errorbio, "SSL_CTX_check_private_key\n"); goto err;
+ }
+
+ SSL_CTX_set_quiet_shutdown(ctx,1);
+ SSL_CTX_set_cipher_list(ctx,"RC4-MD5");
+ SSL_CTX_set_mode(ctx, SSL_MODE_AUTO_RETRY);
+
+ X509_STORE_add_cert(ctx->cert_store,sk_X509_value(p->ca,
+ sk_X509_num(p->ca)-1));
+
+ SSL_CTX_set_verify_depth(ctx,2);
+
+ SSL_CTX_set_verify(ctx,SSL_VERIFY_PEER,ZERO_NULL);
+
+ SSL_CTX_set_cert_verify_callback(ctx, ssl_app_verify_callback, parm);
+
+
+ return CURLE_OK ;
+ err:
+ ERR_print_errors(p->errorbio);
+ return CURLE_SSL_CERTPROBLEM;
+
+}
+
+int main(int argc, char **argv) {
+
+ BIO* in=NULL;
+ BIO* out=NULL;
+
+ char * outfile = NULL;
+ char * infile = NULL ;
+
+ int tabLength=100;
+ char *binaryptr;
+ char* mimetype;
+ char* mimetypeaccept=NULL;
+ char* contenttype;
+ const char** pp;
+ unsigned char* hostporturl = NULL;
+ BIO * p12bio ;
+ char **args = argv + 1;
+ unsigned char * serverurl;
+ sslctxparm p;
+ char *response;
+
+ CURLcode res;
+ struct curl_slist * headers=NULL;
+ int badarg=0;
+
+ binaryptr = malloc(tabLength);
+
+ p.verbose = 0;
+ p.errorbio = BIO_new_fp (stderr, BIO_NOCLOSE);
+
+ curl_global_init(CURL_GLOBAL_DEFAULT);
+
+ /* we need some more for the P12 decoding */
+
+ OpenSSL_add_all_ciphers();
+ OpenSSL_add_all_digests();
+ ERR_load_crypto_strings();
+
+
+
+ while (*args && *args[0] == '-') {
+ if (!strcmp (*args, "-in")) {
+ if (args[1]) {
+ infile=*(++args);
+ } else badarg=1;
+ } else if (!strcmp (*args, "-out")) {
+ if (args[1]) {
+ outfile=*(++args);
+ } else badarg=1;
+ } else if (!strcmp (*args, "-p12")) {
+ if (args[1]) {
+ p.p12file = *(++args);
+ } else badarg=1;
+ } else if (strcmp(*args,"-envpass") == 0) {
+ if (args[1]) {
+ p.pst = getenv(*(++args));
+ } else badarg=1;
+ } else if (strcmp(*args,"-connect") == 0) {
+ if (args[1]) {
+ hostporturl = *(++args);
+ } else badarg=1;
+ } else if (strcmp(*args,"-mimetype") == 0) {
+ if (args[1]) {
+ mimetype = *(++args);
+ } else badarg=1;
+ } else if (strcmp(*args,"-acceptmime") == 0) {
+ if (args[1]) {
+ mimetypeaccept = *(++args);
+ } else badarg=1;
+ } else if (strcmp(*args,"-accesstype") == 0) {
+ if (args[1]) {
+ if ((p.accesstype = OBJ_obj2nid(OBJ_txt2obj(*++args,0))) == 0) badarg=1;
+ } else badarg=1;
+ } else if (strcmp(*args,"-verbose") == 0) {
+ p.verbose++;
+ } else badarg=1;
+ args++;
+ }
+
+ if (mimetype==NULL || mimetypeaccept == NULL) badarg = 1;
+
+ if (badarg) {
+ for (pp=curlx_usage; (*pp != NULL); pp++)
+ BIO_printf(p.errorbio,"%s\n",*pp);
+ BIO_printf(p.errorbio,"\n");
+ goto err;
+ }
+
+
+
+ /* set input */
+
+ if ((in=BIO_new(BIO_s_file())) == NULL) {
+ BIO_printf(p.errorbio, "Error setting input bio\n");
+ goto err;
+ } else if (infile == NULL)
+ BIO_set_fp(in,stdin,BIO_NOCLOSE|BIO_FP_TEXT);
+ else if (BIO_read_filename(in,infile) <= 0) {
+ BIO_printf(p.errorbio, "Error opening input file %s\n", infile);
+ BIO_free(in);
+ goto err;
+ }
+
+ /* set output */
+
+ if ((out=BIO_new(BIO_s_file())) == NULL) {
+ BIO_printf(p.errorbio, "Error setting output bio.\n");
+ goto err;
+ } else if (outfile == NULL)
+ BIO_set_fp(out,stdout,BIO_NOCLOSE|BIO_FP_TEXT);
+ else if (BIO_write_filename(out,outfile) <= 0) {
+ BIO_printf(p.errorbio, "Error opening output file %s\n", outfile);
+ BIO_free(out);
+ goto err;
+ }
+
+
+ p.errorbio = BIO_new_fp (stderr, BIO_NOCLOSE);
+
+ if (!(p.curl = curl_easy_init())) {
+ BIO_printf(p.errorbio, "Cannot init curl lib\n");
+ goto err;
+ }
+
+
+
+ if (!(p12bio = BIO_new_file(p.p12file , "rb"))) {
+ BIO_printf(p.errorbio, "Error opening P12 file %s\n", p.p12file); goto err;
+ }
+ if (!(p.p12 = d2i_PKCS12_bio (p12bio, NULL))) {
+ BIO_printf(p.errorbio, "Cannot decode P12 structure %s\n", p.p12file); goto err;
+ }
+
+ p.ca= NULL;
+ if (!(PKCS12_parse (p.p12, p.pst, &(p.pkey), &(p.usercert), &(p.ca) ) )) {
+ BIO_printf(p.errorbio,"Invalid P12 structure in %s\n", p.p12file); goto err;
+ }
+
+ if (sk_X509_num(p.ca) <= 0) {
+ BIO_printf(p.errorbio,"No trustworthy CA given.%s\n", p.p12file); goto err;
+ }
+
+ if (p.verbose > 1)
+ X509_print_ex(p.errorbio,p.usercert,0,0);
+
+ /* determine URL to go */
+
+ if (hostporturl) {
+ serverurl = malloc(9+strlen(hostporturl));
+ sprintf(serverurl,"https://%s",hostporturl);
+ }
+ else if (p.accesstype != 0) { /* see whether we can find an AIA or SIA for a given access type */
+ if (!(serverurl = my_get_ext(p.usercert,p.accesstype,NID_info_access))) {
+ int j=0;
+ BIO_printf(p.errorbio,"no service URL in user cert "
+ "cherching in others certificats\n");
+ for (j=0;j<sk_X509_num(p.ca);j++) {
+ if ((serverurl = my_get_ext(sk_X509_value(p.ca,j),p.accesstype,
+ NID_info_access)))
+ break;
+ if ((serverurl = my_get_ext(sk_X509_value(p.ca,j),p.accesstype,
+ NID_sinfo_access)))
+ break;
+ }
+ }
+ }
+
+ if (!serverurl) {
+ BIO_printf(p.errorbio, "no service URL in certificats,"
+ " check '-accesstype (AD_DVCS | ad_timestamping)'"
+ " or use '-connect'\n");
+ goto err;
+ }
+
+ if (p.verbose)
+ BIO_printf(p.errorbio, "Service URL: <%s>\n", serverurl);
+
+ curl_easy_setopt(p.curl, CURLOPT_URL, serverurl);
+
+ /* Now specify the POST binary data */
+
+ curl_easy_setopt(p.curl, CURLOPT_POSTFIELDS, binaryptr);
+ curl_easy_setopt(p.curl, CURLOPT_POSTFIELDSIZE,(long)tabLength);
+
+ /* pass our list of custom made headers */
+
+ contenttype = malloc(15+strlen(mimetype));
+ sprintf(contenttype,"Content-type: %s",mimetype);
+ headers = curl_slist_append(headers,contenttype);
+ curl_easy_setopt(p.curl, CURLOPT_HTTPHEADER, headers);
+
+ if (p.verbose)
+ BIO_printf(p.errorbio, "Service URL: <%s>\n", serverurl);
+
+ {
+ FILE *outfp;
+ BIO_get_fp(out,&outfp);
+ curl_easy_setopt(p.curl, CURLOPT_WRITEDATA, outfp);
+ }
+
+ res = curl_easy_setopt(p.curl, CURLOPT_SSL_CTX_FUNCTION, sslctxfun) ;
+
+ if (res != CURLE_OK)
+ BIO_printf(p.errorbio,"%d %s=%d %d\n", __LINE__, "CURLOPT_SSL_CTX_FUNCTION",CURLOPT_SSL_CTX_FUNCTION,res);
+
+ curl_easy_setopt(p.curl, CURLOPT_SSL_CTX_DATA, &p);
+
+ {
+ int lu; int i=0;
+ while ((lu = BIO_read (in,&binaryptr[i],tabLength-i)) >0 ) {
+ i+=lu;
+ if (i== tabLength) {
+ tabLength+=100;
+ binaryptr=realloc(binaryptr,tabLength); /* should be more careful */
+ }
+ }
+ tabLength = i;
+ }
+ /* Now specify the POST binary data */
+
+ curl_easy_setopt(p.curl, CURLOPT_POSTFIELDS, binaryptr);
+ curl_easy_setopt(p.curl, CURLOPT_POSTFIELDSIZE,(long)tabLength);
+
+
+ /* Perform the request, res will get the return code */
+
+ BIO_printf(p.errorbio,"%d %s %d\n", __LINE__, "curl_easy_perform",
+ res = curl_easy_perform(p.curl));
+ {
+ int result =curl_easy_getinfo(p.curl,CURLINFO_CONTENT_TYPE,&response);
+ if( mimetypeaccept && p.verbose)
+ if(!strcmp(mimetypeaccept,response))
+ BIO_printf(p.errorbio,"the response has a correct mimetype : %s\n",
+ response);
+ else
+ BIO_printf(p.errorbio,"the reponse doesn\'t has an acceptable "
+ "mime type, it is %s instead of %s\n",
+ response,mimetypeaccept);
+ }
+
+ /*** code d'erreur si accept mime ***, egalement code return HTTP != 200 ***/
+
+/* free the header list*/
+
+ curl_slist_free_all(headers);
+
+ /* always cleanup */
+ curl_easy_cleanup(p.curl);
+
+ BIO_free(in);
+ BIO_free(out);
+ return (EXIT_SUCCESS);
+
+ err: BIO_printf(p.errorbio,"error");
+ exit(1);
+}
diff --git a/docs/examples/debug.c b/docs/examples/debug.c
new file mode 100644
index 0000000..cc68481
--- /dev/null
+++ b/docs/examples/debug.c
@@ -0,0 +1,128 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include <stdio.h>
+#include <curl/curl.h>
+
+struct data {
+ char trace_ascii; /* 1 or 0 */
+};
+
+static
+void dump(const char *text,
+ FILE *stream, unsigned char *ptr, size_t size,
+ char nohex)
+{
+ size_t i;
+ size_t c;
+
+ unsigned int width=0x10;
+
+ if(nohex)
+ /* without the hex output, we can fit more on screen */
+ width = 0x40;
+
+ fprintf(stream, "%s, %010.10ld bytes (0x%08.8lx)\n",
+ text, (long)size, (long)size);
+
+ for(i=0; i<size; i+= width) {
+
+ fprintf(stream, "%04.4lx: ", (long)i);
+
+ if(!nohex) {
+ /* hex not disabled, show it */
+ for(c = 0; c < width; c++)
+ if(i+c < size)
+ fprintf(stream, "%02x ", ptr[i+c]);
+ else
+ fputs(" ", stream);
+ }
+
+ for(c = 0; (c < width) && (i+c < size); c++) {
+ /* check for 0D0A; if found, skip past and start a new line of output */
+ if (nohex && (i+c+1 < size) && ptr[i+c]==0x0D && ptr[i+c+1]==0x0A) {
+ i+=(c+2-width);
+ break;
+ }
+ fprintf(stream, "%c",
+ (ptr[i+c]>=0x20) && (ptr[i+c]<0x80)?ptr[i+c]:'.');
+ /* check again for 0D0A, to avoid an extra \n if it's at width */
+ if (nohex && (i+c+2 < size) && ptr[i+c+1]==0x0D && ptr[i+c+2]==0x0A) {
+ i+=(c+3-width);
+ break;
+ }
+ }
+ fputc('\n', stream); /* newline */
+ }
+ fflush(stream);
+}
+
+static
+int my_trace(CURL *handle, curl_infotype type,
+ char *data, size_t size,
+ void *userp)
+{
+ struct data *config = (struct data *)userp;
+ const char *text;
+ (void)handle; /* prevent compiler warning */
+
+ switch (type) {
+ case CURLINFO_TEXT:
+ fprintf(stderr, "== Info: %s", data);
+ default: /* in case a new one is introduced to shock us */
+ return 0;
+
+ case CURLINFO_HEADER_OUT:
+ text = "=> Send header";
+ break;
+ case CURLINFO_DATA_OUT:
+ text = "=> Send data";
+ break;
+ case CURLINFO_SSL_DATA_OUT:
+ text = "=> Send SSL data";
+ break;
+ case CURLINFO_HEADER_IN:
+ text = "<= Recv header";
+ break;
+ case CURLINFO_DATA_IN:
+ text = "<= Recv data";
+ break;
+ case CURLINFO_SSL_DATA_IN:
+ text = "<= Recv SSL data";
+ break;
+ }
+
+ dump(text, stderr, (unsigned char *)data, size, config->trace_ascii);
+ return 0;
+}
+
+int main(void)
+{
+ CURL *curl;
+ CURLcode res;
+ struct data config;
+
+ config.trace_ascii = 1; /* enable ascii tracing */
+
+ curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_DEBUGFUNCTION, my_trace);
+ curl_easy_setopt(curl, CURLOPT_DEBUGDATA, &config);
+
+ /* the DEBUGFUNCTION has no effect until we enable VERBOSE */
+ curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
+
+ curl_easy_setopt(curl, CURLOPT_URL, "http://example.com/");
+ res = curl_easy_perform(curl);
+
+ /* always cleanup */
+ curl_easy_cleanup(curl);
+ }
+ return 0;
+}
diff --git a/docs/examples/evhiperfifo.c b/docs/examples/evhiperfifo.c
new file mode 100644
index 0000000..6cdccf8
--- /dev/null
+++ b/docs/examples/evhiperfifo.c
@@ -0,0 +1,429 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ *
+ * Example application source code using the multi socket interface to
+ * download many files at once.
+ *
+ * This example features the same basic functionality as hiperfifo.c does,
+ * but this uses libev instead of libevent.
+ *
+ * Written by Jeff Pohlmeyer, converted to use libev by Markus Koetter
+
+Requires libev and a (POSIX?) system that has mkfifo().
+
+This is an adaptation of libcurl's "hipev.c" and libevent's "event-test.c"
+sample programs.
+
+When running, the program creates the named pipe "hiper.fifo"
+
+Whenever there is input into the fifo, the program reads the input as a list
+of URL's and creates some new easy handles to fetch each URL via the
+curl_multi "hiper" API.
+
+
+Thus, you can try a single URL:
+ % echo http://www.yahoo.com > hiper.fifo
+
+Or a whole bunch of them:
+ % cat my-url-list > hiper.fifo
+
+The fifo buffer is handled almost instantly, so you can even add more URL's
+while the previous requests are still being downloaded.
+
+Note:
+ For the sake of simplicity, URL length is limited to 1023 char's !
+
+This is purely a demo app, all retrieved data is simply discarded by the write
+callback.
+
+*/
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <sys/time.h>
+#include <time.h>
+#include <unistd.h>
+#include <sys/poll.h>
+#include <curl/curl.h>
+#include <ev.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+#include <errno.h>
+
+#define DPRINT(x...) printf(x)
+
+#define MSG_OUT stdout /* Send info to stdout, change to stderr if you want */
+
+
+/* Global information, common to all connections */
+typedef struct _GlobalInfo
+{
+ struct ev_loop *loop;
+ struct ev_io fifo_event;
+ struct ev_timer timer_event;
+ CURLM *multi;
+ int still_running;
+ FILE* input;
+} GlobalInfo;
+
+
+/* Information associated with a specific easy handle */
+typedef struct _ConnInfo
+{
+ CURL *easy;
+ char *url;
+ GlobalInfo *global;
+ char error[CURL_ERROR_SIZE];
+} ConnInfo;
+
+
+/* Information associated with a specific socket */
+typedef struct _SockInfo
+{
+ curl_socket_t sockfd;
+ CURL *easy;
+ int action;
+ long timeout;
+ struct ev_io ev;
+ int evset;
+ GlobalInfo *global;
+} SockInfo;
+
+static void timer_cb(EV_P_ struct ev_timer *w, int revents);
+
+/* Update the event timer after curl_multi library calls */
+static int multi_timer_cb(CURLM *multi, long timeout_ms, GlobalInfo *g)
+{
+ DPRINT("%s %li\n", __PRETTY_FUNCTION__, timeout_ms);
+ ev_timer_stop(g->loop, &g->timer_event);
+ if (timeout_ms > 0)
+ {
+ double t = timeout_ms / 1000;
+ ev_timer_init(&g->timer_event, timer_cb, t, 0.);
+ ev_timer_start(g->loop, &g->timer_event);
+ }else
+ timer_cb(g->loop, &g->timer_event, 0);
+ return 0;
+}
+
+/* Die if we get a bad CURLMcode somewhere */
+static void mcode_or_die(const char *where, CURLMcode code)
+{
+ if ( CURLM_OK != code )
+ {
+ const char *s;
+ switch ( code )
+ {
+ case CURLM_CALL_MULTI_PERFORM: s="CURLM_CALL_MULTI_PERFORM"; break;
+ case CURLM_BAD_HANDLE: s="CURLM_BAD_HANDLE"; break;
+ case CURLM_BAD_EASY_HANDLE: s="CURLM_BAD_EASY_HANDLE"; break;
+ case CURLM_OUT_OF_MEMORY: s="CURLM_OUT_OF_MEMORY"; break;
+ case CURLM_INTERNAL_ERROR: s="CURLM_INTERNAL_ERROR"; break;
+ case CURLM_UNKNOWN_OPTION: s="CURLM_UNKNOWN_OPTION"; break;
+ case CURLM_LAST: s="CURLM_LAST"; break;
+ default: s="CURLM_unknown";
+ break;
+ case CURLM_BAD_SOCKET: s="CURLM_BAD_SOCKET";
+ fprintf(MSG_OUT, "ERROR: %s returns %s\n", where, s);
+ /* ignore this error */
+ return;
+ }
+ fprintf(MSG_OUT, "ERROR: %s returns %s\n", where, s);
+ exit(code);
+ }
+}
+
+
+
+/* Check for completed transfers, and remove their easy handles */
+static void check_multi_info(GlobalInfo *g)
+{
+ char *eff_url;
+ CURLMsg *msg;
+ int msgs_left;
+ ConnInfo *conn;
+ CURL *easy;
+ CURLcode res;
+
+ fprintf(MSG_OUT, "REMAINING: %d\n", g->still_running);
+ while ((msg = curl_multi_info_read(g->multi, &msgs_left))) {
+ if (msg->msg == CURLMSG_DONE) {
+ easy = msg->easy_handle;
+ res = msg->data.result;
+ curl_easy_getinfo(easy, CURLINFO_PRIVATE, &conn);
+ curl_easy_getinfo(easy, CURLINFO_EFFECTIVE_URL, &eff_url);
+ fprintf(MSG_OUT, "DONE: %s => (%d) %s\n", eff_url, res, conn->error);
+ curl_multi_remove_handle(g->multi, easy);
+ free(conn->url);
+ curl_easy_cleanup(easy);
+ free(conn);
+ }
+ }
+}
+
+
+
+/* Called by libevent when we get action on a multi socket */
+static void event_cb(EV_P_ struct ev_io *w, int revents)
+{
+ DPRINT("%s w %p revents %i\n", __PRETTY_FUNCTION__, w, revents);
+ GlobalInfo *g = (GlobalInfo*) w->data;
+ CURLMcode rc;
+
+ int action = (revents&EV_READ?CURL_POLL_IN:0)|
+ (revents&EV_WRITE?CURL_POLL_OUT:0);
+ rc = curl_multi_socket_action(g->multi, w->fd, action, &g->still_running);
+ mcode_or_die("event_cb: curl_multi_socket_action", rc);
+ check_multi_info(g);
+ if ( g->still_running <= 0 )
+ {
+ fprintf(MSG_OUT, "last transfer done, kill timeout\n");
+ ev_timer_stop(g->loop, &g->timer_event);
+ }
+}
+
+/* Called by libevent when our timeout expires */
+static void timer_cb(EV_P_ struct ev_timer *w, int revents)
+{
+ DPRINT("%s w %p revents %i\n", __PRETTY_FUNCTION__, w, revents);
+
+ GlobalInfo *g = (GlobalInfo *)w->data;
+ CURLMcode rc;
+
+ rc = curl_multi_socket_action(g->multi, CURL_SOCKET_TIMEOUT, 0, &g->still_running);
+ mcode_or_die("timer_cb: curl_multi_socket_action", rc);
+ check_multi_info(g);
+}
+
+/* Clean up the SockInfo structure */
+static void remsock(SockInfo *f, GlobalInfo *g)
+{
+ printf("%s \n", __PRETTY_FUNCTION__);
+ if ( f )
+ {
+ if ( f->evset )
+ ev_io_stop(g->loop, &f->ev);
+ free(f);
+ }
+}
+
+
+
+/* Assign information to a SockInfo structure */
+static void setsock(SockInfo*f, curl_socket_t s, CURL*e, int act, GlobalInfo*g)
+{
+ printf("%s \n", __PRETTY_FUNCTION__);
+
+ int kind = (act&CURL_POLL_IN?EV_READ:0)|(act&CURL_POLL_OUT?EV_WRITE:0);
+
+ f->sockfd = s;
+ f->action = act;
+ f->easy = e;
+ if ( f->evset )
+ ev_io_stop(g->loop, &f->ev);
+ ev_io_init(&f->ev, event_cb, f->sockfd, kind);
+ f->ev.data = g;
+ f->evset=1;
+ ev_io_start(g->loop, &f->ev);
+}
+
+
+
+/* Initialize a new SockInfo structure */
+static void addsock(curl_socket_t s, CURL *easy, int action, GlobalInfo *g)
+{
+ SockInfo *fdp = calloc(sizeof(SockInfo), 1);
+
+ fdp->global = g;
+ setsock(fdp, s, easy, action, g);
+ curl_multi_assign(g->multi, s, fdp);
+}
+
+/* CURLMOPT_SOCKETFUNCTION */
+static int sock_cb(CURL *e, curl_socket_t s, int what, void *cbp, void *sockp)
+{
+ DPRINT("%s e %p s %i what %i cbp %p sockp %p\n",
+ __PRETTY_FUNCTION__, e, s, what, cbp, sockp);
+
+ GlobalInfo *g = (GlobalInfo*) cbp;
+ SockInfo *fdp = (SockInfo*) sockp;
+ const char *whatstr[]={ "none", "IN", "OUT", "INOUT", "REMOVE"};
+
+ fprintf(MSG_OUT,
+ "socket callback: s=%d e=%p what=%s ", s, e, whatstr[what]);
+ if ( what == CURL_POLL_REMOVE )
+ {
+ fprintf(MSG_OUT, "\n");
+ remsock(fdp, g);
+ } else
+ {
+ if ( !fdp )
+ {
+ fprintf(MSG_OUT, "Adding data: %s\n", whatstr[what]);
+ addsock(s, e, what, g);
+ } else
+ {
+ fprintf(MSG_OUT,
+ "Changing action from %s to %s\n",
+ whatstr[fdp->action], whatstr[what]);
+ setsock(fdp, s, e, what, g);
+ }
+ }
+ return 0;
+}
+
+
+/* CURLOPT_WRITEFUNCTION */
+static size_t write_cb(void *ptr, size_t size, size_t nmemb, void *data)
+{
+ size_t realsize = size * nmemb;
+ ConnInfo *conn = (ConnInfo*) data;
+ (void)ptr;
+ (void)conn;
+ return realsize;
+}
+
+
+/* CURLOPT_PROGRESSFUNCTION */
+static int prog_cb (void *p, double dltotal, double dlnow, double ult,
+ double uln)
+{
+ ConnInfo *conn = (ConnInfo *)p;
+ (void)ult;
+ (void)uln;
+
+ fprintf(MSG_OUT, "Progress: %s (%g/%g)\n", conn->url, dlnow, dltotal);
+ return 0;
+}
+
+
+/* Create a new easy handle, and add it to the global curl_multi */
+static void new_conn(char *url, GlobalInfo *g )
+{
+ ConnInfo *conn;
+ CURLMcode rc;
+
+ conn = calloc(1, sizeof(ConnInfo));
+ memset(conn, 0, sizeof(ConnInfo));
+ conn->error[0]='\0';
+
+ conn->easy = curl_easy_init();
+ if ( !conn->easy )
+ {
+ fprintf(MSG_OUT, "curl_easy_init() failed, exiting!\n");
+ exit(2);
+ }
+ conn->global = g;
+ conn->url = strdup(url);
+ curl_easy_setopt(conn->easy, CURLOPT_URL, conn->url);
+ curl_easy_setopt(conn->easy, CURLOPT_WRITEFUNCTION, write_cb);
+ curl_easy_setopt(conn->easy, CURLOPT_WRITEDATA, &conn);
+ curl_easy_setopt(conn->easy, CURLOPT_VERBOSE, 1L);
+ curl_easy_setopt(conn->easy, CURLOPT_ERRORBUFFER, conn->error);
+ curl_easy_setopt(conn->easy, CURLOPT_PRIVATE, conn);
+ curl_easy_setopt(conn->easy, CURLOPT_NOPROGRESS, 0L);
+ curl_easy_setopt(conn->easy, CURLOPT_PROGRESSFUNCTION, prog_cb);
+ curl_easy_setopt(conn->easy, CURLOPT_PROGRESSDATA, conn);
+ curl_easy_setopt(conn->easy, CURLOPT_LOW_SPEED_TIME, 3L);
+ curl_easy_setopt(conn->easy, CURLOPT_LOW_SPEED_LIMIT, 10L);
+
+ fprintf(MSG_OUT,
+ "Adding easy %p to multi %p (%s)\n", conn->easy, g->multi, url);
+ rc = curl_multi_add_handle(g->multi, conn->easy);
+ mcode_or_die("new_conn: curl_multi_add_handle", rc);
+
+ /* note that the add_handle() will set a time-out to trigger very soon so
+ that the necessary socket_action() call will be called by this app */
+}
+
+/* This gets called whenever data is received from the fifo */
+static void fifo_cb(EV_P_ struct ev_io *w, int revents)
+{
+ char s[1024];
+ long int rv=0;
+ int n=0;
+ GlobalInfo *g = (GlobalInfo *)w->data;
+
+ do
+ {
+ s[0]='\0';
+ rv=fscanf(g->input, "%1023s%n", s, &n);
+ s[n]='\0';
+ if ( n && s[0] )
+ {
+ new_conn(s,g); /* if we read a URL, go get it! */
+ } else break;
+ } while ( rv != EOF );
+}
+
+/* Create a named pipe and tell libevent to monitor it */
+static int init_fifo (GlobalInfo *g)
+{
+ struct stat st;
+ static const char *fifo = "hiper.fifo";
+ int sockfd;
+
+ fprintf(MSG_OUT, "Creating named pipe \"%s\"\n", fifo);
+ if ( lstat (fifo, &st) == 0 )
+ {
+ if ( (st.st_mode & S_IFMT) == S_IFREG )
+ {
+ errno = EEXIST;
+ perror("lstat");
+ exit (1);
+ }
+ }
+ unlink(fifo);
+ if ( mkfifo (fifo, 0600) == -1 )
+ {
+ perror("mkfifo");
+ exit (1);
+ }
+ sockfd = open(fifo, O_RDWR | O_NONBLOCK, 0);
+ if ( sockfd == -1 )
+ {
+ perror("open");
+ exit (1);
+ }
+ g->input = fdopen(sockfd, "r");
+
+ fprintf(MSG_OUT, "Now, pipe some URL's into > %s\n", fifo);
+ ev_io_init(&g->fifo_event, fifo_cb, sockfd, EV_READ);
+ ev_io_start(g->loop, &g->fifo_event);
+ return(0);
+}
+
+int main(int argc, char **argv)
+{
+ GlobalInfo g;
+ CURLMcode rc;
+ (void)argc;
+ (void)argv;
+
+ memset(&g, 0, sizeof(GlobalInfo));
+ g.loop = ev_default_loop(0);
+
+ init_fifo(&g);
+ g.multi = curl_multi_init();
+
+ ev_timer_init(&g.timer_event, timer_cb, 0., 0.);
+ g.timer_event.data = &g;
+ g.fifo_event.data = &g;
+ curl_multi_setopt(g.multi, CURLMOPT_SOCKETFUNCTION, sock_cb);
+ curl_multi_setopt(g.multi, CURLMOPT_SOCKETDATA, &g);
+ curl_multi_setopt(g.multi, CURLMOPT_TIMERFUNCTION, multi_timer_cb);
+ curl_multi_setopt(g.multi, CURLMOPT_TIMERDATA, &g);
+
+ /* we don't call any curl_multi_socket*() function yet as we have no handles
+ added! */
+
+ ev_loop(g.loop, 0);
+ curl_multi_cleanup(g.multi);
+ return 0;
+}
diff --git a/docs/examples/fileupload.c b/docs/examples/fileupload.c
new file mode 100644
index 0000000..cdec751
--- /dev/null
+++ b/docs/examples/fileupload.c
@@ -0,0 +1,67 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include <stdio.h>
+#include <curl/curl.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+
+int main(void)
+{
+ CURL *curl;
+ CURLcode res;
+ struct stat file_info;
+ double speed_upload, total_time;
+ FILE *fd;
+
+ fd = fopen("debugit", "rb"); /* open file to upload */
+ if(!fd) {
+
+ return 1; /* can't continue */
+ }
+
+ /* to get the file size */
+ if(fstat(fileno(fd), &file_info) != 0) {
+
+ return 1; /* can't continue */
+ }
+
+ curl = curl_easy_init();
+ if(curl) {
+ /* upload to this place */
+ curl_easy_setopt(curl, CURLOPT_URL,
+ "file:///home/dast/src/curl/debug/new");
+
+ /* tell it to "upload" to the URL */
+ curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
+
+ /* set where to read from (on Windows you need to use READFUNCTION too) */
+ curl_easy_setopt(curl, CURLOPT_READDATA, fd);
+
+ /* and give the size of the upload (optional) */
+ curl_easy_setopt(curl, CURLOPT_INFILESIZE_LARGE,
+ (curl_off_t)file_info.st_size);
+
+ /* enable verbose for easier tracing */
+ curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
+
+ res = curl_easy_perform(curl);
+
+ /* now extract transfer info */
+ curl_easy_getinfo(curl, CURLINFO_SPEED_UPLOAD, &speed_upload);
+ curl_easy_getinfo(curl, CURLINFO_TOTAL_TIME, &total_time);
+
+ fprintf(stderr, "Speed: %.3f bytes/sec during %.3f seconds\n",
+ speed_upload, total_time);
+
+ /* always cleanup */
+ curl_easy_cleanup(curl);
+ }
+ return 0;
+}
diff --git a/docs/examples/fopen.c b/docs/examples/fopen.c
new file mode 100644
index 0000000..1310993
--- /dev/null
+++ b/docs/examples/fopen.c
@@ -0,0 +1,573 @@
+/*****************************************************************************
+ *
+ * This example source code introduces a c library buffered I/O interface to
+ * URL reads it supports fopen(), fread(), fgets(), feof(), fclose(),
+ * rewind(). Supported functions have identical prototypes to their normal c
+ * lib namesakes and are preceaded by url_ .
+ *
+ * Using this code you can replace your program's fopen() with url_fopen()
+ * and fread() with url_fread() and it become possible to read remote streams
+ * instead of (only) local files. Local files (ie those that can be directly
+ * fopened) will drop back to using the underlying clib implementations
+ *
+ * See the main() function at the bottom that shows an app that retrives from a
+ * specified url using fgets() and fread() and saves as two output files.
+ *
+ * Copyright (c) 2003 Simtec Electronics
+ *
+ * Re-implemented by Vincent Sanders <vince@kyllikki.org> with extensive
+ * reference to original curl example code
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This example requires libcurl 7.9.7 or later.
+ */
+
+#include <stdio.h>
+#include <string.h>
+#ifndef WIN32
+# include <sys/time.h>
+#endif
+#include <stdlib.h>
+#include <errno.h>
+
+#include <curl/curl.h>
+
+enum fcurl_type_e { CFTYPE_NONE=0, CFTYPE_FILE=1, CFTYPE_CURL=2 };
+
+struct fcurl_data
+{
+ enum fcurl_type_e type; /* type of handle */
+ union {
+ CURL *curl;
+ FILE *file;
+ } handle; /* handle */
+
+ char *buffer; /* buffer to store cached data*/
+ int buffer_len; /* currently allocated buffers length */
+ int buffer_pos; /* end of data in buffer*/
+ int still_running; /* Is background url fetch still in progress */
+};
+
+typedef struct fcurl_data URL_FILE;
+
+/* exported functions */
+URL_FILE *url_fopen(const char *url,const char *operation);
+int url_fclose(URL_FILE *file);
+int url_feof(URL_FILE *file);
+size_t url_fread(void *ptr, size_t size, size_t nmemb, URL_FILE *file);
+char * url_fgets(char *ptr, int size, URL_FILE *file);
+void url_rewind(URL_FILE *file);
+
+/* we use a global one for convenience */
+CURLM *multi_handle;
+
+/* curl calls this routine to get more data */
+static size_t
+write_callback(char *buffer,
+ size_t size,
+ size_t nitems,
+ void *userp)
+{
+ char *newbuff;
+ int rembuff;
+
+ URL_FILE *url = (URL_FILE *)userp;
+ size *= nitems;
+
+ rembuff=url->buffer_len - url->buffer_pos; /* remaining space in buffer */
+
+ if(size > rembuff)
+ {
+ /* not enough space in buffer */
+ newbuff=realloc(url->buffer,url->buffer_len + (size - rembuff));
+ if(newbuff==NULL)
+ {
+ fprintf(stderr,"callback buffer grow failed\n");
+ size=rembuff;
+ }
+ else
+ {
+ /* realloc suceeded increase buffer size*/
+ url->buffer_len+=size - rembuff;
+ url->buffer=newbuff;
+
+ /*printf("Callback buffer grown to %d bytes\n",url->buffer_len);*/
+ }
+ }
+
+ memcpy(&url->buffer[url->buffer_pos], buffer, size);
+ url->buffer_pos += size;
+
+ /*fprintf(stderr, "callback %d size bytes\n", size);*/
+
+ return size;
+}
+
+/* use to attempt to fill the read buffer up to requested number of bytes */
+static int
+fill_buffer(URL_FILE *file,int want,int waittime)
+{
+ fd_set fdread;
+ fd_set fdwrite;
+ fd_set fdexcep;
+ struct timeval timeout;
+ int rc;
+
+ /* only attempt to fill buffer if transactions still running and buffer
+ * doesnt exceed required size already
+ */
+ if((!file->still_running) || (file->buffer_pos > want))
+ return 0;
+
+ /* attempt to fill buffer */
+ do
+ {
+ int maxfd = -1;
+ long curl_timeo = -1;
+
+ FD_ZERO(&fdread);
+ FD_ZERO(&fdwrite);
+ FD_ZERO(&fdexcep);
+
+ /* set a suitable timeout to fail on */
+ timeout.tv_sec = 60; /* 1 minute */
+ timeout.tv_usec = 0;
+
+ curl_multi_timeout(multi_handle, &curl_timeo);
+ if(curl_timeo >= 0) {
+ timeout.tv_sec = curl_timeo / 1000;
+ if(timeout.tv_sec > 1)
+ timeout.tv_sec = 1;
+ else
+ timeout.tv_usec = (curl_timeo % 1000) * 1000;
+ }
+
+ /* get file descriptors from the transfers */
+ curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd);
+
+ /* In a real-world program you OF COURSE check the return code of the
+ function calls. On success, the value of maxfd is guaranteed to be
+ greater or equal than -1. We call select(maxfd + 1, ...), specially
+ in case of (maxfd == -1), we call select(0, ...), which is basically
+ equal to sleep. */
+
+ rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout);
+
+ switch(rc) {
+ case -1:
+ /* select error */
+ break;
+
+ case 0:
+ break;
+
+ default:
+ /* timeout or readable/writable sockets */
+ curl_multi_perform(multi_handle, &file->still_running);
+ break;
+ }
+ } while(file->still_running && (file->buffer_pos < want));
+ return 1;
+}
+
+/* use to remove want bytes from the front of a files buffer */
+static int
+use_buffer(URL_FILE *file,int want)
+{
+ /* sort out buffer */
+ if((file->buffer_pos - want) <=0)
+ {
+ /* ditch buffer - write will recreate */
+ if(file->buffer)
+ free(file->buffer);
+
+ file->buffer=NULL;
+ file->buffer_pos=0;
+ file->buffer_len=0;
+ }
+ else
+ {
+ /* move rest down make it available for later */
+ memmove(file->buffer,
+ &file->buffer[want],
+ (file->buffer_pos - want));
+
+ file->buffer_pos -= want;
+ }
+ return 0;
+}
+
+
+
+URL_FILE *
+url_fopen(const char *url,const char *operation)
+{
+ /* this code could check for URLs or types in the 'url' and
+ basicly use the real fopen() for standard files */
+
+ URL_FILE *file;
+ (void)operation;
+
+ file = malloc(sizeof(URL_FILE));
+ if(!file)
+ return NULL;
+
+ memset(file, 0, sizeof(URL_FILE));
+
+ if((file->handle.file=fopen(url,operation)))
+ {
+ file->type = CFTYPE_FILE; /* marked as URL */
+ }
+ else
+ {
+ file->type = CFTYPE_CURL; /* marked as URL */
+ file->handle.curl = curl_easy_init();
+
+ curl_easy_setopt(file->handle.curl, CURLOPT_URL, url);
+ curl_easy_setopt(file->handle.curl, CURLOPT_WRITEDATA, file);
+ curl_easy_setopt(file->handle.curl, CURLOPT_VERBOSE, 0L);
+ curl_easy_setopt(file->handle.curl, CURLOPT_WRITEFUNCTION, write_callback);
+
+ if(!multi_handle)
+ multi_handle = curl_multi_init();
+
+ curl_multi_add_handle(multi_handle, file->handle.curl);
+
+ /* lets start the fetch */
+ curl_multi_perform(multi_handle, &file->still_running);
+
+ if((file->buffer_pos == 0) && (!file->still_running))
+ {
+ /* if still_running is 0 now, we should return NULL */
+
+ /* make sure the easy handle is not in the multi handle anymore */
+ curl_multi_remove_handle(multi_handle, file->handle.curl);
+
+ /* cleanup */
+ curl_easy_cleanup(file->handle.curl);
+
+ free(file);
+
+ file = NULL;
+ }
+ }
+ return file;
+}
+
+int
+url_fclose(URL_FILE *file)
+{
+ int ret=0;/* default is good return */
+
+ switch(file->type)
+ {
+ case CFTYPE_FILE:
+ ret=fclose(file->handle.file); /* passthrough */
+ break;
+
+ case CFTYPE_CURL:
+ /* make sure the easy handle is not in the multi handle anymore */
+ curl_multi_remove_handle(multi_handle, file->handle.curl);
+
+ /* cleanup */
+ curl_easy_cleanup(file->handle.curl);
+ break;
+
+ default: /* unknown or supported type - oh dear */
+ ret=EOF;
+ errno=EBADF;
+ break;
+
+ }
+
+ if(file->buffer)
+ free(file->buffer);/* free any allocated buffer space */
+
+ free(file);
+
+ return ret;
+}
+
+int
+url_feof(URL_FILE *file)
+{
+ int ret=0;
+
+ switch(file->type)
+ {
+ case CFTYPE_FILE:
+ ret=feof(file->handle.file);
+ break;
+
+ case CFTYPE_CURL:
+ if((file->buffer_pos == 0) && (!file->still_running))
+ ret = 1;
+ break;
+ default: /* unknown or supported type - oh dear */
+ ret=-1;
+ errno=EBADF;
+ break;
+ }
+ return ret;
+}
+
+size_t
+url_fread(void *ptr, size_t size, size_t nmemb, URL_FILE *file)
+{
+ size_t want;
+
+ switch(file->type)
+ {
+ case CFTYPE_FILE:
+ want=fread(ptr,size,nmemb,file->handle.file);
+ break;
+
+ case CFTYPE_CURL:
+ want = nmemb * size;
+
+ fill_buffer(file,want,1);
+
+ /* check if theres data in the buffer - if not fill_buffer()
+ * either errored or EOF */
+ if(!file->buffer_pos)
+ return 0;
+
+ /* ensure only available data is considered */
+ if(file->buffer_pos < want)
+ want = file->buffer_pos;
+
+ /* xfer data to caller */
+ memcpy(ptr, file->buffer, want);
+
+ use_buffer(file,want);
+
+ want = want / size; /* number of items - nb correct op - checked
+ * with glibc code*/
+
+ /*printf("(fread) return %d bytes %d left\n", want,file->buffer_pos);*/
+ break;
+
+ default: /* unknown or supported type - oh dear */
+ want=0;
+ errno=EBADF;
+ break;
+
+ }
+ return want;
+}
+
+char *
+url_fgets(char *ptr, int size, URL_FILE *file)
+{
+ int want = size - 1;/* always need to leave room for zero termination */
+ int loop;
+
+ switch(file->type)
+ {
+ case CFTYPE_FILE:
+ ptr = fgets(ptr,size,file->handle.file);
+ break;
+
+ case CFTYPE_CURL:
+ fill_buffer(file,want,1);
+
+ /* check if theres data in the buffer - if not fill either errored or
+ * EOF */
+ if(!file->buffer_pos)
+ return NULL;
+
+ /* ensure only available data is considered */
+ if(file->buffer_pos < want)
+ want = file->buffer_pos;
+
+ /*buffer contains data */
+ /* look for newline or eof */
+ for(loop=0;loop < want;loop++)
+ {
+ if(file->buffer[loop] == '\n')
+ {
+ want=loop+1;/* include newline */
+ break;
+ }
+ }
+
+ /* xfer data to caller */
+ memcpy(ptr, file->buffer, want);
+ ptr[want]=0;/* allways null terminate */
+
+ use_buffer(file,want);
+
+ /*printf("(fgets) return %d bytes %d left\n", want,file->buffer_pos);*/
+ break;
+
+ default: /* unknown or supported type - oh dear */
+ ptr=NULL;
+ errno=EBADF;
+ break;
+ }
+
+ return ptr;/*success */
+}
+
+void
+url_rewind(URL_FILE *file)
+{
+ switch(file->type)
+ {
+ case CFTYPE_FILE:
+ rewind(file->handle.file); /* passthrough */
+ break;
+
+ case CFTYPE_CURL:
+ /* halt transaction */
+ curl_multi_remove_handle(multi_handle, file->handle.curl);
+
+ /* restart */
+ curl_multi_add_handle(multi_handle, file->handle.curl);
+
+ /* ditch buffer - write will recreate - resets stream pos*/
+ if(file->buffer)
+ free(file->buffer);
+
+ file->buffer=NULL;
+ file->buffer_pos=0;
+ file->buffer_len=0;
+
+ break;
+
+ default: /* unknown or supported type - oh dear */
+ break;
+
+ }
+
+}
+
+
+/* Small main program to retrive from a url using fgets and fread saving the
+ * output to two test files (note the fgets method will corrupt binary files if
+ * they contain 0 chars */
+int
+main(int argc, char *argv[])
+{
+ URL_FILE *handle;
+ FILE *outf;
+
+ int nread;
+ char buffer[256];
+ const char *url;
+
+ if(argc < 2)
+ {
+ url="http://192.168.7.3/testfile";/* default to testurl */
+ }
+ else
+ {
+ url=argv[1];/* use passed url */
+ }
+
+ /* copy from url line by line with fgets */
+ outf=fopen("fgets.test","w+");
+ if(!outf)
+ {
+ perror("couldn't open fgets output file\n");
+ return 1;
+ }
+
+ handle = url_fopen(url, "r");
+ if(!handle)
+ {
+ printf("couldn't url_fopen() %s\n", url);
+ fclose(outf);
+ return 2;
+ }
+
+ while(!url_feof(handle))
+ {
+ url_fgets(buffer,sizeof(buffer),handle);
+ fwrite(buffer,1,strlen(buffer),outf);
+ }
+
+ url_fclose(handle);
+
+ fclose(outf);
+
+
+ /* Copy from url with fread */
+ outf=fopen("fread.test","w+");
+ if(!outf)
+ {
+ perror("couldn't open fread output file\n");
+ return 1;
+ }
+
+ handle = url_fopen("testfile", "r");
+ if(!handle) {
+ printf("couldn't url_fopen() testfile\n");
+ fclose(outf);
+ return 2;
+ }
+
+ do {
+ nread = url_fread(buffer, 1,sizeof(buffer), handle);
+ fwrite(buffer,1,nread,outf);
+ } while(nread);
+
+ url_fclose(handle);
+
+ fclose(outf);
+
+
+ /* Test rewind */
+ outf=fopen("rewind.test","w+");
+ if(!outf)
+ {
+ perror("couldn't open fread output file\n");
+ return 1;
+ }
+
+ handle = url_fopen("testfile", "r");
+ if(!handle) {
+ printf("couldn't url_fopen() testfile\n");
+ fclose(outf);
+ return 2;
+ }
+
+ nread = url_fread(buffer, 1,sizeof(buffer), handle);
+ fwrite(buffer,1,nread,outf);
+ url_rewind(handle);
+
+ buffer[0]='\n';
+ fwrite(buffer,1,1,outf);
+
+ nread = url_fread(buffer, 1,sizeof(buffer), handle);
+ fwrite(buffer,1,nread,outf);
+
+
+ url_fclose(handle);
+
+ fclose(outf);
+
+
+ return 0;/* all done */
+}
diff --git a/docs/examples/ftp-wildcard.c b/docs/examples/ftp-wildcard.c
new file mode 100644
index 0000000..0186a38
--- /dev/null
+++ b/docs/examples/ftp-wildcard.c
@@ -0,0 +1,135 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include <curl/curl.h>
+#include <stdio.h>
+
+struct callback_data {
+ FILE *output;
+};
+
+static long file_is_comming(struct curl_fileinfo *finfo,
+ struct callback_data *data,
+ int remains);
+
+static long file_is_downloaded(struct callback_data *data);
+
+static size_t write_it(char *buff, size_t size, size_t nmemb,
+ struct callback_data *data);
+
+int main(int argc, char **argv)
+{
+ int rc = CURLE_OK;
+
+ /* curl easy handle */
+ CURL *handle;
+
+ /* help data */
+ struct callback_data data = { 0 };
+
+ /* global initialization */
+ rc = curl_global_init(CURL_GLOBAL_ALL);
+ if(rc)
+ return rc;
+
+ /* initialization of easy handle */
+ handle = curl_easy_init();
+ if(!handle) {
+ curl_global_cleanup();
+ return CURLE_OUT_OF_MEMORY;
+ }
+
+ /* turn on wildcard matching */
+ curl_easy_setopt(handle, CURLOPT_WILDCARDMATCH, 1L);
+
+ /* callback is called before download of concrete file started */
+ curl_easy_setopt(handle, CURLOPT_CHUNK_BGN_FUNCTION, file_is_comming);
+
+ /* callback is called after data from the file have been transferred */
+ curl_easy_setopt(handle, CURLOPT_CHUNK_END_FUNCTION, file_is_downloaded);
+
+ /* this callback will write contents into files */
+ curl_easy_setopt(handle, CURLOPT_WRITEFUNCTION, write_it);
+
+ /* put transfer data into callbacks */
+ curl_easy_setopt(handle, CURLOPT_CHUNK_DATA, &data);
+ curl_easy_setopt(handle, CURLOPT_WRITEDATA, &data);
+
+ /* curl_easy_setopt(handle, CURLOPT_VERBOSE, 1L); */
+
+ /* set an URL containing wildcard pattern (only in the last part) */
+ if(argc == 2)
+ curl_easy_setopt(handle, CURLOPT_URL, argv[1]);
+ else
+ curl_easy_setopt(handle, CURLOPT_URL, "ftp://example.com/test/*");
+
+ /* and start transfer! */
+ rc = curl_easy_perform(handle);
+
+ curl_easy_cleanup(handle);
+ curl_global_cleanup();
+ return rc;
+}
+
+static long file_is_comming(struct curl_fileinfo *finfo,
+ struct callback_data *data,
+ int remains)
+{
+ printf("%3d %40s %10luB ", remains, finfo->filename,
+ (unsigned long)finfo->size);
+
+ switch(finfo->filetype) {
+ case CURLFILETYPE_DIRECTORY:
+ printf(" DIR\n");
+ break;
+ case CURLFILETYPE_FILE:
+ printf("FILE ");
+ break;
+ default:
+ printf("OTHER\n");
+ break;
+ }
+
+ if(finfo->filetype == CURLFILETYPE_FILE) {
+ /* do not transfer files >= 50B */
+ if(finfo->size > 50) {
+ printf("SKIPPED\n");
+ return CURL_CHUNK_BGN_FUNC_SKIP;
+ }
+
+ data->output = fopen(finfo->filename, "w");
+ if(!data->output) {
+ return CURL_CHUNK_BGN_FUNC_FAIL;
+ }
+ }
+
+ return CURL_CHUNK_BGN_FUNC_OK;
+}
+
+static long file_is_downloaded(struct callback_data *data)
+{
+ if(data->output) {
+ printf("DOWNLOADED\n");
+ fclose(data->output);
+ data->output = 0x0;
+ }
+ return CURL_CHUNK_END_FUNC_OK;
+}
+
+static size_t write_it(char *buff, size_t size, size_t nmemb,
+ struct callback_data *data)
+{
+ size_t written = 0;
+ if(data->output)
+ written = fwrite(buff, size, nmemb, data->output);
+ else
+ /* listing output */
+ written = fwrite(buff, size, nmemb, stdout);
+ return written;
+}
diff --git a/docs/examples/ftpget.c b/docs/examples/ftpget.c
new file mode 100644
index 0000000..3c3888a
--- /dev/null
+++ b/docs/examples/ftpget.c
@@ -0,0 +1,84 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include <stdio.h>
+
+#include <curl/curl.h>
+#include <curl/types.h>
+#include <curl/easy.h>
+
+/*
+ * This is an example showing how to get a single file from an FTP server.
+ * It delays the actual destination file creation until the first write
+ * callback so that it won't create an empty file in case the remote file
+ * doesn't exist or something else fails.
+ */
+
+struct FtpFile {
+ const char *filename;
+ FILE *stream;
+};
+
+static size_t my_fwrite(void *buffer, size_t size, size_t nmemb, void *stream)
+{
+ struct FtpFile *out=(struct FtpFile *)stream;
+ if(out && !out->stream) {
+ /* open file for writing */
+ out->stream=fopen(out->filename, "wb");
+ if(!out->stream)
+ return -1; /* failure, can't open file to write */
+ }
+ return fwrite(buffer, size, nmemb, out->stream);
+}
+
+
+int main(void)
+{
+ CURL *curl;
+ CURLcode res;
+ struct FtpFile ftpfile={
+ "curl.tar.gz", /* name to store the file as if succesful */
+ NULL
+ };
+
+ curl_global_init(CURL_GLOBAL_DEFAULT);
+
+ curl = curl_easy_init();
+ if(curl) {
+ /*
+ * You better replace the URL with one that works!
+ */
+ curl_easy_setopt(curl, CURLOPT_URL,
+ "ftp://ftp.example.com/pub/www/utilities/curl/curl-7.9.2.tar.gz");
+ /* Define our callback to get called when there's data to be written */
+ curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, my_fwrite);
+ /* Set a pointer to our struct to pass to the callback */
+ curl_easy_setopt(curl, CURLOPT_WRITEDATA, &ftpfile);
+
+ /* Switch on full protocol/debug output */
+ curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
+
+ res = curl_easy_perform(curl);
+
+ /* always cleanup */
+ curl_easy_cleanup(curl);
+
+ if(CURLE_OK != res) {
+ /* we failed */
+ fprintf(stderr, "curl told us %d\n", res);
+ }
+ }
+
+ if(ftpfile.stream)
+ fclose(ftpfile.stream); /* close the local file */
+
+ curl_global_cleanup();
+
+ return 0;
+}
diff --git a/docs/examples/ftpgetinfo.c b/docs/examples/ftpgetinfo.c
new file mode 100644
index 0000000..c4e234f
--- /dev/null
+++ b/docs/examples/ftpgetinfo.c
@@ -0,0 +1,75 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include <stdio.h>
+#include <string.h>
+
+#include <curl/curl.h>
+#include <curl/types.h>
+#include <curl/easy.h>
+
+/*
+ * This is an example showing how to check a single file's size and mtime
+ * from an FTP server.
+ */
+
+static size_t throw_away(void *ptr, size_t size, size_t nmemb, void *data)
+{
+ /* we are not interested in the headers itself,
+ so we only return the size we would have saved ... */
+ return (size_t)(size * nmemb);
+}
+
+int main(void)
+{
+ char ftpurl[] = "ftp://ftp.example.com/gnu/binutils/binutils-2.19.1.tar.bz2";
+ CURL *curl;
+ CURLcode res;
+ const time_t filetime;
+ const double filesize;
+ const char *filename = strrchr(ftpurl, '/') + 1;
+
+ curl_global_init(CURL_GLOBAL_DEFAULT);
+
+ curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, ftpurl);
+ /* No download if the file */
+ curl_easy_setopt(curl, CURLOPT_NOBODY, 1L);
+ /* Ask for filetime */
+ curl_easy_setopt(curl, CURLOPT_FILETIME, 1L);
+ /* No header output: TODO 14.1 http-style HEAD output for ftp */
+ curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, throw_away);
+ curl_easy_setopt(curl, CURLOPT_HEADER, 0L);
+ /* Switch on full protocol/debug output */
+ /* curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L); */
+
+ res = curl_easy_perform(curl);
+
+ if(CURLE_OK == res) {
+ /* http://curl.haxx.se/libcurl/c/curl_easy_getinfo.html */
+ res = curl_easy_getinfo(curl, CURLINFO_FILETIME, &filetime);
+ if((CURLE_OK == res) && filetime)
+ printf("filetime %s: %s", filename, ctime(&filetime));
+ res = curl_easy_getinfo(curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &filesize);
+ if((CURLE_OK == res) && filesize)
+ printf("filesize %s: %0.0f bytes\n", filename, filesize);
+ } else {
+ /* we failed */
+ fprintf(stderr, "curl told us %d\n", res);
+ }
+
+ /* always cleanup */
+ curl_easy_cleanup(curl);
+ }
+
+ curl_global_cleanup();
+
+ return 0;
+}
diff --git a/docs/examples/ftpgetresp.c b/docs/examples/ftpgetresp.c
new file mode 100644
index 0000000..2122c4f
--- /dev/null
+++ b/docs/examples/ftpgetresp.c
@@ -0,0 +1,62 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include <stdio.h>
+
+#include <curl/curl.h>
+#include <curl/types.h>
+#include <curl/easy.h>
+
+/*
+ * Similar to ftpget.c but this also stores the received response-lines
+ * in a separate file using our own callback!
+ *
+ * This functionality was introduced in libcurl 7.9.3.
+ */
+
+static size_t
+write_response(void *ptr, size_t size, size_t nmemb, void *data)
+{
+ FILE *writehere = (FILE *)data;
+ return fwrite(ptr, size, nmemb, writehere);
+}
+
+int main(int argc, char **argv)
+{
+ CURL *curl;
+ CURLcode res;
+ FILE *ftpfile;
+ FILE *respfile;
+
+ /* local file name to store the file as */
+ ftpfile = fopen("ftp-list", "wb"); /* b is binary, needed on win32 */
+
+ /* local file name to store the FTP server's response lines in */
+ respfile = fopen("ftp-responses", "wb"); /* b is binary, needed on win32 */
+
+ curl = curl_easy_init();
+ if(curl) {
+ /* Get a file listing from sunet */
+ curl_easy_setopt(curl, CURLOPT_URL, "ftp://ftp.example.com/");
+ curl_easy_setopt(curl, CURLOPT_WRITEDATA, ftpfile);
+ /* If you intend to use this on windows with a libcurl DLL, you must use
+ CURLOPT_WRITEFUNCTION as well */
+ curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, write_response);
+ curl_easy_setopt(curl, CURLOPT_WRITEHEADER, respfile);
+ res = curl_easy_perform(curl);
+
+ /* always cleanup */
+ curl_easy_cleanup(curl);
+ }
+
+ fclose(ftpfile); /* close the local file */
+ fclose(respfile); /* close the response file */
+
+ return 0;
+}
diff --git a/docs/examples/ftpupload.c b/docs/examples/ftpupload.c
new file mode 100644
index 0000000..f1f66c0
--- /dev/null
+++ b/docs/examples/ftpupload.c
@@ -0,0 +1,120 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include <stdio.h>
+#include <string.h>
+
+#include <curl/curl.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <errno.h>
+#ifdef WIN32
+#include <io.h>
+#else
+#include <unistd.h>
+#endif
+
+/*
+ * This example shows an FTP upload, with a rename of the file just after
+ * a successful upload.
+ *
+ * Example based on source code provided by Erick Nuwendam. Thanks!
+ */
+
+#define LOCAL_FILE "/tmp/uploadthis.txt"
+#define UPLOAD_FILE_AS "while-uploading.txt"
+#define REMOTE_URL "ftp://example.com/" UPLOAD_FILE_AS
+#define RENAME_FILE_TO "renamed-and-fine.txt"
+
+/* NOTE: if you want this example to work on Windows with libcurl as a
+ DLL, you MUST also provide a read callback with CURLOPT_READFUNCTION.
+ Failing to do so will give you a crash since a DLL may not use the
+ variable's memory when passed in to it from an app like this. */
+static size_t read_callback(void *ptr, size_t size, size_t nmemb, void *stream)
+{
+ /* in real-world cases, this would probably get this data differently
+ as this fread() stuff is exactly what the library already would do
+ by default internally */
+ size_t retcode = fread(ptr, size, nmemb, stream);
+
+ fprintf(stderr, "*** We read %d bytes from file\n", retcode);
+ return retcode;
+}
+
+int main(int argc, char **argv)
+{
+ CURL *curl;
+ CURLcode res;
+ FILE *hd_src;
+ struct stat file_info;
+ curl_off_t fsize;
+
+ struct curl_slist *headerlist=NULL;
+ static const char buf_1 [] = "RNFR " UPLOAD_FILE_AS;
+ static const char buf_2 [] = "RNTO " RENAME_FILE_TO;
+
+ /* get the file size of the local file */
+ if(stat(LOCAL_FILE, &file_info)) {
+ printf("Couldnt open '%s': %s\n", LOCAL_FILE, strerror(errno));
+ return 1;
+ }
+ fsize = (curl_off_t)file_info.st_size;
+
+ printf("Local file size: %" CURL_FORMAT_CURL_OFF_T " bytes.\n", fsize);
+
+ /* get a FILE * of the same file */
+ hd_src = fopen(LOCAL_FILE, "rb");
+
+ /* In windows, this will init the winsock stuff */
+ curl_global_init(CURL_GLOBAL_ALL);
+
+ /* get a curl handle */
+ curl = curl_easy_init();
+ if(curl) {
+ /* build a list of commands to pass to libcurl */
+ headerlist = curl_slist_append(headerlist, buf_1);
+ headerlist = curl_slist_append(headerlist, buf_2);
+
+ /* we want to use our own read function */
+ curl_easy_setopt(curl, CURLOPT_READFUNCTION, read_callback);
+
+ /* enable uploading */
+ curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
+
+ /* specify target */
+ curl_easy_setopt(curl,CURLOPT_URL, REMOTE_URL);
+
+ /* pass in that last of FTP commands to run after the transfer */
+ curl_easy_setopt(curl, CURLOPT_POSTQUOTE, headerlist);
+
+ /* now specify which file to upload */
+ curl_easy_setopt(curl, CURLOPT_READDATA, hd_src);
+
+ /* Set the size of the file to upload (optional). If you give a *_LARGE
+ option you MUST make sure that the type of the passed-in argument is a
+ curl_off_t. If you use CURLOPT_INFILESIZE (without _LARGE) you must
+ make sure that to pass in a type 'long' argument. */
+ curl_easy_setopt(curl, CURLOPT_INFILESIZE_LARGE,
+ (curl_off_t)fsize);
+
+ /* Now run off and do what you've been told! */
+ res = curl_easy_perform(curl);
+
+ /* clean up the FTP commands list */
+ curl_slist_free_all (headerlist);
+
+ /* always cleanup */
+ curl_easy_cleanup(curl);
+ }
+ fclose(hd_src); /* close the local file */
+
+ curl_global_cleanup();
+ return 0;
+}
diff --git a/docs/examples/ftpuploadresume.c b/docs/examples/ftpuploadresume.c
new file mode 100644
index 0000000..81a790a
--- /dev/null
+++ b/docs/examples/ftpuploadresume.c
@@ -0,0 +1,161 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ *
+ * Upload to FTP, resuming failed transfers
+ *
+ * Compile for MinGW like this:
+ * gcc -Wall -pedantic -std=c99 ftpuploadwithresume.c -o ftpuploadresume.exe
+ * -lcurl -lmsvcr70
+ *
+ * Written by Philip Bock
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+
+#include <curl/curl.h>
+
+#if defined(_MSC_VER) && (_MSC_VER < 1300)
+# error _snscanf requires MSVC 7.0 or later.
+#endif
+
+/* The MinGW headers are missing a few Win32 function definitions,
+ you shouldn't need this if you use VC++ */
+#ifdef __MINGW32__
+int __cdecl _snscanf(const char * input, size_t length, const char * format, ...);
+#endif
+
+
+/* parse headers for Content-Length */
+size_t getcontentlengthfunc(void *ptr, size_t size, size_t nmemb, void *stream)
+{
+ int r;
+ long len = 0;
+
+ /* _snscanf() is Win32 specific */
+ r = _snscanf(ptr, size * nmemb, "Content-Length: %ld\n", &len);
+
+ if (r) /* Microsoft: we don't read the specs */
+ *((long *) stream) = len;
+
+ return size * nmemb;
+}
+
+/* discard downloaded data */
+size_t discardfunc(void *ptr, size_t size, size_t nmemb, void *stream)
+{
+ return size * nmemb;
+}
+
+/* read data to upload */
+size_t readfunc(void *ptr, size_t size, size_t nmemb, void *stream)
+{
+ FILE *f = stream;
+ size_t n;
+
+ if (ferror(f))
+ return CURL_READFUNC_ABORT;
+
+ n = fread(ptr, size, nmemb, f) * size;
+
+ return n;
+}
+
+
+int upload(CURL *curlhandle, const char * remotepath, const char * localpath,
+ long timeout, long tries)
+{
+ FILE *f;
+ long uploaded_len = 0;
+ CURLcode r = CURLE_GOT_NOTHING;
+ int c;
+
+ f = fopen(localpath, "rb");
+ if (f == NULL) {
+ perror(NULL);
+ return 0;
+ }
+
+ curl_easy_setopt(curlhandle, CURLOPT_UPLOAD, 1L);
+
+ curl_easy_setopt(curlhandle, CURLOPT_URL, remotepath);
+
+ if (timeout)
+ curl_easy_setopt(curlhandle, CURLOPT_FTP_RESPONSE_TIMEOUT, timeout);
+
+ curl_easy_setopt(curlhandle, CURLOPT_HEADERFUNCTION, getcontentlengthfunc);
+ curl_easy_setopt(curlhandle, CURLOPT_HEADERDATA, &uploaded_len);
+
+ curl_easy_setopt(curlhandle, CURLOPT_WRITEFUNCTION, discardfunc);
+
+ curl_easy_setopt(curlhandle, CURLOPT_READFUNCTION, readfunc);
+ curl_easy_setopt(curlhandle, CURLOPT_READDATA, f);
+
+ curl_easy_setopt(curlhandle, CURLOPT_FTPPORT, "-"); /* disable passive mode */
+ curl_easy_setopt(curlhandle, CURLOPT_FTP_CREATE_MISSING_DIRS, 1L);
+
+ curl_easy_setopt(curlhandle, CURLOPT_VERBOSE, 1L);
+
+ for (c = 0; (r != CURLE_OK) && (c < tries); c++) {
+ /* are we resuming? */
+ if (c) { /* yes */
+ /* determine the length of the file already written */
+
+ /*
+ * With NOBODY and NOHEADER, libcurl will issue a SIZE
+ * command, but the only way to retrieve the result is
+ * to parse the returned Content-Length header. Thus,
+ * getcontentlengthfunc(). We need discardfunc() above
+ * because HEADER will dump the headers to stdout
+ * without it.
+ */
+ curl_easy_setopt(curlhandle, CURLOPT_NOBODY, 1L);
+ curl_easy_setopt(curlhandle, CURLOPT_HEADER, 1L);
+
+ r = curl_easy_perform(curlhandle);
+ if (r != CURLE_OK)
+ continue;
+
+ curl_easy_setopt(curlhandle, CURLOPT_NOBODY, 0L);
+ curl_easy_setopt(curlhandle, CURLOPT_HEADER, 0L);
+
+ fseek(f, uploaded_len, SEEK_SET);
+
+ curl_easy_setopt(curlhandle, CURLOPT_APPEND, 1L);
+ }
+ else { /* no */
+ curl_easy_setopt(curlhandle, CURLOPT_APPEND, 0L);
+ }
+
+ r = curl_easy_perform(curlhandle);
+ }
+
+ fclose(f);
+
+ if (r == CURLE_OK)
+ return 1;
+ else {
+ fprintf(stderr, "%s\n", curl_easy_strerror(r));
+ return 0;
+ }
+}
+
+int main(int c, char **argv)
+{
+ CURL *curlhandle = NULL;
+
+ curl_global_init(CURL_GLOBAL_ALL);
+ curlhandle = curl_easy_init();
+
+ upload(curlhandle, "ftp://user:pass@example.com/path/file", "C:\\file", 0, 3);
+
+ curl_easy_cleanup(curlhandle);
+ curl_global_cleanup();
+
+ return 0;
+}
diff --git a/docs/examples/getinfo.c b/docs/examples/getinfo.c
new file mode 100644
index 0000000..0d8f1f2
--- /dev/null
+++ b/docs/examples/getinfo.c
@@ -0,0 +1,41 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include <stdio.h>
+#include <curl/curl.h>
+
+int main(void)
+{
+ CURL *curl;
+ CURLcode res;
+
+ /* http://curl.haxx.se/libcurl/c/curl_easy_init.html */
+ curl = curl_easy_init();
+ if(curl) {
+ /* http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTURL */
+ curl_easy_setopt(curl, CURLOPT_URL, "http://www.example.com/");
+ /* http://curl.haxx.se/libcurl/c/curl_easy_perform.html */
+ res = curl_easy_perform(curl);
+
+ if(CURLE_OK == res) {
+ char *ct;
+ /* ask for the content-type */
+ /* http://curl.haxx.se/libcurl/c/curl_easy_getinfo.html */
+ res = curl_easy_getinfo(curl, CURLINFO_CONTENT_TYPE, &ct);
+
+ if((CURLE_OK == res) && ct)
+ printf("We received Content-Type: %s\n", ct);
+ }
+
+ /* always cleanup */
+ /* http://curl.haxx.se/libcurl/c/curl_easy_cleanup.html */
+ curl_easy_cleanup(curl);
+ }
+ return 0;
+}
diff --git a/docs/examples/getinmemory.c b/docs/examples/getinmemory.c
new file mode 100644
index 0000000..635a936
--- /dev/null
+++ b/docs/examples/getinmemory.c
@@ -0,0 +1,99 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ *
+ * Example source code to show how the callback function can be used to
+ * download data into a chunk of memory instead of storing it in a file.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <curl/curl.h>
+
+struct MemoryStruct {
+ char *memory;
+ size_t size;
+};
+
+
+static size_t
+WriteMemoryCallback(void *ptr, size_t size, size_t nmemb, void *data)
+{
+ size_t realsize = size * nmemb;
+ struct MemoryStruct *mem = (struct MemoryStruct *)data;
+
+ mem->memory = realloc(mem->memory, mem->size + realsize + 1);
+ if (mem->memory == NULL) {
+ /* out of memory! */
+ printf("not enough memory (realloc returned NULL)\n");
+ exit(EXIT_FAILURE);
+ }
+
+ memcpy(&(mem->memory[mem->size]), ptr, realsize);
+ mem->size += realsize;
+ mem->memory[mem->size] = 0;
+
+ return realsize;
+}
+
+
+int main(int argc, char **argv)
+{
+ CURL *curl_handle;
+
+ struct MemoryStruct chunk;
+
+ chunk.memory = malloc(1); /* will be grown as needed by the realloc above */
+ chunk.size = 0; /* no data at this point */
+
+ curl_global_init(CURL_GLOBAL_ALL);
+
+ /* init the curl session */
+ curl_handle = curl_easy_init();
+
+ /* specify URL to get */
+ curl_easy_setopt(curl_handle, CURLOPT_URL, "http://www.example.com/");
+
+ /* send all data to this function */
+ curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, WriteMemoryCallback);
+
+ /* we pass our 'chunk' struct to the callback function */
+ curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (void *)&chunk);
+
+ /* some servers don't like requests that are made without a user-agent
+ field, so we provide one */
+ curl_easy_setopt(curl_handle, CURLOPT_USERAGENT, "libcurl-agent/1.0");
+
+ /* get it! */
+ curl_easy_perform(curl_handle);
+
+ /* cleanup curl stuff */
+ curl_easy_cleanup(curl_handle);
+
+ /*
+ * Now, our chunk.memory points to a memory block that is chunk.size
+ * bytes big and contains the remote file.
+ *
+ * Do something nice with it!
+ *
+ * You should be aware of the fact that at this point we might have an
+ * allocated data block, and nothing has yet deallocated that data. So when
+ * you're done with it, you should free() it as a nice application.
+ */
+
+ printf("%lu bytes retrieved\n", chunk.size);
+
+ if(chunk.memory)
+ free(chunk.memory);
+
+ /* we're done with libcurl, so clean it up */
+ curl_global_cleanup();
+
+ return 0;
+}
diff --git a/docs/examples/ghiper.c b/docs/examples/ghiper.c
new file mode 100644
index 0000000..ac11790
--- /dev/null
+++ b/docs/examples/ghiper.c
@@ -0,0 +1,439 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ *
+ * Example application source code using the multi socket interface to
+ * download many files at once.
+ *
+ * Written by Jeff Pohlmeyer
+
+Requires glib-2.x and a (POSIX?) system that has mkfifo().
+
+This is an adaptation of libcurl's "hipev.c" and libevent's "event-test.c"
+sample programs, adapted to use glib's g_io_channel in place of libevent.
+
+When running, the program creates the named pipe "hiper.fifo"
+
+Whenever there is input into the fifo, the program reads the input as a list
+of URL's and creates some new easy handles to fetch each URL via the
+curl_multi "hiper" API.
+
+
+Thus, you can try a single URL:
+ % echo http://www.yahoo.com > hiper.fifo
+
+Or a whole bunch of them:
+ % cat my-url-list > hiper.fifo
+
+The fifo buffer is handled almost instantly, so you can even add more URL's
+while the previous requests are still being downloaded.
+
+This is purely a demo app, all retrieved data is simply discarded by the write
+callback.
+
+*/
+
+
+#include <glib.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <errno.h>
+#include <curl/curl.h>
+
+
+#define MSG_OUT g_print /* Change to "g_error" to write to stderr */
+#define SHOW_VERBOSE 0 /* Set to non-zero for libcurl messages */
+#define SHOW_PROGRESS 0 /* Set to non-zero to enable progress callback */
+
+
+
+/* Global information, common to all connections */
+typedef struct _GlobalInfo {
+ CURLM *multi;
+ guint timer_event;
+ int still_running;
+} GlobalInfo;
+
+
+
+/* Information associated with a specific easy handle */
+typedef struct _ConnInfo {
+ CURL *easy;
+ char *url;
+ GlobalInfo *global;
+ char error[CURL_ERROR_SIZE];
+} ConnInfo;
+
+
+/* Information associated with a specific socket */
+typedef struct _SockInfo {
+ curl_socket_t sockfd;
+ CURL *easy;
+ int action;
+ long timeout;
+ GIOChannel *ch;
+ guint ev;
+ GlobalInfo *global;
+} SockInfo;
+
+
+
+
+/* Die if we get a bad CURLMcode somewhere */
+static void mcode_or_die(const char *where, CURLMcode code) {
+ if ( CURLM_OK != code ) {
+ const char *s;
+ switch (code) {
+ case CURLM_CALL_MULTI_PERFORM: s="CURLM_CALL_MULTI_PERFORM"; break;
+ case CURLM_BAD_HANDLE: s="CURLM_BAD_HANDLE"; break;
+ case CURLM_BAD_EASY_HANDLE: s="CURLM_BAD_EASY_HANDLE"; break;
+ case CURLM_OUT_OF_MEMORY: s="CURLM_OUT_OF_MEMORY"; break;
+ case CURLM_INTERNAL_ERROR: s="CURLM_INTERNAL_ERROR"; break;
+ case CURLM_BAD_SOCKET: s="CURLM_BAD_SOCKET"; break;
+ case CURLM_UNKNOWN_OPTION: s="CURLM_UNKNOWN_OPTION"; break;
+ case CURLM_LAST: s="CURLM_LAST"; break;
+ default: s="CURLM_unknown";
+ }
+ MSG_OUT("ERROR: %s returns %s\n", where, s);
+ exit(code);
+ }
+}
+
+
+
+/* Check for completed transfers, and remove their easy handles */
+static void check_multi_info(GlobalInfo *g)
+{
+ char *eff_url;
+ CURLMsg *msg;
+ int msgs_left;
+ ConnInfo *conn;
+ CURL *easy;
+ CURLcode res;
+
+ MSG_OUT("REMAINING: %d\n", g->still_running);
+ while ((msg = curl_multi_info_read(g->multi, &msgs_left))) {
+ if (msg->msg == CURLMSG_DONE) {
+ easy = msg->easy_handle;
+ res = msg->data.result;
+ curl_easy_getinfo(easy, CURLINFO_PRIVATE, &conn);
+ curl_easy_getinfo(easy, CURLINFO_EFFECTIVE_URL, &eff_url);
+ MSG_OUT("DONE: %s => (%d) %s\n", eff_url, res, conn->error);
+ curl_multi_remove_handle(g->multi, easy);
+ free(conn->url);
+ curl_easy_cleanup(easy);
+ free(conn);
+ }
+ }
+}
+
+
+
+/* Called by glib when our timeout expires */
+static gboolean timer_cb(gpointer data)
+{
+ GlobalInfo *g = (GlobalInfo *)data;
+ CURLMcode rc;
+
+ rc = curl_multi_socket_action(g->multi,
+ CURL_SOCKET_TIMEOUT, 0, &g->still_running);
+ mcode_or_die("timer_cb: curl_multi_socket_action", rc);
+ check_multi_info(g);
+ return FALSE;
+}
+
+
+
+/* Update the event timer after curl_multi library calls */
+static int update_timeout_cb(CURLM *multi, long timeout_ms, void *userp)
+{
+ struct timeval timeout;
+ GlobalInfo *g=(GlobalInfo *)userp;
+ timeout.tv_sec = timeout_ms/1000;
+ timeout.tv_usec = (timeout_ms%1000)*1000;
+
+ MSG_OUT("*** update_timeout_cb %ld => %ld:%ld ***\n",
+ timeout_ms, timeout.tv_sec, timeout.tv_usec);
+
+ g->timer_event = g_timeout_add(timeout_ms, timer_cb, g);
+ return 0;
+}
+
+
+
+
+/* Called by glib when we get action on a multi socket */
+static gboolean event_cb(GIOChannel *ch, GIOCondition condition, gpointer data)
+{
+ GlobalInfo *g = (GlobalInfo*) data;
+ CURLMcode rc;
+ int fd=g_io_channel_unix_get_fd(ch);
+
+ int action =
+ (condition & G_IO_IN ? CURL_CSELECT_IN : 0) |
+ (condition & G_IO_OUT ? CURL_CSELECT_OUT : 0);
+
+ rc = curl_multi_socket_action(g->multi, fd, action, &g->still_running);
+ mcode_or_die("event_cb: curl_multi_socket_action", rc);
+
+ check_multi_info(g);
+ if(g->still_running) {
+ return TRUE;
+ } else {
+ MSG_OUT("last transfer done, kill timeout\n");
+ if (g->timer_event) { g_source_remove(g->timer_event); }
+ return FALSE;
+ }
+}
+
+
+
+/* Clean up the SockInfo structure */
+static void remsock(SockInfo *f)
+{
+ if (!f) { return; }
+ if (f->ev) { g_source_remove(f->ev); }
+ g_free(f);
+}
+
+
+
+/* Assign information to a SockInfo structure */
+static void setsock(SockInfo*f, curl_socket_t s, CURL*e, int act, GlobalInfo*g)
+{
+ GIOCondition kind =
+ (act&CURL_POLL_IN?G_IO_IN:0)|(act&CURL_POLL_OUT?G_IO_OUT:0);
+
+ f->sockfd = s;
+ f->action = act;
+ f->easy = e;
+ if (f->ev) { g_source_remove(f->ev); }
+ f->ev=g_io_add_watch(f->ch, kind, event_cb,g);
+
+}
+
+
+
+/* Initialize a new SockInfo structure */
+static void addsock(curl_socket_t s, CURL *easy, int action, GlobalInfo *g)
+{
+ SockInfo *fdp = g_malloc0(sizeof(SockInfo));
+
+ fdp->global = g;
+ fdp->ch=g_io_channel_unix_new(s);
+ setsock(fdp, s, easy, action, g);
+ curl_multi_assign(g->multi, s, fdp);
+}
+
+
+
+/* CURLMOPT_SOCKETFUNCTION */
+static int sock_cb(CURL *e, curl_socket_t s, int what, void *cbp, void *sockp)
+{
+ GlobalInfo *g = (GlobalInfo*) cbp;
+ SockInfo *fdp = (SockInfo*) sockp;
+ static const char *whatstr[]={ "none", "IN", "OUT", "INOUT", "REMOVE" };
+
+ MSG_OUT("socket callback: s=%d e=%p what=%s ", s, e, whatstr[what]);
+ if (what == CURL_POLL_REMOVE) {
+ MSG_OUT("\n");
+ remsock(fdp);
+ } else {
+ if (!fdp) {
+ MSG_OUT("Adding data: %s%s\n",
+ what&CURL_POLL_IN?"READ":"",
+ what&CURL_POLL_OUT?"WRITE":"" );
+ addsock(s, e, what, g);
+ }
+ else {
+ MSG_OUT(
+ "Changing action from %d to %d\n", fdp->action, what);
+ setsock(fdp, s, e, what, g);
+ }
+ }
+ return 0;
+}
+
+
+
+/* CURLOPT_WRITEFUNCTION */
+static size_t write_cb(void *ptr, size_t size, size_t nmemb, void *data)
+{
+ size_t realsize = size * nmemb;
+ ConnInfo *conn = (ConnInfo*) data;
+ (void)ptr;
+ (void)conn;
+ return realsize;
+}
+
+
+
+/* CURLOPT_PROGRESSFUNCTION */
+static int prog_cb (void *p, double dltotal, double dlnow, double ult, double uln)
+{
+ ConnInfo *conn = (ConnInfo *)p;
+ MSG_OUT("Progress: %s (%g/%g)\n", conn->url, dlnow, dltotal);
+ return 0;
+}
+
+
+
+/* Create a new easy handle, and add it to the global curl_multi */
+static void new_conn(char *url, GlobalInfo *g )
+{
+ ConnInfo *conn;
+ CURLMcode rc;
+
+ conn = g_malloc0(sizeof(ConnInfo));
+
+ conn->error[0]='\0';
+
+ conn->easy = curl_easy_init();
+ if (!conn->easy) {
+ MSG_OUT("curl_easy_init() failed, exiting!\n");
+ exit(2);
+ }
+ conn->global = g;
+ conn->url = g_strdup(url);
+ curl_easy_setopt(conn->easy, CURLOPT_URL, conn->url);
+ curl_easy_setopt(conn->easy, CURLOPT_WRITEFUNCTION, write_cb);
+ curl_easy_setopt(conn->easy, CURLOPT_WRITEDATA, &conn);
+ curl_easy_setopt(conn->easy, CURLOPT_VERBOSE, (long)SHOW_VERBOSE);
+ curl_easy_setopt(conn->easy, CURLOPT_ERRORBUFFER, conn->error);
+ curl_easy_setopt(conn->easy, CURLOPT_PRIVATE, conn);
+ curl_easy_setopt(conn->easy, CURLOPT_NOPROGRESS, SHOW_PROGRESS?0L:1L);
+ curl_easy_setopt(conn->easy, CURLOPT_PROGRESSFUNCTION, prog_cb);
+ curl_easy_setopt(conn->easy, CURLOPT_PROGRESSDATA, conn);
+ curl_easy_setopt(conn->easy, CURLOPT_FOLLOWLOCATION, 1L);
+ curl_easy_setopt(conn->easy, CURLOPT_CONNECTTIMEOUT, 30L);
+ curl_easy_setopt(conn->easy, CURLOPT_LOW_SPEED_LIMIT, 1L);
+ curl_easy_setopt(conn->easy, CURLOPT_LOW_SPEED_TIME, 30L);
+
+ MSG_OUT("Adding easy %p to multi %p (%s)\n", conn->easy, g->multi, url);
+ rc =curl_multi_add_handle(g->multi, conn->easy);
+ mcode_or_die("new_conn: curl_multi_add_handle", rc);
+
+ /* note that the add_handle() will set a time-out to trigger very soon so
+ that the necessary socket_action() call will be called by this app */
+}
+
+
+/* This gets called by glib whenever data is received from the fifo */
+static gboolean fifo_cb (GIOChannel *ch, GIOCondition condition, gpointer data)
+{
+ #define BUF_SIZE 1024
+ gsize len, tp;
+ gchar *buf, *tmp, *all=NULL;
+ GIOStatus rv;
+
+ do {
+ GError *err=NULL;
+ rv = g_io_channel_read_line (ch,&buf,&len,&tp,&err);
+ if ( buf ) {
+ if (tp) { buf[tp]='\0'; }
+ new_conn(buf,(GlobalInfo*)data);
+ g_free(buf);
+ } else {
+ buf = g_malloc(BUF_SIZE+1);
+ while (TRUE) {
+ buf[BUF_SIZE]='\0';
+ g_io_channel_read_chars(ch,buf,BUF_SIZE,&len,&err);
+ if (len) {
+ buf[len]='\0';
+ if (all) {
+ tmp=all;
+ all=g_strdup_printf("%s%s", tmp, buf);
+ g_free(tmp);
+ } else {
+ all = g_strdup(buf);
+ }
+ } else {
+ break;
+ }
+ }
+ if (all) {
+ new_conn(all,(GlobalInfo*)data);
+ g_free(all);
+ }
+ g_free(buf);
+ }
+ if ( err ) {
+ g_error("fifo_cb: %s", err->message);
+ g_free(err);
+ break;
+ }
+ } while ( (len) && (rv == G_IO_STATUS_NORMAL) );
+ return TRUE;
+}
+
+
+
+
+int init_fifo(void)
+{
+ struct stat st;
+ const char *fifo = "hiper.fifo";
+ int socket;
+
+ if (lstat (fifo, &st) == 0) {
+ if ((st.st_mode & S_IFMT) == S_IFREG) {
+ errno = EEXIST;
+ perror("lstat");
+ exit (1);
+ }
+ }
+
+ unlink (fifo);
+ if (mkfifo (fifo, 0600) == -1) {
+ perror("mkfifo");
+ exit (1);
+ }
+
+ socket = open (fifo, O_RDWR | O_NONBLOCK, 0);
+
+ if (socket == -1) {
+ perror("open");
+ exit (1);
+ }
+ MSG_OUT("Now, pipe some URL's into > %s\n", fifo);
+
+ return socket;
+
+}
+
+
+
+
+int main(int argc, char **argv)
+{
+ GlobalInfo *g;
+ CURLMcode rc;
+ GMainLoop*gmain;
+ int fd;
+ GIOChannel* ch;
+ g=g_malloc0(sizeof(GlobalInfo));
+
+ fd=init_fifo();
+ ch=g_io_channel_unix_new(fd);
+ g_io_add_watch(ch,G_IO_IN,fifo_cb,g);
+ gmain=g_main_loop_new(NULL,FALSE);
+ g->multi = curl_multi_init();
+ curl_multi_setopt(g->multi, CURLMOPT_SOCKETFUNCTION, sock_cb);
+ curl_multi_setopt(g->multi, CURLMOPT_SOCKETDATA, g);
+ curl_multi_setopt(g->multi, CURLMOPT_TIMERFUNCTION, update_timeout_cb);
+ curl_multi_setopt(g->multi, CURLMOPT_TIMERDATA, g);
+
+ /* we don't call any curl_multi_socket*() function yet as we have no handles
+ added! */
+
+ g_main_loop_run(gmain);
+ curl_multi_cleanup(g->multi);
+ return 0;
+}
diff --git a/docs/examples/hiperfifo.c b/docs/examples/hiperfifo.c
new file mode 100644
index 0000000..c909687
--- /dev/null
+++ b/docs/examples/hiperfifo.c
@@ -0,0 +1,405 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ *
+ * Example application source code using the multi socket interface to
+ * download many files at once.
+ *
+ * Written by Jeff Pohlmeyer
+
+Requires libevent and a (POSIX?) system that has mkfifo().
+
+This is an adaptation of libcurl's "hipev.c" and libevent's "event-test.c"
+sample programs.
+
+When running, the program creates the named pipe "hiper.fifo"
+
+Whenever there is input into the fifo, the program reads the input as a list
+of URL's and creates some new easy handles to fetch each URL via the
+curl_multi "hiper" API.
+
+
+Thus, you can try a single URL:
+ % echo http://www.yahoo.com > hiper.fifo
+
+Or a whole bunch of them:
+ % cat my-url-list > hiper.fifo
+
+The fifo buffer is handled almost instantly, so you can even add more URL's
+while the previous requests are still being downloaded.
+
+Note:
+ For the sake of simplicity, URL length is limited to 1023 char's !
+
+This is purely a demo app, all retrieved data is simply discarded by the write
+callback.
+
+*/
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <sys/time.h>
+#include <time.h>
+#include <unistd.h>
+#include <sys/poll.h>
+#include <curl/curl.h>
+#include <event.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+#include <errno.h>
+
+
+#define MSG_OUT stdout /* Send info to stdout, change to stderr if you want */
+
+
+/* Global information, common to all connections */
+typedef struct _GlobalInfo {
+ struct event fifo_event;
+ struct event timer_event;
+ CURLM *multi;
+ int still_running;
+ FILE* input;
+} GlobalInfo;
+
+
+/* Information associated with a specific easy handle */
+typedef struct _ConnInfo {
+ CURL *easy;
+ char *url;
+ GlobalInfo *global;
+ char error[CURL_ERROR_SIZE];
+} ConnInfo;
+
+
+/* Information associated with a specific socket */
+typedef struct _SockInfo {
+ curl_socket_t sockfd;
+ CURL *easy;
+ int action;
+ long timeout;
+ struct event ev;
+ int evset;
+ GlobalInfo *global;
+} SockInfo;
+
+
+
+/* Update the event timer after curl_multi library calls */
+static int multi_timer_cb(CURLM *multi, long timeout_ms, GlobalInfo *g)
+{
+ struct timeval timeout;
+ (void)multi; /* unused */
+
+ timeout.tv_sec = timeout_ms/1000;
+ timeout.tv_usec = (timeout_ms%1000)*1000;
+ fprintf(MSG_OUT, "multi_timer_cb: Setting timeout to %ld ms\n", timeout_ms);
+ evtimer_add(&g->timer_event, &timeout);
+ return 0;
+}
+
+/* Die if we get a bad CURLMcode somewhere */
+static void mcode_or_die(const char *where, CURLMcode code)
+{
+ if ( CURLM_OK != code ) {
+ const char *s;
+ switch (code) {
+ case CURLM_CALL_MULTI_PERFORM: s="CURLM_CALL_MULTI_PERFORM"; break;
+ case CURLM_BAD_HANDLE: s="CURLM_BAD_HANDLE"; break;
+ case CURLM_BAD_EASY_HANDLE: s="CURLM_BAD_EASY_HANDLE"; break;
+ case CURLM_OUT_OF_MEMORY: s="CURLM_OUT_OF_MEMORY"; break;
+ case CURLM_INTERNAL_ERROR: s="CURLM_INTERNAL_ERROR"; break;
+ case CURLM_UNKNOWN_OPTION: s="CURLM_UNKNOWN_OPTION"; break;
+ case CURLM_LAST: s="CURLM_LAST"; break;
+ default: s="CURLM_unknown";
+ break;
+ case CURLM_BAD_SOCKET: s="CURLM_BAD_SOCKET";
+ fprintf(MSG_OUT, "ERROR: %s returns %s\n", where, s);
+ /* ignore this error */
+ return;
+ }
+ fprintf(MSG_OUT, "ERROR: %s returns %s\n", where, s);
+ exit(code);
+ }
+}
+
+
+
+/* Check for completed transfers, and remove their easy handles */
+static void check_multi_info(GlobalInfo *g)
+{
+ char *eff_url;
+ CURLMsg *msg;
+ int msgs_left;
+ ConnInfo *conn;
+ CURL *easy;
+ CURLcode res;
+
+ fprintf(MSG_OUT, "REMAINING: %d\n", g->still_running);
+ while ((msg = curl_multi_info_read(g->multi, &msgs_left))) {
+ if (msg->msg == CURLMSG_DONE) {
+ easy = msg->easy_handle;
+ res = msg->data.result;
+ curl_easy_getinfo(easy, CURLINFO_PRIVATE, &conn);
+ curl_easy_getinfo(easy, CURLINFO_EFFECTIVE_URL, &eff_url);
+ fprintf(MSG_OUT, "DONE: %s => (%d) %s\n", eff_url, res, conn->error);
+ curl_multi_remove_handle(g->multi, easy);
+ free(conn->url);
+ curl_easy_cleanup(easy);
+ free(conn);
+ }
+ }
+}
+
+
+
+/* Called by libevent when we get action on a multi socket */
+static void event_cb(int fd, short kind, void *userp)
+{
+ GlobalInfo *g = (GlobalInfo*) userp;
+ CURLMcode rc;
+
+ int action =
+ (kind & EV_READ ? CURL_CSELECT_IN : 0) |
+ (kind & EV_WRITE ? CURL_CSELECT_OUT : 0);
+
+ rc = curl_multi_socket_action(g->multi, fd, action, &g->still_running);
+ mcode_or_die("event_cb: curl_multi_socket_action", rc);
+
+ check_multi_info(g);
+ if ( g->still_running <= 0 ) {
+ fprintf(MSG_OUT, "last transfer done, kill timeout\n");
+ if (evtimer_pending(&g->timer_event, NULL)) {
+ evtimer_del(&g->timer_event);
+ }
+ }
+}
+
+
+
+/* Called by libevent when our timeout expires */
+static void timer_cb(int fd, short kind, void *userp)
+{
+ GlobalInfo *g = (GlobalInfo *)userp;
+ CURLMcode rc;
+ (void)fd;
+ (void)kind;
+
+ rc = curl_multi_socket_action(g->multi,
+ CURL_SOCKET_TIMEOUT, 0, &g->still_running);
+ mcode_or_die("timer_cb: curl_multi_socket_action", rc);
+ check_multi_info(g);
+}
+
+
+
+/* Clean up the SockInfo structure */
+static void remsock(SockInfo *f)
+{
+ if (f) {
+ if (f->evset)
+ event_del(&f->ev);
+ free(f);
+ }
+}
+
+
+
+/* Assign information to a SockInfo structure */
+static void setsock(SockInfo*f, curl_socket_t s, CURL*e, int act, GlobalInfo*g)
+{
+ int kind =
+ (act&CURL_POLL_IN?EV_READ:0)|(act&CURL_POLL_OUT?EV_WRITE:0)|EV_PERSIST;
+
+ f->sockfd = s;
+ f->action = act;
+ f->easy = e;
+ if (f->evset)
+ event_del(&f->ev);
+ event_set(&f->ev, f->sockfd, kind, event_cb, g);
+ f->evset=1;
+ event_add(&f->ev, NULL);
+}
+
+
+
+/* Initialize a new SockInfo structure */
+static void addsock(curl_socket_t s, CURL *easy, int action, GlobalInfo *g) {
+ SockInfo *fdp = calloc(sizeof(SockInfo), 1);
+
+ fdp->global = g;
+ setsock(fdp, s, easy, action, g);
+ curl_multi_assign(g->multi, s, fdp);
+}
+
+/* CURLMOPT_SOCKETFUNCTION */
+static int sock_cb(CURL *e, curl_socket_t s, int what, void *cbp, void *sockp)
+{
+ GlobalInfo *g = (GlobalInfo*) cbp;
+ SockInfo *fdp = (SockInfo*) sockp;
+ const char *whatstr[]={ "none", "IN", "OUT", "INOUT", "REMOVE" };
+
+ fprintf(MSG_OUT,
+ "socket callback: s=%d e=%p what=%s ", s, e, whatstr[what]);
+ if (what == CURL_POLL_REMOVE) {
+ fprintf(MSG_OUT, "\n");
+ remsock(fdp);
+ }
+ else {
+ if (!fdp) {
+ fprintf(MSG_OUT, "Adding data: %s\n", whatstr[what]);
+ addsock(s, e, what, g);
+ }
+ else {
+ fprintf(MSG_OUT,
+ "Changing action from %s to %s\n",
+ whatstr[fdp->action], whatstr[what]);
+ setsock(fdp, s, e, what, g);
+ }
+ }
+ return 0;
+}
+
+
+
+/* CURLOPT_WRITEFUNCTION */
+static size_t write_cb(void *ptr, size_t size, size_t nmemb, void *data)
+{
+ size_t realsize = size * nmemb;
+ ConnInfo *conn = (ConnInfo*) data;
+ (void)ptr;
+ (void)conn;
+ return realsize;
+}
+
+
+/* CURLOPT_PROGRESSFUNCTION */
+static int prog_cb (void *p, double dltotal, double dlnow, double ult,
+ double uln)
+{
+ ConnInfo *conn = (ConnInfo *)p;
+ (void)ult;
+ (void)uln;
+
+ fprintf(MSG_OUT, "Progress: %s (%g/%g)\n", conn->url, dlnow, dltotal);
+ return 0;
+}
+
+
+/* Create a new easy handle, and add it to the global curl_multi */
+static void new_conn(char *url, GlobalInfo *g )
+{
+ ConnInfo *conn;
+ CURLMcode rc;
+
+ conn = calloc(1, sizeof(ConnInfo));
+ memset(conn, 0, sizeof(ConnInfo));
+ conn->error[0]='\0';
+
+ conn->easy = curl_easy_init();
+ if (!conn->easy) {
+ fprintf(MSG_OUT, "curl_easy_init() failed, exiting!\n");
+ exit(2);
+ }
+ conn->global = g;
+ conn->url = strdup(url);
+ curl_easy_setopt(conn->easy, CURLOPT_URL, conn->url);
+ curl_easy_setopt(conn->easy, CURLOPT_WRITEFUNCTION, write_cb);
+ curl_easy_setopt(conn->easy, CURLOPT_WRITEDATA, &conn);
+ curl_easy_setopt(conn->easy, CURLOPT_VERBOSE, 1L);
+ curl_easy_setopt(conn->easy, CURLOPT_ERRORBUFFER, conn->error);
+ curl_easy_setopt(conn->easy, CURLOPT_PRIVATE, conn);
+ curl_easy_setopt(conn->easy, CURLOPT_NOPROGRESS, 0L);
+ curl_easy_setopt(conn->easy, CURLOPT_PROGRESSFUNCTION, prog_cb);
+ curl_easy_setopt(conn->easy, CURLOPT_PROGRESSDATA, conn);
+ fprintf(MSG_OUT,
+ "Adding easy %p to multi %p (%s)\n", conn->easy, g->multi, url);
+ rc = curl_multi_add_handle(g->multi, conn->easy);
+ mcode_or_die("new_conn: curl_multi_add_handle", rc);
+
+ /* note that the add_handle() will set a time-out to trigger very soon so
+ that the necessary socket_action() call will be called by this app */
+}
+
+/* This gets called whenever data is received from the fifo */
+static void fifo_cb(int fd, short event, void *arg)
+{
+ char s[1024];
+ long int rv=0;
+ int n=0;
+ GlobalInfo *g = (GlobalInfo *)arg;
+ (void)fd; /* unused */
+ (void)event; /* unused */
+
+ do {
+ s[0]='\0';
+ rv=fscanf(g->input, "%1023s%n", s, &n);
+ s[n]='\0';
+ if ( n && s[0] ) {
+ new_conn(s,arg); /* if we read a URL, go get it! */
+ } else break;
+ } while ( rv != EOF);
+}
+
+/* Create a named pipe and tell libevent to monitor it */
+static int init_fifo (GlobalInfo *g)
+{
+ struct stat st;
+ static const char *fifo = "hiper.fifo";
+ int sockfd;
+
+ fprintf(MSG_OUT, "Creating named pipe \"%s\"\n", fifo);
+ if (lstat (fifo, &st) == 0) {
+ if ((st.st_mode & S_IFMT) == S_IFREG) {
+ errno = EEXIST;
+ perror("lstat");
+ exit (1);
+ }
+ }
+ unlink(fifo);
+ if (mkfifo (fifo, 0600) == -1) {
+ perror("mkfifo");
+ exit (1);
+ }
+ sockfd = open(fifo, O_RDWR | O_NONBLOCK, 0);
+ if (sockfd == -1) {
+ perror("open");
+ exit (1);
+ }
+ g->input = fdopen(sockfd, "r");
+
+ fprintf(MSG_OUT, "Now, pipe some URL's into > %s\n", fifo);
+ event_set(&g->fifo_event, sockfd, EV_READ | EV_PERSIST, fifo_cb, g);
+ event_add(&g->fifo_event, NULL);
+ return (0);
+}
+
+int main(int argc, char **argv)
+{
+ GlobalInfo g;
+ (void)argc;
+ (void)argv;
+
+ memset(&g, 0, sizeof(GlobalInfo));
+ event_init();
+ init_fifo(&g);
+ g.multi = curl_multi_init();
+ evtimer_set(&g.timer_event, timer_cb, &g);
+
+ /* setup the generic multi interface options we want */
+ curl_multi_setopt(g.multi, CURLMOPT_SOCKETFUNCTION, sock_cb);
+ curl_multi_setopt(g.multi, CURLMOPT_SOCKETDATA, &g);
+ curl_multi_setopt(g.multi, CURLMOPT_TIMERFUNCTION, multi_timer_cb);
+ curl_multi_setopt(g.multi, CURLMOPT_TIMERDATA, &g);
+
+ /* we don't call any curl_multi_socket*() function yet as we have no handles
+ added! */
+
+ event_dispatch();
+ curl_multi_cleanup(g.multi);
+ return 0;
+}
diff --git a/docs/examples/htmltidy.c b/docs/examples/htmltidy.c
new file mode 100644
index 0000000..9a46955
--- /dev/null
+++ b/docs/examples/htmltidy.c
@@ -0,0 +1,117 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ *
+ * Download a document and use libtidy to parse the HTML.
+ * Written by Jeff Pohlmeyer
+ *
+ * LibTidy => http://tidy.sourceforge.net
+ *
+ * gcc -Wall -I/usr/local/include tidycurl.c -lcurl -ltidy -o tidycurl
+ *
+ */
+
+#include <stdio.h>
+#include <tidy/tidy.h>
+#include <tidy/buffio.h>
+#include <curl/curl.h>
+
+/* curl write callback, to fill tidy's input buffer... */
+uint write_cb(char *in, uint size, uint nmemb, TidyBuffer *out)
+{
+ uint r;
+ r = size * nmemb;
+ tidyBufAppend( out, in, r );
+ return(r);
+}
+
+/* Traverse the document tree */
+void dumpNode(TidyDoc doc, TidyNode tnod, int indent )
+{
+ TidyNode child;
+ for ( child = tidyGetChild(tnod); child; child = tidyGetNext(child) )
+ {
+ ctmbstr name = tidyNodeGetName( child );
+ if ( name )
+ {
+ /* if it has a name, then it's an HTML tag ... */
+ TidyAttr attr;
+ printf( "%*.*s%s ", indent, indent, "<", name);
+ /* walk the attribute list */
+ for ( attr=tidyAttrFirst(child); attr; attr=tidyAttrNext(attr) ) {
+ printf(tidyAttrName(attr));
+ tidyAttrValue(attr)?printf("=\"%s\" ",
+ tidyAttrValue(attr)):printf(" ");
+ }
+ printf( ">\n");
+ }
+ else {
+ /* if it doesn't have a name, then it's probably text, cdata, etc... */
+ TidyBuffer buf;
+ tidyBufInit(&buf);
+ tidyNodeGetText(doc, child, &buf);
+ printf("%*.*s\n", indent, indent, buf.bp?(char *)buf.bp:"");
+ tidyBufFree(&buf);
+ }
+ dumpNode( doc, child, indent + 4 ); /* recursive */
+ }
+}
+
+
+int main(int argc, char **argv )
+{
+ CURL *curl;
+ char curl_errbuf[CURL_ERROR_SIZE];
+ TidyDoc tdoc;
+ TidyBuffer docbuf = {0};
+ TidyBuffer tidy_errbuf = {0};
+ int err;
+ if ( argc == 2) {
+ curl = curl_easy_init();
+ curl_easy_setopt(curl, CURLOPT_URL, argv[1]);
+ curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, curl_errbuf);
+ curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0L);
+ curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
+ curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_cb);
+
+ tdoc = tidyCreate();
+ tidyOptSetBool(tdoc, TidyForceOutput, yes); /* try harder */
+ tidyOptSetInt(tdoc, TidyWrapLen, 4096);
+ tidySetErrorBuffer( tdoc, &tidy_errbuf );
+ tidyBufInit(&docbuf);
+
+ curl_easy_setopt(curl, CURLOPT_WRITEDATA, &docbuf);
+ err=curl_easy_perform(curl);
+ if ( !err ) {
+ err = tidyParseBuffer(tdoc, &docbuf); /* parse the input */
+ if ( err >= 0 ) {
+ err = tidyCleanAndRepair(tdoc); /* fix any problems */
+ if ( err >= 0 ) {
+ err = tidyRunDiagnostics(tdoc); /* load tidy error buffer */
+ if ( err >= 0 ) {
+ dumpNode( tdoc, tidyGetRoot(tdoc), 0 ); /* walk the tree */
+ fprintf(stderr, "%s\n", tidy_errbuf.bp); /* show errors */
+ }
+ }
+ }
+ }
+ else
+ fprintf(stderr, "%s\n", curl_errbuf);
+
+ /* clean-up */
+ curl_easy_cleanup(curl);
+ tidyBufFree(&docbuf);
+ tidyBufFree(&tidy_errbuf);
+ tidyRelease(tdoc);
+ return(err);
+
+ }
+ else
+ printf( "usage: %s <url>\n", argv[0] );
+
+ return(0);
+}
diff --git a/docs/examples/htmltitle.cc b/docs/examples/htmltitle.cc
new file mode 100644
index 0000000..da3354a
--- /dev/null
+++ b/docs/examples/htmltitle.cc
@@ -0,0 +1,301 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+// Get a web page, parse it with libxml.
+//
+// Written by Lars Nilsson
+//
+// GNU C++ compile command line suggestion (edit paths accordingly):
+//
+// g++ -Wall -I/opt/curl/include -I/opt/libxml/include/libxml2 htmltitle.cc \
+// -o htmltitle -L/opt/curl/lib -L/opt/libxml/lib -lcurl -lxml2
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <string>
+#include <curl/curl.h>
+#include <libxml/HTMLparser.h>
+
+//
+// Case-insensitive string comparison
+//
+
+#ifdef _MSC_VER
+#define COMPARE(a, b) (!stricmp((a), (b)))
+#else
+#define COMPARE(a, b) (!strcasecmp((a), (b)))
+#endif
+
+//
+// libxml callback context structure
+//
+
+struct Context
+{
+ Context(): addTitle(false) { }
+
+ bool addTitle;
+ std::string title;
+};
+
+//
+// libcurl variables for error strings and returned data
+
+static char errorBuffer[CURL_ERROR_SIZE];
+static std::string buffer;
+
+//
+// libcurl write callback function
+//
+
+static int writer(char *data, size_t size, size_t nmemb,
+ std::string *writerData)
+{
+ if (writerData == NULL)
+ return 0;
+
+ writerData->append(data, size*nmemb);
+
+ return size * nmemb;
+}
+
+//
+// libcurl connection initialization
+//
+
+static bool init(CURL *&conn, char *url)
+{
+ CURLcode code;
+
+ conn = curl_easy_init();
+
+ if (conn == NULL)
+ {
+ fprintf(stderr, "Failed to create CURL connection\n");
+
+ exit(EXIT_FAILURE);
+ }
+
+ code = curl_easy_setopt(conn, CURLOPT_ERRORBUFFER, errorBuffer);
+ if (code != CURLE_OK)
+ {
+ fprintf(stderr, "Failed to set error buffer [%d]\n", code);
+
+ return false;
+ }
+
+ code = curl_easy_setopt(conn, CURLOPT_URL, url);
+ if (code != CURLE_OK)
+ {
+ fprintf(stderr, "Failed to set URL [%s]\n", errorBuffer);
+
+ return false;
+ }
+
+ code = curl_easy_setopt(conn, CURLOPT_FOLLOWLOCATION, 1L);
+ if (code != CURLE_OK)
+ {
+ fprintf(stderr, "Failed to set redirect option [%s]\n", errorBuffer);
+
+ return false;
+ }
+
+ code = curl_easy_setopt(conn, CURLOPT_WRITEFUNCTION, writer);
+ if (code != CURLE_OK)
+ {
+ fprintf(stderr, "Failed to set writer [%s]\n", errorBuffer);
+
+ return false;
+ }
+
+ code = curl_easy_setopt(conn, CURLOPT_WRITEDATA, &buffer);
+ if (code != CURLE_OK)
+ {
+ fprintf(stderr, "Failed to set write data [%s]\n", errorBuffer);
+
+ return false;
+ }
+
+ return true;
+}
+
+//
+// libxml start element callback function
+//
+
+static void StartElement(void *voidContext,
+ const xmlChar *name,
+ const xmlChar **attributes)
+{
+ Context *context = (Context *)voidContext;
+
+ if (COMPARE((char *)name, "TITLE"))
+ {
+ context->title = "";
+ context->addTitle = true;
+ }
+ (void) attributes;
+}
+
+//
+// libxml end element callback function
+//
+
+static void EndElement(void *voidContext,
+ const xmlChar *name)
+{
+ Context *context = (Context *)voidContext;
+
+ if (COMPARE((char *)name, "TITLE"))
+ context->addTitle = false;
+}
+
+//
+// Text handling helper function
+//
+
+static void handleCharacters(Context *context,
+ const xmlChar *chars,
+ int length)
+{
+ if (context->addTitle)
+ context->title.append((char *)chars, length);
+}
+
+//
+// libxml PCDATA callback function
+//
+
+static void Characters(void *voidContext,
+ const xmlChar *chars,
+ int length)
+{
+ Context *context = (Context *)voidContext;
+
+ handleCharacters(context, chars, length);
+}
+
+//
+// libxml CDATA callback function
+//
+
+static void cdata(void *voidContext,
+ const xmlChar *chars,
+ int length)
+{
+ Context *context = (Context *)voidContext;
+
+ handleCharacters(context, chars, length);
+}
+
+//
+// libxml SAX callback structure
+//
+
+static htmlSAXHandler saxHandler =
+{
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ StartElement,
+ EndElement,
+ NULL,
+ Characters,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ cdata,
+ NULL
+};
+
+//
+// Parse given (assumed to be) HTML text and return the title
+//
+
+static void parseHtml(const std::string &html,
+ std::string &title)
+{
+ htmlParserCtxtPtr ctxt;
+ Context context;
+
+ ctxt = htmlCreatePushParserCtxt(&saxHandler, &context, "", 0, "",
+ XML_CHAR_ENCODING_NONE);
+
+ htmlParseChunk(ctxt, html.c_str(), html.size(), 0);
+ htmlParseChunk(ctxt, "", 0, 1);
+
+ htmlFreeParserCtxt(ctxt);
+
+ title = context.title;
+}
+
+int main(int argc, char *argv[])
+{
+ CURL *conn = NULL;
+ CURLcode code;
+ std::string title;
+
+ // Ensure one argument is given
+
+ if (argc != 2)
+ {
+ fprintf(stderr, "Usage: %s <url>\n", argv[0]);
+
+ exit(EXIT_FAILURE);
+ }
+
+ curl_global_init(CURL_GLOBAL_DEFAULT);
+
+ // Initialize CURL connection
+
+ if (!init(conn, argv[1]))
+ {
+ fprintf(stderr, "Connection initializion failed\n");
+
+ exit(EXIT_FAILURE);
+ }
+
+ // Retrieve content for the URL
+
+ code = curl_easy_perform(conn);
+ curl_easy_cleanup(conn);
+
+ if (code != CURLE_OK)
+ {
+ fprintf(stderr, "Failed to get '%s' [%s]\n", argv[1], errorBuffer);
+
+ exit(EXIT_FAILURE);
+ }
+
+ // Parse the (assumed) HTML code
+
+ parseHtml(buffer, title);
+
+ // Display the extracted title
+
+ printf("Title: %s\n", title.c_str());
+
+ return EXIT_SUCCESS;
+}
diff --git a/docs/examples/http-post.c b/docs/examples/http-post.c
new file mode 100644
index 0000000..523177d
--- /dev/null
+++ b/docs/examples/http-post.c
@@ -0,0 +1,34 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include <stdio.h>
+#include <curl/curl.h>
+
+int main(void)
+{
+ CURL *curl;
+ CURLcode res;
+
+ curl = curl_easy_init();
+ if(curl) {
+ /* First set the URL that is about to receive our POST. This URL can
+ just as well be a https:// URL if that is what should receive the
+ data. */
+ curl_easy_setopt(curl, CURLOPT_URL, "http://postit.example.com/moo.cgi");
+ /* Now specify the POST data */
+ curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "name=daniel&project=curl");
+
+ /* Perform the request, res will get the return code */
+ res = curl_easy_perform(curl);
+
+ /* always cleanup */
+ curl_easy_cleanup(curl);
+ }
+ return 0;
+}
diff --git a/docs/examples/httpcustomheader.c b/docs/examples/httpcustomheader.c
new file mode 100644
index 0000000..599b84f
--- /dev/null
+++ b/docs/examples/httpcustomheader.c
@@ -0,0 +1,38 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include <stdio.h>
+#include <curl/curl.h>
+
+int main(void)
+{
+ CURL *curl;
+ CURLcode res;
+
+ curl = curl_easy_init();
+ if(curl) {
+ struct curl_slist *chunk = NULL;
+
+ chunk = curl_slist_append(chunk, "Accept: moo");
+ chunk = curl_slist_append(chunk, "Another: yes");
+
+ /* request with the built-in Accept: */
+ curl_easy_setopt(curl, CURLOPT_URL, "localhost");
+ curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
+ res = curl_easy_perform(curl);
+
+ /* redo request with our own custom Accept: */
+ res = curl_easy_setopt(curl, CURLOPT_HTTPHEADER, chunk);
+ res = curl_easy_perform(curl);
+
+ /* always cleanup */
+ curl_easy_cleanup(curl);
+ }
+ return 0;
+}
diff --git a/docs/examples/httpput.c b/docs/examples/httpput.c
new file mode 100644
index 0000000..821e95f
--- /dev/null
+++ b/docs/examples/httpput.c
@@ -0,0 +1,105 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include <stdio.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+#include <curl/curl.h>
+
+/*
+ * This example shows a HTTP PUT operation. PUTs a file given as a command
+ * line argument to the URL also given on the command line.
+ *
+ * This example also uses its own read callback.
+ *
+ * Here's an article on how to setup a PUT handler for Apache:
+ * http://www.apacheweek.com/features/put
+ */
+
+static size_t read_callback(void *ptr, size_t size, size_t nmemb, void *stream)
+{
+ size_t retcode;
+
+ /* in real-world cases, this would probably get this data differently
+ as this fread() stuff is exactly what the library already would do
+ by default internally */
+ retcode = fread(ptr, size, nmemb, stream);
+
+ fprintf(stderr, "*** We read %d bytes from file\n", retcode);
+
+ return retcode;
+}
+
+int main(int argc, char **argv)
+{
+ CURL *curl;
+ CURLcode res;
+ FILE * hd_src ;
+ int hd ;
+ struct stat file_info;
+
+ char *file;
+ char *url;
+
+ if(argc < 3)
+ return 1;
+
+ file= argv[1];
+ url = argv[2];
+
+ /* get the file size of the local file */
+ hd = open(file, O_RDONLY) ;
+ fstat(hd, &file_info);
+ close(hd) ;
+
+ /* get a FILE * of the same file, could also be made with
+ fdopen() from the previous descriptor, but hey this is just
+ an example! */
+ hd_src = fopen(file, "rb");
+
+ /* In windows, this will init the winsock stuff */
+ curl_global_init(CURL_GLOBAL_ALL);
+
+ /* get a curl handle */
+ curl = curl_easy_init();
+ if(curl) {
+ /* we want to use our own read function */
+ curl_easy_setopt(curl, CURLOPT_READFUNCTION, read_callback);
+
+ /* enable uploading */
+ curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
+
+ /* HTTP PUT please */
+ curl_easy_setopt(curl, CURLOPT_PUT, 1L);
+
+ /* specify target URL, and note that this URL should include a file
+ name, not only a directory */
+ curl_easy_setopt(curl, CURLOPT_URL, url);
+
+ /* now specify which file to upload */
+ curl_easy_setopt(curl, CURLOPT_READDATA, hd_src);
+
+ /* provide the size of the upload, we specicially typecast the value
+ to curl_off_t since we must be sure to use the correct data size */
+ curl_easy_setopt(curl, CURLOPT_INFILESIZE_LARGE,
+ (curl_off_t)file_info.st_size);
+
+ /* Now run off and do what you've been told! */
+ res = curl_easy_perform(curl);
+
+ /* always cleanup */
+ curl_easy_cleanup(curl);
+ }
+ fclose(hd_src); /* close the local file */
+
+ curl_global_cleanup();
+ return 0;
+}
diff --git a/docs/examples/https.c b/docs/examples/https.c
new file mode 100644
index 0000000..10b5c65
--- /dev/null
+++ b/docs/examples/https.c
@@ -0,0 +1,52 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include <stdio.h>
+#include <curl/curl.h>
+
+int main(void)
+{
+ CURL *curl;
+ CURLcode res;
+
+ curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+
+#ifdef SKIP_PEER_VERIFICATION
+ /*
+ * If you want to connect to a site who isn't using a certificate that is
+ * signed by one of the certs in the CA bundle you have, you can skip the
+ * verification of the server's certificate. This makes the connection
+ * A LOT LESS SECURE.
+ *
+ * If you have a CA cert for the server stored someplace else than in the
+ * default bundle, then the CURLOPT_CAPATH option might come handy for
+ * you.
+ */
+ curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
+#endif
+
+#ifdef SKIP_HOSTNAME_VERFICATION
+ /*
+ * If the site you're connecting to uses a different host name that what
+ * they have mentioned in their server certificate's commonName (or
+ * subjectAltName) fields, libcurl will refuse to connect. You can skip
+ * this check, but this will make the connection less secure.
+ */
+ curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
+#endif
+
+ res = curl_easy_perform(curl);
+
+ /* always cleanup */
+ curl_easy_cleanup(curl);
+ }
+ return 0;
+}
diff --git a/docs/examples/makefile.dj b/docs/examples/makefile.dj
new file mode 100644
index 0000000..8736e6e
--- /dev/null
+++ b/docs/examples/makefile.dj
@@ -0,0 +1,39 @@
+#
+# Adapted for djgpp / Watt-32 / DOS by
+# Gisle Vanem <giva@bgnett.no>
+#
+
+TOPDIR = ../..
+
+include $(TOPDIR)/packages/DOS/common.dj
+
+CFLAGS += -DFALSE=0 -DTRUE=1
+
+LIBS = $(TOPDIR)/lib/libcurl.a
+
+ifeq ($(USE_SSL),1)
+ LIBS += $(OPENSSL_ROOT)/lib/libssl.a $(OPENSSL_ROOT)/lib/libcrypt.a
+endif
+
+ifeq ($(USE_IDNA),1)
+ LIBS += $(LIBIDN_ROOT)/lib/dj_obj/libidn.a -liconv
+endif
+
+LIBS += $(WATT32_ROOT)/lib/libwatt.a $(ZLIB_ROOT)/libz.a
+
+include Makefile.inc
+
+PROGRAMS = $(patsubst %,%.exe,$(check_PROGRAMS))
+
+all: $(PROGRAMS)
+ @echo Welcome to libcurl example program
+
+%.exe: %.c
+ $(CC) $(CFLAGS) -o $@ $^ $(LIBS)
+ @echo
+
+clean vclean realclean:
+ - rm -f $(PROGRAMS) depend.dj
+
+-include depend.dj
+
diff --git a/docs/examples/multi-app.c b/docs/examples/multi-app.c
new file mode 100644
index 0000000..09b91b7
--- /dev/null
+++ b/docs/examples/multi-app.c
@@ -0,0 +1,145 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ *
+ * This is an example application source code using the multi interface.
+ */
+
+#include <stdio.h>
+#include <string.h>
+
+/* somewhat unix-specific */
+#include <sys/time.h>
+#include <unistd.h>
+
+/* curl stuff */
+#include <curl/curl.h>
+
+/*
+ * Download a HTTP file and upload an FTP file simultaneously.
+ */
+
+#define HANDLECOUNT 2 /* Number of simultaneous transfers */
+#define HTTP_HANDLE 0 /* Index for the HTTP transfer */
+#define FTP_HANDLE 1 /* Index for the FTP transfer */
+
+int main(int argc, char **argv)
+{
+ CURL *handles[HANDLECOUNT];
+ CURLM *multi_handle;
+
+ int still_running; /* keep number of running handles */
+ int i;
+
+ CURLMsg *msg; /* for picking up messages with the transfer status */
+ int msgs_left; /* how many messages are left */
+
+ /* Allocate one CURL handle per transfer */
+ for (i=0; i<HANDLECOUNT; i++)
+ handles[i] = curl_easy_init();
+
+ /* set the options (I left out a few, you'll get the point anyway) */
+ curl_easy_setopt(handles[HTTP_HANDLE], CURLOPT_URL, "http://example.com");
+
+ curl_easy_setopt(handles[FTP_HANDLE], CURLOPT_URL, "ftp://example.com");
+ curl_easy_setopt(handles[FTP_HANDLE], CURLOPT_UPLOAD, 1L);
+
+ /* init a multi stack */
+ multi_handle = curl_multi_init();
+
+ /* add the individual transfers */
+ for (i=0; i<HANDLECOUNT; i++)
+ curl_multi_add_handle(multi_handle, handles[i]);
+
+ /* we start some action by calling perform right away */
+ curl_multi_perform(multi_handle, &still_running);
+
+ while(still_running) {
+ struct timeval timeout;
+ int rc; /* select() return code */
+
+ fd_set fdread;
+ fd_set fdwrite;
+ fd_set fdexcep;
+ int maxfd = -1;
+
+ long curl_timeo = -1;
+
+ FD_ZERO(&fdread);
+ FD_ZERO(&fdwrite);
+ FD_ZERO(&fdexcep);
+
+ /* set a suitable timeout to play around with */
+ timeout.tv_sec = 1;
+ timeout.tv_usec = 0;
+
+ curl_multi_timeout(multi_handle, &curl_timeo);
+ if(curl_timeo >= 0) {
+ timeout.tv_sec = curl_timeo / 1000;
+ if(timeout.tv_sec > 1)
+ timeout.tv_sec = 1;
+ else
+ timeout.tv_usec = (curl_timeo % 1000) * 1000;
+ }
+
+ /* get file descriptors from the transfers */
+ curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd);
+
+ /* In a real-world program you OF COURSE check the return code of the
+ function calls. On success, the value of maxfd is guaranteed to be
+ greater or equal than -1. We call select(maxfd + 1, ...), specially in
+ case of (maxfd == -1), we call select(0, ...), which is basically equal
+ to sleep. */
+
+ rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout);
+
+ switch(rc) {
+ case -1:
+ /* select error */
+ break;
+ case 0:
+ /* timeout, do something else */
+ break;
+ default:
+ /* one or more of curl's file descriptors say there's data to read
+ or write */
+ curl_multi_perform(multi_handle, &still_running);
+ break;
+ }
+ }
+
+ /* See how the transfers went */
+ while ((msg = curl_multi_info_read(multi_handle, &msgs_left))) {
+ if (msg->msg == CURLMSG_DONE) {
+ int idx, found = 0;
+
+ /* Find out which handle this message is about */
+ for (idx=0; idx<HANDLECOUNT; idx++) {
+ found = (msg->easy_handle == handles[idx]);
+ if(found)
+ break;
+ }
+
+ switch (idx) {
+ case HTTP_HANDLE:
+ printf("HTTP transfer completed with status %d\n", msg->data.result);
+ break;
+ case FTP_HANDLE:
+ printf("FTP transfer completed with status %d\n", msg->data.result);
+ break;
+ }
+ }
+ }
+
+ curl_multi_cleanup(multi_handle);
+
+ /* Free the CURL handles */
+ for (i=0; i<HANDLECOUNT; i++)
+ curl_easy_cleanup(handles[i]);
+
+ return 0;
+}
diff --git a/docs/examples/multi-debugcallback.c b/docs/examples/multi-debugcallback.c
new file mode 100644
index 0000000..529c3d9
--- /dev/null
+++ b/docs/examples/multi-debugcallback.c
@@ -0,0 +1,193 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ *
+ * This is a very simple example using the multi interface and the debug
+ * callback.
+ */
+
+#include <stdio.h>
+#include <string.h>
+
+/* somewhat unix-specific */
+#include <sys/time.h>
+#include <unistd.h>
+
+/* curl stuff */
+#include <curl/curl.h>
+
+typedef char bool;
+#define TRUE 1
+
+static
+void dump(const char *text,
+ FILE *stream, unsigned char *ptr, size_t size,
+ bool nohex)
+{
+ size_t i;
+ size_t c;
+
+ unsigned int width=0x10;
+
+ if(nohex)
+ /* without the hex output, we can fit more on screen */
+ width = 0x40;
+
+ fprintf(stream, "%s, %010.10ld bytes (0x%08.8lx)\n",
+ text, (long)size, (long)size);
+
+ for(i=0; i<size; i+= width) {
+
+ fprintf(stream, "%04.4lx: ", (long)i);
+
+ if(!nohex) {
+ /* hex not disabled, show it */
+ for(c = 0; c < width; c++)
+ if(i+c < size)
+ fprintf(stream, "%02x ", ptr[i+c]);
+ else
+ fputs(" ", stream);
+ }
+
+ for(c = 0; (c < width) && (i+c < size); c++) {
+ /* check for 0D0A; if found, skip past and start a new line of output */
+ if (nohex && (i+c+1 < size) && ptr[i+c]==0x0D && ptr[i+c+1]==0x0A) {
+ i+=(c+2-width);
+ break;
+ }
+ fprintf(stream, "%c",
+ (ptr[i+c]>=0x20) && (ptr[i+c]<0x80)?ptr[i+c]:'.');
+ /* check again for 0D0A, to avoid an extra \n if it's at width */
+ if (nohex && (i+c+2 < size) && ptr[i+c+1]==0x0D && ptr[i+c+2]==0x0A) {
+ i+=(c+3-width);
+ break;
+ }
+ }
+ fputc('\n', stream); /* newline */
+ }
+ fflush(stream);
+}
+
+static
+int my_trace(CURL *handle, curl_infotype type,
+ unsigned char *data, size_t size,
+ void *userp)
+{
+ const char *text;
+
+ (void)handle; /* prevent compiler warning */
+
+ switch (type) {
+ case CURLINFO_TEXT:
+ fprintf(stderr, "== Info: %s", data);
+ default: /* in case a new one is introduced to shock us */
+ return 0;
+
+ case CURLINFO_HEADER_OUT:
+ text = "=> Send header";
+ break;
+ case CURLINFO_DATA_OUT:
+ text = "=> Send data";
+ break;
+ case CURLINFO_HEADER_IN:
+ text = "<= Recv header";
+ break;
+ case CURLINFO_DATA_IN:
+ text = "<= Recv data";
+ break;
+ }
+
+ dump(text, stderr, data, size, TRUE);
+ return 0;
+}
+
+/*
+ * Simply download a HTTP file.
+ */
+int main(int argc, char **argv)
+{
+ CURL *http_handle;
+ CURLM *multi_handle;
+
+ int still_running; /* keep number of running handles */
+
+ http_handle = curl_easy_init();
+
+ /* set the options (I left out a few, you'll get the point anyway) */
+ curl_easy_setopt(http_handle, CURLOPT_URL, "http://www.example.com/");
+
+ curl_easy_setopt(http_handle, CURLOPT_DEBUGFUNCTION, my_trace);
+ curl_easy_setopt(http_handle, CURLOPT_VERBOSE, 1L);
+
+ /* init a multi stack */
+ multi_handle = curl_multi_init();
+
+ /* add the individual transfers */
+ curl_multi_add_handle(multi_handle, http_handle);
+
+ /* we start some action by calling perform right away */
+ curl_multi_perform(multi_handle, &still_running);
+
+ while(still_running) {
+ struct timeval timeout;
+ int rc; /* select() return code */
+
+ fd_set fdread;
+ fd_set fdwrite;
+ fd_set fdexcep;
+ int maxfd = -1;
+
+ long curl_timeo = -1;
+
+ FD_ZERO(&fdread);
+ FD_ZERO(&fdwrite);
+ FD_ZERO(&fdexcep);
+
+ /* set a suitable timeout to play around with */
+ timeout.tv_sec = 1;
+ timeout.tv_usec = 0;
+
+ curl_multi_timeout(multi_handle, &curl_timeo);
+ if(curl_timeo >= 0) {
+ timeout.tv_sec = curl_timeo / 1000;
+ if(timeout.tv_sec > 1)
+ timeout.tv_sec = 1;
+ else
+ timeout.tv_usec = (curl_timeo % 1000) * 1000;
+ }
+
+ /* get file descriptors from the transfers */
+ curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd);
+
+ /* In a real-world program you OF COURSE check the return code of the
+ function calls. On success, the value of maxfd is guaranteed to be
+ greater or equal than -1. We call select(maxfd + 1, ...), specially in
+ case of (maxfd == -1), we call select(0, ...), which is basically equal
+ to sleep. */
+
+ rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout);
+
+ switch(rc) {
+ case -1:
+ /* select error */
+ still_running = 0;
+ printf("select() returns error, this is badness\n");
+ break;
+ case 0:
+ default:
+ /* timeout or readable/writable sockets */
+ curl_multi_perform(multi_handle, &still_running);
+ break;
+ }
+ }
+
+ curl_multi_cleanup(multi_handle);
+
+ curl_easy_cleanup(http_handle);
+
+ return 0;
+}
diff --git a/docs/examples/multi-double.c b/docs/examples/multi-double.c
new file mode 100644
index 0000000..3ea106b
--- /dev/null
+++ b/docs/examples/multi-double.c
@@ -0,0 +1,109 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ *
+ * This is a very simple example using the multi interface.
+ */
+
+#include <stdio.h>
+#include <string.h>
+
+/* somewhat unix-specific */
+#include <sys/time.h>
+#include <unistd.h>
+
+/* curl stuff */
+#include <curl/curl.h>
+
+/*
+ * Simply download two HTTP files!
+ */
+int main(int argc, char **argv)
+{
+ CURL *http_handle;
+ CURL *http_handle2;
+ CURLM *multi_handle;
+
+ int still_running; /* keep number of running handles */
+
+ http_handle = curl_easy_init();
+ http_handle2 = curl_easy_init();
+
+ /* set options */
+ curl_easy_setopt(http_handle, CURLOPT_URL, "http://www.example.com/");
+
+ /* set options */
+ curl_easy_setopt(http_handle2, CURLOPT_URL, "http://localhost/");
+
+ /* init a multi stack */
+ multi_handle = curl_multi_init();
+
+ /* add the individual transfers */
+ curl_multi_add_handle(multi_handle, http_handle);
+ curl_multi_add_handle(multi_handle, http_handle2);
+
+ /* we start some action by calling perform right away */
+ curl_multi_perform(multi_handle, &still_running);
+
+ while(still_running) {
+ struct timeval timeout;
+ int rc; /* select() return code */
+
+ fd_set fdread;
+ fd_set fdwrite;
+ fd_set fdexcep;
+ int maxfd = -1;
+
+ long curl_timeo = -1;
+
+ FD_ZERO(&fdread);
+ FD_ZERO(&fdwrite);
+ FD_ZERO(&fdexcep);
+
+ /* set a suitable timeout to play around with */
+ timeout.tv_sec = 1;
+ timeout.tv_usec = 0;
+
+ curl_multi_timeout(multi_handle, &curl_timeo);
+ if(curl_timeo >= 0) {
+ timeout.tv_sec = curl_timeo / 1000;
+ if(timeout.tv_sec > 1)
+ timeout.tv_sec = 1;
+ else
+ timeout.tv_usec = (curl_timeo % 1000) * 1000;
+ }
+
+ /* get file descriptors from the transfers */
+ curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd);
+
+ /* In a real-world program you OF COURSE check the return code of the
+ function calls. On success, the value of maxfd is guaranteed to be
+ greater or equal than -1. We call select(maxfd + 1, ...), specially in
+ case of (maxfd == -1), we call select(0, ...), which is basically equal
+ to sleep. */
+
+ rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout);
+
+ switch(rc) {
+ case -1:
+ /* select error */
+ break;
+ case 0:
+ default:
+ /* timeout or readable/writable sockets */
+ curl_multi_perform(multi_handle, &still_running);
+ break;
+ }
+ }
+
+ curl_multi_cleanup(multi_handle);
+
+ curl_easy_cleanup(http_handle);
+ curl_easy_cleanup(http_handle2);
+
+ return 0;
+}
diff --git a/docs/examples/multi-post.c b/docs/examples/multi-post.c
new file mode 100644
index 0000000..d2daf70
--- /dev/null
+++ b/docs/examples/multi-post.c
@@ -0,0 +1,137 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ *
+ * This is an example application source code using the multi interface
+ * to do a multipart formpost without "blocking".
+ */
+#include <stdio.h>
+#include <string.h>
+#include <sys/time.h>
+
+#include <curl/curl.h>
+
+int main(int argc, char *argv[])
+{
+ CURL *curl;
+
+ CURLM *multi_handle;
+ int still_running;
+
+ struct curl_httppost *formpost=NULL;
+ struct curl_httppost *lastptr=NULL;
+ struct curl_slist *headerlist=NULL;
+ static const char buf[] = "Expect:";
+
+ /* Fill in the file upload field. This makes libcurl load data from
+ the given file name when curl_easy_perform() is called. */
+ curl_formadd(&formpost,
+ &lastptr,
+ CURLFORM_COPYNAME, "sendfile",
+ CURLFORM_FILE, "postit2.c",
+ CURLFORM_END);
+
+ /* Fill in the filename field */
+ curl_formadd(&formpost,
+ &lastptr,
+ CURLFORM_COPYNAME, "filename",
+ CURLFORM_COPYCONTENTS, "postit2.c",
+ CURLFORM_END);
+
+ /* Fill in the submit field too, even if this is rarely needed */
+ curl_formadd(&formpost,
+ &lastptr,
+ CURLFORM_COPYNAME, "submit",
+ CURLFORM_COPYCONTENTS, "send",
+ CURLFORM_END);
+
+ curl = curl_easy_init();
+ multi_handle = curl_multi_init();
+
+ /* initalize custom header list (stating that Expect: 100-continue is not
+ wanted */
+ headerlist = curl_slist_append(headerlist, buf);
+ if(curl && multi_handle) {
+
+ /* what URL that receives this POST */
+ curl_easy_setopt(curl, CURLOPT_URL, "http://www.example.com/upload.cgi");
+ curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
+
+ curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerlist);
+ curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost);
+
+ curl_multi_add_handle(multi_handle, curl);
+
+ curl_multi_perform(multi_handle, &still_running);
+
+ while(still_running) {
+ struct timeval timeout;
+ int rc; /* select() return code */
+
+ fd_set fdread;
+ fd_set fdwrite;
+ fd_set fdexcep;
+ int maxfd = -1;
+
+ long curl_timeo = -1;
+
+ FD_ZERO(&fdread);
+ FD_ZERO(&fdwrite);
+ FD_ZERO(&fdexcep);
+
+ /* set a suitable timeout to play around with */
+ timeout.tv_sec = 1;
+ timeout.tv_usec = 0;
+
+ curl_multi_timeout(multi_handle, &curl_timeo);
+ if(curl_timeo >= 0) {
+ timeout.tv_sec = curl_timeo / 1000;
+ if(timeout.tv_sec > 1)
+ timeout.tv_sec = 1;
+ else
+ timeout.tv_usec = (curl_timeo % 1000) * 1000;
+ }
+
+ /* get file descriptors from the transfers */
+ curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd);
+
+ /* In a real-world program you OF COURSE check the return code of the
+ function calls. On success, the value of maxfd is guaranteed to be
+ greater or equal than -1. We call select(maxfd + 1, ...), specially in
+ case of (maxfd == -1), we call select(0, ...), which is basically equal
+ to sleep. */
+
+ rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout);
+
+ switch(rc) {
+ case -1:
+ /* select error */
+ break;
+ case 0:
+ printf("timeout!\n");
+ default:
+ /* timeout or readable/writable sockets */
+ printf("perform!\n");
+ curl_multi_perform(multi_handle, &still_running);
+ printf("running: %d!\n", still_running);
+ break;
+ }
+ }
+
+ curl_multi_cleanup(multi_handle);
+
+ /* always cleanup */
+ curl_easy_cleanup(curl);
+
+ /* then cleanup the formpost chain */
+ curl_formfree(formpost);
+
+ /* free slist */
+ curl_slist_free_all (headerlist);
+ }
+ return 0;
+}
diff --git a/docs/examples/multi-single.c b/docs/examples/multi-single.c
new file mode 100644
index 0000000..f248afe
--- /dev/null
+++ b/docs/examples/multi-single.c
@@ -0,0 +1,104 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ *
+ * This is a very simple example using the multi interface.
+ */
+
+#include <stdio.h>
+#include <string.h>
+
+/* somewhat unix-specific */
+#include <sys/time.h>
+#include <unistd.h>
+
+/* curl stuff */
+#include <curl/curl.h>
+
+/*
+ * Simply download a HTTP file.
+ */
+int main(int argc, char **argv)
+{
+ CURL *http_handle;
+ CURLM *multi_handle;
+
+ int still_running; /* keep number of running handles */
+
+ http_handle = curl_easy_init();
+
+ /* set the options (I left out a few, you'll get the point anyway) */
+ curl_easy_setopt(http_handle, CURLOPT_URL, "http://www.example.com/");
+
+ /* init a multi stack */
+ multi_handle = curl_multi_init();
+
+ /* add the individual transfers */
+ curl_multi_add_handle(multi_handle, http_handle);
+
+ /* we start some action by calling perform right away */
+ curl_multi_perform(multi_handle, &still_running);
+
+ while(still_running) {
+ struct timeval timeout;
+ int rc; /* select() return code */
+
+ fd_set fdread;
+ fd_set fdwrite;
+ fd_set fdexcep;
+ int maxfd = -1;
+
+ long curl_timeo = -1;
+
+ FD_ZERO(&fdread);
+ FD_ZERO(&fdwrite);
+ FD_ZERO(&fdexcep);
+
+ /* set a suitable timeout to play around with */
+ timeout.tv_sec = 1;
+ timeout.tv_usec = 0;
+
+ curl_multi_timeout(multi_handle, &curl_timeo);
+ if(curl_timeo >= 0) {
+ timeout.tv_sec = curl_timeo / 1000;
+ if(timeout.tv_sec > 1)
+ timeout.tv_sec = 1;
+ else
+ timeout.tv_usec = (curl_timeo % 1000) * 1000;
+ }
+
+ /* get file descriptors from the transfers */
+ curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd);
+
+ /* In a real-world program you OF COURSE check the return code of the
+ function calls. On success, the value of maxfd is guaranteed to be
+ greater or equal than -1. We call select(maxfd + 1, ...), specially in
+ case of (maxfd == -1), we call select(0, ...), which is basically equal
+ to sleep. */
+
+ rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout);
+
+ switch(rc) {
+ case -1:
+ /* select error */
+ still_running = 0;
+ printf("select() returns error, this is badness\n");
+ break;
+ case 0:
+ default:
+ /* timeout or readable/writable sockets */
+ curl_multi_perform(multi_handle, &still_running);
+ break;
+ }
+ }
+
+ curl_multi_cleanup(multi_handle);
+
+ curl_easy_cleanup(http_handle);
+
+ return 0;
+}
diff --git a/docs/examples/multithread.c b/docs/examples/multithread.c
new file mode 100644
index 0000000..5f59a99
--- /dev/null
+++ b/docs/examples/multithread.c
@@ -0,0 +1,81 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+/* A multi-threaded example that uses pthreads extensively to fetch
+ * X remote files at once */
+
+#include <stdio.h>
+#include <pthread.h>
+#include <curl/curl.h>
+
+#define NUMT 4
+
+/*
+ List of URLs to fetch.
+
+ If you intend to use a SSL-based protocol here you MUST setup the OpenSSL
+ callback functions as described here:
+
+ http://www.openssl.org/docs/crypto/threads.html#DESCRIPTION
+
+*/
+const char * const urls[NUMT]= {
+ "http://curl.haxx.se/",
+ "ftp://cool.haxx.se/",
+ "http://www.contactor.se/",
+ "www.haxx.se"
+};
+
+static void *pull_one_url(void *url)
+{
+ CURL *curl;
+
+ curl = curl_easy_init();
+ curl_easy_setopt(curl, CURLOPT_URL, url);
+ curl_easy_perform(curl); /* ignores error */
+ curl_easy_cleanup(curl);
+
+ return NULL;
+}
+
+
+/*
+ int pthread_create(pthread_t *new_thread_ID,
+ const pthread_attr_t *attr,
+ void * (*start_func)(void *), void *arg);
+*/
+
+int main(int argc, char **argv)
+{
+ pthread_t tid[NUMT];
+ int i;
+ int error;
+
+ /* Must initialize libcurl before any threads are started */
+ curl_global_init(CURL_GLOBAL_ALL);
+
+ for(i=0; i< NUMT; i++) {
+ error = pthread_create(&tid[i],
+ NULL, /* default attributes please */
+ pull_one_url,
+ (void *)urls[i]);
+ if(0 != error)
+ fprintf(stderr, "Couldn't run thread number %d, errno %d\n", i, error);
+ else
+ fprintf(stderr, "Thread %d, gets %s\n", i, urls[i]);
+ }
+
+ /* now wait for all threads to terminate */
+ for(i=0; i< NUMT; i++) {
+ error = pthread_join(tid[i], NULL);
+ fprintf(stderr, "Thread %d terminated\n", i);
+ }
+
+ return 0;
+}
diff --git a/docs/examples/opensslthreadlock.c b/docs/examples/opensslthreadlock.c
new file mode 100644
index 0000000..706e901
--- /dev/null
+++ b/docs/examples/opensslthreadlock.c
@@ -0,0 +1,81 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ *
+ * Example source code to show one way to set the necessary OpenSSL locking
+ * callbacks if you want to do multi-threaded transfers with HTTPS/FTPS with
+ * libcurl built to use OpenSSL.
+ *
+ * This is not a complete stand-alone example.
+ *
+ * Author: Jeremy Brown
+ */
+
+
+#include <stdio.h>
+#include <pthread.h>
+#include <openssl/err.h>
+
+#define MUTEX_TYPE pthread_mutex_t
+#define MUTEX_SETUP(x) pthread_mutex_init(&(x), NULL)
+#define MUTEX_CLEANUP(x) pthread_mutex_destroy(&(x))
+#define MUTEX_LOCK(x) pthread_mutex_lock(&(x))
+#define MUTEX_UNLOCK(x) pthread_mutex_unlock(&(x))
+#define THREAD_ID pthread_self( )
+
+
+void handle_error(const char *file, int lineno, const char *msg){
+ fprintf(stderr, "** %s:%d %s\n", file, lineno, msg);
+ ERR_print_errors_fp(stderr);
+ /* exit(-1); */
+ }
+
+/* This array will store all of the mutexes available to OpenSSL. */
+static MUTEX_TYPE *mutex_buf= NULL;
+
+
+static void locking_function(int mode, int n, const char * file, int line)
+{
+ if (mode & CRYPTO_LOCK)
+ MUTEX_LOCK(mutex_buf[n]);
+ else
+ MUTEX_UNLOCK(mutex_buf[n]);
+}
+
+static unsigned long id_function(void)
+{
+ return ((unsigned long)THREAD_ID);
+}
+
+int thread_setup(void)
+{
+ int i;
+
+ mutex_buf = malloc(CRYPTO_num_locks( ) * sizeof(MUTEX_TYPE));
+ if (!mutex_buf)
+ return 0;
+ for (i = 0; i < CRYPTO_num_locks( ); i++)
+ MUTEX_SETUP(mutex_buf[i]);
+ CRYPTO_set_id_callback(id_function);
+ CRYPTO_set_locking_callback(locking_function);
+ return 1;
+}
+
+int thread_cleanup(void)
+{
+ int i;
+
+ if (!mutex_buf)
+ return 0;
+ CRYPTO_set_id_callback(NULL);
+ CRYPTO_set_locking_callback(NULL);
+ for (i = 0; i < CRYPTO_num_locks( ); i++)
+ MUTEX_CLEANUP(mutex_buf[i]);
+ free(mutex_buf);
+ mutex_buf = NULL;
+ return 1;
+}
diff --git a/docs/examples/persistant.c b/docs/examples/persistant.c
new file mode 100644
index 0000000..177ada3
--- /dev/null
+++ b/docs/examples/persistant.c
@@ -0,0 +1,40 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include <stdio.h>
+#include <unistd.h>
+#include <curl/curl.h>
+
+int main(int argc, char **argv)
+{
+ CURL *curl;
+ CURLcode res;
+
+ curl_global_init(CURL_GLOBAL_ALL);
+
+ curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
+ curl_easy_setopt(curl, CURLOPT_HEADER, 1L);
+
+ /* get the first document */
+ curl_easy_setopt(curl, CURLOPT_URL, "http://example.com/");
+ res = curl_easy_perform(curl);
+
+ /* get another document from the same server using the same
+ connection */
+ curl_easy_setopt(curl, CURLOPT_URL, "http://example.com/docs/");
+ res = curl_easy_perform(curl);
+
+ /* always cleanup */
+ curl_easy_cleanup(curl);
+ }
+
+ return 0;
+}
diff --git a/docs/examples/post-callback.c b/docs/examples/post-callback.c
new file mode 100644
index 0000000..ae4f4db
--- /dev/null
+++ b/docs/examples/post-callback.c
@@ -0,0 +1,116 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ *
+ * An example source code that issues a HTTP POST and we provide the actual
+ * data through a read callback.
+ *
+ */
+#include <stdio.h>
+#include <string.h>
+#include <curl/curl.h>
+
+const char data[]="this is what we post to the silly web server";
+
+struct WriteThis {
+ const char *readptr;
+ int sizeleft;
+};
+
+static size_t read_callback(void *ptr, size_t size, size_t nmemb, void *userp)
+{
+ struct WriteThis *pooh = (struct WriteThis *)userp;
+
+ if(size*nmemb < 1)
+ return 0;
+
+ if(pooh->sizeleft) {
+ *(char *)ptr = pooh->readptr[0]; /* copy one single byte */
+ pooh->readptr++; /* advance pointer */
+ pooh->sizeleft--; /* less data left */
+ return 1; /* we return 1 byte at a time! */
+ }
+
+ return 0; /* no more data left to deliver */
+}
+
+int main(void)
+{
+ CURL *curl;
+ CURLcode res;
+
+ struct WriteThis pooh;
+
+ pooh.readptr = data;
+ pooh.sizeleft = strlen(data);
+
+ curl = curl_easy_init();
+ if(curl) {
+ /* First set the URL that is about to receive our POST. */
+ curl_easy_setopt(curl, CURLOPT_URL, "http://example.com/index.cgi");
+
+ /* Now specify we want to POST data */
+ curl_easy_setopt(curl, CURLOPT_POST, 1L);
+
+ /* we want to use our own read function */
+ curl_easy_setopt(curl, CURLOPT_READFUNCTION, read_callback);
+
+ /* pointer to pass to our read function */
+ curl_easy_setopt(curl, CURLOPT_READDATA, &pooh);
+
+ /* get verbose debug output please */
+ curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
+
+ /*
+ If you use POST to a HTTP 1.1 server, you can send data without knowing
+ the size before starting the POST if you use chunked encoding. You
+ enable this by adding a header like "Transfer-Encoding: chunked" with
+ CURLOPT_HTTPHEADER. With HTTP 1.0 or without chunked transfer, you must
+ specify the size in the request.
+ */
+#ifdef USE_CHUNKED
+ {
+ struct curl_slist *chunk = NULL;
+
+ chunk = curl_slist_append(chunk, "Transfer-Encoding: chunked");
+ res = curl_easy_setopt(curl, CURLOPT_HTTPHEADER, chunk);
+ /* use curl_slist_free_all() after the *perform() call to free this
+ list again */
+ }
+#else
+ /* Set the expected POST size. If you want to POST large amounts of data,
+ consider CURLOPT_POSTFIELDSIZE_LARGE */
+ curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, (curl_off_t)pooh.sizeleft);
+#endif
+
+#ifdef DISABLE_EXPECT
+ /*
+ Using POST with HTTP 1.1 implies the use of a "Expect: 100-continue"
+ header. You can disable this header with CURLOPT_HTTPHEADER as usual.
+ NOTE: if you want chunked transfer too, you need to combine these two
+ since you can only set one list of headers with CURLOPT_HTTPHEADER. */
+
+ /* A less good option would be to enforce HTTP 1.0, but that might also
+ have other implications. */
+ {
+ struct curl_slist *chunk = NULL;
+
+ chunk = curl_slist_append(chunk, "Expect:");
+ res = curl_easy_setopt(curl, CURLOPT_HTTPHEADER, chunk);
+ /* use curl_slist_free_all() after the *perform() call to free this
+ list again */
+ }
+#endif
+
+ /* Perform the request, res will get the return code */
+ res = curl_easy_perform(curl);
+
+ /* always cleanup */
+ curl_easy_cleanup(curl);
+ }
+ return 0;
+}
diff --git a/docs/examples/postit2.c b/docs/examples/postit2.c
new file mode 100644
index 0000000..a6292c5
--- /dev/null
+++ b/docs/examples/postit2.c
@@ -0,0 +1,86 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ *
+ * Example code that uploads a file name 'foo' to a remote script that accepts
+ * "HTML form based" (as described in RFC1738) uploads using HTTP POST.
+ *
+ * The imaginary form we'll fill in looks like:
+ *
+ * <form method="post" enctype="multipart/form-data" action="examplepost.cgi">
+ * Enter file: <input type="file" name="sendfile" size="40">
+ * Enter file name: <input type="text" name="filename" size="30">
+ * <input type="submit" value="send" name="submit">
+ * </form>
+ *
+ * This exact source code has not been verified to work.
+ */
+
+#include <stdio.h>
+#include <string.h>
+
+#include <curl/curl.h>
+#include <curl/types.h>
+#include <curl/easy.h>
+
+int main(int argc, char *argv[])
+{
+ CURL *curl;
+ CURLcode res;
+
+ struct curl_httppost *formpost=NULL;
+ struct curl_httppost *lastptr=NULL;
+ struct curl_slist *headerlist=NULL;
+ static const char buf[] = "Expect:";
+
+ curl_global_init(CURL_GLOBAL_ALL);
+
+ /* Fill in the file upload field */
+ curl_formadd(&formpost,
+ &lastptr,
+ CURLFORM_COPYNAME, "sendfile",
+ CURLFORM_FILE, "postit2.c",
+ CURLFORM_END);
+
+ /* Fill in the filename field */
+ curl_formadd(&formpost,
+ &lastptr,
+ CURLFORM_COPYNAME, "filename",
+ CURLFORM_COPYCONTENTS, "postit2.c",
+ CURLFORM_END);
+
+
+ /* Fill in the submit field too, even if this is rarely needed */
+ curl_formadd(&formpost,
+ &lastptr,
+ CURLFORM_COPYNAME, "submit",
+ CURLFORM_COPYCONTENTS, "send",
+ CURLFORM_END);
+
+ curl = curl_easy_init();
+ /* initalize custom header list (stating that Expect: 100-continue is not
+ wanted */
+ headerlist = curl_slist_append(headerlist, buf);
+ if(curl) {
+ /* what URL that receives this POST */
+ curl_easy_setopt(curl, CURLOPT_URL, "http://example.com/examplepost.cgi");
+ if ( (argc == 2) && (!strcmp(argv[1], "noexpectheader")) )
+ /* only disable 100-continue header if explicitly requested */
+ curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerlist);
+ curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost);
+ res = curl_easy_perform(curl);
+
+ /* always cleanup */
+ curl_easy_cleanup(curl);
+
+ /* then cleanup the formpost chain */
+ curl_formfree(formpost);
+ /* free slist */
+ curl_slist_free_all (headerlist);
+ }
+ return 0;
+}
diff --git a/docs/examples/sampleconv.c b/docs/examples/sampleconv.c
new file mode 100644
index 0000000..ed45851
--- /dev/null
+++ b/docs/examples/sampleconv.c
@@ -0,0 +1,94 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+/*
+ This is a simple example showing how a program on a non-ASCII platform
+ would invoke callbacks to do its own codeset conversions instead of
+ using the built-in iconv functions in libcurl.
+
+ The IBM-1047 EBCDIC codeset is used for this example but the code
+ would be similar for other non-ASCII codesets.
+
+ Three callback functions are created below:
+ my_conv_from_ascii_to_ebcdic,
+ my_conv_from_ebcdic_to_ascii, and
+ my_conv_from_utf8_to_ebcdic
+
+ The "platform_xxx" calls represent platform-specific conversion routines.
+
+ */
+
+#include <stdio.h>
+#include <curl/curl.h>
+
+CURLcode my_conv_from_ascii_to_ebcdic(char *buffer, size_t length)
+{
+ char *tempptrin, *tempptrout;
+ size_t bytes = length;
+ int rc;
+ tempptrin = tempptrout = buffer;
+ rc = platform_a2e(&tempptrin, &bytes, &tempptrout, &bytes);
+ if (rc == PLATFORM_CONV_OK) {
+ return(CURLE_OK);
+ } else {
+ return(CURLE_CONV_FAILED);
+ }
+}
+
+CURLcode my_conv_from_ebcdic_to_ascii(char *buffer, size_t length)
+{
+ char *tempptrin, *tempptrout;
+ size_t bytes = length;
+ int rc;
+ tempptrin = tempptrout = buffer;
+ rc = platform_e2a(&tempptrin, &bytes, &tempptrout, &bytes);
+ if (rc == PLATFORM_CONV_OK) {
+ return(CURLE_OK);
+ } else {
+ return(CURLE_CONV_FAILED);
+ }
+}
+
+CURLcode my_conv_from_utf8_to_ebcdic(char *buffer, size_t length)
+{
+ char *tempptrin, *tempptrout;
+ size_t bytes = length;
+ int rc;
+ tempptrin = tempptrout = buffer;
+ rc = platform_u2e(&tempptrin, &bytes, &tempptrout, &bytes);
+ if (rc == PLATFORM_CONV_OK) {
+ return(CURLE_OK);
+ } else {
+ return(CURLE_CONV_FAILED);
+ }
+}
+
+int main(void)
+{
+ CURL *curl;
+ CURLcode res;
+
+ curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+
+ /* use platform-specific functions for codeset conversions */
+ curl_easy_setopt(curl, CURLOPT_CONV_FROM_NETWORK_FUNCTION,
+ my_conv_from_ascii_to_ebcdic);
+ curl_easy_setopt(curl, CURLOPT_CONV_TO_NETWORK_FUNCTION,
+ my_conv_from_ebcdic_to_ascii);
+ curl_easy_setopt(curl, CURLOPT_CONV_FROM_UTF8_FUNCTION,
+ my_conv_from_utf8_to_ebcdic);
+
+ res = curl_easy_perform(curl);
+
+ /* always cleanup */
+ curl_easy_cleanup(curl);
+ }
+ return 0;
+}
diff --git a/docs/examples/sendrecv.c b/docs/examples/sendrecv.c
new file mode 100644
index 0000000..ad5ddd1
--- /dev/null
+++ b/docs/examples/sendrecv.c
@@ -0,0 +1,115 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * An example of curl_easy_send() and curl_easy_recv() usage.
+ *
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <curl/curl.h>
+
+/* Auxiliary function that waits on the socket. */
+static int wait_on_socket(int sockfd, int for_recv, long timeout_ms)
+{
+ struct timeval tv;
+ fd_set infd, outfd, errfd;
+ int res;
+
+ tv.tv_sec = timeout_ms / 1000;
+ tv.tv_usec= (timeout_ms % 1000) * 1000;
+
+ FD_ZERO(&infd);
+ FD_ZERO(&outfd);
+ FD_ZERO(&errfd);
+
+ FD_SET(sockfd, &errfd); /* always check for error */
+
+ if(for_recv)
+ {
+ FD_SET(sockfd, &infd);
+ }
+ else
+ {
+ FD_SET(sockfd, &outfd);
+ }
+
+ /* select() returns the number of signalled sockets or -1 */
+ res = select(sockfd + 1, &infd, &outfd, &errfd, &tv);
+ return res;
+}
+
+int main(void)
+{
+ CURL *curl;
+ CURLcode res;
+ /* Minimalistic http request */
+ const char *request = "GET / HTTP/1.0\r\nHost: example.com\r\n\r\n";
+ int sockfd; /* socket */
+ size_t iolen;
+
+ curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+ /* Do not do the transfer - only connect to host */
+ curl_easy_setopt(curl, CURLOPT_CONNECT_ONLY, 1L);
+ res = curl_easy_perform(curl);
+
+ if(CURLE_OK != res)
+ {
+ printf("Error: %s\n", strerror(res));
+ return 1;
+ }
+
+ /* Extract the socket from the curl handle - we'll need it
+ * for waiting */
+ res = curl_easy_getinfo(curl, CURLINFO_LASTSOCKET, &sockfd);
+
+ if(CURLE_OK != res)
+ {
+ printf("Error: %s\n", curl_easy_strerror(res));
+ return 1;
+ }
+
+ /* wait for the socket to become ready for sending */
+ if(!wait_on_socket(sockfd, 0, 60000L))
+ {
+ printf("Error: timeout.\n");
+ return 1;
+ }
+
+ puts("Sending request.");
+ /* Send the request. Real applications should check the iolen
+ * to see if all the request has been sent */
+ res = curl_easy_send(curl, request, strlen(request), &iolen);
+
+ if(CURLE_OK != res)
+ {
+ printf("Error: %s\n", curl_easy_strerror(res));
+ return 1;
+ }
+ puts("Reading response.");
+
+ /* read the response */
+ for(;;)
+ {
+ char buf[1024];
+
+ wait_on_socket(sockfd, 1, 60000L);
+ res = curl_easy_recv(curl, buf, 1024, &iolen);
+
+ if(CURLE_OK != res)
+ break;
+
+ printf("Received %u bytes.\n", iolen);
+ }
+
+ /* always cleanup */
+ curl_easy_cleanup(curl);
+ }
+ return 0;
+}
diff --git a/docs/examples/sepheaders.c b/docs/examples/sepheaders.c
new file mode 100644
index 0000000..e0c4cbb
--- /dev/null
+++ b/docs/examples/sepheaders.c
@@ -0,0 +1,75 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#include <curl/curl.h>
+#include <curl/types.h>
+#include <curl/easy.h>
+
+static size_t write_data(void *ptr, size_t size, size_t nmemb, void *stream)
+{
+ int written = fwrite(ptr, size, nmemb, (FILE *)stream);
+ return written;
+}
+
+int main(int argc, char **argv)
+{
+ CURL *curl_handle;
+ static const char *headerfilename = "head.out";
+ FILE *headerfile;
+ static const char *bodyfilename = "body.out";
+ FILE *bodyfile;
+
+ curl_global_init(CURL_GLOBAL_ALL);
+
+ /* init the curl session */
+ curl_handle = curl_easy_init();
+
+ /* set URL to get */
+ curl_easy_setopt(curl_handle, CURLOPT_URL, "http://example.com");
+
+ /* no progress meter please */
+ curl_easy_setopt(curl_handle, CURLOPT_NOPROGRESS, 1L);
+
+ /* send all data to this function */
+ curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, write_data);
+
+ /* open the files */
+ headerfile = fopen(headerfilename,"w");
+ if (headerfile == NULL) {
+ curl_easy_cleanup(curl_handle);
+ return -1;
+ }
+ bodyfile = fopen(bodyfilename,"w");
+ if (bodyfile == NULL) {
+ curl_easy_cleanup(curl_handle);
+ return -1;
+ }
+
+ /* we want the headers to this file handle */
+ curl_easy_setopt(curl_handle, CURLOPT_WRITEHEADER, headerfile);
+
+ /*
+ * Notice here that if you want the actual data sent anywhere else but
+ * stdout, you should consider using the CURLOPT_WRITEDATA option. */
+
+ /* get it! */
+ curl_easy_perform(curl_handle);
+
+ /* close the header file */
+ fclose(headerfile);
+
+ /* cleanup curl stuff */
+ curl_easy_cleanup(curl_handle);
+
+ return 0;
+}
diff --git a/docs/examples/simple.c b/docs/examples/simple.c
new file mode 100644
index 0000000..351cf72
--- /dev/null
+++ b/docs/examples/simple.c
@@ -0,0 +1,27 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include <stdio.h>
+#include <curl/curl.h>
+
+int main(void)
+{
+ CURL *curl;
+ CURLcode res;
+
+ curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+ res = curl_easy_perform(curl);
+
+ /* always cleanup */
+ curl_easy_cleanup(curl);
+ }
+ return 0;
+}
diff --git a/docs/examples/simplepost.c b/docs/examples/simplepost.c
new file mode 100644
index 0000000..b8e61e0
--- /dev/null
+++ b/docs/examples/simplepost.c
@@ -0,0 +1,36 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <curl/curl.h>
+
+int main(void)
+{
+ CURL *curl;
+ CURLcode res;
+
+ static const char *postthis="moo mooo moo moo";
+
+ curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+ curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postthis);
+
+ /* if we don't provide POSTFIELDSIZE, libcurl will strlen() by
+ itself */
+ curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, (long)strlen(postthis));
+
+ res = curl_easy_perform(curl);
+
+ /* always cleanup */
+ curl_easy_cleanup(curl);
+ }
+ return 0;
+}
diff --git a/docs/examples/simplessl.c b/docs/examples/simplessl.c
new file mode 100644
index 0000000..db3acca
--- /dev/null
+++ b/docs/examples/simplessl.c
@@ -0,0 +1,122 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include <stdio.h>
+
+#include <curl/curl.h>
+#include <curl/types.h>
+#include <curl/easy.h>
+
+
+/* some requirements for this to work:
+ 1. set pCertFile to the file with the client certificate
+ 2. if the key is passphrase protected, set pPassphrase to the
+ passphrase you use
+ 3. if you are using a crypto engine:
+ 3.1. set a #define USE_ENGINE
+ 3.2. set pEngine to the name of the crypto engine you use
+ 3.3. set pKeyName to the key identifier you want to use
+ 4. if you don't use a crypto engine:
+ 4.1. set pKeyName to the file name of your client key
+ 4.2. if the format of the key file is DER, set pKeyType to "DER"
+
+ !! verify of the server certificate is not implemented here !!
+
+ **** This example only works with libcurl 7.9.3 and later! ****
+
+*/
+
+int main(int argc, char **argv)
+{
+ CURL *curl;
+ CURLcode res;
+ FILE *headerfile;
+ const char *pPassphrase = NULL;
+
+ static const char *pCertFile = "testcert.pem";
+ static const char *pCACertFile="cacert.pem";
+
+ const char *pKeyName;
+ const char *pKeyType;
+
+ const char *pEngine;
+
+#if USE_ENGINE
+ pKeyName = "rsa_test";
+ pKeyType = "ENG";
+ pEngine = "chil"; /* for nChiper HSM... */
+#else
+ pKeyName = "testkey.pem";
+ pKeyType = "PEM";
+ pEngine = NULL;
+#endif
+
+ headerfile = fopen("dumpit", "w");
+
+ curl_global_init(CURL_GLOBAL_DEFAULT);
+
+ curl = curl_easy_init();
+ if(curl) {
+ /* what call to write: */
+ curl_easy_setopt(curl, CURLOPT_URL, "HTTPS://your.favourite.ssl.site");
+ curl_easy_setopt(curl, CURLOPT_WRITEHEADER, headerfile);
+
+ while(1) /* do some ugly short cut... */
+ {
+ if (pEngine) /* use crypto engine */
+ {
+ if (curl_easy_setopt(curl, CURLOPT_SSLENGINE,pEngine) != CURLE_OK)
+ { /* load the crypto engine */
+ fprintf(stderr,"can't set crypto engine\n");
+ break;
+ }
+ if (curl_easy_setopt(curl, CURLOPT_SSLENGINE_DEFAULT,1L) != CURLE_OK)
+ { /* set the crypto engine as default */
+ /* only needed for the first time you load
+ a engine in a curl object... */
+ fprintf(stderr,"can't set crypto engine as default\n");
+ break;
+ }
+ }
+ /* cert is stored PEM coded in file... */
+ /* since PEM is default, we needn't set it for PEM */
+ curl_easy_setopt(curl,CURLOPT_SSLCERTTYPE,"PEM");
+
+ /* set the cert for client authentication */
+ curl_easy_setopt(curl,CURLOPT_SSLCERT,pCertFile);
+
+ /* sorry, for engine we must set the passphrase
+ (if the key has one...) */
+ if (pPassphrase)
+ curl_easy_setopt(curl,CURLOPT_KEYPASSWD,pPassphrase);
+
+ /* if we use a key stored in a crypto engine,
+ we must set the key type to "ENG" */
+ curl_easy_setopt(curl,CURLOPT_SSLKEYTYPE,pKeyType);
+
+ /* set the private key (file or ID in engine) */
+ curl_easy_setopt(curl,CURLOPT_SSLKEY,pKeyName);
+
+ /* set the file with the certs vaildating the server */
+ curl_easy_setopt(curl,CURLOPT_CAINFO,pCACertFile);
+
+ /* disconnect if we can't validate server's cert */
+ curl_easy_setopt(curl,CURLOPT_SSL_VERIFYPEER,1L);
+
+ res = curl_easy_perform(curl);
+ break; /* we are done... */
+ }
+ /* always cleanup */
+ curl_easy_cleanup(curl);
+ }
+
+ curl_global_cleanup();
+
+ return 0;
+}
diff --git a/docs/examples/synctime.c b/docs/examples/synctime.c
new file mode 100644
index 0000000..4ed031a
--- /dev/null
+++ b/docs/examples/synctime.c
@@ -0,0 +1,353 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ *
+ * This example code only builds as-is on Windows.
+ *
+ * While Unix/Linux user, you do not need this software.
+ * You can achieve the same result as synctime using curl, awk and date.
+ * Set proxy as according to your network, but beware of proxy Cache-Control.
+ *
+ * To set your system clock, root access is required.
+ * # date -s "`curl -sI http://nist.time.gov/timezone.cgi?UTC/s/0 \
+ * | awk -F': ' '/Date: / {print $2}'`"
+ *
+ * To view remote webserver date and time.
+ * $ curl -sI http://nist.time.gov/timezone.cgi?UTC/s/0 \
+ * | awk -F': ' '/Date: / {print $2}'
+ *
+ * Synchronising your computer clock via Internet time server usually relies
+ * on DAYTIME, TIME, or NTP protocols. These protocols provide good accurate
+ * time synchronisation but it does not work very well through a
+ * firewall/proxy. Some adjustment has to be made to the firewall/proxy for
+ * these protocols to work properly.
+ *
+ * There is an indirect method. Since most webserver provide server time in
+ * their HTTP header, therefore you could synchronise your computer clock
+ * using HTTP protocol which has no problem with firewall/proxy.
+ *
+ * For this software to work, you should take note of these items.
+ * 1. Your firewall/proxy must allow your computer to surf internet.
+ * 2. Webserver system time must in sync with the NTP time server,
+ * or at least provide an accurate time keeping.
+ * 3. Webserver HTTP header does not provide the milliseconds units,
+ * so there is no way to get very accurate time.
+ * 4. This software could only provide an accuracy of +- a few seconds,
+ * as Round-Trip delay time is not taken into consideration.
+ * Compensation of network, firewall/proxy delay cannot be simply divide
+ * the Round-Trip delay time by half.
+ * 5. Win32 SetSystemTime() API will set your computer clock according to
+ * GMT/UTC time. Therefore your computer timezone must be properly set.
+ * 6. Webserver data should not be cached by the proxy server. Some
+ * webserver provide Cache-Control to prevent caching.
+ *
+ * References:
+ * http://tf.nist.gov/timefreq/service/its.htm
+ * http://tf.nist.gov/timefreq/service/firewall.htm
+ *
+ * Usage:
+ * This software will synchronise your computer clock only when you issue
+ * it with --synctime. By default, it only display the webserver's clock.
+ *
+ * Written by: Frank (contributed to libcurl)
+ *
+ * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
+ * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * IN NO EVENT SHALL THE AUTHOR OF THIS SOFTWARE BE LIABLE FOR
+ * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
+ * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
+ * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THIS SOFTWARE.
+ *
+ */
+
+#include <stdio.h>
+#include <time.h>
+#ifndef __CYGWIN__
+#include <windows.h>
+#endif
+#include <curl/curl.h>
+
+
+#define MAX_STRING 256
+#define MAX_STRING1 MAX_STRING+1
+
+typedef struct
+{
+ char http_proxy[MAX_STRING1];
+ char proxy_user[MAX_STRING1];
+ char timeserver[MAX_STRING1];
+} conf_t;
+
+const char DefaultTimeServer[4][MAX_STRING1] =
+{
+ "http://nist.time.gov/timezone.cgi?UTC/s/0",
+ "http://www.google.com/",
+ "http://www.worldtimeserver.com/current_time_in_UTC.aspx",
+ "http://www.worldtime.com/cgi-bin/wt.cgi"
+};
+
+const char *DayStr[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
+const char *MthStr[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun",
+ "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
+
+int ShowAllHeader;
+int AutoSyncTime;
+SYSTEMTIME SYSTime;
+SYSTEMTIME LOCALTime;
+
+#define HTTP_COMMAND_HEAD 0
+#define HTTP_COMMAND_GET 1
+
+
+size_t SyncTime_CURL_WriteOutput(void *ptr, size_t size, size_t nmemb,
+ void *stream)
+{
+ fwrite(ptr, size, nmemb, stream);
+ return(nmemb*size);
+}
+
+size_t SyncTime_CURL_WriteHeader(void *ptr, size_t size, size_t nmemb,
+ void *stream)
+{
+ int i, RetVal;
+ char TmpStr1[26], TmpStr2[26];
+
+ if (ShowAllHeader == 1)
+ fprintf(stderr, "%s", (char *)(ptr));
+
+ if (strncmp((char *)(ptr), "Date:", 5) == 0) {
+ if (ShowAllHeader == 0)
+ fprintf(stderr, "HTTP Server. %s", (char *)(ptr));
+
+ if (AutoSyncTime == 1) {
+ *TmpStr1 = 0;
+ *TmpStr2 = 0;
+ if (strlen((char *)(ptr)) > 50) /* Can prevent buffer overflow to
+ TmpStr1 & 2? */
+ AutoSyncTime = 0;
+ else {
+ RetVal = sscanf ((char *)(ptr), "Date: %s %d %s %d %d:%d:%d",
+ TmpStr1, &SYSTime.wDay, TmpStr2, &SYSTime.wYear,
+ &SYSTime.wHour, &SYSTime.wMinute, &SYSTime.wSecond);
+
+ if (RetVal == 7) {
+
+ SYSTime.wMilliseconds = 500; /* adjust to midpoint, 0.5 sec */
+ for (i=0; i<12; i++) {
+ if (strcmp(MthStr[i], TmpStr2) == 0) {
+ SYSTime.wMonth = i+1;
+ break;
+ }
+ }
+ AutoSyncTime = 3; /* Computer clock will be adjusted */
+ }
+ else {
+ AutoSyncTime = 0; /* Error in sscanf() fields conversion */
+ }
+ }
+ }
+ }
+
+ if (strncmp((char *)(ptr), "X-Cache: HIT", 12) == 0) {
+ fprintf(stderr, "ERROR: HTTP Server data is cached."
+ " Server Date is no longer valid.\n");
+ AutoSyncTime = 0;
+ }
+ return(nmemb*size);
+}
+
+void SyncTime_CURL_Init(CURL *curl, char *proxy_port,
+ char *proxy_user_password)
+{
+ if (strlen(proxy_port) > 0)
+ curl_easy_setopt(curl, CURLOPT_PROXY, proxy_port);
+
+ if (strlen(proxy_user_password) > 0)
+ curl_easy_setopt(curl, CURLOPT_PROXYUSERPWD, proxy_user_password);
+
+ /* Trick Webserver by claiming that you are using Microsoft WinXP SP2, IE6 */
+ curl_easy_setopt(curl, CURLOPT_USERAGENT,
+ "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)");
+ curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, *SyncTime_CURL_WriteOutput);
+ curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, *SyncTime_CURL_WriteHeader);
+}
+
+int SyncTime_CURL_Fetch(CURL *curl, char *URL_Str, char *OutFileName,
+ int HttpGetBody)
+{
+ FILE *outfile;
+ CURLcode res;
+
+ outfile = NULL;
+ if (HttpGetBody == HTTP_COMMAND_HEAD)
+ curl_easy_setopt(curl, CURLOPT_NOBODY, 1L);
+ else {
+ outfile = fopen(OutFileName, "wb");
+ curl_easy_setopt(curl, CURLOPT_WRITEDATA, outfile);
+ }
+
+ curl_easy_setopt(curl, CURLOPT_URL, URL_Str);
+ res = curl_easy_perform(curl);
+ if (outfile != NULL)
+ fclose(outfile);
+ return res; /* (CURLE_OK) */
+}
+
+void showUsage(void)
+{
+ fprintf(stderr, "SYNCTIME: Synchronising computer clock with time server"
+ " using HTTP protocol.\n");
+ fprintf(stderr, "Usage : SYNCTIME [Option]\n");
+ fprintf(stderr, "Options :\n");
+ fprintf(stderr, " --server=WEBSERVER Use this time server instead"
+ " of default.\n");
+ fprintf(stderr, " --showall Show all HTTP header.\n");
+ fprintf(stderr, " --synctime Synchronising computer clock"
+ " with time server.\n");
+ fprintf(stderr, " --proxy-user=USER[:PASS] Set proxy username and"
+ " password.\n");
+ fprintf(stderr, " --proxy=HOST[:PORT] Use HTTP proxy on given"
+ " port.\n");
+ fprintf(stderr, " --help Print this help.\n");
+ fprintf(stderr, "\n");
+ return;
+}
+
+int conf_init(conf_t *conf)
+{
+ int i;
+
+ *conf->http_proxy = 0;
+ for (i=0; i<MAX_STRING1; i++)
+ conf->proxy_user[i] = 0; /* Clean up password from memory */
+ *conf->timeserver = 0;
+ return 1;
+}
+
+int main(int argc, char *argv[])
+{
+ CURL *curl;
+ conf_t conf[1];
+ int OptionIndex;
+ struct tm *lt;
+ struct tm *gmt;
+ time_t tt;
+ time_t tt_local;
+ time_t tt_gmt;
+ double tzonediffFloat;
+ int tzonediffWord;
+ char timeBuf[61];
+ char tzoneBuf[16];
+ int RetValue;
+
+ OptionIndex = 0;
+ ShowAllHeader = 0; /* Do not show HTTP Header */
+ AutoSyncTime = 0; /* Do not synchronise computer clock */
+ RetValue = 0; /* Successful Exit */
+ conf_init(conf);
+
+ if (argc > 1) {
+ while (OptionIndex < argc) {
+ if (strncmp(argv[OptionIndex], "--server=", 9) == 0)
+ snprintf(conf->timeserver, MAX_STRING, "%s", &argv[OptionIndex][9]);
+
+ if (strcmp(argv[OptionIndex], "--showall") == 0)
+ ShowAllHeader = 1;
+
+ if (strcmp(argv[OptionIndex], "--synctime") == 0)
+ AutoSyncTime = 1;
+
+ if (strncmp(argv[OptionIndex], "--proxy-user=", 13) == 0)
+ snprintf(conf->proxy_user, MAX_STRING, "%s", &argv[OptionIndex][13]);
+
+ if (strncmp(argv[OptionIndex], "--proxy=", 8) == 0)
+ snprintf(conf->http_proxy, MAX_STRING, "%s", &argv[OptionIndex][8]);
+
+ if ((strcmp(argv[OptionIndex], "--help") == 0) ||
+ (strcmp(argv[OptionIndex], "/?") == 0)) {
+ showUsage();
+ return 0;
+ }
+ OptionIndex++;
+ }
+ }
+
+ if (*conf->timeserver == 0) /* Use default server for time information */
+ snprintf(conf->timeserver, MAX_STRING, "%s", DefaultTimeServer[0]);
+
+ /* Init CURL before usage */
+ curl_global_init(CURL_GLOBAL_ALL);
+ curl = curl_easy_init();
+ if (curl) {
+ SyncTime_CURL_Init(curl, conf->http_proxy, conf->proxy_user);
+
+ /* Calculating time diff between GMT and localtime */
+ tt = time(0);
+ lt = localtime(&tt);
+ tt_local = mktime(lt);
+ gmt = gmtime(&tt);
+ tt_gmt = mktime(gmt);
+ tzonediffFloat = difftime(tt_local, tt_gmt);
+ tzonediffWord = (int)(tzonediffFloat/3600.0);
+
+ if ((double)(tzonediffWord * 3600) == tzonediffFloat)
+ snprintf(tzoneBuf, 15, "%+03d'00'", tzonediffWord);
+ else
+ snprintf(tzoneBuf, 15, "%+03d'30'", tzonediffWord);
+
+ /* Get current system time and local time */
+ GetSystemTime(&SYSTime);
+ GetLocalTime(&LOCALTime);
+ snprintf(timeBuf, 60, "%s, %02d %s %04d %02d:%02d:%02d.%03d, ",
+ DayStr[LOCALTime.wDayOfWeek], LOCALTime.wDay,
+ MthStr[LOCALTime.wMonth-1], LOCALTime.wYear,
+ LOCALTime.wHour, LOCALTime.wMinute, LOCALTime.wSecond,
+ LOCALTime.wMilliseconds);
+
+ fprintf(stderr, "Fetch: %s\n\n", conf->timeserver);
+ fprintf(stderr, "Before HTTP. Date: %s%s\n\n", timeBuf, tzoneBuf);
+
+ /* HTTP HEAD command to the Webserver */
+ SyncTime_CURL_Fetch(curl, conf->timeserver, "index.htm",
+ HTTP_COMMAND_HEAD);
+
+ GetLocalTime(&LOCALTime);
+ snprintf(timeBuf, 60, "%s, %02d %s %04d %02d:%02d:%02d.%03d, ",
+ DayStr[LOCALTime.wDayOfWeek], LOCALTime.wDay,
+ MthStr[LOCALTime.wMonth-1], LOCALTime.wYear,
+ LOCALTime.wHour, LOCALTime.wMinute, LOCALTime.wSecond,
+ LOCALTime.wMilliseconds);
+ fprintf(stderr, "\nAfter HTTP. Date: %s%s\n", timeBuf, tzoneBuf);
+
+ if (AutoSyncTime == 3) {
+ /* Synchronising computer clock */
+ if (!SetSystemTime(&SYSTime)) { /* Set system time */
+ fprintf(stderr, "ERROR: Unable to set system time.\n");
+ RetValue = 1;
+ }
+ else {
+ /* Successfully re-adjusted computer clock */
+ GetLocalTime(&LOCALTime);
+ snprintf(timeBuf, 60, "%s, %02d %s %04d %02d:%02d:%02d.%03d, ",
+ DayStr[LOCALTime.wDayOfWeek], LOCALTime.wDay,
+ MthStr[LOCALTime.wMonth-1], LOCALTime.wYear,
+ LOCALTime.wHour, LOCALTime.wMinute, LOCALTime.wSecond,
+ LOCALTime.wMilliseconds);
+ fprintf(stderr, "\nNew System's Date: %s%s\n", timeBuf, tzoneBuf);
+ }
+ }
+
+ /* Cleanup before exit */
+ conf_init(conf);
+ curl_easy_cleanup(curl);
+ }
+ return RetValue;
+}
diff --git a/docs/examples/threaded-ssl.c b/docs/examples/threaded-ssl.c
new file mode 100644
index 0000000..284edc4
--- /dev/null
+++ b/docs/examples/threaded-ssl.c
@@ -0,0 +1,149 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ *
+ * A multi-threaded example that uses pthreads and fetches 4 remote files at
+ * once over HTTPS. The lock callbacks and stuff assume OpenSSL or GnuTLS
+ * (libgcrypt) so far.
+ *
+ * OpenSSL docs for this:
+ * http://www.openssl.org/docs/crypto/threads.html
+ * gcrypt docs for this:
+ * http://gnupg.org/documentation/manuals/gcrypt/Multi_002dThreading.html
+ */
+
+#define USE_OPENSSL /* or USE_GNUTLS accordingly */
+
+#include <stdio.h>
+#include <pthread.h>
+#include <curl/curl.h>
+
+#define NUMT 4
+
+/* we have this global to let the callback get easy access to it */
+static pthread_mutex_t *lockarray;
+
+#ifdef USE_OPENSSL
+#include <openssl/crypto.h>
+static void lock_callback(int mode, int type, char *file, int line)
+{
+ (void)file;
+ (void)line;
+ if (mode & CRYPTO_LOCK) {
+ pthread_mutex_lock(&(lockarray[type]));
+ }
+ else {
+ pthread_mutex_unlock(&(lockarray[type]));
+ }
+}
+
+static unsigned long thread_id(void)
+{
+ unsigned long ret;
+
+ ret=(unsigned long)pthread_self();
+ return(ret);
+}
+
+static void init_locks(void)
+{
+ int i;
+
+ lockarray=(pthread_mutex_t *)OPENSSL_malloc(CRYPTO_num_locks() *
+ sizeof(pthread_mutex_t));
+ for (i=0; i<CRYPTO_num_locks(); i++) {
+ pthread_mutex_init(&(lockarray[i]),NULL);
+ }
+
+ CRYPTO_set_id_callback((unsigned long (*)())thread_id);
+ CRYPTO_set_locking_callback((void (*)())lock_callback);
+}
+
+static void kill_locks(void)
+{
+ int i;
+
+ CRYPTO_set_locking_callback(NULL);
+ for (i=0; i<CRYPTO_num_locks(); i++)
+ pthread_mutex_destroy(&(lockarray[i]));
+
+ OPENSSL_free(lockarray);
+}
+#endif
+
+#ifdef USE_GNUTLS
+#include <gcrypt.h>
+#include <errno.h>
+
+GCRY_THREAD_OPTION_PTHREAD_IMPL;
+
+void init_locks(void)
+{
+ gcry_control(GCRYCTL_SET_THREAD_CBS);
+}
+
+#define kill_locks()
+#endif
+
+/* List of URLs to fetch.*/
+const char * const urls[]= {
+ "https://www.example.com/",
+ "https://www2.example.com/",
+ "https://www3.example.com/",
+ "https://www4.example.com/",
+};
+
+static void *pull_one_url(void *url)
+{
+ CURL *curl;
+
+ curl = curl_easy_init();
+ curl_easy_setopt(curl, CURLOPT_URL, url);
+ /* this example doesn't verify the server's certificate, which means we
+ might be downloading stuff from an impostor */
+ curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
+ curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
+ curl_easy_perform(curl); /* ignores error */
+ curl_easy_cleanup(curl);
+
+ return NULL;
+}
+
+int main(int argc, char **argv)
+{
+ pthread_t tid[NUMT];
+ int i;
+ int error;
+ (void)argc; /* we don't use any arguments in this example */
+ (void)argv;
+
+ /* Must initialize libcurl before any threads are started */
+ curl_global_init(CURL_GLOBAL_ALL);
+
+ init_locks();
+
+ for(i=0; i< NUMT; i++) {
+ error = pthread_create(&tid[i],
+ NULL, /* default attributes please */
+ pull_one_url,
+ (void *)urls[i]);
+ if(0 != error)
+ fprintf(stderr, "Couldn't run thread number %d, errno %d\n", i, error);
+ else
+ fprintf(stderr, "Thread %d, gets %s\n", i, urls[i]);
+ }
+
+ /* now wait for all threads to terminate */
+ for(i=0; i< NUMT; i++) {
+ error = pthread_join(tid[i], NULL);
+ fprintf(stderr, "Thread %d terminated\n", i);
+ }
+
+ kill_locks();
+
+ return 0;
+}
diff --git a/docs/index.html b/docs/index.html
new file mode 100644
index 0000000..4390378
--- /dev/null
+++ b/docs/index.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Index to Curl documentation</title>
+</head>
+
+<body>
+<h1 align="center">Index to Curl documentation</h1>
+
+<h2>Programs</h2>
+<a href="curl-config.html">curl-config</A>
+<br><a href="curl.html">curl</A>
+
+<h2>Tutorial</h2>
+<a href="TheArtOfHttpScripting">The Art Of Scripting HTTP Requests Using Curl</a> (plain text)
+
+<h2>libcurl</h2>
+See the <a href="libcurl/index.html">libcurl section</a>
+
+</body></html>
diff --git a/docs/libcurl/ABI b/docs/libcurl/ABI
new file mode 100644
index 0000000..3ec0e04
--- /dev/null
+++ b/docs/libcurl/ABI
@@ -0,0 +1,69 @@
+ _ _ ____ _
+ ___| | | | _ \| |
+ / __| | | | |_) | |
+ | (__| |_| | _ <| |___
+ \___|\___/|_| \_\_____|
+
+ libcurl's binary interface
+
+ABI - Application Binary Interface
+
+ First, allow me to define the word for this context: ABI describes the
+ low-level interface between an application program and a library. Calling
+ conventions, function arguments, return values, struct sizes/defines and
+ more.
+
+ For a longer description, see
+ http://en.wikipedia.org/wiki/Application_binary_interface
+
+Upgrades
+
+ In the vast majority of all cases, a typical libcurl upgrade does not break
+ the ABI at all. Your application can remain using libcurl just as before,
+ only with less bugs and possibly with added new features. You need to read
+ the release notes, and if they mention an ABI break/soname bump, you may
+ have to verify that your application still builds fine and uses libcurl as
+ it now is defined to work.
+
+Version Numbers
+
+ In libcurl land, you really can't tell by the libcurl version number if that
+ libcurl is binary compatible or not with another libcurl version.
+
+Soname Bumps
+
+ Whenever there are changes done to the library that will cause an ABI
+ breakage, that may require your application to get attention or possibly be
+ changed to adhere to new things, we will bump the soname. Then the library
+ will get a different output name and thus can in fact be installed in
+ parallel with an older installed lib (on most systems). Thus, old
+ applications built against the previous ABI version will remain working and
+ using the older lib, while newer applications build and use the newer one.
+
+ During the first seven years of libcurl releases, there have only been four
+ ABI breakages.
+
+Downgrades
+
+ Going to an older libcurl version from one you're currently using can be a
+ tricky thing. Mostly we add features and options to newer libcurls as that
+ won't break ABI or hamper existing applications. This has the implication
+ that going backwards may get you in a situation where you pick a libcurl
+ that doesn't support the options your application needs. Or possibly you
+ even downgrade so far so you cross an ABI break border and thus a different
+ soname, and then your application may need to adapt to the modified ABI.
+
+History
+
+ The previous major library soname number bumps (breaking backwards
+ compatibility) have happened the following times:
+
+ 0 - libcurl 7.1, August 2000
+
+ 1 - libcurl 7.5 December 2000
+
+ 2 - libcurl 7.7 March 2001
+
+ 3 - libcurl 7.12.0 June 2004
+
+ 4 - libcurl 7.16.0 October 2006
diff --git a/docs/libcurl/Makefile.am b/docs/libcurl/Makefile.am
new file mode 100644
index 0000000..3f949d6
--- /dev/null
+++ b/docs/libcurl/Makefile.am
@@ -0,0 +1,83 @@
+#
+#
+
+AUTOMAKE_OPTIONS = foreign no-dependencies
+
+man_MANS = curl_easy_cleanup.3 curl_easy_getinfo.3 curl_easy_init.3 \
+ curl_easy_perform.3 curl_easy_setopt.3 curl_easy_duphandle.3 \
+ curl_formadd.3 curl_formfree.3 curl_getdate.3 curl_getenv.3 \
+ curl_slist_append.3 curl_slist_free_all.3 curl_version.3 \
+ curl_version_info.3 curl_escape.3 curl_unescape.3 curl_free.3 \
+ curl_strequal.3 curl_mprintf.3 curl_global_init.3 curl_global_cleanup.3 \
+ curl_multi_add_handle.3 curl_multi_cleanup.3 curl_multi_fdset.3 \
+ curl_multi_info_read.3 curl_multi_init.3 curl_multi_perform.3 \
+ curl_multi_remove_handle.3 curl_share_cleanup.3 curl_share_init.3 \
+ curl_share_setopt.3 libcurl.3 libcurl-easy.3 libcurl-multi.3 \
+ libcurl-share.3 libcurl-errors.3 curl_easy_strerror.3 \
+ curl_multi_strerror.3 curl_share_strerror.3 curl_global_init_mem.3 \
+ libcurl-tutorial.3 curl_easy_reset.3 curl_easy_escape.3 \
+ curl_easy_unescape.3 curl_multi_setopt.3 curl_multi_socket.3 \
+ curl_multi_timeout.3 curl_formget.3 curl_multi_assign.3 \
+ curl_easy_pause.3 curl_easy_recv.3 curl_easy_send.3 \
+ curl_multi_socket_action.3
+
+HTMLPAGES = curl_easy_cleanup.html curl_easy_getinfo.html \
+ curl_easy_init.html curl_easy_perform.html curl_easy_setopt.html \
+ curl_easy_duphandle.html curl_formadd.html curl_formfree.html \
+ curl_getdate.html curl_getenv.html curl_slist_append.html \
+ curl_slist_free_all.html curl_version.html curl_version_info.html \
+ curl_escape.html curl_unescape.html curl_free.html curl_strequal.html \
+ curl_mprintf.html curl_global_init.html curl_global_cleanup.html \
+ curl_multi_add_handle.html curl_multi_cleanup.html \
+ curl_multi_fdset.html curl_multi_info_read.html curl_multi_init.html \
+ curl_multi_perform.html curl_multi_remove_handle.html \
+ curl_share_cleanup.html curl_share_init.html curl_share_setopt.html \
+ libcurl.html libcurl-multi.html libcurl-easy.html libcurl-share.html \
+ libcurl-errors.html curl_easy_strerror.html curl_multi_strerror.html \
+ curl_share_strerror.html curl_global_init_mem.html \
+ libcurl-tutorial.html curl_easy_reset.html curl_easy_escape.html \
+ curl_easy_unescape.html curl_multi_setopt.html curl_multi_socket.html \
+ curl_multi_timeout.html curl_formget.html curl_multi_assign.html \
+ curl_easy_pause.html curl_easy_recv.html curl_easy_send.html \
+ curl_multi_socket_action.html
+
+PDFPAGES = curl_easy_cleanup.pdf curl_easy_getinfo.pdf \
+ curl_easy_init.pdf curl_easy_perform.pdf curl_easy_setopt.pdf \
+ curl_easy_duphandle.pdf curl_formadd.pdf curl_formfree.pdf \
+ curl_getdate.pdf curl_getenv.pdf curl_slist_append.pdf \
+ curl_slist_free_all.pdf curl_version.pdf curl_version_info.pdf \
+ curl_escape.pdf curl_unescape.pdf curl_free.pdf curl_strequal.pdf \
+ curl_mprintf.pdf curl_global_init.pdf curl_global_cleanup.pdf \
+ curl_multi_add_handle.pdf curl_multi_cleanup.pdf curl_multi_fdset.pdf \
+ curl_multi_info_read.pdf curl_multi_init.pdf curl_multi_perform.pdf \
+ curl_multi_remove_handle.pdf curl_share_cleanup.pdf curl_share_init.pdf \
+ curl_share_setopt.pdf libcurl.pdf libcurl-multi.pdf libcurl-easy.pdf \
+ libcurl-share.pdf libcurl-errors.pdf curl_easy_strerror.pdf \
+ curl_multi_strerror.pdf curl_share_strerror.pdf \
+ curl_global_init_mem.pdf libcurl-tutorial.pdf curl_easy_reset.pdf \
+ curl_easy_escape.pdf curl_easy_unescape.pdf curl_multi_setopt.pdf \
+ curl_multi_socket.pdf curl_multi_timeout.pdf curl_formget.pdf \
+ curl_multi_assign.pdf curl_easy_pause.pdf curl_easy_recv.pdf \
+ curl_easy_send.pdf curl_multi_socket_action.pdf
+
+CLEANFILES = $(HTMLPAGES) $(PDFPAGES)
+
+EXTRA_DIST = $(man_MANS) $(HTMLPAGES) index.html $(PDFPAGES) libcurl.m4 ABI \
+ symbols-in-versions
+MAN2HTML= roffit --mandir=. < $< >$@
+
+SUFFIXES = .3 .html
+
+html: $(HTMLPAGES)
+
+.3.html:
+ $(MAN2HTML)
+
+pdf: $(PDFPAGES)
+
+.3.pdf:
+ @(foo=`echo $@ | sed -e 's/\.[0-9]$$//g'`; \
+ groff -Tps -man $< >$$foo.ps; \
+ ps2pdf $$foo.ps $@; \
+ rm $$foo.ps; \
+ echo "converted $< to $@")
diff --git a/docs/libcurl/Makefile.in b/docs/libcurl/Makefile.in
new file mode 100644
index 0000000..4815127
--- /dev/null
+++ b/docs/libcurl/Makefile.in
@@ -0,0 +1,539 @@
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005 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.
+
+@SET_MAKE@
+
+#
+#
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = docs/libcurl
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
+ $(top_srcdir)/m4/curl-confopts.m4 \
+ $(top_srcdir)/m4/curl-functions.m4 \
+ $(top_srcdir)/m4/curl-override.m4 \
+ $(top_srcdir)/m4/curl-reentrant.m4 \
+ $(top_srcdir)/m4/curl-system.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/lib/curl_config.h \
+ $(top_builddir)/src/curl_config.h \
+ $(top_builddir)/include/curl/curlbuild.h
+CONFIG_CLEAN_FILES =
+depcomp =
+am__depfiles_maybe =
+SOURCES =
+DIST_SOURCES =
+man3dir = $(mandir)/man3
+am__installdirs = "$(DESTDIR)$(man3dir)"
+MANS = $(man_MANS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_LIBHOSTNAME_FALSE = @BUILD_LIBHOSTNAME_FALSE@
+BUILD_LIBHOSTNAME_TRUE = @BUILD_LIBHOSTNAME_TRUE@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_OPTIONS = @CONFIGURE_OPTIONS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CROSSCOMPILING_FALSE = @CROSSCOMPILING_FALSE@
+CROSSCOMPILING_TRUE = @CROSSCOMPILING_TRUE@
+CURLDEBUG_FALSE = @CURLDEBUG_FALSE@
+CURLDEBUG_TRUE = @CURLDEBUG_TRUE@
+CURL_CA_BUNDLE = @CURL_CA_BUNDLE@
+CURL_CFLAG_EXTRAS = @CURL_CFLAG_EXTRAS@
+CURL_DISABLE_DICT = @CURL_DISABLE_DICT@
+CURL_DISABLE_FILE = @CURL_DISABLE_FILE@
+CURL_DISABLE_FTP = @CURL_DISABLE_FTP@
+CURL_DISABLE_GOPHER = @CURL_DISABLE_GOPHER@
+CURL_DISABLE_HTTP = @CURL_DISABLE_HTTP@
+CURL_DISABLE_IMAP = @CURL_DISABLE_IMAP@
+CURL_DISABLE_LDAP = @CURL_DISABLE_LDAP@
+CURL_DISABLE_LDAPS = @CURL_DISABLE_LDAPS@
+CURL_DISABLE_POP3 = @CURL_DISABLE_POP3@
+CURL_DISABLE_PROXY = @CURL_DISABLE_PROXY@
+CURL_DISABLE_RTSP = @CURL_DISABLE_RTSP@
+CURL_DISABLE_SMTP = @CURL_DISABLE_SMTP@
+CURL_DISABLE_TELNET = @CURL_DISABLE_TELNET@
+CURL_DISABLE_TFTP = @CURL_DISABLE_TFTP@
+CURL_LIBS = @CURL_LIBS@
+CURL_NETWORK_LIBS = @CURL_NETWORK_LIBS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_SHARED = @ENABLE_SHARED@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_LDAP_SSL = @HAVE_LDAP_SSL@
+HAVE_LIBZ = @HAVE_LIBZ@
+HAVE_LIBZ_FALSE = @HAVE_LIBZ_FALSE@
+HAVE_LIBZ_TRUE = @HAVE_LIBZ_TRUE@
+HAVE_PK11_CREATEGENERICOBJECT = @HAVE_PK11_CREATEGENERICOBJECT@
+IDN_ENABLED = @IDN_ENABLED@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+IPV6_ENABLED = @IPV6_ENABLED@
+KRB4_ENABLED = @KRB4_ENABLED@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBCURL_LIBS = @LIBCURL_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+MANOPT = @MANOPT@
+MIMPURE_FALSE = @MIMPURE_FALSE@
+MIMPURE_TRUE = @MIMPURE_TRUE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NO_UNDEFINED_FALSE = @NO_UNDEFINED_FALSE@
+NO_UNDEFINED_TRUE = @NO_UNDEFINED_TRUE@
+NROFF = @NROFF@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH = @PATH@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+PKGADD_NAME = @PKGADD_NAME@
+PKGADD_PKG = @PKGADD_PKG@
+PKGADD_VENDOR = @PKGADD_VENDOR@
+PKGCONFIG = @PKGCONFIG@
+RANDOM_FILE = @RANDOM_FILE@
+RANLIB = @RANLIB@
+REQUIRE_LIB_DEPS = @REQUIRE_LIB_DEPS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SONAME_BUMP_FALSE = @SONAME_BUMP_FALSE@
+SONAME_BUMP_TRUE = @SONAME_BUMP_TRUE@
+SSL_ENABLED = @SSL_ENABLED@
+STATICLIB_FALSE = @STATICLIB_FALSE@
+STATICLIB_TRUE = @STATICLIB_TRUE@
+STRIP = @STRIP@
+SUPPORT_FEATURES = @SUPPORT_FEATURES@
+SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
+TEST_SERVER_LIBS = @TEST_SERVER_LIBS@
+USE_ARES = @USE_ARES@
+USE_EMBEDDED_ARES_FALSE = @USE_EMBEDDED_ARES_FALSE@
+USE_EMBEDDED_ARES_TRUE = @USE_EMBEDDED_ARES_TRUE@
+USE_GNUTLS = @USE_GNUTLS@
+USE_LIBRTMP = @USE_LIBRTMP@
+USE_LIBSSH2 = @USE_LIBSSH2@
+USE_MANUAL_FALSE = @USE_MANUAL_FALSE@
+USE_MANUAL_TRUE = @USE_MANUAL_TRUE@
+USE_NSS = @USE_NSS@
+USE_OPENLDAP = @USE_OPENLDAP@
+USE_POLARSSL = @USE_POLARSSL@
+USE_SSLEAY = @USE_SSLEAY@
+USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
+VERSION = @VERSION@
+VERSIONNUM = @VERSIONNUM@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+libext = @libext@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+AUTOMAKE_OPTIONS = foreign no-dependencies
+man_MANS = curl_easy_cleanup.3 curl_easy_getinfo.3 curl_easy_init.3 \
+ curl_easy_perform.3 curl_easy_setopt.3 curl_easy_duphandle.3 \
+ curl_formadd.3 curl_formfree.3 curl_getdate.3 curl_getenv.3 \
+ curl_slist_append.3 curl_slist_free_all.3 curl_version.3 \
+ curl_version_info.3 curl_escape.3 curl_unescape.3 curl_free.3 \
+ curl_strequal.3 curl_mprintf.3 curl_global_init.3 curl_global_cleanup.3 \
+ curl_multi_add_handle.3 curl_multi_cleanup.3 curl_multi_fdset.3 \
+ curl_multi_info_read.3 curl_multi_init.3 curl_multi_perform.3 \
+ curl_multi_remove_handle.3 curl_share_cleanup.3 curl_share_init.3 \
+ curl_share_setopt.3 libcurl.3 libcurl-easy.3 libcurl-multi.3 \
+ libcurl-share.3 libcurl-errors.3 curl_easy_strerror.3 \
+ curl_multi_strerror.3 curl_share_strerror.3 curl_global_init_mem.3 \
+ libcurl-tutorial.3 curl_easy_reset.3 curl_easy_escape.3 \
+ curl_easy_unescape.3 curl_multi_setopt.3 curl_multi_socket.3 \
+ curl_multi_timeout.3 curl_formget.3 curl_multi_assign.3 \
+ curl_easy_pause.3 curl_easy_recv.3 curl_easy_send.3 \
+ curl_multi_socket_action.3
+
+HTMLPAGES = curl_easy_cleanup.html curl_easy_getinfo.html \
+ curl_easy_init.html curl_easy_perform.html curl_easy_setopt.html \
+ curl_easy_duphandle.html curl_formadd.html curl_formfree.html \
+ curl_getdate.html curl_getenv.html curl_slist_append.html \
+ curl_slist_free_all.html curl_version.html curl_version_info.html \
+ curl_escape.html curl_unescape.html curl_free.html curl_strequal.html \
+ curl_mprintf.html curl_global_init.html curl_global_cleanup.html \
+ curl_multi_add_handle.html curl_multi_cleanup.html \
+ curl_multi_fdset.html curl_multi_info_read.html curl_multi_init.html \
+ curl_multi_perform.html curl_multi_remove_handle.html \
+ curl_share_cleanup.html curl_share_init.html curl_share_setopt.html \
+ libcurl.html libcurl-multi.html libcurl-easy.html libcurl-share.html \
+ libcurl-errors.html curl_easy_strerror.html curl_multi_strerror.html \
+ curl_share_strerror.html curl_global_init_mem.html \
+ libcurl-tutorial.html curl_easy_reset.html curl_easy_escape.html \
+ curl_easy_unescape.html curl_multi_setopt.html curl_multi_socket.html \
+ curl_multi_timeout.html curl_formget.html curl_multi_assign.html \
+ curl_easy_pause.html curl_easy_recv.html curl_easy_send.html \
+ curl_multi_socket_action.html
+
+PDFPAGES = curl_easy_cleanup.pdf curl_easy_getinfo.pdf \
+ curl_easy_init.pdf curl_easy_perform.pdf curl_easy_setopt.pdf \
+ curl_easy_duphandle.pdf curl_formadd.pdf curl_formfree.pdf \
+ curl_getdate.pdf curl_getenv.pdf curl_slist_append.pdf \
+ curl_slist_free_all.pdf curl_version.pdf curl_version_info.pdf \
+ curl_escape.pdf curl_unescape.pdf curl_free.pdf curl_strequal.pdf \
+ curl_mprintf.pdf curl_global_init.pdf curl_global_cleanup.pdf \
+ curl_multi_add_handle.pdf curl_multi_cleanup.pdf curl_multi_fdset.pdf \
+ curl_multi_info_read.pdf curl_multi_init.pdf curl_multi_perform.pdf \
+ curl_multi_remove_handle.pdf curl_share_cleanup.pdf curl_share_init.pdf \
+ curl_share_setopt.pdf libcurl.pdf libcurl-multi.pdf libcurl-easy.pdf \
+ libcurl-share.pdf libcurl-errors.pdf curl_easy_strerror.pdf \
+ curl_multi_strerror.pdf curl_share_strerror.pdf \
+ curl_global_init_mem.pdf libcurl-tutorial.pdf curl_easy_reset.pdf \
+ curl_easy_escape.pdf curl_easy_unescape.pdf curl_multi_setopt.pdf \
+ curl_multi_socket.pdf curl_multi_timeout.pdf curl_formget.pdf \
+ curl_multi_assign.pdf curl_easy_pause.pdf curl_easy_recv.pdf \
+ curl_easy_send.pdf curl_multi_socket_action.pdf
+
+CLEANFILES = $(HTMLPAGES) $(PDFPAGES)
+EXTRA_DIST = $(man_MANS) $(HTMLPAGES) index.html $(PDFPAGES) libcurl.m4 ABI \
+ symbols-in-versions
+
+MAN2HTML = roffit --mandir=. < $< >$@
+SUFFIXES = .3 .html
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .3 .html .pdf
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign docs/libcurl/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --foreign docs/libcurl/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+ -rm -f libtool
+uninstall-info-am:
+install-man3: $(man3_MANS) $(man_MANS)
+ @$(NORMAL_INSTALL)
+ test -z "$(man3dir)" || $(mkdir_p) "$(DESTDIR)$(man3dir)"
+ @list='$(man3_MANS) $(dist_man3_MANS) $(nodist_man3_MANS)'; \
+ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+ for i in $$l2; do \
+ case "$$i" in \
+ *.3*) 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/^.*\\.//'`; \
+ case "$$ext" in \
+ 3*) ;; \
+ *) ext='3' ;; \
+ esac; \
+ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+ inst=`echo $$inst | sed -e 's/^.*\///'`; \
+ inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man3dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man3dir)/$$inst"; \
+ done
+uninstall-man3:
+ @$(NORMAL_UNINSTALL)
+ @list='$(man3_MANS) $(dist_man3_MANS) $(nodist_man3_MANS)'; \
+ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+ for i in $$l2; do \
+ case "$$i" in \
+ *.3*) list="$$list $$i" ;; \
+ esac; \
+ done; \
+ for i in $$list; do \
+ ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+ case "$$ext" in \
+ 3*) ;; \
+ *) ext='3' ;; \
+ esac; \
+ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+ inst=`echo $$inst | sed -e 's/^.*\///'`; \
+ inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+ echo " rm -f '$(DESTDIR)$(man3dir)/$$inst'"; \
+ rm -f "$(DESTDIR)$(man3dir)/$$inst"; \
+ done
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ list='$(DISTFILES)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkdir_p) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(MANS)
+installdirs:
+ for dir in "$(DESTDIR)$(man3dir)"; do \
+ test -z "$$dir" || $(mkdir_p) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-libtool
+
+dvi: dvi-am
+
+dvi-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man: install-man3
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am uninstall-man
+
+uninstall-man: uninstall-man3
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ distclean distclean-generic distclean-libtool distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-exec install-exec-am \
+ install-info install-info-am install-man install-man3 \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ uninstall uninstall-am uninstall-info-am uninstall-man \
+ uninstall-man3
+
+
+html: $(HTMLPAGES)
+
+.3.html:
+ $(MAN2HTML)
+
+pdf: $(PDFPAGES)
+
+.3.pdf:
+ @(foo=`echo $@ | sed -e 's/\.[0-9]$$//g'`; \
+ groff -Tps -man $< >$$foo.ps; \
+ ps2pdf $$foo.ps $@; \
+ rm $$foo.ps; \
+ echo "converted $< to $@")
+# 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/docs/libcurl/curl_easy_cleanup.3 b/docs/libcurl/curl_easy_cleanup.3
new file mode 100644
index 0000000..75a3703
--- /dev/null
+++ b/docs/libcurl/curl_easy_cleanup.3
@@ -0,0 +1,50 @@
+.\" **************************************************************************
+.\" * _ _ ____ _
+.\" * Project ___| | | | _ \| |
+.\" * / __| | | | |_) | |
+.\" * | (__| |_| | _ <| |___
+.\" * \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2007, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" *
+.\" * This software is licensed as described in the file COPYING, which
+.\" * you should have received as part of this distribution. The terms
+.\" * are also available at http://curl.haxx.se/docs/copyright.html.
+.\" *
+.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+.\" * copies of the Software, and permit persons to whom the Software is
+.\" * furnished to do so, under the terms of the COPYING file.
+.\" *
+.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+.\" * KIND, either express or implied.
+.\" *
+.\" **************************************************************************
+.\"
+.TH curl_easy_cleanup 3 "22 aug 2007" "libcurl 7.17.0" "libcurl Manual"
+.SH NAME
+curl_easy_cleanup - End a libcurl easy session
+.SH SYNOPSIS
+.B #include <curl/curl.h>
+
+.BI "void curl_easy_cleanup(CURL *" handle ");"
+
+.SH DESCRIPTION
+This function must be the last function to call for an easy session. It is the
+opposite of the \fIcurl_easy_init(3)\fP function and must be called with the
+same \fIhandle\fP as input that the curl_easy_init call returned.
+
+This will effectively close all connections this handle has used and possibly
+has kept open until now. Don't call this function if you intend to transfer
+more files.
+
+Any uses of the \fBhandle\fP after this function has been called are
+illegal. This kills the handle and all memory associated with it!
+
+With libcurl versions prior to 7.17.: when you've called this, you can safely
+remove all the strings you've previously told libcurl to use, as it won't use
+them anymore now.
+.SH RETURN VALUE
+None
+.SH "SEE ALSO"
+.BR curl_easy_init "(3), "
+
diff --git a/docs/libcurl/curl_easy_cleanup.html b/docs/libcurl/curl_easy_cleanup.html
new file mode 100644
index 0000000..bc113e6
--- /dev/null
+++ b/docs/libcurl/curl_easy_cleanup.html
@@ -0,0 +1,59 @@
+<html><head>
+<title>curl_easy_cleanup man page</title>
+<meta name="generator" content="roffit 0.7">
+<STYLE type="text/css">
+P.level0 {
+ padding-left: 2em;
+}
+
+P.level1 {
+ padding-left: 4em;
+}
+
+P.level2 {
+ padding-left: 6em;
+}
+
+span.emphasis {
+ font-style: italic;
+}
+
+span.bold {
+ font-weight: bold;
+}
+
+span.manpage {
+ font-weight: bold;
+}
+
+h2.nroffsh {
+ background-color: #e0e0e0;
+}
+
+span.nroffip {
+ font-weight: bold;
+ font-size: 120%;
+ font-family: monospace;
+}
+
+p.roffit {
+ text-align: center;
+ font-size: 80%;
+}
+</STYLE>
+</head><body>
+
+<p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
+<p class="level0">curl_easy_cleanup - End a libcurl easy session <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><span Class="bold">#include &lt;curl/curl.h&gt;</span>
+<p class="level0"><span Class="bold">void curl_easy_cleanup(CURL * handle );</span>
+<p class="level0"><a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">This function must be the last function to call for an easy session. It is the opposite of the <a class="emphasis" href="./curl_easy_init.html">curl_easy_init(3)</a> function and must be called with the same <span Class="emphasis">handle</span> as input that the curl_easy_init call returned.
+<p class="level0">This will effectively close all connections this handle has used and possibly has kept open until now. Don't call this function if you intend to transfer more files.
+<p class="level0">Any uses of the <span Class="bold">handle</span> after this function has been called are illegal. This kills the handle and all memory associated with it!
+<p class="level0">With libcurl versions prior to 7.17.: when you've called this, you can safely remove all the strings you've previously told libcurl to use, as it won't use them anymore now. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">None <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><a class="manpage" href="./curl_easy_init.html">curl_easy_init (3)</a> <span Class="manpage"> </span>
+<p class="level0"><p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_easy_cleanup.pdf b/docs/libcurl/curl_easy_cleanup.pdf
new file mode 100644
index 0000000..404b42f
--- /dev/null
+++ b/docs/libcurl/curl_easy_cleanup.pdf
Binary files differ
diff --git a/docs/libcurl/curl_easy_duphandle.3 b/docs/libcurl/curl_easy_duphandle.3
new file mode 100644
index 0000000..3fae30e
--- /dev/null
+++ b/docs/libcurl/curl_easy_duphandle.3
@@ -0,0 +1,33 @@
+.\" You can view this file with:
+.\" nroff -man [file]
+.\"
+.TH curl_easy_duphandle 3 "18 September 2001" "libcurl 7.9" "libcurl Manual"
+.SH NAME
+curl_easy_duphandle - Clone a libcurl session handle
+.SH SYNOPSIS
+.B #include <curl/curl.h>
+
+.BI "CURL *curl_easy_duphandle(CURL *"handle ");"
+
+.SH DESCRIPTION
+This function will return a new curl handle, a duplicate, using all the
+options previously set in the input curl \fIhandle\fP. Both handles can
+subsequently be used independently and they must both be freed with
+\fIcurl_easy_cleanup(3)\fP.
+
+All strings that the input handle has been told to point to (as opposed to
+copy) with previous calls to \fIcurl_easy_setopt(3)\fP using char * inputs,
+will be pointed to by the new handle as well. You must therefore make sure to
+keep the data around until both handles have been cleaned up.
+
+The new handle will \fBnot\fP inherit any state information, no connections,
+no SSL sessions and no cookies.
+
+\fBNote\fP that even in multi-threaded programs, this function must be called
+in a synchronous way, the input handle may not be in use when cloned.
+.SH RETURN VALUE
+If this function returns NULL, something went wrong and no valid handle was
+returned.
+.SH "SEE ALSO"
+.BR curl_easy_init "(3)," curl_easy_cleanup "(3)," curl_global_init "(3)
+
diff --git a/docs/libcurl/curl_easy_duphandle.html b/docs/libcurl/curl_easy_duphandle.html
new file mode 100644
index 0000000..d072ded
--- /dev/null
+++ b/docs/libcurl/curl_easy_duphandle.html
@@ -0,0 +1,59 @@
+<html><head>
+<title>curl_easy_duphandle man page</title>
+<meta name="generator" content="roffit 0.7">
+<STYLE type="text/css">
+P.level0 {
+ padding-left: 2em;
+}
+
+P.level1 {
+ padding-left: 4em;
+}
+
+P.level2 {
+ padding-left: 6em;
+}
+
+span.emphasis {
+ font-style: italic;
+}
+
+span.bold {
+ font-weight: bold;
+}
+
+span.manpage {
+ font-weight: bold;
+}
+
+h2.nroffsh {
+ background-color: #e0e0e0;
+}
+
+span.nroffip {
+ font-weight: bold;
+ font-size: 120%;
+ font-family: monospace;
+}
+
+p.roffit {
+ text-align: center;
+ font-size: 80%;
+}
+</STYLE>
+</head><body>
+
+<p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
+<p class="level0">curl_easy_duphandle - Clone a libcurl session handle <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><span Class="bold">#include &lt;curl/curl.h&gt;</span>
+<p class="level0"><span Class="bold">CURL *curl_easy_duphandle(CURL *handle );</span>
+<p class="level0"><a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">This function will return a new curl handle, a duplicate, using all the options previously set in the input curl <span Class="emphasis">handle</span>. Both handles can subsequently be used independently and they must both be freed with <a class="emphasis" href="./curl_easy_cleanup.html">curl_easy_cleanup(3)</a>.
+<p class="level0">All strings that the input handle has been told to point to (as opposed to copy) with previous calls to <a class="emphasis" href="./curl_easy_setopt.html">curl_easy_setopt(3)</a> using char * inputs, will be pointed to by the new handle as well. You must therefore make sure to keep the data around until both handles have been cleaned up.
+<p class="level0">The new handle will <span Class="bold">not</span> inherit any state information, no connections, no SSL sessions and no cookies.
+<p class="level0"><span Class="bold">Note</span> that even in multi-threaded programs, this function must be called in a synchronous way, the input handle may not be in use when cloned. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">If this function returns NULL, something went wrong and no valid handle was returned. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><a class="manpage" href="./curl_easy_init.html">curl_easy_init (3)</a> <a class="manpage" href="./curl_easy_cleanup.html"> curl_easy_cleanup (3)</a> <a class="manpage" href="./curl_global_init.html"> curl_global_init (3)</a>
+<p class="level0"><p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_easy_duphandle.pdf b/docs/libcurl/curl_easy_duphandle.pdf
new file mode 100644
index 0000000..342d3bb
--- /dev/null
+++ b/docs/libcurl/curl_easy_duphandle.pdf
Binary files differ
diff --git a/docs/libcurl/curl_easy_escape.3 b/docs/libcurl/curl_easy_escape.3
new file mode 100644
index 0000000..2c09875
--- /dev/null
+++ b/docs/libcurl/curl_easy_escape.3
@@ -0,0 +1,46 @@
+.\" **************************************************************************
+.\" * _ _ ____ _
+.\" * Project ___| | | | _ \| |
+.\" * / __| | | | |_) | |
+.\" * | (__| |_| | _ <| |___
+.\" * \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2008, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" *
+.\" * This software is licensed as described in the file COPYING, which
+.\" * you should have received as part of this distribution. The terms
+.\" * are also available at http://curl.haxx.se/docs/copyright.html.
+.\" *
+.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+.\" * copies of the Software, and permit persons to whom the Software is
+.\" * furnished to do so, under the terms of the COPYING file.
+.\" *
+.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+.\" * KIND, either express or implied.
+.\" *
+.\" **************************************************************************
+.\"
+.TH curl_easy_escape 3 "7 April 2006" "libcurl 7.15.4" "libcurl Manual"
+.SH NAME
+curl_easy_escape - URL encodes the given string
+.SH SYNOPSIS
+.B #include <curl/curl.h>
+.sp
+.BI "char *curl_easy_escape( CURL *" curl ", char *" url ", int "length " );"
+.ad
+.SH DESCRIPTION
+This function converts the given input string to an URL encoded string and
+returns that as a new allocated string. All input characters that are not a-z,
+A-Z or 0-9 are converted to their "URL escaped" version (%NN where NN is a
+two-digit hexadecimal number).
+
+If the \fBlength\fP argument is set to 0 (zero), \fIcurl_easy_escape(3)\fP
+uses strlen() on the input \fBurl\fP to find out the size.
+
+You must \fIcurl_free(3)\fP the returned string when you're done with it.
+.SH AVAILABILITY
+Added in 7.15.4 and replaces the old \fIcurl_escape(3)\fP function.
+.SH RETURN VALUE
+A pointer to a zero terminated string or NULL if it failed.
+.SH "SEE ALSO"
+.BR curl_easy_unescape "(3), " curl_free "(3), " RFC 2396
diff --git a/docs/libcurl/curl_easy_escape.html b/docs/libcurl/curl_easy_escape.html
new file mode 100644
index 0000000..1ecf464
--- /dev/null
+++ b/docs/libcurl/curl_easy_escape.html
@@ -0,0 +1,58 @@
+<html><head>
+<title>curl_easy_escape man page</title>
+<meta name="generator" content="roffit 0.7">
+<STYLE type="text/css">
+P.level0 {
+ padding-left: 2em;
+}
+
+P.level1 {
+ padding-left: 4em;
+}
+
+P.level2 {
+ padding-left: 6em;
+}
+
+span.emphasis {
+ font-style: italic;
+}
+
+span.bold {
+ font-weight: bold;
+}
+
+span.manpage {
+ font-weight: bold;
+}
+
+h2.nroffsh {
+ background-color: #e0e0e0;
+}
+
+span.nroffip {
+ font-weight: bold;
+ font-size: 120%;
+ font-family: monospace;
+}
+
+p.roffit {
+ text-align: center;
+ font-size: 80%;
+}
+</STYLE>
+</head><body>
+
+<p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
+<p class="level0">curl_easy_escape - URL encodes the given string <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><span Class="bold">#include &lt;curl/curl.h&gt;</span>
+<p class="level0"><span Class="bold">char *curl_easy_escape( CURL * curl , char * url , int length );</span>
+<p class="level0"><a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">This function converts the given input string to an URL encoded string and returns that as a new allocated string. All input characters that are not a-z, A-Z or 0-9 are converted to their "URL escaped" version (%NN where NN is a two-digit hexadecimal number).
+<p class="level0">If the <span Class="bold">length</span> argument is set to 0 (zero), <a class="emphasis" href="./curl_easy_escape.html">curl_easy_escape(3)</a> uses strlen() on the input <span Class="bold">url</span> to find out the size.
+<p class="level0">You must <a class="emphasis" href="./curl_free.html">curl_free(3)</a> the returned string when you're done with it. <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Added in 7.15.4 and replaces the old <a class="emphasis" href="./curl_escape.html">curl_escape(3)</a> function. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">A pointer to a zero terminated string or NULL if it failed. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><a class="manpage" href="./curl_easy_unescape.html">curl_easy_unescape (3)</a> <a class="manpage" href="./curl_free.html"> curl_free (3)</a> <span Class="manpage"> RFC 2396</span> <p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_easy_escape.pdf b/docs/libcurl/curl_easy_escape.pdf
new file mode 100644
index 0000000..7945390
--- /dev/null
+++ b/docs/libcurl/curl_easy_escape.pdf
Binary files differ
diff --git a/docs/libcurl/curl_easy_getinfo.3 b/docs/libcurl/curl_easy_getinfo.3
new file mode 100644
index 0000000..9f298ed
--- /dev/null
+++ b/docs/libcurl/curl_easy_getinfo.3
@@ -0,0 +1,287 @@
+.\" **************************************************************************
+.\" * _ _ ____ _
+.\" * Project ___| | | | _ \| |
+.\" * / __| | | | |_) | |
+.\" * | (__| |_| | _ <| |___
+.\" * \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" *
+.\" * This software is licensed as described in the file COPYING, which
+.\" * you should have received as part of this distribution. The terms
+.\" * are also available at http://curl.haxx.se/docs/copyright.html.
+.\" *
+.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+.\" * copies of the Software, and permit persons to whom the Software is
+.\" * furnished to do so, under the terms of the COPYING file.
+.\" *
+.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+.\" * KIND, either express or implied.
+.\" *
+.\" **************************************************************************
+.\"
+.TH curl_easy_getinfo 3 "11 Feb 2009" "libcurl 7.19.4" "libcurl Manual"
+.SH NAME
+curl_easy_getinfo - extract information from a curl handle
+.SH SYNOPSIS
+.B #include <curl/curl.h>
+
+.B "CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, ... );"
+
+.SH DESCRIPTION
+Request internal information from the curl session with this function. The
+third argument \fBMUST\fP be a pointer to a long, a pointer to a char *, a
+pointer to a struct curl_slist * or a pointer to a double (as this
+documentation describes further down). The data pointed-to will be filled in
+accordingly and can be relied upon only if the function returns CURLE_OK. Use
+this function AFTER a performed transfer if you want to get transfer- oriented
+data.
+
+You should not free the memory returned by this function unless it is
+explicitly mentioned below.
+.SH AVAILABLE INFORMATION
+The following information can be extracted:
+.IP CURLINFO_EFFECTIVE_URL
+Pass a pointer to a char pointer to receive the last used effective URL.
+.IP CURLINFO_RESPONSE_CODE
+Pass a pointer to a long to receive the last received HTTP or FTP code. This
+option was known as CURLINFO_HTTP_CODE in libcurl 7.10.7 and earlier. This
+will be zero if no server response code has been received. Note that a proxy's
+CONNECT response should be read with \fICURLINFO_HTTP_CONNECTCODE\fP and not
+this.
+.IP CURLINFO_HTTP_CONNECTCODE
+Pass a pointer to a long to receive the last received proxy response code to a
+CONNECT request.
+.IP CURLINFO_FILETIME
+Pass a pointer to a long to receive the remote time of the retrieved document
+(in number of seconds since 1 jan 1970 in the GMT/UTC time zone). If you get
+-1, it can be because of many reasons (unknown, the server hides it or the
+server doesn't support the command that tells document time etc) and the time
+of the document is unknown. Note that you must tell the server to collect this
+information before the transfer is made, by using the CURLOPT_FILETIME option
+to \fIcurl_easy_setopt(3)\fP or you will unconditionally get a -1 back. (Added
+in 7.5)
+.IP CURLINFO_TOTAL_TIME
+Pass a pointer to a double to receive the total time in seconds for the
+previous transfer, including name resolving, TCP connect etc.
+.IP CURLINFO_NAMELOOKUP_TIME
+Pass a pointer to a double to receive the time, in seconds, it took from the
+start until the name resolving was completed.
+.IP CURLINFO_CONNECT_TIME
+Pass a pointer to a double to receive the time, in seconds, it took from the
+start until the connect to the remote host (or proxy) was completed.
+.IP CURLINFO_APPCONNECT_TIME
+Pass a pointer to a double to receive the time, in seconds, it took from the
+start until the SSL/SSH connect/handshake to the remote host was completed.
+This time is most often very near to the PRETRANSFER time, except for cases
+such as HTTP pippelining where the pretransfer time can be delayed due to
+waits in line for the pipeline and more. (Added in 7.19.0)
+.IP CURLINFO_PRETRANSFER_TIME
+Pass a pointer to a double to receive the time, in seconds, it took from the
+start until the file transfer is just about to begin. This includes all
+pre-transfer commands and negotiations that are specific to the particular
+protocol(s) involved.
+.IP CURLINFO_STARTTRANSFER_TIME
+Pass a pointer to a double to receive the time, in seconds, it took from the
+start until the first byte is just about to be transferred. This includes
+CURLINFO_PRETRANSFER_TIME and also the time the server needs to calculate
+the result.
+.IP CURLINFO_REDIRECT_TIME
+Pass a pointer to a double to receive the total time, in seconds, it took for
+all redirection steps include name lookup, connect, pretransfer and transfer
+before final transaction was started. CURLINFO_REDIRECT_TIME contains the
+complete execution time for multiple redirections. (Added in 7.9.7)
+.IP CURLINFO_REDIRECT_COUNT
+Pass a pointer to a long to receive the total number of redirections that were
+actually followed. (Added in 7.9.7)
+.IP CURLINFO_REDIRECT_URL
+Pass a pointer to a char pointer to receive the URL a redirect \fIwould\fP
+take you to if you would enable CURLOPT_FOLLOWLOCATION. This can come very
+handy if you think using the built-in libcurl redirect logic isn't good enough
+for you but you would still prefer to avoid implementing all the magic of
+figuring out the new URL. (Added in 7.18.2)
+.IP CURLINFO_SIZE_UPLOAD
+Pass a pointer to a double to receive the total amount of bytes that were
+uploaded.
+.IP CURLINFO_SIZE_DOWNLOAD
+Pass a pointer to a double to receive the total amount of bytes that were
+downloaded. The amount is only for the latest transfer and will be reset again
+for each new transfer.
+.IP CURLINFO_SPEED_DOWNLOAD
+Pass a pointer to a double to receive the average download speed that curl
+measured for the complete download. Measured in bytes/second.
+.IP CURLINFO_SPEED_UPLOAD
+Pass a pointer to a double to receive the average upload speed that curl
+measured for the complete upload. Measured in bytes/second.
+.IP CURLINFO_HEADER_SIZE
+Pass a pointer to a long to receive the total size of all the headers
+received. Measured in number of bytes.
+.IP CURLINFO_REQUEST_SIZE
+Pass a pointer to a long to receive the total size of the issued
+requests. This is so far only for HTTP requests. Note that this may be more
+than one request if FOLLOWLOCATION is true.
+.IP CURLINFO_SSL_VERIFYRESULT
+Pass a pointer to a long to receive the result of the certification
+verification that was requested (using the CURLOPT_SSL_VERIFYPEER option to
+\fIcurl_easy_setopt(3)\fP).
+.IP CURLINFO_SSL_ENGINES
+Pass the address of a 'struct curl_slist *' to receive a linked-list of
+OpenSSL crypto-engines supported. Note that engines are normally implemented
+in separate dynamic libraries. Hence not all the returned engines may be
+available at run-time. \fBNOTE:\fP you must call \fIcurl_slist_free_all(3)\fP
+on the list pointer once you're done with it, as libcurl will not free the
+data for you. (Added in 7.12.3)
+.IP CURLINFO_CONTENT_LENGTH_DOWNLOAD
+Pass a pointer to a double to receive the content-length of the download. This
+is the value read from the Content-Length: field. Since 7.19.4, this returns -1
+if the size isn't known.
+.IP CURLINFO_CONTENT_LENGTH_UPLOAD
+Pass a pointer to a double to receive the specified size of the upload. Since
+7.19.4, this returns -1 if the size isn't known.
+.IP CURLINFO_CONTENT_TYPE
+Pass a pointer to a char pointer to receive the content-type of the downloaded
+object. This is the value read from the Content-Type: field. If you get NULL,
+it means that the server didn't send a valid Content-Type header or that the
+protocol used doesn't support this.
+.IP CURLINFO_PRIVATE
+Pass a pointer to a char pointer to receive the pointer to the private data
+associated with the curl handle (set with the CURLOPT_PRIVATE option to
+\fIcurl_easy_setopt(3)\fP). Please note that for internal reasons, the
+value is returned as a char pointer, although effectively being a 'void *'.
+(Added in 7.10.3)
+.IP CURLINFO_HTTPAUTH_AVAIL
+Pass a pointer to a long to receive a bitmask indicating the authentication
+method(s) available. The meaning of the bits is explained in the
+CURLOPT_HTTPAUTH option for \fIcurl_easy_setopt(3)\fP. (Added in 7.10.8)
+.IP CURLINFO_PROXYAUTH_AVAIL
+Pass a pointer to a long to receive a bitmask indicating the authentication
+method(s) available for your proxy authentication. (Added in 7.10.8)
+.IP CURLINFO_OS_ERRNO
+Pass a pointer to a long to receive the errno variable from a connect failure.
+Note that the value is only set on failure, it is not reset upon a
+successfull operation. (Added in 7.12.2)
+.IP CURLINFO_NUM_CONNECTS
+Pass a pointer to a long to receive how many new connections libcurl had to
+create to achieve the previous transfer (only the successful connects are
+counted). Combined with \fICURLINFO_REDIRECT_COUNT\fP you are able to know
+how many times libcurl successfully reused existing connection(s) or not. See
+the Connection Options of \fIcurl_easy_setopt(3)\fP to see how libcurl tries
+to make persistent connections to save time. (Added in 7.12.3)
+.IP CURLINFO_PRIMARY_IP
+Pass a pointer to a char pointer to receive the pointer to a zero-terminated
+string holding the IP address of the most recent connection done with this
+\fBcurl\fP handle. This string may be IPv6 if that's enabled. Note that you
+get a pointer to a memory area that will be re-used at next request so you
+need to copy the string if you want to keep the information. (Added in 7.19.0)
+.IP CURLINFO_PRIMARY_PORT
+Pass a pointer to a long to receive the destination port of the most recent
+connection done with this \fBcurl\fP handle. (Added in 7.21.0)
+.IP CURLINFO_LOCAL_IP
+Pass a pointer to a char pointer to receive the pointer to a zero-terminated
+string holding the local (source) IP address of the most recent connection done
+with this \fBcurl\fP handle. This string may be IPv6 if that's enabled. The
+same restrictions apply as to \fICURLINFO_PRIMARY_IP\fP. (Added in 7.21.0)
+.IP CURLINFO_LOCAL_PORT
+Pass a pointer to a long to receive the local (source) port of the most recent
+connection done with this \fBcurl\fP handle. (Added in 7.21.0)
+.IP CURLINFO_COOKIELIST
+Pass a pointer to a 'struct curl_slist *' to receive a linked-list of all
+cookies cURL knows (expired ones, too). Don't forget to
+\fIcurl_slist_free_all(3)\fP the list after it has been used. If there are no
+cookies (cookies for the handle have not been enabled or simply none have been
+received) 'struct curl_slist *' will be set to point to NULL. (Added in
+7.14.1)
+.IP CURLINFO_LASTSOCKET
+Pass a pointer to a long to receive the last socket used by this curl
+session. If the socket is no longer valid, -1 is returned. When you finish
+working with the socket, you must call curl_easy_cleanup() as usual and let
+libcurl close the socket and cleanup other resources associated with the
+handle. This is typically used in combination with \fICURLOPT_CONNECT_ONLY\fP.
+(Added in 7.15.2)
+
+NOTE: this API is not really working on win64, since the SOCKET type on win64
+is 64 bit large while its 'long' is only 32 bits.
+.IP CURLINFO_FTP_ENTRY_PATH
+Pass a pointer to a char pointer to receive a pointer to a string holding the
+path of the entry path. That is the initial path libcurl ended up in when
+logging on to the remote FTP server. This stores a NULL as pointer if
+something is wrong. (Added in 7.15.4)
+.IP CURLINFO_CERTINFO
+Pass a pointer to a 'struct curl_certinfo *' and you'll get it set to point to
+struct that holds a number of linked lists with info about the certificate
+chain, assuming you had CURLOPT_CERTINFO enabled when the previous request was
+done. The struct reports how many certs it found and then you can extract info
+for each of those certs by following the linked lists. The info chain is
+provided in a series of data in the format "name:content" where the content is
+for the specific named data. See also the certinfo.c example. NOTE: this
+option is only available in libcurl built with OpenSSL support. (Added in
+7.19.1)
+.IP CURLINFO_CONDITION_UNMET
+Pass a pointer to a long to receive the number 1 if the condition provided in
+the previous request didn't match (see \fICURLOPT_TIMECONDITION\fP). Alas, if
+this returns a 1 you know that the reason you didn't get data in return is
+because it didn't fulfill the condition. The long ths argument points to will
+get a zero stored if the condition instead was met. (Added in 7.19.4)
+.IP CURLINFO_RTSP_SESSION_ID
+Pass a pointer to a char pointer to receive a pointer to a string holding the
+most recent RTSP Session ID.
+
+Applications wishing to resume an RTSP session on another connection should
+retreive this info before closing the active connection.
+.IP CURLINFO_RTSP_CLIENT_CSEQ
+Pass a pointer to a long to receive the next CSeq that will be used by the
+application.
+.IP CURLINFO_RTSP_SERVER_CSEQ
+Pass a pointer to a long to receive the next server CSeq that will be expected
+by the application.
+
+\fI(NOTE: listening for server initiated requests is currently
+unimplemented).\fP
+
+Applications wishing to resume an RTSP session on another connection should
+retreive this info before closing the active connection.
+.IP CURLINFO_RTSP_CSEQ_RECV
+Pass a pointer to a long to receive the most recently received CSeq from the
+server. If your application encounters a \fICURLE_RTSP_CSEQ_ERROR\fP then you
+may wish to troubleshoot and/or fix the CSeq mismatch by peeking at this value.
+.SH TIMES
+.nf
+An overview of the six time values available from curl_easy_getinfo()
+
+curl_easy_perform()
+ |
+ |--NAMELOOKUP
+ |--|--CONNECT
+ |--|--|--APPCONNECT
+ |--|--|--|--PRETRANSFER
+ |--|--|--|--|--STARTTRANSFER
+ |--|--|--|--|--|--TOTAL
+ |--|--|--|--|--|--REDIRECT
+.fi
+.IP NAMELOOKUP
+\fICURLINFO_NAMELOOKUP_TIME\fP. The time it took from the start until the name
+resolving was completed.
+.IP CONNECT
+\fICURLINFO_CONNECT_TIME\fP. The time it took from the start until the connect
+to the remote host (or proxy) was completed.
+.IP APPCONNECT
+\fICURLINFO_APPCONNECT_TIME\fP. The time it took from the start until the SSL
+connect/handshake with the remote host was completed. (Added in in 7.19.0)
+.IP PRETRANSFER
+\fICURLINFO_PRETRANSFER_TIME\fP. The time it took from the start until the
+file transfer is just about to begin. This includes all pre-transfer commands
+and negotiations that are specific to the particular protocol(s) involved.
+.IP STARTTRANSFER
+\fICURLINFO_STARTTRANSFER_TIME\fP. The time it took from the start until the
+first byte is just about to be transferred.
+.IP TOTAL
+\fICURLINFO_TOTAL_TIME\fP. Total time of the previous request.
+.IP REDIRECT
+\fICURLINFO_REDIRECT_TIME\fP. The time it took for all redirection steps
+include name lookup, connect, pretransfer and transfer before final
+transaction was started. So, this is zero if no redirection took place.
+.SH RETURN VALUE
+If the operation was successful, CURLE_OK is returned. Otherwise an
+appropriate error code will be returned.
+.SH "SEE ALSO"
+.BR curl_easy_setopt "(3)"
diff --git a/docs/libcurl/curl_easy_getinfo.html b/docs/libcurl/curl_easy_getinfo.html
new file mode 100644
index 0000000..5b949e9
--- /dev/null
+++ b/docs/libcurl/curl_easy_getinfo.html
@@ -0,0 +1,173 @@
+<html><head>
+<title>curl_easy_getinfo man page</title>
+<meta name="generator" content="roffit 0.7">
+<STYLE type="text/css">
+P.level0 {
+ padding-left: 2em;
+}
+
+P.level1 {
+ padding-left: 4em;
+}
+
+P.level2 {
+ padding-left: 6em;
+}
+
+span.emphasis {
+ font-style: italic;
+}
+
+span.bold {
+ font-weight: bold;
+}
+
+span.manpage {
+ font-weight: bold;
+}
+
+h2.nroffsh {
+ background-color: #e0e0e0;
+}
+
+span.nroffip {
+ font-weight: bold;
+ font-size: 120%;
+ font-family: monospace;
+}
+
+p.roffit {
+ text-align: center;
+ font-size: 80%;
+}
+</STYLE>
+</head><body>
+
+<p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
+<p class="level0">curl_easy_getinfo - extract information from a curl handle <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><span Class="bold">#include &lt;curl/curl.h&gt;</span>
+<p class="level0"><span Class="bold">CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, ... );</span>
+<p class="level0"><a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">Request internal information from the curl session with this function. The third argument <span Class="bold">MUST</span> be a pointer to a long, a pointer to a char *, a pointer to a struct curl_slist * or a pointer to a double (as this documentation describes further down). The data pointed-to will be filled in accordingly and can be relied upon only if the function returns CURLE_OK. Use this function AFTER a performed transfer if you want to get transfer- oriented data.
+<p class="level0">You should not free the memory returned by this function unless it is explicitly mentioned below. <a name="AVAILABLE"></a><h2 class="nroffsh">AVAILABLE INFORMATION</h2>
+<p class="level0">The following information can be extracted:
+<p class="level0"><a name="CURLINFOEFFECTIVEURL"></a><span class="nroffip">CURLINFO_EFFECTIVE_URL</span>
+<p class="level1">Pass a pointer to a char pointer to receive the last used effective URL.
+<p class="level0"><a name="CURLINFORESPONSECODE"></a><span class="nroffip">CURLINFO_RESPONSE_CODE</span>
+<p class="level1">Pass a pointer to a long to receive the last received HTTP or FTP code. This option was known as CURLINFO_HTTP_CODE in libcurl 7.10.7 and earlier. This will be zero if no server response code has been received. Note that a proxy's CONNECT response should be read with <a class="emphasis" href="#CURLINFOHTTPCONNECTCODE">CURLINFO_HTTP_CONNECTCODE</a> and not this.
+<p class="level0"><a name="CURLINFOHTTPCONNECTCODE"></a><span class="nroffip">CURLINFO_HTTP_CONNECTCODE</span>
+<p class="level1">Pass a pointer to a long to receive the last received proxy response code to a CONNECT request.
+<p class="level0"><a name="CURLINFOFILETIME"></a><span class="nroffip">CURLINFO_FILETIME</span>
+<p class="level1">Pass a pointer to a long to receive the remote time of the retrieved document (in number of seconds since 1 jan 1970 in the GMT/UTC time zone). If you get -1, it can be because of many reasons (unknown, the server hides it or the server doesn't support the command that tells document time etc) and the time of the document is unknown. Note that you must tell the server to collect this information before the transfer is made, by using the CURLOPT_FILETIME option to <a class="emphasis" href="./curl_easy_setopt.html">curl_easy_setopt(3)</a> or you will unconditionally get a -1 back. (Added in 7.5)
+<p class="level0"><a name="CURLINFOTOTALTIME"></a><span class="nroffip">CURLINFO_TOTAL_TIME</span>
+<p class="level1">Pass a pointer to a double to receive the total time in seconds for the previous transfer, including name resolving, TCP connect etc.
+<p class="level0"><a name="CURLINFONAMELOOKUPTIME"></a><span class="nroffip">CURLINFO_NAMELOOKUP_TIME</span>
+<p class="level1">Pass a pointer to a double to receive the time, in seconds, it took from the start until the name resolving was completed.
+<p class="level0"><a name="CURLINFOCONNECTTIME"></a><span class="nroffip">CURLINFO_CONNECT_TIME</span>
+<p class="level1">Pass a pointer to a double to receive the time, in seconds, it took from the start until the connect to the remote host (or proxy) was completed.
+<p class="level0"><a name="CURLINFOAPPCONNECTTIME"></a><span class="nroffip">CURLINFO_APPCONNECT_TIME</span>
+<p class="level1">Pass a pointer to a double to receive the time, in seconds, it took from the start until the SSL/SSH connect/handshake to the remote host was completed. This time is most often very near to the PRETRANSFER time, except for cases such as HTTP pippelining where the pretransfer time can be delayed due to waits in line for the pipeline and more. (Added in 7.19.0)
+<p class="level0"><a name="CURLINFOPRETRANSFERTIME"></a><span class="nroffip">CURLINFO_PRETRANSFER_TIME</span>
+<p class="level1">Pass a pointer to a double to receive the time, in seconds, it took from the start until the file transfer is just about to begin. This includes all pre-transfer commands and negotiations that are specific to the particular protocol(s) involved.
+<p class="level0"><a name="CURLINFOSTARTTRANSFERTIME"></a><span class="nroffip">CURLINFO_STARTTRANSFER_TIME</span>
+<p class="level1">Pass a pointer to a double to receive the time, in seconds, it took from the start until the first byte is just about to be transferred. This includes CURLINFO_PRETRANSFER_TIME and also the time the server needs to calculate the result.
+<p class="level0"><a name="CURLINFOREDIRECTTIME"></a><span class="nroffip">CURLINFO_REDIRECT_TIME</span>
+<p class="level1">Pass a pointer to a double to receive the total time, in seconds, it took for all redirection steps include name lookup, connect, pretransfer and transfer before final transaction was started. CURLINFO_REDIRECT_TIME contains the complete execution time for multiple redirections. (Added in 7.9.7)
+<p class="level0"><a name="CURLINFOREDIRECTCOUNT"></a><span class="nroffip">CURLINFO_REDIRECT_COUNT</span>
+<p class="level1">Pass a pointer to a long to receive the total number of redirections that were actually followed. (Added in 7.9.7)
+<p class="level0"><a name="CURLINFOREDIRECTURL"></a><span class="nroffip">CURLINFO_REDIRECT_URL</span>
+<p class="level1">Pass a pointer to a char pointer to receive the URL a redirect <span Class="emphasis">would</span> take you to if you would enable CURLOPT_FOLLOWLOCATION. This can come very handy if you think using the built-in libcurl redirect logic isn't good enough for you but you would still prefer to avoid implementing all the magic of figuring out the new URL. (Added in 7.18.2)
+<p class="level0"><a name="CURLINFOSIZEUPLOAD"></a><span class="nroffip">CURLINFO_SIZE_UPLOAD</span>
+<p class="level1">Pass a pointer to a double to receive the total amount of bytes that were uploaded.
+<p class="level0"><a name="CURLINFOSIZEDOWNLOAD"></a><span class="nroffip">CURLINFO_SIZE_DOWNLOAD</span>
+<p class="level1">Pass a pointer to a double to receive the total amount of bytes that were downloaded. The amount is only for the latest transfer and will be reset again for each new transfer.
+<p class="level0"><a name="CURLINFOSPEEDDOWNLOAD"></a><span class="nroffip">CURLINFO_SPEED_DOWNLOAD</span>
+<p class="level1">Pass a pointer to a double to receive the average download speed that curl measured for the complete download. Measured in bytes/second.
+<p class="level0"><a name="CURLINFOSPEEDUPLOAD"></a><span class="nroffip">CURLINFO_SPEED_UPLOAD</span>
+<p class="level1">Pass a pointer to a double to receive the average upload speed that curl measured for the complete upload. Measured in bytes/second.
+<p class="level0"><a name="CURLINFOHEADERSIZE"></a><span class="nroffip">CURLINFO_HEADER_SIZE</span>
+<p class="level1">Pass a pointer to a long to receive the total size of all the headers received. Measured in number of bytes.
+<p class="level0"><a name="CURLINFOREQUESTSIZE"></a><span class="nroffip">CURLINFO_REQUEST_SIZE</span>
+<p class="level1">Pass a pointer to a long to receive the total size of the issued requests. This is so far only for HTTP requests. Note that this may be more than one request if FOLLOWLOCATION is true.
+<p class="level0"><a name="CURLINFOSSLVERIFYRESULT"></a><span class="nroffip">CURLINFO_SSL_VERIFYRESULT</span>
+<p class="level1">Pass a pointer to a long to receive the result of the certification verification that was requested (using the CURLOPT_SSL_VERIFYPEER option to <a class="emphasis" href="./curl_easy_setopt.html">curl_easy_setopt(3)</a>).
+<p class="level0"><a name="CURLINFOSSLENGINES"></a><span class="nroffip">CURLINFO_SSL_ENGINES</span>
+<p class="level1">Pass the address of a 'struct curl_slist *' to receive a linked-list of OpenSSL crypto-engines supported. Note that engines are normally implemented in separate dynamic libraries. Hence not all the returned engines may be available at run-time. <span Class="bold">NOTE:</span> you must call <a class="emphasis" href="./curl_slist_free_all.html">curl_slist_free_all(3)</a> on the list pointer once you're done with it, as libcurl will not free the data for you. (Added in 7.12.3)
+<p class="level0"><a name="CURLINFOCONTENTLENGTHDOWNLOAD"></a><span class="nroffip">CURLINFO_CONTENT_LENGTH_DOWNLOAD</span>
+<p class="level1">Pass a pointer to a double to receive the content-length of the download. This is the value read from the Content-Length: field. Since 7.19.4, this returns -1 if the size isn't known.
+<p class="level0"><a name="CURLINFOCONTENTLENGTHUPLOAD"></a><span class="nroffip">CURLINFO_CONTENT_LENGTH_UPLOAD</span>
+<p class="level1">Pass a pointer to a double to receive the specified size of the upload. Since 7.19.4, this returns -1 if the size isn't known.
+<p class="level0"><a name="CURLINFOCONTENTTYPE"></a><span class="nroffip">CURLINFO_CONTENT_TYPE</span>
+<p class="level1">Pass a pointer to a char pointer to receive the content-type of the downloaded object. This is the value read from the Content-Type: field. If you get NULL, it means that the server didn't send a valid Content-Type header or that the protocol used doesn't support this.
+<p class="level0"><a name="CURLINFOPRIVATE"></a><span class="nroffip">CURLINFO_PRIVATE</span>
+<p class="level1">Pass a pointer to a char pointer to receive the pointer to the private data associated with the curl handle (set with the CURLOPT_PRIVATE option to <a class="emphasis" href="./curl_easy_setopt.html">curl_easy_setopt(3)</a>). Please note that for internal reasons, the value is returned as a char pointer, although effectively being a 'void *'. (Added in 7.10.3)
+<p class="level0"><a name="CURLINFOHTTPAUTHAVAIL"></a><span class="nroffip">CURLINFO_HTTPAUTH_AVAIL</span>
+<p class="level1">Pass a pointer to a long to receive a bitmask indicating the authentication method(s) available. The meaning of the bits is explained in the CURLOPT_HTTPAUTH option for <a class="emphasis" href="./curl_easy_setopt.html">curl_easy_setopt(3)</a>. (Added in 7.10.8)
+<p class="level0"><a name="CURLINFOPROXYAUTHAVAIL"></a><span class="nroffip">CURLINFO_PROXYAUTH_AVAIL</span>
+<p class="level1">Pass a pointer to a long to receive a bitmask indicating the authentication method(s) available for your proxy authentication. (Added in 7.10.8)
+<p class="level0"><a name="CURLINFOOSERRNO"></a><span class="nroffip">CURLINFO_OS_ERRNO</span>
+<p class="level1">Pass a pointer to a long to receive the errno variable from a connect failure. Note that the value is only set on failure, it is not reset upon a successfull operation. (Added in 7.12.2)
+<p class="level0"><a name="CURLINFONUMCONNECTS"></a><span class="nroffip">CURLINFO_NUM_CONNECTS</span>
+<p class="level1">Pass a pointer to a long to receive how many new connections libcurl had to create to achieve the previous transfer (only the successful connects are counted). Combined with <a class="emphasis" href="#CURLINFOREDIRECTCOUNT">CURLINFO_REDIRECT_COUNT</a> you are able to know how many times libcurl successfully reused existing connection(s) or not. See the Connection Options of <a class="emphasis" href="./curl_easy_setopt.html">curl_easy_setopt(3)</a> to see how libcurl tries to make persistent connections to save time. (Added in 7.12.3)
+<p class="level0"><a name="CURLINFOPRIMARYIP"></a><span class="nroffip">CURLINFO_PRIMARY_IP</span>
+<p class="level1">Pass a pointer to a char pointer to receive the pointer to a zero-terminated string holding the IP address of the most recent connection done with this <span Class="bold">curl</span> handle. This string may be IPv6 if that's enabled. Note that you get a pointer to a memory area that will be re-used at next request so you need to copy the string if you want to keep the information. (Added in 7.19.0)
+<p class="level0"><a name="CURLINFOPRIMARYPORT"></a><span class="nroffip">CURLINFO_PRIMARY_PORT</span>
+<p class="level1">Pass a pointer to a long to receive the destination port of the most recent connection done with this <span Class="bold">curl</span> handle. (Added in 7.21.0)
+<p class="level0"><a name="CURLINFOLOCALIP"></a><span class="nroffip">CURLINFO_LOCAL_IP</span>
+<p class="level1">Pass a pointer to a char pointer to receive the pointer to a zero-terminated string holding the local (source) IP address of the most recent connection done with this <span Class="bold">curl</span> handle. This string may be IPv6 if that's enabled. The same restrictions apply as to <a class="emphasis" href="#CURLINFOPRIMARYIP">CURLINFO_PRIMARY_IP</a>. (Added in 7.21.0)
+<p class="level0"><a name="CURLINFOLOCALPORT"></a><span class="nroffip">CURLINFO_LOCAL_PORT</span>
+<p class="level1">Pass a pointer to a long to receive the local (source) port of the most recent connection done with this <span Class="bold">curl</span> handle. (Added in 7.21.0)
+<p class="level0"><a name="CURLINFOCOOKIELIST"></a><span class="nroffip">CURLINFO_COOKIELIST</span>
+<p class="level1">Pass a pointer to a 'struct curl_slist *' to receive a linked-list of all cookies cURL knows (expired ones, too). Don't forget to <a class="emphasis" href="./curl_slist_free_all.html">curl_slist_free_all(3)</a> the list after it has been used. If there are no cookies (cookies for the handle have not been enabled or simply none have been received) 'struct curl_slist *' will be set to point to NULL. (Added in 7.14.1)
+<p class="level0"><a name="CURLINFOLASTSOCKET"></a><span class="nroffip">CURLINFO_LASTSOCKET</span>
+<p class="level1">Pass a pointer to a long to receive the last socket used by this curl session. If the socket is no longer valid, -1 is returned. When you finish working with the socket, you must call curl_easy_cleanup() as usual and let libcurl close the socket and cleanup other resources associated with the handle. This is typically used in combination with <span Class="emphasis">CURLOPT_CONNECT_ONLY</span>. (Added in 7.15.2)
+<p class="level1">NOTE: this API is not really working on win64, since the SOCKET type on win64 is 64 bit large while its 'long' is only 32 bits.
+<p class="level0"><a name="CURLINFOFTPENTRYPATH"></a><span class="nroffip">CURLINFO_FTP_ENTRY_PATH</span>
+<p class="level1">Pass a pointer to a char pointer to receive a pointer to a string holding the path of the entry path. That is the initial path libcurl ended up in when logging on to the remote FTP server. This stores a NULL as pointer if something is wrong. (Added in 7.15.4)
+<p class="level0"><a name="CURLINFOCERTINFO"></a><span class="nroffip">CURLINFO_CERTINFO</span>
+<p class="level1">Pass a pointer to a 'struct curl_certinfo *' and you'll get it set to point to struct that holds a number of linked lists with info about the certificate chain, assuming you had CURLOPT_CERTINFO enabled when the previous request was done. The struct reports how many certs it found and then you can extract info for each of those certs by following the linked lists. The info chain is provided in a series of data in the format "name:content" where the content is for the specific named data. See also the certinfo.c example. NOTE: this option is only available in libcurl built with OpenSSL support. (Added in 7.19.1)
+<p class="level0"><a name="CURLINFOCONDITIONUNMET"></a><span class="nroffip">CURLINFO_CONDITION_UNMET</span>
+<p class="level1">Pass a pointer to a long to receive the number 1 if the condition provided in the previous request didn't match (see <span Class="emphasis">CURLOPT_TIMECONDITION</span>). Alas, if this returns a 1 you know that the reason you didn't get data in return is because it didn't fulfill the condition. The long ths argument points to will get a zero stored if the condition instead was met. (Added in 7.19.4)
+<p class="level0"><a name="CURLINFORTSPSESSIONID"></a><span class="nroffip">CURLINFO_RTSP_SESSION_ID</span>
+<p class="level1">Pass a pointer to a char pointer to receive a pointer to a string holding the most recent RTSP Session ID.
+<p class="level1">Applications wishing to resume an RTSP session on another connection should retreive this info before closing the active connection.
+<p class="level0"><a name="CURLINFORTSPCLIENTCSEQ"></a><span class="nroffip">CURLINFO_RTSP_CLIENT_CSEQ</span>
+<p class="level1">Pass a pointer to a long to receive the next CSeq that will be used by the application.
+<p class="level0"><a name="CURLINFORTSPSERVERCSEQ"></a><span class="nroffip">CURLINFO_RTSP_SERVER_CSEQ</span>
+<p class="level1">Pass a pointer to a long to receive the next server CSeq that will be expected by the application.
+<p class="level1"><span class="emphasis">(NOTE: listening for server initiated requests is currently unimplemented).</span>
+<p class="level1">Applications wishing to resume an RTSP session on another connection should retreive this info before closing the active connection.
+<p class="level0"><a name="CURLINFORTSPCSEQRECV"></a><span class="nroffip">CURLINFO_RTSP_CSEQ_RECV</span>
+<p class="level1">Pass a pointer to a long to receive the most recently received CSeq from the server. If your application encounters a <span Class="emphasis">CURLE_RTSP_CSEQ_ERROR</span> then you may wish to troubleshoot and/or fix the CSeq mismatch by peeking at this value. <a name="TIMES"></a><h2 class="nroffsh">TIMES</h2>
+<p class="level0"><pre>
+<p class="level0">An overview of the six time values available from curl_easy_getinfo()
+ <p class="level0">curl_easy_perform()
+ &nbsp; |
+ &nbsp; |--NAMELOOKUP
+ &nbsp; |--|--CONNECT
+ &nbsp; |--|--|--APPCONNECT
+ &nbsp; |--|--|--|--PRETRANSFER
+ &nbsp; |--|--|--|--|--STARTTRANSFER
+ &nbsp; |--|--|--|--|--|--TOTAL
+ &nbsp; |--|--|--|--|--|--REDIRECT
+ </pre>
+
+<p class="level0">
+<p class="level0"><a name="NAMELOOKUP"></a><span class="nroffip">NAMELOOKUP</span>
+<p class="level1"><a class="emphasis" href="#CURLINFONAMELOOKUPTIME">CURLINFO_NAMELOOKUP_TIME</a>. The time it took from the start until the name resolving was completed.
+<p class="level0"><a name="CONNECT"></a><span class="nroffip">CONNECT</span>
+<p class="level1"><a class="emphasis" href="#CURLINFOCONNECTTIME">CURLINFO_CONNECT_TIME</a>. The time it took from the start until the connect to the remote host (or proxy) was completed.
+<p class="level0"><a name="APPCONNECT"></a><span class="nroffip">APPCONNECT</span>
+<p class="level1"><a class="emphasis" href="#CURLINFOAPPCONNECTTIME">CURLINFO_APPCONNECT_TIME</a>. The time it took from the start until the SSL connect/handshake with the remote host was completed. (Added in in 7.19.0)
+<p class="level0"><a name="PRETRANSFER"></a><span class="nroffip">PRETRANSFER</span>
+<p class="level1"><a class="emphasis" href="#CURLINFOPRETRANSFERTIME">CURLINFO_PRETRANSFER_TIME</a>. The time it took from the start until the file transfer is just about to begin. This includes all pre-transfer commands and negotiations that are specific to the particular protocol(s) involved.
+<p class="level0"><a name="STARTTRANSFER"></a><span class="nroffip">STARTTRANSFER</span>
+<p class="level1"><a class="emphasis" href="#CURLINFOSTARTTRANSFERTIME">CURLINFO_STARTTRANSFER_TIME</a>. The time it took from the start until the first byte is just about to be transferred.
+<p class="level0"><a name="TOTAL"></a><span class="nroffip">TOTAL</span>
+<p class="level1"><a class="emphasis" href="#CURLINFOTOTALTIME">CURLINFO_TOTAL_TIME</a>. Total time of the previous request.
+<p class="level0"><a name="REDIRECT"></a><span class="nroffip">REDIRECT</span>
+<p class="level1"><a class="emphasis" href="#CURLINFOREDIRECTTIME">CURLINFO_REDIRECT_TIME</a>. The time it took for all redirection steps include name lookup, connect, pretransfer and transfer before final transaction was started. So, this is zero if no redirection took place. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">If the operation was successful, CURLE_OK is returned. Otherwise an appropriate error code will be returned. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><a class="manpage" href="./curl_easy_setopt.html">curl_easy_setopt (3)</a> <p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_easy_getinfo.pdf b/docs/libcurl/curl_easy_getinfo.pdf
new file mode 100644
index 0000000..0a89a84
--- /dev/null
+++ b/docs/libcurl/curl_easy_getinfo.pdf
Binary files differ
diff --git a/docs/libcurl/curl_easy_init.3 b/docs/libcurl/curl_easy_init.3
new file mode 100644
index 0000000..478db5c
--- /dev/null
+++ b/docs/libcurl/curl_easy_init.3
@@ -0,0 +1,31 @@
+.\"
+.TH curl_easy_init 3 "4 March 2002" "libcurl 7.8.1" "libcurl Manual"
+.SH NAME
+curl_easy_init - Start a libcurl easy session
+.SH SYNOPSIS
+.B #include <curl/curl.h>
+
+.BI "CURL *curl_easy_init( );"
+
+.SH DESCRIPTION
+This function must be the first function to call, and it returns a CURL easy
+handle that you must use as input to other easy-functions. curl_easy_init
+initializes curl and this call \fBMUST\fP have a corresponding call to
+\fIcurl_easy_cleanup(3)\fP when the operation is complete.
+
+If you did not already call \fIcurl_global_init(3)\fP,
+\fIcurl_easy_init(3)\fP does it automatically.
+This may be lethal in multi-threaded cases, since \fIcurl_global_init(3)\fP is
+not thread-safe, and it may result in resource problems because there is
+no corresponding cleanup.
+
+You are strongly advised to not allow this automatic behaviour, by
+calling \fIcurl_global_init(3)\fP yourself properly.
+See the description in \fBlibcurl\fP(3) of global environment
+requirements for details of how to use this function.
+
+.SH RETURN VALUE
+If this function returns NULL, something went wrong and you cannot use the
+other curl functions.
+.SH "SEE ALSO"
+.BR curl_easy_cleanup "(3), " curl_global_init "(3), " curl_easy_reset "(3)"
diff --git a/docs/libcurl/curl_easy_init.html b/docs/libcurl/curl_easy_init.html
new file mode 100644
index 0000000..7e63cbd
--- /dev/null
+++ b/docs/libcurl/curl_easy_init.html
@@ -0,0 +1,58 @@
+<html><head>
+<title>curl_easy_init man page</title>
+<meta name="generator" content="roffit 0.7">
+<STYLE type="text/css">
+P.level0 {
+ padding-left: 2em;
+}
+
+P.level1 {
+ padding-left: 4em;
+}
+
+P.level2 {
+ padding-left: 6em;
+}
+
+span.emphasis {
+ font-style: italic;
+}
+
+span.bold {
+ font-weight: bold;
+}
+
+span.manpage {
+ font-weight: bold;
+}
+
+h2.nroffsh {
+ background-color: #e0e0e0;
+}
+
+span.nroffip {
+ font-weight: bold;
+ font-size: 120%;
+ font-family: monospace;
+}
+
+p.roffit {
+ text-align: center;
+ font-size: 80%;
+}
+</STYLE>
+</head><body>
+
+<p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
+<p class="level0">curl_easy_init - Start a libcurl easy session <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><span Class="bold">#include &lt;curl/curl.h&gt;</span>
+<p class="level0"><span Class="bold">CURL *curl_easy_init( );</span>
+<p class="level0"><a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">This function must be the first function to call, and it returns a CURL easy handle that you must use as input to other easy-functions. curl_easy_init initializes curl and this call <span Class="bold">MUST</span> have a corresponding call to <a class="emphasis" href="./curl_easy_cleanup.html">curl_easy_cleanup(3)</a> when the operation is complete.
+<p class="level0">If you did not already call <a class="emphasis" href="./curl_global_init.html">curl_global_init(3)</a>, <a class="emphasis" href="./curl_easy_init.html">curl_easy_init(3)</a> does it automatically. This may be lethal in multi-threaded cases, since <a class="emphasis" href="./curl_global_init.html">curl_global_init(3)</a> is not thread-safe, and it may result in resource problems because there is no corresponding cleanup.
+<p class="level0">You are strongly advised to not allow this automatic behaviour, by calling <a class="emphasis" href="./curl_global_init.html">curl_global_init(3)</a> yourself properly. See the description in <span Class="bold">libcurl</span>(3) of global environment requirements for details of how to use this function.
+<p class="level0"><a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">If this function returns NULL, something went wrong and you cannot use the other curl functions. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><a class="manpage" href="./curl_easy_cleanup.html">curl_easy_cleanup (3)</a> <a class="manpage" href="./curl_global_init.html"> curl_global_init (3)</a> <a class="manpage" href="./curl_easy_reset.html"> curl_easy_reset (3)</a> <p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_easy_init.pdf b/docs/libcurl/curl_easy_init.pdf
new file mode 100644
index 0000000..6ddd483
--- /dev/null
+++ b/docs/libcurl/curl_easy_init.pdf
Binary files differ
diff --git a/docs/libcurl/curl_easy_pause.3 b/docs/libcurl/curl_easy_pause.3
new file mode 100644
index 0000000..4d16ecf
--- /dev/null
+++ b/docs/libcurl/curl_easy_pause.3
@@ -0,0 +1,65 @@
+.\"
+.TH curl_easy_pause 3 "17 Dec 2007" "libcurl 7.18.0" "libcurl Manual"
+.SH NAME
+curl_easy_pause - pause and unpause a connection
+.SH SYNOPSIS
+.B #include <curl/curl.h>
+
+.BI "CURLcode curl_easy_pause(CURL *"handle ", int "bitmask " );"
+
+.SH DESCRIPTION
+Using this function, you can explicitly mark a running connection to get
+paused, and you can unpause a connection that was previously paused.
+
+A connection can be paused by using this function or by letting the read
+or the write callbacks return the proper magic return code
+(\fICURL_READFUNC_PAUSE\fP and \fICURL_WRITEFUNC_PAUSE\fP). A write callback
+that returns pause signals to the library that it couldn't take care of any
+data at all, and that data will then be delivered again to the callback when
+the writing is later unpaused.
+
+NOTE: while it may feel tempting, take care and notice that you cannot call
+this function from another thread.
+
+When this function is called to unpause reading, the chance is high that you
+will get your write callback called before this function returns.
+
+The \fBhandle\fP argument is of course identifying the handle that operates on
+the connection you want to pause or unpause.
+
+The \fBbitmask\fP argument is a set of bits that sets the new state of the
+connection. The following bits can be used:
+.IP CURLPAUSE_RECV
+Pause receiving data. There will be no data received on this connection until
+this function is called again without this bit set. Thus, the write callback
+(\fICURLOPT_WRITEFUNCTION\fP) won't be called.
+.IP CURLPAUSE_SEND
+Pause sending data. There will be no data sent on this connection until this
+function is called again without this bit set. Thus, the read callback
+(\fICURLOPT_READFUNCTION\fP) won't be called.
+.IP CURLPAUSE_ALL
+Convenience define that pauses both directions.
+.IP CURLPAUSE_CONT
+Convenience define that unpauses both directions
+.SH RETURN VALUE
+CURLE_OK (zero) means that the option was set properly, and a non-zero return
+code means something wrong occurred after the new state was set. See the
+\fIlibcurl-errors(3)\fP man page for the full list with descriptions.
+.SH AVAILABILITY
+This function was added in libcurl 7.18.0. Before this version, there was no
+explicit support for pausing transfers.
+.SH "MEMORY USE"
+When pausing a read by returning the magic return code from a write callback,
+the read data is already in libcurl's internal buffers so it'll have to keep
+it in an allocated buffer until the reading is again unpaused using this
+function.
+
+If the downloaded data is compressed and is asked to get uncompressed
+automatically on download, libcurl will continue to uncompress the entire
+downloaded chunk and it will cache the data uncompressed. This has the side-
+effect that if you download something that is compressed a lot, it can result
+in a very large data amount needing to be allocated to save the data during
+the pause. This said, you should probably consider not using paused reading if
+you allow libcurl to uncompress data automatically.
+.SH "SEE ALSO"
+.BR curl_easy_cleanup "(3), " curl_easy_reset "(3)"
diff --git a/docs/libcurl/curl_easy_pause.html b/docs/libcurl/curl_easy_pause.html
new file mode 100644
index 0000000..a82a77b
--- /dev/null
+++ b/docs/libcurl/curl_easy_pause.html
@@ -0,0 +1,71 @@
+<html><head>
+<title>curl_easy_pause man page</title>
+<meta name="generator" content="roffit 0.7">
+<STYLE type="text/css">
+P.level0 {
+ padding-left: 2em;
+}
+
+P.level1 {
+ padding-left: 4em;
+}
+
+P.level2 {
+ padding-left: 6em;
+}
+
+span.emphasis {
+ font-style: italic;
+}
+
+span.bold {
+ font-weight: bold;
+}
+
+span.manpage {
+ font-weight: bold;
+}
+
+h2.nroffsh {
+ background-color: #e0e0e0;
+}
+
+span.nroffip {
+ font-weight: bold;
+ font-size: 120%;
+ font-family: monospace;
+}
+
+p.roffit {
+ text-align: center;
+ font-size: 80%;
+}
+</STYLE>
+</head><body>
+
+<p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
+<p class="level0">curl_easy_pause - pause and unpause a connection <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><span Class="bold">#include &lt;curl/curl.h&gt;</span>
+<p class="level0"><span Class="bold">CURLcode curl_easy_pause(CURL *handle , int bitmask );</span>
+<p class="level0"><a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">Using this function, you can explicitly mark a running connection to get paused, and you can unpause a connection that was previously paused.
+<p class="level0">A connection can be paused by using this function or by letting the read or the write callbacks return the proper magic return code (<span Class="emphasis">CURL_READFUNC_PAUSE</span> and <span Class="emphasis">CURL_WRITEFUNC_PAUSE</span>). A write callback that returns pause signals to the library that it couldn't take care of any data at all, and that data will then be delivered again to the callback when the writing is later unpaused.
+<p class="level0">NOTE: while it may feel tempting, take care and notice that you cannot call this function from another thread.
+<p class="level0">When this function is called to unpause reading, the chance is high that you will get your write callback called before this function returns.
+<p class="level0">The <span Class="bold">handle</span> argument is of course identifying the handle that operates on the connection you want to pause or unpause.
+<p class="level0">The <span Class="bold">bitmask</span> argument is a set of bits that sets the new state of the connection. The following bits can be used:
+<p class="level0"><a name="CURLPAUSERECV"></a><span class="nroffip">CURLPAUSE_RECV</span>
+<p class="level1">Pause receiving data. There will be no data received on this connection until this function is called again without this bit set. Thus, the write callback (<span Class="emphasis">CURLOPT_WRITEFUNCTION</span>) won't be called.
+<p class="level0"><a name="CURLPAUSESEND"></a><span class="nroffip">CURLPAUSE_SEND</span>
+<p class="level1">Pause sending data. There will be no data sent on this connection until this function is called again without this bit set. Thus, the read callback (<span Class="emphasis">CURLOPT_READFUNCTION</span>) won't be called.
+<p class="level0"><a name="CURLPAUSEALL"></a><span class="nroffip">CURLPAUSE_ALL</span>
+<p class="level1">Convenience define that pauses both directions.
+<p class="level0"><a name="CURLPAUSECONT"></a><span class="nroffip">CURLPAUSE_CONT</span>
+<p class="level1">Convenience define that unpauses both directions <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">CURLE_OK (zero) means that the option was set properly, and a non-zero return code means something wrong occurred after the new state was set. See the <span Class="emphasis">libcurl-errors(3)</span> man page for the full list with descriptions. <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">This function was added in libcurl 7.18.0. Before this version, there was no explicit support for pausing transfers. <a name="MEMORY"></a><h2 class="nroffsh">MEMORY USE</h2>
+<p class="level0">When pausing a read by returning the magic return code from a write callback, the read data is already in libcurl's internal buffers so it'll have to keep it in an allocated buffer until the reading is again unpaused using this function.
+<p class="level0">If the downloaded data is compressed and is asked to get uncompressed automatically on download, libcurl will continue to uncompress the entire downloaded chunk and it will cache the data uncompressed. This has the side- effect that if you download something that is compressed a lot, it can result in a very large data amount needing to be allocated to save the data during the pause. This said, you should probably consider not using paused reading if you allow libcurl to uncompress data automatically. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><a class="manpage" href="./curl_easy_cleanup.html">curl_easy_cleanup (3)</a> <a class="manpage" href="./curl_easy_reset.html"> curl_easy_reset (3)</a> <p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_easy_pause.pdf b/docs/libcurl/curl_easy_pause.pdf
new file mode 100644
index 0000000..ddc8dfd
--- /dev/null
+++ b/docs/libcurl/curl_easy_pause.pdf
Binary files differ
diff --git a/docs/libcurl/curl_easy_perform.3 b/docs/libcurl/curl_easy_perform.3
new file mode 100644
index 0000000..1ed006b
--- /dev/null
+++ b/docs/libcurl/curl_easy_perform.3
@@ -0,0 +1,39 @@
+.\" You can view this file with:
+.\" nroff -man [file]
+.\"
+.TH curl_easy_perform 3 "5 Mar 2001" "libcurl 7.7" "libcurl Manual"
+.SH NAME
+curl_easy_perform - Perform a file transfer
+.SH SYNOPSIS
+.B #include <curl/curl.h>
+.sp
+.BI "CURLcode curl_easy_perform(CURL *" handle ");"
+.ad
+.SH DESCRIPTION
+This function is called after the init and all the \fIcurl_easy_setopt(3)\fP
+calls are made, and will perform the transfer as described in the options. It
+must be called with the same
+.I handle
+as input as the curl_easy_init call returned.
+
+You can do any amount of calls to \fIcurl_easy_perform(3)\fP while using the
+same handle. If you intend to transfer more than one file, you are even
+encouraged to do so. libcurl will then attempt to re-use the same connection
+for the following transfers, thus making the operations faster, less CPU
+intense and using less network resources. Just note that you will have to use
+\fIcurl_easy_setopt(3)\fP between the invokes to set options for the following
+curl_easy_perform.
+
+You must never call this function simultaneously from two places using the
+same handle. Let the function return first before invoking it another time. If
+you want parallel transfers, you must use several curl handles.
+.SH RETURN VALUE
+0 means everything was ok, non-zero means an error occurred as
+.I <curl/curl.h>
+defines. If the CURLOPT_ERRORBUFFER was set with
+.I curl_easy_setopt
+there will be a readable error message in the error buffer when non-zero is
+returned.
+.SH "SEE ALSO"
+.BR curl_easy_init "(3), " curl_easy_setopt "(3), "
+
diff --git a/docs/libcurl/curl_easy_perform.html b/docs/libcurl/curl_easy_perform.html
new file mode 100644
index 0000000..8654fea
--- /dev/null
+++ b/docs/libcurl/curl_easy_perform.html
@@ -0,0 +1,58 @@
+<html><head>
+<title>curl_easy_perform man page</title>
+<meta name="generator" content="roffit 0.7">
+<STYLE type="text/css">
+P.level0 {
+ padding-left: 2em;
+}
+
+P.level1 {
+ padding-left: 4em;
+}
+
+P.level2 {
+ padding-left: 6em;
+}
+
+span.emphasis {
+ font-style: italic;
+}
+
+span.bold {
+ font-weight: bold;
+}
+
+span.manpage {
+ font-weight: bold;
+}
+
+h2.nroffsh {
+ background-color: #e0e0e0;
+}
+
+span.nroffip {
+ font-weight: bold;
+ font-size: 120%;
+ font-family: monospace;
+}
+
+p.roffit {
+ text-align: center;
+ font-size: 80%;
+}
+</STYLE>
+</head><body>
+
+<p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
+<p class="level0">curl_easy_perform - Perform a file transfer <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><span Class="bold">#include &lt;curl/curl.h&gt;</span>
+<p class="level0"><span Class="bold">CURLcode curl_easy_perform(CURL * handle );</span>
+<p class="level0"><a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">This function is called after the init and all the <a class="emphasis" href="./curl_easy_setopt.html">curl_easy_setopt(3)</a> calls are made, and will perform the transfer as described in the options. It must be called with the same <span Class="emphasis">handle</span> as input as the curl_easy_init call returned.
+<p class="level0">You can do any amount of calls to <a class="emphasis" href="./curl_easy_perform.html">curl_easy_perform(3)</a> while using the same handle. If you intend to transfer more than one file, you are even encouraged to do so. libcurl will then attempt to re-use the same connection for the following transfers, thus making the operations faster, less CPU intense and using less network resources. Just note that you will have to use <a class="emphasis" href="./curl_easy_setopt.html">curl_easy_setopt(3)</a> between the invokes to set options for the following curl_easy_perform.
+<p class="level0">You must never call this function simultaneously from two places using the same handle. Let the function return first before invoking it another time. If you want parallel transfers, you must use several curl handles. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">0 means everything was ok, non-zero means an error occurred as <span Class="emphasis">&lt;curl/curl.h&gt;</span> defines. If the CURLOPT_ERRORBUFFER was set with <span Class="emphasis">curl_easy_setopt</span> there will be a readable error message in the error buffer when non-zero is returned. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><a class="manpage" href="./curl_easy_init.html">curl_easy_init (3)</a> <a class="manpage" href="./curl_easy_setopt.html"> curl_easy_setopt (3)</a> <span Class="manpage"> </span>
+<p class="level0"><p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_easy_perform.pdf b/docs/libcurl/curl_easy_perform.pdf
new file mode 100644
index 0000000..5b3ee66
--- /dev/null
+++ b/docs/libcurl/curl_easy_perform.pdf
Binary files differ
diff --git a/docs/libcurl/curl_easy_recv.3 b/docs/libcurl/curl_easy_recv.3
new file mode 100644
index 0000000..1ede589
--- /dev/null
+++ b/docs/libcurl/curl_easy_recv.3
@@ -0,0 +1,69 @@
+.\" **************************************************************************
+.\" * _ _ ____ _
+.\" * Project ___| | | | _ \| |
+.\" * / __| | | | |_) | |
+.\" * | (__| |_| | _ <| |___
+.\" * \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2008, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" *
+.\" * This software is licensed as described in the file COPYING, which
+.\" * you should have received as part of this distribution. The terms
+.\" * are also available at http://curl.haxx.se/docs/copyright.html.
+.\" *
+.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+.\" * copies of the Software, and permit persons to whom the Software is
+.\" * furnished to do so, under the terms of the COPYING file.
+.\" *
+.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+.\" * KIND, either express or implied.
+.\" *
+.\" **************************************************************************
+.\"
+.TH curl_easy_recv 3 "29 April 2008" "libcurl 7.18.2" "libcurl Manual"
+.SH NAME
+curl_easy_recv - receives raw data on an "easy" connection
+.SH SYNOPSIS
+.B #include <curl/easy.h>
+.sp
+.BI "CURLcode curl_easy_recv( CURL *" curl ", void *" buffer ","
+.BI "size_t " buflen ", size_t *" n ");"
+.ad
+.SH DESCRIPTION
+This function receives raw data from the established connection. You may use
+it together with \fIcurl_easy_send(3)\fP to implement custom protocols using
+libcurl. This functionality can be particularly useful if you use proxies
+and/or SSL encryption: libcurl will take care of proxy negotiation and
+connection set-up.
+
+\fBbuffer\fP is a pointer to your buffer that will get the received
+data. \fBbuflen\fP is the maximum amount of data you can get in that
+buffer. The variable \fBn\fP points to will receive the number of received
+bytes.
+
+To establish the connection, set \fBCURLOPT_CONNECT_ONLY\fP option before
+calling \fIcurl_easy_perform(3)\fP. Note that \fIcurl_easy_recv(3)\fP does not
+work on connections that were created without this option.
+
+You must ensure that the socket has data to read before calling
+\fIcurl_easy_recv(3)\fP, otherwise the call will return \fBCURLE_AGAIN\fP -
+the socket is used in non-blocking mode internally. Use
+\fIcurl_easy_getinfo(3)\fP with \fBCURLINFO_LASTSOCKET\fP to obtain the
+socket; use your operating system facilities like \fIselect(2)\fP to check if
+it has any data you can read.
+.SH AVAILABILITY
+Added in 7.18.2.
+.SH RETURN VALUE
+On success, returns \fBCURLE_OK\fP, stores the received data into
+\fBbuffer\fP, and the number of bytes it actually read into \fB*n\fP.
+
+On failure, returns the appropriate error code.
+
+If there is no data to read, the function returns \fBCURLE_AGAIN\fP. Use
+your operating system facilities to wait until the data is ready, and retry.
+.SH EXAMPLE
+See \fBsendrecv.c\fP in \fBdocs/examples\fP directory for usage example.
+.SH "SEE ALSO"
+.BR curl_easy_setopt "(3), " curl_easy_perform "(3), "
+.BR curl_easy_getinfo "(3), "
+.BR curl_easy_send "(3) "
diff --git a/docs/libcurl/curl_easy_recv.html b/docs/libcurl/curl_easy_recv.html
new file mode 100644
index 0000000..51f77f9
--- /dev/null
+++ b/docs/libcurl/curl_easy_recv.html
@@ -0,0 +1,62 @@
+<html><head>
+<title>curl_easy_recv man page</title>
+<meta name="generator" content="roffit 0.7">
+<STYLE type="text/css">
+P.level0 {
+ padding-left: 2em;
+}
+
+P.level1 {
+ padding-left: 4em;
+}
+
+P.level2 {
+ padding-left: 6em;
+}
+
+span.emphasis {
+ font-style: italic;
+}
+
+span.bold {
+ font-weight: bold;
+}
+
+span.manpage {
+ font-weight: bold;
+}
+
+h2.nroffsh {
+ background-color: #e0e0e0;
+}
+
+span.nroffip {
+ font-weight: bold;
+ font-size: 120%;
+ font-family: monospace;
+}
+
+p.roffit {
+ text-align: center;
+ font-size: 80%;
+}
+</STYLE>
+</head><body>
+
+<p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
+<p class="level0">curl_easy_recv - receives raw data on an "easy" connection <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><span Class="bold">#include &lt;curl/easy.h&gt;</span>
+<p class="level0"><span Class="bold">CURLcode curl_easy_recv( CURL * curl , void * buffer ,</span> <span Class="bold">size_t buflen , size_t * n );</span>
+<p class="level0"><a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">This function receives raw data from the established connection. You may use it together with <a class="emphasis" href="./curl_easy_send.html">curl_easy_send(3)</a> to implement custom protocols using libcurl. This functionality can be particularly useful if you use proxies and/or SSL encryption: libcurl will take care of proxy negotiation and connection set-up.
+<p class="level0"><span Class="bold">buffer</span> is a pointer to your buffer that will get the received data. <span Class="bold">buflen</span> is the maximum amount of data you can get in that buffer. The variable <span Class="bold">n</span> points to will receive the number of received bytes.
+<p class="level0">To establish the connection, set <span Class="bold">CURLOPT_CONNECT_ONLY</span> option before calling <a class="emphasis" href="./curl_easy_perform.html">curl_easy_perform(3)</a>. Note that <a class="emphasis" href="./curl_easy_recv.html">curl_easy_recv(3)</a> does not work on connections that were created without this option.
+<p class="level0">You must ensure that the socket has data to read before calling <a class="emphasis" href="./curl_easy_recv.html">curl_easy_recv(3)</a>, otherwise the call will return <span Class="bold">CURLE_AGAIN</span> - the socket is used in non-blocking mode internally. Use <a class="emphasis" href="./curl_easy_getinfo.html">curl_easy_getinfo(3)</a> with <span Class="bold">CURLINFO_LASTSOCKET</span> to obtain the socket; use your operating system facilities like <span Class="emphasis">select(2)</span> to check if it has any data you can read. <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Added in 7.18.2. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">On success, returns <span Class="bold">CURLE_OK</span>, stores the received data into <span Class="bold">buffer</span>, and the number of bytes it actually read into <span Class="bold">*n</span>.
+<p class="level0">On failure, returns the appropriate error code.
+<p class="level0">If there is no data to read, the function returns <span Class="bold">CURLE_AGAIN</span>. Use your operating system facilities to wait until the data is ready, and retry. <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0">See <span Class="bold">sendrecv.c</span> in <span Class="bold">docs/examples</span> directory for usage example. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><a class="manpage" href="./curl_easy_setopt.html">curl_easy_setopt (3)</a> <a class="manpage" href="./curl_easy_perform.html"> curl_easy_perform (3)</a> <span Class="manpage"> </span> <a class="manpage" href="./curl_easy_getinfo.html">curl_easy_getinfo (3)</a> <span Class="manpage"> </span> <a class="manpage" href="./curl_easy_send.html">curl_easy_send (3) </a> <p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_easy_recv.pdf b/docs/libcurl/curl_easy_recv.pdf
new file mode 100644
index 0000000..1ed0a94
--- /dev/null
+++ b/docs/libcurl/curl_easy_recv.pdf
Binary files differ
diff --git a/docs/libcurl/curl_easy_reset.3 b/docs/libcurl/curl_easy_reset.3
new file mode 100644
index 0000000..4652f7e
--- /dev/null
+++ b/docs/libcurl/curl_easy_reset.3
@@ -0,0 +1,23 @@
+.\"
+.TH curl_easy_reset 3 "31 July 2004" "libcurl 7.12.1" "libcurl Manual"
+.SH NAME
+curl_easy_reset - reset all options of a libcurl session handle
+.SH SYNOPSIS
+.B #include <curl/curl.h>
+
+.BI "void curl_easy_reset(CURL *"handle ");"
+
+.SH DESCRIPTION
+Re-initializes all options previously set on a specified CURL handle to the
+default values. This puts back the handle to the same state as it was in when
+it was just created with \fIcurl_easy_init(3)\fP.
+
+It does not change the following information kept in the handle: live
+connections, the Session ID cache, the DNS cache, the cookies and shares.
+.SH AVAILABILITY
+This function was added in libcurl 7.12.1
+.SH RETURN VALUE
+Nothing
+.SH "SEE ALSO"
+.BR curl_easy_init "(3)," curl_easy_cleanup "(3)," curl_easy_setopt "(3)
+
diff --git a/docs/libcurl/curl_easy_reset.html b/docs/libcurl/curl_easy_reset.html
new file mode 100644
index 0000000..daed742
--- /dev/null
+++ b/docs/libcurl/curl_easy_reset.html
@@ -0,0 +1,58 @@
+<html><head>
+<title>curl_easy_reset man page</title>
+<meta name="generator" content="roffit 0.7">
+<STYLE type="text/css">
+P.level0 {
+ padding-left: 2em;
+}
+
+P.level1 {
+ padding-left: 4em;
+}
+
+P.level2 {
+ padding-left: 6em;
+}
+
+span.emphasis {
+ font-style: italic;
+}
+
+span.bold {
+ font-weight: bold;
+}
+
+span.manpage {
+ font-weight: bold;
+}
+
+h2.nroffsh {
+ background-color: #e0e0e0;
+}
+
+span.nroffip {
+ font-weight: bold;
+ font-size: 120%;
+ font-family: monospace;
+}
+
+p.roffit {
+ text-align: center;
+ font-size: 80%;
+}
+</STYLE>
+</head><body>
+
+<p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
+<p class="level0">curl_easy_reset - reset all options of a libcurl session handle <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><span Class="bold">#include &lt;curl/curl.h&gt;</span>
+<p class="level0"><span Class="bold">void curl_easy_reset(CURL *handle );</span>
+<p class="level0"><a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">Re-initializes all options previously set on a specified CURL handle to the default values. This puts back the handle to the same state as it was in when it was just created with <a class="emphasis" href="./curl_easy_init.html">curl_easy_init(3)</a>.
+<p class="level0">It does not change the following information kept in the handle: live connections, the Session ID cache, the DNS cache, the cookies and shares. <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">This function was added in libcurl 7.12.1 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Nothing <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><a class="manpage" href="./curl_easy_init.html">curl_easy_init (3)</a> <a class="manpage" href="./curl_easy_cleanup.html"> curl_easy_cleanup (3)</a> <a class="manpage" href="./curl_easy_setopt.html"> curl_easy_setopt (3)</a>
+<p class="level0"><p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_easy_reset.pdf b/docs/libcurl/curl_easy_reset.pdf
new file mode 100644
index 0000000..cd44d76
--- /dev/null
+++ b/docs/libcurl/curl_easy_reset.pdf
Binary files differ
diff --git a/docs/libcurl/curl_easy_send.3 b/docs/libcurl/curl_easy_send.3
new file mode 100644
index 0000000..17c4c1f
--- /dev/null
+++ b/docs/libcurl/curl_easy_send.3
@@ -0,0 +1,64 @@
+.\" **************************************************************************
+.\" * _ _ ____ _
+.\" * Project ___| | | | _ \| |
+.\" * / __| | | | |_) | |
+.\" * | (__| |_| | _ <| |___
+.\" * \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" *
+.\" * This software is licensed as described in the file COPYING, which
+.\" * you should have received as part of this distribution. The terms
+.\" * are also available at http://curl.haxx.se/docs/copyright.html.
+.\" *
+.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+.\" * copies of the Software, and permit persons to whom the Software is
+.\" * furnished to do so, under the terms of the COPYING file.
+.\" *
+.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+.\" * KIND, either express or implied.
+.\" *
+.\" **************************************************************************
+.\"
+.TH curl_easy_send 3 "29 April 2008" "libcurl 7.18.2" "libcurl Manual"
+.SH NAME
+curl_easy_send - sends raw data over an "easy" connection
+.SH SYNOPSIS
+.B #include <curl/easy.h>
+.sp
+.BI "CURLcode curl_easy_send( CURL *" curl ", const void *" buffer ","
+.BI " size_t " buflen ", size_t *" n ");"
+.ad
+.SH DESCRIPTION
+This function sends arbitrary data over the established connection. You may
+use it together with \fIcurl_easy_recv(3)\fP to implement custom protocols
+using libcurl. This functionality can be particularly useful if you use
+proxies and/or SSL encryption: libcurl will take care of proxy negotiation and
+connection set-up.
+
+\fBbuffer\fP is a pointer to the data of length \fBbuflen\fP that you want sent.
+The variable \fBn\fP points to will receive the number of sent bytes.
+
+To establish the connection, set \fBCURLOPT_CONNECT_ONLY\fP option before
+calling \fIcurl_easy_perform(3)\fP. Note that \fIcurl_easy_send(3)\fP will not
+work on connections that were created without this option.
+
+You must ensure that the socket is writable before calling
+\fIcurl_easy_send(3)\fP, otherwise the call will return \fBCURLE_AGAIN\fP -
+the socket is used in non-blocking mode internally. Use
+\fIcurl_easy_getinfo(3)\fP with \fBCURLINFO_LASTSOCKET\fP to obtain the
+socket; use your operating system facilities like \fIselect(2)\fP to check if
+it can be written to.
+.SH AVAILABILITY
+Added in 7.18.2.
+.SH RETURN VALUE
+On success, returns \fBCURLE_OK\fP and stores the number of bytes actually
+sent into \fB*n\fP. Note that this may very well be less than the amount you
+wanted to send.
+
+On failure, returns the appropriate error code.
+.SH EXAMPLE
+See \fBsendrecv.c\fP in \fBdocs/examples\fP directory for usage example.
+.SH "SEE ALSO"
+.BR curl_easy_setopt "(3), " curl_easy_perform "(3), " curl_easy_getinfo "(3), "
+.BR curl_easy_recv "(3) "
diff --git a/docs/libcurl/curl_easy_send.html b/docs/libcurl/curl_easy_send.html
new file mode 100644
index 0000000..b24a601
--- /dev/null
+++ b/docs/libcurl/curl_easy_send.html
@@ -0,0 +1,61 @@
+<html><head>
+<title>curl_easy_send man page</title>
+<meta name="generator" content="roffit 0.7">
+<STYLE type="text/css">
+P.level0 {
+ padding-left: 2em;
+}
+
+P.level1 {
+ padding-left: 4em;
+}
+
+P.level2 {
+ padding-left: 6em;
+}
+
+span.emphasis {
+ font-style: italic;
+}
+
+span.bold {
+ font-weight: bold;
+}
+
+span.manpage {
+ font-weight: bold;
+}
+
+h2.nroffsh {
+ background-color: #e0e0e0;
+}
+
+span.nroffip {
+ font-weight: bold;
+ font-size: 120%;
+ font-family: monospace;
+}
+
+p.roffit {
+ text-align: center;
+ font-size: 80%;
+}
+</STYLE>
+</head><body>
+
+<p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
+<p class="level0">curl_easy_send - sends raw data over an "easy" connection <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><span Class="bold">#include &lt;curl/easy.h&gt;</span>
+<p class="level0"><span Class="bold">CURLcode curl_easy_send( CURL * curl , const void * buffer ,</span> <span Class="bold"> size_t buflen , size_t * n );</span>
+<p class="level0"><a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">This function sends arbitrary data over the established connection. You may use it together with <a class="emphasis" href="./curl_easy_recv.html">curl_easy_recv(3)</a> to implement custom protocols using libcurl. This functionality can be particularly useful if you use proxies and/or SSL encryption: libcurl will take care of proxy negotiation and connection set-up.
+<p class="level0"><span Class="bold">buffer</span> is a pointer to the data of length <span Class="bold">buflen</span> that you want sent. The variable <span Class="bold">n</span> points to will receive the number of sent bytes.
+<p class="level0">To establish the connection, set <span Class="bold">CURLOPT_CONNECT_ONLY</span> option before calling <a class="emphasis" href="./curl_easy_perform.html">curl_easy_perform(3)</a>. Note that <a class="emphasis" href="./curl_easy_send.html">curl_easy_send(3)</a> will not work on connections that were created without this option.
+<p class="level0">You must ensure that the socket is writable before calling <a class="emphasis" href="./curl_easy_send.html">curl_easy_send(3)</a>, otherwise the call will return <span Class="bold">CURLE_AGAIN</span> - the socket is used in non-blocking mode internally. Use <a class="emphasis" href="./curl_easy_getinfo.html">curl_easy_getinfo(3)</a> with <span Class="bold">CURLINFO_LASTSOCKET</span> to obtain the socket; use your operating system facilities like <span Class="emphasis">select(2)</span> to check if it can be written to. <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Added in 7.18.2. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">On success, returns <span Class="bold">CURLE_OK</span> and stores the number of bytes actually sent into <span Class="bold">*n</span>. Note that this may very well be less than the amount you wanted to send.
+<p class="level0">On failure, returns the appropriate error code. <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0">See <span Class="bold">sendrecv.c</span> in <span Class="bold">docs/examples</span> directory for usage example. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><a class="manpage" href="./curl_easy_setopt.html">curl_easy_setopt (3)</a> <a class="manpage" href="./curl_easy_perform.html"> curl_easy_perform (3)</a> <a class="manpage" href="./curl_easy_getinfo.html"> curl_easy_getinfo (3)</a> <span Class="manpage"> </span> <a class="manpage" href="./curl_easy_recv.html">curl_easy_recv (3) </a> <p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_easy_send.pdf b/docs/libcurl/curl_easy_send.pdf
new file mode 100644
index 0000000..dc5922c
--- /dev/null
+++ b/docs/libcurl/curl_easy_send.pdf
Binary files differ
diff --git a/docs/libcurl/curl_easy_setopt.3 b/docs/libcurl/curl_easy_setopt.3
new file mode 100644
index 0000000..9da5379
--- /dev/null
+++ b/docs/libcurl/curl_easy_setopt.3
@@ -0,0 +1,2092 @@
+.\" **************************************************************************
+.\" * _ _ ____ _
+.\" * Project ___| | | | _ \| |
+.\" * / __| | | | |_) | |
+.\" * | (__| |_| | _ <| |___
+.\" * \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" *
+.\" * This software is licensed as described in the file COPYING, which
+.\" * you should have received as part of this distribution. The terms
+.\" * are also available at http://curl.haxx.se/docs/copyright.html.
+.\" *
+.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+.\" * copies of the Software, and permit persons to whom the Software is
+.\" * furnished to do so, under the terms of the COPYING file.
+.\" *
+.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+.\" * KIND, either express or implied.
+.\" *
+.\" **************************************************************************
+.\"
+.TH curl_easy_setopt 3 "1 Jan 2010" "libcurl 7.20.0" "libcurl Manual"
+.SH NAME
+curl_easy_setopt \- set options for a curl easy handle
+.SH SYNOPSIS
+#include <curl/curl.h>
+
+CURLcode curl_easy_setopt(CURL *handle, CURLoption option, parameter);
+.SH DESCRIPTION
+curl_easy_setopt() is used to tell libcurl how to behave. By using the
+appropriate options to \fIcurl_easy_setopt\fP, you can change libcurl's
+behavior. All options are set with the \fIoption\fP followed by a
+\fIparameter\fP. That parameter can be a \fBlong\fP, a \fBfunction pointer\fP,
+an \fBobject pointer\fP or a \fBcurl_off_t\fP, depending on what the specific
+option expects. Read this manual carefully as bad input values may cause
+libcurl to behave badly! You can only set one option in each function call. A
+typical application uses many curl_easy_setopt() calls in the setup phase.
+
+Options set with this function call are valid for all forthcoming transfers
+performed using this \fIhandle\fP. The options are not in any way reset
+between transfers, so if you want subsequent transfers with different options,
+you must change them between the transfers. You can optionally reset all
+options back to internal default with \fIcurl_easy_reset(3)\fP.
+
+Strings passed to libcurl as 'char *' arguments, are copied by the library;
+thus the string storage associated to the pointer argument may be overwritten
+after curl_easy_setopt() returns. Exceptions to this rule are described in
+the option details below.
+
+Before version 7.17.0, strings were not copied. Instead the user was forced
+keep them available until libcurl no longer needed them.
+
+The \fIhandle\fP is the return code from a \fIcurl_easy_init(3)\fP or
+\fIcurl_easy_duphandle(3)\fP call.
+.SH BEHAVIOR OPTIONS
+.IP CURLOPT_VERBOSE
+Set the parameter to 1 to get the library to display a lot of verbose
+information about its operations. Very useful for libcurl and/or protocol
+debugging and understanding. The verbose information will be sent to stderr,
+or the stream set with \fICURLOPT_STDERR\fP.
+
+You hardly ever want this set in production use, you will almost always want
+this when you debug/report problems. Another neat option for debugging is the
+\fICURLOPT_DEBUGFUNCTION\fP.
+.IP CURLOPT_HEADER
+A parameter set to 1 tells the library to include the header in the body
+output. This is only relevant for protocols that actually have headers
+preceding the data (like HTTP).
+.IP CURLOPT_NOPROGRESS
+A parameter set to 1 tells the library to shut off the built-in progress meter
+completely.
+
+Future versions of libcurl are likely to not have any built-in progress meter
+at all.
+.IP CURLOPT_NOSIGNAL
+Pass a long. If it is 1, libcurl will not use any functions that
+install signal handlers or any functions that cause signals to be sent to the
+process. This option is mainly here to allow multi-threaded unix applications
+to still set/use all timeout options etc, without risking getting signals.
+(Added in 7.10)
+
+If this option is set and libcurl has been built with the standard name
+resolver, timeouts will not occur while the name resolve takes place.
+Consider building libcurl with c-ares support to enable asynchronous DNS
+lookups, which enables nice timeouts for name resolves without signals.
+.IP CURLOPT_WILDCARDMATCH
+Set this option to 1 if you want to transfer multiple files according to a
+file name pattern. The pattern can be specified as part of the
+\fICURLOPT_URL\fP option, using an fnmatch-like pattern (Shell Pattern
+Matching) in the last part of URL (file name).
+
+By default, libcurl uses its internal wildcard matching implementation. You
+can provide your own matching function by the \fICURLOPT_FNMATCH_FUNCTION\fP
+option.
+
+This feature is only supported by the FTP download for now.
+
+A brief introduction of its syntax follows:
+.RS
+.IP "\fB*\fP - ASTERISK"
+\&ftp://example.com/some/path/\fB*.txt\fP (for all txt's from the root
+directory)
+.RE
+.RS
+.IP "\fB?\fP - QUESTION MARK"
+Question mark matches any (exactly one) character.
+
+\&ftp://example.com/some/path/\fBphoto?.jpeg\fP
+.RE
+.RS
+.IP "\fB[\fP - BRACKET EXPRESSION"
+The left bracket opens a bracket expression. The question mark and asterisk have
+no special meaning in a bracket expression. Each bracket expression ends by the
+right bracket and matches exactly one character. Some examples follow:
+
+\fB[a-zA-Z0\-9]\fP or \fB[f\-gF\-G]\fP \- character interval
+
+\fB[abc]\fP - character enumeration
+
+\fB[^abc]\fP or \fB[!abc]\fP - negation
+
+\fB[[:\fP\fIname\fP\fB:]]\fP class expression. Supported classes are
+\fBalnum\fP,\fBlower\fP, \fBspace\fP, \fBalpha\fP, \fBdigit\fP, \fBprint\fP,
+\fBupper\fP, \fBblank\fP, \fBgraph\fP, \fBxdigit\fP.
+
+\fB[][-!^]\fP - special case \- matches only '\-', ']', '[', '!' or '^'. These
+characters have no special purpose.
+
+\fB[\\[\\]\\\\]\fP - escape syntax. Matches '[', ']' or '\\'.
+
+Using the rules above, a file name pattern can be constructed:
+
+\&ftp://example.com/some/path/\fB[a-z[:upper:]\\\\].jpeg\fP
+.RE
+.PP
+(This was added in 7.21.0)
+.SH CALLBACK OPTIONS
+.IP CURLOPT_WRITEFUNCTION
+Function pointer that should match the following prototype: \fBsize_t
+function( void *ptr, size_t size, size_t nmemb, void *userdata);\fP This
+function gets called by libcurl as soon as there is data received that needs
+to be saved. The size of the data pointed to by \fIptr\fP is \fIsize\fP
+multiplied with \fInmemb\fP, it will not be zero terminated. Return the number
+of bytes actually taken care of. If that amount differs from the amount passed
+to your function, it'll signal an error to the library. This will abort the
+transfer and return \fICURLE_WRITE_ERROR\fP.
+
+From 7.18.0, the function can return CURL_WRITEFUNC_PAUSE which then will
+cause writing to this connection to become paused. See
+\fIcurl_easy_pause(3)\fP for further details.
+
+This function may be called with zero bytes data if the transferred file is
+empty.
+
+Set this option to NULL to get the internal default function. The internal
+default function will write the data to the FILE * given with
+\fICURLOPT_WRITEDATA\fP.
+
+Set the \fIuserdata\fP argument with the \fICURLOPT_WRITEDATA\fP option.
+
+The callback function will be passed as much data as possible in all invokes,
+but you cannot possibly make any assumptions. It may be one byte, it may be
+thousands. The maximum amount of data that can be passed to the write callback
+is defined in the curl.h header file: CURL_MAX_WRITE_SIZE.
+.IP CURLOPT_WRITEDATA
+Data pointer to pass to the file write function. If you use the
+\fICURLOPT_WRITEFUNCTION\fP option, this is the pointer you'll get as
+input. If you don't use a callback, you must pass a 'FILE *' as libcurl will
+pass this to fwrite() when writing data.
+
+The internal \fICURLOPT_WRITEFUNCTION\fP will write the data to the FILE *
+given with this option, or to stdout if this option hasn't been set.
+
+If you're using libcurl as a win32 DLL, you \fBMUST\fP use the
+\fICURLOPT_WRITEFUNCTION\fP if you set this option or you will experience
+crashes.
+
+This option is also known with the older name \fICURLOPT_FILE\fP, the name
+\fICURLOPT_WRITEDATA\fP was introduced in 7.9.7.
+.IP CURLOPT_READFUNCTION
+Function pointer that should match the following prototype: \fBsize_t
+function( void *ptr, size_t size, size_t nmemb, void *userdata);\fP This
+function gets called by libcurl as soon as it needs to read data in order to
+send it to the peer. The data area pointed at by the pointer \fIptr\fP may be
+filled with at most \fIsize\fP multiplied with \fInmemb\fP number of
+bytes. Your function must return the actual number of bytes that you stored in
+that memory area. Returning 0 will signal end-of-file to the library and cause
+it to stop the current transfer.
+
+If you stop the current transfer by returning 0 "pre-maturely" (i.e before the
+server expected it, like when you've said you will upload N bytes and you
+upload less than N bytes), you may experience that the server "hangs" waiting
+for the rest of the data that won't come.
+
+The read callback may return \fICURL_READFUNC_ABORT\fP to stop the current
+operation immediately, resulting in a \fICURLE_ABORTED_BY_CALLBACK\fP error
+code from the transfer (Added in 7.12.1)
+
+From 7.18.0, the function can return CURL_READFUNC_PAUSE which then will cause
+reading from this connection to become paused. See \fIcurl_easy_pause(3)\fP
+for further details.
+
+If you set this callback pointer to NULL, or don't set it at all, the default
+internal read function will be used. It is doing an fread() on the FILE *
+userdata set with \fICURLOPT_READDATA\fP.
+.IP CURLOPT_READDATA
+Data pointer to pass to the file read function. If you use the
+\fICURLOPT_READFUNCTION\fP option, this is the pointer you'll get as input. If
+you don't specify a read callback but instead rely on the default internal
+read function, this data must be a valid readable FILE *.
+
+If you're using libcurl as a win32 DLL, you MUST use a
+\fICURLOPT_READFUNCTION\fP if you set this option.
+
+This option was also known by the older name \fICURLOPT_INFILE\fP, the name
+\fICURLOPT_READDATA\fP was introduced in 7.9.7.
+.IP CURLOPT_IOCTLFUNCTION
+Function pointer that should match the \fIcurl_ioctl_callback\fP prototype
+found in \fI<curl/curl.h>\fP. This function gets called by libcurl when
+something special I/O-related needs to be done that the library can't do by
+itself. For now, rewinding the read data stream is the only action it can
+request. The rewinding of the read data stream may be necessary when doing a
+HTTP PUT or POST with a multi-pass authentication method. (Option added in
+7.12.3).
+
+Use \fICURLOPT_SEEKFUNCTION\fP instead to provide seeking!
+.IP CURLOPT_IOCTLDATA
+Pass a pointer that will be untouched by libcurl and passed as the 3rd
+argument in the ioctl callback set with \fICURLOPT_IOCTLFUNCTION\fP. (Option
+added in 7.12.3)
+.IP CURLOPT_SEEKFUNCTION
+Function pointer that should match the following prototype: \fIint
+function(void *instream, curl_off_t offset, int origin);\fP This function gets
+called by libcurl to seek to a certain position in the input stream and can be
+used to fast forward a file in a resumed upload (instead of reading all
+uploaded bytes with the normal read function/callback). It is also called to
+rewind a stream when doing a HTTP PUT or POST with a multi-pass authentication
+method. The function shall work like "fseek" or "lseek" and accepted SEEK_SET,
+SEEK_CUR and SEEK_END as argument for origin, although (in 7.18.0) libcurl
+only passes SEEK_SET. The callback must return 0 (CURL_SEEKFUNC_OK) on
+success, 1 (CURL_SEEKFUNC_FAIL) to cause the upload operation to fail or 2
+(CURL_SEEKFUNC_CANTSEEK) to indicate that while the seek failed, libcurl is
+free to work around the problem if possible. The latter can sometimes be done
+by instead reading from the input or similar.
+
+If you forward the input arguments directly to "fseek" or "lseek", note that
+the data type for \fIoffset\fP is not the same as defined for curl_off_t on
+many systems! (Option added in 7.18.0)
+.IP CURLOPT_SEEKDATA
+Data pointer to pass to the file read function. If you use the
+\fICURLOPT_SEEKFUNCTION\fP option, this is the pointer you'll get as input. If
+you don't specify a seek callback, NULL is passed. (Option added in 7.18.0)
+.IP CURLOPT_SOCKOPTFUNCTION
+Function pointer that should match the \fIcurl_sockopt_callback\fP prototype
+found in \fI<curl/curl.h>\fP. This function gets called by libcurl after the
+socket() call but before the connect() call. The callback's \fIpurpose\fP
+argument identifies the exact purpose for this particular socket, and
+currently only one value is supported: \fICURLSOCKTYPE_IPCXN\fP for the
+primary connection (meaning the control connection in the FTP case). Future
+versions of libcurl may support more purposes. It passes the newly created
+socket descriptor so additional setsockopt() calls can be done at the user's
+discretion. Return 0 (zero) from the callback on success. Return 1 from the
+callback function to signal an unrecoverable error to the library and it will
+close the socket and return \fICURLE_COULDNT_CONNECT\fP. (Option added in
+7.15.6.)
+.IP CURLOPT_SOCKOPTDATA
+Pass a pointer that will be untouched by libcurl and passed as the first
+argument in the sockopt callback set with \fICURLOPT_SOCKOPTFUNCTION\fP.
+(Option added in 7.15.6.)
+.IP CURLOPT_OPENSOCKETFUNCTION
+Function pointer that should match the \fIcurl_opensocket_callback\fP
+prototype found in \fI<curl/curl.h>\fP. This function gets called by libcurl
+instead of the \fIsocket(2)\fP call. The callback's \fIpurpose\fP argument
+identifies the exact purpose for this particular socket, and currently only
+one value is supported: \fICURLSOCKTYPE_IPCXN\fP for the primary connection
+(meaning the control connection in the FTP case). Future versions of libcurl
+may support more purposes. It passes the resolved peer address as a
+\fIaddress\fP argument so the callback can modify the address or refuse to
+connect at all. The callback function should return the socket or
+\fICURL_SOCKET_BAD\fP in case no connection should be established or any error
+detected. Any additional \fIsetsockopt(2)\fP calls can be done on the socket
+at the user's discretion. \fICURL_SOCKET_BAD\fP return value from the
+callback function will signal an unrecoverable error to the library and it
+will return \fICURLE_COULDNT_CONNECT\fP. This return code can be used for IP
+address blacklisting. The default behavior is:
+.nf
+ return socket(addr->family, addr->socktype, addr->protocol);
+.fi
+(Option added in 7.17.1.)
+.IP CURLOPT_OPENSOCKETDATA
+Pass a pointer that will be untouched by libcurl and passed as the first
+argument in the opensocket callback set with \fICURLOPT_OPENSOCKETFUNCTION\fP.
+(Option added in 7.17.1.)
+.IP CURLOPT_PROGRESSFUNCTION
+Function pointer that should match the \fIcurl_progress_callback\fP prototype
+found in \fI<curl/curl.h>\fP. This function gets called by libcurl instead of
+its internal equivalent with a frequent interval during operation (roughly
+once per second or sooner) no matter if data is being transfered or not.
+Unknown/unused argument values passed to the callback will be set to zero
+(like if you only download data, the upload size will remain 0). Returning a
+non-zero value from this callback will cause libcurl to abort the transfer and
+return \fICURLE_ABORTED_BY_CALLBACK\fP.
+
+If you transfer data with the multi interface, this function will not be
+called during periods of idleness unless you call the appropriate libcurl
+function that performs transfers.
+
+\fICURLOPT_NOPROGRESS\fP must be set to 0 to make this function actually
+get called.
+.IP CURLOPT_PROGRESSDATA
+Pass a pointer that will be untouched by libcurl and passed as the first
+argument in the progress callback set with \fICURLOPT_PROGRESSFUNCTION\fP.
+.IP CURLOPT_HEADERFUNCTION
+Function pointer that should match the following prototype: \fIsize_t
+function( void *ptr, size_t size, size_t nmemb, void *userdata);\fP. This
+function gets called by libcurl as soon as it has received header data. The
+header callback will be called once for each header and only complete header
+lines are passed on to the callback. Parsing headers should be easy enough
+using this. The size of the data pointed to by \fIptr\fP is \fIsize\fP
+multiplied with \fInmemb\fP. Do not assume that the header line is zero
+terminated! The pointer named \fIuserdata\fP is the one you set with the
+\fICURLOPT_WRITEHEADER\fP option. The callback function must return the number
+of bytes actually taken care of. If that amount differs from the amount passed
+to your function, it'll signal an error to the library. This will abort the
+transfer and return \fICURL_WRITE_ERROR\fP.
+
+If this option is not set, or if it is set to NULL, but
+\fICURLOPT_HEADERDATA\fP (\fICURLOPT_WRITEHEADER\fP) is set to anything but
+NULL, the function used to accept response data will be used instead. That is,
+it will be the function specified with \fICURLOPT_WRITEFUNCTION\fP, or if it
+is not specified or NULL - the default, stream-writing function.
+
+It's important to note that the callback will be invoked for the headers of
+all responses received after initiating a request and not just the final
+response. This includes all responses which occur during authentication
+negotiation. If you need to operate on only the headers from the final
+response, you will need to collect headers in the callback yourself and use
+HTTP status lines, for example, to delimit response boundaries.
+
+Since 7.14.1: When a server sends a chunked encoded transfer, it may contain a
+trailer. That trailer is identical to a HTTP header and if such a trailer is
+received it is passed to the application using this callback as well. There
+are several ways to detect it being a trailer and not an ordinary header: 1)
+it comes after the response-body. 2) it comes after the final header line (CR
+LF) 3) a Trailer: header among the response-headers mention what header to
+expect in the trailer.
+.IP CURLOPT_WRITEHEADER
+(This option is also known as \fBCURLOPT_HEADERDATA\fP) Pass a pointer to be
+used to write the header part of the received data to. If you don't use your
+own callback to take care of the writing, this must be a valid FILE *. See
+also the \fICURLOPT_HEADERFUNCTION\fP option above on how to set a custom
+get-all-headers callback.
+.IP CURLOPT_DEBUGFUNCTION
+Function pointer that should match the following prototype: \fIint
+curl_debug_callback (CURL *, curl_infotype, char *, size_t, void *);\fP
+\fICURLOPT_DEBUGFUNCTION\fP replaces the standard debug function used when
+\fICURLOPT_VERBOSE \fP is in effect. This callback receives debug information,
+as specified with the \fBcurl_infotype\fP argument. This function must return
+0. The data pointed to by the char * passed to this function WILL NOT be zero
+terminated, but will be exactly of the size as told by the size_t argument.
+
+Available curl_infotype values:
+.RS
+.IP CURLINFO_TEXT
+The data is informational text.
+.IP CURLINFO_HEADER_IN
+The data is header (or header-like) data received from the peer.
+.IP CURLINFO_HEADER_OUT
+The data is header (or header-like) data sent to the peer.
+.IP CURLINFO_DATA_IN
+The data is protocol data received from the peer.
+.IP CURLINFO_DATA_OUT
+The data is protocol data sent to the peer.
+.RE
+.IP CURLOPT_DEBUGDATA
+Pass a pointer to whatever you want passed in to your
+\fICURLOPT_DEBUGFUNCTION\fP in the last void * argument. This pointer is not
+used by libcurl, it is only passed to the callback.
+.IP CURLOPT_SSL_CTX_FUNCTION
+This option does only function for libcurl powered by OpenSSL. If libcurl was
+built against another SSL library, this functionality is absent.
+
+Function pointer that should match the following prototype: \fBCURLcode
+sslctxfun(CURL *curl, void *sslctx, void *parm);\fP This function gets called
+by libcurl just before the initialization of an SSL connection after having
+processed all other SSL related options to give a last chance to an
+application to modify the behaviour of openssl's ssl initialization. The
+\fIsslctx\fP parameter is actually a pointer to an openssl \fISSL_CTX\fP. If
+an error is returned no attempt to establish a connection is made and the
+perform operation will return the error code from this callback function. Set
+the \fIparm\fP argument with the \fICURLOPT_SSL_CTX_DATA\fP option. This
+option was introduced in 7.11.0.
+
+This function will get called on all new connections made to a server, during
+the SSL negotiation. The SSL_CTX pointer will be a new one every time.
+
+To use this properly, a non-trivial amount of knowledge of the openssl
+libraries is necessary. For example, using this function allows you to use
+openssl callbacks to add additional validation code for certificates, and even
+to change the actual URI of an HTTPS request (example used in the lib509 test
+case). See also the example section for a replacement of the key, certificate
+and trust file settings.
+.IP CURLOPT_SSL_CTX_DATA
+Data pointer to pass to the ssl context callback set by the option
+\fICURLOPT_SSL_CTX_FUNCTION\fP, this is the pointer you'll get as third
+parameter, otherwise \fBNULL\fP. (Added in 7.11.0)
+.IP CURLOPT_CONV_TO_NETWORK_FUNCTION
+.IP CURLOPT_CONV_FROM_NETWORK_FUNCTION
+.IP CURLOPT_CONV_FROM_UTF8_FUNCTION
+Function pointers that should match the following prototype: CURLcode
+function(char *ptr, size_t length);
+
+These three options apply to non-ASCII platforms only. They are available
+only if \fBCURL_DOES_CONVERSIONS\fP was defined when libcurl was built. When
+this is the case, \fIcurl_version_info(3)\fP will return the CURL_VERSION_CONV
+feature bit set.
+
+The data to be converted is in a buffer pointed to by the ptr parameter. The
+amount of data to convert is indicated by the length parameter. The converted
+data overlays the input data in the buffer pointed to by the ptr parameter.
+CURLE_OK should be returned upon successful conversion. A CURLcode return
+value defined by curl.h, such as CURLE_CONV_FAILED, should be returned if an
+error was encountered.
+
+\fBCURLOPT_CONV_TO_NETWORK_FUNCTION\fP and
+\fBCURLOPT_CONV_FROM_NETWORK_FUNCTION\fP convert between the host encoding and
+the network encoding. They are used when commands or ASCII data are
+sent/received over the network.
+
+\fBCURLOPT_CONV_FROM_UTF8_FUNCTION\fP is called to convert from UTF8 into the
+host encoding. It is required only for SSL processing.
+
+If you set a callback pointer to NULL, or don't set it at all, the built-in
+libcurl iconv functions will be used. If HAVE_ICONV was not defined when
+libcurl was built, and no callback has been established, conversion will
+return the CURLE_CONV_REQD error code.
+
+If HAVE_ICONV is defined, CURL_ICONV_CODESET_OF_HOST must also be defined.
+For example:
+
+ \&#define CURL_ICONV_CODESET_OF_HOST "IBM-1047"
+
+The iconv code in libcurl will default the network and UTF8 codeset names as
+follows:
+
+ \&#define CURL_ICONV_CODESET_OF_NETWORK "ISO8859-1"
+
+ \&#define CURL_ICONV_CODESET_FOR_UTF8 "UTF-8"
+
+You will need to override these definitions if they are different on your
+system.
+.IP CURLOPT_INTERLEAVEFUNCTION
+Function pointer that should match the following prototype: \fIsize_t
+function( void *ptr, size_t size, size_t nmemb, void *userdata)\fP. This
+function gets called by libcurl as soon as it has received interleaved RTP
+data. This function gets called for each $ block and therefore contains
+exactly one upper-layer protocol unit (e.g. one RTP packet). Curl writes the
+interleaved header as well as the included data for each call. The first byte
+is always an ASCII dollar sign. The dollar sign is followed by a one byte
+channel identifier and then a 2 byte integer length in network byte order. See
+\fIRFC 2326 Section 10.12\fP for more information on how RTP interleaving
+behaves. If unset or set to NULL, curl will use the default write function.
+
+Interleaved RTP poses some challeneges for the client application. Since the
+stream data is sharing the RTSP control connection, it is critical to service
+the RTP in a timely fashion. If the RTP data is not handled quickly,
+subsequent response processing may become unreasonably delayed and the
+connection may close. The application may use \fICURL_RTSPREQ_RECEIVE\fP to
+service RTP data when no requests are desired. If the application makes a
+request, (e.g. \fICURL_RTSPREQ_PAUSE\fP) then the response handler will
+process any pending RTP data before marking the request as finished. (Added
+in 7.20.0)
+.IP CURLOPT_INTERLEAVEDATA
+This is the userdata pointer that will be passed to
+\fICURLOPT_INTERLEAVEFUNCTION\fP when interleaved RTP data is received. (Added
+in 7.20.0)
+.IP CURLOPT_CHUNK_BGN_FUNCTION
+Function pointer that should match the following prototype: \fBlong function
+(const void *transfer_info, void *ptr, int remains)\fP. This function gets
+called by libcurl before a part of the stream is going to be transferred (if
+the transfer supports chunks).
+
+This callback makes sense only when using the \fICURLOPT_WILDCARDMATCH\fP
+option for now.
+
+The target of transfer_info parameter is a "feature depended" structure. For
+the FTP wildcard download, the target is curl_fileinfo structure (see
+\fIcurl/curl.h\fP). The parameter ptr is a pointer given by
+\fICURLOPT_CHUNK_DATA\fP. The parameter remains contains number of chunks
+remaining per the transfer. If the feature is not available, the parameter has
+zero value.
+
+Return \fICURL_CHUNK_BGN_FUNC_OK\fP if everything is fine,
+\fICURL_CHUNK_BGN_FUNC_SKIP\fP if you want to skip the concrete chunk or
+\fICURL_CHUNK_BGN_FUNC_FAIL\fP to tell libcurl to stop if some error occurred.
+(This was added in 7.21.0)
+.IP CURLOPT_CHUNK_END_FUNCTION
+Function pointer that should match the following prototype: \fBlong
+function(void *ptr)\fP. This function gets called by libcurl as soon as a part
+of the stream has been transferred (or skipped).
+
+Return \fICURL_CHUNK_END_FUNC_OK\fP if everything is fine or
+\fBCURL_CHUNK_END_FUNC_FAIL\fP to tell the lib to stop if some error occurred.
+(This was added in 7.21.0)
+.IP CURLOPT_CHUNK_DATA
+Pass a pointer that will be untouched by libcurl and passed as the ptr
+argument to the \fICURL_CHUNK_BGN_FUNTION\fP and \fICURL_CHUNK_END_FUNTION\fP.
+(This was added in 7.21.0)
+.IP CURLOPT_FNMATCH_FUNCTION
+Function pointer that should match \fBint function(void *ptr, const char
+*pattern, const char *string)\fP prototype (see \fIcurl/curl.h\fP). It is used
+internally for the wildcard matching feature.
+
+Return \fICURL_FNMATCHFUNC_MATCH\fP if pattern matches the string,
+\fICURL_FNMATCHFUNC_NOMATCH\fP if not or \fICURL_FNMATCHFUNC_FAIL\fP if an
+error occurred. (This was added in 7.21.0)
+.IP CURLOPT_FNMATCH_DATA
+Pass a pointer that will be untouched by libcurl and passed as the ptr argument
+to the \fICURL_FNMATCH_FUNCTION\fP. (This was added in 7.21.0)
+.SH ERROR OPTIONS
+.IP CURLOPT_ERRORBUFFER
+Pass a char * to a buffer that the libcurl may store human readable error
+messages in. This may be more helpful than just the return code from
+\fIcurl_easy_perform\fP. The buffer must be at least CURL_ERROR_SIZE big.
+Although this argument is a 'char *', it does not describe an input string.
+Therefore the (probably undefined) contents of the buffer is NOT copied
+by the library. You should keep the associated storage available until
+libcurl no longer needs it. Failing to do so will cause very odd behavior
+or even crashes. libcurl will need it until you call \fIcurl_easy_cleanup(3)\fP
+or you set the same option again to use a different pointer.
+
+Use \fICURLOPT_VERBOSE\fP and \fICURLOPT_DEBUGFUNCTION\fP to better
+debug/trace why errors happen.
+
+If the library does not return an error, the buffer may not have been
+touched. Do not rely on the contents in those cases.
+
+.IP CURLOPT_STDERR
+Pass a FILE * as parameter. Tell libcurl to use this stream instead of stderr
+when showing the progress meter and displaying \fICURLOPT_VERBOSE\fP data.
+.IP CURLOPT_FAILONERROR
+A parameter set to 1 tells the library to fail silently if the HTTP code
+returned is equal to or larger than 400. The default action would be to return
+the page normally, ignoring that code.
+
+This method is not fail-safe and there are occasions where non-successful
+response codes will slip through, especially when authentication is involved
+(response codes 401 and 407).
+
+You might get some amounts of headers transferred before this situation is
+detected, like when a "100-continue" is received as a response to a
+POST/PUT and a 401 or 407 is received immediately afterwards.
+.SH NETWORK OPTIONS
+.IP CURLOPT_URL
+The actual URL to deal with. The parameter should be a char * to a zero
+terminated string.
+
+If the given URL lacks the protocol part ("http://" or "ftp://" etc), it will
+attempt to guess which protocol to use based on the given host name. If the
+given protocol of the set URL is not supported, libcurl will return on error
+(\fICURLE_UNSUPPORTED_PROTOCOL\fP) when you call \fIcurl_easy_perform(3)\fP or
+\fIcurl_multi_perform(3)\fP. Use \fIcurl_version_info(3)\fP for detailed info
+on which protocols are supported.
+
+The string given to CURLOPT_URL must be url-encoded and follow RFC 2396
+(http://curl.haxx.se/rfc/rfc2396.txt).
+
+Starting with version 7.20.0, the fragment part of the URI will not be send as
+part of the path, which was the case previously.
+
+\fICURLOPT_URL\fP is the only option that \fBmust\fP be set before
+\fIcurl_easy_perform(3)\fP is called.
+
+\fICURLOPT_PROTOCOLS\fP can be used to limit what protocols libcurl will use
+for this transfer, independent of what libcurl has been compiled to
+support. That may be useful if you accept the URL from an external source and
+want to limit the accessibility.
+.IP CURLOPT_PROTOCOLS
+Pass a long that holds a bitmask of CURLPROTO_* defines. If used, this bitmask
+limits what protocols libcurl may use in the transfer. This allows you to have
+a libcurl built to support a wide range of protocols but still limit specific
+transfers to only be allowed to use a subset of them. By default libcurl will
+accept all protocols it supports. See also
+\fICURLOPT_REDIR_PROTOCOLS\fP. (Added in 7.19.4)
+.IP CURLOPT_REDIR_PROTOCOLS
+Pass a long that holds a bitmask of CURLPROTO_* defines. If used, this bitmask
+limits what protocols libcurl may use in a transfer that it follows to in a
+redirect when \fICURLOPT_FOLLOWLOCATION\fP is enabled. This allows you to
+limit specific transfers to only be allowed to use a subset of protocols in
+redirections. By default libcurl will allow all protocols except for FILE and
+SCP. This is a difference compared to pre-7.19.4 versions which
+unconditionally would follow to all protocols supported. (Added in 7.19.4)
+.IP CURLOPT_PROXY
+Set HTTP proxy to use. The parameter should be a char * to a zero terminated
+string holding the host name or dotted IP address. To specify port number in
+this string, append :[port] to the end of the host name. The proxy string may
+be prefixed with [protocol]:// since any such prefix will be ignored. The
+proxy's port number may optionally be specified with the separate option. If
+not specified, libcurl will default to using port 1080 for proxies.
+\fICURLOPT_PROXYPORT\fP.
+
+When you tell the library to use an HTTP proxy, libcurl will transparently
+convert operations to HTTP even if you specify an FTP URL etc. This may have
+an impact on what other features of the library you can use, such as
+\fICURLOPT_QUOTE\fP and similar FTP specifics that don't work unless you
+tunnel through the HTTP proxy. Such tunneling is activated with
+\fICURLOPT_HTTPPROXYTUNNEL\fP.
+
+libcurl respects the environment variables \fBhttp_proxy\fP, \fBftp_proxy\fP,
+\fBall_proxy\fP etc, if any of those are set. The \fICURLOPT_PROXY\fP option
+does however override any possibly set environment variables.
+
+Setting the proxy string to "" (an empty string) will explicitly disable the
+use of a proxy, even if there is an environment variable set for it.
+
+Since 7.14.1, the proxy host string given in environment variables can be
+specified the exact same way as the proxy can be set with \fICURLOPT_PROXY\fP,
+include protocol prefix (http://) and embedded user + password.
+.IP CURLOPT_PROXYPORT
+Pass a long with this option to set the proxy port to connect to unless it is
+specified in the proxy string \fICURLOPT_PROXY\fP.
+.IP CURLOPT_PROXYTYPE
+Pass a long with this option to set type of the proxy. Available options for
+this are \fICURLPROXY_HTTP\fP, \fICURLPROXY_HTTP_1_0\fP (added in 7.19.4),
+\fICURLPROXY_SOCKS4\fP (added in 7.15.2), \fICURLPROXY_SOCKS5\fP,
+\fICURLPROXY_SOCKS4A\fP (added in 7.18.0) and \fICURLPROXY_SOCKS5_HOSTNAME\fP
+(added in 7.18.0). The HTTP type is default. (Added in 7.10)
+.IP CURLOPT_NOPROXY
+Pass a pointer to a zero terminated string. The should be a comma- separated
+list of hosts which do not use a proxy, if one is specified. The only
+wildcard is a single * character, which matches all hosts, and effectively
+disables the proxy. Each name in this list is matched as either a domain which
+contains the hostname, or the hostname itself. For example, local.com would
+match local.com, local.com:80, and www.local.com, but not www.notlocal.com.
+(Added in 7.19.4)
+.IP CURLOPT_HTTPPROXYTUNNEL
+Set the parameter to 1 to make the library tunnel all operations through a
+given HTTP proxy. There is a big difference between using a proxy and to
+tunnel through it. If you don't know what this means, you probably don't want
+this tunneling option.
+.IP CURLOPT_SOCKS5_GSSAPI_SERVICE
+Pass a char * as parameter to a string holding the name of the service. The
+default service name for a SOCKS5 server is rcmd/server-fqdn. This option
+allows you to change it. (Added in 7.19.4)
+.IP CURLOPT_SOCKS5_GSSAPI_NEC
+Pass a long set to 1 to enable or 0 to disable. As part of the gssapi
+negotiation a protection mode is negotiated. The rfc1961 says in section
+4.3/4.4 it should be protected, but the NEC reference implementation does not.
+If enabled, this option allows the unprotected exchange of the protection mode
+negotiation. (Added in 7.19.4).
+.IP CURLOPT_INTERFACE
+Pass a char * as parameter. This sets the interface name to use as outgoing
+network interface. The name can be an interface name, an IP address, or a host
+name.
+.IP CURLOPT_LOCALPORT
+Pass a long. This sets the local port number of the socket used for
+connection. This can be used in combination with \fICURLOPT_INTERFACE\fP and
+you are recommended to use \fICURLOPT_LOCALPORTRANGE\fP as well when this is
+set. Valid port numbers are 1 - 65535. (Added in 7.15.2)
+.IP CURLOPT_LOCALPORTRANGE
+Pass a long. This is the number of attempts libcurl should make to find a
+working local port number. It starts with the given \fICURLOPT_LOCALPORT\fP
+and adds one to the number for each retry. Setting this to 1 or below will
+make libcurl do only one try for the exact port number. Port numbers by nature
+are scarce resources that will be busy at times so setting this value to
+something too low might cause unnecessary connection setup failures. (Added in
+7.15.2)
+.IP CURLOPT_DNS_CACHE_TIMEOUT
+Pass a long, this sets the timeout in seconds. Name resolves will be kept in
+memory for this number of seconds. Set to zero to completely disable
+caching, or set to -1 to make the cached entries remain forever. By default,
+libcurl caches this info for 60 seconds.
+
+The name resolve functions of various libc implementations don't re-read name
+server information unless explicitly told so (for example, by calling
+\fIres_init(3)\fP). This may cause libcurl to keep using the older server even
+if DHCP has updated the server info, and this may look like a DNS cache issue
+to the casual libcurl-app user.
+.IP CURLOPT_DNS_USE_GLOBAL_CACHE
+Pass a long. If the value is 1, it tells curl to use a global DNS cache
+that will survive between easy handle creations and deletions. This is not
+thread-safe and this will use a global variable.
+
+\fBWARNING:\fP this option is considered obsolete. Stop using it. Switch over
+to using the share interface instead! See \fICURLOPT_SHARE\fP and
+\fIcurl_share_init(3)\fP.
+.IP CURLOPT_BUFFERSIZE
+Pass a long specifying your preferred size (in bytes) for the receive buffer
+in libcurl. The main point of this would be that the write callback gets
+called more often and with smaller chunks. This is just treated as a request,
+not an order. You cannot be guaranteed to actually get the given size. (Added
+in 7.10)
+
+This size is by default set as big as possible (CURL_MAX_WRITE_SIZE), so it
+only makes sense to use this option if you want it smaller.
+.IP CURLOPT_PORT
+Pass a long specifying what remote port number to connect to, instead of the
+one specified in the URL or the default port for the used protocol.
+.IP CURLOPT_TCP_NODELAY
+Pass a long specifying whether the TCP_NODELAY option should be set or
+cleared (1 = set, 0 = clear). The option is cleared by default. This
+will have no effect after the connection has been established.
+
+Setting this option will disable TCP's Nagle algorithm. The purpose of
+this algorithm is to try to minimize the number of small packets on
+the network (where "small packets" means TCP segments less than the
+Maximum Segment Size (MSS) for the network).
+
+Maximizing the amount of data sent per TCP segment is good because it
+amortizes the overhead of the send. However, in some cases (most
+notably telnet or rlogin) small segments may need to be sent
+without delay. This is less efficient than sending larger amounts of
+data at a time, and can contribute to congestion on the network if
+overdone.
+.IP CURLOPT_ADDRESS_SCOPE
+Pass a long specifying the scope_id value to use when connecting to IPv6
+link-local or site-local addresses. (Added in 7.19.0)
+.SH NAMES and PASSWORDS OPTIONS (Authentication)
+.IP CURLOPT_NETRC
+This parameter controls the preference of libcurl between using user names and
+passwords from your \fI~/.netrc\fP file, relative to user names and passwords
+in the URL supplied with \fICURLOPT_URL\fP.
+
+libcurl uses a user name (and supplied or prompted password) supplied with
+\fICURLOPT_USERPWD\fP in preference to any of the options controlled by this
+parameter.
+
+Pass a long, set to one of the values described below.
+.RS
+.IP CURL_NETRC_OPTIONAL
+The use of your \fI~/.netrc\fP file is optional, and information in the URL is
+to be preferred. The file will be scanned for the host and user name (to
+find the password only) or for the host only, to find the first user name and
+password after that \fImachine\fP, which ever information is not specified in
+the URL.
+
+Undefined values of the option will have this effect.
+.IP CURL_NETRC_IGNORED
+The library will ignore the file and use only the information in the URL.
+
+This is the default.
+.IP CURL_NETRC_REQUIRED
+This value tells the library that use of the file is required, to ignore the
+information in the URL, and to search the file for the host only.
+.RE
+Only machine name, user name and password are taken into account
+(init macros and similar things aren't supported).
+
+libcurl does not verify that the file has the correct properties set (as the
+standard Unix ftp client does). It should only be readable by user.
+.IP CURLOPT_NETRC_FILE
+Pass a char * as parameter, pointing to a zero terminated string containing
+the full path name to the file you want libcurl to use as .netrc file. If this
+option is omitted, and \fICURLOPT_NETRC\fP is set, libcurl will attempt to
+find a .netrc file in the current user's home directory. (Added in 7.10.9)
+.IP CURLOPT_USERPWD
+Pass a char * as parameter, which should be [user name]:[password] to use for
+the connection. Use \fICURLOPT_HTTPAUTH\fP to decide the authentication method.
+
+When using NTLM, you can set the domain by prepending it to the user name and
+separating the domain and name with a forward (/) or backward slash (\\). Like
+this: "domain/user:password" or "domain\\user:password". Some HTTP servers (on
+Windows) support this style even for Basic authentication.
+
+When using HTTP and \fICURLOPT_FOLLOWLOCATION\fP, libcurl might perform
+several requests to possibly different hosts. libcurl will only send this user
+and password information to hosts using the initial host name (unless
+\fICURLOPT_UNRESTRICTED_AUTH\fP is set), so if libcurl follows locations to
+other hosts it will not send the user and password to those. This is enforced
+to prevent accidental information leakage.
+.IP CURLOPT_PROXYUSERPWD
+Pass a char * as parameter, which should be [user name]:[password] to use for
+the connection to the HTTP proxy. Use \fICURLOPT_PROXYAUTH\fP to decide
+the authentication method.
+.IP CURLOPT_USERNAME
+Pass a char * as parameter, which should be pointing to the zero terminated
+user name to use for the transfer.
+
+\fBCURLOPT_USERNAME\fP sets the user name to be used in protocol
+authentication. You should not use this option together with the (older)
+CURLOPT_USERPWD option.
+
+In order to specify the password to be used in conjunction with the user name
+use the \fICURLOPT_PASSWORD\fP option. (Added in 7.19.1)
+.IP CURLOPT_PASSWORD
+Pass a char * as parameter, which should be pointing to the zero terminated
+password to use for the transfer.
+
+The CURLOPT_PASSWORD option should be used in conjunction with
+the \fICURLOPT_USERNAME\fP option. (Added in 7.19.1)
+.IP CURLOPT_PROXYUSERNAME
+Pass a char * as parameter, which should be pointing to the zero terminated
+user name to use for the transfer while connecting to Proxy.
+
+The CURLOPT_PROXYUSERNAME option should be used in same way as the
+\fICURLOPT_PROXYUSERPWD\fP is used. In comparison to
+\fICURLOPT_PROXYUSERPWD\fP the CURLOPT_PROXYUSERNAME allows the username to
+contain a colon, like in the following example: "sip:user@example.com". The
+CURLOPT_PROXYUSERNAME option is an alternative way to set the user name while
+connecting to Proxy. There is no meaning to use it together with the
+\fICURLOPT_PROXYUSERPWD\fP option.
+
+In order to specify the password to be used in conjunction with the user name
+use the \fICURLOPT_PROXYPASSWORD\fP option. (Added in 7.19.1)
+.IP CURLOPT_PROXYPASSWORD
+Pass a char * as parameter, which should be pointing to the zero terminated
+password to use for the transfer while connecting to Proxy.
+
+The CURLOPT_PROXYPASSWORD option should be used in conjunction with
+the \fICURLOPT_PROXYUSERNAME\fP option. (Added in 7.19.1)
+.IP CURLOPT_HTTPAUTH
+Pass a long as parameter, which is set to a bitmask, to tell libcurl which
+authentication method(s) you want it to use. The available bits are listed
+below. If more than one bit is set, libcurl will first query the site to see
+which authentication methods it supports and then pick the best one you allow
+it to use. For some methods, this will induce an extra network round-trip. Set
+the actual name and password with the \fICURLOPT_USERPWD\fP option or
+with the \fICURLOPT_USERNAME\fP and the \fICURLOPT_USERPASSWORD\fP options.
+(Added in 7.10.6)
+.RS
+.IP CURLAUTH_BASIC
+HTTP Basic authentication. This is the default choice, and the only method
+that is in wide-spread use and supported virtually everywhere. This sends
+the user name and password over the network in plain text, easily captured by
+others.
+.IP CURLAUTH_DIGEST
+HTTP Digest authentication. Digest authentication is defined in RFC2617 and
+is a more secure way to do authentication over public networks than the
+regular old-fashioned Basic method.
+.IP CURLAUTH_DIGEST_IE
+HTTP Digest authentication with an IE flavor. Digest authentication is
+defined in RFC2617 and is a more secure way to do authentication over public
+networks than the regular old-fashioned Basic method. The IE flavor is simply
+that libcurl will use a special "quirk" that IE is known to have used before
+version 7 and that some servers require the client to use. (This define was
+added in 7.19.3)
+.IP CURLAUTH_GSSNEGOTIATE
+HTTP GSS-Negotiate authentication. The GSS-Negotiate (also known as plain
+\&"Negotiate") method was designed by Microsoft and is used in their web
+applications. It is primarily meant as a support for Kerberos5 authentication
+but may also be used along with other authentication methods. For more
+information see IETF draft draft-brezak-spnego-http-04.txt.
+
+You need to build libcurl with a suitable GSS-API library for this to work.
+.IP CURLAUTH_NTLM
+HTTP NTLM authentication. A proprietary protocol invented and used by
+Microsoft. It uses a challenge-response and hash concept similar to Digest, to
+prevent the password from being eavesdropped.
+
+You need to build libcurl with OpenSSL support for this option to work, or
+build libcurl on Windows.
+.IP CURLAUTH_ANY
+This is a convenience macro that sets all bits and thus makes libcurl pick any
+it finds suitable. libcurl will automatically select the one it finds most
+secure.
+.IP CURLAUTH_ANYSAFE
+This is a convenience macro that sets all bits except Basic and thus makes
+libcurl pick any it finds suitable. libcurl will automatically select the one
+it finds most secure.
+.RE
+.IP CURLOPT_PROXYAUTH
+Pass a long as parameter, which is set to a bitmask, to tell libcurl which
+authentication method(s) you want it to use for your proxy authentication. If
+more than one bit is set, libcurl will first query the site to see what
+authentication methods it supports and then pick the best one you allow it to
+use. For some methods, this will induce an extra network round-trip. Set the
+actual name and password with the \fICURLOPT_PROXYUSERPWD\fP option. The
+bitmask can be constructed by or'ing together the bits listed above for the
+\fICURLOPT_HTTPAUTH\fP option. As of this writing, only Basic, Digest and NTLM
+work. (Added in 7.10.7)
+.SH HTTP OPTIONS
+.IP CURLOPT_AUTOREFERER
+Pass a parameter set to 1 to enable this. When enabled, libcurl will
+automatically set the Referer: field in requests where it follows a Location:
+redirect.
+.IP CURLOPT_ENCODING
+Sets the contents of the Accept-Encoding: header sent in an HTTP request, and
+enables decoding of a response when a Content-Encoding: header is received.
+Three encodings are supported: \fIidentity\fP, which does nothing,
+\fIdeflate\fP which requests the server to compress its response using the
+zlib algorithm, and \fIgzip\fP which requests the gzip algorithm. If a
+zero-length string is set, then an Accept-Encoding: header containing all
+supported encodings is sent.
+
+This is a request, not an order; the server may or may not do it. This option
+must be set (to any non-NULL value) or else any unsolicited encoding done by
+the server is ignored. See the special file lib/README.encoding for details.
+.IP CURLOPT_FOLLOWLOCATION
+A parameter set to 1 tells the library to follow any Location: header that the
+server sends as part of an HTTP header.
+
+This means that the library will re-send the same request on the new location
+and follow new Location: headers all the way until no more such headers are
+returned. \fICURLOPT_MAXREDIRS\fP can be used to limit the number of redirects
+libcurl will follow.
+
+Since 7.19.4, libcurl can limit what protocols it will automatically
+follow. The accepted protocols are set with \fICURLOPT_REDIR_PROTOCOLS\fP and
+it excludes the FILE protocol by default.
+.IP CURLOPT_UNRESTRICTED_AUTH
+A parameter set to 1 tells the library it can continue to send authentication
+(user+password) when following locations, even when hostname changed. This
+option is meaningful only when setting \fICURLOPT_FOLLOWLOCATION\fP.
+.IP CURLOPT_MAXREDIRS
+Pass a long. The set number will be the redirection limit. If that many
+redirections have been followed, the next redirect will cause an error
+(\fICURLE_TOO_MANY_REDIRECTS\fP). This option only makes sense if the
+\fICURLOPT_FOLLOWLOCATION\fP is used at the same time. Added in 7.15.1:
+Setting the limit to 0 will make libcurl refuse any redirect. Set it to -1 for
+an infinite number of redirects (which is the default)
+.IP CURLOPT_POSTREDIR
+Pass a bitmask to control how libcurl acts on redirects after POSTs that get a
+301 or 302 response back. A parameter with bit 0 set (value
+\fBCURL_REDIR_POST_301\fP) tells the library to respect RFC 2616/10.3.2 and
+not convert POST requests into GET requests when following a 301
+redirection. Setting bit 1 (value CURL_REDIR_POST_302) makes libcurl maintain
+the request method after a 302 redirect. CURL_REDIR_POST_ALL is a convenience
+define that sets both bits.
+
+The non-RFC behaviour is ubiquitous in web browsers, so the library does the
+conversion by default to maintain consistency. However, a server may require a
+POST to remain a POST after such a redirection. This option is meaningful only
+when setting \fICURLOPT_FOLLOWLOCATION\fP. (Added in 7.17.1) (This option was
+known as CURLOPT_POST301 up to 7.19.0 as it only supported the 301 way before
+then)
+.IP CURLOPT_PUT
+A parameter set to 1 tells the library to use HTTP PUT to transfer data. The
+data should be set with \fICURLOPT_READDATA\fP and \fICURLOPT_INFILESIZE\fP.
+
+This option is deprecated and starting with version 7.12.1 you should instead
+use \fICURLOPT_UPLOAD\fP.
+.IP CURLOPT_POST
+A parameter set to 1 tells the library to do a regular HTTP post. This will
+also make the library use a "Content-Type:
+application/x-www-form-urlencoded" header. (This is by far the most commonly
+used POST method).
+
+Use one of \fICURLOPT_POSTFIELDS\fP or \fICURLOPT_COPYPOSTFIELDS\fP options to
+specify what data to post and \fICURLOPT_POSTFIELDSIZE\fP or
+\fICURLOPT_POSTFIELDSIZE_LARGE\fP to set the data size.
+
+Optionally, you can provide data to POST using the \fICURLOPT_READFUNCTION\fP
+and \fICURLOPT_READDATA\fP options but then you must make sure to not set
+\fICURLOPT_POSTFIELDS\fP to anything but NULL. When providing data with a
+callback, you must transmit it using chunked transfer-encoding or you must set
+the size of the data with the \fICURLOPT_POSTFIELDSIZE\fP or
+\fICURLOPT_POSTFIELDSIZE_LARGE\fP option. To enable chunked encoding, you
+simply pass in the appropriate Transfer-Encoding header, see the
+post-callback.c example.
+
+You can override the default POST Content-Type: header by setting your own
+with \fICURLOPT_HTTPHEADER\fP.
+
+Using POST with HTTP 1.1 implies the use of a "Expect: 100-continue" header.
+You can disable this header with \fICURLOPT_HTTPHEADER\fP as usual.
+
+If you use POST to a HTTP 1.1 server, you can send data without knowing the
+size before starting the POST if you use chunked encoding. You enable this by
+adding a header like "Transfer-Encoding: chunked" with
+\fICURLOPT_HTTPHEADER\fP. With HTTP 1.0 or without chunked transfer, you must
+specify the size in the request.
+
+When setting \fICURLOPT_POST\fP to 1, it will automatically set
+\fICURLOPT_NOBODY\fP to 0 (since 7.14.1).
+
+If you issue a POST request and then want to make a HEAD or GET using the same
+re-used handle, you must explicitly set the new request type using
+\fICURLOPT_NOBODY\fP or \fICURLOPT_HTTPGET\fP or similar.
+.IP CURLOPT_POSTFIELDS
+Pass a void * as parameter, which should be the full data to post in an HTTP
+POST operation. You must make sure that the data is formatted the way you want
+the server to receive it. libcurl will not convert or encode it for you. Most
+web servers will assume this data to be url-encoded.
+
+The pointed data are NOT copied by the library: as a consequence, they must
+be preserved by the calling application until the transfer finishes.
+
+This POST is a normal application/x-www-form-urlencoded kind (and libcurl will
+set that Content-Type by default when this option is used), which is the most
+commonly used one by HTML forms. See also the \fICURLOPT_POST\fP. Using
+\fICURLOPT_POSTFIELDS\fP implies \fICURLOPT_POST\fP.
+
+If you want to do a zero-byte POST, you need to set
+\fICURLOPT_POSTFIELDSIZE\fP explicitly to zero, as simply setting
+\fICURLOPT_POSTFIELDS\fP to NULL or "" just effectively disables the sending
+of the specified string. libcurl will instead assume that you'll send the POST
+data using the read callback!
+
+Using POST with HTTP 1.1 implies the use of a "Expect: 100-continue" header.
+You can disable this header with \fICURLOPT_HTTPHEADER\fP as usual.
+
+To make multipart/formdata posts (aka RFC2388-posts), check out the
+\fICURLOPT_HTTPPOST\fP option.
+.IP CURLOPT_POSTFIELDSIZE
+If you want to post data to the server without letting libcurl do a strlen()
+to measure the data size, this option must be used. When this option is used
+you can post fully binary data, which otherwise is likely to fail. If this
+size is set to -1, the library will use strlen() to get the size.
+.IP CURLOPT_POSTFIELDSIZE_LARGE
+Pass a curl_off_t as parameter. Use this to set the size of the
+\fICURLOPT_POSTFIELDS\fP data to prevent libcurl from doing strlen() on the
+data to figure out the size. This is the large file version of the
+\fICURLOPT_POSTFIELDSIZE\fP option. (Added in 7.11.1)
+.IP CURLOPT_COPYPOSTFIELDS
+Pass a char * as parameter, which should be the full data to post in an HTTP
+POST operation. It behaves as the \fICURLOPT_POSTFIELDS\fP option, but the
+original data are copied by the library, allowing the application to overwrite
+the original data after setting this option.
+
+Because data are copied, care must be taken when using this option in
+conjunction with \fICURLOPT_POSTFIELDSIZE\fP or
+\fICURLOPT_POSTFIELDSIZE_LARGE\fP: If the size has not been set prior to
+\fICURLOPT_COPYPOSTFIELDS\fP, the data are assumed to be a NUL-terminated
+string; else the stored size informs the library about the data byte count to
+copy. In any case, the size must not be changed after
+\fICURLOPT_COPYPOSTFIELDS\fP, unless another \fICURLOPT_POSTFIELDS\fP or
+\fICURLOPT_COPYPOSTFIELDS\fP option is issued.
+(Added in 7.17.1)
+.IP CURLOPT_HTTPPOST
+Tells libcurl you want a multipart/formdata HTTP POST to be made and you
+instruct what data to pass on to the server. Pass a pointer to a linked list
+of curl_httppost structs as parameter. The easiest way to create such a
+list, is to use \fIcurl_formadd(3)\fP as documented. The data in this list
+must remain intact until you close this curl handle again with
+\fIcurl_easy_cleanup(3)\fP.
+
+Using POST with HTTP 1.1 implies the use of a "Expect: 100-continue" header.
+You can disable this header with \fICURLOPT_HTTPHEADER\fP as usual.
+
+When setting \fICURLOPT_HTTPPOST\fP, it will automatically set
+\fICURLOPT_NOBODY\fP to 0 (since 7.14.1).
+.IP CURLOPT_REFERER
+Pass a pointer to a zero terminated string as parameter. It will be used to
+set the Referer: header in the http request sent to the remote server. This
+can be used to fool servers or scripts. You can also set any custom header
+with \fICURLOPT_HTTPHEADER\fP.
+.IP CURLOPT_USERAGENT
+Pass a pointer to a zero terminated string as parameter. It will be used to
+set the User-Agent: header in the http request sent to the remote server. This
+can be used to fool servers or scripts. You can also set any custom header
+with \fICURLOPT_HTTPHEADER\fP.
+.IP CURLOPT_HTTPHEADER
+Pass a pointer to a linked list of HTTP headers to pass to the server in your
+HTTP request. The linked list should be a fully valid list of \fBstruct
+curl_slist\fP structs properly filled in. Use \fIcurl_slist_append(3)\fP to
+create the list and \fIcurl_slist_free_all(3)\fP to clean up an entire
+list. If you add a header that is otherwise generated and used by libcurl
+internally, your added one will be used instead. If you add a header with no
+content as in 'Accept:' (no data on the right side of the colon), the
+internally used header will get disabled. Thus, using this option you can add
+new headers, replace internal headers and remove internal headers. To add a
+header with no content, make the content be two quotes: \&"". The headers
+included in the linked list must not be CRLF-terminated, because curl adds
+CRLF after each header item. Failure to comply with this will result in
+strange bugs because the server will most likely ignore part of the headers
+you specified.
+
+The first line in a request (containing the method, usually a GET or POST) is
+not a header and cannot be replaced using this option. Only the lines
+following the request-line are headers. Adding this method line in this list
+of headers will only cause your request to send an invalid header.
+
+Pass a NULL to this to reset back to no custom headers.
+
+The most commonly replaced headers have "shortcuts" in the options
+\fICURLOPT_COOKIE\fP, \fICURLOPT_USERAGENT\fP and \fICURLOPT_REFERER\fP.
+.IP CURLOPT_HTTP200ALIASES
+Pass a pointer to a linked list of aliases to be treated as valid HTTP 200
+responses. Some servers respond with a custom header response line. For
+example, IceCast servers respond with "ICY 200 OK". By including this string
+in your list of aliases, the response will be treated as a valid HTTP header
+line such as "HTTP/1.0 200 OK". (Added in 7.10.3)
+
+The linked list should be a fully valid list of struct curl_slist structs, and
+be properly filled in. Use \fIcurl_slist_append(3)\fP to create the list and
+\fIcurl_slist_free_all(3)\fP to clean up an entire list.
+
+The alias itself is not parsed for any version strings. Before libcurl 7.16.3,
+Libcurl used the value set by option \fICURLOPT_HTTP_VERSION\fP, but starting
+with 7.16.3 the protocol is assumed to match HTTP 1.0 when an alias matched.
+.IP CURLOPT_COOKIE
+Pass a pointer to a zero terminated string as parameter. It will be used to
+set a cookie in the http request. The format of the string should be
+NAME=CONTENTS, where NAME is the cookie name and CONTENTS is what the cookie
+should contain.
+
+If you need to set multiple cookies, you need to set them all using a single
+option and thus you need to concatenate them all in one single string. Set
+multiple cookies in one string like this: "name1=content1; name2=content2;"
+etc.
+
+This option sets the cookie header explictly in the outgoing request(s). If
+multiple requests are done due to authentication, followed redirections or
+similar, they will all get this cookie passed on.
+
+Using this option multiple times will only make the latest string override the
+previous ones.
+.IP CURLOPT_COOKIEFILE
+Pass a pointer to a zero terminated string as parameter. It should contain the
+name of your file holding cookie data to read. The cookie data may be in
+Netscape / Mozilla cookie data format or just regular HTTP-style headers
+dumped to a file.
+
+Given an empty or non-existing file or by passing the empty string (""), this
+option will enable cookies for this curl handle, making it understand and
+parse received cookies and then use matching cookies in future requests.
+
+If you use this option multiple times, you just add more files to read.
+Subsequent files will add more cookies.
+.IP CURLOPT_COOKIEJAR
+Pass a file name as char *, zero terminated. This will make libcurl write all
+internally known cookies to the specified file when \fIcurl_easy_cleanup(3)\fP
+is called. If no cookies are known, no file will be created. Specify "-" to
+instead have the cookies written to stdout. Using this option also enables
+cookies for this session, so if you for example follow a location it will make
+matching cookies get sent accordingly.
+
+If the cookie jar file can't be created or written to (when the
+\fIcurl_easy_cleanup(3)\fP is called), libcurl will not and cannot report an
+error for this. Using \fICURLOPT_VERBOSE\fP or \fICURLOPT_DEBUGFUNCTION\fP
+will get a warning to display, but that is the only visible feedback you get
+about this possibly lethal situation.
+.IP CURLOPT_COOKIESESSION
+Pass a long set to 1 to mark this as a new cookie "session". It will force
+libcurl to ignore all cookies it is about to load that are "session cookies"
+from the previous session. By default, libcurl always stores and loads all
+cookies, independent if they are session cookies or not. Session cookies are
+cookies without expiry date and they are meant to be alive and existing for
+this "session" only.
+.IP CURLOPT_COOKIELIST
+Pass a char * to a cookie string. Cookie can be either in Netscape / Mozilla
+format or just regular HTTP-style header (Set-Cookie: ...) format. If cURL
+cookie engine was not enabled it will enable its cookie engine. Passing a
+magic string \&"ALL" will erase all cookies known by cURL. (Added in 7.14.1)
+Passing the special string \&"SESS" will only erase all session cookies known
+by cURL. (Added in 7.15.4) Passing the special string \&"FLUSH" will write
+all cookies known by cURL to the file specified by \fICURLOPT_COOKIEJAR\fP.
+(Added in 7.17.1)
+.IP CURLOPT_HTTPGET
+Pass a long. If the long is 1, this forces the HTTP request to get back
+to GET. Usable if a POST, HEAD, PUT, or a custom request has been used
+previously using the same curl handle.
+
+When setting \fICURLOPT_HTTPGET\fP to 1, it will automatically set
+\fICURLOPT_NOBODY\fP to 0 (since 7.14.1).
+.IP CURLOPT_HTTP_VERSION
+Pass a long, set to one of the values described below. They force libcurl to
+use the specific HTTP versions. This is not sensible to do unless you have a
+good reason.
+.RS
+.IP CURL_HTTP_VERSION_NONE
+We don't care about what version the library uses. libcurl will use whatever
+it thinks fit.
+.IP CURL_HTTP_VERSION_1_0
+Enforce HTTP 1.0 requests.
+.IP CURL_HTTP_VERSION_1_1
+Enforce HTTP 1.1 requests.
+.RE
+.IP CURLOPT_IGNORE_CONTENT_LENGTH
+Ignore the Content-Length header. This is useful for Apache 1.x (and similar
+servers) which will report incorrect content length for files over 2
+gigabytes. If this option is used, curl will not be able to accurately report
+progress, and will simply stop the download when the server ends the
+connection. (added in 7.14.1)
+.IP CURLOPT_HTTP_CONTENT_DECODING
+Pass a long to tell libcurl how to act on content decoding. If set to zero,
+content decoding will be disabled. If set to 1 it is enabled. Libcurl has no
+default content decoding but requires you to use \fICURLOPT_ENCODING\fP for
+that. (added in 7.16.2)
+.IP CURLOPT_HTTP_TRANSFER_DECODING
+Pass a long to tell libcurl how to act on transfer decoding. If set to zero,
+transfer decoding will be disabled, if set to 1 it is enabled
+(default). libcurl does chunked transfer decoding by default unless this
+option is set to zero. (added in 7.16.2)
+.SH SMTP OPTIONS
+.IP CURLOPT_MAIL_FROM
+Pass a pointer to a zero terminated string as parameter. It will be used to
+specify the sender address in a mail when sending an SMTP mail with libcurl.
+
+(Added in 7.20.0)
+.IP CURLOPT_MAIL_RCPT
+Pass a pointer to a linked list of recipients to pass to the server in your
+SMTP mail request. The linked list should be a fully valid list of \fBstruct
+curl_slist\fP structs properly filled in. Use \fIcurl_slist_append(3)\fP to
+create the list and \fIcurl_slist_free_all(3)\fP to clean up an entire list.
+
+Each recipient in SMTP lingo is specified with angle brackets (<>), but should
+you not use an angle bracket as first letter libcurl will assume you provide a
+single email address only and enclose that with angle brackets for you.
+
+(Added in 7.20.0)
+.SH TFTP OPTIONS
+.IP CURLOPT_TFTP_BLKSIZE
+Specify block size to use for TFTP data transmission. Valid range as per RFC
+2348 is 8-65464 bytes. The default of 512 bytes will be used if this option is
+not specified. The specified block size will only be used pending support by
+the remote server. If the server does not return an option acknowledgement or
+returns an option acknowledgement with no blksize, the default of 512 bytes
+will be used. (added in 7.19.4)
+.SH FTP OPTIONS
+.IP CURLOPT_FTPPORT
+Pass a pointer to a zero terminated string as parameter. It will be used to
+get the IP address to use for the FTP PORT instruction. The PORT instruction
+tells the remote server to connect to our specified IP address. The string may
+be a plain IP address, a host name, a network interface name (under Unix) or
+just a '-' symbol to let the library use your system's default IP
+address. Default FTP operations are passive, and thus won't use PORT.
+
+The address can be followed by a ':' to specify a port, optionally followed by
+a '-' to specify a port range. If the port specified is 0, the operating
+system will pick a free port. If a range is provided and all ports in the
+range are not available, libcurl will report CURLE_FTP_PORT_FAILED for the
+handle. Invalid port/range settings are ignored. IPv6 addresses followed by
+a port or portrange have to be in brackets. IPv6 addresses without port/range
+specifier can be in brackets. (added in 7.19.5)
+
+Examples with specified ports:
+
+.nf
+ eth0:0
+ 192.168.1.2:32000-33000
+ curl.se:32123
+ [::1]:1234-4567
+.fi
+
+You disable PORT again and go back to using the passive version by setting
+this option to NULL.
+.IP CURLOPT_QUOTE
+Pass a pointer to a linked list of FTP or SFTP commands to pass to
+the server prior to your FTP request. This will be done before any
+other commands are issued (even before the CWD command for FTP). The
+linked list should be a fully valid list of 'struct curl_slist' structs
+properly filled in with text strings. Use \fIcurl_slist_append(3)\fP
+to append strings (commands) to the list, and clear the entire list
+afterwards with \fIcurl_slist_free_all(3)\fP. Disable this operation
+again by setting a NULL to this option.
+The set of valid FTP commands depends on the server (see RFC959 for a
+list of mandatory commands).
+The valid SFTP commands are: chgrp, chmod, chown, ln, mkdir, pwd,
+rename, rm, rmdir, symlink (see
+.BR curl (1))
+(SFTP support added in 7.16.3)
+.IP CURLOPT_POSTQUOTE
+Pass a pointer to a linked list of FTP or SFTP commands to pass to the server
+after your FTP transfer request. The commands will only be run if no error
+occurred. The linked list should be a fully valid list of struct curl_slist
+structs properly filled in as described for \fICURLOPT_QUOTE\fP. Disable this
+operation again by setting a NULL to this option.
+.IP CURLOPT_PREQUOTE
+Pass a pointer to a linked list of FTP commands to pass to the server after
+the transfer type is set. The linked list should be a fully valid list of
+struct curl_slist structs properly filled in as described for
+\fICURLOPT_QUOTE\fP. Disable this operation again by setting a NULL to this
+option. Before version 7.15.6, if you also set \fICURLOPT_NOBODY\fP to 1, this
+option didn't work.
+.IP CURLOPT_DIRLISTONLY
+A parameter set to 1 tells the library to just list the names of files in a
+directory, instead of doing a full directory listing that would include file
+sizes, dates etc. This works for FTP and SFTP URLs.
+
+This causes an FTP NLST command to be sent on an FTP server. Beware that some
+FTP servers list only files in their response to NLST; they might not include
+subdirectories and symbolic links.
+
+Setting this option to 1 also implies a directory listing even if the URL
+doesn't end with a slash, which otherwise is necessary.
+
+Do NOT use this option if you also use \fICURLOPT_WILDCARDMATCH\fP as it will
+effectively break that feature then.
+
+(This option was known as CURLOPT_FTPLISTONLY up to 7.16.4)
+.IP CURLOPT_APPEND
+A parameter set to 1 tells the library to append to the remote file instead of
+overwrite it. This is only useful when uploading to an FTP site.
+
+(This option was known as CURLOPT_FTPAPPEND up to 7.16.4)
+.IP CURLOPT_FTP_USE_EPRT
+Pass a long. If the value is 1, it tells curl to use the EPRT (and
+LPRT) command when doing active FTP downloads (which is enabled by
+\fICURLOPT_FTPPORT\fP). Using EPRT means that it will first attempt to use
+EPRT and then LPRT before using PORT, but if you pass zero to this
+option, it will not try using EPRT or LPRT, only plain PORT. (Added in 7.10.5)
+
+If the server is an IPv6 host, this option will have no effect as of 7.12.3.
+.IP CURLOPT_FTP_USE_EPSV
+Pass a long. If the value is 1, it tells curl to use the EPSV command
+when doing passive FTP downloads (which it always does by default). Using EPSV
+means that it will first attempt to use EPSV before using PASV, but if you
+pass zero to this option, it will not try using EPSV, only plain PASV.
+
+If the server is an IPv6 host, this option will have no effect as of 7.12.3.
+.IP CURLOPT_FTP_USE_PRET
+Pass a long. If the value is 1, it tells curl to send a PRET command before
+PASV (and EPSV). Certain FTP servers, mainly drftpd, require this non-standard
+command for directory listings as well as up and downloads in PASV mode. Has
+no effect when using the active FTP transfers mode. (Added in 7.20.0)
+.IP CURLOPT_FTP_CREATE_MISSING_DIRS
+Pass a long. If the value is 1, curl will attempt to create any remote
+directory that it fails to CWD into. CWD is the command that changes working
+directory. (Added in 7.10.7)
+
+This setting also applies to SFTP-connections. curl will attempt to create
+the remote directory if it can't obtain a handle to the target-location. The
+creation will fail if a file of the same name as the directory to create
+already exists or lack of permissions prevents creation. (Added in 7.16.3)
+
+Starting with 7.19.4, you can also set this value to 2, which will make
+libcurl retry the CWD command again if the subsequent MKD command fails. This
+is especially useful if you're doing many simultanoes connections against the
+same server and they all have this option enabled, as then CWD may first fail
+but then another connection does MKD before this connection and thus MKD fails
+but trying CWD works! 7.19.4 also introduced the \fICURLFTP_CREATE_DIR\fP and
+\fICURLFTP_CREATE_DIR_RETRY\fP enum names for these arguments.
+
+Before version 7.19.4, libcurl will simply ignore arguments set to 2 and act
+as if 1 was selected.
+.IP CURLOPT_FTP_RESPONSE_TIMEOUT
+Pass a long. Causes curl to set a timeout period (in seconds) on the amount
+of time that the server is allowed to take in order to generate a response
+message for a command before the session is considered hung. While curl is
+waiting for a response, this value overrides \fICURLOPT_TIMEOUT\fP. It is
+recommended that if used in conjunction with \fICURLOPT_TIMEOUT\fP, you set
+\fICURLOPT_FTP_RESPONSE_TIMEOUT\fP to a value smaller than
+\fICURLOPT_TIMEOUT\fP. (Added in 7.10.8)
+.IP CURLOPT_FTP_ALTERNATIVE_TO_USER
+Pass a char * as parameter, pointing to a string which will be used to
+authenticate if the usual FTP "USER user" and "PASS password" negotiation
+fails. This is currently only known to be required when connecting to
+Tumbleweed's Secure Transport FTPS server using client certificates for
+authentication. (Added in 7.15.5)
+.IP CURLOPT_FTP_SKIP_PASV_IP
+Pass a long. If set to 1, it instructs libcurl to not use the IP address the
+server suggests in its 227-response to libcurl's PASV command when libcurl
+connects the data connection. Instead libcurl will re-use the same IP address
+it already uses for the control connection. But it will use the port number
+from the 227-response. (Added in 7.14.2)
+
+This option has no effect if PORT, EPRT or EPSV is used instead of PASV.
+.IP CURLOPT_USE_SSL
+Pass a long using one of the values from below, to make libcurl use your
+desired level of SSL for the FTP transfer. (Added in 7.11.0)
+
+(This option was known as CURLOPT_FTP_SSL up to 7.16.4, and the constants
+were known as CURLFTPSSL_*)
+.RS
+.IP CURLUSESSL_NONE
+Don't attempt to use SSL.
+.IP CURLUSESSL_TRY
+Try using SSL, proceed as normal otherwise.
+.IP CURLUSESSL_CONTROL
+Require SSL for the control connection or fail with \fICURLE_USE_SSL_FAILED\fP.
+.IP CURLUSESSL_ALL
+Require SSL for all communication or fail with \fICURLE_USE_SSL_FAILED\fP.
+.RE
+.IP CURLOPT_FTPSSLAUTH
+Pass a long using one of the values from below, to alter how libcurl issues
+\&"AUTH TLS" or "AUTH SSL" when FTP over SSL is activated (see
+\fICURLOPT_USE_SSL\fP). (Added in 7.12.2)
+.RS
+.IP CURLFTPAUTH_DEFAULT
+Allow libcurl to decide.
+.IP CURLFTPAUTH_SSL
+Try "AUTH SSL" first, and only if that fails try "AUTH TLS".
+.IP CURLFTPAUTH_TLS
+Try "AUTH TLS" first, and only if that fails try "AUTH SSL".
+.RE
+.IP CURLOPT_FTP_SSL_CCC
+If enabled, this option makes libcurl use CCC (Clear Command Channel). It
+shuts down the SSL/TLS layer after authenticating. The rest of the
+control channel communication will be unencrypted. This allows NAT routers
+to follow the FTP transaction. Pass a long using one of the values below.
+(Added in 7.16.1)
+.RS
+.IP CURLFTPSSL_CCC_NONE
+Don't attempt to use CCC.
+.IP CURLFTPSSL_CCC_PASSIVE
+Do not initiate the shutdown, but wait for the server to do it. Do not send
+a reply.
+.IP CURLFTPSSL_CCC_ACTIVE
+Initiate the shutdown and wait for a reply.
+.RE
+.IP CURLOPT_FTP_ACCOUNT
+Pass a pointer to a zero-terminated string (or NULL to disable). When an FTP
+server asks for "account data" after user name and password has been provided,
+this data is sent off using the ACCT command. (Added in 7.13.0)
+.IP CURLOPT_FTP_FILEMETHOD
+Pass a long that should have one of the following values. This option controls
+what method libcurl should use to reach a file on a FTP(S) server. The
+argument should be one of the following alternatives:
+.RS
+.IP CURLFTPMETHOD_MULTICWD
+libcurl does a single CWD operation for each path part in the given URL. For
+deep hierarchies this means many commands. This is how RFC1738 says it
+should be done. This is the default but the slowest behavior.
+.IP CURLFTPMETHOD_NOCWD
+libcurl does no CWD at all. libcurl will do SIZE, RETR, STOR etc and give a
+full path to the server for all these commands. This is the fastest behavior.
+.IP CURLFTPMETHOD_SINGLECWD
+libcurl does one CWD with the full target directory and then operates on the
+file \&"normally" (like in the multicwd case). This is somewhat more standards
+compliant than 'nocwd' but without the full penalty of 'multicwd'.
+.RE
+(Added in 7.15.1)
+.SH RTSP OPTIONS
+.IP CURLOPT_RTSP_REQUEST
+Tell libcurl what kind of RTSP request to make. Pass one of the following RTSP
+enum values. Unless noted otherwise, commands require the Session ID to be
+initialized. (Added in 7.20.0)
+.RS
+.IP CURL_RTSPREQ_OPTIONS
+Used to retrieve the available methods of the server. The application is
+responsbile for parsing and obeying the response. \fB(The session ID is not
+needed for this method.)\fP (Added in 7.20.0)
+.IP CURL_RTSPREQ_DESCRIBE
+Used to get the low level description of a stream. The application should note
+what formats it understands in the \fI'Accept:'\fP header. Unless set
+manually, libcurl will automatically fill in \fI'Accept:
+application/sdp'\fP. Time-condition headers will be added to Describe requests
+if the \fICURLOPT_TIMECONDITION\fP option is active. \fB(The session ID is not
+needed for this method)\fP (Added in 7.20.0)
+.IP CURL_RTSPREQ_ANNOUNCE
+When sent by a client, this method changes the description of the session. For
+example, if a client is using the server to record a meeting, the client can
+use Announce to inform the server of all the meta-information about the
+session. ANNOUNCE acts like an HTTP PUT or POST just like
+\fICURL_RTSPREQ_SET_PARAMETER\fP (Added in 7.20.0)
+.IP CURL_RTSPREQ_SETUP
+Setup is used to initialize the transport layer for the session. The
+application must set the desired Transport options for a session by using the
+\fICURLOPT_RTSP_TRANSPORT\fP option prior to calling setup. If no session ID
+is currently set with \fICURLOPT_RTSP_SESSION_ID\fP, libcurl will extract and
+use the session ID in the response to this request. \fB(The session ID is not
+needed for this method).\fP (Added in 7.20.0)
+.IP CURL_RTSPREQ_PLAY
+Send a Play command to the server. Use the \fICURLOPT_RANGE\fP option to
+modify the playback time (e.g. 'npt=10-15'). (Added in 7.20.0)
+.IP CURL_RTSPREQ_PAUSE
+Send a Pause command to the server. Use the \fICURLOPT_RANGE\fP option with a
+single value to indicate when the stream should be halted. (e.g. npt='25')
+(Added in 7.20.0)
+.IP CURL_RTSPREQ_TEARDOWN
+This command terminates an RTSP session. Simply closing a connection does not
+terminate the RTSP session since it is valid to control an RTSP session over
+different connections. (Added in 7.20.0)
+.IP CURL_RTSPREQ_GET_PARAMETER
+Retrieve a parameter from the server. By default, libcurl will automatically
+include a \fIContent-Type: text/parameters\fP header on all non-empty requests
+unless a custom one is set. GET_PARAMETER acts just like an HTTP PUT or POST
+(see \fICURL_RTSPREQ_SET_PARAMETER\fP).
+Applications wishing to send a heartbeat message (e.g. in the presence of a
+server-specified timeout) should send use an empty GET_PARAMETER request.
+(Added in 7.20.0)
+.IP CURL_RTSPREQ_SET_PARAMETER
+Set a parameter on the server. By default, libcurl will automatically include
+a \fIContent-Type: text/parameters\fP header unless a custom one is set. The
+interaction with SET_PARAMTER is much like an HTTP PUT or POST. An application
+may either use \fICURLOPT_UPLOAD\fP with \fICURLOPT_READDATA\fP like an HTTP
+PUT, or it may use \fICURLOPT_POSTFIELDS\fP like an HTTP POST. No chunked
+transfers are allowed, so the application must set the
+\fICURLOPT_INFILESIZE\fP in the former and \fICURLOPT_POSTFIELDSIZE\fP in the
+latter. Also, there is no use of multi-part POSTs within RTSP. (Added in
+7.20.0)
+.IP CURL_RTSPREQ_RECORD
+Used to tell the server to record a session. Use the \fICURLOPT_RANGE\fP
+option to modify the record time. (Added in 7.20.0)
+.IP CURL_RTSPREQ_RECEIVE
+This is a special request because it does not send any data to the server. The
+application may call this function in order to receive interleaved RTP
+data. It will return after processing one read buffer of data in order to give
+the application a chance to run. (Added in 7.20.0)
+.RE
+.IP CURLOPT_RTSP_SESSION_ID
+Pass a char * as a parameter to set the value of the current RTSP Session ID
+for the handle. Useful for resuming an in-progress session. Once this value is
+set to any non-NULL value, libcurl will return \fICURLE_RTSP_SESSION_ERROR\fP
+if ID received from the server does not match. If unset (or set to NULL),
+libcurl will automatically set the ID the first time the server sets it in a
+response. (Added in 7.20.0)
+.IP CURLOPT_RTSP_STREAM_URI
+Set the stream URI to operate on by passing a char * . For example, a single
+session may be controlling \fIrtsp://foo/twister/audio\fP and
+\fIrtsp://foo/twister/video\fP and the application can switch to the
+appropriate stream using this option. If unset, libcurl will default to
+operating on generic server options by passing '*' in the place of the RTSP
+Stream URI. This option is distinct from \fICURLOPT_URL\fP. When working with
+RTSP, the \fICURLOPT_STREAM_URI\fP indicates what URL to send to the server in
+the request header while the \fICURLOPT_URL\fP indicates where to make the
+connection to. (e.g. the \fICURLOPT_URL\fP for the above examples might be
+set to \fIrtsp://foo/twister\fP (Added in 7.20.0)
+.IP CURLOPT_RTSP_TRANSPORT
+Pass a char * to tell libcurl what to pass for the Transport: header for this
+RTSP session. This is mainly a convenience method to avoid needing to set a
+custom Transport: header for every SETUP request. The application must set a
+Transport: header before issuing a SETUP request. (Added in 7.20.0)
+.IP CURLOPT_RTSP_HEADER
+This option is simply an alias for \fICURLOPT_HTTP_HEADER\fP. Use this to
+replace the standard headers that RTSP and HTTP share. It is also valid to use
+the shortcuts such as \fICURLOPT_USERAGENT\fP. (Added in 7.20.0)
+.IP CURLOPT_RTSP_CLIENT_CSEQ
+Manually set the the CSEQ number to issue for the next RTSP request. Useful if
+the application is resuming a previously broken connection. The CSEQ will
+increment from this new number henceforth. (Added in 7.20.0)
+.IP CURLOPT_RTSP_SERVER_CSEQ
+Manually set the CSEQ number to expect for the next RTSP Server->Client
+request. At the moment, this feature (listening for Server requests) is
+unimplemented. (Added in 7.20.0)
+.SH PROTOCOL OPTIONS
+.IP CURLOPT_TRANSFERTEXT
+A parameter set to 1 tells the library to use ASCII mode for FTP transfers,
+instead of the default binary transfer. For win32 systems it does not set the
+stdout to binary mode. This option can be usable when transferring text data
+between systems with different views on certain characters, such as newlines
+or similar.
+
+libcurl does not do a complete ASCII conversion when doing ASCII transfers
+over FTP. This is a known limitation/flaw that nobody has rectified. libcurl
+simply sets the mode to ASCII and performs a standard transfer.
+.IP CURLOPT_PROXY_TRANSFER_MODE
+Pass a long. If the value is set to 1 (one), it tells libcurl to set the
+transfer mode (binary or ASCII) for FTP transfers done via an HTTP proxy, by
+appending ;type=a or ;type=i to the URL. Without this setting, or it being set
+to 0 (zero, the default), \fICURLOPT_TRANSFERTEXT\fP has no effect when doing
+FTP via a proxy. Beware that not all proxies support this feature. (Added in
+7.18.0)
+.IP CURLOPT_CRLF
+Convert Unix newlines to CRLF newlines on transfers.
+.IP CURLOPT_RANGE
+Pass a char * as parameter, which should contain the specified range you
+want. It should be in the format "X-Y", where X or Y may be left out. HTTP
+transfers also support several intervals, separated with commas as in
+\fI"X-Y,N-M"\fP. Using this kind of multiple intervals will cause the HTTP
+server to send the response document in pieces (using standard MIME separation
+techniques). For RTSP, the formatting of a range should follow RFC 2326
+Section 12.29. For RTSP, byte ranges are \fBnot\fP permitted. Instead, ranges
+should be given in npt, utc, or smpte formats.
+
+Pass a NULL to this option to disable the use of ranges.
+
+Ranges work on HTTP, FTP, FILE (since 7.18.0), and RTSP (since 7.20.0)
+transfers only.
+.IP CURLOPT_RESUME_FROM
+Pass a long as parameter. It contains the offset in number of bytes that you
+want the transfer to start from. Set this option to 0 to make the transfer
+start from the beginning (effectively disabling resume). For FTP, set this
+option to -1 to make the transfer start from the end of the target file
+(useful to continue an interrupted upload).
+
+When doing uploads with FTP, the resume position is where in the local/source
+file libcurl should try to resume the upload from and it will then append the
+source file to the remote target file.
+.IP CURLOPT_RESUME_FROM_LARGE
+Pass a curl_off_t as parameter. It contains the offset in number of bytes that
+you want the transfer to start from. (Added in 7.11.0)
+.IP CURLOPT_CUSTOMREQUEST
+Pass a pointer to a zero terminated string as parameter. It will be used
+instead of GET or HEAD when doing an HTTP request, or instead of LIST or NLST
+when doing a FTP directory listing. This is useful for doing DELETE or other
+more or less obscure HTTP requests. Don't do this at will, make sure your
+server supports the command first.
+
+When you change the request method by setting \fBCURLOPT_CUSTOMREQUEST\fP to
+something, you don't actually change how libcurl behaves or acts in regards to
+the particular request method, it will only change the actual string sent in
+the request.
+
+For example: if you tell libcurl to do a HEAD request, but then change the
+request to a "GET" with \fBCURLOPT_CUSTOMREQUEST\fP you'll still see libcurl
+act as if it sent a HEAD even when it does send a GET.
+
+To switch to a proper HEAD, use \fICURLOPT_NOBODY\fP, to switch to a proper
+POST, use \fICURLOPT_POST\fP or \fICURLOPT_POSTFIELDS\fP and so on.
+
+Restore to the internal default by setting this to NULL.
+
+Many people have wrongly used this option to replace the entire request with
+their own, including multiple headers and POST contents. While that might work
+in many cases, it will cause libcurl to send invalid requests and it could
+possibly confuse the remote server badly. Use \fICURLOPT_POST\fP and
+\fICURLOPT_POSTFIELDS\fP to set POST data. Use \fICURLOPT_HTTPHEADER\fP to
+replace or extend the set of headers sent by libcurl. Use
+\fICURLOPT_HTTP_VERSION\fP to change HTTP version.
+.IP CURLOPT_FILETIME
+Pass a long. If it is 1, libcurl will attempt to get the modification date of
+the remote document in this operation. This requires that the remote server
+sends the time or replies to a time querying command. The
+\fIcurl_easy_getinfo(3)\fP function with the \fICURLINFO_FILETIME\fP argument
+can be used after a transfer to extract the received time (if any).
+.IP CURLOPT_NOBODY
+A parameter set to 1 tells the library to not include the body-part in the
+output. This is only relevant for protocols that have separate header and body
+parts. On HTTP(S) servers, this will make libcurl do a HEAD request.
+
+To change request to GET, you should use \fICURLOPT_HTTPGET\fP. Change request
+to POST with \fICURLOPT_POST\fP etc.
+.IP CURLOPT_INFILESIZE
+When uploading a file to a remote site, this option should be used to tell
+libcurl what the expected size of the infile is. This value should be passed
+as a long. See also \fICURLOPT_INFILESIZE_LARGE\fP.
+
+For uploading using SCP, this option or \fICURLOPT_INFILESIZE_LARGE\fP is
+mandatory.
+
+This option does not limit how much data libcurl will actually send, as that
+is controlled entirely by what the read callback returns.
+.IP CURLOPT_INFILESIZE_LARGE
+When uploading a file to a remote site, this option should be used to tell
+libcurl what the expected size of the infile is. This value should be passed
+as a curl_off_t. (Added in 7.11.0)
+
+For uploading using SCP, this option or \fICURLOPT_INFILESIZE\fP is mandatory.
+
+This option does not limit how much data libcurl will actually send, as that
+is controlled entirely by what the read callback returns.
+.IP CURLOPT_UPLOAD
+A parameter set to 1 tells the library to prepare for an upload. The
+\fICURLOPT_READDATA\fP and \fICURLOPT_INFILESIZE\fP or
+\fICURLOPT_INFILESIZE_LARGE\fP options are also interesting for uploads. If
+the protocol is HTTP, uploading means using the PUT request unless you tell
+libcurl otherwise.
+
+Using PUT with HTTP 1.1 implies the use of a "Expect: 100-continue" header.
+You can disable this header with \fICURLOPT_HTTPHEADER\fP as usual.
+
+If you use PUT to a HTTP 1.1 server, you can upload data without knowing the
+size before starting the transfer if you use chunked encoding. You enable this
+by adding a header like "Transfer-Encoding: chunked" with
+\fICURLOPT_HTTPHEADER\fP. With HTTP 1.0 or without chunked transfer, you must
+specify the size.
+.IP CURLOPT_MAXFILESIZE
+Pass a long as parameter. This allows you to specify the maximum size (in
+bytes) of a file to download. If the file requested is larger than this value,
+the transfer will not start and CURLE_FILESIZE_EXCEEDED will be returned.
+
+The file size is not always known prior to download, and for such files this
+option has no effect even if the file transfer ends up being larger than this
+given limit. This concerns both FTP and HTTP transfers.
+.IP CURLOPT_MAXFILESIZE_LARGE
+Pass a curl_off_t as parameter. This allows you to specify the maximum size
+(in bytes) of a file to download. If the file requested is larger than this
+value, the transfer will not start and \fICURLE_FILESIZE_EXCEEDED\fP will be
+returned. (Added in 7.11.0)
+
+The file size is not always known prior to download, and for such files this
+option has no effect even if the file transfer ends up being larger than this
+given limit. This concerns both FTP and HTTP transfers.
+.IP CURLOPT_TIMECONDITION
+Pass a long as parameter. This defines how the \fICURLOPT_TIMEVALUE\fP time
+value is treated. You can set this parameter to \fICURL_TIMECOND_IFMODSINCE\fP
+or \fICURL_TIMECOND_IFUNMODSINCE\fP. This feature applies to HTTP, FTP, and
+RTSP.
+
+The last modification time of a file is not always known and in such instances
+this feature will have no effect even if the given time condition would not
+have been met. \fIcurl_easy_getinfo(3)\fP with the
+\fICURLINFO_CONDITION_UNMET\fP option can be used after a transfer to learn if
+a zero-byte successful "transfer" was due to this condition not matching.
+.IP CURLOPT_TIMEVALUE
+Pass a long as parameter. This should be the time in seconds since 1 Jan 1970,
+and the time will be used in a condition as specified with
+\fICURLOPT_TIMECONDITION\fP.
+.SH CONNECTION OPTIONS
+.IP CURLOPT_TIMEOUT
+Pass a long as parameter containing the maximum time in seconds that you allow
+the libcurl transfer operation to take. Normally, name lookups can take a
+considerable time and limiting operations to less than a few minutes risk
+aborting perfectly normal operations. This option will cause curl to use the
+SIGALRM to enable time-outing system calls.
+
+In unix-like systems, this might cause signals to be used unless
+\fICURLOPT_NOSIGNAL\fP is set.
+.IP CURLOPT_TIMEOUT_MS
+Like \fICURLOPT_TIMEOUT\fP but takes number of milliseconds instead. If
+libcurl is built to use the standard system name resolver, that portion
+of the transfer will still use full-second resolution for timeouts with
+a minimum timeout allowed of one second.
+(Added in 7.16.2)
+.IP CURLOPT_LOW_SPEED_LIMIT
+Pass a long as parameter. It contains the transfer speed in bytes per second
+that the transfer should be below during \fICURLOPT_LOW_SPEED_TIME\fP seconds
+for the library to consider it too slow and abort.
+.IP CURLOPT_LOW_SPEED_TIME
+Pass a long as parameter. It contains the time in seconds that the transfer
+should be below the \fICURLOPT_LOW_SPEED_LIMIT\fP for the library to consider
+it too slow and abort.
+.IP CURLOPT_MAX_SEND_SPEED_LARGE
+Pass a curl_off_t as parameter. If an upload exceeds this speed (counted in
+bytes per second) on cumulative average during the transfer, the transfer will
+pause to keep the average rate less than or equal to the parameter value.
+Defaults to unlimited speed. (Added in 7.15.5)
+.IP CURLOPT_MAX_RECV_SPEED_LARGE
+Pass a curl_off_t as parameter. If a download exceeds this speed (counted in
+bytes per second) on cumulative average during the transfer, the transfer will
+pause to keep the average rate less than or equal to the parameter
+value. Defaults to unlimited speed. (Added in 7.15.5)
+.IP CURLOPT_MAXCONNECTS
+Pass a long. The set number will be the persistent connection cache size. The
+set amount will be the maximum amount of simultaneously open connections that
+libcurl may cache in this easy handle. Default is 5, and there isn't much
+point in changing this value unless you are perfectly aware of how this works
+and changes libcurl's behaviour. This concerns connections using any of the
+protocols that support persistent connections.
+
+When reaching the maximum limit, curl closes the oldest one in the cache to
+prevent increasing the number of open connections.
+
+If you already have performed transfers with this curl handle, setting a
+smaller MAXCONNECTS than before may cause open connections to get closed
+unnecessarily.
+
+If you add this easy handle to a multi handle, this setting is not
+acknowledged, and you must instead use \fIcurl_multi_setopt(3)\fP and the
+\fICURLMOPT_MAXCONNECTS\fP option.
+.IP CURLOPT_CLOSEPOLICY
+(Obsolete) This option does nothing.
+.IP CURLOPT_FRESH_CONNECT
+Pass a long. Set to 1 to make the next transfer use a new (fresh) connection
+by force. If the connection cache is full before this connection, one of the
+existing connections will be closed as according to the selected or default
+policy. This option should be used with caution and only if you understand
+what it does. Set this to 0 to have libcurl attempt re-using an existing
+connection (default behavior).
+.IP CURLOPT_FORBID_REUSE
+Pass a long. Set to 1 to make the next transfer explicitly close the
+connection when done. Normally, libcurl keeps all connections alive when done
+with one transfer in case a succeeding one follows that can re-use them.
+This option should be used with caution and only if you understand what it
+does. Set to 0 to have libcurl keep the connection open for possible later
+re-use (default behavior).
+.IP CURLOPT_CONNECTTIMEOUT
+Pass a long. It should contain the maximum time in seconds that you allow the
+connection to the server to take. This only limits the connection phase, once
+it has connected, this option is of no more use. Set to zero to disable
+connection timeout (it will then only timeout on the system's internal
+timeouts). See also the \fICURLOPT_TIMEOUT\fP option.
+
+In unix-like systems, this might cause signals to be used unless
+\fICURLOPT_NOSIGNAL\fP is set.
+.IP CURLOPT_CONNECTTIMEOUT_MS
+Like \fICURLOPT_CONNECTTIMEOUT\fP but takes the number of milliseconds
+instead. If libcurl is built to use the standard system name resolver,
+that portion of the connect will still use full-second resolution for
+timeouts with a minimum timeout allowed of one second.
+(Added in 7.16.2)
+.IP CURLOPT_IPRESOLVE
+Allows an application to select what kind of IP addresses to use when
+resolving host names. This is only interesting when using host names that
+resolve addresses using more than one version of IP. The allowed values are:
+.RS
+.IP CURL_IPRESOLVE_WHATEVER
+Default, resolves addresses to all IP versions that your system allows.
+.IP CURL_IPRESOLVE_V4
+Resolve to IPv4 addresses.
+.IP CURL_IPRESOLVE_V6
+Resolve to IPv6 addresses.
+.RE
+.IP CURLOPT_CONNECT_ONLY
+Pass a long. If the parameter equals 1, it tells the library to perform all
+the required proxy authentication and connection setup, but no data transfer.
+This option is useful only on HTTP URLs.
+
+This option is useful with the \fICURLINFO_LASTSOCKET\fP option to
+\fIcurl_easy_getinfo(3)\fP. The library can set up the connection and then the
+application can obtain the most recently used socket for special data
+transfers. (Added in 7.15.2)
+.SH SSL and SECURITY OPTIONS
+.IP CURLOPT_SSLCERT
+Pass a pointer to a zero terminated string as parameter. The string should be
+the file name of your certificate. The default format is "PEM" and can be
+changed with \fICURLOPT_SSLCERTTYPE\fP.
+
+With NSS this is the nickname of the certificate you wish to authenticate
+with.
+.IP CURLOPT_SSLCERTTYPE
+Pass a pointer to a zero terminated string as parameter. The string should be
+the format of your certificate. Supported formats are "PEM" and "DER". (Added
+in 7.9.3)
+.IP CURLOPT_SSLKEY
+Pass a pointer to a zero terminated string as parameter. The string should be
+the file name of your private key. The default format is "PEM" and can be
+changed with \fICURLOPT_SSLKEYTYPE\fP.
+.IP CURLOPT_SSLKEYTYPE
+Pass a pointer to a zero terminated string as parameter. The string should be
+the format of your private key. Supported formats are "PEM", "DER" and "ENG".
+
+The format "ENG" enables you to load the private key from a crypto engine. In
+this case \fICURLOPT_SSLKEY\fP is used as an identifier passed to the
+engine. You have to set the crypto engine with \fICURLOPT_SSLENGINE\fP.
+\&"DER" format key file currently does not work because of a bug in OpenSSL.
+.IP CURLOPT_KEYPASSWD
+Pass a pointer to a zero terminated string as parameter. It will be used as
+the password required to use the \fICURLOPT_SSLKEY\fP or
+\fICURLOPT_SSH_PRIVATE_KEYFILE\fP private key.
+You never needed a pass phrase to load a certificate but you need one to
+load your private key.
+
+(This option was known as CURLOPT_SSLKEYPASSWD up to 7.16.4 and
+CURLOPT_SSLCERTPASSWD up to 7.9.2)
+.IP CURLOPT_SSLENGINE
+Pass a pointer to a zero terminated string as parameter. It will be used as
+the identifier for the crypto engine you want to use for your private
+key.
+
+If the crypto device cannot be loaded, \fICURLE_SSL_ENGINE_NOTFOUND\fP is
+returned.
+.IP CURLOPT_SSLENGINE_DEFAULT
+Sets the actual crypto engine as the default for (asymmetric) crypto
+operations.
+
+If the crypto device cannot be set, \fICURLE_SSL_ENGINE_SETFAILED\fP is
+returned.
+
+Even though this option doesn't need any parameter, in some configurations
+\fIcurl_easy_setopt\fP might be defined as a macro taking exactly three
+arguments. Therefore, it's recommended to pass 1 as parameter to this option.
+.IP CURLOPT_SSLVERSION
+Pass a long as parameter to control what version of SSL/TLS to attempt to use.
+The available options are:
+.RS
+.IP CURL_SSLVERSION_DEFAULT
+The default action. This will attempt to figure out the remote SSL protocol
+version, i.e. either SSLv3 or TLSv1 (but not SSLv2, which became disabled
+by default with 7.18.1).
+.IP CURL_SSLVERSION_TLSv1
+Force TLSv1
+.IP CURL_SSLVERSION_SSLv2
+Force SSLv2
+.IP CURL_SSLVERSION_SSLv3
+Force SSLv3
+.RE
+.IP CURLOPT_SSL_VERIFYPEER
+Pass a long as parameter.
+
+This option determines whether curl verifies the authenticity of the peer's
+certificate. A value of 1 means curl verifies; zero means it doesn't. The
+default is nonzero, but before 7.10, it was zero.
+
+When negotiating an SSL connection, the server sends a certificate indicating
+its identity. Curl verifies whether the certificate is authentic, i.e. that
+you can trust that the server is who the certificate says it is. This trust
+is based on a chain of digital signatures, rooted in certification authority
+(CA) certificates you supply. As of 7.10, curl installs a default bundle of
+CA certificates and you can specify alternate certificates with the
+\fICURLOPT_CAINFO\fP option or the \fICURLOPT_CAPATH\fP option.
+
+When \fICURLOPT_SSL_VERIFYPEER\fP is nonzero, and the verification fails to
+prove that the certificate is authentic, the connection fails. When the
+option is zero, the connection succeeds regardless.
+
+Authenticating the certificate is not by itself very useful. You typically
+want to ensure that the server, as authentically identified by its
+certificate, is the server you mean to be talking to. Use
+\fICURLOPT_SSL_VERIFYHOST\fP to control that.
+.IP CURLOPT_CAINFO
+Pass a char * to a zero terminated string naming a file holding one or more
+certificates to verify the peer with. This makes sense only when used in
+combination with the \fICURLOPT_SSL_VERIFYPEER\fP option. If
+\fICURLOPT_SSL_VERIFYPEER\fP is zero, \fICURLOPT_CAINFO\fP need not
+even indicate an accessible file.
+
+This option is by default set to the system path where libcurl's cacert bundle
+is assumed to be stored, as established at build time.
+
+When built against NSS, this is the directory that the NSS certificate
+database resides in.
+.IP CURLOPT_ISSUERCERT
+Pass a char * to a zero terminated string naming a file holding a CA
+certificate in PEM format. If the option is set, an additional check against
+the peer certificate is performed to verify the issuer is indeed the one
+associated with the certificate provided by the option. This additional check
+is useful in multi-level PKI where one needs to enforce that the peer
+certificate is from a specific branch of the tree.
+
+This option makes sense only when used in combination with the
+\fICURLOPT_SSL_VERIFYPEER\fP option. Otherwise, the result of the check is not
+considered as failure.
+
+A specific error code (CURLE_SSL_ISSUER_ERROR) is defined with the option,
+which is returned if the setup of the SSL/TLS session has failed due to a
+mismatch with the issuer of peer certificate (\fICURLOPT_SSL_VERIFYPEER\fP has
+to be set too for the check to fail). (Added in 7.19.0)
+.IP CURLOPT_CAPATH
+Pass a char * to a zero terminated string naming a directory holding multiple
+CA certificates to verify the peer with. The certificate directory must be
+prepared using the openssl c_rehash utility. This makes sense only when used
+in combination with the \fICURLOPT_SSL_VERIFYPEER\fP option. If
+\fICURLOPT_SSL_VERIFYPEER\fP is zero, \fICURLOPT_CAPATH\fP need not even
+indicate an accessible path. The \fICURLOPT_CAPATH\fP function apparently
+does not work in Windows due to some limitation in openssl. This option is
+OpenSSL-specific and does nothing if libcurl is built to use GnuTLS.
+.IP CURLOPT_CRLFILE
+Pass a char * to a zero terminated string naming a file with the concatenation
+of CRL (in PEM format) to use in the certificate validation that occurs during
+the SSL exchange.
+
+When curl is built to use NSS or GnuTLS, there is no way to influence the use
+of CRL passed to help in the verification process. When libcurl is built with
+OpenSSL support, X509_V_FLAG_CRL_CHECK and X509_V_FLAG_CRL_CHECK_ALL are both
+set, requiring CRL check against all the elements of the certificate chain if
+a CRL file is passed.
+
+This option makes sense only when used in combination with the
+\fICURLOPT_SSL_VERIFYPEER\fP option.
+
+A specific error code (CURLE_SSL_CRL_BADFILE) is defined with the option. It
+is returned when the SSL exchange fails because the CRL file cannot be loaded.
+A failure in certificate verification due to a revocation information found in
+the CRL does not trigger this specific error. (Added in 7.19.0)
+.IP CURLOPT_CERTINFO
+Pass a long set to 1 to enable libcurl's certificate chain info gatherer. With
+this enabled, libcurl (if built with OpenSSL) will extract lots of information
+and data about the certificates in the certificate chain used in the SSL
+connection. This data is then possible to extract after a transfer using
+\fIcurl_easy_getinfo(3)\fP and its option \fICURLINFO_CERTINFO\fP. (Added in
+7.19.1)
+.IP CURLOPT_RANDOM_FILE
+Pass a char * to a zero terminated file name. The file will be used to read
+from to seed the random engine for SSL. The more random the specified file is,
+the more secure the SSL connection will become.
+.IP CURLOPT_EGDSOCKET
+Pass a char * to the zero terminated path name to the Entropy Gathering Daemon
+socket. It will be used to seed the random engine for SSL.
+.IP CURLOPT_SSL_VERIFYHOST
+Pass a long as parameter.
+
+This option determines whether libcurl verifies that the server cert is for
+the server it is known as.
+
+When negotiating a SSL connection, the server sends a certificate indicating
+its identity.
+
+When \fICURLOPT_SSL_VERIFYHOST\fP is 2, that certificate must indicate that
+the server is the server to which you meant to connect, or the connection
+fails.
+
+Curl considers the server the intended one when the Common Name field or a
+Subject Alternate Name field in the certificate matches the host name in the
+URL to which you told Curl to connect.
+
+When the value is 1, the certificate must contain a Common Name field, but it
+doesn't matter what name it says. (This is not ordinarily a useful setting).
+
+When the value is 0, the connection succeeds regardless of the names in the
+certificate.
+
+The default, since 7.10, is 2.
+
+This option controls checking the server's claimed identity. The server could
+be lying. To control lying, see \fICURLOPT_SSL_VERIFYPEER\fP.
+.IP CURLOPT_SSL_CIPHER_LIST
+Pass a char *, pointing to a zero terminated string holding the list of
+ciphers to use for the SSL connection. The list must be syntactically correct,
+it consists of one or more cipher strings separated by colons. Commas or
+spaces are also acceptable separators but colons are normally used, \&!, \&-
+and \&+ can be used as operators.
+
+For OpenSSL and GnuTLS valid examples of cipher lists include 'RC4-SHA',
+\'SHA1+DES\', 'TLSv1' and 'DEFAULT'. The default list is normally set when you
+compile OpenSSL.
+
+You'll find more details about cipher lists on this URL:
+\fIhttp://www.openssl.org/docs/apps/ciphers.html\fP
+
+For NSS, valid examples of cipher lists include 'rsa_rc4_128_md5',
+\'rsa_aes_128_sha\', etc. With NSS you don't add/remove ciphers. If one uses
+this option then all known ciphers are disabled and only those passed in
+are enabled.
+
+You'll find more details about the NSS cipher lists on this URL:
+\fIhttp://directory.fedora.redhat.com/docs/mod_nss.html#Directives\fP
+
+.IP CURLOPT_SSL_SESSIONID_CACHE
+Pass a long set to 0 to disable libcurl's use of SSL session-ID caching. Set
+this to 1 to enable it. By default all transfers are done using the
+cache. While nothing ever should get hurt by attempting to reuse SSL
+session-IDs, there seem to be broken SSL implementations in the wild that may
+require you to disable this in order for you to succeed. (Added in 7.16.0)
+.IP CURLOPT_KRBLEVEL
+Pass a char * as parameter. Set the kerberos security level for FTP; this also
+enables kerberos awareness. This is a string, \&'clear', \&'safe',
+\&'confidential' or \&'private'. If the string is set but doesn't match one
+of these, 'private' will be used. Set the string to NULL to disable kerberos
+support for FTP.
+
+(This option was known as CURLOPT_KRB4LEVEL up to 7.16.3)
+.SH SSH OPTIONS
+.IP CURLOPT_SSH_AUTH_TYPES
+Pass a long set to a bitmask consisting of one or more of
+CURLSSH_AUTH_PUBLICKEY, CURLSSH_AUTH_PASSWORD, CURLSSH_AUTH_HOST,
+CURLSSH_AUTH_KEYBOARD. Set CURLSSH_AUTH_ANY to let libcurl pick one.
+(Added in 7.16.1)
+.IP CURLOPT_SSH_HOST_PUBLIC_KEY_MD5
+Pass a char * pointing to a string containing 32 hexadecimal digits. The
+string should be the 128 bit MD5 checksum of the remote host's public key, and
+libcurl will reject the connection to the host unless the md5sums match. This
+option is only for SCP and SFTP transfers. (Added in 7.17.1)
+.IP CURLOPT_SSH_PUBLIC_KEYFILE
+Pass a char * pointing to a file name for your public key. If not used,
+libcurl defaults to using \fB~/.ssh/id_dsa.pub\fP.
+(Added in 7.16.1)
+.IP CURLOPT_SSH_PRIVATE_KEYFILE
+Pass a char * pointing to a file name for your private key. If not used,
+libcurl defaults to using \fB~/.ssh/id_dsa\fP. If the file is
+password-protected, set the password with \fICURLOPT_KEYPASSWD\fP. (Added in
+7.16.1)
+.IP CURLOPT_SSH_KNOWNHOSTS
+Pass a pointer to a zero terminated string holding the file name of the
+known_host file to use. The known_hosts file should use the OpenSSH file
+format as supported by libssh2. If this file is specified, libcurl will only
+accept connections with hosts that are known and present in that file, with a
+matching public key. Use \fICURLOPT_SSH_KEYFUNCTION\fP to alter the default
+behavior on host and key (mis)matching. (Added in 7.19.6)
+.IP CURLOPT_SSH_KEYFUNCTION
+Pass a pointer to a curl_sshkeycallback function. It gets called when the
+known_host matching has been done, to allow the application to act and decide
+for libcurl how to proceed. It gets passed the CURL handle, the key from the
+known_hosts file, the key from the remote site, info from libcurl on the
+matching status and a custom pointer (set with \fICURLOPT_SSH_KEYDATA\fP). It
+MUST return one of the following return codes to tell libcurl how to act:
+.RS
+.IP CURLKHSTAT_FINE_ADD_TO_FILE
+The host+key is accepted and libcurl will append it to the known_hosts file
+before continuing with the connection. This will also add the host+key combo
+to the known_host pool kept in memory if it wasn't already present there. The
+adding of data to the file is done by completely replacing the file with a new
+copy, so the permissions of the file must allow this.
+.IP CURLKHSTAT_FINE
+The host+key is accepted libcurl will continue with the connection. This will
+also add the host+key combo to the known_host pool kept in memory if it wasn't
+already present there.
+.IP CURLKHSTAT_REJECT
+The host+key is rejected. libcurl will deny the connection to continue and it
+will be closed.
+.IP CURLKHSTAT_DEFER
+The host+key is rejected, but the SSH connection is asked to be kept alive.
+This feature could be used when the app wants to somehow return back and act
+on the host+key situation and then retry without needing the overhead of
+setting it up from scratch again.
+.RE
+ (Added in 7.19.6)
+.IP CURLOPT_SSH_KEYDATA
+Pass a void * as parameter. This pointer will be passed along verbatim to the
+callback set with \fICURLOPT_SSH_KEYFUNCTION\fP. (Added in 7.19.6)
+.SH OTHER OPTIONS
+.IP CURLOPT_PRIVATE
+Pass a void * as parameter, pointing to data that should be associated with
+this curl handle. The pointer can subsequently be retrieved using
+\fIcurl_easy_getinfo(3)\fP with the CURLINFO_PRIVATE option. libcurl itself
+does nothing with this data. (Added in 7.10.3)
+.IP CURLOPT_SHARE
+Pass a share handle as a parameter. The share handle must have been created by
+a previous call to \fIcurl_share_init(3)\fP. Setting this option, will make
+this curl handle use the data from the shared handle instead of keeping the
+data to itself. This enables several curl handles to share data. If the curl
+handles are used simultaneously in multiple threads, you \fBMUST\fP use the
+locking methods in the share handle. See \fIcurl_share_setopt(3)\fP for
+details.
+
+If you add a share that is set to share cookies, your easy handle will use
+that cookie cache and get the cookie engine enabled. If you unshare an object
+that was using cookies (or change to another object that doesn't share
+cookies), the easy handle will get its cookie engine disabled.
+
+Data that the share object is not set to share will be dealt with the usual
+way, as if no share was used.
+.IP CURLOPT_NEW_FILE_PERMS
+Pass a long as a parameter, containing the value of the permissions that will
+be assigned to newly created files on the remote server. The default value is
+\fI0644\fP, but any valid value can be used. The only protocols that can use
+this are \fIsftp://\fP, \fIscp://\fP, and \fIfile://\fP. (Added in 7.16.4)
+.IP CURLOPT_NEW_DIRECTORY_PERMS
+Pass a long as a parameter, containing the value of the permissions that will
+be assigned to newly created directories on the remote server. The default
+value is \fI0755\fP, but any valid value can be used. The only protocols that
+can use this are \fIsftp://\fP, \fIscp://\fP, and \fIfile://\fP.
+(Added in 7.16.4)
+.SH TELNET OPTIONS
+.IP CURLOPT_TELNETOPTIONS
+Provide a pointer to a curl_slist with variables to pass to the telnet
+negotiations. The variables should be in the format <option=value>. libcurl
+supports the options 'TTYPE', 'XDISPLOC' and 'NEW_ENV'. See the TELNET
+standard for details.
+.SH RETURN VALUE
+CURLE_OK (zero) means that the option was set properly, non-zero means an
+error occurred as \fI<curl/curl.h>\fP defines. See the \fIlibcurl-errors(3)\fP
+man page for the full list with descriptions.
+
+If you try to set an option that libcurl doesn't know about, perhaps because
+the library is too old to support it or the option was removed in a recent
+version, this function will return \fICURLE_FAILED_INIT\fP.
+.SH "SEE ALSO"
+.BR curl_easy_init "(3), " curl_easy_cleanup "(3), " curl_easy_reset "(3)"
diff --git a/docs/libcurl/curl_easy_setopt.html b/docs/libcurl/curl_easy_setopt.html
new file mode 100644
index 0000000..6b49b96
--- /dev/null
+++ b/docs/libcurl/curl_easy_setopt.html
@@ -0,0 +1,797 @@
+<html><head>
+<title>curl_easy_setopt man page</title>
+<meta name="generator" content="roffit 0.7">
+<STYLE type="text/css">
+P.level0 {
+ padding-left: 2em;
+}
+
+P.level1 {
+ padding-left: 4em;
+}
+
+P.level2 {
+ padding-left: 6em;
+}
+
+span.emphasis {
+ font-style: italic;
+}
+
+span.bold {
+ font-weight: bold;
+}
+
+span.manpage {
+ font-weight: bold;
+}
+
+h2.nroffsh {
+ background-color: #e0e0e0;
+}
+
+span.nroffip {
+ font-weight: bold;
+ font-size: 120%;
+ font-family: monospace;
+}
+
+p.roffit {
+ text-align: center;
+ font-size: 80%;
+}
+</STYLE>
+</head><body>
+
+<p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
+<p class="level0">curl_easy_setopt - set options for a curl easy handle <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0">#include &lt;curl/curl.h&gt;
+<p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLoption option, parameter); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">curl_easy_setopt() is used to tell libcurl how to behave. By using the appropriate options to <span Class="emphasis">curl_easy_setopt</span>, you can change libcurl's behavior. All options are set with the <span Class="emphasis">option</span> followed by a <span Class="emphasis">parameter</span>. That parameter can be a <span Class="bold">long</span>, a <span Class="bold">function pointer</span>, an <span Class="bold">object pointer</span> or a <span Class="bold">curl_off_t</span>, depending on what the specific option expects. Read this manual carefully as bad input values may cause libcurl to behave badly! You can only set one option in each function call. A typical application uses many curl_easy_setopt() calls in the setup phase.
+<p class="level0">Options set with this function call are valid for all forthcoming transfers performed using this <span Class="emphasis">handle</span>. The options are not in any way reset between transfers, so if you want subsequent transfers with different options, you must change them between the transfers. You can optionally reset all options back to internal default with <a class="emphasis" href="./curl_easy_reset.html">curl_easy_reset(3)</a>.
+<p class="level0">Strings passed to libcurl as 'char *' arguments, are copied by the library; thus the string storage associated to the pointer argument may be overwritten after curl_easy_setopt() returns. Exceptions to this rule are described in the option details below.
+<p class="level0">Before version 7.17.0, strings were not copied. Instead the user was forced keep them available until libcurl no longer needed them.
+<p class="level0">The <span Class="emphasis">handle</span> is the return code from a <a class="emphasis" href="./curl_easy_init.html">curl_easy_init(3)</a> or <a class="emphasis" href="./curl_easy_duphandle.html">curl_easy_duphandle(3)</a> call. <a name="BEHAVIOR"></a><h2 class="nroffsh">BEHAVIOR OPTIONS</h2>
+<p class="level0">
+<p class="level0"><a name="CURLOPTVERBOSE"></a><span class="nroffip">CURLOPT_VERBOSE</span>
+<p class="level1">Set the parameter to 1 to get the library to display a lot of verbose information about its operations. Very useful for libcurl and/or protocol debugging and understanding. The verbose information will be sent to stderr, or the stream set with <a class="emphasis" href="#CURLOPTSTDERR">CURLOPT_STDERR</a>.
+<p class="level1">You hardly ever want this set in production use, you will almost always want this when you debug/report problems. Another neat option for debugging is the <a class="emphasis" href="#CURLOPTDEBUGFUNCTION">CURLOPT_DEBUGFUNCTION</a>.
+<p class="level0"><a name="CURLOPTHEADER"></a><span class="nroffip">CURLOPT_HEADER</span>
+<p class="level1">A parameter set to 1 tells the library to include the header in the body output. This is only relevant for protocols that actually have headers preceding the data (like HTTP).
+<p class="level0"><a name="CURLOPTNOPROGRESS"></a><span class="nroffip">CURLOPT_NOPROGRESS</span>
+<p class="level1">A parameter set to 1 tells the library to shut off the built-in progress meter completely.
+<p class="level1">Future versions of libcurl are likely to not have any built-in progress meter at all.
+<p class="level0"><a name="CURLOPTNOSIGNAL"></a><span class="nroffip">CURLOPT_NOSIGNAL</span>
+<p class="level1">Pass a long. If it is 1, libcurl will not use any functions that install signal handlers or any functions that cause signals to be sent to the process. This option is mainly here to allow multi-threaded unix applications to still set/use all timeout options etc, without risking getting signals. (Added in 7.10)
+<p class="level1">If this option is set and libcurl has been built with the standard name resolver, timeouts will not occur while the name resolve takes place. Consider building libcurl with c-ares support to enable asynchronous DNS lookups, which enables nice timeouts for name resolves without signals.
+<p class="level0"><a name="CURLOPTWILDCARDMATCH"></a><span class="nroffip">CURLOPT_WILDCARDMATCH</span>
+<p class="level1">Set this option to 1 if you want to transfer multiple files according to a file name pattern. The pattern can be specified as part of the <a class="emphasis" href="#CURLOPTURL">CURLOPT_URL</a> option, using an fnmatch-like pattern (Shell Pattern Matching) in the last part of URL (file name).
+<p class="level1">By default, libcurl uses its internal wildcard matching implementation. You can provide your own matching function by the <a class="emphasis" href="#CURLOPTFNMATCHFUNCTION">CURLOPT_FNMATCH_FUNCTION</a> option.
+<p class="level1">This feature is only supported by the FTP download for now.
+<p class="level1">A brief introduction of its syntax follows:
+<p class="level2">
+<p class="level1"><a name="fBfP"></a><span class="nroffip">\fB*\fP - ASTERISK</span>
+<p class="level2"><a href="ftp://example.com/some/path/">ftp://example.com/some/path/</a><span Class="bold">*.txt</span> (for all txt's from the root directory)
+<p class="level1">
+<p class="level2">
+<p class="level1"><a name="fBfP"></a><span class="nroffip">\fB?\fP - QUESTION MARK</span>
+<p class="level2">Question mark matches any (exactly one) character.
+<p class="level2"><a href="ftp://example.com/some/path/">ftp://example.com/some/path/</a><span Class="bold">photo?.jpeg</span>
+<p class="level1">
+<p class="level2">
+<p class="level1"><a name="fBfP"></a><span class="nroffip">\fB[\fP - BRACKET EXPRESSION</span>
+<p class="level2">The left bracket opens a bracket expression. The question mark and asterisk have no special meaning in a bracket expression. Each bracket expression ends by the right bracket and matches exactly one character. Some examples follow:
+<p class="level2"><span Class="bold">[a-zA-Z0-9]</span> or <span Class="bold">[f-gF-G]</span> - character interval
+<p class="level2"><span Class="bold">[abc]</span> - character enumeration
+<p class="level2"><span Class="bold">[^abc]</span> or <span Class="bold">[!abc]</span> - negation
+<p class="level2"><span Class="bold">[[:</span><span Class="emphasis">name</span><span Class="bold">:]]</span> class expression. Supported classes are <span Class="bold">alnum</span>,<span Class="bold">lower</span>, <span Class="bold">space</span>, <span Class="bold">alpha</span>, <span Class="bold">digit</span>, <span Class="bold">print</span>, <span Class="bold">upper</span>, <span Class="bold">blank</span>, <span Class="bold">graph</span>, <span Class="bold">xdigit</span>.
+<p class="level2"><span Class="bold">[][-!^]</span> - special case - matches only '-', ']', '[', '!' or '^'. These characters have no special purpose.
+<p class="level2"><span Class="bold">[\[\]\\]</span> - escape syntax. Matches '[', ']' or '&acute;.
+<p class="level2">Using the rules above, a file name pattern can be constructed:
+<p class="level2"><a href="ftp://example.com/some/path/">ftp://example.com/some/path/</a><span Class="bold">[a-z[:upper:]\\].jpeg</span>
+<p class="level1">
+<p class="level1">(This was added in 7.21.0) <a name="CALLBACK"></a><h2 class="nroffsh">CALLBACK OPTIONS</h2>
+<p class="level0">
+<p class="level0"><a name="CURLOPTWRITEFUNCTION"></a><span class="nroffip">CURLOPT_WRITEFUNCTION</span>
+<p class="level1">Function pointer that should match the following prototype: <span class="bold">size_t function( void *ptr, size_t size, size_t nmemb, void *userdata);</span> This function gets called by libcurl as soon as there is data received that needs to be saved. The size of the data pointed to by <span Class="emphasis">ptr</span> is <span Class="emphasis">size</span> multiplied with <span Class="emphasis">nmemb</span>, it will not be zero terminated. Return the number of bytes actually taken care of. If that amount differs from the amount passed to your function, it'll signal an error to the library. This will abort the transfer and return <span Class="emphasis">CURLE_WRITE_ERROR</span>.
+<p class="level1">From 7.18.0, the function can return CURL_WRITEFUNC_PAUSE which then will cause writing to this connection to become paused. See <a class="emphasis" href="./curl_easy_pause.html">curl_easy_pause(3)</a> for further details.
+<p class="level1">This function may be called with zero bytes data if the transferred file is empty.
+<p class="level1">Set this option to NULL to get the internal default function. The internal default function will write the data to the FILE * given with <a class="emphasis" href="#CURLOPTWRITEDATA">CURLOPT_WRITEDATA</a>.
+<p class="level1">Set the <span Class="emphasis">userdata</span> argument with the <a class="emphasis" href="#CURLOPTWRITEDATA">CURLOPT_WRITEDATA</a> option.
+<p class="level1">The callback function will be passed as much data as possible in all invokes, but you cannot possibly make any assumptions. It may be one byte, it may be thousands. The maximum amount of data that can be passed to the write callback is defined in the curl.h header file: CURL_MAX_WRITE_SIZE.
+<p class="level0"><a name="CURLOPTWRITEDATA"></a><span class="nroffip">CURLOPT_WRITEDATA</span>
+<p class="level1">Data pointer to pass to the file write function. If you use the <a class="emphasis" href="#CURLOPTWRITEFUNCTION">CURLOPT_WRITEFUNCTION</a> option, this is the pointer you'll get as input. If you don't use a callback, you must pass a 'FILE *' as libcurl will pass this to fwrite() when writing data.
+<p class="level1">The internal <a class="emphasis" href="#CURLOPTWRITEFUNCTION">CURLOPT_WRITEFUNCTION</a> will write the data to the FILE * given with this option, or to stdout if this option hasn't been set.
+<p class="level1">If you're using libcurl as a win32 DLL, you <span Class="bold">MUST</span> use the <a class="emphasis" href="#CURLOPTWRITEFUNCTION">CURLOPT_WRITEFUNCTION</a> if you set this option or you will experience crashes.
+<p class="level1">This option is also known with the older name <span Class="emphasis">CURLOPT_FILE</span>, the name <a class="emphasis" href="#CURLOPTWRITEDATA">CURLOPT_WRITEDATA</a> was introduced in 7.9.7.
+<p class="level0"><a name="CURLOPTREADFUNCTION"></a><span class="nroffip">CURLOPT_READFUNCTION</span>
+<p class="level1">Function pointer that should match the following prototype: <span class="bold">size_t function( void *ptr, size_t size, size_t nmemb, void *userdata);</span> This function gets called by libcurl as soon as it needs to read data in order to send it to the peer. The data area pointed at by the pointer <span Class="emphasis">ptr</span> may be filled with at most <span Class="emphasis">size</span> multiplied with <span Class="emphasis">nmemb</span> number of bytes. Your function must return the actual number of bytes that you stored in that memory area. Returning 0 will signal end-of-file to the library and cause it to stop the current transfer.
+<p class="level1">If you stop the current transfer by returning 0 "pre-maturely" (i.e before the server expected it, like when you've said you will upload N bytes and you upload less than N bytes), you may experience that the server "hangs" waiting for the rest of the data that won't come.
+<p class="level1">The read callback may return <span Class="emphasis">CURL_READFUNC_ABORT</span> to stop the current operation immediately, resulting in a <span Class="emphasis">CURLE_ABORTED_BY_CALLBACK</span> error code from the transfer (Added in 7.12.1)
+<p class="level1">From 7.18.0, the function can return CURL_READFUNC_PAUSE which then will cause reading from this connection to become paused. See <a class="emphasis" href="./curl_easy_pause.html">curl_easy_pause(3)</a> for further details.
+<p class="level1">If you set this callback pointer to NULL, or don't set it at all, the default internal read function will be used. It is doing an fread() on the FILE * userdata set with <a class="emphasis" href="#CURLOPTREADDATA">CURLOPT_READDATA</a>.
+<p class="level0"><a name="CURLOPTREADDATA"></a><span class="nroffip">CURLOPT_READDATA</span>
+<p class="level1">Data pointer to pass to the file read function. If you use the <a class="emphasis" href="#CURLOPTREADFUNCTION">CURLOPT_READFUNCTION</a> option, this is the pointer you'll get as input. If you don't specify a read callback but instead rely on the default internal read function, this data must be a valid readable FILE *.
+<p class="level1">If you're using libcurl as a win32 DLL, you MUST use a <a class="emphasis" href="#CURLOPTREADFUNCTION">CURLOPT_READFUNCTION</a> if you set this option.
+<p class="level1">This option was also known by the older name <span Class="emphasis">CURLOPT_INFILE</span>, the name <a class="emphasis" href="#CURLOPTREADDATA">CURLOPT_READDATA</a> was introduced in 7.9.7.
+<p class="level0"><a name="CURLOPTIOCTLFUNCTION"></a><span class="nroffip">CURLOPT_IOCTLFUNCTION</span>
+<p class="level1">Function pointer that should match the <span Class="emphasis">curl_ioctl_callback</span> prototype found in <span Class="emphasis">&lt;curl/curl.h&gt;</span>. This function gets called by libcurl when something special I/O-related needs to be done that the library can't do by itself. For now, rewinding the read data stream is the only action it can request. The rewinding of the read data stream may be necessary when doing a HTTP PUT or POST with a multi-pass authentication method. (Option added in 7.12.3).
+<p class="level1">Use <a class="emphasis" href="#CURLOPTSEEKFUNCTION">CURLOPT_SEEKFUNCTION</a> instead to provide seeking!
+<p class="level0"><a name="CURLOPTIOCTLDATA"></a><span class="nroffip">CURLOPT_IOCTLDATA</span>
+<p class="level1">Pass a pointer that will be untouched by libcurl and passed as the 3rd argument in the ioctl callback set with <a class="emphasis" href="#CURLOPTIOCTLFUNCTION">CURLOPT_IOCTLFUNCTION</a>. (Option added in 7.12.3)
+<p class="level0"><a name="CURLOPTSEEKFUNCTION"></a><span class="nroffip">CURLOPT_SEEKFUNCTION</span>
+<p class="level1">Function pointer that should match the following prototype: <span class="emphasis">int function(void *instream, curl_off_t offset, int origin);</span> This function gets called by libcurl to seek to a certain position in the input stream and can be used to fast forward a file in a resumed upload (instead of reading all uploaded bytes with the normal read function/callback). It is also called to rewind a stream when doing a HTTP PUT or POST with a multi-pass authentication method. The function shall work like "fseek" or "lseek" and accepted SEEK_SET, SEEK_CUR and SEEK_END as argument for origin, although (in 7.18.0) libcurl only passes SEEK_SET. The callback must return 0 (CURL_SEEKFUNC_OK) on success, 1 (CURL_SEEKFUNC_FAIL) to cause the upload operation to fail or 2 (CURL_SEEKFUNC_CANTSEEK) to indicate that while the seek failed, libcurl is free to work around the problem if possible. The latter can sometimes be done by instead reading from the input or similar.
+<p class="level1">If you forward the input arguments directly to "fseek" or "lseek", note that the data type for <span Class="emphasis">offset</span> is not the same as defined for curl_off_t on many systems! (Option added in 7.18.0)
+<p class="level0"><a name="CURLOPTSEEKDATA"></a><span class="nroffip">CURLOPT_SEEKDATA</span>
+<p class="level1">Data pointer to pass to the file read function. If you use the <a class="emphasis" href="#CURLOPTSEEKFUNCTION">CURLOPT_SEEKFUNCTION</a> option, this is the pointer you'll get as input. If you don't specify a seek callback, NULL is passed. (Option added in 7.18.0)
+<p class="level0"><a name="CURLOPTSOCKOPTFUNCTION"></a><span class="nroffip">CURLOPT_SOCKOPTFUNCTION</span>
+<p class="level1">Function pointer that should match the <span Class="emphasis">curl_sockopt_callback</span> prototype found in <span Class="emphasis">&lt;curl/curl.h&gt;</span>. This function gets called by libcurl after the socket() call but before the connect() call. The callback's <span Class="emphasis">purpose</span> argument identifies the exact purpose for this particular socket, and currently only one value is supported: <span Class="emphasis">CURLSOCKTYPE_IPCXN</span> for the primary connection (meaning the control connection in the FTP case). Future versions of libcurl may support more purposes. It passes the newly created socket descriptor so additional setsockopt() calls can be done at the user's discretion. Return 0 (zero) from the callback on success. Return 1 from the callback function to signal an unrecoverable error to the library and it will close the socket and return <span Class="emphasis">CURLE_COULDNT_CONNECT</span>. (Option added in 7.15.6.)
+<p class="level0"><a name="CURLOPTSOCKOPTDATA"></a><span class="nroffip">CURLOPT_SOCKOPTDATA</span>
+<p class="level1">Pass a pointer that will be untouched by libcurl and passed as the first argument in the sockopt callback set with <a class="emphasis" href="#CURLOPTSOCKOPTFUNCTION">CURLOPT_SOCKOPTFUNCTION</a>. (Option added in 7.15.6.)
+<p class="level0"><a name="CURLOPTOPENSOCKETFUNCTION"></a><span class="nroffip">CURLOPT_OPENSOCKETFUNCTION</span>
+<p class="level1">Function pointer that should match the <span Class="emphasis">curl_opensocket_callback</span> prototype found in <span Class="emphasis">&lt;curl/curl.h&gt;</span>. This function gets called by libcurl instead of the <span Class="emphasis">socket(2)</span> call. The callback's <span Class="emphasis">purpose</span> argument identifies the exact purpose for this particular socket, and currently only one value is supported: <span Class="emphasis">CURLSOCKTYPE_IPCXN</span> for the primary connection (meaning the control connection in the FTP case). Future versions of libcurl may support more purposes. It passes the resolved peer address as a <span Class="emphasis">address</span> argument so the callback can modify the address or refuse to connect at all. The callback function should return the socket or <span Class="emphasis">CURL_SOCKET_BAD</span> in case no connection should be established or any error detected. Any additional <span Class="emphasis">setsockopt(2)</span> calls can be done on the socket at the user's discretion. <span Class="emphasis">CURL_SOCKET_BAD</span> return value from the callback function will signal an unrecoverable error to the library and it will return <span Class="emphasis">CURLE_COULDNT_CONNECT</span>. This return code can be used for IP address blacklisting. The default behavior is: <pre>
+<p class="level1">&nbsp; return socket(addr-&gt;family, addr-&gt;socktype, addr-&gt;protocol);
+ </pre>
+
+<p class="level1">(Option added in 7.17.1.)
+<p class="level0"><a name="CURLOPTOPENSOCKETDATA"></a><span class="nroffip">CURLOPT_OPENSOCKETDATA</span>
+<p class="level1">Pass a pointer that will be untouched by libcurl and passed as the first argument in the opensocket callback set with <a class="emphasis" href="#CURLOPTOPENSOCKETFUNCTION">CURLOPT_OPENSOCKETFUNCTION</a>. (Option added in 7.17.1.)
+<p class="level0"><a name="CURLOPTPROGRESSFUNCTION"></a><span class="nroffip">CURLOPT_PROGRESSFUNCTION</span>
+<p class="level1">Function pointer that should match the <span Class="emphasis">curl_progress_callback</span> prototype found in <span Class="emphasis">&lt;curl/curl.h&gt;</span>. This function gets called by libcurl instead of its internal equivalent with a frequent interval during operation (roughly once per second or sooner) no matter if data is being transfered or not. Unknown/unused argument values passed to the callback will be set to zero (like if you only download data, the upload size will remain 0). Returning a non-zero value from this callback will cause libcurl to abort the transfer and return <span Class="emphasis">CURLE_ABORTED_BY_CALLBACK</span>.
+<p class="level1">If you transfer data with the multi interface, this function will not be called during periods of idleness unless you call the appropriate libcurl function that performs transfers.
+<p class="level1"><a class="emphasis" href="#CURLOPTNOPROGRESS">CURLOPT_NOPROGRESS</a> must be set to 0 to make this function actually get called.
+<p class="level0"><a name="CURLOPTPROGRESSDATA"></a><span class="nroffip">CURLOPT_PROGRESSDATA</span>
+<p class="level1">Pass a pointer that will be untouched by libcurl and passed as the first argument in the progress callback set with <a class="emphasis" href="#CURLOPTPROGRESSFUNCTION">CURLOPT_PROGRESSFUNCTION</a>.
+<p class="level0"><a name="CURLOPTHEADERFUNCTION"></a><span class="nroffip">CURLOPT_HEADERFUNCTION</span>
+<p class="level1">Function pointer that should match the following prototype: <span class="emphasis">size_t function( void *ptr, size_t size, size_t nmemb, void *userdata);</span>. This function gets called by libcurl as soon as it has received header data. The header callback will be called once for each header and only complete header lines are passed on to the callback. Parsing headers should be easy enough using this. The size of the data pointed to by <span Class="emphasis">ptr</span> is <span Class="emphasis">size</span> multiplied with <span Class="emphasis">nmemb</span>. Do not assume that the header line is zero terminated! The pointer named <span Class="emphasis">userdata</span> is the one you set with the <a class="emphasis" href="#CURLOPTWRITEHEADER">CURLOPT_WRITEHEADER</a> option. The callback function must return the number of bytes actually taken care of. If that amount differs from the amount passed to your function, it'll signal an error to the library. This will abort the transfer and return <span Class="emphasis">CURL_WRITE_ERROR</span>.
+<p class="level1">If this option is not set, or if it is set to NULL, but <span Class="emphasis">CURLOPT_HEADERDATA</span> (<a class="emphasis" href="#CURLOPTWRITEHEADER">CURLOPT_WRITEHEADER</a>) is set to anything but NULL, the function used to accept response data will be used instead. That is, it will be the function specified with <a class="emphasis" href="#CURLOPTWRITEFUNCTION">CURLOPT_WRITEFUNCTION</a>, or if it is not specified or NULL - the default, stream-writing function.
+<p class="level1">It's important to note that the callback will be invoked for the headers of all responses received after initiating a request and not just the final response. This includes all responses which occur during authentication negotiation. If you need to operate on only the headers from the final response, you will need to collect headers in the callback yourself and use HTTP status lines, for example, to delimit response boundaries.
+<p class="level1">Since 7.14.1: When a server sends a chunked encoded transfer, it may contain a trailer. That trailer is identical to a HTTP header and if such a trailer is received it is passed to the application using this callback as well. There are several ways to detect it being a trailer and not an ordinary header: 1) it comes after the response-body. 2) it comes after the final header line (CR LF) 3) a Trailer: header among the response-headers mention what header to expect in the trailer.
+<p class="level0"><a name="CURLOPTWRITEHEADER"></a><span class="nroffip">CURLOPT_WRITEHEADER</span>
+<p class="level1">(This option is also known as <span Class="bold">CURLOPT_HEADERDATA</span>) Pass a pointer to be used to write the header part of the received data to. If you don't use your own callback to take care of the writing, this must be a valid FILE *. See also the <a class="emphasis" href="#CURLOPTHEADERFUNCTION">CURLOPT_HEADERFUNCTION</a> option above on how to set a custom get-all-headers callback.
+<p class="level0"><a name="CURLOPTDEBUGFUNCTION"></a><span class="nroffip">CURLOPT_DEBUGFUNCTION</span>
+<p class="level1">Function pointer that should match the following prototype: <span class="emphasis">int curl_debug_callback (CURL *, curl_infotype, char *, size_t, void *);</span> <a class="emphasis" href="#CURLOPTDEBUGFUNCTION">CURLOPT_DEBUGFUNCTION</a> replaces the standard debug function used when <a class="emphasis" href="#CURLOPTVERBOSE">CURLOPT_VERBOSE </a> is in effect. This callback receives debug information, as specified with the <span Class="bold">curl_infotype</span> argument. This function must return 0. The data pointed to by the char * passed to this function WILL NOT be zero terminated, but will be exactly of the size as told by the size_t argument.
+<p class="level1">Available curl_infotype values:
+<p class="level2">
+<p class="level1"><a name="CURLINFOTEXT"></a><span class="nroffip">CURLINFO_TEXT</span>
+<p class="level2">The data is informational text.
+<p class="level1"><a name="CURLINFOHEADERIN"></a><span class="nroffip">CURLINFO_HEADER_IN</span>
+<p class="level2">The data is header (or header-like) data received from the peer.
+<p class="level1"><a name="CURLINFOHEADEROUT"></a><span class="nroffip">CURLINFO_HEADER_OUT</span>
+<p class="level2">The data is header (or header-like) data sent to the peer.
+<p class="level1"><a name="CURLINFODATAIN"></a><span class="nroffip">CURLINFO_DATA_IN</span>
+<p class="level2">The data is protocol data received from the peer.
+<p class="level1"><a name="CURLINFODATAOUT"></a><span class="nroffip">CURLINFO_DATA_OUT</span>
+<p class="level2">The data is protocol data sent to the peer.
+<p class="level1">
+<p class="level0"><a name="CURLOPTDEBUGDATA"></a><span class="nroffip">CURLOPT_DEBUGDATA</span>
+<p class="level1">Pass a pointer to whatever you want passed in to your <a class="emphasis" href="#CURLOPTDEBUGFUNCTION">CURLOPT_DEBUGFUNCTION</a> in the last void * argument. This pointer is not used by libcurl, it is only passed to the callback.
+<p class="level0"><a name="CURLOPTSSLCTXFUNCTION"></a><span class="nroffip">CURLOPT_SSL_CTX_FUNCTION</span>
+<p class="level1">This option does only function for libcurl powered by OpenSSL. If libcurl was built against another SSL library, this functionality is absent.
+<p class="level1">Function pointer that should match the following prototype: <span class="bold">CURLcode sslctxfun(CURL *curl, void *sslctx, void *parm);</span> This function gets called by libcurl just before the initialization of an SSL connection after having processed all other SSL related options to give a last chance to an application to modify the behaviour of openssl's ssl initialization. The <span Class="emphasis">sslctx</span> parameter is actually a pointer to an openssl <span Class="emphasis">SSL_CTX</span>. If an error is returned no attempt to establish a connection is made and the perform operation will return the error code from this callback function. Set the <span Class="emphasis">parm</span> argument with the <a class="emphasis" href="#CURLOPTSSLCTXDATA">CURLOPT_SSL_CTX_DATA</a> option. This option was introduced in 7.11.0.
+<p class="level1">This function will get called on all new connections made to a server, during the SSL negotiation. The SSL_CTX pointer will be a new one every time.
+<p class="level1">To use this properly, a non-trivial amount of knowledge of the openssl libraries is necessary. For example, using this function allows you to use openssl callbacks to add additional validation code for certificates, and even to change the actual URI of an HTTPS request (example used in the lib509 test case). See also the example section for a replacement of the key, certificate and trust file settings.
+<p class="level0"><a name="CURLOPTSSLCTXDATA"></a><span class="nroffip">CURLOPT_SSL_CTX_DATA</span>
+<p class="level1">Data pointer to pass to the ssl context callback set by the option <a class="emphasis" href="#CURLOPTSSLCTXFUNCTION">CURLOPT_SSL_CTX_FUNCTION</a>, this is the pointer you'll get as third parameter, otherwise <span Class="bold">NULL</span>. (Added in 7.11.0)
+<p class="level0"><a name="CURLOPTCONVTONETWORKFUNCTION"></a><span class="nroffip">CURLOPT_CONV_TO_NETWORK_FUNCTION</span>
+<p class="level1">
+<p class="level0"><a name="CURLOPTCONVFROMNETWORKFUNCTION"></a><span class="nroffip">CURLOPT_CONV_FROM_NETWORK_FUNCTION</span>
+<p class="level1">
+<p class="level0"><a name="CURLOPTCONVFROMUTF8FUNCTION"></a><span class="nroffip">CURLOPT_CONV_FROM_UTF8_FUNCTION</span>
+<p class="level1">Function pointers that should match the following prototype: CURLcode function(char *ptr, size_t length);
+<p class="level1">These three options apply to non-ASCII platforms only. They are available only if <span Class="bold">CURL_DOES_CONVERSIONS</span> was defined when libcurl was built. When this is the case, <a class="emphasis" href="./curl_version_info.html">curl_version_info(3)</a> will return the CURL_VERSION_CONV feature bit set.
+<p class="level1">The data to be converted is in a buffer pointed to by the ptr parameter. The amount of data to convert is indicated by the length parameter. The converted data overlays the input data in the buffer pointed to by the ptr parameter. CURLE_OK should be returned upon successful conversion. A CURLcode return value defined by curl.h, such as CURLE_CONV_FAILED, should be returned if an error was encountered.
+<p class="level1"><a class="bold" href="#CURLOPTCONVTONETWORKFUNCTION">CURLOPT_CONV_TO_NETWORK_FUNCTION</a> and <a class="bold" href="#CURLOPTCONVFROMNETWORKFUNCTION">CURLOPT_CONV_FROM_NETWORK_FUNCTION</a> convert between the host encoding and the network encoding. They are used when commands or ASCII data are sent/received over the network.
+<p class="level1"><a class="bold" href="#CURLOPTCONVFROMUTF8FUNCTION">CURLOPT_CONV_FROM_UTF8_FUNCTION</a> is called to convert from UTF8 into the host encoding. It is required only for SSL processing.
+<p class="level1">If you set a callback pointer to NULL, or don't set it at all, the built-in libcurl iconv functions will be used. If HAVE_ICONV was not defined when libcurl was built, and no callback has been established, conversion will return the CURLE_CONV_REQD error code.
+<p class="level1">If HAVE_ICONV is defined, CURL_ICONV_CODESET_OF_HOST must also be defined. For example:
+<p class="level1">&nbsp;#define CURL_ICONV_CODESET_OF_HOST "IBM-1047"
+<p class="level1">The iconv code in libcurl will default the network and UTF8 codeset names as follows:
+<p class="level1">&nbsp;#define CURL_ICONV_CODESET_OF_NETWORK "ISO8859-1"
+<p class="level1">&nbsp;#define CURL_ICONV_CODESET_FOR_UTF8 "UTF-8"
+<p class="level1">You will need to override these definitions if they are different on your system.
+<p class="level0"><a name="CURLOPTINTERLEAVEFUNCTION"></a><span class="nroffip">CURLOPT_INTERLEAVEFUNCTION</span>
+<p class="level1">Function pointer that should match the following prototype: <span class="emphasis">size_t function( void *ptr, size_t size, size_t nmemb, void *userdata)</span>. This function gets called by libcurl as soon as it has received interleaved RTP data. This function gets called for each $ block and therefore contains exactly one upper-layer protocol unit (e.g. one RTP packet). Curl writes the interleaved header as well as the included data for each call. The first byte is always an ASCII dollar sign. The dollar sign is followed by a one byte channel identifier and then a 2 byte integer length in network byte order. See <span Class="emphasis">RFC 2326 Section 10.12</span> for more information on how RTP interleaving behaves. If unset or set to NULL, curl will use the default write function.
+<p class="level1">Interleaved RTP poses some challeneges for the client application. Since the stream data is sharing the RTSP control connection, it is critical to service the RTP in a timely fashion. If the RTP data is not handled quickly, subsequent response processing may become unreasonably delayed and the connection may close. The application may use <a class="emphasis" href="#CURLRTSPREQRECEIVE">CURL_RTSPREQ_RECEIVE</a> to service RTP data when no requests are desired. If the application makes a request, (e.g. <a class="emphasis" href="#CURLRTSPREQPAUSE">CURL_RTSPREQ_PAUSE</a>) then the response handler will process any pending RTP data before marking the request as finished. (Added in 7.20.0)
+<p class="level0"><a name="CURLOPTINTERLEAVEDATA"></a><span class="nroffip">CURLOPT_INTERLEAVEDATA</span>
+<p class="level1">This is the userdata pointer that will be passed to <a class="emphasis" href="#CURLOPTINTERLEAVEFUNCTION">CURLOPT_INTERLEAVEFUNCTION</a> when interleaved RTP data is received. (Added in 7.20.0)
+<p class="level0"><a name="CURLOPTCHUNKBGNFUNCTION"></a><span class="nroffip">CURLOPT_CHUNK_BGN_FUNCTION</span>
+<p class="level1">Function pointer that should match the following prototype: <span class="bold">long function (const void *transfer_info, void *ptr, int remains)</span>. This function gets called by libcurl before a part of the stream is going to be transferred (if the transfer supports chunks).
+<p class="level1">This callback makes sense only when using the <a class="emphasis" href="#CURLOPTWILDCARDMATCH">CURLOPT_WILDCARDMATCH</a> option for now.
+<p class="level1">The target of transfer_info parameter is a "feature depended" structure. For the FTP wildcard download, the target is curl_fileinfo structure (see <span Class="emphasis">curl/curl.h</span>). The parameter ptr is a pointer given by <a class="emphasis" href="#CURLOPTCHUNKDATA">CURLOPT_CHUNK_DATA</a>. The parameter remains contains number of chunks remaining per the transfer. If the feature is not available, the parameter has zero value.
+<p class="level1">Return <span Class="emphasis">CURL_CHUNK_BGN_FUNC_OK</span> if everything is fine, <span Class="emphasis">CURL_CHUNK_BGN_FUNC_SKIP</span> if you want to skip the concrete chunk or <span Class="emphasis">CURL_CHUNK_BGN_FUNC_FAIL</span> to tell libcurl to stop if some error occurred. (This was added in 7.21.0)
+<p class="level0"><a name="CURLOPTCHUNKENDFUNCTION"></a><span class="nroffip">CURLOPT_CHUNK_END_FUNCTION</span>
+<p class="level1">Function pointer that should match the following prototype: <span class="bold">long function(void *ptr)</span>. This function gets called by libcurl as soon as a part of the stream has been transferred (or skipped).
+<p class="level1">Return <span Class="emphasis">CURL_CHUNK_END_FUNC_OK</span> if everything is fine or <span Class="bold">CURL_CHUNK_END_FUNC_FAIL</span> to tell the lib to stop if some error occurred. (This was added in 7.21.0)
+<p class="level0"><a name="CURLOPTCHUNKDATA"></a><span class="nroffip">CURLOPT_CHUNK_DATA</span>
+<p class="level1">Pass a pointer that will be untouched by libcurl and passed as the ptr argument to the <span Class="emphasis">CURL_CHUNK_BGN_FUNTION</span> and <span Class="emphasis">CURL_CHUNK_END_FUNTION</span>. (This was added in 7.21.0)
+<p class="level0"><a name="CURLOPTFNMATCHFUNCTION"></a><span class="nroffip">CURLOPT_FNMATCH_FUNCTION</span>
+<p class="level1">Function pointer that should match <span class="bold">int function(void *ptr, const char *pattern, const char *string)</span> prototype (see <span Class="emphasis">curl/curl.h</span>). It is used internally for the wildcard matching feature.
+<p class="level1">Return <span Class="emphasis">CURL_FNMATCHFUNC_MATCH</span> if pattern matches the string, <span Class="emphasis">CURL_FNMATCHFUNC_NOMATCH</span> if not or <span Class="emphasis">CURL_FNMATCHFUNC_FAIL</span> if an error occurred. (This was added in 7.21.0)
+<p class="level0"><a name="CURLOPTFNMATCHDATA"></a><span class="nroffip">CURLOPT_FNMATCH_DATA</span>
+<p class="level1">Pass a pointer that will be untouched by libcurl and passed as the ptr argument to the <span Class="emphasis">CURL_FNMATCH_FUNCTION</span>. (This was added in 7.21.0) <a name="ERROR"></a><h2 class="nroffsh">ERROR OPTIONS</h2>
+<p class="level0">
+<p class="level0"><a name="CURLOPTERRORBUFFER"></a><span class="nroffip">CURLOPT_ERRORBUFFER</span>
+<p class="level1">Pass a char * to a buffer that the libcurl may store human readable error messages in. This may be more helpful than just the return code from <span Class="emphasis">curl_easy_perform</span>. The buffer must be at least CURL_ERROR_SIZE big. Although this argument is a 'char *', it does not describe an input string. Therefore the (probably undefined) contents of the buffer is NOT copied by the library. You should keep the associated storage available until libcurl no longer needs it. Failing to do so will cause very odd behavior or even crashes. libcurl will need it until you call <a class="emphasis" href="./curl_easy_cleanup.html">curl_easy_cleanup(3)</a> or you set the same option again to use a different pointer.
+<p class="level1">Use <a class="emphasis" href="#CURLOPTVERBOSE">CURLOPT_VERBOSE</a> and <a class="emphasis" href="#CURLOPTDEBUGFUNCTION">CURLOPT_DEBUGFUNCTION</a> to better debug/trace why errors happen.
+<p class="level1">If the library does not return an error, the buffer may not have been touched. Do not rely on the contents in those cases.
+<p class="level1">
+<p class="level0"><a name="CURLOPTSTDERR"></a><span class="nroffip">CURLOPT_STDERR</span>
+<p class="level1">Pass a FILE * as parameter. Tell libcurl to use this stream instead of stderr when showing the progress meter and displaying <a class="emphasis" href="#CURLOPTVERBOSE">CURLOPT_VERBOSE</a> data.
+<p class="level0"><a name="CURLOPTFAILONERROR"></a><span class="nroffip">CURLOPT_FAILONERROR</span>
+<p class="level1">A parameter set to 1 tells the library to fail silently if the HTTP code returned is equal to or larger than 400. The default action would be to return the page normally, ignoring that code.
+<p class="level1">This method is not fail-safe and there are occasions where non-successful response codes will slip through, especially when authentication is involved (response codes 401 and 407).
+<p class="level1">You might get some amounts of headers transferred before this situation is detected, like when a "100-continue" is received as a response to a POST/PUT and a 401 or 407 is received immediately afterwards. <a name="NETWORK"></a><h2 class="nroffsh">NETWORK OPTIONS</h2>
+<p class="level0">
+<p class="level0"><a name="CURLOPTURL"></a><span class="nroffip">CURLOPT_URL</span>
+<p class="level1">The actual URL to deal with. The parameter should be a char * to a zero terminated string.
+<p class="level1">If the given URL lacks the protocol part ("http://" or "ftp://" etc), it will attempt to guess which protocol to use based on the given host name. If the given protocol of the set URL is not supported, libcurl will return on error (<span Class="emphasis">CURLE_UNSUPPORTED_PROTOCOL</span>) when you call <a class="emphasis" href="./curl_easy_perform.html">curl_easy_perform(3)</a> or <a class="emphasis" href="./curl_multi_perform.html">curl_multi_perform(3)</a>. Use <a class="emphasis" href="./curl_version_info.html">curl_version_info(3)</a> for detailed info on which protocols are supported.
+<p class="level1">The string given to CURLOPT_URL must be url-encoded and follow RFC 2396 (<a href="http://curl.haxx.se/rfc/rfc2396.txt">http://curl.haxx.se/rfc/rfc2396.txt</a>).
+<p class="level1">Starting with version 7.20.0, the fragment part of the URI will not be send as part of the path, which was the case previously.
+<p class="level1"><a class="emphasis" href="#CURLOPTURL">CURLOPT_URL</a> is the only option that <span Class="bold">must</span> be set before <a class="emphasis" href="./curl_easy_perform.html">curl_easy_perform(3)</a> is called.
+<p class="level1"><a class="emphasis" href="#CURLOPTPROTOCOLS">CURLOPT_PROTOCOLS</a> can be used to limit what protocols libcurl will use for this transfer, independent of what libcurl has been compiled to support. That may be useful if you accept the URL from an external source and want to limit the accessibility.
+<p class="level0"><a name="CURLOPTPROTOCOLS"></a><span class="nroffip">CURLOPT_PROTOCOLS</span>
+<p class="level1">Pass a long that holds a bitmask of CURLPROTO_* defines. If used, this bitmask limits what protocols libcurl may use in the transfer. This allows you to have a libcurl built to support a wide range of protocols but still limit specific transfers to only be allowed to use a subset of them. By default libcurl will accept all protocols it supports. See also <a class="emphasis" href="#CURLOPTREDIRPROTOCOLS">CURLOPT_REDIR_PROTOCOLS</a>. (Added in 7.19.4)
+<p class="level0"><a name="CURLOPTREDIRPROTOCOLS"></a><span class="nroffip">CURLOPT_REDIR_PROTOCOLS</span>
+<p class="level1">Pass a long that holds a bitmask of CURLPROTO_* defines. If used, this bitmask limits what protocols libcurl may use in a transfer that it follows to in a redirect when <a class="emphasis" href="#CURLOPTFOLLOWLOCATION">CURLOPT_FOLLOWLOCATION</a> is enabled. This allows you to limit specific transfers to only be allowed to use a subset of protocols in redirections. By default libcurl will allow all protocols except for FILE and SCP. This is a difference compared to pre-7.19.4 versions which unconditionally would follow to all protocols supported. (Added in 7.19.4)
+<p class="level0"><a name="CURLOPTPROXY"></a><span class="nroffip">CURLOPT_PROXY</span>
+<p class="level1">Set HTTP proxy to use. The parameter should be a char * to a zero terminated string holding the host name or dotted IP address. To specify port number in this string, append :[port] to the end of the host name. The proxy string may be prefixed with [protocol]:// since any such prefix will be ignored. The proxy's port number may optionally be specified with the separate option. If not specified, libcurl will default to using port 1080 for proxies. <a class="emphasis" href="#CURLOPTPROXYPORT">CURLOPT_PROXYPORT</a>.
+<p class="level1">When you tell the library to use an HTTP proxy, libcurl will transparently convert operations to HTTP even if you specify an FTP URL etc. This may have an impact on what other features of the library you can use, such as <a class="emphasis" href="#CURLOPTQUOTE">CURLOPT_QUOTE</a> and similar FTP specifics that don't work unless you tunnel through the HTTP proxy. Such tunneling is activated with <a class="emphasis" href="#CURLOPTHTTPPROXYTUNNEL">CURLOPT_HTTPPROXYTUNNEL</a>.
+<p class="level1">libcurl respects the environment variables <span Class="bold">http_proxy</span>, <span Class="bold">ftp_proxy</span>, <span Class="bold">all_proxy</span> etc, if any of those are set. The <a class="emphasis" href="#CURLOPTPROXY">CURLOPT_PROXY</a> option does however override any possibly set environment variables.
+<p class="level1">Setting the proxy string to "" (an empty string) will explicitly disable the use of a proxy, even if there is an environment variable set for it.
+<p class="level1">Since 7.14.1, the proxy host string given in environment variables can be specified the exact same way as the proxy can be set with <a class="emphasis" href="#CURLOPTPROXY">CURLOPT_PROXY</a>, include protocol prefix (http://) and embedded user + password.
+<p class="level0"><a name="CURLOPTPROXYPORT"></a><span class="nroffip">CURLOPT_PROXYPORT</span>
+<p class="level1">Pass a long with this option to set the proxy port to connect to unless it is specified in the proxy string <a class="emphasis" href="#CURLOPTPROXY">CURLOPT_PROXY</a>.
+<p class="level0"><a name="CURLOPTPROXYTYPE"></a><span class="nroffip">CURLOPT_PROXYTYPE</span>
+<p class="level1">Pass a long with this option to set type of the proxy. Available options for this are <span Class="emphasis">CURLPROXY_HTTP</span>, <span Class="emphasis">CURLPROXY_HTTP_1_0</span> (added in 7.19.4), <span Class="emphasis">CURLPROXY_SOCKS4</span> (added in 7.15.2), <span Class="emphasis">CURLPROXY_SOCKS5</span>, <span Class="emphasis">CURLPROXY_SOCKS4A</span> (added in 7.18.0) and <span Class="emphasis">CURLPROXY_SOCKS5_HOSTNAME</span> (added in 7.18.0). The HTTP type is default. (Added in 7.10)
+<p class="level0"><a name="CURLOPTNOPROXY"></a><span class="nroffip">CURLOPT_NOPROXY</span>
+<p class="level1">Pass a pointer to a zero terminated string. The should be a comma- separated list of hosts which do not use a proxy, if one is specified. The only wildcard is a single * character, which matches all hosts, and effectively disables the proxy. Each name in this list is matched as either a domain which contains the hostname, or the hostname itself. For example, local.com would match local.com, local.com:80, and www.local.com, but not www.notlocal.com. (Added in 7.19.4)
+<p class="level0"><a name="CURLOPTHTTPPROXYTUNNEL"></a><span class="nroffip">CURLOPT_HTTPPROXYTUNNEL</span>
+<p class="level1">Set the parameter to 1 to make the library tunnel all operations through a given HTTP proxy. There is a big difference between using a proxy and to tunnel through it. If you don't know what this means, you probably don't want this tunneling option.
+<p class="level0"><a name="CURLOPTSOCKS5GSSAPISERVICE"></a><span class="nroffip">CURLOPT_SOCKS5_GSSAPI_SERVICE</span>
+<p class="level1">Pass a char * as parameter to a string holding the name of the service. The default service name for a SOCKS5 server is rcmd/server-fqdn. This option allows you to change it. (Added in 7.19.4)
+<p class="level0"><a name="CURLOPTSOCKS5GSSAPINEC"></a><span class="nroffip">CURLOPT_SOCKS5_GSSAPI_NEC</span>
+<p class="level1">Pass a long set to 1 to enable or 0 to disable. As part of the gssapi negotiation a protection mode is negotiated. The rfc1961 says in section 4.3/4.4 it should be protected, but the NEC reference implementation does not. If enabled, this option allows the unprotected exchange of the protection mode negotiation. (Added in 7.19.4).
+<p class="level0"><a name="CURLOPTINTERFACE"></a><span class="nroffip">CURLOPT_INTERFACE</span>
+<p class="level1">Pass a char * as parameter. This sets the interface name to use as outgoing network interface. The name can be an interface name, an IP address, or a host name.
+<p class="level0"><a name="CURLOPTLOCALPORT"></a><span class="nroffip">CURLOPT_LOCALPORT</span>
+<p class="level1">Pass a long. This sets the local port number of the socket used for connection. This can be used in combination with <a class="emphasis" href="#CURLOPTINTERFACE">CURLOPT_INTERFACE</a> and you are recommended to use <a class="emphasis" href="#CURLOPTLOCALPORTRANGE">CURLOPT_LOCALPORTRANGE</a> as well when this is set. Valid port numbers are 1 - 65535. (Added in 7.15.2)
+<p class="level0"><a name="CURLOPTLOCALPORTRANGE"></a><span class="nroffip">CURLOPT_LOCALPORTRANGE</span>
+<p class="level1">Pass a long. This is the number of attempts libcurl should make to find a working local port number. It starts with the given <a class="emphasis" href="#CURLOPTLOCALPORT">CURLOPT_LOCALPORT</a> and adds one to the number for each retry. Setting this to 1 or below will make libcurl do only one try for the exact port number. Port numbers by nature are scarce resources that will be busy at times so setting this value to something too low might cause unnecessary connection setup failures. (Added in 7.15.2)
+<p class="level0"><a name="CURLOPTDNSCACHETIMEOUT"></a><span class="nroffip">CURLOPT_DNS_CACHE_TIMEOUT</span>
+<p class="level1">Pass a long, this sets the timeout in seconds. Name resolves will be kept in memory for this number of seconds. Set to zero to completely disable caching, or set to -1 to make the cached entries remain forever. By default, libcurl caches this info for 60 seconds.
+<p class="level1">The name resolve functions of various libc implementations don't re-read name server information unless explicitly told so (for example, by calling <span Class="emphasis">res_init(3)</span>). This may cause libcurl to keep using the older server even if DHCP has updated the server info, and this may look like a DNS cache issue to the casual libcurl-app user.
+<p class="level0"><a name="CURLOPTDNSUSEGLOBALCACHE"></a><span class="nroffip">CURLOPT_DNS_USE_GLOBAL_CACHE</span>
+<p class="level1">Pass a long. If the value is 1, it tells curl to use a global DNS cache that will survive between easy handle creations and deletions. This is not thread-safe and this will use a global variable.
+<p class="level1"><span Class="bold">WARNING:</span> this option is considered obsolete. Stop using it. Switch over to using the share interface instead! See <a class="emphasis" href="#CURLOPTSHARE">CURLOPT_SHARE</a> and <a class="emphasis" href="./curl_share_init.html">curl_share_init(3)</a>.
+<p class="level0"><a name="CURLOPTBUFFERSIZE"></a><span class="nroffip">CURLOPT_BUFFERSIZE</span>
+<p class="level1">Pass a long specifying your preferred size (in bytes) for the receive buffer in libcurl. The main point of this would be that the write callback gets called more often and with smaller chunks. This is just treated as a request, not an order. You cannot be guaranteed to actually get the given size. (Added in 7.10)
+<p class="level1">This size is by default set as big as possible (CURL_MAX_WRITE_SIZE), so it only makes sense to use this option if you want it smaller.
+<p class="level0"><a name="CURLOPTPORT"></a><span class="nroffip">CURLOPT_PORT</span>
+<p class="level1">Pass a long specifying what remote port number to connect to, instead of the one specified in the URL or the default port for the used protocol.
+<p class="level0"><a name="CURLOPTTCPNODELAY"></a><span class="nroffip">CURLOPT_TCP_NODELAY</span>
+<p class="level1">Pass a long specifying whether the TCP_NODELAY option should be set or cleared (1 = set, 0 = clear). The option is cleared by default. This will have no effect after the connection has been established.
+<p class="level1">Setting this option will disable TCP's Nagle algorithm. The purpose of this algorithm is to try to minimize the number of small packets on the network (where "small packets" means TCP segments less than the Maximum Segment Size (MSS) for the network).
+<p class="level1">Maximizing the amount of data sent per TCP segment is good because it amortizes the overhead of the send. However, in some cases (most notably telnet or rlogin) small segments may need to be sent without delay. This is less efficient than sending larger amounts of data at a time, and can contribute to congestion on the network if overdone.
+<p class="level0"><a name="CURLOPTADDRESSSCOPE"></a><span class="nroffip">CURLOPT_ADDRESS_SCOPE</span>
+<p class="level1">Pass a long specifying the scope_id value to use when connecting to IPv6 link-local or site-local addresses. (Added in 7.19.0) <a name="NAMES"></a><h2 class="nroffsh">NAMES and PASSWORDS OPTIONS (Authentication)</h2>
+<p class="level0">
+<p class="level0"><a name="CURLOPTNETRC"></a><span class="nroffip">CURLOPT_NETRC</span>
+<p class="level1">This parameter controls the preference of libcurl between using user names and passwords from your <span Class="emphasis">~/.netrc</span> file, relative to user names and passwords in the URL supplied with <a class="emphasis" href="#CURLOPTURL">CURLOPT_URL</a>.
+<p class="level1">libcurl uses a user name (and supplied or prompted password) supplied with <a class="emphasis" href="#CURLOPTUSERPWD">CURLOPT_USERPWD</a> in preference to any of the options controlled by this parameter.
+<p class="level1">Pass a long, set to one of the values described below.
+<p class="level2">
+<p class="level1"><a name="CURLNETRCOPTIONAL"></a><span class="nroffip">CURL_NETRC_OPTIONAL</span>
+<p class="level2">The use of your <span Class="emphasis">~/.netrc</span> file is optional, and information in the URL is to be preferred. The file will be scanned for the host and user name (to find the password only) or for the host only, to find the first user name and password after that <span Class="emphasis">machine</span>, which ever information is not specified in the URL.
+<p class="level2">Undefined values of the option will have this effect.
+<p class="level1"><a name="CURLNETRCIGNORED"></a><span class="nroffip">CURL_NETRC_IGNORED</span>
+<p class="level2">The library will ignore the file and use only the information in the URL.
+<p class="level2">This is the default.
+<p class="level1"><a name="CURLNETRCREQUIRED"></a><span class="nroffip">CURL_NETRC_REQUIRED</span>
+<p class="level2">This value tells the library that use of the file is required, to ignore the information in the URL, and to search the file for the host only.
+<p class="level1">Only machine name, user name and password are taken into account (init macros and similar things aren't supported).
+<p class="level1">libcurl does not verify that the file has the correct properties set (as the standard Unix ftp client does). It should only be readable by user.
+<p class="level0"><a name="CURLOPTNETRCFILE"></a><span class="nroffip">CURLOPT_NETRC_FILE</span>
+<p class="level1">Pass a char * as parameter, pointing to a zero terminated string containing the full path name to the file you want libcurl to use as .netrc file. If this option is omitted, and <a class="emphasis" href="#CURLOPTNETRC">CURLOPT_NETRC</a> is set, libcurl will attempt to find a .netrc file in the current user's home directory. (Added in 7.10.9)
+<p class="level0"><a name="CURLOPTUSERPWD"></a><span class="nroffip">CURLOPT_USERPWD</span>
+<p class="level1">Pass a char * as parameter, which should be [user name]:[password] to use for the connection. Use <a class="emphasis" href="#CURLOPTHTTPAUTH">CURLOPT_HTTPAUTH</a> to decide the authentication method.
+<p class="level1">When using NTLM, you can set the domain by prepending it to the user name and separating the domain and name with a forward (/) or backward slash (\). Like this: "domain/user:password" or "domain\user:password". Some HTTP servers (on Windows) support this style even for Basic authentication.
+<p class="level1">When using HTTP and <a class="emphasis" href="#CURLOPTFOLLOWLOCATION">CURLOPT_FOLLOWLOCATION</a>, libcurl might perform several requests to possibly different hosts. libcurl will only send this user and password information to hosts using the initial host name (unless <a class="emphasis" href="#CURLOPTUNRESTRICTEDAUTH">CURLOPT_UNRESTRICTED_AUTH</a> is set), so if libcurl follows locations to other hosts it will not send the user and password to those. This is enforced to prevent accidental information leakage.
+<p class="level0"><a name="CURLOPTPROXYUSERPWD"></a><span class="nroffip">CURLOPT_PROXYUSERPWD</span>
+<p class="level1">Pass a char * as parameter, which should be [user name]:[password] to use for the connection to the HTTP proxy. Use <a class="emphasis" href="#CURLOPTPROXYAUTH">CURLOPT_PROXYAUTH</a> to decide the authentication method.
+<p class="level0"><a name="CURLOPTUSERNAME"></a><span class="nroffip">CURLOPT_USERNAME</span>
+<p class="level1">Pass a char * as parameter, which should be pointing to the zero terminated user name to use for the transfer.
+<p class="level1"><a class="bold" href="#CURLOPTUSERNAME">CURLOPT_USERNAME</a> sets the user name to be used in protocol authentication. You should not use this option together with the (older) CURLOPT_USERPWD option.
+<p class="level1">In order to specify the password to be used in conjunction with the user name use the <a class="emphasis" href="#CURLOPTPASSWORD">CURLOPT_PASSWORD</a> option. (Added in 7.19.1)
+<p class="level0"><a name="CURLOPTPASSWORD"></a><span class="nroffip">CURLOPT_PASSWORD</span>
+<p class="level1">Pass a char * as parameter, which should be pointing to the zero terminated password to use for the transfer.
+<p class="level1">The CURLOPT_PASSWORD option should be used in conjunction with the <a class="emphasis" href="#CURLOPTUSERNAME">CURLOPT_USERNAME</a> option. (Added in 7.19.1)
+<p class="level0"><a name="CURLOPTPROXYUSERNAME"></a><span class="nroffip">CURLOPT_PROXYUSERNAME</span>
+<p class="level1">Pass a char * as parameter, which should be pointing to the zero terminated user name to use for the transfer while connecting to Proxy.
+<p class="level1">The CURLOPT_PROXYUSERNAME option should be used in same way as the <a class="emphasis" href="#CURLOPTPROXYUSERPWD">CURLOPT_PROXYUSERPWD</a> is used. In comparison to <a class="emphasis" href="#CURLOPTPROXYUSERPWD">CURLOPT_PROXYUSERPWD</a> the CURLOPT_PROXYUSERNAME allows the username to contain a colon, like in the following example: "sip:user@example.com". The CURLOPT_PROXYUSERNAME option is an alternative way to set the user name while connecting to Proxy. There is no meaning to use it together with the <a class="emphasis" href="#CURLOPTPROXYUSERPWD">CURLOPT_PROXYUSERPWD</a> option.
+<p class="level1">In order to specify the password to be used in conjunction with the user name use the <a class="emphasis" href="#CURLOPTPROXYPASSWORD">CURLOPT_PROXYPASSWORD</a> option. (Added in 7.19.1)
+<p class="level0"><a name="CURLOPTPROXYPASSWORD"></a><span class="nroffip">CURLOPT_PROXYPASSWORD</span>
+<p class="level1">Pass a char * as parameter, which should be pointing to the zero terminated password to use for the transfer while connecting to Proxy.
+<p class="level1">The CURLOPT_PROXYPASSWORD option should be used in conjunction with the <a class="emphasis" href="#CURLOPTPROXYUSERNAME">CURLOPT_PROXYUSERNAME</a> option. (Added in 7.19.1)
+<p class="level0"><a name="CURLOPTHTTPAUTH"></a><span class="nroffip">CURLOPT_HTTPAUTH</span>
+<p class="level1">Pass a long as parameter, which is set to a bitmask, to tell libcurl which authentication method(s) you want it to use. The available bits are listed below. If more than one bit is set, libcurl will first query the site to see which authentication methods it supports and then pick the best one you allow it to use. For some methods, this will induce an extra network round-trip. Set the actual name and password with the <a class="emphasis" href="#CURLOPTUSERPWD">CURLOPT_USERPWD</a> option or with the <a class="emphasis" href="#CURLOPTUSERNAME">CURLOPT_USERNAME</a> and the <span Class="emphasis">CURLOPT_USERPASSWORD</span> options. (Added in 7.10.6)
+<p class="level2">
+<p class="level1"><a name="CURLAUTHBASIC"></a><span class="nroffip">CURLAUTH_BASIC</span>
+<p class="level2">HTTP Basic authentication. This is the default choice, and the only method that is in wide-spread use and supported virtually everywhere. This sends the user name and password over the network in plain text, easily captured by others.
+<p class="level1"><a name="CURLAUTHDIGEST"></a><span class="nroffip">CURLAUTH_DIGEST</span>
+<p class="level2">HTTP Digest authentication. Digest authentication is defined in RFC2617 and is a more secure way to do authentication over public networks than the regular old-fashioned Basic method.
+<p class="level1"><a name="CURLAUTHDIGESTIE"></a><span class="nroffip">CURLAUTH_DIGEST_IE</span>
+<p class="level2">HTTP Digest authentication with an IE flavor. Digest authentication is defined in RFC2617 and is a more secure way to do authentication over public networks than the regular old-fashioned Basic method. The IE flavor is simply that libcurl will use a special "quirk" that IE is known to have used before version 7 and that some servers require the client to use. (This define was added in 7.19.3)
+<p class="level1"><a name="CURLAUTHGSSNEGOTIATE"></a><span class="nroffip">CURLAUTH_GSSNEGOTIATE</span>
+<p class="level2">HTTP GSS-Negotiate authentication. The GSS-Negotiate (also known as plain "Negotiate") method was designed by Microsoft and is used in their web applications. It is primarily meant as a support for Kerberos5 authentication but may also be used along with other authentication methods. For more information see IETF draft draft-brezak-spnego-http-04.txt.
+<p class="level2">You need to build libcurl with a suitable GSS-API library for this to work.
+<p class="level1"><a name="CURLAUTHNTLM"></a><span class="nroffip">CURLAUTH_NTLM</span>
+<p class="level2">HTTP NTLM authentication. A proprietary protocol invented and used by Microsoft. It uses a challenge-response and hash concept similar to Digest, to prevent the password from being eavesdropped.
+<p class="level2">You need to build libcurl with OpenSSL support for this option to work, or build libcurl on Windows.
+<p class="level1"><a name="CURLAUTHANY"></a><span class="nroffip">CURLAUTH_ANY</span>
+<p class="level2">This is a convenience macro that sets all bits and thus makes libcurl pick any it finds suitable. libcurl will automatically select the one it finds most secure.
+<p class="level1"><a name="CURLAUTHANYSAFE"></a><span class="nroffip">CURLAUTH_ANYSAFE</span>
+<p class="level2">This is a convenience macro that sets all bits except Basic and thus makes libcurl pick any it finds suitable. libcurl will automatically select the one it finds most secure.
+<p class="level1">
+<p class="level0"><a name="CURLOPTPROXYAUTH"></a><span class="nroffip">CURLOPT_PROXYAUTH</span>
+<p class="level1">Pass a long as parameter, which is set to a bitmask, to tell libcurl which authentication method(s) you want it to use for your proxy authentication. If more than one bit is set, libcurl will first query the site to see what authentication methods it supports and then pick the best one you allow it to use. For some methods, this will induce an extra network round-trip. Set the actual name and password with the <a class="emphasis" href="#CURLOPTPROXYUSERPWD">CURLOPT_PROXYUSERPWD</a> option. The bitmask can be constructed by or'ing together the bits listed above for the <a class="emphasis" href="#CURLOPTHTTPAUTH">CURLOPT_HTTPAUTH</a> option. As of this writing, only Basic, Digest and NTLM work. (Added in 7.10.7) <a name="HTTP"></a><h2 class="nroffsh">HTTP OPTIONS</h2>
+<p class="level0">
+<p class="level0"><a name="CURLOPTAUTOREFERER"></a><span class="nroffip">CURLOPT_AUTOREFERER</span>
+<p class="level1">Pass a parameter set to 1 to enable this. When enabled, libcurl will automatically set the Referer: field in requests where it follows a Location: redirect.
+<p class="level0"><a name="CURLOPTENCODING"></a><span class="nroffip">CURLOPT_ENCODING</span>
+<p class="level1">Sets the contents of the Accept-Encoding: header sent in an HTTP request, and enables decoding of a response when a Content-Encoding: header is received. Three encodings are supported: <span Class="emphasis">identity</span>, which does nothing, <span Class="emphasis">deflate</span> which requests the server to compress its response using the zlib algorithm, and <span Class="emphasis">gzip</span> which requests the gzip algorithm. If a zero-length string is set, then an Accept-Encoding: header containing all supported encodings is sent.
+<p class="level1">This is a request, not an order; the server may or may not do it. This option must be set (to any non-NULL value) or else any unsolicited encoding done by the server is ignored. See the special file lib/README.encoding for details.
+<p class="level0"><a name="CURLOPTFOLLOWLOCATION"></a><span class="nroffip">CURLOPT_FOLLOWLOCATION</span>
+<p class="level1">A parameter set to 1 tells the library to follow any Location: header that the server sends as part of an HTTP header.
+<p class="level1">This means that the library will re-send the same request on the new location and follow new Location: headers all the way until no more such headers are returned. <a class="emphasis" href="#CURLOPTMAXREDIRS">CURLOPT_MAXREDIRS</a> can be used to limit the number of redirects libcurl will follow.
+<p class="level1">Since 7.19.4, libcurl can limit what protocols it will automatically follow. The accepted protocols are set with <a class="emphasis" href="#CURLOPTREDIRPROTOCOLS">CURLOPT_REDIR_PROTOCOLS</a> and it excludes the FILE protocol by default.
+<p class="level0"><a name="CURLOPTUNRESTRICTEDAUTH"></a><span class="nroffip">CURLOPT_UNRESTRICTED_AUTH</span>
+<p class="level1">A parameter set to 1 tells the library it can continue to send authentication (user+password) when following locations, even when hostname changed. This option is meaningful only when setting <a class="emphasis" href="#CURLOPTFOLLOWLOCATION">CURLOPT_FOLLOWLOCATION</a>.
+<p class="level0"><a name="CURLOPTMAXREDIRS"></a><span class="nroffip">CURLOPT_MAXREDIRS</span>
+<p class="level1">Pass a long. The set number will be the redirection limit. If that many redirections have been followed, the next redirect will cause an error (<span Class="emphasis">CURLE_TOO_MANY_REDIRECTS</span>). This option only makes sense if the <a class="emphasis" href="#CURLOPTFOLLOWLOCATION">CURLOPT_FOLLOWLOCATION</a> is used at the same time. Added in 7.15.1: Setting the limit to 0 will make libcurl refuse any redirect. Set it to -1 for an infinite number of redirects (which is the default)
+<p class="level0"><a name="CURLOPTPOSTREDIR"></a><span class="nroffip">CURLOPT_POSTREDIR</span>
+<p class="level1">Pass a bitmask to control how libcurl acts on redirects after POSTs that get a 301 or 302 response back. A parameter with bit 0 set (value <span Class="bold">CURL_REDIR_POST_301</span>) tells the library to respect RFC 2616/10.3.2 and not convert POST requests into GET requests when following a 301 redirection. Setting bit 1 (value CURL_REDIR_POST_302) makes libcurl maintain the request method after a 302 redirect. CURL_REDIR_POST_ALL is a convenience define that sets both bits.
+<p class="level1">The non-RFC behaviour is ubiquitous in web browsers, so the library does the conversion by default to maintain consistency. However, a server may require a POST to remain a POST after such a redirection. This option is meaningful only when setting <a class="emphasis" href="#CURLOPTFOLLOWLOCATION">CURLOPT_FOLLOWLOCATION</a>. (Added in 7.17.1) (This option was known as CURLOPT_POST301 up to 7.19.0 as it only supported the 301 way before then)
+<p class="level0"><a name="CURLOPTPUT"></a><span class="nroffip">CURLOPT_PUT</span>
+<p class="level1">A parameter set to 1 tells the library to use HTTP PUT to transfer data. The data should be set with <a class="emphasis" href="#CURLOPTREADDATA">CURLOPT_READDATA</a> and <a class="emphasis" href="#CURLOPTINFILESIZE">CURLOPT_INFILESIZE</a>.
+<p class="level1">This option is deprecated and starting with version 7.12.1 you should instead use <a class="emphasis" href="#CURLOPTUPLOAD">CURLOPT_UPLOAD</a>.
+<p class="level0"><a name="CURLOPTPOST"></a><span class="nroffip">CURLOPT_POST</span>
+<p class="level1">A parameter set to 1 tells the library to do a regular HTTP post. This will also make the library use a "Content-Type: application/x-www-form-urlencoded" header. (This is by far the most commonly used POST method).
+<p class="level1">Use one of <a class="emphasis" href="#CURLOPTPOSTFIELDS">CURLOPT_POSTFIELDS</a> or <a class="emphasis" href="#CURLOPTCOPYPOSTFIELDS">CURLOPT_COPYPOSTFIELDS</a> options to specify what data to post and <a class="emphasis" href="#CURLOPTPOSTFIELDSIZE">CURLOPT_POSTFIELDSIZE</a> or <a class="emphasis" href="#CURLOPTPOSTFIELDSIZELARGE">CURLOPT_POSTFIELDSIZE_LARGE</a> to set the data size.
+<p class="level1">Optionally, you can provide data to POST using the <a class="emphasis" href="#CURLOPTREADFUNCTION">CURLOPT_READFUNCTION</a> and <a class="emphasis" href="#CURLOPTREADDATA">CURLOPT_READDATA</a> options but then you must make sure to not set <a class="emphasis" href="#CURLOPTPOSTFIELDS">CURLOPT_POSTFIELDS</a> to anything but NULL. When providing data with a callback, you must transmit it using chunked transfer-encoding or you must set the size of the data with the <a class="emphasis" href="#CURLOPTPOSTFIELDSIZE">CURLOPT_POSTFIELDSIZE</a> or <a class="emphasis" href="#CURLOPTPOSTFIELDSIZELARGE">CURLOPT_POSTFIELDSIZE_LARGE</a> option. To enable chunked encoding, you simply pass in the appropriate Transfer-Encoding header, see the post-callback.c example.
+<p class="level1">You can override the default POST Content-Type: header by setting your own with <a class="emphasis" href="#CURLOPTHTTPHEADER">CURLOPT_HTTPHEADER</a>.
+<p class="level1">Using POST with HTTP 1.1 implies the use of a "Expect: 100-continue" header. You can disable this header with <a class="emphasis" href="#CURLOPTHTTPHEADER">CURLOPT_HTTPHEADER</a> as usual.
+<p class="level1">If you use POST to a HTTP 1.1 server, you can send data without knowing the size before starting the POST if you use chunked encoding. You enable this by adding a header like "Transfer-Encoding: chunked" with <a class="emphasis" href="#CURLOPTHTTPHEADER">CURLOPT_HTTPHEADER</a>. With HTTP 1.0 or without chunked transfer, you must specify the size in the request.
+<p class="level1">When setting <a class="emphasis" href="#CURLOPTPOST">CURLOPT_POST</a> to 1, it will automatically set <a class="emphasis" href="#CURLOPTNOBODY">CURLOPT_NOBODY</a> to 0 (since 7.14.1).
+<p class="level1">If you issue a POST request and then want to make a HEAD or GET using the same re-used handle, you must explicitly set the new request type using <a class="emphasis" href="#CURLOPTNOBODY">CURLOPT_NOBODY</a> or <a class="emphasis" href="#CURLOPTHTTPGET">CURLOPT_HTTPGET</a> or similar.
+<p class="level0"><a name="CURLOPTPOSTFIELDS"></a><span class="nroffip">CURLOPT_POSTFIELDS</span>
+<p class="level1">Pass a void * as parameter, which should be the full data to post in an HTTP POST operation. You must make sure that the data is formatted the way you want the server to receive it. libcurl will not convert or encode it for you. Most web servers will assume this data to be url-encoded.
+<p class="level1">The pointed data are NOT copied by the library: as a consequence, they must be preserved by the calling application until the transfer finishes.
+<p class="level1">This POST is a normal application/x-www-form-urlencoded kind (and libcurl will set that Content-Type by default when this option is used), which is the most commonly used one by HTML forms. See also the <a class="emphasis" href="#CURLOPTPOST">CURLOPT_POST</a>. Using <a class="emphasis" href="#CURLOPTPOSTFIELDS">CURLOPT_POSTFIELDS</a> implies <a class="emphasis" href="#CURLOPTPOST">CURLOPT_POST</a>.
+<p class="level1">If you want to do a zero-byte POST, you need to set <a class="emphasis" href="#CURLOPTPOSTFIELDSIZE">CURLOPT_POSTFIELDSIZE</a> explicitly to zero, as simply setting <a class="emphasis" href="#CURLOPTPOSTFIELDS">CURLOPT_POSTFIELDS</a> to NULL or "" just effectively disables the sending of the specified string. libcurl will instead assume that you'll send the POST data using the read callback!
+<p class="level1">Using POST with HTTP 1.1 implies the use of a "Expect: 100-continue" header. You can disable this header with <a class="emphasis" href="#CURLOPTHTTPHEADER">CURLOPT_HTTPHEADER</a> as usual.
+<p class="level1">To make multipart/formdata posts (aka RFC2388-posts), check out the <a class="emphasis" href="#CURLOPTHTTPPOST">CURLOPT_HTTPPOST</a> option.
+<p class="level0"><a name="CURLOPTPOSTFIELDSIZE"></a><span class="nroffip">CURLOPT_POSTFIELDSIZE</span>
+<p class="level1">If you want to post data to the server without letting libcurl do a strlen() to measure the data size, this option must be used. When this option is used you can post fully binary data, which otherwise is likely to fail. If this size is set to -1, the library will use strlen() to get the size.
+<p class="level0"><a name="CURLOPTPOSTFIELDSIZELARGE"></a><span class="nroffip">CURLOPT_POSTFIELDSIZE_LARGE</span>
+<p class="level1">Pass a curl_off_t as parameter. Use this to set the size of the <a class="emphasis" href="#CURLOPTPOSTFIELDS">CURLOPT_POSTFIELDS</a> data to prevent libcurl from doing strlen() on the data to figure out the size. This is the large file version of the <a class="emphasis" href="#CURLOPTPOSTFIELDSIZE">CURLOPT_POSTFIELDSIZE</a> option. (Added in 7.11.1)
+<p class="level0"><a name="CURLOPTCOPYPOSTFIELDS"></a><span class="nroffip">CURLOPT_COPYPOSTFIELDS</span>
+<p class="level1">Pass a char * as parameter, which should be the full data to post in an HTTP POST operation. It behaves as the <a class="emphasis" href="#CURLOPTPOSTFIELDS">CURLOPT_POSTFIELDS</a> option, but the original data are copied by the library, allowing the application to overwrite the original data after setting this option.
+<p class="level1">Because data are copied, care must be taken when using this option in conjunction with <a class="emphasis" href="#CURLOPTPOSTFIELDSIZE">CURLOPT_POSTFIELDSIZE</a> or <a class="emphasis" href="#CURLOPTPOSTFIELDSIZELARGE">CURLOPT_POSTFIELDSIZE_LARGE</a>: If the size has not been set prior to <a class="emphasis" href="#CURLOPTCOPYPOSTFIELDS">CURLOPT_COPYPOSTFIELDS</a>, the data are assumed to be a NUL-terminated string; else the stored size informs the library about the data byte count to copy. In any case, the size must not be changed after <a class="emphasis" href="#CURLOPTCOPYPOSTFIELDS">CURLOPT_COPYPOSTFIELDS</a>, unless another <a class="emphasis" href="#CURLOPTPOSTFIELDS">CURLOPT_POSTFIELDS</a> or <a class="emphasis" href="#CURLOPTCOPYPOSTFIELDS">CURLOPT_COPYPOSTFIELDS</a> option is issued. (Added in 7.17.1)
+<p class="level0"><a name="CURLOPTHTTPPOST"></a><span class="nroffip">CURLOPT_HTTPPOST</span>
+<p class="level1">Tells libcurl you want a multipart/formdata HTTP POST to be made and you instruct what data to pass on to the server. Pass a pointer to a linked list of curl_httppost structs as parameter. The easiest way to create such a list, is to use <a class="emphasis" href="./curl_formadd.html">curl_formadd(3)</a> as documented. The data in this list must remain intact until you close this curl handle again with <a class="emphasis" href="./curl_easy_cleanup.html">curl_easy_cleanup(3)</a>.
+<p class="level1">Using POST with HTTP 1.1 implies the use of a "Expect: 100-continue" header. You can disable this header with <a class="emphasis" href="#CURLOPTHTTPHEADER">CURLOPT_HTTPHEADER</a> as usual.
+<p class="level1">When setting <a class="emphasis" href="#CURLOPTHTTPPOST">CURLOPT_HTTPPOST</a>, it will automatically set <a class="emphasis" href="#CURLOPTNOBODY">CURLOPT_NOBODY</a> to 0 (since 7.14.1).
+<p class="level0"><a name="CURLOPTREFERER"></a><span class="nroffip">CURLOPT_REFERER</span>
+<p class="level1">Pass a pointer to a zero terminated string as parameter. It will be used to set the Referer: header in the http request sent to the remote server. This can be used to fool servers or scripts. You can also set any custom header with <a class="emphasis" href="#CURLOPTHTTPHEADER">CURLOPT_HTTPHEADER</a>.
+<p class="level0"><a name="CURLOPTUSERAGENT"></a><span class="nroffip">CURLOPT_USERAGENT</span>
+<p class="level1">Pass a pointer to a zero terminated string as parameter. It will be used to set the User-Agent: header in the http request sent to the remote server. This can be used to fool servers or scripts. You can also set any custom header with <a class="emphasis" href="#CURLOPTHTTPHEADER">CURLOPT_HTTPHEADER</a>.
+<p class="level0"><a name="CURLOPTHTTPHEADER"></a><span class="nroffip">CURLOPT_HTTPHEADER</span>
+<p class="level1">Pass a pointer to a linked list of HTTP headers to pass to the server in your HTTP request. The linked list should be a fully valid list of <span class="bold">struct curl_slist</span> structs properly filled in. Use <a class="emphasis" href="./curl_slist_append.html">curl_slist_append(3)</a> to create the list and <a class="emphasis" href="./curl_slist_free_all.html">curl_slist_free_all(3)</a> to clean up an entire list. If you add a header that is otherwise generated and used by libcurl internally, your added one will be used instead. If you add a header with no content as in 'Accept:' (no data on the right side of the colon), the internally used header will get disabled. Thus, using this option you can add new headers, replace internal headers and remove internal headers. To add a header with no content, make the content be two quotes: "". The headers included in the linked list must not be CRLF-terminated, because curl adds CRLF after each header item. Failure to comply with this will result in strange bugs because the server will most likely ignore part of the headers you specified.
+<p class="level1">The first line in a request (containing the method, usually a GET or POST) is not a header and cannot be replaced using this option. Only the lines following the request-line are headers. Adding this method line in this list of headers will only cause your request to send an invalid header.
+<p class="level1">Pass a NULL to this to reset back to no custom headers.
+<p class="level1">The most commonly replaced headers have "shortcuts" in the options <a class="emphasis" href="#CURLOPTCOOKIE">CURLOPT_COOKIE</a>, <a class="emphasis" href="#CURLOPTUSERAGENT">CURLOPT_USERAGENT</a> and <a class="emphasis" href="#CURLOPTREFERER">CURLOPT_REFERER</a>.
+<p class="level0"><a name="CURLOPTHTTP200ALIASES"></a><span class="nroffip">CURLOPT_HTTP200ALIASES</span>
+<p class="level1">Pass a pointer to a linked list of aliases to be treated as valid HTTP 200 responses. Some servers respond with a custom header response line. For example, IceCast servers respond with "ICY 200 OK". By including this string in your list of aliases, the response will be treated as a valid HTTP header line such as "HTTP/1.0 200 OK". (Added in 7.10.3)
+<p class="level1">The linked list should be a fully valid list of struct curl_slist structs, and be properly filled in. Use <a class="emphasis" href="./curl_slist_append.html">curl_slist_append(3)</a> to create the list and <a class="emphasis" href="./curl_slist_free_all.html">curl_slist_free_all(3)</a> to clean up an entire list.
+<p class="level1">The alias itself is not parsed for any version strings. Before libcurl 7.16.3, Libcurl used the value set by option <a class="emphasis" href="#CURLOPTHTTPVERSION">CURLOPT_HTTP_VERSION</a>, but starting with 7.16.3 the protocol is assumed to match HTTP 1.0 when an alias matched.
+<p class="level0"><a name="CURLOPTCOOKIE"></a><span class="nroffip">CURLOPT_COOKIE</span>
+<p class="level1">Pass a pointer to a zero terminated string as parameter. It will be used to set a cookie in the http request. The format of the string should be NAME=CONTENTS, where NAME is the cookie name and CONTENTS is what the cookie should contain.
+<p class="level1">If you need to set multiple cookies, you need to set them all using a single option and thus you need to concatenate them all in one single string. Set multiple cookies in one string like this: "name1=content1; name2=content2;" etc.
+<p class="level1">This option sets the cookie header explictly in the outgoing request(s). If multiple requests are done due to authentication, followed redirections or similar, they will all get this cookie passed on.
+<p class="level1">Using this option multiple times will only make the latest string override the previous ones.
+<p class="level0"><a name="CURLOPTCOOKIEFILE"></a><span class="nroffip">CURLOPT_COOKIEFILE</span>
+<p class="level1">Pass a pointer to a zero terminated string as parameter. It should contain the name of your file holding cookie data to read. The cookie data may be in Netscape / Mozilla cookie data format or just regular HTTP-style headers dumped to a file.
+<p class="level1">Given an empty or non-existing file or by passing the empty string (""), this option will enable cookies for this curl handle, making it understand and parse received cookies and then use matching cookies in future requests.
+<p class="level1">If you use this option multiple times, you just add more files to read. Subsequent files will add more cookies.
+<p class="level0"><a name="CURLOPTCOOKIEJAR"></a><span class="nroffip">CURLOPT_COOKIEJAR</span>
+<p class="level1">Pass a file name as char *, zero terminated. This will make libcurl write all internally known cookies to the specified file when <a class="emphasis" href="./curl_easy_cleanup.html">curl_easy_cleanup(3)</a> is called. If no cookies are known, no file will be created. Specify "-" to instead have the cookies written to stdout. Using this option also enables cookies for this session, so if you for example follow a location it will make matching cookies get sent accordingly.
+<p class="level1">If the cookie jar file can't be created or written to (when the <a class="emphasis" href="./curl_easy_cleanup.html">curl_easy_cleanup(3)</a> is called), libcurl will not and cannot report an error for this. Using <a class="emphasis" href="#CURLOPTVERBOSE">CURLOPT_VERBOSE</a> or <a class="emphasis" href="#CURLOPTDEBUGFUNCTION">CURLOPT_DEBUGFUNCTION</a> will get a warning to display, but that is the only visible feedback you get about this possibly lethal situation.
+<p class="level0"><a name="CURLOPTCOOKIESESSION"></a><span class="nroffip">CURLOPT_COOKIESESSION</span>
+<p class="level1">Pass a long set to 1 to mark this as a new cookie "session". It will force libcurl to ignore all cookies it is about to load that are "session cookies" from the previous session. By default, libcurl always stores and loads all cookies, independent if they are session cookies or not. Session cookies are cookies without expiry date and they are meant to be alive and existing for this "session" only.
+<p class="level0"><a name="CURLOPTCOOKIELIST"></a><span class="nroffip">CURLOPT_COOKIELIST</span>
+<p class="level1">Pass a char * to a cookie string. Cookie can be either in Netscape / Mozilla format or just regular HTTP-style header (Set-Cookie: ...) format. If cURL cookie engine was not enabled it will enable its cookie engine. Passing a magic string "ALL" will erase all cookies known by cURL. (Added in 7.14.1) Passing the special string "SESS" will only erase all session cookies known by cURL. (Added in 7.15.4) Passing the special string "FLUSH" will write all cookies known by cURL to the file specified by <a class="emphasis" href="#CURLOPTCOOKIEJAR">CURLOPT_COOKIEJAR</a>. (Added in 7.17.1)
+<p class="level0"><a name="CURLOPTHTTPGET"></a><span class="nroffip">CURLOPT_HTTPGET</span>
+<p class="level1">Pass a long. If the long is 1, this forces the HTTP request to get back to GET. Usable if a POST, HEAD, PUT, or a custom request has been used previously using the same curl handle.
+<p class="level1">When setting <a class="emphasis" href="#CURLOPTHTTPGET">CURLOPT_HTTPGET</a> to 1, it will automatically set <a class="emphasis" href="#CURLOPTNOBODY">CURLOPT_NOBODY</a> to 0 (since 7.14.1).
+<p class="level0"><a name="CURLOPTHTTPVERSION"></a><span class="nroffip">CURLOPT_HTTP_VERSION</span>
+<p class="level1">Pass a long, set to one of the values described below. They force libcurl to use the specific HTTP versions. This is not sensible to do unless you have a good reason.
+<p class="level2">
+<p class="level1"><a name="CURLHTTPVERSIONNONE"></a><span class="nroffip">CURL_HTTP_VERSION_NONE</span>
+<p class="level2">We don't care about what version the library uses. libcurl will use whatever it thinks fit.
+<p class="level1"><a name="CURLHTTPVERSION10"></a><span class="nroffip">CURL_HTTP_VERSION_1_0</span>
+<p class="level2">Enforce HTTP 1.0 requests.
+<p class="level1"><a name="CURLHTTPVERSION11"></a><span class="nroffip">CURL_HTTP_VERSION_1_1</span>
+<p class="level2">Enforce HTTP 1.1 requests.
+<p class="level1">
+<p class="level0"><a name="CURLOPTIGNORECONTENTLENGTH"></a><span class="nroffip">CURLOPT_IGNORE_CONTENT_LENGTH</span>
+<p class="level1">Ignore the Content-Length header. This is useful for Apache 1.x (and similar servers) which will report incorrect content length for files over 2 gigabytes. If this option is used, curl will not be able to accurately report progress, and will simply stop the download when the server ends the connection. (added in 7.14.1)
+<p class="level0"><a name="CURLOPTHTTPCONTENTDECODING"></a><span class="nroffip">CURLOPT_HTTP_CONTENT_DECODING</span>
+<p class="level1">Pass a long to tell libcurl how to act on content decoding. If set to zero, content decoding will be disabled. If set to 1 it is enabled. Libcurl has no default content decoding but requires you to use <a class="emphasis" href="#CURLOPTENCODING">CURLOPT_ENCODING</a> for that. (added in 7.16.2)
+<p class="level0"><a name="CURLOPTHTTPTRANSFERDECODING"></a><span class="nroffip">CURLOPT_HTTP_TRANSFER_DECODING</span>
+<p class="level1">Pass a long to tell libcurl how to act on transfer decoding. If set to zero, transfer decoding will be disabled, if set to 1 it is enabled (default). libcurl does chunked transfer decoding by default unless this option is set to zero. (added in 7.16.2) <a name="SMTP"></a><h2 class="nroffsh">SMTP OPTIONS</h2>
+<p class="level0">
+<p class="level0"><a name="CURLOPTMAILFROM"></a><span class="nroffip">CURLOPT_MAIL_FROM</span>
+<p class="level1">Pass a pointer to a zero terminated string as parameter. It will be used to specify the sender address in a mail when sending an SMTP mail with libcurl.
+<p class="level1">(Added in 7.20.0)
+<p class="level0"><a name="CURLOPTMAILRCPT"></a><span class="nroffip">CURLOPT_MAIL_RCPT</span>
+<p class="level1">Pass a pointer to a linked list of recipients to pass to the server in your SMTP mail request. The linked list should be a fully valid list of <span class="bold">struct curl_slist</span> structs properly filled in. Use <a class="emphasis" href="./curl_slist_append.html">curl_slist_append(3)</a> to create the list and <a class="emphasis" href="./curl_slist_free_all.html">curl_slist_free_all(3)</a> to clean up an entire list.
+<p class="level1">Each recipient in SMTP lingo is specified with angle brackets (&lt;&gt;), but should you not use an angle bracket as first letter libcurl will assume you provide a single email address only and enclose that with angle brackets for you.
+<p class="level1">(Added in 7.20.0) <a name="TFTP"></a><h2 class="nroffsh">TFTP OPTIONS</h2>
+<p class="level0">
+<p class="level0"><a name="CURLOPTTFTPBLKSIZE"></a><span class="nroffip">CURLOPT_TFTP_BLKSIZE</span>
+<p class="level1">Specify block size to use for TFTP data transmission. Valid range as per RFC 2348 is 8-65464 bytes. The default of 512 bytes will be used if this option is not specified. The specified block size will only be used pending support by the remote server. If the server does not return an option acknowledgement or returns an option acknowledgement with no blksize, the default of 512 bytes will be used. (added in 7.19.4) <a name="FTP"></a><h2 class="nroffsh">FTP OPTIONS</h2>
+<p class="level0">
+<p class="level0"><a name="CURLOPTFTPPORT"></a><span class="nroffip">CURLOPT_FTPPORT</span>
+<p class="level1">Pass a pointer to a zero terminated string as parameter. It will be used to get the IP address to use for the FTP PORT instruction. The PORT instruction tells the remote server to connect to our specified IP address. The string may be a plain IP address, a host name, a network interface name (under Unix) or just a '-' symbol to let the library use your system's default IP address. Default FTP operations are passive, and thus won't use PORT.
+<p class="level1">The address can be followed by a ':' to specify a port, optionally followed by a '-' to specify a port range. If the port specified is 0, the operating system will pick a free port. If a range is provided and all ports in the range are not available, libcurl will report CURLE_FTP_PORT_FAILED for the handle. Invalid port/range settings are ignored. IPv6 addresses followed by a port or portrange have to be in brackets. IPv6 addresses without port/range specifier can be in brackets. (added in 7.19.5)
+<p class="level1">Examples with specified ports:
+<p class="level1"><pre>
+<p class="level1">&nbsp; eth0:0
+ &nbsp; 192.168.1.2:32000-33000
+ &nbsp; curl.se:32123
+ &nbsp; [::1]:1234-4567
+ </pre>
+
+<p class="level1">
+<p class="level1">You disable PORT again and go back to using the passive version by setting this option to NULL.
+<p class="level0"><a name="CURLOPTQUOTE"></a><span class="nroffip">CURLOPT_QUOTE</span>
+<p class="level1">Pass a pointer to a linked list of FTP or SFTP commands to pass to the server prior to your FTP request. This will be done before any other commands are issued (even before the CWD command for FTP). The linked list should be a fully valid list of 'struct curl_slist' structs properly filled in with text strings. Use <a class="emphasis" href="./curl_slist_append.html">curl_slist_append(3)</a> to append strings (commands) to the list, and clear the entire list afterwards with <a class="emphasis" href="./curl_slist_free_all.html">curl_slist_free_all(3)</a>. Disable this operation again by setting a NULL to this option. The set of valid FTP commands depends on the server (see RFC959 for a list of mandatory commands). The valid SFTP commands are: chgrp, chmod, chown, ln, mkdir, pwd, rename, rm, rmdir, symlink (see <span Class="manpage">curl (1))</span> (SFTP support added in 7.16.3)
+<p class="level0"><a name="CURLOPTPOSTQUOTE"></a><span class="nroffip">CURLOPT_POSTQUOTE</span>
+<p class="level1">Pass a pointer to a linked list of FTP or SFTP commands to pass to the server after your FTP transfer request. The commands will only be run if no error occurred. The linked list should be a fully valid list of struct curl_slist structs properly filled in as described for <a class="emphasis" href="#CURLOPTQUOTE">CURLOPT_QUOTE</a>. Disable this operation again by setting a NULL to this option.
+<p class="level0"><a name="CURLOPTPREQUOTE"></a><span class="nroffip">CURLOPT_PREQUOTE</span>
+<p class="level1">Pass a pointer to a linked list of FTP commands to pass to the server after the transfer type is set. The linked list should be a fully valid list of struct curl_slist structs properly filled in as described for <a class="emphasis" href="#CURLOPTQUOTE">CURLOPT_QUOTE</a>. Disable this operation again by setting a NULL to this option. Before version 7.15.6, if you also set <a class="emphasis" href="#CURLOPTNOBODY">CURLOPT_NOBODY</a> to 1, this option didn't work.
+<p class="level0"><a name="CURLOPTDIRLISTONLY"></a><span class="nroffip">CURLOPT_DIRLISTONLY</span>
+<p class="level1">A parameter set to 1 tells the library to just list the names of files in a directory, instead of doing a full directory listing that would include file sizes, dates etc. This works for FTP and SFTP URLs.
+<p class="level1">This causes an FTP NLST command to be sent on an FTP server. Beware that some FTP servers list only files in their response to NLST; they might not include subdirectories and symbolic links.
+<p class="level1">Setting this option to 1 also implies a directory listing even if the URL doesn't end with a slash, which otherwise is necessary.
+<p class="level1">Do NOT use this option if you also use <a class="emphasis" href="#CURLOPTWILDCARDMATCH">CURLOPT_WILDCARDMATCH</a> as it will effectively break that feature then.
+<p class="level1">(This option was known as CURLOPT_FTPLISTONLY up to 7.16.4)
+<p class="level0"><a name="CURLOPTAPPEND"></a><span class="nroffip">CURLOPT_APPEND</span>
+<p class="level1">A parameter set to 1 tells the library to append to the remote file instead of overwrite it. This is only useful when uploading to an FTP site.
+<p class="level1">(This option was known as CURLOPT_FTPAPPEND up to 7.16.4)
+<p class="level0"><a name="CURLOPTFTPUSEEPRT"></a><span class="nroffip">CURLOPT_FTP_USE_EPRT</span>
+<p class="level1">Pass a long. If the value is 1, it tells curl to use the EPRT (and LPRT) command when doing active FTP downloads (which is enabled by <a class="emphasis" href="#CURLOPTFTPPORT">CURLOPT_FTPPORT</a>). Using EPRT means that it will first attempt to use EPRT and then LPRT before using PORT, but if you pass zero to this option, it will not try using EPRT or LPRT, only plain PORT. (Added in 7.10.5)
+<p class="level1">If the server is an IPv6 host, this option will have no effect as of 7.12.3.
+<p class="level0"><a name="CURLOPTFTPUSEEPSV"></a><span class="nroffip">CURLOPT_FTP_USE_EPSV</span>
+<p class="level1">Pass a long. If the value is 1, it tells curl to use the EPSV command when doing passive FTP downloads (which it always does by default). Using EPSV means that it will first attempt to use EPSV before using PASV, but if you pass zero to this option, it will not try using EPSV, only plain PASV.
+<p class="level1">If the server is an IPv6 host, this option will have no effect as of 7.12.3.
+<p class="level0"><a name="CURLOPTFTPUSEPRET"></a><span class="nroffip">CURLOPT_FTP_USE_PRET</span>
+<p class="level1">Pass a long. If the value is 1, it tells curl to send a PRET command before PASV (and EPSV). Certain FTP servers, mainly drftpd, require this non-standard command for directory listings as well as up and downloads in PASV mode. Has no effect when using the active FTP transfers mode. (Added in 7.20.0)
+<p class="level0"><a name="CURLOPTFTPCREATEMISSINGDIRS"></a><span class="nroffip">CURLOPT_FTP_CREATE_MISSING_DIRS</span>
+<p class="level1">Pass a long. If the value is 1, curl will attempt to create any remote directory that it fails to CWD into. CWD is the command that changes working directory. (Added in 7.10.7)
+<p class="level1">This setting also applies to SFTP-connections. curl will attempt to create the remote directory if it can't obtain a handle to the target-location. The creation will fail if a file of the same name as the directory to create already exists or lack of permissions prevents creation. (Added in 7.16.3)
+<p class="level1">Starting with 7.19.4, you can also set this value to 2, which will make libcurl retry the CWD command again if the subsequent MKD command fails. This is especially useful if you're doing many simultanoes connections against the same server and they all have this option enabled, as then CWD may first fail but then another connection does MKD before this connection and thus MKD fails but trying CWD works! 7.19.4 also introduced the <span Class="emphasis">CURLFTP_CREATE_DIR</span> and <span Class="emphasis">CURLFTP_CREATE_DIR_RETRY</span> enum names for these arguments.
+<p class="level1">Before version 7.19.4, libcurl will simply ignore arguments set to 2 and act as if 1 was selected.
+<p class="level0"><a name="CURLOPTFTPRESPONSETIMEOUT"></a><span class="nroffip">CURLOPT_FTP_RESPONSE_TIMEOUT</span>
+<p class="level1">Pass a long. Causes curl to set a timeout period (in seconds) on the amount of time that the server is allowed to take in order to generate a response message for a command before the session is considered hung. While curl is waiting for a response, this value overrides <a class="emphasis" href="#CURLOPTTIMEOUT">CURLOPT_TIMEOUT</a>. It is recommended that if used in conjunction with <a class="emphasis" href="#CURLOPTTIMEOUT">CURLOPT_TIMEOUT</a>, you set <a class="emphasis" href="#CURLOPTFTPRESPONSETIMEOUT">CURLOPT_FTP_RESPONSE_TIMEOUT</a> to a value smaller than <a class="emphasis" href="#CURLOPTTIMEOUT">CURLOPT_TIMEOUT</a>. (Added in 7.10.8)
+<p class="level0"><a name="CURLOPTFTPALTERNATIVETOUSER"></a><span class="nroffip">CURLOPT_FTP_ALTERNATIVE_TO_USER</span>
+<p class="level1">Pass a char * as parameter, pointing to a string which will be used to authenticate if the usual FTP "USER user" and "PASS password" negotiation fails. This is currently only known to be required when connecting to Tumbleweed's Secure Transport FTPS server using client certificates for authentication. (Added in 7.15.5)
+<p class="level0"><a name="CURLOPTFTPSKIPPASVIP"></a><span class="nroffip">CURLOPT_FTP_SKIP_PASV_IP</span>
+<p class="level1">Pass a long. If set to 1, it instructs libcurl to not use the IP address the server suggests in its 227-response to libcurl's PASV command when libcurl connects the data connection. Instead libcurl will re-use the same IP address it already uses for the control connection. But it will use the port number from the 227-response. (Added in 7.14.2)
+<p class="level1">This option has no effect if PORT, EPRT or EPSV is used instead of PASV.
+<p class="level0"><a name="CURLOPTUSESSL"></a><span class="nroffip">CURLOPT_USE_SSL</span>
+<p class="level1">Pass a long using one of the values from below, to make libcurl use your desired level of SSL for the FTP transfer. (Added in 7.11.0)
+<p class="level1">(This option was known as CURLOPT_FTP_SSL up to 7.16.4, and the constants were known as CURLFTPSSL_*)
+<p class="level2">
+<p class="level1"><a name="CURLUSESSLNONE"></a><span class="nroffip">CURLUSESSL_NONE</span>
+<p class="level2">Don't attempt to use SSL.
+<p class="level1"><a name="CURLUSESSLTRY"></a><span class="nroffip">CURLUSESSL_TRY</span>
+<p class="level2">Try using SSL, proceed as normal otherwise.
+<p class="level1"><a name="CURLUSESSLCONTROL"></a><span class="nroffip">CURLUSESSL_CONTROL</span>
+<p class="level2">Require SSL for the control connection or fail with <span Class="emphasis">CURLE_USE_SSL_FAILED</span>.
+<p class="level1"><a name="CURLUSESSLALL"></a><span class="nroffip">CURLUSESSL_ALL</span>
+<p class="level2">Require SSL for all communication or fail with <span Class="emphasis">CURLE_USE_SSL_FAILED</span>.
+<p class="level1">
+<p class="level0"><a name="CURLOPTFTPSSLAUTH"></a><span class="nroffip">CURLOPT_FTPSSLAUTH</span>
+<p class="level1">Pass a long using one of the values from below, to alter how libcurl issues "AUTH TLS" or "AUTH SSL" when FTP over SSL is activated (see <a class="emphasis" href="#CURLOPTUSESSL">CURLOPT_USE_SSL</a>). (Added in 7.12.2)
+<p class="level2">
+<p class="level1"><a name="CURLFTPAUTHDEFAULT"></a><span class="nroffip">CURLFTPAUTH_DEFAULT</span>
+<p class="level2">Allow libcurl to decide.
+<p class="level1"><a name="CURLFTPAUTHSSL"></a><span class="nroffip">CURLFTPAUTH_SSL</span>
+<p class="level2">Try "AUTH SSL" first, and only if that fails try "AUTH TLS".
+<p class="level1"><a name="CURLFTPAUTHTLS"></a><span class="nroffip">CURLFTPAUTH_TLS</span>
+<p class="level2">Try "AUTH TLS" first, and only if that fails try "AUTH SSL".
+<p class="level1">
+<p class="level0"><a name="CURLOPTFTPSSLCCC"></a><span class="nroffip">CURLOPT_FTP_SSL_CCC</span>
+<p class="level1">If enabled, this option makes libcurl use CCC (Clear Command Channel). It shuts down the SSL/TLS layer after authenticating. The rest of the control channel communication will be unencrypted. This allows NAT routers to follow the FTP transaction. Pass a long using one of the values below. (Added in 7.16.1)
+<p class="level2">
+<p class="level1"><a name="CURLFTPSSLCCCNONE"></a><span class="nroffip">CURLFTPSSL_CCC_NONE</span>
+<p class="level2">Don't attempt to use CCC.
+<p class="level1"><a name="CURLFTPSSLCCCPASSIVE"></a><span class="nroffip">CURLFTPSSL_CCC_PASSIVE</span>
+<p class="level2">Do not initiate the shutdown, but wait for the server to do it. Do not send a reply.
+<p class="level1"><a name="CURLFTPSSLCCCACTIVE"></a><span class="nroffip">CURLFTPSSL_CCC_ACTIVE</span>
+<p class="level2">Initiate the shutdown and wait for a reply.
+<p class="level1">
+<p class="level0"><a name="CURLOPTFTPACCOUNT"></a><span class="nroffip">CURLOPT_FTP_ACCOUNT</span>
+<p class="level1">Pass a pointer to a zero-terminated string (or NULL to disable). When an FTP server asks for "account data" after user name and password has been provided, this data is sent off using the ACCT command. (Added in 7.13.0)
+<p class="level0"><a name="CURLOPTFTPFILEMETHOD"></a><span class="nroffip">CURLOPT_FTP_FILEMETHOD</span>
+<p class="level1">Pass a long that should have one of the following values. This option controls what method libcurl should use to reach a file on a FTP(S) server. The argument should be one of the following alternatives:
+<p class="level2">
+<p class="level1"><a name="CURLFTPMETHODMULTICWD"></a><span class="nroffip">CURLFTPMETHOD_MULTICWD</span>
+<p class="level2">libcurl does a single CWD operation for each path part in the given URL. For deep hierarchies this means many commands. This is how RFC1738 says it should be done. This is the default but the slowest behavior.
+<p class="level1"><a name="CURLFTPMETHODNOCWD"></a><span class="nroffip">CURLFTPMETHOD_NOCWD</span>
+<p class="level2">libcurl does no CWD at all. libcurl will do SIZE, RETR, STOR etc and give a full path to the server for all these commands. This is the fastest behavior.
+<p class="level1"><a name="CURLFTPMETHODSINGLECWD"></a><span class="nroffip">CURLFTPMETHOD_SINGLECWD</span>
+<p class="level2">libcurl does one CWD with the full target directory and then operates on the file "normally" (like in the multicwd case). This is somewhat more standards compliant than 'nocwd' but without the full penalty of 'multicwd'.
+<p class="level1">(Added in 7.15.1) <a name="RTSP"></a><h2 class="nroffsh">RTSP OPTIONS</h2>
+<p class="level0">
+<p class="level0"><a name="CURLOPTRTSPREQUEST"></a><span class="nroffip">CURLOPT_RTSP_REQUEST</span>
+<p class="level1">Tell libcurl what kind of RTSP request to make. Pass one of the following RTSP enum values. Unless noted otherwise, commands require the Session ID to be initialized. (Added in 7.20.0)
+<p class="level2">
+<p class="level1"><a name="CURLRTSPREQOPTIONS"></a><span class="nroffip">CURL_RTSPREQ_OPTIONS</span>
+<p class="level2">Used to retrieve the available methods of the server. The application is responsbile for parsing and obeying the response. <span class="bold">(The session ID is not needed for this method.)</span> (Added in 7.20.0)
+<p class="level1"><a name="CURLRTSPREQDESCRIBE"></a><span class="nroffip">CURL_RTSPREQ_DESCRIBE</span>
+<p class="level2">Used to get the low level description of a stream. The application should note what formats it understands in the <span Class="emphasis">'Accept:'</span> header. Unless set manually, libcurl will automatically fill in <span class="emphasis">'Accept: application/sdp'</span>. Time-condition headers will be added to Describe requests if the <a class="emphasis" href="#CURLOPTTIMECONDITION">CURLOPT_TIMECONDITION</a> option is active. <span class="bold">(The session ID is not needed for this method)</span> (Added in 7.20.0)
+<p class="level1"><a name="CURLRTSPREQANNOUNCE"></a><span class="nroffip">CURL_RTSPREQ_ANNOUNCE</span>
+<p class="level2">When sent by a client, this method changes the description of the session. For example, if a client is using the server to record a meeting, the client can use Announce to inform the server of all the meta-information about the session. ANNOUNCE acts like an HTTP PUT or POST just like <a class="emphasis" href="#CURLRTSPREQSETPARAMETER">CURL_RTSPREQ_SET_PARAMETER</a> (Added in 7.20.0)
+<p class="level1"><a name="CURLRTSPREQSETUP"></a><span class="nroffip">CURL_RTSPREQ_SETUP</span>
+<p class="level2">Setup is used to initialize the transport layer for the session. The application must set the desired Transport options for a session by using the <a class="emphasis" href="#CURLOPTRTSPTRANSPORT">CURLOPT_RTSP_TRANSPORT</a> option prior to calling setup. If no session ID is currently set with <a class="emphasis" href="#CURLOPTRTSPSESSIONID">CURLOPT_RTSP_SESSION_ID</a>, libcurl will extract and use the session ID in the response to this request. <span class="bold">(The session ID is not needed for this method).</span> (Added in 7.20.0)
+<p class="level1"><a name="CURLRTSPREQPLAY"></a><span class="nroffip">CURL_RTSPREQ_PLAY</span>
+<p class="level2">Send a Play command to the server. Use the <a class="emphasis" href="#CURLOPTRANGE">CURLOPT_RANGE</a> option to modify the playback time (e.g. 'npt=10-15'). (Added in 7.20.0)
+<p class="level1"><a name="CURLRTSPREQPAUSE"></a><span class="nroffip">CURL_RTSPREQ_PAUSE</span>
+<p class="level2">Send a Pause command to the server. Use the <a class="emphasis" href="#CURLOPTRANGE">CURLOPT_RANGE</a> option with a single value to indicate when the stream should be halted. (e.g. npt='25') (Added in 7.20.0)
+<p class="level1"><a name="CURLRTSPREQTEARDOWN"></a><span class="nroffip">CURL_RTSPREQ_TEARDOWN</span>
+<p class="level2">This command terminates an RTSP session. Simply closing a connection does not terminate the RTSP session since it is valid to control an RTSP session over different connections. (Added in 7.20.0)
+<p class="level1"><a name="CURLRTSPREQGETPARAMETER"></a><span class="nroffip">CURL_RTSPREQ_GET_PARAMETER</span>
+<p class="level2">Retrieve a parameter from the server. By default, libcurl will automatically include a <span Class="emphasis">Content-Type: text/parameters</span> header on all non-empty requests unless a custom one is set. GET_PARAMETER acts just like an HTTP PUT or POST (see <a class="emphasis" href="#CURLRTSPREQSETPARAMETER">CURL_RTSPREQ_SET_PARAMETER</a>). Applications wishing to send a heartbeat message (e.g. in the presence of a server-specified timeout) should send use an empty GET_PARAMETER request. (Added in 7.20.0)
+<p class="level1"><a name="CURLRTSPREQSETPARAMETER"></a><span class="nroffip">CURL_RTSPREQ_SET_PARAMETER</span>
+<p class="level2">Set a parameter on the server. By default, libcurl will automatically include a <span Class="emphasis">Content-Type: text/parameters</span> header unless a custom one is set. The interaction with SET_PARAMTER is much like an HTTP PUT or POST. An application may either use <a class="emphasis" href="#CURLOPTUPLOAD">CURLOPT_UPLOAD</a> with <a class="emphasis" href="#CURLOPTREADDATA">CURLOPT_READDATA</a> like an HTTP PUT, or it may use <a class="emphasis" href="#CURLOPTPOSTFIELDS">CURLOPT_POSTFIELDS</a> like an HTTP POST. No chunked transfers are allowed, so the application must set the <a class="emphasis" href="#CURLOPTINFILESIZE">CURLOPT_INFILESIZE</a> in the former and <a class="emphasis" href="#CURLOPTPOSTFIELDSIZE">CURLOPT_POSTFIELDSIZE</a> in the latter. Also, there is no use of multi-part POSTs within RTSP. (Added in 7.20.0)
+<p class="level1"><a name="CURLRTSPREQRECORD"></a><span class="nroffip">CURL_RTSPREQ_RECORD</span>
+<p class="level2">Used to tell the server to record a session. Use the <a class="emphasis" href="#CURLOPTRANGE">CURLOPT_RANGE</a> option to modify the record time. (Added in 7.20.0)
+<p class="level1"><a name="CURLRTSPREQRECEIVE"></a><span class="nroffip">CURL_RTSPREQ_RECEIVE</span>
+<p class="level2">This is a special request because it does not send any data to the server. The application may call this function in order to receive interleaved RTP data. It will return after processing one read buffer of data in order to give the application a chance to run. (Added in 7.20.0)
+<p class="level1">
+<p class="level0"><a name="CURLOPTRTSPSESSIONID"></a><span class="nroffip">CURLOPT_RTSP_SESSION_ID</span>
+<p class="level1">Pass a char * as a parameter to set the value of the current RTSP Session ID for the handle. Useful for resuming an in-progress session. Once this value is set to any non-NULL value, libcurl will return <span Class="emphasis">CURLE_RTSP_SESSION_ERROR</span> if ID received from the server does not match. If unset (or set to NULL), libcurl will automatically set the ID the first time the server sets it in a response. (Added in 7.20.0)
+<p class="level0"><a name="CURLOPTRTSPSTREAMURI"></a><span class="nroffip">CURLOPT_RTSP_STREAM_URI</span>
+<p class="level1">Set the stream URI to operate on by passing a char * . For example, a single session may be controlling <span Class="emphasis">rtsp://foo/twister/audio</span> and <span Class="emphasis">rtsp://foo/twister/video</span> and the application can switch to the appropriate stream using this option. If unset, libcurl will default to operating on generic server options by passing '*' in the place of the RTSP Stream URI. This option is distinct from <a class="emphasis" href="#CURLOPTURL">CURLOPT_URL</a>. When working with RTSP, the <span Class="emphasis">CURLOPT_STREAM_URI</span> indicates what URL to send to the server in the request header while the <a class="emphasis" href="#CURLOPTURL">CURLOPT_URL</a> indicates where to make the connection to. (e.g. the <a class="emphasis" href="#CURLOPTURL">CURLOPT_URL</a> for the above examples might be set to <span Class="emphasis">rtsp://foo/twister</span> (Added in 7.20.0)
+<p class="level0"><a name="CURLOPTRTSPTRANSPORT"></a><span class="nroffip">CURLOPT_RTSP_TRANSPORT</span>
+<p class="level1">Pass a char * to tell libcurl what to pass for the Transport: header for this RTSP session. This is mainly a convenience method to avoid needing to set a custom Transport: header for every SETUP request. The application must set a Transport: header before issuing a SETUP request. (Added in 7.20.0)
+<p class="level0"><a name="CURLOPTRTSPHEADER"></a><span class="nroffip">CURLOPT_RTSP_HEADER</span>
+<p class="level1">This option is simply an alias for <a class="emphasis" href="#CURLOPTHTTPHEADER">CURLOPT_HTTP_HEADER</a>. Use this to replace the standard headers that RTSP and HTTP share. It is also valid to use the shortcuts such as <a class="emphasis" href="#CURLOPTUSERAGENT">CURLOPT_USERAGENT</a>. (Added in 7.20.0)
+<p class="level0"><a name="CURLOPTRTSPCLIENTCSEQ"></a><span class="nroffip">CURLOPT_RTSP_CLIENT_CSEQ</span>
+<p class="level1">Manually set the the CSEQ number to issue for the next RTSP request. Useful if the application is resuming a previously broken connection. The CSEQ will increment from this new number henceforth. (Added in 7.20.0)
+<p class="level0"><a name="CURLOPTRTSPSERVERCSEQ"></a><span class="nroffip">CURLOPT_RTSP_SERVER_CSEQ</span>
+<p class="level1">Manually set the CSEQ number to expect for the next RTSP Server-&gt;Client request. At the moment, this feature (listening for Server requests) is unimplemented. (Added in 7.20.0) <a name="PROTOCOL"></a><h2 class="nroffsh">PROTOCOL OPTIONS</h2>
+<p class="level0">
+<p class="level0"><a name="CURLOPTTRANSFERTEXT"></a><span class="nroffip">CURLOPT_TRANSFERTEXT</span>
+<p class="level1">A parameter set to 1 tells the library to use ASCII mode for FTP transfers, instead of the default binary transfer. For win32 systems it does not set the stdout to binary mode. This option can be usable when transferring text data between systems with different views on certain characters, such as newlines or similar.
+<p class="level1">libcurl does not do a complete ASCII conversion when doing ASCII transfers over FTP. This is a known limitation/flaw that nobody has rectified. libcurl simply sets the mode to ASCII and performs a standard transfer.
+<p class="level0"><a name="CURLOPTPROXYTRANSFERMODE"></a><span class="nroffip">CURLOPT_PROXY_TRANSFER_MODE</span>
+<p class="level1">Pass a long. If the value is set to 1 (one), it tells libcurl to set the transfer mode (binary or ASCII) for FTP transfers done via an HTTP proxy, by appending ;type=a or ;type=i to the URL. Without this setting, or it being set to 0 (zero, the default), <a class="emphasis" href="#CURLOPTTRANSFERTEXT">CURLOPT_TRANSFERTEXT</a> has no effect when doing FTP via a proxy. Beware that not all proxies support this feature. (Added in 7.18.0)
+<p class="level0"><a name="CURLOPTCRLF"></a><span class="nroffip">CURLOPT_CRLF</span>
+<p class="level1">Convert Unix newlines to CRLF newlines on transfers.
+<p class="level0"><a name="CURLOPTRANGE"></a><span class="nroffip">CURLOPT_RANGE</span>
+<p class="level1">Pass a char * as parameter, which should contain the specified range you want. It should be in the format "X-Y", where X or Y may be left out. HTTP transfers also support several intervals, separated with commas as in <span Class="emphasis">"X-Y,N-M"</span>. Using this kind of multiple intervals will cause the HTTP server to send the response document in pieces (using standard MIME separation techniques). For RTSP, the formatting of a range should follow RFC 2326 Section 12.29. For RTSP, byte ranges are <span Class="bold">not</span> permitted. Instead, ranges should be given in npt, utc, or smpte formats.
+<p class="level1">Pass a NULL to this option to disable the use of ranges.
+<p class="level1">Ranges work on HTTP, FTP, FILE (since 7.18.0), and RTSP (since 7.20.0) transfers only.
+<p class="level0"><a name="CURLOPTRESUMEFROM"></a><span class="nroffip">CURLOPT_RESUME_FROM</span>
+<p class="level1">Pass a long as parameter. It contains the offset in number of bytes that you want the transfer to start from. Set this option to 0 to make the transfer start from the beginning (effectively disabling resume). For FTP, set this option to -1 to make the transfer start from the end of the target file (useful to continue an interrupted upload).
+<p class="level1">When doing uploads with FTP, the resume position is where in the local/source file libcurl should try to resume the upload from and it will then append the source file to the remote target file.
+<p class="level0"><a name="CURLOPTRESUMEFROMLARGE"></a><span class="nroffip">CURLOPT_RESUME_FROM_LARGE</span>
+<p class="level1">Pass a curl_off_t as parameter. It contains the offset in number of bytes that you want the transfer to start from. (Added in 7.11.0)
+<p class="level0"><a name="CURLOPTCUSTOMREQUEST"></a><span class="nroffip">CURLOPT_CUSTOMREQUEST</span>
+<p class="level1">Pass a pointer to a zero terminated string as parameter. It will be used instead of GET or HEAD when doing an HTTP request, or instead of LIST or NLST when doing a FTP directory listing. This is useful for doing DELETE or other more or less obscure HTTP requests. Don't do this at will, make sure your server supports the command first.
+<p class="level1">When you change the request method by setting <a class="bold" href="#CURLOPTCUSTOMREQUEST">CURLOPT_CUSTOMREQUEST</a> to something, you don't actually change how libcurl behaves or acts in regards to the particular request method, it will only change the actual string sent in the request.
+<p class="level1">For example: if you tell libcurl to do a HEAD request, but then change the request to a "GET" with <a class="bold" href="#CURLOPTCUSTOMREQUEST">CURLOPT_CUSTOMREQUEST</a> you'll still see libcurl act as if it sent a HEAD even when it does send a GET.
+<p class="level1">To switch to a proper HEAD, use <a class="emphasis" href="#CURLOPTNOBODY">CURLOPT_NOBODY</a>, to switch to a proper POST, use <a class="emphasis" href="#CURLOPTPOST">CURLOPT_POST</a> or <a class="emphasis" href="#CURLOPTPOSTFIELDS">CURLOPT_POSTFIELDS</a> and so on.
+<p class="level1">Restore to the internal default by setting this to NULL.
+<p class="level1">Many people have wrongly used this option to replace the entire request with their own, including multiple headers and POST contents. While that might work in many cases, it will cause libcurl to send invalid requests and it could possibly confuse the remote server badly. Use <a class="emphasis" href="#CURLOPTPOST">CURLOPT_POST</a> and <a class="emphasis" href="#CURLOPTPOSTFIELDS">CURLOPT_POSTFIELDS</a> to set POST data. Use <a class="emphasis" href="#CURLOPTHTTPHEADER">CURLOPT_HTTPHEADER</a> to replace or extend the set of headers sent by libcurl. Use <a class="emphasis" href="#CURLOPTHTTPVERSION">CURLOPT_HTTP_VERSION</a> to change HTTP version.
+<p class="level0"><a name="CURLOPTFILETIME"></a><span class="nroffip">CURLOPT_FILETIME</span>
+<p class="level1">Pass a long. If it is 1, libcurl will attempt to get the modification date of the remote document in this operation. This requires that the remote server sends the time or replies to a time querying command. The <a class="emphasis" href="./curl_easy_getinfo.html">curl_easy_getinfo(3)</a> function with the <span Class="emphasis">CURLINFO_FILETIME</span> argument can be used after a transfer to extract the received time (if any).
+<p class="level0"><a name="CURLOPTNOBODY"></a><span class="nroffip">CURLOPT_NOBODY</span>
+<p class="level1">A parameter set to 1 tells the library to not include the body-part in the output. This is only relevant for protocols that have separate header and body parts. On HTTP(S) servers, this will make libcurl do a HEAD request.
+<p class="level1">To change request to GET, you should use <a class="emphasis" href="#CURLOPTHTTPGET">CURLOPT_HTTPGET</a>. Change request to POST with <a class="emphasis" href="#CURLOPTPOST">CURLOPT_POST</a> etc.
+<p class="level0"><a name="CURLOPTINFILESIZE"></a><span class="nroffip">CURLOPT_INFILESIZE</span>
+<p class="level1">When uploading a file to a remote site, this option should be used to tell libcurl what the expected size of the infile is. This value should be passed as a long. See also <a class="emphasis" href="#CURLOPTINFILESIZELARGE">CURLOPT_INFILESIZE_LARGE</a>.
+<p class="level1">For uploading using SCP, this option or <a class="emphasis" href="#CURLOPTINFILESIZELARGE">CURLOPT_INFILESIZE_LARGE</a> is mandatory.
+<p class="level1">This option does not limit how much data libcurl will actually send, as that is controlled entirely by what the read callback returns.
+<p class="level0"><a name="CURLOPTINFILESIZELARGE"></a><span class="nroffip">CURLOPT_INFILESIZE_LARGE</span>
+<p class="level1">When uploading a file to a remote site, this option should be used to tell libcurl what the expected size of the infile is. This value should be passed as a curl_off_t. (Added in 7.11.0)
+<p class="level1">For uploading using SCP, this option or <a class="emphasis" href="#CURLOPTINFILESIZE">CURLOPT_INFILESIZE</a> is mandatory.
+<p class="level1">This option does not limit how much data libcurl will actually send, as that is controlled entirely by what the read callback returns.
+<p class="level0"><a name="CURLOPTUPLOAD"></a><span class="nroffip">CURLOPT_UPLOAD</span>
+<p class="level1">A parameter set to 1 tells the library to prepare for an upload. The <a class="emphasis" href="#CURLOPTREADDATA">CURLOPT_READDATA</a> and <a class="emphasis" href="#CURLOPTINFILESIZE">CURLOPT_INFILESIZE</a> or <a class="emphasis" href="#CURLOPTINFILESIZELARGE">CURLOPT_INFILESIZE_LARGE</a> options are also interesting for uploads. If the protocol is HTTP, uploading means using the PUT request unless you tell libcurl otherwise.
+<p class="level1">Using PUT with HTTP 1.1 implies the use of a "Expect: 100-continue" header. You can disable this header with <a class="emphasis" href="#CURLOPTHTTPHEADER">CURLOPT_HTTPHEADER</a> as usual.
+<p class="level1">If you use PUT to a HTTP 1.1 server, you can upload data without knowing the size before starting the transfer if you use chunked encoding. You enable this by adding a header like "Transfer-Encoding: chunked" with <a class="emphasis" href="#CURLOPTHTTPHEADER">CURLOPT_HTTPHEADER</a>. With HTTP 1.0 or without chunked transfer, you must specify the size.
+<p class="level0"><a name="CURLOPTMAXFILESIZE"></a><span class="nroffip">CURLOPT_MAXFILESIZE</span>
+<p class="level1">Pass a long as parameter. This allows you to specify the maximum size (in bytes) of a file to download. If the file requested is larger than this value, the transfer will not start and CURLE_FILESIZE_EXCEEDED will be returned.
+<p class="level1">The file size is not always known prior to download, and for such files this option has no effect even if the file transfer ends up being larger than this given limit. This concerns both FTP and HTTP transfers.
+<p class="level0"><a name="CURLOPTMAXFILESIZELARGE"></a><span class="nroffip">CURLOPT_MAXFILESIZE_LARGE</span>
+<p class="level1">Pass a curl_off_t as parameter. This allows you to specify the maximum size (in bytes) of a file to download. If the file requested is larger than this value, the transfer will not start and <span Class="emphasis">CURLE_FILESIZE_EXCEEDED</span> will be returned. (Added in 7.11.0)
+<p class="level1">The file size is not always known prior to download, and for such files this option has no effect even if the file transfer ends up being larger than this given limit. This concerns both FTP and HTTP transfers.
+<p class="level0"><a name="CURLOPTTIMECONDITION"></a><span class="nroffip">CURLOPT_TIMECONDITION</span>
+<p class="level1">Pass a long as parameter. This defines how the <a class="emphasis" href="#CURLOPTTIMEVALUE">CURLOPT_TIMEVALUE</a> time value is treated. You can set this parameter to <span Class="emphasis">CURL_TIMECOND_IFMODSINCE</span> or <span Class="emphasis">CURL_TIMECOND_IFUNMODSINCE</span>. This feature applies to HTTP, FTP, and RTSP.
+<p class="level1">The last modification time of a file is not always known and in such instances this feature will have no effect even if the given time condition would not have been met. <a class="emphasis" href="./curl_easy_getinfo.html">curl_easy_getinfo(3)</a> with the <span Class="emphasis">CURLINFO_CONDITION_UNMET</span> option can be used after a transfer to learn if a zero-byte successful "transfer" was due to this condition not matching.
+<p class="level0"><a name="CURLOPTTIMEVALUE"></a><span class="nroffip">CURLOPT_TIMEVALUE</span>
+<p class="level1">Pass a long as parameter. This should be the time in seconds since 1 Jan 1970, and the time will be used in a condition as specified with <a class="emphasis" href="#CURLOPTTIMECONDITION">CURLOPT_TIMECONDITION</a>. <a name="CONNECTION"></a><h2 class="nroffsh">CONNECTION OPTIONS</h2>
+<p class="level0">
+<p class="level0"><a name="CURLOPTTIMEOUT"></a><span class="nroffip">CURLOPT_TIMEOUT</span>
+<p class="level1">Pass a long as parameter containing the maximum time in seconds that you allow the libcurl transfer operation to take. Normally, name lookups can take a considerable time and limiting operations to less than a few minutes risk aborting perfectly normal operations. This option will cause curl to use the SIGALRM to enable time-outing system calls.
+<p class="level1">In unix-like systems, this might cause signals to be used unless <a class="emphasis" href="#CURLOPTNOSIGNAL">CURLOPT_NOSIGNAL</a> is set.
+<p class="level0"><a name="CURLOPTTIMEOUTMS"></a><span class="nroffip">CURLOPT_TIMEOUT_MS</span>
+<p class="level1">Like <a class="emphasis" href="#CURLOPTTIMEOUT">CURLOPT_TIMEOUT</a> but takes number of milliseconds instead. If libcurl is built to use the standard system name resolver, that portion of the transfer will still use full-second resolution for timeouts with a minimum timeout allowed of one second. (Added in 7.16.2)
+<p class="level0"><a name="CURLOPTLOWSPEEDLIMIT"></a><span class="nroffip">CURLOPT_LOW_SPEED_LIMIT</span>
+<p class="level1">Pass a long as parameter. It contains the transfer speed in bytes per second that the transfer should be below during <a class="emphasis" href="#CURLOPTLOWSPEEDTIME">CURLOPT_LOW_SPEED_TIME</a> seconds for the library to consider it too slow and abort.
+<p class="level0"><a name="CURLOPTLOWSPEEDTIME"></a><span class="nroffip">CURLOPT_LOW_SPEED_TIME</span>
+<p class="level1">Pass a long as parameter. It contains the time in seconds that the transfer should be below the <a class="emphasis" href="#CURLOPTLOWSPEEDLIMIT">CURLOPT_LOW_SPEED_LIMIT</a> for the library to consider it too slow and abort.
+<p class="level0"><a name="CURLOPTMAXSENDSPEEDLARGE"></a><span class="nroffip">CURLOPT_MAX_SEND_SPEED_LARGE</span>
+<p class="level1">Pass a curl_off_t as parameter. If an upload exceeds this speed (counted in bytes per second) on cumulative average during the transfer, the transfer will pause to keep the average rate less than or equal to the parameter value. Defaults to unlimited speed. (Added in 7.15.5)
+<p class="level0"><a name="CURLOPTMAXRECVSPEEDLARGE"></a><span class="nroffip">CURLOPT_MAX_RECV_SPEED_LARGE</span>
+<p class="level1">Pass a curl_off_t as parameter. If a download exceeds this speed (counted in bytes per second) on cumulative average during the transfer, the transfer will pause to keep the average rate less than or equal to the parameter value. Defaults to unlimited speed. (Added in 7.15.5)
+<p class="level0"><a name="CURLOPTMAXCONNECTS"></a><span class="nroffip">CURLOPT_MAXCONNECTS</span>
+<p class="level1">Pass a long. The set number will be the persistent connection cache size. The set amount will be the maximum amount of simultaneously open connections that libcurl may cache in this easy handle. Default is 5, and there isn't much point in changing this value unless you are perfectly aware of how this works and changes libcurl's behaviour. This concerns connections using any of the protocols that support persistent connections.
+<p class="level1">When reaching the maximum limit, curl closes the oldest one in the cache to prevent increasing the number of open connections.
+<p class="level1">If you already have performed transfers with this curl handle, setting a smaller MAXCONNECTS than before may cause open connections to get closed unnecessarily.
+<p class="level1">If you add this easy handle to a multi handle, this setting is not acknowledged, and you must instead use <a class="emphasis" href="./curl_multi_setopt.html">curl_multi_setopt(3)</a> and the <span Class="emphasis">CURLMOPT_MAXCONNECTS</span> option.
+<p class="level0"><a name="CURLOPTCLOSEPOLICY"></a><span class="nroffip">CURLOPT_CLOSEPOLICY</span>
+<p class="level1">(Obsolete) This option does nothing.
+<p class="level0"><a name="CURLOPTFRESHCONNECT"></a><span class="nroffip">CURLOPT_FRESH_CONNECT</span>
+<p class="level1">Pass a long. Set to 1 to make the next transfer use a new (fresh) connection by force. If the connection cache is full before this connection, one of the existing connections will be closed as according to the selected or default policy. This option should be used with caution and only if you understand what it does. Set this to 0 to have libcurl attempt re-using an existing connection (default behavior).
+<p class="level0"><a name="CURLOPTFORBIDREUSE"></a><span class="nroffip">CURLOPT_FORBID_REUSE</span>
+<p class="level1">Pass a long. Set to 1 to make the next transfer explicitly close the connection when done. Normally, libcurl keeps all connections alive when done with one transfer in case a succeeding one follows that can re-use them. This option should be used with caution and only if you understand what it does. Set to 0 to have libcurl keep the connection open for possible later re-use (default behavior).
+<p class="level0"><a name="CURLOPTCONNECTTIMEOUT"></a><span class="nroffip">CURLOPT_CONNECTTIMEOUT</span>
+<p class="level1">Pass a long. It should contain the maximum time in seconds that you allow the connection to the server to take. This only limits the connection phase, once it has connected, this option is of no more use. Set to zero to disable connection timeout (it will then only timeout on the system's internal timeouts). See also the <a class="emphasis" href="#CURLOPTTIMEOUT">CURLOPT_TIMEOUT</a> option.
+<p class="level1">In unix-like systems, this might cause signals to be used unless <a class="emphasis" href="#CURLOPTNOSIGNAL">CURLOPT_NOSIGNAL</a> is set.
+<p class="level0"><a name="CURLOPTCONNECTTIMEOUTMS"></a><span class="nroffip">CURLOPT_CONNECTTIMEOUT_MS</span>
+<p class="level1">Like <a class="emphasis" href="#CURLOPTCONNECTTIMEOUT">CURLOPT_CONNECTTIMEOUT</a> but takes the number of milliseconds instead. If libcurl is built to use the standard system name resolver, that portion of the connect will still use full-second resolution for timeouts with a minimum timeout allowed of one second. (Added in 7.16.2)
+<p class="level0"><a name="CURLOPTIPRESOLVE"></a><span class="nroffip">CURLOPT_IPRESOLVE</span>
+<p class="level1">Allows an application to select what kind of IP addresses to use when resolving host names. This is only interesting when using host names that resolve addresses using more than one version of IP. The allowed values are:
+<p class="level2">
+<p class="level1"><a name="CURLIPRESOLVEWHATEVER"></a><span class="nroffip">CURL_IPRESOLVE_WHATEVER</span>
+<p class="level2">Default, resolves addresses to all IP versions that your system allows.
+<p class="level1"><a name="CURLIPRESOLVEV4"></a><span class="nroffip">CURL_IPRESOLVE_V4</span>
+<p class="level2">Resolve to IPv4 addresses.
+<p class="level1"><a name="CURLIPRESOLVEV6"></a><span class="nroffip">CURL_IPRESOLVE_V6</span>
+<p class="level2">Resolve to IPv6 addresses.
+<p class="level1">
+<p class="level0"><a name="CURLOPTCONNECTONLY"></a><span class="nroffip">CURLOPT_CONNECT_ONLY</span>
+<p class="level1">Pass a long. If the parameter equals 1, it tells the library to perform all the required proxy authentication and connection setup, but no data transfer. This option is useful only on HTTP URLs.
+<p class="level1">This option is useful with the <span Class="emphasis">CURLINFO_LASTSOCKET</span> option to <a class="emphasis" href="./curl_easy_getinfo.html">curl_easy_getinfo(3)</a>. The library can set up the connection and then the application can obtain the most recently used socket for special data transfers. (Added in 7.15.2) <a name="SSL"></a><h2 class="nroffsh">SSL and SECURITY OPTIONS</h2>
+<p class="level0">
+<p class="level0"><a name="CURLOPTSSLCERT"></a><span class="nroffip">CURLOPT_SSLCERT</span>
+<p class="level1">Pass a pointer to a zero terminated string as parameter. The string should be the file name of your certificate. The default format is "PEM" and can be changed with <a class="emphasis" href="#CURLOPTSSLCERTTYPE">CURLOPT_SSLCERTTYPE</a>.
+<p class="level1">With NSS this is the nickname of the certificate you wish to authenticate with.
+<p class="level0"><a name="CURLOPTSSLCERTTYPE"></a><span class="nroffip">CURLOPT_SSLCERTTYPE</span>
+<p class="level1">Pass a pointer to a zero terminated string as parameter. The string should be the format of your certificate. Supported formats are "PEM" and "DER". (Added in 7.9.3)
+<p class="level0"><a name="CURLOPTSSLKEY"></a><span class="nroffip">CURLOPT_SSLKEY</span>
+<p class="level1">Pass a pointer to a zero terminated string as parameter. The string should be the file name of your private key. The default format is "PEM" and can be changed with <a class="emphasis" href="#CURLOPTSSLKEYTYPE">CURLOPT_SSLKEYTYPE</a>.
+<p class="level0"><a name="CURLOPTSSLKEYTYPE"></a><span class="nroffip">CURLOPT_SSLKEYTYPE</span>
+<p class="level1">Pass a pointer to a zero terminated string as parameter. The string should be the format of your private key. Supported formats are "PEM", "DER" and "ENG".
+<p class="level1">The format "ENG" enables you to load the private key from a crypto engine. In this case <a class="emphasis" href="#CURLOPTSSLKEY">CURLOPT_SSLKEY</a> is used as an identifier passed to the engine. You have to set the crypto engine with <a class="emphasis" href="#CURLOPTSSLENGINE">CURLOPT_SSLENGINE</a>. "DER" format key file currently does not work because of a bug in OpenSSL.
+<p class="level0"><a name="CURLOPTKEYPASSWD"></a><span class="nroffip">CURLOPT_KEYPASSWD</span>
+<p class="level1">Pass a pointer to a zero terminated string as parameter. It will be used as the password required to use the <a class="emphasis" href="#CURLOPTSSLKEY">CURLOPT_SSLKEY</a> or <a class="emphasis" href="#CURLOPTSSHPRIVATEKEYFILE">CURLOPT_SSH_PRIVATE_KEYFILE</a> private key. You never needed a pass phrase to load a certificate but you need one to load your private key.
+<p class="level1">(This option was known as CURLOPT_SSLKEYPASSWD up to 7.16.4 and CURLOPT_SSLCERTPASSWD up to 7.9.2)
+<p class="level0"><a name="CURLOPTSSLENGINE"></a><span class="nroffip">CURLOPT_SSLENGINE</span>
+<p class="level1">Pass a pointer to a zero terminated string as parameter. It will be used as the identifier for the crypto engine you want to use for your private key.
+<p class="level1">If the crypto device cannot be loaded, <span Class="emphasis">CURLE_SSL_ENGINE_NOTFOUND</span> is returned.
+<p class="level0"><a name="CURLOPTSSLENGINEDEFAULT"></a><span class="nroffip">CURLOPT_SSLENGINE_DEFAULT</span>
+<p class="level1">Sets the actual crypto engine as the default for (asymmetric) crypto operations.
+<p class="level1">If the crypto device cannot be set, <span Class="emphasis">CURLE_SSL_ENGINE_SETFAILED</span> is returned.
+<p class="level1">Even though this option doesn't need any parameter, in some configurations <span Class="emphasis">curl_easy_setopt</span> might be defined as a macro taking exactly three arguments. Therefore, it's recommended to pass 1 as parameter to this option.
+<p class="level0"><a name="CURLOPTSSLVERSION"></a><span class="nroffip">CURLOPT_SSLVERSION</span>
+<p class="level1">Pass a long as parameter to control what version of SSL/TLS to attempt to use. The available options are:
+<p class="level2">
+<p class="level1"><a name="CURLSSLVERSIONDEFAULT"></a><span class="nroffip">CURL_SSLVERSION_DEFAULT</span>
+<p class="level2">The default action. This will attempt to figure out the remote SSL protocol version, i.e. either SSLv3 or TLSv1 (but not SSLv2, which became disabled by default with 7.18.1).
+<p class="level1"><a name="CURLSSLVERSIONTLSv1"></a><span class="nroffip">CURL_SSLVERSION_TLSv1</span>
+<p class="level2">Force TLSv1
+<p class="level1"><a name="CURLSSLVERSIONSSLv2"></a><span class="nroffip">CURL_SSLVERSION_SSLv2</span>
+<p class="level2">Force SSLv2
+<p class="level1"><a name="CURLSSLVERSIONSSLv3"></a><span class="nroffip">CURL_SSLVERSION_SSLv3</span>
+<p class="level2">Force SSLv3
+<p class="level1">
+<p class="level0"><a name="CURLOPTSSLVERIFYPEER"></a><span class="nroffip">CURLOPT_SSL_VERIFYPEER</span>
+<p class="level1">Pass a long as parameter.
+<p class="level1">This option determines whether curl verifies the authenticity of the peer's certificate. A value of 1 means curl verifies; zero means it doesn't. The default is nonzero, but before 7.10, it was zero.
+<p class="level1">When negotiating an SSL connection, the server sends a certificate indicating its identity. Curl verifies whether the certificate is authentic, i.e. that you can trust that the server is who the certificate says it is. This trust is based on a chain of digital signatures, rooted in certification authority (CA) certificates you supply. As of 7.10, curl installs a default bundle of CA certificates and you can specify alternate certificates with the <a class="emphasis" href="#CURLOPTCAINFO">CURLOPT_CAINFO</a> option or the <a class="emphasis" href="#CURLOPTCAPATH">CURLOPT_CAPATH</a> option.
+<p class="level1">When <a class="emphasis" href="#CURLOPTSSLVERIFYPEER">CURLOPT_SSL_VERIFYPEER</a> is nonzero, and the verification fails to prove that the certificate is authentic, the connection fails. When the option is zero, the connection succeeds regardless.
+<p class="level1">Authenticating the certificate is not by itself very useful. You typically want to ensure that the server, as authentically identified by its certificate, is the server you mean to be talking to. Use <a class="emphasis" href="#CURLOPTSSLVERIFYHOST">CURLOPT_SSL_VERIFYHOST</a> to control that.
+<p class="level0"><a name="CURLOPTCAINFO"></a><span class="nroffip">CURLOPT_CAINFO</span>
+<p class="level1">Pass a char * to a zero terminated string naming a file holding one or more certificates to verify the peer with. This makes sense only when used in combination with the <a class="emphasis" href="#CURLOPTSSLVERIFYPEER">CURLOPT_SSL_VERIFYPEER</a> option. If <a class="emphasis" href="#CURLOPTSSLVERIFYPEER">CURLOPT_SSL_VERIFYPEER</a> is zero, <a class="emphasis" href="#CURLOPTCAINFO">CURLOPT_CAINFO</a> need not even indicate an accessible file.
+<p class="level1">This option is by default set to the system path where libcurl's cacert bundle is assumed to be stored, as established at build time.
+<p class="level1">When built against NSS, this is the directory that the NSS certificate database resides in.
+<p class="level0"><a name="CURLOPTISSUERCERT"></a><span class="nroffip">CURLOPT_ISSUERCERT</span>
+<p class="level1">Pass a char * to a zero terminated string naming a file holding a CA certificate in PEM format. If the option is set, an additional check against the peer certificate is performed to verify the issuer is indeed the one associated with the certificate provided by the option. This additional check is useful in multi-level PKI where one needs to enforce that the peer certificate is from a specific branch of the tree.
+<p class="level1">This option makes sense only when used in combination with the <a class="emphasis" href="#CURLOPTSSLVERIFYPEER">CURLOPT_SSL_VERIFYPEER</a> option. Otherwise, the result of the check is not considered as failure.
+<p class="level1">A specific error code (CURLE_SSL_ISSUER_ERROR) is defined with the option, which is returned if the setup of the SSL/TLS session has failed due to a mismatch with the issuer of peer certificate (<a class="emphasis" href="#CURLOPTSSLVERIFYPEER">CURLOPT_SSL_VERIFYPEER</a> has to be set too for the check to fail). (Added in 7.19.0)
+<p class="level0"><a name="CURLOPTCAPATH"></a><span class="nroffip">CURLOPT_CAPATH</span>
+<p class="level1">Pass a char * to a zero terminated string naming a directory holding multiple CA certificates to verify the peer with. The certificate directory must be prepared using the openssl c_rehash utility. This makes sense only when used in combination with the <a class="emphasis" href="#CURLOPTSSLVERIFYPEER">CURLOPT_SSL_VERIFYPEER</a> option. If <a class="emphasis" href="#CURLOPTSSLVERIFYPEER">CURLOPT_SSL_VERIFYPEER</a> is zero, <a class="emphasis" href="#CURLOPTCAPATH">CURLOPT_CAPATH</a> need not even indicate an accessible path. The <a class="emphasis" href="#CURLOPTCAPATH">CURLOPT_CAPATH</a> function apparently does not work in Windows due to some limitation in openssl. This option is OpenSSL-specific and does nothing if libcurl is built to use GnuTLS.
+<p class="level0"><a name="CURLOPTCRLFILE"></a><span class="nroffip">CURLOPT_CRLFILE</span>
+<p class="level1">Pass a char * to a zero terminated string naming a file with the concatenation of CRL (in PEM format) to use in the certificate validation that occurs during the SSL exchange.
+<p class="level1">When curl is built to use NSS or GnuTLS, there is no way to influence the use of CRL passed to help in the verification process. When libcurl is built with OpenSSL support, X509_V_FLAG_CRL_CHECK and X509_V_FLAG_CRL_CHECK_ALL are both set, requiring CRL check against all the elements of the certificate chain if a CRL file is passed.
+<p class="level1">This option makes sense only when used in combination with the <a class="emphasis" href="#CURLOPTSSLVERIFYPEER">CURLOPT_SSL_VERIFYPEER</a> option.
+<p class="level1">A specific error code (CURLE_SSL_CRL_BADFILE) is defined with the option. It is returned when the SSL exchange fails because the CRL file cannot be loaded. A failure in certificate verification due to a revocation information found in the CRL does not trigger this specific error. (Added in 7.19.0)
+<p class="level0"><a name="CURLOPTCERTINFO"></a><span class="nroffip">CURLOPT_CERTINFO</span>
+<p class="level1">Pass a long set to 1 to enable libcurl's certificate chain info gatherer. With this enabled, libcurl (if built with OpenSSL) will extract lots of information and data about the certificates in the certificate chain used in the SSL connection. This data is then possible to extract after a transfer using <a class="emphasis" href="./curl_easy_getinfo.html">curl_easy_getinfo(3)</a> and its option <span Class="emphasis">CURLINFO_CERTINFO</span>. (Added in 7.19.1)
+<p class="level0"><a name="CURLOPTRANDOMFILE"></a><span class="nroffip">CURLOPT_RANDOM_FILE</span>
+<p class="level1">Pass a char * to a zero terminated file name. The file will be used to read from to seed the random engine for SSL. The more random the specified file is, the more secure the SSL connection will become.
+<p class="level0"><a name="CURLOPTEGDSOCKET"></a><span class="nroffip">CURLOPT_EGDSOCKET</span>
+<p class="level1">Pass a char * to the zero terminated path name to the Entropy Gathering Daemon socket. It will be used to seed the random engine for SSL.
+<p class="level0"><a name="CURLOPTSSLVERIFYHOST"></a><span class="nroffip">CURLOPT_SSL_VERIFYHOST</span>
+<p class="level1">Pass a long as parameter.
+<p class="level1">This option determines whether libcurl verifies that the server cert is for the server it is known as.
+<p class="level1">When negotiating a SSL connection, the server sends a certificate indicating its identity.
+<p class="level1">When <a class="emphasis" href="#CURLOPTSSLVERIFYHOST">CURLOPT_SSL_VERIFYHOST</a> is 2, that certificate must indicate that the server is the server to which you meant to connect, or the connection fails.
+<p class="level1">Curl considers the server the intended one when the Common Name field or a Subject Alternate Name field in the certificate matches the host name in the URL to which you told Curl to connect.
+<p class="level1">When the value is 1, the certificate must contain a Common Name field, but it doesn't matter what name it says. (This is not ordinarily a useful setting).
+<p class="level1">When the value is 0, the connection succeeds regardless of the names in the certificate.
+<p class="level1">The default, since 7.10, is 2.
+<p class="level1">This option controls checking the server's claimed identity. The server could be lying. To control lying, see <a class="emphasis" href="#CURLOPTSSLVERIFYPEER">CURLOPT_SSL_VERIFYPEER</a>.
+<p class="level0"><a name="CURLOPTSSLCIPHERLIST"></a><span class="nroffip">CURLOPT_SSL_CIPHER_LIST</span>
+<p class="level1">Pass a char *, pointing to a zero terminated string holding the list of ciphers to use for the SSL connection. The list must be syntactically correct, it consists of one or more cipher strings separated by colons. Commas or spaces are also acceptable separators but colons are normally used, !, - and + can be used as operators.
+<p class="level1">For OpenSSL and GnuTLS valid examples of cipher lists include 'RC4-SHA', &acute;SHA1+DES&acute;, 'TLSv1' and 'DEFAULT'. The default list is normally set when you compile OpenSSL.
+<p class="level1">You'll find more details about cipher lists on this URL: <span Class="emphasis"><a href="http://www.openssl.org/docs/apps/ciphers.html">http://www.openssl.org/docs/apps/ciphers.html</a></span>
+<p class="level1">For NSS, valid examples of cipher lists include 'rsa_rc4_128_md5', &acute;rsa_aes_128_sha&acute;, etc. With NSS you don't add/remove ciphers. If one uses this option then all known ciphers are disabled and only those passed in are enabled.
+<p class="level1">You'll find more details about the NSS cipher lists on this URL: <span Class="emphasis"><a href="http://directory.fedora.redhat.com/docs/mod_nss.html">http://directory.fedora.redhat.com/docs/mod_nss.html</a>#Directives</span>
+<p class="level1">
+<p class="level0"><a name="CURLOPTSSLSESSIONIDCACHE"></a><span class="nroffip">CURLOPT_SSL_SESSIONID_CACHE</span>
+<p class="level1">Pass a long set to 0 to disable libcurl's use of SSL session-ID caching. Set this to 1 to enable it. By default all transfers are done using the cache. While nothing ever should get hurt by attempting to reuse SSL session-IDs, there seem to be broken SSL implementations in the wild that may require you to disable this in order for you to succeed. (Added in 7.16.0)
+<p class="level0"><a name="CURLOPTKRBLEVEL"></a><span class="nroffip">CURLOPT_KRBLEVEL</span>
+<p class="level1">Pass a char * as parameter. Set the kerberos security level for FTP; this also enables kerberos awareness. This is a string, 'clear', 'safe', 'confidential' or 'private'. If the string is set but doesn't match one of these, 'private' will be used. Set the string to NULL to disable kerberos support for FTP.
+<p class="level1">(This option was known as CURLOPT_KRB4LEVEL up to 7.16.3) <a name="SSH"></a><h2 class="nroffsh">SSH OPTIONS</h2>
+<p class="level0">
+<p class="level0"><a name="CURLOPTSSHAUTHTYPES"></a><span class="nroffip">CURLOPT_SSH_AUTH_TYPES</span>
+<p class="level1">Pass a long set to a bitmask consisting of one or more of CURLSSH_AUTH_PUBLICKEY, CURLSSH_AUTH_PASSWORD, CURLSSH_AUTH_HOST, CURLSSH_AUTH_KEYBOARD. Set CURLSSH_AUTH_ANY to let libcurl pick one. (Added in 7.16.1)
+<p class="level0"><a name="CURLOPTSSHHOSTPUBLICKEYMD5"></a><span class="nroffip">CURLOPT_SSH_HOST_PUBLIC_KEY_MD5</span>
+<p class="level1">Pass a char * pointing to a string containing 32 hexadecimal digits. The string should be the 128 bit MD5 checksum of the remote host's public key, and libcurl will reject the connection to the host unless the md5sums match. This option is only for SCP and SFTP transfers. (Added in 7.17.1)
+<p class="level0"><a name="CURLOPTSSHPUBLICKEYFILE"></a><span class="nroffip">CURLOPT_SSH_PUBLIC_KEYFILE</span>
+<p class="level1">Pass a char * pointing to a file name for your public key. If not used, libcurl defaults to using <span Class="bold">~/.ssh/id_dsa.pub</span>. (Added in 7.16.1)
+<p class="level0"><a name="CURLOPTSSHPRIVATEKEYFILE"></a><span class="nroffip">CURLOPT_SSH_PRIVATE_KEYFILE</span>
+<p class="level1">Pass a char * pointing to a file name for your private key. If not used, libcurl defaults to using <span Class="bold">~/.ssh/id_dsa</span>. If the file is password-protected, set the password with <a class="emphasis" href="#CURLOPTKEYPASSWD">CURLOPT_KEYPASSWD</a>. (Added in 7.16.1)
+<p class="level0"><a name="CURLOPTSSHKNOWNHOSTS"></a><span class="nroffip">CURLOPT_SSH_KNOWNHOSTS</span>
+<p class="level1">Pass a pointer to a zero terminated string holding the file name of the known_host file to use. The known_hosts file should use the OpenSSH file format as supported by libssh2. If this file is specified, libcurl will only accept connections with hosts that are known and present in that file, with a matching public key. Use <a class="emphasis" href="#CURLOPTSSHKEYFUNCTION">CURLOPT_SSH_KEYFUNCTION</a> to alter the default behavior on host and key (mis)matching. (Added in 7.19.6)
+<p class="level0"><a name="CURLOPTSSHKEYFUNCTION"></a><span class="nroffip">CURLOPT_SSH_KEYFUNCTION</span>
+<p class="level1">Pass a pointer to a curl_sshkeycallback function. It gets called when the known_host matching has been done, to allow the application to act and decide for libcurl how to proceed. It gets passed the CURL handle, the key from the known_hosts file, the key from the remote site, info from libcurl on the matching status and a custom pointer (set with <a class="emphasis" href="#CURLOPTSSHKEYDATA">CURLOPT_SSH_KEYDATA</a>). It MUST return one of the following return codes to tell libcurl how to act:
+<p class="level2">
+<p class="level1"><a name="CURLKHSTATFINEADDTOFILE"></a><span class="nroffip">CURLKHSTAT_FINE_ADD_TO_FILE</span>
+<p class="level2">The host+key is accepted and libcurl will append it to the known_hosts file before continuing with the connection. This will also add the host+key combo to the known_host pool kept in memory if it wasn't already present there. The adding of data to the file is done by completely replacing the file with a new copy, so the permissions of the file must allow this.
+<p class="level1"><a name="CURLKHSTATFINE"></a><span class="nroffip">CURLKHSTAT_FINE</span>
+<p class="level2">The host+key is accepted libcurl will continue with the connection. This will also add the host+key combo to the known_host pool kept in memory if it wasn't already present there.
+<p class="level1"><a name="CURLKHSTATREJECT"></a><span class="nroffip">CURLKHSTAT_REJECT</span>
+<p class="level2">The host+key is rejected. libcurl will deny the connection to continue and it will be closed.
+<p class="level1"><a name="CURLKHSTATDEFER"></a><span class="nroffip">CURLKHSTAT_DEFER</span>
+<p class="level2">The host+key is rejected, but the SSH connection is asked to be kept alive. This feature could be used when the app wants to somehow return back and act on the host+key situation and then retry without needing the overhead of setting it up from scratch again.
+<p class="level1">&nbsp;(Added in 7.19.6)
+<p class="level0"><a name="CURLOPTSSHKEYDATA"></a><span class="nroffip">CURLOPT_SSH_KEYDATA</span>
+<p class="level1">Pass a void * as parameter. This pointer will be passed along verbatim to the callback set with <a class="emphasis" href="#CURLOPTSSHKEYFUNCTION">CURLOPT_SSH_KEYFUNCTION</a>. (Added in 7.19.6) <a name="OTHER"></a><h2 class="nroffsh">OTHER OPTIONS</h2>
+<p class="level0">
+<p class="level0"><a name="CURLOPTPRIVATE"></a><span class="nroffip">CURLOPT_PRIVATE</span>
+<p class="level1">Pass a void * as parameter, pointing to data that should be associated with this curl handle. The pointer can subsequently be retrieved using <a class="emphasis" href="./curl_easy_getinfo.html">curl_easy_getinfo(3)</a> with the CURLINFO_PRIVATE option. libcurl itself does nothing with this data. (Added in 7.10.3)
+<p class="level0"><a name="CURLOPTSHARE"></a><span class="nroffip">CURLOPT_SHARE</span>
+<p class="level1">Pass a share handle as a parameter. The share handle must have been created by a previous call to <a class="emphasis" href="./curl_share_init.html">curl_share_init(3)</a>. Setting this option, will make this curl handle use the data from the shared handle instead of keeping the data to itself. This enables several curl handles to share data. If the curl handles are used simultaneously in multiple threads, you <span Class="bold">MUST</span> use the locking methods in the share handle. See <a class="emphasis" href="./curl_share_setopt.html">curl_share_setopt(3)</a> for details.
+<p class="level1">If you add a share that is set to share cookies, your easy handle will use that cookie cache and get the cookie engine enabled. If you unshare an object that was using cookies (or change to another object that doesn't share cookies), the easy handle will get its cookie engine disabled.
+<p class="level1">Data that the share object is not set to share will be dealt with the usual way, as if no share was used.
+<p class="level0"><a name="CURLOPTNEWFILEPERMS"></a><span class="nroffip">CURLOPT_NEW_FILE_PERMS</span>
+<p class="level1">Pass a long as a parameter, containing the value of the permissions that will be assigned to newly created files on the remote server. The default value is <span Class="emphasis">0644</span>, but any valid value can be used. The only protocols that can use this are <span Class="emphasis">sftp://</span>, <span Class="emphasis">scp://</span>, and <span Class="emphasis">file://</span>. (Added in 7.16.4)
+<p class="level0"><a name="CURLOPTNEWDIRECTORYPERMS"></a><span class="nroffip">CURLOPT_NEW_DIRECTORY_PERMS</span>
+<p class="level1">Pass a long as a parameter, containing the value of the permissions that will be assigned to newly created directories on the remote server. The default value is <span Class="emphasis">0755</span>, but any valid value can be used. The only protocols that can use this are <span Class="emphasis">sftp://</span>, <span Class="emphasis">scp://</span>, and <span Class="emphasis">file://</span>. (Added in 7.16.4) <a name="TELNET"></a><h2 class="nroffsh">TELNET OPTIONS</h2>
+<p class="level0">
+<p class="level0"><a name="CURLOPTTELNETOPTIONS"></a><span class="nroffip">CURLOPT_TELNETOPTIONS</span>
+<p class="level1">Provide a pointer to a curl_slist with variables to pass to the telnet negotiations. The variables should be in the format &lt;option=value&gt;. libcurl supports the options 'TTYPE', 'XDISPLOC' and 'NEW_ENV'. See the TELNET standard for details. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">CURLE_OK (zero) means that the option was set properly, non-zero means an error occurred as <span Class="emphasis">&lt;curl/curl.h&gt;</span> defines. See the <span Class="emphasis">libcurl-errors(3)</span> man page for the full list with descriptions.
+<p class="level0">If you try to set an option that libcurl doesn't know about, perhaps because the library is too old to support it or the option was removed in a recent version, this function will return <span Class="emphasis">CURLE_FAILED_INIT</span>. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><a class="manpage" href="./curl_easy_init.html">curl_easy_init (3)</a> <a class="manpage" href="./curl_easy_cleanup.html"> curl_easy_cleanup (3)</a> <a class="manpage" href="./curl_easy_reset.html"> curl_easy_reset (3)</a> <p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_easy_setopt.pdf b/docs/libcurl/curl_easy_setopt.pdf
new file mode 100644
index 0000000..9723fb1
--- /dev/null
+++ b/docs/libcurl/curl_easy_setopt.pdf
Binary files differ
diff --git a/docs/libcurl/curl_easy_strerror.3 b/docs/libcurl/curl_easy_strerror.3
new file mode 100644
index 0000000..1afbd12
--- /dev/null
+++ b/docs/libcurl/curl_easy_strerror.3
@@ -0,0 +1,19 @@
+.\" You can view this file with:
+.\" nroff -man [file]
+.\"
+.TH curl_easy_strerror 3 "26 Apr 2004" "libcurl 7.12" "libcurl Manual"
+.SH NAME
+curl_easy_strerror - return string describing error code
+.SH SYNOPSIS
+.nf
+.B #include <curl/curl.h>
+.BI "const char *curl_easy_strerror(CURLcode " errornum ");"
+.SH DESCRIPTION
+The curl_easy_strerror() function returns a string describing the CURLcode
+error code passed in the argument \fIerrornum\fP.
+.SH AVAILABILITY
+This function was added in libcurl 7.12.0
+.SH RETURN VALUE
+A pointer to a zero terminated string.
+.SH "SEE ALSO"
+.BR libcurl-errors "(3), " curl_multi_strerror "(3), " curl_share_strerror "(3)"
diff --git a/docs/libcurl/curl_easy_strerror.html b/docs/libcurl/curl_easy_strerror.html
new file mode 100644
index 0000000..1dcca6c
--- /dev/null
+++ b/docs/libcurl/curl_easy_strerror.html
@@ -0,0 +1,58 @@
+<html><head>
+<title>curl_easy_strerror man page</title>
+<meta name="generator" content="roffit 0.7">
+<STYLE type="text/css">
+P.level0 {
+ padding-left: 2em;
+}
+
+P.level1 {
+ padding-left: 4em;
+}
+
+P.level2 {
+ padding-left: 6em;
+}
+
+span.emphasis {
+ font-style: italic;
+}
+
+span.bold {
+ font-weight: bold;
+}
+
+span.manpage {
+ font-weight: bold;
+}
+
+h2.nroffsh {
+ background-color: #e0e0e0;
+}
+
+span.nroffip {
+ font-weight: bold;
+ font-size: 120%;
+ font-family: monospace;
+}
+
+p.roffit {
+ text-align: center;
+ font-size: 80%;
+}
+</STYLE>
+</head><body>
+
+<p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
+<p class="level0">curl_easy_strerror - return string describing error code <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><pre>
+<p class="level0"><span Class="bold">#include &lt;curl/curl.h&gt;</span>
+<span Class="bold">const char *curl_easy_strerror(CURLcode errornum );</span>
+</pre>
+<a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">The curl_easy_strerror() function returns a string describing the CURLcode error code passed in the argument <span Class="emphasis">errornum</span>. <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">This function was added in libcurl 7.12.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">A pointer to a zero terminated string. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><span Class="manpage">libcurl-errors (3)</span> <a class="manpage" href="./curl_multi_strerror.html"> curl_multi_strerror (3)</a> <a class="manpage" href="./curl_share_strerror.html"> curl_share_strerror (3)</a> <p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_easy_strerror.pdf b/docs/libcurl/curl_easy_strerror.pdf
new file mode 100644
index 0000000..ae50e6e
--- /dev/null
+++ b/docs/libcurl/curl_easy_strerror.pdf
@@ -0,0 +1,108 @@
+%PDF-1.4
+%Çì¢
+5 0 obj
+<</Length 6 0 R/Filter /FlateDecode>>
+stream
+xœ•Tmo›0þί8iÕpmc^¬M“hM™Ò¤Kh¥**JhÊ”–UÛ¯ßÙBšTÕ„Äœïyîyîü ”0 êjŸÉÚ8ú°,
+ßñ^ÏÓÐ>’5œE¨…èÁhö1ð9øB@´6ó‰Ë z1æfR«»4.ÿÜ•U‘Ŧ¸5[ VÙ½údÙÜ¥„Rß¼ˆó:^ÁñÖ¯è‡aS™„(At‰èDºŠ€ãA42Ìqh}DÂø•¹Ä•’Š†y1°¢ß=ºœA}°WŸ©by„$ØP¤U]ä€+Y¾„EZ&Ev¯^›€d³H›Ì=*6r±™G =»O.gÃÙ.¬¥Û‚›²<YÕ‹¾(§ê‡<~Uá*`dD'(à&/+HãNöxZ, ”¹ÌD>Ý»’ëüj:Òì”f§SF·F.¡^#Ë\ï®’ÞÁ]y½nÃ;šá­„·ÖçÃJ¹+ ïWûm0;Ÿ/£ád¼¯ø®`J<­wô˜5ûâ¡Î“*Ûä­ü%ÄG¨pÿ¶Êžð—eº€,×q¡x”ÆóÛJ–µ­ÖìvqëÃ:Í«†s'çÄ}Oª®@Ÿe-ÑŒ¸ApЪ¶ôˆ£B;Ù0
+-Jx ¡Úª[»ÔsÙÖ€á(<Ž†Ñ;°ØçŽ@”~/ÏQܬÜÉøbI"%÷3F-‹FžvúÀ'ŒÚsþXÏÍé ºšŽáÚbŽ Òcf8ºè]J%]ä¡ÙføÔ•Ãñ™”m9›,¯Òª šû7-6€ÿÖYWH®1›ö:Eo¼G³É[ã57Û2m=!>‘ðÐÀò•}n@˜ ]³«ãæÓ~N„ô¼mD{¦­ëU•5sˆ™¥Ã_Íá+@êÊà?AJû]þnꩼ‹&¸ôûhº+¹t•ž(¦ØSH7‚…Òr×ĹŸ
+à”
+XxÛÓ”©4ƒÈø‰×?­…›endstream
+endobj
+6 0 obj
+721
+endobj
+4 0 obj
+<</Type/Page/MediaBox [0 0 612 792]
+/Rotate 0/Parent 3 0 R
+/Resources<</ProcSet[/PDF /Text]
+/ExtGState 11 0 R
+/Font 12 0 R
+>>
+/Contents 5 0 R
+>>
+endobj
+3 0 obj
+<< /Type /Pages /Kids [
+4 0 R
+] /Count 1
+>>
+endobj
+1 0 obj
+<</Type /Catalog /Pages 3 0 R
+/Metadata 13 0 R
+>>
+endobj
+7 0 obj
+<</Type/ExtGState
+/OPM 1>>endobj
+11 0 obj
+<</R7
+7 0 R>>
+endobj
+12 0 obj
+<</R10
+10 0 R/R9
+9 0 R/R8
+8 0 R>>
+endobj
+10 0 obj
+<</BaseFont/Times-Italic/Type/Font
+/Subtype/Type1>>
+endobj
+9 0 obj
+<</BaseFont/Times-Bold/Type/Font
+/Subtype/Type1>>
+endobj
+8 0 obj
+<</BaseFont/Times-Roman/Type/Font
+/Subtype/Type1>>
+endobj
+13 0 obj
+<</Type/Metadata
+/Subtype/XML/Length 1321>>stream
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<?adobe-xap-filters esc="CRLF"?>
+<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+<rdf:Description rdf:about='3542fb5a-0e69-11eb-0000-1db77fb63b0c' xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 8.71'/>
+<rdf:Description rdf:about='3542fb5a-0e69-11eb-0000-1db77fb63b0c' xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2010-10-13T00:04:18+02:00</xmp:ModifyDate>
+<xmp:CreateDate>2010-10-13T00:04:18+02:00</xmp:CreateDate>
+<xmp:CreatorTool>groff version 1.20.1</xmp:CreatorTool></rdf:Description>
+<rdf:Description rdf:about='3542fb5a-0e69-11eb-0000-1db77fb63b0c' xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='3542fb5a-0e69-11eb-0000-1db77fb63b0c'/>
+<rdf:Description rdf:about='3542fb5a-0e69-11eb-0000-1db77fb63b0c' xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>Untitled</rdf:li></rdf:Alt></dc:title></rdf:Description>
+</rdf:RDF>
+</x:xmpmeta>
+
+
+<?xpacket end='w'?>
+endstream
+endobj
+2 0 obj
+<</Producer(GPL Ghostscript 8.71)
+/CreationDate(D:20101013000418+02'00')
+/ModDate(D:20101013000418+02'00')
+/Creator(groff version 1.20.1)>>endobj
+xref
+0 14
+0000000000 65535 f
+0000001044 00000 n
+0000002827 00000 n
+0000000985 00000 n
+0000000825 00000 n
+0000000015 00000 n
+0000000806 00000 n
+0000001109 00000 n
+0000001363 00000 n
+0000001298 00000 n
+0000001230 00000 n
+0000001150 00000 n
+0000001180 00000 n
+0000001429 00000 n
+trailer
+<< /Size 14 /Root 1 0 R /Info 2 0 R
+/ID [<EEB2A5763C0B6FFAD180418B9853F3B5><EEB2A5763C0B6FFAD180418B9853F3B5>]
+>>
+startxref
+2981
+%%EOF
diff --git a/docs/libcurl/curl_easy_unescape.3 b/docs/libcurl/curl_easy_unescape.3
new file mode 100644
index 0000000..9b03fd0
--- /dev/null
+++ b/docs/libcurl/curl_easy_unescape.3
@@ -0,0 +1,51 @@
+.\" **************************************************************************
+.\" * _ _ ____ _
+.\" * Project ___| | | | _ \| |
+.\" * / __| | | | |_) | |
+.\" * | (__| |_| | _ <| |___
+.\" * \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2008, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" *
+.\" * This software is licensed as described in the file COPYING, which
+.\" * you should have received as part of this distribution. The terms
+.\" * are also available at http://curl.haxx.se/docs/copyright.html.
+.\" *
+.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+.\" * copies of the Software, and permit persons to whom the Software is
+.\" * furnished to do so, under the terms of the COPYING file.
+.\" *
+.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+.\" * KIND, either express or implied.
+.\" *
+.\" **************************************************************************
+.\"
+.TH curl_easy_unescape 3 "7 April 2006" "libcurl 7.15.4" "libcurl Manual"
+.SH NAME
+curl_easy_unescape - URL decodes the given string
+.SH SYNOPSIS
+.B #include <curl/curl.h>
+.sp
+.BI "char *curl_easy_unescape( CURL *" curl ", char *" url ", int "inlength
+.BI ", int *" outlength " );"
+.ad
+.SH DESCRIPTION
+This function converts the given URL encoded input string to a "plain string"
+and returns that in an allocated memory area. All input characters that are
+URL encoded (%XX where XX is a two-digit hexadecimal number) are converted to
+their binary versions.
+
+If the \fBlength\fP argument is set to 0 (zero), \fIcurl_easy_unescape(3)\fP
+will use strlen() on the input \fIurl\fP string to find out the size.
+
+If \fBoutlength\fP is non-NULL, the function will write the length of the
+returned string in the integer it points to. This allows an escaped string
+containing %00 to still get used properly after unescaping.
+
+You must \fIcurl_free(3)\fP the returned string when you're done with it.
+.SH AVAILABILITY
+Added in 7.15.4 and replaces the old \fIcurl_unescape(3)\fP function.
+.SH RETURN VALUE
+A pointer to a zero terminated string or NULL if it failed.
+.SH "SEE ALSO"
+.I curl_easy_escape(3), curl_free(3), RFC 2396
diff --git a/docs/libcurl/curl_easy_unescape.html b/docs/libcurl/curl_easy_unescape.html
new file mode 100644
index 0000000..3844862
--- /dev/null
+++ b/docs/libcurl/curl_easy_unescape.html
@@ -0,0 +1,59 @@
+<html><head>
+<title>curl_easy_unescape man page</title>
+<meta name="generator" content="roffit 0.7">
+<STYLE type="text/css">
+P.level0 {
+ padding-left: 2em;
+}
+
+P.level1 {
+ padding-left: 4em;
+}
+
+P.level2 {
+ padding-left: 6em;
+}
+
+span.emphasis {
+ font-style: italic;
+}
+
+span.bold {
+ font-weight: bold;
+}
+
+span.manpage {
+ font-weight: bold;
+}
+
+h2.nroffsh {
+ background-color: #e0e0e0;
+}
+
+span.nroffip {
+ font-weight: bold;
+ font-size: 120%;
+ font-family: monospace;
+}
+
+p.roffit {
+ text-align: center;
+ font-size: 80%;
+}
+</STYLE>
+</head><body>
+
+<p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
+<p class="level0">curl_easy_unescape - URL decodes the given string <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><span Class="bold">#include &lt;curl/curl.h&gt;</span>
+<p class="level0"><span Class="bold">char *curl_easy_unescape( CURL * curl , char * url , int inlength</span> <span Class="bold">, int * outlength );</span>
+<p class="level0"><a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">This function converts the given URL encoded input string to a "plain string" and returns that in an allocated memory area. All input characters that are URL encoded (%XX where XX is a two-digit hexadecimal number) are converted to their binary versions.
+<p class="level0">If the <span Class="bold">length</span> argument is set to 0 (zero), <a class="emphasis" href="./curl_easy_unescape.html">curl_easy_unescape(3)</a> will use strlen() on the input <span Class="emphasis">url</span> string to find out the size.
+<p class="level0">If <span Class="bold">outlength</span> is non-NULL, the function will write the length of the returned string in the integer it points to. This allows an escaped string containing %00 to still get used properly after unescaping.
+<p class="level0">You must <a class="emphasis" href="./curl_free.html">curl_free(3)</a> the returned string when you're done with it. <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Added in 7.15.4 and replaces the old <a class="emphasis" href="./curl_unescape.html">curl_unescape(3)</a> function. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">A pointer to a zero terminated string or NULL if it failed. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><span Class="emphasis">curl_easy_escape(3), curl_free(3), RFC 2396</span> <p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_easy_unescape.pdf b/docs/libcurl/curl_easy_unescape.pdf
new file mode 100644
index 0000000..9c06ecd
--- /dev/null
+++ b/docs/libcurl/curl_easy_unescape.pdf
Binary files differ
diff --git a/docs/libcurl/curl_escape.3 b/docs/libcurl/curl_escape.3
new file mode 100644
index 0000000..5990615
--- /dev/null
+++ b/docs/libcurl/curl_escape.3
@@ -0,0 +1,30 @@
+.\" You can view this file with:
+.\" nroff -man [file]
+.\"
+.TH curl_escape 3 "6 March 2002" "libcurl 7.9" "libcurl Manual"
+.SH NAME
+curl_escape - URL encodes the given string
+.SH SYNOPSIS
+.B #include <curl/curl.h>
+.sp
+.BI "char *curl_escape( char *" url ", int "length " );"
+.ad
+.SH DESCRIPTION
+Obsolete function. Use \fIcurl_easy_escape(3)\fP instead!
+
+This function will convert the given input string to an URL encoded string and
+return that as a new allocated string. All input characters that are not a-z,
+A-Z or 0-9 will be converted to their "URL escaped" version (%NN where NN is a
+two-digit hexadecimal number).
+
+If the 'length' argument is set to 0, curl_escape() will use strlen() on the
+input 'url' string to find out the size.
+
+You must curl_free() the returned string when you're done with it.
+.SH AVAILABILITY
+Since 7.15.4, \fIcurl_easy_escape(3)\fP should be used. This function will
+be removed in a future release.
+.SH RETURN VALUE
+A pointer to a zero terminated string or NULL if it failed.
+.SH "SEE ALSO"
+.BR curl_unescape "(3), " curl_free "(3), " RFC 2396
diff --git a/docs/libcurl/curl_escape.html b/docs/libcurl/curl_escape.html
new file mode 100644
index 0000000..4e1c6ff
--- /dev/null
+++ b/docs/libcurl/curl_escape.html
@@ -0,0 +1,59 @@
+<html><head>
+<title>curl_escape man page</title>
+<meta name="generator" content="roffit 0.7">
+<STYLE type="text/css">
+P.level0 {
+ padding-left: 2em;
+}
+
+P.level1 {
+ padding-left: 4em;
+}
+
+P.level2 {
+ padding-left: 6em;
+}
+
+span.emphasis {
+ font-style: italic;
+}
+
+span.bold {
+ font-weight: bold;
+}
+
+span.manpage {
+ font-weight: bold;
+}
+
+h2.nroffsh {
+ background-color: #e0e0e0;
+}
+
+span.nroffip {
+ font-weight: bold;
+ font-size: 120%;
+ font-family: monospace;
+}
+
+p.roffit {
+ text-align: center;
+ font-size: 80%;
+}
+</STYLE>
+</head><body>
+
+<p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
+<p class="level0">curl_escape - URL encodes the given string <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><span Class="bold">#include &lt;curl/curl.h&gt;</span>
+<p class="level0"><span Class="bold">char *curl_escape( char * url , int length );</span>
+<p class="level0"><a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">Obsolete function. Use <a class="emphasis" href="./curl_easy_escape.html">curl_easy_escape(3)</a> instead!
+<p class="level0">This function will convert the given input string to an URL encoded string and return that as a new allocated string. All input characters that are not a-z, A-Z or 0-9 will be converted to their "URL escaped" version (%NN where NN is a two-digit hexadecimal number).
+<p class="level0">If the 'length' argument is set to 0, curl_escape() will use strlen() on the input 'url' string to find out the size.
+<p class="level0">You must curl_free() the returned string when you're done with it. <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Since 7.15.4, <a class="emphasis" href="./curl_easy_escape.html">curl_easy_escape(3)</a> should be used. This function will be removed in a future release. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">A pointer to a zero terminated string or NULL if it failed. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><a class="manpage" href="./curl_unescape.html">curl_unescape (3)</a> <a class="manpage" href="./curl_free.html"> curl_free (3)</a> <span Class="manpage"> RFC 2396</span> <p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_escape.pdf b/docs/libcurl/curl_escape.pdf
new file mode 100644
index 0000000..f8b8613
--- /dev/null
+++ b/docs/libcurl/curl_escape.pdf
Binary files differ
diff --git a/docs/libcurl/curl_formadd.3 b/docs/libcurl/curl_formadd.3
new file mode 100644
index 0000000..06757ed
--- /dev/null
+++ b/docs/libcurl/curl_formadd.3
@@ -0,0 +1,216 @@
+.\" You can view this file with:
+.\" nroff -man [file]
+.\"
+.TH curl_formadd 3 "24 June 2002" "libcurl 7.9.8" "libcurl Manual"
+.SH NAME
+curl_formadd - add a section to a multipart/formdata HTTP POST
+.SH SYNOPSIS
+.B #include <curl/curl.h>
+.sp
+.BI "CURLFORMcode curl_formadd(struct curl_httppost ** " firstitem,
+.BI "struct curl_httppost ** " lastitem, " ...);"
+.ad
+.SH DESCRIPTION
+curl_formadd() is used to append sections when building a multipart/formdata
+HTTP POST (sometimes referred to as RFC2388-style posts). Append one section at
+a time until you've added all the sections you want included and then you pass
+the \fIfirstitem\fP pointer as parameter to \fBCURLOPT_HTTPPOST\fP.
+\fIlastitem\fP is set after each call and on repeated invokes it should be
+left as set to allow repeated invokes to find the end of the list faster.
+
+After the \fIlastitem\fP pointer follow the real arguments.
+
+The pointers \fI*firstitem\fP and \fI*lastitem\fP should both be pointing to
+NULL in the first call to this function. All list-data will be allocated by
+the function itself. You must call \fIcurl_formfree(3)\fP after the form post
+has been done to free the resources.
+
+Using POST with HTTP 1.1 implies the use of a "Expect: 100-continue" header.
+You can disable this header with \fICURLOPT_HTTPHEADER\fP as usual.
+
+First, there are some basics you need to understand about multipart/formdata
+posts. Each part consists of at least a NAME and a CONTENTS part. If the part
+is made for file upload, there are also a stored CONTENT-TYPE and a FILENAME.
+Below, we'll discuss what options you use to set these properties in the
+parts you want to add to your post.
+
+The options listed first are for making normal parts. The options from
+\fICURLFORM_FILE\fP through \fICURLFORM_BUFFERLENGTH\fP are for file upload
+parts.
+.SH OPTIONS
+.IP CURLFORM_COPYNAME
+followed by a string which provides the \fIname\fP of this part. libcurl
+copies the string so your application doesn't need to keep it around after
+this function call. If the name isn't NUL-terminated, or if you'd
+like it to contain zero bytes, you must set its length with
+\fBCURLFORM_NAMELENGTH\fP. The copied data will be freed by
+\fIcurl_formfree(3)\fP.
+.IP CURLFORM_PTRNAME
+followed by a string which provides the \fIname\fP of this part. libcurl
+will use the pointer and refer to the data in your application, so you
+must make sure it remains until curl no longer needs it. If the name
+isn't NUL-terminated, or if you'd like it to contain zero
+bytes, you must set its length with \fBCURLFORM_NAMELENGTH\fP.
+.IP CURLFORM_COPYCONTENTS
+followed by a pointer to the contents of this part, the actual data
+to send away. libcurl copies the provided data, so your application doesn't
+need to keep it around after this function call. If the data isn't null
+terminated, or if you'd like it to contain zero bytes, you must
+set the length of the name with \fBCURLFORM_CONTENTSLENGTH\fP. The copied
+data will be freed by \fIcurl_formfree(3)\fP.
+.IP CURLFORM_PTRCONTENTS
+followed by a pointer to the contents of this part, the actual data
+to send away. libcurl will use the pointer and refer to the data in your
+application, so you must make sure it remains until curl no longer needs it.
+If the data isn't NUL-terminated, or if you'd like it to contain zero bytes,
+you must set its length with \fBCURLFORM_CONTENTSLENGTH\fP.
+.IP CURLFORM_CONTENTSLENGTH
+followed by a long giving the length of the contents. Note that for
+\fICURLFORM_STREAM\fP contents, this option is mandatory.
+.IP CURLFORM_FILECONTENT
+followed by a filename, causes that file to be read and its contents used
+as data in this part. This part does \fInot\fP automatically become a file
+upload part simply because its data was read from a file.
+.IP CURLFORM_FILE
+followed by a filename, makes this part a file upload part. It sets the
+\fIfilename\fP field to the basename of the provided filename, it reads the
+contents of the file and passes them as data and sets the content-type if the
+given file match one of the internally known file extensions. For
+\fBCURLFORM_FILE\fP the user may send one or more files in one part by
+providing multiple \fBCURLFORM_FILE\fP arguments each followed by the filename
+(and each \fICURLFORM_FILE\fP is allowed to have a
+\fICURLFORM_CONTENTTYPE\fP).
+.IP CURLFORM_CONTENTTYPE
+is used in combination with \fICURLFORM_FILE\fP. Followed by a pointer to a
+string which provides the content-type for this part, possibly instead of an
+internally chosen one.
+.IP CURLFORM_FILENAME
+is used in combination with \fICURLFORM_FILE\fP. Followed by a pointer to a
+string, it tells libcurl to use the given string as the \fIfilename\fP in the
+file upload part instead of the actual file name.
+.IP CURLFORM_BUFFER
+is used for custom file upload parts without use of \fICURLFORM_FILE\fP. It
+tells libcurl that the file contents are already present in a buffer. The
+parameter is a string which provides the \fIfilename\fP field in the content
+header.
+.IP CURLFORM_BUFFERPTR
+is used in combination with \fICURLFORM_BUFFER\fP. The parameter is a pointer
+to the buffer to be uploaded. This buffer must not be freed until after
+\fIcurl_easy_cleanup(3)\fP is called. You must also use
+\fICURLFORM_BUFFERLENGTH\fP to set the number of bytes in the buffer.
+.IP CURLFORM_BUFFERLENGTH
+is used in combination with \fICURLFORM_BUFFER\fP. The parameter is a
+long which gives the length of the buffer.
+.IP CURLFORM_STREAM
+Tells libcurl to use the \fICURLOPT_READFUNCTION\fP callback to get data. The
+parameter you pass to \fICURLFORM_STREAM\fP is the pointer passed on to the
+read callback's fourth argument. If you want the part to look like a file
+upload one, set the \fICURLFORM_FILENAME\fP parameter as well. Note that when
+using \fICURLFORM_STREAM\fP, \fICURLFORM_CONTENTSLENGTH\fP must also be set
+with the total expected length of the part. (Option added in libcurl 7.18.2)
+.IP CURLFORM_ARRAY
+Another possibility to send options to curl_formadd() is the
+\fBCURLFORM_ARRAY\fP option, that passes a struct curl_forms array pointer as
+its value. Each curl_forms structure element has a CURLformoption and a char
+pointer. The final element in the array must be a CURLFORM_END. All available
+options can be used in an array, except the CURLFORM_ARRAY option itself! The
+last argument in such an array must always be \fBCURLFORM_END\fP.
+.IP CURLFORM_CONTENTHEADER
+specifies extra headers for the form POST section. This takes a curl_slist
+prepared in the usual way using \fBcurl_slist_append\fP and appends the list
+of headers to those libcurl automatically generates. The list must exist while
+the POST occurs, if you free it before the post completes you may experience
+problems.
+
+When you've passed the HttpPost pointer to \fIcurl_easy_setopt(3)\fP (using
+the \fICURLOPT_HTTPPOST\fP option), you must not free the list until after
+you've called \fIcurl_easy_cleanup(3)\fP for the curl handle.
+
+See example below.
+.SH RETURN VALUE
+0 means everything was ok, non-zero means an error occurred corresponding
+to a CURL_FORMADD_* constant defined in
+.I <curl/curl.h>
+.SH EXAMPLE
+.nf
+
+ struct curl_httppost* post = NULL;
+ struct curl_httppost* last = NULL;
+ char namebuffer[] = "name buffer";
+ long namelength = strlen(namebuffer);
+ char buffer[] = "test buffer";
+ char htmlbuffer[] = "<HTML>test buffer</HTML>";
+ long htmlbufferlength = strlen(htmlbuffer);
+ struct curl_forms forms[3];
+ char file1[] = "my-face.jpg";
+ char file2[] = "your-face.jpg";
+ /* add null character into htmlbuffer, to demonstrate that
+ transfers of buffers containing null characters actually work
+ */
+ htmlbuffer[8] = '\\0';
+
+ /* Add simple name/content section */
+ curl_formadd(&post, &last, CURLFORM_COPYNAME, "name",
+ CURLFORM_COPYCONTENTS, "content", CURLFORM_END);
+
+ /* Add simple name/content/contenttype section */
+ curl_formadd(&post, &last, CURLFORM_COPYNAME, "htmlcode",
+ CURLFORM_COPYCONTENTS, "<HTML></HTML>",
+ CURLFORM_CONTENTTYPE, "text/html", CURLFORM_END);
+
+ /* Add name/ptrcontent section */
+ curl_formadd(&post, &last, CURLFORM_COPYNAME, "name_for_ptrcontent",
+ CURLFORM_PTRCONTENTS, buffer, CURLFORM_END);
+
+ /* Add ptrname/ptrcontent section */
+ curl_formadd(&post, &last, CURLFORM_PTRNAME, namebuffer,
+ CURLFORM_PTRCONTENTS, buffer, CURLFORM_NAMELENGTH,
+ namelength, CURLFORM_END);
+
+ /* Add name/ptrcontent/contenttype section */
+ curl_formadd(&post, &last, CURLFORM_COPYNAME, "html_code_with_hole",
+ CURLFORM_PTRCONTENTS, htmlbuffer,
+ CURLFORM_CONTENTSLENGTH, htmlbufferlength,
+ CURLFORM_CONTENTTYPE, "text/html", CURLFORM_END);
+
+ /* Add simple file section */
+ curl_formadd(&post, &last, CURLFORM_COPYNAME, "picture",
+ CURLFORM_FILE, "my-face.jpg", CURLFORM_END);
+
+ /* Add file/contenttype section */
+ curl_formadd(&post, &last, CURLFORM_COPYNAME, "picture",
+ CURLFORM_FILE, "my-face.jpg",
+ CURLFORM_CONTENTTYPE, "image/jpeg", CURLFORM_END);
+
+ /* Add two file section */
+ curl_formadd(&post, &last, CURLFORM_COPYNAME, "pictures",
+ CURLFORM_FILE, "my-face.jpg",
+ CURLFORM_FILE, "your-face.jpg", CURLFORM_END);
+
+ /* Add two file section using CURLFORM_ARRAY */
+ forms[0].option = CURLFORM_FILE;
+ forms[0].value = file1;
+ forms[1].option = CURLFORM_FILE;
+ forms[1].value = file2;
+ forms[2].option = CURLFORM_END;
+
+ /* Add a buffer to upload */
+ curl_formadd(&post, &last,
+ CURLFORM_COPYNAME, "name",
+ CURLFORM_BUFFER, "data",
+ CURLFORM_BUFFERPTR, record,
+ CURLFORM_BUFFERLENGTH, record_length,
+ CURLFORM_END);
+
+ /* no option needed for the end marker */
+ curl_formadd(&post, &last, CURLFORM_COPYNAME, "pictures",
+ CURLFORM_ARRAY, forms, CURLFORM_END);
+ /* Add the content of a file as a normal post text value */
+ curl_formadd(&post, &last, CURLFORM_COPYNAME, "filecontent",
+ CURLFORM_FILECONTENT, ".bashrc", CURLFORM_END);
+ /* Set the form info */
+ curl_easy_setopt(curl, CURLOPT_HTTPPOST, post);
+
+.SH "SEE ALSO"
+.BR curl_easy_setopt "(3), "
+.BR curl_formfree "(3)"
diff --git a/docs/libcurl/curl_formadd.html b/docs/libcurl/curl_formadd.html
new file mode 100644
index 0000000..f6557db
--- /dev/null
+++ b/docs/libcurl/curl_formadd.html
@@ -0,0 +1,161 @@
+<html><head>
+<title>curl_formadd man page</title>
+<meta name="generator" content="roffit 0.7">
+<STYLE type="text/css">
+P.level0 {
+ padding-left: 2em;
+}
+
+P.level1 {
+ padding-left: 4em;
+}
+
+P.level2 {
+ padding-left: 6em;
+}
+
+span.emphasis {
+ font-style: italic;
+}
+
+span.bold {
+ font-weight: bold;
+}
+
+span.manpage {
+ font-weight: bold;
+}
+
+h2.nroffsh {
+ background-color: #e0e0e0;
+}
+
+span.nroffip {
+ font-weight: bold;
+ font-size: 120%;
+ font-family: monospace;
+}
+
+p.roffit {
+ text-align: center;
+ font-size: 80%;
+}
+</STYLE>
+</head><body>
+
+<p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
+<p class="level0">curl_formadd - add a section to a multipart/formdata HTTP POST <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><span Class="bold">#include &lt;curl/curl.h&gt;</span>
+<p class="level0"><span Class="bold">CURLFORMcode curl_formadd(struct curl_httppost ** firstitem,</span> <span Class="bold">struct curl_httppost ** lastitem, ...);</span>
+<p class="level0"><a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">curl_formadd() is used to append sections when building a multipart/formdata HTTP POST (sometimes referred to as RFC2388-style posts). Append one section at a time until you've added all the sections you want included and then you pass the <span Class="emphasis">firstitem</span> pointer as parameter to <span Class="bold">CURLOPT_HTTPPOST</span>. <span Class="emphasis">lastitem</span> is set after each call and on repeated invokes it should be left as set to allow repeated invokes to find the end of the list faster.
+<p class="level0">After the <span Class="emphasis">lastitem</span> pointer follow the real arguments.
+<p class="level0">The pointers <span Class="emphasis">*firstitem</span> and <span Class="emphasis">*lastitem</span> should both be pointing to NULL in the first call to this function. All list-data will be allocated by the function itself. You must call <a class="emphasis" href="./curl_formfree.html">curl_formfree(3)</a> after the form post has been done to free the resources.
+<p class="level0">Using POST with HTTP 1.1 implies the use of a "Expect: 100-continue" header. You can disable this header with <span Class="emphasis">CURLOPT_HTTPHEADER</span> as usual.
+<p class="level0">First, there are some basics you need to understand about multipart/formdata posts. Each part consists of at least a NAME and a CONTENTS part. If the part is made for file upload, there are also a stored CONTENT-TYPE and a FILENAME. Below, we'll discuss what options you use to set these properties in the parts you want to add to your post.
+<p class="level0">The options listed first are for making normal parts. The options from <a class="emphasis" href="#CURLFORMFILE">CURLFORM_FILE</a> through <a class="emphasis" href="#CURLFORMBUFFERLENGTH">CURLFORM_BUFFERLENGTH</a> are for file upload parts. <a name="OPTIONS"></a><h2 class="nroffsh">OPTIONS</h2>
+<p class="level0">
+<p class="level0"><a name="CURLFORMCOPYNAME"></a><span class="nroffip">CURLFORM_COPYNAME</span>
+<p class="level1">followed by a string which provides the <span Class="emphasis">name</span> of this part. libcurl copies the string so your application doesn't need to keep it around after this function call. If the name isn't NUL-terminated, or if you'd like it to contain zero bytes, you must set its length with <span Class="bold">CURLFORM_NAMELENGTH</span>. The copied data will be freed by <a class="emphasis" href="./curl_formfree.html">curl_formfree(3)</a>.
+<p class="level0"><a name="CURLFORMPTRNAME"></a><span class="nroffip">CURLFORM_PTRNAME</span>
+<p class="level1">followed by a string which provides the <span Class="emphasis">name</span> of this part. libcurl will use the pointer and refer to the data in your application, so you must make sure it remains until curl no longer needs it. If the name isn't NUL-terminated, or if you'd like it to contain zero bytes, you must set its length with <span Class="bold">CURLFORM_NAMELENGTH</span>.
+<p class="level0"><a name="CURLFORMCOPYCONTENTS"></a><span class="nroffip">CURLFORM_COPYCONTENTS</span>
+<p class="level1">followed by a pointer to the contents of this part, the actual data to send away. libcurl copies the provided data, so your application doesn't need to keep it around after this function call. If the data isn't null terminated, or if you'd like it to contain zero bytes, you must set the length of the name with <a class="bold" href="#CURLFORMCONTENTSLENGTH">CURLFORM_CONTENTSLENGTH</a>. The copied data will be freed by <a class="emphasis" href="./curl_formfree.html">curl_formfree(3)</a>.
+<p class="level0"><a name="CURLFORMPTRCONTENTS"></a><span class="nroffip">CURLFORM_PTRCONTENTS</span>
+<p class="level1">followed by a pointer to the contents of this part, the actual data to send away. libcurl will use the pointer and refer to the data in your application, so you must make sure it remains until curl no longer needs it. If the data isn't NUL-terminated, or if you'd like it to contain zero bytes, you must set its length with <a class="bold" href="#CURLFORMCONTENTSLENGTH">CURLFORM_CONTENTSLENGTH</a>.
+<p class="level0"><a name="CURLFORMCONTENTSLENGTH"></a><span class="nroffip">CURLFORM_CONTENTSLENGTH</span>
+<p class="level1">followed by a long giving the length of the contents. Note that for <a class="emphasis" href="#CURLFORMSTREAM">CURLFORM_STREAM</a> contents, this option is mandatory.
+<p class="level0"><a name="CURLFORMFILECONTENT"></a><span class="nroffip">CURLFORM_FILECONTENT</span>
+<p class="level1">followed by a filename, causes that file to be read and its contents used as data in this part. This part does <span Class="emphasis">not</span> automatically become a file upload part simply because its data was read from a file.
+<p class="level0"><a name="CURLFORMFILE"></a><span class="nroffip">CURLFORM_FILE</span>
+<p class="level1">followed by a filename, makes this part a file upload part. It sets the <span Class="emphasis">filename</span> field to the basename of the provided filename, it reads the contents of the file and passes them as data and sets the content-type if the given file match one of the internally known file extensions. For <a class="bold" href="#CURLFORMFILE">CURLFORM_FILE</a> the user may send one or more files in one part by providing multiple <a class="bold" href="#CURLFORMFILE">CURLFORM_FILE</a> arguments each followed by the filename (and each <a class="emphasis" href="#CURLFORMFILE">CURLFORM_FILE</a> is allowed to have a <a class="emphasis" href="#CURLFORMCONTENTTYPE">CURLFORM_CONTENTTYPE</a>).
+<p class="level0"><a name="CURLFORMCONTENTTYPE"></a><span class="nroffip">CURLFORM_CONTENTTYPE</span>
+<p class="level1">is used in combination with <a class="emphasis" href="#CURLFORMFILE">CURLFORM_FILE</a>. Followed by a pointer to a string which provides the content-type for this part, possibly instead of an internally chosen one.
+<p class="level0"><a name="CURLFORMFILENAME"></a><span class="nroffip">CURLFORM_FILENAME</span>
+<p class="level1">is used in combination with <a class="emphasis" href="#CURLFORMFILE">CURLFORM_FILE</a>. Followed by a pointer to a string, it tells libcurl to use the given string as the <span Class="emphasis">filename</span> in the file upload part instead of the actual file name.
+<p class="level0"><a name="CURLFORMBUFFER"></a><span class="nroffip">CURLFORM_BUFFER</span>
+<p class="level1">is used for custom file upload parts without use of <a class="emphasis" href="#CURLFORMFILE">CURLFORM_FILE</a>. It tells libcurl that the file contents are already present in a buffer. The parameter is a string which provides the <span Class="emphasis">filename</span> field in the content header.
+<p class="level0"><a name="CURLFORMBUFFERPTR"></a><span class="nroffip">CURLFORM_BUFFERPTR</span>
+<p class="level1">is used in combination with <a class="emphasis" href="#CURLFORMBUFFER">CURLFORM_BUFFER</a>. The parameter is a pointer to the buffer to be uploaded. This buffer must not be freed until after <a class="emphasis" href="./curl_easy_cleanup.html">curl_easy_cleanup(3)</a> is called. You must also use <a class="emphasis" href="#CURLFORMBUFFERLENGTH">CURLFORM_BUFFERLENGTH</a> to set the number of bytes in the buffer.
+<p class="level0"><a name="CURLFORMBUFFERLENGTH"></a><span class="nroffip">CURLFORM_BUFFERLENGTH</span>
+<p class="level1">is used in combination with <a class="emphasis" href="#CURLFORMBUFFER">CURLFORM_BUFFER</a>. The parameter is a long which gives the length of the buffer.
+<p class="level0"><a name="CURLFORMSTREAM"></a><span class="nroffip">CURLFORM_STREAM</span>
+<p class="level1">Tells libcurl to use the <span Class="emphasis">CURLOPT_READFUNCTION</span> callback to get data. The parameter you pass to <a class="emphasis" href="#CURLFORMSTREAM">CURLFORM_STREAM</a> is the pointer passed on to the read callback's fourth argument. If you want the part to look like a file upload one, set the <a class="emphasis" href="#CURLFORMFILENAME">CURLFORM_FILENAME</a> parameter as well. Note that when using <a class="emphasis" href="#CURLFORMSTREAM">CURLFORM_STREAM</a>, <a class="emphasis" href="#CURLFORMCONTENTSLENGTH">CURLFORM_CONTENTSLENGTH</a> must also be set with the total expected length of the part. (Option added in libcurl 7.18.2)
+<p class="level0"><a name="CURLFORMARRAY"></a><span class="nroffip">CURLFORM_ARRAY</span>
+<p class="level1">Another possibility to send options to curl_formadd() is the <a class="bold" href="#CURLFORMARRAY">CURLFORM_ARRAY</a> option, that passes a struct curl_forms array pointer as its value. Each curl_forms structure element has a CURLformoption and a char pointer. The final element in the array must be a CURLFORM_END. All available options can be used in an array, except the CURLFORM_ARRAY option itself! The last argument in such an array must always be <span Class="bold">CURLFORM_END</span>.
+<p class="level0"><a name="CURLFORMCONTENTHEADER"></a><span class="nroffip">CURLFORM_CONTENTHEADER</span>
+<p class="level1">specifies extra headers for the form POST section. This takes a curl_slist prepared in the usual way using <span Class="bold">curl_slist_append</span> and appends the list of headers to those libcurl automatically generates. The list must exist while the POST occurs, if you free it before the post completes you may experience problems.
+<p class="level1">When you've passed the HttpPost pointer to <a class="emphasis" href="./curl_easy_setopt.html">curl_easy_setopt(3)</a> (using the <span Class="emphasis">CURLOPT_HTTPPOST</span> option), you must not free the list until after you've called <a class="emphasis" href="./curl_easy_cleanup.html">curl_easy_cleanup(3)</a> for the curl handle.
+<p class="level1">See example below. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">0 means everything was ok, non-zero means an error occurred corresponding to a CURL_FORMADD_* constant defined in <span Class="emphasis">&lt;curl/curl.h&gt;</span> <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0"><pre>
+<p class="level0"><p class="level0">&nbsp;struct curl_httppost* post = NULL;
+ &nbsp;struct curl_httppost* last = NULL;
+ &nbsp;char namebuffer[] = "name buffer";
+ &nbsp;long namelength = strlen(namebuffer);
+ &nbsp;char buffer[] = "test buffer";
+ &nbsp;char htmlbuffer[] = "&lt;HTML&gt;test buffer&lt;/HTML&gt;";
+ &nbsp;long htmlbufferlength = strlen(htmlbuffer);
+ &nbsp;struct curl_forms forms[3];
+ &nbsp;char file1[] = "my-face.jpg";
+ &nbsp;char file2[] = "your-face.jpg";
+ &nbsp;/* add null character into htmlbuffer, to demonstrate that
+ &nbsp; transfers of buffers containing null characters actually work
+ &nbsp;*/
+ &nbsp;htmlbuffer[8] = '\0';
+ <p class="level0">&nbsp;/* Add simple name/content section */
+ &nbsp;curl_formadd(&post, &last, CURLFORM_COPYNAME, "name",
+ &nbsp; CURLFORM_COPYCONTENTS, "content", CURLFORM_END);
+ <p class="level0">&nbsp;/* Add simple name/content/contenttype section */
+ &nbsp;curl_formadd(&post, &last, CURLFORM_COPYNAME, "htmlcode",
+ &nbsp; CURLFORM_COPYCONTENTS, "&lt;HTML&gt;&lt;/HTML&gt;",
+ &nbsp; CURLFORM_CONTENTTYPE, "text/html", CURLFORM_END);
+ <p class="level0">&nbsp;/* Add name/ptrcontent section */
+ &nbsp;curl_formadd(&post, &last, CURLFORM_COPYNAME, "name_for_ptrcontent",
+ &nbsp; CURLFORM_PTRCONTENTS, buffer, CURLFORM_END);
+ <p class="level0">&nbsp;/* Add ptrname/ptrcontent section */
+ &nbsp;curl_formadd(&post, &last, CURLFORM_PTRNAME, namebuffer,
+ &nbsp; CURLFORM_PTRCONTENTS, buffer, CURLFORM_NAMELENGTH,
+ &nbsp; namelength, CURLFORM_END);
+ <p class="level0">&nbsp;/* Add name/ptrcontent/contenttype section */
+ &nbsp;curl_formadd(&post, &last, CURLFORM_COPYNAME, "html_code_with_hole",
+ &nbsp; CURLFORM_PTRCONTENTS, htmlbuffer,
+ &nbsp; CURLFORM_CONTENTSLENGTH, htmlbufferlength,
+ &nbsp; CURLFORM_CONTENTTYPE, "text/html", CURLFORM_END);
+ <p class="level0">&nbsp;/* Add simple file section */
+ &nbsp;curl_formadd(&post, &last, CURLFORM_COPYNAME, "picture",
+ &nbsp; CURLFORM_FILE, "my-face.jpg", CURLFORM_END);
+ <p class="level0">&nbsp;/* Add file/contenttype section */
+ &nbsp;curl_formadd(&post, &last, CURLFORM_COPYNAME, "picture",
+ &nbsp; CURLFORM_FILE, "my-face.jpg",
+ &nbsp; CURLFORM_CONTENTTYPE, "image/jpeg", CURLFORM_END);
+ <p class="level0">&nbsp;/* Add two file section */
+ &nbsp;curl_formadd(&post, &last, CURLFORM_COPYNAME, "pictures",
+ &nbsp; CURLFORM_FILE, "my-face.jpg",
+ &nbsp; CURLFORM_FILE, "your-face.jpg", CURLFORM_END);
+ <p class="level0">&nbsp;/* Add two file section using CURLFORM_ARRAY */
+ &nbsp;forms[0].option = CURLFORM_FILE;
+ &nbsp;forms[0].value = file1;
+ &nbsp;forms[1].option = CURLFORM_FILE;
+ &nbsp;forms[1].value = file2;
+ &nbsp;forms[2].option = CURLFORM_END;
+ <p class="level0">&nbsp;/* Add a buffer to upload */
+ &nbsp;curl_formadd(&post, &last,
+ &nbsp; CURLFORM_COPYNAME, "name",
+ &nbsp; CURLFORM_BUFFER, "data",
+ &nbsp; CURLFORM_BUFFERPTR, record,
+ &nbsp; CURLFORM_BUFFERLENGTH, record_length,
+ &nbsp; CURLFORM_END);
+ <p class="level0">&nbsp;/* no option needed for the end marker */
+ &nbsp;curl_formadd(&post, &last, CURLFORM_COPYNAME, "pictures",
+ &nbsp; CURLFORM_ARRAY, forms, CURLFORM_END);
+ &nbsp;/* Add the content of a file as a normal post text value */
+ &nbsp;curl_formadd(&post, &last, CURLFORM_COPYNAME, "filecontent",
+ &nbsp; CURLFORM_FILECONTENT, ".bashrc", CURLFORM_END);
+ &nbsp;/* Set the form info */
+ &nbsp;curl_easy_setopt(curl, CURLOPT_HTTPPOST, post);
+ <p class="level0"></pre>
+<a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><a class="manpage" href="./curl_easy_setopt.html">curl_easy_setopt (3)</a> <span Class="manpage"> </span> <a class="manpage" href="./curl_formfree.html">curl_formfree (3)</a> <p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_formadd.pdf b/docs/libcurl/curl_formadd.pdf
new file mode 100644
index 0000000..b5b31a8
--- /dev/null
+++ b/docs/libcurl/curl_formadd.pdf
Binary files differ
diff --git a/docs/libcurl/curl_formfree.3 b/docs/libcurl/curl_formfree.3
new file mode 100644
index 0000000..2fba295
--- /dev/null
+++ b/docs/libcurl/curl_formfree.3
@@ -0,0 +1,19 @@
+.\" You can view this file with:
+.\" nroff -man [file]
+.\"
+.TH curl_formfree 3 "6 April 2001" "libcurl 7.7.1" "libcurl Manual"
+.SH NAME
+curl_formfree - free a previously build multipart/formdata HTTP POST chain
+.SH SYNOPSIS
+.B #include <curl/curl.h>
+.sp
+.BI "void curl_formfree(struct curl_httppost *" form);
+.ad
+.SH DESCRIPTION
+curl_formfree() is used to clean up data previously built/appended with
+\fIcurl_formadd(3)\fP. This must be called when the data has been used, which
+typically means after \fIcurl_easy_perform(3)\fP has been called.
+.SH RETURN VALUE
+None
+.SH "SEE ALSO"
+.BR curl_formadd "(3) "
diff --git a/docs/libcurl/curl_formfree.html b/docs/libcurl/curl_formfree.html
new file mode 100644
index 0000000..73837b0
--- /dev/null
+++ b/docs/libcurl/curl_formfree.html
@@ -0,0 +1,55 @@
+<html><head>
+<title>curl_formfree man page</title>
+<meta name="generator" content="roffit 0.7">
+<STYLE type="text/css">
+P.level0 {
+ padding-left: 2em;
+}
+
+P.level1 {
+ padding-left: 4em;
+}
+
+P.level2 {
+ padding-left: 6em;
+}
+
+span.emphasis {
+ font-style: italic;
+}
+
+span.bold {
+ font-weight: bold;
+}
+
+span.manpage {
+ font-weight: bold;
+}
+
+h2.nroffsh {
+ background-color: #e0e0e0;
+}
+
+span.nroffip {
+ font-weight: bold;
+ font-size: 120%;
+ font-family: monospace;
+}
+
+p.roffit {
+ text-align: center;
+ font-size: 80%;
+}
+</STYLE>
+</head><body>
+
+<p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
+<p class="level0">curl_formfree - free a previously build multipart/formdata HTTP POST chain <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><span Class="bold">#include &lt;curl/curl.h&gt;</span>
+<p class="level0"><span Class="bold">void curl_formfree(struct curl_httppost * form);</span>
+<p class="level0"><a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">curl_formfree() is used to clean up data previously built/appended with <a class="emphasis" href="./curl_formadd.html">curl_formadd(3)</a>. This must be called when the data has been used, which typically means after <a class="emphasis" href="./curl_easy_perform.html">curl_easy_perform(3)</a> has been called. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">None <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><a class="manpage" href="./curl_formadd.html">curl_formadd (3) </a> <p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_formfree.pdf b/docs/libcurl/curl_formfree.pdf
new file mode 100644
index 0000000..f03fae9
--- /dev/null
+++ b/docs/libcurl/curl_formfree.pdf
Binary files differ
diff --git a/docs/libcurl/curl_formget.3 b/docs/libcurl/curl_formget.3
new file mode 100644
index 0000000..b0dd8fe
--- /dev/null
+++ b/docs/libcurl/curl_formget.3
@@ -0,0 +1,48 @@
+.\" You can view this file with:
+.\" nroff -man [file]
+.\"
+.TH curl_formget 3 "20 June 2006" "libcurl 7.15.5" "libcurl Manual"
+.SH NAME
+curl_formget - serialize a previously built multipart/formdata HTTP POST chain
+.SH SYNOPSIS
+.B #include <curl/curl.h>
+.sp
+.BI "void curl_formget(struct curl_httppost *" form, " void *" arg,
+.BI " curl_formget_callback " append ");"
+.ad
+.SH DESCRIPTION
+curl_formget() is used to serialize data previously built/appended with
+\fIcurl_formadd(3)\fP. Accepts a void pointer as second argument which will be
+passed to the curl_formget_callback function.
+
+.BI "typedef size_t (*curl_formget_callback)(void *" arg, " const char *" buf,
+.BI " size_t " len ");"
+.nf
+
+The curl_formget_callback will be executed for each part of the HTTP POST
+chain. The void *arg pointer will be the one passed as second argument to
+curl_formget(). The character buffer passed to it must not be freed. The
+callback should return the buffer length passed to it on success.
+.SH RETURN VALUE
+0 means everything was ok, non-zero means an error occurred
+.SH EXAMPLE
+.nf
+
+ size_t print_httppost_callback(void *arg, const char *buf, size_t len)
+ {
+ fwrite(buf, len, 1, stdout);
+ (*(size_t *) arg) += len;
+ return len;
+ }
+ size_t print_httppost(struct curl_httppost *post)
+ {
+ size_t total_size = 0;
+ if(curl_formget(post, &total_size, print_httppost_callback)) {
+ return (size_t) -1;
+ }
+ return total_size;
+ }
+.SH AVAILABILITY
+This function was added in libcurl 7.15.5
+.SH "SEE ALSO"
+.BR curl_formadd "(3) "
diff --git a/docs/libcurl/curl_formget.html b/docs/libcurl/curl_formget.html
new file mode 100644
index 0000000..0564f61
--- /dev/null
+++ b/docs/libcurl/curl_formget.html
@@ -0,0 +1,80 @@
+<html><head>
+<title>curl_formget man page</title>
+<meta name="generator" content="roffit 0.7">
+<STYLE type="text/css">
+P.level0 {
+ padding-left: 2em;
+}
+
+P.level1 {
+ padding-left: 4em;
+}
+
+P.level2 {
+ padding-left: 6em;
+}
+
+span.emphasis {
+ font-style: italic;
+}
+
+span.bold {
+ font-weight: bold;
+}
+
+span.manpage {
+ font-weight: bold;
+}
+
+h2.nroffsh {
+ background-color: #e0e0e0;
+}
+
+span.nroffip {
+ font-weight: bold;
+ font-size: 120%;
+ font-family: monospace;
+}
+
+p.roffit {
+ text-align: center;
+ font-size: 80%;
+}
+</STYLE>
+</head><body>
+
+<p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
+<p class="level0">curl_formget - serialize a previously built multipart/formdata HTTP POST chain <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><span Class="bold">#include &lt;curl/curl.h&gt;</span>
+<p class="level0"><span Class="bold">void curl_formget(struct curl_httppost * form, void * arg,</span> <span Class="bold"> curl_formget_callback append );</span>
+<p class="level0"><a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">curl_formget() is used to serialize data previously built/appended with <a class="emphasis" href="./curl_formadd.html">curl_formadd(3)</a>. Accepts a void pointer as second argument which will be passed to the curl_formget_callback function.
+<p class="level0"><span Class="bold">typedef size_t (*curl_formget_callback)(void * arg, const char * buf,</span> <span Class="bold"> size_t len );</span> <pre>
+<p class="level0"><p class="level0">The curl_formget_callback will be executed for each part of the HTTP POST
+ chain. The void *arg pointer will be the one passed as second argument to
+ curl_formget(). The character buffer passed to it must not be freed. The
+ callback should return the buffer length passed to it on success.
+ </pre>
+<a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">0 means everything was ok, non-zero means an error occurred <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0"><pre>
+<p class="level0"><p class="level0">&nbsp;size_t print_httppost_callback(void *arg, const char *buf, size_t len)
+ &nbsp;{
+ &nbsp; fwrite(buf, len, 1, stdout);
+ &nbsp; (*(size_t *) arg) += len;
+ &nbsp; return len;
+ &nbsp;}
+ &nbsp;size_t print_httppost(struct curl_httppost *post)
+ &nbsp;{
+ &nbsp; size_t total_size = 0;
+ &nbsp; if(curl_formget(post, &total_size, print_httppost_callback)) {
+ &nbsp; return (size_t) -1;
+ &nbsp; }
+ &nbsp; return total_size;
+ &nbsp;}
+ </pre>
+<a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">This function was added in libcurl 7.15.5 <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><a class="manpage" href="./curl_formadd.html">curl_formadd (3) </a> <p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_formget.pdf b/docs/libcurl/curl_formget.pdf
new file mode 100644
index 0000000..2012031
--- /dev/null
+++ b/docs/libcurl/curl_formget.pdf
Binary files differ
diff --git a/docs/libcurl/curl_free.3 b/docs/libcurl/curl_free.3
new file mode 100644
index 0000000..f854693
--- /dev/null
+++ b/docs/libcurl/curl_free.3
@@ -0,0 +1,17 @@
+.\" You can view this file with:
+.\" nroff -man [file]
+.\"
+.TH curl_free 3 "12 Aug 2003" "libcurl 7.10" "libcurl Manual"
+.SH NAME
+curl_free - reclaim memory that has been obtained through a libcurl call
+.SH SYNOPSIS
+.B #include <curl/curl.h>
+.sp
+.BI "void curl_free( char *" ptr " );"
+.ad
+.SH DESCRIPTION
+curl_free reclaims memory that has been obtained through a libcurl call. Use
+curl_free() instead of free() to avoid anomalies that can result from
+differences in memory management between your application and libcurl.
+.SH "SEE ALSO"
+.I curl_unescape(3)
diff --git a/docs/libcurl/curl_free.html b/docs/libcurl/curl_free.html
new file mode 100644
index 0000000..4bffdc1
--- /dev/null
+++ b/docs/libcurl/curl_free.html
@@ -0,0 +1,54 @@
+<html><head>
+<title>curl_free man page</title>
+<meta name="generator" content="roffit 0.7">
+<STYLE type="text/css">
+P.level0 {
+ padding-left: 2em;
+}
+
+P.level1 {
+ padding-left: 4em;
+}
+
+P.level2 {
+ padding-left: 6em;
+}
+
+span.emphasis {
+ font-style: italic;
+}
+
+span.bold {
+ font-weight: bold;
+}
+
+span.manpage {
+ font-weight: bold;
+}
+
+h2.nroffsh {
+ background-color: #e0e0e0;
+}
+
+span.nroffip {
+ font-weight: bold;
+ font-size: 120%;
+ font-family: monospace;
+}
+
+p.roffit {
+ text-align: center;
+ font-size: 80%;
+}
+</STYLE>
+</head><body>
+
+<p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
+<p class="level0">curl_free - reclaim memory that has been obtained through a libcurl call <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><span Class="bold">#include &lt;curl/curl.h&gt;</span>
+<p class="level0"><span Class="bold">void curl_free( char * ptr );</span>
+<p class="level0"><a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">curl_free reclaims memory that has been obtained through a libcurl call. Use curl_free() instead of free() to avoid anomalies that can result from differences in memory management between your application and libcurl. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><a class="emphasis" href="./curl_unescape.html">curl_unescape(3)</a> <p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_free.pdf b/docs/libcurl/curl_free.pdf
new file mode 100644
index 0000000..202b34a
--- /dev/null
+++ b/docs/libcurl/curl_free.pdf
Binary files differ
diff --git a/docs/libcurl/curl_getdate.3 b/docs/libcurl/curl_getdate.3
new file mode 100644
index 0000000..73cd3ef
--- /dev/null
+++ b/docs/libcurl/curl_getdate.3
@@ -0,0 +1,99 @@
+.\" You can view this file with:
+.\" nroff -man [file]
+.\"
+.TH curl_getdate 3 "12 Aug 2005" "libcurl 7.0" "libcurl Manual"
+.SH NAME
+curl_getdate - Convert a date string to number of seconds since January 1,
+1970
+.SH SYNOPSIS
+.B #include <curl/curl.h>
+.sp
+.BI "time_t curl_getdate(char *" datestring ", time_t *"now " );"
+.ad
+.SH DESCRIPTION
+This function returns the number of seconds since January 1st 1970 in the UTC
+time zone, for the date and time that the \fIdatestring\fP parameter
+specifies. The \fInow\fP parameter is not used, pass a NULL there.
+
+\fBNOTE:\fP This function was rewritten for the 7.12.2 release and this
+documentation covers the functionality of the new one. The new one is not
+feature-complete with the old one, but most of the formats supported by the
+new one was supported by the old too.
+.SH PARSING DATES AND TIMES
+A "date" is a string containing several items separated by whitespace. The
+order of the items is immaterial. A date string may contain many flavors of
+items:
+.TP 0.8i
+.B calendar date items
+Can be specified several ways. Month names can only be three-letter english
+abbreviations, numbers can be zero-prefixed and the year may use 2 or 4 digits.
+Examples: 06 Nov 1994, 06-Nov-94 and Nov-94 6.
+.TP
+.B time of the day items
+This string specifies the time on a given day. You must specify it with 6
+digits with two colons: HH:MM:SS. To not include the time in a date string,
+will make the function assume 00:00:00. Example: 18:19:21.
+.TP
+.B time zone items
+Specifies international time zone. There are a few acronyms supported, but in
+general you should instead use the specific relative time compared to
+UTC. Supported formats include: -1200, MST, +0100.
+.TP
+.B day of the week items
+Specifies a day of the week. Days of the week may be spelled out in full
+(using english): `Sunday', `Monday', etc or they may be abbreviated to their
+first three letters. This is usually not info that adds anything.
+.TP
+.B pure numbers
+If a decimal number of the form YYYYMMDD appears, then YYYY is read as the
+year, MM as the month number and DD as the day of the month, for the specified
+calendar date.
+.PP
+.SH EXAMPLES
+.nf
+Sun, 06 Nov 1994 08:49:37 GMT
+Sunday, 06-Nov-94 08:49:37 GMT
+Sun Nov 6 08:49:37 1994
+06 Nov 1994 08:49:37 GMT
+06-Nov-94 08:49:37 GMT
+Nov 6 08:49:37 1994
+06 Nov 1994 08:49:37
+06-Nov-94 08:49:37
+1994 Nov 6 08:49:37
+GMT 08:49:37 06-Nov-94 Sunday
+94 6 Nov 08:49:37
+1994 Nov 6
+06-Nov-94
+Sun Nov 6 94
+1994.Nov.6
+Sun/Nov/6/94/GMT
+Sun, 06 Nov 1994 08:49:37 CET
+06 Nov 1994 08:49:37 EST
+Sun, 12 Sep 2004 15:05:58 -0700
+Sat, 11 Sep 2004 21:32:11 +0200
+20040912 15:05:58 -0700
+20040911 +0200
+.fi
+.SH STANDARDS
+This parser was written to handle date formats specified in RFC 822 (including
+the update in RFC 1123) using time zone name or time zone delta and RFC 850
+(obsoleted by RFC 1036) and ANSI C's asctime() format. These formats are the
+only ones RFC2616 says HTTP applications may use.
+.SH RETURN VALUE
+This function returns -1 when it fails to parse the date string. Otherwise it
+returns the number of seconds as described.
+
+If the year is larger than 2037 on systems with 32 bit time_t, this function
+will return 0x7fffffff (since that is the largest possible signed 32 bit
+number).
+
+Having a 64 bit time_t is not a guarantee that dates beyond 03:14:07 UTC,
+January 19, 2038 will work fine. On systems with a 64 bit time_t but with a
+crippled mktime(), \fIcurl_getdate\fP will return -1 in this case.
+.SH REWRITE
+The former version of this function was built with yacc and was not only very
+large, it was also never quite understood and it wasn't possible to build with
+non-GNU tools since only GNU Bison could make it thread-safe!
+
+The rewrite was done for 7.12.2. The new one is much smaller and uses simpler
+code.
diff --git a/docs/libcurl/curl_getdate.html b/docs/libcurl/curl_getdate.html
new file mode 100644
index 0000000..cd1612d
--- /dev/null
+++ b/docs/libcurl/curl_getdate.html
@@ -0,0 +1,93 @@
+<html><head>
+<title>curl_getdate man page</title>
+<meta name="generator" content="roffit 0.7">
+<STYLE type="text/css">
+P.level0 {
+ padding-left: 2em;
+}
+
+P.level1 {
+ padding-left: 4em;
+}
+
+P.level2 {
+ padding-left: 6em;
+}
+
+span.emphasis {
+ font-style: italic;
+}
+
+span.bold {
+ font-weight: bold;
+}
+
+span.manpage {
+ font-weight: bold;
+}
+
+h2.nroffsh {
+ background-color: #e0e0e0;
+}
+
+span.nroffip {
+ font-weight: bold;
+ font-size: 120%;
+ font-family: monospace;
+}
+
+p.roffit {
+ text-align: center;
+ font-size: 80%;
+}
+</STYLE>
+</head><body>
+
+<p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
+<p class="level0">curl_getdate - Convert a date string to number of seconds since January 1, 1970 <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><span Class="bold">#include &lt;curl/curl.h&gt;</span>
+<p class="level0"><span Class="bold">time_t curl_getdate(char * datestring , time_t *now );</span>
+<p class="level0"><a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">This function returns the number of seconds since January 1st 1970 in the UTC time zone, for the date and time that the <span Class="emphasis">datestring</span> parameter specifies. The <span Class="emphasis">now</span> parameter is not used, pass a NULL there.
+<p class="level0"><span Class="bold">NOTE:</span> This function was rewritten for the 7.12.2 release and this documentation covers the functionality of the new one. The new one is not feature-complete with the old one, but most of the formats supported by the new one was supported by the old too. <a name="PARSING"></a><h2 class="nroffsh">PARSING DATES AND TIMES</h2>
+<p class="level0">A "date" is a string containing several items separated by whitespace. The order of the items is immaterial. A date string may contain many flavors of items:
+<p class="level0"><span Class="bold">calendar date items</span> Can be specified several ways. Month names can only be three-letter english abbreviations, numbers can be zero-prefixed and the year may use 2 or 4 digits. Examples: 06 Nov 1994, 06-Nov-94 and Nov-94 6.
+<p class="level0"><span Class="bold">time of the day items</span> This string specifies the time on a given day. You must specify it with 6 digits with two colons: HH:MM:SS. To not include the time in a date string, will make the function assume 00:00:00. Example: 18:19:21.
+<p class="level0"><span Class="bold">time zone items</span> Specifies international time zone. There are a few acronyms supported, but in general you should instead use the specific relative time compared to UTC. Supported formats include: -1200, MST, +0100.
+<p class="level0"><span Class="bold">day of the week items</span> Specifies a day of the week. Days of the week may be spelled out in full (using english): `Sunday', `Monday', etc or they may be abbreviated to their first three letters. This is usually not info that adds anything.
+<p class="level0"><span Class="bold">pure numbers</span> If a decimal number of the form YYYYMMDD appears, then YYYY is read as the year, MM as the month number and DD as the day of the month, for the specified calendar date.
+<p class="level0"><a name="EXAMPLES"></a><h2 class="nroffsh">EXAMPLES</h2>
+<p class="level0"><pre>
+<p class="level0">Sun, 06 Nov 1994 08:49:37 GMT
+ Sunday, 06-Nov-94 08:49:37 GMT
+ Sun Nov 6 08:49:37 1994
+ 06 Nov 1994 08:49:37 GMT
+ 06-Nov-94 08:49:37 GMT
+ Nov 6 08:49:37 1994
+ 06 Nov 1994 08:49:37
+ 06-Nov-94 08:49:37
+ 1994 Nov 6 08:49:37
+ GMT 08:49:37 06-Nov-94 Sunday
+ 94 6 Nov 08:49:37
+ 1994 Nov 6
+ 06-Nov-94
+ Sun Nov 6 94
+ 1994.Nov.6
+ Sun/Nov/6/94/GMT
+ Sun, 06 Nov 1994 08:49:37 CET
+ 06 Nov 1994 08:49:37 EST
+ Sun, 12 Sep 2004 15:05:58 -0700
+ Sat, 11 Sep 2004 21:32:11 +0200
+ 20040912 15:05:58 -0700
+ 20040911 +0200
+ </pre>
+
+<p class="level0"><a name="STANDARDS"></a><h2 class="nroffsh">STANDARDS</h2>
+<p class="level0">This parser was written to handle date formats specified in RFC 822 (including the update in RFC 1123) using time zone name or time zone delta and RFC 850 (obsoleted by RFC 1036) and ANSI C's asctime() format. These formats are the only ones RFC2616 says HTTP applications may use. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">This function returns -1 when it fails to parse the date string. Otherwise it returns the number of seconds as described.
+<p class="level0">If the year is larger than 2037 on systems with 32 bit time_t, this function will return 0x7fffffff (since that is the largest possible signed 32 bit number).
+<p class="level0">Having a 64 bit time_t is not a guarantee that dates beyond 03:14:07 UTC, January 19, 2038 will work fine. On systems with a 64 bit time_t but with a crippled mktime(), <span Class="emphasis">curl_getdate</span> will return -1 in this case. <a name="REWRITE"></a><h2 class="nroffsh">REWRITE</h2>
+<p class="level0">The former version of this function was built with yacc and was not only very large, it was also never quite understood and it wasn't possible to build with non-GNU tools since only GNU Bison could make it thread-safe!
+<p class="level0">The rewrite was done for 7.12.2. The new one is much smaller and uses simpler code. <p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_getdate.pdf b/docs/libcurl/curl_getdate.pdf
new file mode 100644
index 0000000..4499afe
--- /dev/null
+++ b/docs/libcurl/curl_getdate.pdf
Binary files differ
diff --git a/docs/libcurl/curl_getenv.3 b/docs/libcurl/curl_getenv.3
new file mode 100644
index 0000000..7413292
--- /dev/null
+++ b/docs/libcurl/curl_getenv.3
@@ -0,0 +1,29 @@
+.\"
+.TH curl_getenv 3 "30 April 2004" "libcurl 7.12" "libcurl Manual"
+.SH NAME
+curl_getenv - return value for environment name
+.SH SYNOPSIS
+.B #include <curl/curl.h>
+.sp
+.BI "char *curl_getenv(const char *" name ");"
+.ad
+.SH DESCRIPTION
+curl_getenv() is a portable wrapper for the getenv() function, meant to
+emulate its behaviour and provide an identical interface for all operating
+systems libcurl builds on (including win32).
+.SH AVAILABILITY
+This function will be removed from the public libcurl API in a near future. It
+will instead be made "available" by source code access only, and then as
+curlx_getenv().
+.SH RETURN VALUE
+If successful, curl_getenv() returns a pointer to the value of the specified
+environment. The memory it refers to is malloc()ed so the application must
+free() this when the data is no longer needed. When \fIcurl_getenv(3)\fP fails
+to find the specified name, it returns a null pointer.
+.SH NOTE
+Under unix operating systems, there isn't any point in returning an allocated
+memory, although other systems won't work properly if this isn't done. The
+unix implementation thus has to suffer slightly from the drawbacks of other
+systems.
+.SH "SEE ALSO"
+.BR getenv "(3C), "
diff --git a/docs/libcurl/curl_getenv.html b/docs/libcurl/curl_getenv.html
new file mode 100644
index 0000000..be1a007
--- /dev/null
+++ b/docs/libcurl/curl_getenv.html
@@ -0,0 +1,57 @@
+<html><head>
+<title>curl_getenv man page</title>
+<meta name="generator" content="roffit 0.7">
+<STYLE type="text/css">
+P.level0 {
+ padding-left: 2em;
+}
+
+P.level1 {
+ padding-left: 4em;
+}
+
+P.level2 {
+ padding-left: 6em;
+}
+
+span.emphasis {
+ font-style: italic;
+}
+
+span.bold {
+ font-weight: bold;
+}
+
+span.manpage {
+ font-weight: bold;
+}
+
+h2.nroffsh {
+ background-color: #e0e0e0;
+}
+
+span.nroffip {
+ font-weight: bold;
+ font-size: 120%;
+ font-family: monospace;
+}
+
+p.roffit {
+ text-align: center;
+ font-size: 80%;
+}
+</STYLE>
+</head><body>
+
+<p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
+<p class="level0">curl_getenv - return value for environment name <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><span Class="bold">#include &lt;curl/curl.h&gt;</span>
+<p class="level0"><span Class="bold">char *curl_getenv(const char * name );</span>
+<p class="level0"><a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">curl_getenv() is a portable wrapper for the getenv() function, meant to emulate its behaviour and provide an identical interface for all operating systems libcurl builds on (including win32). <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">This function will be removed from the public libcurl API in a near future. It will instead be made "available" by source code access only, and then as curlx_getenv(). <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">If successful, curl_getenv() returns a pointer to the value of the specified environment. The memory it refers to is malloc()ed so the application must free() this when the data is no longer needed. When <a class="emphasis" href="./curl_getenv.html">curl_getenv(3)</a> fails to find the specified name, it returns a null pointer. <a name="NOTE"></a><h2 class="nroffsh">NOTE</h2>
+<p class="level0">Under unix operating systems, there isn't any point in returning an allocated memory, although other systems won't work properly if this isn't done. The unix implementation thus has to suffer slightly from the drawbacks of other systems. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><span Class="manpage">getenv (3C)</span> <span Class="manpage"> </span> <p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_getenv.pdf b/docs/libcurl/curl_getenv.pdf
new file mode 100644
index 0000000..2c371ff
--- /dev/null
+++ b/docs/libcurl/curl_getenv.pdf
Binary files differ
diff --git a/docs/libcurl/curl_global_cleanup.3 b/docs/libcurl/curl_global_cleanup.3
new file mode 100644
index 0000000..9ca11d6
--- /dev/null
+++ b/docs/libcurl/curl_global_cleanup.3
@@ -0,0 +1,31 @@
+.\" You can view this file with:
+.\" nroff -man [file]
+.\"
+.TH curl_global_cleanup 3 "17 Feb 2006" "libcurl 7.8" "libcurl Manual"
+.SH NAME
+curl_global_cleanup - global libcurl cleanup
+.SH SYNOPSIS
+.B #include <curl/curl.h>
+.sp
+.BI "void curl_global_cleanup(void);"
+.ad
+.SH DESCRIPTION
+This function releases resources acquired by \fBcurl_global_init(3)\fP.
+
+You should call \fIcurl_global_cleanup(3)\fP once for each call you make to
+\fIcurl_global_init(3)\fP, after you are done using libcurl.
+
+\fBThis function is not thread safe.\fP You must not call it when any other
+thread in the program (i.e. a thread sharing the same memory) is running.
+This doesn't just mean no other thread that is using libcurl. Because
+\fBcurl_global_cleanup(3)\fP calls functions of other libraries that are
+similarly thread unsafe, it could conflict with any other thread that uses
+these other libraries.
+
+See the description in \fBlibcurl(3)\fP of global environment requirements for
+details of how to use this function.
+
+.SH "SEE ALSO"
+.BR curl_global_init "(3), "
+.BR libcurl "(3), "
+
diff --git a/docs/libcurl/curl_global_cleanup.html b/docs/libcurl/curl_global_cleanup.html
new file mode 100644
index 0000000..ac8cad8
--- /dev/null
+++ b/docs/libcurl/curl_global_cleanup.html
@@ -0,0 +1,59 @@
+<html><head>
+<title>curl_global_cleanup man page</title>
+<meta name="generator" content="roffit 0.7">
+<STYLE type="text/css">
+P.level0 {
+ padding-left: 2em;
+}
+
+P.level1 {
+ padding-left: 4em;
+}
+
+P.level2 {
+ padding-left: 6em;
+}
+
+span.emphasis {
+ font-style: italic;
+}
+
+span.bold {
+ font-weight: bold;
+}
+
+span.manpage {
+ font-weight: bold;
+}
+
+h2.nroffsh {
+ background-color: #e0e0e0;
+}
+
+span.nroffip {
+ font-weight: bold;
+ font-size: 120%;
+ font-family: monospace;
+}
+
+p.roffit {
+ text-align: center;
+ font-size: 80%;
+}
+</STYLE>
+</head><body>
+
+<p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
+<p class="level0">curl_global_cleanup - global libcurl cleanup <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><span Class="bold">#include &lt;curl/curl.h&gt;</span>
+<p class="level0"><span Class="bold">void curl_global_cleanup(void);</span>
+<p class="level0"><a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">This function releases resources acquired by <a class="bold" href="./curl_global_init.html">curl_global_init(3)</a>.
+<p class="level0">You should call <a class="emphasis" href="./curl_global_cleanup.html">curl_global_cleanup(3)</a> once for each call you make to <a class="emphasis" href="./curl_global_init.html">curl_global_init(3)</a>, after you are done using libcurl.
+<p class="level0"><span Class="bold">This function is not thread safe.</span> You must not call it when any other thread in the program (i.e. a thread sharing the same memory) is running. This doesn't just mean no other thread that is using libcurl. Because <a class="bold" href="./curl_global_cleanup.html">curl_global_cleanup(3)</a> calls functions of other libraries that are similarly thread unsafe, it could conflict with any other thread that uses these other libraries.
+<p class="level0">See the description in <a class="bold" href="./libcurl.html">libcurl(3)</a> of global environment requirements for details of how to use this function.
+<p class="level0"><a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><a class="manpage" href="./curl_global_init.html">curl_global_init (3)</a> <span Class="manpage"> </span> <a class="manpage" href="./libcurl.html">libcurl (3)</a> <span Class="manpage"> </span>
+<p class="level0"><p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_global_cleanup.pdf b/docs/libcurl/curl_global_cleanup.pdf
new file mode 100644
index 0000000..aae973a
--- /dev/null
+++ b/docs/libcurl/curl_global_cleanup.pdf
Binary files differ
diff --git a/docs/libcurl/curl_global_init.3 b/docs/libcurl/curl_global_init.3
new file mode 100644
index 0000000..e732911
--- /dev/null
+++ b/docs/libcurl/curl_global_init.3
@@ -0,0 +1,58 @@
+.\" You can view this file with:
+.\" nroff -man [file]
+.\"
+.TH curl_global_init 3 "11 May 2004" "libcurl 7.12" "libcurl Manual"
+.SH NAME
+curl_global_init - Global libcurl initialisation
+.SH SYNOPSIS
+.B #include <curl/curl.h>
+.sp
+.BI "CURLcode curl_global_init(long " flags ");"
+.ad
+.SH DESCRIPTION
+This function sets up the program environment that libcurl needs. Think of it
+as an extension of the library loader.
+
+This function must be called at least once within a program (a program is all
+the code that shares a memory space) before the program calls any other
+function in libcurl. The environment it sets up is constant for the life of
+the program and is the same for every program, so multiple calls have the same
+effect as one call.
+
+The flags option is a bit pattern that tells libcurl exactly what features to
+init, as described below. Set the desired bits by ORing the values together.
+In normal operation, you must specify CURL_GLOBAL_ALL. Don't use any other
+value unless you are familiar with it and mean to control internal operations of
+libcurl.
+
+\fBThis function is not thread safe.\fP You must not call it when any other
+thread in the program (i.e. a thread sharing the same memory) is running.
+This doesn't just mean no other thread that is using libcurl. Because
+\fIcurl_global_init()\fP calls functions of other libraries that are similarly
+thread unsafe, it could conflict with any other thread that uses these other
+libraries.
+
+See the description in \fBlibcurl\fP(3) of global environment requirements for
+details of how to use this function.
+
+.SH FLAGS
+.TP 5
+.B CURL_GLOBAL_ALL
+Initialize everything possible. This sets all known bits.
+.TP
+.B CURL_GLOBAL_SSL
+Initialize SSL
+.TP
+.B CURL_GLOBAL_WIN32
+Initialize the Win32 socket libraries.
+.TP
+.B CURL_GLOBAL_NOTHING
+Initialise nothing extra. This sets no bit.
+.SH RETURN VALUE
+If this function returns non-zero, something went wrong and you cannot use the
+other curl functions.
+.SH "SEE ALSO"
+.BR curl_global_init_mem "(3), "
+.BR curl_global_cleanup "(3), "
+.BR curl_easy_init "(3) "
+.BR libcurl "(3) "
diff --git a/docs/libcurl/curl_global_init.html b/docs/libcurl/curl_global_init.html
new file mode 100644
index 0000000..e54ced3
--- /dev/null
+++ b/docs/libcurl/curl_global_init.html
@@ -0,0 +1,65 @@
+<html><head>
+<title>curl_global_init man page</title>
+<meta name="generator" content="roffit 0.7">
+<STYLE type="text/css">
+P.level0 {
+ padding-left: 2em;
+}
+
+P.level1 {
+ padding-left: 4em;
+}
+
+P.level2 {
+ padding-left: 6em;
+}
+
+span.emphasis {
+ font-style: italic;
+}
+
+span.bold {
+ font-weight: bold;
+}
+
+span.manpage {
+ font-weight: bold;
+}
+
+h2.nroffsh {
+ background-color: #e0e0e0;
+}
+
+span.nroffip {
+ font-weight: bold;
+ font-size: 120%;
+ font-family: monospace;
+}
+
+p.roffit {
+ text-align: center;
+ font-size: 80%;
+}
+</STYLE>
+</head><body>
+
+<p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
+<p class="level0">curl_global_init - Global libcurl initialisation <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><span Class="bold">#include &lt;curl/curl.h&gt;</span>
+<p class="level0"><span Class="bold">CURLcode curl_global_init(long flags );</span>
+<p class="level0"><a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">This function sets up the program environment that libcurl needs. Think of it as an extension of the library loader.
+<p class="level0">This function must be called at least once within a program (a program is all the code that shares a memory space) before the program calls any other function in libcurl. The environment it sets up is constant for the life of the program and is the same for every program, so multiple calls have the same effect as one call.
+<p class="level0">The flags option is a bit pattern that tells libcurl exactly what features to init, as described below. Set the desired bits by ORing the values together. In normal operation, you must specify CURL_GLOBAL_ALL. Don't use any other value unless you are familiar with it and mean to control internal operations of libcurl.
+<p class="level0"><span Class="bold">This function is not thread safe.</span> You must not call it when any other thread in the program (i.e. a thread sharing the same memory) is running. This doesn't just mean no other thread that is using libcurl. Because <span Class="emphasis">curl_global_init()</span> calls functions of other libraries that are similarly thread unsafe, it could conflict with any other thread that uses these other libraries.
+<p class="level0">See the description in <span Class="bold">libcurl</span>(3) of global environment requirements for details of how to use this function.
+<p class="level0"><a name="FLAGS"></a><h2 class="nroffsh">FLAGS</h2>
+<p class="level0">
+<p class="level0"><span Class="bold">CURL_GLOBAL_ALL</span> Initialize everything possible. This sets all known bits.
+<p class="level0"><span Class="bold">CURL_GLOBAL_SSL</span> Initialize SSL
+<p class="level0"><span Class="bold">CURL_GLOBAL_WIN32</span> Initialize the Win32 socket libraries.
+<p class="level0"><span Class="bold">CURL_GLOBAL_NOTHING</span> Initialise nothing extra. This sets no bit. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">If this function returns non-zero, something went wrong and you cannot use the other curl functions. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><a class="manpage" href="./curl_global_init_mem.html">curl_global_init_mem (3)</a> <span Class="manpage"> </span> <a class="manpage" href="./curl_global_cleanup.html">curl_global_cleanup (3)</a> <span Class="manpage"> </span> <a class="manpage" href="./curl_easy_init.html">curl_easy_init (3) </a> <a class="manpage" href="./libcurl.html">libcurl (3) </a> <p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_global_init.pdf b/docs/libcurl/curl_global_init.pdf
new file mode 100644
index 0000000..9e5af52
--- /dev/null
+++ b/docs/libcurl/curl_global_init.pdf
Binary files differ
diff --git a/docs/libcurl/curl_global_init_mem.3 b/docs/libcurl/curl_global_init_mem.3
new file mode 100644
index 0000000..57ae6ae
--- /dev/null
+++ b/docs/libcurl/curl_global_init_mem.3
@@ -0,0 +1,42 @@
+.\" You can view this file with:
+.\" nroff -man [file]
+.\"
+.TH curl_global_init_mem 3 "10 May 2004" "libcurl 7.12.0" "libcurl Manual"
+.SH NAME
+curl_global_init_mem - Global libcurl initialisation with memory callbacks
+.SH SYNOPSIS
+.B #include <curl/curl.h>
+.nf
+.B "CURLcode curl_global_init_mem(long " flags,
+.B " curl_malloc_callback "m,
+.B " curl_free_callback "f,
+.B " curl_realloc_callback "r,
+.B " curl_strdup_callback "s,
+.B " curl_calloc_callback "c ");"
+.SH DESCRIPTION
+This function works exactly as \fIcurl_global_init(3)\fP with one addition: it
+allows the application to set callbacks to replace the otherwise used internal
+memory functions.
+
+This man page only adds documentation for the callbacks, see the
+\fIcurl_global_init(3)\fP man page for all the rest. When you use this
+function, all callback arguments must be set to valid function pointers.
+
+The prototypes for the given callbacks should match these:
+.IP "void *malloc_callback(size_t size);"
+To replace malloc()
+.IP "void free_callback(void *ptr);"
+To replace free()
+.IP "void *realloc_callback(void *ptr, size_t size);"
+To replace realloc()
+.IP "char *strdup_callback(const char *str);"
+To replace strdup()
+.IP "void *calloc_callback(size_t nmemb, size_t size);"
+To replace calloc()
+.SH "CAUTION"
+Manipulating these gives considerable powers to the application to severly
+screw things up for libcurl. Take care!
+.SH "SEE ALSO"
+.BR curl_global_init "(3), "
+.BR curl_global_cleanup "(3), "
+
diff --git a/docs/libcurl/curl_global_init_mem.html b/docs/libcurl/curl_global_init_mem.html
new file mode 100644
index 0000000..055d9db
--- /dev/null
+++ b/docs/libcurl/curl_global_init_mem.html
@@ -0,0 +1,74 @@
+<html><head>
+<title>curl_global_init_mem man page</title>
+<meta name="generator" content="roffit 0.7">
+<STYLE type="text/css">
+P.level0 {
+ padding-left: 2em;
+}
+
+P.level1 {
+ padding-left: 4em;
+}
+
+P.level2 {
+ padding-left: 6em;
+}
+
+span.emphasis {
+ font-style: italic;
+}
+
+span.bold {
+ font-weight: bold;
+}
+
+span.manpage {
+ font-weight: bold;
+}
+
+h2.nroffsh {
+ background-color: #e0e0e0;
+}
+
+span.nroffip {
+ font-weight: bold;
+ font-size: 120%;
+ font-family: monospace;
+}
+
+p.roffit {
+ text-align: center;
+ font-size: 80%;
+}
+</STYLE>
+</head><body>
+
+<p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
+<p class="level0">curl_global_init_mem - Global libcurl initialisation with memory callbacks <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><span Class="bold">#include &lt;curl/curl.h&gt;</span> <pre>
+<p class="level0"><span Class="bold">CURLcode curl_global_init_mem(long flags,</span>
+<span Class="bold"> curl_malloc_callback m,</span>
+<span Class="bold"> curl_free_callback f,</span>
+<span Class="bold"> curl_realloc_callback r,</span>
+<span Class="bold"> curl_strdup_callback s,</span>
+<span Class="bold"> curl_calloc_callback c );</span>
+</pre>
+<a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">This function works exactly as <a class="emphasis" href="./curl_global_init.html">curl_global_init(3)</a> with one addition: it allows the application to set callbacks to replace the otherwise used internal memory functions.
+<p class="level0">This man page only adds documentation for the callbacks, see the <a class="emphasis" href="./curl_global_init.html">curl_global_init(3)</a> man page for all the rest. When you use this function, all callback arguments must be set to valid function pointers.
+<p class="level0">The prototypes for the given callbacks should match these:
+<p class="level0"><a name="void"></a><span class="nroffip">void *malloc_callback(size_t size);</span>
+<p class="level1">To replace malloc()
+<p class="level0"><a name="void"></a><span class="nroffip">void free_callback(void *ptr);</span>
+<p class="level1">To replace free()
+<p class="level0"><a name="void"></a><span class="nroffip">void *realloc_callback(void *ptr, size_t size);</span>
+<p class="level1">To replace realloc()
+<p class="level0"><a name="char"></a><span class="nroffip">char *strdup_callback(const char *str);</span>
+<p class="level1">To replace strdup()
+<p class="level0"><a name="void"></a><span class="nroffip">void *calloc_callback(size_t nmemb, size_t size);</span>
+<p class="level1">To replace calloc() <a name="CAUTION"></a><h2 class="nroffsh">CAUTION</h2>
+<p class="level0">Manipulating these gives considerable powers to the application to severly screw things up for libcurl. Take care! <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><a class="manpage" href="./curl_global_init.html">curl_global_init (3)</a> <span Class="manpage"> </span> <a class="manpage" href="./curl_global_cleanup.html">curl_global_cleanup (3)</a> <span Class="manpage"> </span>
+<p class="level0"><p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_global_init_mem.pdf b/docs/libcurl/curl_global_init_mem.pdf
new file mode 100644
index 0000000..79f78a7
--- /dev/null
+++ b/docs/libcurl/curl_global_init_mem.pdf
Binary files differ
diff --git a/docs/libcurl/curl_mprintf.3 b/docs/libcurl/curl_mprintf.3
new file mode 100644
index 0000000..ade7f65
--- /dev/null
+++ b/docs/libcurl/curl_mprintf.3
@@ -0,0 +1,89 @@
+.\"
+.TH curl_printf 3 "30 April 2004" "libcurl 7.12" "libcurl Manual"
+.SH NAME
+curl_maprintf, curl_mfprintf, curl_mprintf, curl_msnprintf, curl_msprintf
+curl_mvaprintf, curl_mvfprintf, curl_mvprintf, curl_mvsnprintf,
+curl_mvsprintf - formatted output conversion
+.SH SYNOPSIS
+.B #include <curl/mprintf.h>
+.sp
+.BI "int curl_mprintf(const char *" format ", ...);"
+.br
+.BI "int curl_mfprintf(FILE *" fd ", const char *" format ", ...);"
+.br
+.BI "int curl_msprintf(char *" buffer ", const char *" format ", ...);"
+.br
+.BI "int curl_msnprintf(char *" buffer ", size_t " maxlength ", const char *" format ", ...);"
+.br
+.BI "int curl_mvprintf(const char *" format ", va_list " args ");"
+.br
+.BI "int curl_mvfprintf(FILE *" fd ", const char *" format ", va_list " args ");"
+.br
+.BI "int curl_mvsprintf(char *" buffer ", const char *" format ", va_list " args ");"
+.br
+.BI "int curl_mvsnprintf(char *" buffer ", size_t " maxlength ", const char *" format ", va_list " args ");"
+.br
+.BI "char *curl_maprintf(const char *" format ", ...);"
+.br
+.BI "char *curl_mvaprintf(const char *" format ", va_list " args ");"
+.SH DESCRIPTION
+These are all functions that produce output according to a format string and
+given arguments. These are mostly clones of the well-known C-style functions
+and there will be no detailed explanation of all available formatting rules
+and usage here.
+
+See this table for notable exceptions.
+.RS
+.TP
+.B curl_mprintf()
+Normal printf() clone.
+.TP
+.B curl_mfprintf()
+Normal fprintf() clone.
+.TP
+.B curl_msprintf()
+Normal sprintf() clone.
+.TP
+.B curl_msnprintf()
+snprintf() clone. Many systems don't have this. It is just like \fBsprintf\fP
+but with an extra argument after the buffer that specifies the length of the
+target buffer.
+.TP
+.B curl_mvprintf()
+Normal vprintf() clone.
+.TP
+.B curl_mvfprintf()
+Normal vfprintf() clone.
+.TP
+.B curl_mvsprintf()
+Normal vsprintf() clone.
+.TP
+.B curl_mvsnprintf()
+vsnprintf() clone. Many systems don't have this. It is just like
+\fBvsprintf\fP but with an extra argument after the buffer that specifies the
+length of the target buffer.
+.TP
+.B curl_maprintf()
+Like printf() but returns the output string as a malloc()ed string. The
+returned string must be free()ed by the receiver.
+.TP
+.B curl_mvaprintf()
+Like curl_maprintf() but takes a va_list pointer argument instead of a
+variable amount of arguments.
+.RE
+
+To easily use all these cloned functions instead of the normal ones, #define
+_MPRINTF_REPLACE before you include the <curl/mprintf.h> file. Then all the
+normal names like printf, fprintf, sprintf etc will use the curl-functions
+instead.
+.SH AVAILABILITY
+These function will be removed from the public libcurl API in a near
+future. They will instead be made "available" by source code access only, and
+then as curlx_-prefixed functions. See lib/README.curlx for further details.
+.SH RETURN VALUE
+The \fBcurl_maprintf\fP and \fBcurl_mvaprintf\fP functions return a pointer to
+a newly allocated string, or NULL if it failed.
+
+All other functions return the number of characters they actually outputted.
+.SH "SEE ALSO"
+.BR printf "(3), " sprintf "(3), " fprintf "(3), " vprintf "(3) "
diff --git a/docs/libcurl/curl_mprintf.html b/docs/libcurl/curl_mprintf.html
new file mode 100644
index 0000000..5a16d57
--- /dev/null
+++ b/docs/libcurl/curl_mprintf.html
@@ -0,0 +1,70 @@
+<html><head>
+<title>curl_printf man page</title>
+<meta name="generator" content="roffit 0.7">
+<STYLE type="text/css">
+P.level0 {
+ padding-left: 2em;
+}
+
+P.level1 {
+ padding-left: 4em;
+}
+
+P.level2 {
+ padding-left: 6em;
+}
+
+span.emphasis {
+ font-style: italic;
+}
+
+span.bold {
+ font-weight: bold;
+}
+
+span.manpage {
+ font-weight: bold;
+}
+
+h2.nroffsh {
+ background-color: #e0e0e0;
+}
+
+span.nroffip {
+ font-weight: bold;
+ font-size: 120%;
+ font-family: monospace;
+}
+
+p.roffit {
+ text-align: center;
+ font-size: 80%;
+}
+</STYLE>
+</head><body>
+
+<p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
+<p class="level0">curl_maprintf, curl_mfprintf, curl_mprintf, curl_msnprintf, curl_msprintf curl_mvaprintf, curl_mvfprintf, curl_mvprintf, curl_mvsnprintf, curl_mvsprintf - formatted output conversion <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><span Class="bold">#include &lt;curl/mprintf.h&gt;</span>
+<p class="level0"><span Class="bold">int curl_mprintf(const char * format , ...);</span> <br><span Class="bold">int curl_mfprintf(FILE * fd , const char * format , ...);</span> <br><span Class="bold">int curl_msprintf(char * buffer , const char * format , ...);</span> <br><span Class="bold">int curl_msnprintf(char * buffer , size_t maxlength , const char * format , ...);</span> <br><span Class="bold">int curl_mvprintf(const char * format , va_list args );</span> <br><span Class="bold">int curl_mvfprintf(FILE * fd , const char * format , va_list args );</span> <br><span Class="bold">int curl_mvsprintf(char * buffer , const char * format , va_list args );</span> <br><span Class="bold">int curl_mvsnprintf(char * buffer , size_t maxlength , const char * format , va_list args );</span> <br><span Class="bold">char *curl_maprintf(const char * format , ...);</span> <br><span Class="bold">char *curl_mvaprintf(const char * format , va_list args );</span> <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">These are all functions that produce output according to a format string and given arguments. These are mostly clones of the well-known C-style functions and there will be no detailed explanation of all available formatting rules and usage here.
+<p class="level0">See this table for notable exceptions.
+<p class="level1">
+<p class="level1"><span Class="bold">curl_mprintf()</span> Normal printf() clone.
+<p class="level1"><span Class="bold">curl_mfprintf()</span> Normal fprintf() clone.
+<p class="level1"><span Class="bold">curl_msprintf()</span> Normal sprintf() clone.
+<p class="level1"><span Class="bold">curl_msnprintf()</span> snprintf() clone. Many systems don't have this. It is just like <span Class="bold">sprintf</span> but with an extra argument after the buffer that specifies the length of the target buffer.
+<p class="level1"><span Class="bold">curl_mvprintf()</span> Normal vprintf() clone.
+<p class="level1"><span Class="bold">curl_mvfprintf()</span> Normal vfprintf() clone.
+<p class="level1"><span Class="bold">curl_mvsprintf()</span> Normal vsprintf() clone.
+<p class="level1"><span Class="bold">curl_mvsnprintf()</span> vsnprintf() clone. Many systems don't have this. It is just like <span Class="bold">vsprintf</span> but with an extra argument after the buffer that specifies the length of the target buffer.
+<p class="level1"><span Class="bold">curl_maprintf()</span> Like printf() but returns the output string as a malloc()ed string. The returned string must be free()ed by the receiver.
+<p class="level1"><span Class="bold">curl_mvaprintf()</span> Like curl_maprintf() but takes a va_list pointer argument instead of a variable amount of arguments.
+<p class="level0">
+<p class="level0">To easily use all these cloned functions instead of the normal ones, #define _MPRINTF_REPLACE before you include the &lt;curl/mprintf.h&gt; file. Then all the normal names like printf, fprintf, sprintf etc will use the curl-functions instead. <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">These function will be removed from the public libcurl API in a near future. They will instead be made "available" by source code access only, and then as curlx_-prefixed functions. See lib/README.curlx for further details. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">The <span Class="bold">curl_maprintf</span> and <span Class="bold">curl_mvaprintf</span> functions return a pointer to a newly allocated string, or NULL if it failed.
+<p class="level0">All other functions return the number of characters they actually outputted. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><span Class="manpage">printf (3)</span> <span Class="manpage"> sprintf (3)</span> <span Class="manpage"> fprintf (3)</span> <span Class="manpage"> vprintf (3) </span> <p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_mprintf.pdf b/docs/libcurl/curl_mprintf.pdf
new file mode 100644
index 0000000..544b5c1
--- /dev/null
+++ b/docs/libcurl/curl_mprintf.pdf
Binary files differ
diff --git a/docs/libcurl/curl_multi_add_handle.3 b/docs/libcurl/curl_multi_add_handle.3
new file mode 100644
index 0000000..85f199e
--- /dev/null
+++ b/docs/libcurl/curl_multi_add_handle.3
@@ -0,0 +1,37 @@
+.\"
+.TH curl_multi_add_handle 3 "4 March 2002" "libcurl 7.9.5" "libcurl Manual"
+.SH NAME
+curl_multi_add_handle - add an easy handle to a multi session
+.SH SYNOPSIS
+#include <curl/curl.h>
+
+CURLMcode curl_multi_add_handle(CURLM *multi_handle, CURL *easy_handle);
+.ad
+.SH DESCRIPTION
+Adds a standard easy handle to the multi stack. This function call will make
+this \fImulti_handle\fP control the specified \fIeasy_handle\fP.
+Furthermore, libcurl now initiates the connection associated with the
+specified \fIeasy_handle\fP.
+
+When an easy handle has been added to a multi stack, you can not and you must
+not use \fIcurl_easy_perform(3)\fP on that handle!
+
+If the easy handle is not set to use a shared (CURLOPT_SHARE) or global DNS
+cache (CURLOPT_DNS_USE_GLOBAL_CACHE), it will be made to use the DNS cache
+that is shared between all easy handles within the multi handle when
+\fIcurl_multi_add_handle(3)\fP is called.
+
+The easy handle will remain added until you remove it again with
+\fIcurl_multi_remove_handle(3)\fP. You should remove the easy handle from the
+multi stack before you terminate first the easy handle and then the multi
+handle:
+
+1 - \fIcurl_multi_remove_handle(3)\fP
+
+2 - \fIcurl_easy_cleanup(3)\fP
+
+3 - \fIcurl_multi_cleanup(3)\fP
+.SH RETURN VALUE
+CURLMcode type, general libcurl multi interface error code.
+.SH "SEE ALSO"
+.BR curl_multi_cleanup "(3)," curl_multi_init "(3)"
diff --git a/docs/libcurl/curl_multi_add_handle.html b/docs/libcurl/curl_multi_add_handle.html
new file mode 100644
index 0000000..75ca271
--- /dev/null
+++ b/docs/libcurl/curl_multi_add_handle.html
@@ -0,0 +1,61 @@
+<html><head>
+<title>curl_multi_add_handle man page</title>
+<meta name="generator" content="roffit 0.7">
+<STYLE type="text/css">
+P.level0 {
+ padding-left: 2em;
+}
+
+P.level1 {
+ padding-left: 4em;
+}
+
+P.level2 {
+ padding-left: 6em;
+}
+
+span.emphasis {
+ font-style: italic;
+}
+
+span.bold {
+ font-weight: bold;
+}
+
+span.manpage {
+ font-weight: bold;
+}
+
+h2.nroffsh {
+ background-color: #e0e0e0;
+}
+
+span.nroffip {
+ font-weight: bold;
+ font-size: 120%;
+ font-family: monospace;
+}
+
+p.roffit {
+ text-align: center;
+ font-size: 80%;
+}
+</STYLE>
+</head><body>
+
+<p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
+<p class="level0">curl_multi_add_handle - add an easy handle to a multi session <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0">#include &lt;curl/curl.h&gt;
+<p class="level0">CURLMcode curl_multi_add_handle(CURLM *multi_handle, CURL *easy_handle);
+<p class="level0"><a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">Adds a standard easy handle to the multi stack. This function call will make this <span Class="emphasis">multi_handle</span> control the specified <span Class="emphasis">easy_handle</span>. Furthermore, libcurl now initiates the connection associated with the specified <span Class="emphasis">easy_handle</span>.
+<p class="level0">When an easy handle has been added to a multi stack, you can not and you must not use <a class="emphasis" href="./curl_easy_perform.html">curl_easy_perform(3)</a> on that handle!
+<p class="level0">If the easy handle is not set to use a shared (CURLOPT_SHARE) or global DNS cache (CURLOPT_DNS_USE_GLOBAL_CACHE), it will be made to use the DNS cache that is shared between all easy handles within the multi handle when <a class="emphasis" href="./curl_multi_add_handle.html">curl_multi_add_handle(3)</a> is called.
+<p class="level0">The easy handle will remain added until you remove it again with <a class="emphasis" href="./curl_multi_remove_handle.html">curl_multi_remove_handle(3)</a>. You should remove the easy handle from the multi stack before you terminate first the easy handle and then the multi handle:
+<p class="level0">1 - <a class="emphasis" href="./curl_multi_remove_handle.html">curl_multi_remove_handle(3)</a>
+<p class="level0">2 - <a class="emphasis" href="./curl_easy_cleanup.html">curl_easy_cleanup(3)</a>
+<p class="level0">3 - <a class="emphasis" href="./curl_multi_cleanup.html">curl_multi_cleanup(3)</a> <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">CURLMcode type, general libcurl multi interface error code. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><a class="manpage" href="./curl_multi_cleanup.html">curl_multi_cleanup (3)</a> <a class="manpage" href="./curl_multi_init.html"> curl_multi_init (3)</a> <p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_multi_add_handle.pdf b/docs/libcurl/curl_multi_add_handle.pdf
new file mode 100644
index 0000000..9fd8fd4
--- /dev/null
+++ b/docs/libcurl/curl_multi_add_handle.pdf
Binary files differ
diff --git a/docs/libcurl/curl_multi_assign.3 b/docs/libcurl/curl_multi_assign.3
new file mode 100644
index 0000000..3e15d73
--- /dev/null
+++ b/docs/libcurl/curl_multi_assign.3
@@ -0,0 +1,43 @@
+.\"
+.TH curl_multi_assign 3 "9 Jul 2006" "libcurl 7.16.0" "libcurl Manual"
+.SH NAME
+curl_multi_assign \- set data to association with an internal socket
+.SH SYNOPSIS
+#include <curl/curl.h>
+
+CURLMcode curl_multi_assign(CURLM *multi_handle, curl_socket_t sockfd,
+ void *sockptr);
+.SH DESCRIPTION
+This function assigns an association in the multi handle between the given
+socket and a private pointer of the application. This is (only) useful for
+\fIcurl_multi_socket(3)\fP uses.
+
+When set, the \fIsockptr\fP pointer will be passed to all future socket
+callbacks for the specific \fIsockfd\fP socket.
+
+If the given \fIsockfd\fP isn't already in use by libcurl, this function will
+return an error.
+
+libcurl only keeps one single pointer associated with a socket, so calling
+this function several times for the same socket will make the last set pointer
+get used.
+
+The idea here being that this association (socket to private pointer) is
+something that just about every application that uses this API will need and
+then libcurl can just as well do it since it already has an internal hash
+table lookup for this.
+.SH "RETURN VALUE"
+The standard CURLMcode for multi interface error codes.
+.SH "TYPICAL USAGE"
+In a typical application you allocate a struct or at least use some kind of
+semi-dynamic data for each socket that we must wait for action on when using
+the \fIcurl_multi_socket(3)\fP approach.
+
+When our socket-callback gets called by libcurl and we get to know about yet
+another socket to wait for, we can use \fIcurl_multi_assign(3)\fP to point out
+the particular data so that when we get updates about this same socket again,
+we don't have to find the struct associated with this socket by ourselves.
+.SH AVAILABILITY
+This function was added in libcurl 7.15.5, although not deemed stable yet.
+.SH "SEE ALSO"
+.BR curl_multi_setopt "(3), " curl_multi_socket "(3) "
diff --git a/docs/libcurl/curl_multi_assign.html b/docs/libcurl/curl_multi_assign.html
new file mode 100644
index 0000000..e560218
--- /dev/null
+++ b/docs/libcurl/curl_multi_assign.html
@@ -0,0 +1,61 @@
+<html><head>
+<title>curl_multi_assign man page</title>
+<meta name="generator" content="roffit 0.7">
+<STYLE type="text/css">
+P.level0 {
+ padding-left: 2em;
+}
+
+P.level1 {
+ padding-left: 4em;
+}
+
+P.level2 {
+ padding-left: 6em;
+}
+
+span.emphasis {
+ font-style: italic;
+}
+
+span.bold {
+ font-weight: bold;
+}
+
+span.manpage {
+ font-weight: bold;
+}
+
+h2.nroffsh {
+ background-color: #e0e0e0;
+}
+
+span.nroffip {
+ font-weight: bold;
+ font-size: 120%;
+ font-family: monospace;
+}
+
+p.roffit {
+ text-align: center;
+ font-size: 80%;
+}
+</STYLE>
+</head><body>
+
+<p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
+<p class="level0">curl_multi_assign - set data to association with an internal socket <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0">#include &lt;curl/curl.h&gt;
+<p class="level0">CURLMcode curl_multi_assign(CURLM *multi_handle, curl_socket_t sockfd, &nbsp; void *sockptr); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">This function assigns an association in the multi handle between the given socket and a private pointer of the application. This is (only) useful for <a class="emphasis" href="./curl_multi_socket.html">curl_multi_socket(3)</a> uses.
+<p class="level0">When set, the <span Class="emphasis">sockptr</span> pointer will be passed to all future socket callbacks for the specific <span Class="emphasis">sockfd</span> socket.
+<p class="level0">If the given <span Class="emphasis">sockfd</span> isn't already in use by libcurl, this function will return an error.
+<p class="level0">libcurl only keeps one single pointer associated with a socket, so calling this function several times for the same socket will make the last set pointer get used.
+<p class="level0">The idea here being that this association (socket to private pointer) is something that just about every application that uses this API will need and then libcurl can just as well do it since it already has an internal hash table lookup for this. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">The standard CURLMcode for multi interface error codes. <a name="TYPICAL"></a><h2 class="nroffsh">TYPICAL USAGE</h2>
+<p class="level0">In a typical application you allocate a struct or at least use some kind of semi-dynamic data for each socket that we must wait for action on when using the <a class="emphasis" href="./curl_multi_socket.html">curl_multi_socket(3)</a> approach.
+<p class="level0">When our socket-callback gets called by libcurl and we get to know about yet another socket to wait for, we can use <a class="emphasis" href="./curl_multi_assign.html">curl_multi_assign(3)</a> to point out the particular data so that when we get updates about this same socket again, we don't have to find the struct associated with this socket by ourselves. <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">This function was added in libcurl 7.15.5, although not deemed stable yet. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><a class="manpage" href="./curl_multi_setopt.html">curl_multi_setopt (3)</a> <a class="manpage" href="./curl_multi_socket.html"> curl_multi_socket (3) </a> <p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_multi_assign.pdf b/docs/libcurl/curl_multi_assign.pdf
new file mode 100644
index 0000000..06d204a
--- /dev/null
+++ b/docs/libcurl/curl_multi_assign.pdf
@@ -0,0 +1,117 @@
+%PDF-1.4
+%Çì¢
+5 0 obj
+<</Length 6 0 R/Filter /FlateDecode>>
+stream
+xœ½WÛnÛH}×W4°¡«ÓÍ;1‹4Yc s[É °M¶$Ž)RÃKýÃüÊüãœê&)Šq’·…Kf7YU§Î9Õü“ .™ Ÿî3ÙÏ^Ýl[Ïûÿ·³?gRo`ÝG²g?¯±)¤ ëÍÌÜ'Y`³ÀuÙz?“2ä^ÄÖÇÙ½•´UþyßæMö9®ël[<XÎÃœåÙ#­Ì¶'¸õ&.Ú8gÏoŸÿoýël!¸-ñÔ±#Äæ‘G៭ofÖÛåüÒŪôÜAJëtf½¹ž¯ÿ%k -¤MËâ9²¿Y­–ÆMÌš’áb™dq“•;fÍŽÅËŠFU2ÆÒÓ\
+K5:Ë‹ÜHn!}ê\î>½}÷þnuw™‘Þ¢³±þ•IÞ¦Šý›2zE¿øî?´Ýv©ÈõË{ëõ‡Û›7I‰MÏ@¥ÙKsqi®®Ì>eÄ£Ðs<¤ú¹ÑyoÒ«Z‚.C._JŠ«¿A3KÙKºïÐTóŸLãr%°Gÿ÷úîõíêýzõîí·Š<š*Öz—ÕlÓ‰ÆÙ”TÔcø³‚5;Åt…ÌTÈUsTÊ,l3
+„z¤G©Û¾9Q—þE‹NO£ˆÛaºÝbQK›KÑßDÀaAºÜq¢±YÌUÐÖ]ŸûJèÆ#å9ê¢Å¥æ+7úIN(¹zµ¨´øpȳDÃÀ™ ÿ¬²ÈOT[«M›³MY¤¥èåéãy^—Ј3À´‡ŠòóÎ]~RCÖ!B!ú…ƈñ¢“èutÆYÔ\?Öv.!4b.~ß¡AÐÔui’¡ #¢ÃìÞ¢Ä$¨ÙELëd5PGòÀ=ïîÑ;fy&°Ø¢R­Z\Ø´M[)Ö³?²ýz—`í1NžjÂKó¦>¨$û+éb ©a?¢}•™°-hg’˜ðÐm5…í "72sBx“+TV›çH‹
+ÝŽ´âÂN` ¸÷,„ßKÔÊêâ…6®Cƒå¡Œzê7cúB¦Ñ€z^©8=‘ÑqöxêýœÚ;V±îJ¥Ð„‚”¬ª
+üô<«ÃC
+Aƒ¢ƒÖìCîžÆˆÛŒÜ• éE–R‡×Э¬Øægåô¾{ž6ü
+tÓqß$ÃZõØ6þ°¯`üM¶WŒtý€ o2\êxÿ55.ûøIÇî°}X„ƒÃ<½¾äqÝèÕ°Åw4"5Ò‹<>ÂTF¾Id;³TÅl§*2MƒEÜ@Æ&û0¥/ɉœ®ŸÆ[%éÖýÕ.…@u¹WˆØÿ£E-ñcÙ6L]¨€|+ò~¤ªO“ƪNÆ!¦QÀ}w4e„ëèmÆ@Mlr+SýòýÊô¤P Y{C†Õó0wM¢5;*lKK–5DÃDÑ—¸ÓÃ.®/Îø{§‡‡M㻳òøÔÍËò©=tìÉà™/¾sr¸·n¯×nß²sé¸<ò¥µ¼ùp=5Æ¡ZÓëºAq•²ó‘™ѩSÜ '‚uhq2ÚWóeàÓûÕëå ûp·œ{H)°#ë—ogDG·@—¿‚°ætÀ$ËÇ#Ê–,»ÄŸŠÜTmÒ0d„FåŠOVCìaOTn }¶HOE¼ÏsX£UœìŒà€¼k»<œ Q-ú‹—BÕ”8ÒÙ±ŽƒZcô—¿ S#j´µ¡°šŽ pŸ‡áÿiÞÀªD½ÝÌ <îž•ßQþÞ ß²­
+íHŒE?É@jm`ÿÙ͵€ÈÖ8ÀSQö~EO†ø.·ÜãÙ0FláÈ~ZhuŸô™©bUf†«G^g/Gýh)8¨×k[ÐûHÓõ TtÁŠáhwuŸÞØà£]Ç1iÒ ‡N/ìì@°É(uؾýuÇï$m qÚq‡¾•ÆòÕMþWM–´y\šb¶Qc:€Û–àGÆ µ+ÑèÐéK¼¶„8‡L&Ëd¨ÄÛ9”ºÒ`Å=8-1Þ/gLˆ¾cÍ®?»jÜð9ÌŸ…­]ž°ÿÂÎüû„ÓïéuS²¿Œaö¢ÎcSÌÐsקlA3P²Vù—¹¤´=×êg!¹ MßôÒ¥Ñr¶!ì† Ël9$ °|OöÝ[Ý,^ݬ֟&:ò¸ã†áÒËw‘  /iŠz²óP@Çqš»‚i5»²ÝîÈÍR¥öØV—?õ'¿ï½^_³åÍÝ»óÛÔä­pì!ª)Íe!Ð|/KóêòIäûçóò¥#;21ïÀ'Å„ã'“džp8˜Ipè1:MÚP³Þ=¢_Ï4’Ü Ï/ 9³…ðõNÈ]·¿CÒ¥ëõì7üükEˆ9endstream
+endobj
+6 0 obj
+1774
+endobj
+4 0 obj
+<</Type/Page/MediaBox [0 0 612 792]
+/Rotate 0/Parent 3 0 R
+/Resources<</ProcSet[/PDF /Text]
+/ExtGState 11 0 R
+/Font 12 0 R
+>>
+/Contents 5 0 R
+>>
+endobj
+3 0 obj
+<< /Type /Pages /Kids [
+4 0 R
+] /Count 1
+>>
+endobj
+1 0 obj
+<</Type /Catalog /Pages 3 0 R
+/Metadata 14 0 R
+>>
+endobj
+7 0 obj
+<</Type/ExtGState
+/OPM 1>>endobj
+11 0 obj
+<</R7
+7 0 R>>
+endobj
+12 0 obj
+<</R10
+10 0 R/R9
+9 0 R/R8
+8 0 R>>
+endobj
+10 0 obj
+<</BaseFont/Times-Italic/Type/Font
+/Subtype/Type1>>
+endobj
+9 0 obj
+<</BaseFont/Times-Bold/Type/Font
+/Subtype/Type1>>
+endobj
+8 0 obj
+<</BaseFont/Times-Roman/Type/Font
+/Encoding 13 0 R/Subtype/Type1>>
+endobj
+13 0 obj
+<</Type/Encoding/Differences[
+140/fi
+173/minus]>>
+endobj
+14 0 obj
+<</Type/Metadata
+/Subtype/XML/Length 1321>>stream
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<?adobe-xap-filters esc="CRLF"?>
+<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+<rdf:Description rdf:about='370cbeda-0e69-11eb-0000-cb573b64c622' xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 8.71'/>
+<rdf:Description rdf:about='370cbeda-0e69-11eb-0000-cb573b64c622' xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2010-10-13T00:04:21+02:00</xmp:ModifyDate>
+<xmp:CreateDate>2010-10-13T00:04:21+02:00</xmp:CreateDate>
+<xmp:CreatorTool>groff version 1.20.1</xmp:CreatorTool></rdf:Description>
+<rdf:Description rdf:about='370cbeda-0e69-11eb-0000-cb573b64c622' xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='370cbeda-0e69-11eb-0000-cb573b64c622'/>
+<rdf:Description rdf:about='370cbeda-0e69-11eb-0000-cb573b64c622' xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>Untitled</rdf:li></rdf:Alt></dc:title></rdf:Description>
+</rdf:RDF>
+</x:xmpmeta>
+
+
+<?xpacket end='w'?>
+endstream
+endobj
+2 0 obj
+<</Producer(GPL Ghostscript 8.71)
+/CreationDate(D:20101013000421+02'00')
+/ModDate(D:20101013000421+02'00')
+/Creator(groff version 1.20.1)>>endobj
+xref
+0 15
+0000000000 65535 f
+0000002098 00000 n
+0000003963 00000 n
+0000002039 00000 n
+0000001879 00000 n
+0000000015 00000 n
+0000001859 00000 n
+0000002163 00000 n
+0000002417 00000 n
+0000002352 00000 n
+0000002284 00000 n
+0000002204 00000 n
+0000002234 00000 n
+0000002499 00000 n
+0000002565 00000 n
+trailer
+<< /Size 15 /Root 1 0 R /Info 2 0 R
+/ID [<EC7A968ED9EE001D56172FED80DF0731><EC7A968ED9EE001D56172FED80DF0731>]
+>>
+startxref
+4117
+%%EOF
diff --git a/docs/libcurl/curl_multi_cleanup.3 b/docs/libcurl/curl_multi_cleanup.3
new file mode 100644
index 0000000..d40173c
--- /dev/null
+++ b/docs/libcurl/curl_multi_cleanup.3
@@ -0,0 +1,26 @@
+.\"
+.TH curl_multi_cleanup 3 "1 March 2002" "libcurl 7.9.5" "libcurl Manual"
+.SH NAME
+curl_multi_cleanup - close down a multi session
+.SH SYNOPSIS
+.B #include <curl/curl.h>
+.sp
+.BI "CURLMcode curl_multi_cleanup( CURLM *multi_handle );"
+.ad
+.SH DESCRIPTION
+Cleans up and removes a whole multi stack. It does not free or touch any
+individual easy handles in any way - they still need to be closed
+individually, using the usual \fIcurl_easy_cleanup(3)\fP way. The order of
+cleaning up should be:
+
+1 - \fIcurl_multi_remove_handle(3)\fP before any easy handles are cleaned up
+
+2 - \fIcurl_easy_cleanup(3)\fP can now be called independently since the easy
+handle is no longer connected to the multi handle
+
+3 - \fIcurl_multi_cleanup(3)\fP should be called when all easy handles are
+removed
+.SH RETURN VALUE
+CURLMcode type, general libcurl multi interface error code.
+.SH "SEE ALSO"
+.BR curl_multi_init "(3)," curl_easy_cleanup "(3)," curl_easy_init "(3)"
diff --git a/docs/libcurl/curl_multi_cleanup.html b/docs/libcurl/curl_multi_cleanup.html
new file mode 100644
index 0000000..40381fd
--- /dev/null
+++ b/docs/libcurl/curl_multi_cleanup.html
@@ -0,0 +1,58 @@
+<html><head>
+<title>curl_multi_cleanup man page</title>
+<meta name="generator" content="roffit 0.7">
+<STYLE type="text/css">
+P.level0 {
+ padding-left: 2em;
+}
+
+P.level1 {
+ padding-left: 4em;
+}
+
+P.level2 {
+ padding-left: 6em;
+}
+
+span.emphasis {
+ font-style: italic;
+}
+
+span.bold {
+ font-weight: bold;
+}
+
+span.manpage {
+ font-weight: bold;
+}
+
+h2.nroffsh {
+ background-color: #e0e0e0;
+}
+
+span.nroffip {
+ font-weight: bold;
+ font-size: 120%;
+ font-family: monospace;
+}
+
+p.roffit {
+ text-align: center;
+ font-size: 80%;
+}
+</STYLE>
+</head><body>
+
+<p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
+<p class="level0">curl_multi_cleanup - close down a multi session <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><span Class="bold">#include &lt;curl/curl.h&gt;</span>
+<p class="level0"><span Class="bold">CURLMcode curl_multi_cleanup( CURLM *multi_handle );</span>
+<p class="level0"><a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">Cleans up and removes a whole multi stack. It does not free or touch any individual easy handles in any way - they still need to be closed individually, using the usual <a class="emphasis" href="./curl_easy_cleanup.html">curl_easy_cleanup(3)</a> way. The order of cleaning up should be:
+<p class="level0">1 - <a class="emphasis" href="./curl_multi_remove_handle.html">curl_multi_remove_handle(3)</a> before any easy handles are cleaned up
+<p class="level0">2 - <a class="emphasis" href="./curl_easy_cleanup.html">curl_easy_cleanup(3)</a> can now be called independently since the easy handle is no longer connected to the multi handle
+<p class="level0">3 - <a class="emphasis" href="./curl_multi_cleanup.html">curl_multi_cleanup(3)</a> should be called when all easy handles are removed <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">CURLMcode type, general libcurl multi interface error code. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><a class="manpage" href="./curl_multi_init.html">curl_multi_init (3)</a> <a class="manpage" href="./curl_easy_cleanup.html"> curl_easy_cleanup (3)</a> <a class="manpage" href="./curl_easy_init.html"> curl_easy_init (3)</a> <p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_multi_cleanup.pdf b/docs/libcurl/curl_multi_cleanup.pdf
new file mode 100644
index 0000000..2d55d43
--- /dev/null
+++ b/docs/libcurl/curl_multi_cleanup.pdf
Binary files differ
diff --git a/docs/libcurl/curl_multi_fdset.3 b/docs/libcurl/curl_multi_fdset.3
new file mode 100644
index 0000000..7928105
--- /dev/null
+++ b/docs/libcurl/curl_multi_fdset.3
@@ -0,0 +1,41 @@
+.\"
+.TH curl_multi_fdset 3 "2 Jan 2006" "libcurl 7.16.0" "libcurl Manual"
+.SH NAME
+curl_multi_fdset - extracts file descriptor information from a multi handle
+.SH SYNOPSIS
+.nf
+#include <curl/curl.h>
+
+CURLMcode curl_multi_fdset(CURLM *multi_handle,
+ fd_set *read_fd_set,
+ fd_set *write_fd_set,
+ fd_set *exc_fd_set,
+ int *max_fd);
+.ad
+.SH DESCRIPTION
+This function extracts file descriptor information from a given multi_handle.
+libcurl returns its fd_set sets. The application can use these to select() on,
+but be sure to FD_ZERO them before calling this function as
+\fIcurl_multi_fdset(3)\fP only adds its own descriptors, it doesn't zero or
+otherwise remove any others. The \fIcurl_multi_perform(3)\fP function should be
+called as soon as one of them is ready to be read from or written to.
+
+To be sure to have up-to-date results, you should call
+\fIcurl_multi_perform\fP until it does not return CURLM_CALL_MULTI_PERFORM
+prior to calling \fIcurl_multi_fdset\fP. This will make sure that libcurl has
+updated the handles' socket states.
+
+If no file descriptors are set by libcurl, \fImax_fd\fP will contain -1 when
+this function returns. Otherwise it will contain the higher descriptor number
+libcurl set.
+
+When doing select(), you should use \fBcurl_multi_timeout\fP to figure out how
+long to wait for action. Call \fIcurl_multi_perform\fP even if no activity has
+been seen on the fd_sets after the timeout expires as otherwise internal
+retries and timeouts may not work as you'd think and want.
+.SH RETURN VALUE
+CURLMcode type, general libcurl multi interface error code. See
+\fIlibcurl-errors(3)\fP
+.SH "SEE ALSO"
+.BR curl_multi_cleanup "(3), " curl_multi_init "(3), "
+.BR curl_multi_timeout "(3), " curl_multi_perform "(3) "
diff --git a/docs/libcurl/curl_multi_fdset.html b/docs/libcurl/curl_multi_fdset.html
new file mode 100644
index 0000000..51e444c
--- /dev/null
+++ b/docs/libcurl/curl_multi_fdset.html
@@ -0,0 +1,64 @@
+<html><head>
+<title>curl_multi_fdset man page</title>
+<meta name="generator" content="roffit 0.7">
+<STYLE type="text/css">
+P.level0 {
+ padding-left: 2em;
+}
+
+P.level1 {
+ padding-left: 4em;
+}
+
+P.level2 {
+ padding-left: 6em;
+}
+
+span.emphasis {
+ font-style: italic;
+}
+
+span.bold {
+ font-weight: bold;
+}
+
+span.manpage {
+ font-weight: bold;
+}
+
+h2.nroffsh {
+ background-color: #e0e0e0;
+}
+
+span.nroffip {
+ font-weight: bold;
+ font-size: 120%;
+ font-family: monospace;
+}
+
+p.roffit {
+ text-align: center;
+ font-size: 80%;
+}
+</STYLE>
+</head><body>
+
+<p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
+<p class="level0">curl_multi_fdset - extracts file descriptor information from a multi handle <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><pre>
+<p class="level0">#include &lt;curl/curl.h&gt;
+ <p class="level0">CURLMcode curl_multi_fdset(CURLM *multi_handle,
+ &nbsp; fd_set *read_fd_set,
+ &nbsp; fd_set *write_fd_set,
+ &nbsp; fd_set *exc_fd_set,
+ &nbsp; int *max_fd);
+ <p class="level0"></pre>
+<a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">This function extracts file descriptor information from a given multi_handle. libcurl returns its fd_set sets. The application can use these to select() on, but be sure to FD_ZERO them before calling this function as <a class="emphasis" href="./curl_multi_fdset.html">curl_multi_fdset(3)</a> only adds its own descriptors, it doesn't zero or otherwise remove any others. The <a class="emphasis" href="./curl_multi_perform.html">curl_multi_perform(3)</a> function should be called as soon as one of them is ready to be read from or written to.
+<p class="level0">To be sure to have up-to-date results, you should call <span Class="emphasis">curl_multi_perform</span> until it does not return CURLM_CALL_MULTI_PERFORM prior to calling <span Class="emphasis">curl_multi_fdset</span>. This will make sure that libcurl has updated the handles' socket states.
+<p class="level0">If no file descriptors are set by libcurl, <span Class="emphasis">max_fd</span> will contain -1 when this function returns. Otherwise it will contain the higher descriptor number libcurl set.
+<p class="level0">When doing select(), you should use <span Class="bold">curl_multi_timeout</span> to figure out how long to wait for action. Call <span Class="emphasis">curl_multi_perform</span> even if no activity has been seen on the fd_sets after the timeout expires as otherwise internal retries and timeouts may not work as you'd think and want. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">CURLMcode type, general libcurl multi interface error code. See <span Class="emphasis">libcurl-errors(3)</span> <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><a class="manpage" href="./curl_multi_cleanup.html">curl_multi_cleanup (3)</a> <a class="manpage" href="./curl_multi_init.html"> curl_multi_init (3)</a> <span Class="manpage"> </span> <a class="manpage" href="./curl_multi_timeout.html">curl_multi_timeout (3)</a> <a class="manpage" href="./curl_multi_perform.html"> curl_multi_perform (3) </a> <p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_multi_fdset.pdf b/docs/libcurl/curl_multi_fdset.pdf
new file mode 100644
index 0000000..86fa5eb
--- /dev/null
+++ b/docs/libcurl/curl_multi_fdset.pdf
Binary files differ
diff --git a/docs/libcurl/curl_multi_info_read.3 b/docs/libcurl/curl_multi_info_read.3
new file mode 100644
index 0000000..9ff08e7
--- /dev/null
+++ b/docs/libcurl/curl_multi_info_read.3
@@ -0,0 +1,56 @@
+.\"
+.TH curl_multi_info_read 3 "18 Dec 2004" "libcurl 7.10.3" "libcurl Manual"
+.SH NAME
+curl_multi_info_read - read multi stack informationals
+.SH SYNOPSIS
+#include <curl/curl.h>
+
+CURLMsg *curl_multi_info_read( CURLM *multi_handle,
+ int *msgs_in_queue);
+.ad
+.SH DESCRIPTION
+Ask the multi handle if there are any messages/informationals from the
+individual transfers. Messages may include informationals such as an error
+code from the transfer or just the fact that a transfer is completed. More
+details on these should be written down as well.
+
+Repeated calls to this function will return a new struct each time, until a
+NULL is returned as a signal that there is no more to get at this point. The
+integer pointed to with \fImsgs_in_queue\fP will contain the number of
+remaining messages after this function was called.
+
+When you fetch a message using this function, it is removed from the internal
+queue so calling this function again will not return the same message
+again. It will instead return new messages at each new invoke until the queue
+is emptied.
+
+\fBWARNING:\fP The data the returned pointer points to will not survive
+calling \fIcurl_multi_cleanup(3)\fP, \fIcurl_multi_remove_handle(3)\fP or
+\fIcurl_easy_cleanup(3)\fP.
+
+The 'CURLMsg' struct is very simple and only contains very basic information.
+If more involved information is wanted, the particular "easy handle" in
+present in that struct and can thus be used in subsequent regular
+\fIcurl_easy_getinfo(3)\fP calls (or similar):
+
+.nf
+ struct CURLMsg {
+ CURLMSG msg; /* what this message means */
+ CURL *easy_handle; /* the handle it concerns */
+ union {
+ void *whatever; /* message-specific data */
+ CURLcode result; /* return code for transfer */
+ } data;
+ };
+.fi
+When \fBmsg\fP is \fICURLMSG_DONE\fP, the message identifies a transfer that
+is done, and then \fBresult\fP contains the return code for the easy handle
+that just completed.
+
+At this point, there are no other \fBmsg\fP types defined.
+.SH "RETURN VALUE"
+A pointer to a filled-in struct, or NULL if it failed or ran out of
+structs. It also writes the number of messages left in the queue (after this
+read) in the integer the second argument points to.
+.SH "SEE ALSO"
+.BR curl_multi_cleanup "(3), " curl_multi_init "(3), " curl_multi_perform "(3)"
diff --git a/docs/libcurl/curl_multi_info_read.html b/docs/libcurl/curl_multi_info_read.html
new file mode 100644
index 0000000..2f53e6d
--- /dev/null
+++ b/docs/libcurl/curl_multi_info_read.html
@@ -0,0 +1,72 @@
+<html><head>
+<title>curl_multi_info_read man page</title>
+<meta name="generator" content="roffit 0.7">
+<STYLE type="text/css">
+P.level0 {
+ padding-left: 2em;
+}
+
+P.level1 {
+ padding-left: 4em;
+}
+
+P.level2 {
+ padding-left: 6em;
+}
+
+span.emphasis {
+ font-style: italic;
+}
+
+span.bold {
+ font-weight: bold;
+}
+
+span.manpage {
+ font-weight: bold;
+}
+
+h2.nroffsh {
+ background-color: #e0e0e0;
+}
+
+span.nroffip {
+ font-weight: bold;
+ font-size: 120%;
+ font-family: monospace;
+}
+
+p.roffit {
+ text-align: center;
+ font-size: 80%;
+}
+</STYLE>
+</head><body>
+
+<p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
+<p class="level0">curl_multi_info_read - read multi stack informationals <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0">#include &lt;curl/curl.h&gt;
+<p class="level0">CURLMsg *curl_multi_info_read( CURLM *multi_handle, &nbsp; int *msgs_in_queue);
+<p class="level0"><a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">Ask the multi handle if there are any messages/informationals from the individual transfers. Messages may include informationals such as an error code from the transfer or just the fact that a transfer is completed. More details on these should be written down as well.
+<p class="level0">Repeated calls to this function will return a new struct each time, until a NULL is returned as a signal that there is no more to get at this point. The integer pointed to with <span Class="emphasis">msgs_in_queue</span> will contain the number of remaining messages after this function was called.
+<p class="level0">When you fetch a message using this function, it is removed from the internal queue so calling this function again will not return the same message again. It will instead return new messages at each new invoke until the queue is emptied.
+<p class="level0"><span Class="bold">WARNING:</span> The data the returned pointer points to will not survive calling <a class="emphasis" href="./curl_multi_cleanup.html">curl_multi_cleanup(3)</a>, <a class="emphasis" href="./curl_multi_remove_handle.html">curl_multi_remove_handle(3)</a> or <a class="emphasis" href="./curl_easy_cleanup.html">curl_easy_cleanup(3)</a>.
+<p class="level0">The 'CURLMsg' struct is very simple and only contains very basic information. If more involved information is wanted, the particular "easy handle" in present in that struct and can thus be used in subsequent regular <a class="emphasis" href="./curl_easy_getinfo.html">curl_easy_getinfo(3)</a> calls (or similar):
+<p class="level0"><pre>
+<p class="level0">&nbsp;struct CURLMsg {
+ &nbsp; CURLMSG msg; /* what this message means */
+ &nbsp; CURL *easy_handle; /* the handle it concerns */
+ &nbsp; union {
+ &nbsp; void *whatever; /* message-specific data */
+ &nbsp; CURLcode result; /* return code for transfer */
+ &nbsp; } data;
+ &nbsp;};
+ </pre>
+
+<p class="level0">When <span Class="bold">msg</span> is <span Class="emphasis">CURLMSG_DONE</span>, the message identifies a transfer that is done, and then <span Class="bold">result</span> contains the return code for the easy handle that just completed.
+<p class="level0">At this point, there are no other <span Class="bold">msg</span> types defined. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">A pointer to a filled-in struct, or NULL if it failed or ran out of structs. It also writes the number of messages left in the queue (after this read) in the integer the second argument points to. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><a class="manpage" href="./curl_multi_cleanup.html">curl_multi_cleanup (3)</a> <a class="manpage" href="./curl_multi_init.html"> curl_multi_init (3)</a> <a class="manpage" href="./curl_multi_perform.html"> curl_multi_perform (3)</a> <p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_multi_info_read.pdf b/docs/libcurl/curl_multi_info_read.pdf
new file mode 100644
index 0000000..0a14599
--- /dev/null
+++ b/docs/libcurl/curl_multi_info_read.pdf
Binary files differ
diff --git a/docs/libcurl/curl_multi_init.3 b/docs/libcurl/curl_multi_init.3
new file mode 100644
index 0000000..0ac298e
--- /dev/null
+++ b/docs/libcurl/curl_multi_init.3
@@ -0,0 +1,20 @@
+.\"
+.TH curl_multi_init 3 "1 March 2002" "libcurl 7.9.5" "libcurl Manual"
+.SH NAME
+curl_multi_init - create a multi handle
+.SH SYNOPSIS
+.B #include <curl/curl.h>
+.sp
+.BI "CURLM *curl_multi_init( );"
+.ad
+.SH DESCRIPTION
+This function returns a CURLM handle to be used as input to all the other
+multi-functions, sometimes referred to as a multi handle in some places in the
+documentation. This init call MUST have a corresponding call to
+\fIcurl_multi_cleanup(3)\fP when the operation is complete.
+.SH RETURN VALUE
+If this function returns NULL, something went wrong and you cannot use the
+other curl functions.
+.SH "SEE ALSO"
+.BR curl_multi_cleanup "(3)," curl_global_init "(3)," curl_easy_init "(3)"
+
diff --git a/docs/libcurl/curl_multi_init.html b/docs/libcurl/curl_multi_init.html
new file mode 100644
index 0000000..cf9b304
--- /dev/null
+++ b/docs/libcurl/curl_multi_init.html
@@ -0,0 +1,56 @@
+<html><head>
+<title>curl_multi_init man page</title>
+<meta name="generator" content="roffit 0.7">
+<STYLE type="text/css">
+P.level0 {
+ padding-left: 2em;
+}
+
+P.level1 {
+ padding-left: 4em;
+}
+
+P.level2 {
+ padding-left: 6em;
+}
+
+span.emphasis {
+ font-style: italic;
+}
+
+span.bold {
+ font-weight: bold;
+}
+
+span.manpage {
+ font-weight: bold;
+}
+
+h2.nroffsh {
+ background-color: #e0e0e0;
+}
+
+span.nroffip {
+ font-weight: bold;
+ font-size: 120%;
+ font-family: monospace;
+}
+
+p.roffit {
+ text-align: center;
+ font-size: 80%;
+}
+</STYLE>
+</head><body>
+
+<p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
+<p class="level0">curl_multi_init - create a multi handle <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><span Class="bold">#include &lt;curl/curl.h&gt;</span>
+<p class="level0"><span Class="bold">CURLM *curl_multi_init( );</span>
+<p class="level0"><a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">This function returns a CURLM handle to be used as input to all the other multi-functions, sometimes referred to as a multi handle in some places in the documentation. This init call MUST have a corresponding call to <a class="emphasis" href="./curl_multi_cleanup.html">curl_multi_cleanup(3)</a> when the operation is complete. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">If this function returns NULL, something went wrong and you cannot use the other curl functions. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><a class="manpage" href="./curl_multi_cleanup.html">curl_multi_cleanup (3)</a> <a class="manpage" href="./curl_global_init.html"> curl_global_init (3)</a> <a class="manpage" href="./curl_easy_init.html"> curl_easy_init (3)</a>
+<p class="level0"><p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_multi_init.pdf b/docs/libcurl/curl_multi_init.pdf
new file mode 100644
index 0000000..67f10ed
--- /dev/null
+++ b/docs/libcurl/curl_multi_init.pdf
Binary files differ
diff --git a/docs/libcurl/curl_multi_perform.3 b/docs/libcurl/curl_multi_perform.3
new file mode 100644
index 0000000..ede2390
--- /dev/null
+++ b/docs/libcurl/curl_multi_perform.3
@@ -0,0 +1,53 @@
+.\"
+.TH curl_multi_perform 3 "1 March 2002" "libcurl 7.9.5" "libcurl Manual"
+.SH NAME
+curl_multi_perform - reads/writes available data from each easy handle
+.SH SYNOPSIS
+#include <curl/curl.h>
+
+CURLMcode curl_multi_perform(CURLM *multi_handle, int *running_handles);
+.ad
+.SH DESCRIPTION
+When the app thinks there's data available for the multi_handle, it should
+call this function to read/write whatever there is to read or write right
+now. curl_multi_perform() returns as soon as the reads/writes are done. This
+function does not require that there actually is any data available for
+reading or that data can be written, it can be called just in case. It will
+write the number of handles that still transfer data in the second argument's
+integer-pointer.
+
+When you call curl_multi_perform() and the amount of \fIrunning_handles\fP is
+changed from the previous call (or is less than the amount of easy handles
+you've added to the multi handle), you know that there is one or more
+transfers less "running". You can then call \fIcurl_multi_info_read(3)\fP to
+get information about each individual completed transfer, and that returned
+info includes CURLcode and more. If an added handle fails very quickly, it may
+never be counted as a running_handle.
+
+When \fIrunning_handles\fP is set to zero (0) on the return of this function,
+there is no longer any transfers in progress.
+.SH "RETURN VALUE"
+CURLMcode type, general libcurl multi interface error code.
+
+Before version 7.20.0: If you receive \fICURLM_CALL_MULTI_PERFORM\fP, this
+basically means that you should call \fIcurl_multi_perform\fP again, before
+you select() on more actions. You don't have to do it immediately, but the
+return code means that libcurl may have more data available to return or that
+there may be more data to send off before it is "satisfied". Do note that
+\fIcurl_multi_perform(3)\fP will return \fICURLM_CALL_MULTI_PERFORM\fP only
+when it wants to be called again \fBimmediately\fP. When things are fine and
+there is nothing immediate it wants done, it'll return \fICURLM_OK\fP and you
+need to wait for \&"action" and then call this function again.
+
+This function only returns errors etc regarding the whole multi stack.
+Problems still might have occurred on individual transfers even when this
+function returns \fICURLM_OK\fP.
+.SH "TYPICAL USAGE"
+Most applications will use \fIcurl_multi_fdset(3)\fP to get the multi_handle's
+file descriptors, then it'll wait for action on them using \fBselect(3)\fP and
+as soon as one or more of them are ready, \fIcurl_multi_perform(3)\fP gets
+called.
+.SH "SEE ALSO"
+.BR curl_multi_cleanup "(3), " curl_multi_init "(3), "
+.BR curl_multi_fdset "(3), " curl_multi_info_read "(3), "
+.BR libcurl-errors "(3)"
diff --git a/docs/libcurl/curl_multi_perform.html b/docs/libcurl/curl_multi_perform.html
new file mode 100644
index 0000000..46fc226
--- /dev/null
+++ b/docs/libcurl/curl_multi_perform.html
@@ -0,0 +1,60 @@
+<html><head>
+<title>curl_multi_perform man page</title>
+<meta name="generator" content="roffit 0.7">
+<STYLE type="text/css">
+P.level0 {
+ padding-left: 2em;
+}
+
+P.level1 {
+ padding-left: 4em;
+}
+
+P.level2 {
+ padding-left: 6em;
+}
+
+span.emphasis {
+ font-style: italic;
+}
+
+span.bold {
+ font-weight: bold;
+}
+
+span.manpage {
+ font-weight: bold;
+}
+
+h2.nroffsh {
+ background-color: #e0e0e0;
+}
+
+span.nroffip {
+ font-weight: bold;
+ font-size: 120%;
+ font-family: monospace;
+}
+
+p.roffit {
+ text-align: center;
+ font-size: 80%;
+}
+</STYLE>
+</head><body>
+
+<p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
+<p class="level0">curl_multi_perform - reads/writes available data from each easy handle <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0">#include &lt;curl/curl.h&gt;
+<p class="level0">CURLMcode curl_multi_perform(CURLM *multi_handle, int *running_handles);
+<p class="level0"><a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">When the app thinks there's data available for the multi_handle, it should call this function to read/write whatever there is to read or write right now. curl_multi_perform() returns as soon as the reads/writes are done. This function does not require that there actually is any data available for reading or that data can be written, it can be called just in case. It will write the number of handles that still transfer data in the second argument's integer-pointer.
+<p class="level0">When you call curl_multi_perform() and the amount of <span Class="emphasis">running_handles</span> is changed from the previous call (or is less than the amount of easy handles you've added to the multi handle), you know that there is one or more transfers less "running". You can then call <a class="emphasis" href="./curl_multi_info_read.html">curl_multi_info_read(3)</a> to get information about each individual completed transfer, and that returned info includes CURLcode and more. If an added handle fails very quickly, it may never be counted as a running_handle.
+<p class="level0">When <span Class="emphasis">running_handles</span> is set to zero (0) on the return of this function, there is no longer any transfers in progress. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">CURLMcode type, general libcurl multi interface error code.
+<p class="level0">Before version 7.20.0: If you receive <span Class="emphasis">CURLM_CALL_MULTI_PERFORM</span>, this basically means that you should call <span Class="emphasis">curl_multi_perform</span> again, before you select() on more actions. You don't have to do it immediately, but the return code means that libcurl may have more data available to return or that there may be more data to send off before it is "satisfied". Do note that <a class="emphasis" href="./curl_multi_perform.html">curl_multi_perform(3)</a> will return <span Class="emphasis">CURLM_CALL_MULTI_PERFORM</span> only when it wants to be called again <span Class="bold">immediately</span>. When things are fine and there is nothing immediate it wants done, it'll return <span Class="emphasis">CURLM_OK</span> and you need to wait for "action" and then call this function again.
+<p class="level0">This function only returns errors etc regarding the whole multi stack. Problems still might have occurred on individual transfers even when this function returns <span Class="emphasis">CURLM_OK</span>. <a name="TYPICAL"></a><h2 class="nroffsh">TYPICAL USAGE</h2>
+<p class="level0">Most applications will use <a class="emphasis" href="./curl_multi_fdset.html">curl_multi_fdset(3)</a> to get the multi_handle's file descriptors, then it'll wait for action on them using <span Class="bold">select(3)</span> and as soon as one or more of them are ready, <a class="emphasis" href="./curl_multi_perform.html">curl_multi_perform(3)</a> gets called. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><a class="manpage" href="./curl_multi_cleanup.html">curl_multi_cleanup (3)</a> <a class="manpage" href="./curl_multi_init.html"> curl_multi_init (3)</a> <span Class="manpage"> </span> <a class="manpage" href="./curl_multi_fdset.html">curl_multi_fdset (3)</a> <a class="manpage" href="./curl_multi_info_read.html"> curl_multi_info_read (3)</a> <span Class="manpage"> </span> <span Class="manpage">libcurl-errors (3)</span> <p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_multi_perform.pdf b/docs/libcurl/curl_multi_perform.pdf
new file mode 100644
index 0000000..70f138b
--- /dev/null
+++ b/docs/libcurl/curl_multi_perform.pdf
Binary files differ
diff --git a/docs/libcurl/curl_multi_remove_handle.3 b/docs/libcurl/curl_multi_remove_handle.3
new file mode 100644
index 0000000..efecb10
--- /dev/null
+++ b/docs/libcurl/curl_multi_remove_handle.3
@@ -0,0 +1,23 @@
+.\"
+.TH curl_multi_remove_handle 3 "6 March 2002" "libcurl 7.9.5" "libcurl Manual"
+.SH NAME
+curl_multi_remove_handle - remove an easy handle from a multi session
+.SH SYNOPSIS
+#include <curl/curl.h>
+
+CURLMcode curl_multi_remove_handle(CURLM *multi_handle, CURL *easy_handle);
+.ad
+.SH DESCRIPTION
+Removes a given easy_handle from the multi_handle. This will make the
+specified easy handle be removed from this multi handle's control.
+
+When the easy handle has been removed from a multi stack, it is again
+perfectly legal to invoke \fIcurl_easy_perform()\fP on this easy handle.
+
+Removing an easy handle while being used, will effectively halt the transfer
+in progress involving that easy handle. All other easy handles and transfers
+will remain unaffected.
+.SH RETURN VALUE
+CURLMcode type, general libcurl multi interface error code.
+.SH "SEE ALSO"
+.BR curl_multi_cleanup "(3)," curl_multi_init "(3)"
diff --git a/docs/libcurl/curl_multi_remove_handle.html b/docs/libcurl/curl_multi_remove_handle.html
new file mode 100644
index 0000000..15bd02b
--- /dev/null
+++ b/docs/libcurl/curl_multi_remove_handle.html
@@ -0,0 +1,57 @@
+<html><head>
+<title>curl_multi_remove_handle man page</title>
+<meta name="generator" content="roffit 0.7">
+<STYLE type="text/css">
+P.level0 {
+ padding-left: 2em;
+}
+
+P.level1 {
+ padding-left: 4em;
+}
+
+P.level2 {
+ padding-left: 6em;
+}
+
+span.emphasis {
+ font-style: italic;
+}
+
+span.bold {
+ font-weight: bold;
+}
+
+span.manpage {
+ font-weight: bold;
+}
+
+h2.nroffsh {
+ background-color: #e0e0e0;
+}
+
+span.nroffip {
+ font-weight: bold;
+ font-size: 120%;
+ font-family: monospace;
+}
+
+p.roffit {
+ text-align: center;
+ font-size: 80%;
+}
+</STYLE>
+</head><body>
+
+<p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
+<p class="level0">curl_multi_remove_handle - remove an easy handle from a multi session <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0">#include &lt;curl/curl.h&gt;
+<p class="level0">CURLMcode curl_multi_remove_handle(CURLM *multi_handle, CURL *easy_handle);
+<p class="level0"><a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">Removes a given easy_handle from the multi_handle. This will make the specified easy handle be removed from this multi handle's control.
+<p class="level0">When the easy handle has been removed from a multi stack, it is again perfectly legal to invoke <span Class="emphasis">curl_easy_perform()</span> on this easy handle.
+<p class="level0">Removing an easy handle while being used, will effectively halt the transfer in progress involving that easy handle. All other easy handles and transfers will remain unaffected. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">CURLMcode type, general libcurl multi interface error code. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><a class="manpage" href="./curl_multi_cleanup.html">curl_multi_cleanup (3)</a> <a class="manpage" href="./curl_multi_init.html"> curl_multi_init (3)</a> <p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_multi_remove_handle.pdf b/docs/libcurl/curl_multi_remove_handle.pdf
new file mode 100644
index 0000000..5a54941
--- /dev/null
+++ b/docs/libcurl/curl_multi_remove_handle.pdf
Binary files differ
diff --git a/docs/libcurl/curl_multi_setopt.3 b/docs/libcurl/curl_multi_setopt.3
new file mode 100644
index 0000000..a1cbb70
--- /dev/null
+++ b/docs/libcurl/curl_multi_setopt.3
@@ -0,0 +1,83 @@
+.\"
+.TH curl_multi_setopt 3 "10 Oct 2006" "libcurl 7.16.0" "libcurl Manual"
+.SH NAME
+curl_multi_setopt \- set options for a curl multi handle
+.SH SYNOPSIS
+#include <curl/curl.h>
+
+CURLMcode curl_multi_setopt(CURLM * multi_handle, CURLMoption option, param);
+.SH DESCRIPTION
+curl_multi_setopt() is used to tell a libcurl multi handle how to behave. By
+using the appropriate options to \fIcurl_multi_setopt(3)\fP, you can change
+libcurl's behaviour when using that multi handle. All options are set with
+the \fIoption\fP followed by the parameter \fIparam\fP. That parameter can be
+a \fBlong\fP, a \fBfunction pointer\fP, an \fBobject pointer\fP or a
+\fBcurl_off_t\fP type, depending on what the specific option expects. Read
+this manual carefully as bad input values may cause libcurl to behave badly!
+You can only set one option in each function call.
+
+.SH OPTIONS
+.IP CURLMOPT_SOCKETFUNCTION
+Pass a pointer to a function matching the \fBcurl_socket_callback\fP
+prototype. The \fIcurl_multi_socket_action(3)\fP function informs the
+application about updates in the socket (file descriptor) status by doing
+none, one, or multiple calls to the curl_socket_callback given in the
+\fBparam\fP argument. They update the status with changes since the previous
+time a \fIcurl_multi_socket(3)\fP function was called. If the given callback
+pointer is NULL, no callback will be called. Set the callback's \fBuserp\fP
+argument with \fICURLMOPT_SOCKETDATA\fP. See \fIcurl_multi_socket(3)\fP for
+more callback details.
+.IP CURLMOPT_SOCKETDATA
+Pass a pointer to whatever you want passed to the \fBcurl_socket_callback\fP's
+forth argument, the userp pointer. This is not used by libcurl but only
+passed-thru as-is. Set the callback pointer with
+\fICURLMOPT_SOCKETFUNCTION\fP.
+.IP CURLMOPT_PIPELINING
+Pass a long set to 1 to enable or 0 to disable. Enabling pipelining on a multi
+handle will make it attempt to perform HTTP Pipelining as far as possible for
+transfers using this handle. This means that if you add a second request that
+can use an already existing connection, the second request will be \&"piped"
+on the same connection rather than being executed in parallel. (Added in
+7.16.0)
+.IP CURLMOPT_TIMERFUNCTION
+Pass a pointer to a function matching the \fBcurl_multi_timer_callback\fP
+prototype. This function will then be called when the timeout value
+changes. The timeout value is at what latest time the application should call
+one of the \&"performing" functions of the multi interface
+(\fIcurl_multi_socket_action(3)\fP and \fIcurl_multi_perform(3)\fP) - to allow
+libcurl to keep timeouts and retries etc to work. A timeout value of -1 means
+that there is no timeout at all, and 0 means that the timeout is already
+reached. Libcurl attempts to limit calling this only when the fixed future
+timeout time actually changes. See also \fICURLMOPT_TIMERDATA\fP. This
+callback can be used instead of, or in addition to,
+\fIcurl_multi_timeout(3)\fP. (Added in 7.16.0)
+.IP CURLMOPT_TIMERDATA
+Pass a pointer to whatever you want passed to the
+\fBcurl_multi_timer_callback\fP's third argument, the userp pointer. This is
+not used by libcurl but only passed-thru as-is. Set the callback pointer with
+\fICURLMOPT_TIMERFUNCTION\fP. (Added in 7.16.0)
+.IP CURLMOPT_MAXCONNECTS
+Pass a long. The set number will be used as the maximum amount of
+simultaneously open connections that libcurl may cache. Default is 10, and
+libcurl will enlarge the size for each added easy handle to make it fit 4
+times the number of added easy handles.
+
+By setting this option, you can prevent the cache size from growing beyond the
+limit set by you.
+
+When the cache is full, curl closes the oldest one in the cache to prevent the
+number of open connections from increasing.
+
+This option is for the multi handle's use only, when using the easy interface
+you should instead use the \fICURLOPT_MAXCONNECTS\fP option.
+
+(Added in 7.16.3)
+.SH RETURNS
+The standard CURLMcode for multi interface error codes. Note that it returns a
+CURLM_UNKNOWN_OPTION if you try setting an option that this version of libcurl
+doesn't know of.
+.SH AVAILABILITY
+This function was added in libcurl 7.15.4.
+.SH "SEE ALSO"
+.BR curl_multi_cleanup "(3), " curl_multi_init "(3), "
+.BR curl_multi_socket "(3), " curl_multi_info_read "(3)"
diff --git a/docs/libcurl/curl_multi_setopt.html b/docs/libcurl/curl_multi_setopt.html
new file mode 100644
index 0000000..1e67582
--- /dev/null
+++ b/docs/libcurl/curl_multi_setopt.html
@@ -0,0 +1,73 @@
+<html><head>
+<title>curl_multi_setopt man page</title>
+<meta name="generator" content="roffit 0.7">
+<STYLE type="text/css">
+P.level0 {
+ padding-left: 2em;
+}
+
+P.level1 {
+ padding-left: 4em;
+}
+
+P.level2 {
+ padding-left: 6em;
+}
+
+span.emphasis {
+ font-style: italic;
+}
+
+span.bold {
+ font-weight: bold;
+}
+
+span.manpage {
+ font-weight: bold;
+}
+
+h2.nroffsh {
+ background-color: #e0e0e0;
+}
+
+span.nroffip {
+ font-weight: bold;
+ font-size: 120%;
+ font-family: monospace;
+}
+
+p.roffit {
+ text-align: center;
+ font-size: 80%;
+}
+</STYLE>
+</head><body>
+
+<p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
+<p class="level0">curl_multi_setopt - set options for a curl multi handle <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0">#include &lt;curl/curl.h&gt;
+<p class="level0">CURLMcode curl_multi_setopt(CURLM * multi_handle, CURLMoption option, param); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">curl_multi_setopt() is used to tell a libcurl multi handle how to behave. By using the appropriate options to <a class="emphasis" href="./curl_multi_setopt.html">curl_multi_setopt(3)</a>, you can change libcurl's behaviour when using that multi handle. All options are set with the <span Class="emphasis">option</span> followed by the parameter <span Class="emphasis">param</span>. That parameter can be a <span Class="bold">long</span>, a <span Class="bold">function pointer</span>, an <span Class="bold">object pointer</span> or a <span Class="bold">curl_off_t</span> type, depending on what the specific option expects. Read this manual carefully as bad input values may cause libcurl to behave badly! You can only set one option in each function call.
+<p class="level0"><a name="OPTIONS"></a><h2 class="nroffsh">OPTIONS</h2>
+<p class="level0">
+<p class="level0"><a name="CURLMOPTSOCKETFUNCTION"></a><span class="nroffip">CURLMOPT_SOCKETFUNCTION</span>
+<p class="level1">Pass a pointer to a function matching the <span Class="bold">curl_socket_callback</span> prototype. The <a class="emphasis" href="./curl_multi_socket_action.html">curl_multi_socket_action(3)</a> function informs the application about updates in the socket (file descriptor) status by doing none, one, or multiple calls to the curl_socket_callback given in the <span Class="bold">param</span> argument. They update the status with changes since the previous time a <a class="emphasis" href="./curl_multi_socket.html">curl_multi_socket(3)</a> function was called. If the given callback pointer is NULL, no callback will be called. Set the callback's <span Class="bold">userp</span> argument with <a class="emphasis" href="#CURLMOPTSOCKETDATA">CURLMOPT_SOCKETDATA</a>. See <a class="emphasis" href="./curl_multi_socket.html">curl_multi_socket(3)</a> for more callback details.
+<p class="level0"><a name="CURLMOPTSOCKETDATA"></a><span class="nroffip">CURLMOPT_SOCKETDATA</span>
+<p class="level1">Pass a pointer to whatever you want passed to the <span Class="bold">curl_socket_callback</span>'s forth argument, the userp pointer. This is not used by libcurl but only passed-thru as-is. Set the callback pointer with <a class="emphasis" href="#CURLMOPTSOCKETFUNCTION">CURLMOPT_SOCKETFUNCTION</a>.
+<p class="level0"><a name="CURLMOPTPIPELINING"></a><span class="nroffip">CURLMOPT_PIPELINING</span>
+<p class="level1">Pass a long set to 1 to enable or 0 to disable. Enabling pipelining on a multi handle will make it attempt to perform HTTP Pipelining as far as possible for transfers using this handle. This means that if you add a second request that can use an already existing connection, the second request will be "piped" on the same connection rather than being executed in parallel. (Added in 7.16.0)
+<p class="level0"><a name="CURLMOPTTIMERFUNCTION"></a><span class="nroffip">CURLMOPT_TIMERFUNCTION</span>
+<p class="level1">Pass a pointer to a function matching the <span Class="bold">curl_multi_timer_callback</span> prototype. This function will then be called when the timeout value changes. The timeout value is at what latest time the application should call one of the "performing" functions of the multi interface (<a class="emphasis" href="./curl_multi_socket_action.html">curl_multi_socket_action(3)</a> and <a class="emphasis" href="./curl_multi_perform.html">curl_multi_perform(3)</a>) - to allow libcurl to keep timeouts and retries etc to work. A timeout value of -1 means that there is no timeout at all, and 0 means that the timeout is already reached. Libcurl attempts to limit calling this only when the fixed future timeout time actually changes. See also <a class="emphasis" href="#CURLMOPTTIMERDATA">CURLMOPT_TIMERDATA</a>. This callback can be used instead of, or in addition to, <a class="emphasis" href="./curl_multi_timeout.html">curl_multi_timeout(3)</a>. (Added in 7.16.0)
+<p class="level0"><a name="CURLMOPTTIMERDATA"></a><span class="nroffip">CURLMOPT_TIMERDATA</span>
+<p class="level1">Pass a pointer to whatever you want passed to the <span Class="bold">curl_multi_timer_callback</span>'s third argument, the userp pointer. This is not used by libcurl but only passed-thru as-is. Set the callback pointer with <a class="emphasis" href="#CURLMOPTTIMERFUNCTION">CURLMOPT_TIMERFUNCTION</a>. (Added in 7.16.0)
+<p class="level0"><a name="CURLMOPTMAXCONNECTS"></a><span class="nroffip">CURLMOPT_MAXCONNECTS</span>
+<p class="level1">Pass a long. The set number will be used as the maximum amount of simultaneously open connections that libcurl may cache. Default is 10, and libcurl will enlarge the size for each added easy handle to make it fit 4 times the number of added easy handles.
+<p class="level1">By setting this option, you can prevent the cache size from growing beyond the limit set by you.
+<p class="level1">When the cache is full, curl closes the oldest one in the cache to prevent the number of open connections from increasing.
+<p class="level1">This option is for the multi handle's use only, when using the easy interface you should instead use the <span Class="emphasis">CURLOPT_MAXCONNECTS</span> option.
+<p class="level1">(Added in 7.16.3) <a name="RETURNS"></a><h2 class="nroffsh">RETURNS</h2>
+<p class="level0">The standard CURLMcode for multi interface error codes. Note that it returns a CURLM_UNKNOWN_OPTION if you try setting an option that this version of libcurl doesn't know of. <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">This function was added in libcurl 7.15.4. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><a class="manpage" href="./curl_multi_cleanup.html">curl_multi_cleanup (3)</a> <a class="manpage" href="./curl_multi_init.html"> curl_multi_init (3)</a> <span Class="manpage"> </span> <a class="manpage" href="./curl_multi_socket.html">curl_multi_socket (3)</a> <a class="manpage" href="./curl_multi_info_read.html"> curl_multi_info_read (3)</a> <p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_multi_setopt.pdf b/docs/libcurl/curl_multi_setopt.pdf
new file mode 100644
index 0000000..53ce952
--- /dev/null
+++ b/docs/libcurl/curl_multi_setopt.pdf
Binary files differ
diff --git a/docs/libcurl/curl_multi_socket.3 b/docs/libcurl/curl_multi_socket.3
new file mode 100644
index 0000000..18b571c
--- /dev/null
+++ b/docs/libcurl/curl_multi_socket.3
@@ -0,0 +1,138 @@
+.\"
+.TH curl_multi_socket 3 "9 Jul 2006" "libcurl 7.16.0" "libcurl Manual"
+.SH NAME
+curl_multi_socket \- reads/writes available data
+.SH SYNOPSIS
+.nf
+#include <curl/curl.h>
+CURLMcode curl_multi_socket(CURLM * multi_handle, curl_socket_t sockfd,
+ int *running_handles);
+
+CURLMcode curl_multi_socket_all(CURLM *multi_handle,
+ int *running_handles);
+.fi
+.SH DESCRIPTION
+These functions are deprecated. Do not use! See
+\fIcurl_multi_socket_action(3)\fP instead!
+
+At return, the integer \fBrunning_handles\fP points to will contain the number
+of still running easy handles within the multi handle. When this number
+reaches zero, all transfers are complete/done. Note that when you call
+\fIcurl_multi_socket_action(3)\fP on a specific socket and the counter
+decreases by one, it DOES NOT necessarily mean that this exact socket/transfer
+is the one that completed. Use \fIcurl_multi_info_read(3)\fP to figure out
+which easy handle that completed.
+
+The \fBcurl_multi_socket_action(3)\fP functions inform the application about
+updates in the socket (file descriptor) status by doing none, one, or multiple
+calls to the socket callback function set with the CURLMOPT_SOCKETFUNCTION
+option to \fIcurl_multi_setopt(3)\fP. They update the status with changes
+since the previous time the callback was called.
+
+Get the timeout time by setting the \fICURLMOPT_TIMERFUNCTION\fP option with
+\fIcurl_multi_setopt(3)\fP. Your application will then get called with
+information on how long to wait for socket actions at most before doing the
+timeout action: call the \fBcurl_multi_socket_action(3)\fP function with the
+\fBsockfd\fP argument set to CURL_SOCKET_TIMEOUT. You can also use the
+\fIcurl_multi_timeout(3)\fP function to poll the value at any given time, but
+for an event-based system using the callback is far better than relying on
+polling the timeout value.
+
+Usage of \fIcurl_multi_socket(3)\fP is deprecated, whereas the function is
+equivalent to \fIcurl_multi_socket_action(3)\fP with \fBev_bitmask\fP set to
+0.
+
+Force libcurl to (re-)check all its internal sockets and transfers instead of
+just a single one by calling \fBcurl_multi_socket_all(3)\fP. Note that there
+should not be any reason to use this function!
+.SH "CALLBACK DETAILS"
+
+The socket \fBcallback\fP function uses a prototype like this
+.nf
+
+ int curl_socket_callback(CURL *easy, /* easy handle */
+ curl_socket_t s, /* socket */
+ int action, /* see values below */
+ void *userp, /* private callback pointer */
+ void *socketp); /* private socket pointer */
+
+.fi
+The callback MUST return 0.
+
+The \fIeasy\fP argument is a pointer to the easy handle that deals with this
+particular socket. Note that a single handle may work with several sockets
+simultaneously.
+
+The \fIs\fP argument is the actual socket value as you use it within your
+system.
+
+The \fIaction\fP argument to the callback has one of five values:
+.RS
+.IP "CURL_POLL_NONE (0)"
+register, not interested in readiness (yet)
+.IP "CURL_POLL_IN (1)"
+register, interested in read readiness
+.IP "CURL_POLL_OUT (2)"
+register, interested in write readiness
+.IP "CURL_POLL_INOUT (3)"
+register, interested in both read and write readiness
+.IP "CURL_POLL_REMOVE (4)"
+unregister
+.RE
+
+The \fIsocketp\fP argument is a private pointer you have previously set with
+\fIcurl_multi_assign(3)\fP to be associated with the \fIs\fP socket. If no
+pointer has been set, socketp will be NULL. This argument is of course a
+service to applications that want to keep certain data or structs that are
+strictly associated to the given socket.
+
+The \fIuserp\fP argument is a private pointer you have previously set with
+\fIcurl_multi_setopt(3)\fP and the CURLMOPT_SOCKETDATA option.
+.SH "RETURN VALUE"
+CURLMcode type, general libcurl multi interface error code.
+
+Legacy: If you receive \fICURLM_CALL_MULTI_PERFORM\fP, this basically means
+that you should call \fIcurl_multi_socket(3)\fP again, before you wait for
+more actions on libcurl's sockets. You don't have to do it immediately, but
+the return code means that libcurl may have more data available to return or
+that there may be more data to send off before it is "satisfied".
+
+In modern libcurls, \fICURLM_CALL_MULTI_PERFORM\fP or
+\fICURLM_CALL_MULTI_SOKCET\fP should not be returned and no application needs
+to care about them.
+
+NOTE that the return code is for the whole multi stack. Problems still might have
+occurred on individual transfers even when one of these functions
+return OK.
+.SH "TYPICAL USAGE"
+1. Create a multi handle
+
+2. Set the socket callback with CURLMOPT_SOCKETFUNCTION
+
+3. Set the timeout callback with CURLMOPT_TIMERFUNCTION, to get to know what
+timeout value to use when waiting for socket activities.
+
+4. Add easy handles with curl_multi_add_handle()
+
+5. Provide some means to manage the sockets libcurl is using, so you can check
+them for activity. This can be done through your application code, or by way
+of an external library such as libevent or glib.
+
+6. Wait for activity on any of libcurl's sockets, use the timeout value your
+callback has been told
+
+7, When activity is detected, call curl_multi_socket_action() for the
+socket(s) that got action. If no activity is detected and the timeout expires,
+call \fIcurl_multi_socket_action(3)\fP with \fICURL_SOCKET_TIMEOUT\fP
+
+8. Go back to step 6.
+.SH AVAILABILITY
+This function was added in libcurl 7.15.4, and is deemed stable since
+7.16.0.
+
+\fIcurl_multi_socket(3)\fP is deprecated, use
+\fIcurl_multi_socket_action(3)\fP instead!
+.SH "SEE ALSO"
+.BR curl_multi_cleanup "(3), " curl_multi_init "(3), "
+.BR curl_multi_fdset "(3), " curl_multi_info_read "(3), "
+.BR "the hiperfifo.c example"
diff --git a/docs/libcurl/curl_multi_socket.html b/docs/libcurl/curl_multi_socket.html
new file mode 100644
index 0000000..72d803f
--- /dev/null
+++ b/docs/libcurl/curl_multi_socket.html
@@ -0,0 +1,106 @@
+<html><head>
+<title>curl_multi_socket man page</title>
+<meta name="generator" content="roffit 0.7">
+<STYLE type="text/css">
+P.level0 {
+ padding-left: 2em;
+}
+
+P.level1 {
+ padding-left: 4em;
+}
+
+P.level2 {
+ padding-left: 6em;
+}
+
+span.emphasis {
+ font-style: italic;
+}
+
+span.bold {
+ font-weight: bold;
+}
+
+span.manpage {
+ font-weight: bold;
+}
+
+h2.nroffsh {
+ background-color: #e0e0e0;
+}
+
+span.nroffip {
+ font-weight: bold;
+ font-size: 120%;
+ font-family: monospace;
+}
+
+p.roffit {
+ text-align: center;
+ font-size: 80%;
+}
+</STYLE>
+</head><body>
+
+<p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
+<p class="level0">curl_multi_socket - reads/writes available data <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><pre>
+<p class="level0">#include &lt;curl/curl.h&gt;
+ CURLMcode curl_multi_socket(CURLM * multi_handle, curl_socket_t sockfd,
+ &nbsp; int *running_handles);
+ <p class="level0">CURLMcode curl_multi_socket_all(CURLM *multi_handle,
+ &nbsp; int *running_handles);
+ </pre>
+
+<p class="level0"><a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">These functions are deprecated. Do not use! See <a class="emphasis" href="./curl_multi_socket_action.html">curl_multi_socket_action(3)</a> instead!
+<p class="level0">At return, the integer <span Class="bold">running_handles</span> points to will contain the number of still running easy handles within the multi handle. When this number reaches zero, all transfers are complete/done. Note that when you call <a class="emphasis" href="./curl_multi_socket_action.html">curl_multi_socket_action(3)</a> on a specific socket and the counter decreases by one, it DOES NOT necessarily mean that this exact socket/transfer is the one that completed. Use <a class="emphasis" href="./curl_multi_info_read.html">curl_multi_info_read(3)</a> to figure out which easy handle that completed.
+<p class="level0">The <a class="bold" href="./curl_multi_socket_action.html">curl_multi_socket_action(3)</a> functions inform the application about updates in the socket (file descriptor) status by doing none, one, or multiple calls to the socket callback function set with the CURLMOPT_SOCKETFUNCTION option to <a class="emphasis" href="./curl_multi_setopt.html">curl_multi_setopt(3)</a>. They update the status with changes since the previous time the callback was called.
+<p class="level0">Get the timeout time by setting the <span Class="emphasis">CURLMOPT_TIMERFUNCTION</span> option with <a class="emphasis" href="./curl_multi_setopt.html">curl_multi_setopt(3)</a>. Your application will then get called with information on how long to wait for socket actions at most before doing the timeout action: call the <a class="bold" href="./curl_multi_socket_action.html">curl_multi_socket_action(3)</a> function with the <span Class="bold">sockfd</span> argument set to CURL_SOCKET_TIMEOUT. You can also use the <a class="emphasis" href="./curl_multi_timeout.html">curl_multi_timeout(3)</a> function to poll the value at any given time, but for an event-based system using the callback is far better than relying on polling the timeout value.
+<p class="level0">Usage of <a class="emphasis" href="./curl_multi_socket.html">curl_multi_socket(3)</a> is deprecated, whereas the function is equivalent to <a class="emphasis" href="./curl_multi_socket_action.html">curl_multi_socket_action(3)</a> with <span Class="bold">ev_bitmask</span> set to 0.
+<p class="level0">Force libcurl to (re-)check all its internal sockets and transfers instead of just a single one by calling <a class="bold" href="./curl_multi_socket_all.html">curl_multi_socket_all(3)</a>. Note that there should not be any reason to use this function! <a name="CALLBACK"></a><h2 class="nroffsh">CALLBACK DETAILS</h2>
+<p class="level0">
+<p class="level0">The socket <span Class="bold">callback</span> function uses a prototype like this <pre>
+<p class="level0"><p class="level0">&nbsp; int curl_socket_callback(CURL *easy, /* easy handle */
+ &nbsp; curl_socket_t s, /* socket */
+ &nbsp; int action, /* see values below */
+ &nbsp; void *userp, /* private callback pointer */
+ &nbsp; void *socketp); /* private socket pointer */
+ <p class="level0"></pre>
+
+<p class="level0">The callback MUST return 0.
+<p class="level0">The <span Class="emphasis">easy</span> argument is a pointer to the easy handle that deals with this particular socket. Note that a single handle may work with several sockets simultaneously.
+<p class="level0">The <span Class="emphasis">s</span> argument is the actual socket value as you use it within your system.
+<p class="level0">The <span Class="emphasis">action</span> argument to the callback has one of five values:
+<p class="level1">
+<p class="level0"><a name="CURLPOLLNONE"></a><span class="nroffip">CURL_POLL_NONE (0)</span>
+<p class="level1">register, not interested in readiness (yet)
+<p class="level0"><a name="CURLPOLLIN"></a><span class="nroffip">CURL_POLL_IN (1)</span>
+<p class="level1">register, interested in read readiness
+<p class="level0"><a name="CURLPOLLOUT"></a><span class="nroffip">CURL_POLL_OUT (2)</span>
+<p class="level1">register, interested in write readiness
+<p class="level0"><a name="CURLPOLLINOUT"></a><span class="nroffip">CURL_POLL_INOUT (3)</span>
+<p class="level1">register, interested in both read and write readiness
+<p class="level0"><a name="CURLPOLLREMOVE"></a><span class="nroffip">CURL_POLL_REMOVE (4)</span>
+<p class="level1">unregister
+<p class="level0">
+<p class="level0">The <span Class="emphasis">socketp</span> argument is a private pointer you have previously set with <a class="emphasis" href="./curl_multi_assign.html">curl_multi_assign(3)</a> to be associated with the <span Class="emphasis">s</span> socket. If no pointer has been set, socketp will be NULL. This argument is of course a service to applications that want to keep certain data or structs that are strictly associated to the given socket.
+<p class="level0">The <span Class="emphasis">userp</span> argument is a private pointer you have previously set with <a class="emphasis" href="./curl_multi_setopt.html">curl_multi_setopt(3)</a> and the CURLMOPT_SOCKETDATA option. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">CURLMcode type, general libcurl multi interface error code.
+<p class="level0">Legacy: If you receive <span Class="emphasis">CURLM_CALL_MULTI_PERFORM</span>, this basically means that you should call <a class="emphasis" href="./curl_multi_socket.html">curl_multi_socket(3)</a> again, before you wait for more actions on libcurl's sockets. You don't have to do it immediately, but the return code means that libcurl may have more data available to return or that there may be more data to send off before it is "satisfied".
+<p class="level0">In modern libcurls, <span Class="emphasis">CURLM_CALL_MULTI_PERFORM</span> or <span Class="emphasis">CURLM_CALL_MULTI_SOKCET</span> should not be returned and no application needs to care about them.
+<p class="level0">NOTE that the return code is for the whole multi stack. Problems still might have occurred on individual transfers even when one of these functions return OK. <a name="TYPICAL"></a><h2 class="nroffsh">TYPICAL USAGE</h2>
+<p class="level0">1. Create a multi handle
+<p class="level0">2. Set the socket callback with CURLMOPT_SOCKETFUNCTION
+<p class="level0">3. Set the timeout callback with CURLMOPT_TIMERFUNCTION, to get to know what timeout value to use when waiting for socket activities.
+<p class="level0">4. Add easy handles with curl_multi_add_handle()
+<p class="level0">5. Provide some means to manage the sockets libcurl is using, so you can check them for activity. This can be done through your application code, or by way of an external library such as libevent or glib.
+<p class="level0">6. Wait for activity on any of libcurl's sockets, use the timeout value your callback has been told
+<p class="level0">7, When activity is detected, call curl_multi_socket_action() for the socket(s) that got action. If no activity is detected and the timeout expires, call <a class="emphasis" href="./curl_multi_socket_action.html">curl_multi_socket_action(3)</a> with <span Class="emphasis">CURL_SOCKET_TIMEOUT</span>
+<p class="level0">8. Go back to step 6. <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">This function was added in libcurl 7.15.4, and is deemed stable since 7.16.0.
+<p class="level0"><a class="emphasis" href="./curl_multi_socket.html">curl_multi_socket(3)</a> is deprecated, use <a class="emphasis" href="./curl_multi_socket_action.html">curl_multi_socket_action(3)</a> instead! <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><a class="manpage" href="./curl_multi_cleanup.html">curl_multi_cleanup (3)</a> <a class="manpage" href="./curl_multi_init.html"> curl_multi_init (3)</a> <span Class="manpage"> </span> <a class="manpage" href="./curl_multi_fdset.html">curl_multi_fdset (3)</a> <a class="manpage" href="./curl_multi_info_read.html"> curl_multi_info_read (3)</a> <span Class="manpage"> </span> <span Class="manpage">the hiperfifo.c example</span> <p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_multi_socket.pdf b/docs/libcurl/curl_multi_socket.pdf
new file mode 100644
index 0000000..edbe43c
--- /dev/null
+++ b/docs/libcurl/curl_multi_socket.pdf
Binary files differ
diff --git a/docs/libcurl/curl_multi_socket_action.3 b/docs/libcurl/curl_multi_socket_action.3
new file mode 100644
index 0000000..94e6f10
--- /dev/null
+++ b/docs/libcurl/curl_multi_socket_action.3
@@ -0,0 +1,129 @@
+.\"
+.TH curl_multi_socket_action 3 "9 Jul 2006" "libcurl 7.16.0" "libcurl Manual"
+.SH NAME
+curl_multi_socket_action \- reads/writes available data given an action
+.SH SYNOPSIS
+.nf
+#include <curl/curl.h>
+
+CURLMcode curl_multi_socket_action(CURLM * multi_handle,
+ curl_socket_t sockfd, int ev_bitmask,
+ int *running_handles);
+.fi
+.SH DESCRIPTION
+When the application has detected action on a socket handled by libcurl, it
+should call \fIcurl_multi_socket_action(3)\fP with the \fBsockfd\fP argument
+set to the socket with the action. When the events on a socket are known, they
+can be passed as an events bitmask \fBev_bitmask\fP by first setting
+\fBev_bitmask\fP to 0, and then adding using bitwise OR (|) any combination of
+events to be chosen from CURL_CSELECT_IN, CURL_CSELECT_OUT or
+CURL_CSELECT_ERR. When the events on a socket are unknown, pass 0 instead, and
+libcurl will test the descriptor internally.
+
+At return, the integer \fBrunning_handles\fP points to will contain the number
+of running easy handles within the multi handle. When this number reaches
+zero, all transfers are complete/done. When you call
+\fIcurl_multi_socket_action(3)\fP on a specific socket and the counter
+decreases by one, it DOES NOT necessarily mean that this exact socket/transfer
+is the one that completed. Use \fIcurl_multi_info_read(3)\fP to figure out
+which easy handle that completed.
+
+The \fBcurl_multi_socket_action(3)\fP functions inform the application about
+updates in the socket (file descriptor) status by doing none, one, or multiple
+calls to the socket callback function set with the CURLMOPT_SOCKETFUNCTION
+option to \fIcurl_multi_setopt(3)\fP. They update the status with changes
+since the previous time the callback was called.
+
+Get the timeout time by setting the \fICURLMOPT_TIMERFUNCTION\fP option with
+\fIcurl_multi_setopt(3)\fP. Your application will then get called with
+information on how long to wait for socket actions at most before doing the
+timeout action: call the \fBcurl_multi_socket_action(3)\fP function with the
+\fBsockfd\fP argument set to CURL_SOCKET_TIMEOUT. You can also use the
+\fIcurl_multi_timeout(3)\fP function to poll the value at any given time, but
+for an event-based system using the callback is far better than relying on
+polling the timeout value.
+.SH "CALLBACK DETAILS"
+
+The socket \fBcallback\fP function uses a prototype like this
+.nf
+
+ int curl_socket_callback(CURL *easy, /* easy handle */
+ curl_socket_t s, /* socket */
+ int action, /* see values below */
+ void *userp, /* private callback pointer */
+ void *socketp); /* private socket pointer */
+
+.fi
+The callback MUST return 0.
+
+The \fIeasy\fP argument is a pointer to the easy handle that deals with this
+particular socket. Note that a single handle may work with several sockets
+simultaneously.
+
+The \fIs\fP argument is the actual socket value as you use it within your
+system.
+
+The \fIaction\fP argument to the callback has one of five values:
+.RS
+.IP "CURL_POLL_NONE (0)"
+register, not interested in readiness (yet)
+.IP "CURL_POLL_IN (1)"
+register, interested in read readiness
+.IP "CURL_POLL_OUT (2)"
+register, interested in write readiness
+.IP "CURL_POLL_INOUT (3)"
+register, interested in both read and write readiness
+.IP "CURL_POLL_REMOVE (4)"
+unregister
+.RE
+
+The \fIsocketp\fP argument is a private pointer you have previously set with
+\fIcurl_multi_assign(3)\fP to be associated with the \fIs\fP socket. If no
+pointer has been set, socketp will be NULL. This argument is of course a
+service to applications that want to keep certain data or structs that are
+strictly associated to the given socket.
+
+The \fIuserp\fP argument is a private pointer you have previously set with
+\fIcurl_multi_setopt(3)\fP and the CURLMOPT_SOCKETDATA option.
+.SH "RETURN VALUE"
+CURLMcode type, general libcurl multi interface error code.
+
+Before version 7.20.0: If you receive \fICURLM_CALL_MULTI_PERFORM\fP, this
+basically means that you should call \fIcurl_multi_socket_action(3)\fP again
+before you wait for more actions on libcurl's sockets. You don't have to do it
+immediately, but the return code means that libcurl may have more data
+available to return or that there may be more data to send off before it is
+"satisfied".
+
+The return code from this function is for the whole multi stack. Problems
+still might have occurred on individual transfers even when one of these
+functions return OK.
+.SH "TYPICAL USAGE"
+1. Create a multi handle
+
+2. Set the socket callback with CURLMOPT_SOCKETFUNCTION
+
+3. Set the timeout callback with CURLMOPT_TIMERFUNCTION, to get to know what
+timeout value to use when waiting for socket activities.
+
+4. Add easy handles with curl_multi_add_handle()
+
+5. Provide some means to manage the sockets libcurl is using, so you can check
+them for activity. This can be done through your application code, or by way
+of an external library such as libevent or glib.
+
+6. Call curl_multi_socket_action() to kickstart everything. To get one or more
+callbacks called.
+
+7. Wait for activity on any of libcurl's sockets, use the timeout value your
+callback has been told
+
+8, When activity is detected, call curl_multi_socket_action() for the
+socket(s) that got action. If no activity is detected and the timeout expires,
+call \fIcurl_multi_socket_action(3)\fP with \fICURL_SOCKET_TIMEOUT\fP
+.SH AVAILABILITY
+This function was added in libcurl 7.15.4, and is deemed stable since 7.16.0.
+.SH "SEE ALSO"
+.BR curl_multi_cleanup "(3), " curl_multi_init "(3), "
+.BR curl_multi_fdset "(3), " curl_multi_info_read "(3), "
+.BR "the hiperfifo.c example"
diff --git a/docs/libcurl/curl_multi_socket_action.html b/docs/libcurl/curl_multi_socket_action.html
new file mode 100644
index 0000000..eee2bde
--- /dev/null
+++ b/docs/libcurl/curl_multi_socket_action.html
@@ -0,0 +1,101 @@
+<html><head>
+<title>curl_multi_socket_action man page</title>
+<meta name="generator" content="roffit 0.7">
+<STYLE type="text/css">
+P.level0 {
+ padding-left: 2em;
+}
+
+P.level1 {
+ padding-left: 4em;
+}
+
+P.level2 {
+ padding-left: 6em;
+}
+
+span.emphasis {
+ font-style: italic;
+}
+
+span.bold {
+ font-weight: bold;
+}
+
+span.manpage {
+ font-weight: bold;
+}
+
+h2.nroffsh {
+ background-color: #e0e0e0;
+}
+
+span.nroffip {
+ font-weight: bold;
+ font-size: 120%;
+ font-family: monospace;
+}
+
+p.roffit {
+ text-align: center;
+ font-size: 80%;
+}
+</STYLE>
+</head><body>
+
+<p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
+<p class="level0">curl_multi_socket_action - reads/writes available data given an action <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><pre>
+<p class="level0">#include &lt;curl/curl.h&gt;
+ <p class="level0">CURLMcode curl_multi_socket_action(CURLM * multi_handle,
+ &nbsp; curl_socket_t sockfd, int ev_bitmask,
+ &nbsp; int *running_handles);
+ </pre>
+
+<p class="level0"><a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">When the application has detected action on a socket handled by libcurl, it should call <a class="emphasis" href="./curl_multi_socket_action.html">curl_multi_socket_action(3)</a> with the <span Class="bold">sockfd</span> argument set to the socket with the action. When the events on a socket are known, they can be passed as an events bitmask <span Class="bold">ev_bitmask</span> by first setting <span Class="bold">ev_bitmask</span> to 0, and then adding using bitwise OR (|) any combination of events to be chosen from CURL_CSELECT_IN, CURL_CSELECT_OUT or CURL_CSELECT_ERR. When the events on a socket are unknown, pass 0 instead, and libcurl will test the descriptor internally.
+<p class="level0">At return, the integer <span Class="bold">running_handles</span> points to will contain the number of running easy handles within the multi handle. When this number reaches zero, all transfers are complete/done. When you call <a class="emphasis" href="./curl_multi_socket_action.html">curl_multi_socket_action(3)</a> on a specific socket and the counter decreases by one, it DOES NOT necessarily mean that this exact socket/transfer is the one that completed. Use <a class="emphasis" href="./curl_multi_info_read.html">curl_multi_info_read(3)</a> to figure out which easy handle that completed.
+<p class="level0">The <a class="bold" href="./curl_multi_socket_action.html">curl_multi_socket_action(3)</a> functions inform the application about updates in the socket (file descriptor) status by doing none, one, or multiple calls to the socket callback function set with the CURLMOPT_SOCKETFUNCTION option to <a class="emphasis" href="./curl_multi_setopt.html">curl_multi_setopt(3)</a>. They update the status with changes since the previous time the callback was called.
+<p class="level0">Get the timeout time by setting the <span Class="emphasis">CURLMOPT_TIMERFUNCTION</span> option with <a class="emphasis" href="./curl_multi_setopt.html">curl_multi_setopt(3)</a>. Your application will then get called with information on how long to wait for socket actions at most before doing the timeout action: call the <a class="bold" href="./curl_multi_socket_action.html">curl_multi_socket_action(3)</a> function with the <span Class="bold">sockfd</span> argument set to CURL_SOCKET_TIMEOUT. You can also use the <a class="emphasis" href="./curl_multi_timeout.html">curl_multi_timeout(3)</a> function to poll the value at any given time, but for an event-based system using the callback is far better than relying on polling the timeout value. <a name="CALLBACK"></a><h2 class="nroffsh">CALLBACK DETAILS</h2>
+<p class="level0">
+<p class="level0">The socket <span Class="bold">callback</span> function uses a prototype like this <pre>
+<p class="level0"><p class="level0">&nbsp; int curl_socket_callback(CURL *easy, /* easy handle */
+ &nbsp; curl_socket_t s, /* socket */
+ &nbsp; int action, /* see values below */
+ &nbsp; void *userp, /* private callback pointer */
+ &nbsp; void *socketp); /* private socket pointer */
+ <p class="level0"></pre>
+
+<p class="level0">The callback MUST return 0.
+<p class="level0">The <span Class="emphasis">easy</span> argument is a pointer to the easy handle that deals with this particular socket. Note that a single handle may work with several sockets simultaneously.
+<p class="level0">The <span Class="emphasis">s</span> argument is the actual socket value as you use it within your system.
+<p class="level0">The <span Class="emphasis">action</span> argument to the callback has one of five values:
+<p class="level1">
+<p class="level0"><a name="CURLPOLLNONE"></a><span class="nroffip">CURL_POLL_NONE (0)</span>
+<p class="level1">register, not interested in readiness (yet)
+<p class="level0"><a name="CURLPOLLIN"></a><span class="nroffip">CURL_POLL_IN (1)</span>
+<p class="level1">register, interested in read readiness
+<p class="level0"><a name="CURLPOLLOUT"></a><span class="nroffip">CURL_POLL_OUT (2)</span>
+<p class="level1">register, interested in write readiness
+<p class="level0"><a name="CURLPOLLINOUT"></a><span class="nroffip">CURL_POLL_INOUT (3)</span>
+<p class="level1">register, interested in both read and write readiness
+<p class="level0"><a name="CURLPOLLREMOVE"></a><span class="nroffip">CURL_POLL_REMOVE (4)</span>
+<p class="level1">unregister
+<p class="level0">
+<p class="level0">The <span Class="emphasis">socketp</span> argument is a private pointer you have previously set with <a class="emphasis" href="./curl_multi_assign.html">curl_multi_assign(3)</a> to be associated with the <span Class="emphasis">s</span> socket. If no pointer has been set, socketp will be NULL. This argument is of course a service to applications that want to keep certain data or structs that are strictly associated to the given socket.
+<p class="level0">The <span Class="emphasis">userp</span> argument is a private pointer you have previously set with <a class="emphasis" href="./curl_multi_setopt.html">curl_multi_setopt(3)</a> and the CURLMOPT_SOCKETDATA option. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">CURLMcode type, general libcurl multi interface error code.
+<p class="level0">Before version 7.20.0: If you receive <span Class="emphasis">CURLM_CALL_MULTI_PERFORM</span>, this basically means that you should call <a class="emphasis" href="./curl_multi_socket_action.html">curl_multi_socket_action(3)</a> again before you wait for more actions on libcurl's sockets. You don't have to do it immediately, but the return code means that libcurl may have more data available to return or that there may be more data to send off before it is "satisfied".
+<p class="level0">The return code from this function is for the whole multi stack. Problems still might have occurred on individual transfers even when one of these functions return OK. <a name="TYPICAL"></a><h2 class="nroffsh">TYPICAL USAGE</h2>
+<p class="level0">1. Create a multi handle
+<p class="level0">2. Set the socket callback with CURLMOPT_SOCKETFUNCTION
+<p class="level0">3. Set the timeout callback with CURLMOPT_TIMERFUNCTION, to get to know what timeout value to use when waiting for socket activities.
+<p class="level0">4. Add easy handles with curl_multi_add_handle()
+<p class="level0">5. Provide some means to manage the sockets libcurl is using, so you can check them for activity. This can be done through your application code, or by way of an external library such as libevent or glib.
+<p class="level0">6. Call curl_multi_socket_action() to kickstart everything. To get one or more callbacks called.
+<p class="level0">7. Wait for activity on any of libcurl's sockets, use the timeout value your callback has been told
+<p class="level0">8, When activity is detected, call curl_multi_socket_action() for the socket(s) that got action. If no activity is detected and the timeout expires, call <a class="emphasis" href="./curl_multi_socket_action.html">curl_multi_socket_action(3)</a> with <span Class="emphasis">CURL_SOCKET_TIMEOUT</span> <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">This function was added in libcurl 7.15.4, and is deemed stable since 7.16.0. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><a class="manpage" href="./curl_multi_cleanup.html">curl_multi_cleanup (3)</a> <a class="manpage" href="./curl_multi_init.html"> curl_multi_init (3)</a> <span Class="manpage"> </span> <a class="manpage" href="./curl_multi_fdset.html">curl_multi_fdset (3)</a> <a class="manpage" href="./curl_multi_info_read.html"> curl_multi_info_read (3)</a> <span Class="manpage"> </span> <span Class="manpage">the hiperfifo.c example</span> <p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_multi_socket_action.pdf b/docs/libcurl/curl_multi_socket_action.pdf
new file mode 100644
index 0000000..c40e8d6
--- /dev/null
+++ b/docs/libcurl/curl_multi_socket_action.pdf
Binary files differ
diff --git a/docs/libcurl/curl_multi_strerror.3 b/docs/libcurl/curl_multi_strerror.3
new file mode 100644
index 0000000..2d9801d
--- /dev/null
+++ b/docs/libcurl/curl_multi_strerror.3
@@ -0,0 +1,19 @@
+.\" You can view this file with:
+.\" nroff -man [file]
+.\"
+.TH curl_multi_strerror 3 "26 Apr 2004" "libcurl 7.12" "libcurl Manual"
+.SH NAME
+curl_multi_strerror - return string describing error code
+.SH SYNOPSIS
+.nf
+.B #include <curl/curl.h>
+.BI "const char *curl_multi_strerror(CURLMcode " errornum ");"
+.SH DESCRIPTION
+The curl_multi_strerror() function returns a string describing the CURLMcode
+error code passed in the argument \fIerrornum\fP.
+.SH AVAILABILITY
+This function was added in libcurl 7.12.0
+.SH RETURN VALUE
+A pointer to a zero terminated string.
+.SH "SEE ALSO"
+.BR libcurl-errors "(3), " curl_easy_strerror "(3), " curl_share_strerror "(3)"
diff --git a/docs/libcurl/curl_multi_strerror.html b/docs/libcurl/curl_multi_strerror.html
new file mode 100644
index 0000000..ac885aa
--- /dev/null
+++ b/docs/libcurl/curl_multi_strerror.html
@@ -0,0 +1,58 @@
+<html><head>
+<title>curl_multi_strerror man page</title>
+<meta name="generator" content="roffit 0.7">
+<STYLE type="text/css">
+P.level0 {
+ padding-left: 2em;
+}
+
+P.level1 {
+ padding-left: 4em;
+}
+
+P.level2 {
+ padding-left: 6em;
+}
+
+span.emphasis {
+ font-style: italic;
+}
+
+span.bold {
+ font-weight: bold;
+}
+
+span.manpage {
+ font-weight: bold;
+}
+
+h2.nroffsh {
+ background-color: #e0e0e0;
+}
+
+span.nroffip {
+ font-weight: bold;
+ font-size: 120%;
+ font-family: monospace;
+}
+
+p.roffit {
+ text-align: center;
+ font-size: 80%;
+}
+</STYLE>
+</head><body>
+
+<p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
+<p class="level0">curl_multi_strerror - return string describing error code <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><pre>
+<p class="level0"><span Class="bold">#include &lt;curl/curl.h&gt;</span>
+<span Class="bold">const char *curl_multi_strerror(CURLMcode errornum );</span>
+</pre>
+<a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">The curl_multi_strerror() function returns a string describing the CURLMcode error code passed in the argument <span Class="emphasis">errornum</span>. <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">This function was added in libcurl 7.12.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">A pointer to a zero terminated string. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><span Class="manpage">libcurl-errors (3)</span> <a class="manpage" href="./curl_easy_strerror.html"> curl_easy_strerror (3)</a> <a class="manpage" href="./curl_share_strerror.html"> curl_share_strerror (3)</a> <p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_multi_strerror.pdf b/docs/libcurl/curl_multi_strerror.pdf
new file mode 100644
index 0000000..12a9cf7
--- /dev/null
+++ b/docs/libcurl/curl_multi_strerror.pdf
Binary files differ
diff --git a/docs/libcurl/curl_multi_timeout.3 b/docs/libcurl/curl_multi_timeout.3
new file mode 100644
index 0000000..9e53d0b
--- /dev/null
+++ b/docs/libcurl/curl_multi_timeout.3
@@ -0,0 +1,43 @@
+.\"
+.TH curl_multi_timeout 3 "2 Jan 2006" "libcurl 7.16.0" "libcurl Manual"
+.SH NAME
+curl_multi_timeout \- how long to wait for action before proceeding
+.SH SYNOPSIS
+#include <curl/curl.h>
+
+CURLMcode curl_multi_timeout(CURLM *multi_handle, long *timeout);
+.SH DESCRIPTION
+
+An application using the libcurl multi interface should call
+\fBcurl_multi_timeout(3)\fP to figure out how long it should wait for socket
+actions \- at most \- before proceeding.
+
+Proceeding means either doing the socket-style timeout action: call the
+\fBcurl_multi_socket_action(3)\fP function with the \fBsockfd\fP argument set
+to CURL_SOCKET_TIMEOUT, or call \fBcurl_multi_perform(3)\fP if you're using
+the simpler and older multi interface approach.
+
+The timeout value returned in the long \fBtimeout\fP points to, is in number
+of milliseconds at this very moment. If 0, it means you should proceed
+immediately without waiting for anything. If it returns -1, there's no timeout
+at all set.
+
+An application that uses the multi_socket API SHOULD not use this function, but
+SHOULD instead use \fIcurl_multi_setopt(3)\fP and its
+\fPCURLMOPT_TIMERFUNCTION\fP option for proper and desired behavior.
+
+Note: if libcurl returns a -1 timeout here, it just means that libcurl
+currently has no stored timeout value. You must not wait too long (more than a
+few seconds perhaps) before you call curl_multi_perform() again.
+.SH "RETURN VALUE"
+The standard CURLMcode for multi interface error codes.
+.SH "TYPICAL USAGE"
+Call \fBcurl_multi_timeout(3)\fP, then wait for action on the sockets. You
+figure out which sockets to wait for by calling \fBcurl_multi_fdset(3)\fP or
+by a previous call to \fBcurl_multi_socket(3)\fP.
+.SH AVAILABILITY
+This function was added in libcurl 7.15.4.
+.SH "SEE ALSO"
+.BR curl_multi_fdset "(3), " curl_multi_info_read "(3), "
+.BR curl_multi_socket "(3), " curl_multi_setopt "(3) "
+
diff --git a/docs/libcurl/curl_multi_timeout.html b/docs/libcurl/curl_multi_timeout.html
new file mode 100644
index 0000000..78a383f
--- /dev/null
+++ b/docs/libcurl/curl_multi_timeout.html
@@ -0,0 +1,62 @@
+<html><head>
+<title>curl_multi_timeout man page</title>
+<meta name="generator" content="roffit 0.7">
+<STYLE type="text/css">
+P.level0 {
+ padding-left: 2em;
+}
+
+P.level1 {
+ padding-left: 4em;
+}
+
+P.level2 {
+ padding-left: 6em;
+}
+
+span.emphasis {
+ font-style: italic;
+}
+
+span.bold {
+ font-weight: bold;
+}
+
+span.manpage {
+ font-weight: bold;
+}
+
+h2.nroffsh {
+ background-color: #e0e0e0;
+}
+
+span.nroffip {
+ font-weight: bold;
+ font-size: 120%;
+ font-family: monospace;
+}
+
+p.roffit {
+ text-align: center;
+ font-size: 80%;
+}
+</STYLE>
+</head><body>
+
+<p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
+<p class="level0">curl_multi_timeout - how long to wait for action before proceeding <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0">#include &lt;curl/curl.h&gt;
+<p class="level0">CURLMcode curl_multi_timeout(CURLM *multi_handle, long *timeout); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">
+<p class="level0">An application using the libcurl multi interface should call <a class="bold" href="./curl_multi_timeout.html">curl_multi_timeout(3)</a> to figure out how long it should wait for socket actions - at most - before proceeding.
+<p class="level0">Proceeding means either doing the socket-style timeout action: call the <a class="bold" href="./curl_multi_socket_action.html">curl_multi_socket_action(3)</a> function with the <span Class="bold">sockfd</span> argument set to CURL_SOCKET_TIMEOUT, or call <a class="bold" href="./curl_multi_perform.html">curl_multi_perform(3)</a> if you're using the simpler and older multi interface approach.
+<p class="level0">The timeout value returned in the long <span Class="bold">timeout</span> points to, is in number of milliseconds at this very moment. If 0, it means you should proceed immediately without waiting for anything. If it returns -1, there's no timeout at all set.
+<p class="level0">An application that uses the multi_socket API SHOULD not use this function, but SHOULD instead use <a class="emphasis" href="./curl_multi_setopt.html">curl_multi_setopt(3)</a> and its </span>CURLMOPT_TIMERFUNCTION</span> option for proper and desired behavior.
+<p class="level0">Note: if libcurl returns a -1 timeout here, it just means that libcurl currently has no stored timeout value. You must not wait too long (more than a few seconds perhaps) before you call curl_multi_perform() again. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">The standard CURLMcode for multi interface error codes. <a name="TYPICAL"></a><h2 class="nroffsh">TYPICAL USAGE</h2>
+<p class="level0">Call <a class="bold" href="./curl_multi_timeout.html">curl_multi_timeout(3)</a>, then wait for action on the sockets. You figure out which sockets to wait for by calling <a class="bold" href="./curl_multi_fdset.html">curl_multi_fdset(3)</a> or by a previous call to <a class="bold" href="./curl_multi_socket.html">curl_multi_socket(3)</a>. <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">This function was added in libcurl 7.15.4. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><a class="manpage" href="./curl_multi_fdset.html">curl_multi_fdset (3)</a> <a class="manpage" href="./curl_multi_info_read.html"> curl_multi_info_read (3)</a> <span Class="manpage"> </span> <a class="manpage" href="./curl_multi_socket.html">curl_multi_socket (3)</a> <a class="manpage" href="./curl_multi_setopt.html"> curl_multi_setopt (3) </a>
+<p class="level0"><p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_multi_timeout.pdf b/docs/libcurl/curl_multi_timeout.pdf
new file mode 100644
index 0000000..90d744c
--- /dev/null
+++ b/docs/libcurl/curl_multi_timeout.pdf
Binary files differ
diff --git a/docs/libcurl/curl_share_cleanup.3 b/docs/libcurl/curl_share_cleanup.3
new file mode 100644
index 0000000..222197c
--- /dev/null
+++ b/docs/libcurl/curl_share_cleanup.3
@@ -0,0 +1,20 @@
+.\"
+.TH curl_share_cleanup 3 "8 Aug 2003" "libcurl 7.10.7" "libcurl Manual"
+.SH NAME
+curl_share_cleanup - Clean up a shared object
+.SH SYNOPSIS
+.B #include <curl/curl.h>
+.sp
+.BI "CURLSHcode curl_share_cleanup(CURLSH *" share_handle ");"
+.ad
+.SH DESCRIPTION
+This function deletes a shared object. The share handle cannot be used anymore
+when this function has been called.
+
+.SH RETURN VALUE
+CURLSHE_OK (zero) means that the option was set properly, non-zero means an
+error occurred as \fI<curl/curl.h>\fP defines. See the \fIlibcurl-errors.3\fP
+man page for the full list with descriptions. If an error occurs, then the
+share object will not be deleted.
+.SH "SEE ALSO"
+.BR curl_share_init "(3), " curl_share_setopt "(3)"
diff --git a/docs/libcurl/curl_share_cleanup.html b/docs/libcurl/curl_share_cleanup.html
new file mode 100644
index 0000000..758f1e9
--- /dev/null
+++ b/docs/libcurl/curl_share_cleanup.html
@@ -0,0 +1,56 @@
+<html><head>
+<title>curl_share_cleanup man page</title>
+<meta name="generator" content="roffit 0.7">
+<STYLE type="text/css">
+P.level0 {
+ padding-left: 2em;
+}
+
+P.level1 {
+ padding-left: 4em;
+}
+
+P.level2 {
+ padding-left: 6em;
+}
+
+span.emphasis {
+ font-style: italic;
+}
+
+span.bold {
+ font-weight: bold;
+}
+
+span.manpage {
+ font-weight: bold;
+}
+
+h2.nroffsh {
+ background-color: #e0e0e0;
+}
+
+span.nroffip {
+ font-weight: bold;
+ font-size: 120%;
+ font-family: monospace;
+}
+
+p.roffit {
+ text-align: center;
+ font-size: 80%;
+}
+</STYLE>
+</head><body>
+
+<p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
+<p class="level0">curl_share_cleanup - Clean up a shared object <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><span Class="bold">#include &lt;curl/curl.h&gt;</span>
+<p class="level0"><span Class="bold">CURLSHcode curl_share_cleanup(CURLSH * share_handle );</span>
+<p class="level0"><a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">This function deletes a shared object. The share handle cannot be used anymore when this function has been called.
+<p class="level0"><a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">CURLSHE_OK (zero) means that the option was set properly, non-zero means an error occurred as <span Class="emphasis">&lt;curl/curl.h&gt;</span> defines. See the <span Class="emphasis">libcurl-errors.3</span> man page for the full list with descriptions. If an error occurs, then the share object will not be deleted. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><a class="manpage" href="./curl_share_init.html">curl_share_init (3)</a> <a class="manpage" href="./curl_share_setopt.html"> curl_share_setopt (3)</a> <p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_share_cleanup.pdf b/docs/libcurl/curl_share_cleanup.pdf
new file mode 100644
index 0000000..74cab9c
--- /dev/null
+++ b/docs/libcurl/curl_share_cleanup.pdf
Binary files differ
diff --git a/docs/libcurl/curl_share_init.3 b/docs/libcurl/curl_share_init.3
new file mode 100644
index 0000000..871519c
--- /dev/null
+++ b/docs/libcurl/curl_share_init.3
@@ -0,0 +1,24 @@
+.\"
+.TH curl_share_init 3 "8 Aug 2003" "libcurl 7.10.7" "libcurl Manual"
+.SH NAME
+curl_share_init - Create a shared object
+.SH SYNOPSIS
+.B #include <curl/curl.h>
+.sp
+.BI "CURLSH *curl_share_init( );"
+.ad
+.SH DESCRIPTION
+This function returns a CURLSH handle to be used as input to all the other
+share-functions, sometimes referred to as a share handle in some places in the
+documentation. This init call MUST have a corresponding call to
+\fIcurl_share_cleanup\fP when all operations using the share are complete.
+
+This \fIshare handle\fP is what you pass to curl using the \fICURLOPT_SHARE\fP
+option with \fIcurl_easy_setopt(3)\fP, to make that specific curl handle use
+the data in this share.
+.SH RETURN VALUE
+If this function returns NULL, something went wrong (out of memory, etc.)
+and therefore the share object was not created.
+.SH "SEE ALSO"
+.BR curl_share_cleanup "(3), " curl_share_setopt "(3)"
+
diff --git a/docs/libcurl/curl_share_init.html b/docs/libcurl/curl_share_init.html
new file mode 100644
index 0000000..cbc8231
--- /dev/null
+++ b/docs/libcurl/curl_share_init.html
@@ -0,0 +1,57 @@
+<html><head>
+<title>curl_share_init man page</title>
+<meta name="generator" content="roffit 0.7">
+<STYLE type="text/css">
+P.level0 {
+ padding-left: 2em;
+}
+
+P.level1 {
+ padding-left: 4em;
+}
+
+P.level2 {
+ padding-left: 6em;
+}
+
+span.emphasis {
+ font-style: italic;
+}
+
+span.bold {
+ font-weight: bold;
+}
+
+span.manpage {
+ font-weight: bold;
+}
+
+h2.nroffsh {
+ background-color: #e0e0e0;
+}
+
+span.nroffip {
+ font-weight: bold;
+ font-size: 120%;
+ font-family: monospace;
+}
+
+p.roffit {
+ text-align: center;
+ font-size: 80%;
+}
+</STYLE>
+</head><body>
+
+<p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
+<p class="level0">curl_share_init - Create a shared object <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><span Class="bold">#include &lt;curl/curl.h&gt;</span>
+<p class="level0"><span Class="bold">CURLSH *curl_share_init( );</span>
+<p class="level0"><a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">This function returns a CURLSH handle to be used as input to all the other share-functions, sometimes referred to as a share handle in some places in the documentation. This init call MUST have a corresponding call to <span Class="emphasis">curl_share_cleanup</span> when all operations using the share are complete.
+<p class="level0">This <span Class="emphasis">share handle</span> is what you pass to curl using the <span Class="emphasis">CURLOPT_SHARE</span> option with <a class="emphasis" href="./curl_easy_setopt.html">curl_easy_setopt(3)</a>, to make that specific curl handle use the data in this share. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">If this function returns NULL, something went wrong (out of memory, etc.) and therefore the share object was not created. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><a class="manpage" href="./curl_share_cleanup.html">curl_share_cleanup (3)</a> <a class="manpage" href="./curl_share_setopt.html"> curl_share_setopt (3)</a>
+<p class="level0"><p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_share_init.pdf b/docs/libcurl/curl_share_init.pdf
new file mode 100644
index 0000000..02bf1c6
--- /dev/null
+++ b/docs/libcurl/curl_share_init.pdf
Binary files differ
diff --git a/docs/libcurl/curl_share_setopt.3 b/docs/libcurl/curl_share_setopt.3
new file mode 100644
index 0000000..351360d
--- /dev/null
+++ b/docs/libcurl/curl_share_setopt.3
@@ -0,0 +1,60 @@
+.\"
+.TH curl_share_setopt 3 "8 Aug 2003" "libcurl 7.10.7" "libcurl Manual"
+.SH NAME
+curl_share_setopt - Set options for a shared object
+.SH SYNOPSIS
+.B #include <curl/curl.h>
+.sp
+CURLSHcode curl_share_setopt(CURLSH *share, CURLSHoption option, parameter);
+.ad
+.SH DESCRIPTION
+Set the \fIoption\fP to \fIparameter\fP for the given \fIshare\fP.
+.SH OPTIONS
+.IP CURLSHOPT_LOCKFUNC
+The \fIparameter\fP must be a pointer to a function matching the following
+prototype:
+
+void lock_function(CURL *handle, curl_lock_data data, curl_lock_access access,
+void *userptr);
+
+\fIdata\fP defines what data libcurl wants to lock, and you must make sure that
+only one lock is given at any time for each kind of data.
+
+\fIaccess\fP defines what access type libcurl wants, shared or single.
+
+\fIuserptr\fP is the pointer you set with \fICURLSHOPT_USERDATA\fP.
+.IP CURLSHOPT_UNLOCKFUNC
+The \fIparameter\fP must be a pointer to a function matching the following
+prototype:
+
+void unlock_function(CURL *handle, curl_lock_data data, void *userptr);
+
+\fIdata\fP defines what data libcurl wants to unlock, and you must make sure
+that only one lock is given at any time for each kind of data.
+
+\fIuserptr\fP is the pointer you set with \fICURLSHOPT_USERDATA\fP.
+.IP CURLSHOPT_SHARE
+The \fIparameter\fP specifies a type of data that should be shared. This may
+be set to one of the values described below.
+.RS
+.IP CURL_LOCK_DATA_COOKIE
+Cookie data will be shared across the easy handles using this shared object.
+.IP CURL_LOCK_DATA_DNS
+Cached DNS hosts will be shared across the easy handles using this shared
+object. Note that when you use the multi interface, all easy handles added to
+the same multi handle will share DNS cache by default without this having to
+be used!
+.RE
+.IP CURLSHOPT_UNSHARE
+This option does the opposite of \fICURLSHOPT_SHARE\fP. It specifies that
+the specified \fIparameter\fP will no longer be shared. Valid values are
+the same as those for \fICURLSHOPT_SHARE\fP.
+.IP CURLSHOPT_USERDATA
+The \fIparameter\fP allows you to specify a pointer to data that will be passed
+to the lock_function and unlock_function each time it is called.
+.SH RETURN VALUE
+CURLSHE_OK (zero) means that the option was set properly, non-zero means an
+error occurred as \fI<curl/curl.h>\fP defines. See the \fIlibcurl-errors.3\fP
+man page for the full list with descriptions.
+.SH "SEE ALSO"
+.BR curl_share_cleanup "(3), " curl_share_init "(3)"
diff --git a/docs/libcurl/curl_share_setopt.html b/docs/libcurl/curl_share_setopt.html
new file mode 100644
index 0000000..4392387
--- /dev/null
+++ b/docs/libcurl/curl_share_setopt.html
@@ -0,0 +1,79 @@
+<html><head>
+<title>curl_share_setopt man page</title>
+<meta name="generator" content="roffit 0.7">
+<STYLE type="text/css">
+P.level0 {
+ padding-left: 2em;
+}
+
+P.level1 {
+ padding-left: 4em;
+}
+
+P.level2 {
+ padding-left: 6em;
+}
+
+span.emphasis {
+ font-style: italic;
+}
+
+span.bold {
+ font-weight: bold;
+}
+
+span.manpage {
+ font-weight: bold;
+}
+
+h2.nroffsh {
+ background-color: #e0e0e0;
+}
+
+span.nroffip {
+ font-weight: bold;
+ font-size: 120%;
+ font-family: monospace;
+}
+
+p.roffit {
+ text-align: center;
+ font-size: 80%;
+}
+</STYLE>
+</head><body>
+
+<p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
+<p class="level0">curl_share_setopt - Set options for a shared object <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><span Class="bold">#include &lt;curl/curl.h&gt;</span>
+<p class="level0">CURLSHcode curl_share_setopt(CURLSH *share, CURLSHoption option, parameter);
+<p class="level0"><a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">Set the <span Class="emphasis">option</span> to <span Class="emphasis">parameter</span> for the given <span Class="emphasis">share</span>. <a name="OPTIONS"></a><h2 class="nroffsh">OPTIONS</h2>
+<p class="level0">
+<p class="level0"><a name="CURLSHOPTLOCKFUNC"></a><span class="nroffip">CURLSHOPT_LOCKFUNC</span>
+<p class="level1">The <span Class="emphasis">parameter</span> must be a pointer to a function matching the following prototype:
+<p class="level1">void lock_function(CURL *handle, curl_lock_data data, curl_lock_access access, void *userptr);
+<p class="level1"><span Class="emphasis">data</span> defines what data libcurl wants to lock, and you must make sure that only one lock is given at any time for each kind of data.
+<p class="level1"><span Class="emphasis">access</span> defines what access type libcurl wants, shared or single.
+<p class="level1"><span Class="emphasis">userptr</span> is the pointer you set with <a class="emphasis" href="#CURLSHOPTUSERDATA">CURLSHOPT_USERDATA</a>.
+<p class="level0"><a name="CURLSHOPTUNLOCKFUNC"></a><span class="nroffip">CURLSHOPT_UNLOCKFUNC</span>
+<p class="level1">The <span Class="emphasis">parameter</span> must be a pointer to a function matching the following prototype:
+<p class="level1">void unlock_function(CURL *handle, curl_lock_data data, void *userptr);
+<p class="level1"><span Class="emphasis">data</span> defines what data libcurl wants to unlock, and you must make sure that only one lock is given at any time for each kind of data.
+<p class="level1"><span Class="emphasis">userptr</span> is the pointer you set with <a class="emphasis" href="#CURLSHOPTUSERDATA">CURLSHOPT_USERDATA</a>.
+<p class="level0"><a name="CURLSHOPTSHARE"></a><span class="nroffip">CURLSHOPT_SHARE</span>
+<p class="level1">The <span Class="emphasis">parameter</span> specifies a type of data that should be shared. This may be set to one of the values described below.
+<p class="level2">
+<p class="level1"><a name="CURLLOCKDATACOOKIE"></a><span class="nroffip">CURL_LOCK_DATA_COOKIE</span>
+<p class="level2">Cookie data will be shared across the easy handles using this shared object.
+<p class="level1"><a name="CURLLOCKDATADNS"></a><span class="nroffip">CURL_LOCK_DATA_DNS</span>
+<p class="level2">Cached DNS hosts will be shared across the easy handles using this shared object. Note that when you use the multi interface, all easy handles added to the same multi handle will share DNS cache by default without this having to be used!
+<p class="level1">
+<p class="level0"><a name="CURLSHOPTUNSHARE"></a><span class="nroffip">CURLSHOPT_UNSHARE</span>
+<p class="level1">This option does the opposite of <a class="emphasis" href="#CURLSHOPTSHARE">CURLSHOPT_SHARE</a>. It specifies that the specified <span Class="emphasis">parameter</span> will no longer be shared. Valid values are the same as those for <a class="emphasis" href="#CURLSHOPTSHARE">CURLSHOPT_SHARE</a>.
+<p class="level0"><a name="CURLSHOPTUSERDATA"></a><span class="nroffip">CURLSHOPT_USERDATA</span>
+<p class="level1">The <span Class="emphasis">parameter</span> allows you to specify a pointer to data that will be passed to the lock_function and unlock_function each time it is called. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">CURLSHE_OK (zero) means that the option was set properly, non-zero means an error occurred as <span Class="emphasis">&lt;curl/curl.h&gt;</span> defines. See the <span Class="emphasis">libcurl-errors.3</span> man page for the full list with descriptions. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><a class="manpage" href="./curl_share_cleanup.html">curl_share_cleanup (3)</a> <a class="manpage" href="./curl_share_init.html"> curl_share_init (3)</a> <p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_share_setopt.pdf b/docs/libcurl/curl_share_setopt.pdf
new file mode 100644
index 0000000..5cf8958
--- /dev/null
+++ b/docs/libcurl/curl_share_setopt.pdf
Binary files differ
diff --git a/docs/libcurl/curl_share_strerror.3 b/docs/libcurl/curl_share_strerror.3
new file mode 100644
index 0000000..69087db
--- /dev/null
+++ b/docs/libcurl/curl_share_strerror.3
@@ -0,0 +1,19 @@
+.\" You can view this file with:
+.\" nroff -man [file]
+.\"
+.TH curl_share_strerror 3 "26 Apr 2004" "libcurl 7.12" "libcurl Manual"
+.SH NAME
+curl_share_strerror - return string describing error code
+.SH SYNOPSIS
+.nf
+.B #include <curl/curl.h>
+.BI "const char *curl_share_strerror(CURLSHcode " errornum ");"
+.SH DESCRIPTION
+The curl_share_strerror() function returns a string describing the CURLSHcode
+error code passed in the argument \fIerrornum\fP.
+.SH AVAILABILITY
+This function was added in libcurl 7.12.0
+.SH RETURN VALUE
+A pointer to a zero terminated string.
+.SH "SEE ALSO"
+.BR libcurl-errors "(3), " curl_multi_strerror "(3), " curl_easy_strerror "(3)"
diff --git a/docs/libcurl/curl_share_strerror.html b/docs/libcurl/curl_share_strerror.html
new file mode 100644
index 0000000..0b5b050
--- /dev/null
+++ b/docs/libcurl/curl_share_strerror.html
@@ -0,0 +1,58 @@
+<html><head>
+<title>curl_share_strerror man page</title>
+<meta name="generator" content="roffit 0.7">
+<STYLE type="text/css">
+P.level0 {
+ padding-left: 2em;
+}
+
+P.level1 {
+ padding-left: 4em;
+}
+
+P.level2 {
+ padding-left: 6em;
+}
+
+span.emphasis {
+ font-style: italic;
+}
+
+span.bold {
+ font-weight: bold;
+}
+
+span.manpage {
+ font-weight: bold;
+}
+
+h2.nroffsh {
+ background-color: #e0e0e0;
+}
+
+span.nroffip {
+ font-weight: bold;
+ font-size: 120%;
+ font-family: monospace;
+}
+
+p.roffit {
+ text-align: center;
+ font-size: 80%;
+}
+</STYLE>
+</head><body>
+
+<p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
+<p class="level0">curl_share_strerror - return string describing error code <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><pre>
+<p class="level0"><span Class="bold">#include &lt;curl/curl.h&gt;</span>
+<span Class="bold">const char *curl_share_strerror(CURLSHcode errornum );</span>
+</pre>
+<a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">The curl_share_strerror() function returns a string describing the CURLSHcode error code passed in the argument <span Class="emphasis">errornum</span>. <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">This function was added in libcurl 7.12.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">A pointer to a zero terminated string. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><span Class="manpage">libcurl-errors (3)</span> <a class="manpage" href="./curl_multi_strerror.html"> curl_multi_strerror (3)</a> <a class="manpage" href="./curl_easy_strerror.html"> curl_easy_strerror (3)</a> <p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_share_strerror.pdf b/docs/libcurl/curl_share_strerror.pdf
new file mode 100644
index 0000000..9ee7798
--- /dev/null
+++ b/docs/libcurl/curl_share_strerror.pdf
Binary files differ
diff --git a/docs/libcurl/curl_slist_append.3 b/docs/libcurl/curl_slist_append.3
new file mode 100644
index 0000000..5cca9b7
--- /dev/null
+++ b/docs/libcurl/curl_slist_append.3
@@ -0,0 +1,38 @@
+.\" You can view this file with:
+.\" nroff -man [file]
+.\"
+.TH curl_slist_append 3 "19 Jun 2003" "libcurl 7.10.4" "libcurl Manual"
+.SH NAME
+curl_slist_append - add a string to an slist
+.SH SYNOPSIS
+.B #include <curl/curl.h>
+.sp
+.BI "struct curl_slist *curl_slist_append(struct curl_slist *" list,
+.BI "const char * "string ");"
+.ad
+.SH DESCRIPTION
+curl_slist_append() appends a specified string to a linked list of
+strings. The existing \fIlist\fP should be passed as the first argument while
+the new list is returned from this function. The specified \fIstring\fP has
+been appended when this function returns. curl_slist_append() copies the
+string.
+
+The list should be freed again (after usage) with
+\fBcurl_slist_free_all(3)\fP.
+.SH RETURN VALUE
+A null pointer is returned if anything went wrong, otherwise the new list
+pointer is returned.
+.SH EXAMPLE
+.nf
+ CURL handle;
+ struct curl_slist *slist=NULL;
+
+ slist = curl_slist_append(slist, "pragma:");
+ curl_easy_setopt(handle, CURLOPT_HTTPHEADER, slist);
+
+ curl_easy_perform(handle);
+
+ curl_slist_free_all(slist); /* free the list again */
+.fi
+.SH "SEE ALSO"
+.BR curl_slist_free_all "(3), "
diff --git a/docs/libcurl/curl_slist_append.html b/docs/libcurl/curl_slist_append.html
new file mode 100644
index 0000000..50436e8
--- /dev/null
+++ b/docs/libcurl/curl_slist_append.html
@@ -0,0 +1,66 @@
+<html><head>
+<title>curl_slist_append man page</title>
+<meta name="generator" content="roffit 0.7">
+<STYLE type="text/css">
+P.level0 {
+ padding-left: 2em;
+}
+
+P.level1 {
+ padding-left: 4em;
+}
+
+P.level2 {
+ padding-left: 6em;
+}
+
+span.emphasis {
+ font-style: italic;
+}
+
+span.bold {
+ font-weight: bold;
+}
+
+span.manpage {
+ font-weight: bold;
+}
+
+h2.nroffsh {
+ background-color: #e0e0e0;
+}
+
+span.nroffip {
+ font-weight: bold;
+ font-size: 120%;
+ font-family: monospace;
+}
+
+p.roffit {
+ text-align: center;
+ font-size: 80%;
+}
+</STYLE>
+</head><body>
+
+<p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
+<p class="level0">curl_slist_append - add a string to an slist <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><span Class="bold">#include &lt;curl/curl.h&gt;</span>
+<p class="level0"><span Class="bold">struct curl_slist *curl_slist_append(struct curl_slist * list,</span> <span Class="bold">const char * string );</span>
+<p class="level0"><a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">curl_slist_append() appends a specified string to a linked list of strings. The existing <span Class="emphasis">list</span> should be passed as the first argument while the new list is returned from this function. The specified <span Class="emphasis">string</span> has been appended when this function returns. curl_slist_append() copies the string.
+<p class="level0">The list should be freed again (after usage) with <a class="bold" href="./curl_slist_free_all.html">curl_slist_free_all(3)</a>. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">A null pointer is returned if anything went wrong, otherwise the new list pointer is returned. <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0"><pre>
+<p class="level0">&nbsp;CURL handle;
+ &nbsp;struct curl_slist *slist=NULL;
+ <p class="level0">&nbsp;slist = curl_slist_append(slist, "pragma:");
+ &nbsp;curl_easy_setopt(handle, CURLOPT_HTTPHEADER, slist);
+ <p class="level0">&nbsp;curl_easy_perform(handle);
+ <p class="level0">&nbsp;curl_slist_free_all(slist); /* free the list again */
+ </pre>
+
+<p class="level0"><a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><a class="manpage" href="./curl_slist_free_all.html">curl_slist_free_all (3)</a> <span Class="manpage"> </span> <p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_slist_append.pdf b/docs/libcurl/curl_slist_append.pdf
new file mode 100644
index 0000000..9aa31a6
--- /dev/null
+++ b/docs/libcurl/curl_slist_append.pdf
Binary files differ
diff --git a/docs/libcurl/curl_slist_free_all.3 b/docs/libcurl/curl_slist_free_all.3
new file mode 100644
index 0000000..ec1b360
--- /dev/null
+++ b/docs/libcurl/curl_slist_free_all.3
@@ -0,0 +1,19 @@
+.\" You can view this file with:
+.\" nroff -man [file]
+.\"
+.TH curl_slist_free_all 3 "5 March 2001" "libcurl 7.0" "libcurl Manual"
+.SH NAME
+curl_slist_free_all - free an entire curl_slist list
+.SH SYNOPSIS
+.B #include <curl/curl.h>
+.sp
+.BI "void curl_slist_free_all(struct curl_slist *" list);
+.ad
+.SH DESCRIPTION
+curl_slist_free_all() removes all traces of a previously built curl_slist
+linked list.
+.SH RETURN VALUE
+Nothing.
+.SH "SEE ALSO"
+.BR curl_slist_append "(3), "
+
diff --git a/docs/libcurl/curl_slist_free_all.html b/docs/libcurl/curl_slist_free_all.html
new file mode 100644
index 0000000..76a0a9d
--- /dev/null
+++ b/docs/libcurl/curl_slist_free_all.html
@@ -0,0 +1,56 @@
+<html><head>
+<title>curl_slist_free_all man page</title>
+<meta name="generator" content="roffit 0.7">
+<STYLE type="text/css">
+P.level0 {
+ padding-left: 2em;
+}
+
+P.level1 {
+ padding-left: 4em;
+}
+
+P.level2 {
+ padding-left: 6em;
+}
+
+span.emphasis {
+ font-style: italic;
+}
+
+span.bold {
+ font-weight: bold;
+}
+
+span.manpage {
+ font-weight: bold;
+}
+
+h2.nroffsh {
+ background-color: #e0e0e0;
+}
+
+span.nroffip {
+ font-weight: bold;
+ font-size: 120%;
+ font-family: monospace;
+}
+
+p.roffit {
+ text-align: center;
+ font-size: 80%;
+}
+</STYLE>
+</head><body>
+
+<p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
+<p class="level0">curl_slist_free_all - free an entire curl_slist list <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><span Class="bold">#include &lt;curl/curl.h&gt;</span>
+<p class="level0"><span Class="bold">void curl_slist_free_all(struct curl_slist * list);</span>
+<p class="level0"><a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">curl_slist_free_all() removes all traces of a previously built curl_slist linked list. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Nothing. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><a class="manpage" href="./curl_slist_append.html">curl_slist_append (3)</a> <span Class="manpage"> </span>
+<p class="level0"><p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_slist_free_all.pdf b/docs/libcurl/curl_slist_free_all.pdf
new file mode 100644
index 0000000..a48fb6f
--- /dev/null
+++ b/docs/libcurl/curl_slist_free_all.pdf
@@ -0,0 +1,107 @@
+%PDF-1.4
+%Çì¢
+5 0 obj
+<</Length 6 0 R/Filter /FlateDecode>>
+stream
+xœ…Së‹Ó@ÿž¿bÀnÄlg7Ù<P„ªAîèãls‚´RriÚFÓ´—GÅÿÞÝdKSì!K6agfç÷˜<R¨–~'{c0ó`[_ä³5ž Ö&€~%{øÉ$_D£«càqð¢½Á˜OQ@ôÛX¤)óU•gU½Ú”iºŠó|Iì¥ yö¤b¦ÅRDŒã¢‰sx©ÀüÝRΈÙ?ýi Û…hdÉÐ|-!Ë(T¶„­ 2Íèg0Gê ã*Œ
+ç-˜`ú„¸€´¨³2íAµu·ö`X‡Å\ê·mçß'Ó‡ùÝü’¦¡êÆäUV$y³Nὺx 6ºû Ò-冤Á–×épæР#µ ÙúZ*S‰ŽžOΚUuÙ$uô›VÃÁŒáÙ:סèj™TÊÒ|÷/+Ž²mŸÙçpþiv÷ÝM'×ÊöÈÝ´QÚ^¦ûÙ¢h­BF=Oc8¥*Æ©èÈr?ðªbêÜEêÛÈÎJH«ê2NÒ
+ˆáX¦&J ›œ²CSåàÉäHš,¯¯=,~™ »ÌtÝzJµD}þLxÔ.üdF³ |3™íHiŽC]yC‹É¡ÞeÅ–þo`†£ùôÅéii±¾Vß“Cïz@HûÓ¼m¥fŒQ!^Ø\·Ò?x{‚s
+XW/ƽ]jK't .“pDÖV:HÝóµ'ad|•ë/zëÏendstream
+endobj
+6 0 obj
+547
+endobj
+4 0 obj
+<</Type/Page/MediaBox [0 0 612 792]
+/Rotate 0/Parent 3 0 R
+/Resources<</ProcSet[/PDF /Text]
+/ExtGState 11 0 R
+/Font 12 0 R
+>>
+/Contents 5 0 R
+>>
+endobj
+3 0 obj
+<< /Type /Pages /Kids [
+4 0 R
+] /Count 1
+>>
+endobj
+1 0 obj
+<</Type /Catalog /Pages 3 0 R
+/Metadata 13 0 R
+>>
+endobj
+7 0 obj
+<</Type/ExtGState
+/OPM 1>>endobj
+11 0 obj
+<</R7
+7 0 R>>
+endobj
+12 0 obj
+<</R10
+10 0 R/R9
+9 0 R/R8
+8 0 R>>
+endobj
+10 0 obj
+<</BaseFont/Times-Italic/Type/Font
+/Subtype/Type1>>
+endobj
+9 0 obj
+<</BaseFont/Times-Bold/Type/Font
+/Subtype/Type1>>
+endobj
+8 0 obj
+<</BaseFont/Times-Roman/Type/Font
+/Subtype/Type1>>
+endobj
+13 0 obj
+<</Type/Metadata
+/Subtype/XML/Length 1321>>stream
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<?adobe-xap-filters esc="CRLF"?>
+<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+<rdf:Description rdf:about='32480ada-0e69-11eb-0000-0d90648fa894' xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 8.71'/>
+<rdf:Description rdf:about='32480ada-0e69-11eb-0000-0d90648fa894' xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2010-10-13T00:04:13+02:00</xmp:ModifyDate>
+<xmp:CreateDate>2010-10-13T00:04:13+02:00</xmp:CreateDate>
+<xmp:CreatorTool>groff version 1.20.1</xmp:CreatorTool></rdf:Description>
+<rdf:Description rdf:about='32480ada-0e69-11eb-0000-0d90648fa894' xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='32480ada-0e69-11eb-0000-0d90648fa894'/>
+<rdf:Description rdf:about='32480ada-0e69-11eb-0000-0d90648fa894' xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>Untitled</rdf:li></rdf:Alt></dc:title></rdf:Description>
+</rdf:RDF>
+</x:xmpmeta>
+
+
+<?xpacket end='w'?>
+endstream
+endobj
+2 0 obj
+<</Producer(GPL Ghostscript 8.71)
+/CreationDate(D:20101013000413+02'00')
+/ModDate(D:20101013000413+02'00')
+/Creator(groff version 1.20.1)>>endobj
+xref
+0 14
+0000000000 65535 f
+0000000870 00000 n
+0000002653 00000 n
+0000000811 00000 n
+0000000651 00000 n
+0000000015 00000 n
+0000000632 00000 n
+0000000935 00000 n
+0000001189 00000 n
+0000001124 00000 n
+0000001056 00000 n
+0000000976 00000 n
+0000001006 00000 n
+0000001255 00000 n
+trailer
+<< /Size 14 /Root 1 0 R /Info 2 0 R
+/ID [<A9D90A968C5A2CABC7D7A610A03C900F><A9D90A968C5A2CABC7D7A610A03C900F>]
+>>
+startxref
+2807
+%%EOF
diff --git a/docs/libcurl/curl_strequal.3 b/docs/libcurl/curl_strequal.3
new file mode 100644
index 0000000..8ab4234
--- /dev/null
+++ b/docs/libcurl/curl_strequal.3
@@ -0,0 +1,31 @@
+.\"
+.TH curl_strequal 3 "30 April 2004" "libcurl 7.12" "libcurl Manual"
+.SH NAME
+curl_strequal, curl_strnequal - case insensitive string comparisons
+.SH SYNOPSIS
+.B #include <curl/curl.h>
+.sp
+.BI "int curl_strequal(char *" str1 ", char *" str2 ");"
+.sp
+.BI "int curl_strenqual(char *" str1 ", char *" str2 ", size_t " len ");"
+.SH DESCRIPTION
+The
+.B curl_strequal()
+function compares the two strings \fIstr1\fP and \fIstr2\fP, ignoring the case
+of the characters. It returns a non-zero (TRUE) integer if the strings are
+identical.
+.sp
+The \fBcurl_strnequal()\fP function is similar, except it only compares the
+first \fIlen\fP characters of \fIstr1\fP.
+.sp
+These functions are provided by libcurl to enable applications to compare
+strings in a truly portable manner. There are no standard portable case
+insensitive string comparison functions. These two work on all platforms.
+.SH AVAILABILITY
+These functions will be removed from the public libcurl API in a near
+future. They will instead be made "available" by source code access only, and
+then as curlx_strequal() and curlx_strenqual().
+.SH RETURN VALUE
+Non-zero if the strings are identical. Zero if they're not.
+.SH "SEE ALSO"
+.BR strcmp "(3), " strcasecmp "(3)"
diff --git a/docs/libcurl/curl_strequal.html b/docs/libcurl/curl_strequal.html
new file mode 100644
index 0000000..eefdf10
--- /dev/null
+++ b/docs/libcurl/curl_strequal.html
@@ -0,0 +1,58 @@
+<html><head>
+<title>curl_strequal man page</title>
+<meta name="generator" content="roffit 0.7">
+<STYLE type="text/css">
+P.level0 {
+ padding-left: 2em;
+}
+
+P.level1 {
+ padding-left: 4em;
+}
+
+P.level2 {
+ padding-left: 6em;
+}
+
+span.emphasis {
+ font-style: italic;
+}
+
+span.bold {
+ font-weight: bold;
+}
+
+span.manpage {
+ font-weight: bold;
+}
+
+h2.nroffsh {
+ background-color: #e0e0e0;
+}
+
+span.nroffip {
+ font-weight: bold;
+ font-size: 120%;
+ font-family: monospace;
+}
+
+p.roffit {
+ text-align: center;
+ font-size: 80%;
+}
+</STYLE>
+</head><body>
+
+<p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
+<p class="level0">curl_strequal, curl_strnequal - case insensitive string comparisons <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><span Class="bold">#include &lt;curl/curl.h&gt;</span>
+<p class="level0"><span Class="bold">int curl_strequal(char * str1 , char * str2 );</span>
+<p class="level0"><span Class="bold">int curl_strenqual(char * str1 , char * str2 , size_t len );</span> <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">The <span Class="bold">curl_strequal()</span> function compares the two strings <span Class="emphasis">str1</span> and <span Class="emphasis">str2</span>, ignoring the case of the characters. It returns a non-zero (TRUE) integer if the strings are identical.
+<p class="level0">The <span Class="bold">curl_strnequal()</span> function is similar, except it only compares the first <span Class="emphasis">len</span> characters of <span Class="emphasis">str1</span>.
+<p class="level0">These functions are provided by libcurl to enable applications to compare strings in a truly portable manner. There are no standard portable case insensitive string comparison functions. These two work on all platforms. <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">These functions will be removed from the public libcurl API in a near future. They will instead be made "available" by source code access only, and then as curlx_strequal() and curlx_strenqual(). <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Non-zero if the strings are identical. Zero if they're not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><span Class="manpage">strcmp (3)</span> <span Class="manpage"> strcasecmp (3)</span> <p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_strequal.pdf b/docs/libcurl/curl_strequal.pdf
new file mode 100644
index 0000000..e48fc08
--- /dev/null
+++ b/docs/libcurl/curl_strequal.pdf
Binary files differ
diff --git a/docs/libcurl/curl_unescape.3 b/docs/libcurl/curl_unescape.3
new file mode 100644
index 0000000..9bb470f
--- /dev/null
+++ b/docs/libcurl/curl_unescape.3
@@ -0,0 +1,30 @@
+.\" You can view this file with:
+.\" nroff -man [file]
+.\"
+.TH curl_unescape 3 "22 March 2001" "libcurl 7.7" "libcurl Manual"
+.SH NAME
+curl_unescape - URL decodes the given string
+.SH SYNOPSIS
+.B #include <curl/curl.h>
+.sp
+.BI "char *curl_unescape( char *" url ", int "length " );"
+.ad
+.SH DESCRIPTION
+Obsolete function. Use \fIcurl_easy_unescape(3)\fP instead!
+
+This function will convert the given URL encoded input string to a "plain
+string" and return that as a new allocated string. All input characters that
+are URL encoded (%XX where XX is a two-digit hexadecimal number) will be
+converted to their plain text versions.
+
+If the 'length' argument is set to 0, curl_unescape() will use strlen() on the
+input 'url' string to find out the size.
+
+You must curl_free() the returned string when you're done with it.
+.SH AVAILABILITY
+Since 7.15.4, \fIcurl_easy_unescape(3)\fP should be used. This function will
+be removed in a future release.
+.SH RETURN VALUE
+A pointer to a zero terminated string or NULL if it failed.
+.SH "SEE ALSO"
+.I curl_easy_escape(3), curl_easy_unescape(3), curl_free(3), RFC 2396
diff --git a/docs/libcurl/curl_unescape.html b/docs/libcurl/curl_unescape.html
new file mode 100644
index 0000000..5e34606
--- /dev/null
+++ b/docs/libcurl/curl_unescape.html
@@ -0,0 +1,59 @@
+<html><head>
+<title>curl_unescape man page</title>
+<meta name="generator" content="roffit 0.7">
+<STYLE type="text/css">
+P.level0 {
+ padding-left: 2em;
+}
+
+P.level1 {
+ padding-left: 4em;
+}
+
+P.level2 {
+ padding-left: 6em;
+}
+
+span.emphasis {
+ font-style: italic;
+}
+
+span.bold {
+ font-weight: bold;
+}
+
+span.manpage {
+ font-weight: bold;
+}
+
+h2.nroffsh {
+ background-color: #e0e0e0;
+}
+
+span.nroffip {
+ font-weight: bold;
+ font-size: 120%;
+ font-family: monospace;
+}
+
+p.roffit {
+ text-align: center;
+ font-size: 80%;
+}
+</STYLE>
+</head><body>
+
+<p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
+<p class="level0">curl_unescape - URL decodes the given string <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><span Class="bold">#include &lt;curl/curl.h&gt;</span>
+<p class="level0"><span Class="bold">char *curl_unescape( char * url , int length );</span>
+<p class="level0"><a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">Obsolete function. Use <a class="emphasis" href="./curl_easy_unescape.html">curl_easy_unescape(3)</a> instead!
+<p class="level0">This function will convert the given URL encoded input string to a "plain string" and return that as a new allocated string. All input characters that are URL encoded (%XX where XX is a two-digit hexadecimal number) will be converted to their plain text versions.
+<p class="level0">If the 'length' argument is set to 0, curl_unescape() will use strlen() on the input 'url' string to find out the size.
+<p class="level0">You must curl_free() the returned string when you're done with it. <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Since 7.15.4, <a class="emphasis" href="./curl_easy_unescape.html">curl_easy_unescape(3)</a> should be used. This function will be removed in a future release. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">A pointer to a zero terminated string or NULL if it failed. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><span Class="emphasis">curl_easy_escape(3), curl_easy_unescape(3), curl_free(3), RFC 2396</span> <p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_unescape.pdf b/docs/libcurl/curl_unescape.pdf
new file mode 100644
index 0000000..ebce79b
--- /dev/null
+++ b/docs/libcurl/curl_unescape.pdf
Binary files differ
diff --git a/docs/libcurl/curl_version.3 b/docs/libcurl/curl_version.3
new file mode 100644
index 0000000..24793ca
--- /dev/null
+++ b/docs/libcurl/curl_version.3
@@ -0,0 +1,18 @@
+.\" You can view this file with:
+.\" nroff -man [file]
+.\"
+.TH curl_version 3 "5 March 2001" "libcurl 7.0" "libcurl Manual"
+.SH NAME
+curl_version - returns the libcurl version string
+.SH SYNOPSIS
+.B #include <curl/curl.h>
+.sp
+.BI "char *curl_version( );"
+.ad
+.SH DESCRIPTION
+Returns a human readable string with the version number of libcurl and some of
+its important components (like OpenSSL version).
+.SH RETURN VALUE
+A pointer to a zero terminated string.
+.SH "SEE ALSO"
+.BR curl_version_info "(3)"
diff --git a/docs/libcurl/curl_version.html b/docs/libcurl/curl_version.html
new file mode 100644
index 0000000..d2f1032
--- /dev/null
+++ b/docs/libcurl/curl_version.html
@@ -0,0 +1,55 @@
+<html><head>
+<title>curl_version man page</title>
+<meta name="generator" content="roffit 0.7">
+<STYLE type="text/css">
+P.level0 {
+ padding-left: 2em;
+}
+
+P.level1 {
+ padding-left: 4em;
+}
+
+P.level2 {
+ padding-left: 6em;
+}
+
+span.emphasis {
+ font-style: italic;
+}
+
+span.bold {
+ font-weight: bold;
+}
+
+span.manpage {
+ font-weight: bold;
+}
+
+h2.nroffsh {
+ background-color: #e0e0e0;
+}
+
+span.nroffip {
+ font-weight: bold;
+ font-size: 120%;
+ font-family: monospace;
+}
+
+p.roffit {
+ text-align: center;
+ font-size: 80%;
+}
+</STYLE>
+</head><body>
+
+<p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
+<p class="level0">curl_version - returns the libcurl version string <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><span Class="bold">#include &lt;curl/curl.h&gt;</span>
+<p class="level0"><span Class="bold">char *curl_version( );</span>
+<p class="level0"><a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">Returns a human readable string with the version number of libcurl and some of its important components (like OpenSSL version). <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">A pointer to a zero terminated string. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><a class="manpage" href="./curl_version_info.html">curl_version_info (3)</a> <p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_version.pdf b/docs/libcurl/curl_version.pdf
new file mode 100644
index 0000000..ba9bc8c
--- /dev/null
+++ b/docs/libcurl/curl_version.pdf
Binary files differ
diff --git a/docs/libcurl/curl_version_info.3 b/docs/libcurl/curl_version_info.3
new file mode 100644
index 0000000..4481830
--- /dev/null
+++ b/docs/libcurl/curl_version_info.3
@@ -0,0 +1,149 @@
+.\" **************************************************************************
+.\" * _ _ ____ _
+.\" * Project ___| | | | _ \| |
+.\" * / __| | | | |_) | |
+.\" * | (__| |_| | _ <| |___
+.\" * \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" *
+.\" * This software is licensed as described in the file COPYING, which
+.\" * you should have received as part of this distribution. The terms
+.\" * are also available at http://curl.haxx.se/docs/copyright.html.
+.\" *
+.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+.\" * copies of the Software, and permit persons to whom the Software is
+.\" * furnished to do so, under the terms of the COPYING file.
+.\" *
+.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+.\" * KIND, either express or implied.
+.\" *
+.\" **************************************************************************
+.\"
+.TH curl_version_info 3 "10 June 2009" "libcurl 7.19.6" "libcurl Manual"
+.SH NAME
+curl_version_info - returns run-time libcurl version info
+.SH SYNOPSIS
+.B #include <curl/curl.h>
+.sp
+.BI "curl_version_info_data *curl_version_info( CURLversion "type ");"
+.ad
+.SH DESCRIPTION
+Returns a pointer to a filled in struct with information about various
+run-time features in libcurl. \fItype\fP should be set to the version of this
+functionality by the time you write your program. This way, libcurl will
+always return a proper struct that your program understands, while programs in
+the future might get a different struct. CURLVERSION_NOW will be the most
+recent one for the library you have installed:
+
+ data = curl_version_info(CURLVERSION_NOW);
+
+Applications should use this information to judge if things are possible to do
+or not, instead of using compile-time checks, as dynamic/DLL libraries can be
+changed independent of applications.
+
+The curl_version_info_data struct looks like this
+
+.nf
+typedef struct {
+ CURLversion age; /* see description below */
+
+ /* when 'age' is 0 or higher, the members below also exist: */
+ const char *version; /* human readable string */
+ unsigned int version_num; /* numeric representation */
+ const char *host; /* human readable string */
+ int features; /* bitmask, see below */
+ char *ssl_version; /* human readable string */
+ long ssl_version_num; /* not used, always zero */
+ const char *libz_version; /* human readable string */
+ const char **protocols; /* list of protocols */
+
+ /* when 'age' is 1 or higher, the members below also exist: */
+ const char *ares; /* human readable string */
+ int ares_num; /* number */
+
+ /* when 'age' is 2 or higher, the member below also exists: */
+ const char *libidn; /* human readable string */
+
+ /* when 'age' is 3 or higher, the members below also exist: */
+ int iconv_ver_num; /* '_libiconv_version' if iconv support enabled */
+
+ const char *libssh_version; /* human readable string */
+
+} curl_version_info_data;
+.fi
+
+\fIage\fP describes what the age of this struct is. The number depends on how
+new the libcurl you're using is. You are however guaranteed to get a struct that you
+have a matching struct for in the header, as you tell libcurl your "age" with
+the input argument.
+
+\fIversion\fP is just an ascii string for the libcurl version.
+
+\fIversion_num\fP is a 24 bit number created like this: <8 bits major number>
+| <8 bits minor number> | <8 bits patch number>. Version 7.9.8 is therefore
+returned as 0x070908.
+
+\fIhost\fP is an ascii string showing what host information that this libcurl
+was built for. As discovered by a configure script or set by the build
+environment.
+
+\fIfeatures\fP can have none, one or more bits set, and the currently defined
+bits are:
+.RS
+.IP CURL_VERSION_IPV6
+supports IPv6
+.IP CURL_VERSION_KERBEROS4
+supports kerberos4 (when using FTP)
+.IP CURL_VERSION_SSL
+supports SSL (HTTPS/FTPS) (Added in 7.10)
+.IP CURL_VERSION_LIBZ
+supports HTTP deflate using libz (Added in 7.10)
+.IP CURL_VERSION_NTLM
+supports HTTP NTLM (added in 7.10.6)
+.IP CURL_VERSION_GSSNEGOTIATE
+supports HTTP GSS-Negotiate (added in 7.10.6)
+.IP CURL_VERSION_DEBUG
+libcurl was built with debug capabilities (added in 7.10.6)
+.IP CURL_VERSION_CURLDEBUG
+libcurl was built with memory tracking debug capabilities. This is mainly of
+interest for libcurl hackers. (added in 7.19.6)
+.IP CURL_VERSION_ASYNCHDNS
+libcurl was built with support for asynchronous name lookups, which allows
+more exact timeouts (even on Windows) and less blocking when using the multi
+interface. (added in 7.10.7)
+.IP CURL_VERSION_SPNEGO
+libcurl was built with support for SPNEGO authentication (Simple and Protected
+GSS-API Negotiation Mechanism, defined in RFC 2478.) (added in 7.10.8)
+.IP CURL_VERSION_LARGEFILE
+libcurl was built with support for large files. (Added in 7.11.1)
+.IP CURL_VERSION_IDN
+libcurl was built with support for IDNA, domain names with international
+letters. (Added in 7.12.0)
+.IP CURL_VERSION_SSPI
+libcurl was built with support for SSPI. This is only available on Windows and
+makes libcurl use Windows-provided functions for NTLM authentication. It also
+allows libcurl to use the current user and the current user's password without
+the app having to pass them on. (Added in 7.13.2)
+.IP CURL_VERSION_CONV
+libcurl was built with support for character conversions, as provided by the
+CURLOPT_CONV_* callbacks. (Added in 7.15.4)
+.RE
+\fIssl_version\fP is an ASCII string for the OpenSSL version used. If libcurl
+has no SSL support, this is NULL.
+
+\fIssl_version_num\fP is the numerical OpenSSL version value as defined by the
+OpenSSL project. If libcurl has no SSL support, this is 0.
+
+\fIlibz_version\fP is an ASCII string (there is no numerical version). If
+libcurl has no libz support, this is NULL.
+
+\fIprotocols\fP is a pointer to an array of char * pointers, containing the
+names protocols that libcurl supports (using lowercase letters). The protocol
+names are the same as would be used in URLs. The array is terminated by a NULL
+entry.
+.SH RETURN VALUE
+A pointer to a curl_version_info_data struct.
+.SH "SEE ALSO"
+\fIcurl_version(3)\fP
+
diff --git a/docs/libcurl/curl_version_info.html b/docs/libcurl/curl_version_info.html
new file mode 100644
index 0000000..b6602bf
--- /dev/null
+++ b/docs/libcurl/curl_version_info.html
@@ -0,0 +1,121 @@
+<html><head>
+<title>curl_version_info man page</title>
+<meta name="generator" content="roffit 0.7">
+<STYLE type="text/css">
+P.level0 {
+ padding-left: 2em;
+}
+
+P.level1 {
+ padding-left: 4em;
+}
+
+P.level2 {
+ padding-left: 6em;
+}
+
+span.emphasis {
+ font-style: italic;
+}
+
+span.bold {
+ font-weight: bold;
+}
+
+span.manpage {
+ font-weight: bold;
+}
+
+h2.nroffsh {
+ background-color: #e0e0e0;
+}
+
+span.nroffip {
+ font-weight: bold;
+ font-size: 120%;
+ font-family: monospace;
+}
+
+p.roffit {
+ text-align: center;
+ font-size: 80%;
+}
+</STYLE>
+</head><body>
+
+<p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
+<p class="level0">curl_version_info - returns run-time libcurl version info <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><span Class="bold">#include &lt;curl/curl.h&gt;</span>
+<p class="level0"><span Class="bold">curl_version_info_data *curl_version_info( CURLversion type );</span>
+<p class="level0"><a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">Returns a pointer to a filled in struct with information about various run-time features in libcurl. <span Class="emphasis">type</span> should be set to the version of this functionality by the time you write your program. This way, libcurl will always return a proper struct that your program understands, while programs in the future might get a different struct. CURLVERSION_NOW will be the most recent one for the library you have installed:
+<p class="level0">&nbsp; data = curl_version_info(CURLVERSION_NOW);
+<p class="level0">Applications should use this information to judge if things are possible to do or not, instead of using compile-time checks, as dynamic/DLL libraries can be changed independent of applications.
+<p class="level0">The curl_version_info_data struct looks like this
+<p class="level0"><pre>
+<p class="level0">typedef struct {
+ &nbsp; CURLversion age; /* see description below */
+ <p class="level0">&nbsp; /* when 'age' is 0 or higher, the members below also exist: */
+ &nbsp; const char *version; /* human readable string */
+ &nbsp; unsigned int version_num; /* numeric representation */
+ &nbsp; const char *host; /* human readable string */
+ &nbsp; int features; /* bitmask, see below */
+ &nbsp; char *ssl_version; /* human readable string */
+ &nbsp; long ssl_version_num; /* not used, always zero */
+ &nbsp; const char *libz_version; /* human readable string */
+ &nbsp; const char **protocols; /* list of protocols */
+ <p class="level0">&nbsp; /* when 'age' is 1 or higher, the members below also exist: */
+ &nbsp; const char *ares; /* human readable string */
+ &nbsp; int ares_num; /* number */
+ <p class="level0">&nbsp; /* when 'age' is 2 or higher, the member below also exists: */
+ &nbsp; const char *libidn; /* human readable string */
+ <p class="level0">&nbsp; /* when 'age' is 3 or higher, the members below also exist: */
+ &nbsp; int iconv_ver_num; /* '_libiconv_version' if iconv support enabled */
+ <p class="level0">&nbsp; const char *libssh_version; /* human readable string */
+ <p class="level0">} curl_version_info_data;
+ </pre>
+
+<p class="level0">
+<p class="level0"><span Class="emphasis">age</span> describes what the age of this struct is. The number depends on how new the libcurl you're using is. You are however guaranteed to get a struct that you have a matching struct for in the header, as you tell libcurl your "age" with the input argument.
+<p class="level0"><span Class="emphasis">version</span> is just an ascii string for the libcurl version.
+<p class="level0"><span Class="emphasis">version_num</span> is a 24 bit number created like this: &lt;8 bits major number&gt; | &lt;8 bits minor number&gt; | &lt;8 bits patch number&gt;. Version 7.9.8 is therefore returned as 0x070908.
+<p class="level0"><span Class="emphasis">host</span> is an ascii string showing what host information that this libcurl was built for. As discovered by a configure script or set by the build environment.
+<p class="level0"><span Class="emphasis">features</span> can have none, one or more bits set, and the currently defined bits are:
+<p class="level1">
+<p class="level0"><a name="CURLVERSIONIPV6"></a><span class="nroffip">CURL_VERSION_IPV6</span>
+<p class="level1">supports IPv6
+<p class="level0"><a name="CURLVERSIONKERBEROS4"></a><span class="nroffip">CURL_VERSION_KERBEROS4</span>
+<p class="level1">supports kerberos4 (when using FTP)
+<p class="level0"><a name="CURLVERSIONSSL"></a><span class="nroffip">CURL_VERSION_SSL</span>
+<p class="level1">supports SSL (HTTPS/FTPS) (Added in 7.10)
+<p class="level0"><a name="CURLVERSIONLIBZ"></a><span class="nroffip">CURL_VERSION_LIBZ</span>
+<p class="level1">supports HTTP deflate using libz (Added in 7.10)
+<p class="level0"><a name="CURLVERSIONNTLM"></a><span class="nroffip">CURL_VERSION_NTLM</span>
+<p class="level1">supports HTTP NTLM (added in 7.10.6)
+<p class="level0"><a name="CURLVERSIONGSSNEGOTIATE"></a><span class="nroffip">CURL_VERSION_GSSNEGOTIATE</span>
+<p class="level1">supports HTTP GSS-Negotiate (added in 7.10.6)
+<p class="level0"><a name="CURLVERSIONDEBUG"></a><span class="nroffip">CURL_VERSION_DEBUG</span>
+<p class="level1">libcurl was built with debug capabilities (added in 7.10.6)
+<p class="level0"><a name="CURLVERSIONCURLDEBUG"></a><span class="nroffip">CURL_VERSION_CURLDEBUG</span>
+<p class="level1">libcurl was built with memory tracking debug capabilities. This is mainly of interest for libcurl hackers. (added in 7.19.6)
+<p class="level0"><a name="CURLVERSIONASYNCHDNS"></a><span class="nroffip">CURL_VERSION_ASYNCHDNS</span>
+<p class="level1">libcurl was built with support for asynchronous name lookups, which allows more exact timeouts (even on Windows) and less blocking when using the multi interface. (added in 7.10.7)
+<p class="level0"><a name="CURLVERSIONSPNEGO"></a><span class="nroffip">CURL_VERSION_SPNEGO</span>
+<p class="level1">libcurl was built with support for SPNEGO authentication (Simple and Protected GSS-API Negotiation Mechanism, defined in RFC 2478.) (added in 7.10.8)
+<p class="level0"><a name="CURLVERSIONLARGEFILE"></a><span class="nroffip">CURL_VERSION_LARGEFILE</span>
+<p class="level1">libcurl was built with support for large files. (Added in 7.11.1)
+<p class="level0"><a name="CURLVERSIONIDN"></a><span class="nroffip">CURL_VERSION_IDN</span>
+<p class="level1">libcurl was built with support for IDNA, domain names with international letters. (Added in 7.12.0)
+<p class="level0"><a name="CURLVERSIONSSPI"></a><span class="nroffip">CURL_VERSION_SSPI</span>
+<p class="level1">libcurl was built with support for SSPI. This is only available on Windows and makes libcurl use Windows-provided functions for NTLM authentication. It also allows libcurl to use the current user and the current user's password without the app having to pass them on. (Added in 7.13.2)
+<p class="level0"><a name="CURLVERSIONCONV"></a><span class="nroffip">CURL_VERSION_CONV</span>
+<p class="level1">libcurl was built with support for character conversions, as provided by the CURLOPT_CONV_* callbacks. (Added in 7.15.4)
+<p class="level0"><span Class="emphasis">ssl_version</span> is an ASCII string for the OpenSSL version used. If libcurl has no SSL support, this is NULL.
+<p class="level0"><span Class="emphasis">ssl_version_num</span> is the numerical OpenSSL version value as defined by the OpenSSL project. If libcurl has no SSL support, this is 0.
+<p class="level0"><span Class="emphasis">libz_version</span> is an ASCII string (there is no numerical version). If libcurl has no libz support, this is NULL.
+<p class="level0"><span Class="emphasis">protocols</span> is a pointer to an array of char * pointers, containing the names protocols that libcurl supports (using lowercase letters). The protocol names are the same as would be used in URLs. The array is terminated by a NULL entry. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">A pointer to a curl_version_info_data struct. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><a class="emphasis" href="./curl_version.html">curl_version(3)</a>
+<p class="level0"><p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/curl_version_info.pdf b/docs/libcurl/curl_version_info.pdf
new file mode 100644
index 0000000..356a0b4
--- /dev/null
+++ b/docs/libcurl/curl_version_info.pdf
Binary files differ
diff --git a/docs/libcurl/index.html b/docs/libcurl/index.html
new file mode 100644
index 0000000..287a2dd
--- /dev/null
+++ b/docs/libcurl/index.html
@@ -0,0 +1,61 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Index to libcurl documentation</title>
+</head>
+
+<body>
+<h1 align="center">Index to libcurl documentation</h1>
+
+<h2>Programs</h2>
+<p><a href="../index.html">curl and tools</a>
+
+<h2>Overviews</h2>
+<A HREF="libcurl.html">libcurl</A>
+<br><a href="libcurl-easy.html">libcurl-easy</a>
+<br><a href="libcurl-multi.html">libcurl-multi</a>
+<br><a href="libcurl-share.html">libcurl-share</a>
+<br><a href="libcurl-errors.html">libcurl-errors</a>
+<br><a href="libcurl-tutorial.html">libcurl-tutorial</a>
+
+<H2>Library Functions (A-Z)</H2>
+<a href="curl_easy_cleanup.html">curl_easy_cleanup</A>
+<br><a href="curl_easy_duphandle.html">curl_easy_duphandle</A>
+<br><a href="curl_easy_getinfo.html">curl_easy_getinfo</A>
+<br><a href="curl_easy_init.html">curl_easy_init</A>
+<br><a href="curl_easy_perform.html">curl_easy_perform</A>
+<br><a href="curl_easy_recv.html">curl_easy_recv</A>
+<br><a href="curl_easy_reset.html">curl_easy_reset</A>
+<br><a href="curl_easy_send.html">curl_easy_send</A>
+<br><a href="curl_easy_setopt.html">curl_easy_setopt</A>
+<br><a href="curl_easy_strerror.html">curl_easy_strerror</A>
+<br><a href="curl_escape.html">curl_escape</A>
+<br><a href="curl_formadd.html">curl_formadd</A>
+<br><a href="curl_formfree.html">curl_formfree</A>
+<br><a href="curl_free.html">curl_free</A>
+<br><a href="curl_getdate.html">curl_getdate</A>
+<br><a href="curl_getenv.html">curl_getenv</A>
+<br><a href="curl_global_cleanup.html">curl_global_cleanup</A>
+<br><a href="curl_global_init.html">curl_global_init</A>
+<br><a href="curl_global_init_mem.html">curl_global_init_mem</A>
+<br><a href="curl_mprintf.html">curl_mprintf</A>
+<br><a href="curl_multi_add_handle.html">curl_multi_add_handle</a>
+<br><a href="curl_multi_cleanup.html">curl_multi_cleanup</a>
+<br><a href="curl_multi_fdset.html">curl_multi_fdset</a>
+<br><a href="curl_multi_info_read.html">curl_multi_info_read</a>
+<br><a href="curl_multi_init.html">curl_multi_init</a>
+<br><a href="curl_multi_perform.html">curl_multi_perform</a>
+<br><a href="curl_multi_remove_handle.html">curl_multi_remove_handle</a>
+<br><a href="curl_multi_strerror.html">curl_multi_strerror.html</a>
+<br><a href="curl_share_cleanup.html">curl_share_cleanup</A>
+<br><a href="curl_share_init.html">curl_share_init</A>
+<br><a href="curl_share_setopt.html">curl_share_setopt</A>
+<br><a href="curl_share_strerror.html">curl_share_strerror.html</a>
+<br><a href="curl_slist_append.html">curl_slist_append</A>
+<br><a href="curl_slist_free_all.html">curl_slist_free_all</A>
+<br><a href="curl_strequal.html">curl_strequal and curl_strnequal</A>
+<br><a href="curl_unescape.html">curl_unescape</A>
+<br><a href="curl_version.html">curl_version</A>
+<br><a href="curl_version_info.html">curl_version_info</A>
+
+</body></html>
diff --git a/docs/libcurl/libcurl-easy.3 b/docs/libcurl/libcurl-easy.3
new file mode 100644
index 0000000..803e542
--- /dev/null
+++ b/docs/libcurl/libcurl-easy.3
@@ -0,0 +1,27 @@
+.\" You can view this file with:
+.\" nroff -man [file]
+.\"
+.TH libcurl 3 "12 Aug 2003" "libcurl 7.10.7" "libcurl easy interface"
+.SH NAME
+libcurl-easy \- easy interface overview
+.SH DESCRIPTION
+When using libcurl's "easy" interface you init your session and get a handle
+(often referred to as an "easy handle"), which you use as input to the easy
+interface functions you use. Use \fIcurl_easy_init(3)\fP to get the handle.
+
+You continue by setting all the options you want in the upcoming transfer, the
+most important among them is the URL itself (you can't transfer anything
+without a specified URL as you may have figured out yourself). You might want
+to set some callbacks as well that will be called from the library when data
+is available etc. \fIcurl_easy_setopt(3)\fP is used for all this.
+
+When all is setup, you tell libcurl to perform the transfer using
+\fIcurl_easy_perform(3)\fP. It will then do the entire operation and won't
+return until it is done (successfully or not).
+
+After the transfer has been made, you can set new options and make another
+transfer, or if you're done, cleanup the session by calling
+\fIcurl_easy_cleanup(3)\fP. If you want persistent connections, you don't
+cleanup immediately, but instead run ahead and perform other transfers using
+the same easy handle.
+
diff --git a/docs/libcurl/libcurl-easy.html b/docs/libcurl/libcurl-easy.html
new file mode 100644
index 0000000..8c9f5e5
--- /dev/null
+++ b/docs/libcurl/libcurl-easy.html
@@ -0,0 +1,54 @@
+<html><head>
+<title>libcurl man page</title>
+<meta name="generator" content="roffit 0.7">
+<STYLE type="text/css">
+P.level0 {
+ padding-left: 2em;
+}
+
+P.level1 {
+ padding-left: 4em;
+}
+
+P.level2 {
+ padding-left: 6em;
+}
+
+span.emphasis {
+ font-style: italic;
+}
+
+span.bold {
+ font-weight: bold;
+}
+
+span.manpage {
+ font-weight: bold;
+}
+
+h2.nroffsh {
+ background-color: #e0e0e0;
+}
+
+span.nroffip {
+ font-weight: bold;
+ font-size: 120%;
+ font-family: monospace;
+}
+
+p.roffit {
+ text-align: center;
+ font-size: 80%;
+}
+</STYLE>
+</head><body>
+
+<p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
+<p class="level0">libcurl-easy - easy interface overview <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">When using libcurl's "easy" interface you init your session and get a handle (often referred to as an "easy handle"), which you use as input to the easy interface functions you use. Use <a class="emphasis" href="./curl_easy_init.html">curl_easy_init(3)</a> to get the handle.
+<p class="level0">You continue by setting all the options you want in the upcoming transfer, the most important among them is the URL itself (you can't transfer anything without a specified URL as you may have figured out yourself). You might want to set some callbacks as well that will be called from the library when data is available etc. <a class="emphasis" href="./curl_easy_setopt.html">curl_easy_setopt(3)</a> is used for all this.
+<p class="level0">When all is setup, you tell libcurl to perform the transfer using <a class="emphasis" href="./curl_easy_perform.html">curl_easy_perform(3)</a>. It will then do the entire operation and won't return until it is done (successfully or not).
+<p class="level0">After the transfer has been made, you can set new options and make another transfer, or if you're done, cleanup the session by calling <a class="emphasis" href="./curl_easy_cleanup.html">curl_easy_cleanup(3)</a>. If you want persistent connections, you don't cleanup immediately, but instead run ahead and perform other transfers using the same easy handle.
+<p class="level0"><p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/libcurl-easy.pdf b/docs/libcurl/libcurl-easy.pdf
new file mode 100644
index 0000000..b26357e
--- /dev/null
+++ b/docs/libcurl/libcurl-easy.pdf
Binary files differ
diff --git a/docs/libcurl/libcurl-errors.3 b/docs/libcurl/libcurl-errors.3
new file mode 100644
index 0000000..c3c854e
--- /dev/null
+++ b/docs/libcurl/libcurl-errors.3
@@ -0,0 +1,271 @@
+.\" **************************************************************************
+.\" * _ _ ____ _
+.\" * Project ___| | | | _ \| |
+.\" * / __| | | | |_) | |
+.\" * | (__| |_| | _ <| |___
+.\" * \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" *
+.\" * This software is licensed as described in the file COPYING, which
+.\" * you should have received as part of this distribution. The terms
+.\" * are also available at http://curl.haxx.se/docs/copyright.html.
+.\" *
+.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+.\" * copies of the Software, and permit persons to whom the Software is
+.\" * furnished to do so, under the terms of the COPYING file.
+.\" *
+.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+.\" * KIND, either express or implied.
+.\" *
+.\" **************************************************************************
+.\"
+.TH libcurl-errors 3 "1 Jan 2010" "libcurl 7.20.0" "libcurl errors"
+.SH NAME
+libcurl-errors \- error codes in libcurl
+.SH DESCRIPTION
+This man page includes most, if not all, available error codes in libcurl.
+Why they occur and possibly what you can do to fix the problem are also included.
+.SH "CURLcode"
+Almost all "easy" interface functions return a CURLcode error code. No matter
+what, using the \fIcurl_easy_setopt(3)\fP option \fICURLOPT_ERRORBUFFER\fP is
+a good idea as it will give you a human readable error string that may offer
+more details about the cause of the error than just the error code.
+\fIcurl_easy_strerror(3)\fP can be called to get an error string from a
+given CURLcode number.
+
+CURLcode is one of the following:
+.IP "CURLE_OK (0)"
+All fine. Proceed as usual.
+.IP "CURLE_UNSUPPORTED_PROTOCOL (1)"
+The URL you passed to libcurl used a protocol that this libcurl does not
+support. The support might be a compile-time option that you didn't use, it
+can be a misspelled protocol string or just a protocol libcurl has no code
+for.
+.IP "CURLE_FAILED_INIT (2)"
+Very early initialization code failed. This is likely to be an internal error
+or problem.
+.IP "CURLE_URL_MALFORMAT (3)"
+The URL was not properly formatted.
+.IP "CURLE_COULDNT_RESOLVE_PROXY (5)"
+Couldn't resolve proxy. The given proxy host could not be resolved.
+.IP "CURLE_COULDNT_RESOLVE_HOST (6)"
+Couldn't resolve host. The given remote host was not resolved.
+.IP "CURLE_COULDNT_CONNECT (7)"
+Failed to connect() to host or proxy.
+.IP "CURLE_FTP_WEIRD_SERVER_REPLY (8)"
+After connecting to a FTP server, libcurl expects to get a certain reply
+back. This error code implies that it got a strange or bad reply. The given
+remote server is probably not an OK FTP server.
+.IP "CURLE_REMOTE_ACCESS_DENIED (9)"
+We were denied access to the resource given in the URL. For FTP, this occurs
+while trying to change to the remote directory.
+.IP "CURLE_FTP_WEIRD_PASS_REPLY (11)"
+After having sent the FTP password to the server, libcurl expects a proper
+reply. This error code indicates that an unexpected code was returned.
+.IP "CURLE_FTP_WEIRD_PASV_REPLY (13)"
+libcurl failed to get a sensible result back from the server as a response to
+either a PASV or a EPSV command. The server is flawed.
+.IP "CURLE_FTP_WEIRD_227_FORMAT (14)"
+FTP servers return a 227-line as a response to a PASV command. If libcurl
+fails to parse that line, this return code is passed back.
+.IP "CURLE_FTP_PRET_FAILED (84)"
+The FTP server does not understand the PRET command at all or does not support
+the given argument. Be careful when using \fICURLOPT_CUSTOMREQUEST\fP, a
+custom LIST command will be sent with PRET CMD before PASV as well. (Added in
+7.20.0)
+.IP "CURLE_FTP_CANT_GET_HOST (15)"
+An internal failure to lookup the host used for the new connection.
+.IP "CURLE_FTP_COULDNT_SET_TYPE (17)"
+Received an error when trying to set the transfer mode to binary or ASCII.
+.IP "CURLE_PARTIAL_FILE (18)"
+A file transfer was shorter or larger than expected. This happens when the
+server first reports an expected transfer size, and then delivers data that
+doesn't match the previously given size.
+.IP "CURLE_FTP_COULDNT_RETR_FILE (19)"
+This was either a weird reply to a 'RETR' command or a zero byte transfer
+complete.
+.IP "CURLE_QUOTE_ERROR (21)"
+When sending custom "QUOTE" commands to the remote server, one of the commands
+returned an error code that was 400 or higher (for FTP) or otherwise
+indicated unsuccessful completion of the command.
+.IP "CURLE_HTTP_RETURNED_ERROR (22)"
+This is returned if CURLOPT_FAILONERROR is set TRUE and the HTTP server
+returns an error code that is >= 400.
+.IP "CURLE_WRITE_ERROR (23)"
+An error occurred when writing received data to a local file, or an error was
+returned to libcurl from a write callback.
+.IP "CURLE_UPLOAD_FAILED (25)"
+Failed starting the upload. For FTP, the server typically denied the STOR
+command. The error buffer usually contains the server's explanation for this.
+.IP "CURLE_READ_ERROR (26)"
+There was a problem reading a local file or an error returned by the read
+callback.
+.IP "CURLE_OUT_OF_MEMORY (27)"
+A memory allocation request failed. This is serious badness and
+things are severely screwed up if this ever occurs.
+.IP "CURLE_OPERATION_TIMEDOUT (28)"
+Operation timeout. The specified time-out period was reached according to the
+conditions.
+.IP "CURLE_FTP_PORT_FAILED (30)"
+The FTP PORT command returned error. This mostly happens when you haven't
+specified a good enough address for libcurl to use. See \fICURLOPT_FTPPORT\fP.
+.IP "CURLE_FTP_COULDNT_USE_REST (31)"
+The FTP REST command returned error. This should never happen if the server is
+sane.
+.IP "CURLE_RANGE_ERROR (33)"
+The server does not support or accept range requests.
+.IP "CURLE_HTTP_POST_ERROR (34)"
+This is an odd error that mainly occurs due to internal confusion.
+.IP "CURLE_SSL_CONNECT_ERROR (35)"
+A problem occurred somewhere in the SSL/TLS handshake. You really want the
+error buffer and read the message there as it pinpoints the problem slightly
+more. Could be certificates (file formats, paths, permissions), passwords, and
+others.
+.IP "CURLE_BAD_DOWNLOAD_RESUME (36)"
+The download could not be resumed because the specified offset was out of the
+file boundary.
+.IP "CURLE_FILE_COULDNT_READ_FILE (37)"
+A file given with FILE:// couldn't be opened. Most likely because the file
+path doesn't identify an existing file. Did you check file permissions?
+.IP "CURLE_LDAP_CANNOT_BIND (38)"
+LDAP cannot bind. LDAP bind operation failed.
+.IP "CURLE_LDAP_SEARCH_FAILED (39)"
+LDAP search failed.
+.IP "CURLE_FUNCTION_NOT_FOUND (41)"
+Function not found. A required zlib function was not found.
+.IP "CURLE_ABORTED_BY_CALLBACK (42)"
+Aborted by callback. A callback returned "abort" to libcurl.
+.IP "CURLE_BAD_FUNCTION_ARGUMENT (43)"
+Internal error. A function was called with a bad parameter.
+.IP "CURLE_INTERFACE_FAILED (45)"
+Interface error. A specified outgoing interface could not be used. Set which
+interface to use for outgoing connections' source IP address with
+CURLOPT_INTERFACE.
+.IP "CURLE_TOO_MANY_REDIRECTS (47)"
+Too many redirects. When following redirects, libcurl hit the maximum amount.
+Set your limit with CURLOPT_MAXREDIRS.
+.IP "CURLE_UNKNOWN_TELNET_OPTION (48)"
+An option set with CURLOPT_TELNETOPTIONS was not recognized/known. Refer to
+the appropriate documentation.
+.IP "CURLE_TELNET_OPTION_SYNTAX (49)"
+A telnet option string was Illegally formatted.
+.IP "CURLE_PEER_FAILED_VERIFICATION (51)"
+The remote server's SSL certificate or SSH md5 fingerprint was deemed not OK.
+.IP "CURLE_GOT_NOTHING (52)"
+Nothing was returned from the server, and under the circumstances, getting
+nothing is considered an error.
+.IP "CURLE_SSL_ENGINE_NOTFOUND (53)"
+The specified crypto engine wasn't found.
+.IP "CURLE_SSL_ENGINE_SETFAILED (54)"
+Failed setting the selected SSL crypto engine as default!
+.IP "CURLE_SEND_ERROR (55)"
+Failed sending network data.
+.IP "CURLE_RECV_ERROR (56)"
+Failure with receiving network data.
+.IP "CURLE_SSL_CERTPROBLEM (58)"
+problem with the local client certificate.
+.IP "CURLE_SSL_CIPHER (59)"
+Couldn't use specified cipher.
+.IP "CURLE_SSL_CACERT (60)"
+Peer certificate cannot be authenticated with known CA certificates.
+.IP "CURLE_BAD_CONTENT_ENCODING (61)"
+Unrecognized transfer encoding.
+.IP "CURLE_LDAP_INVALID_URL (62)"
+Invalid LDAP URL.
+.IP "CURLE_FILESIZE_EXCEEDED (63)"
+Maximum file size exceeded.
+.IP "CURLE_USE_SSL_FAILED (64)"
+Requested FTP SSL level failed.
+.IP "CURLE_SEND_FAIL_REWIND (65)"
+When doing a send operation curl had to rewind the data to retransmit, but the
+rewinding operation failed.
+.IP "CURLE_SSL_ENGINE_INITFAILED (66)"
+Initiating the SSL Engine failed.
+.IP "CURLE_LOGIN_DENIED (67)"
+The remote server denied curl to login (Added in 7.13.1)
+.IP "CURLE_TFTP_NOTFOUND (68)"
+File not found on TFTP server.
+.IP "CURLE_TFTP_PERM (69)"
+Permission problem on TFTP server.
+.IP "CURLE_REMOTE_DISK_FULL (70)"
+Out of disk space on the server.
+.IP "CURLE_TFTP_ILLEGAL (71)"
+Illegal TFTP operation.
+.IP "CURLE_TFTP_UNKNOWNID (72)"
+Unknown TFTP transfer ID.
+.IP "CURLE_REMOTE_FILE_EXISTS (73)"
+File already exists and will not be overwritten.
+.IP "CURLE_TFTP_NOSUCHUSER (74)"
+This error should never be returned by a properly functioning TFTP server.
+.IP "CURLE_CONV_FAILED (75)"
+Character conversion failed.
+.IP "CURLE_CONV_REQD (76)"
+Caller must register conversion callbacks.
+.IP "CURLE_SSL_CACERT_BADFILE (77)"
+Problem with reading the SSL CA cert (path? access rights?)
+.IP "CURLE_REMOTE_FILE_NOT_FOUND (78)"
+The resource referenced in the URL does not exist.
+.IP "CURLE_SSH (79)"
+An unspecified error occurred during the SSH session.
+.IP "CURLE_SSL_SHUTDOWN_FAILED (80)"
+Failed to shut down the SSL connection.
+.IP "CURLE_AGAIN (81)"
+Socket is not ready for send/recv wait till it's ready and try again. This
+return code is only returned from \fIcurl_easy_recv(3)\fP and
+\fIcurl_easy_send(3)\fP (Added in 7.18.2)
+.IP "CURLE_SSL_CRL_BADFILE (82)"
+Failed to load CRL file (Added in 7.19.0)
+.IP "CURLE_SSL_ISSUER_ERROR (83)"
+Issuer check failed (Added in 7.19.0)
+.IP "CURLE_FTP_PRET_FAILED (84)"
+PRET command failed
+.IP "CURLE_RTSP_CSEQ_ERROR (85)"
+Mismatch of RTSP CSeq numbers.
+.IP "CURLE_RTSP_SESSION_ERROR (86)"
+Mismatch of RTSP Session Identifiers.
+.IP "CURLE_FTP_BAD_FILE_LIST (87)"
+Unable to parse FTP file list (during FTP wildcard downloading).
+.IP "CURLE_CHUNK_FAILED (88)"
+Chunk callback reported error.
+.IP "CURLE_OBSOLETE*"
+These error codes will never be returned. They were used in an old libcurl
+version and are currently unused.
+.SH "CURLMcode"
+This is the generic return code used by functions in the libcurl multi
+interface. Also consider \fIcurl_multi_strerror(3)\fP.
+.IP "CURLM_CALL_MULTI_PERFORM (-1)"
+This is not really an error. It means you should call
+\fIcurl_multi_perform(3)\fP again without doing select() or similar in between.
+.IP "CURLM_OK (0)"
+Things are fine.
+.IP "CURLM_BAD_HANDLE (1)"
+The passed-in handle is not a valid CURLM handle.
+.IP "CURLM_BAD_EASY_HANDLE (2)"
+An easy handle was not good/valid. It could mean that it isn't an easy handle
+at all, or possibly that the handle already is in used by this or another
+multi handle.
+.IP "CURLM_OUT_OF_MEMORY (3)"
+You are doomed.
+.IP "CURLM_INTERNAL_ERROR (4)"
+This can only be returned if libcurl bugs. Please report it to us!
+.IP "CURLM_BAD_SOCKET (5)"
+The passed-in socket is not a valid one that libcurl already knows about.
+(Added in 7.15.4)
+.IP "CURLM_UNKNOWN_OPTION (6)"
+curl_multi_setopt() with unsupported option
+(Added in 7.15.4)
+.SH "CURLSHcode"
+The "share" interface will return a CURLSHcode to indicate when an error has
+occurred. Also consider \fIcurl_share_strerror(3)\fP.
+.IP "CURLSHE_OK (0)"
+All fine. Proceed as usual.
+.IP "CURLSHE_BAD_OPTION (1)"
+An invalid option was passed to the function.
+.IP "CURLSHE_IN_USE (2)"
+The share object is currently in use.
+.IP "CURLSHE_INVALID (3)"
+An invalid share object was passed to the function.
+.IP "CURLSHE_NOMEM (4)"
+Not enough memory was available.
+(Added in 7.12.0)
diff --git a/docs/libcurl/libcurl-errors.html b/docs/libcurl/libcurl-errors.html
new file mode 100644
index 0000000..0a2cf70
--- /dev/null
+++ b/docs/libcurl/libcurl-errors.html
@@ -0,0 +1,236 @@
+<html><head>
+<title>libcurl-errors man page</title>
+<meta name="generator" content="roffit 0.7">
+<STYLE type="text/css">
+P.level0 {
+ padding-left: 2em;
+}
+
+P.level1 {
+ padding-left: 4em;
+}
+
+P.level2 {
+ padding-left: 6em;
+}
+
+span.emphasis {
+ font-style: italic;
+}
+
+span.bold {
+ font-weight: bold;
+}
+
+span.manpage {
+ font-weight: bold;
+}
+
+h2.nroffsh {
+ background-color: #e0e0e0;
+}
+
+span.nroffip {
+ font-weight: bold;
+ font-size: 120%;
+ font-family: monospace;
+}
+
+p.roffit {
+ text-align: center;
+ font-size: 80%;
+}
+</STYLE>
+</head><body>
+
+<p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
+<p class="level0">libcurl-errors - error codes in libcurl <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">This man page includes most, if not all, available error codes in libcurl. Why they occur and possibly what you can do to fix the problem are also included. <a name="CURLcode"></a><h2 class="nroffsh">CURLcode</h2>
+<p class="level0">Almost all "easy" interface functions return a CURLcode error code. No matter what, using the <a class="emphasis" href="./curl_easy_setopt.html">curl_easy_setopt(3)</a> option <span Class="emphasis">CURLOPT_ERRORBUFFER</span> is a good idea as it will give you a human readable error string that may offer more details about the cause of the error than just the error code. <a class="emphasis" href="./curl_easy_strerror.html">curl_easy_strerror(3)</a> can be called to get an error string from a given CURLcode number.
+<p class="level0">CURLcode is one of the following:
+<p class="level0"><a name="CURLEOK"></a><span class="nroffip">CURLE_OK (0)</span>
+<p class="level1">All fine. Proceed as usual.
+<p class="level0"><a name="CURLEUNSUPPORTEDPROTOCOL"></a><span class="nroffip">CURLE_UNSUPPORTED_PROTOCOL (1)</span>
+<p class="level1">The URL you passed to libcurl used a protocol that this libcurl does not support. The support might be a compile-time option that you didn't use, it can be a misspelled protocol string or just a protocol libcurl has no code for.
+<p class="level0"><a name="CURLEFAILEDINIT"></a><span class="nroffip">CURLE_FAILED_INIT (2)</span>
+<p class="level1">Very early initialization code failed. This is likely to be an internal error or problem.
+<p class="level0"><a name="CURLEURLMALFORMAT"></a><span class="nroffip">CURLE_URL_MALFORMAT (3)</span>
+<p class="level1">The URL was not properly formatted.
+<p class="level0"><a name="CURLECOULDNTRESOLVEPROXY"></a><span class="nroffip">CURLE_COULDNT_RESOLVE_PROXY (5)</span>
+<p class="level1">Couldn't resolve proxy. The given proxy host could not be resolved.
+<p class="level0"><a name="CURLECOULDNTRESOLVEHOST"></a><span class="nroffip">CURLE_COULDNT_RESOLVE_HOST (6)</span>
+<p class="level1">Couldn't resolve host. The given remote host was not resolved.
+<p class="level0"><a name="CURLECOULDNTCONNECT"></a><span class="nroffip">CURLE_COULDNT_CONNECT (7)</span>
+<p class="level1">Failed to connect() to host or proxy.
+<p class="level0"><a name="CURLEFTPWEIRDSERVERREPLY"></a><span class="nroffip">CURLE_FTP_WEIRD_SERVER_REPLY (8)</span>
+<p class="level1">After connecting to a FTP server, libcurl expects to get a certain reply back. This error code implies that it got a strange or bad reply. The given remote server is probably not an OK FTP server.
+<p class="level0"><a name="CURLEREMOTEACCESSDENIED"></a><span class="nroffip">CURLE_REMOTE_ACCESS_DENIED (9)</span>
+<p class="level1">We were denied access to the resource given in the URL. For FTP, this occurs while trying to change to the remote directory.
+<p class="level0"><a name="CURLEFTPWEIRDPASSREPLY"></a><span class="nroffip">CURLE_FTP_WEIRD_PASS_REPLY (11)</span>
+<p class="level1">After having sent the FTP password to the server, libcurl expects a proper reply. This error code indicates that an unexpected code was returned.
+<p class="level0"><a name="CURLEFTPWEIRDPASVREPLY"></a><span class="nroffip">CURLE_FTP_WEIRD_PASV_REPLY (13)</span>
+<p class="level1">libcurl failed to get a sensible result back from the server as a response to either a PASV or a EPSV command. The server is flawed.
+<p class="level0"><a name="CURLEFTPWEIRD227FORMAT"></a><span class="nroffip">CURLE_FTP_WEIRD_227_FORMAT (14)</span>
+<p class="level1">FTP servers return a 227-line as a response to a PASV command. If libcurl fails to parse that line, this return code is passed back.
+<p class="level0"><a name="CURLEFTPPRETFAILED"></a><span class="nroffip">CURLE_FTP_PRET_FAILED (84)</span>
+<p class="level1">The FTP server does not understand the PRET command at all or does not support the given argument. Be careful when using <span Class="emphasis">CURLOPT_CUSTOMREQUEST</span>, a custom LIST command will be sent with PRET CMD before PASV as well. (Added in 7.20.0)
+<p class="level0"><a name="CURLEFTPCANTGETHOST"></a><span class="nroffip">CURLE_FTP_CANT_GET_HOST (15)</span>
+<p class="level1">An internal failure to lookup the host used for the new connection.
+<p class="level0"><a name="CURLEFTPCOULDNTSETTYPE"></a><span class="nroffip">CURLE_FTP_COULDNT_SET_TYPE (17)</span>
+<p class="level1">Received an error when trying to set the transfer mode to binary or ASCII.
+<p class="level0"><a name="CURLEPARTIALFILE"></a><span class="nroffip">CURLE_PARTIAL_FILE (18)</span>
+<p class="level1">A file transfer was shorter or larger than expected. This happens when the server first reports an expected transfer size, and then delivers data that doesn't match the previously given size.
+<p class="level0"><a name="CURLEFTPCOULDNTRETRFILE"></a><span class="nroffip">CURLE_FTP_COULDNT_RETR_FILE (19)</span>
+<p class="level1">This was either a weird reply to a 'RETR' command or a zero byte transfer complete.
+<p class="level0"><a name="CURLEQUOTEERROR"></a><span class="nroffip">CURLE_QUOTE_ERROR (21)</span>
+<p class="level1">When sending custom "QUOTE" commands to the remote server, one of the commands returned an error code that was 400 or higher (for FTP) or otherwise indicated unsuccessful completion of the command.
+<p class="level0"><a name="CURLEHTTPRETURNEDERROR"></a><span class="nroffip">CURLE_HTTP_RETURNED_ERROR (22)</span>
+<p class="level1">This is returned if CURLOPT_FAILONERROR is set TRUE and the HTTP server returns an error code that is &gt;= 400.
+<p class="level0"><a name="CURLEWRITEERROR"></a><span class="nroffip">CURLE_WRITE_ERROR (23)</span>
+<p class="level1">An error occurred when writing received data to a local file, or an error was returned to libcurl from a write callback.
+<p class="level0"><a name="CURLEUPLOADFAILED"></a><span class="nroffip">CURLE_UPLOAD_FAILED (25)</span>
+<p class="level1">Failed starting the upload. For FTP, the server typically denied the STOR command. The error buffer usually contains the server's explanation for this.
+<p class="level0"><a name="CURLEREADERROR"></a><span class="nroffip">CURLE_READ_ERROR (26)</span>
+<p class="level1">There was a problem reading a local file or an error returned by the read callback.
+<p class="level0"><a name="CURLEOUTOFMEMORY"></a><span class="nroffip">CURLE_OUT_OF_MEMORY (27)</span>
+<p class="level1">A memory allocation request failed. This is serious badness and things are severely screwed up if this ever occurs.
+<p class="level0"><a name="CURLEOPERATIONTIMEDOUT"></a><span class="nroffip">CURLE_OPERATION_TIMEDOUT (28)</span>
+<p class="level1">Operation timeout. The specified time-out period was reached according to the conditions.
+<p class="level0"><a name="CURLEFTPPORTFAILED"></a><span class="nroffip">CURLE_FTP_PORT_FAILED (30)</span>
+<p class="level1">The FTP PORT command returned error. This mostly happens when you haven't specified a good enough address for libcurl to use. See <span Class="emphasis">CURLOPT_FTPPORT</span>.
+<p class="level0"><a name="CURLEFTPCOULDNTUSEREST"></a><span class="nroffip">CURLE_FTP_COULDNT_USE_REST (31)</span>
+<p class="level1">The FTP REST command returned error. This should never happen if the server is sane.
+<p class="level0"><a name="CURLERANGEERROR"></a><span class="nroffip">CURLE_RANGE_ERROR (33)</span>
+<p class="level1">The server does not support or accept range requests.
+<p class="level0"><a name="CURLEHTTPPOSTERROR"></a><span class="nroffip">CURLE_HTTP_POST_ERROR (34)</span>
+<p class="level1">This is an odd error that mainly occurs due to internal confusion.
+<p class="level0"><a name="CURLESSLCONNECTERROR"></a><span class="nroffip">CURLE_SSL_CONNECT_ERROR (35)</span>
+<p class="level1">A problem occurred somewhere in the SSL/TLS handshake. You really want the error buffer and read the message there as it pinpoints the problem slightly more. Could be certificates (file formats, paths, permissions), passwords, and others.
+<p class="level0"><a name="CURLEBADDOWNLOADRESUME"></a><span class="nroffip">CURLE_BAD_DOWNLOAD_RESUME (36)</span>
+<p class="level1">The download could not be resumed because the specified offset was out of the file boundary.
+<p class="level0"><a name="CURLEFILECOULDNTREADFILE"></a><span class="nroffip">CURLE_FILE_COULDNT_READ_FILE (37)</span>
+<p class="level1">A file given with FILE:// couldn't be opened. Most likely because the file path doesn't identify an existing file. Did you check file permissions?
+<p class="level0"><a name="CURLELDAPCANNOTBIND"></a><span class="nroffip">CURLE_LDAP_CANNOT_BIND (38)</span>
+<p class="level1">LDAP cannot bind. LDAP bind operation failed.
+<p class="level0"><a name="CURLELDAPSEARCHFAILED"></a><span class="nroffip">CURLE_LDAP_SEARCH_FAILED (39)</span>
+<p class="level1">LDAP search failed.
+<p class="level0"><a name="CURLEFUNCTIONNOTFOUND"></a><span class="nroffip">CURLE_FUNCTION_NOT_FOUND (41)</span>
+<p class="level1">Function not found. A required zlib function was not found.
+<p class="level0"><a name="CURLEABORTEDBYCALLBACK"></a><span class="nroffip">CURLE_ABORTED_BY_CALLBACK (42)</span>
+<p class="level1">Aborted by callback. A callback returned "abort" to libcurl.
+<p class="level0"><a name="CURLEBADFUNCTIONARGUMENT"></a><span class="nroffip">CURLE_BAD_FUNCTION_ARGUMENT (43)</span>
+<p class="level1">Internal error. A function was called with a bad parameter.
+<p class="level0"><a name="CURLEINTERFACEFAILED"></a><span class="nroffip">CURLE_INTERFACE_FAILED (45)</span>
+<p class="level1">Interface error. A specified outgoing interface could not be used. Set which interface to use for outgoing connections' source IP address with CURLOPT_INTERFACE.
+<p class="level0"><a name="CURLETOOMANYREDIRECTS"></a><span class="nroffip">CURLE_TOO_MANY_REDIRECTS (47)</span>
+<p class="level1">Too many redirects. When following redirects, libcurl hit the maximum amount. Set your limit with CURLOPT_MAXREDIRS.
+<p class="level0"><a name="CURLEUNKNOWNTELNETOPTION"></a><span class="nroffip">CURLE_UNKNOWN_TELNET_OPTION (48)</span>
+<p class="level1">An option set with CURLOPT_TELNETOPTIONS was not recognized/known. Refer to the appropriate documentation.
+<p class="level0"><a name="CURLETELNETOPTIONSYNTAX"></a><span class="nroffip">CURLE_TELNET_OPTION_SYNTAX (49)</span>
+<p class="level1">A telnet option string was Illegally formatted.
+<p class="level0"><a name="CURLEPEERFAILEDVERIFICATION"></a><span class="nroffip">CURLE_PEER_FAILED_VERIFICATION (51)</span>
+<p class="level1">The remote server's SSL certificate or SSH md5 fingerprint was deemed not OK.
+<p class="level0"><a name="CURLEGOTNOTHING"></a><span class="nroffip">CURLE_GOT_NOTHING (52)</span>
+<p class="level1">Nothing was returned from the server, and under the circumstances, getting nothing is considered an error.
+<p class="level0"><a name="CURLESSLENGINENOTFOUND"></a><span class="nroffip">CURLE_SSL_ENGINE_NOTFOUND (53)</span>
+<p class="level1">The specified crypto engine wasn't found.
+<p class="level0"><a name="CURLESSLENGINESETFAILED"></a><span class="nroffip">CURLE_SSL_ENGINE_SETFAILED (54)</span>
+<p class="level1">Failed setting the selected SSL crypto engine as default!
+<p class="level0"><a name="CURLESENDERROR"></a><span class="nroffip">CURLE_SEND_ERROR (55)</span>
+<p class="level1">Failed sending network data.
+<p class="level0"><a name="CURLERECVERROR"></a><span class="nroffip">CURLE_RECV_ERROR (56)</span>
+<p class="level1">Failure with receiving network data.
+<p class="level0"><a name="CURLESSLCERTPROBLEM"></a><span class="nroffip">CURLE_SSL_CERTPROBLEM (58)</span>
+<p class="level1">problem with the local client certificate.
+<p class="level0"><a name="CURLESSLCIPHER"></a><span class="nroffip">CURLE_SSL_CIPHER (59)</span>
+<p class="level1">Couldn't use specified cipher.
+<p class="level0"><a name="CURLESSLCACERT"></a><span class="nroffip">CURLE_SSL_CACERT (60)</span>
+<p class="level1">Peer certificate cannot be authenticated with known CA certificates.
+<p class="level0"><a name="CURLEBADCONTENTENCODING"></a><span class="nroffip">CURLE_BAD_CONTENT_ENCODING (61)</span>
+<p class="level1">Unrecognized transfer encoding.
+<p class="level0"><a name="CURLELDAPINVALIDURL"></a><span class="nroffip">CURLE_LDAP_INVALID_URL (62)</span>
+<p class="level1">Invalid LDAP URL.
+<p class="level0"><a name="CURLEFILESIZEEXCEEDED"></a><span class="nroffip">CURLE_FILESIZE_EXCEEDED (63)</span>
+<p class="level1">Maximum file size exceeded.
+<p class="level0"><a name="CURLEUSESSLFAILED"></a><span class="nroffip">CURLE_USE_SSL_FAILED (64)</span>
+<p class="level1">Requested FTP SSL level failed.
+<p class="level0"><a name="CURLESENDFAILREWIND"></a><span class="nroffip">CURLE_SEND_FAIL_REWIND (65)</span>
+<p class="level1">When doing a send operation curl had to rewind the data to retransmit, but the rewinding operation failed.
+<p class="level0"><a name="CURLESSLENGINEINITFAILED"></a><span class="nroffip">CURLE_SSL_ENGINE_INITFAILED (66)</span>
+<p class="level1">Initiating the SSL Engine failed.
+<p class="level0"><a name="CURLELOGINDENIED"></a><span class="nroffip">CURLE_LOGIN_DENIED (67)</span>
+<p class="level1">The remote server denied curl to login (Added in 7.13.1)
+<p class="level0"><a name="CURLETFTPNOTFOUND"></a><span class="nroffip">CURLE_TFTP_NOTFOUND (68)</span>
+<p class="level1">File not found on TFTP server.
+<p class="level0"><a name="CURLETFTPPERM"></a><span class="nroffip">CURLE_TFTP_PERM (69)</span>
+<p class="level1">Permission problem on TFTP server.
+<p class="level0"><a name="CURLEREMOTEDISKFULL"></a><span class="nroffip">CURLE_REMOTE_DISK_FULL (70)</span>
+<p class="level1">Out of disk space on the server.
+<p class="level0"><a name="CURLETFTPILLEGAL"></a><span class="nroffip">CURLE_TFTP_ILLEGAL (71)</span>
+<p class="level1">Illegal TFTP operation.
+<p class="level0"><a name="CURLETFTPUNKNOWNID"></a><span class="nroffip">CURLE_TFTP_UNKNOWNID (72)</span>
+<p class="level1">Unknown TFTP transfer ID.
+<p class="level0"><a name="CURLEREMOTEFILEEXISTS"></a><span class="nroffip">CURLE_REMOTE_FILE_EXISTS (73)</span>
+<p class="level1">File already exists and will not be overwritten.
+<p class="level0"><a name="CURLETFTPNOSUCHUSER"></a><span class="nroffip">CURLE_TFTP_NOSUCHUSER (74)</span>
+<p class="level1">This error should never be returned by a properly functioning TFTP server.
+<p class="level0"><a name="CURLECONVFAILED"></a><span class="nroffip">CURLE_CONV_FAILED (75)</span>
+<p class="level1">Character conversion failed.
+<p class="level0"><a name="CURLECONVREQD"></a><span class="nroffip">CURLE_CONV_REQD (76)</span>
+<p class="level1">Caller must register conversion callbacks.
+<p class="level0"><a name="CURLESSLCACERTBADFILE"></a><span class="nroffip">CURLE_SSL_CACERT_BADFILE (77)</span>
+<p class="level1">Problem with reading the SSL CA cert (path? access rights?)
+<p class="level0"><a name="CURLEREMOTEFILENOTFOUND"></a><span class="nroffip">CURLE_REMOTE_FILE_NOT_FOUND (78)</span>
+<p class="level1">The resource referenced in the URL does not exist.
+<p class="level0"><a name="CURLESSH"></a><span class="nroffip">CURLE_SSH (79)</span>
+<p class="level1">An unspecified error occurred during the SSH session.
+<p class="level0"><a name="CURLESSLSHUTDOWNFAILED"></a><span class="nroffip">CURLE_SSL_SHUTDOWN_FAILED (80)</span>
+<p class="level1">Failed to shut down the SSL connection.
+<p class="level0"><a name="CURLEAGAIN"></a><span class="nroffip">CURLE_AGAIN (81)</span>
+<p class="level1">Socket is not ready for send/recv wait till it's ready and try again. This return code is only returned from <a class="emphasis" href="./curl_easy_recv.html">curl_easy_recv(3)</a> and <a class="emphasis" href="./curl_easy_send.html">curl_easy_send(3)</a> (Added in 7.18.2)
+<p class="level0"><a name="CURLESSLCRLBADFILE"></a><span class="nroffip">CURLE_SSL_CRL_BADFILE (82)</span>
+<p class="level1">Failed to load CRL file (Added in 7.19.0)
+<p class="level0"><a name="CURLESSLISSUERERROR"></a><span class="nroffip">CURLE_SSL_ISSUER_ERROR (83)</span>
+<p class="level1">Issuer check failed (Added in 7.19.0)
+<p class="level0"><a name="CURLEFTPPRETFAILED"></a><span class="nroffip">CURLE_FTP_PRET_FAILED (84)</span>
+<p class="level1">PRET command failed
+<p class="level0"><a name="CURLERTSPCSEQERROR"></a><span class="nroffip">CURLE_RTSP_CSEQ_ERROR (85)</span>
+<p class="level1">Mismatch of RTSP CSeq numbers.
+<p class="level0"><a name="CURLERTSPSESSIONERROR"></a><span class="nroffip">CURLE_RTSP_SESSION_ERROR (86)</span>
+<p class="level1">Mismatch of RTSP Session Identifiers.
+<p class="level0"><a name="CURLEFTPBADFILELIST"></a><span class="nroffip">CURLE_FTP_BAD_FILE_LIST (87)</span>
+<p class="level1">Unable to parse FTP file list (during FTP wildcard downloading).
+<p class="level0"><a name="CURLECHUNKFAILED"></a><span class="nroffip">CURLE_CHUNK_FAILED (88)</span>
+<p class="level1">Chunk callback reported error.
+<p class="level0"><a name="CURLEOBSOLETE"></a><span class="nroffip">CURLE_OBSOLETE*</span>
+<p class="level1">These error codes will never be returned. They were used in an old libcurl version and are currently unused. <a name="CURLMcode"></a><h2 class="nroffsh">CURLMcode</h2>
+<p class="level0">This is the generic return code used by functions in the libcurl multi interface. Also consider <a class="emphasis" href="./curl_multi_strerror.html">curl_multi_strerror(3)</a>.
+<p class="level0"><a name="CURLMCALLMULTIPERFORM"></a><span class="nroffip">CURLM_CALL_MULTI_PERFORM (-1)</span>
+<p class="level1">This is not really an error. It means you should call <a class="emphasis" href="./curl_multi_perform.html">curl_multi_perform(3)</a> again without doing select() or similar in between.
+<p class="level0"><a name="CURLMOK"></a><span class="nroffip">CURLM_OK (0)</span>
+<p class="level1">Things are fine.
+<p class="level0"><a name="CURLMBADHANDLE"></a><span class="nroffip">CURLM_BAD_HANDLE (1)</span>
+<p class="level1">The passed-in handle is not a valid CURLM handle.
+<p class="level0"><a name="CURLMBADEASYHANDLE"></a><span class="nroffip">CURLM_BAD_EASY_HANDLE (2)</span>
+<p class="level1">An easy handle was not good/valid. It could mean that it isn't an easy handle at all, or possibly that the handle already is in used by this or another multi handle.
+<p class="level0"><a name="CURLMOUTOFMEMORY"></a><span class="nroffip">CURLM_OUT_OF_MEMORY (3)</span>
+<p class="level1">You are doomed.
+<p class="level0"><a name="CURLMINTERNALERROR"></a><span class="nroffip">CURLM_INTERNAL_ERROR (4)</span>
+<p class="level1">This can only be returned if libcurl bugs. Please report it to us!
+<p class="level0"><a name="CURLMBADSOCKET"></a><span class="nroffip">CURLM_BAD_SOCKET (5)</span>
+<p class="level1">The passed-in socket is not a valid one that libcurl already knows about. (Added in 7.15.4)
+<p class="level0"><a name="CURLMUNKNOWNOPTION"></a><span class="nroffip">CURLM_UNKNOWN_OPTION (6)</span>
+<p class="level1">curl_multi_setopt() with unsupported option (Added in 7.15.4) <a name="CURLSHcode"></a><h2 class="nroffsh">CURLSHcode</h2>
+<p class="level0">The "share" interface will return a CURLSHcode to indicate when an error has occurred. Also consider <a class="emphasis" href="./curl_share_strerror.html">curl_share_strerror(3)</a>.
+<p class="level0"><a name="CURLSHEOK"></a><span class="nroffip">CURLSHE_OK (0)</span>
+<p class="level1">All fine. Proceed as usual.
+<p class="level0"><a name="CURLSHEBADOPTION"></a><span class="nroffip">CURLSHE_BAD_OPTION (1)</span>
+<p class="level1">An invalid option was passed to the function.
+<p class="level0"><a name="CURLSHEINUSE"></a><span class="nroffip">CURLSHE_IN_USE (2)</span>
+<p class="level1">The share object is currently in use.
+<p class="level0"><a name="CURLSHEINVALID"></a><span class="nroffip">CURLSHE_INVALID (3)</span>
+<p class="level1">An invalid share object was passed to the function.
+<p class="level0"><a name="CURLSHENOMEM"></a><span class="nroffip">CURLSHE_NOMEM (4)</span>
+<p class="level1">Not enough memory was available. (Added in 7.12.0) <p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/libcurl-errors.pdf b/docs/libcurl/libcurl-errors.pdf
new file mode 100644
index 0000000..bcd53f2
--- /dev/null
+++ b/docs/libcurl/libcurl-errors.pdf
Binary files differ
diff --git a/docs/libcurl/libcurl-multi.3 b/docs/libcurl/libcurl-multi.3
new file mode 100644
index 0000000..d84bafc
--- /dev/null
+++ b/docs/libcurl/libcurl-multi.3
@@ -0,0 +1,142 @@
+.\" **************************************************************************
+.\" * _ _ ____ _
+.\" * Project ___| | | | _ \| |
+.\" * / __| | | | |_) | |
+.\" * | (__| |_| | _ <| |___
+.\" * \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" *
+.\" * This software is licensed as described in the file COPYING, which
+.\" * you should have received as part of this distribution. The terms
+.\" * are also available at http://curl.haxx.se/docs/copyright.html.
+.\" *
+.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+.\" * copies of the Software, and permit persons to whom the Software is
+.\" * furnished to do so, under the terms of the COPYING file.
+.\" *
+.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+.\" * KIND, either express or implied.
+.\" *
+.\" **************************************************************************
+.\"
+.TH libcurl-multi 3 "3 Feb 2007" "libcurl 7.16.0" "libcurl multi interface"
+.SH NAME
+libcurl-multi \- how to use the multi interface
+.SH DESCRIPTION
+This is an overview on how to use the libcurl multi interface in your C
+programs. There are specific man pages for each function mentioned in
+here. There's also the \fIlibcurl-tutorial(3)\fP man page for a complete
+tutorial to programming with libcurl and the \fIlibcurl-easy(3)\fP man page
+for an overview of the libcurl easy interface.
+
+All functions in the multi interface are prefixed with curl_multi.
+.SH "OBJECTIVES"
+The multi interface offers several abilities that the easy interface doesn't.
+They are mainly:
+
+1. Enable a "pull" interface. The application that uses libcurl decides where
+and when to ask libcurl to get/send data.
+
+2. Enable multiple simultaneous transfers in the same thread without making it
+complicated for the application.
+
+3. Enable the application to wait for action on its own file descriptors and
+curl's file descriptors simultaneous easily.
+.SH "ONE MULTI HANDLE MANY EASY HANDLES"
+To use the multi interface, you must first create a 'multi handle' with
+\fIcurl_multi_init(3)\fP. This handle is then used as input to all further
+curl_multi_* functions.
+
+Each single transfer is built up with an easy handle. You must create them,
+and setup the appropriate options for each easy handle, as outlined in the
+\fIlibcurl(3)\fP man page, using \fIcurl_easy_setopt(3)\fP.
+
+When the easy handle is setup for a transfer, then instead of using
+\fIcurl_easy_perform(3)\fP (as when using the easy interface for transfers),
+you should instead add the easy handle to the multi handle using
+\fIcurl_multi_add_handle(3)\fP. The multi handle is sometimes referred to as a
+\'multi stack\' because of the fact that it may hold a large amount of easy
+handles.
+
+Should you change your mind, the easy handle is again removed from the multi
+stack using \fIcurl_multi_remove_handle(3)\fP. Once removed from the multi
+handle, you can again use other easy interface functions like
+\fIcurl_easy_perform(3)\fP on the handle or whatever you think is necessary.
+
+Adding the easy handle to the multi handle does not start the transfer.
+Remember that one of the main ideas with this interface is to let your
+application drive. You drive the transfers by invoking
+\fIcurl_multi_perform(3)\fP. libcurl will then transfer data if there is
+anything available to transfer. It'll use the callbacks and everything else
+you have setup in the individual easy handles. It'll transfer data on all
+current transfers in the multi stack that are ready to transfer anything. It
+may be all, it may be none.
+
+Your application can acquire knowledge from libcurl when it would like to get
+invoked to transfer data, so that you don't have to busy-loop and call that
+\fIcurl_multi_perform(3)\fP like crazy. \fIcurl_multi_fdset(3)\fP offers an
+interface using which you can extract fd_sets from libcurl to use in select()
+or poll() calls in order to get to know when the transfers in the multi stack
+might need attention. This also makes it very easy for your program to wait
+for input on your own private file descriptors at the same time or perhaps
+timeout every now and then, should you want that.
+
+A little note here about the return codes from the multi functions, and
+especially the \fIcurl_multi_perform(3)\fP: if you receive
+\fICURLM_CALL_MULTI_PERFORM\fP, this basically means that you should call
+\fIcurl_multi_perform(3)\fP again, before you select() on more actions. You
+don't have to do it immediately, but the return code means that libcurl may
+have more data available to return or that there may be more data to send off
+before it is "satisfied".
+
+\fIcurl_multi_perform(3)\fP stores the number of still running transfers in
+one of its input arguments, and by reading that you can figure out when all
+the transfers in the multi handles are done. 'done' does not mean
+successful. One or more of the transfers may have failed. Tracking when this
+number changes, you know when one or more transfers are done.
+
+To get information about completed transfers, to figure out success or not and
+similar, \fIcurl_multi_info_read(3)\fP should be called. It can return a
+message about a current or previous transfer. Repeated invokes of the function
+get more messages until the message queue is empty. The information you
+receive there includes an easy handle pointer which you may use to identify
+which easy handle the information regards.
+
+When a single transfer is completed, the easy handle is still left added to
+the multi stack. You need to first remove the easy handle with
+\fIcurl_multi_remove_handle(3)\fP and then close it with
+\fIcurl_easy_cleanup(3)\fP, or possibly set new options to it and add it again
+with \fIcurl_multi_add_handle(3)\fP to start another transfer.
+
+When all transfers in the multi stack are done, cleanup the multi handle with
+\fIcurl_multi_cleanup(3)\fP. Be careful and please note that you \fBMUST\fP
+invoke separate \fIcurl_easy_cleanup(3)\fP calls on every single easy handle
+to clean them up properly.
+
+If you want to re-use an easy handle that was added to the multi handle for
+transfer, you must first remove it from the multi stack and then re-add it
+again (possibly after having altered some options at your own choice).
+.SH "MULTI_SOCKET"
+Since 7.16.0, the \fIcurl_multi_socket_action(3)\fP function offers a way for
+applications to not only avoid being forced to use select(), but it also
+offers a much more high-performance API that will make a significant
+difference for applications using large numbers of simultaneous connections.
+
+\fIcurl_multi_socket_action(3)\fP is then used
+instead of \fIcurl_multi_perform(3)\fP.
+.SH "BLOCKING"
+A few areas in the code are still using blocking code, even when used from the
+multi interface. While we certainly want and intend for these to get fixed in
+the future, you should be aware of the following current restrictions:
+
+.nf
+ - Name resolves on non-windows unless c-ares is used
+ - GnuTLS SSL connections
+ - NSS SSL connections
+ - Active FTP connections
+ - HTTP proxy CONNECT operations
+ - SOCKS proxy handshakes
+ - file:// transfers
+ - TELNET transfers
+.fi
diff --git a/docs/libcurl/libcurl-multi.html b/docs/libcurl/libcurl-multi.html
new file mode 100644
index 0000000..70601d1
--- /dev/null
+++ b/docs/libcurl/libcurl-multi.html
@@ -0,0 +1,82 @@
+<html><head>
+<title>libcurl-multi man page</title>
+<meta name="generator" content="roffit 0.7">
+<STYLE type="text/css">
+P.level0 {
+ padding-left: 2em;
+}
+
+P.level1 {
+ padding-left: 4em;
+}
+
+P.level2 {
+ padding-left: 6em;
+}
+
+span.emphasis {
+ font-style: italic;
+}
+
+span.bold {
+ font-weight: bold;
+}
+
+span.manpage {
+ font-weight: bold;
+}
+
+h2.nroffsh {
+ background-color: #e0e0e0;
+}
+
+span.nroffip {
+ font-weight: bold;
+ font-size: 120%;
+ font-family: monospace;
+}
+
+p.roffit {
+ text-align: center;
+ font-size: 80%;
+}
+</STYLE>
+</head><body>
+
+<p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
+<p class="level0">libcurl-multi - how to use the multi interface <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">This is an overview on how to use the libcurl multi interface in your C programs. There are specific man pages for each function mentioned in here. There's also the <span Class="emphasis">libcurl-tutorial(3)</span> man page for a complete tutorial to programming with libcurl and the <span Class="emphasis">libcurl-easy(3)</span> man page for an overview of the libcurl easy interface.
+<p class="level0">All functions in the multi interface are prefixed with curl_multi. <a name="OBJECTIVES"></a><h2 class="nroffsh">OBJECTIVES</h2>
+<p class="level0">The multi interface offers several abilities that the easy interface doesn't. They are mainly:
+<p class="level0">1. Enable a "pull" interface. The application that uses libcurl decides where and when to ask libcurl to get/send data.
+<p class="level0">2. Enable multiple simultaneous transfers in the same thread without making it complicated for the application.
+<p class="level0">3. Enable the application to wait for action on its own file descriptors and curl's file descriptors simultaneous easily. <a name="ONE"></a><h2 class="nroffsh">ONE MULTI HANDLE MANY EASY HANDLES</h2>
+<p class="level0">To use the multi interface, you must first create a 'multi handle' with <a class="emphasis" href="./curl_multi_init.html">curl_multi_init(3)</a>. This handle is then used as input to all further curl_multi_* functions.
+<p class="level0">Each single transfer is built up with an easy handle. You must create them, and setup the appropriate options for each easy handle, as outlined in the <a class="emphasis" href="./libcurl.html">libcurl(3)</a> man page, using <a class="emphasis" href="./curl_easy_setopt.html">curl_easy_setopt(3)</a>.
+<p class="level0">When the easy handle is setup for a transfer, then instead of using <a class="emphasis" href="./curl_easy_perform.html">curl_easy_perform(3)</a> (as when using the easy interface for transfers), you should instead add the easy handle to the multi handle using <a class="emphasis" href="./curl_multi_add_handle.html">curl_multi_add_handle(3)</a>. The multi handle is sometimes referred to as a &acute;multi stack&acute; because of the fact that it may hold a large amount of easy handles.
+<p class="level0">Should you change your mind, the easy handle is again removed from the multi stack using <a class="emphasis" href="./curl_multi_remove_handle.html">curl_multi_remove_handle(3)</a>. Once removed from the multi handle, you can again use other easy interface functions like <a class="emphasis" href="./curl_easy_perform.html">curl_easy_perform(3)</a> on the handle or whatever you think is necessary.
+<p class="level0">Adding the easy handle to the multi handle does not start the transfer. Remember that one of the main ideas with this interface is to let your application drive. You drive the transfers by invoking <a class="emphasis" href="./curl_multi_perform.html">curl_multi_perform(3)</a>. libcurl will then transfer data if there is anything available to transfer. It'll use the callbacks and everything else you have setup in the individual easy handles. It'll transfer data on all current transfers in the multi stack that are ready to transfer anything. It may be all, it may be none.
+<p class="level0">Your application can acquire knowledge from libcurl when it would like to get invoked to transfer data, so that you don't have to busy-loop and call that <a class="emphasis" href="./curl_multi_perform.html">curl_multi_perform(3)</a> like crazy. <a class="emphasis" href="./curl_multi_fdset.html">curl_multi_fdset(3)</a> offers an interface using which you can extract fd_sets from libcurl to use in select() or poll() calls in order to get to know when the transfers in the multi stack might need attention. This also makes it very easy for your program to wait for input on your own private file descriptors at the same time or perhaps timeout every now and then, should you want that.
+<p class="level0">A little note here about the return codes from the multi functions, and especially the <a class="emphasis" href="./curl_multi_perform.html">curl_multi_perform(3)</a>: if you receive <span Class="emphasis">CURLM_CALL_MULTI_PERFORM</span>, this basically means that you should call <a class="emphasis" href="./curl_multi_perform.html">curl_multi_perform(3)</a> again, before you select() on more actions. You don't have to do it immediately, but the return code means that libcurl may have more data available to return or that there may be more data to send off before it is "satisfied".
+<p class="level0"><a class="emphasis" href="./curl_multi_perform.html">curl_multi_perform(3)</a> stores the number of still running transfers in one of its input arguments, and by reading that you can figure out when all the transfers in the multi handles are done. 'done' does not mean successful. One or more of the transfers may have failed. Tracking when this number changes, you know when one or more transfers are done.
+<p class="level0">To get information about completed transfers, to figure out success or not and similar, <a class="emphasis" href="./curl_multi_info_read.html">curl_multi_info_read(3)</a> should be called. It can return a message about a current or previous transfer. Repeated invokes of the function get more messages until the message queue is empty. The information you receive there includes an easy handle pointer which you may use to identify which easy handle the information regards.
+<p class="level0">When a single transfer is completed, the easy handle is still left added to the multi stack. You need to first remove the easy handle with <a class="emphasis" href="./curl_multi_remove_handle.html">curl_multi_remove_handle(3)</a> and then close it with <a class="emphasis" href="./curl_easy_cleanup.html">curl_easy_cleanup(3)</a>, or possibly set new options to it and add it again with <a class="emphasis" href="./curl_multi_add_handle.html">curl_multi_add_handle(3)</a> to start another transfer.
+<p class="level0">When all transfers in the multi stack are done, cleanup the multi handle with <a class="emphasis" href="./curl_multi_cleanup.html">curl_multi_cleanup(3)</a>. Be careful and please note that you <span Class="bold">MUST</span> invoke separate <a class="emphasis" href="./curl_easy_cleanup.html">curl_easy_cleanup(3)</a> calls on every single easy handle to clean them up properly.
+<p class="level0">If you want to re-use an easy handle that was added to the multi handle for transfer, you must first remove it from the multi stack and then re-add it again (possibly after having altered some options at your own choice). <a name="MULTISOCKET"></a><h2 class="nroffsh">MULTI_SOCKET</h2>
+<p class="level0">Since 7.16.0, the <a class="emphasis" href="./curl_multi_socket_action.html">curl_multi_socket_action(3)</a> function offers a way for applications to not only avoid being forced to use select(), but it also offers a much more high-performance API that will make a significant difference for applications using large numbers of simultaneous connections.
+<p class="level0"><a class="emphasis" href="./curl_multi_socket_action.html">curl_multi_socket_action(3)</a> is then used instead of <a class="emphasis" href="./curl_multi_perform.html">curl_multi_perform(3)</a>. <a name="BLOCKING"></a><h2 class="nroffsh">BLOCKING</h2>
+<p class="level0">A few areas in the code are still using blocking code, even when used from the multi interface. While we certainly want and intend for these to get fixed in the future, you should be aware of the following current restrictions:
+<p class="level0"><pre>
+<p class="level0">&nbsp;- Name resolves on non-windows unless c-ares is used
+ &nbsp;- GnuTLS SSL connections
+ &nbsp;- NSS SSL connections
+ &nbsp;- Active FTP connections
+ &nbsp;- HTTP proxy CONNECT operations
+ &nbsp;- SOCKS proxy handshakes
+ &nbsp;- file:// transfers
+ &nbsp;- TELNET transfers
+ </pre>
+
+<p class="level0"><p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/libcurl-multi.pdf b/docs/libcurl/libcurl-multi.pdf
new file mode 100644
index 0000000..1fd4af6
--- /dev/null
+++ b/docs/libcurl/libcurl-multi.pdf
Binary files differ
diff --git a/docs/libcurl/libcurl-share.3 b/docs/libcurl/libcurl-share.3
new file mode 100644
index 0000000..2e58c0b
--- /dev/null
+++ b/docs/libcurl/libcurl-share.3
@@ -0,0 +1,45 @@
+.\" You can view this file with:
+.\" nroff -man [file]
+.\"
+.TH libcurl-share 3 "8 Aug 2003" "libcurl 7.10.7" "libcurl share interface"
+.SH NAME
+libcurl-share \- how to use the share interface
+.SH DESCRIPTION
+This is an overview on how to use the libcurl share interface in your C
+programs. There are specific man pages for each function mentioned in
+here.
+
+All functions in the share interface are prefixed with curl_share.
+
+.SH "OBJECTIVES"
+The share interface was added to enable sharing of data between curl
+\&"handles".
+.SH "ONE SET OF DATA - MANY TRANSFERS"
+You can have multiple easy handles share data between them. Have them update
+and use the \fBsame\fP cookie database or DNS cache! This way, each single
+transfer will take advantage from data updates made by the other transfer(s).
+.SH "SHARE OBJECT"
+You create a shared object with \fIcurl_share_init(3)\fP. It returns a handle
+for a newly created one.
+
+You tell the shared object what data you want it to share by using
+\fIcurl_share_setopt(3)\fP. Currently you can only share DNS and/or COOKIE
+data.
+
+Since you can use this share from multiple threads, and libcurl has no
+internal thread synchronization, you must provide mutex callbacks if you're
+using this multi-threaded. You set lock and unlock functions with
+\fIcurl_share_setopt(3)\fP too.
+
+Then, you make an easy handle to use this share, you set the
+\fICURLOPT_SHARE\fP option with \fIcurl_easy_setopt(3)\fP, and pass in share
+handle. You can make any number of easy handles share the same share handle.
+
+To make an easy handle stop using that particular share, you set
+\fICURLOPT_SHARE\fP to NULL for that easy handle. To make a handle stop
+sharing a particular data, you can \fICURLSHOPT_UNSHARE\fP it.
+
+When you're done using the share, make sure that no easy handle is still using
+it, and call \fIcurl_share_cleanup(3)\fP on the handle.
+.SH "SEE ALSO"
+.BR curl_share_init "(3), " curl_share_setopt "(3), " curl_share_cleanup "(3)"
diff --git a/docs/libcurl/libcurl-share.html b/docs/libcurl/libcurl-share.html
new file mode 100644
index 0000000..6a66f32
--- /dev/null
+++ b/docs/libcurl/libcurl-share.html
@@ -0,0 +1,61 @@
+<html><head>
+<title>libcurl-share man page</title>
+<meta name="generator" content="roffit 0.7">
+<STYLE type="text/css">
+P.level0 {
+ padding-left: 2em;
+}
+
+P.level1 {
+ padding-left: 4em;
+}
+
+P.level2 {
+ padding-left: 6em;
+}
+
+span.emphasis {
+ font-style: italic;
+}
+
+span.bold {
+ font-weight: bold;
+}
+
+span.manpage {
+ font-weight: bold;
+}
+
+h2.nroffsh {
+ background-color: #e0e0e0;
+}
+
+span.nroffip {
+ font-weight: bold;
+ font-size: 120%;
+ font-family: monospace;
+}
+
+p.roffit {
+ text-align: center;
+ font-size: 80%;
+}
+</STYLE>
+</head><body>
+
+<p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
+<p class="level0">libcurl-share - how to use the share interface <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">This is an overview on how to use the libcurl share interface in your C programs. There are specific man pages for each function mentioned in here.
+<p class="level0">All functions in the share interface are prefixed with curl_share.
+<p class="level0"><a name="OBJECTIVES"></a><h2 class="nroffsh">OBJECTIVES</h2>
+<p class="level0">The share interface was added to enable sharing of data between curl "handles". <a name="ONE"></a><h2 class="nroffsh">ONE SET OF DATA - MANY TRANSFERS</h2>
+<p class="level0">You can have multiple easy handles share data between them. Have them update and use the <span Class="bold">same</span> cookie database or DNS cache! This way, each single transfer will take advantage from data updates made by the other transfer(s). <a name="SHARE"></a><h2 class="nroffsh">SHARE OBJECT</h2>
+<p class="level0">You create a shared object with <a class="emphasis" href="./curl_share_init.html">curl_share_init(3)</a>. It returns a handle for a newly created one.
+<p class="level0">You tell the shared object what data you want it to share by using <a class="emphasis" href="./curl_share_setopt.html">curl_share_setopt(3)</a>. Currently you can only share DNS and/or COOKIE data.
+<p class="level0">Since you can use this share from multiple threads, and libcurl has no internal thread synchronization, you must provide mutex callbacks if you're using this multi-threaded. You set lock and unlock functions with <a class="emphasis" href="./curl_share_setopt.html">curl_share_setopt(3)</a> too.
+<p class="level0">Then, you make an easy handle to use this share, you set the <span Class="emphasis">CURLOPT_SHARE</span> option with <a class="emphasis" href="./curl_easy_setopt.html">curl_easy_setopt(3)</a>, and pass in share handle. You can make any number of easy handles share the same share handle.
+<p class="level0">To make an easy handle stop using that particular share, you set <span Class="emphasis">CURLOPT_SHARE</span> to NULL for that easy handle. To make a handle stop sharing a particular data, you can <span Class="emphasis">CURLSHOPT_UNSHARE</span> it.
+<p class="level0">When you're done using the share, make sure that no easy handle is still using it, and call <a class="emphasis" href="./curl_share_cleanup.html">curl_share_cleanup(3)</a> on the handle. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><a class="manpage" href="./curl_share_init.html">curl_share_init (3)</a> <a class="manpage" href="./curl_share_setopt.html"> curl_share_setopt (3)</a> <a class="manpage" href="./curl_share_cleanup.html"> curl_share_cleanup (3)</a> <p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/libcurl-share.pdf b/docs/libcurl/libcurl-share.pdf
new file mode 100644
index 0000000..a4ba4cb
--- /dev/null
+++ b/docs/libcurl/libcurl-share.pdf
Binary files differ
diff --git a/docs/libcurl/libcurl-tutorial.3 b/docs/libcurl/libcurl-tutorial.3
new file mode 100644
index 0000000..72f0029
--- /dev/null
+++ b/docs/libcurl/libcurl-tutorial.3
@@ -0,0 +1,1357 @@
+.\" **************************************************************************
+.\" * _ _ ____ _
+.\" * Project ___| | | | _ \| |
+.\" * / __| | | | |_) | |
+.\" * | (__| |_| | _ <| |___
+.\" * \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" *
+.\" * This software is licensed as described in the file COPYING, which
+.\" * you should have received as part of this distribution. The terms
+.\" * are also available at http://curl.haxx.se/docs/copyright.html.
+.\" *
+.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+.\" * copies of the Software, and permit persons to whom the Software is
+.\" * furnished to do so, under the terms of the COPYING file.
+.\" *
+.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+.\" * KIND, either express or implied.
+.\" *
+.\" **************************************************************************
+.\"
+.TH libcurl-tutorial 3 "4 Mar 2009" "libcurl" "libcurl programming"
+.SH NAME
+libcurl-tutorial \- libcurl programming tutorial
+.SH "Objective"
+This document attempts to describe the general principles and some basic
+approaches to consider when programming with libcurl. The text will focus
+mainly on the C interface but might apply fairly well on other interfaces as
+well as they usually follow the C one pretty closely.
+
+This document will refer to 'the user' as the person writing the source code
+that uses libcurl. That would probably be you or someone in your position.
+What will be generally referred to as 'the program' will be the collected
+source code that you write that is using libcurl for transfers. The program
+is outside libcurl and libcurl is outside of the program.
+
+To get more details on all options and functions described herein, please
+refer to their respective man pages.
+
+.SH "Building"
+There are many different ways to build C programs. This chapter will assume a
+UNIX-style build process. If you use a different build system, you can still
+read this to get general information that may apply to your environment as
+well.
+.IP "Compiling the Program"
+Your compiler needs to know where the libcurl headers are located. Therefore
+you must set your compiler's include path to point to the directory where you
+installed them. The 'curl-config'[3] tool can be used to get this information:
+
+$ curl-config --cflags
+
+.IP "Linking the Program with libcurl"
+When having compiled the program, you need to link your object files to create
+a single executable. For that to succeed, you need to link with libcurl and
+possibly also with other libraries that libcurl itself depends on. Like the
+OpenSSL libraries, but even some standard OS libraries may be needed on the
+command line. To figure out which flags to use, once again the 'curl-config'
+tool comes to the rescue:
+
+$ curl-config --libs
+
+.IP "SSL or Not"
+libcurl can be built and customized in many ways. One of the things that
+varies from different libraries and builds is the support for SSL-based
+transfers, like HTTPS and FTPS. If a supported SSL library was detected
+properly at build-time, libcurl will be built with SSL support. To figure out
+if an installed libcurl has been built with SSL support enabled, use
+\&'curl-config' like this:
+
+$ curl-config --feature
+
+And if SSL is supported, the keyword 'SSL' will be written to stdout,
+possibly together with a few other features that could be either on or off on
+for different libcurls.
+
+See also the "Features libcurl Provides" further down.
+.IP "autoconf macro"
+When you write your configure script to detect libcurl and setup variables
+accordingly, we offer a prewritten macro that probably does everything you
+need in this area. See docs/libcurl/libcurl.m4 file - it includes docs on how
+to use it.
+
+.SH "Portable Code in a Portable World"
+The people behind libcurl have put a considerable effort to make libcurl work
+on a large amount of different operating systems and environments.
+
+You program libcurl the same way on all platforms that libcurl runs on. There
+are only very few minor considerations that differ. If you just make sure to
+write your code portable enough, you may very well create yourself a very
+portable program. libcurl shouldn't stop you from that.
+
+.SH "Global Preparation"
+The program must initialize some of the libcurl functionality globally. That
+means it should be done exactly once, no matter how many times you intend to
+use the library. Once for your program's entire life time. This is done using
+
+ curl_global_init()
+
+and it takes one parameter which is a bit pattern that tells libcurl what to
+initialize. Using \fICURL_GLOBAL_ALL\fP will make it initialize all known
+internal sub modules, and might be a good default option. The current two bits
+that are specified are:
+.RS
+.IP "CURL_GLOBAL_WIN32"
+which only does anything on Windows machines. When used on
+a Windows machine, it'll make libcurl initialize the win32 socket
+stuff. Without having that initialized properly, your program cannot use
+sockets properly. You should only do this once for each application, so if
+your program already does this or of another library in use does it, you
+should not tell libcurl to do this as well.
+.IP CURL_GLOBAL_SSL
+which only does anything on libcurls compiled and built SSL-enabled. On these
+systems, this will make libcurl initialize the SSL library properly for this
+application. This only needs to be done once for each application so if your
+program or another library already does this, this bit should not be needed.
+.RE
+
+libcurl has a default protection mechanism that detects if
+\fIcurl_global_init(3)\fP hasn't been called by the time
+\fIcurl_easy_perform(3)\fP is called and if that is the case, libcurl runs the
+function itself with a guessed bit pattern. Please note that depending solely
+on this is not considered nice nor very good.
+
+When the program no longer uses libcurl, it should call
+\fIcurl_global_cleanup(3)\fP, which is the opposite of the init call. It will
+then do the reversed operations to cleanup the resources the
+\fIcurl_global_init(3)\fP call initialized.
+
+Repeated calls to \fIcurl_global_init(3)\fP and \fIcurl_global_cleanup(3)\fP
+should be avoided. They should only be called once each.
+
+.SH "Features libcurl Provides"
+It is considered best-practice to determine libcurl features at run-time
+rather than at build-time (if possible of course). By calling
+\fIcurl_version_info(3)\fP and checking out the details of the returned
+struct, your program can figure out exactly what the currently running libcurl
+supports.
+
+.SH "Handle the Easy libcurl"
+libcurl first introduced the so called easy interface. All operations in the
+easy interface are prefixed with 'curl_easy'.
+
+Recent libcurl versions also offer the multi interface. More about that
+interface, what it is targeted for and how to use it is detailed in a separate
+chapter further down. You still need to understand the easy interface first,
+so please continue reading for better understanding.
+
+To use the easy interface, you must first create yourself an easy handle. You
+need one handle for each easy session you want to perform. Basically, you
+should use one handle for every thread you plan to use for transferring. You
+must never share the same handle in multiple threads.
+
+Get an easy handle with
+
+ easyhandle = curl_easy_init();
+
+It returns an easy handle. Using that you proceed to the next step: setting
+up your preferred actions. A handle is just a logic entity for the upcoming
+transfer or series of transfers.
+
+You set properties and options for this handle using
+\fIcurl_easy_setopt(3)\fP. They control how the subsequent transfer or
+transfers will be made. Options remain set in the handle until set again to
+something different. Alas, multiple requests using the same handle will use
+the same options.
+
+Many of the options you set in libcurl are "strings", pointers to data
+terminated with a zero byte. When you set strings with
+\fIcurl_easy_setopt(3)\fP, libcurl makes its own copy so that they don't
+need to be kept around in your application after being set[4].
+
+One of the most basic properties to set in the handle is the URL. You set
+your preferred URL to transfer with CURLOPT_URL in a manner similar to:
+
+.nf
+ curl_easy_setopt(handle, CURLOPT_URL, "http://domain.com/");
+.fi
+
+Let's assume for a while that you want to receive data as the URL identifies a
+remote resource you want to get here. Since you write a sort of application
+that needs this transfer, I assume that you would like to get the data passed
+to you directly instead of simply getting it passed to stdout. So, you write
+your own function that matches this prototype:
+
+ size_t write_data(void *buffer, size_t size, size_t nmemb, void *userp);
+
+You tell libcurl to pass all data to this function by issuing a function
+similar to this:
+
+ curl_easy_setopt(easyhandle, CURLOPT_WRITEFUNCTION, write_data);
+
+You can control what data your callback function gets in the fourth argument
+by setting another property:
+
+ curl_easy_setopt(easyhandle, CURLOPT_WRITEDATA, &internal_struct);
+
+Using that property, you can easily pass local data between your application
+and the function that gets invoked by libcurl. libcurl itself won't touch the
+data you pass with \fICURLOPT_WRITEDATA\fP.
+
+libcurl offers its own default internal callback that will take care of the data
+if you don't set the callback with \fICURLOPT_WRITEFUNCTION\fP. It will then
+simply output the received data to stdout. You can have the default callback
+write the data to a different file handle by passing a 'FILE *' to a file
+opened for writing with the \fICURLOPT_WRITEDATA\fP option.
+
+Now, we need to take a step back and have a deep breath. Here's one of those
+rare platform-dependent nitpicks. Did you spot it? On some platforms[2],
+libcurl won't be able to operate on files opened by the program. Thus, if you
+use the default callback and pass in an open file with
+\fICURLOPT_WRITEDATA\fP, it will crash. You should therefore avoid this to
+make your program run fine virtually everywhere.
+
+(\fICURLOPT_WRITEDATA\fP was formerly known as \fICURLOPT_FILE\fP. Both names
+still work and do the same thing).
+
+If you're using libcurl as a win32 DLL, you MUST use the
+\fICURLOPT_WRITEFUNCTION\fP if you set \fICURLOPT_WRITEDATA\fP - or you will
+experience crashes.
+
+There are of course many more options you can set, and we'll get back to a few
+of them later. Let's instead continue to the actual transfer:
+
+ success = curl_easy_perform(easyhandle);
+
+\fIcurl_easy_perform(3)\fP will connect to the remote site, do the necessary
+commands and receive the transfer. Whenever it receives data, it calls the
+callback function we previously set. The function may get one byte at a time,
+or it may get many kilobytes at once. libcurl delivers as much as possible as
+often as possible. Your callback function should return the number of bytes it
+\&"took care of". If that is not the exact same amount of bytes that was
+passed to it, libcurl will abort the operation and return with an error code.
+
+When the transfer is complete, the function returns a return code that informs
+you if it succeeded in its mission or not. If a return code isn't enough for
+you, you can use the CURLOPT_ERRORBUFFER to point libcurl to a buffer of yours
+where it'll store a human readable error message as well.
+
+If you then want to transfer another file, the handle is ready to be used
+again. Mind you, it is even preferred that you re-use an existing handle if
+you intend to make another transfer. libcurl will then attempt to re-use the
+previous connection.
+
+For some protocols, downloading a file can involve a complicated process of
+logging in, setting the transfer mode, changing the current directory and
+finally transferring the file data. libcurl takes care of all that
+complication for you. Given simply the URL to a file, libcurl will take care
+of all the details needed to get the file moved from one machine to another.
+
+.SH "Multi-threading Issues"
+The first basic rule is that you must \fBnever\fP share a libcurl handle (be
+it easy or multi or whatever) between multiple threads. Only use one handle in
+one thread at a time.
+
+libcurl is completely thread safe, except for two issues: signals and SSL/TLS
+handlers. Signals are used for timing out name resolves (during DNS lookup) -
+when built without c-ares support and not on Windows.
+
+If you are accessing HTTPS or FTPS URLs in a multi-threaded manner, you are
+then of course using the underlying SSL library multi-threaded and those libs
+might have their own requirements on this issue. Basically, you need to
+provide one or two functions to allow it to function properly. For all
+details, see this:
+
+OpenSSL
+
+ http://www.openssl.org/docs/crypto/threads.html#DESCRIPTION
+
+GnuTLS
+
+ http://www.gnu.org/software/gnutls/manual/html_node/Multi_002dthreaded-applications.html
+
+NSS
+
+ is claimed to be thread-safe already without anything required.
+
+PolarSSL
+
+ Required actions unknown.
+
+yassl
+
+ Required actions unknown.
+
+When using multiple threads you should set the CURLOPT_NOSIGNAL option to 1
+for all handles. Everything will or might work fine except that timeouts are
+not honored during the DNS lookup - which you can work around by building
+libcurl with c-ares support. c-ares is a library that provides asynchronous
+name resolves. On some platforms, libcurl simply will not function properly
+multi-threaded unless this option is set.
+
+Also, note that CURLOPT_DNS_USE_GLOBAL_CACHE is not thread-safe.
+
+.SH "When It Doesn't Work"
+There will always be times when the transfer fails for some reason. You might
+have set the wrong libcurl option or misunderstood what the libcurl option
+actually does, or the remote server might return non-standard replies that
+confuse the library which then confuses your program.
+
+There's one golden rule when these things occur: set the CURLOPT_VERBOSE
+option to 1. It'll cause the library to spew out the entire protocol
+details it sends, some internal info and some received protocol data as well
+(especially when using FTP). If you're using HTTP, adding the headers in the
+received output to study is also a clever way to get a better understanding
+why the server behaves the way it does. Include headers in the normal body
+output with CURLOPT_HEADER set 1.
+
+Of course, there are bugs left. We need to know about them to be able
+to fix them, so we're quite dependent on your bug reports! When you do report
+suspected bugs in libcurl, please include as many details as you possibly can: a
+protocol dump that CURLOPT_VERBOSE produces, library version, as much as
+possible of your code that uses libcurl, operating system name and version,
+compiler name and version etc.
+
+If CURLOPT_VERBOSE is not enough, you increase the level of debug data your
+application receive by using the CURLOPT_DEBUGFUNCTION.
+
+Getting some in-depth knowledge about the protocols involved is never wrong,
+and if you're trying to do funny things, you might very well understand
+libcurl and how to use it better if you study the appropriate RFC documents
+at least briefly.
+
+.SH "Upload Data to a Remote Site"
+libcurl tries to keep a protocol independent approach to most transfers, thus
+uploading to a remote FTP site is very similar to uploading data to a HTTP
+server with a PUT request.
+
+Of course, first you either create an easy handle or you re-use one existing
+one. Then you set the URL to operate on just like before. This is the remote
+URL, that we now will upload.
+
+Since we write an application, we most likely want libcurl to get the upload
+data by asking us for it. To make it do that, we set the read callback and
+the custom pointer libcurl will pass to our read callback. The read callback
+should have a prototype similar to:
+
+ size_t function(char *bufptr, size_t size, size_t nitems, void *userp);
+
+Where bufptr is the pointer to a buffer we fill in with data to upload and
+size*nitems is the size of the buffer and therefore also the maximum amount
+of data we can return to libcurl in this call. The 'userp' pointer is the
+custom pointer we set to point to a struct of ours to pass private data
+between the application and the callback.
+
+ curl_easy_setopt(easyhandle, CURLOPT_READFUNCTION, read_function);
+
+ curl_easy_setopt(easyhandle, CURLOPT_READDATA, &filedata);
+
+Tell libcurl that we want to upload:
+
+ curl_easy_setopt(easyhandle, CURLOPT_UPLOAD, 1L);
+
+A few protocols won't behave properly when uploads are done without any prior
+knowledge of the expected file size. So, set the upload file size using the
+CURLOPT_INFILESIZE_LARGE for all known file sizes like this[1]:
+
+.nf
+ /* in this example, file_size must be an curl_off_t variable */
+ curl_easy_setopt(easyhandle, CURLOPT_INFILESIZE_LARGE, file_size);
+.fi
+
+When you call \fIcurl_easy_perform(3)\fP this time, it'll perform all the
+necessary operations and when it has invoked the upload it'll call your
+supplied callback to get the data to upload. The program should return as much
+data as possible in every invoke, as that is likely to make the upload perform
+as fast as possible. The callback should return the number of bytes it wrote
+in the buffer. Returning 0 will signal the end of the upload.
+
+.SH "Passwords"
+Many protocols use or even require that user name and password are provided
+to be able to download or upload the data of your choice. libcurl offers
+several ways to specify them.
+
+Most protocols support that you specify the name and password in the URL
+itself. libcurl will detect this and use them accordingly. This is written
+like this:
+
+ protocol://user:password@example.com/path/
+
+If you need any odd letters in your user name or password, you should enter
+them URL encoded, as %XX where XX is a two-digit hexadecimal number.
+
+libcurl also provides options to set various passwords. The user name and
+password as shown embedded in the URL can instead get set with the
+CURLOPT_USERPWD option. The argument passed to libcurl should be a char * to
+a string in the format "user:password". In a manner like this:
+
+ curl_easy_setopt(easyhandle, CURLOPT_USERPWD, "myname:thesecret");
+
+Another case where name and password might be needed at times, is for those
+users who need to authenticate themselves to a proxy they use. libcurl offers
+another option for this, the CURLOPT_PROXYUSERPWD. It is used quite similar
+to the CURLOPT_USERPWD option like this:
+
+ curl_easy_setopt(easyhandle, CURLOPT_PROXYUSERPWD, "myname:thesecret");
+
+There's a long time UNIX "standard" way of storing ftp user names and
+passwords, namely in the $HOME/.netrc file. The file should be made private
+so that only the user may read it (see also the "Security Considerations"
+chapter), as it might contain the password in plain text. libcurl has the
+ability to use this file to figure out what set of user name and password to
+use for a particular host. As an extension to the normal functionality,
+libcurl also supports this file for non-FTP protocols such as HTTP. To make
+curl use this file, use the CURLOPT_NETRC option:
+
+ curl_easy_setopt(easyhandle, CURLOPT_NETRC, 1L);
+
+And a very basic example of how such a .netrc file may look like:
+
+.nf
+ machine myhost.mydomain.com
+ login userlogin
+ password secretword
+.fi
+
+All these examples have been cases where the password has been optional, or
+at least you could leave it out and have libcurl attempt to do its job
+without it. There are times when the password isn't optional, like when
+you're using an SSL private key for secure transfers.
+
+To pass the known private key password to libcurl:
+
+ curl_easy_setopt(easyhandle, CURLOPT_KEYPASSWD, "keypassword");
+
+.SH "HTTP Authentication"
+The previous chapter showed how to set user name and password for getting
+URLs that require authentication. When using the HTTP protocol, there are
+many different ways a client can provide those credentials to the server and
+you can control which way libcurl will (attempt to) use them. The default HTTP
+authentication method is called 'Basic', which is sending the name and
+password in clear-text in the HTTP request, base64-encoded. This is insecure.
+
+At the time of this writing, libcurl can be built to use: Basic, Digest, NTLM,
+Negotiate, GSS-Negotiate and SPNEGO. You can tell libcurl which one to use
+with CURLOPT_HTTPAUTH as in:
+
+ curl_easy_setopt(easyhandle, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST);
+
+And when you send authentication to a proxy, you can also set authentication
+type the same way but instead with CURLOPT_PROXYAUTH:
+
+ curl_easy_setopt(easyhandle, CURLOPT_PROXYAUTH, CURLAUTH_NTLM);
+
+Both these options allow you to set multiple types (by ORing them together),
+to make libcurl pick the most secure one out of the types the server/proxy
+claims to support. This method does however add a round-trip since libcurl
+must first ask the server what it supports:
+
+ curl_easy_setopt(easyhandle, CURLOPT_HTTPAUTH,
+ CURLAUTH_DIGEST|CURLAUTH_BASIC);
+
+For convenience, you can use the 'CURLAUTH_ANY' define (instead of a list
+with specific types) which allows libcurl to use whatever method it wants.
+
+When asking for multiple types, libcurl will pick the available one it
+considers "best" in its own internal order of preference.
+
+.SH "HTTP POSTing"
+We get many questions regarding how to issue HTTP POSTs with libcurl the
+proper way. This chapter will thus include examples using both different
+versions of HTTP POST that libcurl supports.
+
+The first version is the simple POST, the most common version, that most HTML
+pages using the <form> tag uses. We provide a pointer to the data and tell
+libcurl to post it all to the remote site:
+
+.nf
+ char *data="name=daniel&project=curl";
+ curl_easy_setopt(easyhandle, CURLOPT_POSTFIELDS, data);
+ curl_easy_setopt(easyhandle, CURLOPT_URL, "http://posthere.com/");
+
+ curl_easy_perform(easyhandle); /* post away! */
+.fi
+
+Simple enough, huh? Since you set the POST options with the
+CURLOPT_POSTFIELDS, this automatically switches the handle to use POST in the
+upcoming request.
+
+Ok, so what if you want to post binary data that also requires you to set the
+Content-Type: header of the post? Well, binary posts prevent libcurl from
+being able to do strlen() on the data to figure out the size, so therefore we
+must tell libcurl the size of the post data. Setting headers in libcurl
+requests are done in a generic way, by building a list of our own headers and
+then passing that list to libcurl.
+
+.nf
+ struct curl_slist *headers=NULL;
+ headers = curl_slist_append(headers, "Content-Type: text/xml");
+
+ /* post binary data */
+ curl_easy_setopt(easyhandle, CURLOPT_POSTFIELDS, binaryptr);
+
+ /* set the size of the postfields data */
+ curl_easy_setopt(easyhandle, CURLOPT_POSTFIELDSIZE, 23L);
+
+ /* pass our list of custom made headers */
+ curl_easy_setopt(easyhandle, CURLOPT_HTTPHEADER, headers);
+
+ curl_easy_perform(easyhandle); /* post away! */
+
+ curl_slist_free_all(headers); /* free the header list */
+.fi
+
+While the simple examples above cover the majority of all cases where HTTP
+POST operations are required, they don't do multi-part formposts. Multi-part
+formposts were introduced as a better way to post (possibly large) binary data
+and were first documented in the RFC1867 (updated in RFC2388). They're called
+multi-part because they're built by a chain of parts, each part being a single
+unit of data. Each part has its own name and contents. You can in fact create
+and post a multi-part formpost with the regular libcurl POST support described
+above, but that would require that you build a formpost yourself and provide
+to libcurl. To make that easier, libcurl provides \fIcurl_formadd(3)\fP. Using
+this function, you add parts to the form. When you're done adding parts, you
+post the whole form.
+
+The following example sets two simple text parts with plain textual contents,
+and then a file with binary contents and uploads the whole thing.
+
+.nf
+ struct curl_httppost *post=NULL;
+ struct curl_httppost *last=NULL;
+ curl_formadd(&post, &last,
+ CURLFORM_COPYNAME, "name",
+ CURLFORM_COPYCONTENTS, "daniel", CURLFORM_END);
+ curl_formadd(&post, &last,
+ CURLFORM_COPYNAME, "project",
+ CURLFORM_COPYCONTENTS, "curl", CURLFORM_END);
+ curl_formadd(&post, &last,
+ CURLFORM_COPYNAME, "logotype-image",
+ CURLFORM_FILECONTENT, "curl.png", CURLFORM_END);
+
+ /* Set the form info */
+ curl_easy_setopt(easyhandle, CURLOPT_HTTPPOST, post);
+
+ curl_easy_perform(easyhandle); /* post away! */
+
+ /* free the post data again */
+ curl_formfree(post);
+.fi
+
+Multipart formposts are chains of parts using MIME-style separators and
+headers. It means that each one of these separate parts get a few headers set
+that describe the individual content-type, size etc. To enable your
+application to handicraft this formpost even more, libcurl allows you to
+supply your own set of custom headers to such an individual form part. You can
+of course supply headers to as many parts as you like, but this little example
+will show how you set headers to one specific part when you add that to the
+post handle:
+
+.nf
+ struct curl_slist *headers=NULL;
+ headers = curl_slist_append(headers, "Content-Type: text/xml");
+
+ curl_formadd(&post, &last,
+ CURLFORM_COPYNAME, "logotype-image",
+ CURLFORM_FILECONTENT, "curl.xml",
+ CURLFORM_CONTENTHEADER, headers,
+ CURLFORM_END);
+
+ curl_easy_perform(easyhandle); /* post away! */
+
+ curl_formfree(post); /* free post */
+ curl_slist_free_all(headers); /* free custom header list */
+.fi
+
+Since all options on an easyhandle are "sticky", they remain the same until
+changed even if you do call \fIcurl_easy_perform(3)\fP, you may need to tell
+curl to go back to a plain GET request if you intend to do one as your
+next request. You force an easyhandle to go back to GET by using the
+CURLOPT_HTTPGET option:
+
+ curl_easy_setopt(easyhandle, CURLOPT_HTTPGET, 1L);
+
+Just setting CURLOPT_POSTFIELDS to "" or NULL will *not* stop libcurl from
+doing a POST. It will just make it POST without any data to send!
+
+.SH "Showing Progress"
+
+For historical and traditional reasons, libcurl has a built-in progress meter
+that can be switched on and then makes it present a progress meter in your
+terminal.
+
+Switch on the progress meter by, oddly enough, setting CURLOPT_NOPROGRESS to
+zero. This option is set to 1 by default.
+
+For most applications however, the built-in progress meter is useless and
+what instead is interesting is the ability to specify a progress
+callback. The function pointer you pass to libcurl will then be called on
+irregular intervals with information about the current transfer.
+
+Set the progress callback by using CURLOPT_PROGRESSFUNCTION. And pass a
+pointer to a function that matches this prototype:
+
+.nf
+ int progress_callback(void *clientp,
+ double dltotal,
+ double dlnow,
+ double ultotal,
+ double ulnow);
+.fi
+
+If any of the input arguments is unknown, a 0 will be passed. The first
+argument, the 'clientp' is the pointer you pass to libcurl with
+CURLOPT_PROGRESSDATA. libcurl won't touch it.
+
+.SH "libcurl with C++"
+
+There's basically only one thing to keep in mind when using C++ instead of C
+when interfacing libcurl:
+
+The callbacks CANNOT be non-static class member functions
+
+Example C++ code:
+
+.nf
+class AClass {
+ static size_t write_data(void *ptr, size_t size, size_t nmemb,
+ void *ourpointer)
+ {
+ /* do what you want with the data */
+ }
+ }
+.fi
+
+.SH "Proxies"
+
+What "proxy" means according to Merriam-Webster: "a person authorized to act
+for another" but also "the agency, function, or office of a deputy who acts as
+a substitute for another".
+
+Proxies are exceedingly common these days. Companies often only offer Internet
+access to employees through their proxies. Network clients or user-agents ask
+the proxy for documents, the proxy does the actual request and then it returns
+them.
+
+libcurl supports SOCKS and HTTP proxies. When a given URL is wanted, libcurl
+will ask the proxy for it instead of trying to connect to the actual host
+identified in the URL.
+
+If you're using a SOCKS proxy, you may find that libcurl doesn't quite support
+all operations through it.
+
+For HTTP proxies: the fact that the proxy is a HTTP proxy puts certain
+restrictions on what can actually happen. A requested URL that might not be a
+HTTP URL will be still be passed to the HTTP proxy to deliver back to
+libcurl. This happens transparently, and an application may not need to
+know. I say "may", because at times it is very important to understand that
+all operations over a HTTP proxy use the HTTP protocol. For example, you
+can't invoke your own custom FTP commands or even proper FTP directory
+listings.
+
+.IP "Proxy Options"
+
+To tell libcurl to use a proxy at a given port number:
+
+ curl_easy_setopt(easyhandle, CURLOPT_PROXY, "proxy-host.com:8080");
+
+Some proxies require user authentication before allowing a request, and you
+pass that information similar to this:
+
+ curl_easy_setopt(easyhandle, CURLOPT_PROXYUSERPWD, "user:password");
+
+If you want to, you can specify the host name only in the CURLOPT_PROXY
+option, and set the port number separately with CURLOPT_PROXYPORT.
+
+Tell libcurl what kind of proxy it is with CURLOPT_PROXYTYPE (if not, it will
+default to assume a HTTP proxy):
+
+ curl_easy_setopt(easyhandle, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS4);
+
+.IP "Environment Variables"
+
+libcurl automatically checks and uses a set of environment variables to know
+what proxies to use for certain protocols. The names of the variables are
+following an ancient de facto standard and are built up as "[protocol]_proxy"
+(note the lower casing). Which makes the variable \&'http_proxy' checked for a
+name of a proxy to use when the input URL is HTTP. Following the same rule,
+the variable named 'ftp_proxy' is checked for FTP URLs. Again, the proxies are
+always HTTP proxies, the different names of the variables simply allows
+different HTTP proxies to be used.
+
+The proxy environment variable contents should be in the format
+\&"[protocol://][user:password@]machine[:port]". Where the protocol:// part is
+simply ignored if present (so http://proxy and bluerk://proxy will do the
+same) and the optional port number specifies on which port the proxy operates
+on the host. If not specified, the internal default port number will be used
+and that is most likely *not* the one you would like it to be.
+
+There are two special environment variables. 'all_proxy' is what sets proxy
+for any URL in case the protocol specific variable wasn't set, and
+\&'no_proxy' defines a list of hosts that should not use a proxy even though a
+variable may say so. If 'no_proxy' is a plain asterisk ("*") it matches all
+hosts.
+
+To explicitly disable libcurl's checking for and using the proxy environment
+variables, set the proxy name to "" - an empty string - with CURLOPT_PROXY.
+.IP "SSL and Proxies"
+
+SSL is for secure point-to-point connections. This involves strong encryption
+and similar things, which effectively makes it impossible for a proxy to
+operate as a "man in between" which the proxy's task is, as previously
+discussed. Instead, the only way to have SSL work over a HTTP proxy is to ask
+the proxy to tunnel trough everything without being able to check or fiddle
+with the traffic.
+
+Opening an SSL connection over a HTTP proxy is therefor a matter of asking the
+proxy for a straight connection to the target host on a specified port. This
+is made with the HTTP request CONNECT. ("please mr proxy, connect me to that
+remote host").
+
+Because of the nature of this operation, where the proxy has no idea what kind
+of data that is passed in and out through this tunnel, this breaks some of the
+very few advantages that come from using a proxy, such as caching. Many
+organizations prevent this kind of tunneling to other destination port numbers
+than 443 (which is the default HTTPS port number).
+
+.IP "Tunneling Through Proxy"
+As explained above, tunneling is required for SSL to work and often even
+restricted to the operation intended for SSL; HTTPS.
+
+This is however not the only time proxy-tunneling might offer benefits to
+you or your application.
+
+As tunneling opens a direct connection from your application to the remote
+machine, it suddenly also re-introduces the ability to do non-HTTP
+operations over a HTTP proxy. You can in fact use things such as FTP
+upload or FTP custom commands this way.
+
+Again, this is often prevented by the administrators of proxies and is
+rarely allowed.
+
+Tell libcurl to use proxy tunneling like this:
+
+ curl_easy_setopt(easyhandle, CURLOPT_HTTPPROXYTUNNEL, 1L);
+
+In fact, there might even be times when you want to do plain HTTP
+operations using a tunnel like this, as it then enables you to operate on
+the remote server instead of asking the proxy to do so. libcurl will not
+stand in the way for such innovative actions either!
+
+.IP "Proxy Auto-Config"
+
+Netscape first came up with this. It is basically a web page (usually using a
+\&.pac extension) with a Javascript that when executed by the browser with the
+requested URL as input, returns information to the browser on how to connect
+to the URL. The returned information might be "DIRECT" (which means no proxy
+should be used), "PROXY host:port" (to tell the browser where the proxy for
+this particular URL is) or "SOCKS host:port" (to direct the browser to a SOCKS
+proxy).
+
+libcurl has no means to interpret or evaluate Javascript and thus it doesn't
+support this. If you get yourself in a position where you face this nasty
+invention, the following advice have been mentioned and used in the past:
+
+- Depending on the Javascript complexity, write up a script that translates it
+to another language and execute that.
+
+- Read the Javascript code and rewrite the same logic in another language.
+
+- Implement a Javascript interpreter; people have successfully used the
+Mozilla Javascript engine in the past.
+
+- Ask your admins to stop this, for a static proxy setup or similar.
+
+.SH "Persistence Is The Way to Happiness"
+
+Re-cycling the same easy handle several times when doing multiple requests is
+the way to go.
+
+After each single \fIcurl_easy_perform(3)\fP operation, libcurl will keep the
+connection alive and open. A subsequent request using the same easy handle to
+the same host might just be able to use the already open connection! This
+reduces network impact a lot.
+
+Even if the connection is dropped, all connections involving SSL to the same
+host again, will benefit from libcurl's session ID cache that drastically
+reduces re-connection time.
+
+FTP connections that are kept alive save a lot of time, as the command-
+response round-trips are skipped, and also you don't risk getting blocked
+without permission to login again like on many FTP servers only allowing N
+persons to be logged in at the same time.
+
+libcurl caches DNS name resolving results, to make lookups of a previously
+looked up name a lot faster.
+
+Other interesting details that improve performance for subsequent requests
+may also be added in the future.
+
+Each easy handle will attempt to keep the last few connections alive for a
+while in case they are to be used again. You can set the size of this "cache"
+with the CURLOPT_MAXCONNECTS option. Default is 5. There is very seldom any
+point in changing this value, and if you think of changing this it is often
+just a matter of thinking again.
+
+To force your upcoming request to not use an already existing connection (it
+will even close one first if there happens to be one alive to the same host
+you're about to operate on), you can do that by setting CURLOPT_FRESH_CONNECT
+to 1. In a similar spirit, you can also forbid the upcoming request to be
+"lying" around and possibly get re-used after the request by setting
+CURLOPT_FORBID_REUSE to 1.
+
+.SH "HTTP Headers Used by libcurl"
+When you use libcurl to do HTTP requests, it'll pass along a series of headers
+automatically. It might be good for you to know and understand these. You
+can replace or remove them by using the CURLOPT_HTTPHEADER option.
+
+.IP "Host"
+This header is required by HTTP 1.1 and even many 1.0 servers and should be
+the name of the server we want to talk to. This includes the port number if
+anything but default.
+
+.IP "Pragma"
+\&"no-cache". Tells a possible proxy to not grab a copy from the cache but to
+fetch a fresh one.
+
+.IP "Accept"
+\&"*/*".
+
+.IP "Expect"
+When doing POST requests, libcurl sets this header to \&"100-continue" to ask
+the server for an "OK" message before it proceeds with sending the data part
+of the post. If the POSTed data amount is deemed "small", libcurl will not use
+this header.
+
+.SH "Customizing Operations"
+There is an ongoing development today where more and more protocols are built
+upon HTTP for transport. This has obvious benefits as HTTP is a tested and
+reliable protocol that is widely deployed and has excellent proxy-support.
+
+When you use one of these protocols, and even when doing other kinds of
+programming you may need to change the traditional HTTP (or FTP or...)
+manners. You may need to change words, headers or various data.
+
+libcurl is your friend here too.
+
+.IP CUSTOMREQUEST
+If just changing the actual HTTP request keyword is what you want, like when
+GET, HEAD or POST is not good enough for you, CURLOPT_CUSTOMREQUEST is there
+for you. It is very simple to use:
+
+ curl_easy_setopt(easyhandle, CURLOPT_CUSTOMREQUEST, "MYOWNREQUEST");
+
+When using the custom request, you change the request keyword of the actual
+request you are performing. Thus, by default you make a GET request but you can
+also make a POST operation (as described before) and then replace the POST
+keyword if you want to. You're the boss.
+
+.IP "Modify Headers"
+HTTP-like protocols pass a series of headers to the server when doing the
+request, and you're free to pass any amount of extra headers that you
+think fit. Adding headers is this easy:
+
+.nf
+ struct curl_slist *headers=NULL; /* init to NULL is important */
+
+ headers = curl_slist_append(headers, "Hey-server-hey: how are you?");
+ headers = curl_slist_append(headers, "X-silly-content: yes");
+
+ /* pass our list of custom made headers */
+ curl_easy_setopt(easyhandle, CURLOPT_HTTPHEADER, headers);
+
+ curl_easy_perform(easyhandle); /* transfer http */
+
+ curl_slist_free_all(headers); /* free the header list */
+.fi
+
+\&... and if you think some of the internally generated headers, such as
+Accept: or Host: don't contain the data you want them to contain, you can
+replace them by simply setting them too:
+
+.nf
+ headers = curl_slist_append(headers, "Accept: Agent-007");
+ headers = curl_slist_append(headers, "Host: munged.host.line");
+.fi
+
+.IP "Delete Headers"
+If you replace an existing header with one with no contents, you will prevent
+the header from being sent. For instance, if you want to completely prevent the
+\&"Accept:" header from being sent, you can disable it with code similar to this:
+
+ headers = curl_slist_append(headers, "Accept:");
+
+Both replacing and canceling internal headers should be done with careful
+consideration and you should be aware that you may violate the HTTP protocol
+when doing so.
+
+.IP "Enforcing chunked transfer-encoding"
+
+By making sure a request uses the custom header "Transfer-Encoding: chunked"
+when doing a non-GET HTTP operation, libcurl will switch over to "chunked"
+upload, even though the size of the data to upload might be known. By default,
+libcurl usually switches over to chunked upload automatically if the upload
+data size is unknown.
+
+.IP "HTTP Version"
+
+All HTTP requests includes the version number to tell the server which version
+we support. libcurl speaks HTTP 1.1 by default. Some very old servers don't
+like getting 1.1-requests and when dealing with stubborn old things like that,
+you can tell libcurl to use 1.0 instead by doing something like this:
+
+ curl_easy_setopt(easyhandle, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
+
+.IP "FTP Custom Commands"
+
+Not all protocols are HTTP-like, and thus the above may not help you when
+you want to make, for example, your FTP transfers to behave differently.
+
+Sending custom commands to a FTP server means that you need to send the
+commands exactly as the FTP server expects them (RFC959 is a good guide
+here), and you can only use commands that work on the control-connection
+alone. All kinds of commands that require data interchange and thus need
+a data-connection must be left to libcurl's own judgement. Also be aware
+that libcurl will do its very best to change directory to the target
+directory before doing any transfer, so if you change directory (with CWD
+or similar) you might confuse libcurl and then it might not attempt to
+transfer the file in the correct remote directory.
+
+A little example that deletes a given file before an operation:
+
+.nf
+ headers = curl_slist_append(headers, "DELE file-to-remove");
+
+ /* pass the list of custom commands to the handle */
+ curl_easy_setopt(easyhandle, CURLOPT_QUOTE, headers);
+
+ curl_easy_perform(easyhandle); /* transfer ftp data! */
+
+ curl_slist_free_all(headers); /* free the header list */
+.fi
+
+If you would instead want this operation (or chain of operations) to happen
+_after_ the data transfer took place the option to \fIcurl_easy_setopt(3)\fP
+would instead be called CURLOPT_POSTQUOTE and used the exact same way.
+
+The custom FTP command will be issued to the server in the same order they are
+added to the list, and if a command gets an error code returned back from the
+server, no more commands will be issued and libcurl will bail out with an
+error code (CURLE_QUOTE_ERROR). Note that if you use CURLOPT_QUOTE to send
+commands before a transfer, no transfer will actually take place when a quote
+command has failed.
+
+If you set the CURLOPT_HEADER to 1, you will tell libcurl to get
+information about the target file and output "headers" about it. The headers
+will be in "HTTP-style", looking like they do in HTTP.
+
+The option to enable headers or to run custom FTP commands may be useful to
+combine with CURLOPT_NOBODY. If this option is set, no actual file content
+transfer will be performed.
+
+.IP "FTP Custom CUSTOMREQUEST"
+If you do want to list the contents of a FTP directory using your own defined FTP
+command, CURLOPT_CUSTOMREQUEST will do just that. "NLST" is the default one
+for listing directories but you're free to pass in your idea of a good
+alternative.
+
+.SH "Cookies Without Chocolate Chips"
+In the HTTP sense, a cookie is a name with an associated value. A server sends
+the name and value to the client, and expects it to get sent back on every
+subsequent request to the server that matches the particular conditions
+set. The conditions include that the domain name and path match and that the
+cookie hasn't become too old.
+
+In real-world cases, servers send new cookies to replace existing ones to
+update them. Server use cookies to "track" users and to keep "sessions".
+
+Cookies are sent from server to clients with the header Set-Cookie: and
+they're sent from clients to servers with the Cookie: header.
+
+To just send whatever cookie you want to a server, you can use CURLOPT_COOKIE
+to set a cookie string like this:
+
+ curl_easy_setopt(easyhandle, CURLOPT_COOKIE, "name1=var1; name2=var2;");
+
+In many cases, that is not enough. You might want to dynamically save
+whatever cookies the remote server passes to you, and make sure those cookies
+are then used accordingly on later requests.
+
+One way to do this, is to save all headers you receive in a plain file and
+when you make a request, you tell libcurl to read the previous headers to
+figure out which cookies to use. Set the header file to read cookies from with
+CURLOPT_COOKIEFILE.
+
+The CURLOPT_COOKIEFILE option also automatically enables the cookie parser in
+libcurl. Until the cookie parser is enabled, libcurl will not parse or
+understand incoming cookies and they will just be ignored. However, when the
+parser is enabled the cookies will be understood and the cookies will be kept
+in memory and used properly in subsequent requests when the same handle is
+used. Many times this is enough, and you may not have to save the cookies to
+disk at all. Note that the file you specify to CURLOPT_COOKIEFILE doesn't have
+to exist to enable the parser, so a common way to just enable the parser and
+not read any cookies is to use the name of a file you know doesn't exist.
+
+If you would rather use existing cookies that you've previously received with
+your Netscape or Mozilla browsers, you can make libcurl use that cookie file
+as input. The CURLOPT_COOKIEFILE is used for that too, as libcurl will
+automatically find out what kind of file it is and act accordingly.
+
+Perhaps the most advanced cookie operation libcurl offers, is saving the
+entire internal cookie state back into a Netscape/Mozilla formatted cookie
+file. We call that the cookie-jar. When you set a file name with
+CURLOPT_COOKIEJAR, that file name will be created and all received cookies
+will be stored in it when \fIcurl_easy_cleanup(3)\fP is called. This enables
+cookies to get passed on properly between multiple handles without any
+information getting lost.
+
+.SH "FTP Peculiarities We Need"
+
+FTP transfers use a second TCP/IP connection for the data transfer. This is
+usually a fact you can forget and ignore but at times this fact will come
+back to haunt you. libcurl offers several different ways to customize how the
+second connection is being made.
+
+libcurl can either connect to the server a second time or tell the server to
+connect back to it. The first option is the default and it is also what works
+best for all the people behind firewalls, NATs or IP-masquerading setups.
+libcurl then tells the server to open up a new port and wait for a second
+connection. This is by default attempted with EPSV first, and if that doesn't
+work it tries PASV instead. (EPSV is an extension to the original FTP spec
+and does not exist nor work on all FTP servers.)
+
+You can prevent libcurl from first trying the EPSV command by setting
+CURLOPT_FTP_USE_EPSV to zero.
+
+In some cases, you will prefer to have the server connect back to you for the
+second connection. This might be when the server is perhaps behind a firewall
+or something and only allows connections on a single port. libcurl then
+informs the remote server which IP address and port number to connect to.
+This is made with the CURLOPT_FTPPORT option. If you set it to "-", libcurl
+will use your system's "default IP address". If you want to use a particular
+IP, you can set the full IP address, a host name to resolve to an IP address
+or even a local network interface name that libcurl will get the IP address
+from.
+
+When doing the "PORT" approach, libcurl will attempt to use the EPRT and the
+LPRT before trying PORT, as they work with more protocols. You can disable
+this behavior by setting CURLOPT_FTP_USE_EPRT to zero.
+
+.SH "Headers Equal Fun"
+
+Some protocols provide "headers", meta-data separated from the normal
+data. These headers are by default not included in the normal data stream,
+but you can make them appear in the data stream by setting CURLOPT_HEADER to
+1.
+
+What might be even more useful, is libcurl's ability to separate the headers
+from the data and thus make the callbacks differ. You can for example set a
+different pointer to pass to the ordinary write callback by setting
+CURLOPT_WRITEHEADER.
+
+Or, you can set an entirely separate function to receive the headers, by
+using CURLOPT_HEADERFUNCTION.
+
+The headers are passed to the callback function one by one, and you can
+depend on that fact. It makes it easier for you to add custom header parsers
+etc.
+
+\&"Headers" for FTP transfers equal all the FTP server responses. They aren't
+actually true headers, but in this case we pretend they are! ;-)
+
+.SH "Post Transfer Information"
+
+ [ curl_easy_getinfo ]
+
+.SH "Security Considerations"
+
+The libcurl project takes security seriously. The library is written with
+caution and precautions are taken to mitigate many kinds of risks encountered
+while operating with potentially malicious servers on the Internet. It is a
+powerful library, however, which allows application writers to make trade offs
+between ease of writing and exposure to potential risky operations. If
+used the right way, you can use libcurl to transfer data pretty safely.
+
+Many applications are used in closed networks where users and servers
+can be trusted, but many others are used on arbitrary servers and are fed
+input from potentially untrusted users. Following is a discussion about
+some risks in the ways in which applications commonly use libcurl and
+potential mitigations of those risks. It is by no means comprehensive, but
+shows classes of attacks that robust applications should consider. The
+Common Weakness Enumeration project at http://cwe.mitre.org/ is a good
+reference for many of these and similar types of weaknesses of which
+application writers should be aware.
+
+.IP "Command Lines"
+If you use a command line tool (such as curl) that uses libcurl, and you give
+options to the tool on the command line those options can very likely get read
+by other users of your system when they use 'ps' or other tools to list
+currently running processes.
+
+To avoid this problem, never feed sensitive things to programs using command
+line options. Write them to a protected file and use the \-K option to
+avoid this.
+
+.IP ".netrc"
+\&.netrc is a pretty handy file/feature that allows you to login quickly and
+automatically to frequently visited sites. The file contains passwords in
+clear text and is a real security risk. In some cases, your .netrc is also
+stored in a home directory that is NFS mounted or used on another network
+based file system, so the clear text password will fly through your network
+every time anyone reads that file!
+
+To avoid this problem, don't use .netrc files and never store passwords in
+plain text anywhere.
+
+.IP "Clear Text Passwords"
+Many of the protocols libcurl supports send name and password unencrypted as
+clear text (HTTP Basic authentication, FTP, TELNET etc). It is very easy for
+anyone on your network or a network nearby yours to just fire up a network
+analyzer tool and eavesdrop on your passwords. Don't let the fact that HTTP
+Basic uses base64 encoded passwords fool you. They may not look readable at a
+first glance, but they very easily "deciphered" by anyone within seconds.
+
+To avoid this problem, use HTTP authentication methods or other protocols that
+don't let snoopers see your password: HTTP with Digest, NTLM or GSS
+authentication, HTTPS, FTPS, SCP, SFTP and FTP-Kerberos are a few examples.
+
+.IP "Redirects"
+The CURLOPT_FOLLOWLOCATION option automatically follows HTTP redirects sent
+by a remote server. These redirects can refer to any kind of URL, not just
+HTTP. A redirect to a file: URL would cause the libcurl to read (or write)
+arbitrary files from the local filesystem. If the application returns
+the data back to the user (as would happen in some kinds of CGI scripts),
+an attacker could leverage this to read otherwise forbidden data (e.g.
+file://localhost/etc/passwd).
+
+If authentication credentials are stored in the ~/.netrc file, or Kerberos
+is in use, any other URL type (not just file:) that requires
+authentication is also at risk. A redirect such as
+ftp://some-internal-server/private-file would then return data even when
+the server is password protected.
+
+In the same way, if an unencrypted SSH private key has been configured for
+the user running the libcurl application, SCP: or SFTP: URLs could access
+password or private-key protected resources,
+e.g. sftp://user@some-internal-server/etc/passwd
+
+The CURLOPT_REDIR_PROTOCOLS and CURLOPT_NETRC options can be used to
+mitigate against this kind of attack.
+
+A redirect can also specify a location available only on the machine running
+libcurl, including servers hidden behind a firewall from the attacker.
+e.g. http://127.0.0.1/ or http://intranet/delete-stuff.cgi?delete=all or
+tftp://bootp-server/pc-config-data
+
+Apps can mitigate against this by disabling CURLOPT_FOLLOWLOCATION and
+handling redirects itself, sanitizing URLs as necessary. Alternately, an
+app could leave CURLOPT_FOLLOWLOCATION enabled but set CURLOPT_REDIR_PROTOCOLS
+and install a CURLOPT_OPENSOCKETFUNCTION callback function in which addresses
+are sanitized before use.
+
+.IP "Private Resources"
+A user who can control the DNS server of a domain being passed in within
+a URL can change the address of the host to a local, private address
+which the libcurl application will then use. e.g. The innocuous URL
+http://fuzzybunnies.example.com/ could actually resolve to the IP address
+of a server behind a firewall, such as 127.0.0.1 or 10.1.2.3
+Apps can mitigate against this by setting a CURLOPT_OPENSOCKETFUNCTION
+and checking the address before a connection.
+
+All the malicious scenarios regarding redirected URLs apply just as well
+to non-redirected URLs, if the user is allowed to specify an arbitrary URL
+that could point to a private resource. For example, a web app providing
+a translation service might happily translate file://localhost/etc/passwd
+and display the result. Apps can mitigate against this with the
+CURLOPT_PROTOCOLS option as well as by similar mitigation techniques for
+redirections.
+
+A malicious FTP server could in response to the PASV command return an
+IP address and port number for a server local to the app running libcurl
+but behind a firewall. Apps can mitigate against this by using the
+CURLOPT_FTP_SKIP_PASV_IP option or CURLOPT_FTPPORT.
+
+.IP Uploads
+When uploading, a redirect can cause a local (or remote) file to be
+overwritten. Apps must not allow any unsanitized URL to be passed in
+for uploads. Also, CURLOPT_FOLLOWLOCATION should not be used on uploads.
+Instead, the app should handle redirects itself, sanitizing each URL first.
+
+.IP Authentication
+Use of CURLOPT_UNRESTRICTED_AUTH could cause authentication information to
+be sent to an unknown second server. Apps can mitigate against this
+by disabling CURLOPT_FOLLOWLOCATION and handling redirects itself,
+sanitizing where necessary.
+
+Use of the CURLAUTH_ANY option to CURLOPT_HTTPAUTH could result in user
+name and password being sent in clear text to an HTTP server. Instead,
+use CURLAUTH_ANYSAFE which ensures that the password is encrypted over
+the network, or else fail the request.
+
+Use of the CURLUSESSL_TRY option to CURLOPT_USE_SSL could result in user
+name and password being sent in clear text to an FTP server. Instead,
+use CURLUSESSL_CONTROL to ensure that an encrypted connection is used or
+else fail the request.
+
+.IP Cookies
+If cookies are enabled and cached, then a user could craft a URL which
+performs some malicious action to a site whose authentication is already
+stored in a cookie. e.g. http://mail.example.com/delete-stuff.cgi?delete=all
+Apps can mitigate against this by disabling cookies or clearing them
+between requests.
+
+.IP "Dangerous URLs"
+SCP URLs can contain raw commands within the scp: URL, which is a side effect
+of how the SCP protocol is designed. e.g.
+scp://user:pass@host/a;date >/tmp/test;
+Apps must not allow unsanitized SCP: URLs to be passed in for downloads.
+
+.IP "Denial of Service"
+A malicious server could cause libcurl to effectively hang by sending
+a trickle of data through, or even no data at all but just keeping the TCP
+connection open. This could result in a denial-of-service attack. The
+CURLOPT_TIMEOUT and/or CURLOPT_LOW_SPEED_LIMIT options can be used to
+mitigate against this.
+
+A malicious server could cause libcurl to effectively hang by starting to
+send data, then severing the connection without cleanly closing the
+TCP connection. The app could install a CURLOPT_SOCKOPTFUNCTION callback
+function and set the TCP SO_KEEPALIVE option to mitigate against this.
+Setting one of the timeout options would also work against this attack.
+
+A malicious server could cause libcurl to download an infinite amount of
+data, potentially causing all of memory or disk to be filled. Setting
+the CURLOPT_MAXFILESIZE_LARGE option is not sufficient to guard against this.
+Instead, the app should monitor the amount of data received within the
+write or progress callback and abort once the limit is reached.
+
+A malicious HTTP server could cause an infinite redirection loop, causing a
+denial-of-service. This can be mitigated by using the CURLOPT_MAXREDIRS
+option.
+
+.IP "Arbitrary Headers"
+User-supplied data must be sanitized when used in options like
+CURLOPT_USERAGENT, CURLOPT_HTTPHEADER, CURLOPT_POSTFIELDS and others that
+are used to generate structured data. Characters like embedded carriage
+returns or ampersands could allow the user to create additional headers or
+fields that could cause malicious transactions.
+
+.IP "Server-supplied Names"
+A server can supply data which the application may, in some cases, use as
+a file name. The curl command-line tool does this with --remote-header-name,
+using the Content-disposition: header to generate a file name. An application
+could also use CURLINFO_EFFECTIVE_URL to generate a file name from a
+server-supplied redirect URL. Special care must be taken to sanitize such
+names to avoid the possibility of a malicious server supplying one like
+"/etc/passwd", "\autoexec.bat" or even ".bashrc".
+
+.IP "Server Certificates"
+A secure application should never use the CURLOPT_SSL_VERIFYPEER option to
+disable certificate validation. There are numerous attacks that are enabled
+by apps that fail to properly validate server TLS/SSL certificates,
+thus enabling a malicious server to spoof a legitimate one. HTTPS without
+validated certificates is potentially as insecure as a plain HTTP connection.
+
+.IP "Showing What You Do"
+On a related issue, be aware that even in situations like when you have
+problems with libcurl and ask someone for help, everything you reveal in order
+to get best possible help might also impose certain security related
+risks. Host names, user names, paths, operating system specifics, etc (not to
+mention passwords of course) may in fact be used by intruders to gain
+additional information of a potential target.
+
+To avoid this problem, you must of course use your common sense. Often, you
+can just edit out the sensitive data or just search/replace your true
+information with faked data.
+
+.SH "Multiple Transfers Using the multi Interface"
+
+The easy interface as described in detail in this document is a synchronous
+interface that transfers one file at a time and doesn't return until it is
+done.
+
+The multi interface, on the other hand, allows your program to transfer
+multiple files in both directions at the same time, without forcing you
+to use multiple threads. The name might make it seem that the multi
+interface is for multi-threaded programs, but the truth is almost the
+reverse. The multi interface can allow a single-threaded application
+to perform the same kinds of multiple, simultaneous transfers that
+multi-threaded programs can perform. It allows many of the benefits
+of multi-threaded transfers without the complexity of managing and
+synchronizing many threads.
+
+To use this interface, you are better off if you first understand the basics
+of how to use the easy interface. The multi interface is simply a way to make
+multiple transfers at the same time by adding up multiple easy handles into
+a "multi stack".
+
+You create the easy handles you want and you set all the options just like you
+have been told above, and then you create a multi handle with
+\fIcurl_multi_init(3)\fP and add all those easy handles to that multi handle
+with \fIcurl_multi_add_handle(3)\fP.
+
+When you've added the handles you have for the moment (you can still add new
+ones at any time), you start the transfers by calling
+\fIcurl_multi_perform(3)\fP.
+
+\fIcurl_multi_perform(3)\fP is asynchronous. It will only execute as little as
+possible and then return back control to your program. It is designed to never
+block. If it returns CURLM_CALL_MULTI_PERFORM you better call it again soon,
+as that is a signal that it still has local data to send or remote data to
+receive.
+
+The best usage of this interface is when you do a select() on all possible
+file descriptors or sockets to know when to call libcurl again. This also
+makes it easy for you to wait and respond to actions on your own application's
+sockets/handles. You figure out what to select() for by using
+\fIcurl_multi_fdset(3)\fP, that fills in a set of fd_set variables for you
+with the particular file descriptors libcurl uses for the moment.
+
+When you then call select(), it'll return when one of the file handles signal
+action and you then call \fIcurl_multi_perform(3)\fP to allow libcurl to do
+what it wants to do. Take note that libcurl does also feature some time-out
+code so we advise you to never use very long timeouts on select() before you
+call \fIcurl_multi_perform(3)\fP, which thus should be called unconditionally
+every now and then even if none of its file descriptors have signaled
+ready. Another precaution you should use: always call
+\fIcurl_multi_fdset(3)\fP immediately before the select() call since the
+current set of file descriptors may change when calling a curl function.
+
+If you want to stop the transfer of one of the easy handles in the stack, you
+can use \fIcurl_multi_remove_handle(3)\fP to remove individual easy
+handles. Remember that easy handles should be \fIcurl_easy_cleanup(3)\fPed.
+
+When a transfer within the multi stack has finished, the counter of running
+transfers (as filled in by \fIcurl_multi_perform(3)\fP) will decrease. When
+the number reaches zero, all transfers are done.
+
+\fIcurl_multi_info_read(3)\fP can be used to get information about completed
+transfers. It then returns the CURLcode for each easy transfer, to allow you
+to figure out success on each individual transfer.
+
+.SH "SSL, Certificates and Other Tricks"
+
+ [ seeding, passwords, keys, certificates, ENGINE, ca certs ]
+
+.SH "Sharing Data Between Easy Handles"
+
+ [ fill in ]
+
+.SH "Footnotes"
+
+.IP "[1]"
+libcurl 7.10.3 and later have the ability to switch over to chunked
+Transfer-Encoding in cases where HTTP uploads are done with data of an unknown
+size.
+.IP "[2]"
+This happens on Windows machines when libcurl is built and used as a
+DLL. However, you can still do this on Windows if you link with a static
+library.
+.IP "[3]"
+The curl-config tool is generated at build-time (on UNIX-like systems) and
+should be installed with the 'make install' or similar instruction that
+installs the library, header files, man pages etc.
+.IP "[4]"
+This behavior was different in versions before 7.17.0, where strings had to
+remain valid past the end of the \fIcurl_easy_setopt(3)\fP call.
diff --git a/docs/libcurl/libcurl-tutorial.html b/docs/libcurl/libcurl-tutorial.html
new file mode 100644
index 0000000..593d191
--- /dev/null
+++ b/docs/libcurl/libcurl-tutorial.html
@@ -0,0 +1,547 @@
+<html><head>
+<title>libcurl-tutorial man page</title>
+<meta name="generator" content="roffit 0.7">
+<STYLE type="text/css">
+P.level0 {
+ padding-left: 2em;
+}
+
+P.level1 {
+ padding-left: 4em;
+}
+
+P.level2 {
+ padding-left: 6em;
+}
+
+span.emphasis {
+ font-style: italic;
+}
+
+span.bold {
+ font-weight: bold;
+}
+
+span.manpage {
+ font-weight: bold;
+}
+
+h2.nroffsh {
+ background-color: #e0e0e0;
+}
+
+span.nroffip {
+ font-weight: bold;
+ font-size: 120%;
+ font-family: monospace;
+}
+
+p.roffit {
+ text-align: center;
+ font-size: 80%;
+}
+</STYLE>
+</head><body>
+
+<p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
+<p class="level0">libcurl-tutorial - libcurl programming tutorial <a name="Objective"></a><h2 class="nroffsh">Objective</h2>
+<p class="level0">This document attempts to describe the general principles and some basic approaches to consider when programming with libcurl. The text will focus mainly on the C interface but might apply fairly well on other interfaces as well as they usually follow the C one pretty closely.
+<p class="level0">This document will refer to 'the user' as the person writing the source code that uses libcurl. That would probably be you or someone in your position. What will be generally referred to as 'the program' will be the collected source code that you write that is using libcurl for transfers. The program is outside libcurl and libcurl is outside of the program.
+<p class="level0">To get more details on all options and functions described herein, please refer to their respective man pages.
+<p class="level0"><a name="Building"></a><h2 class="nroffsh">Building</h2>
+<p class="level0">There are many different ways to build C programs. This chapter will assume a UNIX-style build process. If you use a different build system, you can still read this to get general information that may apply to your environment as well.
+<p class="level0"><a name="Compiling"></a><span class="nroffip">Compiling the Program</span>
+<p class="level1">Your compiler needs to know where the libcurl headers are located. Therefore you must set your compiler's include path to point to the directory where you installed them. The 'curl-config'[3] tool can be used to get this information:
+<p class="level1">$ curl-config --cflags
+<p class="level1">
+<p class="level0"><a name="Linking"></a><span class="nroffip">Linking the Program with libcurl</span>
+<p class="level1">When having compiled the program, you need to link your object files to create a single executable. For that to succeed, you need to link with libcurl and possibly also with other libraries that libcurl itself depends on. Like the OpenSSL libraries, but even some standard OS libraries may be needed on the command line. To figure out which flags to use, once again the 'curl-config' tool comes to the rescue:
+<p class="level1">$ curl-config --libs
+<p class="level1">
+<p class="level0"><a name="SSL"></a><span class="nroffip">SSL or Not</span>
+<p class="level1">libcurl can be built and customized in many ways. One of the things that varies from different libraries and builds is the support for SSL-based transfers, like HTTPS and FTPS. If a supported SSL library was detected properly at build-time, libcurl will be built with SSL support. To figure out if an installed libcurl has been built with SSL support enabled, use 'curl-config' like this:
+<p class="level1">$ curl-config --feature
+<p class="level1">And if SSL is supported, the keyword 'SSL' will be written to stdout, possibly together with a few other features that could be either on or off on for different libcurls.
+<p class="level1">See also the "Features libcurl Provides" further down.
+<p class="level0"><a name="autoconf"></a><span class="nroffip">autoconf macro</span>
+<p class="level1">When you write your configure script to detect libcurl and setup variables accordingly, we offer a prewritten macro that probably does everything you need in this area. See docs/libcurl/libcurl.m4 file - it includes docs on how to use it.
+<p class="level1"><a name="Portable"></a><h2 class="nroffsh">Portable Code in a Portable World</h2>
+<p class="level0">The people behind libcurl have put a considerable effort to make libcurl work on a large amount of different operating systems and environments.
+<p class="level0">You program libcurl the same way on all platforms that libcurl runs on. There are only very few minor considerations that differ. If you just make sure to write your code portable enough, you may very well create yourself a very portable program. libcurl shouldn't stop you from that.
+<p class="level0"><a name="Global"></a><h2 class="nroffsh">Global Preparation</h2>
+<p class="level0">The program must initialize some of the libcurl functionality globally. That means it should be done exactly once, no matter how many times you intend to use the library. Once for your program's entire life time. This is done using
+<p class="level0">&nbsp;curl_global_init()
+<p class="level0">and it takes one parameter which is a bit pattern that tells libcurl what to initialize. Using <span Class="emphasis">CURL_GLOBAL_ALL</span> will make it initialize all known internal sub modules, and might be a good default option. The current two bits that are specified are:
+<p class="level1">
+<p class="level0"><a name="CURLGLOBALWIN32"></a><span class="nroffip">CURL_GLOBAL_WIN32</span>
+<p class="level1">which only does anything on Windows machines. When used on a Windows machine, it'll make libcurl initialize the win32 socket stuff. Without having that initialized properly, your program cannot use sockets properly. You should only do this once for each application, so if your program already does this or of another library in use does it, you should not tell libcurl to do this as well.
+<p class="level0"><a name="CURLGLOBALSSL"></a><span class="nroffip">CURL_GLOBAL_SSL</span>
+<p class="level1">which only does anything on libcurls compiled and built SSL-enabled. On these systems, this will make libcurl initialize the SSL library properly for this application. This only needs to be done once for each application so if your program or another library already does this, this bit should not be needed.
+<p class="level0">
+<p class="level0">libcurl has a default protection mechanism that detects if <a class="emphasis" href="./curl_global_init.html">curl_global_init(3)</a> hasn't been called by the time <a class="emphasis" href="./curl_easy_perform.html">curl_easy_perform(3)</a> is called and if that is the case, libcurl runs the function itself with a guessed bit pattern. Please note that depending solely on this is not considered nice nor very good.
+<p class="level0">When the program no longer uses libcurl, it should call <a class="emphasis" href="./curl_global_cleanup.html">curl_global_cleanup(3)</a>, which is the opposite of the init call. It will then do the reversed operations to cleanup the resources the <a class="emphasis" href="./curl_global_init.html">curl_global_init(3)</a> call initialized.
+<p class="level0">Repeated calls to <a class="emphasis" href="./curl_global_init.html">curl_global_init(3)</a> and <a class="emphasis" href="./curl_global_cleanup.html">curl_global_cleanup(3)</a> should be avoided. They should only be called once each.
+<p class="level0"><a name="Features"></a><h2 class="nroffsh">Features libcurl Provides</h2>
+<p class="level0">It is considered best-practice to determine libcurl features at run-time rather than at build-time (if possible of course). By calling <a class="emphasis" href="./curl_version_info.html">curl_version_info(3)</a> and checking out the details of the returned struct, your program can figure out exactly what the currently running libcurl supports.
+<p class="level0"><a name="Handle"></a><h2 class="nroffsh">Handle the Easy libcurl</h2>
+<p class="level0">libcurl first introduced the so called easy interface. All operations in the easy interface are prefixed with 'curl_easy'.
+<p class="level0">Recent libcurl versions also offer the multi interface. More about that interface, what it is targeted for and how to use it is detailed in a separate chapter further down. You still need to understand the easy interface first, so please continue reading for better understanding.
+<p class="level0">To use the easy interface, you must first create yourself an easy handle. You need one handle for each easy session you want to perform. Basically, you should use one handle for every thread you plan to use for transferring. You must never share the same handle in multiple threads.
+<p class="level0">Get an easy handle with
+<p class="level0">&nbsp;easyhandle = curl_easy_init();
+<p class="level0">It returns an easy handle. Using that you proceed to the next step: setting up your preferred actions. A handle is just a logic entity for the upcoming transfer or series of transfers.
+<p class="level0">You set properties and options for this handle using <a class="emphasis" href="./curl_easy_setopt.html">curl_easy_setopt(3)</a>. They control how the subsequent transfer or transfers will be made. Options remain set in the handle until set again to something different. Alas, multiple requests using the same handle will use the same options.
+<p class="level0">Many of the options you set in libcurl are "strings", pointers to data terminated with a zero byte. When you set strings with <a class="emphasis" href="./curl_easy_setopt.html">curl_easy_setopt(3)</a>, libcurl makes its own copy so that they don't need to be kept around in your application after being set[4].
+<p class="level0">One of the most basic properties to set in the handle is the URL. You set your preferred URL to transfer with CURLOPT_URL in a manner similar to:
+<p class="level0"><pre>
+<p class="level0">&nbsp;curl_easy_setopt(handle, CURLOPT_URL, "<a href="http://domain.com/">http://domain.com/</a>");
+ </pre>
+
+<p class="level0">
+<p class="level0">Let's assume for a while that you want to receive data as the URL identifies a remote resource you want to get here. Since you write a sort of application that needs this transfer, I assume that you would like to get the data passed to you directly instead of simply getting it passed to stdout. So, you write your own function that matches this prototype:
+<p class="level0">&nbsp;size_t write_data(void *buffer, size_t size, size_t nmemb, void *userp);
+<p class="level0">You tell libcurl to pass all data to this function by issuing a function similar to this:
+<p class="level0">&nbsp;curl_easy_setopt(easyhandle, CURLOPT_WRITEFUNCTION, write_data);
+<p class="level0">You can control what data your callback function gets in the fourth argument by setting another property:
+<p class="level0">&nbsp;curl_easy_setopt(easyhandle, CURLOPT_WRITEDATA, &internal_struct);
+<p class="level0">Using that property, you can easily pass local data between your application and the function that gets invoked by libcurl. libcurl itself won't touch the data you pass with <span Class="emphasis">CURLOPT_WRITEDATA</span>.
+<p class="level0">libcurl offers its own default internal callback that will take care of the data if you don't set the callback with <span Class="emphasis">CURLOPT_WRITEFUNCTION</span>. It will then simply output the received data to stdout. You can have the default callback write the data to a different file handle by passing a 'FILE *' to a file opened for writing with the <span Class="emphasis">CURLOPT_WRITEDATA</span> option.
+<p class="level0">Now, we need to take a step back and have a deep breath. Here's one of those rare platform-dependent nitpicks. Did you spot it? On some platforms[2], libcurl won't be able to operate on files opened by the program. Thus, if you use the default callback and pass in an open file with <span Class="emphasis">CURLOPT_WRITEDATA</span>, it will crash. You should therefore avoid this to make your program run fine virtually everywhere.
+<p class="level0">(<span Class="emphasis">CURLOPT_WRITEDATA</span> was formerly known as <span Class="emphasis">CURLOPT_FILE</span>. Both names still work and do the same thing).
+<p class="level0">If you're using libcurl as a win32 DLL, you MUST use the <span Class="emphasis">CURLOPT_WRITEFUNCTION</span> if you set <span Class="emphasis">CURLOPT_WRITEDATA</span> - or you will experience crashes.
+<p class="level0">There are of course many more options you can set, and we'll get back to a few of them later. Let's instead continue to the actual transfer:
+<p class="level0">&nbsp;success = curl_easy_perform(easyhandle);
+<p class="level0"><a class="emphasis" href="./curl_easy_perform.html">curl_easy_perform(3)</a> will connect to the remote site, do the necessary commands and receive the transfer. Whenever it receives data, it calls the callback function we previously set. The function may get one byte at a time, or it may get many kilobytes at once. libcurl delivers as much as possible as often as possible. Your callback function should return the number of bytes it "took care of". If that is not the exact same amount of bytes that was passed to it, libcurl will abort the operation and return with an error code.
+<p class="level0">When the transfer is complete, the function returns a return code that informs you if it succeeded in its mission or not. If a return code isn't enough for you, you can use the CURLOPT_ERRORBUFFER to point libcurl to a buffer of yours where it'll store a human readable error message as well.
+<p class="level0">If you then want to transfer another file, the handle is ready to be used again. Mind you, it is even preferred that you re-use an existing handle if you intend to make another transfer. libcurl will then attempt to re-use the previous connection.
+<p class="level0">For some protocols, downloading a file can involve a complicated process of logging in, setting the transfer mode, changing the current directory and finally transferring the file data. libcurl takes care of all that complication for you. Given simply the URL to a file, libcurl will take care of all the details needed to get the file moved from one machine to another.
+<p class="level0"><a name="Multi-threading"></a><h2 class="nroffsh">Multi-threading Issues</h2>
+<p class="level0">The first basic rule is that you must <span Class="bold">never</span> share a libcurl handle (be it easy or multi or whatever) between multiple threads. Only use one handle in one thread at a time.
+<p class="level0">libcurl is completely thread safe, except for two issues: signals and SSL/TLS handlers. Signals are used for timing out name resolves (during DNS lookup) - when built without c-ares support and not on Windows.
+<p class="level0">If you are accessing HTTPS or FTPS URLs in a multi-threaded manner, you are then of course using the underlying SSL library multi-threaded and those libs might have their own requirements on this issue. Basically, you need to provide one or two functions to allow it to function properly. For all details, see this:
+<p class="level0">OpenSSL
+<p class="level0">&nbsp;<a href="http://www.openssl.org/docs/crypto/threads.html">http://www.openssl.org/docs/crypto/threads.html</a>#DESCRIPTION
+<p class="level0">GnuTLS
+<p class="level0">&nbsp;<a href="http://www.gnu.org/software/gnutls/manual/html_node/">http://www.gnu.org/software/gnutls/manual/html_node/</a>Multi_002dthreaded-applications.html
+<p class="level0">NSS
+<p class="level0">&nbsp;is claimed to be thread-safe already without anything required.
+<p class="level0">PolarSSL
+<p class="level0">&nbsp;Required actions unknown.
+<p class="level0">yassl
+<p class="level0">&nbsp;Required actions unknown.
+<p class="level0">When using multiple threads you should set the CURLOPT_NOSIGNAL option to 1 for all handles. Everything will or might work fine except that timeouts are not honored during the DNS lookup - which you can work around by building libcurl with c-ares support. c-ares is a library that provides asynchronous name resolves. On some platforms, libcurl simply will not function properly multi-threaded unless this option is set.
+<p class="level0">Also, note that CURLOPT_DNS_USE_GLOBAL_CACHE is not thread-safe.
+<p class="level0"><a name="When"></a><h2 class="nroffsh">When It Doesn't Work</h2>
+<p class="level0">There will always be times when the transfer fails for some reason. You might have set the wrong libcurl option or misunderstood what the libcurl option actually does, or the remote server might return non-standard replies that confuse the library which then confuses your program.
+<p class="level0">There's one golden rule when these things occur: set the CURLOPT_VERBOSE option to 1. It'll cause the library to spew out the entire protocol details it sends, some internal info and some received protocol data as well (especially when using FTP). If you're using HTTP, adding the headers in the received output to study is also a clever way to get a better understanding why the server behaves the way it does. Include headers in the normal body output with CURLOPT_HEADER set 1.
+<p class="level0">Of course, there are bugs left. We need to know about them to be able to fix them, so we're quite dependent on your bug reports! When you do report suspected bugs in libcurl, please include as many details as you possibly can: a protocol dump that CURLOPT_VERBOSE produces, library version, as much as possible of your code that uses libcurl, operating system name and version, compiler name and version etc.
+<p class="level0">If CURLOPT_VERBOSE is not enough, you increase the level of debug data your application receive by using the CURLOPT_DEBUGFUNCTION.
+<p class="level0">Getting some in-depth knowledge about the protocols involved is never wrong, and if you're trying to do funny things, you might very well understand libcurl and how to use it better if you study the appropriate RFC documents at least briefly.
+<p class="level0"><a name="Upload"></a><h2 class="nroffsh">Upload Data to a Remote Site</h2>
+<p class="level0">libcurl tries to keep a protocol independent approach to most transfers, thus uploading to a remote FTP site is very similar to uploading data to a HTTP server with a PUT request.
+<p class="level0">Of course, first you either create an easy handle or you re-use one existing one. Then you set the URL to operate on just like before. This is the remote URL, that we now will upload.
+<p class="level0">Since we write an application, we most likely want libcurl to get the upload data by asking us for it. To make it do that, we set the read callback and the custom pointer libcurl will pass to our read callback. The read callback should have a prototype similar to:
+<p class="level0">&nbsp;size_t function(char *bufptr, size_t size, size_t nitems, void *userp);
+<p class="level0">Where bufptr is the pointer to a buffer we fill in with data to upload and size*nitems is the size of the buffer and therefore also the maximum amount of data we can return to libcurl in this call. The 'userp' pointer is the custom pointer we set to point to a struct of ours to pass private data between the application and the callback.
+<p class="level0">&nbsp;curl_easy_setopt(easyhandle, CURLOPT_READFUNCTION, read_function);
+<p class="level0">&nbsp;curl_easy_setopt(easyhandle, CURLOPT_READDATA, &filedata);
+<p class="level0">Tell libcurl that we want to upload:
+<p class="level0">&nbsp;curl_easy_setopt(easyhandle, CURLOPT_UPLOAD, 1L);
+<p class="level0">A few protocols won't behave properly when uploads are done without any prior knowledge of the expected file size. So, set the upload file size using the CURLOPT_INFILESIZE_LARGE for all known file sizes like this[1]:
+<p class="level0"><pre>
+<p class="level0">&nbsp;/* in this example, file_size must be an curl_off_t variable */
+ &nbsp;curl_easy_setopt(easyhandle, CURLOPT_INFILESIZE_LARGE, file_size);
+ </pre>
+
+<p class="level0">
+<p class="level0">When you call <a class="emphasis" href="./curl_easy_perform.html">curl_easy_perform(3)</a> this time, it'll perform all the necessary operations and when it has invoked the upload it'll call your supplied callback to get the data to upload. The program should return as much data as possible in every invoke, as that is likely to make the upload perform as fast as possible. The callback should return the number of bytes it wrote in the buffer. Returning 0 will signal the end of the upload.
+<p class="level0"><a name="Passwords"></a><h2 class="nroffsh">Passwords</h2>
+<p class="level0">Many protocols use or even require that user name and password are provided to be able to download or upload the data of your choice. libcurl offers several ways to specify them.
+<p class="level0">Most protocols support that you specify the name and password in the URL itself. libcurl will detect this and use them accordingly. This is written like this:
+<p class="level0">&nbsp;protocol://user:password@example.com/path/
+<p class="level0">If you need any odd letters in your user name or password, you should enter them URL encoded, as %XX where XX is a two-digit hexadecimal number.
+<p class="level0">libcurl also provides options to set various passwords. The user name and password as shown embedded in the URL can instead get set with the CURLOPT_USERPWD option. The argument passed to libcurl should be a char * to a string in the format "user:password". In a manner like this:
+<p class="level0">&nbsp;curl_easy_setopt(easyhandle, CURLOPT_USERPWD, "myname:thesecret");
+<p class="level0">Another case where name and password might be needed at times, is for those users who need to authenticate themselves to a proxy they use. libcurl offers another option for this, the CURLOPT_PROXYUSERPWD. It is used quite similar to the CURLOPT_USERPWD option like this:
+<p class="level0">&nbsp;curl_easy_setopt(easyhandle, CURLOPT_PROXYUSERPWD, "myname:thesecret");
+<p class="level0">There's a long time UNIX "standard" way of storing ftp user names and passwords, namely in the $HOME/.netrc file. The file should be made private so that only the user may read it (see also the "Security Considerations" chapter), as it might contain the password in plain text. libcurl has the ability to use this file to figure out what set of user name and password to use for a particular host. As an extension to the normal functionality, libcurl also supports this file for non-FTP protocols such as HTTP. To make curl use this file, use the CURLOPT_NETRC option:
+<p class="level0">&nbsp;curl_easy_setopt(easyhandle, CURLOPT_NETRC, 1L);
+<p class="level0">And a very basic example of how such a .netrc file may look like:
+<p class="level0"><pre>
+<p class="level0">&nbsp;machine myhost.mydomain.com
+ &nbsp;login userlogin
+ &nbsp;password secretword
+ </pre>
+
+<p class="level0">
+<p class="level0">All these examples have been cases where the password has been optional, or at least you could leave it out and have libcurl attempt to do its job without it. There are times when the password isn't optional, like when you're using an SSL private key for secure transfers.
+<p class="level0">To pass the known private key password to libcurl:
+<p class="level0">&nbsp;curl_easy_setopt(easyhandle, CURLOPT_KEYPASSWD, "keypassword");
+<p class="level0"><a name="HTTP"></a><h2 class="nroffsh">HTTP Authentication</h2>
+<p class="level0">The previous chapter showed how to set user name and password for getting URLs that require authentication. When using the HTTP protocol, there are many different ways a client can provide those credentials to the server and you can control which way libcurl will (attempt to) use them. The default HTTP authentication method is called 'Basic', which is sending the name and password in clear-text in the HTTP request, base64-encoded. This is insecure.
+<p class="level0">At the time of this writing, libcurl can be built to use: Basic, Digest, NTLM, Negotiate, GSS-Negotiate and SPNEGO. You can tell libcurl which one to use with CURLOPT_HTTPAUTH as in:
+<p class="level0">&nbsp;curl_easy_setopt(easyhandle, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST);
+<p class="level0">And when you send authentication to a proxy, you can also set authentication type the same way but instead with CURLOPT_PROXYAUTH:
+<p class="level0">&nbsp;curl_easy_setopt(easyhandle, CURLOPT_PROXYAUTH, CURLAUTH_NTLM);
+<p class="level0">Both these options allow you to set multiple types (by ORing them together), to make libcurl pick the most secure one out of the types the server/proxy claims to support. This method does however add a round-trip since libcurl must first ask the server what it supports:
+<p class="level0">&nbsp;curl_easy_setopt(easyhandle, CURLOPT_HTTPAUTH, &nbsp;CURLAUTH_DIGEST|CURLAUTH_BASIC);
+<p class="level0">For convenience, you can use the 'CURLAUTH_ANY' define (instead of a list with specific types) which allows libcurl to use whatever method it wants.
+<p class="level0">When asking for multiple types, libcurl will pick the available one it considers "best" in its own internal order of preference.
+<p class="level0"><a name="HTTP"></a><h2 class="nroffsh">HTTP POSTing</h2>
+<p class="level0">We get many questions regarding how to issue HTTP POSTs with libcurl the proper way. This chapter will thus include examples using both different versions of HTTP POST that libcurl supports.
+<p class="level0">The first version is the simple POST, the most common version, that most HTML pages using the &lt;form&gt; tag uses. We provide a pointer to the data and tell libcurl to post it all to the remote site:
+<p class="level0"><pre>
+<p class="level0">&nbsp; char *data="name=daniel&project=curl";
+ &nbsp; curl_easy_setopt(easyhandle, CURLOPT_POSTFIELDS, data);
+ &nbsp; curl_easy_setopt(easyhandle, CURLOPT_URL, "<a href="http://posthere.com/">http://posthere.com/</a>");
+ <p class="level0">&nbsp; curl_easy_perform(easyhandle); /* post away! */
+ </pre>
+
+<p class="level0">
+<p class="level0">Simple enough, huh? Since you set the POST options with the CURLOPT_POSTFIELDS, this automatically switches the handle to use POST in the upcoming request.
+<p class="level0">Ok, so what if you want to post binary data that also requires you to set the Content-Type: header of the post? Well, binary posts prevent libcurl from being able to do strlen() on the data to figure out the size, so therefore we must tell libcurl the size of the post data. Setting headers in libcurl requests are done in a generic way, by building a list of our own headers and then passing that list to libcurl.
+<p class="level0"><pre>
+<p class="level0">&nbsp;struct curl_slist *headers=NULL;
+ &nbsp;headers = curl_slist_append(headers, "Content-Type: text/xml");
+ <p class="level0">&nbsp;/* post binary data */
+ &nbsp;curl_easy_setopt(easyhandle, CURLOPT_POSTFIELDS, binaryptr);
+ <p class="level0">&nbsp;/* set the size of the postfields data */
+ &nbsp;curl_easy_setopt(easyhandle, CURLOPT_POSTFIELDSIZE, 23L);
+ <p class="level0">&nbsp;/* pass our list of custom made headers */
+ &nbsp;curl_easy_setopt(easyhandle, CURLOPT_HTTPHEADER, headers);
+ <p class="level0">&nbsp;curl_easy_perform(easyhandle); /* post away! */
+ <p class="level0">&nbsp;curl_slist_free_all(headers); /* free the header list */
+ </pre>
+
+<p class="level0">
+<p class="level0">While the simple examples above cover the majority of all cases where HTTP POST operations are required, they don't do multi-part formposts. Multi-part formposts were introduced as a better way to post (possibly large) binary data and were first documented in the RFC1867 (updated in RFC2388). They're called multi-part because they're built by a chain of parts, each part being a single unit of data. Each part has its own name and contents. You can in fact create and post a multi-part formpost with the regular libcurl POST support described above, but that would require that you build a formpost yourself and provide to libcurl. To make that easier, libcurl provides <a class="emphasis" href="./curl_formadd.html">curl_formadd(3)</a>. Using this function, you add parts to the form. When you're done adding parts, you post the whole form.
+<p class="level0">The following example sets two simple text parts with plain textual contents, and then a file with binary contents and uploads the whole thing.
+<p class="level0"><pre>
+<p class="level0">&nbsp;struct curl_httppost *post=NULL;
+ &nbsp;struct curl_httppost *last=NULL;
+ &nbsp;curl_formadd(&post, &last,
+ &nbsp; CURLFORM_COPYNAME, "name",
+ &nbsp; CURLFORM_COPYCONTENTS, "daniel", CURLFORM_END);
+ &nbsp;curl_formadd(&post, &last,
+ &nbsp; CURLFORM_COPYNAME, "project",
+ &nbsp; CURLFORM_COPYCONTENTS, "curl", CURLFORM_END);
+ &nbsp;curl_formadd(&post, &last,
+ &nbsp; CURLFORM_COPYNAME, "logotype-image",
+ &nbsp; CURLFORM_FILECONTENT, "curl.png", CURLFORM_END);
+ <p class="level0">&nbsp;/* Set the form info */
+ &nbsp;curl_easy_setopt(easyhandle, CURLOPT_HTTPPOST, post);
+ <p class="level0">&nbsp;curl_easy_perform(easyhandle); /* post away! */
+ <p class="level0">&nbsp;/* free the post data again */
+ &nbsp;curl_formfree(post);
+ </pre>
+
+<p class="level0">
+<p class="level0">Multipart formposts are chains of parts using MIME-style separators and headers. It means that each one of these separate parts get a few headers set that describe the individual content-type, size etc. To enable your application to handicraft this formpost even more, libcurl allows you to supply your own set of custom headers to such an individual form part. You can of course supply headers to as many parts as you like, but this little example will show how you set headers to one specific part when you add that to the post handle:
+<p class="level0"><pre>
+<p class="level0">&nbsp;struct curl_slist *headers=NULL;
+ &nbsp;headers = curl_slist_append(headers, "Content-Type: text/xml");
+ <p class="level0">&nbsp;curl_formadd(&post, &last,
+ &nbsp; CURLFORM_COPYNAME, "logotype-image",
+ &nbsp; CURLFORM_FILECONTENT, "curl.xml",
+ &nbsp; CURLFORM_CONTENTHEADER, headers,
+ &nbsp; CURLFORM_END);
+ <p class="level0">&nbsp;curl_easy_perform(easyhandle); /* post away! */
+ <p class="level0">&nbsp;curl_formfree(post); /* free post */
+ &nbsp;curl_slist_free_all(headers); /* free custom header list */
+ </pre>
+
+<p class="level0">
+<p class="level0">Since all options on an easyhandle are "sticky", they remain the same until changed even if you do call <a class="emphasis" href="./curl_easy_perform.html">curl_easy_perform(3)</a>, you may need to tell curl to go back to a plain GET request if you intend to do one as your next request. You force an easyhandle to go back to GET by using the CURLOPT_HTTPGET option:
+<p class="level0">&nbsp;curl_easy_setopt(easyhandle, CURLOPT_HTTPGET, 1L);
+<p class="level0">Just setting CURLOPT_POSTFIELDS to "" or NULL will *not* stop libcurl from doing a POST. It will just make it POST without any data to send!
+<p class="level0"><a name="Showing"></a><h2 class="nroffsh">Showing Progress</h2>
+<p class="level0">
+<p class="level0">For historical and traditional reasons, libcurl has a built-in progress meter that can be switched on and then makes it present a progress meter in your terminal.
+<p class="level0">Switch on the progress meter by, oddly enough, setting CURLOPT_NOPROGRESS to zero. This option is set to 1 by default.
+<p class="level0">For most applications however, the built-in progress meter is useless and what instead is interesting is the ability to specify a progress callback. The function pointer you pass to libcurl will then be called on irregular intervals with information about the current transfer.
+<p class="level0">Set the progress callback by using CURLOPT_PROGRESSFUNCTION. And pass a pointer to a function that matches this prototype:
+<p class="level0"><pre>
+<p class="level0">&nbsp;int progress_callback(void *clientp,
+ &nbsp; double dltotal,
+ &nbsp; double dlnow,
+ &nbsp; double ultotal,
+ &nbsp; double ulnow);
+ </pre>
+
+<p class="level0">
+<p class="level0">If any of the input arguments is unknown, a 0 will be passed. The first argument, the 'clientp' is the pointer you pass to libcurl with CURLOPT_PROGRESSDATA. libcurl won't touch it.
+<p class="level0"><a name="libcurl"></a><h2 class="nroffsh">libcurl with C++</h2>
+<p class="level0">
+<p class="level0">There's basically only one thing to keep in mind when using C++ instead of C when interfacing libcurl:
+<p class="level0">The callbacks CANNOT be non-static class member functions
+<p class="level0">Example C++ code:
+<p class="level0"><pre>
+<p class="level0">class AClass {
+ &nbsp; static size_t write_data(void *ptr, size_t size, size_t nmemb,
+ &nbsp; void *ourpointer)
+ &nbsp; {
+ &nbsp; /* do what you want with the data */
+ &nbsp; }
+ &nbsp;}
+ </pre>
+
+<p class="level0">
+<p class="level0"><a name="Proxies"></a><h2 class="nroffsh">Proxies</h2>
+<p class="level0">
+<p class="level0">What "proxy" means according to Merriam-Webster: "a person authorized to act for another" but also "the agency, function, or office of a deputy who acts as a substitute for another".
+<p class="level0">Proxies are exceedingly common these days. Companies often only offer Internet access to employees through their proxies. Network clients or user-agents ask the proxy for documents, the proxy does the actual request and then it returns them.
+<p class="level0">libcurl supports SOCKS and HTTP proxies. When a given URL is wanted, libcurl will ask the proxy for it instead of trying to connect to the actual host identified in the URL.
+<p class="level0">If you're using a SOCKS proxy, you may find that libcurl doesn't quite support all operations through it.
+<p class="level0">For HTTP proxies: the fact that the proxy is a HTTP proxy puts certain restrictions on what can actually happen. A requested URL that might not be a HTTP URL will be still be passed to the HTTP proxy to deliver back to libcurl. This happens transparently, and an application may not need to know. I say "may", because at times it is very important to understand that all operations over a HTTP proxy use the HTTP protocol. For example, you can't invoke your own custom FTP commands or even proper FTP directory listings.
+<p class="level0">
+<p class="level0"><a name="Proxy"></a><span class="nroffip">Proxy Options</span>
+<p class="level1">
+<p class="level1">To tell libcurl to use a proxy at a given port number:
+<p class="level1">&nbsp;curl_easy_setopt(easyhandle, CURLOPT_PROXY, "proxy-host.com:8080");
+<p class="level1">Some proxies require user authentication before allowing a request, and you pass that information similar to this:
+<p class="level1">&nbsp;curl_easy_setopt(easyhandle, CURLOPT_PROXYUSERPWD, "user:password");
+<p class="level1">If you want to, you can specify the host name only in the CURLOPT_PROXY option, and set the port number separately with CURLOPT_PROXYPORT.
+<p class="level1">Tell libcurl what kind of proxy it is with CURLOPT_PROXYTYPE (if not, it will default to assume a HTTP proxy):
+<p class="level1">&nbsp;curl_easy_setopt(easyhandle, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS4);
+<p class="level1">
+<p class="level0"><a name="Environment"></a><span class="nroffip">Environment Variables</span>
+<p class="level1">
+<p class="level1">libcurl automatically checks and uses a set of environment variables to know what proxies to use for certain protocols. The names of the variables are following an ancient de facto standard and are built up as "[protocol]_proxy" (note the lower casing). Which makes the variable 'http_proxy' checked for a name of a proxy to use when the input URL is HTTP. Following the same rule, the variable named 'ftp_proxy' is checked for FTP URLs. Again, the proxies are always HTTP proxies, the different names of the variables simply allows different HTTP proxies to be used.
+<p class="level1">The proxy environment variable contents should be in the format "[protocol://][user:password@]machine[:port]". Where the protocol:// part is simply ignored if present (so <a href="http://proxy">http://proxy</a> and bluerk://proxy will do the same) and the optional port number specifies on which port the proxy operates on the host. If not specified, the internal default port number will be used and that is most likely *not* the one you would like it to be.
+<p class="level1">There are two special environment variables. 'all_proxy' is what sets proxy for any URL in case the protocol specific variable wasn't set, and 'no_proxy' defines a list of hosts that should not use a proxy even though a variable may say so. If 'no_proxy' is a plain asterisk ("*") it matches all hosts.
+<p class="level1">To explicitly disable libcurl's checking for and using the proxy environment variables, set the proxy name to "" - an empty string - with CURLOPT_PROXY.
+<p class="level0"><a name="SSL"></a><span class="nroffip">SSL and Proxies</span>
+<p class="level1">
+<p class="level1">SSL is for secure point-to-point connections. This involves strong encryption and similar things, which effectively makes it impossible for a proxy to operate as a "man in between" which the proxy's task is, as previously discussed. Instead, the only way to have SSL work over a HTTP proxy is to ask the proxy to tunnel trough everything without being able to check or fiddle with the traffic.
+<p class="level1">Opening an SSL connection over a HTTP proxy is therefor a matter of asking the proxy for a straight connection to the target host on a specified port. This is made with the HTTP request CONNECT. ("please mr proxy, connect me to that remote host").
+<p class="level1">Because of the nature of this operation, where the proxy has no idea what kind of data that is passed in and out through this tunnel, this breaks some of the very few advantages that come from using a proxy, such as caching. Many organizations prevent this kind of tunneling to other destination port numbers than 443 (which is the default HTTPS port number).
+<p class="level1">
+<p class="level0"><a name="Tunneling"></a><span class="nroffip">Tunneling Through Proxy</span>
+<p class="level1">As explained above, tunneling is required for SSL to work and often even restricted to the operation intended for SSL; HTTPS.
+<p class="level1">This is however not the only time proxy-tunneling might offer benefits to you or your application.
+<p class="level1">As tunneling opens a direct connection from your application to the remote machine, it suddenly also re-introduces the ability to do non-HTTP operations over a HTTP proxy. You can in fact use things such as FTP upload or FTP custom commands this way.
+<p class="level1">Again, this is often prevented by the administrators of proxies and is rarely allowed.
+<p class="level1">Tell libcurl to use proxy tunneling like this:
+<p class="level1">&nbsp;curl_easy_setopt(easyhandle, CURLOPT_HTTPPROXYTUNNEL, 1L);
+<p class="level1">In fact, there might even be times when you want to do plain HTTP operations using a tunnel like this, as it then enables you to operate on the remote server instead of asking the proxy to do so. libcurl will not stand in the way for such innovative actions either!
+<p class="level1">
+<p class="level0"><a name="Proxy"></a><span class="nroffip">Proxy Auto-Config</span>
+<p class="level1">
+<p class="level1">Netscape first came up with this. It is basically a web page (usually using a .pac extension) with a Javascript that when executed by the browser with the requested URL as input, returns information to the browser on how to connect to the URL. The returned information might be "DIRECT" (which means no proxy should be used), "PROXY host:port" (to tell the browser where the proxy for this particular URL is) or "SOCKS host:port" (to direct the browser to a SOCKS proxy).
+<p class="level1">libcurl has no means to interpret or evaluate Javascript and thus it doesn't support this. If you get yourself in a position where you face this nasty invention, the following advice have been mentioned and used in the past:
+<p class="level1">- Depending on the Javascript complexity, write up a script that translates it to another language and execute that.
+<p class="level1">- Read the Javascript code and rewrite the same logic in another language.
+<p class="level1">- Implement a Javascript interpreter; people have successfully used the Mozilla Javascript engine in the past.
+<p class="level1">- Ask your admins to stop this, for a static proxy setup or similar.
+<p class="level1"><a name="Persistence"></a><h2 class="nroffsh">Persistence Is The Way to Happiness</h2>
+<p class="level0">
+<p class="level0">Re-cycling the same easy handle several times when doing multiple requests is the way to go.
+<p class="level0">After each single <a class="emphasis" href="./curl_easy_perform.html">curl_easy_perform(3)</a> operation, libcurl will keep the connection alive and open. A subsequent request using the same easy handle to the same host might just be able to use the already open connection! This reduces network impact a lot.
+<p class="level0">Even if the connection is dropped, all connections involving SSL to the same host again, will benefit from libcurl's session ID cache that drastically reduces re-connection time.
+<p class="level0">FTP connections that are kept alive save a lot of time, as the command- response round-trips are skipped, and also you don't risk getting blocked without permission to login again like on many FTP servers only allowing N persons to be logged in at the same time.
+<p class="level0">libcurl caches DNS name resolving results, to make lookups of a previously looked up name a lot faster.
+<p class="level0">Other interesting details that improve performance for subsequent requests may also be added in the future.
+<p class="level0">Each easy handle will attempt to keep the last few connections alive for a while in case they are to be used again. You can set the size of this "cache" with the CURLOPT_MAXCONNECTS option. Default is 5. There is very seldom any point in changing this value, and if you think of changing this it is often just a matter of thinking again.
+<p class="level0">To force your upcoming request to not use an already existing connection (it will even close one first if there happens to be one alive to the same host you're about to operate on), you can do that by setting CURLOPT_FRESH_CONNECT to 1. In a similar spirit, you can also forbid the upcoming request to be "lying" around and possibly get re-used after the request by setting CURLOPT_FORBID_REUSE to 1.
+<p class="level0"><a name="HTTP"></a><h2 class="nroffsh">HTTP Headers Used by libcurl</h2>
+<p class="level0">When you use libcurl to do HTTP requests, it'll pass along a series of headers automatically. It might be good for you to know and understand these. You can replace or remove them by using the CURLOPT_HTTPHEADER option.
+<p class="level0">
+<p class="level0"><a name="Host"></a><span class="nroffip">Host</span>
+<p class="level1">This header is required by HTTP 1.1 and even many 1.0 servers and should be the name of the server we want to talk to. This includes the port number if anything but default.
+<p class="level1">
+<p class="level0"><a name="Pragma"></a><span class="nroffip">Pragma</span>
+<p class="level1">"no-cache". Tells a possible proxy to not grab a copy from the cache but to fetch a fresh one.
+<p class="level1">
+<p class="level0"><a name="Accept"></a><span class="nroffip">Accept</span>
+<p class="level1">"*/*".
+<p class="level1">
+<p class="level0"><a name="Expect"></a><span class="nroffip">Expect</span>
+<p class="level1">When doing POST requests, libcurl sets this header to "100-continue" to ask the server for an "OK" message before it proceeds with sending the data part of the post. If the POSTed data amount is deemed "small", libcurl will not use this header.
+<p class="level1"><a name="Customizing"></a><h2 class="nroffsh">Customizing Operations</h2>
+<p class="level0">There is an ongoing development today where more and more protocols are built upon HTTP for transport. This has obvious benefits as HTTP is a tested and reliable protocol that is widely deployed and has excellent proxy-support.
+<p class="level0">When you use one of these protocols, and even when doing other kinds of programming you may need to change the traditional HTTP (or FTP or...) manners. You may need to change words, headers or various data.
+<p class="level0">libcurl is your friend here too.
+<p class="level0">
+<p class="level0"><a name="CUSTOMREQUEST"></a><span class="nroffip">CUSTOMREQUEST</span>
+<p class="level1">If just changing the actual HTTP request keyword is what you want, like when GET, HEAD or POST is not good enough for you, CURLOPT_CUSTOMREQUEST is there for you. It is very simple to use:
+<p class="level1">&nbsp;curl_easy_setopt(easyhandle, CURLOPT_CUSTOMREQUEST, "MYOWNREQUEST");
+<p class="level1">When using the custom request, you change the request keyword of the actual request you are performing. Thus, by default you make a GET request but you can also make a POST operation (as described before) and then replace the POST keyword if you want to. You're the boss.
+<p class="level1">
+<p class="level0"><a name="Modify"></a><span class="nroffip">Modify Headers</span>
+<p class="level1">HTTP-like protocols pass a series of headers to the server when doing the request, and you're free to pass any amount of extra headers that you think fit. Adding headers is this easy:
+<p class="level1"><pre>
+<p class="level1">&nbsp;struct curl_slist *headers=NULL; /* init to NULL is important */
+ <p class="level1">&nbsp;headers = curl_slist_append(headers, "Hey-server-hey: how are you?");
+ &nbsp;headers = curl_slist_append(headers, "X-silly-content: yes");
+ <p class="level1">&nbsp;/* pass our list of custom made headers */
+ &nbsp;curl_easy_setopt(easyhandle, CURLOPT_HTTPHEADER, headers);
+ <p class="level1">&nbsp;curl_easy_perform(easyhandle); /* transfer http */
+ <p class="level1">&nbsp;curl_slist_free_all(headers); /* free the header list */
+ </pre>
+
+<p class="level1">
+<p class="level1">... and if you think some of the internally generated headers, such as Accept: or Host: don't contain the data you want them to contain, you can replace them by simply setting them too:
+<p class="level1"><pre>
+<p class="level1">&nbsp;headers = curl_slist_append(headers, "Accept: Agent-007");
+ &nbsp;headers = curl_slist_append(headers, "Host: munged.host.line");
+ </pre>
+
+<p class="level1">
+<p class="level1">
+<p class="level0"><a name="Delete"></a><span class="nroffip">Delete Headers</span>
+<p class="level1">If you replace an existing header with one with no contents, you will prevent the header from being sent. For instance, if you want to completely prevent the "Accept:" header from being sent, you can disable it with code similar to this:
+<p class="level1">&nbsp;headers = curl_slist_append(headers, "Accept:");
+<p class="level1">Both replacing and canceling internal headers should be done with careful consideration and you should be aware that you may violate the HTTP protocol when doing so.
+<p class="level1">
+<p class="level0"><a name="Enforcing"></a><span class="nroffip">Enforcing chunked transfer-encoding</span>
+<p class="level1">
+<p class="level1">By making sure a request uses the custom header "Transfer-Encoding: chunked" when doing a non-GET HTTP operation, libcurl will switch over to "chunked" upload, even though the size of the data to upload might be known. By default, libcurl usually switches over to chunked upload automatically if the upload data size is unknown.
+<p class="level1">
+<p class="level0"><a name="HTTP"></a><span class="nroffip">HTTP Version</span>
+<p class="level1">
+<p class="level1">All HTTP requests includes the version number to tell the server which version we support. libcurl speaks HTTP 1.1 by default. Some very old servers don't like getting 1.1-requests and when dealing with stubborn old things like that, you can tell libcurl to use 1.0 instead by doing something like this:
+<p class="level1">&nbsp;curl_easy_setopt(easyhandle, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
+<p class="level1">
+<p class="level0"><a name="FTP"></a><span class="nroffip">FTP Custom Commands</span>
+<p class="level1">
+<p class="level1">Not all protocols are HTTP-like, and thus the above may not help you when you want to make, for example, your FTP transfers to behave differently.
+<p class="level1">Sending custom commands to a FTP server means that you need to send the commands exactly as the FTP server expects them (RFC959 is a good guide here), and you can only use commands that work on the control-connection alone. All kinds of commands that require data interchange and thus need a data-connection must be left to libcurl's own judgement. Also be aware that libcurl will do its very best to change directory to the target directory before doing any transfer, so if you change directory (with CWD or similar) you might confuse libcurl and then it might not attempt to transfer the file in the correct remote directory.
+<p class="level1">A little example that deletes a given file before an operation:
+<p class="level1"><pre>
+<p class="level1">&nbsp;headers = curl_slist_append(headers, "DELE file-to-remove");
+ <p class="level1">&nbsp;/* pass the list of custom commands to the handle */
+ &nbsp;curl_easy_setopt(easyhandle, CURLOPT_QUOTE, headers);
+ <p class="level1">&nbsp;curl_easy_perform(easyhandle); /* transfer ftp data! */
+ <p class="level1">&nbsp;curl_slist_free_all(headers); /* free the header list */
+ </pre>
+
+<p class="level1">
+<p class="level1">If you would instead want this operation (or chain of operations) to happen _after_ the data transfer took place the option to <a class="emphasis" href="./curl_easy_setopt.html">curl_easy_setopt(3)</a> would instead be called CURLOPT_POSTQUOTE and used the exact same way.
+<p class="level1">The custom FTP command will be issued to the server in the same order they are added to the list, and if a command gets an error code returned back from the server, no more commands will be issued and libcurl will bail out with an error code (CURLE_QUOTE_ERROR). Note that if you use CURLOPT_QUOTE to send commands before a transfer, no transfer will actually take place when a quote command has failed.
+<p class="level1">If you set the CURLOPT_HEADER to 1, you will tell libcurl to get information about the target file and output "headers" about it. The headers will be in "HTTP-style", looking like they do in HTTP.
+<p class="level1">The option to enable headers or to run custom FTP commands may be useful to combine with CURLOPT_NOBODY. If this option is set, no actual file content transfer will be performed.
+<p class="level1">
+<p class="level0"><a name="FTP"></a><span class="nroffip">FTP Custom CUSTOMREQUEST</span>
+<p class="level1">If you do want to list the contents of a FTP directory using your own defined FTP command, CURLOPT_CUSTOMREQUEST will do just that. "NLST" is the default one for listing directories but you're free to pass in your idea of a good alternative.
+<p class="level1"><a name="Cookies"></a><h2 class="nroffsh">Cookies Without Chocolate Chips</h2>
+<p class="level0">In the HTTP sense, a cookie is a name with an associated value. A server sends the name and value to the client, and expects it to get sent back on every subsequent request to the server that matches the particular conditions set. The conditions include that the domain name and path match and that the cookie hasn't become too old.
+<p class="level0">In real-world cases, servers send new cookies to replace existing ones to update them. Server use cookies to "track" users and to keep "sessions".
+<p class="level0">Cookies are sent from server to clients with the header Set-Cookie: and they're sent from clients to servers with the Cookie: header.
+<p class="level0">To just send whatever cookie you want to a server, you can use CURLOPT_COOKIE to set a cookie string like this:
+<p class="level0">&nbsp;curl_easy_setopt(easyhandle, CURLOPT_COOKIE, "name1=var1; name2=var2;");
+<p class="level0">In many cases, that is not enough. You might want to dynamically save whatever cookies the remote server passes to you, and make sure those cookies are then used accordingly on later requests.
+<p class="level0">One way to do this, is to save all headers you receive in a plain file and when you make a request, you tell libcurl to read the previous headers to figure out which cookies to use. Set the header file to read cookies from with CURLOPT_COOKIEFILE.
+<p class="level0">The CURLOPT_COOKIEFILE option also automatically enables the cookie parser in libcurl. Until the cookie parser is enabled, libcurl will not parse or understand incoming cookies and they will just be ignored. However, when the parser is enabled the cookies will be understood and the cookies will be kept in memory and used properly in subsequent requests when the same handle is used. Many times this is enough, and you may not have to save the cookies to disk at all. Note that the file you specify to CURLOPT_COOKIEFILE doesn't have to exist to enable the parser, so a common way to just enable the parser and not read any cookies is to use the name of a file you know doesn't exist.
+<p class="level0">If you would rather use existing cookies that you've previously received with your Netscape or Mozilla browsers, you can make libcurl use that cookie file as input. The CURLOPT_COOKIEFILE is used for that too, as libcurl will automatically find out what kind of file it is and act accordingly.
+<p class="level0">Perhaps the most advanced cookie operation libcurl offers, is saving the entire internal cookie state back into a Netscape/Mozilla formatted cookie file. We call that the cookie-jar. When you set a file name with CURLOPT_COOKIEJAR, that file name will be created and all received cookies will be stored in it when <a class="emphasis" href="./curl_easy_cleanup.html">curl_easy_cleanup(3)</a> is called. This enables cookies to get passed on properly between multiple handles without any information getting lost.
+<p class="level0"><a name="FTP"></a><h2 class="nroffsh">FTP Peculiarities We Need</h2>
+<p class="level0">
+<p class="level0">FTP transfers use a second TCP/IP connection for the data transfer. This is usually a fact you can forget and ignore but at times this fact will come back to haunt you. libcurl offers several different ways to customize how the second connection is being made.
+<p class="level0">libcurl can either connect to the server a second time or tell the server to connect back to it. The first option is the default and it is also what works best for all the people behind firewalls, NATs or IP-masquerading setups. libcurl then tells the server to open up a new port and wait for a second connection. This is by default attempted with EPSV first, and if that doesn't work it tries PASV instead. (EPSV is an extension to the original FTP spec and does not exist nor work on all FTP servers.)
+<p class="level0">You can prevent libcurl from first trying the EPSV command by setting CURLOPT_FTP_USE_EPSV to zero.
+<p class="level0">In some cases, you will prefer to have the server connect back to you for the second connection. This might be when the server is perhaps behind a firewall or something and only allows connections on a single port. libcurl then informs the remote server which IP address and port number to connect to. This is made with the CURLOPT_FTPPORT option. If you set it to "-", libcurl will use your system's "default IP address". If you want to use a particular IP, you can set the full IP address, a host name to resolve to an IP address or even a local network interface name that libcurl will get the IP address from.
+<p class="level0">When doing the "PORT" approach, libcurl will attempt to use the EPRT and the LPRT before trying PORT, as they work with more protocols. You can disable this behavior by setting CURLOPT_FTP_USE_EPRT to zero.
+<p class="level0"><a name="Headers"></a><h2 class="nroffsh">Headers Equal Fun</h2>
+<p class="level0">
+<p class="level0">Some protocols provide "headers", meta-data separated from the normal data. These headers are by default not included in the normal data stream, but you can make them appear in the data stream by setting CURLOPT_HEADER to 1.
+<p class="level0">What might be even more useful, is libcurl's ability to separate the headers from the data and thus make the callbacks differ. You can for example set a different pointer to pass to the ordinary write callback by setting CURLOPT_WRITEHEADER.
+<p class="level0">Or, you can set an entirely separate function to receive the headers, by using CURLOPT_HEADERFUNCTION.
+<p class="level0">The headers are passed to the callback function one by one, and you can depend on that fact. It makes it easier for you to add custom header parsers etc.
+<p class="level0">"Headers" for FTP transfers equal all the FTP server responses. They aren't actually true headers, but in this case we pretend they are! ;-)
+<p class="level0"><a name="Post"></a><h2 class="nroffsh">Post Transfer Information</h2>
+<p class="level0">
+<p class="level0">&nbsp;[ curl_easy_getinfo ]
+<p class="level0"><a name="Security"></a><h2 class="nroffsh">Security Considerations</h2>
+<p class="level0">
+<p class="level0">The libcurl project takes security seriously. The library is written with caution and precautions are taken to mitigate many kinds of risks encountered while operating with potentially malicious servers on the Internet. It is a powerful library, however, which allows application writers to make trade offs between ease of writing and exposure to potential risky operations. If used the right way, you can use libcurl to transfer data pretty safely.
+<p class="level0">Many applications are used in closed networks where users and servers can be trusted, but many others are used on arbitrary servers and are fed input from potentially untrusted users. Following is a discussion about some risks in the ways in which applications commonly use libcurl and potential mitigations of those risks. It is by no means comprehensive, but shows classes of attacks that robust applications should consider. The Common Weakness Enumeration project at <a href="http://cwe.mitre.org/">http://cwe.mitre.org/</a> is a good reference for many of these and similar types of weaknesses of which application writers should be aware.
+<p class="level0">
+<p class="level0"><a name="Command"></a><span class="nroffip">Command Lines</span>
+<p class="level1">If you use a command line tool (such as curl) that uses libcurl, and you give options to the tool on the command line those options can very likely get read by other users of your system when they use 'ps' or other tools to list currently running processes.
+<p class="level1">To avoid this problem, never feed sensitive things to programs using command line options. Write them to a protected file and use the -K option to avoid this.
+<p class="level1">
+<p class="level0"><a name="netrc"></a><span class="nroffip">.netrc</span>
+<p class="level1">.netrc is a pretty handy file/feature that allows you to login quickly and automatically to frequently visited sites. The file contains passwords in clear text and is a real security risk. In some cases, your .netrc is also stored in a home directory that is NFS mounted or used on another network based file system, so the clear text password will fly through your network every time anyone reads that file!
+<p class="level1">To avoid this problem, don't use .netrc files and never store passwords in plain text anywhere.
+<p class="level1">
+<p class="level0"><a name="Clear"></a><span class="nroffip">Clear Text Passwords</span>
+<p class="level1">Many of the protocols libcurl supports send name and password unencrypted as clear text (HTTP Basic authentication, FTP, TELNET etc). It is very easy for anyone on your network or a network nearby yours to just fire up a network analyzer tool and eavesdrop on your passwords. Don't let the fact that HTTP Basic uses base64 encoded passwords fool you. They may not look readable at a first glance, but they very easily "deciphered" by anyone within seconds.
+<p class="level1">To avoid this problem, use HTTP authentication methods or other protocols that don't let snoopers see your password: HTTP with Digest, NTLM or GSS authentication, HTTPS, FTPS, SCP, SFTP and FTP-Kerberos are a few examples.
+<p class="level1">
+<p class="level0"><a name="Redirects"></a><span class="nroffip">Redirects</span>
+<p class="level1">The CURLOPT_FOLLOWLOCATION option automatically follows HTTP redirects sent by a remote server. These redirects can refer to any kind of URL, not just HTTP. A redirect to a file: URL would cause the libcurl to read (or write) arbitrary files from the local filesystem. If the application returns the data back to the user (as would happen in some kinds of CGI scripts), an attacker could leverage this to read otherwise forbidden data (e.g. file://localhost/etc/passwd).
+<p class="level1">If authentication credentials are stored in the ~/.netrc file, or Kerberos is in use, any other URL type (not just file:) that requires authentication is also at risk. A redirect such as <a href="ftp://some-internal-server/private-file">ftp://some-internal-server/private-file</a> would then return data even when the server is password protected.
+<p class="level1">In the same way, if an unencrypted SSH private key has been configured for the user running the libcurl application, SCP: or SFTP: URLs could access password or private-key protected resources, e.g. s<a href="ftp://user">ftp://user</a>@some-internal-server/etc/passwd
+<p class="level1">The CURLOPT_REDIR_PROTOCOLS and CURLOPT_NETRC options can be used to mitigate against this kind of attack.
+<p class="level1">A redirect can also specify a location available only on the machine running libcurl, including servers hidden behind a firewall from the attacker. e.g. <a href="http://127.0.0.1/">http://127.0.0.1/</a> or <a href="http://intranet/delete-stuff.cgi">http://intranet/delete-stuff.cgi</a>?delete=all or t<a href="ftp://bootp-server/pc-config-data">ftp://bootp-server/pc-config-data</a>
+<p class="level1">Apps can mitigate against this by disabling CURLOPT_FOLLOWLOCATION and handling redirects itself, sanitizing URLs as necessary. Alternately, an app could leave CURLOPT_FOLLOWLOCATION enabled but set CURLOPT_REDIR_PROTOCOLS and install a CURLOPT_OPENSOCKETFUNCTION callback function in which addresses are sanitized before use.
+<p class="level1">
+<p class="level0"><a name="Private"></a><span class="nroffip">Private Resources</span>
+<p class="level1">A user who can control the DNS server of a domain being passed in within a URL can change the address of the host to a local, private address which the libcurl application will then use. e.g. The innocuous URL <a href="http://fuzzybunnies.example.com/">http://fuzzybunnies.example.com/</a> could actually resolve to the IP address of a server behind a firewall, such as 127.0.0.1 or 10.1.2.3 Apps can mitigate against this by setting a CURLOPT_OPENSOCKETFUNCTION and checking the address before a connection.
+<p class="level1">All the malicious scenarios regarding redirected URLs apply just as well to non-redirected URLs, if the user is allowed to specify an arbitrary URL that could point to a private resource. For example, a web app providing a translation service might happily translate file://localhost/etc/passwd and display the result. Apps can mitigate against this with the CURLOPT_PROTOCOLS option as well as by similar mitigation techniques for redirections.
+<p class="level1">A malicious FTP server could in response to the PASV command return an IP address and port number for a server local to the app running libcurl but behind a firewall. Apps can mitigate against this by using the CURLOPT_FTP_SKIP_PASV_IP option or CURLOPT_FTPPORT.
+<p class="level1">
+<p class="level0"><a name="Uploads"></a><span class="nroffip">Uploads</span>
+<p class="level1">When uploading, a redirect can cause a local (or remote) file to be overwritten. Apps must not allow any unsanitized URL to be passed in for uploads. Also, CURLOPT_FOLLOWLOCATION should not be used on uploads. Instead, the app should handle redirects itself, sanitizing each URL first.
+<p class="level1">
+<p class="level0"><a name="Authentication"></a><span class="nroffip">Authentication</span>
+<p class="level1">Use of CURLOPT_UNRESTRICTED_AUTH could cause authentication information to be sent to an unknown second server. Apps can mitigate against this by disabling CURLOPT_FOLLOWLOCATION and handling redirects itself, sanitizing where necessary.
+<p class="level1">Use of the CURLAUTH_ANY option to CURLOPT_HTTPAUTH could result in user name and password being sent in clear text to an HTTP server. Instead, use CURLAUTH_ANYSAFE which ensures that the password is encrypted over the network, or else fail the request.
+<p class="level1">Use of the CURLUSESSL_TRY option to CURLOPT_USE_SSL could result in user name and password being sent in clear text to an FTP server. Instead, use CURLUSESSL_CONTROL to ensure that an encrypted connection is used or else fail the request.
+<p class="level1">
+<p class="level0"><a name="Cookies"></a><span class="nroffip">Cookies</span>
+<p class="level1">If cookies are enabled and cached, then a user could craft a URL which performs some malicious action to a site whose authentication is already stored in a cookie. e.g. <a href="http://mail.example.com/delete-stuff.cgi">http://mail.example.com/delete-stuff.cgi</a>?delete=all Apps can mitigate against this by disabling cookies or clearing them between requests.
+<p class="level1">
+<p class="level0"><a name="Dangerous"></a><span class="nroffip">Dangerous URLs</span>
+<p class="level1">SCP URLs can contain raw commands within the scp: URL, which is a side effect of how the SCP protocol is designed. e.g. scp://user:pass@host/a;date &gt;/tmp/test; Apps must not allow unsanitized SCP: URLs to be passed in for downloads.
+<p class="level1">
+<p class="level0"><a name="Denial"></a><span class="nroffip">Denial of Service</span>
+<p class="level1">A malicious server could cause libcurl to effectively hang by sending a trickle of data through, or even no data at all but just keeping the TCP connection open. This could result in a denial-of-service attack. The CURLOPT_TIMEOUT and/or CURLOPT_LOW_SPEED_LIMIT options can be used to mitigate against this.
+<p class="level1">A malicious server could cause libcurl to effectively hang by starting to send data, then severing the connection without cleanly closing the TCP connection. The app could install a CURLOPT_SOCKOPTFUNCTION callback function and set the TCP SO_KEEPALIVE option to mitigate against this. Setting one of the timeout options would also work against this attack.
+<p class="level1">A malicious server could cause libcurl to download an infinite amount of data, potentially causing all of memory or disk to be filled. Setting the CURLOPT_MAXFILESIZE_LARGE option is not sufficient to guard against this. Instead, the app should monitor the amount of data received within the write or progress callback and abort once the limit is reached.
+<p class="level1">A malicious HTTP server could cause an infinite redirection loop, causing a denial-of-service. This can be mitigated by using the CURLOPT_MAXREDIRS option.
+<p class="level1">
+<p class="level0"><a name="Arbitrary"></a><span class="nroffip">Arbitrary Headers</span>
+<p class="level1">User-supplied data must be sanitized when used in options like CURLOPT_USERAGENT, CURLOPT_HTTPHEADER, CURLOPT_POSTFIELDS and others that are used to generate structured data. Characters like embedded carriage returns or ampersands could allow the user to create additional headers or fields that could cause malicious transactions.
+<p class="level1">
+<p class="level0"><a name="Server-supplied"></a><span class="nroffip">Server-supplied Names</span>
+<p class="level1">A server can supply data which the application may, in some cases, use as a file name. The curl command-line tool does this with --remote-header-name, using the Content-disposition: header to generate a file name. An application could also use CURLINFO_EFFECTIVE_URL to generate a file name from a server-supplied redirect URL. Special care must be taken to sanitize such names to avoid the possibility of a malicious server supplying one like "/etc/passwd", "autoexec.bat" or even ".bashrc".
+<p class="level1">
+<p class="level0"><a name="Server"></a><span class="nroffip">Server Certificates</span>
+<p class="level1">A secure application should never use the CURLOPT_SSL_VERIFYPEER option to disable certificate validation. There are numerous attacks that are enabled by apps that fail to properly validate server TLS/SSL certificates, thus enabling a malicious server to spoof a legitimate one. HTTPS without validated certificates is potentially as insecure as a plain HTTP connection.
+<p class="level1">
+<p class="level0"><a name="Showing"></a><span class="nroffip">Showing What You Do</span>
+<p class="level1">On a related issue, be aware that even in situations like when you have problems with libcurl and ask someone for help, everything you reveal in order to get best possible help might also impose certain security related risks. Host names, user names, paths, operating system specifics, etc (not to mention passwords of course) may in fact be used by intruders to gain additional information of a potential target.
+<p class="level1">To avoid this problem, you must of course use your common sense. Often, you can just edit out the sensitive data or just search/replace your true information with faked data.
+<p class="level1"><a name="Multiple"></a><h2 class="nroffsh">Multiple Transfers Using the multi Interface</h2>
+<p class="level0">
+<p class="level0">The easy interface as described in detail in this document is a synchronous interface that transfers one file at a time and doesn't return until it is done.
+<p class="level0">The multi interface, on the other hand, allows your program to transfer multiple files in both directions at the same time, without forcing you to use multiple threads. The name might make it seem that the multi interface is for multi-threaded programs, but the truth is almost the reverse. The multi interface can allow a single-threaded application to perform the same kinds of multiple, simultaneous transfers that multi-threaded programs can perform. It allows many of the benefits of multi-threaded transfers without the complexity of managing and synchronizing many threads.
+<p class="level0">To use this interface, you are better off if you first understand the basics of how to use the easy interface. The multi interface is simply a way to make multiple transfers at the same time by adding up multiple easy handles into a "multi stack".
+<p class="level0">You create the easy handles you want and you set all the options just like you have been told above, and then you create a multi handle with <a class="emphasis" href="./curl_multi_init.html">curl_multi_init(3)</a> and add all those easy handles to that multi handle with <a class="emphasis" href="./curl_multi_add_handle.html">curl_multi_add_handle(3)</a>.
+<p class="level0">When you've added the handles you have for the moment (you can still add new ones at any time), you start the transfers by calling <a class="emphasis" href="./curl_multi_perform.html">curl_multi_perform(3)</a>.
+<p class="level0"><a class="emphasis" href="./curl_multi_perform.html">curl_multi_perform(3)</a> is asynchronous. It will only execute as little as possible and then return back control to your program. It is designed to never block. If it returns CURLM_CALL_MULTI_PERFORM you better call it again soon, as that is a signal that it still has local data to send or remote data to receive.
+<p class="level0">The best usage of this interface is when you do a select() on all possible file descriptors or sockets to know when to call libcurl again. This also makes it easy for you to wait and respond to actions on your own application's sockets/handles. You figure out what to select() for by using <a class="emphasis" href="./curl_multi_fdset.html">curl_multi_fdset(3)</a>, that fills in a set of fd_set variables for you with the particular file descriptors libcurl uses for the moment.
+<p class="level0">When you then call select(), it'll return when one of the file handles signal action and you then call <a class="emphasis" href="./curl_multi_perform.html">curl_multi_perform(3)</a> to allow libcurl to do what it wants to do. Take note that libcurl does also feature some time-out code so we advise you to never use very long timeouts on select() before you call <a class="emphasis" href="./curl_multi_perform.html">curl_multi_perform(3)</a>, which thus should be called unconditionally every now and then even if none of its file descriptors have signaled ready. Another precaution you should use: always call <a class="emphasis" href="./curl_multi_fdset.html">curl_multi_fdset(3)</a> immediately before the select() call since the current set of file descriptors may change when calling a curl function.
+<p class="level0">If you want to stop the transfer of one of the easy handles in the stack, you can use <a class="emphasis" href="./curl_multi_remove_handle.html">curl_multi_remove_handle(3)</a> to remove individual easy handles. Remember that easy handles should be <a class="emphasis" href="./curl_easy_cleanup.html">curl_easy_cleanup(3)</a>ed.
+<p class="level0">When a transfer within the multi stack has finished, the counter of running transfers (as filled in by <a class="emphasis" href="./curl_multi_perform.html">curl_multi_perform(3)</a>) will decrease. When the number reaches zero, all transfers are done.
+<p class="level0"><a class="emphasis" href="./curl_multi_info_read.html">curl_multi_info_read(3)</a> can be used to get information about completed transfers. It then returns the CURLcode for each easy transfer, to allow you to figure out success on each individual transfer.
+<p class="level0"><a name="SSL"></a><h2 class="nroffsh">SSL, Certificates and Other Tricks</h2>
+<p class="level0">
+<p class="level0">&nbsp;[ seeding, passwords, keys, certificates, ENGINE, ca certs ]
+<p class="level0"><a name="Sharing"></a><h2 class="nroffsh">Sharing Data Between Easy Handles</h2>
+<p class="level0">
+<p class="level0">&nbsp;[ fill in ]
+<p class="level0"><a name="Footnotes"></a><h2 class="nroffsh">Footnotes</h2>
+<p class="level0">
+<p class="level0">
+<p class="level0"><a name="1"></a><span class="nroffip">[1]</span>
+<p class="level1">libcurl 7.10.3 and later have the ability to switch over to chunked Transfer-Encoding in cases where HTTP uploads are done with data of an unknown size.
+<p class="level0"><a name="2"></a><span class="nroffip">[2]</span>
+<p class="level1">This happens on Windows machines when libcurl is built and used as a DLL. However, you can still do this on Windows if you link with a static library.
+<p class="level0"><a name="3"></a><span class="nroffip">[3]</span>
+<p class="level1">The curl-config tool is generated at build-time (on UNIX-like systems) and should be installed with the 'make install' or similar instruction that installs the library, header files, man pages etc.
+<p class="level0"><a name="4"></a><span class="nroffip">[4]</span>
+<p class="level1">This behavior was different in versions before 7.17.0, where strings had to remain valid past the end of the <a class="emphasis" href="./curl_easy_setopt.html">curl_easy_setopt(3)</a> call. <p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/libcurl-tutorial.pdf b/docs/libcurl/libcurl-tutorial.pdf
new file mode 100644
index 0000000..9ed755e
--- /dev/null
+++ b/docs/libcurl/libcurl-tutorial.pdf
Binary files differ
diff --git a/docs/libcurl/libcurl.3 b/docs/libcurl/libcurl.3
new file mode 100644
index 0000000..c0b221f
--- /dev/null
+++ b/docs/libcurl/libcurl.3
@@ -0,0 +1,202 @@
+.\"
+.TH libcurl 3 "19 March 2002" "libcurl 7.9.6" "libcurl overview"
+.SH NAME
+libcurl \- client-side URL transfers
+.SH DESCRIPTION
+This is a short overview on how to use libcurl in your C programs. There are
+specific man pages for each function mentioned in here. There are also the
+\fIlibcurl-easy(3)\fP man page, the \fIlibcurl-multi(3)\fP man page, the
+\fIlibcurl-share(3)\fP man page and the \fIlibcurl-tutorial(3)\fP man page for
+in-depth understanding on how to program with libcurl.
+
+There are more than thirty custom bindings available that bring libcurl access
+to your favourite language. Look elsewhere for documentation on those.
+
+libcurl has a global constant environment that you must set up and
+maintain while using libcurl. This essentially means you call
+\fIcurl_global_init(3)\fP at the start of your program and
+\fIcurl_global_cleanup(3)\fP at the end. See GLOBAL CONSTANTS below
+for details.
+
+To transfer files, you always set up an "easy handle" using
+\fIcurl_easy_init(3)\fP, but when you want the file(s) transferred you have
+the option of using the "easy" interface, or the "multi" interface.
+
+The easy interface is a synchronous interface with which you call
+\fIcurl_easy_perform(3)\fP and let it perform the transfer. When it is
+completed, the function returns and you can continue. More details are found in
+the \fIlibcurl-easy(3)\fP man page.
+
+The multi interface on the other hand is an asynchronous interface, that you
+call and that performs only a little piece of the transfer on each invoke. It
+is perfect if you want to do things while the transfer is in progress, or
+similar. The multi interface allows you to select() on libcurl action, and
+even to easily download multiple files simultaneously using a single thread. See further details in the \fIlibcurl-multi(3)\fP man page.
+
+You can have multiple easy handles share certain data, even if they are used
+in different threads. This magic is setup using the share interface, as
+described in the \fIlibcurl-share(3)\fP man page.
+
+There is also a series of other helpful functions to use, including these:
+.RS
+.IP curl_version_info()
+gets detailed libcurl (and other used libraries) version info
+.IP curl_getdate()
+converts a date string to time_t
+.IP curl_easy_getinfo()
+get information about a performed transfer
+.IP curl_formadd()
+helps building an HTTP form POST
+.IP curl_formfree()
+free a list built with \fIcurl_formadd(3)\fP
+.IP curl_slist_append()
+builds a linked list
+.IP curl_slist_free_all()
+frees a whole curl_slist
+.RE
+
+.SH "LINKING WITH LIBCURL"
+On unix-like machines, there's a tool named curl-config that gets installed
+with the rest of the curl stuff when 'make install' is performed.
+
+curl-config is added to make it easier for applications to link with libcurl
+and developers to learn about libcurl and how to use it.
+
+Run 'curl-config --libs' to get the (additional) linker options you need to
+link with the particular version of libcurl you've installed. See the
+\fIcurl-config(1)\fP man page for further details.
+
+Unix-like operating system that ship libcurl as part of their distributions
+often don't provide the curl-config tool, but simply install the library and
+headers in the common path for this purpose.
+
+.SH "LIBCURL SYMBOL NAMES"
+All public functions in the libcurl interface are prefixed with 'curl_' (with
+a lowercase c). You can find other functions in the library source code, but
+other prefixes indicate that the functions are private and may change without
+further notice in the next release.
+
+Only use documented functions and functionality!
+.SH "PORTABILITY"
+libcurl works
+.B exactly
+the same, on any of the platforms it compiles and builds on.
+.SH "THREADS"
+Never ever call curl-functions simultaneously using the same handle from
+several threads. libcurl is thread-safe and can be used in any number of
+threads, but you must use separate curl handles if you want to use libcurl in
+more than one thread simultaneously.
+
+The global environment functions are not thread-safe. See GLOBAL CONSTANTS
+below for details.
+
+.SH "PERSISTENT CONNECTIONS"
+Persistent connections means that libcurl can re-use the same connection for
+several transfers, if the conditions are right.
+
+libcurl will \fBalways\fP attempt to use persistent connections. Whenever you
+use \fIcurl_easy_perform(3)\fP or \fIcurl_multi_perform(3)\fP, libcurl will
+attempt to use an existing connection to do the transfer, and if none exists
+it'll open a new one that will be subject for re-use on a possible following
+call to \fIcurl_easy_perform(3)\fP or \fIcurl_multi_perform(3)\fP.
+
+To allow libcurl to take full advantage of persistent connections, you should
+do as many of your file transfers as possible using the same curl handle. When
+you call \fIcurl_easy_cleanup(3)\fP, all the possibly open connections held by
+libcurl will be closed and forgotten.
+
+Note that the options set with \fIcurl_easy_setopt(3)\fP will be used on
+every repeated \fIcurl_easy_perform(3)\fP call.
+
+.SH "GLOBAL CONSTANTS"
+There are a variety of constants that libcurl uses, mainly through its
+internal use of other libraries, which are too complicated for the
+library loader to set up. Therefore, a program must call a library
+function after the program is loaded and running to finish setting up
+the library code. For example, when libcurl is built for SSL
+capability via the GNU TLS library, there is an elaborate tree inside
+that library that describes the SSL protocol.
+
+\fIcurl_global_init()\fP is the function that you must call. This may
+allocate resources (e.g. the memory for the GNU TLS tree mentioned
+above), so the companion function \fIcurl_global_cleanup()\fP releases
+them.
+
+The basic rule for constructing a program that uses libcurl is this:
+Call \fIcurl_global_init()\fP, with a \fICURL_GLOBAL_ALL\fP argument,
+immediately after the program starts, while it is still only one
+thread and before it uses libcurl at all. Call
+\fIcurl_global_cleanup()\fP immediately before the program exits, when
+the program is again only one thread and after its last use of
+libcurl.
+
+You can call both of these multiple times, as long as all calls meet
+these requirements and the number of calls to each is the same.
+
+It isn't actually required that the functions be called at the beginning
+and end of the program -- that's just usually the easiest way to do it.
+It \fIis\fP required that the functions be called when no other thread
+in the program is running.
+
+These global constant functions are \fInot thread safe\fP, so you must
+not call them when any other thread in the program is running. It
+isn't good enough that no other thread is using libcurl at the time,
+because these functions internally call similar functions of other
+libraries, and those functions are similarly thread-unsafe. You can't
+generally know what these libraries are, or whether other threads are
+using them.
+
+The global constant situation merits special consideration when the
+code you are writing to use libcurl is not the main program, but rather
+a modular piece of a program, e.g. another library. As a module,
+your code doesn't know about other parts of the program -- it doesn't
+know whether they use libcurl or not. And its code doesn't necessarily
+run at the start and end of the whole program.
+
+A module like this must have global constant functions of its own,
+just like \fIcurl_global_init()\fP and \fIcurl_global_cleanup()\fP.
+The module thus has control at the beginning and end of the program
+and has a place to call the libcurl functions. Note that if multiple
+modules in the program use libcurl, they all will separately call the
+libcurl functions, and that's OK because only the first
+\fIcurl_global_init()\fP and the last \fIcurl_global_cleanup()\fP in a
+program change anything. (libcurl uses a reference count in static
+memory).
+
+In a C++ module, it is common to deal with the global constant
+situation by defining a special class that represents the global
+constant environment of the module. A program always has exactly one
+object of the class, in static storage. That way, the program
+automatically calls the constructor of the object as the program
+starts up and the destructor as it terminates. As the author of this
+libcurl-using module, you can make the constructor call
+\fIcurl_global_init()\fP and the destructor call
+\fIcurl_global_cleanup()\fP and satisfy libcurl's requirements without
+your user having to think about it.
+
+\fIcurl_global_init()\fP has an argument that tells what particular
+parts of the global constant environment to set up. In order to
+successfully use any value except \fICURL_GLOBAL_ALL\fP (which says to
+set up the whole thing), you must have specific knowledge of internal
+workings of libcurl and all other parts of the program of which it is
+part.
+
+A special part of the global constant environment is the identity of
+the memory allocator. \fIcurl_global_init()\fP selects the system
+default memory allocator, but you can use \fIcurl_global_init_mem()\fP
+to supply one of your own. However, there is no way to use
+\fIcurl_global_init_mem()\fP in a modular program -- all modules in
+the program that might use libcurl would have to agree on one
+allocator.
+
+There is a failsafe in libcurl that makes it usable in simple
+situations without you having to worry about the global constant
+environment at all: \fIcurl_easy_init()\fP sets up the environment
+itself if it hasn't been done yet. The resources it acquires to do so
+get released by the operating system automatically when the program
+exits.
+
+This failsafe feature exists mainly for backward compatibility because
+there was a time when the global functions didn't exist. Because it
+is sufficient only in the simplest of programs, it is not recommended
+for any program to rely on it.
diff --git a/docs/libcurl/libcurl.html b/docs/libcurl/libcurl.html
new file mode 100644
index 0000000..43b9bdd
--- /dev/null
+++ b/docs/libcurl/libcurl.html
@@ -0,0 +1,103 @@
+<html><head>
+<title>libcurl man page</title>
+<meta name="generator" content="roffit 0.7">
+<STYLE type="text/css">
+P.level0 {
+ padding-left: 2em;
+}
+
+P.level1 {
+ padding-left: 4em;
+}
+
+P.level2 {
+ padding-left: 6em;
+}
+
+span.emphasis {
+ font-style: italic;
+}
+
+span.bold {
+ font-weight: bold;
+}
+
+span.manpage {
+ font-weight: bold;
+}
+
+h2.nroffsh {
+ background-color: #e0e0e0;
+}
+
+span.nroffip {
+ font-weight: bold;
+ font-size: 120%;
+ font-family: monospace;
+}
+
+p.roffit {
+ text-align: center;
+ font-size: 80%;
+}
+</STYLE>
+</head><body>
+
+<p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
+<p class="level0">libcurl - client-side URL transfers <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">This is a short overview on how to use libcurl in your C programs. There are specific man pages for each function mentioned in here. There are also the <span Class="emphasis">libcurl-easy(3)</span> man page, the <span Class="emphasis">libcurl-multi(3)</span> man page, the <span Class="emphasis">libcurl-share(3)</span> man page and the <span Class="emphasis">libcurl-tutorial(3)</span> man page for in-depth understanding on how to program with libcurl.
+<p class="level0">There are more than thirty custom bindings available that bring libcurl access to your favourite language. Look elsewhere for documentation on those.
+<p class="level0">libcurl has a global constant environment that you must set up and maintain while using libcurl. This essentially means you call <a class="emphasis" href="./curl_global_init.html">curl_global_init(3)</a> at the start of your program and <a class="emphasis" href="./curl_global_cleanup.html">curl_global_cleanup(3)</a> at the end. See GLOBAL CONSTANTS below for details.
+<p class="level0">To transfer files, you always set up an "easy handle" using <a class="emphasis" href="./curl_easy_init.html">curl_easy_init(3)</a>, but when you want the file(s) transferred you have the option of using the "easy" interface, or the "multi" interface.
+<p class="level0">The easy interface is a synchronous interface with which you call <a class="emphasis" href="./curl_easy_perform.html">curl_easy_perform(3)</a> and let it perform the transfer. When it is completed, the function returns and you can continue. More details are found in the <span Class="emphasis">libcurl-easy(3)</span> man page.
+<p class="level0">The multi interface on the other hand is an asynchronous interface, that you call and that performs only a little piece of the transfer on each invoke. It is perfect if you want to do things while the transfer is in progress, or similar. The multi interface allows you to select() on libcurl action, and even to easily download multiple files simultaneously using a single thread. See further details in the <span Class="emphasis">libcurl-multi(3)</span> man page.
+<p class="level0">You can have multiple easy handles share certain data, even if they are used in different threads. This magic is setup using the share interface, as described in the <span Class="emphasis">libcurl-share(3)</span> man page.
+<p class="level0">There is also a series of other helpful functions to use, including these:
+<p class="level1">
+<p class="level0"><a name="curlversioninfo"></a><span class="nroffip">curl_version_info()</span>
+<p class="level1">gets detailed libcurl (and other used libraries) version info
+<p class="level0"><a name="curlgetdate"></a><span class="nroffip">curl_getdate()</span>
+<p class="level1">converts a date string to time_t
+<p class="level0"><a name="curleasygetinfo"></a><span class="nroffip">curl_easy_getinfo()</span>
+<p class="level1">get information about a performed transfer
+<p class="level0"><a name="curlformadd"></a><span class="nroffip">curl_formadd()</span>
+<p class="level1">helps building an HTTP form POST
+<p class="level0"><a name="curlformfree"></a><span class="nroffip">curl_formfree()</span>
+<p class="level1">free a list built with <a class="emphasis" href="./curl_formadd.html">curl_formadd(3)</a>
+<p class="level0"><a name="curlslistappend"></a><span class="nroffip">curl_slist_append()</span>
+<p class="level1">builds a linked list
+<p class="level0"><a name="curlslistfreeall"></a><span class="nroffip">curl_slist_free_all()</span>
+<p class="level1">frees a whole curl_slist
+<p class="level0">
+<p class="level0"><a name="LINKING"></a><h2 class="nroffsh">LINKING WITH LIBCURL</h2>
+<p class="level0">On unix-like machines, there's a tool named curl-config that gets installed with the rest of the curl stuff when 'make install' is performed.
+<p class="level0">curl-config is added to make it easier for applications to link with libcurl and developers to learn about libcurl and how to use it.
+<p class="level0">Run 'curl-config --libs' to get the (additional) linker options you need to link with the particular version of libcurl you've installed. See the <span Class="emphasis">curl-config(1)</span> man page for further details.
+<p class="level0">Unix-like operating system that ship libcurl as part of their distributions often don't provide the curl-config tool, but simply install the library and headers in the common path for this purpose.
+<p class="level0"><a name="LIBCURL"></a><h2 class="nroffsh">LIBCURL SYMBOL NAMES</h2>
+<p class="level0">All public functions in the libcurl interface are prefixed with 'curl_' (with a lowercase c). You can find other functions in the library source code, but other prefixes indicate that the functions are private and may change without further notice in the next release.
+<p class="level0">Only use documented functions and functionality! <a name="PORTABILITY"></a><h2 class="nroffsh">PORTABILITY</h2>
+<p class="level0">libcurl works <span Class="bold">exactly</span> the same, on any of the platforms it compiles and builds on. <a name="THREADS"></a><h2 class="nroffsh">THREADS</h2>
+<p class="level0">Never ever call curl-functions simultaneously using the same handle from several threads. libcurl is thread-safe and can be used in any number of threads, but you must use separate curl handles if you want to use libcurl in more than one thread simultaneously.
+<p class="level0">The global environment functions are not thread-safe. See GLOBAL CONSTANTS below for details.
+<p class="level0"><a name="PERSISTENT"></a><h2 class="nroffsh">PERSISTENT CONNECTIONS</h2>
+<p class="level0">Persistent connections means that libcurl can re-use the same connection for several transfers, if the conditions are right.
+<p class="level0">libcurl will <span Class="bold">always</span> attempt to use persistent connections. Whenever you use <a class="emphasis" href="./curl_easy_perform.html">curl_easy_perform(3)</a> or <a class="emphasis" href="./curl_multi_perform.html">curl_multi_perform(3)</a>, libcurl will attempt to use an existing connection to do the transfer, and if none exists it'll open a new one that will be subject for re-use on a possible following call to <a class="emphasis" href="./curl_easy_perform.html">curl_easy_perform(3)</a> or <a class="emphasis" href="./curl_multi_perform.html">curl_multi_perform(3)</a>.
+<p class="level0">To allow libcurl to take full advantage of persistent connections, you should do as many of your file transfers as possible using the same curl handle. When you call <a class="emphasis" href="./curl_easy_cleanup.html">curl_easy_cleanup(3)</a>, all the possibly open connections held by libcurl will be closed and forgotten.
+<p class="level0">Note that the options set with <a class="emphasis" href="./curl_easy_setopt.html">curl_easy_setopt(3)</a> will be used on every repeated <a class="emphasis" href="./curl_easy_perform.html">curl_easy_perform(3)</a> call.
+<p class="level0"><a name="GLOBAL"></a><h2 class="nroffsh">GLOBAL CONSTANTS</h2>
+<p class="level0">There are a variety of constants that libcurl uses, mainly through its internal use of other libraries, which are too complicated for the library loader to set up. Therefore, a program must call a library function after the program is loaded and running to finish setting up the library code. For example, when libcurl is built for SSL capability via the GNU TLS library, there is an elaborate tree inside that library that describes the SSL protocol.
+<p class="level0"><span Class="emphasis">curl_global_init()</span> is the function that you must call. This may allocate resources (e.g. the memory for the GNU TLS tree mentioned above), so the companion function <span Class="emphasis">curl_global_cleanup()</span> releases them.
+<p class="level0">The basic rule for constructing a program that uses libcurl is this: Call <span Class="emphasis">curl_global_init()</span>, with a <span Class="emphasis">CURL_GLOBAL_ALL</span> argument, immediately after the program starts, while it is still only one thread and before it uses libcurl at all. Call <span Class="emphasis">curl_global_cleanup()</span> immediately before the program exits, when the program is again only one thread and after its last use of libcurl.
+<p class="level0">You can call both of these multiple times, as long as all calls meet these requirements and the number of calls to each is the same.
+<p class="level0">It isn't actually required that the functions be called at the beginning and end of the program -- that's just usually the easiest way to do it. It <span Class="emphasis">is</span> required that the functions be called when no other thread in the program is running.
+<p class="level0">These global constant functions are <span Class="emphasis">not thread safe</span>, so you must not call them when any other thread in the program is running. It isn't good enough that no other thread is using libcurl at the time, because these functions internally call similar functions of other libraries, and those functions are similarly thread-unsafe. You can't generally know what these libraries are, or whether other threads are using them.
+<p class="level0">The global constant situation merits special consideration when the code you are writing to use libcurl is not the main program, but rather a modular piece of a program, e.g. another library. As a module, your code doesn't know about other parts of the program -- it doesn't know whether they use libcurl or not. And its code doesn't necessarily run at the start and end of the whole program.
+<p class="level0">A module like this must have global constant functions of its own, just like <span Class="emphasis">curl_global_init()</span> and <span Class="emphasis">curl_global_cleanup()</span>. The module thus has control at the beginning and end of the program and has a place to call the libcurl functions. Note that if multiple modules in the program use libcurl, they all will separately call the libcurl functions, and that's OK because only the first <span Class="emphasis">curl_global_init()</span> and the last <span Class="emphasis">curl_global_cleanup()</span> in a program change anything. (libcurl uses a reference count in static memory).
+<p class="level0">In a C++ module, it is common to deal with the global constant situation by defining a special class that represents the global constant environment of the module. A program always has exactly one object of the class, in static storage. That way, the program automatically calls the constructor of the object as the program starts up and the destructor as it terminates. As the author of this libcurl-using module, you can make the constructor call <span Class="emphasis">curl_global_init()</span> and the destructor call <span Class="emphasis">curl_global_cleanup()</span> and satisfy libcurl's requirements without your user having to think about it.
+<p class="level0"><span Class="emphasis">curl_global_init()</span> has an argument that tells what particular parts of the global constant environment to set up. In order to successfully use any value except <span Class="emphasis">CURL_GLOBAL_ALL</span> (which says to set up the whole thing), you must have specific knowledge of internal workings of libcurl and all other parts of the program of which it is part.
+<p class="level0">A special part of the global constant environment is the identity of the memory allocator. <span Class="emphasis">curl_global_init()</span> selects the system default memory allocator, but you can use <span Class="emphasis">curl_global_init_mem()</span> to supply one of your own. However, there is no way to use <span Class="emphasis">curl_global_init_mem()</span> in a modular program -- all modules in the program that might use libcurl would have to agree on one allocator.
+<p class="level0">There is a failsafe in libcurl that makes it usable in simple situations without you having to worry about the global constant environment at all: <span Class="emphasis">curl_easy_init()</span> sets up the environment itself if it hasn't been done yet. The resources it acquires to do so get released by the operating system automatically when the program exits.
+<p class="level0">This failsafe feature exists mainly for backward compatibility because there was a time when the global functions didn't exist. Because it is sufficient only in the simplest of programs, it is not recommended for any program to rely on it. <p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/docs/libcurl/libcurl.m4 b/docs/libcurl/libcurl.m4
new file mode 100644
index 0000000..952b79f
--- /dev/null
+++ b/docs/libcurl/libcurl.m4
@@ -0,0 +1,250 @@
+# LIBCURL_CHECK_CONFIG ([DEFAULT-ACTION], [MINIMUM-VERSION],
+# [ACTION-IF-YES], [ACTION-IF-NO])
+# ----------------------------------------------------------
+# David Shaw <dshaw@jabberwocky.com> May-09-2006
+#
+# Checks for libcurl. DEFAULT-ACTION is the string yes or no to
+# specify whether to default to --with-libcurl or --without-libcurl.
+# If not supplied, DEFAULT-ACTION is yes. MINIMUM-VERSION is the
+# minimum version of libcurl to accept. Pass the version as a regular
+# version number like 7.10.1. If not supplied, any version is
+# accepted. ACTION-IF-YES is a list of shell commands to run if
+# libcurl was successfully found and passed the various tests.
+# ACTION-IF-NO is a list of shell commands that are run otherwise.
+# Note that using --without-libcurl does run ACTION-IF-NO.
+#
+# This macro #defines HAVE_LIBCURL if a working libcurl setup is
+# found, and sets @LIBCURL@ and @LIBCURL_CPPFLAGS@ to the necessary
+# values. Other useful defines are LIBCURL_FEATURE_xxx where xxx are
+# the various features supported by libcurl, and LIBCURL_PROTOCOL_yyy
+# where yyy are the various protocols supported by libcurl. Both xxx
+# and yyy are capitalized. See the list of AH_TEMPLATEs at the top of
+# the macro for the complete list of possible defines. Shell
+# variables $libcurl_feature_xxx and $libcurl_protocol_yyy are also
+# defined to 'yes' for those features and protocols that were found.
+# Note that xxx and yyy keep the same capitalization as in the
+# curl-config list (e.g. it's "HTTP" and not "http").
+#
+# Users may override the detected values by doing something like:
+# LIBCURL="-lcurl" LIBCURL_CPPFLAGS="-I/usr/myinclude" ./configure
+#
+# For the sake of sanity, this macro assumes that any libcurl that is
+# found is after version 7.7.2, the first version that included the
+# curl-config script. Note that it is very important for people
+# packaging binary versions of libcurl to include this script!
+# Without curl-config, we can only guess what protocols are available,
+# or use curl_version_info to figure it out at runtime.
+
+AC_DEFUN([LIBCURL_CHECK_CONFIG],
+[
+ AH_TEMPLATE([LIBCURL_FEATURE_SSL],[Defined if libcurl supports SSL])
+ AH_TEMPLATE([LIBCURL_FEATURE_KRB4],[Defined if libcurl supports KRB4])
+ AH_TEMPLATE([LIBCURL_FEATURE_IPV6],[Defined if libcurl supports IPv6])
+ AH_TEMPLATE([LIBCURL_FEATURE_LIBZ],[Defined if libcurl supports libz])
+ AH_TEMPLATE([LIBCURL_FEATURE_ASYNCHDNS],[Defined if libcurl supports AsynchDNS])
+ AH_TEMPLATE([LIBCURL_FEATURE_IDN],[Defined if libcurl supports IDN])
+ AH_TEMPLATE([LIBCURL_FEATURE_SSPI],[Defined if libcurl supports SSPI])
+ AH_TEMPLATE([LIBCURL_FEATURE_NTLM],[Defined if libcurl supports NTLM])
+
+ AH_TEMPLATE([LIBCURL_PROTOCOL_HTTP],[Defined if libcurl supports HTTP])
+ AH_TEMPLATE([LIBCURL_PROTOCOL_HTTPS],[Defined if libcurl supports HTTPS])
+ AH_TEMPLATE([LIBCURL_PROTOCOL_FTP],[Defined if libcurl supports FTP])
+ AH_TEMPLATE([LIBCURL_PROTOCOL_FTPS],[Defined if libcurl supports FTPS])
+ AH_TEMPLATE([LIBCURL_PROTOCOL_FILE],[Defined if libcurl supports FILE])
+ AH_TEMPLATE([LIBCURL_PROTOCOL_TELNET],[Defined if libcurl supports TELNET])
+ AH_TEMPLATE([LIBCURL_PROTOCOL_LDAP],[Defined if libcurl supports LDAP])
+ AH_TEMPLATE([LIBCURL_PROTOCOL_DICT],[Defined if libcurl supports DICT])
+ AH_TEMPLATE([LIBCURL_PROTOCOL_TFTP],[Defined if libcurl supports TFTP])
+ AH_TEMPLATE([LIBCURL_PROTOCOL_RTSP],[Defined if libcurl supports RTSP])
+ AH_TEMPLATE([LIBCURL_PROTOCOL_POP3],[Defined if libcurl supports POP3])
+ AH_TEMPLATE([LIBCURL_PROTOCOL_IMAP],[Defined if libcurl supports IMAP])
+ AH_TEMPLATE([LIBCURL_PROTOCOL_SMTP],[Defined if libcurl supports SMTP])
+
+ AC_ARG_WITH(libcurl,
+ AC_HELP_STRING([--with-libcurl=PREFIX],[look for the curl library in PREFIX/lib and headers in PREFIX/include]),
+ [_libcurl_with=$withval],[_libcurl_with=ifelse([$1],,[yes],[$1])])
+
+ if test "$_libcurl_with" != "no" ; then
+
+ AC_PROG_AWK
+
+ _libcurl_version_parse="eval $AWK '{split(\$NF,A,\".\"); X=256*256*A[[1]]+256*A[[2]]+A[[3]]; print X;}'"
+
+ _libcurl_try_link=yes
+
+ if test -d "$_libcurl_with" ; then
+ LIBCURL_CPPFLAGS="-I$withval/include"
+ _libcurl_ldflags="-L$withval/lib"
+ AC_PATH_PROG([_libcurl_config],[curl-config],[],
+ ["$withval/bin"])
+ else
+ AC_PATH_PROG([_libcurl_config],[curl-config],[],[$PATH])
+ fi
+
+ if test x$_libcurl_config != "x" ; then
+ AC_CACHE_CHECK([for the version of libcurl],
+ [libcurl_cv_lib_curl_version],
+ [libcurl_cv_lib_curl_version=`$_libcurl_config --version | $AWK '{print $[]2}'`])
+
+ _libcurl_version=`echo $libcurl_cv_lib_curl_version | $_libcurl_version_parse`
+ _libcurl_wanted=`echo ifelse([$2],,[0],[$2]) | $_libcurl_version_parse`
+
+ if test $_libcurl_wanted -gt 0 ; then
+ AC_CACHE_CHECK([for libcurl >= version $2],
+ [libcurl_cv_lib_version_ok],
+ [
+ if test $_libcurl_version -ge $_libcurl_wanted ; then
+ libcurl_cv_lib_version_ok=yes
+ else
+ libcurl_cv_lib_version_ok=no
+ fi
+ ])
+ fi
+
+ if test $_libcurl_wanted -eq 0 || test x$libcurl_cv_lib_version_ok = xyes ; then
+ if test x"$LIBCURL_CPPFLAGS" = "x" ; then
+ LIBCURL_CPPFLAGS=`$_libcurl_config --cflags`
+ fi
+ if test x"$LIBCURL" = "x" ; then
+ LIBCURL=`$_libcurl_config --libs`
+
+ # This is so silly, but Apple actually has a bug in their
+ # curl-config script. Fixed in Tiger, but there are still
+ # lots of Panther installs around.
+ case "${host}" in
+ powerpc-apple-darwin7*)
+ LIBCURL=`echo $LIBCURL | sed -e 's|-arch i386||g'`
+ ;;
+ esac
+ fi
+
+ # All curl-config scripts support --feature
+ _libcurl_features=`$_libcurl_config --feature`
+
+ # Is it modern enough to have --protocols? (7.12.4)
+ if test $_libcurl_version -ge 461828 ; then
+ _libcurl_protocols=`$_libcurl_config --protocols`
+ fi
+ else
+ _libcurl_try_link=no
+ fi
+
+ unset _libcurl_wanted
+ fi
+
+ if test $_libcurl_try_link = yes ; then
+
+ # we didn't find curl-config, so let's see if the user-supplied
+ # link line (or failing that, "-lcurl") is enough.
+ LIBCURL=${LIBCURL-"$_libcurl_ldflags -lcurl"}
+
+ AC_CACHE_CHECK([whether libcurl is usable],
+ [libcurl_cv_lib_curl_usable],
+ [
+ _libcurl_save_cppflags=$CPPFLAGS
+ CPPFLAGS="$LIBCURL_CPPFLAGS $CPPFLAGS"
+ _libcurl_save_libs=$LIBS
+ LIBS="$LIBCURL $LIBS"
+
+ AC_LINK_IFELSE(AC_LANG_PROGRAM([#include <curl/curl.h>],[
+/* Try and use a few common options to force a failure if we are
+ missing symbols or can't link. */
+int x;
+curl_easy_setopt(NULL,CURLOPT_URL,NULL);
+x=CURL_ERROR_SIZE;
+x=CURLOPT_WRITEFUNCTION;
+x=CURLOPT_FILE;
+x=CURLOPT_ERRORBUFFER;
+x=CURLOPT_STDERR;
+x=CURLOPT_VERBOSE;
+]),libcurl_cv_lib_curl_usable=yes,libcurl_cv_lib_curl_usable=no)
+
+ CPPFLAGS=$_libcurl_save_cppflags
+ LIBS=$_libcurl_save_libs
+ unset _libcurl_save_cppflags
+ unset _libcurl_save_libs
+ ])
+
+ if test $libcurl_cv_lib_curl_usable = yes ; then
+
+ # Does curl_free() exist in this version of libcurl?
+ # If not, fake it with free()
+
+ _libcurl_save_cppflags=$CPPFLAGS
+ CPPFLAGS="$CPPFLAGS $LIBCURL_CPPFLAGS"
+ _libcurl_save_libs=$LIBS
+ LIBS="$LIBS $LIBCURL"
+
+ AC_CHECK_FUNC(curl_free,,
+ AC_DEFINE(curl_free,free,
+ [Define curl_free() as free() if our version of curl lacks curl_free.]))
+
+ CPPFLAGS=$_libcurl_save_cppflags
+ LIBS=$_libcurl_save_libs
+ unset _libcurl_save_cppflags
+ unset _libcurl_save_libs
+
+ AC_DEFINE(HAVE_LIBCURL,1,
+ [Define to 1 if you have a functional curl library.])
+ AC_SUBST(LIBCURL_CPPFLAGS)
+ AC_SUBST(LIBCURL)
+
+ for _libcurl_feature in $_libcurl_features ; do
+ AC_DEFINE_UNQUOTED(AS_TR_CPP(libcurl_feature_$_libcurl_feature),[1])
+ eval AS_TR_SH(libcurl_feature_$_libcurl_feature)=yes
+ done
+
+ if test "x$_libcurl_protocols" = "x" ; then
+
+ # We don't have --protocols, so just assume that all
+ # protocols are available
+ _libcurl_protocols="HTTP FTP FILE TELNET LDAP DICT TFTP"
+
+ if test x$libcurl_feature_SSL = xyes ; then
+ _libcurl_protocols="$_libcurl_protocols HTTPS"
+
+ # FTPS wasn't standards-compliant until version
+ # 7.11.0 (0x070b00 == 461568)
+ if test $_libcurl_version -ge 461568; then
+ _libcurl_protocols="$_libcurl_protocols FTPS"
+ fi
+ fi
+
+ # RTSP, IMAP, POP3 and SMTP were added in
+ # 7.20.0 (0x071400 == 463872)
+ if test $_libcurl_version -ge 463872; then
+ _libcurl_protocols="$_libcurl_protocols RTSP IMAP POP3 SMTP"
+ fi
+ fi
+
+ for _libcurl_protocol in $_libcurl_protocols ; do
+ AC_DEFINE_UNQUOTED(AS_TR_CPP(libcurl_protocol_$_libcurl_protocol),[1])
+ eval AS_TR_SH(libcurl_protocol_$_libcurl_protocol)=yes
+ done
+ else
+ unset LIBCURL
+ unset LIBCURL_CPPFLAGS
+ fi
+ fi
+
+ unset _libcurl_try_link
+ unset _libcurl_version_parse
+ unset _libcurl_config
+ unset _libcurl_feature
+ unset _libcurl_features
+ unset _libcurl_protocol
+ unset _libcurl_protocols
+ unset _libcurl_version
+ unset _libcurl_ldflags
+ fi
+
+ if test x$_libcurl_with = xno || test x$libcurl_cv_lib_curl_usable != xyes ; then
+ # This is the IF-NO path
+ ifelse([$4],,:,[$4])
+ else
+ # This is the IF-YES path
+ ifelse([$3],,:,[$3])
+ fi
+
+ unset _libcurl_with
+])dnl
diff --git a/docs/libcurl/libcurl.pdf b/docs/libcurl/libcurl.pdf
new file mode 100644
index 0000000..6974679
--- /dev/null
+++ b/docs/libcurl/libcurl.pdf
Binary files differ
diff --git a/docs/libcurl/symbols-in-versions b/docs/libcurl/symbols-in-versions
new file mode 100644
index 0000000..a02ead4
--- /dev/null
+++ b/docs/libcurl/symbols-in-versions
@@ -0,0 +1,485 @@
+ _ _ ____ _
+ ___| | | | _ \| |
+ / __| | | | |_) | |
+ | (__| |_| | _ <| |___
+ \___|\___/|_| \_\_____|
+
+ This document lists defines and other symbols present in libcurl, together
+ with exact information about the first libcurl version that provides the
+ symbol, the first version in which the symbol was marked as deprecated and
+ for a few symbols the last version that featured it. The names appear in
+ alphabetical order.
+
+ Name Introduced Deprecated Removed
+
+CURLAUTH_ANY 7.10.6
+CURLAUTH_ANYSAFE 7.10.6
+CURLAUTH_BASIC 7.10.6
+CURLAUTH_DIGEST 7.10.6
+CURLAUTH_DIGEST_IE 7.19.3
+CURLAUTH_GSSNEGOTIATE 7.10.6
+CURLAUTH_NTLM 7.10.6
+CURLCLOSEPOLICY_CALLBACK 7.7
+CURLCLOSEPOLICY_LEAST_RECENTLY_USED 7.7
+CURLCLOSEPOLICY_LEAST_TRAFFIC 7.7
+CURLCLOSEPOLICY_OLDEST 7.7
+CURLCLOSEPOLICY_SLOWEST 7.7
+CURLE_ABORTED_BY_CALLBACK 7.1
+CURLE_AGAIN 7.18.2
+CURLE_BAD_CALLING_ORDER 7.1 7.17.0
+CURLE_BAD_CONTENT_ENCODING 7.10
+CURLE_BAD_FUNCTION_ARGUMENT 7.1
+CURLE_BAD_PASSWORD_ENTERED - 7.17.0
+CURLE_COULDNT_CONNECT 7.1
+CURLE_COULDNT_RESOLVE_HOST 7.1
+CURLE_COULDNT_RESOLVE_PROXY 7.1
+CURLE_FAILED_INIT 7.1
+CURLE_FILESIZE_EXCEEDED 7.10.8
+CURLE_FILE_COULDNT_READ_FILE 7.1
+CURLE_FTP_ACCESS_DENIED 7.1
+CURLE_FTP_BAD_DOWNLOAD_RESUME 7.1 7.1
+CURLE_FTP_CANT_GET_HOST 7.1
+CURLE_FTP_CANT_RECONNECT 7.1 7.17.0
+CURLE_FTP_COULDNT_GET_SIZE 7.1 7.17.0
+CURLE_FTP_COULDNT_RETR_FILE 7.1
+CURLE_FTP_COULDNT_SET_ASCII 7.1 7.17.0
+CURLE_FTP_COULDNT_SET_BINARY 7.1 7.17.0
+CURLE_FTP_COULDNT_SET_TYPE 7.17.0
+CURLE_FTP_COULDNT_STOR_FILE 7.1
+CURLE_FTP_COULDNT_USE_REST 7.1
+CURLE_FTP_PARTIAL_FILE 7.1 7.1
+CURLE_FTP_PORT_FAILED 7.1
+CURLE_FTP_PRET_FAILED 7.20.0
+CURLE_FTP_QUOTE_ERROR 7.1 7.17.0
+CURLE_FTP_SSL_FAILED - 7.17.0
+CURLE_FTP_USER_PASSWORD_INCORRECT 7.1 7.17.0
+CURLE_FTP_WEIRD_227_FORMAT 7.1
+CURLE_FTP_WEIRD_PASS_REPLY 7.1
+CURLE_FTP_WEIRD_PASV_REPLY 7.1
+CURLE_FTP_WEIRD_SERVER_REPLY 7.1
+CURLE_FTP_WEIRD_USER_REPLY 7.1 7.17.0
+CURLE_FTP_WRITE_ERROR 7.1 7.17.0
+CURLE_FUNCTION_NOT_FOUND 7.1
+CURLE_GOT_NOTHING 7.9.1
+CURLE_HTTP_NOT_FOUND 7.1
+CURLE_HTTP_PORT_FAILED - 7.12.0
+CURLE_HTTP_POST_ERROR 7.1
+CURLE_HTTP_RANGE_ERROR 7.1 7.17.0
+CURLE_INTERFACE_FAILED 7.12.0
+CURLE_LDAP_CANNOT_BIND 7.1
+CURLE_LDAP_INVALID_URL 7.10.8
+CURLE_LDAP_SEARCH_FAILED 7.1
+CURLE_LIBRARY_NOT_FOUND 7.1 7.17.0
+CURLE_MALFORMAT_USER 7.1 7.17.0
+CURLE_OK 7.1
+CURLE_OPERATION_TIMEDOUT 7.17.0
+CURLE_OPERATION_TIMEOUTED 7.1 7.17.0
+CURLE_OUT_OF_MEMORY 7.1
+CURLE_PARTIAL_FILE 7.1
+CURLE_PEER_FAILED_VERIFICATION 7.17.1
+CURLE_QUOTE_ERROR 7.17.0
+CURLE_RANGE_ERROR 7.17.0
+CURLE_READ_ERROR 7.1
+CURLE_RECV_ERROR 7.13.0
+CURLE_REMOTE_ACCESS_DENIED 7.17.0
+CURLE_REMOTE_DISK_FULL 7.17.0
+CURLE_RTSP_CSEQ_ERROR 7.20.0
+CURLE_RTSP_SESSION_ERROR 7.20.0
+CURLE_SEND_ERROR 7.13.0
+CURLE_SHARE_IN_USE - 7.17.0
+CURLE_SSH 7.16.1
+CURLE_SSL_CACERT 7.10
+CURLE_SSL_CERTPROBLEM 7.10
+CURLE_SSL_CIPHER 7.10
+CURLE_SSL_CONNECT_ERROR 7.1
+CURLE_SSL_CRL_BADFILE 7.19.0
+CURLE_SSL_ENGINE_INITFAILED 7.13.0
+CURLE_SSL_ENGINE_NOTFOUND 7.9.3
+CURLE_SSL_ENGINE_SETFAILED 7.9.3
+CURLE_SSL_ISSUER_ERROR 7.19.0
+CURLE_SSL_PEER_CERTIFICATE - 7.17.1
+CURLE_SSL_SHUTDOWN_FAILED 7.16.1
+CURLE_TELNET_OPTION_SYNTAX 7.7
+CURLE_TFTP_DISKFULL 7.15.0 7.17.0
+CURLE_TFTP_EXISTS 7.15.0 7.17.0
+CURLE_TFTP_ILLEGAL 7.15.0
+CURLE_TFTP_NOSUCHUSER 7.15.0
+CURLE_TFTP_UNKNOWNID 7.15.0
+CURLE_TOO_MANY_REDIRECTS 7.5
+CURLE_UNKNOWN_TELNET_OPTION 7.7
+CURLE_UNSUPPORTED_PROTOCOL 7.1
+CURLE_URL_MALFORMAT 7.1
+CURLE_URL_MALFORMAT_USER 7.1 7.17.0
+CURLE_USE_SSL_FAILED 7.17.0
+CURLE_WRITE_ERROR 7.1
+CURLFTPAUTH_DEFAULT 7.12.2
+CURLFTPAUTH_DEFAULT 7.12.2
+CURLFTPAUTH_SSL 7.12.2
+CURLFTPAUTH_SSL 7.12.2
+CURLFTPAUTH_TLS 7.12.2
+CURLFTPAUTH_TLS 7.12.2
+CURLFTPMETHOD_MULTICWD 7.15.1
+CURLFTPMETHOD_NOCWD 7.15.1
+CURLFTPMETHOD_SINGLECWD 7.15.1
+CURLFTPSSL_ALL - 7.17.0
+CURLFTPSSL_CCC_ACTIVE 7.16.1
+CURLFTPSSL_CCC_NONE 7.16.1
+CURLFTPSSL_CCC_PASSIVE 7.16.1
+CURLFTPSSL_CONTROL 7.11.0 7.17.0
+CURLFTPSSL_NONE 7.11.0 7.17.0
+CURLFTPSSL_TRY 7.11.0 7.17.0
+CURLFTP_CREATE_DIR 7.19.4
+CURLFTP_CREATE_DIR_NONE 7.19.4
+CURLFTP_CREATE_DIR_RETRY 7.19.4
+CURLINFO_APPCONNECT_TIME 7.19.0
+CURLINFO_CERTINFO 7.19.1
+CURLINFO_CONDITION_UNMET 7.19.4
+CURLINFO_CONNECT_TIME 7.4.1
+CURLINFO_CONTENT_LENGTH_DOWNLOAD 7.6.1
+CURLINFO_CONTENT_LENGTH_UPLOAD 7.6.1
+CURLINFO_CONTENT_TYPE 7.9.4
+CURLINFO_COOKIELIST 7.14.1
+CURLINFO_DATA_IN 7.9.6
+CURLINFO_DATA_OUT 7.9.6
+CURLINFO_EFFECTIVE_URL 7.3
+CURLINFO_FILETIME 7.5
+CURLINFO_FTP_ENTRY_PATH 7.15.4
+CURLINFO_HEADER_IN 7.9.6
+CURLINFO_HEADER_OUT 7.9.6
+CURLINFO_HEADER_SIZE 7.4.1
+CURLINFO_HTTPAUTH_AVAIL 7.10.8
+CURLINFO_HTTP_CODE 7.4.1 7.10.8
+CURLINFO_HTTP_CONNECTCODE 7.10.7
+CURLINFO_LASTSOCKET 7.15.2
+CURLINFO_LOCAL_IP 7.21.0
+CURLINFO_LOCAL_PORT 7.21.0
+CURLINFO_NAMELOOKUP_TIME 7.4.1
+CURLINFO_NUM_CONNECTS 7.12.3
+CURLINFO_OS_ERRNO 7.12.2
+CURLINFO_PRETRANSFER_TIME 7.4.1
+CURLINFO_PRIMARY_IP 7.19.0
+CURLINFO_PRIMARY_PORT 7.21.0
+CURLINFO_PRIVATE 7.10.3
+CURLINFO_PRIVATE 7.10.3
+CURLINFO_PROXYAUTH_AVAIL 7.10.8
+CURLINFO_REDIRECT_COUNT 7.9.7
+CURLINFO_REDIRECT_TIME 7.9.7
+CURLINFO_REDIRECT_URL 7.18.2
+CURLINFO_REQUEST_SIZE 7.4.1
+CURLINFO_RESPONSE_CODE 7.10.8
+CURLINFO_SIZE_DOWNLOAD 7.4.1
+CURLINFO_SIZE_UPLOAD 7.4.1
+CURLINFO_SPEED_DOWNLOAD 7.4.1
+CURLINFO_SPEED_UPLOAD 7.4.1
+CURLINFO_SSL_ENGINES 7.12.3
+CURLINFO_SSL_VERIFYRESULT 7.5
+CURLINFO_STARTTRANSFER_TIME 7.9.2
+CURLINFO_TEXT 7.9.6
+CURLINFO_TOTAL_TIME 7.4.1
+CURLMSG_DONE 7.9.6
+CURLM_BAD_EASY_HANDLE 7.9.6
+CURLM_BAD_HANDLE 7.9.6
+CURLM_CALL_MULTI_PERFORM 7.9.6
+CURLM_CALL_MULTI_SOCKET 7.15.5
+CURLM_INTERNAL_ERROR 7.9.6
+CURLM_OK 7.9.6
+CURLM_OUT_OF_MEMORY 7.9.6
+CURLOPT_ADDRESS_SCOPE 7.19.0
+CURLOPT_APPEND 7.16.4
+CURLOPT_AUTOREFERER 7.1
+CURLOPT_BUFFERSIZE 7.10
+CURLOPT_CAINFO 7.4.2
+CURLOPT_CAPATH 7.9.8
+CURLOPT_CERTINFO 7.19.1
+CURLOPT_CHUNK_BGN_FUNCTION 7.21.0
+CURLOPT_CHUNK_DATA 7.21.0
+CURLOPT_CHUNK_END_FUNCTION 7.21.0
+CURLOPT_CLOSEFUNCTION 7.7 7.11.1 7.15.4
+CURLOPT_CLOSEPOLICY 7.7 7.16.1
+CURLOPT_CONNECTTIMEOUT 7.7
+CURLOPT_CONNECTTIMEOUT_MS 7.16.2
+CURLOPT_CONNECT_ONLY 7.15.2
+CURLOPT_CONV_FROM_NETWORK_FUNCTION 7.15.4
+CURLOPT_CONV_FROM_UTF8_FUNCTION 7.15.4
+CURLOPT_CONV_TO_NETWORK_FUNCTION 7.15.4
+CURLOPT_COOKIE 7.1
+CURLOPT_COOKIEFILE 7.1
+CURLOPT_COOKIEJAR 7.9
+CURLOPT_COOKIELIST 7.17.1
+CURLOPT_COOKIESESSION 7.9.7
+CURLOPT_COPYPOSTFIELDS 7.17.1
+CURLOPT_CRLF 7.1
+CURLOPT_CRLFILE 7.19.0
+CURLOPT_CUSTOMREQUEST 7.1
+CURLOPT_DEBUGDATA 7.9.6
+CURLOPT_DEBUGFUNCTION 7.9.6
+CURLOPT_DIRLISTONLY 7.16.4
+CURLOPT_DNS_CACHE_TIMEOUT 7.9.3
+CURLOPT_DNS_USE_GLOBAL_CACHE 7.9.3 7.11.1
+CURLOPT_EGDSOCKET 7.7
+CURLOPT_ENCODING 7.12.2
+CURLOPT_ERRORBUFFER 7.1
+CURLOPT_FAILONERROR 7.1
+CURLOPT_FILE 7.1 7.9.7
+CURLOPT_FILETIME 7.5
+CURLOPT_FLAGS 7.1 - 7.9.2
+CURLOPT_FNMATCH_DATA 7.21.0
+CURLOPT_FNMATCH_FUNCTION 7.21.0
+CURLOPT_FOLLOWLOCATION 7.1
+CURLOPT_FORBID_REUSE 7.7
+CURLOPT_FRESH_CONNECT 7.7
+CURLOPT_FTPAPPEND 7.1 7.16.4
+CURLOPT_FTPASCII 7.1 7.11.1 7.15.4
+CURLOPT_FTPLISTONLY 7.1 7.16.4
+CURLOPT_FTPPORT 7.1
+CURLOPT_FTPSSLAUTH 7.12.2
+CURLOPT_FTP_ACCOUNT 7.13.1
+CURLOPT_FTP_ALTERNATIVE_TO_USER 7.15.5
+CURLOPT_FTP_CREATE_MISSING_DIRS 7.10.7
+CURLOPT_FTP_FILEMETHOD 7.15.1
+CURLOPT_FTP_RESPONSE_TIMEOUT 7.10.8
+CURLOPT_FTP_SKIP_PASV_IP 7.15.0
+CURLOPT_FTP_SSL 7.11.0 7.16.4
+CURLOPT_FTP_SSL_CCC 7.16.1
+CURLOPT_FTP_USE_EPRT 7.10.5
+CURLOPT_FTP_USE_EPSV 7.9.2
+CURLOPT_FTP_USE_PRET 7.20.0
+CURLOPT_HEADER 7.1
+CURLOPT_HEADERDATA 7.10
+CURLOPT_HEADERFUNCTION 7.7.2
+CURLOPT_HTTP200ALIASES 7.10.3
+CURLOPT_HTTPAUTH 7.10.6
+CURLOPT_HTTPGET 7.8.1
+CURLOPT_HTTPHEADER 7.1
+CURLOPT_HTTPPOST 7.1
+CURLOPT_HTTPPROXYTUNNEL 7.3
+CURLOPT_HTTPREQUEST 7.1 - 7.15.4
+CURLOPT_HTTP_CONTENT_DECODING 7.16.2
+CURLOPT_HTTP_TRANSFER_DECODING 7.16.2
+CURLOPT_HTTP_VERSION 7.9.1
+CURLOPT_IGNORE_CONTENT_LENGTH 7.14.1
+CURLOPT_INFILE 7.1 7.9.7
+CURLOPT_INFILESIZE 7.1
+CURLOPT_INFILESIZE_LARGE 7.11.0
+CURLOPT_INTERFACE 7.3
+CURLOPT_INTERLEAVEDATA 7.20.0
+CURLOPT_INTERLEAVEFUNCTION 7.20.0
+CURLOPT_IOCTLDATA 7.12.3
+CURLOPT_IOCTLFUNCTION 7.12.3
+CURLOPT_IPRESOLVE 7.10.8
+CURLOPT_ISSUERCERT 7.19.0
+CURLOPT_KEYPASSWD - 7.17.0
+CURLOPT_KRB4LEVEL 7.3 7.17.0
+CURLOPT_KRBLEVEL 7.17.0
+CURLOPT_LOCALPORT 7.15.2
+CURLOPT_LOCALPORTRANGE 7.15.2
+CURLOPT_LOW_SPEED_LIMIT 7.1
+CURLOPT_LOW_SPEED_TIME 7.1
+CURLOPT_MAIL_FROM 7.20.0
+CURLOPT_MAIL_RCPT 7.20.0
+CURLOPT_MAXCONNECTS 7.7
+CURLOPT_MAXFILESIZE 7.10.8
+CURLOPT_MAXFILESIZE_LARGE 7.11.0
+CURLOPT_MAXREDIRS 7.5
+CURLOPT_MAX_RECV_SPEED_LARGE 7.15.5
+CURLOPT_MAX_SEND_SPEED_LARGE 7.15.5
+CURLOPT_MUTE 7.1 7.8 7.15.4
+CURLOPT_NETRC 7.1
+CURLOPT_NETRC_FILE 7.11.0
+CURLOPT_NEW_DIRECTORY_PERMS 7.16.4
+CURLOPT_NEW_FILE_PERMS 7.16.4
+CURLOPT_NOBODY 7.1
+CURLOPT_NOPROGRESS 7.1
+CURLOPT_NOPROXY 7.19.4
+CURLOPT_NOSIGNAL 7.10
+CURLOPT_OPENSOCKETDATA 7.17.1
+CURLOPT_OPENSOCKETFUNCTION 7.17.1
+CURLOPT_PASSWDDATA 7.1 7.11.1 7.15.4
+CURLOPT_PASSWDFUNCTION 7.1 7.11.1 7.15.4
+CURLOPT_PASSWORD 7.19.1
+CURLOPT_PASV_POST 7.12.1 - 7.13.0
+CURLOPT_PORT 7.1
+CURLOPT_POST 7.1
+CURLOPT_POST301 7.17.1 7.19.1
+CURLOPT_POSTFIELDS 7.1
+CURLOPT_POSTFIELDSIZE 7.2
+CURLOPT_POSTFIELDSIZE_LARGE 7.11.1
+CURLOPT_POSTQUOTE 7.1
+CURLOPT_POSTREDIR 7.19.1
+CURLOPT_PREQUOTE 7.9.5
+CURLOPT_PRIVATE 7.10.3
+CURLOPT_PROGRESSDATA 7.1
+CURLOPT_PROGRESSFUNCTION 7.1
+CURLOPT_PROGRESSMODE 7.1 - 7.9.2
+CURLOPT_PROTOCOLS 7.19.4
+CURLOPT_PROXY 7.1
+CURLOPT_PROXYAUTH 7.10.7
+CURLOPT_PROXYPASSWORD 7.19.1
+CURLOPT_PROXYPORT 7.1
+CURLOPT_PROXYTYPE 7.10
+CURLOPT_PROXYUSERNAME 7.19.1
+CURLOPT_PROXYUSERPWD 7.1
+CURLOPT_PROXY_TRANSFER_MODE 7.18.0
+CURLOPT_PUT 7.1
+CURLOPT_QUOTE 7.1
+CURLOPT_RANDOM_FILE 7.7
+CURLOPT_RANGE 7.1
+CURLOPT_READDATA 7.9.7
+CURLOPT_READFUNCTION 7.1
+CURLOPT_REDIR_PROTOCOLS 7.19.4
+CURLOPT_REFERER 7.1
+CURLOPT_RESUME_FROM 7.1
+CURLOPT_RESUME_FROM_LARGE 7.11.0
+CURLOPT_RTSP_CLIENT_CSEQ 7.20.0
+CURLOPT_RTSP_REQUEST 7.20.0
+CURLOPT_RTSP_SERVER_CSEQ 7.20.0
+CURLOPT_RTSP_SESSION_ID 7.20.0
+CURLOPT_RTSP_STREAM_URI 7.20.0
+CURLOPT_RTSP_TRANSPORT 7.20.0
+CURLOPT_SEEKDATA 7.18.1
+CURLOPT_SEEKFUNCTION 7.18.1
+CURLOPT_SHARE 7.10
+CURLOPT_SOCKOPTDATA 7.16.0
+CURLOPT_SOCKOPTFUNCTION 7.16.0
+CURLOPT_SOCKS5_GSSAPI_NEC 7.19.4
+CURLOPT_SOCKS5_GSSAPI_SERVICE 7.19.4
+CURLOPT_SOURCE_HOST 7.12.1 - 7.13.0
+CURLOPT_SOURCE_PATH 7.12.1 - 7.13.0
+CURLOPT_SOURCE_PORT 7.12.1 - 7.13.0
+CURLOPT_SOURCE_POSTQUOTE 7.12.1 - 7.15.4
+CURLOPT_SOURCE_PREQUOTE 7.12.1 - 7.15.4
+CURLOPT_SOURCE_QUOTE 7.13.0 - 7.15.4
+CURLOPT_SOURCE_URL 7.13.0 - 7.15.4
+CURLOPT_SOURCE_USERPWD 7.12.1 - 7.15.4
+CURLOPT_SSH_AUTH_TYPES 7.16.1
+CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 7.17.1
+CURLOPT_SSH_PRIVATE_KEYFILE 7.16.1
+CURLOPT_SSH_PUBLIC_KEYFILE 7.16.1
+CURLOPT_SSLCERT 7.1
+CURLOPT_SSLCERTPASSWD 7.17.0
+CURLOPT_SSLCERTTYPE 7.9.3
+CURLOPT_SSLENGINE 7.9.3
+CURLOPT_SSLENGINE_DEFAULT 7.9.3
+CURLOPT_SSLKEY 7.9.3
+CURLOPT_SSLKEYPASSWD 7.17.0
+CURLOPT_SSLKEYPASSWD 7.17.0
+CURLOPT_SSLKEYTYPE 7.9.3
+CURLOPT_SSLVERSION 7.1
+CURLOPT_SSL_CIPHER_LIST 7.9
+CURLOPT_SSL_CTX_DATA 7.10.6
+CURLOPT_SSL_CTX_FUNCTION 7.10.6
+CURLOPT_SSL_SESSIONID_CACHE 7.16.0
+CURLOPT_SSL_VERIFYHOST 7.8.1
+CURLOPT_SSL_VERIFYPEER 7.4.2
+CURLOPT_STDERR 7.1
+CURLOPT_TCP_NODELAY 7.11.2
+CURLOPT_TELNETOPTIONS 7.7
+CURLOPT_TFTPBLKSIZE 7.19.4
+CURLOPT_TIMECONDITION 7.1
+CURLOPT_TIMEOUT 7.1
+CURLOPT_TIMEOUT_MS 7.16.2
+CURLOPT_TIMEVALUE 7.1
+CURLOPT_TRANSFERTEXT 7.11.1
+CURLOPT_UNRESTRICTED_AUTH 7.10.4
+CURLOPT_UPLOAD 7.1
+CURLOPT_URL 7.1
+CURLOPT_USERAGENT 7.1
+CURLOPT_USERNAME 7.19.1
+CURLOPT_USERPWD 7.1
+CURLOPT_USE_SSL 7.17.0
+CURLOPT_VERBOSE 7.1
+CURLOPT_WILDCARDMATCH 7.21.0
+CURLOPT_WRITEDATA 7.9.7
+CURLOPT_WRITEFUNCTION 7.1
+CURLOPT_WRITEHEADER 7.1
+CURLPROTO_ALL 7.19.4
+CURLPROTO_DICT 7.19.4
+CURLPROTO_FILE 7.19.4
+CURLPROTO_FTP 7.19.4
+CURLPROTO_FTPS 7.19.4
+CURLPROTO_HTTP 7.19.4
+CURLPROTO_HTTPS 7.19.4
+CURLPROTO_IMAP 7.20.0
+CURLPROTO_IMAPS 7.20.0
+CURLPROTO_LDAP 7.19.4
+CURLPROTO_LDAPS 7.19.4
+CURLPROTO_POP3 7.20.0
+CURLPROTO_POP3S 7.20.0
+CURLPROTO_RTMP 7.21.0
+CURLPROTO_RTMPE 7.21.0
+CURLPROTO_RTMPS 7.21.0
+CURLPROTO_RTMPT 7.21.0
+CURLPROTO_RTMPTE 7.21.0
+CURLPROTO_RTMPTS 7.21.0
+CURLPROTO_RTSP 7.20.0
+CURLPROTO_SCP 7.19.4
+CURLPROTO_SFTP 7.19.4
+CURLPROTO_SMTP 7.20.0
+CURLPROTO_SMTPS 7.20.0
+CURLPROTO_TELNET 7.19.4
+CURLPROTO_TFTP 7.19.4
+CURLPROXY_HTTP 7.10
+CURLPROXY_HTTP_1_0 7.19.4
+CURLPROXY_SOCKS4 7.10
+CURLPROXY_SOCKS4A 7.18.0
+CURLPROXY_SOCKS5 7.10
+CURLPROXY_SOCKS5_HOSTNAME 7.18.0
+CURLSSH_AUTH_DEFAULT 7.16.1
+CURLSSH_AUTH_HOST 7.16.1
+CURLSSH_AUTH_KEYBOARD 7.16.1
+CURLSSH_AUTH_NONE 7.16.1
+CURLSSH_AUTH_PASSWORD 7.16.1
+CURLSSH_AUTH_PUBLICKEY 7.16.1
+CURLUSESSL_ALL 7.17.0
+CURLUSESSL_ALL 7.17.0
+CURLUSESSL_CONTROL 7.17.0
+CURLUSESSL_CONTROL 7.17.0
+CURLUSESSL_NONE 7.17.0
+CURLUSESSL_NONE 7.17.0
+CURLUSESSL_TRY 7.17.0
+CURLUSESSL_TRY 7.17.0
+CURLVERSION_FIRST 7.10
+CURLVERSION_NOW 7.10
+CURLVERSION_SECOND 7.11.1
+CURLVERSION_THIRD 7.12.0
+CURL_CHUNK_BGN_FUNC_FAIL 7.21.0
+CURL_CHUNK_BGN_FUNC_OK 7.21.0
+CURL_CHUNK_BGN_FUNC_SKIP 7.21.0
+CURL_CHUNK_END_FUNC_FAIL 7.21.0
+CURL_CHUNK_END_FUNC_OK 7.21.0
+CURL_FNMATCHFUNC_FAIL 7.21.0
+CURL_FNMATCHFUNC_MATCH 7.21.0
+CURL_FNMATCHFUNC_NOMATCH 7.21.0
+CURL_HTTP_VERSION_1_0 7.9.1
+CURL_HTTP_VERSION_1_1 7.9.1
+CURL_HTTP_VERSION_NONE 7.9.1
+CURL_IPRESOLVE_V4 7.10.8
+CURL_IPRESOLVE_V6 7.10.8
+CURL_IPRESOLVE_WHATEVER 7.10.8
+CURL_NETRC_IGNORED 7.9.8
+CURL_NETRC_OPTIONAL 7.9.8
+CURL_NETRC_REQUIRED 7.9.8
+CURL_SEEKFUNC_CANTSEEK 7.19.5
+CURL_SEEKFUNC_FAIL 7.19.5
+CURL_SEEKFUNC_OK 7.19.5
+CURL_SSLVERSION_DEFAULT 7.9.2
+CURL_SSLVERSION_SSLv2 7.9.2
+CURL_SSLVERSION_SSLv3 7.9.2
+CURL_SSLVERSION_TLSv1 7.9.2
+CURL_TIMECOND_IFMODSINCE 7.9.7
+CURL_TIMECOND_IFUNMODSINCE 7.9.7
+CURL_TIMECOND_LASTMOD 7.9.7
+CURL_VERSION_ASYNCHDNS 7.10.7
+CURL_VERSION_CONV 7.15.4
+CURL_VERSION_CURLDEBUG 7.19.6
+CURL_VERSION_DEBUG 7.10.6
+CURL_VERSION_GSSNEGOTIATE 7.10.6
+CURL_VERSION_IDN 7.12.0
+CURL_VERSION_IPV6 7.10
+CURL_VERSION_KERBEROS4 7.10
+CURL_VERSION_LARGEFILE 7.11.1
+CURL_VERSION_LIBZ 7.10
+CURL_VERSION_NTLM 7.10.6
+CURL_VERSION_SPNEGO 7.10.8
+CURL_VERSION_SSL 7.10
+CURL_VERSION_SSPI 7.13.2
diff --git a/include/Makefile.am b/include/Makefile.am
new file mode 100644
index 0000000..3b24860
--- /dev/null
+++ b/include/Makefile.am
@@ -0,0 +1,5 @@
+SUBDIRS = curl
+
+EXTRA_DIST = README
+
+AUTOMAKE_OPTIONS = foreign no-dependencies
diff --git a/include/Makefile.in b/include/Makefile.in
new file mode 100644
index 0000000..169197f
--- /dev/null
+++ b/include/Makefile.in
@@ -0,0 +1,566 @@
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005 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.
+
+@SET_MAKE@
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = include
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
+ $(top_srcdir)/m4/curl-confopts.m4 \
+ $(top_srcdir)/m4/curl-functions.m4 \
+ $(top_srcdir)/m4/curl-override.m4 \
+ $(top_srcdir)/m4/curl-reentrant.m4 \
+ $(top_srcdir)/m4/curl-system.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/lib/curl_config.h \
+ $(top_builddir)/src/curl_config.h \
+ $(top_builddir)/include/curl/curlbuild.h
+CONFIG_CLEAN_FILES =
+depcomp =
+am__depfiles_maybe =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-recursive \
+ install-exec-recursive install-info-recursive \
+ install-recursive installcheck-recursive installdirs-recursive \
+ pdf-recursive ps-recursive uninstall-info-recursive \
+ uninstall-recursive
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_LIBHOSTNAME_FALSE = @BUILD_LIBHOSTNAME_FALSE@
+BUILD_LIBHOSTNAME_TRUE = @BUILD_LIBHOSTNAME_TRUE@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_OPTIONS = @CONFIGURE_OPTIONS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CROSSCOMPILING_FALSE = @CROSSCOMPILING_FALSE@
+CROSSCOMPILING_TRUE = @CROSSCOMPILING_TRUE@
+CURLDEBUG_FALSE = @CURLDEBUG_FALSE@
+CURLDEBUG_TRUE = @CURLDEBUG_TRUE@
+CURL_CA_BUNDLE = @CURL_CA_BUNDLE@
+CURL_CFLAG_EXTRAS = @CURL_CFLAG_EXTRAS@
+CURL_DISABLE_DICT = @CURL_DISABLE_DICT@
+CURL_DISABLE_FILE = @CURL_DISABLE_FILE@
+CURL_DISABLE_FTP = @CURL_DISABLE_FTP@
+CURL_DISABLE_GOPHER = @CURL_DISABLE_GOPHER@
+CURL_DISABLE_HTTP = @CURL_DISABLE_HTTP@
+CURL_DISABLE_IMAP = @CURL_DISABLE_IMAP@
+CURL_DISABLE_LDAP = @CURL_DISABLE_LDAP@
+CURL_DISABLE_LDAPS = @CURL_DISABLE_LDAPS@
+CURL_DISABLE_POP3 = @CURL_DISABLE_POP3@
+CURL_DISABLE_PROXY = @CURL_DISABLE_PROXY@
+CURL_DISABLE_RTSP = @CURL_DISABLE_RTSP@
+CURL_DISABLE_SMTP = @CURL_DISABLE_SMTP@
+CURL_DISABLE_TELNET = @CURL_DISABLE_TELNET@
+CURL_DISABLE_TFTP = @CURL_DISABLE_TFTP@
+CURL_LIBS = @CURL_LIBS@
+CURL_NETWORK_LIBS = @CURL_NETWORK_LIBS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_SHARED = @ENABLE_SHARED@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_LDAP_SSL = @HAVE_LDAP_SSL@
+HAVE_LIBZ = @HAVE_LIBZ@
+HAVE_LIBZ_FALSE = @HAVE_LIBZ_FALSE@
+HAVE_LIBZ_TRUE = @HAVE_LIBZ_TRUE@
+HAVE_PK11_CREATEGENERICOBJECT = @HAVE_PK11_CREATEGENERICOBJECT@
+IDN_ENABLED = @IDN_ENABLED@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+IPV6_ENABLED = @IPV6_ENABLED@
+KRB4_ENABLED = @KRB4_ENABLED@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBCURL_LIBS = @LIBCURL_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+MANOPT = @MANOPT@
+MIMPURE_FALSE = @MIMPURE_FALSE@
+MIMPURE_TRUE = @MIMPURE_TRUE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NO_UNDEFINED_FALSE = @NO_UNDEFINED_FALSE@
+NO_UNDEFINED_TRUE = @NO_UNDEFINED_TRUE@
+NROFF = @NROFF@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH = @PATH@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+PKGADD_NAME = @PKGADD_NAME@
+PKGADD_PKG = @PKGADD_PKG@
+PKGADD_VENDOR = @PKGADD_VENDOR@
+PKGCONFIG = @PKGCONFIG@
+RANDOM_FILE = @RANDOM_FILE@
+RANLIB = @RANLIB@
+REQUIRE_LIB_DEPS = @REQUIRE_LIB_DEPS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SONAME_BUMP_FALSE = @SONAME_BUMP_FALSE@
+SONAME_BUMP_TRUE = @SONAME_BUMP_TRUE@
+SSL_ENABLED = @SSL_ENABLED@
+STATICLIB_FALSE = @STATICLIB_FALSE@
+STATICLIB_TRUE = @STATICLIB_TRUE@
+STRIP = @STRIP@
+SUPPORT_FEATURES = @SUPPORT_FEATURES@
+SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
+TEST_SERVER_LIBS = @TEST_SERVER_LIBS@
+USE_ARES = @USE_ARES@
+USE_EMBEDDED_ARES_FALSE = @USE_EMBEDDED_ARES_FALSE@
+USE_EMBEDDED_ARES_TRUE = @USE_EMBEDDED_ARES_TRUE@
+USE_GNUTLS = @USE_GNUTLS@
+USE_LIBRTMP = @USE_LIBRTMP@
+USE_LIBSSH2 = @USE_LIBSSH2@
+USE_MANUAL_FALSE = @USE_MANUAL_FALSE@
+USE_MANUAL_TRUE = @USE_MANUAL_TRUE@
+USE_NSS = @USE_NSS@
+USE_OPENLDAP = @USE_OPENLDAP@
+USE_POLARSSL = @USE_POLARSSL@
+USE_SSLEAY = @USE_SSLEAY@
+USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
+VERSION = @VERSION@
+VERSIONNUM = @VERSIONNUM@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+libext = @libext@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+SUBDIRS = curl
+EXTRA_DIST = README
+AUTOMAKE_OPTIONS = foreign no-dependencies
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign include/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --foreign include/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+ -rm -f libtool
+uninstall-info-am:
+
+# 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.
+$(RECURSIVE_TARGETS):
+ @failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ 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) \
+ || eval $$failcom; \
+ 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:
+ @failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ rev=''; for subdir in $$list; do \
+ if test "$$subdir" = "."; then :; else \
+ rev="$$subdir $$rev"; \
+ fi; \
+ done; \
+ 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) \
+ || eval $$failcom; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique; \
+ fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ list='$(DISTFILES)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkdir_p) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+ list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -d "$(distdir)/$$subdir" \
+ || $(mkdir_p) "$(distdir)/$$subdir" \
+ || exit 1; \
+ distdir=`$(am__cd) $(distdir) && pwd`; \
+ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
+ (cd $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$top_distdir" \
+ distdir="$$distdir/$$subdir" \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-libtool \
+ distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-recursive
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-info-am
+
+uninstall-info: uninstall-info-recursive
+
+.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \
+ clean clean-generic clean-libtool clean-recursive ctags \
+ ctags-recursive distclean distclean-generic distclean-libtool \
+ distclean-recursive distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-exec install-exec-am install-info \
+ install-info-am install-man install-strip installcheck \
+ installcheck-am installdirs installdirs-am maintainer-clean \
+ maintainer-clean-generic maintainer-clean-recursive \
+ mostlyclean mostlyclean-generic mostlyclean-libtool \
+ mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \
+ uninstall uninstall-am uninstall-info-am
+
+# 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/include/curl/Makefile.am b/include/curl/Makefile.am
new file mode 100644
index 0000000..a3b4443
--- /dev/null
+++ b/include/curl/Makefile.am
@@ -0,0 +1,25 @@
+pkginclude_HEADERS = \
+ curl.h curlver.h easy.h mprintf.h stdcheaders.h types.h multi.h \
+ typecheck-gcc.h curlbuild.h curlrules.h
+
+pkgincludedir= $(includedir)/curl
+
+# curlbuild.h does not exist in the git tree. When the original libcurl
+# source code distribution archive file is created, curlbuild.h.dist is
+# renamed to curlbuild.h and included in the tarball so that it can be
+# used directly on non-configure systems.
+#
+# The distributed curlbuild.h will be overwritten on configure systems
+# when the configure script runs, with one that is suitable and specific
+# to the library being configured and built.
+#
+# curlbuild.h.in is the distributed template file from which the configure
+# script creates curlbuild.h at library configuration time, overwiting the
+# one included in the distribution archive.
+#
+# curlbuild.h.dist is not included in the source code distribution archive.
+
+EXTRA_DIST = curlbuild.h.in
+
+DISTCLEANFILES = curlbuild.h
+
diff --git a/include/curl/Makefile.in b/include/curl/Makefile.in
new file mode 100644
index 0000000..0b90bab
--- /dev/null
+++ b/include/curl/Makefile.in
@@ -0,0 +1,521 @@
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005 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.
+
+@SET_MAKE@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+top_builddir = ../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = include/curl
+DIST_COMMON = $(pkginclude_HEADERS) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in $(srcdir)/curlbuild.h.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
+ $(top_srcdir)/m4/curl-confopts.m4 \
+ $(top_srcdir)/m4/curl-functions.m4 \
+ $(top_srcdir)/m4/curl-override.m4 \
+ $(top_srcdir)/m4/curl-reentrant.m4 \
+ $(top_srcdir)/m4/curl-system.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/lib/curl_config.h \
+ $(top_builddir)/src/curl_config.h curlbuild.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+am__installdirs = "$(DESTDIR)$(pkgincludedir)"
+pkgincludeHEADERS_INSTALL = $(INSTALL_HEADER)
+HEADERS = $(pkginclude_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+pkgincludedir = $(includedir)/curl
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_LIBHOSTNAME_FALSE = @BUILD_LIBHOSTNAME_FALSE@
+BUILD_LIBHOSTNAME_TRUE = @BUILD_LIBHOSTNAME_TRUE@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_OPTIONS = @CONFIGURE_OPTIONS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CROSSCOMPILING_FALSE = @CROSSCOMPILING_FALSE@
+CROSSCOMPILING_TRUE = @CROSSCOMPILING_TRUE@
+CURLDEBUG_FALSE = @CURLDEBUG_FALSE@
+CURLDEBUG_TRUE = @CURLDEBUG_TRUE@
+CURL_CA_BUNDLE = @CURL_CA_BUNDLE@
+CURL_CFLAG_EXTRAS = @CURL_CFLAG_EXTRAS@
+CURL_DISABLE_DICT = @CURL_DISABLE_DICT@
+CURL_DISABLE_FILE = @CURL_DISABLE_FILE@
+CURL_DISABLE_FTP = @CURL_DISABLE_FTP@
+CURL_DISABLE_GOPHER = @CURL_DISABLE_GOPHER@
+CURL_DISABLE_HTTP = @CURL_DISABLE_HTTP@
+CURL_DISABLE_IMAP = @CURL_DISABLE_IMAP@
+CURL_DISABLE_LDAP = @CURL_DISABLE_LDAP@
+CURL_DISABLE_LDAPS = @CURL_DISABLE_LDAPS@
+CURL_DISABLE_POP3 = @CURL_DISABLE_POP3@
+CURL_DISABLE_PROXY = @CURL_DISABLE_PROXY@
+CURL_DISABLE_RTSP = @CURL_DISABLE_RTSP@
+CURL_DISABLE_SMTP = @CURL_DISABLE_SMTP@
+CURL_DISABLE_TELNET = @CURL_DISABLE_TELNET@
+CURL_DISABLE_TFTP = @CURL_DISABLE_TFTP@
+CURL_LIBS = @CURL_LIBS@
+CURL_NETWORK_LIBS = @CURL_NETWORK_LIBS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_SHARED = @ENABLE_SHARED@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_LDAP_SSL = @HAVE_LDAP_SSL@
+HAVE_LIBZ = @HAVE_LIBZ@
+HAVE_LIBZ_FALSE = @HAVE_LIBZ_FALSE@
+HAVE_LIBZ_TRUE = @HAVE_LIBZ_TRUE@
+HAVE_PK11_CREATEGENERICOBJECT = @HAVE_PK11_CREATEGENERICOBJECT@
+IDN_ENABLED = @IDN_ENABLED@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+IPV6_ENABLED = @IPV6_ENABLED@
+KRB4_ENABLED = @KRB4_ENABLED@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBCURL_LIBS = @LIBCURL_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+MANOPT = @MANOPT@
+MIMPURE_FALSE = @MIMPURE_FALSE@
+MIMPURE_TRUE = @MIMPURE_TRUE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NO_UNDEFINED_FALSE = @NO_UNDEFINED_FALSE@
+NO_UNDEFINED_TRUE = @NO_UNDEFINED_TRUE@
+NROFF = @NROFF@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH = @PATH@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+PKGADD_NAME = @PKGADD_NAME@
+PKGADD_PKG = @PKGADD_PKG@
+PKGADD_VENDOR = @PKGADD_VENDOR@
+PKGCONFIG = @PKGCONFIG@
+RANDOM_FILE = @RANDOM_FILE@
+RANLIB = @RANLIB@
+REQUIRE_LIB_DEPS = @REQUIRE_LIB_DEPS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SONAME_BUMP_FALSE = @SONAME_BUMP_FALSE@
+SONAME_BUMP_TRUE = @SONAME_BUMP_TRUE@
+SSL_ENABLED = @SSL_ENABLED@
+STATICLIB_FALSE = @STATICLIB_FALSE@
+STATICLIB_TRUE = @STATICLIB_TRUE@
+STRIP = @STRIP@
+SUPPORT_FEATURES = @SUPPORT_FEATURES@
+SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
+TEST_SERVER_LIBS = @TEST_SERVER_LIBS@
+USE_ARES = @USE_ARES@
+USE_EMBEDDED_ARES_FALSE = @USE_EMBEDDED_ARES_FALSE@
+USE_EMBEDDED_ARES_TRUE = @USE_EMBEDDED_ARES_TRUE@
+USE_GNUTLS = @USE_GNUTLS@
+USE_LIBRTMP = @USE_LIBRTMP@
+USE_LIBSSH2 = @USE_LIBSSH2@
+USE_MANUAL_FALSE = @USE_MANUAL_FALSE@
+USE_MANUAL_TRUE = @USE_MANUAL_TRUE@
+USE_NSS = @USE_NSS@
+USE_OPENLDAP = @USE_OPENLDAP@
+USE_POLARSSL = @USE_POLARSSL@
+USE_SSLEAY = @USE_SSLEAY@
+USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
+VERSION = @VERSION@
+VERSIONNUM = @VERSIONNUM@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+libext = @libext@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+pkginclude_HEADERS = \
+ curl.h curlver.h easy.h mprintf.h stdcheaders.h types.h multi.h \
+ typecheck-gcc.h curlbuild.h curlrules.h
+
+
+# curlbuild.h does not exist in the git tree. When the original libcurl
+# source code distribution archive file is created, curlbuild.h.dist is
+# renamed to curlbuild.h and included in the tarball so that it can be
+# used directly on non-configure systems.
+#
+# The distributed curlbuild.h will be overwritten on configure systems
+# when the configure script runs, with one that is suitable and specific
+# to the library being configured and built.
+#
+# curlbuild.h.in is the distributed template file from which the configure
+# script creates curlbuild.h at library configuration time, overwiting the
+# one included in the distribution archive.
+#
+# curlbuild.h.dist is not included in the source code distribution archive.
+EXTRA_DIST = curlbuild.h.in
+DISTCLEANFILES = curlbuild.h
+all: curlbuild.h
+ $(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign include/curl/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --foreign include/curl/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+curlbuild.h: stamp-h3
+ @if test ! -f $@; then \
+ rm -f stamp-h3; \
+ $(MAKE) stamp-h3; \
+ else :; fi
+
+stamp-h3: $(srcdir)/curlbuild.h.in $(top_builddir)/config.status
+ @rm -f stamp-h3
+ cd $(top_builddir) && $(SHELL) ./config.status include/curl/curlbuild.h
+$(srcdir)/curlbuild.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_srcdir) && $(AUTOHEADER)
+ rm -f stamp-h3
+ touch $@
+
+distclean-hdr:
+ -rm -f curlbuild.h stamp-h3
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+ -rm -f libtool
+uninstall-info-am:
+install-pkgincludeHEADERS: $(pkginclude_HEADERS)
+ @$(NORMAL_INSTALL)
+ test -z "$(pkgincludedir)" || $(mkdir_p) "$(DESTDIR)$(pkgincludedir)"
+ @list='$(pkginclude_HEADERS)'; for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ f=$(am__strip_dir) \
+ echo " $(pkgincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgincludedir)/$$f'"; \
+ $(pkgincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgincludedir)/$$f"; \
+ done
+
+uninstall-pkgincludeHEADERS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(pkginclude_HEADERS)'; for p in $$list; do \
+ f=$(am__strip_dir) \
+ echo " rm -f '$(DESTDIR)$(pkgincludedir)/$$f'"; \
+ rm -f "$(DESTDIR)$(pkgincludedir)/$$f"; \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) curlbuild.h.in $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) curlbuild.h.in $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) curlbuild.h.in $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) curlbuild.h.in $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ list='$(DISTFILES)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkdir_p) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(HEADERS) curlbuild.h
+installdirs:
+ for dir in "$(DESTDIR)$(pkgincludedir)"; do \
+ test -z "$$dir" || $(mkdir_p) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-hdr \
+ distclean-libtool distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-pkgincludeHEADERS
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am uninstall-pkgincludeHEADERS
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool ctags distclean distclean-generic distclean-hdr \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-exec install-exec-am install-info \
+ install-info-am install-man install-pkgincludeHEADERS \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags uninstall uninstall-am uninstall-info-am \
+ uninstall-pkgincludeHEADERS
+
+# 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/include/curl/curl.h b/include/curl/curl.h
index e635968..5bc85cb 100644
--- a/include/curl/curl.h
+++ b/include/curl/curl.h
@@ -179,7 +179,7 @@ typedef int (*curl_progress_callback)(void *clientp,
time for those who feel adventurous. The practical minimum is about
400 bytes since libcurl uses a buffer of this size as a scratch area
(unrelated to network send operations). */
-#define CURL_MAX_WRITE_SIZE 16384
+#define CURL_MAX_WRITE_SIZE 32768
#endif
#ifndef CURL_MAX_HTTP_HEADER
@@ -198,6 +198,97 @@ typedef size_t (*curl_write_callback)(char *buffer,
size_t nitems,
void *outstream);
+
+
+/* enumeration of file types */
+typedef enum {
+ CURLFILETYPE_FILE = 0,
+ CURLFILETYPE_DIRECTORY,
+ CURLFILETYPE_SYMLINK,
+ CURLFILETYPE_DEVICE_BLOCK,
+ CURLFILETYPE_DEVICE_CHAR,
+ CURLFILETYPE_NAMEDPIPE,
+ CURLFILETYPE_SOCKET,
+ CURLFILETYPE_DOOR, /* is possible only on Sun Solaris now */
+
+ CURLFILETYPE_UNKNOWN /* should never occur */
+} curlfiletype;
+
+#define CURLFINFOFLAG_KNOWN_FILENAME (1<<0)
+#define CURLFINFOFLAG_KNOWN_FILETYPE (1<<1)
+#define CURLFINFOFLAG_KNOWN_TIME (1<<2)
+#define CURLFINFOFLAG_KNOWN_PERM (1<<3)
+#define CURLFINFOFLAG_KNOWN_UID (1<<4)
+#define CURLFINFOFLAG_KNOWN_GID (1<<5)
+#define CURLFINFOFLAG_KNOWN_SIZE (1<<6)
+#define CURLFINFOFLAG_KNOWN_HLINKCOUNT (1<<7)
+
+/* Content of this structure depends on information which is known and is
+ achievable (e.g. by FTP LIST parsing). Please see the url_easy_setopt(3) man
+ page for callbacks returning this structure -- some fields are mandatory,
+ some others are optional. The FLAG field has special meaning. */
+struct curl_fileinfo {
+ char *filename;
+ curlfiletype filetype;
+ time_t time;
+ unsigned int perm;
+ int uid;
+ int gid;
+ curl_off_t size;
+ long int hardlinks;
+
+ struct {
+ /* If some of these fields is not NULL, it is a pointer to b_data. */
+ char *time;
+ char *perm;
+ char *user;
+ char *group;
+ char *target; /* pointer to the target filename of a symlink */
+ } strings;
+
+ unsigned int flags;
+
+ /* used internally */
+ char * b_data;
+ size_t b_size;
+ size_t b_used;
+};
+
+/* return codes for CURLOPT_CHUNK_BGN_FUNCTION */
+#define CURL_CHUNK_BGN_FUNC_OK 0
+#define CURL_CHUNK_BGN_FUNC_FAIL 1 /* tell the lib to end the task */
+#define CURL_CHUNK_BGN_FUNC_SKIP 2 /* skip this chunk over */
+
+/* if splitting of data transfer is enabled, this callback is called before
+ download of an individual chunk started. Note that parameter "remains" works
+ only for FTP wildcard downloading (for now), otherwise is not used */
+typedef long (*curl_chunk_bgn_callback)(const void *transfer_info,
+ void *ptr,
+ int remains);
+
+/* return codes for CURLOPT_CHUNK_END_FUNCTION */
+#define CURL_CHUNK_END_FUNC_OK 0
+#define CURL_CHUNK_END_FUNC_FAIL 1 /* tell the lib to end the task */
+
+/* If splitting of data transfer is enabled this callback is called after
+ download of an individual chunk finished.
+ Note! After this callback was set then it have to be called FOR ALL chunks.
+ Even if downloading of this chunk was skipped in CHUNK_BGN_FUNC.
+ This is the reason why we don't need "transfer_info" parameter in this
+ callback and we are not interested in "remains" parameter too. */
+typedef long (*curl_chunk_end_callback)(void *ptr);
+
+/* return codes for FNMATCHFUNCTION */
+#define CURL_FNMATCHFUNC_MATCH 0 /* string corresponds to the pattern */
+#define CURL_FNMATCHFUNC_NOMATCH 1 /* pattern doesn't match the string */
+#define CURL_FNMATCHFUNC_FAIL 2 /* an error occurred */
+
+/* callback type for wildcard downloading pattern matching. If the
+ string matches the pattern, return CURL_FNMATCHFUNC_MATCH value, etc. */
+typedef int (*curl_fnmatch_callback)(void *ptr,
+ const char *pattern,
+ const char *string);
+
/* These are the return codes for the seek callbacks */
#define CURL_SEEKFUNC_OK 0
#define CURL_SEEKFUNC_FAIL 1 /* fail the entire transfer */
@@ -409,6 +500,8 @@ typedef enum {
CURLE_FTP_PRET_FAILED, /* 84 - a PRET command failed */
CURLE_RTSP_CSEQ_ERROR, /* 85 - mismatch of RTSP CSeq numbers */
CURLE_RTSP_SESSION_ERROR, /* 86 - mismatch of RTSP Session Identifiers */
+ CURLE_FTP_BAD_FILE_LIST, /* 87 - unable to parse FTP file list */
+ CURLE_CHUNK_FAILED, /* 88 - chunk callback reported error */
CURL_LAST /* never use! */
} CURLcode;
@@ -623,6 +716,13 @@ typedef enum {
#define CURLPROTO_SMTP (1<<16)
#define CURLPROTO_SMTPS (1<<17)
#define CURLPROTO_RTSP (1<<18)
+#define CURLPROTO_RTMP (1<<19)
+#define CURLPROTO_RTMPT (1<<20)
+#define CURLPROTO_RTMPE (1<<21)
+#define CURLPROTO_RTMPTE (1<<22)
+#define CURLPROTO_RTMPS (1<<23)
+#define CURLPROTO_RTMPTS (1<<24)
+#define CURLPROTO_GOPHER (1<<25)
#define CURLPROTO_ALL (~0) /* enable everything */
/* long may be 32 or 64 bits, but we should never depend on anything else
@@ -1316,6 +1416,26 @@ typedef enum {
/* Let the application define a custom write method for RTP data */
CINIT(INTERLEAVEFUNCTION, FUNCTIONPOINT, 196),
+ /* Turn on wildcard matching */
+ CINIT(WILDCARDMATCH, LONG, 197),
+
+ /* Directory matching callback called before downloading of an
+ individual file (chunk) started */
+ CINIT(CHUNK_BGN_FUNCTION, FUNCTIONPOINT, 198),
+
+ /* Directory matching callback called after the file (chunk)
+ was downloaded, or skipped */
+ CINIT(CHUNK_END_FUNCTION, FUNCTIONPOINT, 199),
+
+ /* Change match (fnmatch-like) callback for wildcard matching */
+ CINIT(FNMATCH_FUNCTION, FUNCTIONPOINT, 200),
+
+ /* Let the application define custom chunk data pointer */
+ CINIT(CHUNK_DATA, OBJECTPOINT, 201),
+
+ /* FNMATCH_FUNCTION user pointer */
+ CINIT(FNMATCH_DATA, OBJECTPOINT, 202),
+
CURLOPT_LASTENTRY /* the last unused */
} CURLoption;
@@ -1764,9 +1884,12 @@ typedef enum {
CURLINFO_RTSP_CLIENT_CSEQ = CURLINFO_LONG + 37,
CURLINFO_RTSP_SERVER_CSEQ = CURLINFO_LONG + 38,
CURLINFO_RTSP_CSEQ_RECV = CURLINFO_LONG + 39,
+ CURLINFO_PRIMARY_PORT = CURLINFO_LONG + 40,
+ CURLINFO_LOCAL_IP = CURLINFO_STRING + 41,
+ CURLINFO_LOCAL_PORT = CURLINFO_LONG + 42,
/* Fill in new entries below here! */
- CURLINFO_LASTONE = 39
+ CURLINFO_LASTONE = 42
} CURLINFO;
/* CURLINFO_RESPONSE_CODE is the new name for the option previously known as
diff --git a/include/curl/curlbuild.h b/include/curl/curlbuild.h
index 951c10d..d0b32ac 100644
--- a/include/curl/curlbuild.h
+++ b/include/curl/curlbuild.h
@@ -1,4 +1,3 @@
-/* include/curl/curlbuild.h. Generated from curlbuild.h.in by configure. */
#ifndef __CURL_CURLBUILD_H
#define __CURL_CURLBUILD_H
/***************************************************************************
@@ -8,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -31,6 +30,20 @@
* NOTE 1:
* -------
*
+ * See file include/curl/curlbuild.h.in, run configure, and forget
+ * that this file exists it is only used for non-configure systems.
+ * But you can keep reading if you want ;-)
+ *
+ */
+
+/* ================================================================ */
+/* NOTES FOR NON-CONFIGURE SYSTEMS */
+/* ================================================================ */
+
+/*
+ * NOTE 1:
+ * -------
+ *
* Nothing in this file is intended to be modified or adjusted by the
* curl library user nor by the curl library builder.
*
@@ -38,20 +51,57 @@
* or fixed in this file, then, report it on the libcurl development
* mailing list: http://cool.haxx.se/mailman/listinfo/curl-library/
*
+ * Try to keep one section per platform, compiler and architecture,
+ * otherwise, if an existing section is reused for a different one and
+ * later on the original is adjusted, probably the piggybacking one can
+ * be adversely changed.
+ *
+ * In order to differentiate between platforms/compilers/architectures
+ * use only compiler built in predefined preprocessor symbols.
+ *
* This header file shall only export symbols which are 'curl' or 'CURL'
* prefixed, otherwise public name space would be polluted.
*
* NOTE 2:
* -------
*
- * Right now you might be staring at file include/curl/curlbuild.h.in or
+ * For any given platform/compiler curl_off_t must be typedef'ed to a
+ * 64-bit wide signed integral data type. The width of this data type
+ * must remain constant and independent of any possible large file
+ * support settings.
+ *
+ * As an exception to the above, curl_off_t shall be typedef'ed to a
+ * 32-bit wide signed integral data type if there is no 64-bit type.
+ *
+ * As a general rule, curl_off_t shall not be mapped to off_t. This
+ * rule shall only be violated if off_t is the only 64-bit data type
+ * available and the size of off_t is independent of large file support
+ * settings. Keep your build on the safe side avoiding an off_t gating.
+ * If you have a 64-bit off_t then take for sure that another 64-bit
+ * data type exists, dig deeper and you will find it.
+ *
+ * NOTE 3:
+ * -------
+ *
+ * Right now you might be staring at file include/curl/curlbuild.h.dist or
* at file include/curl/curlbuild.h, this is due to the following reason:
+ * file include/curl/curlbuild.h.dist is renamed to include/curl/curlbuild.h
+ * when the libcurl source code distribution archive file is created.
+ *
+ * File include/curl/curlbuild.h.dist is not included in the distribution
+ * archive. File include/curl/curlbuild.h is not present in the git tree.
+ *
+ * The distributed include/curl/curlbuild.h file is only intended to be used
+ * on systems which can not run the also distributed configure script.
*
* On systems capable of running the configure script, the configure process
* will overwrite the distributed include/curl/curlbuild.h file with one that
* is suitable and specific to the library being configured and built, which
* is generated from the include/curl/curlbuild.h.in template file.
*
+ * If you check out from git on a non-configure platform, you must run the
+ * appropriate buildconf* script to set up curlbuild.h and other local files.
+ *
*/
/* ================================================================ */
@@ -109,83 +159,425 @@
#endif
/* ================================================================ */
-/* EXTERNAL INTERFACE SETTINGS FOR CONFIGURE CAPABLE SYSTEMS ONLY */
+/* EXTERNAL INTERFACE SETTINGS FOR NON-CONFIGURE SYSTEMS ONLY */
/* ================================================================ */
-/* Configure process defines this to 1 when it finds out that system */
-/* header file ws2tcpip.h must be included by the external interface. */
-/* #undef CURL_PULL_WS2TCPIP_H */
-#ifdef CURL_PULL_WS2TCPIP_H
-# ifndef WIN32_LEAN_AND_MEAN
-# define WIN32_LEAN_AND_MEAN
+#if defined(__DJGPP__) || defined(__GO32__)
+# if defined(__DJGPP__) && (__DJGPP__ > 1)
+# define CURL_SIZEOF_LONG 4
+# define CURL_TYPEOF_CURL_OFF_T long long
+# define CURL_FORMAT_CURL_OFF_T "lld"
+# define CURL_FORMAT_CURL_OFF_TU "llu"
+# define CURL_FORMAT_OFF_T "%lld"
+# define CURL_SIZEOF_CURL_OFF_T 8
+# define CURL_SUFFIX_CURL_OFF_T LL
+# define CURL_SUFFIX_CURL_OFF_TU ULL
+# else
+# define CURL_SIZEOF_LONG 4
+# define CURL_TYPEOF_CURL_OFF_T long
+# define CURL_FORMAT_CURL_OFF_T "ld"
+# define CURL_FORMAT_CURL_OFF_TU "lu"
+# define CURL_FORMAT_OFF_T "%ld"
+# define CURL_SIZEOF_CURL_OFF_T 4
+# define CURL_SUFFIX_CURL_OFF_T L
+# define CURL_SUFFIX_CURL_OFF_TU UL
+# endif
+# define CURL_TYPEOF_CURL_SOCKLEN_T int
+# define CURL_SIZEOF_CURL_SOCKLEN_T 4
+
+#elif defined(__SALFORDC__)
+# define CURL_SIZEOF_LONG 4
+# define CURL_TYPEOF_CURL_OFF_T long
+# define CURL_FORMAT_CURL_OFF_T "ld"
+# define CURL_FORMAT_CURL_OFF_TU "lu"
+# define CURL_FORMAT_OFF_T "%ld"
+# define CURL_SIZEOF_CURL_OFF_T 4
+# define CURL_SUFFIX_CURL_OFF_T L
+# define CURL_SUFFIX_CURL_OFF_TU UL
+# define CURL_TYPEOF_CURL_SOCKLEN_T int
+# define CURL_SIZEOF_CURL_SOCKLEN_T 4
+
+#elif defined(__BORLANDC__)
+# if (__BORLANDC__ < 0x520)
+# define CURL_SIZEOF_LONG 4
+# define CURL_TYPEOF_CURL_OFF_T long
+# define CURL_FORMAT_CURL_OFF_T "ld"
+# define CURL_FORMAT_CURL_OFF_TU "lu"
+# define CURL_FORMAT_OFF_T "%ld"
+# define CURL_SIZEOF_CURL_OFF_T 4
+# define CURL_SUFFIX_CURL_OFF_T L
+# define CURL_SUFFIX_CURL_OFF_TU UL
+# else
+# define CURL_SIZEOF_LONG 4
+# define CURL_TYPEOF_CURL_OFF_T __int64
+# define CURL_FORMAT_CURL_OFF_T "I64d"
+# define CURL_FORMAT_CURL_OFF_TU "I64u"
+# define CURL_FORMAT_OFF_T "%I64d"
+# define CURL_SIZEOF_CURL_OFF_T 8
+# define CURL_SUFFIX_CURL_OFF_T i64
+# define CURL_SUFFIX_CURL_OFF_TU ui64
+# endif
+# define CURL_TYPEOF_CURL_SOCKLEN_T int
+# define CURL_SIZEOF_CURL_SOCKLEN_T 4
+
+#elif defined(__TURBOC__)
+# define CURL_SIZEOF_LONG 4
+# define CURL_TYPEOF_CURL_OFF_T long
+# define CURL_FORMAT_CURL_OFF_T "ld"
+# define CURL_FORMAT_CURL_OFF_TU "lu"
+# define CURL_FORMAT_OFF_T "%ld"
+# define CURL_SIZEOF_CURL_OFF_T 4
+# define CURL_SUFFIX_CURL_OFF_T L
+# define CURL_SUFFIX_CURL_OFF_TU UL
+# define CURL_TYPEOF_CURL_SOCKLEN_T int
+# define CURL_SIZEOF_CURL_SOCKLEN_T 4
+
+#elif defined(__WATCOMC__)
+# if defined(__386__)
+# define CURL_SIZEOF_LONG 4
+# define CURL_TYPEOF_CURL_OFF_T __int64
+# define CURL_FORMAT_CURL_OFF_T "I64d"
+# define CURL_FORMAT_CURL_OFF_TU "I64u"
+# define CURL_FORMAT_OFF_T "%I64d"
+# define CURL_SIZEOF_CURL_OFF_T 8
+# define CURL_SUFFIX_CURL_OFF_T i64
+# define CURL_SUFFIX_CURL_OFF_TU ui64
+# else
+# define CURL_SIZEOF_LONG 4
+# define CURL_TYPEOF_CURL_OFF_T long
+# define CURL_FORMAT_CURL_OFF_T "ld"
+# define CURL_FORMAT_CURL_OFF_TU "lu"
+# define CURL_FORMAT_OFF_T "%ld"
+# define CURL_SIZEOF_CURL_OFF_T 4
+# define CURL_SUFFIX_CURL_OFF_T L
+# define CURL_SUFFIX_CURL_OFF_TU UL
+# endif
+# define CURL_TYPEOF_CURL_SOCKLEN_T int
+# define CURL_SIZEOF_CURL_SOCKLEN_T 4
+
+#elif defined(__POCC__)
+# if (__POCC__ < 280)
+# define CURL_SIZEOF_LONG 4
+# define CURL_TYPEOF_CURL_OFF_T long
+# define CURL_FORMAT_CURL_OFF_T "ld"
+# define CURL_FORMAT_CURL_OFF_TU "lu"
+# define CURL_FORMAT_OFF_T "%ld"
+# define CURL_SIZEOF_CURL_OFF_T 4
+# define CURL_SUFFIX_CURL_OFF_T L
+# define CURL_SUFFIX_CURL_OFF_TU UL
+# elif defined(_MSC_VER)
+# define CURL_SIZEOF_LONG 4
+# define CURL_TYPEOF_CURL_OFF_T __int64
+# define CURL_FORMAT_CURL_OFF_T "I64d"
+# define CURL_FORMAT_CURL_OFF_TU "I64u"
+# define CURL_FORMAT_OFF_T "%I64d"
+# define CURL_SIZEOF_CURL_OFF_T 8
+# define CURL_SUFFIX_CURL_OFF_T i64
+# define CURL_SUFFIX_CURL_OFF_TU ui64
+# else
+# define CURL_SIZEOF_LONG 4
+# define CURL_TYPEOF_CURL_OFF_T long long
+# define CURL_FORMAT_CURL_OFF_T "lld"
+# define CURL_FORMAT_CURL_OFF_TU "llu"
+# define CURL_FORMAT_OFF_T "%lld"
+# define CURL_SIZEOF_CURL_OFF_T 8
+# define CURL_SUFFIX_CURL_OFF_T LL
+# define CURL_SUFFIX_CURL_OFF_TU ULL
+# endif
+# define CURL_TYPEOF_CURL_SOCKLEN_T int
+# define CURL_SIZEOF_CURL_SOCKLEN_T 4
+
+#elif defined(__LCC__)
+# define CURL_SIZEOF_LONG 4
+# define CURL_TYPEOF_CURL_OFF_T long
+# define CURL_FORMAT_CURL_OFF_T "ld"
+# define CURL_FORMAT_CURL_OFF_TU "lu"
+# define CURL_FORMAT_OFF_T "%ld"
+# define CURL_SIZEOF_CURL_OFF_T 4
+# define CURL_SUFFIX_CURL_OFF_T L
+# define CURL_SUFFIX_CURL_OFF_TU UL
+# define CURL_TYPEOF_CURL_SOCKLEN_T int
+# define CURL_SIZEOF_CURL_SOCKLEN_T 4
+
+#elif defined(__SYMBIAN32__)
+# if defined(__EABI__) /* Treat all ARM compilers equally */
+# define CURL_SIZEOF_LONG 4
+# define CURL_TYPEOF_CURL_OFF_T long long
+# define CURL_FORMAT_CURL_OFF_T "lld"
+# define CURL_FORMAT_CURL_OFF_TU "llu"
+# define CURL_FORMAT_OFF_T "%lld"
+# define CURL_SIZEOF_CURL_OFF_T 8
+# define CURL_SUFFIX_CURL_OFF_T LL
+# define CURL_SUFFIX_CURL_OFF_TU ULL
+# elif defined(__CW32__)
+# pragma longlong on
+# define CURL_SIZEOF_LONG 4
+# define CURL_TYPEOF_CURL_OFF_T long long
+# define CURL_FORMAT_CURL_OFF_T "lld"
+# define CURL_FORMAT_CURL_OFF_TU "llu"
+# define CURL_FORMAT_OFF_T "%lld"
+# define CURL_SIZEOF_CURL_OFF_T 8
+# define CURL_SUFFIX_CURL_OFF_T LL
+# define CURL_SUFFIX_CURL_OFF_TU ULL
+# elif defined(__VC32__)
+# define CURL_SIZEOF_LONG 4
+# define CURL_TYPEOF_CURL_OFF_T __int64
+# define CURL_FORMAT_CURL_OFF_T "lld"
+# define CURL_FORMAT_CURL_OFF_TU "llu"
+# define CURL_FORMAT_OFF_T "%lld"
+# define CURL_SIZEOF_CURL_OFF_T 8
+# define CURL_SUFFIX_CURL_OFF_T LL
+# define CURL_SUFFIX_CURL_OFF_TU ULL
+# endif
+# define CURL_TYPEOF_CURL_SOCKLEN_T unsigned int
+# define CURL_SIZEOF_CURL_SOCKLEN_T 4
+
+#elif defined(__MWERKS__)
+# define CURL_SIZEOF_LONG 4
+# define CURL_TYPEOF_CURL_OFF_T long long
+# define CURL_FORMAT_CURL_OFF_T "lld"
+# define CURL_FORMAT_CURL_OFF_TU "llu"
+# define CURL_FORMAT_OFF_T "%lld"
+# define CURL_SIZEOF_CURL_OFF_T 8
+# define CURL_SUFFIX_CURL_OFF_T LL
+# define CURL_SUFFIX_CURL_OFF_TU ULL
+# define CURL_TYPEOF_CURL_SOCKLEN_T int
+# define CURL_SIZEOF_CURL_SOCKLEN_T 4
+
+#elif defined(_WIN32_WCE)
+# define CURL_SIZEOF_LONG 4
+# define CURL_TYPEOF_CURL_OFF_T __int64
+# define CURL_FORMAT_CURL_OFF_T "I64d"
+# define CURL_FORMAT_CURL_OFF_TU "I64u"
+# define CURL_FORMAT_OFF_T "%I64d"
+# define CURL_SIZEOF_CURL_OFF_T 8
+# define CURL_SUFFIX_CURL_OFF_T i64
+# define CURL_SUFFIX_CURL_OFF_TU ui64
+# define CURL_TYPEOF_CURL_SOCKLEN_T int
+# define CURL_SIZEOF_CURL_SOCKLEN_T 4
+
+#elif defined(__MINGW32__)
+# define CURL_SIZEOF_LONG 4
+# define CURL_TYPEOF_CURL_OFF_T long long
+# define CURL_FORMAT_CURL_OFF_T "I64d"
+# define CURL_FORMAT_CURL_OFF_TU "I64u"
+# define CURL_FORMAT_OFF_T "%I64d"
+# define CURL_SIZEOF_CURL_OFF_T 8
+# define CURL_SUFFIX_CURL_OFF_T LL
+# define CURL_SUFFIX_CURL_OFF_TU ULL
+# define CURL_TYPEOF_CURL_SOCKLEN_T int
+# define CURL_SIZEOF_CURL_SOCKLEN_T 4
+
+#elif defined(__VMS)
+# if defined(__VAX)
+# define CURL_SIZEOF_LONG 4
+# define CURL_TYPEOF_CURL_OFF_T long
+# define CURL_FORMAT_CURL_OFF_T "ld"
+# define CURL_FORMAT_CURL_OFF_TU "lu"
+# define CURL_FORMAT_OFF_T "%ld"
+# define CURL_SIZEOF_CURL_OFF_T 4
+# define CURL_SUFFIX_CURL_OFF_T L
+# define CURL_SUFFIX_CURL_OFF_TU UL
+# else
+# define CURL_SIZEOF_LONG 4
+# define CURL_TYPEOF_CURL_OFF_T long long
+# define CURL_FORMAT_CURL_OFF_T "lld"
+# define CURL_FORMAT_CURL_OFF_TU "llu"
+# define CURL_FORMAT_OFF_T "%lld"
+# define CURL_SIZEOF_CURL_OFF_T 8
+# define CURL_SUFFIX_CURL_OFF_T LL
+# define CURL_SUFFIX_CURL_OFF_TU ULL
+# endif
+# define CURL_TYPEOF_CURL_SOCKLEN_T unsigned int
+# define CURL_SIZEOF_CURL_SOCKLEN_T 4
+
+#elif defined(__OS400__)
+# if defined(__ILEC400__)
+# define CURL_SIZEOF_LONG 4
+# define CURL_TYPEOF_CURL_OFF_T long long
+# define CURL_FORMAT_CURL_OFF_T "lld"
+# define CURL_FORMAT_CURL_OFF_TU "llu"
+# define CURL_FORMAT_OFF_T "%lld"
+# define CURL_SIZEOF_CURL_OFF_T 8
+# define CURL_SUFFIX_CURL_OFF_T LL
+# define CURL_SUFFIX_CURL_OFF_TU ULL
+# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
+# define CURL_SIZEOF_CURL_SOCKLEN_T 4
+# define CURL_PULL_SYS_TYPES_H 1
+# define CURL_PULL_SYS_SOCKET_H 1
# endif
-# include <windows.h>
-# include <winsock2.h>
-# include <ws2tcpip.h>
-#endif
-/* Configure process defines this to 1 when it finds out that system */
-/* header file sys/types.h must be included by the external interface. */
-#define CURL_PULL_SYS_TYPES_H 1
-#ifdef CURL_PULL_SYS_TYPES_H
-# include <sys/types.h>
-#endif
+#elif defined(__MVS__)
+# if defined(__IBMC__) || defined(__IBMCPP__)
+# if defined(_ILP32)
+# define CURL_SIZEOF_LONG 4
+# elif defined(_LP64)
+# define CURL_SIZEOF_LONG 8
+# endif
+# if defined(_LONG_LONG)
+# define CURL_TYPEOF_CURL_OFF_T long long
+# define CURL_FORMAT_CURL_OFF_T "lld"
+# define CURL_FORMAT_CURL_OFF_TU "llu"
+# define CURL_FORMAT_OFF_T "%lld"
+# define CURL_SIZEOF_CURL_OFF_T 8
+# define CURL_SUFFIX_CURL_OFF_T LL
+# define CURL_SUFFIX_CURL_OFF_TU ULL
+# elif defined(_LP64)
+# define CURL_TYPEOF_CURL_OFF_T long
+# define CURL_FORMAT_CURL_OFF_T "ld"
+# define CURL_FORMAT_CURL_OFF_TU "lu"
+# define CURL_FORMAT_OFF_T "%ld"
+# define CURL_SIZEOF_CURL_OFF_T 8
+# define CURL_SUFFIX_CURL_OFF_T L
+# define CURL_SUFFIX_CURL_OFF_TU UL
+# else
+# define CURL_TYPEOF_CURL_OFF_T long
+# define CURL_FORMAT_CURL_OFF_T "ld"
+# define CURL_FORMAT_CURL_OFF_TU "lu"
+# define CURL_FORMAT_OFF_T "%ld"
+# define CURL_SIZEOF_CURL_OFF_T 4
+# define CURL_SUFFIX_CURL_OFF_T L
+# define CURL_SUFFIX_CURL_OFF_TU UL
+# endif
+# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
+# define CURL_SIZEOF_CURL_SOCKLEN_T 4
+# define CURL_PULL_SYS_TYPES_H 1
+# define CURL_PULL_SYS_SOCKET_H 1
+# endif
-/* Configure process defines this to 1 when it finds out that system */
-/* header file stdint.h must be included by the external interface. */
-/* #undef CURL_PULL_STDINT_H */
-#ifdef CURL_PULL_STDINT_H
-# include <stdint.h>
+#elif defined(__370__)
+# if defined(__IBMC__) || defined(__IBMCPP__)
+# if defined(_ILP32)
+# define CURL_SIZEOF_LONG 4
+# elif defined(_LP64)
+# define CURL_SIZEOF_LONG 8
+# endif
+# if defined(_LONG_LONG)
+# define CURL_TYPEOF_CURL_OFF_T long long
+# define CURL_FORMAT_CURL_OFF_T "lld"
+# define CURL_FORMAT_CURL_OFF_TU "llu"
+# define CURL_FORMAT_OFF_T "%lld"
+# define CURL_SIZEOF_CURL_OFF_T 8
+# define CURL_SUFFIX_CURL_OFF_T LL
+# define CURL_SUFFIX_CURL_OFF_TU ULL
+# elif defined(_LP64)
+# define CURL_TYPEOF_CURL_OFF_T long
+# define CURL_FORMAT_CURL_OFF_T "ld"
+# define CURL_FORMAT_CURL_OFF_TU "lu"
+# define CURL_FORMAT_OFF_T "%ld"
+# define CURL_SIZEOF_CURL_OFF_T 8
+# define CURL_SUFFIX_CURL_OFF_T L
+# define CURL_SUFFIX_CURL_OFF_TU UL
+# else
+# define CURL_TYPEOF_CURL_OFF_T long
+# define CURL_FORMAT_CURL_OFF_T "ld"
+# define CURL_FORMAT_CURL_OFF_TU "lu"
+# define CURL_FORMAT_OFF_T "%ld"
+# define CURL_SIZEOF_CURL_OFF_T 4
+# define CURL_SUFFIX_CURL_OFF_T L
+# define CURL_SUFFIX_CURL_OFF_TU UL
+# endif
+# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
+# define CURL_SIZEOF_CURL_SOCKLEN_T 4
+# define CURL_PULL_SYS_TYPES_H 1
+# define CURL_PULL_SYS_SOCKET_H 1
+# endif
+
+#elif defined(TPF)
+# define CURL_SIZEOF_LONG 8
+# define CURL_TYPEOF_CURL_OFF_T long
+# define CURL_FORMAT_CURL_OFF_T "ld"
+# define CURL_FORMAT_CURL_OFF_TU "lu"
+# define CURL_FORMAT_OFF_T "%ld"
+# define CURL_SIZEOF_CURL_OFF_T 8
+# define CURL_SUFFIX_CURL_OFF_T L
+# define CURL_SUFFIX_CURL_OFF_TU UL
+# define CURL_TYPEOF_CURL_SOCKLEN_T int
+# define CURL_SIZEOF_CURL_SOCKLEN_T 4
+
+/* ===================================== */
+/* KEEP MSVC THE PENULTIMATE ENTRY */
+/* ===================================== */
+
+#elif defined(_MSC_VER)
+# if (_MSC_VER >= 900) && (_INTEGRAL_MAX_BITS >= 64)
+# define CURL_SIZEOF_LONG 4
+# define CURL_TYPEOF_CURL_OFF_T __int64
+# define CURL_FORMAT_CURL_OFF_T "I64d"
+# define CURL_FORMAT_CURL_OFF_TU "I64u"
+# define CURL_FORMAT_OFF_T "%I64d"
+# define CURL_SIZEOF_CURL_OFF_T 8
+# define CURL_SUFFIX_CURL_OFF_T i64
+# define CURL_SUFFIX_CURL_OFF_TU ui64
+# else
+# define CURL_SIZEOF_LONG 4
+# define CURL_TYPEOF_CURL_OFF_T long
+# define CURL_FORMAT_CURL_OFF_T "ld"
+# define CURL_FORMAT_CURL_OFF_TU "lu"
+# define CURL_FORMAT_OFF_T "%ld"
+# define CURL_SIZEOF_CURL_OFF_T 4
+# define CURL_SUFFIX_CURL_OFF_T L
+# define CURL_SUFFIX_CURL_OFF_TU UL
+# endif
+# define CURL_TYPEOF_CURL_SOCKLEN_T int
+# define CURL_SIZEOF_CURL_SOCKLEN_T 4
+
+/* ===================================== */
+/* KEEP GENERIC GCC THE LAST ENTRY */
+/* ===================================== */
+
+#elif defined(__GNUC__)
+# if defined(__i386__) || defined(__ppc__)
+# define CURL_SIZEOF_LONG 4
+# define CURL_TYPEOF_CURL_OFF_T long long
+# define CURL_FORMAT_CURL_OFF_T "lld"
+# define CURL_FORMAT_CURL_OFF_TU "llu"
+# define CURL_FORMAT_OFF_T "%lld"
+# define CURL_SIZEOF_CURL_OFF_T 8
+# define CURL_SUFFIX_CURL_OFF_T LL
+# define CURL_SUFFIX_CURL_OFF_TU ULL
+# elif defined(__x86_64__) || defined(__ppc64__)
+# define CURL_SIZEOF_LONG 8
+# define CURL_TYPEOF_CURL_OFF_T long
+# define CURL_FORMAT_CURL_OFF_T "ld"
+# define CURL_FORMAT_CURL_OFF_TU "lu"
+# define CURL_FORMAT_OFF_T "%ld"
+# define CURL_SIZEOF_CURL_OFF_T 8
+# define CURL_SUFFIX_CURL_OFF_T L
+# define CURL_SUFFIX_CURL_OFF_TU UL
+# endif
+# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
+# define CURL_SIZEOF_CURL_SOCKLEN_T 4
+# define CURL_PULL_SYS_TYPES_H 1
+# define CURL_PULL_SYS_SOCKET_H 1
+
+#else
+# error "Unknown non-configure build target!"
+ Error Compilation_aborted_Unknown_non_configure_build_target
#endif
-/* Configure process defines this to 1 when it finds out that system */
-/* header file inttypes.h must be included by the external interface. */
-/* #undef CURL_PULL_INTTYPES_H */
-#ifdef CURL_PULL_INTTYPES_H
-# include <inttypes.h>
+/* CURL_PULL_SYS_TYPES_H is defined above when inclusion of header file */
+/* sys/types.h is required here to properly make type definitions below. */
+#ifdef CURL_PULL_SYS_TYPES_H
+# include <sys/types.h>
#endif
-/* Configure process defines this to 1 when it finds out that system */
-/* header file sys/socket.h must be included by the external interface. */
-#define CURL_PULL_SYS_SOCKET_H 1
+/* CURL_PULL_SYS_SOCKET_H is defined above when inclusion of header file */
+/* sys/socket.h is required here to properly make type definitions below. */
#ifdef CURL_PULL_SYS_SOCKET_H
# include <sys/socket.h>
#endif
-/* The size of `long', as computed by sizeof. */
-#define CURL_SIZEOF_LONG 4
-
-/* Integral data type used for curl_socklen_t. */
-#define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
-
-/* The size of `curl_socklen_t', as computed by sizeof. */
-#define CURL_SIZEOF_CURL_SOCKLEN_T 4
-
/* Data type definition of curl_socklen_t. */
-typedef CURL_TYPEOF_CURL_SOCKLEN_T curl_socklen_t;
-/* Signed integral data type used for curl_off_t. */
-#define CURL_TYPEOF_CURL_OFF_T long
+#ifdef CURL_TYPEOF_CURL_SOCKLEN_T
+ typedef CURL_TYPEOF_CURL_SOCKLEN_T curl_socklen_t;
+#endif
/* Data type definition of curl_off_t. */
-typedef CURL_TYPEOF_CURL_OFF_T curl_off_t;
-
-/* curl_off_t formatting string directive without "%" conversion specifier. */
-#define CURL_FORMAT_CURL_OFF_T "ld"
-/* unsigned curl_off_t formatting string without "%" conversion specifier. */
-#define CURL_FORMAT_CURL_OFF_TU "lu"
-
-/* curl_off_t formatting string directive with "%" conversion specifier. */
-#define CURL_FORMAT_OFF_T "%ld"
-
-/* The size of `curl_off_t', as computed by sizeof. */
-#define CURL_SIZEOF_CURL_OFF_T 4
-
-/* curl_off_t constant suffix. */
-#define CURL_SUFFIX_CURL_OFF_T L
-
-/* unsigned curl_off_t constant suffix. */
-#define CURL_SUFFIX_CURL_OFF_TU UL
+#ifdef CURL_TYPEOF_CURL_OFF_T
+ typedef CURL_TYPEOF_CURL_OFF_T curl_off_t;
+#endif
#endif /* __CURL_CURLBUILD_H */
diff --git a/include/curl/curlver.h b/include/curl/curlver.h
index 35ca9a8..e345f56 100644
--- a/include/curl/curlver.h
+++ b/include/curl/curlver.h
@@ -30,13 +30,13 @@
/* This is the version number of the libcurl package from which this header
file origins: */
-#define LIBCURL_VERSION "7.20.1"
+#define LIBCURL_VERSION "7.21.2"
/* The numeric version number is also available "in parts" by using these
defines: */
#define LIBCURL_VERSION_MAJOR 7
-#define LIBCURL_VERSION_MINOR 20
-#define LIBCURL_VERSION_PATCH 1
+#define LIBCURL_VERSION_MINOR 21
+#define LIBCURL_VERSION_PATCH 2
/* This is the numeric version of the libcurl version number, meant for easier
parsing and comparions by programs. The LIBCURL_VERSION_NUM define will
@@ -53,7 +53,7 @@
and it is always a greater number in a more recent release. It makes
comparisons with greater than and less than work.
*/
-#define LIBCURL_VERSION_NUM 0x071401
+#define LIBCURL_VERSION_NUM 0x071502
/*
* This is the date and time when the full source package was created. The
@@ -64,6 +64,6 @@
*
* "Mon Feb 12 11:35:33 UTC 2007"
*/
-#define LIBCURL_TIMESTAMP "Wed Apr 14 14:55:20 UTC 2010"
+#define LIBCURL_TIMESTAMP "Tue Oct 12 22:03:31 UTC 2010"
#endif /* __CURL_CURLVER_H */
diff --git a/include/curl/stamp-h3 b/include/curl/stamp-h3
deleted file mode 100644
index e4ea1b8..0000000
--- a/include/curl/stamp-h3
+++ /dev/null
@@ -1 +0,0 @@
-timestamp for include/curl/curlbuild.h
diff --git a/include/curl/typecheck-gcc.h b/include/curl/typecheck-gcc.h
index c4fad51..e6f74a9 100644
--- a/include/curl/typecheck-gcc.h
+++ b/include/curl/typecheck-gcc.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -25,11 +25,16 @@
/* wraps curl_easy_setopt() with typechecking */
/* To add a new kind of warning, add an
- * if(_curl_is_sometype_option(_curl_opt) && ! _curl_is_sometype(value))
- * _curl_easy_setopt_err_sometype();
+ * if(_curl_is_sometype_option(_curl_opt))
+ * if(!_curl_is_sometype(value))
+ * _curl_easy_setopt_err_sometype();
* block and define _curl_is_sometype_option, _curl_is_sometype and
* _curl_easy_setopt_err_sometype below
*
+ * NOTE: We use two nested 'if' statements here instead of the && operator, in
+ * order to work around gcc bug #32061. It affects only gcc 4.3.x/4.4.x
+ * when compiling with -Wlogical-op.
+ *
* To add an option that uses the same type as an existing option, you'll just
* need to extend the appropriate _curl_*_option macro
*/
@@ -37,51 +42,66 @@
__extension__ ({ \
__typeof__ (option) _curl_opt = option; \
if (__builtin_constant_p(_curl_opt)) { \
- if (_curl_is_long_option(_curl_opt) && !_curl_is_long(value)) \
- _curl_easy_setopt_err_long(); \
- if (_curl_is_off_t_option(_curl_opt) && !_curl_is_off_t(value)) \
- _curl_easy_setopt_err_curl_off_t(); \
- if (_curl_is_string_option(_curl_opt) && !_curl_is_string(value)) \
- _curl_easy_setopt_err_string(); \
- if (_curl_is_write_cb_option(_curl_opt) && !_curl_is_write_cb(value)) \
- _curl_easy_setopt_err_write_callback(); \
- if ((_curl_opt) == CURLOPT_READFUNCTION && !_curl_is_read_cb(value)) \
- _curl_easy_setopt_err_read_cb(); \
- if ((_curl_opt) == CURLOPT_IOCTLFUNCTION && !_curl_is_ioctl_cb(value)) \
- _curl_easy_setopt_err_ioctl_cb(); \
- if ((_curl_opt) == CURLOPT_SOCKOPTFUNCTION && !_curl_is_sockopt_cb(value))\
- _curl_easy_setopt_err_sockopt_cb(); \
- if ((_curl_opt) == CURLOPT_OPENSOCKETFUNCTION && \
- !_curl_is_opensocket_cb(value)) \
- _curl_easy_setopt_err_opensocket_cb(); \
- if ((_curl_opt) == CURLOPT_PROGRESSFUNCTION && \
- !_curl_is_progress_cb(value)) \
- _curl_easy_setopt_err_progress_cb(); \
- if ((_curl_opt) == CURLOPT_DEBUGFUNCTION && !_curl_is_debug_cb(value)) \
- _curl_easy_setopt_err_debug_cb(); \
- if ((_curl_opt) == CURLOPT_SSL_CTX_FUNCTION && \
- !_curl_is_ssl_ctx_cb(value)) \
- _curl_easy_setopt_err_ssl_ctx_cb(); \
- if (_curl_is_conv_cb_option(_curl_opt) && !_curl_is_conv_cb(value)) \
- _curl_easy_setopt_err_conv_cb(); \
- if ((_curl_opt) == CURLOPT_SEEKFUNCTION && !_curl_is_seek_cb(value)) \
- _curl_easy_setopt_err_seek_cb(); \
- if (_curl_is_cb_data_option(_curl_opt) && !_curl_is_cb_data(value)) \
- _curl_easy_setopt_err_cb_data(); \
- if ((_curl_opt) == CURLOPT_ERRORBUFFER && !_curl_is_error_buffer(value)) \
- _curl_easy_setopt_err_error_buffer(); \
- if ((_curl_opt) == CURLOPT_STDERR && !_curl_is_FILE(value)) \
- _curl_easy_setopt_err_FILE(); \
- if (_curl_is_postfields_option(_curl_opt) && !_curl_is_postfields(value)) \
- _curl_easy_setopt_err_postfields(); \
- if ((_curl_opt) == CURLOPT_HTTPPOST && \
- !_curl_is_arr((value), struct curl_httppost)) \
- _curl_easy_setopt_err_curl_httpost(); \
- if (_curl_is_slist_option(_curl_opt) && \
- !_curl_is_arr((value), struct curl_slist)) \
- _curl_easy_setopt_err_curl_slist(); \
- if ((_curl_opt) == CURLOPT_SHARE && !_curl_is_ptr((value), CURLSH)) \
- _curl_easy_setopt_err_CURLSH(); \
+ if (_curl_is_long_option(_curl_opt)) \
+ if (!_curl_is_long(value)) \
+ _curl_easy_setopt_err_long(); \
+ if (_curl_is_off_t_option(_curl_opt)) \
+ if (!_curl_is_off_t(value)) \
+ _curl_easy_setopt_err_curl_off_t(); \
+ if (_curl_is_string_option(_curl_opt)) \
+ if (!_curl_is_string(value)) \
+ _curl_easy_setopt_err_string(); \
+ if (_curl_is_write_cb_option(_curl_opt)) \
+ if (!_curl_is_write_cb(value)) \
+ _curl_easy_setopt_err_write_callback(); \
+ if ((_curl_opt) == CURLOPT_READFUNCTION) \
+ if (!_curl_is_read_cb(value)) \
+ _curl_easy_setopt_err_read_cb(); \
+ if ((_curl_opt) == CURLOPT_IOCTLFUNCTION) \
+ if (!_curl_is_ioctl_cb(value)) \
+ _curl_easy_setopt_err_ioctl_cb(); \
+ if ((_curl_opt) == CURLOPT_SOCKOPTFUNCTION) \
+ if (!_curl_is_sockopt_cb(value)) \
+ _curl_easy_setopt_err_sockopt_cb(); \
+ if ((_curl_opt) == CURLOPT_OPENSOCKETFUNCTION) \
+ if (!_curl_is_opensocket_cb(value)) \
+ _curl_easy_setopt_err_opensocket_cb(); \
+ if ((_curl_opt) == CURLOPT_PROGRESSFUNCTION) \
+ if (!_curl_is_progress_cb(value)) \
+ _curl_easy_setopt_err_progress_cb(); \
+ if ((_curl_opt) == CURLOPT_DEBUGFUNCTION) \
+ if (!_curl_is_debug_cb(value)) \
+ _curl_easy_setopt_err_debug_cb(); \
+ if ((_curl_opt) == CURLOPT_SSL_CTX_FUNCTION) \
+ if (!_curl_is_ssl_ctx_cb(value)) \
+ _curl_easy_setopt_err_ssl_ctx_cb(); \
+ if (_curl_is_conv_cb_option(_curl_opt)) \
+ if (!_curl_is_conv_cb(value)) \
+ _curl_easy_setopt_err_conv_cb(); \
+ if ((_curl_opt) == CURLOPT_SEEKFUNCTION) \
+ if (!_curl_is_seek_cb(value)) \
+ _curl_easy_setopt_err_seek_cb(); \
+ if (_curl_is_cb_data_option(_curl_opt)) \
+ if (!_curl_is_cb_data(value)) \
+ _curl_easy_setopt_err_cb_data(); \
+ if ((_curl_opt) == CURLOPT_ERRORBUFFER) \
+ if (!_curl_is_error_buffer(value)) \
+ _curl_easy_setopt_err_error_buffer(); \
+ if ((_curl_opt) == CURLOPT_STDERR) \
+ if (!_curl_is_FILE(value)) \
+ _curl_easy_setopt_err_FILE(); \
+ if (_curl_is_postfields_option(_curl_opt)) \
+ if (!_curl_is_postfields(value)) \
+ _curl_easy_setopt_err_postfields(); \
+ if ((_curl_opt) == CURLOPT_HTTPPOST) \
+ if (!_curl_is_arr((value), struct curl_httppost)) \
+ _curl_easy_setopt_err_curl_httpost(); \
+ if (_curl_is_slist_option(_curl_opt)) \
+ if (!_curl_is_arr((value), struct curl_slist)) \
+ _curl_easy_setopt_err_curl_slist(); \
+ if ((_curl_opt) == CURLOPT_SHARE) \
+ if (!_curl_is_ptr((value), CURLSH)) \
+ _curl_easy_setopt_err_CURLSH(); \
} \
curl_easy_setopt(handle, _curl_opt, value); \
})
@@ -92,15 +112,18 @@ __extension__ ({ \
__extension__ ({ \
__typeof__ (info) _curl_info = info; \
if (__builtin_constant_p(_curl_info)) { \
- if (_curl_is_string_info(_curl_info) && !_curl_is_arr((arg), char *)) \
- _curl_easy_getinfo_err_string(); \
- if (_curl_is_long_info(_curl_info) && !_curl_is_arr((arg), long)) \
- _curl_easy_getinfo_err_long(); \
- if (_curl_is_double_info(_curl_info) && !_curl_is_arr((arg), double)) \
- _curl_easy_getinfo_err_double(); \
- if (_curl_is_slist_info(_curl_info) && \
- !_curl_is_arr((arg), struct curl_slist *)) \
- _curl_easy_getinfo_err_curl_slist(); \
+ if (_curl_is_string_info(_curl_info)) \
+ if (!_curl_is_arr((arg), char *)) \
+ _curl_easy_getinfo_err_string(); \
+ if (_curl_is_long_info(_curl_info)) \
+ if (!_curl_is_arr((arg), long)) \
+ _curl_easy_getinfo_err_long(); \
+ if (_curl_is_double_info(_curl_info)) \
+ if (!_curl_is_arr((arg), double)) \
+ _curl_easy_getinfo_err_double(); \
+ if (_curl_is_slist_info(_curl_info)) \
+ if (!_curl_is_arr((arg), struct curl_slist *)) \
+ _curl_easy_getinfo_err_curl_slist(); \
} \
curl_easy_getinfo(handle, _curl_info, arg); \
})
@@ -230,6 +253,12 @@ _CURL_WARNING(_curl_easy_getinfo_err_curl_slist,
(option) == CURLOPT_SSH_PRIVATE_KEYFILE || \
(option) == CURLOPT_CRLFILE || \
(option) == CURLOPT_ISSUERCERT || \
+ (option) == CURLOPT_SOCKS5_GSSAPI_SERVICE || \
+ (option) == CURLOPT_SSH_KNOWNHOSTS || \
+ (option) == CURLOPT_MAIL_FROM || \
+ (option) == CURLOPT_RTSP_SESSION_ID || \
+ (option) == CURLOPT_RTSP_STREAM_URI || \
+ (option) == CURLOPT_RTSP_TRANSPORT || \
0)
/* evaluates to true if option takes a curl_write_callback argument */
@@ -256,6 +285,10 @@ _CURL_WARNING(_curl_easy_getinfo_err_curl_slist,
(option) == CURLOPT_SSL_CTX_DATA || \
(option) == CURLOPT_SEEKDATA || \
(option) == CURLOPT_PRIVATE || \
+ (option) == CURLOPT_SSH_KEYDATA || \
+ (option) == CURLOPT_INTERLEAVEDATA || \
+ (option) == CURLOPT_CHUNK_DATA || \
+ (option) == CURLOPT_FNMATCH_DATA || \
0)
/* evaluates to true if option takes a POST data argument (void* or char*) */
@@ -272,6 +305,7 @@ _CURL_WARNING(_curl_easy_getinfo_err_curl_slist,
(option) == CURLOPT_POSTQUOTE || \
(option) == CURLOPT_PREQUOTE || \
(option) == CURLOPT_TELNETOPTIONS || \
+ (option) == CURLOPT_MAIL_RCPT || \
0)
/* groups of curl_easy_getinfo infos that take the same type of argument */
diff --git a/install-sh b/install-sh
new file mode 100755
index 0000000..a85c202
--- /dev/null
+++ b/install-sh
@@ -0,0 +1,250 @@
+#!/bin/sh
+#
+# install - install a program, script, or datafile
+# This comes from X11R5 (mit/util/scripts/install.sh).
+#
+# Copyright 1991 by the Massachusetts Institute of Technology
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of M.I.T. not be used in advertising or
+# publicity pertaining to distribution of the software without specific,
+# written prior permission. M.I.T. makes no representations about the
+# suitability of this software for any purpose. It is provided "as is"
+# without express or implied warranty.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# `make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch. It can only install one file at a time, a restriction
+# shared with many OS's install programs.
+
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit="${DOITPROG-}"
+
+
+# put in absolute paths if you don't have them in your path; or use env. vars.
+
+mvprog="${MVPROG-mv}"
+cpprog="${CPPROG-cp}"
+chmodprog="${CHMODPROG-chmod}"
+chownprog="${CHOWNPROG-chown}"
+chgrpprog="${CHGRPPROG-chgrp}"
+stripprog="${STRIPPROG-strip}"
+rmprog="${RMPROG-rm}"
+mkdirprog="${MKDIRPROG-mkdir}"
+
+transformbasename=""
+transform_arg=""
+instcmd="$mvprog"
+chmodcmd="$chmodprog 0755"
+chowncmd=""
+chgrpcmd=""
+stripcmd=""
+rmcmd="$rmprog -f"
+mvcmd="$mvprog"
+src=""
+dst=""
+dir_arg=""
+
+while [ x"$1" != x ]; do
+ case $1 in
+ -c) instcmd="$cpprog"
+ shift
+ continue;;
+
+ -d) dir_arg=true
+ shift
+ continue;;
+
+ -m) chmodcmd="$chmodprog $2"
+ shift
+ shift
+ continue;;
+
+ -o) chowncmd="$chownprog $2"
+ shift
+ shift
+ continue;;
+
+ -g) chgrpcmd="$chgrpprog $2"
+ shift
+ shift
+ continue;;
+
+ -s) stripcmd="$stripprog"
+ shift
+ continue;;
+
+ -t=*) transformarg=`echo $1 | sed 's/-t=//'`
+ shift
+ continue;;
+
+ -b=*) transformbasename=`echo $1 | sed 's/-b=//'`
+ shift
+ continue;;
+
+ *) if [ x"$src" = x ]
+ then
+ src=$1
+ else
+ # this colon is to work around a 386BSD /bin/sh bug
+ :
+ dst=$1
+ fi
+ shift
+ continue;;
+ esac
+done
+
+if [ x"$src" = x ]
+then
+ echo "install: no input file specified"
+ exit 1
+else
+ true
+fi
+
+if [ x"$dir_arg" != x ]; then
+ dst=$src
+ src=""
+
+ if [ -d $dst ]; then
+ instcmd=:
+ else
+ instcmd=mkdir
+ fi
+else
+
+# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
+# might cause directories to be created, which would be especially bad
+# if $src (and thus $dsttmp) contains '*'.
+
+ if [ -f $src -o -d $src ]
+ then
+ true
+ else
+ echo "install: $src does not exist"
+ exit 1
+ fi
+
+ if [ x"$dst" = x ]
+ then
+ echo "install: no destination specified"
+ exit 1
+ else
+ true
+ fi
+
+# If destination is a directory, append the input filename; if your system
+# does not like double slashes in filenames, you may need to add some logic
+
+ if [ -d $dst ]
+ then
+ dst="$dst"/`basename $src`
+ else
+ true
+ fi
+fi
+
+## this sed command emulates the dirname command
+dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
+
+# Make sure that the destination directory exists.
+# this part is taken from Noah Friedman's mkinstalldirs script
+
+# Skip lots of stat calls in the usual case.
+if [ ! -d "$dstdir" ]; then
+defaultIFS='
+'
+IFS="${IFS-${defaultIFS}}"
+
+oIFS="${IFS}"
+# Some sh's can't handle IFS=/ for some reason.
+IFS='%'
+set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
+IFS="${oIFS}"
+
+pathcomp=''
+
+while [ $# -ne 0 ] ; do
+ pathcomp="${pathcomp}${1}"
+ shift
+
+ if [ ! -d "${pathcomp}" ] ;
+ then
+ $mkdirprog "${pathcomp}"
+ else
+ true
+ fi
+
+ pathcomp="${pathcomp}/"
+done
+fi
+
+if [ x"$dir_arg" != x ]
+then
+ $doit $instcmd $dst &&
+
+ if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
+ if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
+ if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
+ if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
+else
+
+# If we're going to rename the final executable, determine the name now.
+
+ if [ x"$transformarg" = x ]
+ then
+ dstfile=`basename $dst`
+ else
+ dstfile=`basename $dst $transformbasename |
+ sed $transformarg`$transformbasename
+ fi
+
+# don't allow the sed command to completely eliminate the filename
+
+ if [ x"$dstfile" = x ]
+ then
+ dstfile=`basename $dst`
+ else
+ true
+ fi
+
+# Make a temp file name in the proper directory.
+
+ dsttmp=$dstdir/#inst.$$#
+
+# Move or copy the file name to the temp name
+
+ $doit $instcmd $src $dsttmp &&
+
+ trap "rm -f ${dsttmp}" 0 &&
+
+# and set any options; do chmod last to preserve setuid bits
+
+# If any of these fail, we abort the whole thing. If we want to
+# ignore errors from any of these, just make sure not to ignore
+# errors from the above "$doit $instcmd $src $dsttmp" command.
+
+ if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
+ if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
+ if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
+ if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
+
+# Now rename the file to the real destination.
+
+ $doit $rmcmd -f $dstdir/$dstfile &&
+ $doit $mvcmd $dsttmp $dstdir/$dstfile
+
+fi &&
+
+
+exit 0
diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt
new file mode 100644
index 0000000..aec1a3c
--- /dev/null
+++ b/lib/CMakeLists.txt
@@ -0,0 +1,124 @@
+set(LIB_NAME libcurl)
+
+configure_file(${CURL_SOURCE_DIR}/include/curl/curlbuild.h.cmake
+ ${CURL_BINARY_DIR}/include/curl/curlbuild.h)
+configure_file(curl_config.h.cmake
+ ${CMAKE_CURRENT_BINARY_DIR}/curl_config.h)
+
+transform_makefile_inc("Makefile.inc" "${CMAKE_CURRENT_BINARY_DIR}/Makefile.inc.cmake")
+include(${CMAKE_CURRENT_BINARY_DIR}/Makefile.inc.cmake)
+
+list(APPEND HHEADERS
+ ${CMAKE_CURRENT_BINARY_DIR}/curl_config.h
+ ${CURL_BINARY_DIR}/include/curl/curlbuild.h
+ )
+
+if(MSVC)
+ list(APPEND CSOURCES libcurl.rc)
+endif()
+
+# SET(CSOURCES
+# # memdebug.c -not used
+# # nwlib.c - Not used
+# # strtok.c - specify later
+# # strtoofft.c - specify later
+# )
+
+# # if we have Kerberos 4, right now this is never on
+# #OPTION(CURL_KRB4 "Use Kerberos 4" OFF)
+# IF(CURL_KRB4)
+# SET(CSOURCES ${CSOURCES}
+# krb4.c
+# security.c
+# )
+# ENDIF(CURL_KRB4)
+
+# #OPTION(CURL_MALLOC_DEBUG "Debug mallocs in Curl" OFF)
+# MARK_AS_ADVANCED(CURL_MALLOC_DEBUG)
+# IF(CURL_MALLOC_DEBUG)
+# SET(CSOURCES ${CSOURCES}
+# memdebug.c
+# )
+# ENDIF(CURL_MALLOC_DEBUG)
+
+# # only build compat strtoofft if we need to
+# IF(NOT HAVE_STRTOLL AND NOT HAVE__STRTOI64)
+# SET(CSOURCES ${CSOURCES}
+# strtoofft.c
+# )
+# ENDIF(NOT HAVE_STRTOLL AND NOT HAVE__STRTOI64)
+
+if(HAVE_FEATURES_H)
+ set_source_files_properties(
+ cookie.c
+ easy.c
+ formdata.c
+ getenv.c
+ nonblock.c
+ hash.c
+ http.c
+ if2ip.c
+ mprintf.c
+ multi.c
+ sendf.c
+ telnet.c
+ transfer.c
+ url.c
+ COMPILE_FLAGS -D_BSD_SOURCE)
+endif(HAVE_FEATURES_H)
+
+
+# The rest of the build
+
+include_directories(${CMAKE_CURRENT_BINARY_DIR}/../include)
+include_directories(${CMAKE_CURRENT_SOURCE_DIR}/..)
+include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../include)
+include_directories(${CMAKE_CURRENT_BINARY_DIR}/..)
+include_directories(${CMAKE_CURRENT_SOURCE_DIR})
+include_directories(${CMAKE_CURRENT_BINARY_DIR})
+if(CURL_USE_ARES)
+ include_directories(${CARES_INCLUDE_DIR})
+endif()
+
+if(CURL_STATICLIB)
+ # Static lib
+ set(CURL_USER_DEFINED_DYNAMIC_OR_STATIC STATIC)
+else()
+ # DLL / so dynamic lib
+ set(CURL_USER_DEFINED_DYNAMIC_OR_STATIC SHARED)
+endif()
+
+add_library(
+ ${LIB_NAME}
+ ${CURL_USER_DEFINED_DYNAMIC_OR_STATIC}
+ ${HHEADERS} ${CSOURCES}
+ )
+
+target_link_libraries(${LIB_NAME} ${CURL_LIBS})
+
+if(WIN32)
+ add_definitions( -D_USRDLL )
+endif()
+
+set_target_properties(${LIB_NAME} PROPERTIES COMPILE_DEFINITIONS BUILDING_LIBCURL)
+
+setup_curl_dependencies(${LIB_NAME})
+
+# Remove the "lib" prefix since the library is already named "libcurl".
+set_target_properties(${LIB_NAME} PROPERTIES PREFIX "")
+set_target_properties(${LIB_NAME} PROPERTIES IMPORT_PREFIX "")
+
+if(MSVC)
+ if(NOT BUILD_RELEASE_DEBUG_DIRS)
+ # Ugly workaround to remove the "/debug" or "/release" in each output
+ set_target_properties(${LIB_NAME} PROPERTIES PREFIX "../")
+ set_target_properties(${LIB_NAME} PROPERTIES IMPORT_PREFIX "../")
+ endif()
+endif()
+
+if(WIN32)
+ if(NOT CURL_STATICLIB)
+ # Add "_imp" as a suffix before the extension to avoid conflicting with the statically linked "libcurl.lib"
+ set_target_properties(${LIB_NAME} PROPERTIES IMPORT_SUFFIX "_imp.lib")
+ endif()
+endif()
diff --git a/lib/Makefile.Watcom b/lib/Makefile.Watcom
new file mode 100644
index 0000000..a611be6
--- /dev/null
+++ b/lib/Makefile.Watcom
@@ -0,0 +1,222 @@
+#
+# Watcom / OpenWatcom / Win32 makefile for libcurl.
+# G. Vanem <gvanem@broadpark.no>
+#
+
+!ifndef %watcom
+!error WATCOM environment variable not set!
+!else
+SYS_INCL = -I$(%watcom)\h\nt -I$(%watcom)\h
+SYS_LIBS = $(%watcom)\lib386\nt;$(%watcom)\lib386
+!endif
+
+!ifdef %libname
+LIBNAME = $(%libname)
+!else
+LIBNAME = libcurl
+!endif
+TARGETS = $(LIBNAME).dll $(LIBNAME)_imp.lib $(LIBNAME).lib
+
+CC = wcc386
+LD = wlink
+AR = wlib
+RC = wrc
+
+!ifdef __LOADDLL__
+! loaddll wcc386 wccd386
+! loaddll wpp386 wppd386
+! loaddll wlib wlibd
+! if $(__VERSION__) > 1270
+! loaddll wlink wlinkd
+! else
+! loaddll wlink wlink
+! endif
+!endif
+
+!if $(__VERSION__) < 1250
+RM = del /q /f 2>NUL
+!else
+RM = rm -f
+!endif
+MD = mkdir
+RD = rmdir /q /s 2>NUL
+CP = copy
+
+CFLAGS = -3r -mf -hc -zff -zgf -zq -zm -zc -s -fr=con -w2 -fpi -oilrtfm &
+ -wcd=201 -bt=nt -d+ -dWIN32 -dCURL_WANTS_CA_BUNDLE_ENV &
+ -dBUILDING_LIBCURL -dHAVE_SPNEGO=1 -I. -I..\include $(SYS_INCL)
+
+!ifdef %debug
+DEBUG = -dDEBUG=1 -dDEBUGBUILD
+CFLAGS += -d3 $(DEBUG)
+!else
+CFLAGS += -d0
+!endif
+
+!ifdef %use_ipv6
+CFLAGS += -d_WIN32_WINNT=0x0501 -dENABLE_IPV6
+!endif
+
+!ifdef %use_sspi
+CFLAGS += -dUSE_WINDOWS_SSPI
+!endif
+
+#
+# Change to suite.
+#
+!ifdef %zlib_root
+ZLIB_ROOT = $(%zlib_root)
+!else
+ZLIB_ROOT = ..\..\zlib-1.2.5
+!endif
+
+!ifdef %libssh2_root
+LIBSSH2_ROOT = $(%libssh2_root)
+!else
+LIBSSH2_ROOT = ..\..\libssh2-1.2.7
+!endif
+
+!ifdef %librtmp_root
+LIBRTMP_ROOT = $(%librtmp_root)
+!else
+LIBRTMP_ROOT = ..\..\librtmp-2.3
+!endif
+
+!ifdef %openssl_root
+OPENSSL_ROOT = $(%openssl_root)
+!else
+OPENSSL_ROOT = ..\..\openssl-0.9.8o
+!endif
+
+!ifdef %ares_root
+ARES_ROOT = $(%ares_root)
+!else
+ARES_ROOT = ..\ares
+!endif
+
+!ifdef %use_zlib
+CFLAGS += -dHAVE_ZLIB_H -dHAVE_LIBZ -I$(ZLIB_ROOT)
+!endif
+
+!ifdef %use_rtmp
+CFLAGS += -dUSE_LIBRTMP -I$(LIBRTMP_ROOT)
+!endif
+
+!ifdef %use_ssh2
+CFLAGS += -DUSE_LIBSSH2 -DHAVE_LIBSSH2_H -I$(LIBSSH2_ROOT)\include -I$(LIBSSH2_ROOT)\win32
+!endif
+
+!ifdef %use_ssl
+CFLAGS += -wcd=138 -dUSE_OPENSSL -dUSE_SSLEAY -I$(OPENSSL_ROOT)\inc32
+!endif
+
+!ifdef %use_ares
+CFLAGS += -dUSE_ARES -I$(ARES_ROOT)
+!endif
+
+!ifdef %use_watt32
+CFLAGS += -dUSE_WATT32 -I$(%watt_root)\inc
+!endif
+
+OBJ_BASE = WC_Win32.obj
+LINK_ARG = $(OBJ_BASE)\dyn\wlink.arg
+LIB_ARG = $(OBJ_BASE)\stat\wlib.arg
+
+# In order to process Makefile.inc wmake must be called with -u switch!
+!ifndef %MAKEFLAGS
+!error You MUST call wmake with the -u switch!
+!else
+!include Makefile.inc
+!endif
+
+OBJS = $(CSOURCES:.c=.obj)
+OBJS = $OBJ_DIR\$(OBJS: = $OBJ_DIR\)
+
+#
+# Use $(OBJS) as a template to generate $(OBJS_STAT) and $(OBJS_DYN).
+#
+OBJ_DIR = $(OBJ_BASE)\stat
+OBJS_STAT = $+ $(OBJS) $-
+
+OBJ_DIR = $(OBJ_BASE)\dyn
+OBJS_DYN = $+ $(OBJS) $-
+
+CURLBUILDH = ..\include\curl\curlbuild.h
+RESOURCE = $(OBJ_BASE)\dyn\libcurl.res
+
+all: $(CURLBUILDH) $(OBJ_BASE) $(TARGETS) .SYMBOLIC
+ @echo Welcome to libcurl
+
+clean: .SYMBOLIC
+ -$(RM) $(OBJS_STAT)
+ -$(RM) $(OBJS_DYN)
+ -$(RM) $(RESOURCE) $(LINK_ARG) $(LIB_ARG)
+
+vclean distclean: clean .SYMBOLIC
+ -$(RM) $(TARGETS) $(LIBNAME).map $(LIBNAME).sym
+ -$(RD) $(OBJ_BASE)\stat
+ -$(RD) $(OBJ_BASE)\dyn
+ -$(RD) $(OBJ_BASE)
+
+$(OBJ_BASE):
+ -$(MD) $^@
+ -$(MD) $^@\stat
+ -$(MD) $^@\dyn
+
+$(CURLBUILDH): .EXISTSONLY
+ $(CP) $^@.dist $^@
+
+$(LIBNAME).dll: $(OBJS_DYN) $(RESOURCE) $(LINK_ARG)
+ $(LD) name $^@ @$]@
+
+$(LIBNAME).lib: $(OBJS_STAT) $(LIB_ARG)
+ $(AR) -q -b -c $^@ @$]@
+
+.ERASE
+$(RESOURCE): libcurl.rc
+ $(RC) $(DEBUG) -q -r -zm -I..\include $(SYS_INCL) $[@ -fo=$^@
+
+.ERASE
+.c{$(OBJ_BASE)\dyn}.obj:
+ $(CC) $(CFLAGS) -bd -br $[@ -fo=$^@
+
+.ERASE
+.c{$(OBJ_BASE)\stat}.obj:
+ $(CC) $(CFLAGS) -DCURL_STATICLIB $[@ -fo=$^@
+
+$(LINK_ARG): $(__MAKEFILES__)
+ %create $^@
+ @%append $^@ system nt dll
+ @%append $^@ file { $(OBJS_DYN) }
+!ifdef %debug
+ @%append $^@ debug all
+ @%append $^@ option symfile
+!endif
+ @%append $^@ option quiet, map, caseexact, eliminate, implib=$(LIBNAME)_imp.lib,
+ @%append $^@ res=$(RESOURCE) libpath $(SYS_LIBS)
+ @%append $^@ library wldap32.lib
+!ifdef %use_watt32
+ @%append $^@ library $(%watt_root)\lib\wattcpw_imp.lib
+!else
+ @%append $^@ library ws2_32.lib
+!endif
+!ifdef %use_zlib
+ @%append $^@ library $(ZLIB_ROOT)\zlib.lib
+!endif
+!ifdef %use_rtmp
+ @%append $^@ library $(LIBRTMP_ROOT)\librtmp\librtmp.lib
+!endif
+!ifdef %use_ssh2
+ @%append $^@ library $(LIBSSH2_ROOT)\win32\libssh2.lib
+!endif
+!ifdef %use_ssl
+ @%append $^@ library $(OPENSSL_ROOT)\out32\libeay32.lib, $(OPENSSL_ROOT)\out32\ssleay32.lib
+!endif
+!ifdef %use_ares
+ @%append $^@ library $(ARES_ROOT)\cares.lib
+!endif
+
+$(LIB_ARG): $(__MAKEFILES__)
+ %create $^@
+ @for %f in ($(OBJS_STAT)) do @%append $^@ +- %f
+
diff --git a/lib/Makefile.am b/lib/Makefile.am
new file mode 100644
index 0000000..9a60332
--- /dev/null
+++ b/lib/Makefile.am
@@ -0,0 +1,175 @@
+#***************************************************************************
+# _ _ ____ _
+# Project ___| | | | _ \| |
+# / __| | | | |_) | |
+# | (__| |_| | _ <| |___
+# \___|\___/|_| \_\_____|
+#
+# Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+#
+# This software is licensed as described in the file COPYING, which
+# you should have received as part of this distribution. The terms
+# are also available at http://curl.haxx.se/docs/copyright.html.
+#
+# You may opt to use, copy, modify, merge, publish, distribute and/or sell
+# copies of the Software, and permit persons to whom the Software is
+# furnished to do so, under the terms of the COPYING file.
+#
+# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+# KIND, either express or implied.
+#
+###########################################################################
+AUTOMAKE_OPTIONS = foreign nostdinc
+
+DSP = vc6libcurl.dsp
+VCPROJ = libcurl.vcproj
+
+DOCS = README.encoding README.memoryleak README.ares README.curlx \
+ README.hostip README.multi_socket README.httpauth README.pipelining \
+ README.curl_off_t README.pingpong
+
+CMAKE_DIST = CMakeLists.txt curl_config.h.cmake
+
+EXTRA_DIST = Makefile.b32 Makefile.m32 Makefile.vc6 Makefile.riscos $(DSP) \
+ vc6libcurl.dsw config-win32.h config-win32ce.h config-riscos.h \
+ config-mac.h curl_config.h.in makefile.dj config.dos libcurl.plist \
+ libcurl.rc config-amigaos.h amigaos.c amigaos.h makefile.amiga \
+ Makefile.netware nwlib.c nwos.c libcurl.imp msvcproj.head msvcproj.foot \
+ config-win32ce.h config-os400.h setup-os400.h config-symbian.h \
+ Makefile.Watcom config-tpf.h $(DOCS) $(VCPROJ) mk-ca-bundle.pl \
+ mk-ca-bundle.vbs firefox-db2pem.sh $(CMAKE_DIST) config-vxworks.h \
+ Makefile.vxworks
+
+CLEANFILES = $(DSP) $(VCPROJ)
+
+lib_LTLIBRARIES = libcurl.la
+LIBCURL_LIBS = @LIBCURL_LIBS@
+
+# This might hold -Werror
+CFLAGS += @CURL_CFLAG_EXTRAS@
+
+# Specify our include paths here, and do it relative to $(top_srcdir) and
+# $(top_builddir), to ensure that these paths which belong to the library
+# being currently built and tested are searched before the library which
+# might possibly already be installed in the system.
+#
+# $(top_builddir)/include/curl for generated curlbuild.h included from curl.h
+# $(top_builddir)/include for generated curlbuild.h included from lib/setup.h
+# $(top_srcdir)/include is for libcurl's external include files
+# $(top_builddir)/lib is for libcurl's generated lib/curl_config.h file
+# $(top_srcdir)/lib is for libcurl's lib/setup.h and other "private" files
+# $(top_builddir)/ares is for in-tree c-ares's generated ares_build.h file
+# $(top_srcdir)/ares is for in-tree c-ares's external include files
+
+if USE_EMBEDDED_ARES
+INCLUDES = -I$(top_builddir)/include/curl \
+ -I$(top_builddir)/include \
+ -I$(top_srcdir)/include \
+ -I$(top_builddir)/lib \
+ -I$(top_srcdir)/lib \
+ -I$(top_builddir)/ares \
+ -I$(top_srcdir)/ares
+else
+INCLUDES = -I$(top_builddir)/include/curl \
+ -I$(top_builddir)/include \
+ -I$(top_srcdir)/include \
+ -I$(top_builddir)/lib \
+ -I$(top_srcdir)/lib
+endif
+
+if SONAME_BUMP
+#
+# Bumping of SONAME conditionally may seem like a weird thing to do, and yeah
+# it is. The problem is that we try to avoid the bump as hard as possible, but
+# yet it is still necessary for a few rare situations. The configure script will
+# attempt to figure out these situations, and it can be forced to consider this
+# to be such a case! See README.curl_off_t for further details.
+#
+# This conditional soname bump SHOULD be removed at next "proper" bump.
+#
+VERSIONINFO=-version-info 7:0:2
+else
+VERSIONINFO=-version-info 6:0:2
+endif
+
+# This flag accepts an argument of the form current[:revision[:age]]. So,
+# passing -version-info 3:12:1 sets current to 3, revision to 12, and age to
+# 1.
+#
+# Here's the simplified rule guide on how to change -version-info:
+# (current version is C:R:A)
+#
+# 1. if there are only source changes, use C:R+1:A
+# 2. if interfaces were added use C+1:0:A+1
+# 3. if interfaces were removed, then use C+1:0:0
+#
+# For the full guide on libcurl ABI rules, see docs/libcurl/ABI
+
+if NO_UNDEFINED
+# The -no-undefined flag is CRUCIAL for this to build fine on Cygwin.
+UNDEF = -no-undefined
+endif
+
+if MIMPURE
+# This is for gcc on Solaris (8+ ?) to avoid "relocations remain against
+# allocatable but non-writable sections" problems.
+MIMPURE = -mimpure-text
+endif
+
+libcurl_la_LDFLAGS = $(UNDEF) $(VERSIONINFO) $(MIMPURE) $(LIBCURL_LIBS)
+
+# Makefile.inc provides the CSOURCES and HHEADERS defines
+include Makefile.inc
+
+libcurl_la_SOURCES = $(CSOURCES) $(HHEADERS)
+
+WIN32SOURCES = $(CSOURCES)
+WIN32HEADERS = $(HHEADERS) config-win32.h
+
+DSPOUT = | awk '{printf("%s\r\n", $$0)}' >> $(DSP)
+VCPROJOUT = | awk '{printf("%s\r\n", $$0)}' >> $(VCPROJ)
+
+$(DSP): msvcproj.head msvcproj.foot Makefile.am
+ echo "creating $(DSP)"
+ @(cp $(srcdir)/msvcproj.head $(DSP); \
+ echo "# Begin Group \"Source Files\"" $(DSPOUT); \
+ echo "" $(DSPOUT); \
+ echo "# PROP Default_Filter \"\"" $(DSPOUT); \
+ win32_srcs='$(WIN32SOURCES)'; \
+ sorted_srcs=`for file in $$win32_srcs; do echo $$file; done | sort`; \
+ for file in $$sorted_srcs; do \
+ echo "# Begin Source File" $(DSPOUT); \
+ echo "" $(DSPOUT); \
+ echo "SOURCE=.\\"$$file $(DSPOUT); \
+ echo "# End Source File" $(DSPOUT); \
+ done; \
+ echo "# End Group" $(DSPOUT); \
+ echo "# Begin Group \"Header Files\"" $(DSPOUT); \
+ echo "" $(DSPOUT); \
+ echo "# PROP Default_Filter \"\"" $(DSPOUT); \
+ win32_hdrs='$(WIN32HEADERS)'; \
+ sorted_hdrs=`for file in $$win32_hdrs; do echo $$file; done | sort`; \
+ for file in $$sorted_hdrs; do \
+ echo "# Begin Source File" $(DSPOUT); \
+ echo "" $(DSPOUT); \
+ echo "SOURCE=.\\"$$file $(DSPOUT); \
+ echo "# End Source File" $(DSPOUT); \
+ done; \
+ echo "# End Group" $(DSPOUT); \
+ cat $(srcdir)/msvcproj.foot $(DSPOUT) )
+
+$(VCPROJ): vc8proj.head vc8proj.foot Makefile.am
+ echo "creating $(VCPROJ)"
+ @(cp $(srcdir)/vc8proj.head $(VCPROJ); \
+ win32_srcs='$(WIN32SOURCES)'; \
+ sorted_srcs=`for file in $$win32_srcs; do echo $$file; done | sort`; \
+ for file in $$sorted_srcs; do \
+ echo "<File RelativePath=\""$$file"\"></File>" $(VCPROJOUT); \
+ done; \
+ echo "</Filter><Filter Name=\"Header Files\">" $(VCPROJOUT); \
+ win32_hdrs='$(WIN32HEADERS)'; \
+ sorted_hdrs=`for file in $$win32_hdrs; do echo $$file; done | sort`; \
+ for file in $$sorted_hdrs; do \
+ echo "<File RelativePath=\""$$file"\"></File>" $(VCPROJOUT); \
+ done; \
+ cat $(srcdir)/vc8proj.foot $(VCPROJOUT) )
diff --git a/lib/Makefile.b32 b/lib/Makefile.b32
new file mode 100644
index 0000000..509ae27
--- /dev/null
+++ b/lib/Makefile.b32
@@ -0,0 +1,89 @@
+############################################################
+#
+# Makefile.b32 - Borland's C++ Compiler 5.X
+#
+# 'lib' directory
+#
+# 'BCCDIR' has to be set up to point to the base directory
+# of the compiler, i.e. SET BCCDIR = c:\Borland\BCC55
+# where c:\Borland\BCC55 is the compiler is installed
+#
+# Written by Jaepil Kim, pit@paradise.net.nz
+############################################################
+
+# Edit the path below to point to the base of your Zlib sources.
+!ifndef ZLIB_PATH
+ZLIB_PATH = ../../zlib-1.2.1
+!endif
+
+# Edit the path below to point to the base of your OpenSSL package.
+!ifndef OPENSSL_PATH
+OPENSSL_PATH = ../../openssl-0.9.7d
+!endif
+
+# Set libcurl static lib, dll and import lib
+LIBCURL_LIB = libcurl.lib
+LIBCURL_DLL = libcurl.dll
+LIBCURL_IMPLIB = libcurl_imp.lib
+
+# Setup environment
+CXX = bcc32
+LD = bcc32
+CP = copy
+RM = del
+LIB = tlib
+IMPLIB = implib
+
+CXXFLAGS = -q -5 -O2 -w-aus -w-ccc -w-csu -w-par -w-pia -w-rch -w-inl -w-ngu -w-pro -tWM
+LIBFLAGS = /C /P32
+LDFLAGS = -q -lq -laa -tWD
+
+INCDIRS = -I.;../include
+LINKLIB = $(BCCDIR)/lib/cw32mt.lib
+
+# If you build with SSL support, set WITH_SSL=1
+DEFINES = -DNDEBUG -DWIN32 -D_CONSOLE -D_MBCS -DBUILDING_LIBCURL
+
+!ifdef WITH_ZLIB
+DEFINES = $(DEFINES) -DHAVE_LIBZ -DHAVE_ZLIB_H
+INCDIRS = $(INCDIRS);$(ZLIB_PATH)
+LINKLIB = $(LINKLIB) $(ZLIB_PATH)/zlib.lib
+!endif
+
+!ifdef WITH_SSL
+DEFINES = $(DEFINES) -DUSE_SSLEAY
+INCDIRS = $(INCDIRS);$(OPENSSL_PATH)/inc32;$(OPENSSL_PATH)/inc32/openssl
+LINKLIB = $(LINKLIB) $(OPENSSL_PATH)/out32/ssleay32.lib $(OPENSSL_PATH)/out32/libeay32.lib
+!endif
+
+.autodepend
+
+# Makefile.inc provides the CSOURCES and HHEADERS defines
+!include Makefile.inc
+
+OBJECTS = $(CSOURCES:.c=.obj)
+
+.c.obj:
+ $(CXX) -c $(INCDIRS) $(CXXFLAGS) $(DEFINES) $<
+
+all: $(LIBCURL_LIB) $(LIBCURL_DLL)
+
+clean:
+ -$(RM) $(LIBCURL_LIB)
+ -$(RM) $(LIBCURL_IMPLIB)
+ -$(RM) libcurl.tds
+ -$(RM) *.obj
+
+$(LIBCURL_LIB): $(OBJECTS)
+ @-$(RM) $@
+ $(LIB) $(LIBFLAGS) $@ @&&!
++$(**: = &^
++)
+!
+
+$(LIBCURL_DLL) $(LIBCURL_IMPLIB): $(OBJECTS) $(LINKLIB)
+ @-$(RM) $(LIBCURL_DLL)
+ @-$(RM) $(LIBCURL_IMPLIB)
+ $(LD) $(LDFLAGS) -e$(LIBCURL_DLL) $**
+ $(IMPLIB) $(LIBCURL_IMPLIB) $(LIBCURL_DLL)
+
diff --git a/lib/Makefile.in b/lib/Makefile.in
new file mode 100644
index 0000000..a4beebe
--- /dev/null
+++ b/lib/Makefile.in
@@ -0,0 +1,865 @@
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005 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.
+
+@SET_MAKE@
+
+# ./lib/Makefile.inc
+# Using the backslash as line continuation character might be problematic
+# with some make flavours, as Watcom's wmake showed us already. If we
+# ever want to change this in a portable manner then we should consider
+# this idea (posted to the libcurl list by Adam Kellas):
+# CSRC1 = file1.c file2.c file3.c
+# CSRC2 = file4.c file5.c file6.c
+# CSOURCES = $(CSRC1) $(CSRC2)
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(srcdir)/Makefile.inc $(srcdir)/curl_config.h.in
+subdir = lib
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
+ $(top_srcdir)/m4/curl-confopts.m4 \
+ $(top_srcdir)/m4/curl-functions.m4 \
+ $(top_srcdir)/m4/curl-override.m4 \
+ $(top_srcdir)/m4/curl-reentrant.m4 \
+ $(top_srcdir)/m4/curl-system.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = curl_config.h $(top_builddir)/src/curl_config.h \
+ $(top_builddir)/include/curl/curlbuild.h
+CONFIG_CLEAN_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+am__installdirs = "$(DESTDIR)$(libdir)"
+libLTLIBRARIES_INSTALL = $(INSTALL)
+LTLIBRARIES = $(lib_LTLIBRARIES)
+libcurl_la_LIBADD =
+am__objects_1 = file.lo timeval.lo base64.lo hostip.lo progress.lo \
+ formdata.lo cookie.lo http.lo sendf.lo ftp.lo url.lo dict.lo \
+ if2ip.lo speedcheck.lo ldap.lo ssluse.lo version.lo getenv.lo \
+ escape.lo mprintf.lo telnet.lo netrc.lo getinfo.lo transfer.lo \
+ strequal.lo easy.lo security.lo krb4.lo curl_fnmatch.lo \
+ fileinfo.lo ftplistparser.lo wildcard.lo krb5.lo memdebug.lo \
+ http_chunks.lo strtok.lo connect.lo llist.lo hash.lo multi.lo \
+ content_encoding.lo share.lo http_digest.lo md4.lo md5.lo \
+ curl_rand.lo http_negotiate.lo http_ntlm.lo inet_pton.lo \
+ strtoofft.lo strerror.lo hostares.lo hostasyn.lo hostip4.lo \
+ hostip6.lo hostsyn.lo hostthre.lo inet_ntop.lo parsedate.lo \
+ select.lo gtls.lo sslgen.lo tftp.lo splay.lo strdup.lo \
+ socks.lo ssh.lo nss.lo qssl.lo rawstr.lo curl_addrinfo.lo \
+ socks_gssapi.lo socks_sspi.lo curl_sspi.lo slist.lo \
+ nonblock.lo curl_memrchr.lo imap.lo pop3.lo smtp.lo \
+ pingpong.lo rtsp.lo curl_threads.lo warnless.lo hmac.lo \
+ polarssl.lo curl_rtmp.lo openldap.lo curl_gethostname.lo \
+ gopher.lo
+am__objects_2 =
+am_libcurl_la_OBJECTS = $(am__objects_1) $(am__objects_2)
+libcurl_la_OBJECTS = $(am_libcurl_la_OBJECTS)
+DEFAULT_INCLUDES =
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(libcurl_la_SOURCES)
+DIST_SOURCES = $(libcurl_la_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_LIBHOSTNAME_FALSE = @BUILD_LIBHOSTNAME_FALSE@
+BUILD_LIBHOSTNAME_TRUE = @BUILD_LIBHOSTNAME_TRUE@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+
+# This might hold -Werror
+CFLAGS = @CFLAGS@ @CURL_CFLAG_EXTRAS@
+CONFIGURE_OPTIONS = @CONFIGURE_OPTIONS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CROSSCOMPILING_FALSE = @CROSSCOMPILING_FALSE@
+CROSSCOMPILING_TRUE = @CROSSCOMPILING_TRUE@
+CURLDEBUG_FALSE = @CURLDEBUG_FALSE@
+CURLDEBUG_TRUE = @CURLDEBUG_TRUE@
+CURL_CA_BUNDLE = @CURL_CA_BUNDLE@
+CURL_CFLAG_EXTRAS = @CURL_CFLAG_EXTRAS@
+CURL_DISABLE_DICT = @CURL_DISABLE_DICT@
+CURL_DISABLE_FILE = @CURL_DISABLE_FILE@
+CURL_DISABLE_FTP = @CURL_DISABLE_FTP@
+CURL_DISABLE_GOPHER = @CURL_DISABLE_GOPHER@
+CURL_DISABLE_HTTP = @CURL_DISABLE_HTTP@
+CURL_DISABLE_IMAP = @CURL_DISABLE_IMAP@
+CURL_DISABLE_LDAP = @CURL_DISABLE_LDAP@
+CURL_DISABLE_LDAPS = @CURL_DISABLE_LDAPS@
+CURL_DISABLE_POP3 = @CURL_DISABLE_POP3@
+CURL_DISABLE_PROXY = @CURL_DISABLE_PROXY@
+CURL_DISABLE_RTSP = @CURL_DISABLE_RTSP@
+CURL_DISABLE_SMTP = @CURL_DISABLE_SMTP@
+CURL_DISABLE_TELNET = @CURL_DISABLE_TELNET@
+CURL_DISABLE_TFTP = @CURL_DISABLE_TFTP@
+CURL_LIBS = @CURL_LIBS@
+CURL_NETWORK_LIBS = @CURL_NETWORK_LIBS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_SHARED = @ENABLE_SHARED@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_LDAP_SSL = @HAVE_LDAP_SSL@
+HAVE_LIBZ = @HAVE_LIBZ@
+HAVE_LIBZ_FALSE = @HAVE_LIBZ_FALSE@
+HAVE_LIBZ_TRUE = @HAVE_LIBZ_TRUE@
+HAVE_PK11_CREATEGENERICOBJECT = @HAVE_PK11_CREATEGENERICOBJECT@
+IDN_ENABLED = @IDN_ENABLED@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+IPV6_ENABLED = @IPV6_ENABLED@
+KRB4_ENABLED = @KRB4_ENABLED@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBCURL_LIBS = @LIBCURL_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+MANOPT = @MANOPT@
+MIMPURE_FALSE = @MIMPURE_FALSE@
+MIMPURE_TRUE = @MIMPURE_TRUE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NO_UNDEFINED_FALSE = @NO_UNDEFINED_FALSE@
+NO_UNDEFINED_TRUE = @NO_UNDEFINED_TRUE@
+NROFF = @NROFF@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH = @PATH@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+PKGADD_NAME = @PKGADD_NAME@
+PKGADD_PKG = @PKGADD_PKG@
+PKGADD_VENDOR = @PKGADD_VENDOR@
+PKGCONFIG = @PKGCONFIG@
+RANDOM_FILE = @RANDOM_FILE@
+RANLIB = @RANLIB@
+REQUIRE_LIB_DEPS = @REQUIRE_LIB_DEPS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SONAME_BUMP_FALSE = @SONAME_BUMP_FALSE@
+SONAME_BUMP_TRUE = @SONAME_BUMP_TRUE@
+SSL_ENABLED = @SSL_ENABLED@
+STATICLIB_FALSE = @STATICLIB_FALSE@
+STATICLIB_TRUE = @STATICLIB_TRUE@
+STRIP = @STRIP@
+SUPPORT_FEATURES = @SUPPORT_FEATURES@
+SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
+TEST_SERVER_LIBS = @TEST_SERVER_LIBS@
+USE_ARES = @USE_ARES@
+USE_EMBEDDED_ARES_FALSE = @USE_EMBEDDED_ARES_FALSE@
+USE_EMBEDDED_ARES_TRUE = @USE_EMBEDDED_ARES_TRUE@
+USE_GNUTLS = @USE_GNUTLS@
+USE_LIBRTMP = @USE_LIBRTMP@
+USE_LIBSSH2 = @USE_LIBSSH2@
+USE_MANUAL_FALSE = @USE_MANUAL_FALSE@
+USE_MANUAL_TRUE = @USE_MANUAL_TRUE@
+USE_NSS = @USE_NSS@
+USE_OPENLDAP = @USE_OPENLDAP@
+USE_POLARSSL = @USE_POLARSSL@
+USE_SSLEAY = @USE_SSLEAY@
+USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
+VERSION = @VERSION@
+VERSIONNUM = @VERSIONNUM@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+libext = @libext@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+
+#***************************************************************************
+# _ _ ____ _
+# Project ___| | | | _ \| |
+# / __| | | | |_) | |
+# | (__| |_| | _ <| |___
+# \___|\___/|_| \_\_____|
+#
+# Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+#
+# This software is licensed as described in the file COPYING, which
+# you should have received as part of this distribution. The terms
+# are also available at http://curl.haxx.se/docs/copyright.html.
+#
+# You may opt to use, copy, modify, merge, publish, distribute and/or sell
+# copies of the Software, and permit persons to whom the Software is
+# furnished to do so, under the terms of the COPYING file.
+#
+# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+# KIND, either express or implied.
+#
+###########################################################################
+AUTOMAKE_OPTIONS = foreign nostdinc
+DSP = vc6libcurl.dsp
+VCPROJ = libcurl.vcproj
+DOCS = README.encoding README.memoryleak README.ares README.curlx \
+ README.hostip README.multi_socket README.httpauth README.pipelining \
+ README.curl_off_t README.pingpong
+
+CMAKE_DIST = CMakeLists.txt curl_config.h.cmake
+EXTRA_DIST = Makefile.b32 Makefile.m32 Makefile.vc6 Makefile.riscos $(DSP) \
+ vc6libcurl.dsw config-win32.h config-win32ce.h config-riscos.h \
+ config-mac.h curl_config.h.in makefile.dj config.dos libcurl.plist \
+ libcurl.rc config-amigaos.h amigaos.c amigaos.h makefile.amiga \
+ Makefile.netware nwlib.c nwos.c libcurl.imp msvcproj.head msvcproj.foot \
+ config-win32ce.h config-os400.h setup-os400.h config-symbian.h \
+ Makefile.Watcom config-tpf.h $(DOCS) $(VCPROJ) mk-ca-bundle.pl \
+ mk-ca-bundle.vbs firefox-db2pem.sh $(CMAKE_DIST) config-vxworks.h \
+ Makefile.vxworks
+
+CLEANFILES = $(DSP) $(VCPROJ)
+lib_LTLIBRARIES = libcurl.la
+@USE_EMBEDDED_ARES_FALSE@INCLUDES = -I$(top_builddir)/include/curl \
+@USE_EMBEDDED_ARES_FALSE@ -I$(top_builddir)/include \
+@USE_EMBEDDED_ARES_FALSE@ -I$(top_srcdir)/include \
+@USE_EMBEDDED_ARES_FALSE@ -I$(top_builddir)/lib \
+@USE_EMBEDDED_ARES_FALSE@ -I$(top_srcdir)/lib
+
+
+# Specify our include paths here, and do it relative to $(top_srcdir) and
+# $(top_builddir), to ensure that these paths which belong to the library
+# being currently built and tested are searched before the library which
+# might possibly already be installed in the system.
+#
+# $(top_builddir)/include/curl for generated curlbuild.h included from curl.h
+# $(top_builddir)/include for generated curlbuild.h included from lib/setup.h
+# $(top_srcdir)/include is for libcurl's external include files
+# $(top_builddir)/lib is for libcurl's generated lib/curl_config.h file
+# $(top_srcdir)/lib is for libcurl's lib/setup.h and other "private" files
+# $(top_builddir)/ares is for in-tree c-ares's generated ares_build.h file
+# $(top_srcdir)/ares is for in-tree c-ares's external include files
+@USE_EMBEDDED_ARES_TRUE@INCLUDES = -I$(top_builddir)/include/curl \
+@USE_EMBEDDED_ARES_TRUE@ -I$(top_builddir)/include \
+@USE_EMBEDDED_ARES_TRUE@ -I$(top_srcdir)/include \
+@USE_EMBEDDED_ARES_TRUE@ -I$(top_builddir)/lib \
+@USE_EMBEDDED_ARES_TRUE@ -I$(top_srcdir)/lib \
+@USE_EMBEDDED_ARES_TRUE@ -I$(top_builddir)/ares \
+@USE_EMBEDDED_ARES_TRUE@ -I$(top_srcdir)/ares
+
+@SONAME_BUMP_FALSE@VERSIONINFO = -version-info 6:0:2
+
+#
+# Bumping of SONAME conditionally may seem like a weird thing to do, and yeah
+# it is. The problem is that we try to avoid the bump as hard as possible, but
+# yet it is still necessary for a few rare situations. The configure script will
+# attempt to figure out these situations, and it can be forced to consider this
+# to be such a case! See README.curl_off_t for further details.
+#
+# This conditional soname bump SHOULD be removed at next "proper" bump.
+#
+@SONAME_BUMP_TRUE@VERSIONINFO = -version-info 7:0:2
+
+# This flag accepts an argument of the form current[:revision[:age]]. So,
+# passing -version-info 3:12:1 sets current to 3, revision to 12, and age to
+# 1.
+#
+# Here's the simplified rule guide on how to change -version-info:
+# (current version is C:R:A)
+#
+# 1. if there are only source changes, use C:R+1:A
+# 2. if interfaces were added use C+1:0:A+1
+# 3. if interfaces were removed, then use C+1:0:0
+#
+# For the full guide on libcurl ABI rules, see docs/libcurl/ABI
+
+# The -no-undefined flag is CRUCIAL for this to build fine on Cygwin.
+@NO_UNDEFINED_TRUE@UNDEF = -no-undefined
+
+# This is for gcc on Solaris (8+ ?) to avoid "relocations remain against
+# allocatable but non-writable sections" problems.
+@MIMPURE_TRUE@MIMPURE = -mimpure-text
+libcurl_la_LDFLAGS = $(UNDEF) $(VERSIONINFO) $(MIMPURE) $(LIBCURL_LIBS)
+CSOURCES = file.c timeval.c base64.c hostip.c progress.c formdata.c \
+ cookie.c http.c sendf.c ftp.c url.c dict.c if2ip.c speedcheck.c \
+ ldap.c ssluse.c version.c getenv.c escape.c mprintf.c telnet.c \
+ netrc.c getinfo.c transfer.c strequal.c easy.c security.c krb4.c \
+ curl_fnmatch.c fileinfo.c ftplistparser.c wildcard.c krb5.c \
+ memdebug.c http_chunks.c strtok.c connect.c llist.c hash.c multi.c \
+ content_encoding.c share.c http_digest.c md4.c md5.c curl_rand.c \
+ http_negotiate.c http_ntlm.c inet_pton.c strtoofft.c strerror.c \
+ hostares.c hostasyn.c hostip4.c hostip6.c hostsyn.c hostthre.c \
+ inet_ntop.c parsedate.c select.c gtls.c sslgen.c tftp.c splay.c \
+ strdup.c socks.c ssh.c nss.c qssl.c rawstr.c curl_addrinfo.c \
+ socks_gssapi.c socks_sspi.c curl_sspi.c slist.c nonblock.c \
+ curl_memrchr.c imap.c pop3.c smtp.c pingpong.c rtsp.c curl_threads.c \
+ warnless.c hmac.c polarssl.c curl_rtmp.c openldap.c curl_gethostname.c\
+ gopher.c
+
+HHEADERS = arpa_telnet.h netrc.h file.h timeval.h qssl.h hostip.h \
+ progress.h formdata.h cookie.h http.h sendf.h ftp.h url.h dict.h \
+ if2ip.h speedcheck.h urldata.h curl_ldap.h ssluse.h escape.h telnet.h \
+ getinfo.h strequal.h krb4.h memdebug.h http_chunks.h curl_rand.h \
+ curl_fnmatch.h wildcard.h fileinfo.h ftplistparser.h strtok.h \
+ connect.h llist.h hash.h content_encoding.h share.h curl_md4.h \
+ curl_md5.h http_digest.h http_negotiate.h http_ntlm.h inet_pton.h \
+ strtoofft.h strerror.h inet_ntop.h curlx.h curl_memory.h setup.h \
+ transfer.h select.h easyif.h multiif.h parsedate.h sslgen.h gtls.h \
+ tftp.h sockaddr.h splay.h strdup.h setup_once.h socks.h ssh.h nssg.h \
+ curl_base64.h rawstr.h curl_addrinfo.h curl_sspi.h slist.h nonblock.h \
+ curl_memrchr.h imap.h pop3.h smtp.h pingpong.h rtsp.h curl_threads.h \
+ warnless.h curl_hmac.h polarssl.h curl_rtmp.h curl_gethostname.h \
+ gopher.h
+
+
+# Makefile.inc provides the CSOURCES and HHEADERS defines
+libcurl_la_SOURCES = $(CSOURCES) $(HHEADERS)
+WIN32SOURCES = $(CSOURCES)
+WIN32HEADERS = $(HHEADERS) config-win32.h
+DSPOUT = | awk '{printf("%s\r\n", $$0)}' >> $(DSP)
+VCPROJOUT = | awk '{printf("%s\r\n", $$0)}' >> $(VCPROJ)
+all: curl_config.h
+ $(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/Makefile.inc $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign lib/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --foreign lib/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+curl_config.h: stamp-h1
+ @if test ! -f $@; then \
+ rm -f stamp-h1; \
+ $(MAKE) stamp-h1; \
+ else :; fi
+
+stamp-h1: $(srcdir)/curl_config.h.in $(top_builddir)/config.status
+ @rm -f stamp-h1
+ cd $(top_builddir) && $(SHELL) ./config.status lib/curl_config.h
+$(srcdir)/curl_config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_srcdir) && $(AUTOHEADER)
+ rm -f stamp-h1
+ touch $@
+
+distclean-hdr:
+ -rm -f curl_config.h stamp-h1
+install-libLTLIBRARIES: $(lib_LTLIBRARIES)
+ @$(NORMAL_INSTALL)
+ test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)"
+ @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+ if test -f $$p; then \
+ f=$(am__strip_dir) \
+ echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \
+ $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \
+ else :; fi; \
+ done
+
+uninstall-libLTLIBRARIES:
+ @$(NORMAL_UNINSTALL)
+ @set -x; list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+ p=$(am__strip_dir) \
+ echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \
+ $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \
+ done
+
+clean-libLTLIBRARIES:
+ -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
+ @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+ test "$$dir" != "$$p" || dir=.; \
+ echo "rm -f \"$${dir}/so_locations\""; \
+ rm -f "$${dir}/so_locations"; \
+ done
+libcurl.la: $(libcurl_la_OBJECTS) $(libcurl_la_DEPENDENCIES)
+ $(LINK) -rpath $(libdir) $(libcurl_la_LDFLAGS) $(libcurl_la_OBJECTS) $(libcurl_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/base64.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/connect.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/content_encoding.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cookie.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/curl_addrinfo.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/curl_fnmatch.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/curl_gethostname.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/curl_memrchr.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/curl_rand.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/curl_rtmp.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/curl_sspi.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/curl_threads.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dict.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/easy.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/escape.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/file.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fileinfo.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/formdata.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ftp.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ftplistparser.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getenv.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getinfo.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gopher.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gtls.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hash.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hmac.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hostares.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hostasyn.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hostip.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hostip4.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hostip6.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hostsyn.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hostthre.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/http.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/http_chunks.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/http_digest.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/http_negotiate.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/http_ntlm.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/if2ip.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/imap.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/inet_ntop.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/inet_pton.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/krb4.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/krb5.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ldap.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/llist.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/md4.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/md5.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memdebug.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mprintf.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/multi.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/netrc.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nonblock.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nss.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/openldap.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parsedate.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pingpong.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/polarssl.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pop3.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/progress.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qssl.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rawstr.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtsp.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/security.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/select.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sendf.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/share.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slist.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smtp.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/socks.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/socks_gssapi.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/socks_sspi.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/speedcheck.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/splay.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ssh.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sslgen.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ssluse.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strdup.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strequal.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strerror.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strtok.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strtoofft.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/telnet.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tftp.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/timeval.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/transfer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/url.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/version.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/warnless.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wildcard.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+ -rm -f libtool
+uninstall-info-am:
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) curl_config.h.in $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) curl_config.h.in $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) curl_config.h.in $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) curl_config.h.in $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ list='$(DISTFILES)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkdir_p) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES) curl_config.h
+installdirs:
+ for dir in "$(DESTDIR)$(libdir)"; do \
+ test -z "$$dir" || $(mkdir_p) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-hdr distclean-libtool distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-exec-am: install-libLTLIBRARIES
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am uninstall-libLTLIBRARIES
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libLTLIBRARIES clean-libtool ctags distclean \
+ distclean-compile distclean-generic distclean-hdr \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-exec install-exec-am install-info \
+ install-info-am install-libLTLIBRARIES install-man \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+ pdf pdf-am ps ps-am tags uninstall uninstall-am \
+ uninstall-info-am uninstall-libLTLIBRARIES
+
+
+$(DSP): msvcproj.head msvcproj.foot Makefile.am
+ echo "creating $(DSP)"
+ @(cp $(srcdir)/msvcproj.head $(DSP); \
+ echo "# Begin Group \"Source Files\"" $(DSPOUT); \
+ echo "" $(DSPOUT); \
+ echo "# PROP Default_Filter \"\"" $(DSPOUT); \
+ win32_srcs='$(WIN32SOURCES)'; \
+ sorted_srcs=`for file in $$win32_srcs; do echo $$file; done | sort`; \
+ for file in $$sorted_srcs; do \
+ echo "# Begin Source File" $(DSPOUT); \
+ echo "" $(DSPOUT); \
+ echo "SOURCE=.\\"$$file $(DSPOUT); \
+ echo "# End Source File" $(DSPOUT); \
+ done; \
+ echo "# End Group" $(DSPOUT); \
+ echo "# Begin Group \"Header Files\"" $(DSPOUT); \
+ echo "" $(DSPOUT); \
+ echo "# PROP Default_Filter \"\"" $(DSPOUT); \
+ win32_hdrs='$(WIN32HEADERS)'; \
+ sorted_hdrs=`for file in $$win32_hdrs; do echo $$file; done | sort`; \
+ for file in $$sorted_hdrs; do \
+ echo "# Begin Source File" $(DSPOUT); \
+ echo "" $(DSPOUT); \
+ echo "SOURCE=.\\"$$file $(DSPOUT); \
+ echo "# End Source File" $(DSPOUT); \
+ done; \
+ echo "# End Group" $(DSPOUT); \
+ cat $(srcdir)/msvcproj.foot $(DSPOUT) )
+
+$(VCPROJ): vc8proj.head vc8proj.foot Makefile.am
+ echo "creating $(VCPROJ)"
+ @(cp $(srcdir)/vc8proj.head $(VCPROJ); \
+ win32_srcs='$(WIN32SOURCES)'; \
+ sorted_srcs=`for file in $$win32_srcs; do echo $$file; done | sort`; \
+ for file in $$sorted_srcs; do \
+ echo "<File RelativePath=\""$$file"\"></File>" $(VCPROJOUT); \
+ done; \
+ echo "</Filter><Filter Name=\"Header Files\">" $(VCPROJOUT); \
+ win32_hdrs='$(WIN32HEADERS)'; \
+ sorted_hdrs=`for file in $$win32_hdrs; do echo $$file; done | sort`; \
+ for file in $$sorted_hdrs; do \
+ echo "<File RelativePath=\""$$file"\"></File>" $(VCPROJOUT); \
+ done; \
+ cat $(srcdir)/vc8proj.foot $(VCPROJOUT) )
+# 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/lib/Makefile.inc b/lib/Makefile.inc
index 9803c8c..41ab827 100644
--- a/lib/Makefile.inc
+++ b/lib/Makefile.inc
@@ -1,28 +1,40 @@
# ./lib/Makefile.inc
+# Using the backslash as line continuation character might be problematic
+# with some make flavours, as Watcom's wmake showed us already. If we
+# ever want to change this in a portable manner then we should consider
+# this idea (posted to the libcurl list by Adam Kellas):
+# CSRC1 = file1.c file2.c file3.c
+# CSRC2 = file4.c file5.c file6.c
+# CSOURCES = $(CSRC1) $(CSRC2)
CSOURCES = file.c timeval.c base64.c hostip.c progress.c formdata.c \
cookie.c http.c sendf.c ftp.c url.c dict.c if2ip.c speedcheck.c \
ldap.c ssluse.c version.c getenv.c escape.c mprintf.c telnet.c \
netrc.c getinfo.c transfer.c strequal.c easy.c security.c krb4.c \
- krb5.c memdebug.c http_chunks.c strtok.c connect.c llist.c hash.c \
- multi.c content_encoding.c share.c http_digest.c md5.c curl_rand.c \
+ curl_fnmatch.c fileinfo.c ftplistparser.c wildcard.c krb5.c \
+ memdebug.c http_chunks.c strtok.c connect.c llist.c hash.c multi.c \
+ content_encoding.c share.c http_digest.c md4.c md5.c curl_rand.c \
http_negotiate.c http_ntlm.c inet_pton.c strtoofft.c strerror.c \
hostares.c hostasyn.c hostip4.c hostip6.c hostsyn.c hostthre.c \
inet_ntop.c parsedate.c select.c gtls.c sslgen.c tftp.c splay.c \
- strdup.c socks.c ssh.c nss.c qssl.c rawstr.c curl_addrinfo.c \
+ strdup.c socks.c ssh.c nss.c qssl.c rawstr.c curl_addrinfo.c \
socks_gssapi.c socks_sspi.c curl_sspi.c slist.c nonblock.c \
curl_memrchr.c imap.c pop3.c smtp.c pingpong.c rtsp.c curl_threads.c \
- warnless.c
+ warnless.c hmac.c polarssl.c curl_rtmp.c openldap.c curl_gethostname.c\
+ gopher.c
HHEADERS = arpa_telnet.h netrc.h file.h timeval.h qssl.h hostip.h \
progress.h formdata.h cookie.h http.h sendf.h ftp.h url.h dict.h \
if2ip.h speedcheck.h urldata.h curl_ldap.h ssluse.h escape.h telnet.h \
getinfo.h strequal.h krb4.h memdebug.h http_chunks.h curl_rand.h \
- strtok.h connect.h llist.h hash.h content_encoding.h share.h \
+ curl_fnmatch.h wildcard.h fileinfo.h ftplistparser.h strtok.h \
+ connect.h llist.h hash.h content_encoding.h share.h curl_md4.h \
curl_md5.h http_digest.h http_negotiate.h http_ntlm.h inet_pton.h \
strtoofft.h strerror.h inet_ntop.h curlx.h curl_memory.h setup.h \
transfer.h select.h easyif.h multiif.h parsedate.h sslgen.h gtls.h \
tftp.h sockaddr.h splay.h strdup.h setup_once.h socks.h ssh.h nssg.h \
curl_base64.h rawstr.h curl_addrinfo.h curl_sspi.h slist.h nonblock.h \
curl_memrchr.h imap.h pop3.h smtp.h pingpong.h rtsp.h curl_threads.h \
- warnless.h
+ warnless.h curl_hmac.h polarssl.h curl_rtmp.h curl_gethostname.h \
+ gopher.h
+
diff --git a/lib/Makefile.m32 b/lib/Makefile.m32
new file mode 100644
index 0000000..08b665b
--- /dev/null
+++ b/lib/Makefile.m32
@@ -0,0 +1,167 @@
+#########################################################################
+#
+## Makefile for building libcurl.a with MingW32 (GCC-3.2 or later)
+## and optionally OpenSSL (0.9.8), libssh2 (1.2), zlib (1.2.5)
+##
+## Usage:
+## mingw32-make -f Makefile.m32 [SSL=1] [SSH2=1] [ZLIB=1] [IDN=1] [SSPI=1] [IPV6=1] [LDAPS=1] [RTMP=1] [DYN=1]
+##
+## Hint: you can also set environment vars to control the build, f.e.:
+## set ZLIB_PATH=c:/zlib-1.2.5
+## set ZLIB=1
+##
+## Comments to: Troy Engel <tengel@sonic.net> or
+## Joern Hartroth <hartroth@acm.org>
+#########################################################################
+
+# Edit the path below to point to the base of your Zlib sources.
+ifndef ZLIB_PATH
+ZLIB_PATH = ../../zlib-1.2.5
+endif
+# Edit the path below to point to the base of your OpenSSL package.
+ifndef OPENSSL_PATH
+OPENSSL_PATH = ../../openssl-0.9.8o
+endif
+# Edit the path below to point to the base of your LibSSH2 package.
+ifndef LIBSSH2_PATH
+LIBSSH2_PATH = ../../libssh2-1.2.7
+endif
+# Edit the path below to point to the base of your libidn package.
+ifndef LIBIDN_PATH
+LIBIDN_PATH = ../../libidn-1.18
+endif
+# Edit the path below to point to the base of your librtmp package.
+ifndef LIBRTMP_PATH
+LIBRTMP_PATH = ../../librtmp-2.3
+endif
+# Edit the path below to point to the base of your Novell LDAP NDK.
+ifndef LDAP_SDK
+LDAP_SDK = c:/novell/ndk/cldapsdk/win32
+endif
+
+# Edit the path below to point to the base of your c-ares package.
+ifndef LIBCARES_PATH
+LIBCARES_PATH = ../ares
+endif
+
+CC = gcc
+AR = ar
+# comment LDFLAGS below to keep debug info
+LDFLAGS = -s
+RANLIB = ranlib
+RC = windres
+RCFLAGS = --include-dir=../include -DDEBUGBUILD=0 -O COFF -i
+RM = del /q /f 2>NUL
+STRIP = strip -g
+
+########################################################
+## Nothing more to do below this line!
+
+INCLUDES = -I. -I../include
+CFLAGS = -g -O2 -DBUILDING_LIBCURL
+ifdef ARES
+ INCLUDES += -I$(LIBCARES_PATH)
+ CFLAGS += -DUSE_ARES
+ DLL_LIBS += -L$(LIBCARES_PATH) -lcares
+ libcurl_dll_DEPENDENCIES = $(LIBCARES_PATH)/libcares.a
+endif
+ifdef RTMP
+ INCLUDES += -I"$(LIBRTMP_PATH)"
+ CFLAGS += -DUSE_LIBRTMP
+ DLL_LIBS += -L"$(LIBRTMP_PATH)/librtmp" -lrtmp -lwinmm
+endif
+ifdef SSH2
+ INCLUDES += -I"$(LIBSSH2_PATH)/include" -I"$(LIBSSH2_PATH)/win32"
+ CFLAGS += -DUSE_LIBSSH2 -DHAVE_LIBSSH2_H
+ DLL_LIBS += -L$(LIBSSH2_PATH)/win32 -lssh2
+endif
+ifdef SSL
+ INCLUDES += -I"$(OPENSSL_PATH)/outinc" -I"$(OPENSSL_PATH)/outinc/openssl"
+ CFLAGS += -DUSE_SSLEAY -DUSE_OPENSSL -DHAVE_OPENSSL_ENGINE_H -DHAVE_OPENSSL_PKCS12_H \
+ -DHAVE_ENGINE_LOAD_BUILTIN_ENGINES -DOPENSSL_NO_KRB5 \
+ -DCURL_WANTS_CA_BUNDLE_ENV
+ DLL_LIBS += -L$(OPENSSL_PATH)/out -leay32 -lssl32
+endif
+ifdef ZLIB
+ INCLUDES += -I"$(ZLIB_PATH)"
+ CFLAGS += -DHAVE_LIBZ -DHAVE_ZLIB_H
+ DLL_LIBS += -L$(ZLIB_PATH) -lz
+endif
+ifdef IDN
+ INCLUDES += -I"$(LIBIDN_PATH)/include"
+ CFLAGS += -DUSE_LIBIDN
+ DLL_LIBS += -L$(LIBIDN_PATH)/lib -lidn
+endif
+ifdef SSPI
+ CFLAGS += -DUSE_WINDOWS_SSPI
+endif
+ifdef IPV6
+ CFLAGS += -DENABLE_IPV6
+endif
+ifdef LDAPS
+ CFLAGS += -DHAVE_LDAP_SSL
+endif
+ifdef USE_LDAP_NOVELL
+ INCLUDES += -I"$(LDAP_SDK)/inc"
+ CFLAGS += -DCURL_HAS_NOVELL_LDAPSDK
+ DLL_LIBS += -L"$(LDAP_SDK)/lib/mscvc" -lldapsdk -lldapssl -lldapx
+endif
+ifdef USE_LDAP_OPENLDAP
+ INCLUDES += -I"$(LDAP_SDK)/include"
+ CFLAGS += -DCURL_HAS_OPENLDAP_LDAPSDK
+ DLL_LIBS += -L"$(LDAP_SDK)/lib" -lldap -llber
+endif
+ifndef USE_LDAP_NOVELL
+ifndef USE_LDAP_OPENLDAP
+DLL_LIBS += -lwldap32
+endif
+endif
+DLL_LIBS += -lws2_32
+COMPILE = $(CC) $(INCLUDES) $(CFLAGS)
+
+# Makefile.inc provides the CSOURCES and HHEADERS defines
+include Makefile.inc
+
+libcurl_dll_LIBRARY = libcurl.dll
+libcurl_dll_a_LIBRARY = libcurldll.a
+libcurl_a_LIBRARY = libcurl.a
+
+libcurl_a_OBJECTS := $(patsubst %.c,%.o,$(strip $(CSOURCES)))
+libcurl_a_DEPENDENCIES := $(strip $(CSOURCES) $(HHEADERS))
+
+RESOURCE = libcurl.res
+
+.SUFFIXES: .rc .res
+
+all: $(libcurl_a_LIBRARY) $(libcurl_dll_LIBRARY)
+
+$(libcurl_a_LIBRARY): $(libcurl_a_OBJECTS) $(libcurl_a_DEPENDENCIES)
+ -$(RM) $@
+ $(AR) cru $@ $(libcurl_a_OBJECTS)
+ $(RANLIB) $@
+ $(STRIP) $@
+
+# remove the last line above to keep debug info
+
+$(libcurl_dll_LIBRARY): $(libcurl_a_OBJECTS) $(RESOURCE) $(libcurl_dll_DEPENDENCIES)
+ -$(RM) $@
+ $(CC) $(LDFLAGS) -shared -Wl,--out-implib,$(libcurl_dll_a_LIBRARY) \
+ -o $@ $(libcurl_a_OBJECTS) $(RESOURCE) $(DLL_LIBS)
+
+.c.o:
+ $(COMPILE) -c $<
+
+.rc.res:
+ $(RC) $(RCFLAGS) $< -o $@
+
+clean:
+ -$(RM) $(libcurl_a_OBJECTS) $(RESOURCE)
+
+distclean vclean: clean
+ -$(RM) $(libcurl_a_LIBRARY) $(libcurl_dll_LIBRARY) $(libcurl_dll_a_LIBRARY)
+
+FORCE: ;
+
+$(LIBCARES_PATH)/libcares.a:
+ $(MAKE) -C $(LIBCARES_PATH) -f Makefile.m32
+
diff --git a/lib/Makefile.netware b/lib/Makefile.netware
new file mode 100644
index 0000000..655c7e3
--- /dev/null
+++ b/lib/Makefile.netware
@@ -0,0 +1,667 @@
+#################################################################
+#
+## Makefile for building libcurl.nlm (NetWare version - gnu make)
+## Use: make -f Makefile.netware
+##
+## Comments to: Guenter Knauf http://www.gknw.net/phpbb
+#
+#################################################################
+
+# Edit the path below to point to the base of your Novell NDK.
+ifndef NDKBASE
+NDKBASE = c:/novell
+endif
+
+# Edit the path below to point to the base of your Zlib sources.
+ifndef ZLIB_PATH
+ZLIB_PATH = ../../zlib-1.2.5
+endif
+
+# Edit the path below to point to the base of your OpenSSL package.
+ifndef OPENSSL_PATH
+OPENSSL_PATH = ../../openssl-0.9.8o
+endif
+
+# Edit the path below to point to the base of your LibSSH2 package.
+ifndef LIBSSH2_PATH
+LIBSSH2_PATH = ../../libssh2-1.2.7
+endif
+
+# Edit the path below to point to the base of your libidn package.
+ifndef LIBIDN_PATH
+LIBIDN_PATH = ../../libidn-1.18
+endif
+
+# Edit the path below to point to the base of your librtmp package.
+ifndef LIBRTMP_PATH
+LIBRTMP_PATH = ../../librtmp-2.3
+endif
+
+# Edit the path below to point to the base of your c-ares package.
+ifndef LIBCARES_PATH
+LIBCARES_PATH = ../ares
+endif
+
+ifndef INSTDIR
+INSTDIR = ..$(DS)curl-$(LIBCURL_VERSION_STR)-bin-nw
+endif
+
+# Edit the vars below to change NLM target settings.
+TARGET = libcurl
+VERSION = $(LIBCURL_VERSION)
+COPYR = Copyright (C) $(LIBCURL_COPYRIGHT_STR)
+DESCR = cURL libcurl $(LIBCURL_VERSION_STR) ($(LIBARCH)) - http://curl.haxx.se
+MTSAFE = YES
+STACK = 64000
+SCREEN = none
+EXPORTS = @libcurl.imp
+
+# Uncomment the next line to enable linking with POSIX semantics.
+# POSIXFL = 1
+
+# Edit the var below to point to your lib architecture.
+ifndef LIBARCH
+LIBARCH = LIBC
+endif
+
+# must be equal to NDEBUG or DEBUG, CURLDEBUG
+ifndef DB
+DB = NDEBUG
+endif
+# Optimization: -O<n> or debugging: -g
+ifeq ($(DB),NDEBUG)
+ OPT = -O2
+ OBJDIR = release
+else
+ OPT = -g
+ OBJDIR = debug
+endif
+
+# The following lines defines your compiler.
+ifdef CWFolder
+ METROWERKS = $(CWFolder)
+endif
+ifdef METROWERKS
+ # MWCW_PATH = $(subst \,/,$(METROWERKS))/Novell Support
+ MWCW_PATH = $(subst \,/,$(METROWERKS))/Novell Support/Metrowerks Support
+ CC = mwccnlm
+else
+ CC = gcc
+endif
+PERL = perl
+# Here you can find a native Win32 binary of the original awk:
+# http://www.gknw.net/development/prgtools/awk-20070501.zip
+AWK = awk
+CP = cp -afv
+MKDIR = mkdir
+# RM = rm -f
+# If you want to mark the target as MTSAFE you will need a tool for
+# generating the xdc data for the linker; here's a minimal tool:
+# http://www.gknw.net/development/prgtools/mkxdc.zip
+MPKXDC = mkxdc
+
+# LIBARCH_U = $(shell $(AWK) 'BEGIN {print toupper(ARGV[1])}' $(LIBARCH))
+LIBARCH_L = $(shell $(AWK) 'BEGIN {print tolower(ARGV[1])}' $(LIBARCH))
+
+# Include the version info retrieved from curlver.h
+-include $(OBJDIR)/version.inc
+
+# Global flags for all compilers
+CFLAGS += $(OPT) -D$(DB) -DNETWARE -DHAVE_CONFIG_H -nostdinc
+
+ifeq ($(CC),mwccnlm)
+LD = mwldnlm
+LDFLAGS = -nostdlib $(PRELUDE) $(OBJL) -o $@ -commandfile
+AR = mwldnlm
+ARFLAGS = -nostdlib -type library -o
+LIBEXT = lib
+#RANLIB =
+CFLAGS += -msgstyle gcc -gccinc -inline off -opt nointrinsics -proc 586
+CFLAGS += -relax_pointers
+#CFLAGS += -w on
+ifeq ($(LIBARCH),LIBC)
+ifeq ($(POSIXFL),1)
+ PRELUDE = $(NDK_LIBC)/imports/posixpre.o
+else
+ PRELUDE = $(NDK_LIBC)/imports/libcpre.o
+endif
+ CFLAGS += -align 4
+else
+ # PRELUDE = $(NDK_CLIB)/imports/clibpre.o
+ # to avoid the __init_* / __deinit_* whoes dont use prelude from NDK
+ PRELUDE = "$(MWCW_PATH)/libraries/runtime/prelude.obj"
+ # CFLAGS += -include "$(MWCW_PATH)/headers/nlm_clib_prefix.h"
+ CFLAGS += -align 1
+endif
+else
+LD = nlmconv
+LDFLAGS = -T
+AR = ar
+ARFLAGS = -cq
+LIBEXT = a
+RANLIB = ranlib
+CFLAGS += -fno-builtin -fpcc-struct-return -fno-strict-aliasing
+CFLAGS += -Wall # -pedantic
+ifeq ($(LIBARCH),LIBC)
+ifeq ($(POSIXFL),1)
+ PRELUDE = $(NDK_LIBC)/imports/posixpre.gcc.o
+else
+ PRELUDE = $(NDK_LIBC)/imports/libcpre.gcc.o
+endif
+else
+ PRELUDE = $(NDK_CLIB)/imports/clibpre.gcc.o
+ # to avoid the __init_* / __deinit_* whoes dont use prelude from NDK
+ # http://www.gknw.net/development/mk_nlm/gcc_pre.zip
+ # PRELUDE = $(NDK_ROOT)/pre/prelude.o
+ CFLAGS += -include $(NDKBASE)/nlmconv/genlm.h
+endif
+endif
+
+NDK_ROOT = $(NDKBASE)/ndk
+ifndef NDK_CLIB
+NDK_CLIB = $(NDK_ROOT)/nwsdk
+endif
+ifndef NDK_LIBC
+NDK_LIBC = $(NDK_ROOT)/libc
+endif
+ifndef NDK_LDAP
+NDK_LDAP = $(NDK_ROOT)/cldapsdk/netware
+endif
+CURL_INC = ../include
+CURL_LIB = ../lib
+
+INCLUDES = -I$(CURL_INC) -I$(CURL_LIB)
+
+ifdef WITH_ARES
+ INCLUDES += -I$(LIBCARES_PATH)
+ LDLIBS += $(LIBCARES_PATH)/libcares.$(LIBEXT)
+endif
+ifdef WITH_SSH2
+ INCLUDES += -I$(LIBSSH2_PATH)/include
+ifdef LINK_STATIC
+ LDLIBS += $(LIBSSH2_PATH)/nw/libssh2.$(LIBEXT)
+else
+ MODULES += libssh2.nlm
+ IMPORTS += @$(LIBSSH2_PATH)/nw/libssh2.imp
+endif
+endif
+ifdef WITH_RTMP
+ INCLUDES += -I$(LIBRTMP_PATH)
+ LDLIBS += $(LIBRTMP_PATH)/librtmp/librtmp.$(LIBEXT)
+endif
+ifdef WITH_SSL
+ INCLUDES += -I$(OPENSSL_PATH)/outinc_nw_$(LIBARCH_L)
+ LDLIBS += $(OPENSSL_PATH)/out_nw_$(LIBARCH_L)/ssl.$(LIBEXT)
+ LDLIBS += $(OPENSSL_PATH)/out_nw_$(LIBARCH_L)/crypto.$(LIBEXT)
+ IMPORTS += GetProcessSwitchCount RunningProcess
+ INSTDEP += ca-bundle.crt
+endif
+ifdef WITH_ZLIB
+ INCLUDES += -I$(ZLIB_PATH)
+ifdef LINK_STATIC
+ LDLIBS += $(ZLIB_PATH)/nw/$(LIBARCH)/libz.$(LIBEXT)
+else
+ MODULES += libz.nlm
+ IMPORTS += @$(ZLIB_PATH)/nw/$(LIBARCH)/libz.imp
+endif
+endif
+ifdef WITH_IDN
+ INCLUDES += -I$(LIBIDN_PATH)/include
+ LDLIBS += $(LIBIDN_PATH)/lib/libidn.$(LIBEXT)
+endif
+
+ifeq ($(LIBARCH),LIBC)
+ INCLUDES += -I$(NDK_LIBC)/include
+ # INCLUDES += -I$(NDK_LIBC)/include/nks
+ # INCLUDES += -I$(NDK_LIBC)/include/winsock
+ CFLAGS += -D_POSIX_SOURCE
+else
+ INCLUDES += -I$(NDK_CLIB)/include/nlm
+ # INCLUDES += -I$(NDK_CLIB)/include/nlm/obsolete
+ # INCLUDES += -I$(NDK_CLIB)/include
+endif
+ifndef DISABLE_LDAP
+ INCLUDES += -I$(NDK_LDAP)/$(LIBARCH_L)/inc
+endif
+CFLAGS += $(INCLUDES)
+
+ifeq ($(MTSAFE),YES)
+ XDCOPT = -n
+endif
+ifeq ($(MTSAFE),NO)
+ XDCOPT = -u
+endif
+ifdef XDCOPT
+ XDCDATA = $(OBJDIR)/$(TARGET).xdc
+endif
+
+ifeq ($(findstring /sh,$(SHELL)),/sh)
+DL = '
+DS = /
+PCT = %
+#-include $(NDKBASE)/nlmconv/ncpfs.inc
+else
+DS = \\
+PCT = %%
+endif
+
+# Makefile.inc provides the CSOURCES and HHEADERS defines
+include Makefile.inc
+
+OBJS := $(patsubst %.c,$(OBJDIR)/%.o,$(strip $(CSOURCES))) $(OBJDIR)/nwos.o
+
+OBJL = $(OBJS) $(OBJDIR)/nwlib.o $(LDLIBS)
+
+all: lib nlm
+
+nlm: prebuild $(TARGET).nlm
+
+lib: prebuild $(TARGET).$(LIBEXT)
+
+prebuild: $(OBJDIR) $(CURL_INC)/curl/curlbuild.h $(OBJDIR)/version.inc curl_config.h
+
+$(OBJDIR)/%.o: %.c
+# @echo Compiling $<
+ $(CC) $(CFLAGS) -c $< -o $@
+
+$(OBJDIR)/version.inc: ../include/curl/curlver.h $(OBJDIR)
+ @echo Creating $@
+ @$(AWK) -f ../packages/NetWare/get_ver.awk $< > $@
+
+install: $(INSTDIR) all $(INSTDEP)
+ @$(CP) $(TARGET).nlm $(INSTDIR)
+ @$(CP) $(TARGET).$(LIBEXT) $(INSTDIR)
+ @$(CP) ../CHANGES $(INSTDIR)
+ @$(CP) ../COPYING $(INSTDIR)
+ @$(CP) ../README $(INSTDIR)
+ @$(CP) ../RELEASE-NOTES $(INSTDIR)
+ifdef WITH_SSL
+ @-$(CP) ca-bundle.crt $(INSTDIR)/ca-bundle.crt
+endif
+
+clean:
+ -$(RM) curl_config.h
+ -$(RM) -r $(OBJDIR)
+
+distclean vclean: clean
+ -$(RM) $(TARGET).$(LIBEXT) $(TARGET).nlm
+ -$(RM) certdata.txt ca-bundle.crt
+
+$(OBJDIR) $(INSTDIR):
+ @$(MKDIR) $@
+
+$(TARGET).$(LIBEXT): $(OBJS)
+ @echo Creating $@
+ @-$(RM) $@
+ @$(AR) $(ARFLAGS) $@ $^
+ifdef RANLIB
+ @$(RANLIB) $@
+endif
+
+$(TARGET).nlm: $(OBJDIR)/$(TARGET).def $(OBJL) $(XDCDATA)
+ @echo Linking $@
+ @-$(RM) $@
+ @$(LD) $(LDFLAGS) $<
+
+$(OBJDIR)/%.xdc: Makefile.netware
+ @echo Creating $@
+ @$(MPKXDC) $(XDCOPT) $@
+
+$(OBJDIR)/%.def: Makefile.netware
+ @echo $(DL)# DEF file for linking with $(LD)$(DL) > $@
+ @echo $(DL)# Do not edit this file - it is created by make!$(DL) >> $@
+ @echo $(DL)# All your changes will be lost!!$(DL) >> $@
+ @echo $(DL)#$(DL) >> $@
+ @echo $(DL)copyright "$(COPYR)"$(DL) >> $@
+ @echo $(DL)description "$(DESCR)"$(DL) >> $@
+ @echo $(DL)version $(VERSION)$(DL) >> $@
+ifdef NLMTYPE
+ @echo $(DL)type $(NLMTYPE)$(DL) >> $@
+endif
+ifdef STACK
+ @echo $(DL)stack $(STACK)$(DL) >> $@
+endif
+ifdef SCREEN
+ @echo $(DL)screenname "$(SCREEN)"$(DL) >> $@
+else
+ @echo $(DL)screenname "DEFAULT"$(DL) >> $@
+endif
+ifneq ($(DB),NDEBUG)
+ @echo $(DL)debug$(DL) >> $@
+endif
+ @echo $(DL)threadname "$(TARGET)"$(DL) >> $@
+ifdef XDCDATA
+ @echo $(DL)xdcdata $(XDCDATA)$(DL) >> $@
+endif
+ @echo $(DL)flag_on 64$(DL) >> $@
+ifeq ($(LIBARCH),CLIB)
+ @echo $(DL)start _Prelude$(DL) >> $@
+ @echo $(DL)exit _Stop$(DL) >> $@
+ @echo $(DL)import @$(NDK_CLIB)/imports/clib.imp$(DL) >> $@
+ @echo $(DL)import @$(NDK_CLIB)/imports/threads.imp$(DL) >> $@
+ @echo $(DL)import @$(NDK_CLIB)/imports/nlmlib.imp$(DL) >> $@
+ @echo $(DL)import @$(NDK_CLIB)/imports/socklib.imp$(DL) >> $@
+ @echo $(DL)module clib$(DL) >> $@
+ifndef DISABLE_LDAP
+ @echo $(DL)import @$(NDK_LDAP)/clib/imports/ldapsdk.imp$(DL) >> $@
+ @echo $(DL)import @$(NDK_LDAP)/clib/imports/ldapssl.imp$(DL) >> $@
+# @echo $(DL)import @$(NDK_LDAP)/clib/imports/ldapx.imp$(DL) >> $@
+ @echo $(DL)module ldapsdk ldapssl$(DL) >> $@
+endif
+else
+ifeq ($(POSIXFL),1)
+ @echo $(DL)flag_on 4194304$(DL) >> $@
+endif
+ @echo $(DL)pseudopreemption$(DL) >> $@
+ifeq ($(findstring posixpre,$(PRELUDE)),posixpre)
+ @echo $(DL)start POSIX_Start$(DL) >> $@
+ @echo $(DL)exit POSIX_Stop$(DL) >> $@
+ @echo $(DL)check POSIX_CheckUnload$(DL) >> $@
+else
+ @echo $(DL)start _LibCPrelude$(DL) >> $@
+ @echo $(DL)exit _LibCPostlude$(DL) >> $@
+ @echo $(DL)check _LibCCheckUnload$(DL) >> $@
+endif
+ @echo $(DL)import @$(NDK_LIBC)/imports/libc.imp$(DL) >> $@
+ @echo $(DL)import @$(NDK_LIBC)/imports/netware.imp$(DL) >> $@
+ @echo $(DL)module libc$(DL) >> $@
+ifndef DISABLE_LDAP
+ @echo $(DL)import @$(NDK_LDAP)/libc/imports/lldapsdk.imp$(DL) >> $@
+ @echo $(DL)import @$(NDK_LDAP)/libc/imports/lldapssl.imp$(DL) >> $@
+# @echo $(DL)import @$(NDK_LDAP)/libc/imports/lldapx.imp$(DL) >> $@
+ @echo $(DL)module lldapsdk lldapssl$(DL) >> $@
+endif
+endif
+ifdef MODULES
+ @echo $(DL)module $(MODULES)$(DL) >> $@
+endif
+ifdef EXPORTS
+ @echo $(DL)export $(EXPORTS)$(DL) >> $@
+endif
+ifdef IMPORTS
+ @echo $(DL)import $(IMPORTS)$(DL) >> $@
+endif
+ifeq ($(findstring nlmconv,$(LD)),nlmconv)
+ @echo $(DL)input $(PRELUDE)$(DL) >> $@
+ @echo $(DL)input $(OBJL)$(DL) >> $@
+#ifdef LDLIBS
+# @echo $(DL)input $(LDLIBS)$(DL) >> $@
+#endif
+ @echo $(DL)output $(TARGET).nlm$(DL) >> $@
+endif
+
+curl_config.h: Makefile.netware
+ @echo Creating $@
+ @echo $(DL)/* $@ for NetWare target.$(DL) > $@
+ @echo $(DL)** Do not edit this file - it is created by make!$(DL) >> $@
+ @echo $(DL)** All your changes will be lost!!$(DL) >> $@
+ @echo $(DL)*/$(DL) >> $@
+ @echo $(DL)#ifndef NETWARE$(DL) >> $@
+ @echo $(DL)#error This $(notdir $@) is created for NetWare platform!$(DL) >> $@
+ @echo $(DL)#endif$(DL) >> $@
+ @echo $(DL)#define VERSION "$(LIBCURL_VERSION_STR)"$(DL) >> $@
+ @echo $(DL)#define PACKAGE_BUGREPORT "a suitable curl mailing list => http://curl.haxx.se/mail/"$(DL) >> $@
+ifeq ($(LIBARCH),CLIB)
+ @echo $(DL)#define OS "i586-pc-clib-NetWare"$(DL) >> $@
+ @echo $(DL)#define NETDB_USE_INTERNET 1$(DL) >> $@
+ @echo $(DL)#define HAVE_STRICMP 1$(DL) >> $@
+ @echo $(DL)#define HAVE_STRNICMP 1$(DL) >> $@
+ @echo $(DL)#define RECV_TYPE_ARG1 int$(DL) >> $@
+ @echo $(DL)#define RECV_TYPE_ARG2 char *$(DL) >> $@
+ @echo $(DL)#define RECV_TYPE_ARG3 int$(DL) >> $@
+ @echo $(DL)#define RECV_TYPE_ARG4 int$(DL) >> $@
+ @echo $(DL)#define RECV_TYPE_RETV int$(DL) >> $@
+ @echo $(DL)#define RECVFROM_TYPE_ARG1 int$(DL) >> $@
+ @echo $(DL)#define RECVFROM_TYPE_ARG2 char$(DL) >> $@
+ @echo $(DL)#define RECVFROM_TYPE_ARG3 int$(DL) >> $@
+ @echo $(DL)#define RECVFROM_TYPE_ARG4 int$(DL) >> $@
+ @echo $(DL)#define RECVFROM_TYPE_ARG5 struct sockaddr$(DL) >> $@
+ @echo $(DL)#define RECVFROM_TYPE_ARG6 int$(DL) >> $@
+ @echo $(DL)#define RECVFROM_TYPE_RETV int$(DL) >> $@
+ @echo $(DL)#define SEND_QUAL_ARG2$(DL) >> $@
+ @echo $(DL)#define SEND_TYPE_ARG1 int$(DL) >> $@
+ @echo $(DL)#define SEND_TYPE_ARG2 char *$(DL) >> $@
+ @echo $(DL)#define SEND_TYPE_ARG3 int$(DL) >> $@
+ @echo $(DL)#define SEND_TYPE_ARG4 int$(DL) >> $@
+ @echo $(DL)#define SEND_TYPE_RETV int$(DL) >> $@
+ @echo $(DL)#define pressanykey PressAnyKeyToContinue$(DL) >> $@
+else
+ @echo $(DL)#define OS "i586-pc-libc-NetWare"$(DL) >> $@
+ @echo $(DL)#define HAVE_FTRUNCATE 1$(DL) >> $@
+ @echo $(DL)#define HAVE_GETTIMEOFDAY 1$(DL) >> $@
+ @echo $(DL)#define HAVE_INTTYPES_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_LONGLONG 1$(DL) >> $@
+ @echo $(DL)#define HAVE_STDINT_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_STRCASECMP 1$(DL) >> $@
+ @echo $(DL)#define HAVE_STRLCAT 1$(DL) >> $@
+ @echo $(DL)#define HAVE_STRLCPY 1$(DL) >> $@
+ @echo $(DL)#define HAVE_STRTOLL 1$(DL) >> $@
+ @echo $(DL)#define HAVE_SYS_PARAM_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_SYS_SELECT_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_TERMIOS_H 1$(DL) >> $@
+ @echo $(DL)#define RECV_TYPE_ARG1 int$(DL) >> $@
+ @echo $(DL)#define RECV_TYPE_ARG2 void *$(DL) >> $@
+ @echo $(DL)#define RECV_TYPE_ARG3 size_t$(DL) >> $@
+ @echo $(DL)#define RECV_TYPE_ARG4 int$(DL) >> $@
+ @echo $(DL)#define RECV_TYPE_RETV ssize_t$(DL) >> $@
+ @echo $(DL)#define RECVFROM_TYPE_ARG1 int$(DL) >> $@
+ @echo $(DL)#define RECVFROM_TYPE_ARG2 void$(DL) >> $@
+ @echo $(DL)#define RECVFROM_TYPE_ARG3 size_t$(DL) >> $@
+ @echo $(DL)#define RECVFROM_TYPE_ARG4 int$(DL) >> $@
+ @echo $(DL)#define RECVFROM_TYPE_ARG5 struct sockaddr$(DL) >> $@
+ @echo $(DL)#define RECVFROM_TYPE_ARG6 size_t$(DL) >> $@
+ @echo $(DL)#define RECVFROM_TYPE_RETV ssize_t$(DL) >> $@
+ @echo $(DL)#define RECVFROM_TYPE_ARG2_IS_VOID 1$(DL) >> $@
+ @echo $(DL)#define SEND_QUAL_ARG2$(DL) >> $@
+ @echo $(DL)#define SEND_TYPE_ARG1 int$(DL) >> $@
+ @echo $(DL)#define SEND_TYPE_ARG2 void *$(DL) >> $@
+ @echo $(DL)#define SEND_TYPE_ARG3 size_t$(DL) >> $@
+ @echo $(DL)#define SEND_TYPE_ARG4 int$(DL) >> $@
+ @echo $(DL)#define SEND_TYPE_RETV ssize_t$(DL) >> $@
+ @echo $(DL)#define SIZEOF_OFF_T 8$(DL) >> $@
+ @echo $(DL)#define _LARGEFILE 1$(DL) >> $@
+ifdef ENABLE_IPV6
+ @echo $(DL)#define ENABLE_IPV6 1$(DL) >> $@
+ @echo $(DL)#define HAVE_AF_INET6 1$(DL) >> $@
+ @echo $(DL)#define HAVE_PF_INET6 1$(DL) >> $@
+ @echo $(DL)#define HAVE_FREEADDRINFO 1$(DL) >> $@
+ @echo $(DL)#define HAVE_GETADDRINFO 1$(DL) >> $@
+ @echo $(DL)#define HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID 1$(DL) >> $@
+ @echo $(DL)#define HAVE_STRUCT_ADDRINFO 1$(DL) >> $@
+ @echo $(DL)#define HAVE_STRUCT_IN6_ADDR 1$(DL) >> $@
+ @echo $(DL)#define HAVE_STRUCT_SOCKADDR_IN6 1$(DL) >> $@
+ @echo $(DL)#define SIZEOF_STRUCT_IN6_ADDR 16$(DL) >> $@
+endif
+endif
+ @echo $(DL)#define USE_MANUAL 1$(DL) >> $@
+ @echo $(DL)#define HAVE_ARPA_INET_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_ASSERT_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_ERR_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_FCNTL_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_GETHOSTBYADDR 1$(DL) >> $@
+ @echo $(DL)#define HAVE_GETHOSTBYNAME 1$(DL) >> $@
+ @echo $(DL)#define HAVE_GETPROTOBYNAME 1$(DL) >> $@
+ @echo $(DL)#define HAVE_GMTIME_R 1$(DL) >> $@
+ @echo $(DL)#define HAVE_INET_ADDR 1$(DL) >> $@
+ @echo $(DL)#define HAVE_IOCTL 1$(DL) >> $@
+ @echo $(DL)#define HAVE_IOCTL_FIONBIO 1$(DL) >> $@
+ @echo $(DL)#define HAVE_LIMITS_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_LL 1$(DL) >> $@
+ @echo $(DL)#define HAVE_LOCALE_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_LOCALTIME_R 1$(DL) >> $@
+ @echo $(DL)#define HAVE_MALLOC_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_NETINET_IN_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_RECV 1$(DL) >> $@
+ @echo $(DL)#define HAVE_RECVFROM 1$(DL) >> $@
+ @echo $(DL)#define HAVE_SELECT 1$(DL) >> $@
+ @echo $(DL)#define HAVE_SEND 1$(DL) >> $@
+ @echo $(DL)#define HAVE_SETJMP_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_SETLOCALE 1$(DL) >> $@
+ @echo $(DL)#define HAVE_SIGNAL 1$(DL) >> $@
+ @echo $(DL)#define HAVE_SIGNAL_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_SIG_ATOMIC_T 1$(DL) >> $@
+ @echo $(DL)#define HAVE_SOCKET 1$(DL) >> $@
+ @echo $(DL)#define HAVE_STDLIB_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_STRDUP 1$(DL) >> $@
+ @echo $(DL)#define HAVE_STRFTIME 1$(DL) >> $@
+ @echo $(DL)#define HAVE_STRING_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_STRSTR 1$(DL) >> $@
+ @echo $(DL)#define HAVE_STRUCT_TIMEVAL 1$(DL) >> $@
+ @echo $(DL)#define HAVE_SYS_IOCTL_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_SYS_STAT_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_SYS_TIME_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_TIME_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_UNAME 1$(DL) >> $@
+ @echo $(DL)#define HAVE_UNISTD_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_UTIME 1$(DL) >> $@
+ @echo $(DL)#define HAVE_UTIME_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_WRITEV 1$(DL) >> $@
+ @echo $(DL)#define RETSIGTYPE void$(DL) >> $@
+ @echo $(DL)#define SIZEOF_INT 4$(DL) >> $@
+ @echo $(DL)#define SIZEOF_SHORT 2$(DL) >> $@
+ @echo $(DL)#define SIZEOF_STRUCT_IN_ADDR 4$(DL) >> $@
+ @echo $(DL)#define STDC_HEADERS 1$(DL) >> $@
+ @echo $(DL)#define TIME_WITH_SYS_TIME 1$(DL) >> $@
+ifdef DISABLE_LDAP
+ @echo $(DL)#define CURL_DISABLE_LDAP 1$(DL) >> $@
+else
+ @echo $(DL)#define CURL_HAS_NOVELL_LDAPSDK 1$(DL) >> $@
+ifndef DISABLE_LDAPS
+ @echo $(DL)#define HAVE_LDAP_SSL 1$(DL) >> $@
+endif
+ @echo $(DL)#define HAVE_LDAP_SSL_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_LDAP_URL_PARSE 1$(DL) >> $@
+endif
+ifdef NW_WINSOCK
+ @echo $(DL)#define HAVE_CLOSESOCKET 1$(DL) >> $@
+else
+ @echo $(DL)#define USE_BSD_SOCKETS 1$(DL) >> $@
+ @echo $(DL)#define HAVE_SYS_TYPES_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_SYS_SOCKET_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_SYS_SOCKIO_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_NETDB_H 1$(DL) >> $@
+endif
+ifdef WITH_ARES
+ @echo $(DL)#define USE_ARES 1$(DL) >> $@
+endif
+ifdef WITH_ZLIB
+ @echo $(DL)#define HAVE_ZLIB_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_LIBZ 1$(DL) >> $@
+endif
+ifdef WITH_SSL
+ @echo $(DL)#define USE_SSLEAY 1$(DL) >> $@
+ @echo $(DL)#define USE_OPENSSL 1$(DL) >> $@
+ @echo $(DL)#define HAVE_OPENSSL_X509_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_OPENSSL_SSL_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_OPENSSL_RSA_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_OPENSSL_PEM_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_OPENSSL_ERR_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_OPENSSL_CRYPTO_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_OPENSSL_ENGINE_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_LIBSSL 1$(DL) >> $@
+ @echo $(DL)#define HAVE_LIBCRYPTO 1$(DL) >> $@
+ @echo $(DL)#define OPENSSL_NO_KRB5 1$(DL) >> $@
+endif
+ifdef WITH_SSH2
+ @echo $(DL)#define USE_LIBSSH2 1$(DL) >> $@
+ @echo $(DL)#define HAVE_LIBSSH2_H 1$(DL) >> $@
+endif
+ifdef WITH_IDN
+ @echo $(DL)#define HAVE_LIBIDN 1$(DL) >> $@
+ @echo $(DL)#define HAVE_TLD_H 1$(DL) >> $@
+endif
+ifdef WITH_RTMP
+ @echo $(DL)#define USE_LIBRTMP 1$(DL) >> $@
+endif
+ @echo $(DL)#ifdef __GNUC__$(DL) >> $@
+ @echo $(DL)#define HAVE_VARIADIC_MACROS_GCC 1$(DL) >> $@
+ @echo $(DL)#else$(DL) >> $@
+ @echo $(DL)#define HAVE_VARIADIC_MACROS_C99 1$(DL) >> $@
+ @echo $(DL)#endif$(DL) >> $@
+ifdef CABUNDLE
+ @echo $(DL)#define CURL_CA_BUNDLE "$(CABUNDLE)"$(DL) >> $@
+else
+ @echo $(DL)#define CURL_CA_BUNDLE getenv("CURL_CA_BUNDLE")$(DL) >> $@
+endif
+
+FORCE: ;
+
+info: $(OBJDIR)/version.inc
+ @echo Configured to build $(TARGET) with these options:
+ @echo libarchitecture: $(LIBARCH)
+ @echo curl version: $(LIBCURL_VERSION_STR)
+ @echo compiler/linker: $(CC) / $(LD)
+ifdef CABUNDLE
+ @echo ca-bundle path: $(CABUNDLE)
+endif
+ifdef WITH_SSL
+ @echo SSL support: enabled (OpenSSL)
+else
+ @echo SSL support: no
+endif
+ifdef WITH_SSH2
+ @echo SSH2 support: enabled (libssh2)
+else
+ @echo SSH2 support: no
+endif
+ifdef WITH_ZLIB
+ @echo zlib support: enabled
+else
+ @echo zlib support: no
+endif
+ifdef WITH_ARES
+ @echo c-ares support: enabled
+else
+ @echo c-ares support: no
+endif
+ifdef ENABLE_IPV6
+ @echo ipv6 support: enabled
+else
+ @echo ipv6 support: no
+endif
+
+$(LIBCARES_PATH)/libcares.$(LIBEXT):
+ $(MAKE) -C $(LIBCARES_PATH) -f Makefile.netware lib
+
+ca-bundle.crt: mk-ca-bundle.pl
+ @echo Creating $@
+ @-$(PERL) $< -b -n $@
+
+$(CURL_INC)/curl/curlbuild.h: Makefile.netware FORCE
+ @echo Creating $@
+ @echo $(DL)/* $@ intended for NetWare target.$(DL) > $@
+ @echo $(DL)** Do not edit this file - it is created by make!$(DL) >> $@
+ @echo $(DL)** All your changes will be lost!!$(DL) >> $@
+ @echo $(DL)*/$(DL) >> $@
+ @echo $(DL)#ifndef NETWARE$(DL) >> $@
+ @echo $(DL)#error This $(notdir $@) is created for NetWare platform!$(DL) >> $@
+ @echo $(DL)#endif$(DL) >> $@
+ @echo $(DL)#ifndef __CURL_CURLBUILD_H$(DL) >> $@
+ @echo $(DL)#define __CURL_CURLBUILD_H$(DL) >> $@
+ifeq ($(LIBARCH),LIBC)
+ @echo $(DL)#define CURL_SIZEOF_LONG 4$(DL) >> $@
+ @echo $(DL)#define CURL_TYPEOF_CURL_SOCKLEN_T unsigned int$(DL) >> $@
+ @echo $(DL)#define CURL_SIZEOF_CURL_SOCKLEN_T 4$(DL) >> $@
+ @echo $(DL)#define CURL_TYPEOF_CURL_OFF_T long long$(DL) >> $@
+ @echo $(DL)#define CURL_FORMAT_CURL_OFF_T "lld"$(DL) >> $@
+ @echo $(DL)#define CURL_FORMAT_CURL_OFF_TU "llu"$(DL) >> $@
+ @echo $(DL)#define CURL_FORMAT_OFF_T "$(PCT)lld"$(DL) >> $@
+ @echo $(DL)#define CURL_SIZEOF_CURL_OFF_T 8$(DL) >> $@
+ @echo $(DL)#define CURL_SUFFIX_CURL_OFF_T LL$(DL) >> $@
+ @echo $(DL)#define CURL_SUFFIX_CURL_OFF_TU ULL$(DL) >> $@
+else
+ @echo $(DL)#define CURL_SIZEOF_LONG 4$(DL) >> $@
+ @echo $(DL)#define CURL_TYPEOF_CURL_SOCKLEN_T int$(DL) >> $@
+ @echo $(DL)#define CURL_SIZEOF_CURL_SOCKLEN_T 4$(DL) >> $@
+ @echo $(DL)#define CURL_TYPEOF_CURL_OFF_T long$(DL) >> $@
+ @echo $(DL)#define CURL_FORMAT_CURL_OFF_T "ld"$(DL) >> $@
+ @echo $(DL)#define CURL_FORMAT_CURL_OFF_TU "lu"$(DL) >> $@
+ @echo $(DL)#define CURL_FORMAT_OFF_T "$(PCT)ld"$(DL) >> $@
+ @echo $(DL)#define CURL_SIZEOF_CURL_OFF_T 4$(DL) >> $@
+ @echo $(DL)#define CURL_SUFFIX_CURL_OFF_T L$(DL) >> $@
+ @echo $(DL)#define CURL_SUFFIX_CURL_OFF_TU UL$(DL) >> $@
+endif
+ @echo $(DL)typedef CURL_TYPEOF_CURL_SOCKLEN_T curl_socklen_t;$(DL) >> $@
+ @echo $(DL)typedef CURL_TYPEOF_CURL_OFF_T curl_off_t;$(DL) >> $@
+ @echo $(DL)#endif /* __CURL_CURLBUILD_H */$(DL) >> $@
+
diff --git a/lib/Makefile.riscos b/lib/Makefile.riscos
new file mode 100644
index 0000000..8c91987
--- /dev/null
+++ b/lib/Makefile.riscos
@@ -0,0 +1,232 @@
+# Makefile for project libcurl
+
+# Project objects:
+objs = o.base64 o.connect o.cookie o.dict \
+ o.dllinit o.easy o.escape o.file \
+ o.formdata o.ftp o.getenv o.gopher \
+ o.getinfo o.getpass o.hostip \
+ o.hostip4 o.hostsyn o.http \
+ o.http_chunks o.inet_ntop o.inet_pton o.if2ip o.krb4 o.ldap \
+ o.curl_fnmatch o.fileinfo o.ftplistparser o.wildcard \
+ o.memdebug o.mprintf o.netrc o.parsedate o.progress \
+ o.security o.select o.sendf o.speedcheck o.ssluse \
+ o.strequal o.strtok o.telnet o.timeval \
+ o.transfer o.url o.version o.strtoofft o.sslgen o.gtls \
+ o.rawstr o.curl_addrinfo o.slist o.nonblock o.curl_rand \
+ o.curl_memrchr o.imap o.pop3 o.smtp o.pingpong o.rtsp \
+ o.curl_threads o.warnless o.hmac o.md5 o.curl_rtmp \
+ o.openldap o.polarssl o.md4 o.curl_gethostname
+
+
+# Compile options:
+linkopts = -o libcurl
+compileropts = -mpoke-function-name -IUtilLib: -mthrowback
+
+# Project target:
+libcurl: $(objs)
+ makealf $(linkopts) $(objs)
+
+# Static dependancies:
+o.base64: c.base64
+ gcc $(compileropts) -c -o base64.o c.base64
+
+o.connect: c.connect
+ gcc $(compileropts) -c -o connect.o c.connect
+
+o.cookie: c.cookie
+ gcc $(compileropts) -c -o cookie.o c.cookie
+
+o.curl_addrinfo: c.curl_addrinfo
+ gcc $(compileropts) -c -o curl_addrinfo.o c.curl_addrinfo
+
+o.curl_gethostname: c.curl_gethostname
+ gcc $(compileropts) -c -o curl_gethostname.o c.curl_gethostname
+
+o.curl_memrchr: c.curl_memrchr
+ gcc $(compileropts) -c -o curl_memrchr.o c.curl_memrchr
+
+o.curl_rand: c.curl_rand
+ gcc $(compileropts) -c -o curl_rand.o c.curl_rand
+
+o.curl_rtmp: c.curl_rtmp
+ gcc $(compileropts) -c -o curl_rtmp.o c.curl_rtmp
+
+o.curl_threads: c.curl_threads
+ gcc $(compileropts) -c -o curl_threads.o c.curl_threads
+
+o.dict: c.dict
+ gcc $(compileropts) -c -o dict.o c.dict
+
+o.dllinit: c.dllinit
+ gcc $(compileropts) -c -o dllinit.o c.dllinit
+
+o.easy: c.easy
+ gcc $(compileropts) -c -o easy.o c.easy
+
+o.escape: c.escape
+ gcc $(compileropts) -c -o escape.o c.escape
+
+o.file: c.file
+ gcc $(compileropts) -c -o file.o c.file
+
+o.formdata: c.formdata
+ gcc $(compileropts) -c -o formdata.o c.formdata
+
+o.ftp: c.ftp
+ gcc $(compileropts) -c -o ftp.o c.ftp
+
+o.getenv: c.getenv
+ gcc $(compileropts) -c -o getenv.o c.getenv
+
+o.getinfo: c.getinfo
+ gcc $(compileropts) -c -o getinfo.o c.getinfo
+
+o.getpass: c.getpass
+ gcc $(compileropts) -c -o getpass.o c.getpass
+
+o.gopher: c.gopher
+ gcc $(compileropts) -c -o gopher.o c.gopher
+
+o.hmac: c.hmac
+ gcc $(compileropts) -c -o hmac.o c.hmac
+
+o.hostip: c.hostip
+ gcc $(compileropts) -c -o hostip.o c.hostip
+
+o.hostip4: c.hostip4
+ gcc $(compileropts) -c -o hostip4.o c.hostip4
+
+o.hostsyn: c.hostsyn
+ gcc $(compileropts) -c -o hostsyn.o c.hostsyn
+
+o.http: c.http
+ gcc $(compileropts) -c -o http.o c.http
+
+o.http_chunks: c.http_chunks
+ gcc $(compileropts) -c -o http_chunks.o c.http_chunks
+
+o.if2ip: c.if2ip
+ gcc $(compileropts) -c -o if2ip.o c.if2ip
+
+o.imap: c.imap
+ gcc $(compileropts) -c -o imap.o c.imap
+
+o.inet_ntop: c.inet_ntop
+ gcc $(compileropts) -c -o inet_ntop.o c.inet_ntop
+
+o.inet_pton: c.inet_pton
+ gcc $(compileropts) -c -o inet_pton.o c.inet_pton
+
+o.krb4: c.krb4
+ gcc $(compileropts) -c -o krb4.o c.krb4
+
+o.ldap: c.ldap
+ gcc $(compileropts) -IOpenLDAP: -c -o ldap.o c.ldap
+
+o.md4: c.md4
+ gcc $(compileropts) -c -o md4.o c.md4
+
+o.md5: c.md5
+ gcc $(compileropts) -c -o md5.o c.md5
+
+o.memdebug: c.memdebug
+ gcc $(compileropts) -c -o memdebug.o c.memdebug
+
+o.mprintf: c.mprintf
+ gcc $(compileropts) -c -o mprintf.o c.mprintf
+
+o.netrc: c.netrc
+ gcc $(compileropts) -c -o netrc.o c.netrc
+
+o.openldap: c.openldap
+ gcc $(compileropts) -c -o openldap.o c.openldap
+
+o.parsedate: c.parsedate
+ gcc $(compileropts) -c -o parsedate.o c.parsedate
+
+o.pingpong: c.pingpong
+ gcc $(compileropts) -c -o pingpong.o c.pingpong
+
+o.polarssl: c.polarssl
+ gcc $(compileropts) -c -o polarssl.o c.polarssl
+
+o.pop3: c.pop3
+ gcc $(compileropts) -c -o pop3.o c.pop3
+
+o.progress: c.progress
+ gcc $(compileropts) -c -o progress.o c.progress
+
+o.rtsp: c.rtsp
+ gcc $(compileropts) -c -o rtsp.o c.rtsp
+
+o.security: c.security
+ gcc $(compileropts) -c -o security.o c.security
+
+o.select: c.select
+ gcc $(compileropts) -c -o select.o c.select
+
+o.sendf: c.sendf
+ gcc $(compileropts) -c -o sendf.o c.sendf
+
+o.slist: c.slist
+ gcc $(compileropts) -c -o slist.o c.slist
+
+o.smtp: c.smtp
+ gcc $(compileropts) -c -o smtp.o c.smtp
+
+o.speedcheck: c.speedcheck
+ gcc $(compileropts) -c -o speedcheck.o c.speedcheck
+
+o.gtls: c.gtls
+ gcc $(compileropts) -c -o gtls.o c.gtls
+
+o.sslgen: c.sslgen
+ gcc $(compileropts) -c -o sslgen.o c.sslgen
+
+o.ssluse: c.ssluse
+ gcc $(compileropts) -c -o ssluse.o c.ssluse
+
+o.nonblock: c.nonblock
+ gcc $(compileropts) -c -o nonblock.o c.nonblock
+
+o.rawstr: c.rawstr
+ gcc $(compileropts) -c -o rawstr.o c.rawstr
+
+o.strequal: c.strequal
+ gcc $(compileropts) -c -o strequal.o c.strequal
+
+o.strtok: c.strtok
+ gcc $(compileropts) -c -o strtok.o c.strtok
+
+o.strtoofft: c.strtoofft
+ gcc $(compileropts) -c -o strtoofft.o c.strtoofft
+
+o.telnet: c.telnet
+ gcc $(compileropts) -c -o telnet.o c.telnet
+
+o.timeval: c.timeval
+ gcc $(compileropts) -c -o timeval.o c.timeval
+
+o.transfer: c.transfer
+ gcc $(compileropts) -c -o transfer.o c.transfer
+
+o.url: c.url
+ gcc $(compileropts) -c -o url.o c.url
+
+o.version: c.version
+ gcc $(compileropts) -c -o version.o c.version
+
+o.warnless: c.warnless
+ gcc $(compileropts) -c -o warnless.o c.warnless
+
+o.curl_fnmatch: c.curl_fnmatch
+ gcc $(compileropts) -c -o curl_fnmatch.o c.curl_fnmatch
+
+o.fileinfo: c.fileinfo
+ gcc $(compileropts) -c -o fileinfo.o c.fileinfo
+
+o.ftplistparser: c.ftplistparser
+ gcc $(compileropts) -c -o ftplistparser.o c.ftplistparser
+
+o.wildcard: c.wildcard
+ gcc $(compileropts) -c -o wildcard.o c.wildcard
diff --git a/lib/Makefile.vc10 b/lib/Makefile.vc10
new file mode 100644
index 0000000..9600527
--- /dev/null
+++ b/lib/Makefile.vc10
@@ -0,0 +1,571 @@
+#***************************************************************************
+# _ _ ____ _
+# Project ___| | | | _ \| |
+# / __| | | | |_) | |
+# | (__| |_| | _ <| |___
+# \___|\___/|_| \_\_____|
+#
+# Copyright (C) 1999 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+#
+# This software is licensed as described in the file COPYING, which
+# you should have received as part of this distribution. The terms
+# are also available at http://curl.haxx.se/docs/copyright.html.
+#
+# You may opt to use, copy, modify, merge, publish, distribute and/or sell
+# copies of the Software, and permit persons to whom the Software is
+# furnished to do so, under the terms of the COPYING file.
+#
+# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+# KIND, either express or implied.
+#
+###########################################################################
+#
+# Makefile for building libcurl with MSVC10
+#
+# Usage: see usage message below
+# Should be invoked from \lib directory
+# Edit the paths and desired library name
+# SSL path is only required if you intend compiling
+# with SSL.
+#
+# This make file leaves the result either a .lib or .dll file
+# in the \lib directory. It should be called from the \lib
+# directory.
+#
+# An option would have been to allow the source directory to
+# be specified, but I saw no requirement.
+#
+# Another option would have been to leave the .lib and .dll
+# files in the "cfg" directory, but then the make file
+# in \src would need to be changed.
+#
+##############################################################
+
+#
+# Stem for static libs and DLLs
+#
+LIB_NAME = libcurl
+LIB_NAME_DEBUG = libcurld
+
+#
+# Stem for DLL import libs
+#
+IMPLIB_NAME = libcurl_imp
+IMPLIB_NAME_DEBUG = libcurld_imp
+
+!IFNDEF OPENSSL_PATH
+OPENSSL_PATH = ../../openssl-0.9.8o
+!ENDIF
+
+!IFNDEF ZLIB_PATH
+ZLIB_PATH = ../../zlib-1.2.5
+!ENDIF
+
+!IFNDEF MACHINE
+MACHINE = X86
+!ENDIF
+
+# USE_WINDOWS_SSPI uses windows libraries to allow NTLM authentication
+# without an openssl installation and offers the ability to authenticate
+# using the "current logged in user". Since at least with MSVC10 the sspi.h
+# header is broken it is either required to install the Windows SDK,
+# or to fix sspi.h with adding this define at the beginning of sspi.h:
+# #define FreeCredentialHandle FreeCredentialsHandle
+#
+# If, for some reason the Windows SDK is installed but not installed
+# in the default location, you can specify WINDOWS_SDK_PATH.
+# It can be downloaded from:
+# http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
+
+# WINDOWS_SSPI = 1
+
+!IFDEF WINDOWS_SSPI
+!IFNDEF WINDOWS_SDK_PATH
+WINDOWS_SDK_PATH = "C:\Program Files\Microsoft SDK"
+!ENDIF
+!ENDIF
+
+#############################################################
+## Nothing more to do below this line!
+
+CCNODBG = cl.exe /O2 /DNDEBUG
+CCDEBUG = cl.exe /Od /Gm /Zi /D_DEBUG /RTC1
+CFLAGSSSL = /DUSE_SSLEAY /I "$(OPENSSL_PATH)/inc32" /I "$(OPENSSL_PATH)/inc32/openssl"
+CFLAGSZLIB = /DHAVE_ZLIB_H /DHAVE_ZLIB /DHAVE_LIBZ /I "$(ZLIB_PATH)"
+CFLAGS = /I. /I../include /nologo /W3 /EHsc /DWIN32 /FD /c /DBUILDING_LIBCURL
+CFLAGSLIB = /DCURL_STATICLIB
+LNKDLL = link.exe /DLL
+LNKLIB = link.exe /lib
+LFLAGS = /nologo /machine:$(MACHINE)
+SSLLIBS = libeay32.lib ssleay32.lib
+ZLIBLIBSDLL= zdll.lib
+ZLIBLIBS = zlib.lib
+WINLIBS = ws2_32.lib wldap32.lib
+CFLAGS = $(CFLAGS)
+
+CFGSET = FALSE
+
+!IFDEF WINDOWS_SSPI
+CFLAGS = $(CFLAGS) /DUSE_WINDOWS_SSPI /I$(WINDOWS_SDK_PATH)\include
+!ENDIF
+
+!IFDEF USE_IPV6
+CFLAGS = $(CFLAGS) /DUSE_IPV6
+!ENDIF
+
+##############################################################
+# Runtime library configuration
+
+RTLIB = /MD
+RTLIBD = /MDd
+
+!IF "$(RTLIBCFG)" == "static"
+RTLIB = /MT
+RTLIBD = /MTd
+!ENDIF
+
+
+######################
+# release
+
+!IF "$(CFG)" == "release"
+TARGET = $(LIB_NAME).lib
+DIROBJ = $(CFG)
+LNK = $(LNKLIB) /out:$(DIROBJ)\$(TARGET)
+CC = $(CCNODBG) $(RTLIB) $(CFLAGSLIB)
+CFGSET = TRUE
+!ENDIF
+
+######################
+# release-zlib
+
+!IF "$(CFG)" == "release-zlib"
+TARGET = $(LIB_NAME).lib
+DIROBJ = $(CFG)
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"
+LNK = $(LNKLIB) $(ZLIBLIBS) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)
+CC = $(CCNODBG) $(RTLIB) $(CFLAGSZLIB) $(CFLAGSLIB)
+CFGSET = TRUE
+!ENDIF
+
+######################
+# release-dll
+
+!IF "$(CFG)" == "release-dll"
+TARGET = $(LIB_NAME).dll
+DIROBJ = $(CFG)
+LNK = $(LNKDLL) $(WINLIBS) /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(IMPLIB_NAME).lib
+CC = $(CCNODBG) $(RTLIB)
+CFGSET = TRUE
+RESOURCE = $(DIROBJ)\libcurl.res
+!ENDIF
+
+######################
+# release-ssl
+
+!IF "$(CFG)" == "release-ssl"
+TARGET = $(LIB_NAME).lib
+DIROBJ = $(CFG)
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32"
+LNK = $(LNKLIB) $(LFLAGSSSL) /out:$(DIROBJ)\$(TARGET)
+CC = $(CCNODBG) $(RTLIB) $(CFLAGSSSL) $(CFLAGSLIB)
+CFGSET = TRUE
+!ENDIF
+
+######################
+# release-ssl-dll
+
+!IF "$(CFG)" == "release-ssl-dll"
+TARGET = $(LIB_NAME).lib
+DIROBJ = $(CFG)
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll"
+LNK = $(LNKLIB) $(WINLIBS) $(SSLLIBS) $(LFLAGSSSL) /out:$(DIROBJ)\$(TARGET)
+CC = $(CCNODBG) $(RTLIB) $(CFLAGSSSL) $(CFLAGSLIB)
+CFGSET = TRUE
+!ENDIF
+
+######################
+# release-ssl-zlib
+
+!IF "$(CFG)" == "release-ssl-zlib"
+TARGET = $(LIB_NAME).lib
+DIROBJ = $(CFG)
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32"
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"
+LNK = $(LNKLIB) $(LFLAGSSSL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)
+CC = $(CCNODBG) $(RTLIB) $(CFLAGSSSL) $(CFLAGSZLIB) $(CFLAGSLIB)
+CFGSET = TRUE
+!ENDIF
+
+######################
+# release-dll-ssl-dll
+
+!IF "$(CFG)" == "release-dll-ssl-dll"
+TARGET = $(LIB_NAME).dll
+DIROBJ = $(CFG)
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll"
+LNK = $(LNKDLL) $(WINLIBS) $(SSLLIBS) $(LFLAGSSSL) /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(IMPLIB_NAME).lib
+CC = $(CCNODBG) $(RTLIB) $(CFLAGSSSL)
+CFGSET = TRUE
+RESOURCE = $(DIROBJ)\libcurl.res
+!ENDIF
+
+######################
+# release-zlib-dll
+
+!IF "$(CFG)" == "release-zlib-dll"
+TARGET = $(LIB_NAME).lib
+DIROBJ = $(CFG)
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"
+LNK = $(LNKLIB) $(WINLIBS) $(ZLIBLIBSDLL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)
+CC = $(CCNODBG) $(RTLIB) $(CFLAGSZLIB) $(CFLAGSLIB)
+CFGSET = TRUE
+!ENDIF
+
+######################
+# release-ssl-dll-zlib-dll
+
+!IF "$(CFG)" == "release-ssl-dll-zlib-dll"
+TARGET = $(LIB_NAME).lib
+DIROBJ = $(CFG)
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll"
+LNK = $(LNKLIB) $(WINLIBS) $(SSLLIBS) $(ZLIBLIBSDLL) $(LFLAGSSSL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)
+CC = $(CCNODBG) $(RTLIB) $(CFLAGSSSL) $(CFLAGSZLIB) $(CFLAGSLIB)
+CFGSET = TRUE
+!ENDIF
+
+######################
+# release-dll-zlib-dll
+
+!IF "$(CFG)" == "release-dll-zlib-dll"
+TARGET = $(LIB_NAME).dll
+DIROBJ = $(CFG)
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"
+LNK = $(LNKDLL) $(WINLIBS) $(ZLIBLIBSDLL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(IMPLIB_NAME).lib
+CC = $(CCNODBG) $(RTLIB) $(CFLAGSZLIB)
+CFGSET = TRUE
+RESOURCE = $(DIROBJ)\libcurl.res
+!ENDIF
+
+######################
+# release-dll-ssl-dll-zlib-dll
+
+!IF "$(CFG)" == "release-dll-ssl-dll-zlib-dll"
+TARGET = $(LIB_NAME).dll
+DIROBJ = $(CFG)
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll"
+LNK = $(LNKDLL) $(WINLIBS) $(SSLLIBS) $(ZLIBLIBSDLL) $(LFLAGSSSL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(IMPLIB_NAME).lib
+CC = $(CCNODBG) $(RTLIB) $(CFLAGSSSL) $(CFLAGSZLIB)
+CFGSET = TRUE
+RESOURCE = $(DIROBJ)\libcurl.res
+!ENDIF
+
+######################
+# debug
+
+!IF "$(CFG)" == "debug"
+TARGET = $(LIB_NAME_DEBUG).lib
+DIROBJ = $(CFG)
+LNK = $(LNKLIB) /out:$(DIROBJ)\$(TARGET)
+CC = $(CCDEBUG) $(RTLIBD) $(CFLAGSLIB)
+CFGSET = TRUE
+!ENDIF
+
+######################
+# debug-ssl
+
+!IF "$(CFG)" == "debug-ssl"
+TARGET = $(LIB_NAME_DEBUG).lib
+DIROBJ = $(CFG)
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32"
+LNK = $(LNKLIB) $(LFLAGSSSL) /out:$(DIROBJ)\$(TARGET)
+CC = $(CCDEBUG) $(RTLIBD) $(CFLAGSSSL) $(CFLAGSLIB)
+CFGSET = TRUE
+!ENDIF
+
+######################
+# debug-zlib
+
+!IF "$(CFG)" == "debug-zlib"
+TARGET = $(LIB_NAME_DEBUG).lib
+DIROBJ = $(CFG)
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"
+LNK = $(LNKLIB) $(ZLIBLIBS) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)
+CC = $(CCDEBUG) $(RTLIBD) $(CFLAGSZLIB) $(CFLAGSLIB)
+CFGSET = TRUE
+!ENDIF
+
+######################
+# debug-ssl-dll
+
+!IF "$(CFG)" == "debug-ssl-dll"
+TARGET = $(LIB_NAME_DEBUG).lib
+DIROBJ = $(CFG)
+LFLAGSSSL = /LIBPATH:$(OPENSSL_PATH)\out32dll
+LNK = $(LNKLIB) $(WINLIBS) $(SSLLIBS) $(LFLAGSSSL) /out:$(DIROBJ)\$(TARGET)
+CC = $(CCDEBUG) $(RTLIBD) $(CFLAGSSSL) $(CFLAGSLIB)
+CFGSET = TRUE
+!ENDIF
+
+######################
+# debug-ssl-zlib
+
+!IF "$(CFG)" == "debug-ssl-zlib"
+TARGET = $(LIB_NAME_DEBUG).lib
+DIROBJ = $(CFG)
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32"
+LNK = $(LNKLIB) $(ZLIBLIBS) $(LFLAGSSSL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)
+CC = $(CCDEBUG) $(RTLIBD) $(CFLAGSSSL) $(CFLAGSZLIB) $(CFLAGSLIB)
+CFGSET = TRUE
+!ENDIF
+
+######################
+# debug-zlib-dll
+
+!IF "$(CFG)" == "debug-zlib-dll"
+TARGET = $(LIB_NAME_DEBUG).lib
+DIROBJ = $(CFG)
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"
+LNK = $(LNKLIB) $(WINLIBS) $(ZLIBLIBSDLL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)
+CC = $(CCDEBUG) $(RTLIBD) $(CFLAGSZLIB) $(CFLAGSLIB)
+CFGSET = TRUE
+!ENDIF
+
+######################
+# debug-ssl-dll-zlib-dll
+
+!IF "$(CFG)" == "debug-ssl-dll-zlib-dll"
+TARGET = $(LIB_NAME_DEBUG).lib
+DIROBJ = $(CFG)
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll"
+LNK = $(LNKLIB) $(WINLIBS) $(SSLLIBS) $(ZLIBLIBSDLL) $(LFLAGSSSL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)
+CC = $(CCDEBUG) $(RTLIBD) $(CFLAGSSSL) $(CFLAGSZLIB) $(CFLAGSLIB)
+CFGSET = TRUE
+!ENDIF
+
+######################
+# debug-dll
+
+!IF "$(CFG)" == "debug-dll"
+TARGET = $(LIB_NAME_DEBUG).dll
+DIROBJ = $(CFG)
+LNK = $(LNKDLL) $(WINLIBS) /DEBUG /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(IMPLIB_NAME_DEBUG).lib /PDB:$(DIROBJ)\$(IMPLIB_NAME_DEBUG).pdb
+CC = $(CCDEBUG) $(RTLIBD)
+CFGSET = TRUE
+RESOURCE = $(DIROBJ)\libcurl.res
+!ENDIF
+
+######################
+# debug-dll-ssl-dll
+
+!IF "$(CFG)" == "debug-dll-ssl-dll"
+TARGET = $(LIB_NAME_DEBUG).dll
+DIROBJ = $(CFG)
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll"
+LNK = $(LNKDLL) $(WINLIBS) $(SSLLIBS) $(LFLAGSSSL) /DEBUG /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(IMPLIB_NAME_DEBUG).lib /PDB:$(DIROBJ)\$(IMPLIB_NAME_DEBUG).pdb
+CC = $(CCDEBUG) $(RTLIBD) $(CFLAGSSSL)
+CFGSET = TRUE
+RESOURCE = $(DIROBJ)\libcurl.res
+!ENDIF
+
+######################
+# debug-dll-zlib-dll
+
+!IF "$(CFG)" == "debug-dll-zlib-dll"
+TARGET = $(LIB_NAME_DEBUG).dll
+DIROBJ = $(CFG)
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"
+LNK = $(LNKDLL) $(WINLIBS) $(ZLIBLIBSDLL) $(LFLAGSZLIB) /DEBUG /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(IMPLIB_NAME_DEBUG).lib /PDB:$(DIROBJ)\$(IMPLIB_NAME_DEBUG).pdb
+CC = $(CCDEBUG) $(RTLIBD) $(CFLAGSZLIB)
+CFGSET = TRUE
+RESOURCE = $(DIROBJ)\libcurl.res
+!ENDIF
+
+######################
+# debug-dll-ssl-dll-zlib-dll
+
+!IF "$(CFG)" == "debug-dll-ssl-dll-zlib-dll"
+TARGET = $(LIB_NAME_DEBUG).dll
+DIROBJ = $(CFG)
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll"
+LNK = $(LNKDLL) $(WINLIBS) $(SSLLIBS) $(ZLIBLIBSDLL) $(LFLAGSSSL) $(LFLAGSZLIB) /DEBUG /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(IMPLIB_NAME_DEBUG).lib /PDB:$(DIROBJ)\$(IMPLIB_NAME_DEBUG).pdb
+CC = $(CCDEBUG) $(RTLIBD) $(CFLAGSSSL) $(CFLAGSZLIB)
+CFGSET = TRUE
+RESOURCE = $(DIROBJ)\libcurl.res
+!ENDIF
+
+#######################
+# Usage
+#
+!IF "$(CFGSET)" == "FALSE" && "$(CFG)" != ""
+!MESSAGE Usage: nmake /f makefile.vc10 CFG=<config> <target>
+!MESSAGE where <config> is one of:
+!MESSAGE release - release static library
+!MESSAGE release-ssl - release static library with ssl
+!MESSAGE release-zlib - release static library with zlib
+!MESSAGE release-ssl-zlib - release static library with ssl and zlib
+!MESSAGE release-ssl-dll - release static library with dynamic ssl
+!MESSAGE release-zlib-dll - release static library with dynamic zlib
+!MESSAGE release-ssl-dll-zlib-dll - release static library with dynamic ssl and dynamic zlib
+!MESSAGE release-dll - release dynamic library
+!MESSAGE release-dll-ssl-dll - release dynamic library with dynamic ssl
+!MESSAGE release-dll-zlib-dll - release dynamic library with dynamic zlib
+!MESSAGE release-dll-ssl-dll-zlib-dll - release dynamic library with dynamic ssl and dynamic zlib
+!MESSAGE debug - debug static library
+!MESSAGE debug-ssl - debug static library with ssl
+!MESSAGE debug-zlib - debug static library with zlib
+!MESSAGE debug-ssl-zlib - debug static library with ssl and zlib
+!MESSAGE debug-ssl-dll - debug static library with dynamic ssl
+!MESSAGE debug-zlib-dll - debug static library with dynamic zlib
+!MESSAGE debug-ssl-dll-zlib-dll - debug static library with dynamic ssl and dynamic zlib
+!MESSAGE debug-dll - debug dynamic library
+!MESSAGE debug-dll-ssl-dll - debug dynamic library with dynamic ssl
+!MESSAGE debug-dll-zlib-dll - debug dynamic library with dynamic zlib1
+!MESSAGE debug-dll-ssl-dll-zlib-dll - debug dynamic library with dynamic ssl and dynamic zlib
+!MESSAGE <target> can be left blank in which case all is assumed
+!ERROR please choose a valid configuration "$(CFG)"
+!ENDIF
+
+#######################
+# Only the clean target can be used if a config was not provided.
+#
+!IF "$(CFGSET)" == "FALSE"
+clean:
+ @-erase /s *.dll 2> NUL
+ @-erase /s *.exp 2> NUL
+ @-erase /s *.idb 2> NUL
+ @-erase /s *.lib 2> NUL
+ @-erase /s *.obj 2> NUL
+ @-erase /s *.pch 2> NUL
+ @-erase /s *.pdb 2> NUL
+ @-erase /s *.res 2> NUL
+!ELSE
+# A config was provided, so the library can be built.
+#
+X_OBJS= \
+ $(DIROBJ)\base64.obj \
+ $(DIROBJ)\connect.obj \
+ $(DIROBJ)\content_encoding.obj \
+ $(DIROBJ)\cookie.obj \
+ $(DIROBJ)\curl_addrinfo.obj \
+ $(DIROBJ)\curl_fnmatch.obj \
+ $(DIROBJ)\curl_gethostname.obj \
+ $(DIROBJ)\curl_memrchr.obj \
+ $(DIROBJ)\curl_rand.obj \
+ $(DIROBJ)\curl_rtmp.obj \
+ $(DIROBJ)\curl_sspi.obj \
+ $(DIROBJ)\curl_threads.obj \
+ $(DIROBJ)\dict.obj \
+ $(DIROBJ)\easy.obj \
+ $(DIROBJ)\escape.obj \
+ $(DIROBJ)\fileinfo.obj \
+ $(DIROBJ)\file.obj \
+ $(DIROBJ)\formdata.obj \
+ $(DIROBJ)\ftplistparser.obj \
+ $(DIROBJ)\ftp.obj \
+ $(DIROBJ)\getenv.obj \
+ $(DIROBJ)\getinfo.obj \
+ $(DIROBJ)\gtls.obj \
+ $(DIROBJ)\gopher.obj \
+ $(DIROBJ)\hash.obj \
+ $(DIROBJ)\hmac.obj \
+ $(DIROBJ)\hostares.obj \
+ $(DIROBJ)\hostasyn.obj \
+ $(DIROBJ)\hostip4.obj \
+ $(DIROBJ)\hostip6.obj \
+ $(DIROBJ)\hostip.obj \
+ $(DIROBJ)\hostsyn.obj \
+ $(DIROBJ)\hostthre.obj \
+ $(DIROBJ)\http_chunks.obj \
+ $(DIROBJ)\http_digest.obj \
+ $(DIROBJ)\http_negotiate.obj \
+ $(DIROBJ)\http_ntlm.obj \
+ $(DIROBJ)\http.obj \
+ $(DIROBJ)\if2ip.obj \
+ $(DIROBJ)\imap.obj \
+ $(DIROBJ)\inet_ntop.obj \
+ $(DIROBJ)\inet_pton.obj \
+ $(DIROBJ)\ldap.obj \
+ $(DIROBJ)\llist.obj \
+ $(DIROBJ)\md4.obj \
+ $(DIROBJ)\md5.obj \
+ $(DIROBJ)\memdebug.obj \
+ $(DIROBJ)\mprintf.obj \
+ $(DIROBJ)\multi.obj \
+ $(DIROBJ)\netrc.obj \
+ $(DIROBJ)\nonblock.obj \
+ $(DIROBJ)\openldap.obj \
+ $(DIROBJ)\parsedate.obj \
+ $(DIROBJ)\pingpong.obj \
+ $(DIROBJ)\polarssl.obj \
+ $(DIROBJ)\pop3.obj \
+ $(DIROBJ)\progress.obj \
+ $(DIROBJ)\rawstr.obj \
+ $(DIROBJ)\rtsp.obj \
+ $(DIROBJ)\select.obj \
+ $(DIROBJ)\sendf.obj \
+ $(DIROBJ)\share.obj \
+ $(DIROBJ)\slist.obj \
+ $(DIROBJ)\smtp.obj \
+ $(DIROBJ)\socks_gssapi.obj \
+ $(DIROBJ)\socks.obj \
+ $(DIROBJ)\socks_sspi.obj \
+ $(DIROBJ)\speedcheck.obj \
+ $(DIROBJ)\splay.obj \
+ $(DIROBJ)\ssh.obj \
+ $(DIROBJ)\sslgen.obj \
+ $(DIROBJ)\ssluse.obj \
+ $(DIROBJ)\strequal.obj \
+ $(DIROBJ)\strerror.obj \
+ $(DIROBJ)\strtok.obj \
+ $(DIROBJ)\strtoofft.obj \
+ $(DIROBJ)\telnet.obj \
+ $(DIROBJ)\tftp.obj \
+ $(DIROBJ)\timeval.obj \
+ $(DIROBJ)\transfer.obj \
+ $(DIROBJ)\url.obj \
+ $(DIROBJ)\version.obj \
+ $(DIROBJ)\warnless.obj \
+ $(DIROBJ)\wildcard.obj \
+ $(RESOURCE)
+
+all : $(TARGET)
+
+$(TARGET): $(X_OBJS)
+ $(LNK) $(LFLAGS) $(X_OBJS)
+ -xcopy $(DIROBJ)\$(LIB_NAME).dll . /y
+ -xcopy $(DIROBJ)\$(LIB_NAME).lib . /y
+ -xcopy $(DIROBJ)\$(LIB_NAME_DEBUG).dll . /y
+ -xcopy $(DIROBJ)\$(LIB_NAME_DEBUG).lib . /y
+ -xcopy $(DIROBJ)\$(IMPLIB_NAME).lib . /y
+ -xcopy $(DIROBJ)\$(IMPLIB_NAME_DEBUG).lib . /y
+ -xcopy $(DIROBJ)\*.exp . /y
+ -xcopy $(DIROBJ)\*.pdb . /y
+
+$(X_OBJS): $(DIROBJ)
+
+$(DIROBJ):
+ @if not exist "$(DIROBJ)" mkdir $(DIROBJ)
+
+.SUFFIXES: .c .obj .res
+
+{.\}.c{$(DIROBJ)\}.obj:
+ $(CC) $(CFLAGS) /Fo"$@" $<
+
+debug-dll\libcurl.res \
+debug-dll-ssl-dll\libcurl.res \
+debug-dll-zlib-dll\libcurl.res \
+debug-dll-ssl-dll-zlib-dll\libcurl.res: libcurl.rc
+ rc /dDEBUGBUILD=1 /Fo $@ libcurl.rc
+
+release-dll\libcurl.res \
+release-dll-ssl-dll\libcurl.res \
+release-dll-zlib-dll\libcurl.res \
+release-dll-ssl-dll-zlib-dll\libcurl.res: libcurl.rc
+ rc /dDEBUGBUILD=0 /Fo $@ libcurl.rc
+!ENDIF # End of case where a config was provided.
diff --git a/lib/Makefile.vc6 b/lib/Makefile.vc6
new file mode 100644
index 0000000..2e18e14
--- /dev/null
+++ b/lib/Makefile.vc6
@@ -0,0 +1,571 @@
+#***************************************************************************
+# _ _ ____ _
+# Project ___| | | | _ \| |
+# / __| | | | |_) | |
+# | (__| |_| | _ <| |___
+# \___|\___/|_| \_\_____|
+#
+# Copyright (C) 1999 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+#
+# This software is licensed as described in the file COPYING, which
+# you should have received as part of this distribution. The terms
+# are also available at http://curl.haxx.se/docs/copyright.html.
+#
+# You may opt to use, copy, modify, merge, publish, distribute and/or sell
+# copies of the Software, and permit persons to whom the Software is
+# furnished to do so, under the terms of the COPYING file.
+#
+# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+# KIND, either express or implied.
+#
+###########################################################################
+#
+# Makefile for building libcurl with MSVC6
+#
+# Usage: see usage message below
+# Should be invoked from \lib directory
+# Edit the paths and desired library name
+# SSL path is only required if you intend compiling
+# with SSL.
+#
+# This make file leaves the result either a .lib or .dll file
+# in the \lib directory. It should be called from the \lib
+# directory.
+#
+# An option would have been to allow the source directory to
+# be specified, but I saw no requirement.
+#
+# Another option would have been to leave the .lib and .dll
+# files in the "cfg" directory, but then the make file
+# in \src would need to be changed.
+#
+##############################################################
+
+#
+# Stem for static libs and DLLs
+#
+LIB_NAME = libcurl
+LIB_NAME_DEBUG = libcurld
+
+#
+# Stem for DLL import libs
+#
+IMPLIB_NAME = libcurl_imp
+IMPLIB_NAME_DEBUG = libcurld_imp
+
+!IFNDEF OPENSSL_PATH
+OPENSSL_PATH = ../../openssl-0.9.8o
+!ENDIF
+
+!IFNDEF ZLIB_PATH
+ZLIB_PATH = ../../zlib-1.2.5
+!ENDIF
+
+!IFNDEF MACHINE
+MACHINE = X86
+!ENDIF
+
+# USE_WINDOWS_SSPI uses windows libraries to allow NTLM authentication
+# without an openssl installation and offers the ability to authenticate
+# using the "current logged in user". Since at least with MSVC6 the sspi.h
+# header is broken it is either required to install the Windows SDK,
+# or to fix sspi.h with adding this define at the beginning of sspi.h:
+# #define FreeCredentialHandle FreeCredentialsHandle
+#
+# If, for some reason the Windows SDK is installed but not installed
+# in the default location, you can specify WINDOWS_SDK_PATH.
+# It can be downloaded from:
+# http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
+
+# WINDOWS_SSPI = 1
+
+!IFDEF WINDOWS_SSPI
+!IFNDEF WINDOWS_SDK_PATH
+WINDOWS_SDK_PATH = "C:\Program Files\Microsoft SDK"
+!ENDIF
+!ENDIF
+
+#############################################################
+## Nothing more to do below this line!
+
+CCNODBG = cl.exe /O2 /DNDEBUG
+CCDEBUG = cl.exe /Od /Gm /Zi /D_DEBUG /GZ
+CFLAGSSSL = /DUSE_SSLEAY /I "$(OPENSSL_PATH)/inc32" /I "$(OPENSSL_PATH)/inc32/openssl"
+CFLAGSZLIB = /DHAVE_ZLIB_H /DHAVE_ZLIB /DHAVE_LIBZ /I "$(ZLIB_PATH)"
+CFLAGS = /I. /I../include /nologo /W3 /GX /DWIN32 /YX /FD /c /DBUILDING_LIBCURL
+CFLAGSLIB = /DCURL_STATICLIB
+LNKDLL = link.exe /DLL
+LNKLIB = link.exe /lib
+LFLAGS = /nologo /machine:$(MACHINE)
+SSLLIBS = libeay32.lib ssleay32.lib
+ZLIBLIBSDLL= zdll.lib
+ZLIBLIBS = zlib.lib
+WINLIBS = ws2_32.lib wldap32.lib
+CFLAGS = $(CFLAGS)
+
+CFGSET = FALSE
+
+!IFDEF WINDOWS_SSPI
+CFLAGS = $(CFLAGS) /DUSE_WINDOWS_SSPI /I$(WINDOWS_SDK_PATH)\include
+!ENDIF
+
+!IFDEF USE_IPV6
+CFLAGS = $(CFLAGS) /DUSE_IPV6
+!ENDIF
+
+##############################################################
+# Runtime library configuration
+
+RTLIB = /MD
+RTLIBD = /MDd
+
+!IF "$(RTLIBCFG)" == "static"
+RTLIB = /MT
+RTLIBD = /MTd
+!ENDIF
+
+
+######################
+# release
+
+!IF "$(CFG)" == "release"
+TARGET = $(LIB_NAME).lib
+DIROBJ = $(CFG)
+LNK = $(LNKLIB) /out:$(DIROBJ)\$(TARGET)
+CC = $(CCNODBG) $(RTLIB) $(CFLAGSLIB)
+CFGSET = TRUE
+!ENDIF
+
+######################
+# release-zlib
+
+!IF "$(CFG)" == "release-zlib"
+TARGET = $(LIB_NAME).lib
+DIROBJ = $(CFG)
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"
+LNK = $(LNKLIB) $(ZLIBLIBS) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)
+CC = $(CCNODBG) $(RTLIB) $(CFLAGSZLIB) $(CFLAGSLIB)
+CFGSET = TRUE
+!ENDIF
+
+######################
+# release-dll
+
+!IF "$(CFG)" == "release-dll"
+TARGET = $(LIB_NAME).dll
+DIROBJ = $(CFG)
+LNK = $(LNKDLL) $(WINLIBS) /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(IMPLIB_NAME).lib
+CC = $(CCNODBG) $(RTLIB)
+CFGSET = TRUE
+RESOURCE = $(DIROBJ)\libcurl.res
+!ENDIF
+
+######################
+# release-ssl
+
+!IF "$(CFG)" == "release-ssl"
+TARGET = $(LIB_NAME).lib
+DIROBJ = $(CFG)
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32"
+LNK = $(LNKLIB) $(LFLAGSSSL) /out:$(DIROBJ)\$(TARGET)
+CC = $(CCNODBG) $(RTLIB) $(CFLAGSSSL) $(CFLAGSLIB)
+CFGSET = TRUE
+!ENDIF
+
+######################
+# release-ssl-dll
+
+!IF "$(CFG)" == "release-ssl-dll"
+TARGET = $(LIB_NAME).lib
+DIROBJ = $(CFG)
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll"
+LNK = $(LNKLIB) $(WINLIBS) $(SSLLIBS) $(LFLAGSSSL) /out:$(DIROBJ)\$(TARGET)
+CC = $(CCNODBG) $(RTLIB) $(CFLAGSSSL) $(CFLAGSLIB)
+CFGSET = TRUE
+!ENDIF
+
+######################
+# release-ssl-zlib
+
+!IF "$(CFG)" == "release-ssl-zlib"
+TARGET = $(LIB_NAME).lib
+DIROBJ = $(CFG)
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32"
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"
+LNK = $(LNKLIB) $(LFLAGSSSL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)
+CC = $(CCNODBG) $(RTLIB) $(CFLAGSSSL) $(CFLAGSZLIB) $(CFLAGSLIB)
+CFGSET = TRUE
+!ENDIF
+
+######################
+# release-dll-ssl-dll
+
+!IF "$(CFG)" == "release-dll-ssl-dll"
+TARGET = $(LIB_NAME).dll
+DIROBJ = $(CFG)
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll"
+LNK = $(LNKDLL) $(WINLIBS) $(SSLLIBS) $(LFLAGSSSL) /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(IMPLIB_NAME).lib
+CC = $(CCNODBG) $(RTLIB) $(CFLAGSSSL)
+CFGSET = TRUE
+RESOURCE = $(DIROBJ)\libcurl.res
+!ENDIF
+
+######################
+# release-zlib-dll
+
+!IF "$(CFG)" == "release-zlib-dll"
+TARGET = $(LIB_NAME).lib
+DIROBJ = $(CFG)
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"
+LNK = $(LNKLIB) $(WINLIBS) $(ZLIBLIBSDLL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)
+CC = $(CCNODBG) $(RTLIB) $(CFLAGSZLIB) $(CFLAGSLIB)
+CFGSET = TRUE
+!ENDIF
+
+######################
+# release-ssl-dll-zlib-dll
+
+!IF "$(CFG)" == "release-ssl-dll-zlib-dll"
+TARGET = $(LIB_NAME).lib
+DIROBJ = $(CFG)
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll"
+LNK = $(LNKLIB) $(WINLIBS) $(SSLLIBS) $(ZLIBLIBSDLL) $(LFLAGSSSL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)
+CC = $(CCNODBG) $(RTLIB) $(CFLAGSSSL) $(CFLAGSZLIB) $(CFLAGSLIB)
+CFGSET = TRUE
+!ENDIF
+
+######################
+# release-dll-zlib-dll
+
+!IF "$(CFG)" == "release-dll-zlib-dll"
+TARGET = $(LIB_NAME).dll
+DIROBJ = $(CFG)
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"
+LNK = $(LNKDLL) $(WINLIBS) $(ZLIBLIBSDLL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(IMPLIB_NAME).lib
+CC = $(CCNODBG) $(RTLIB) $(CFLAGSZLIB)
+CFGSET = TRUE
+RESOURCE = $(DIROBJ)\libcurl.res
+!ENDIF
+
+######################
+# release-dll-ssl-dll-zlib-dll
+
+!IF "$(CFG)" == "release-dll-ssl-dll-zlib-dll"
+TARGET = $(LIB_NAME).dll
+DIROBJ = $(CFG)
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll"
+LNK = $(LNKDLL) $(WINLIBS) $(SSLLIBS) $(ZLIBLIBSDLL) $(LFLAGSSSL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(IMPLIB_NAME).lib
+CC = $(CCNODBG) $(RTLIB) $(CFLAGSSSL) $(CFLAGSZLIB)
+CFGSET = TRUE
+RESOURCE = $(DIROBJ)\libcurl.res
+!ENDIF
+
+######################
+# debug
+
+!IF "$(CFG)" == "debug"
+TARGET = $(LIB_NAME_DEBUG).lib
+DIROBJ = $(CFG)
+LNK = $(LNKLIB) /out:$(DIROBJ)\$(TARGET)
+CC = $(CCDEBUG) $(RTLIBD) $(CFLAGSLIB)
+CFGSET = TRUE
+!ENDIF
+
+######################
+# debug-ssl
+
+!IF "$(CFG)" == "debug-ssl"
+TARGET = $(LIB_NAME_DEBUG).lib
+DIROBJ = $(CFG)
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32"
+LNK = $(LNKLIB) $(LFLAGSSSL) /out:$(DIROBJ)\$(TARGET)
+CC = $(CCDEBUG) $(RTLIBD) $(CFLAGSSSL) $(CFLAGSLIB)
+CFGSET = TRUE
+!ENDIF
+
+######################
+# debug-zlib
+
+!IF "$(CFG)" == "debug-zlib"
+TARGET = $(LIB_NAME_DEBUG).lib
+DIROBJ = $(CFG)
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"
+LNK = $(LNKLIB) $(ZLIBLIBS) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)
+CC = $(CCDEBUG) $(RTLIBD) $(CFLAGSZLIB) $(CFLAGSLIB)
+CFGSET = TRUE
+!ENDIF
+
+######################
+# debug-ssl-dll
+
+!IF "$(CFG)" == "debug-ssl-dll"
+TARGET = $(LIB_NAME_DEBUG).lib
+DIROBJ = $(CFG)
+LFLAGSSSL = /LIBPATH:$(OPENSSL_PATH)\out32dll
+LNK = $(LNKLIB) $(WINLIBS) $(SSLLIBS) $(LFLAGSSSL) /out:$(DIROBJ)\$(TARGET)
+CC = $(CCDEBUG) $(RTLIBD) $(CFLAGSSSL) $(CFLAGSLIB)
+CFGSET = TRUE
+!ENDIF
+
+######################
+# debug-ssl-zlib
+
+!IF "$(CFG)" == "debug-ssl-zlib"
+TARGET = $(LIB_NAME_DEBUG).lib
+DIROBJ = $(CFG)
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32"
+LNK = $(LNKLIB) $(ZLIBLIBS) $(LFLAGSSSL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)
+CC = $(CCDEBUG) $(RTLIBD) $(CFLAGSSSL) $(CFLAGSZLIB) $(CFLAGSLIB)
+CFGSET = TRUE
+!ENDIF
+
+######################
+# debug-zlib-dll
+
+!IF "$(CFG)" == "debug-zlib-dll"
+TARGET = $(LIB_NAME_DEBUG).lib
+DIROBJ = $(CFG)
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"
+LNK = $(LNKLIB) $(WINLIBS) $(ZLIBLIBSDLL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)
+CC = $(CCDEBUG) $(RTLIBD) $(CFLAGSZLIB) $(CFLAGSLIB)
+CFGSET = TRUE
+!ENDIF
+
+######################
+# debug-ssl-dll-zlib-dll
+
+!IF "$(CFG)" == "debug-ssl-dll-zlib-dll"
+TARGET = $(LIB_NAME_DEBUG).lib
+DIROBJ = $(CFG)
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll"
+LNK = $(LNKLIB) $(WINLIBS) $(SSLLIBS) $(ZLIBLIBSDLL) $(LFLAGSSSL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)
+CC = $(CCDEBUG) $(RTLIBD) $(CFLAGSSSL) $(CFLAGSZLIB) $(CFLAGSLIB)
+CFGSET = TRUE
+!ENDIF
+
+######################
+# debug-dll
+
+!IF "$(CFG)" == "debug-dll"
+TARGET = $(LIB_NAME_DEBUG).dll
+DIROBJ = $(CFG)
+LNK = $(LNKDLL) $(WINLIBS) /DEBUG /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(IMPLIB_NAME_DEBUG).lib /PDB:$(DIROBJ)\$(IMPLIB_NAME_DEBUG).pdb
+CC = $(CCDEBUG) $(RTLIBD)
+CFGSET = TRUE
+RESOURCE = $(DIROBJ)\libcurl.res
+!ENDIF
+
+######################
+# debug-dll-ssl-dll
+
+!IF "$(CFG)" == "debug-dll-ssl-dll"
+TARGET = $(LIB_NAME_DEBUG).dll
+DIROBJ = $(CFG)
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll"
+LNK = $(LNKDLL) $(WINLIBS) $(SSLLIBS) $(LFLAGSSSL) /DEBUG /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(IMPLIB_NAME_DEBUG).lib /PDB:$(DIROBJ)\$(IMPLIB_NAME_DEBUG).pdb
+CC = $(CCDEBUG) $(RTLIBD) $(CFLAGSSSL)
+CFGSET = TRUE
+RESOURCE = $(DIROBJ)\libcurl.res
+!ENDIF
+
+######################
+# debug-dll-zlib-dll
+
+!IF "$(CFG)" == "debug-dll-zlib-dll"
+TARGET = $(LIB_NAME_DEBUG).dll
+DIROBJ = $(CFG)
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"
+LNK = $(LNKDLL) $(WINLIBS) $(ZLIBLIBSDLL) $(LFLAGSZLIB) /DEBUG /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(IMPLIB_NAME_DEBUG).lib /PDB:$(DIROBJ)\$(IMPLIB_NAME_DEBUG).pdb
+CC = $(CCDEBUG) $(RTLIBD) $(CFLAGSZLIB)
+CFGSET = TRUE
+RESOURCE = $(DIROBJ)\libcurl.res
+!ENDIF
+
+######################
+# debug-dll-ssl-dll-zlib-dll
+
+!IF "$(CFG)" == "debug-dll-ssl-dll-zlib-dll"
+TARGET = $(LIB_NAME_DEBUG).dll
+DIROBJ = $(CFG)
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll"
+LNK = $(LNKDLL) $(WINLIBS) $(SSLLIBS) $(ZLIBLIBSDLL) $(LFLAGSSSL) $(LFLAGSZLIB) /DEBUG /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(IMPLIB_NAME_DEBUG).lib /PDB:$(DIROBJ)\$(IMPLIB_NAME_DEBUG).pdb
+CC = $(CCDEBUG) $(RTLIBD) $(CFLAGSSSL) $(CFLAGSZLIB)
+CFGSET = TRUE
+RESOURCE = $(DIROBJ)\libcurl.res
+!ENDIF
+
+#######################
+# Usage
+#
+!IF "$(CFGSET)" == "FALSE" && "$(CFG)" != ""
+!MESSAGE Usage: nmake /f makefile.vc6 CFG=<config> <target>
+!MESSAGE where <config> is one of:
+!MESSAGE release - release static library
+!MESSAGE release-ssl - release static library with ssl
+!MESSAGE release-zlib - release static library with zlib
+!MESSAGE release-ssl-zlib - release static library with ssl and zlib
+!MESSAGE release-ssl-dll - release static library with dynamic ssl
+!MESSAGE release-zlib-dll - release static library with dynamic zlib
+!MESSAGE release-ssl-dll-zlib-dll - release static library with dynamic ssl and dynamic zlib
+!MESSAGE release-dll - release dynamic library
+!MESSAGE release-dll-ssl-dll - release dynamic library with dynamic ssl
+!MESSAGE release-dll-zlib-dll - release dynamic library with dynamic zlib
+!MESSAGE release-dll-ssl-dll-zlib-dll - release dynamic library with dynamic ssl and dynamic zlib
+!MESSAGE debug - debug static library
+!MESSAGE debug-ssl - debug static library with ssl
+!MESSAGE debug-zlib - debug static library with zlib
+!MESSAGE debug-ssl-zlib - debug static library with ssl and zlib
+!MESSAGE debug-ssl-dll - debug static library with dynamic ssl
+!MESSAGE debug-zlib-dll - debug static library with dynamic zlib
+!MESSAGE debug-ssl-dll-zlib-dll - debug static library with dynamic ssl and dynamic zlib
+!MESSAGE debug-dll - debug dynamic library
+!MESSAGE debug-dll-ssl-dll - debug dynamic library with dynamic ssl
+!MESSAGE debug-dll-zlib-dll - debug dynamic library with dynamic zlib1
+!MESSAGE debug-dll-ssl-dll-zlib-dll - debug dynamic library with dynamic ssl and dynamic zlib
+!MESSAGE <target> can be left blank in which case all is assumed
+!ERROR please choose a valid configuration "$(CFG)"
+!ENDIF
+
+#######################
+# Only the clean target can be used if a config was not provided.
+#
+!IF "$(CFGSET)" == "FALSE"
+clean:
+ @-erase /s *.dll 2> NUL
+ @-erase /s *.exp 2> NUL
+ @-erase /s *.idb 2> NUL
+ @-erase /s *.lib 2> NUL
+ @-erase /s *.obj 2> NUL
+ @-erase /s *.pch 2> NUL
+ @-erase /s *.pdb 2> NUL
+ @-erase /s *.res 2> NUL
+!ELSE
+# A config was provided, so the library can be built.
+#
+X_OBJS= \
+ $(DIROBJ)\base64.obj \
+ $(DIROBJ)\connect.obj \
+ $(DIROBJ)\content_encoding.obj \
+ $(DIROBJ)\cookie.obj \
+ $(DIROBJ)\curl_addrinfo.obj \
+ $(DIROBJ)\curl_fnmatch.obj \
+ $(DIROBJ)\curl_gethostname.obj \
+ $(DIROBJ)\curl_memrchr.obj \
+ $(DIROBJ)\curl_rand.obj \
+ $(DIROBJ)\curl_rtmp.obj \
+ $(DIROBJ)\curl_sspi.obj \
+ $(DIROBJ)\curl_threads.obj \
+ $(DIROBJ)\dict.obj \
+ $(DIROBJ)\easy.obj \
+ $(DIROBJ)\escape.obj \
+ $(DIROBJ)\fileinfo.obj \
+ $(DIROBJ)\file.obj \
+ $(DIROBJ)\formdata.obj \
+ $(DIROBJ)\ftplistparser.obj \
+ $(DIROBJ)\ftp.obj \
+ $(DIROBJ)\getenv.obj \
+ $(DIROBJ)\getinfo.obj \
+ $(DIROBJ)\gtls.obj \
+ $(DIROBJ)\gopher.obj \
+ $(DIROBJ)\hash.obj \
+ $(DIROBJ)\hmac.obj \
+ $(DIROBJ)\hostares.obj \
+ $(DIROBJ)\hostasyn.obj \
+ $(DIROBJ)\hostip4.obj \
+ $(DIROBJ)\hostip6.obj \
+ $(DIROBJ)\hostip.obj \
+ $(DIROBJ)\hostsyn.obj \
+ $(DIROBJ)\hostthre.obj \
+ $(DIROBJ)\http_chunks.obj \
+ $(DIROBJ)\http_digest.obj \
+ $(DIROBJ)\http_negotiate.obj \
+ $(DIROBJ)\http_ntlm.obj \
+ $(DIROBJ)\http.obj \
+ $(DIROBJ)\if2ip.obj \
+ $(DIROBJ)\imap.obj \
+ $(DIROBJ)\inet_ntop.obj \
+ $(DIROBJ)\inet_pton.obj \
+ $(DIROBJ)\ldap.obj \
+ $(DIROBJ)\llist.obj \
+ $(DIROBJ)\md4.obj \
+ $(DIROBJ)\md5.obj \
+ $(DIROBJ)\memdebug.obj \
+ $(DIROBJ)\mprintf.obj \
+ $(DIROBJ)\multi.obj \
+ $(DIROBJ)\netrc.obj \
+ $(DIROBJ)\nonblock.obj \
+ $(DIROBJ)\openldap.obj \
+ $(DIROBJ)\parsedate.obj \
+ $(DIROBJ)\pingpong.obj \
+ $(DIROBJ)\polarssl.obj \
+ $(DIROBJ)\pop3.obj \
+ $(DIROBJ)\progress.obj \
+ $(DIROBJ)\rawstr.obj \
+ $(DIROBJ)\rtsp.obj \
+ $(DIROBJ)\select.obj \
+ $(DIROBJ)\sendf.obj \
+ $(DIROBJ)\share.obj \
+ $(DIROBJ)\slist.obj \
+ $(DIROBJ)\smtp.obj \
+ $(DIROBJ)\socks_gssapi.obj \
+ $(DIROBJ)\socks.obj \
+ $(DIROBJ)\socks_sspi.obj \
+ $(DIROBJ)\speedcheck.obj \
+ $(DIROBJ)\splay.obj \
+ $(DIROBJ)\ssh.obj \
+ $(DIROBJ)\sslgen.obj \
+ $(DIROBJ)\ssluse.obj \
+ $(DIROBJ)\strequal.obj \
+ $(DIROBJ)\strerror.obj \
+ $(DIROBJ)\strtok.obj \
+ $(DIROBJ)\strtoofft.obj \
+ $(DIROBJ)\telnet.obj \
+ $(DIROBJ)\tftp.obj \
+ $(DIROBJ)\timeval.obj \
+ $(DIROBJ)\transfer.obj \
+ $(DIROBJ)\url.obj \
+ $(DIROBJ)\version.obj \
+ $(DIROBJ)\warnless.obj \
+ $(DIROBJ)\wildcard.obj \
+ $(RESOURCE)
+
+all : $(TARGET)
+
+$(TARGET): $(X_OBJS)
+ $(LNK) $(LFLAGS) $(X_OBJS)
+ -xcopy $(DIROBJ)\$(LIB_NAME).dll . /y
+ -xcopy $(DIROBJ)\$(LIB_NAME).lib . /y
+ -xcopy $(DIROBJ)\$(LIB_NAME_DEBUG).dll . /y
+ -xcopy $(DIROBJ)\$(LIB_NAME_DEBUG).lib . /y
+ -xcopy $(DIROBJ)\$(IMPLIB_NAME).lib . /y
+ -xcopy $(DIROBJ)\$(IMPLIB_NAME_DEBUG).lib . /y
+ -xcopy $(DIROBJ)\*.exp . /y
+ -xcopy $(DIROBJ)\*.pdb . /y
+
+$(X_OBJS): $(DIROBJ)
+
+$(DIROBJ):
+ @if not exist "$(DIROBJ)" mkdir $(DIROBJ)
+
+.SUFFIXES: .c .obj .res
+
+{.\}.c{$(DIROBJ)\}.obj:
+ $(CC) $(CFLAGS) /Fo"$@" $<
+
+debug-dll\libcurl.res \
+debug-dll-ssl-dll\libcurl.res \
+debug-dll-zlib-dll\libcurl.res \
+debug-dll-ssl-dll-zlib-dll\libcurl.res: libcurl.rc
+ rc /dDEBUGBUILD=1 /Fo $@ libcurl.rc
+
+release-dll\libcurl.res \
+release-dll-ssl-dll\libcurl.res \
+release-dll-zlib-dll\libcurl.res \
+release-dll-ssl-dll-zlib-dll\libcurl.res: libcurl.rc
+ rc /dDEBUGBUILD=0 /Fo $@ libcurl.rc
+!ENDIF # End of case where a config was provided.
diff --git a/lib/Makefile.vc8 b/lib/Makefile.vc8
new file mode 100644
index 0000000..af6fbf0
--- /dev/null
+++ b/lib/Makefile.vc8
@@ -0,0 +1,571 @@
+#***************************************************************************
+# _ _ ____ _
+# Project ___| | | | _ \| |
+# / __| | | | |_) | |
+# | (__| |_| | _ <| |___
+# \___|\___/|_| \_\_____|
+#
+# Copyright (C) 1999 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+#
+# This software is licensed as described in the file COPYING, which
+# you should have received as part of this distribution. The terms
+# are also available at http://curl.haxx.se/docs/copyright.html.
+#
+# You may opt to use, copy, modify, merge, publish, distribute and/or sell
+# copies of the Software, and permit persons to whom the Software is
+# furnished to do so, under the terms of the COPYING file.
+#
+# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+# KIND, either express or implied.
+#
+###########################################################################
+#
+# Makefile for building libcurl with MSVC8
+#
+# Usage: see usage message below
+# Should be invoked from \lib directory
+# Edit the paths and desired library name
+# SSL path is only required if you intend compiling
+# with SSL.
+#
+# This make file leaves the result either a .lib or .dll file
+# in the \lib directory. It should be called from the \lib
+# directory.
+#
+# An option would have been to allow the source directory to
+# be specified, but I saw no requirement.
+#
+# Another option would have been to leave the .lib and .dll
+# files in the "cfg" directory, but then the make file
+# in \src would need to be changed.
+#
+##############################################################
+
+#
+# Stem for static libs and DLLs
+#
+LIB_NAME = libcurl
+LIB_NAME_DEBUG = libcurld
+
+#
+# Stem for DLL import libs
+#
+IMPLIB_NAME = libcurl_imp
+IMPLIB_NAME_DEBUG = libcurld_imp
+
+!IFNDEF OPENSSL_PATH
+OPENSSL_PATH = ../../openssl-0.9.8o
+!ENDIF
+
+!IFNDEF ZLIB_PATH
+ZLIB_PATH = ../../zlib-1.2.5
+!ENDIF
+
+!IFNDEF MACHINE
+MACHINE = X86
+!ENDIF
+
+# USE_WINDOWS_SSPI uses windows libraries to allow NTLM authentication
+# without an openssl installation and offers the ability to authenticate
+# using the "current logged in user". Since at least with MSVC8 the sspi.h
+# header is broken it is either required to install the Windows SDK,
+# or to fix sspi.h with adding this define at the beginning of sspi.h:
+# #define FreeCredentialHandle FreeCredentialsHandle
+#
+# If, for some reason the Windows SDK is installed but not installed
+# in the default location, you can specify WINDOWS_SDK_PATH.
+# It can be downloaded from:
+# http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
+
+# WINDOWS_SSPI = 1
+
+!IFDEF WINDOWS_SSPI
+!IFNDEF WINDOWS_SDK_PATH
+WINDOWS_SDK_PATH = "C:\Program Files\Microsoft SDK"
+!ENDIF
+!ENDIF
+
+#############################################################
+## Nothing more to do below this line!
+
+CCNODBG = cl.exe /O2 /DNDEBUG
+CCDEBUG = cl.exe /Od /Gm /Zi /D_DEBUG /RTC1
+CFLAGSSSL = /DUSE_SSLEAY /I "$(OPENSSL_PATH)/inc32" /I "$(OPENSSL_PATH)/inc32/openssl"
+CFLAGSZLIB = /DHAVE_ZLIB_H /DHAVE_ZLIB /DHAVE_LIBZ /I "$(ZLIB_PATH)"
+CFLAGS = /I. /I../include /nologo /W3 /EHsc /DWIN32 /FD /c /DBUILDING_LIBCURL
+CFLAGSLIB = /DCURL_STATICLIB
+LNKDLL = link.exe /DLL
+LNKLIB = link.exe /lib
+LFLAGS = /nologo /machine:$(MACHINE)
+SSLLIBS = libeay32.lib ssleay32.lib
+ZLIBLIBSDLL= zdll.lib
+ZLIBLIBS = zlib.lib
+WINLIBS = ws2_32.lib bufferoverflowu.lib wldap32.lib
+CFLAGS = $(CFLAGS)
+
+CFGSET = FALSE
+
+!IFDEF WINDOWS_SSPI
+CFLAGS = $(CFLAGS) /DUSE_WINDOWS_SSPI /I$(WINDOWS_SDK_PATH)\include
+!ENDIF
+
+!IFDEF USE_IPV6
+CFLAGS = $(CFLAGS) /DUSE_IPV6
+!ENDIF
+
+##############################################################
+# Runtime library configuration
+
+RTLIB = /MD
+RTLIBD = /MDd
+
+!IF "$(RTLIBCFG)" == "static"
+RTLIB = /MT
+RTLIBD = /MTd
+!ENDIF
+
+
+######################
+# release
+
+!IF "$(CFG)" == "release"
+TARGET = $(LIB_NAME).lib
+DIROBJ = $(CFG)
+LNK = $(LNKLIB) /out:$(DIROBJ)\$(TARGET)
+CC = $(CCNODBG) $(RTLIB) $(CFLAGSLIB)
+CFGSET = TRUE
+!ENDIF
+
+######################
+# release-zlib
+
+!IF "$(CFG)" == "release-zlib"
+TARGET = $(LIB_NAME).lib
+DIROBJ = $(CFG)
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"
+LNK = $(LNKLIB) $(ZLIBLIBS) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)
+CC = $(CCNODBG) $(RTLIB) $(CFLAGSZLIB) $(CFLAGSLIB)
+CFGSET = TRUE
+!ENDIF
+
+######################
+# release-dll
+
+!IF "$(CFG)" == "release-dll"
+TARGET = $(LIB_NAME).dll
+DIROBJ = $(CFG)
+LNK = $(LNKDLL) $(WINLIBS) /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(IMPLIB_NAME).lib
+CC = $(CCNODBG) $(RTLIB)
+CFGSET = TRUE
+RESOURCE = $(DIROBJ)\libcurl.res
+!ENDIF
+
+######################
+# release-ssl
+
+!IF "$(CFG)" == "release-ssl"
+TARGET = $(LIB_NAME).lib
+DIROBJ = $(CFG)
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32"
+LNK = $(LNKLIB) $(LFLAGSSSL) /out:$(DIROBJ)\$(TARGET)
+CC = $(CCNODBG) $(RTLIB) $(CFLAGSSSL) $(CFLAGSLIB)
+CFGSET = TRUE
+!ENDIF
+
+######################
+# release-ssl-dll
+
+!IF "$(CFG)" == "release-ssl-dll"
+TARGET = $(LIB_NAME).lib
+DIROBJ = $(CFG)
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll"
+LNK = $(LNKLIB) $(WINLIBS) $(SSLLIBS) $(LFLAGSSSL) /out:$(DIROBJ)\$(TARGET)
+CC = $(CCNODBG) $(RTLIB) $(CFLAGSSSL) $(CFLAGSLIB)
+CFGSET = TRUE
+!ENDIF
+
+######################
+# release-ssl-zlib
+
+!IF "$(CFG)" == "release-ssl-zlib"
+TARGET = $(LIB_NAME).lib
+DIROBJ = $(CFG)
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32"
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"
+LNK = $(LNKLIB) $(LFLAGSSSL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)
+CC = $(CCNODBG) $(RTLIB) $(CFLAGSSSL) $(CFLAGSZLIB) $(CFLAGSLIB)
+CFGSET = TRUE
+!ENDIF
+
+######################
+# release-dll-ssl-dll
+
+!IF "$(CFG)" == "release-dll-ssl-dll"
+TARGET = $(LIB_NAME).dll
+DIROBJ = $(CFG)
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll"
+LNK = $(LNKDLL) $(WINLIBS) $(SSLLIBS) $(LFLAGSSSL) /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(IMPLIB_NAME).lib
+CC = $(CCNODBG) $(RTLIB) $(CFLAGSSSL)
+CFGSET = TRUE
+RESOURCE = $(DIROBJ)\libcurl.res
+!ENDIF
+
+######################
+# release-zlib-dll
+
+!IF "$(CFG)" == "release-zlib-dll"
+TARGET = $(LIB_NAME).lib
+DIROBJ = $(CFG)
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"
+LNK = $(LNKLIB) $(WINLIBS) $(ZLIBLIBSDLL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)
+CC = $(CCNODBG) $(RTLIB) $(CFLAGSZLIB) $(CFLAGSLIB)
+CFGSET = TRUE
+!ENDIF
+
+######################
+# release-ssl-dll-zlib-dll
+
+!IF "$(CFG)" == "release-ssl-dll-zlib-dll"
+TARGET = $(LIB_NAME).lib
+DIROBJ = $(CFG)
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll"
+LNK = $(LNKLIB) $(WINLIBS) $(SSLLIBS) $(ZLIBLIBSDLL) $(LFLAGSSSL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)
+CC = $(CCNODBG) $(RTLIB) $(CFLAGSSSL) $(CFLAGSZLIB) $(CFLAGSLIB)
+CFGSET = TRUE
+!ENDIF
+
+######################
+# release-dll-zlib-dll
+
+!IF "$(CFG)" == "release-dll-zlib-dll"
+TARGET = $(LIB_NAME).dll
+DIROBJ = $(CFG)
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"
+LNK = $(LNKDLL) $(WINLIBS) $(ZLIBLIBSDLL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(IMPLIB_NAME).lib
+CC = $(CCNODBG) $(RTLIB) $(CFLAGSZLIB)
+CFGSET = TRUE
+RESOURCE = $(DIROBJ)\libcurl.res
+!ENDIF
+
+######################
+# release-dll-ssl-dll-zlib-dll
+
+!IF "$(CFG)" == "release-dll-ssl-dll-zlib-dll"
+TARGET = $(LIB_NAME).dll
+DIROBJ = $(CFG)
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll"
+LNK = $(LNKDLL) $(WINLIBS) $(SSLLIBS) $(ZLIBLIBSDLL) $(LFLAGSSSL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(IMPLIB_NAME).lib
+CC = $(CCNODBG) $(RTLIB) $(CFLAGSSSL) $(CFLAGSZLIB)
+CFGSET = TRUE
+RESOURCE = $(DIROBJ)\libcurl.res
+!ENDIF
+
+######################
+# debug
+
+!IF "$(CFG)" == "debug"
+TARGET = $(LIB_NAME_DEBUG).lib
+DIROBJ = $(CFG)
+LNK = $(LNKLIB) /out:$(DIROBJ)\$(TARGET)
+CC = $(CCDEBUG) $(RTLIBD) $(CFLAGSLIB)
+CFGSET = TRUE
+!ENDIF
+
+######################
+# debug-ssl
+
+!IF "$(CFG)" == "debug-ssl"
+TARGET = $(LIB_NAME_DEBUG).lib
+DIROBJ = $(CFG)
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32"
+LNK = $(LNKLIB) $(LFLAGSSSL) /out:$(DIROBJ)\$(TARGET)
+CC = $(CCDEBUG) $(RTLIBD) $(CFLAGSSSL) $(CFLAGSLIB)
+CFGSET = TRUE
+!ENDIF
+
+######################
+# debug-zlib
+
+!IF "$(CFG)" == "debug-zlib"
+TARGET = $(LIB_NAME_DEBUG).lib
+DIROBJ = $(CFG)
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"
+LNK = $(LNKLIB) $(ZLIBLIBS) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)
+CC = $(CCDEBUG) $(RTLIBD) $(CFLAGSZLIB) $(CFLAGSLIB)
+CFGSET = TRUE
+!ENDIF
+
+######################
+# debug-ssl-dll
+
+!IF "$(CFG)" == "debug-ssl-dll"
+TARGET = $(LIB_NAME_DEBUG).lib
+DIROBJ = $(CFG)
+LFLAGSSSL = /LIBPATH:$(OPENSSL_PATH)\out32dll
+LNK = $(LNKLIB) $(WINLIBS) $(SSLLIBS) $(LFLAGSSSL) /out:$(DIROBJ)\$(TARGET)
+CC = $(CCDEBUG) $(RTLIBD) $(CFLAGSSSL) $(CFLAGSLIB)
+CFGSET = TRUE
+!ENDIF
+
+######################
+# debug-ssl-zlib
+
+!IF "$(CFG)" == "debug-ssl-zlib"
+TARGET = $(LIB_NAME_DEBUG).lib
+DIROBJ = $(CFG)
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32"
+LNK = $(LNKLIB) $(ZLIBLIBS) $(LFLAGSSSL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)
+CC = $(CCDEBUG) $(RTLIBD) $(CFLAGSSSL) $(CFLAGSZLIB) $(CFLAGSLIB)
+CFGSET = TRUE
+!ENDIF
+
+######################
+# debug-zlib-dll
+
+!IF "$(CFG)" == "debug-zlib-dll"
+TARGET = $(LIB_NAME_DEBUG).lib
+DIROBJ = $(CFG)
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"
+LNK = $(LNKLIB) $(WINLIBS) $(ZLIBLIBSDLL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)
+CC = $(CCDEBUG) $(RTLIBD) $(CFLAGSZLIB) $(CFLAGSLIB)
+CFGSET = TRUE
+!ENDIF
+
+######################
+# debug-ssl-dll-zlib-dll
+
+!IF "$(CFG)" == "debug-ssl-dll-zlib-dll"
+TARGET = $(LIB_NAME_DEBUG).lib
+DIROBJ = $(CFG)
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll"
+LNK = $(LNKLIB) $(WINLIBS) $(SSLLIBS) $(ZLIBLIBSDLL) $(LFLAGSSSL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)
+CC = $(CCDEBUG) $(RTLIBD) $(CFLAGSSSL) $(CFLAGSZLIB) $(CFLAGSLIB)
+CFGSET = TRUE
+!ENDIF
+
+######################
+# debug-dll
+
+!IF "$(CFG)" == "debug-dll"
+TARGET = $(LIB_NAME_DEBUG).dll
+DIROBJ = $(CFG)
+LNK = $(LNKDLL) $(WINLIBS) /DEBUG /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(IMPLIB_NAME_DEBUG).lib /PDB:$(DIROBJ)\$(IMPLIB_NAME_DEBUG).pdb
+CC = $(CCDEBUG) $(RTLIBD)
+CFGSET = TRUE
+RESOURCE = $(DIROBJ)\libcurl.res
+!ENDIF
+
+######################
+# debug-dll-ssl-dll
+
+!IF "$(CFG)" == "debug-dll-ssl-dll"
+TARGET = $(LIB_NAME_DEBUG).dll
+DIROBJ = $(CFG)
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll"
+LNK = $(LNKDLL) $(WINLIBS) $(SSLLIBS) $(LFLAGSSSL) /DEBUG /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(IMPLIB_NAME_DEBUG).lib /PDB:$(DIROBJ)\$(IMPLIB_NAME_DEBUG).pdb
+CC = $(CCDEBUG) $(RTLIBD) $(CFLAGSSSL)
+CFGSET = TRUE
+RESOURCE = $(DIROBJ)\libcurl.res
+!ENDIF
+
+######################
+# debug-dll-zlib-dll
+
+!IF "$(CFG)" == "debug-dll-zlib-dll"
+TARGET = $(LIB_NAME_DEBUG).dll
+DIROBJ = $(CFG)
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"
+LNK = $(LNKDLL) $(WINLIBS) $(ZLIBLIBSDLL) $(LFLAGSZLIB) /DEBUG /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(IMPLIB_NAME_DEBUG).lib /PDB:$(DIROBJ)\$(IMPLIB_NAME_DEBUG).pdb
+CC = $(CCDEBUG) $(RTLIBD) $(CFLAGSZLIB)
+CFGSET = TRUE
+RESOURCE = $(DIROBJ)\libcurl.res
+!ENDIF
+
+######################
+# debug-dll-ssl-dll-zlib-dll
+
+!IF "$(CFG)" == "debug-dll-ssl-dll-zlib-dll"
+TARGET = $(LIB_NAME_DEBUG).dll
+DIROBJ = $(CFG)
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll"
+LNK = $(LNKDLL) $(WINLIBS) $(SSLLIBS) $(ZLIBLIBSDLL) $(LFLAGSSSL) $(LFLAGSZLIB) /DEBUG /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(IMPLIB_NAME_DEBUG).lib /PDB:$(DIROBJ)\$(IMPLIB_NAME_DEBUG).pdb
+CC = $(CCDEBUG) $(RTLIBD) $(CFLAGSSSL) $(CFLAGSZLIB)
+CFGSET = TRUE
+RESOURCE = $(DIROBJ)\libcurl.res
+!ENDIF
+
+#######################
+# Usage
+#
+!IF "$(CFGSET)" == "FALSE" && "$(CFG)" != ""
+!MESSAGE Usage: nmake /f makefile.vc6 CFG=<config> <target>
+!MESSAGE where <config> is one of:
+!MESSAGE release - release static library
+!MESSAGE release-ssl - release static library with ssl
+!MESSAGE release-zlib - release static library with zlib
+!MESSAGE release-ssl-zlib - release static library with ssl and zlib
+!MESSAGE release-ssl-dll - release static library with dynamic ssl
+!MESSAGE release-zlib-dll - release static library with dynamic zlib
+!MESSAGE release-ssl-dll-zlib-dll - release static library with dynamic ssl and dynamic zlib
+!MESSAGE release-dll - release dynamic library
+!MESSAGE release-dll-ssl-dll - release dynamic library with dynamic ssl
+!MESSAGE release-dll-zlib-dll - release dynamic library with dynamic zlib
+!MESSAGE release-dll-ssl-dll-zlib-dll - release dynamic library with dynamic ssl and dynamic zlib
+!MESSAGE debug - debug static library
+!MESSAGE debug-ssl - debug static library with ssl
+!MESSAGE debug-zlib - debug static library with zlib
+!MESSAGE debug-ssl-zlib - debug static library with ssl and zlib
+!MESSAGE debug-ssl-dll - debug static library with dynamic ssl
+!MESSAGE debug-zlib-dll - debug static library with dynamic zlib
+!MESSAGE debug-ssl-dll-zlib-dll - debug static library with dynamic ssl and dynamic zlib
+!MESSAGE debug-dll - debug dynamic library
+!MESSAGE debug-dll-ssl-dll - debug dynamic library with dynamic ssl
+!MESSAGE debug-dll-zlib-dll - debug dynamic library with dynamic zlib1
+!MESSAGE debug-dll-ssl-dll-zlib-dll - debug dynamic library with dynamic ssl and dynamic zlib
+!MESSAGE <target> can be left blank in which case all is assumed
+!ERROR please choose a valid configuration "$(CFG)"
+!ENDIF
+
+#######################
+# Only the clean target can be used if a config was not provided.
+#
+!IF "$(CFGSET)" == "FALSE"
+clean:
+ @-erase /s *.dll 2> NUL
+ @-erase /s *.exp 2> NUL
+ @-erase /s *.idb 2> NUL
+ @-erase /s *.lib 2> NUL
+ @-erase /s *.obj 2> NUL
+ @-erase /s *.pch 2> NUL
+ @-erase /s *.pdb 2> NUL
+ @-erase /s *.res 2> NUL
+!ELSE
+# A config was provided, so the library can be built.
+#
+X_OBJS= \
+ $(DIROBJ)\base64.obj \
+ $(DIROBJ)\connect.obj \
+ $(DIROBJ)\content_encoding.obj \
+ $(DIROBJ)\cookie.obj \
+ $(DIROBJ)\curl_addrinfo.obj \
+ $(DIROBJ)\curl_fnmatch.obj \
+ $(DIROBJ)\curl_gethostname.obj \
+ $(DIROBJ)\curl_memrchr.obj \
+ $(DIROBJ)\curl_rand.obj \
+ $(DIROBJ)\curl_rtmp.obj \
+ $(DIROBJ)\curl_sspi.obj \
+ $(DIROBJ)\curl_threads.obj \
+ $(DIROBJ)\dict.obj \
+ $(DIROBJ)\easy.obj \
+ $(DIROBJ)\escape.obj \
+ $(DIROBJ)\fileinfo.obj \
+ $(DIROBJ)\file.obj \
+ $(DIROBJ)\formdata.obj \
+ $(DIROBJ)\ftplistparser.obj \
+ $(DIROBJ)\ftp.obj \
+ $(DIROBJ)\getenv.obj \
+ $(DIROBJ)\getinfo.obj \
+ $(DIROBJ)\gtls.obj \
+ $(DIROBJ)\gopher.obj \
+ $(DIROBJ)\hash.obj \
+ $(DIROBJ)\hmac.obj \
+ $(DIROBJ)\hostares.obj \
+ $(DIROBJ)\hostasyn.obj \
+ $(DIROBJ)\hostip4.obj \
+ $(DIROBJ)\hostip6.obj \
+ $(DIROBJ)\hostip.obj \
+ $(DIROBJ)\hostsyn.obj \
+ $(DIROBJ)\hostthre.obj \
+ $(DIROBJ)\http_chunks.obj \
+ $(DIROBJ)\http_digest.obj \
+ $(DIROBJ)\http_negotiate.obj \
+ $(DIROBJ)\http_ntlm.obj \
+ $(DIROBJ)\http.obj \
+ $(DIROBJ)\if2ip.obj \
+ $(DIROBJ)\imap.obj \
+ $(DIROBJ)\inet_ntop.obj \
+ $(DIROBJ)\inet_pton.obj \
+ $(DIROBJ)\ldap.obj \
+ $(DIROBJ)\llist.obj \
+ $(DIROBJ)\md4.obj \
+ $(DIROBJ)\md5.obj \
+ $(DIROBJ)\memdebug.obj \
+ $(DIROBJ)\mprintf.obj \
+ $(DIROBJ)\multi.obj \
+ $(DIROBJ)\netrc.obj \
+ $(DIROBJ)\nonblock.obj \
+ $(DIROBJ)\openldap.obj \
+ $(DIROBJ)\parsedate.obj \
+ $(DIROBJ)\pingpong.obj \
+ $(DIROBJ)\polarssl.obj \
+ $(DIROBJ)\pop3.obj \
+ $(DIROBJ)\progress.obj \
+ $(DIROBJ)\rawstr.obj \
+ $(DIROBJ)\rtsp.obj \
+ $(DIROBJ)\select.obj \
+ $(DIROBJ)\sendf.obj \
+ $(DIROBJ)\share.obj \
+ $(DIROBJ)\slist.obj \
+ $(DIROBJ)\smtp.obj \
+ $(DIROBJ)\socks_gssapi.obj \
+ $(DIROBJ)\socks.obj \
+ $(DIROBJ)\socks_sspi.obj \
+ $(DIROBJ)\speedcheck.obj \
+ $(DIROBJ)\splay.obj \
+ $(DIROBJ)\ssh.obj \
+ $(DIROBJ)\sslgen.obj \
+ $(DIROBJ)\ssluse.obj \
+ $(DIROBJ)\strequal.obj \
+ $(DIROBJ)\strerror.obj \
+ $(DIROBJ)\strtok.obj \
+ $(DIROBJ)\strtoofft.obj \
+ $(DIROBJ)\telnet.obj \
+ $(DIROBJ)\tftp.obj \
+ $(DIROBJ)\timeval.obj \
+ $(DIROBJ)\transfer.obj \
+ $(DIROBJ)\url.obj \
+ $(DIROBJ)\version.obj \
+ $(DIROBJ)\warnless.obj \
+ $(DIROBJ)\wildcard.obj \
+ $(RESOURCE)
+
+all : $(TARGET)
+
+$(TARGET): $(X_OBJS)
+ $(LNK) $(LFLAGS) $(X_OBJS)
+ -xcopy $(DIROBJ)\$(LIB_NAME).dll . /y
+ -xcopy $(DIROBJ)\$(LIB_NAME).lib . /y
+ -xcopy $(DIROBJ)\$(LIB_NAME_DEBUG).dll . /y
+ -xcopy $(DIROBJ)\$(LIB_NAME_DEBUG).lib . /y
+ -xcopy $(DIROBJ)\$(IMPLIB_NAME).lib . /y
+ -xcopy $(DIROBJ)\$(IMPLIB_NAME_DEBUG).lib . /y
+ -xcopy $(DIROBJ)\*.exp . /y
+ -xcopy $(DIROBJ)\*.pdb . /y
+
+$(X_OBJS): $(DIROBJ)
+
+$(DIROBJ):
+ @if not exist "$(DIROBJ)" mkdir $(DIROBJ)
+
+.SUFFIXES: .c .obj .res
+
+{.\}.c{$(DIROBJ)\}.obj:
+ $(CC) $(CFLAGS) /Fo"$@" $<
+
+debug-dll\libcurl.res \
+debug-dll-ssl-dll\libcurl.res \
+debug-dll-zlib-dll\libcurl.res \
+debug-dll-ssl-dll-zlib-dll\libcurl.res: libcurl.rc
+ rc /dDEBUGBUILD=1 /Fo $@ libcurl.rc
+
+release-dll\libcurl.res \
+release-dll-ssl-dll\libcurl.res \
+release-dll-zlib-dll\libcurl.res \
+release-dll-ssl-dll-zlib-dll\libcurl.res: libcurl.rc
+ rc /dDEBUGBUILD=0 /Fo $@ libcurl.rc
+!ENDIF # End of case where a config was provided.
diff --git a/lib/Makefile.vc9 b/lib/Makefile.vc9
new file mode 100644
index 0000000..7d5eb2f
--- /dev/null
+++ b/lib/Makefile.vc9
@@ -0,0 +1,571 @@
+#***************************************************************************
+# _ _ ____ _
+# Project ___| | | | _ \| |
+# / __| | | | |_) | |
+# | (__| |_| | _ <| |___
+# \___|\___/|_| \_\_____|
+#
+# Copyright (C) 1999 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+#
+# This software is licensed as described in the file COPYING, which
+# you should have received as part of this distribution. The terms
+# are also available at http://curl.haxx.se/docs/copyright.html.
+#
+# You may opt to use, copy, modify, merge, publish, distribute and/or sell
+# copies of the Software, and permit persons to whom the Software is
+# furnished to do so, under the terms of the COPYING file.
+#
+# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+# KIND, either express or implied.
+#
+###########################################################################
+#
+# Makefile for building libcurl with MSVC9
+#
+# Usage: see usage message below
+# Should be invoked from \lib directory
+# Edit the paths and desired library name
+# SSL path is only required if you intend compiling
+# with SSL.
+#
+# This make file leaves the result either a .lib or .dll file
+# in the \lib directory. It should be called from the \lib
+# directory.
+#
+# An option would have been to allow the source directory to
+# be specified, but I saw no requirement.
+#
+# Another option would have been to leave the .lib and .dll
+# files in the "cfg" directory, but then the make file
+# in \src would need to be changed.
+#
+##############################################################
+
+#
+# Stem for static libs and DLLs
+#
+LIB_NAME = libcurl
+LIB_NAME_DEBUG = libcurld
+
+#
+# Stem for DLL import libs
+#
+IMPLIB_NAME = libcurl_imp
+IMPLIB_NAME_DEBUG = libcurld_imp
+
+!IFNDEF OPENSSL_PATH
+OPENSSL_PATH = ../../openssl-0.9.8o
+!ENDIF
+
+!IFNDEF ZLIB_PATH
+ZLIB_PATH = ../../zlib-1.2.5
+!ENDIF
+
+!IFNDEF MACHINE
+MACHINE = X86
+!ENDIF
+
+# USE_WINDOWS_SSPI uses windows libraries to allow NTLM authentication
+# without an openssl installation and offers the ability to authenticate
+# using the "current logged in user". Since at least with MSVC9 the sspi.h
+# header is broken it is either required to install the Windows SDK,
+# or to fix sspi.h with adding this define at the beginning of sspi.h:
+# #define FreeCredentialHandle FreeCredentialsHandle
+#
+# If, for some reason the Windows SDK is installed but not installed
+# in the default location, you can specify WINDOWS_SDK_PATH.
+# It can be downloaded from:
+# http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
+
+# WINDOWS_SSPI = 1
+
+!IFDEF WINDOWS_SSPI
+!IFNDEF WINDOWS_SDK_PATH
+WINDOWS_SDK_PATH = "C:\Program Files\Microsoft SDK"
+!ENDIF
+!ENDIF
+
+#############################################################
+## Nothing more to do below this line!
+
+CCNODBG = cl.exe /O2 /DNDEBUG
+CCDEBUG = cl.exe /Od /Gm /Zi /D_DEBUG /RTC1
+CFLAGSSSL = /DUSE_SSLEAY /I "$(OPENSSL_PATH)/inc32" /I "$(OPENSSL_PATH)/inc32/openssl"
+CFLAGSZLIB = /DHAVE_ZLIB_H /DHAVE_ZLIB /DHAVE_LIBZ /I "$(ZLIB_PATH)"
+CFLAGS = /I. /I../include /nologo /W3 /EHsc /DWIN32 /FD /c /DBUILDING_LIBCURL
+CFLAGSLIB = /DCURL_STATICLIB
+LNKDLL = link.exe /DLL
+LNKLIB = link.exe /lib
+LFLAGS = /nologo /machine:$(MACHINE)
+SSLLIBS = libeay32.lib ssleay32.lib
+ZLIBLIBSDLL= zdll.lib
+ZLIBLIBS = zlib.lib
+WINLIBS = ws2_32.lib wldap32.lib
+CFLAGS = $(CFLAGS)
+
+CFGSET = FALSE
+
+!IFDEF WINDOWS_SSPI
+CFLAGS = $(CFLAGS) /DUSE_WINDOWS_SSPI /I$(WINDOWS_SDK_PATH)\include
+!ENDIF
+
+!IFDEF USE_IPV6
+CFLAGS = $(CFLAGS) /DUSE_IPV6
+!ENDIF
+
+##############################################################
+# Runtime library configuration
+
+RTLIB = /MD
+RTLIBD = /MDd
+
+!IF "$(RTLIBCFG)" == "static"
+RTLIB = /MT
+RTLIBD = /MTd
+!ENDIF
+
+
+######################
+# release
+
+!IF "$(CFG)" == "release"
+TARGET = $(LIB_NAME).lib
+DIROBJ = $(CFG)
+LNK = $(LNKLIB) /out:$(DIROBJ)\$(TARGET)
+CC = $(CCNODBG) $(RTLIB) $(CFLAGSLIB)
+CFGSET = TRUE
+!ENDIF
+
+######################
+# release-zlib
+
+!IF "$(CFG)" == "release-zlib"
+TARGET = $(LIB_NAME).lib
+DIROBJ = $(CFG)
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"
+LNK = $(LNKLIB) $(ZLIBLIBS) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)
+CC = $(CCNODBG) $(RTLIB) $(CFLAGSZLIB) $(CFLAGSLIB)
+CFGSET = TRUE
+!ENDIF
+
+######################
+# release-dll
+
+!IF "$(CFG)" == "release-dll"
+TARGET = $(LIB_NAME).dll
+DIROBJ = $(CFG)
+LNK = $(LNKDLL) $(WINLIBS) /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(IMPLIB_NAME).lib
+CC = $(CCNODBG) $(RTLIB)
+CFGSET = TRUE
+RESOURCE = $(DIROBJ)\libcurl.res
+!ENDIF
+
+######################
+# release-ssl
+
+!IF "$(CFG)" == "release-ssl"
+TARGET = $(LIB_NAME).lib
+DIROBJ = $(CFG)
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32"
+LNK = $(LNKLIB) $(LFLAGSSSL) /out:$(DIROBJ)\$(TARGET)
+CC = $(CCNODBG) $(RTLIB) $(CFLAGSSSL) $(CFLAGSLIB)
+CFGSET = TRUE
+!ENDIF
+
+######################
+# release-ssl-dll
+
+!IF "$(CFG)" == "release-ssl-dll"
+TARGET = $(LIB_NAME).lib
+DIROBJ = $(CFG)
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll"
+LNK = $(LNKLIB) $(WINLIBS) $(SSLLIBS) $(LFLAGSSSL) /out:$(DIROBJ)\$(TARGET)
+CC = $(CCNODBG) $(RTLIB) $(CFLAGSSSL) $(CFLAGSLIB)
+CFGSET = TRUE
+!ENDIF
+
+######################
+# release-ssl-zlib
+
+!IF "$(CFG)" == "release-ssl-zlib"
+TARGET = $(LIB_NAME).lib
+DIROBJ = $(CFG)
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32"
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"
+LNK = $(LNKLIB) $(LFLAGSSSL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)
+CC = $(CCNODBG) $(RTLIB) $(CFLAGSSSL) $(CFLAGSZLIB) $(CFLAGSLIB)
+CFGSET = TRUE
+!ENDIF
+
+######################
+# release-dll-ssl-dll
+
+!IF "$(CFG)" == "release-dll-ssl-dll"
+TARGET = $(LIB_NAME).dll
+DIROBJ = $(CFG)
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll"
+LNK = $(LNKDLL) $(WINLIBS) $(SSLLIBS) $(LFLAGSSSL) /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(IMPLIB_NAME).lib
+CC = $(CCNODBG) $(RTLIB) $(CFLAGSSSL)
+CFGSET = TRUE
+RESOURCE = $(DIROBJ)\libcurl.res
+!ENDIF
+
+######################
+# release-zlib-dll
+
+!IF "$(CFG)" == "release-zlib-dll"
+TARGET = $(LIB_NAME).lib
+DIROBJ = $(CFG)
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"
+LNK = $(LNKLIB) $(WINLIBS) $(ZLIBLIBSDLL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)
+CC = $(CCNODBG) $(RTLIB) $(CFLAGSZLIB) $(CFLAGSLIB)
+CFGSET = TRUE
+!ENDIF
+
+######################
+# release-ssl-dll-zlib-dll
+
+!IF "$(CFG)" == "release-ssl-dll-zlib-dll"
+TARGET = $(LIB_NAME).lib
+DIROBJ = $(CFG)
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll"
+LNK = $(LNKLIB) $(WINLIBS) $(SSLLIBS) $(ZLIBLIBSDLL) $(LFLAGSSSL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)
+CC = $(CCNODBG) $(RTLIB) $(CFLAGSSSL) $(CFLAGSZLIB) $(CFLAGSLIB)
+CFGSET = TRUE
+!ENDIF
+
+######################
+# release-dll-zlib-dll
+
+!IF "$(CFG)" == "release-dll-zlib-dll"
+TARGET = $(LIB_NAME).dll
+DIROBJ = $(CFG)
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"
+LNK = $(LNKDLL) $(WINLIBS) $(ZLIBLIBSDLL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(IMPLIB_NAME).lib
+CC = $(CCNODBG) $(RTLIB) $(CFLAGSZLIB)
+CFGSET = TRUE
+RESOURCE = $(DIROBJ)\libcurl.res
+!ENDIF
+
+######################
+# release-dll-ssl-dll-zlib-dll
+
+!IF "$(CFG)" == "release-dll-ssl-dll-zlib-dll"
+TARGET = $(LIB_NAME).dll
+DIROBJ = $(CFG)
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll"
+LNK = $(LNKDLL) $(WINLIBS) $(SSLLIBS) $(ZLIBLIBSDLL) $(LFLAGSSSL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(IMPLIB_NAME).lib
+CC = $(CCNODBG) $(RTLIB) $(CFLAGSSSL) $(CFLAGSZLIB)
+CFGSET = TRUE
+RESOURCE = $(DIROBJ)\libcurl.res
+!ENDIF
+
+######################
+# debug
+
+!IF "$(CFG)" == "debug"
+TARGET = $(LIB_NAME_DEBUG).lib
+DIROBJ = $(CFG)
+LNK = $(LNKLIB) /out:$(DIROBJ)\$(TARGET)
+CC = $(CCDEBUG) $(RTLIBD) $(CFLAGSLIB)
+CFGSET = TRUE
+!ENDIF
+
+######################
+# debug-ssl
+
+!IF "$(CFG)" == "debug-ssl"
+TARGET = $(LIB_NAME_DEBUG).lib
+DIROBJ = $(CFG)
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32"
+LNK = $(LNKLIB) $(LFLAGSSSL) /out:$(DIROBJ)\$(TARGET)
+CC = $(CCDEBUG) $(RTLIBD) $(CFLAGSSSL) $(CFLAGSLIB)
+CFGSET = TRUE
+!ENDIF
+
+######################
+# debug-zlib
+
+!IF "$(CFG)" == "debug-zlib"
+TARGET = $(LIB_NAME_DEBUG).lib
+DIROBJ = $(CFG)
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"
+LNK = $(LNKLIB) $(ZLIBLIBS) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)
+CC = $(CCDEBUG) $(RTLIBD) $(CFLAGSZLIB) $(CFLAGSLIB)
+CFGSET = TRUE
+!ENDIF
+
+######################
+# debug-ssl-dll
+
+!IF "$(CFG)" == "debug-ssl-dll"
+TARGET = $(LIB_NAME_DEBUG).lib
+DIROBJ = $(CFG)
+LFLAGSSSL = /LIBPATH:$(OPENSSL_PATH)\out32dll
+LNK = $(LNKLIB) $(WINLIBS) $(SSLLIBS) $(LFLAGSSSL) /out:$(DIROBJ)\$(TARGET)
+CC = $(CCDEBUG) $(RTLIBD) $(CFLAGSSSL) $(CFLAGSLIB)
+CFGSET = TRUE
+!ENDIF
+
+######################
+# debug-ssl-zlib
+
+!IF "$(CFG)" == "debug-ssl-zlib"
+TARGET = $(LIB_NAME_DEBUG).lib
+DIROBJ = $(CFG)
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32"
+LNK = $(LNKLIB) $(ZLIBLIBS) $(LFLAGSSSL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)
+CC = $(CCDEBUG) $(RTLIBD) $(CFLAGSSSL) $(CFLAGSZLIB) $(CFLAGSLIB)
+CFGSET = TRUE
+!ENDIF
+
+######################
+# debug-zlib-dll
+
+!IF "$(CFG)" == "debug-zlib-dll"
+TARGET = $(LIB_NAME_DEBUG).lib
+DIROBJ = $(CFG)
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"
+LNK = $(LNKLIB) $(WINLIBS) $(ZLIBLIBSDLL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)
+CC = $(CCDEBUG) $(RTLIBD) $(CFLAGSZLIB) $(CFLAGSLIB)
+CFGSET = TRUE
+!ENDIF
+
+######################
+# debug-ssl-dll-zlib-dll
+
+!IF "$(CFG)" == "debug-ssl-dll-zlib-dll"
+TARGET = $(LIB_NAME_DEBUG).lib
+DIROBJ = $(CFG)
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll"
+LNK = $(LNKLIB) $(WINLIBS) $(SSLLIBS) $(ZLIBLIBSDLL) $(LFLAGSSSL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)
+CC = $(CCDEBUG) $(RTLIBD) $(CFLAGSSSL) $(CFLAGSZLIB) $(CFLAGSLIB)
+CFGSET = TRUE
+!ENDIF
+
+######################
+# debug-dll
+
+!IF "$(CFG)" == "debug-dll"
+TARGET = $(LIB_NAME_DEBUG).dll
+DIROBJ = $(CFG)
+LNK = $(LNKDLL) $(WINLIBS) /DEBUG /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(IMPLIB_NAME_DEBUG).lib /PDB:$(DIROBJ)\$(IMPLIB_NAME_DEBUG).pdb
+CC = $(CCDEBUG) $(RTLIBD)
+CFGSET = TRUE
+RESOURCE = $(DIROBJ)\libcurl.res
+!ENDIF
+
+######################
+# debug-dll-ssl-dll
+
+!IF "$(CFG)" == "debug-dll-ssl-dll"
+TARGET = $(LIB_NAME_DEBUG).dll
+DIROBJ = $(CFG)
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll"
+LNK = $(LNKDLL) $(WINLIBS) $(SSLLIBS) $(LFLAGSSSL) /DEBUG /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(IMPLIB_NAME_DEBUG).lib /PDB:$(DIROBJ)\$(IMPLIB_NAME_DEBUG).pdb
+CC = $(CCDEBUG) $(RTLIBD) $(CFLAGSSSL)
+CFGSET = TRUE
+RESOURCE = $(DIROBJ)\libcurl.res
+!ENDIF
+
+######################
+# debug-dll-zlib-dll
+
+!IF "$(CFG)" == "debug-dll-zlib-dll"
+TARGET = $(LIB_NAME_DEBUG).dll
+DIROBJ = $(CFG)
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"
+LNK = $(LNKDLL) $(WINLIBS) $(ZLIBLIBSDLL) $(LFLAGSZLIB) /DEBUG /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(IMPLIB_NAME_DEBUG).lib /PDB:$(DIROBJ)\$(IMPLIB_NAME_DEBUG).pdb
+CC = $(CCDEBUG) $(RTLIBD) $(CFLAGSZLIB)
+CFGSET = TRUE
+RESOURCE = $(DIROBJ)\libcurl.res
+!ENDIF
+
+######################
+# debug-dll-ssl-dll-zlib-dll
+
+!IF "$(CFG)" == "debug-dll-ssl-dll-zlib-dll"
+TARGET = $(LIB_NAME_DEBUG).dll
+DIROBJ = $(CFG)
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll"
+LNK = $(LNKDLL) $(WINLIBS) $(SSLLIBS) $(ZLIBLIBSDLL) $(LFLAGSSSL) $(LFLAGSZLIB) /DEBUG /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(IMPLIB_NAME_DEBUG).lib /PDB:$(DIROBJ)\$(IMPLIB_NAME_DEBUG).pdb
+CC = $(CCDEBUG) $(RTLIBD) $(CFLAGSSSL) $(CFLAGSZLIB)
+CFGSET = TRUE
+RESOURCE = $(DIROBJ)\libcurl.res
+!ENDIF
+
+#######################
+# Usage
+#
+!IF "$(CFGSET)" == "FALSE" && "$(CFG)" != ""
+!MESSAGE Usage: nmake /f makefile.vc9 CFG=<config> <target>
+!MESSAGE where <config> is one of:
+!MESSAGE release - release static library
+!MESSAGE release-ssl - release static library with ssl
+!MESSAGE release-zlib - release static library with zlib
+!MESSAGE release-ssl-zlib - release static library with ssl and zlib
+!MESSAGE release-ssl-dll - release static library with dynamic ssl
+!MESSAGE release-zlib-dll - release static library with dynamic zlib
+!MESSAGE release-ssl-dll-zlib-dll - release static library with dynamic ssl and dynamic zlib
+!MESSAGE release-dll - release dynamic library
+!MESSAGE release-dll-ssl-dll - release dynamic library with dynamic ssl
+!MESSAGE release-dll-zlib-dll - release dynamic library with dynamic zlib
+!MESSAGE release-dll-ssl-dll-zlib-dll - release dynamic library with dynamic ssl and dynamic zlib
+!MESSAGE debug - debug static library
+!MESSAGE debug-ssl - debug static library with ssl
+!MESSAGE debug-zlib - debug static library with zlib
+!MESSAGE debug-ssl-zlib - debug static library with ssl and zlib
+!MESSAGE debug-ssl-dll - debug static library with dynamic ssl
+!MESSAGE debug-zlib-dll - debug static library with dynamic zlib
+!MESSAGE debug-ssl-dll-zlib-dll - debug static library with dynamic ssl and dynamic zlib
+!MESSAGE debug-dll - debug dynamic library
+!MESSAGE debug-dll-ssl-dll - debug dynamic library with dynamic ssl
+!MESSAGE debug-dll-zlib-dll - debug dynamic library with dynamic zlib1
+!MESSAGE debug-dll-ssl-dll-zlib-dll - debug dynamic library with dynamic ssl and dynamic zlib
+!MESSAGE <target> can be left blank in which case all is assumed
+!ERROR please choose a valid configuration "$(CFG)"
+!ENDIF
+
+#######################
+# Only the clean target can be used if a config was not provided.
+#
+!IF "$(CFGSET)" == "FALSE"
+clean:
+ @-erase /s *.dll 2> NUL
+ @-erase /s *.exp 2> NUL
+ @-erase /s *.idb 2> NUL
+ @-erase /s *.lib 2> NUL
+ @-erase /s *.obj 2> NUL
+ @-erase /s *.pch 2> NUL
+ @-erase /s *.pdb 2> NUL
+ @-erase /s *.res 2> NUL
+!ELSE
+# A config was provided, so the library can be built.
+#
+X_OBJS= \
+ $(DIROBJ)\base64.obj \
+ $(DIROBJ)\connect.obj \
+ $(DIROBJ)\content_encoding.obj \
+ $(DIROBJ)\cookie.obj \
+ $(DIROBJ)\curl_addrinfo.obj \
+ $(DIROBJ)\curl_fnmatch.obj \
+ $(DIROBJ)\curl_gethostname.obj \
+ $(DIROBJ)\curl_memrchr.obj \
+ $(DIROBJ)\curl_rand.obj \
+ $(DIROBJ)\curl_rtmp.obj \
+ $(DIROBJ)\curl_sspi.obj \
+ $(DIROBJ)\curl_threads.obj \
+ $(DIROBJ)\dict.obj \
+ $(DIROBJ)\easy.obj \
+ $(DIROBJ)\escape.obj \
+ $(DIROBJ)\fileinfo.obj \
+ $(DIROBJ)\file.obj \
+ $(DIROBJ)\formdata.obj \
+ $(DIROBJ)\ftplistparser.obj \
+ $(DIROBJ)\ftp.obj \
+ $(DIROBJ)\getenv.obj \
+ $(DIROBJ)\getinfo.obj \
+ $(DIROBJ)\gtls.obj \
+ $(DIROBJ)\gopher.obj \
+ $(DIROBJ)\hash.obj \
+ $(DIROBJ)\hmac.obj \
+ $(DIROBJ)\hostares.obj \
+ $(DIROBJ)\hostasyn.obj \
+ $(DIROBJ)\hostip4.obj \
+ $(DIROBJ)\hostip6.obj \
+ $(DIROBJ)\hostip.obj \
+ $(DIROBJ)\hostsyn.obj \
+ $(DIROBJ)\hostthre.obj \
+ $(DIROBJ)\http_chunks.obj \
+ $(DIROBJ)\http_digest.obj \
+ $(DIROBJ)\http_negotiate.obj \
+ $(DIROBJ)\http_ntlm.obj \
+ $(DIROBJ)\http.obj \
+ $(DIROBJ)\if2ip.obj \
+ $(DIROBJ)\imap.obj \
+ $(DIROBJ)\inet_ntop.obj \
+ $(DIROBJ)\inet_pton.obj \
+ $(DIROBJ)\ldap.obj \
+ $(DIROBJ)\llist.obj \
+ $(DIROBJ)\md4.obj \
+ $(DIROBJ)\md5.obj \
+ $(DIROBJ)\memdebug.obj \
+ $(DIROBJ)\mprintf.obj \
+ $(DIROBJ)\multi.obj \
+ $(DIROBJ)\netrc.obj \
+ $(DIROBJ)\nonblock.obj \
+ $(DIROBJ)\openldap.obj \
+ $(DIROBJ)\parsedate.obj \
+ $(DIROBJ)\pingpong.obj \
+ $(DIROBJ)\polarssl.obj \
+ $(DIROBJ)\pop3.obj \
+ $(DIROBJ)\progress.obj \
+ $(DIROBJ)\rawstr.obj \
+ $(DIROBJ)\rtsp.obj \
+ $(DIROBJ)\select.obj \
+ $(DIROBJ)\sendf.obj \
+ $(DIROBJ)\share.obj \
+ $(DIROBJ)\slist.obj \
+ $(DIROBJ)\smtp.obj \
+ $(DIROBJ)\socks_gssapi.obj \
+ $(DIROBJ)\socks.obj \
+ $(DIROBJ)\socks_sspi.obj \
+ $(DIROBJ)\speedcheck.obj \
+ $(DIROBJ)\splay.obj \
+ $(DIROBJ)\ssh.obj \
+ $(DIROBJ)\sslgen.obj \
+ $(DIROBJ)\ssluse.obj \
+ $(DIROBJ)\strequal.obj \
+ $(DIROBJ)\strerror.obj \
+ $(DIROBJ)\strtok.obj \
+ $(DIROBJ)\strtoofft.obj \
+ $(DIROBJ)\telnet.obj \
+ $(DIROBJ)\tftp.obj \
+ $(DIROBJ)\timeval.obj \
+ $(DIROBJ)\transfer.obj \
+ $(DIROBJ)\url.obj \
+ $(DIROBJ)\version.obj \
+ $(DIROBJ)\warnless.obj \
+ $(DIROBJ)\wildcard.obj \
+ $(RESOURCE)
+
+all : $(TARGET)
+
+$(TARGET): $(X_OBJS)
+ $(LNK) $(LFLAGS) $(X_OBJS)
+ -xcopy $(DIROBJ)\$(LIB_NAME).dll . /y
+ -xcopy $(DIROBJ)\$(LIB_NAME).lib . /y
+ -xcopy $(DIROBJ)\$(LIB_NAME_DEBUG).dll . /y
+ -xcopy $(DIROBJ)\$(LIB_NAME_DEBUG).lib . /y
+ -xcopy $(DIROBJ)\$(IMPLIB_NAME).lib . /y
+ -xcopy $(DIROBJ)\$(IMPLIB_NAME_DEBUG).lib . /y
+ -xcopy $(DIROBJ)\*.exp . /y
+ -xcopy $(DIROBJ)\*.pdb . /y
+
+$(X_OBJS): $(DIROBJ)
+
+$(DIROBJ):
+ @if not exist "$(DIROBJ)" mkdir $(DIROBJ)
+
+.SUFFIXES: .c .obj .res
+
+{.\}.c{$(DIROBJ)\}.obj:
+ $(CC) $(CFLAGS) /Fo"$@" $<
+
+debug-dll\libcurl.res \
+debug-dll-ssl-dll\libcurl.res \
+debug-dll-zlib-dll\libcurl.res \
+debug-dll-ssl-dll-zlib-dll\libcurl.res: libcurl.rc
+ rc /dDEBUGBUILD=1 /Fo $@ libcurl.rc
+
+release-dll\libcurl.res \
+release-dll-ssl-dll\libcurl.res \
+release-dll-zlib-dll\libcurl.res \
+release-dll-ssl-dll-zlib-dll\libcurl.res: libcurl.rc
+ rc /dDEBUGBUILD=0 /Fo $@ libcurl.rc
+!ENDIF # End of case where a config was provided.
diff --git a/lib/Makefile.vxworks b/lib/Makefile.vxworks
new file mode 100644
index 0000000..796d160
--- /dev/null
+++ b/lib/Makefile.vxworks
@@ -0,0 +1,177 @@
+#*****************************************************************************
+#
+#
+#Filename : Makefile.vxworks
+#Description: makefile to be used in order to compile libcurl for VxWoorks 6.3.
+#
+#How to use:
+# 1. Adjust environment variables at the file begining
+# 2. Open the Command Prompt window and change directory ('cd')
+# into the 'lib' folder
+# 3. Add <CYGWIN>/bin folder to the PATH environment variable
+# For example type 'set PATH=C:/embedded/cygwin/bin;%PATH%'
+# 4. Build the library by typing 'make -f ./Makefile.vxworks'
+# As a result the libcurl.a should be created in the 'lib' folder.
+# To clean package use 'make -f ./Makefile.vxworks clean'
+#Requirements:
+# 1. WinXP machine
+# 2. Full CYGWIN installation (open source) with GNU make version
+# v3.78 or higher
+# 3. WindRiver Workbench with vxWorks 6.3 (commercial)
+#*****************************************************************************
+
+# ----------------------------------------------------------------------
+# Environment
+# ----------------------------------------------------------------------
+
+export WIND_HOME := C:/embedded/Workbench2.5.0.1
+export WIND_BASE := $(WIND_HOME)/vxworks-6.3
+export WIND_HOST_TYPE := x86-win32
+
+# BUILD_TYE:= <debug>|<release> (build with debugging info or optimized)
+BUILD_TYPE := debug
+USER_CFLAGS:=
+
+# directories where to seek for includes and libraries
+OPENSSL_INC := D:/libraries/openssl/openssl-0.9.8a-vxWorks6.3/include
+OPENSSL_LIB := D:/libraries/openssl/openssl-0.9.8a-vxWorks6.3
+ZLIB_INC := D:/libraries/zlib/zlib-1.2.3-VxWorks6.3/zlib-1.2.3
+ZLIB_LIB := D:/libraries/zlib/zlib-1.2.3-VxWorks6.3/binaries/vxworks_3.1_gnu/Debug/lib
+ARES_INC :=
+ARES_LIB :=
+
+
+# ----------------------------------------------------------------------
+# Compiler
+# ----------------------------------------------------------------------
+
+CC := ccppc
+AR := arppc
+LINK := ccppc
+CFLAGS := -D__GNUC__ -D__ppc__ -msoft-float -fno-builtin -mcpu=604 -mlongcall -DCPU=PPC604 -D_GNU_TOOL -Wall -W -Winline $(USER_CFLAGS)
+LDFLAGS := -nostdlib -Wl,-i -Wl,-X
+INCLUDE_FLAG := -I
+C_DEBUGFLAG := -g
+C_OPTFLAG := -O2
+COMPILE_ONLY_FLAG := -c
+OBJ_EXTENSION := .o
+CC_OBJ_OUTPUT = -o $@
+ARFLAGS := -rc
+LIBS_FLAG := -l
+LIBS_DIRFLAG:= -L
+LD_DEBUGFLAG := $(C_DEBUGFLAG)
+EXECUTE_EXTENSION := .out
+TOOL_CHAIN_BIN := $(WIND_HOME)/gnu/3.4.4-vxworks-6.3/$(WIND_HOST_TYPE)/bin/
+
+# ----------------------------------------------------------------------
+
+# Add -DINET6 if the OS kernel image was built with IPv6 support
+# CFLAGS += -DINET6
+
+# Set up compiler and linker flags for debug or optimization
+ifeq ($(BUILD_TYPE), debug)
+CFLAGS += $(C_DEBUGFLAG)
+LDFLAGS += $(LD_DEBUGFLAG)
+else
+CFLAGS += $(C_OPTFLAG)
+endif
+
+# ----------------------------------------------------------------------
+
+# Main Makefile and possible sub-make files
+MAKEFILES := Makefile.vxworks
+
+# List of external include directories
+#-----
+# IMPORTANT: include OPENSSL directories before system
+# in order to prevent WindRiver OpenSSL to be used.
+#-----
+INCLUDE_DIRS := ../include $(OPENSSL_INC) $(ZLIB_INC) $(ARES_INC) $(WIND_BASE)/target/h $(WIND_BASE)/target/h/wrn/coreip
+
+# List of external libraries and their directories
+LIBS_LIST := .
+LIB_DIRS := .
+ifneq ($(OPENSSL_LIB), )
+LIBS_LIST += crypto ssl
+LIB_DIRS += $(OPENSSL_LIB)
+endif
+ifneq ($(ZLIB_LIB), )
+LIBS_LIST += z
+LIB_DIRS += $(ZLIB_LIB)
+endif
+ifneq ($(ARES_LIB), )
+LIBS_LIST += ares
+LIB_DIRS += $(ARES_LIB)
+endif
+
+# Add include and library directories and libraries
+CFLAGS += $(INCLUDE_DIRS:%=$(INCLUDE_FLAG)%)
+LDFLAGS += $(LIB_DIRS:%=$(LIBS_DIRFLAG)%)
+
+# List of targets to make for libs target
+LIBS_TARGET_LIST := libcurl.a
+
+# List of execuatble applications to make in addition to libs for all target
+EXE_TARGET_LIST :=
+
+# Support for echoing rules
+# If ECHORULES variable was set (for example, using 'make' command line)
+# some shell commands in the rules will be echoed
+ifneq ($(strip $(findstring $(ECHORULES), yes YES 1 true TRUE)),)
+_@_ :=
+else
+_@_ := @
+endif
+
+# Directory to hold compilation intermediate files
+TMP_DIR := tmp
+
+# Get sources and headers to be compiled
+include Makefile.inc
+
+# List of headers
+INCLUDE_FILES := $(HHEADERS)
+INCLUDE_FILES += $(shell find ../include -name \*.h)
+
+# List of sources
+OBJLIST := $(CSOURCES:%.c=$(TMP_DIR)/%$(OBJ_EXTENSION))
+
+
+# ----------------------------------------------------------------------
+
+#### default rule
+# It should be first rule in this file
+.PHONY: default
+default: libcurl.a
+
+#### Compiling C files
+$(TMP_DIR)/%$(OBJ_EXTENSION): %.c $(MAKEFILES)
+ @echo Compiling C file $< $(ECHO_STDOUT)
+ @[ -d $(@D) ] || mkdir -p $(@D)
+ $(_@_) $(TOOL_CHAIN_BIN)$(CC) $(COMPILE_ONLY_FLAG) $(CFLAGS) $< $(CC_OBJ_OUTPUT)
+
+#### Creating library
+$(LIBS_TARGET_LIST): $(INCLUDE_FILES) $(MAKEFILES) $(OBJLIST)
+ @echo Creating library $@ $(ECHO_STDOUT)
+ $(_@_) [ -d $(@D) ] || mkdir -p $(@D)
+ $(_@_) rm -f $@
+ $(_@_) $(TOOL_CHAIN_BIN)$(AR) $(ARFLAGS) $@ $(filter %$(OBJ_EXTENSION), $^)
+
+#### Creating application
+$(EXE_TARGET_LIST): $(INCLUDE_FILES) $(MAKEFILES) $(LIBS_TARGET_LIST)
+ @echo Creating application $@
+ @[ -d $(@D) ] || mkdir -p $(@D)
+ $(_@_) $(TOOL_CHAIN_BIN)$(LINK) $(CC_OBJ_OUTPUT) $($(@)_EXE_OBJ_LIST) $(LDFLAGS) $($(@)_EXE_LIBS_NEEDED:%=$(LIBS_FLAG)%) $(LIBS_LIST:%=$(LIBS_FLAG)%) $(USER_LIBS_LIST) $(USER_LIBS_LIST)
+
+#### Master Targets
+libs: $(LIBS_TARGET_LIST)
+ @echo All libs made.
+
+all: $(LIBS_TARGET_LIST) $(EXE_TARGET_LIST) $(INCLUDE_TARGET_LIST)
+ @echo All targets made.
+
+# Clean up
+.PHONY: clean
+clean:
+ $(_@_) rm -rf $(TMP_DIR)
+ @echo libcurl was cleaned.
diff --git a/lib/NOTICE b/lib/NOTICE
deleted file mode 100644
index 163b299..0000000
--- a/lib/NOTICE
+++ /dev/null
@@ -1,21 +0,0 @@
-COPYRIGHT AND PERMISSION NOTICE
-
-Copyright (c) 1996 - 2010, Daniel Stenberg, <daniel@haxx.se>.
-
-All rights reserved.
-
-Permission to use, copy, modify, and distribute this software for any purpose
-with or without fee is hereby granted, provided that the above copyright
-notice and this permission notice appear in all copies.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN
-NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
-OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of a copyright holder shall not
-be used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization of the copyright holder.
diff --git a/lib/README.ares b/lib/README.ares
index d3ee24b..8c77937 100644
--- a/lib/README.ares
+++ b/lib/README.ares
@@ -11,7 +11,7 @@ c-ares:
http://c-ares.haxx.se/
NOTE
- The latest libcurl version requires c-ares 1.4.0 or later.
+ The latest libcurl version requires c-ares 1.6.0 or later.
Once upon the time libcurl built fine with the "original" ares. That is no
longer true. You need to use c-ares.
diff --git a/lib/config-amigaos.h b/lib/config-amigaos.h
new file mode 100644
index 0000000..a9fd567
--- /dev/null
+++ b/lib/config-amigaos.h
@@ -0,0 +1,151 @@
+#ifndef LIBCURL_CONFIG_AMIGAOS_H
+#define LIBCURL_CONFIG_AMIGAOS_H
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at http://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ***************************************************************************/
+
+#ifdef __AMIGA__ /* Any AmigaOS flavour */
+
+#define HAVE_ARPA_INET_H 1
+#define HAVE_CLOSESOCKET_CAMEL 1
+#define HAVE_GETHOSTBYADDR 1
+#define HAVE_INET_ADDR 1
+#define HAVE_INTTYPES_H 1
+#define HAVE_IOCTLSOCKET_CAMEL 1
+#define HAVE_IOCTLSOCKET_CAMEL_FIONBIO 1
+#define HAVE_LIBCRYPTO 1
+#define HAVE_LIBSSL 1
+#define HAVE_LIBZ 1
+#define HAVE_LONGLONG 1
+#define HAVE_MALLOC_H 1
+#define HAVE_MEMORY_H 1
+#define HAVE_NETDB_H 1
+#define HAVE_NETINET_IN_H 1
+#define HAVE_NET_IF_H 1
+#define HAVE_OPENSSL_CRYPTO_H 1
+#define HAVE_OPENSSL_ERR_H 1
+#define HAVE_OPENSSL_PEM_H 1
+#define HAVE_OPENSSL_RSA_H 1
+#define HAVE_OPENSSL_SSL_H 1
+#define HAVE_OPENSSL_X509_H 1
+#define HAVE_PERROR 1
+#define HAVE_PWD_H 1
+#define HAVE_RAND_EGD 1
+#define HAVE_RAND_STATUS 1
+#define HAVE_SELECT 1
+#define HAVE_SETJMP_H 1
+#define HAVE_SGTTY_H 1
+#define HAVE_SIGNAL 1
+#define HAVE_SIGNAL_H 1
+#define HAVE_SIG_ATOMIC_T 1
+#define HAVE_SOCKET 1
+#define HAVE_STRCASECMP 1
+#define HAVE_STRDUP 1
+#define HAVE_STRFTIME 1
+#define HAVE_STRICMP 1
+#define HAVE_STRINGS_H 1
+#define HAVE_STRING_H 1
+#define HAVE_STRSTR 1
+#define HAVE_STRUCT_TIMEVAL 1
+#define HAVE_SYS_PARAM_H 1
+#define HAVE_SYS_SOCKET_H 1
+#define HAVE_SYS_SOCKIO_H 1
+#define HAVE_SYS_STAT_H 1
+#define HAVE_SYS_TIME_H 1
+#define HAVE_SYS_TYPES_H 1
+#define HAVE_TERMIOS_H 1
+#define HAVE_TERMIO_H 1
+#define HAVE_TIME_H 1
+#define HAVE_UNAME 1
+#define HAVE_UNISTD_H 1
+#define HAVE_UTIME 1
+#define HAVE_UTIME_H 1
+#define HAVE_WRITABLE_ARGV 1
+#define HAVE_ZLIB_H 1
+#define HAVE_SYS_IOCTL_H 1
+
+#define NEED_MALLOC_H 1
+
+#define SIZEOF_INT 4
+#define SIZEOF_SHORT 2
+
+#define USE_OPENSSL 1
+#define USE_SSLEAY 1
+#define CURL_DISABLE_LDAP 1
+
+
+#define OS "AmigaOS"
+
+#define PACKAGE "curl"
+#define PACKAGE_BUGREPORT "curl-bug@haxx.se"
+#define PACKAGE_NAME "curl"
+#define PACKAGE_STRING "curl -"
+#define PACKAGE_TARNAME "curl"
+#define PACKAGE_VERSION "-"
+#define CURL_CA_BUNDLE "s:curl-ca-bundle.crt"
+
+#define RETSIGTYPE void
+#define SELECT_TYPE_ARG1 int
+#define SELECT_TYPE_ARG234 (fd_set *)
+#define SELECT_TYPE_ARG5 (struct timeval *)
+
+#define STDC_HEADERS 1
+#define TIME_WITH_SYS_TIME 1
+
+#define in_addr_t int
+
+#ifndef O_RDONLY
+# define O_RDONLY 0x0000
+#endif
+
+#define HAVE_GETNAMEINFO 1
+#define GETNAMEINFO_QUAL_ARG1 const
+#define GETNAMEINFO_TYPE_ARG1 struct sockaddr *
+#define GETNAMEINFO_TYPE_ARG2 int
+#define GETNAMEINFO_TYPE_ARG46 size_t
+#define GETNAMEINFO_TYPE_ARG7 int
+
+#define HAVE_RECV 1
+#define RECV_TYPE_ARG1 long
+#define RECV_TYPE_ARG2 char *
+#define RECV_TYPE_ARG3 long
+#define RECV_TYPE_ARG4 long
+#define RECV_TYPE_RETV long
+
+#define HAVE_RECVFROM 1
+#define RECVFROM_TYPE_ARG1 long
+#define RECVFROM_TYPE_ARG2 char
+#define RECVFROM_TYPE_ARG3 long
+#define RECVFROM_TYPE_ARG4 long
+#define RECVFROM_TYPE_ARG5 struct sockaddr
+#define RECVFROM_TYPE_ARG6 long
+#define RECVFROM_TYPE_RETV long
+
+#define HAVE_SEND 1
+#define SEND_TYPE_ARG1 int
+#define SEND_QUAL_ARG2 const
+#define SEND_TYPE_ARG2 char *
+#define SEND_TYPE_ARG3 int
+#define SEND_TYPE_ARG4 int
+#define SEND_TYPE_RETV int
+
+#endif /* __AMIGA__ */
+#endif /* LIBCURL_CONFIG_AMIGAOS_H */
diff --git a/lib/config-mac.h b/lib/config-mac.h
new file mode 100644
index 0000000..740f1d9
--- /dev/null
+++ b/lib/config-mac.h
@@ -0,0 +1,100 @@
+#ifndef __LIB_CONFIG_MAC_H
+#define __LIB_CONFIG_MAC_H
+
+/* =================================================================== */
+/* lib/config-mac.h - Hand crafted config file for Mac OS 9 */
+/* =================================================================== */
+/* On Mac OS X you must run configure to generate curl_config.h file */
+/* =================================================================== */
+
+#define OS "mac"
+
+#define HAVE_NETINET_IN_H 1
+#define HAVE_SYS_SOCKET_H 1
+#define HAVE_SYS_SELECT_H 1
+#define HAVE_NETDB_H 1
+#define HAVE_ARPA_INET_H 1
+#define HAVE_UNISTD_H 1
+#define HAVE_NET_IF_H 1
+#define HAVE_SYS_TYPES_H 1
+#define HAVE_GETTIMEOFDAY 1
+#define HAVE_FCNTL_H 1
+#define HAVE_SYS_STAT_H 1
+#define HAVE_ALLOCA_H 1
+#define HAVE_TIME_H 1
+#define HAVE_STDLIB_H 1
+#define HAVE_UTIME_H 1
+#define HAVE_SYS_TIME_H 1
+
+#define TIME_WITH_SYS_TIME 1
+
+#define HAVE_ALARM 1
+#define HAVE_STRDUP 1
+#define HAVE_UTIME 1
+#define HAVE_SETVBUF 1
+#define HAVE_STRFTIME 1
+#define HAVE_INET_ADDR 1
+#define HAVE_MEMCPY 1
+#define HAVE_SELECT 1
+#define HAVE_SOCKET 1
+#define HAVE_STRUCT_TIMEVAL 1
+
+//#define HAVE_STRICMP 1
+#define HAVE_SIGACTION 1
+#define HAVE_SIGNAL_H 1
+#define HAVE_SIG_ATOMIC_T 1
+
+#ifdef MACOS_SSL_SUPPORT
+# define USE_SSLEAY 1
+# define USE_OPENSSL 1
+#endif
+
+#define CURL_DISABLE_LDAP 1
+
+#define HAVE_RAND_STATUS 1
+#define HAVE_RAND_EGD 1
+
+#define HAVE_IOCTL 1
+#define HAVE_IOCTL_FIONBIO 1
+
+#define RETSIGTYPE void
+
+#define SIZEOF_INT 4
+#define SIZEOF_SHORT 2
+
+#define HAVE_GETNAMEINFO 1
+#define GETNAMEINFO_QUAL_ARG1 const
+#define GETNAMEINFO_TYPE_ARG1 struct sockaddr *
+#define GETNAMEINFO_TYPE_ARG2 socklen_t
+#define GETNAMEINFO_TYPE_ARG46 size_t
+#define GETNAMEINFO_TYPE_ARG7 int
+
+#define HAVE_RECV 1
+#define RECV_TYPE_ARG1 int
+#define RECV_TYPE_ARG2 void *
+#define RECV_TYPE_ARG3 size_t
+#define RECV_TYPE_ARG4 int
+#define RECV_TYPE_RETV ssize_t
+
+#define HAVE_RECVFROM 1
+#define RECVFROM_TYPE_ARG1 int
+#define RECVFROM_TYPE_ARG2 void
+#define RECVFROM_TYPE_ARG3 size_t
+#define RECVFROM_TYPE_ARG4 int
+#define RECVFROM_TYPE_ARG5 struct sockaddr
+#define RECVFROM_TYPE_ARG6 int
+#define RECVFROM_TYPE_RETV ssize_t
+#define RECVFROM_TYPE_ARG2_IS_VOID 1
+
+#define HAVE_SEND 1
+#define SEND_TYPE_ARG1 int
+#define SEND_QUAL_ARG2 const
+#define SEND_TYPE_ARG2 void *
+#define SEND_TYPE_ARG3 size_T
+#define SEND_TYPE_ARG4 int
+#define SEND_TYPE_RETV ssize_t
+
+#define HAVE_EXTRA_STRICMP_H 1
+#define HAVE_EXTRA_STRDUP_H 1
+
+#endif /* __LIB_CONFIG_MAC_H */
diff --git a/lib/config-os400.h b/lib/config-os400.h
new file mode 100644
index 0000000..dad4d0c
--- /dev/null
+++ b/lib/config-os400.h
@@ -0,0 +1,517 @@
+/* ================================================================ */
+/* lib/config-os400.h - Hand crafted config file for OS/400 */
+/* ================================================================ */
+
+#pragma enum(int)
+
+#undef PACKAGE
+
+/* Version number of this archive. */
+#undef VERSION
+
+/* Define if you have the getpass function. */
+#undef HAVE_GETPASS
+
+/* Define cpu-machine-OS */
+#define OS "OS/400"
+
+/* Define if you have the gethostbyaddr_r() function with 5 arguments */
+#define HAVE_GETHOSTBYADDR_R_5
+
+/* Define if you have the gethostbyaddr_r() function with 7 arguments */
+#undef HAVE_GETHOSTBYADDR_R_7
+
+/* Define if you have the gethostbyaddr_r() function with 8 arguments */
+#undef HAVE_GETHOSTBYADDR_R_8
+
+/* OS400 supports a 3-argument ASCII version of gethostbyaddr_r(), but its
+ * prototype is incompatible with the "standard" one (1st argument is not
+ * const). However, getaddrinfo() is supported (ASCII version defined as
+ * a local wrapper in setup-os400.h) in a threadsafe way: we can then
+ * configure getaddrinfo() as such and get rid of gethostbyname_r() without
+ * loss of threadsafeness. */
+#undef HAVE_GETHOSTBYNAME_R
+#undef HAVE_GETHOSTBYNAME_R_3
+#undef HAVE_GETHOSTBYNAME_R_5
+#undef HAVE_GETHOSTBYNAME_R_6
+#define HAVE_GETADDRINFO
+#define HAVE_GETADDRINFO_THREADSAFE
+
+/* Define if you need the _REENTRANT define for some functions */
+#undef NEED_REENTRANT
+
+/* Define if you have the Kerberos4 libraries (including -ldes) */
+#undef HAVE_KRB4
+
+/* Define if you want to enable IPv6 support */
+#define ENABLE_IPV6
+
+/* Define if struct sockaddr_in6 has the sin6_scope_id member */
+#define HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID 1
+
+/* Define this to 'int' if ssize_t is not an available typedefed type */
+#undef ssize_t
+
+/* Define this as a suitable file to read random data from */
+#undef RANDOM_FILE
+
+/* Define this to your Entropy Gathering Daemon socket pathname */
+#undef EGD_SOCKET
+
+/* Define to 1 if you have the alarm function. */
+#define HAVE_ALARM 1
+
+/* Define if you have the <alloca.h> header file. */
+#undef HAVE_ALLOCA_H
+
+/* Define if you have the <arpa/inet.h> header file. */
+#define HAVE_ARPA_INET_H
+
+/* Define if you have the `closesocket' function. */
+#undef HAVE_CLOSESOCKET
+
+/* Define if you have the <crypto.h> header file. */
+#undef HAVE_CRYPTO_H
+
+/* Define if you have the <des.h> header file. */
+#undef HAVE_DES_H
+
+/* Define if you have the <err.h> header file. */
+#undef HAVE_ERR_H
+
+/* Define if you have the <fcntl.h> header file. */
+#define HAVE_FCNTL_H
+
+/* Define if you have the `geteuid' function. */
+#define HAVE_GETEUID
+
+/* Define if you have the `gethostbyaddr' function. */
+#define HAVE_GETHOSTBYADDR
+
+/* Define if you have the `gethostbyaddr_r' function. */
+#define HAVE_GETHOSTBYADDR_R
+
+/* Define if you have the `gethostname' function. */
+#define HAVE_GETHOSTNAME
+
+/* Define if you have the <getopt.h> header file. */
+#undef HAVE_GETOPT_H
+
+/* Define if you have the `getpass_r' function. */
+#undef HAVE_GETPASS_R
+
+/* Define if you have the `getpwuid' function. */
+#define HAVE_GETPWUID
+
+/* Define if you have the `getservbyname' function. */
+#define HAVE_GETSERVBYNAME
+
+/* Define if you have the `gettimeofday' function. */
+#define HAVE_GETTIMEOFDAY
+
+/* Define if you have the `timeval' struct. */
+#define HAVE_STRUCT_TIMEVAL
+
+/* Define if you have the `inet_addr' function. */
+#define HAVE_INET_ADDR
+
+/* Define if you have the <inttypes.h> header file. */
+#define HAVE_INTTYPES_H
+
+/* Define if you have the <io.h> header file. */
+#undef HAVE_IO_H
+
+/* Define if you have the `krb_get_our_ip_for_realm' function. */
+#undef HAVE_KRB_GET_OUR_IP_FOR_REALM
+
+/* Define if you have the <krb.h> header file. */
+#undef HAVE_KRB_H
+
+/* Define if you have the `crypto' library (-lcrypto). */
+#undef HAVE_LIBCRYPTO
+
+/* Define if you have the `nsl' library (-lnsl). */
+#undef HAVE_LIBNSL
+
+/* Define if you have the `resolv' library (-lresolv). */
+#undef HAVE_LIBRESOLV
+
+/* 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 GSS API. */
+#define HAVE_GSSAPI
+
+/* Define if you have the `ucb' library (-lucb). */
+#undef HAVE_LIBUCB
+
+/* Define if you have the `localtime_r' function. */
+#define HAVE_LOCALTIME_R
+
+/* Define if you have the <malloc.h> header file. */
+#define HAVE_MALLOC_H
+
+/* Define if you need the malloc.h header file even with stdlib.h */
+/* #define NEED_MALLOC_H 1 */
+
+/* Define if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define if you have the <netdb.h> header file. */
+#define HAVE_NETDB_H
+
+/* Define if you have the <netinet/if_ether.h> header file. */
+#undef HAVE_NETINET_IF_ETHER_H
+
+/* Define if you have the <netinet/in.h> header file. */
+#define HAVE_NETINET_IN_H
+
+/* Define if you have the <net/if.h> header file. */
+#define HAVE_NET_IF_H
+
+/* Define if you have the <openssl/crypto.h> header file. */
+#undef HAVE_OPENSSL_CRYPTO_H
+
+/* Define if you have the <openssl/err.h> header file. */
+#undef HAVE_OPENSSL_ERR_H
+
+/* Define if you have the <openssl/pem.h> header file. */
+#undef HAVE_OPENSSL_PEM_H
+
+/* Define if you have the <openssl/rsa.h> header file. */
+#undef HAVE_OPENSSL_RSA_H
+
+/* Define if you have the <openssl/ssl.h> header file. */
+#undef HAVE_OPENSSL_SSL_H
+
+/* Define if you have the <openssl/x509.h> header file. */
+#undef HAVE_OPENSSL_X509_H
+
+/* Define if you have the <pem.h> header file. */
+#undef HAVE_PEM_H
+
+/* Define if you have the `perror' function. */
+#define HAVE_PERROR
+
+/* Define if you have the <pwd.h> header file. */
+#define HAVE_PWD_H
+
+/* Define if you have the `RAND_egd' function. */
+#undef HAVE_RAND_EGD
+
+/* Define if you have the `RAND_screen' function. */
+#undef HAVE_RAND_SCREEN
+
+/* Define if you have the `RAND_status' function. */
+#undef HAVE_RAND_STATUS
+
+/* Define if you have the <rsa.h> header file. */
+#undef HAVE_RSA_H
+
+/* Define if you have the `select' function. */
+#define HAVE_SELECT
+
+/* Define if you have the `setvbuf' function. */
+#define HAVE_SETVBUF
+
+/* Define if you have the <sgtty.h> header file. */
+#undef HAVE_SGTTY_H
+
+/* Define if you have the `sigaction' function. */
+#define HAVE_SIGACTION
+
+/* Define if you have the `signal' function. */
+#undef HAVE_SIGNAL
+
+/* Define if you have the <signal.h> header file. */
+#define HAVE_SIGNAL_H
+
+/* Define if sig_atomic_t is an available typedef. */
+#define HAVE_SIG_ATOMIC_T
+
+/* Define if sig_atomic_t is already defined as volatile. */
+#undef HAVE_SIG_ATOMIC_T_VOLATILE
+
+/* Define if you have the `socket' function. */
+#define HAVE_SOCKET
+
+/* Define if you have the <ssl.h> header file. */
+#undef HAVE_SSL_H
+
+/* Define if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define if you have the <stdlib.h> header file. */
+#define HAVE_STDLIB_H
+
+/* Define if you have the `strcasecmp' function. */
+#undef HAVE_STRCASECMP
+
+/* Define if you have the `strcmpi' function. */
+#undef HAVE_STRCMPI
+
+/* Define if you have the `strdup' function. */
+#undef HAVE_STRDUP
+
+/* Define if you have the `strftime' function. */
+#define HAVE_STRFTIME
+
+/* Define if you have the `stricmp' function. */
+#undef HAVE_STRICMP
+
+/* Define if you have the <strings.h> header file. */
+#define HAVE_STRINGS_H
+
+/* Define if you have the <string.h> header file. */
+#define HAVE_STRING_H
+
+/* Define if you have the `strlcat' function. */
+#undef HAVE_STRLCAT
+
+/* Define if you have the `strlcpy' function. */
+#undef HAVE_STRLCPY
+
+/* Define if you have the <stropts.h> header file. */
+#undef HAVE_STROPTS_H
+
+/* Define if you have the `strstr' function. */
+#define HAVE_STRSTR
+
+/* Define if you have the `strtok_r' function. */
+#define HAVE_STRTOK_R
+
+/* Define if you have the `strtoll' function. */
+#undef HAVE_STRTOLL /* Allows ASCII compile on V5R1. */
+
+/* Define if you have the <sys/param.h> header file. */
+#define HAVE_SYS_PARAM_H
+
+/* Define if you have the <sys/select.h> header file. */
+#undef HAVE_SYS_SELECT_H
+
+/* Define if you have the <sys/socket.h> header file. */
+#define HAVE_SYS_SOCKET_H
+
+/* Define if you have the <sys/sockio.h> header file. */
+#undef HAVE_SYS_SOCKIO_H
+
+/* Define if you have the <sys/stat.h> header file. */
+#define HAVE_SYS_STAT_H
+
+/* Define if you have the <sys/time.h> header file. */
+#define HAVE_SYS_TIME_H
+
+/* Define if you have the <sys/types.h> header file. */
+#define HAVE_SYS_TYPES_H
+
+/* Define if you have the <sys/un.h> header file. */
+#define HAVE_SYS_UN_H
+
+/* Define if you have the <sys/ioctl.h> header file. */
+#define HAVE_SYS_IOCTL_H
+
+/* 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 <termios.h> header file. */
+#undef HAVE_TERMIOS_H
+
+/* Define if you have the <termio.h> header file. */
+#undef HAVE_TERMIO_H
+
+/* Define if you have the <time.h> header file. */
+#define HAVE_TIME_H
+
+/* Define if you have the `uname' function. */
+#undef HAVE_UNAME
+
+/* Define if you have the <unistd.h> header file. */
+#define HAVE_UNISTD_H
+
+/* Define if you have the <winsock.h> header file. */
+#undef HAVE_WINSOCK_H
+
+/* Define if you have the <x509.h> header file. */
+#undef HAVE_X509_H
+
+/* Name of package */
+#undef PACKAGE
+
+/* Define as the return type of signal handlers (`int' or `void'). */
+#define RETSIGTYPE void
+
+/* The size of `int', as computed by sizeof. */
+#define SIZEOF_INT 4
+
+/* The size of a `long double', as computed by sizeof. */
+#define SIZEOF_LONG_DOUBLE 8
+
+/* Define if the compiler supports the 'long long' data type. */
+#define HAVE_LONGLONG
+
+/* The size of a `long long', as computed by sizeof. */
+#define SIZEOF_LONG_LONG 8
+
+/* The size of `short', as computed by sizeof. */
+#define SIZEOF_SHORT 2
+
+/* Whether long long constants must be suffixed by LL. */
+
+#define HAVE_LL
+
+/* Define this if you have struct sockaddr_storage */
+#define HAVE_STRUCT_SOCKADDR_STORAGE
+
+/* Define if you have the ANSI C header files. */
+#define STDC_HEADERS
+
+/* Define if you can safely include both <sys/time.h> and <time.h>. */
+#define TIME_WITH_SYS_TIME
+
+/* Version number of package */
+#undef VERSION
+
+/* Number of bits in a file offset, on hosts where this is settable. */
+#undef _FILE_OFFSET_BITS
+
+/* Define for large files, on AIX-style hosts. */
+#define _LARGE_FILES
+
+/* Define to empty if `const' does not conform to ANSI C. */
+#undef const
+
+/* type to use in place of in_addr_t if not defined */
+#define in_addr_t unsigned long
+
+/* Define to `unsigned' if <sys/types.h> does not define. */
+#undef size_t
+
+/* Define if you have the ioctl function. */
+#define HAVE_IOCTL
+
+/* Define if you have a working ioctl FIONBIO function. */
+#define HAVE_IOCTL_FIONBIO
+
+/* Define if you have a working ioctl SIOCGIFADDR function. */
+#define HAVE_IOCTL_SIOCGIFADDR
+
+/* To disable LDAP */
+#undef CURL_DISABLE_LDAP
+
+/* To avoid external use of library hidden symbols */
+#define CURL_HIDDEN_SYMBOLS
+
+/* External symbols need no special keyword. */
+#define CURL_EXTERN_SYMBOL
+
+/* Define if you have the ldap_url_parse procedure. */
+/* #define HAVE_LDAP_URL_PARSE */ /* Disabled because of an IBM bug. */
+
+/* Define if you have the getnameinfo function. */
+/* OS400 has no ASCII version of this procedure: wrapped in setup-os400.h. */
+#define HAVE_GETNAMEINFO
+
+/* Define to the type qualifier of arg 1 for getnameinfo. */
+#define GETNAMEINFO_QUAL_ARG1 const
+
+/* Define to the type of arg 1 for getnameinfo. */
+#define GETNAMEINFO_TYPE_ARG1 struct sockaddr *
+
+/* Define to the type of arg 2 for getnameinfo. */
+#define GETNAMEINFO_TYPE_ARG2 socklen_t
+
+/* Define to the type of args 4 and 6 for getnameinfo. */
+#define GETNAMEINFO_TYPE_ARG46 socklen_t
+
+/* Define to the type of arg 7 for getnameinfo. */
+#define GETNAMEINFO_TYPE_ARG7 int
+
+/* Define if you have the recv function. */
+#define HAVE_RECV
+
+/* Define to the type of arg 1 for recv. */
+#define RECV_TYPE_ARG1 int
+
+/* Define to the type of arg 2 for recv. */
+#define RECV_TYPE_ARG2 char *
+
+/* Define to the type of arg 3 for recv. */
+#define RECV_TYPE_ARG3 int
+
+/* Define to the type of arg 4 for recv. */
+#define RECV_TYPE_ARG4 int
+
+/* Define to the function return type for recv. */
+#define RECV_TYPE_RETV int
+
+/* Define if you have the recvfrom function. */
+#define HAVE_RECVFROM
+
+/* Define to the type of arg 1 for recvfrom. */
+#define RECVFROM_TYPE_ARG1 int
+
+/* Define to the type pointed by arg 2 for recvfrom. */
+#define RECVFROM_TYPE_ARG2 char
+
+/* Define to the type of arg 3 for recvfrom. */
+#define RECVFROM_TYPE_ARG3 int
+
+/* Define to the type of arg 4 for recvfrom. */
+#define RECVFROM_TYPE_ARG4 int
+
+/* Define to the type pointed by arg 5 for recvfrom. */
+#define RECVFROM_TYPE_ARG5 struct sockaddr
+
+/* Define to the type pointed by arg 6 for recvfrom. */
+#define RECVFROM_TYPE_ARG6 int
+
+/* Define to the function return type for recvfrom. */
+#define RECVFROM_TYPE_RETV int
+
+/* Define if you have the send function. */
+#define HAVE_SEND
+
+/* Define to the type of arg 1 for send. */
+#define SEND_TYPE_ARG1 int
+
+/* Define to the type qualifier of arg 2 for send. */
+#define SEND_QUAL_ARG2
+
+/* Define to the type of arg 2 for send. */
+#define SEND_TYPE_ARG2 char *
+
+/* Define to the type of arg 3 for send. */
+#define SEND_TYPE_ARG3 int
+
+/* Define to the type of arg 4 for send. */
+#define SEND_TYPE_ARG4 int
+
+/* Define to the function return type for send. */
+#define SEND_TYPE_RETV int
+
+/* Define to use the QsoSSL package. */
+#define USE_QSOSSL
+
+/* Use the system keyring as the default CA bundle. */
+#define CURL_CA_BUNDLE "/QIBM/UserData/ICSS/Cert/Server/DEFAULT.KDB"
+
+/* ---------------------------------------------------------------- */
+/* ADDITIONAL DEFINITIONS */
+/* ---------------------------------------------------------------- */
+
+/* The following must be defined BEFORE system header files inclusion. */
+
+#define __ptr128 /* No teraspace. */
+#define qadrt_use_fputc_inline /* Generate fputc() wrapper inline. */
+#define qadrt_use_fread_inline /* Generate fread() wrapper inline. */
+#define qadrt_use_fwrite_inline /* Generate fwrite() wrapper inline. */
+
diff --git a/lib/config-riscos.h b/lib/config-riscos.h
new file mode 100644
index 0000000..98bb788
--- /dev/null
+++ b/lib/config-riscos.h
@@ -0,0 +1,475 @@
+/* curl_config.h.in. Generated automatically from configure.in by autoheader. */
+/* 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 */
+#define OS "ARM-RISC OS"
+
+/* Define if you have the gethostbyaddr_r() function with 5 arguments */
+#undef HAVE_GETHOSTBYADDR_R_5
+
+/* Define if you have the gethostbyaddr_r() function with 7 arguments */
+#undef HAVE_GETHOSTBYADDR_R_7
+
+/* Define if you have the gethostbyaddr_r() function with 8 arguments */
+#undef HAVE_GETHOSTBYADDR_R_8
+
+/* Define if you have the gethostbyname_r() function with 3 arguments */
+#undef HAVE_GETHOSTBYNAME_R_3
+
+/* Define if you have the gethostbyname_r() function with 5 arguments */
+#undef HAVE_GETHOSTBYNAME_R_5
+
+/* Define if you have the gethostbyname_r() function with 6 arguments */
+#undef HAVE_GETHOSTBYNAME_R_6
+
+/* Define if you need the _REENTRANT define for some functions */
+#undef NEED_REENTRANT
+
+/* Define if you have the Kerberos4 libraries (including -ldes) */
+#undef HAVE_KRB4
+
+/* Define if you want to enable IPv6 support */
+#undef ENABLE_IPV6
+
+/* Define if struct sockaddr_in6 has the sin6_scope_id member */
+#define HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID 1
+
+/* Define this to 'int' if ssize_t is not an available typedefed type */
+#undef ssize_t
+
+/* Define this as a suitable file to read random data from */
+#undef RANDOM_FILE
+
+/* Define this to your Entropy Gathering Daemon socket pathname */
+#undef EGD_SOCKET
+
+/* Define if you want to enable IPv6 support */
+#undef ENABLE_IPV6
+
+/* Define to 1 if you have the alarm function. */
+#define HAVE_ALARM 1
+
+/* Define if you have the <alloca.h> header file. */
+#define HAVE_ALLOCA_H
+
+/* Define if you have the <arpa/inet.h> header file. */
+#define HAVE_ARPA_INET_H
+
+/* Define if you have the `closesocket' function. */
+#undef HAVE_CLOSESOCKET
+
+/* Define if you have the <crypto.h> header file. */
+#undef HAVE_CRYPTO_H
+
+/* Define if you have the <des.h> header file. */
+#undef HAVE_DES_H
+
+/* Define if you have the <err.h> header file. */
+#undef HAVE_ERR_H
+
+/* Define if you have the <fcntl.h> header file. */
+#define HAVE_FCNTL_H
+
+/* Define if getaddrinfo exists and works */
+#define HAVE_GETADDRINFO
+
+/* Define if you have the `geteuid' function. */
+#undef HAVE_GETEUID
+
+/* Define if you have the `gethostbyaddr' function. */
+#define HAVE_GETHOSTBYADDR
+
+/* Define if you have the `gethostbyaddr_r' function. */
+#undef HAVE_GETHOSTBYADDR_R
+
+/* Define if you have the `gethostbyname_r' function. */
+#undef HAVE_GETHOSTBYNAME_R
+
+/* Define if you have the `gethostname' function. */
+#define HAVE_GETHOSTNAME
+
+/* Define if you have the <getopt.h> header file. */
+#define HAVE_GETOPT_H
+
+/* Define if you have the `getpass_r' function. */
+#undef HAVE_GETPASS_R
+
+/* Define if you have the `getpwuid' function. */
+#undef HAVE_GETPWUID
+
+/* Define if you have the `getservbyname' function. */
+#undef HAVE_GETSERVBYNAME
+
+/* Define if you have the `gettimeofday' function. */
+#define HAVE_GETTIMEOFDAY
+
+/* Define if you have the `timeval' struct. */
+#define HAVE_STRUCT_TIMEVAL
+
+/* Define if you have the `inet_addr' function. */
+#undef HAVE_INET_ADDR
+
+/* Define if you have the <inttypes.h> header file. */
+#define HAVE_INTTYPES_H
+
+/* Define if you have the <io.h> header file. */
+#define HAVE_IO_H
+
+/* Define if you have the `krb_get_our_ip_for_realm' function. */
+#undef HAVE_KRB_GET_OUR_IP_FOR_REALM
+
+/* Define if you have the <krb.h> header file. */
+#undef HAVE_KRB_H
+
+/* Define if you have the `crypto' library (-lcrypto). */
+#undef HAVE_LIBCRYPTO
+
+/* Define if you have the `nsl' library (-lnsl). */
+#undef HAVE_LIBNSL
+
+/* Define if you have the `resolv' library (-lresolv). */
+#undef HAVE_LIBRESOLV
+
+/* 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
+
+/* Define if you have the `localtime_r' function. */
+#undef HAVE_LOCALTIME_R
+
+/* Define if you have the <malloc.h> header file. */
+#define HAVE_MALLOC_H
+
+/* Define if you need the malloc.h header file even with stdlib.h */
+/* #define NEED_MALLOC_H 1 */
+
+/* Define if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define if you have the <netdb.h> header file. */
+#define HAVE_NETDB_H
+
+/* Define if you have the <netinet/if_ether.h> header file. */
+#undef HAVE_NETINET_IF_ETHER_H
+
+/* Define if you have the <netinet/in.h> header file. */
+#define HAVE_NETINET_IN_H
+
+/* Define if you have the <net/if.h> header file. */
+#define HAVE_NET_IF_H
+
+/* Define if you have the <openssl/crypto.h> header file. */
+#undef HAVE_OPENSSL_CRYPTO_H
+
+/* Define if you have the <openssl/err.h> header file. */
+#undef HAVE_OPENSSL_ERR_H
+
+/* Define if you have the <openssl/pem.h> header file. */
+#undef HAVE_OPENSSL_PEM_H
+
+/* Define if you have the <openssl/rsa.h> header file. */
+#undef HAVE_OPENSSL_RSA_H
+
+/* Define if you have the <openssl/ssl.h> header file. */
+#undef HAVE_OPENSSL_SSL_H
+
+/* Define if you have the <openssl/x509.h> header file. */
+#undef HAVE_OPENSSL_X509_H
+
+/* Define if you have the <pem.h> header file. */
+#undef HAVE_PEM_H
+
+/* Define if you have the `perror' function. */
+#undef HAVE_PERROR
+
+/* Define if you have the <pwd.h> header file. */
+#undef HAVE_PWD_H
+
+/* Define if you have the `RAND_egd' function. */
+#undef HAVE_RAND_EGD
+
+/* Define if you have the `RAND_screen' function. */
+#undef HAVE_RAND_SCREEN
+
+/* Define if you have the `RAND_status' function. */
+#undef HAVE_RAND_STATUS
+
+/* Define if you have the <rsa.h> header file. */
+#undef HAVE_RSA_H
+
+/* Define if you have the `select' function. */
+#define HAVE_SELECT
+
+/* Define if you have the `setvbuf' function. */
+#undef HAVE_SETVBUF
+
+/* Define if you have the <sgtty.h> header file. */
+#define HAVE_SGTTY_H
+
+/* Define if you have the `sigaction' function. */
+#undef HAVE_SIGACTION
+
+/* Define if you have the `signal' function. */
+#define HAVE_SIGNAL
+
+/* Define if you have the <signal.h> header file. */
+#define HAVE_SIGNAL_H
+
+/* Define if sig_atomic_t is an available typedef. */
+#define HAVE_SIG_ATOMIC_T
+
+/* Define if sig_atomic_t is already defined as volatile. */
+#undef HAVE_SIG_ATOMIC_T_VOLATILE
+
+/* Define if you have the `socket' function. */
+#define HAVE_SOCKET
+
+/* Define if you have the <ssl.h> header file. */
+#undef HAVE_SSL_H
+
+/* Define if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define if you have the <stdlib.h> header file. */
+#define HAVE_STDLIB_H
+
+/* Define if you have the `strcasecmp' function. */
+#undef HAVE_STRCASECMP
+
+/* Define if you have the `strcmpi' function. */
+#undef HAVE_STRCMPI
+
+/* Define if you have the `strdup' function. */
+#define HAVE_STRDUP
+
+/* Define if you have the `strftime' function. */
+#define HAVE_STRFTIME
+
+/* Define if you have the `stricmp' function. */
+#define HAVE_STRICMP
+
+/* Define if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define if you have the <string.h> header file. */
+#define HAVE_STRING_H
+
+/* Define if you have the `strlcat' function. */
+#undef HAVE_STRLCAT
+
+/* Define if you have the `strlcpy' function. */
+#undef HAVE_STRLCPY
+
+/* Define if you have the `strstr' function. */
+#define HAVE_STRSTR
+
+/* Define if you have the `strtok_r' function. */
+#undef HAVE_STRTOK_R
+
+/* Define if you have the `strtoll' function. */
+#undef HAVE_STRTOLL
+
+/* Define if you have the <sys/param.h> header file. */
+#undef HAVE_SYS_PARAM_H
+
+/* Define if you have the <sys/select.h> header file. */
+#undef HAVE_SYS_SELECT_H
+
+/* Define if you have the <sys/socket.h> header file. */
+#define HAVE_SYS_SOCKET_H
+
+/* Define if you have the <sys/sockio.h> header file. */
+#undef HAVE_SYS_SOCKIO_H
+
+/* Define if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
+
+/* Define if you have the <sys/time.h> header file. */
+#define HAVE_SYS_TIME_H
+
+/* Define if you have the <sys/types.h> header file. */
+#define HAVE_SYS_TYPES_H
+
+/* Define if you have the `tcgetattr' function. */
+#define HAVE_TCGETATTR
+
+/* Define if you have the `tcsetattr' function. */
+#define HAVE_TCSETATTR
+
+/* Define if you have the <termios.h> header file. */
+#define HAVE_TERMIOS_H
+
+/* Define if you have the <termio.h> header file. */
+#undef HAVE_TERMIO_H
+
+/* Define if you have the <time.h> header file. */
+#undef HAVE_TIME_H
+
+/* Define if you have the `uname' function. */
+#define HAVE_UNAME
+
+/* Define if you have the <unistd.h> header file. */
+#define HAVE_UNISTD_H
+
+/* Define if you have the <winsock.h> header file. */
+#undef HAVE_WINSOCK_H
+
+/* Define if you have the <x509.h> header file. */
+#undef HAVE_X509_H
+
+/* Name of package */
+#undef PACKAGE
+
+/* Define as the return type of signal handlers (`int' or `void'). */
+#define RETSIGTYPE void
+
+/* The size of `int', as computed by sizeof. */
+#define SIZEOF_INT 4
+
+/* The size of `long double', as computed by sizeof. */
+#undef SIZEOF_LONG_DOUBLE
+
+/* The size of `long long', as computed by sizeof. */
+#undef SIZEOF_LONG_LONG
+
+/* The size of `short', as computed by sizeof. */
+#define SIZEOF_SHORT 2
+
+/* Define if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* Define if you can safely include both <sys/time.h> and <time.h>. */
+#undef TIME_WITH_SYS_TIME
+
+/* Version number of package */
+#undef VERSION
+
+/* 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
+
+/* Number of bits in a file offset, on hosts where this is settable. */
+#undef _FILE_OFFSET_BITS
+
+/* Define for large files, on AIX-style hosts. */
+#undef _LARGE_FILES
+
+/* Define to empty if `const' does not conform to ANSI C. */
+#undef const
+
+/* Define to `unsigned' if <sys/types.h> does not define. */
+#undef size_t
+
+/* Define to `int' if <sys/types.h> does not define. */
+#undef ssize_t
+
+/* Define if you have the ioctl function. */
+#define HAVE_IOCTL
+
+/* Define if you have a working ioctl FIONBIO function. */
+#define HAVE_IOCTL_FIONBIO
+
+/* to disable LDAP */
+#define CURL_DISABLE_LDAP
+
+/* Define if you have the getnameinfo function. */
+#define HAVE_GETNAMEINFO 1
+
+/* Define to the type qualifier of arg 1 for getnameinfo. */
+#define GETNAMEINFO_QUAL_ARG1 const
+
+/* Define to the type of arg 1 for getnameinfo. */
+#define GETNAMEINFO_TYPE_ARG1 struct sockaddr *
+
+/* Define to the type of arg 2 for getnameinfo. */
+#define GETNAMEINFO_TYPE_ARG2 socklen_t
+
+/* Define to the type of args 4 and 6 for getnameinfo. */
+#define GETNAMEINFO_TYPE_ARG46 size_t
+
+/* Define to the type of arg 7 for getnameinfo. */
+#define GETNAMEINFO_TYPE_ARG7 int
+
+/* Define if you have the recv function. */
+#define HAVE_RECV 1
+
+/* Define to the type of arg 1 for recv. */
+#define RECV_TYPE_ARG1 int
+
+/* Define to the type of arg 2 for recv. */
+#define RECV_TYPE_ARG2 void *
+
+/* Define to the type of arg 3 for recv. */
+#define RECV_TYPE_ARG3 size_t
+
+/* Define to the type of arg 4 for recv. */
+#define RECV_TYPE_ARG4 int
+
+/* Define to the function return type for recv. */
+#define RECV_TYPE_RETV ssize_t
+
+/* Define 1 if you have the recvfrom function. */
+#define HAVE_RECVFROM 1
+
+/* Define to the type of arg 1 for recvfrom. */
+#define RECVFROM_TYPE_ARG1 int
+
+/* Define to the type pointed by arg 2 for recvfrom. */
+#define RECVFROM_TYPE_ARG2 void
+
+/* Define to 1 if the type pointed by arg 2 for recvfrom is void. */
+#define RECVFROM_TYPE_ARG2_IS_VOID 1
+
+/* Define to the type of arg 3 for recvfrom. */
+#define RECVFROM_TYPE_ARG3 size_t
+
+/* Define to the type of arg 4 for recvfrom. */
+#define RECVFROM_TYPE_ARG4 int
+
+/* Define to the type pointed by arg 5 for recvfrom. */
+#define RECVFROM_TYPE_ARG5 struct sockaddr
+
+/* Define to the type pointed by arg 6 for recvfrom. */
+#define RECVFROM_TYPE_ARG6 int
+
+/* Define to the function return type for recvfrom. */
+#define RECVFROM_TYPE_RETV ssize_t
+
+/* Define if you have the send function. */
+#define HAVE_SEND 1
+
+/* Define to the type of arg 1 for send. */
+#define SEND_TYPE_ARG1 int
+
+/* Define to the type qualifier of arg 2 for send. */
+#define SEND_QUAL_ARG2 const
+
+/* Define to the type of arg 2 for send. */
+#define SEND_TYPE_ARG2 void *
+
+/* Define to the type of arg 3 for send. */
+#define SEND_TYPE_ARG3 size_t
+
+/* Define to the type of arg 4 for send. */
+#define SEND_TYPE_ARG4 int
+
+/* Define to the function return type for send. */
+#define SEND_TYPE_RETV ssize_t
diff --git a/lib/curl_config.h b/lib/config-symbian.h
index 0a0e626..9f8b74a 100644
--- a/lib/curl_config.h
+++ b/lib/config-symbian.h
@@ -1,11 +1,10 @@
-/* lib/curl_config.h. Generated from curl_config.h.in by configure. */
-/* lib/curl_config.h.in. Generated from configure.ac by autoheader. */
+/* config-symbian.h. Manually generated. */
/* when building libcurl itself */
/* #undef BUILDING_LIBCURL */
/* Location of default ca bundle */
-#define CURL_CA_BUNDLE "/etc/ssl/certs/ca-certificates.crt"
+/* #define CURL_CA_BUNDLE "/etc/pki/tls/certs/ca-bundle.crt"*/
/* Location of default ca path */
/* #undef CURL_CA_PATH */
@@ -28,27 +27,12 @@
/* to disable HTTP */
/* #undef CURL_DISABLE_HTTP */
-/* to disable IMAP */
-/* #undef CURL_DISABLE_IMAP */
-
/* to disable LDAP */
#define CURL_DISABLE_LDAP 1
/* to disable LDAPS */
#define CURL_DISABLE_LDAPS 1
-/* to disable POP3 */
-/* #undef CURL_DISABLE_POP3 */
-
-/* to disable proxies */
-/* #undef CURL_DISABLE_PROXY */
-
-/* to disable RTSP */
-/* #undef CURL_DISABLE_RTSP */
-
-/* to disable SMTP */
-/* #undef CURL_DISABLE_SMTP */
-
/* to disable TELNET */
/* #undef CURL_DISABLE_TELNET */
@@ -56,18 +40,15 @@
/* #undef CURL_DISABLE_TFTP */
/* to disable verbose strings */
-/* #undef CURL_DISABLE_VERBOSE_STRINGS */
+/* #define CURL_DISABLE_VERBOSE_STRINGS 1*/
/* to make a symbol visible */
-/* #undef CURL_EXTERN_SYMBOL */
+/*#define CURL_EXTERN_SYMBOL __declspec(dllexport)*/
/* to enable hidden symbols */
-/* #undef CURL_HIDDEN_SYMBOLS */
+/*#define CURL_HIDDEN_SYMBOLS 1*/
-/* W$ LDAP with non-W$ compiler */
-/* #undef CURL_LDAP_HYBRID */
-
-/* Use W$ LDAP implementation */
+/* Use Windows LDAP implementation */
/* #undef CURL_LDAP_WIN */
/* when not building a shared library */
@@ -79,6 +60,9 @@
/* Define if you want to enable IPv6 support */
#define ENABLE_IPV6 1
+/* Define if struct sockaddr_in6 has the sin6_scope_id member */
+#define HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID 1
+
/* Define to the type qualifier of arg 1 for getnameinfo. */
#define GETNAMEINFO_QUAL_ARG1 const
@@ -89,52 +73,34 @@
#define GETNAMEINFO_TYPE_ARG2 socklen_t
/* Define to the type of args 4 and 6 for getnameinfo. */
-#define GETNAMEINFO_TYPE_ARG46 socklen_t
+#define GETNAMEINFO_TYPE_ARG46 size_t
/* Define to the type of arg 7 for getnameinfo. */
-#define GETNAMEINFO_TYPE_ARG7 unsigned int
-
-/* Specifies the number of arguments to getservbyport_r */
-#define GETSERVBYPORT_R_ARGS 6
-
-/* Specifies the size of the buffer to pass to getservbyport_r */
-#define GETSERVBYPORT_R_BUFSIZE 4096
-
-/* Define to 1 if you have the alarm function. */
-#define HAVE_ALARM 1
+#define GETNAMEINFO_TYPE_ARG7 int
/* Define to 1 if you have the <alloca.h> header file. */
-#define HAVE_ALLOCA_H 1
+/*#define HAVE_ALLOCA_H 1*/
/* Define to 1 if you have the <arpa/inet.h> header file. */
#define HAVE_ARPA_INET_H 1
/* Define to 1 if you have the <arpa/tftp.h> header file. */
-#define HAVE_ARPA_TFTP_H 1
+/*#define HAVE_ARPA_TFTP_H 1*/
/* Define to 1 if you have the <assert.h> header file. */
#define HAVE_ASSERT_H 1
-/* Define to 1 if you have the basename function. */
-#define HAVE_BASENAME 1
+/* Define to 1 if you have the `basename' function. */
+/*#define HAVE_BASENAME 1*/
/* Define to 1 if bool is an available type. */
-#define HAVE_BOOL_T 1
+/*#define HAVE_BOOL_T 1*/
-/* Define to 1 if you have the clock_gettime function and monotonic timer. */
-#define HAVE_CLOCK_GETTIME_MONOTONIC 1
-
-/* Define to 1 if you have the closesocket function. */
+/* Define to 1 if you have the `closesocket' function. */
/* #undef HAVE_CLOSESOCKET */
-/* Define to 1 if you have the CloseSocket camel case function. */
-/* #undef HAVE_CLOSESOCKET_CAMEL */
-
-/* Define to 1 if you have the connect function. */
-#define HAVE_CONNECT 1
-
/* Define to 1 if you have the `CRYPTO_cleanup_all_ex_data' function. */
-#define HAVE_CRYPTO_CLEANUP_ALL_EX_DATA 1
+/*#define HAVE_CRYPTO_CLEANUP_ALL_EX_DATA 1*/
/* Define to 1 if you have the <crypto.h> header file. */
/* #undef HAVE_CRYPTO_H */
@@ -145,72 +111,44 @@
/* Define to 1 if you have the <dlfcn.h> header file. */
#define HAVE_DLFCN_H 1
-/* Define to 1 if you have the `ENGINE_cleanup' function. */
-//#define HAVE_ENGINE_CLEANUP 1
-
/* Define to 1 if you have the `ENGINE_load_builtin_engines' function. */
-//#define HAVE_ENGINE_LOAD_BUILTIN_ENGINES 1
+/*#define HAVE_ENGINE_LOAD_BUILTIN_ENGINES 1*/
/* Define to 1 if you have the <errno.h> header file. */
#define HAVE_ERRNO_H 1
/* Define to 1 if you have the <err.h> header file. */
-/* #undef HAVE_ERR_H */
-
-/* Define to 1 if you have the fcntl function. */
-#define HAVE_FCNTL 1
+#define HAVE_ERR_H 1
/* Define to 1 if you have the <fcntl.h> header file. */
#define HAVE_FCNTL_H 1
+/* Define to 1 if you have the fcntl function. */
+#define HAVE_FCNTL 1
+
/* Define to 1 if you have a working fcntl O_NONBLOCK function. */
#define HAVE_FCNTL_O_NONBLOCK 1
-/* Define to 1 if you have the fdopen function. */
-#define HAVE_FDOPEN 1
-
/* Define to 1 if you have the `fork' function. */
-#define HAVE_FORK 1
-
-/* Define to 1 if you have the freeaddrinfo function. */
-#define HAVE_FREEADDRINFO 1
+/*#define HAVE_FORK 1*/
-/* Define to 1 if you have the freeifaddrs function. */
-// not in bionic
-//#define HAVE_FREEIFADDRS 1
-
-/* Define to 1 if you have the ftruncate function. */
+/* Define to 1 if you have the `ftruncate' function. */
#define HAVE_FTRUNCATE 1
-/* Define to 1 if you have a working getaddrinfo function. */
+/* Define if getaddrinfo exists and works */
#define HAVE_GETADDRINFO 1
-/* Define to 1 if the getaddrinfo function is threadsafe. */
-#define HAVE_GETADDRINFO_THREADSAFE 1
-
/* Define to 1 if you have the `geteuid' function. */
#define HAVE_GETEUID 1
-/* Define to 1 if you have the gethostbyaddr function. */
+/* Define to 1 if you have the `gethostbyaddr' function. */
#define HAVE_GETHOSTBYADDR 1
-/* Define to 1 if you have the gethostbyaddr_r function. */
-#define HAVE_GETHOSTBYADDR_R 1
-
-/* gethostbyaddr_r() takes 5 args */
-/* #undef HAVE_GETHOSTBYADDR_R_5 */
-
-/* gethostbyaddr_r() takes 7 args */
-/* #undef HAVE_GETHOSTBYADDR_R_7 */
-
-/* gethostbyaddr_r() takes 8 args */
-#define HAVE_GETHOSTBYADDR_R_8 1
-
-/* Define to 1 if you have the gethostbyname function. */
+/* If you have gethostbyname */
#define HAVE_GETHOSTBYNAME 1
-/* Define to 1 if you have the gethostbyname_r function. */
-#define HAVE_GETHOSTBYNAME_R 1
+/* Define to 1 if you have the `gethostbyname_r' function. */
+/* #undef HAVE_GETHOSTBYNAME_R */
/* gethostbyname_r() takes 3 args */
/* #undef HAVE_GETHOSTBYNAME_R_3 */
@@ -219,14 +157,7 @@
/* #undef HAVE_GETHOSTBYNAME_R_5 */
/* gethostbyname_r() takes 6 args */
-#define HAVE_GETHOSTBYNAME_R_6 1
-
-/* Define to 1 if you have the gethostname function. */
-#define HAVE_GETHOSTNAME 1
-
-/* Define to 1 if you have a working getifaddrs function. */
-// not in bionic
-//#define HAVE_GETIFADDRS 1
+/* #undef HAVE_GETHOSTBYNAME_R_6 */
/* Define to 1 if you have the getnameinfo function. */
#define HAVE_GETNAMEINFO 1
@@ -244,18 +175,15 @@
#define HAVE_GETPWUID 1
/* Define to 1 if you have the `getrlimit' function. */
-#define HAVE_GETRLIMIT 1
-
-/* Define to 1 if you have the getservbyport_r function. */
-#define HAVE_GETSERVBYPORT_R 1
+/*#define HAVE_GETRLIMIT 1*/
/* Define to 1 if you have the `gettimeofday' function. */
#define HAVE_GETTIMEOFDAY 1
-/* Define to 1 if you have a working glibc-style strerror_r function. */
+/* we have a glibc-style strerror_r() */
/* #undef HAVE_GLIBC_STRERROR_R */
-/* Define to 1 if you have a working gmtime_r function. */
+/* Define to 1 if you have the `gmtime_r' function. */
#define HAVE_GMTIME_R 1
/* if you have the gssapi libraries */
@@ -280,62 +208,43 @@
/* #undef HAVE_GSSMIT */
/* Define to 1 if you have the `idna_strerror' function. */
-/* #undef HAVE_IDNA_STRERROR */
+/*#define HAVE_IDNA_STRERROR 1*/
/* Define to 1 if you have the `idn_free' function. */
-/* #undef HAVE_IDN_FREE */
+/*#define HAVE_IDN_FREE 1*/
/* Define to 1 if you have the <idn-free.h> header file. */
-/* #undef HAVE_IDN_FREE_H */
-
-/* Define to 1 if you have the <ifaddrs.h> header file. */
-// not in bionic
-// #define HAVE_IFADDRS_H 1
+/*#define HAVE_IDN_FREE_H 1*/
/* Define to 1 if you have the `inet_addr' function. */
-#define HAVE_INET_ADDR 1
-
-/* Define to 1 if you have the inet_ntoa_r function. */
-/* #undef HAVE_INET_NTOA_R */
-
-/* inet_ntoa_r() takes 2 args */
-/* #undef HAVE_INET_NTOA_R_2 */
-
-/* inet_ntoa_r() takes 3 args */
-/* #undef HAVE_INET_NTOA_R_3 */
+/*#define HAVE_INET_ADDR 1*/
/* Define to 1 if you have a IPv6 capable working inet_ntop function. */
-#define HAVE_INET_NTOP 1
+/*#define HAVE_INET_NTOP 1*/
/* Define to 1 if you have a IPv6 capable working inet_pton function. */
-#define HAVE_INET_PTON 1
+/*#define HAVE_INET_PTON 1*/
/* Define to 1 if you have the <inttypes.h> header file. */
#define HAVE_INTTYPES_H 1
/* Define to 1 if you have the ioctl function. */
-// Defined by AndroidConfig.h that is automticaly included in builds
-#undef HAVE_IOCTL
#define HAVE_IOCTL 1
+/* Define to 1 if you have a working ioctl FIONBIO function. */
+#define HAVE_IOCTL_FIONBIO 1
+
/* Define to 1 if you have the ioctlsocket function. */
/* #undef HAVE_IOCTLSOCKET */
-/* Define to 1 if you have the IoctlSocket camel case function. */
-/* #undef HAVE_IOCTLSOCKET_CAMEL */
-
-/* Define to 1 if you have a working IoctlSocket camel case FIONBIO function.
- */
-/* #undef HAVE_IOCTLSOCKET_CAMEL_FIONBIO */
-
/* Define to 1 if you have a working ioctlsocket FIONBIO function. */
/* #undef HAVE_IOCTLSOCKET_FIONBIO */
-/* Define to 1 if you have a working ioctl FIONBIO function. */
-#define HAVE_IOCTL_FIONBIO 1
+/* Define to 1 if you have the IoctlSocket camel case function. */
+/* #undef HAVE_IOCTLSOCKET_CAMEL */
-/* Define to 1 if you have a working ioctl SIOCGIFADDR function. */
-#define HAVE_IOCTL_SIOCGIFADDR 1
+/* Define to 1 if you have a working IoctlSocket camel case FIONBIO function. */
+/* #undef HAVE_IOCTLSOCKET_CAMEL_FIONBIO */
/* Define to 1 if you have the <io.h> header file. */
/* #undef HAVE_IO_H */
@@ -350,28 +259,28 @@
/* #undef HAVE_KRB_H */
/* Define to 1 if you have the lber.h header file. */
-/* #undef HAVE_LBER_H */
+/*#define HAVE_LBER_H 1*/
/* Define to 1 if you have the ldapssl.h header file. */
/* #undef HAVE_LDAPSSL_H */
/* Define to 1 if you have the ldap.h header file. */
-/* #undef HAVE_LDAP_H */
+/*#define HAVE_LDAP_H 1*/
/* Use LDAPS implementation */
-/* #undef HAVE_LDAP_SSL */
+/*#define HAVE_LDAP_SSL 1*/
/* Define to 1 if you have the ldap_ssl.h header file. */
/* #undef HAVE_LDAP_SSL_H */
/* Define to 1 if you have the `ldap_url_parse' function. */
-/* #undef HAVE_LDAP_URL_PARSE */
+/*#define HAVE_LDAP_URL_PARSE 1*/
/* Define to 1 if you have the <libgen.h> header file. */
-#define HAVE_LIBGEN_H 1
+/*#define HAVE_LIBGEN_H 1*/
/* Define to 1 if you have the `idn' library (-lidn). */
-/* #undef HAVE_LIBIDN */
+/*#define HAVE_LIBIDN 1*/
/* Define to 1 if you have the `resolv' library (-lresolv). */
/* #undef HAVE_LIBRESOLV */
@@ -379,20 +288,17 @@
/* Define to 1 if you have the `resolve' library (-lresolve). */
/* #undef HAVE_LIBRESOLVE */
+/* Define to 1 if you have the `socket' library (-lsocket). */
+/* #undef HAVE_LIBSOCKET */
+
/* Define to 1 if you have the `ssh2' library (-lssh2). */
-/* #undef HAVE_LIBSSH2 */
+/*#define HAVE_LIBSSH2 1*/
/* Define to 1 if you have the <libssh2.h> header file. */
-/* #undef HAVE_LIBSSH2_H */
-
-/* Define to 1 if you have the `libssh2_version' function. */
-/* #undef HAVE_LIBSSH2_VERSION */
+/*#define HAVE_LIBSSH2_H 1*/
/* Define to 1 if you have the `ssl' library (-lssl). */
-#define HAVE_LIBSSL 1
-
-/* if zlib is available */
-#define HAVE_LIBZ 1
+/*#define HAVE_LIBSSL 1*/
/* Define to 1 if you have the <limits.h> header file. */
#define HAVE_LIMITS_H 1
@@ -403,25 +309,20 @@
/* Define to 1 if you have the <locale.h> header file. */
#define HAVE_LOCALE_H 1
-/* Define to 1 if you have a working localtime_r function. */
+/* Define to 1 if you have the `localtime_r' function. */
#define HAVE_LOCALTIME_R 1
/* Define to 1 if the compiler supports the 'long long' data type. */
#define HAVE_LONGLONG 1
/* Define to 1 if you have the malloc.h header file. */
-// Defined by AndroidConfig.h that is automticaly included in builds
-#undef HAVE_MALLOC_H
-#define HAVE_MALLOC_H 1
+/*#define HAVE_MALLOC_H 1*/
-/* Define to 1 if you have the memory.h header file. */
+/* Define to 1 if you have the <memory.h> header file. */
#define HAVE_MEMORY_H 1
-/* Define to 1 if you have the memrchr function or macro. */
-/* #undef HAVE_MEMRCHR */
-
/* Define to 1 if you have the MSG_NOSIGNAL flag. */
-#define HAVE_MSG_NOSIGNAL 1
+/*#define HAVE_MSG_NOSIGNAL 1*/
/* Define to 1 if you have the <netdb.h> header file. */
#define HAVE_NETDB_H 1
@@ -430,41 +331,44 @@
#define HAVE_NETINET_IN_H 1
/* Define to 1 if you have the <netinet/tcp.h> header file. */
-#define HAVE_NETINET_TCP_H 1
+/*#define HAVE_NETINET_TCP_H 1*/
/* Define to 1 if you have the <net/if.h> header file. */
#define HAVE_NET_IF_H 1
/* Define to 1 if NI_WITHSCOPEID exists and works. */
-/* #undef HAVE_NI_WITHSCOPEID */
+/*#define HAVE_NI_WITHSCOPEID 1*/
+
+/* we have no strerror_r() proto */
+/* #undef HAVE_NO_STRERROR_R_DECL */
/* if you have an old MIT gssapi library, lacking GSS_C_NT_HOSTBASED_SERVICE
*/
/* #undef HAVE_OLD_GSSMIT */
/* Define to 1 if you have the <openssl/crypto.h> header file. */
-#define HAVE_OPENSSL_CRYPTO_H 1
+/*#define HAVE_OPENSSL_CRYPTO_H 1*/
/* Define to 1 if you have the <openssl/engine.h> header file. */
-//#define HAVE_OPENSSL_ENGINE_H 1
+/*#define HAVE_OPENSSL_ENGINE_H 1*/
/* Define to 1 if you have the <openssl/err.h> header file. */
-#define HAVE_OPENSSL_ERR_H 1
+/*#define HAVE_OPENSSL_ERR_H 1*/
/* Define to 1 if you have the <openssl/pem.h> header file. */
-#define HAVE_OPENSSL_PEM_H 1
+/*#define HAVE_OPENSSL_PEM_H 1*/
/* Define to 1 if you have the <openssl/pkcs12.h> header file. */
-#define HAVE_OPENSSL_PKCS12_H 1
+/*#define HAVE_OPENSSL_PKCS12_H 1*/
/* Define to 1 if you have the <openssl/rsa.h> header file. */
-#define HAVE_OPENSSL_RSA_H 1
+/*#define HAVE_OPENSSL_RSA_H 1*/
/* Define to 1 if you have the <openssl/ssl.h> header file. */
-#define HAVE_OPENSSL_SSL_H 1
+/*#define HAVE_OPENSSL_SSL_H 1*/
/* Define to 1 if you have the <openssl/x509.h> header file. */
-#define HAVE_OPENSSL_X509_H 1
+/*#define HAVE_OPENSSL_X509_H 1*/
/* Define to 1 if you have the <pem.h> header file. */
/* #undef HAVE_PEM_H */
@@ -478,16 +382,16 @@
/* if you have the function PK11_CreateGenericObject */
/* #undef HAVE_PK11_CREATEGENERICOBJECT */
-/* Define to 1 if you have a working poll function. */
-#define HAVE_POLL 1
+/* Define to 1 if you have the `poll' function. */
+/*#define HAVE_POLL 1*/
/* If you have a fine poll */
-#define HAVE_POLL_FINE 1
+/*#define HAVE_POLL_FINE 1*/
/* Define to 1 if you have the <poll.h> header file. */
-#define HAVE_POLL_H 1
+/*#define HAVE_POLL_H 1*/
-/* Define to 1 if you have a working POSIX-style strerror_r function. */
+/* we have a POSIX-style strerror_r() */
#define HAVE_POSIX_STRERROR_R 1
/* Define to 1 if you have the <pwd.h> header file. */
@@ -500,7 +404,7 @@
/* #undef HAVE_RAND_SCREEN */
/* Define to 1 if you have the `RAND_status' function. */
-#define HAVE_RAND_STATUS 1
+/*#define HAVE_RAND_STATUS 1*/
/* Define to 1 if you have the recv function. */
#define HAVE_RECV 1
@@ -527,52 +431,46 @@
/* #undef HAVE_SETMODE */
/* Define to 1 if you have the `setrlimit' function. */
-#define HAVE_SETRLIMIT 1
+/*#define HAVE_SETRLIMIT 1*/
/* Define to 1 if you have the setsockopt function. */
-#define HAVE_SETSOCKOPT 1
+/* #undef HAVE_SETSOCKOPT */
/* Define to 1 if you have a working setsockopt SO_NONBLOCK function. */
/* #undef HAVE_SETSOCKOPT_SO_NONBLOCK */
/* Define to 1 if you have the <sgtty.h> header file. */
-#define HAVE_SGTTY_H 1
+/*#define HAVE_SGTTY_H 1*/
-/* Define to 1 if you have the sigaction function. */
-#define HAVE_SIGACTION 1
+/* Define to 1 if you have the `sigaction' function. */
+/*#define HAVE_SIGACTION 1*/
-/* Define to 1 if you have the siginterrupt function. */
-#define HAVE_SIGINTERRUPT 1
+/* Define to 1 if you have the `siginterrupt' function. */
+/*#define HAVE_SIGINTERRUPT 1*/
-/* Define to 1 if you have the signal function. */
-#define HAVE_SIGNAL 1
+/* Define to 1 if you have the `signal' function. */
+/*#define HAVE_SIGNAL 1*/
/* Define to 1 if you have the <signal.h> header file. */
#define HAVE_SIGNAL_H 1
-/* Define to 1 if you have the sigsetjmp function or macro. */
-#define HAVE_SIGSETJMP 1
+/* If you have sigsetjmp */
+/*#define HAVE_SIGSETJMP 1*/
/* Define to 1 if sig_atomic_t is an available typedef. */
-#define HAVE_SIG_ATOMIC_T 1
+/*#define HAVE_SIG_ATOMIC_T 1*/
/* Define to 1 if sig_atomic_t is already defined as volatile. */
/* #undef HAVE_SIG_ATOMIC_T_VOLATILE */
-/* Define to 1 if struct sockaddr_in6 has the sin6_scope_id member */
-#define HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID 1
-
-/* Define to 1 if you have the socket function. */
+/* Define to 1 if you have the `socket' function. */
#define HAVE_SOCKET 1
-/* Define to 1 if you have the <socket.h> header file. */
-/* #undef HAVE_SOCKET_H */
-
/* Define this if you have the SPNEGO library fbopenssl */
/* #undef HAVE_SPNEGO */
/* Define to 1 if you have the `SSL_get_shutdown' function. */
-#define HAVE_SSL_GET_SHUTDOWN 1
+/*#define HAVE_SSL_GET_SHUTDOWN 1*/
/* Define to 1 if you have the <ssl.h> header file. */
/* #undef HAVE_SSL_H */
@@ -589,22 +487,22 @@
/* Define to 1 if you have the <stdlib.h> header file. */
#define HAVE_STDLIB_H 1
-/* Define to 1 if you have the strcasecmp function. */
+/* Define to 1 if you have the `strcasecmp' function. */
#define HAVE_STRCASECMP 1
-/* Define to 1 if you have the strcasestr function. */
-/* #undef HAVE_STRCASESTR */
+/* Define to 1 if you have the `strcasestr' function. */
+#define HAVE_STRCASESTR 1
-/* Define to 1 if you have the strcmpi function. */
+/* Define to 1 if you have the `strcmpi' function. */
/* #undef HAVE_STRCMPI */
-/* Define to 1 if you have the strdup function. */
+/* Define to 1 if you have the `strdup' function. */
#define HAVE_STRDUP 1
-/* Define to 1 if you have the strerror_r function. */
+/* Define to 1 if you have the `strerror_r' function. */
#define HAVE_STRERROR_R 1
-/* Define to 1 if you have the stricmp function. */
+/* Define to 1 if you have the `stricmp' function. */
/* #undef HAVE_STRICMP */
/* Define to 1 if you have the <strings.h> header file. */
@@ -613,32 +511,19 @@
/* Define to 1 if you have the <string.h> header file. */
#define HAVE_STRING_H 1
-/* Define to 1 if you have the strlcat function. */
-/* #undef HAVE_STRLCAT */
+/* Define to 1 if you have the `strlcat' function. */
+#define HAVE_STRLCAT 1
/* Define to 1 if you have the `strlcpy' function. */
-/* #undef HAVE_STRLCPY */
-
-/* Define to 1 if you have the strncasecmp function. */
-#define HAVE_STRNCASECMP 1
-
-/* Define to 1 if you have the strncmpi function. */
-/* #undef HAVE_STRNCMPI */
-
-/* Define to 1 if you have the strnicmp function. */
-/* #undef HAVE_STRNICMP */
+#define HAVE_STRLCPY 1
-/* Define to 1 if you have the <stropts.h> header file. */
-// not in bionic
-//#define HAVE_STROPTS_H 1
-
-/* Define to 1 if you have the strstr function. */
+/* Define to 1 if you have the `strstr' function. */
#define HAVE_STRSTR 1
-/* Define to 1 if you have the strtok_r function. */
+/* Define to 1 if you have the `strtok_r' function. */
#define HAVE_STRTOK_R 1
-/* Define to 1 if you have the strtoll function. */
+/* Define to 1 if you have the `strtoll' function. */
#define HAVE_STRTOLL 1
/* if struct sockaddr_storage is defined */
@@ -648,7 +533,7 @@
#define HAVE_STRUCT_TIMEVAL 1
/* Define to 1 if you have the <sys/filio.h> header file. */
-/* #undef HAVE_SYS_FILIO_H */
+#define HAVE_SYS_FILIO_H 1
/* Define to 1 if you have the <sys/ioctl.h> header file. */
#define HAVE_SYS_IOCTL_H 1
@@ -657,7 +542,7 @@
#define HAVE_SYS_PARAM_H 1
/* Define to 1 if you have the <sys/poll.h> header file. */
-#define HAVE_SYS_POLL_H 1
+/*#define HAVE_SYS_POLL_H 1*/
/* Define to 1 if you have the <sys/resource.h> header file. */
#define HAVE_SYS_RESOURCE_H 1
@@ -669,7 +554,7 @@
#define HAVE_SYS_SOCKET_H 1
/* Define to 1 if you have the <sys/sockio.h> header file. */
-/* #undef HAVE_SYS_SOCKIO_H */
+#define HAVE_SYS_SOCKIO_H 1
/* Define to 1 if you have the <sys/stat.h> header file. */
#define HAVE_SYS_STAT_H 1
@@ -680,33 +565,23 @@
/* Define to 1 if you have the <sys/types.h> header file. */
#define HAVE_SYS_TYPES_H 1
-/* Define to 1 if you have the <sys/uio.h> header file. */
-// Defined by AndroidConfig.h that is automticaly included in builds
-#undef HAVE_SYS_UIO_H
-#define HAVE_SYS_UIO_H 1
-
-/* Define to 1 if you have the <sys/un.h> header file. */
-#define HAVE_SYS_UN_H 1
-
/* Define to 1 if you have the <sys/utime.h> header file. */
/* #undef HAVE_SYS_UTIME_H */
/* Define to 1 if you have the <termios.h> header file. */
-#define HAVE_TERMIOS_H 1
+/*#define HAVE_TERMIOS_H 1*/
/* Define to 1 if you have the <termio.h> header file. */
-// Defined by AndroidConfig.h that is automticaly included in builds
-#undef HAVE_TERMIO_H
-#define HAVE_TERMIO_H 1
+/*#define HAVE_TERMIO_H 1*/
/* Define to 1 if you have the <time.h> header file. */
#define HAVE_TIME_H 1
/* Define to 1 if you have the <tld.h> header file. */
-/* #undef HAVE_TLD_H */
+/*#define HAVE_TLD_H 1*/
/* Define to 1 if you have the `tld_strerror' function. */
-/* #undef HAVE_TLD_STRERROR */
+/*#define HAVE_TLD_STRERROR 1*/
/* Define to 1 if you have the `uname' function. */
#define HAVE_UNAME 1
@@ -724,7 +599,7 @@
#define HAVE_VARIADIC_MACROS_C99 1
/* Define to 1 if compiler supports old gcc variadic macro style. */
-#define HAVE_VARIADIC_MACROS_GCC 1
+/*#define HAVE_VARIADIC_MACROS_GCC 1*/
/* Define to 1 if you have the winber.h header file. */
/* #undef HAVE_WINBER_H */
@@ -742,10 +617,7 @@
/* #undef HAVE_WINSOCK_H */
/* Define this symbol if your OS supports changing the contents of argv */
-#define HAVE_WRITABLE_ARGV 1
-
-/* Define to 1 if you have the writev function. */
-#define HAVE_WRITEV 1
+/*#define HAVE_WRITABLE_ARGV 1*/
/* Define to 1 if you have the ws2tcpip.h header file. */
/* #undef HAVE_WS2TCPIP_H */
@@ -753,13 +625,6 @@
/* Define to 1 if you have the <x509.h> header file. */
/* #undef HAVE_X509_H */
-/* if you have the zlib.h header file */
-#define HAVE_ZLIB_H 1
-
-/* Define to the sub-directory in which libtool stores uninstalled libraries.
- */
-#define LT_OBJDIR ".libs/"
-
/* Define to 1 if you are building a native Windows target. */
/* #undef NATIVE_WINDOWS */
@@ -769,9 +634,6 @@
/* Define to 1 if you need the malloc.h header file even with stdlib.h */
/* #undef NEED_MALLOC_H */
-/* Define to 1 if you need the memory.h header file even with stdlib.h */
-/* #undef NEED_MEMORY_H */
-
/* Define to 1 if _REENTRANT preprocessor symbol must be defined. */
/* #undef NEED_REENTRANT */
@@ -779,119 +641,74 @@
/* #undef NEED_THREAD_SAFE */
/* cpu-machine-OS */
-#define OS "arm-unknown-eabi"
+#ifdef __WINS__
+#define OS "i386-pc-epoc32"
+#elif __MARM__
+#define OS "arm-unknown-epoc32"
+#else
+/* This won't happen on any current Symbian version */
+#define OS "unknown-unknown-epoc32"
+#endif
/* Name of package */
-#define PACKAGE "curl"
+/*#define PACKAGE "curl"*/
/* Define to the address where bug reports for this package should be sent. */
-#define PACKAGE_BUGREPORT "a suitable curl mailing list => http://curl.haxx.se/mail/"
+/*#define PACKAGE_BUGREPORT "a suitable curl mailing list => http://curl.haxx.se/mail/"*/
/* Define to the full name of this package. */
-#define PACKAGE_NAME "curl"
+/*#define PACKAGE_NAME "curl"*/
/* Define to the full name and version of this package. */
-#define PACKAGE_STRING "curl -"
+/*#define PACKAGE_STRING "curl -"*/
/* Define to the one symbol short name of this package. */
-#define PACKAGE_TARNAME "curl"
-
-/* Define to the home page for this package. */
-#define PACKAGE_URL ""
+/*#define PACKAGE_TARNAME "curl"*/
/* Define to the version of this package. */
-#define PACKAGE_VERSION "-"
+/*#define PACKAGE_VERSION "-"*/
/* a suitable file to read random data from */
-#define RANDOM_FILE "/dev/urandom"
+/*#define RANDOM_FILE "/dev/urandom"*/
-/* Define to the type of arg 1 for recvfrom. */
-#define RECVFROM_TYPE_ARG1 int
+#define RECV_TYPE_ARG1 int
+#define RECV_TYPE_ARG2 void*
+#define RECV_TYPE_ARG3 size_t
+#define RECV_TYPE_ARG4 int
+#define RECV_TYPE_RETV ssize_t
-/* Define to the type pointed by arg 2 for recvfrom. */
+#define RECVFROM_TYPE_ARG1 int
#define RECVFROM_TYPE_ARG2 void
-
-/* Define to 1 if the type pointed by arg 2 for recvfrom is void. */
-#define RECVFROM_TYPE_ARG2_IS_VOID 1
-
-/* Define to the type of arg 3 for recvfrom. */
#define RECVFROM_TYPE_ARG3 size_t
-
-/* Define to the type of arg 4 for recvfrom. */
#define RECVFROM_TYPE_ARG4 int
-
-/* Define to the type pointed by arg 5 for recvfrom. */
#define RECVFROM_TYPE_ARG5 struct sockaddr
-
-/* Define to 1 if the type pointed by arg 5 for recvfrom is void. */
-/* #undef RECVFROM_TYPE_ARG5_IS_VOID */
-
-/* Define to the type pointed by arg 6 for recvfrom. */
-#define RECVFROM_TYPE_ARG6 socklen_t
-
-/* Define to 1 if the type pointed by arg 6 for recvfrom is void. */
-/* #undef RECVFROM_TYPE_ARG6_IS_VOID */
-
-/* Define to the function return type for recvfrom. */
+#define RECVFROM_TYPE_ARG6 size_t
#define RECVFROM_TYPE_RETV ssize_t
+#define RECVFROM_TYPE_ARG2_IS_VOID 1
-/* Define to the type of arg 1 for recv. */
-#define RECV_TYPE_ARG1 int
-
-/* Define to the type of arg 2 for recv. */
-#define RECV_TYPE_ARG2 void *
-
-/* Define to the type of arg 3 for recv. */
-#define RECV_TYPE_ARG3 size_t
-
-/* Define to the type of arg 4 for recv. */
-#define RECV_TYPE_ARG4 int
+#define SEND_TYPE_ARG1 int
+#define SEND_QUAL_ARG2 const
+#define SEND_TYPE_ARG2 void*
+#define SEND_TYPE_ARG3 size_t
+#define SEND_TYPE_ARG4 int
+#define SEND_TYPE_RETV ssize_t
-/* Define to the function return type for recv. */
-#define RECV_TYPE_RETV ssize_t
/* Define as the return type of signal handlers (`int' or `void'). */
-#define RETSIGTYPE void
+/*#define RETSIGTYPE void*/
-/* Define to the type qualifier of arg 5 for select. */
-#define SELECT_QUAL_ARG5
-
-/* Define to the type of arg 1 for select. */
+/* Define to the type of arg 1 for `select'. */
#define SELECT_TYPE_ARG1 int
-/* Define to the type of args 2, 3 and 4 for select. */
-#define SELECT_TYPE_ARG234 fd_set *
-
-/* Define to the type of arg 5 for select. */
-#define SELECT_TYPE_ARG5 struct timeval *
-
-/* Define to the function return type for select. */
-#define SELECT_TYPE_RETV int
-
-/* Define to the type qualifier of arg 2 for send. */
-#define SEND_QUAL_ARG2 const
-
-/* Define to the type of arg 1 for send. */
-#define SEND_TYPE_ARG1 int
-
-/* Define to the type of arg 2 for send. */
-#define SEND_TYPE_ARG2 void *
-
-/* Define to the type of arg 3 for send. */
-#define SEND_TYPE_ARG3 size_t
+/* Define to the type of args 2, 3 and 4 for `select'. */
+#define SELECT_TYPE_ARG234 (fd_set *)
-/* Define to the type of arg 4 for send. */
-#define SEND_TYPE_ARG4 int
-
-/* Define to the function return type for send. */
-#define SEND_TYPE_RETV ssize_t
+/* Define to the type of arg 5 for `select'. */
+#define SELECT_TYPE_ARG5 (struct timeval *)
/* The size of `int', as computed by sizeof. */
#define SIZEOF_INT 4
-/* The size of `long', as computed by sizeof. */
-#define SIZEOF_LONG 8
-
/* The size of `off_t', as computed by sizeof. */
#define SIZEOF_OFF_T 8
@@ -899,51 +716,35 @@
#define SIZEOF_SHORT 2
/* The size of `size_t', as computed by sizeof. */
-#define SIZEOF_SIZE_T 8
+#define SIZEOF_SIZE_T 4
/* The size of `time_t', as computed by sizeof. */
-#define SIZEOF_TIME_T 8
-
-/* The size of `void*', as computed by sizeof. */
-#define SIZEOF_VOIDP 8
+#define SIZEOF_TIME_T 4
/* Define to 1 if you have the ANSI C header files. */
#define STDC_HEADERS 1
-/* Define to the type of arg 3 for strerror_r. */
-#define STRERROR_R_TYPE_ARG3 size_t
-
/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
#define TIME_WITH_SYS_TIME 1
-/* Define to enable c-ares support */
+/* Define if you want to enable c-ares support */
/* #undef USE_ARES */
-/* Define to disable non-blocking sockets. */
+/* Define to disable non-blocking sockets */
/* #undef USE_BLOCKING_SOCKETS */
/* if GnuTLS is enabled */
/* #undef USE_GNUTLS */
/* if libSSH2 is in use */
-/* #undef USE_LIBSSH2 */
+/*#define USE_LIBSSH2 1*/
/* If you want to build curl with the built-in manual */
-#define USE_MANUAL 1
+/*#define USE_MANUAL 1*/
/* if NSS is enabled */
/* #undef USE_NSS */
-/* if OpenSSL is in use */
-#define USE_OPENSSL 1
-
-/* if SSL is enabled */
-#define USE_SSLEAY 1
-
-/* Define to 1 if you are building a Windows target without large file
- support. */
-/* #undef USE_WIN32_LARGE_FILES */
-
/* to enable SSPI support */
/* #undef USE_WINDOWS_SSPI */
@@ -951,18 +752,20 @@
/* #undef USE_YASSLEMUL */
/* Version number of package */
-#define VERSION "7.20.1"
+/*#define VERSION "7.18.2-CVS"*/
/* Define to avoid automatic inclusion of winsock.h */
/* #undef WIN32_LEAN_AND_MEAN */
-/* Define to 1 if OS is AIX. */
+/* Define to 1 if on AIX 3.
+ System headers sometimes define this.
+ We just want to avoid a redefinition error message. */
#ifndef _ALL_SOURCE
-/* # undef _ALL_SOURCE */
+/* # undef _ALL_SOURCE */
#endif
/* Number of bits in a file offset, on hosts where this is settable. */
-/* #undef _FILE_OFFSET_BITS */
+#define _FILE_OFFSET_BITS 64
/* Define for large files, on AIX-style hosts. */
/* #undef _LARGE_FILES */
@@ -970,7 +773,7 @@
/* Define to empty if `const' does not conform to ANSI C. */
/* #undef const */
-/* Type to use in place of in_addr_t when system does not provide it. */
+/* type to use in place of in_addr_t if not defined */
/* #undef in_addr_t */
/* Define to `__inline__' or `__inline' if that's what the C compiler
@@ -984,3 +787,25 @@
/* the signed version of size_t */
/* #undef ssize_t */
+
+/* Enabling curl debug mode when building in Symbian debug mode would work */
+/* except that debug mode introduces new exports that must be frozen. */
+#ifdef _DEBUG
+/* #define CURLDEBUG */
+#endif
+
+/* sys/cdefs.h fails to define this for WINSCW prior to Symbian OS ver. 9.4 */
+#ifndef __LONG_LONG_SUPPORTED
+#define __LONG_LONG_SUPPORTED
+#endif
+
+/* Enable appropriate header only when zlib support is enabled */
+#ifdef HAVE_LIBZ
+#define HAVE_ZLIB_H 1
+#endif
+
+/* Enable appropriate definitions only when OpenSSL support is enabled */
+#ifdef USE_SSLEAY
+/* if OpenSSL is in use */
+#define USE_OPENSSL
+#endif
diff --git a/lib/config-tpf.h b/lib/config-tpf.h
new file mode 100644
index 0000000..3e494f7
--- /dev/null
+++ b/lib/config-tpf.h
@@ -0,0 +1,761 @@
+#ifndef __LIBCONFIGTPF_H
+#define __LIBCONFIGTPF_H
+
+/* ================================================================ */
+/* lib/config-tpf.h - Hand crafted config file for TPF */
+/* ================================================================ */
+
+/* ---------------------------------------------------------------- */
+/* FEATURES, FUNCTIONS, and DEFINITIONS */
+/* ---------------------------------------------------------------- */
+
+/* NOTE: Refer also to the .mak file for some of the flags below */
+
+/* when building libcurl itself */
+/* #undef BUILDING_LIBCURL */
+
+/* to disable cookies support */
+/* #undef CURL_DISABLE_COOKIES */
+
+/* to disable cryptographic authentication */
+/* #undef CURL_DISABLE_CRYPTO_AUTH */
+
+/* to disable DICT */
+/* #undef CURL_DISABLE_DICT */
+
+/* to disable FILE */
+/* #undef CURL_DISABLE_FILE */
+
+/* to disable FTP */
+/* #undef CURL_DISABLE_FTP */
+
+/* to disable HTTP */
+/* #undef CURL_DISABLE_HTTP */
+
+/* to disable LDAP */
+/* #undef CURL_DISABLE_LDAP */
+
+/* to disable TELNET */
+/* #undef CURL_DISABLE_TELNET */
+
+/* to disable TFTP */
+/* #undef CURL_DISABLE_TFTP */
+
+/* to disable verbose strings */
+/* #undef CURL_DISABLE_VERBOSE_STRINGS */
+
+/* when not building a shared library */
+/* #undef CURL_STATICLIB */
+
+/* lber dynamic library file */
+/* #undef DL_LBER_FILE */
+
+/* ldap dynamic library file */
+/* #undef DL_LDAP_FILE */
+
+/* your Entropy Gathering Daemon socket pathname */
+/* #undef EGD_SOCKET */
+
+/* Define if you want to enable IPv6 support */
+/* #undef ENABLE_IPV6 */
+
+/* Define if struct sockaddr_in6 has the sin6_scope_id member */
+/* #undef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID */
+
+/* Define to the type of arg 1 for getnameinfo. */
+/* #undef GETNAMEINFO_TYPE_ARG1 */
+
+/* Define to the type of arg 2 for getnameinfo. */
+/* #undef GETNAMEINFO_TYPE_ARG2 */
+
+/* Define to the type of args 4 and 6 for getnameinfo. */
+/* #undef GETNAMEINFO_TYPE_ARG46 */
+
+/* Define to the type of arg 7 for getnameinfo. */
+/* #undef GETNAMEINFO_TYPE_ARG7 */
+
+/* Define to 1 if you have the alarm function. */
+#define HAVE_ALARM 1
+
+/* Define to 1 if you have the <arpa/inet.h> header file. */
+#define HAVE_ARPA_INET_H 1
+
+/* Define to 1 if you have the <arpa/tftp.h> header file. */
+/* #undef HAVE_ARPA_TFTP_H */
+
+/* Define to 1 if you have the <assert.h> header file. */
+#define HAVE_ASSERT_H 1
+
+/* Define to 1 if you have the `basename' function. */
+#define HAVE_BASENAME 1
+
+/* Define to 1 if you have the `closesocket' function. */
+/* #undef HAVE_CLOSESOCKET */
+
+/* Define to 1 if you have the `CRYPTO_cleanup_all_ex_data' function. */
+/* #undef HAVE_CRYPTO_CLEANUP_ALL_EX_DATA */
+#define HAVE_CRYPTO_CLEANUP_ALL_EX_DATA 1
+
+/* Define to 1 if you have the <crypto.h> header file. */
+/* #undef HAVE_CRYPTO_H */
+#define HAVE_CRYPTO_H 1
+
+/* Define to 1 if you have the <des.h> header file. */
+/* #undef HAVE_DES_H */
+#define HAVE_DES_H 1
+
+/* Define to 1 if you have the `ENGINE_load_builtin_engines' function. */
+/* #undef HAVE_ENGINE_LOAD_BUILTIN_ENGINES */
+#define HAVE_ENGINE_LOAD_BUILTIN_ENGINES 1
+
+/* Define to 1 if you have the <errno.h> header file. */
+#define HAVE_ERRNO_H 1
+
+/* Define to 1 if you have the <err.h> header file. */
+/* #undef HAVE_ERR_H */
+#define HAVE_ERR_H 1
+
+/* Define to 1 if you have the <fcntl.h> header file. */
+#define HAVE_FCNTL_H 1
+
+/* Define to 1 if you have the fcntl function. */
+#define HAVE_FCNTL 1
+
+/* Define to 1 if you have a working fcntl O_NONBLOCK function. */
+#define HAVE_FCNTL_O_NONBLOCK 1
+
+/* Define to 1 if you have the `fork' function. */
+/* #undef HAVE_FORK */
+#define HAVE_FORK 1
+
+/* Define to 1 if you have the `ftruncate' function. */
+#define HAVE_FTRUNCATE 1
+
+/* Define if getaddrinfo exists and works */
+/* #undef HAVE_GETADDRINFO */
+
+/* Define to 1 if you have the `geteuid' function. */
+#define HAVE_GETEUID 1
+
+/* Define to 1 if you have the `gethostbyaddr' function. */
+#define HAVE_GETHOSTBYADDR 1
+
+/* If you have gethostbyname */
+#define HAVE_GETHOSTBYNAME 1
+
+/* Define to 1 if you have the `gethostbyname_r' function. */
+/* #undef HAVE_GETHOSTBYNAME_R */
+
+/* gethostbyname_r() takes 3 args */
+/* #undef HAVE_GETHOSTBYNAME_R_3 */
+
+/* gethostbyname_r() takes 5 args */
+/* #undef HAVE_GETHOSTBYNAME_R_5 */
+
+/* gethostbyname_r() takes 6 args */
+/* #undef HAVE_GETHOSTBYNAME_R_6 1 */
+
+/* Define to 1 if you have the getnameinfo function. */
+/* #undef HAVE_GETNAMEINFO */
+
+/* Define to 1 if you have the `getpass_r' function. */
+/* #undef HAVE_GETPASS_R */
+
+/* Define to 1 if you have the `getprotobyname' function. */
+/* #undef HAVE_GETPROTOBYNAME */
+
+/* Define to 1 if you have the `getpwuid' function. */
+#define HAVE_GETPWUID 1
+
+/* Define to 1 if you have the `getrlimit' function. */
+/* #undef HAVE_GETRLIMIT */
+
+/* Define to 1 if you have the `gettimeofday' function. */
+#define HAVE_GETTIMEOFDAY 1
+
+/* we have a glibc-style strerror_r() */
+/* #undef HAVE_GLIBC_STRERROR_R */
+#define HAVE_GLIBC_STRERROR_R 1
+
+/* Define to 1 if you have the `gmtime_r' function. */
+#define HAVE_GMTIME_R 1
+
+/* if you have the gssapi libraries */
+/* #undef HAVE_GSSAPI */
+
+/* if you have the GNU gssapi libraries */
+/* #undef HAVE_GSSGNU */
+
+/* if you have the Heimdal gssapi libraries */
+/* #undef HAVE_GSSHEIMDAL */
+
+/* if you have the MIT gssapi libraries */
+/* #undef HAVE_GSSMIT */
+
+/* Define to 1 if you have the `iconv' functions. */
+#define HAVE_ICONV 1
+
+/* Define to 1 if you have the `idna_strerror' function. */
+/* #undef HAVE_IDNA_STRERROR */
+
+/* Define to 1 if you have the `idn_free' function. */
+/* #undef HAVE_IDN_FREE */
+
+/* Define to 1 if you have the <idn-free.h> header file. */
+/* #undef HAVE_IDN_FREE_H */
+
+/* Define to 1 if you have the `inet_addr' function. */
+#define HAVE_INET_ADDR 1
+
+/* Define to 1 if you have a IPv6 capable working inet_ntop function. */
+/* #undef HAVE_INET_NTOP */
+
+/* Define to 1 if you have a IPv6 capable working inet_pton function. */
+/* #undef HAVE_INET_PTON */
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#define HAVE_INTTYPES_H 1
+
+/* Define to 1 if you have the ioctl function. */
+#define HAVE_IOCTL 1
+
+/* Define to 1 if you have a working ioctl FIONBIO function. */
+#define HAVE_IOCTL_FIONBIO 1
+
+/* Define to 1 if you have the ioctlsocket function. */
+/* #undef HAVE_IOCTLSOCKET */
+
+/* Define to 1 if you have a working ioctlsocket FIONBIO function. */
+/* #undef HAVE_IOCTLSOCKET_FIONBIO */
+
+/* Define to 1 if you have the IoctlSocket camel case function. */
+/* #undef HAVE_IOCTLSOCKET_CAMEL */
+
+/* Define to 1 if you have a working IoctlSocket camel case FIONBIO function. */
+/* #undef HAVE_IOCTLSOCKET_CAMEL_FIONBIO */
+
+/* Define to 1 if you have the <io.h> header file. */
+/* #undef HAVE_IO_H */
+
+/* if you have the Kerberos4 libraries (including -ldes) */
+/* #undef HAVE_KRB4 */
+
+/* Define to 1 if you have the `krb_get_our_ip_for_realm' function. */
+/* #undef HAVE_KRB_GET_OUR_IP_FOR_REALM */
+
+/* Define to 1 if you have the <krb.h> header file. */
+/* #undef HAVE_KRB_H */
+
+/* Define to 1 if you have the <libgen.h> header file. */
+/* #undef HAVE_LIBGEN_H 1 */
+
+/* Define to 1 if you have the `idn' library (-lidn). */
+/* #undef HAVE_LIBIDN */
+
+/* Define to 1 if you have the `resolv' library (-lresolv). */
+/* #undef HAVE_LIBRESOLV */
+
+/* Define to 1 if you have the `resolve' library (-lresolve). */
+/* #undef HAVE_LIBRESOLVE */
+
+/* Define to 1 if you have the `socket' library (-lsocket). */
+/* #undef HAVE_LIBSOCKET */
+
+/* Define to 1 if you have the `ssl' library (-lssl). */
+/* #undef HAVE_LIBSSL */
+#define HAVE_LIBSSL 1
+
+/* if zlib is available */
+/* #undef HAVE_LIBZ */
+
+/* Define to 1 if you have the <limits.h> header file. */
+#define HAVE_LIMITS_H 1
+
+/* if your compiler supports LL */
+#define HAVE_LL 1
+
+/* Define to 1 if you have the <locale.h> header file. */
+#define HAVE_LOCALE_H 1
+
+/* Define to 1 if you have the `localtime_r' function. */
+#define HAVE_LOCALTIME_R 1
+
+/* Define to 1 if the compiler supports the 'long long' data type. */
+#define HAVE_LONGLONG 1
+
+/* Define to 1 if you need the malloc.h header file even with stdlib.h */
+/* #undef NEED_MALLOC_H */
+
+/* Define to 1 if you have the <memory.h> header file. */
+#define HAVE_MEMORY_H 1
+
+/* Define to 1 if you have the <netdb.h> header file. */
+#define HAVE_NETDB_H 1
+
+/* Define to 1 if you have the <netinet/in.h> header file. */
+#define HAVE_NETINET_IN_H 1
+
+/* Define to 1 if you have the <netinet/tcp.h> header file. */
+/* undef HAVE_NETINET_TCP_H */
+
+/* Define to 1 if you have the <net/if.h> header file. */
+#define HAVE_NET_IF_H 1
+
+/* Define if NI_WITHSCOPEID exists and works */
+/* #undef HAVE_NI_WITHSCOPEID */
+
+/* we have no strerror_r() proto */
+/* #undef HAVE_NO_STRERROR_R_DECL */
+
+/* Define to 1 if you have the <openssl/crypto.h> header file. */
+/* #undef HAVE_OPENSSL_CRYPTO_H */
+#define HAVE_OPENSSL_CRYPTO_H 1
+
+/* Define to 1 if you have the <openssl/engine.h> header file. */
+/* #undef HAVE_OPENSSL_ENGINE_H */
+#define HAVE_OPENSSL_ENGINE_H 1
+
+/* Define to 1 if you have the <openssl/err.h> header file. */
+/* #undef HAVE_OPENSSL_ERR_H */
+#define HAVE_OPENSSL_ERR_H 1
+
+/* Define to 1 if you have the <openssl/pem.h> header file. */
+/* #undef HAVE_OPENSSL_PEM_H */
+#define HAVE_OPENSSL_PEM_H 1
+
+/* Define to 1 if you have the <openssl/pkcs12.h> header file. */
+/* #undef HAVE_OPENSSL_PKCS12_H */
+#define HAVE_OPENSSL_PKCS12_H 1
+
+/* Define to 1 if you have the <openssl/rsa.h> header file. */
+/* #undef HAVE_OPENSSL_RSA_H */
+#define HAVE_OPENSSL_RSA_H 1
+
+/* Define to 1 if you have the <openssl/ssl.h> header file. */
+/* #undef HAVE_OPENSSL_SSL_H */
+#define HAVE_OPENSSL_SSL_H 1
+
+/* Define to 1 if you have the <openssl/x509.h> header file. */
+/* #undef HAVE_OPENSSL_X509_H */
+#define HAVE_OPENSSL_X509_H 1
+
+/* Define to 1 if you have the <pem.h> header file. */
+/* #undef HAVE_PEM_H */
+#define HAVE_PEM_H 1
+
+/* Define to 1 if you have the `perror' function. */
+#define HAVE_PERROR 1
+
+/* Define to 1 if you have the `pipe' function. */
+#define HAVE_PIPE 1
+
+/* Define to 1 if you have the `poll' function. */
+/* #undef HAVE_POLL */
+
+/* If you have a fine poll */
+/* #undef HAVE_POLL_FINE */
+
+/* we have a POSIX-style strerror_r() */
+/* #undef HAVE_POSIX_STRERROR_R */
+
+/* Define to 1 if you have the <pwd.h> header file. */
+#define HAVE_PWD_H 1
+
+/* Define to 1 if you have the `RAND_egd' function. */
+/* #undef HAVE_RAND_EGD */
+#define HAVE_RAND_EGD 1
+
+/* Define to 1 if you have the `RAND_screen' function. */
+/* #undef HAVE_RAND_SCREEN */
+
+/* Define to 1 if you have the `RAND_status' function. */
+/* #undef HAVE_RAND_STATUS */
+#define HAVE_RAND_STATUS 1
+
+/* Define to 1 if you have the <rsa.h> header file. */
+/* #undef HAVE_RSA_H */
+#define HAVE_RSA_H 1
+
+/* Define to 1 if you have the `select' function. */
+#define HAVE_SELECT 1
+
+/* Define to 1 if you have the <setjmp.h> header file. */
+#define HAVE_SETJMP_H 1
+
+/* Define to 1 if you have the `setlocale' function. */
+#define HAVE_SETLOCALE 1
+
+/* Define to 1 if you have the `setrlimit' function. */
+#define HAVE_SETRLIMIT 1
+
+/* Define to 1 if you have the setsockopt function. */
+/* #undef HAVE_SETSOCKOPT */
+
+/* Define to 1 if you have a working setsockopt SO_NONBLOCK function. */
+/* #undef HAVE_SETSOCKOPT_SO_NONBLOCK */
+
+/* Define to 1 if you have the <sgtty.h> header file. */
+/* #undef HAVE_SGTTY_H 1 */
+
+/* Define to 1 if you have the `sigaction' function. */
+#define HAVE_SIGACTION 1
+
+/* Define to 1 if you have the `siginterrupt' function. */
+/* #undef HAVE_SIGINTERRUPT */
+
+/* Define to 1 if you have the `signal' function. */
+#define HAVE_SIGNAL 1
+
+/* Define to 1 if you have the <signal.h> header file. */
+#define HAVE_SIGNAL_H 1
+
+/* Define to 1 if sig_atomic_t is an available typedef. */
+#define HAVE_SIG_ATOMIC_T 1
+
+/* Define to 1 if sig_atomic_t is already defined as volatile. */
+/* #undef HAVE_SIG_ATOMIC_T_VOLATILE */
+
+/* If you have sigsetjmp */
+/* #undef HAVE_SIGSETJMP */
+
+/* Define to 1 if you have the `socket' function. */
+#define HAVE_SOCKET 1
+
+/* Define this if you have the SPNEGO library fbopenssl */
+/* #undef HAVE_SPNEGO */
+
+/* Define to 1 if you have the <ssl.h> header file. */
+/* #undef HAVE_SSL_H */
+#define HAVE_SSL_H 1
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#define HAVE_STDINT_H 1
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#define HAVE_STDLIB_H 1
+
+/* Define to 1 if you have the `strcasecmp' function. */
+#define HAVE_STRCASECMP 1
+
+/* Define to 1 if you have the `strcmpi' function. */
+/* #undef HAVE_STRCMPI */
+
+/* Define to 1 if you have the `strdup' function. */
+#define HAVE_STRDUP 1
+
+/* Define to 1 if you have the `strerror_r' function. */
+#define HAVE_STRERROR_R 1
+
+/* Define to 1 if you have the `stricmp' function. */
+/* #undef HAVE_STRICMP */
+#define HAVE_STRICMP 1
+
+/* Define to 1 if you have the <strings.h> header file. */
+#define HAVE_STRINGS_H 1
+
+/* Define to 1 if you have the <string.h> header file. */
+#define HAVE_STRING_H 1
+
+/* Define to 1 if you have the `strlcat' function. */
+/* #undef HAVE_STRLCAT */
+
+/* Define to 1 if you have the `strlcpy' function. */
+/* #undef HAVE_STRLCPY */
+
+/* Define to 1 if you have the `strstr' function. */
+#define HAVE_STRSTR 1
+
+/* Define to 1 if you have the `strtok_r' function. */
+#define HAVE_STRTOK_R 1
+
+/* Define to 1 if you have the `strtoll' function. */
+#define HAVE_STRTOLL 1
+
+/* if struct sockaddr_storage is defined */
+/* #undef HAVE_STRUCT_SOCKADDR_STORAGE */
+
+/* Define this if you have struct timeval */
+#define HAVE_STRUCT_TIMEVAL 1
+
+/* Define to 1 if you have the <sys/filio.h> header file. */
+#define HAVE_SYS_FILIO_H 1
+
+/* Define to 1 if you have the <sys/ioctl.h> header file. */
+#define HAVE_SYS_IOCTL_H 1
+
+/* Define to 1 if you have the <sys/param.h> header file. */
+#define HAVE_SYS_PARAM_H 1
+
+/* Define to 1 if you have the <sys/poll.h> header file. */
+/* #undef HAVE_SYS_POLL_H */
+
+/* Define to 1 if you have the <sys/resource.h> header file. */
+#define HAVE_SYS_RESOURCE_H 1
+
+/* Define to 1 if you have the <sys/select.h> header file. */
+#define HAVE_SYS_SELECT_H 1
+
+/* Define to 1 if you have the <sys/socket.h> header file. */
+#define HAVE_SYS_SOCKET_H 1
+
+/* Define to 1 if you have the <sys/sockio.h> header file. */
+/* #undef HAVE_SYS_SOCKIO_H */
+#define HAVE_SYS_SOCKIO_H 1
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#define HAVE_SYS_STAT_H 1
+
+/* Define to 1 if you have the <sys/time.h> header file. */
+#define HAVE_SYS_TIME_H 1
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#define HAVE_SYS_TYPES_H 1
+
+/* Define to 1 if you have the <sys/utime.h> header file. */
+/* #undef HAVE_SYS_UTIME_H */
+
+/* Define to 1 if you have the <termios.h> header file. */
+/* #undef HAVE_TERMIOS_H */
+
+/* Define to 1 if you have the <termio.h> header file. */
+/* #undef HAVE_TERMIO_H */
+
+/* Define to 1 if you have the <time.h> header file. */
+#define HAVE_TIME_H 1
+
+/* Define to 1 if you have the <tld.h> header file. */
+/* #undef HAVE_TLD_H */
+
+/* Define to 1 if you have the `tld_strerror' function. */
+/* #undef HAVE_TLD_STRERROR */
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#define HAVE_UNISTD_H 1
+
+/* Define to 1 if you have the `utime' function. */
+#define HAVE_UTIME 1
+
+/* Define to 1 if you have the <utime.h> header file. */
+#define HAVE_UTIME_H 1
+
+/* Define to 1 if you have the <winsock2.h> header file. */
+/* #undef HAVE_WINSOCK2_H */
+
+/* Define to 1 if you have the <winsock.h> header file. */
+/* #undef HAVE_WINSOCK_H */
+
+/* Define this symbol if your OS supports changing the contents of argv */
+/* #undef HAVE_WRITABLE_ARGV */
+
+/* Define to 1 if you have the ws2tcpip.h header file. */
+/* #undef HAVE_WS2TCPIP_H */
+
+/* Define to 1 if you have the <x509.h> header file. */
+/* #undef HAVE_X509_H */
+
+/* if you have the zlib.h header file */
+/* #undef HAVE_ZLIB_H */
+
+/* Define to 1 if _REENTRANT preprocessor symbol must be defined. */
+/* #undef NEED_REENTRANT */
+
+/* Define to 1 if _THREAD_SAFE preprocessor symbol must be defined. */
+/* #undef NEED_THREAD_SAFE */
+
+/* cpu-machine-OS */
+#define OS "s390x-ibm-tpf"
+
+/* Name of package */
+#define PACKAGE "curl"
+
+/* Define to the address where bug reports for this package should be sent. */
+#define PACKAGE_BUGREPORT "a suitable curl mailing list => http://curl.haxx.se/mail/"
+
+/* Define to the full name of this package. */
+#define PACKAGE_NAME "curl"
+
+/* Define to the full name and version of this package. */
+#define PACKAGE_STRING "curl -"
+
+/* Define to the one symbol short name of this package. */
+#define PACKAGE_TARNAME "curl"
+
+/* Define to the version of this package. */
+#define PACKAGE_VERSION "-"
+
+/* a suitable file to read random data from */
+/* #undef RANDOM_FILE */
+
+/* Define as the return type of signal handlers (`int' or `void'). */
+#define RETSIGTYPE void
+
+/* Define to the type of arg 1 for `select'. */
+#define SELECT_TYPE_ARG1 int
+
+/* Define to the type of args 2, 3 and 4 for `select'. */
+#define SELECT_TYPE_ARG234 (fd_set *)
+
+/* Define to the type of arg 5 for `select'. */
+#define SELECT_TYPE_ARG5 (struct timeval *)
+
+/* The size of `int', as computed by sizeof. */
+#define SIZEOF_INT 4
+
+/* The size of `off_t', as computed by sizeof. */
+#define SIZEOF_OFF_T 8
+
+/* The size of `short', as computed by sizeof. */
+#define SIZEOF_SHORT 2
+
+/* The size of `size_t', as computed by sizeof. */
+#define SIZEOF_SIZE_T 8
+
+/* The size of `time_t', as computed by sizeof. */
+#define SIZEOF_TIME_T 8
+
+/* Define to 1 if you have the ANSI C header files. */
+#define STDC_HEADERS 1
+
+/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
+#define TIME_WITH_SYS_TIME 1
+
+/* Define if you want to enable ares support */
+/* #undef USE_ARES */
+
+/* Define to disable non-blocking sockets */
+/* #undef USE_BLOCKING_SOCKETS */
+
+/* if GnuTLS is enabled */
+/* #undef USE_GNUTLS */
+
+/* If you want to build curl with the built-in manual */
+/* #undef USE_MANUAL */
+
+/* if OpenSSL is in use */
+/* #undef USE_OPENSSL */
+
+/* if SSL is enabled */
+/* #undef USE_SSLEAY */
+
+/* to enable SSPI support */
+/* #undef USE_WINDOWS_SSPI */
+
+/* Version number of package */
+#define VERSION "not-used"
+
+/* Define to avoid automatic inclusion of winsock.h */
+/* #undef WIN32_LEAN_AND_MEAN */
+
+/* Define to 1 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
+
+/* Number of bits in a file offset, on hosts where this is settable. */
+/* #undef _FILE_OFFSET_BITS */
+
+/* Define for large files, on AIX-style hosts. */
+/* #undef _LARGE_FILES */
+
+/* Define to empty if `const' does not conform to ANSI C. */
+/* #undef const */
+
+/* type to use in place of in_addr_t if not defined */
+/* #undef in_addr_t */
+
+/* Define to `unsigned' if <sys/types.h> does not define. */
+/* #undef size_t */
+
+/* the signed version of size_t */
+/* #undef ssize_t */
+
+/* Define to 1 if you have the getnameinfo function. */
+/* #undef HAVE_GETNAMEINFO 1 */
+
+/* Define to the type qualifier of arg 1 for getnameinfo. */
+/* #undef GETNAMEINFO_QUAL_ARG1 const */
+
+/* Define to the type of arg 1 for getnameinfo. */
+/* #undef GETNAMEINFO_TYPE_ARG1 struct sockaddr * */
+
+/* Define to the type of arg 2 for getnameinfo. */
+/* #undef GETNAMEINFO_TYPE_ARG2 socklen_t */
+
+/* Define to the type of args 4 and 6 for getnameinfo. */
+/* #undef GETNAMEINFO_TYPE_ARG46 size_t */
+
+/* Define to the type of arg 7 for getnameinfo. */
+/* #undef GETNAMEINFO_TYPE_ARG7 int */
+
+/* Define to 1 if you have the recv function. */
+#define HAVE_RECV 1
+
+/* Define to the type of arg 1 for recv. */
+#define RECV_TYPE_ARG1 int
+
+/* Define to the type of arg 2 for recv. */
+#define RECV_TYPE_ARG2 char *
+
+/* Define to the type of arg 3 for recv. */
+#define RECV_TYPE_ARG3 int
+
+/* Define to the type of arg 4 for recv. */
+#define RECV_TYPE_ARG4 int
+
+/* Define to the function return type for recv. */
+#define RECV_TYPE_RETV int
+
+/* Define to 1 if you have the recvfrom function. */
+#define HAVE_RECVFROM 1
+
+/* Define to the type of arg 1 for recvfrom. */
+#define RECVFROM_TYPE_ARG1 int
+
+/* Define to the type pointed by arg 2 for recvfrom. */
+#define RECVFROM_TYPE_ARG2 char
+
+/* Define to the type of arg 3 for recvfrom. */
+#define RECVFROM_TYPE_ARG3 int
+
+/* Define to the type of arg 4 for recvfrom. */
+#define RECVFROM_TYPE_ARG4 int
+
+/* Define to the type pointed by arg 5 for recvfrom. */
+#define RECVFROM_TYPE_ARG5 struct sockaddr
+
+/* Define to the type pointed by arg 6 for recvfrom. */
+#define RECVFROM_TYPE_ARG6 int
+
+/* Define to the function return type for recvfrom. */
+#define RECVFROM_TYPE_RETV int
+
+/* Define to 1 if you have the send function. */
+#define HAVE_SEND 1
+
+/* Define to the type of arg 1 for send. */
+#define SEND_TYPE_ARG1 int
+
+/* Define to the type qualifier of arg 2 for send. */
+#define SEND_QUAL_ARG2 const
+
+/* Define to the type of arg 2 for send. */
+#define SEND_TYPE_ARG2 char *
+
+/* Define to the type of arg 3 for send. */
+#define SEND_TYPE_ARG3 int
+
+/* Define to the type of arg 4 for send. */
+#define SEND_TYPE_ARG4 int
+
+/* Define to the function return type for send. */
+#define SEND_TYPE_RETV int
+
+#define CURL_DOES_CONVERSIONS
+#ifndef CURL_ICONV_CODESET_OF_HOST
+#define CURL_ICONV_CODESET_OF_HOST "IBM-1047"
+#endif
+
+
+#endif /* __LIBCONFIGTPF_H */
diff --git a/src/curl_config.h b/lib/config-vxworks.h
index 1ac94f3..f7797fd 100644
--- a/src/curl_config.h
+++ b/lib/config-vxworks.h
@@ -1,11 +1,15 @@
-/* src/curl_config.h. Generated from curl_config.h.in by configure. */
-/* lib/curl_config.h.in. Generated from configure.ac by autoheader. */
+#ifndef __LIB_CONFIG_VXWORKS_H
+#define __LIB_CONFIG_VXWORKS_H
+
+/* =============================================================== */
+/* lib/config-vxworks.h - Hand crafted config file for VxWorks */
+/* =============================================================== */
/* when building libcurl itself */
/* #undef BUILDING_LIBCURL */
/* Location of default ca bundle */
-#define CURL_CA_BUNDLE "/etc/ssl/certs/ca-certificates.crt"
+/* #undef CURL_CA_BUNDLE */
/* Location of default ca path */
/* #undef CURL_CA_PATH */
@@ -23,37 +27,28 @@
/* #undef CURL_DISABLE_FILE */
/* to disable FTP */
-/* #undef CURL_DISABLE_FTP */
+#define CURL_DISABLE_FTP 1
/* to disable HTTP */
/* #undef CURL_DISABLE_HTTP */
-/* to disable IMAP */
-/* #undef CURL_DISABLE_IMAP */
-
/* to disable LDAP */
#define CURL_DISABLE_LDAP 1
/* to disable LDAPS */
#define CURL_DISABLE_LDAPS 1
-/* to disable POP3 */
-/* #undef CURL_DISABLE_POP3 */
+/* to disable NTLM authentication */
+#define CURL_DISABLE_NTLM 1
/* to disable proxies */
/* #undef CURL_DISABLE_PROXY */
-/* to disable RTSP */
-/* #undef CURL_DISABLE_RTSP */
-
-/* to disable SMTP */
-/* #undef CURL_DISABLE_SMTP */
-
/* to disable TELNET */
-/* #undef CURL_DISABLE_TELNET */
+#define CURL_DISABLE_TELNET 1
/* to disable TFTP */
-/* #undef CURL_DISABLE_TFTP */
+#define CURL_DISABLE_TFTP 1
/* to disable verbose strings */
/* #undef CURL_DISABLE_VERBOSE_STRINGS */
@@ -64,10 +59,7 @@
/* to enable hidden symbols */
/* #undef CURL_HIDDEN_SYMBOLS */
-/* W$ LDAP with non-W$ compiler */
-/* #undef CURL_LDAP_HYBRID */
-
-/* Use W$ LDAP implementation */
+/* Use Windows LDAP implementation */
/* #undef CURL_LDAP_WIN */
/* when not building a shared library */
@@ -89,7 +81,7 @@
#define GETNAMEINFO_TYPE_ARG2 socklen_t
/* Define to the type of args 4 and 6 for getnameinfo. */
-#define GETNAMEINFO_TYPE_ARG46 socklen_t
+#define GETNAMEINFO_TYPE_ARG46 size_t
/* Define to the type of arg 7 for getnameinfo. */
#define GETNAMEINFO_TYPE_ARG7 unsigned int
@@ -110,29 +102,23 @@
#define HAVE_ARPA_INET_H 1
/* Define to 1 if you have the <arpa/tftp.h> header file. */
-#define HAVE_ARPA_TFTP_H 1
+/* #undef HAVE_ARPA_TFTP_H */
/* Define to 1 if you have the <assert.h> header file. */
#define HAVE_ASSERT_H 1
-/* Define to 1 if you have the basename function. */
-#define HAVE_BASENAME 1
+/* Define to 1 if you have the `basename' function. */
+/* #undef HAVE_BASENAME */
/* Define to 1 if bool is an available type. */
#define HAVE_BOOL_T 1
/* Define to 1 if you have the clock_gettime function and monotonic timer. */
-#define HAVE_CLOCK_GETTIME_MONOTONIC 1
+/* #undef HAVE_CLOCK_GETTIME_MONOTONIC */
-/* Define to 1 if you have the closesocket function. */
+/* Define to 1 if you have the `closesocket' function. */
/* #undef HAVE_CLOSESOCKET */
-/* Define to 1 if you have the CloseSocket camel case function. */
-/* #undef HAVE_CLOSESOCKET_CAMEL */
-
-/* Define to 1 if you have the connect function. */
-#define HAVE_CONNECT 1
-
/* Define to 1 if you have the `CRYPTO_cleanup_all_ex_data' function. */
#define HAVE_CRYPTO_CLEANUP_ALL_EX_DATA 1
@@ -145,9 +131,6 @@
/* Define to 1 if you have the <dlfcn.h> header file. */
#define HAVE_DLFCN_H 1
-/* Define to 1 if you have the `ENGINE_cleanup' function. */
-#define HAVE_ENGINE_CLEANUP 1
-
/* Define to 1 if you have the `ENGINE_load_builtin_engines' function. */
#define HAVE_ENGINE_LOAD_BUILTIN_ENGINES 1
@@ -184,11 +167,8 @@
/* Define to 1 if you have a working getaddrinfo function. */
#define HAVE_GETADDRINFO 1
-/* Define to 1 if the getaddrinfo function is threadsafe. */
-#define HAVE_GETADDRINFO_THREADSAFE 1
-
/* Define to 1 if you have the `geteuid' function. */
-#define HAVE_GETEUID 1
+/* #undef HAVE_GETEUID */
/* Define to 1 if you have the gethostbyaddr function. */
#define HAVE_GETHOSTBYADDR 1
@@ -209,7 +189,7 @@
#define HAVE_GETHOSTBYNAME 1
/* Define to 1 if you have the gethostbyname_r function. */
-#define HAVE_GETHOSTBYNAME_R 1
+/* #undef HAVE_GETHOSTBYNAME_R */
/* gethostbyname_r() takes 3 args */
/* #undef HAVE_GETHOSTBYNAME_R_3 */
@@ -218,13 +198,13 @@
/* #undef HAVE_GETHOSTBYNAME_R_5 */
/* gethostbyname_r() takes 6 args */
-#define HAVE_GETHOSTBYNAME_R_6 1
+/* #undef HAVE_GETHOSTBYNAME_R_6 */
/* Define to 1 if you have the gethostname function. */
#define HAVE_GETHOSTNAME 1
/* Define to 1 if you have a working getifaddrs function. */
-#define HAVE_GETIFADDRS 1
+/* #undef HAVE_GETIFADDRS */
/* Define to 1 if you have the getnameinfo function. */
#define HAVE_GETNAMEINFO 1
@@ -239,16 +219,16 @@
#define HAVE_GETPROTOBYNAME 1
/* Define to 1 if you have the `getpwuid' function. */
-#define HAVE_GETPWUID 1
+/* #undef HAVE_GETPWUID */
/* Define to 1 if you have the `getrlimit' function. */
#define HAVE_GETRLIMIT 1
/* Define to 1 if you have the getservbyport_r function. */
-#define HAVE_GETSERVBYPORT_R 1
+/* #undef HAVE_GETSERVBYPORT_R */
/* Define to 1 if you have the `gettimeofday' function. */
-#define HAVE_GETTIMEOFDAY 1
+/* #undef HAVE_GETTIMEOFDAY */
/* Define to 1 if you have a working glibc-style strerror_r function. */
/* #undef HAVE_GLIBC_STRERROR_R */
@@ -287,7 +267,7 @@
/* #undef HAVE_IDN_FREE_H */
/* Define to 1 if you have the <ifaddrs.h> header file. */
-#define HAVE_IFADDRS_H 1
+/* #undef HAVE_IFADDRS_H */
/* Define to 1 if you have the `inet_addr' function. */
#define HAVE_INET_ADDR 1
@@ -302,10 +282,10 @@
/* #undef HAVE_INET_NTOA_R_3 */
/* Define to 1 if you have a IPv6 capable working inet_ntop function. */
-#define HAVE_INET_NTOP 1
+/* #undef HAVE_INET_NTOP */
/* Define to 1 if you have a IPv6 capable working inet_pton function. */
-#define HAVE_INET_PTON 1
+/* #undef HAVE_INET_PTON */
/* Define to 1 if you have the <inttypes.h> header file. */
#define HAVE_INTTYPES_H 1
@@ -333,7 +313,7 @@
#define HAVE_IOCTL_SIOCGIFADDR 1
/* Define to 1 if you have the <io.h> header file. */
-/* #undef HAVE_IO_H */
+#define HAVE_IO_H 1
/* if you have the Kerberos4 libraries (including -ldes) */
/* #undef HAVE_KRB4 */
@@ -363,7 +343,7 @@
/* #undef HAVE_LDAP_URL_PARSE */
/* Define to 1 if you have the <libgen.h> header file. */
-#define HAVE_LIBGEN_H 1
+/* #undef HAVE_LIBGEN_H */
/* Define to 1 if you have the `idn' library (-lidn). */
/* #undef HAVE_LIBIDN */
@@ -374,6 +354,9 @@
/* Define to 1 if you have the `resolve' library (-lresolve). */
/* #undef HAVE_LIBRESOLVE */
+/* Define to 1 if you have the `socket' library (-lsocket). */
+/* #undef HAVE_LIBSOCKET */
+
/* Define to 1 if you have the `ssh2' library (-lssh2). */
/* #undef HAVE_LIBSSH2 */
@@ -410,11 +393,8 @@
/* Define to 1 if you have the memory.h header file. */
#define HAVE_MEMORY_H 1
-/* Define to 1 if you have the memrchr function or macro. */
-/* #undef HAVE_MEMRCHR */
-
/* Define to 1 if you have the MSG_NOSIGNAL flag. */
-#define HAVE_MSG_NOSIGNAL 1
+/* #undef HAVE_MSG_NOSIGNAL */
/* Define to 1 if you have the <netdb.h> header file. */
#define HAVE_NETDB_H 1
@@ -472,19 +452,19 @@
/* #undef HAVE_PK11_CREATEGENERICOBJECT */
/* Define to 1 if you have a working poll function. */
-#define HAVE_POLL 1
+/* #undef HAVE_POLL */
/* If you have a fine poll */
-#define HAVE_POLL_FINE 1
+/* #undef HAVE_POLL_FINE */
/* Define to 1 if you have the <poll.h> header file. */
-#define HAVE_POLL_H 1
+/* #undef HAVE_POLL_H */
/* Define to 1 if you have a working POSIX-style strerror_r function. */
-#define HAVE_POSIX_STRERROR_R 1
+/* #undef HAVE_POSIX_STRERROR_R */
/* Define to 1 if you have the <pwd.h> header file. */
-#define HAVE_PWD_H 1
+/* #undef HAVE_PWD_H */
/* Define to 1 if you have the `RAND_egd' function. */
#define HAVE_RAND_EGD 1
@@ -517,7 +497,7 @@
#define HAVE_SETLOCALE 1
/* Define to 1 if you have the `setmode' function. */
-/* #undef HAVE_SETMODE */
+#define HAVE_SETMODE 1
/* Define to 1 if you have the `setrlimit' function. */
#define HAVE_SETRLIMIT 1
@@ -529,7 +509,7 @@
/* #undef HAVE_SETSOCKOPT_SO_NONBLOCK */
/* Define to 1 if you have the <sgtty.h> header file. */
-#define HAVE_SGTTY_H 1
+/* #undef HAVE_SGTTY_H */
/* Define to 1 if you have the sigaction function. */
#define HAVE_SIGACTION 1
@@ -544,7 +524,7 @@
#define HAVE_SIGNAL_H 1
/* Define to 1 if you have the sigsetjmp function or macro. */
-#define HAVE_SIGSETJMP 1
+/* #undef HAVE_SIGSETJMP */
/* Define to 1 if sig_atomic_t is an available typedef. */
#define HAVE_SIG_ATOMIC_T 1
@@ -555,12 +535,9 @@
/* Define to 1 if struct sockaddr_in6 has the sin6_scope_id member */
#define HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID 1
-/* Define to 1 if you have the socket function. */
+/* Define to 1 if you have the `socket' function. */
#define HAVE_SOCKET 1
-/* Define to 1 if you have the <socket.h> header file. */
-/* #undef HAVE_SOCKET_H */
-
/* Define this if you have the SPNEGO library fbopenssl */
/* #undef HAVE_SPNEGO */
@@ -574,7 +551,7 @@
#define HAVE_STDBOOL_H 1
/* Define to 1 if you have the <stdint.h> header file. */
-#define HAVE_STDINT_H 1
+/* #undef HAVE_STDINT_H */
/* Define to 1 if you have the <stdio.h> header file. */
#define HAVE_STDIO_H 1
@@ -622,7 +599,7 @@
/* #undef HAVE_STRNICMP */
/* Define to 1 if you have the <stropts.h> header file. */
-#define HAVE_STROPTS_H 1
+/* #undef HAVE_STROPTS_H */
/* Define to 1 if you have the strstr function. */
#define HAVE_STRSTR 1
@@ -631,7 +608,7 @@
#define HAVE_STRTOK_R 1
/* Define to 1 if you have the strtoll function. */
-#define HAVE_STRTOLL 1
+/* #undef HAVE_STRTOLL */
/* if struct sockaddr_storage is defined */
#define HAVE_STRUCT_SOCKADDR_STORAGE 1
@@ -646,16 +623,16 @@
#define HAVE_SYS_IOCTL_H 1
/* Define to 1 if you have the <sys/param.h> header file. */
-#define HAVE_SYS_PARAM_H 1
+/* #undef HAVE_SYS_PARAM_H */
/* Define to 1 if you have the <sys/poll.h> header file. */
-#define HAVE_SYS_POLL_H 1
+/* #undef HAVE_SYS_POLL_H */
/* Define to 1 if you have the <sys/resource.h> header file. */
#define HAVE_SYS_RESOURCE_H 1
/* Define to 1 if you have the <sys/select.h> header file. */
-#define HAVE_SYS_SELECT_H 1
+/* #undef HAVE_SYS_SELECT_H */
/* Define to 1 if you have the <sys/socket.h> header file. */
#define HAVE_SYS_SOCKET_H 1
@@ -667,7 +644,7 @@
#define HAVE_SYS_STAT_H 1
/* Define to 1 if you have the <sys/time.h> header file. */
-#define HAVE_SYS_TIME_H 1
+/* #undef HAVE_SYS_TIME_H */
/* Define to 1 if you have the <sys/types.h> header file. */
#define HAVE_SYS_TYPES_H 1
@@ -679,7 +656,7 @@
#define HAVE_SYS_UN_H 1
/* Define to 1 if you have the <sys/utime.h> header file. */
-/* #undef HAVE_SYS_UTIME_H */
+#define HAVE_SYS_UTIME_H 1
/* Define to 1 if you have the <termios.h> header file. */
#define HAVE_TERMIOS_H 1
@@ -714,6 +691,9 @@
/* Define to 1 if compiler supports old gcc variadic macro style. */
#define HAVE_VARIADIC_MACROS_GCC 1
+/* Define to 1 if you have a working vxworks-style strerror_r function. */
+#define HAVE_VXWORKS_STRERROR_R 1
+
/* Define to 1 if you have the winber.h header file. */
/* #undef HAVE_WINBER_H */
@@ -744,10 +724,6 @@
/* if you have the zlib.h header file */
#define HAVE_ZLIB_H 1
-/* Define to the sub-directory in which libtool stores uninstalled libraries.
- */
-#define LT_OBJDIR ".libs/"
-
/* Define to 1 if you are building a native Windows target. */
/* #undef NATIVE_WINDOWS */
@@ -766,30 +742,15 @@
/* Define to 1 if _THREAD_SAFE preprocessor symbol must be defined. */
/* #undef NEED_THREAD_SAFE */
+/* Define to 1 if the open function requires three arguments. */
+#define OPEN_NEEDS_ARG3 1
+
/* cpu-machine-OS */
-#define OS "arm-unknown-eabi"
+#define OS "unknown-unknown-vxworks"
/* Name of package */
#define PACKAGE "curl"
-/* Define to the address where bug reports for this package should be sent. */
-#define PACKAGE_BUGREPORT "a suitable curl mailing list => http://curl.haxx.se/mail/"
-
-/* Define to the full name of this package. */
-#define PACKAGE_NAME "curl"
-
-/* Define to the full name and version of this package. */
-#define PACKAGE_STRING "curl -"
-
-/* Define to the one symbol short name of this package. */
-#define PACKAGE_TARNAME "curl"
-
-/* Define to the home page for this package. */
-#define PACKAGE_URL ""
-
-/* Define to the version of this package. */
-#define PACKAGE_VERSION "-"
-
/* a suitable file to read random data from */
#define RANDOM_FILE "/dev/urandom"
@@ -821,7 +782,7 @@
/* #undef RECVFROM_TYPE_ARG6_IS_VOID */
/* Define to the function return type for recvfrom. */
-#define RECVFROM_TYPE_RETV ssize_t
+#define RECVFROM_TYPE_RETV int
/* Define to the type of arg 1 for recv. */
#define RECV_TYPE_ARG1 int
@@ -836,13 +797,13 @@
#define RECV_TYPE_ARG4 int
/* Define to the function return type for recv. */
-#define RECV_TYPE_RETV ssize_t
+#define RECV_TYPE_RETV int
/* Define as the return type of signal handlers (`int' or `void'). */
#define RETSIGTYPE void
/* Define to the type qualifier of arg 5 for select. */
-#define SELECT_QUAL_ARG5
+#define SELECT_QUAL_ARG5
/* Define to the type of arg 1 for select. */
#define SELECT_TYPE_ARG1 int
@@ -872,13 +833,13 @@
#define SEND_TYPE_ARG4 int
/* Define to the function return type for send. */
-#define SEND_TYPE_RETV ssize_t
+#define SEND_TYPE_RETV int
/* The size of `int', as computed by sizeof. */
#define SIZEOF_INT 4
/* The size of `long', as computed by sizeof. */
-#define SIZEOF_LONG 8
+#define SIZEOF_LONG 4
/* The size of `off_t', as computed by sizeof. */
#define SIZEOF_OFF_T 8
@@ -887,24 +848,24 @@
#define SIZEOF_SHORT 2
/* The size of `size_t', as computed by sizeof. */
-#define SIZEOF_SIZE_T 8
+#define SIZEOF_SIZE_T 4
/* The size of `time_t', as computed by sizeof. */
-#define SIZEOF_TIME_T 8
+#define SIZEOF_TIME_T 4
/* The size of `void*', as computed by sizeof. */
-#define SIZEOF_VOIDP 8
+#define SIZEOF_VOIDP 4
/* Define to 1 if you have the ANSI C header files. */
#define STDC_HEADERS 1
/* Define to the type of arg 3 for strerror_r. */
-#define STRERROR_R_TYPE_ARG3 size_t
+/* #undef STRERROR_R_TYPE_ARG3 */
/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
-#define TIME_WITH_SYS_TIME 1
+/* #undef TIME_WITH_SYS_TIME */
-/* Define to enable c-ares support */
+/* Define if you want to enable c-ares support */
/* #undef USE_ARES */
/* Define to disable non-blocking sockets. */
@@ -938,9 +899,6 @@
/* Define to 1 if using yaSSL in OpenSSL compatibility mode. */
/* #undef USE_YASSLEMUL */
-/* Version number of package */
-#define VERSION "7.20.1"
-
/* Define to avoid automatic inclusion of winsock.h */
/* #undef WIN32_LEAN_AND_MEAN */
@@ -972,3 +930,5 @@
/* the signed version of size_t */
/* #undef ssize_t */
+
+#endif /* __LIB_CONFIG_VXWORKS_H */
diff --git a/lib/config-win32.h b/lib/config-win32.h
new file mode 100644
index 0000000..5ee7606
--- /dev/null
+++ b/lib/config-win32.h
@@ -0,0 +1,587 @@
+#ifndef __LIB_CONFIG_WIN32_H
+#define __LIB_CONFIG_WIN32_H
+
+/* ================================================================ */
+/* lib/config-win32.h - Hand crafted config file for Windows */
+/* ================================================================ */
+
+/* ---------------------------------------------------------------- */
+/* HEADER FILES */
+/* ---------------------------------------------------------------- */
+
+/* Define if you have the <arpa/inet.h> header file. */
+/* #define HAVE_ARPA_INET_H 1 */
+
+/* Define if you have the <assert.h> header file. */
+#define HAVE_ASSERT_H 1
+
+/* Define if you have the <crypto.h> header file. */
+/* #define HAVE_CRYPTO_H 1 */
+
+/* Define if you have the <err.h> header file. */
+/* #define HAVE_ERR_H 1 */
+
+/* Define if you have the <fcntl.h> header file. */
+#define HAVE_FCNTL_H 1
+
+/* Define if you have the <getopt.h> header file. */
+/* #define HAVE_GETOPT_H 1 */
+
+/* Define if you have the <io.h> header file. */
+#define HAVE_IO_H 1
+
+/* Define if you have the <limits.h> header file. */
+#define HAVE_LIMITS_H 1
+
+/* Define if you need the malloc.h header file even with stdlib.h */
+#if !defined(__SALFORDC__) && !defined(__POCC__)
+#define NEED_MALLOC_H 1
+#endif
+
+/* Define if you have the <netdb.h> header file. */
+/* #define HAVE_NETDB_H 1 */
+
+/* Define if you have the <netinet/in.h> header file. */
+/* #define HAVE_NETINET_IN_H 1 */
+
+/* Define if you have the <process.h> header file. */
+#ifndef __SALFORDC__
+#define HAVE_PROCESS_H 1
+#endif
+
+/* Define if you have the <signal.h> header file. */
+#define HAVE_SIGNAL_H 1
+
+/* Define if you have the <sgtty.h> header file. */
+/* #define HAVE_SGTTY_H 1 */
+
+/* Define if you have the <ssl.h> header file. */
+/* #define HAVE_SSL_H 1 */
+
+/* Define if you have the <stdlib.h> header file. */
+#define HAVE_STDLIB_H 1
+
+/* Define if you have the <sys/param.h> header file. */
+/* #define HAVE_SYS_PARAM_H 1 */
+
+/* Define if you have the <sys/select.h> header file. */
+/* #define HAVE_SYS_SELECT_H 1 */
+
+/* Define if you have the <sys/socket.h> header file. */
+/* #define HAVE_SYS_SOCKET_H 1 */
+
+/* Define if you have the <sys/sockio.h> header file. */
+/* #define HAVE_SYS_SOCKIO_H 1 */
+
+/* Define if you have the <sys/stat.h> header file. */
+#define HAVE_SYS_STAT_H 1
+
+/* Define if you have the <sys/time.h> header file */
+/* #define HAVE_SYS_TIME_H 1 */
+
+/* Define if you have the <sys/types.h> header file. */
+#define HAVE_SYS_TYPES_H 1
+
+/* Define if you have the <sys/utime.h> header file. */
+#ifndef __BORLANDC__
+#define HAVE_SYS_UTIME_H 1
+#endif
+
+/* Define if you have the <termio.h> header file. */
+/* #define HAVE_TERMIO_H 1 */
+
+/* Define if you have the <termios.h> header file. */
+/* #define HAVE_TERMIOS_H 1 */
+
+/* Define if you have the <time.h> header file. */
+#define HAVE_TIME_H 1
+
+/* Define if you have the <unistd.h> header file. */
+#if defined(__MINGW32__) || defined(__WATCOMC__) || defined(__LCC__) || \
+ defined(__POCC__)
+#define HAVE_UNISTD_H 1
+#endif
+
+/* Define if you have the <windows.h> header file. */
+#define HAVE_WINDOWS_H 1
+
+/* Define if you have the <winsock.h> header file. */
+#define HAVE_WINSOCK_H 1
+
+/* Define if you have the <winsock2.h> header file. */
+#ifndef __SALFORDC__
+#define HAVE_WINSOCK2_H 1
+#endif
+
+/* Define if you have the <ws2tcpip.h> header file. */
+#ifndef __SALFORDC__
+#define HAVE_WS2TCPIP_H 1
+#endif
+
+/* ---------------------------------------------------------------- */
+/* OTHER HEADER INFO */
+/* ---------------------------------------------------------------- */
+
+/* Define if sig_atomic_t is an available typedef. */
+#define HAVE_SIG_ATOMIC_T 1
+
+/* Define if you have the ANSI C header files. */
+#define STDC_HEADERS 1
+
+/* Define if you can safely include both <sys/time.h> and <time.h>. */
+/* #define TIME_WITH_SYS_TIME 1 */
+
+/* ---------------------------------------------------------------- */
+/* FUNCTIONS */
+/* ---------------------------------------------------------------- */
+
+/* Define if you have the closesocket function. */
+#define HAVE_CLOSESOCKET 1
+
+/* Define if you don't have vprintf but do have _doprnt. */
+/* #define HAVE_DOPRNT 1 */
+
+/* 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 getprotobyname function. */
+#define HAVE_GETPROTOBYNAME
+
+/* 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 ioctlsocket function. */
+#define HAVE_IOCTLSOCKET 1
+
+/* Define if you have a working ioctlsocket FIONBIO function. */
+#define HAVE_IOCTLSOCKET_FIONBIO 1
+
+/* Define if you have the perror function. */
+#define HAVE_PERROR 1
+
+/* Define if you have the RAND_screen function when using SSL */
+#define HAVE_RAND_SCREEN 1
+
+/* Define if you have the `RAND_status' function when using SSL. */
+#define HAVE_RAND_STATUS 1
+
+/* Define to 1 if you have the `CRYPTO_cleanup_all_ex_data' function.
+ This is present in OpenSSL versions after 0.9.6b */
+#define HAVE_CRYPTO_CLEANUP_ALL_EX_DATA 1
+
+/* Define if you have the select function. */
+#define HAVE_SELECT 1
+
+/* Define if you have the setvbuf function. */
+#define HAVE_SETVBUF 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 stricmp function. */
+#define HAVE_STRICMP 1
+
+/* Define if you have the strncasecmp function. */
+/* #define HAVE_STRNCASECMP 1 */
+
+/* Define if you have the strnicmp function. */
+#define HAVE_STRNICMP 1
+
+/* Define if you have the strstr function. */
+#define HAVE_STRSTR 1
+
+/* Define if you have the strtoll function. */
+#if defined(__MINGW32__) || defined(__WATCOMC__) || defined(__POCC__)
+#define HAVE_STRTOLL 1
+#endif
+
+/* 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 utime function */
+#ifndef __BORLANDC__
+#define HAVE_UTIME 1
+#endif
+
+/* Define to the type qualifier of arg 1 for getnameinfo. */
+#define GETNAMEINFO_QUAL_ARG1 const
+
+/* Define to the type of arg 1 for getnameinfo. */
+#define GETNAMEINFO_TYPE_ARG1 struct sockaddr *
+
+/* Define to the type of arg 2 for getnameinfo. */
+#define GETNAMEINFO_TYPE_ARG2 socklen_t
+
+/* Define to the type of args 4 and 6 for getnameinfo. */
+#define GETNAMEINFO_TYPE_ARG46 DWORD
+
+/* Define to the type of arg 7 for getnameinfo. */
+#define GETNAMEINFO_TYPE_ARG7 int
+
+/* Define if you have the recv function. */
+#define HAVE_RECV 1
+
+/* Define to the type of arg 1 for recv. */
+#define RECV_TYPE_ARG1 SOCKET
+
+/* Define to the type of arg 2 for recv. */
+#define RECV_TYPE_ARG2 char *
+
+/* Define to the type of arg 3 for recv. */
+#define RECV_TYPE_ARG3 int
+
+/* Define to the type of arg 4 for recv. */
+#define RECV_TYPE_ARG4 int
+
+/* Define to the function return type for recv. */
+#define RECV_TYPE_RETV int
+
+/* Define if you have the recvfrom function. */
+#define HAVE_RECVFROM 1
+
+/* Define to the type of arg 1 for recvfrom. */
+#define RECVFROM_TYPE_ARG1 SOCKET
+
+/* Define to the type pointed by arg 2 for recvfrom. */
+#define RECVFROM_TYPE_ARG2 char
+
+/* Define to the type of arg 3 for recvfrom. */
+#define RECVFROM_TYPE_ARG3 int
+
+/* Define to the type of arg 4 for recvfrom. */
+#define RECVFROM_TYPE_ARG4 int
+
+/* Define to the type pointed by arg 5 for recvfrom. */
+#define RECVFROM_TYPE_ARG5 struct sockaddr
+
+/* Define to the type pointed by arg 6 for recvfrom. */
+#define RECVFROM_TYPE_ARG6 int
+
+/* Define to the function return type for recvfrom. */
+#define RECVFROM_TYPE_RETV int
+
+/* Define if you have the send function. */
+#define HAVE_SEND 1
+
+/* Define to the type of arg 1 for send. */
+#define SEND_TYPE_ARG1 SOCKET
+
+/* Define to the type qualifier of arg 2 for send. */
+#define SEND_QUAL_ARG2 const
+
+/* Define to the type of arg 2 for send. */
+#define SEND_TYPE_ARG2 char *
+
+/* Define to the type of arg 3 for send. */
+#define SEND_TYPE_ARG3 int
+
+/* Define to the type of arg 4 for send. */
+#define SEND_TYPE_ARG4 int
+
+/* Define to the function return type for send. */
+#define SEND_TYPE_RETV int
+
+/* ---------------------------------------------------------------- */
+/* TYPEDEF REPLACEMENTS */
+/* ---------------------------------------------------------------- */
+
+/* Define this if in_addr_t is not an available 'typedefed' type */
+#define in_addr_t unsigned long
+
+/* Define as the return type of signal handlers (int or void). */
+#define RETSIGTYPE void
+
+/* Define ssize_t if it is not an available 'typedefed' type */
+#ifndef _SSIZE_T_DEFINED
+# if (defined(__WATCOMC__) && (__WATCOMC__ >= 1240)) || \
+ defined(__POCC__) || \
+ defined(__MINGW32__)
+# elif defined(_WIN64)
+# define _SSIZE_T_DEFINED
+# define ssize_t __int64
+# else
+# define _SSIZE_T_DEFINED
+# define ssize_t int
+# endif
+#endif
+
+/* ---------------------------------------------------------------- */
+/* TYPE SIZES */
+/* ---------------------------------------------------------------- */
+
+/* The size of `int', as computed by sizeof. */
+#define SIZEOF_INT 4
+
+/* The size of `long double', as computed by sizeof. */
+#define SIZEOF_LONG_DOUBLE 16
+
+/* The size of `long long', as computed by sizeof. */
+/* #define SIZEOF_LONG_LONG 8 */
+
+/* The size of `short', as computed by sizeof. */
+#define SIZEOF_SHORT 2
+
+/* ---------------------------------------------------------------- */
+/* STRUCT RELATED */
+/* ---------------------------------------------------------------- */
+
+/* Define this if you have struct sockaddr_storage */
+#ifndef __SALFORDC__
+#define HAVE_STRUCT_SOCKADDR_STORAGE 1
+#endif
+
+/* Define this if you have struct timeval */
+#define HAVE_STRUCT_TIMEVAL 1
+
+/* ---------------------------------------------------------------- */
+/* Watt-32 tcp/ip SPECIFIC */
+/* ---------------------------------------------------------------- */
+
+#ifdef USE_WATT32
+ #include <tcp.h>
+ #undef byte
+ #undef word
+ #undef USE_WINSOCK
+ #undef HAVE_WINSOCK_H
+ #undef HAVE_WINSOCK2_H
+ #undef HAVE_WS2TCPIP_H
+ #define HAVE_GETADDRINFO
+ #define HAVE_GETNAMEINFO
+ #define HAVE_SYS_IOCTL_H
+ #define HAVE_SYS_SOCKET_H
+ #define HAVE_NETINET_IN_H
+ #define HAVE_NETDB_H
+ #define HAVE_ARPA_INET_H
+ #define HAVE_FREEADDRINFO
+ #define SOCKET int
+#endif
+
+
+/* ---------------------------------------------------------------- */
+/* COMPILER SPECIFIC */
+/* ---------------------------------------------------------------- */
+
+/* Undef keyword 'const' if it does not work. */
+/* #undef const */
+
+/* Windows should not have HAVE_GMTIME_R defined */
+/* #undef HAVE_GMTIME_R */
+
+/* Define if the compiler supports C99 variadic macro style. */
+#if defined(_MSC_VER) && (_MSC_VER >= 1400)
+#define HAVE_VARIADIC_MACROS_C99 1
+#endif
+
+/* Define if the compiler supports the 'long long' data type. */
+#if defined(__MINGW32__) || defined(__WATCOMC__)
+#define HAVE_LONGLONG 1
+#endif
+
+/* Define to avoid VS2005 complaining about portable C functions */
+#if defined(_MSC_VER) && (_MSC_VER >= 1400)
+#define _CRT_SECURE_NO_DEPRECATE 1
+#define _CRT_NONSTDC_NO_DEPRECATE 1
+#endif
+
+/* VS2005 and later dafault size for time_t is 64-bit, unless */
+/* _USE_32BIT_TIME_T has been defined to get a 32-bit time_t. */
+#if defined(_MSC_VER) && (_MSC_VER >= 1400)
+# ifndef _USE_32BIT_TIME_T
+# define SIZEOF_TIME_T 8
+# else
+# define SIZEOF_TIME_T 4
+# endif
+#endif
+
+/* Officially, Microsoft's Windows SDK versions 6.X do not support Windows
+ 2000 as a supported build target. VS2008 default installations provide an
+ embedded Windows SDK v6.0A along with the claim that Windows 2000 is a
+ valid build target for VS2008. Popular belief is that binaries built using
+ Windows SDK versions 6.X and Windows 2000 as a build target are functional */
+#if defined(_MSC_VER) && (_MSC_VER >= 1500)
+# define VS2008_MINIMUM_TARGET 0x0500
+#endif
+
+/* When no build target is specified VS2008 default build target is Windows
+ Vista, which leaves out even Winsows XP. If no build target has been given
+ for VS2008 we will target the minimum Officially supported build target,
+ which happens to be Windows XP. */
+#if defined(_MSC_VER) && (_MSC_VER >= 1500)
+# define VS2008_DEFAULT_TARGET 0x0501
+#endif
+
+/* VS2008 default target settings and minimum build target check */
+#if defined(_MSC_VER) && (_MSC_VER >= 1500)
+# ifndef _WIN32_WINNT
+# define _WIN32_WINNT VS2008_DEFAULT_TARGET
+# endif
+# ifndef WINVER
+# define WINVER VS2008_DEFAULT_TARGET
+# endif
+# if (_WIN32_WINNT < VS2008_MINIMUM_TARGET) || (WINVER < VS2008_MINIMUM_TARGET)
+# error VS2008 does not support Windows build targets prior to Windows 2000
+# endif
+#endif
+
+/* When no build target is specified Pelles C 5.00 and later default build
+ target is Windows Vista. We override default target to be Windows 2000. */
+#if defined(__POCC__) && (__POCC__ >= 500)
+# ifndef _WIN32_WINNT
+# define _WIN32_WINNT 0x0500
+# endif
+# ifndef WINVER
+# define WINVER 0x0500
+# endif
+#endif
+
+/* Availability of freeaddrinfo, getaddrinfo and getnameinfo functions is
+ quite convoluted, compiler dependent and even build target dependent. */
+#if defined(HAVE_WS2TCPIP_H)
+# if defined(__POCC__)
+# define HAVE_FREEADDRINFO 1
+# define HAVE_GETADDRINFO 1
+# define HAVE_GETADDRINFO_THREADSAFE 1
+# define HAVE_GETNAMEINFO 1
+# elif defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0501)
+# define HAVE_FREEADDRINFO 1
+# define HAVE_GETADDRINFO 1
+# define HAVE_GETADDRINFO_THREADSAFE 1
+# define HAVE_GETNAMEINFO 1
+# elif defined(_MSC_VER) && (_MSC_VER >= 1200)
+# define HAVE_FREEADDRINFO 1
+# define HAVE_GETADDRINFO 1
+# define HAVE_GETADDRINFO_THREADSAFE 1
+# define HAVE_GETNAMEINFO 1
+# endif
+#endif
+
+#if defined(__POCC__)
+# ifndef _MSC_VER
+# error Microsoft extensions /Ze compiler option is required
+# endif
+# ifndef __POCC__OLDNAMES
+# error Compatibility names /Go compiler option is required
+# endif
+#endif
+
+/* ---------------------------------------------------------------- */
+/* LARGE FILE SUPPORT */
+/* ---------------------------------------------------------------- */
+
+#if defined(_MSC_VER) && !defined(_WIN32_WCE)
+# if (_MSC_VER >= 900) && (_INTEGRAL_MAX_BITS >= 64)
+# define USE_WIN32_LARGE_FILES
+# else
+# define USE_WIN32_SMALL_FILES
+# endif
+#endif
+
+#if defined(__MINGW32__) && !defined(USE_WIN32_LARGE_FILES)
+# define USE_WIN32_LARGE_FILES
+#endif
+
+#if defined(__WATCOMC__) && !defined(USE_WIN32_LARGE_FILES)
+# define USE_WIN32_LARGE_FILES
+#endif
+
+#if defined(__POCC__)
+# undef USE_WIN32_LARGE_FILES
+#endif
+
+#if !defined(USE_WIN32_LARGE_FILES) && !defined(USE_WIN32_SMALL_FILES)
+# define USE_WIN32_SMALL_FILES
+#endif
+
+/* ---------------------------------------------------------------- */
+/* DNS RESOLVER SPECIALTY */
+/* ---------------------------------------------------------------- */
+
+/*
+ * Undefine both USE_ARES and USE_THREADS_WIN32 for synchronous DNS
+ */
+
+/* Define USE_ARES to enable c-ares asynchronous DNS lookups */
+/* #define USE_ARES 1 */
+
+/* Define USE_THREADS_WIN32 to enable threaded asynchronous DNS lookups */
+#define USE_THREADS_WIN32 1
+
+#if defined(USE_ARES) && defined(USE_THREADS_WIN32)
+# error "Only one DNS lookup specialty may be defined at most"
+#endif
+
+/* ---------------------------------------------------------------- */
+/* LDAP SUPPORT */
+/* ---------------------------------------------------------------- */
+
+#if defined(CURL_HAS_NOVELL_LDAPSDK) || defined(CURL_HAS_MOZILLA_LDAPSDK)
+#undef CURL_LDAP_WIN
+#define HAVE_LDAP_SSL_H 1
+#define HAVE_LDAP_URL_PARSE 1
+#elif defined(CURL_HAS_OPENLDAP_LDAPSDK)
+#undef CURL_LDAP_WIN
+#define HAVE_LDAP_URL_PARSE 1
+#else
+#undef HAVE_LDAP_URL_PARSE
+#define CURL_LDAP_WIN 1
+#endif
+
+#if defined(__WATCOMC__) && defined(CURL_LDAP_WIN)
+#if __WATCOMC__ < 1280
+#define WINBERAPI __declspec(cdecl)
+#define WINLDAPAPI __declspec(cdecl)
+#endif
+#endif
+
+#if defined(__POCC__) && defined(CURL_LDAP_WIN)
+# define CURL_DISABLE_LDAP 1
+#endif
+
+/* ---------------------------------------------------------------- */
+/* ADDITIONAL DEFINITIONS */
+/* ---------------------------------------------------------------- */
+
+/* Define cpu-machine-OS */
+#undef OS
+#if defined(_M_IX86) || defined(__i386__) /* x86 (MSVC or gcc) */
+#define OS "i386-pc-win32"
+#elif defined(_M_IA64) /* Itanium */
+#define OS "ia64-pc-win32"
+#elif defined(_M_X64) /* AMD64/EM64T - Not defined until MSVC 2005 */
+#define OS "amd64-pc-win32"
+#else
+#define OS "unknown-pc-win32"
+#endif
+
+/* Name of package */
+#define PACKAGE "curl"
+
+#if defined(__POCC__) || (USE_IPV6)
+# define ENABLE_IPV6 1
+#endif
+
+#endif /* __LIB_CONFIG_WIN32_H */
diff --git a/lib/config-win32ce.h b/lib/config-win32ce.h
new file mode 100644
index 0000000..1f41782
--- /dev/null
+++ b/lib/config-win32ce.h
@@ -0,0 +1,409 @@
+#ifndef __LIB_CONFIG_WIN32CE_H
+#define __LIB_CONFIG_WIN32CE_H
+
+/* ================================================================ */
+/* lib/config-win32ce.h - Hand crafted config file for windows ce */
+/* ================================================================ */
+
+/* ---------------------------------------------------------------- */
+/* HEADER FILES */
+/* ---------------------------------------------------------------- */
+
+/* Define if you have the <arpa/inet.h> header file. */
+/* #define HAVE_ARPA_INET_H 1 */
+
+/* Define if you have the <assert.h> header file. */
+/* #define HAVE_ASSERT_H 1 */
+
+/* Define if you have the <crypto.h> header file. */
+/* #define HAVE_CRYPTO_H 1 */
+
+/* Define if you have the <err.h> header file. */
+/* #define HAVE_ERR_H 1 */
+
+/* Define if you have the <fcntl.h> header file. */
+#define HAVE_FCNTL_H 1
+
+/* Define if you have the <getopt.h> header file. */
+/* #define HAVE_GETOPT_H 1 */
+
+/* Define if you have the <io.h> header file. */
+#define HAVE_IO_H 1
+
+/* Define if you have the <limits.h> header file. */
+#define HAVE_LIMITS_H 1
+
+/* Define if you need the malloc.h header header file even with stdlib.h */
+#define NEED_MALLOC_H 1
+
+/* Define if you have the <netdb.h> header file. */
+/* #define HAVE_NETDB_H 1 */
+
+/* Define if you have the <netinet/in.h> header file. */
+/* #define HAVE_NETINET_IN_H 1 */
+
+/* Define if you have the <signal.h> header file. */
+#define HAVE_SIGNAL_H 1
+
+/* Define if you have the <sgtty.h> header file. */
+/* #define HAVE_SGTTY_H 1 */
+
+/* Define if you have the <ssl.h> header file. */
+/* #define HAVE_SSL_H 1 */
+
+/* Define if you have the <stdlib.h> header file. */
+#define HAVE_STDLIB_H 1
+
+/* Define if you have the <process.h> header file. */
+#define HAVE_PROCESS_H 1
+
+/* Define if you have the <sys/param.h> header file. */
+/* #define HAVE_SYS_PARAM_H 1 */
+
+/* Define if you have the <sys/select.h> header file. */
+/* #define HAVE_SYS_SELECT_H 1 */
+
+/* Define if you have the <sys/socket.h> header file. */
+/* #define HAVE_SYS_SOCKET_H 1 */
+
+/* Define if you have the <sys/sockio.h> header file. */
+/* #define HAVE_SYS_SOCKIO_H 1 */
+
+/* Define if you have the <sys/stat.h> header file. */
+#define HAVE_SYS_STAT_H 1
+
+/* Define if you have the <sys/time.h> header file */
+/* #define HAVE_SYS_TIME_H 1 */
+
+/* Define if you have the <sys/types.h> header file. */
+/* #define HAVE_SYS_TYPES_H 1 */
+
+/* Define if you have the <sys/utime.h> header file */
+#define HAVE_SYS_UTIME_H 1
+
+/* Define if you have the <termio.h> header file. */
+/* #define HAVE_TERMIO_H 1 */
+
+/* Define if you have the <termios.h> header file. */
+/* #define HAVE_TERMIOS_H 1 */
+
+/* Define if you have the <time.h> header file. */
+#define HAVE_TIME_H 1
+
+/* Define if you have the <unistd.h> header file. */
+#if defined(__MINGW32__) || defined(__WATCOMC__) || defined(__LCC__)
+#define HAVE_UNISTD_H 1
+#endif
+
+/* Define if you have the <windows.h> header file. */
+#define HAVE_WINDOWS_H 1
+
+/* Define if you have the <winsock.h> header file. */
+#define HAVE_WINSOCK_H 1
+
+/* Define if you have the <winsock2.h> header file. */
+/* #define HAVE_WINSOCK2_H 1 */
+
+/* Define if you have the <ws2tcpip.h> header file. */
+/* #define HAVE_WS2TCPIP_H 1 */
+
+/* ---------------------------------------------------------------- */
+/* OTHER HEADER INFO */
+/* ---------------------------------------------------------------- */
+
+/* Define if sig_atomic_t is an available typedef. */
+#define HAVE_SIG_ATOMIC_T 1
+
+/* Define if you have the ANSI C header files. */
+#define STDC_HEADERS 1
+
+/* Define if you can safely include both <sys/time.h> and <time.h>. */
+/* #define TIME_WITH_SYS_TIME 1 */
+
+/* ---------------------------------------------------------------- */
+/* FUNCTIONS */
+/* ---------------------------------------------------------------- */
+
+/* Define if you have the closesocket function. */
+#define HAVE_CLOSESOCKET 1
+
+/* Define if you don't have vprintf but do have _doprnt. */
+/* #define HAVE_DOPRNT 1 */
+
+/* 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 ioctlsocket function. */
+#define HAVE_IOCTLSOCKET 1
+
+/* Define if you have a working ioctlsocket FIONBIO function. */
+#define HAVE_IOCTLSOCKET_FIONBIO 1
+
+/* Define if you have the perror function. */
+#define HAVE_PERROR 1
+
+/* Define if you have the RAND_screen function when using SSL */
+#define HAVE_RAND_SCREEN 1
+
+/* Define if you have the `RAND_status' function when using SSL. */
+#define HAVE_RAND_STATUS 1
+
+/* Define if you have the select function. */
+#define HAVE_SELECT 1
+
+/* Define if you have the setvbuf function. */
+#define HAVE_SETVBUF 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 stricmp function. */
+/* #define HAVE_STRICMP 1 */
+
+/* Define if you have the strncasecmp function. */
+/* #define HAVE_STRNCASECMP 1 */
+
+/* Define if you have the strnicmp function. */
+/* #define HAVE_STRNICMP 1 */
+
+/* Define if you have the strstr function. */
+#define HAVE_STRSTR 1
+
+/* Define if you have the strtoll function. */
+#if defined(__MINGW32__) || defined(__WATCOMC__)
+#define HAVE_STRTOLL 1
+#endif
+
+/* 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 utime function */
+#define HAVE_UTIME 1
+
+/* Define if you have the getnameinfo function. */
+#define HAVE_GETNAMEINFO 1
+
+/* Define to the type qualifier of arg 1 for getnameinfo. */
+#define GETNAMEINFO_QUAL_ARG1 const
+
+/* Define to the type of arg 1 for getnameinfo. */
+#define GETNAMEINFO_TYPE_ARG1 struct sockaddr *
+
+/* Define to the type of arg 2 for getnameinfo. */
+#define GETNAMEINFO_TYPE_ARG2 socklen_t
+
+/* Define to the type of args 4 and 6 for getnameinfo. */
+#define GETNAMEINFO_TYPE_ARG46 DWORD
+
+/* Define to the type of arg 7 for getnameinfo. */
+#define GETNAMEINFO_TYPE_ARG7 int
+
+/* Define if you have the recv function. */
+#define HAVE_RECV 1
+
+/* Define to the type of arg 1 for recv. */
+#define RECV_TYPE_ARG1 SOCKET
+
+/* Define to the type of arg 2 for recv. */
+#define RECV_TYPE_ARG2 char *
+
+/* Define to the type of arg 3 for recv. */
+#define RECV_TYPE_ARG3 int
+
+/* Define to the type of arg 4 for recv. */
+#define RECV_TYPE_ARG4 int
+
+/* Define to the function return type for recv. */
+#define RECV_TYPE_RETV int
+
+/* Define if you have the recvfrom function. */
+#define HAVE_RECVFROM 1
+
+/* Define to the type of arg 1 for recvfrom. */
+#define RECVFROM_TYPE_ARG1 SOCKET
+
+/* Define to the type pointed by arg 2 for recvfrom. */
+#define RECVFROM_TYPE_ARG2 char
+
+/* Define to the type of arg 3 for recvfrom. */
+#define RECVFROM_TYPE_ARG3 int
+
+/* Define to the type of arg 4 for recvfrom. */
+#define RECVFROM_TYPE_ARG4 int
+
+/* Define to the type pointed by arg 5 for recvfrom. */
+#define RECVFROM_TYPE_ARG5 struct sockaddr
+
+/* Define to the type pointed by arg 6 for recvfrom. */
+#define RECVFROM_TYPE_ARG6 int
+
+/* Define to the function return type for recvfrom. */
+#define RECVFROM_TYPE_RETV int
+
+/* Define if you have the send function. */
+#define HAVE_SEND 1
+
+/* Define to the type of arg 1 for send. */
+#define SEND_TYPE_ARG1 SOCKET
+
+/* Define to the type qualifier of arg 2 for send. */
+#define SEND_QUAL_ARG2 const
+
+/* Define to the type of arg 2 for send. */
+#define SEND_TYPE_ARG2 char *
+
+/* Define to the type of arg 3 for send. */
+#define SEND_TYPE_ARG3 int
+
+/* Define to the type of arg 4 for send. */
+#define SEND_TYPE_ARG4 int
+
+/* Define to the function return type for send. */
+#define SEND_TYPE_RETV int
+
+/* ---------------------------------------------------------------- */
+/* TYPEDEF REPLACEMENTS */
+/* ---------------------------------------------------------------- */
+
+/* Define this if in_addr_t is not an available 'typedefed' type */
+#define in_addr_t unsigned long
+
+/* Define as the return type of signal handlers (int or void). */
+#define RETSIGTYPE void
+
+/* Define ssize_t if it is not an available 'typedefed' type */
+#if (defined(__WATCOMC__) && (__WATCOMC__ >= 1240)) || defined(__POCC__)
+#elif defined(_WIN64)
+#define ssize_t __int64
+#else
+#define ssize_t int
+#endif
+
+/* ---------------------------------------------------------------- */
+/* TYPE SIZES */
+/* ---------------------------------------------------------------- */
+
+/* The size of `int', as computed by sizeof. */
+#define SIZEOF_INT 4
+
+/* The size of `long double', as computed by sizeof. */
+#define SIZEOF_LONG_DOUBLE 16
+
+/* The size of `long long', as computed by sizeof. */
+/* #define SIZEOF_LONG_LONG 8 */
+
+/* The size of `short', as computed by sizeof. */
+#define SIZEOF_SHORT 2
+
+/* ---------------------------------------------------------------- */
+/* STRUCT RELATED */
+/* ---------------------------------------------------------------- */
+
+/* Define this if you have struct sockaddr_storage */
+/* #define HAVE_STRUCT_SOCKADDR_STORAGE 1 */
+
+/* Define this if you have struct timeval */
+#define HAVE_STRUCT_TIMEVAL 1
+
+/* Define this if struct sockaddr_in6 has the sin6_scope_id member */
+#define HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID 1
+
+/* ---------------------------------------------------------------- */
+/* COMPILER SPECIFIC */
+/* ---------------------------------------------------------------- */
+
+/* Undef keyword 'const' if it does not work. */
+/* #undef const */
+
+/* Define to avoid VS2005 complaining about portable C functions */
+#if defined(_MSC_VER) && (_MSC_VER >= 1400)
+#define _CRT_SECURE_NO_DEPRECATE 1
+#define _CRT_NONSTDC_NO_DEPRECATE 1
+#endif
+
+/* VS2005 and later dafault size for time_t is 64-bit, unless */
+/* _USE_32BIT_TIME_T has been defined to get a 32-bit time_t. */
+#if defined(_MSC_VER) && (_MSC_VER >= 1400)
+# ifndef _USE_32BIT_TIME_T
+# define SIZEOF_TIME_T 8
+# else
+# define SIZEOF_TIME_T 4
+# endif
+#endif
+
+/* ---------------------------------------------------------------- */
+/* LARGE FILE SUPPORT */
+/* ---------------------------------------------------------------- */
+
+#if defined(_MSC_VER) && !defined(_WIN32_WCE)
+# if (_MSC_VER >= 900) && (_INTEGRAL_MAX_BITS >= 64)
+# define USE_WIN32_LARGE_FILES
+# else
+# define USE_WIN32_SMALL_FILES
+# endif
+#endif
+
+#if !defined(USE_WIN32_LARGE_FILES) && !defined(USE_WIN32_SMALL_FILES)
+# define USE_WIN32_SMALL_FILES
+#endif
+
+/* ---------------------------------------------------------------- */
+/* LDAP SUPPORT */
+/* ---------------------------------------------------------------- */
+
+#define CURL_LDAP_WIN 1
+#undef HAVE_LDAP_URL_PARSE
+
+/* ---------------------------------------------------------------- */
+/* ADDITIONAL DEFINITIONS */
+/* ---------------------------------------------------------------- */
+
+/* Define cpu-machine-OS */
+#undef OS
+#define OS "i386-pc-win32ce"
+
+/* Name of package */
+#define PACKAGE "curl"
+
+/* ---------------------------------------------------------------- */
+/* WinCE */
+/* ---------------------------------------------------------------- */
+
+#define CURL_DISABLE_FILE 1
+#define CURL_DISABLE_TELNET 1
+#define CURL_DISABLE_LDAP 1
+
+#define ENOSPC 1
+#define ENOMEM 2
+#define EAGAIN 3
+
+extern int stat(const char *path,struct stat *buffer );
+
+#endif /* __LIB_CONFIG_WIN32CE_H */
diff --git a/lib/config.dos b/lib/config.dos
new file mode 100644
index 0000000..78f0c6b
--- /dev/null
+++ b/lib/config.dos
@@ -0,0 +1,169 @@
+#ifndef HEADER_CONFIG_DOS_H
+#define HEADER_CONFIG_DOS_H
+
+
+/* ================================================================ */
+/* lib/config.dos - Hand crafted config file for DOS */
+/* ================================================================ */
+
+#if defined(DJGPP)
+ #define OS "MSDOS/djgpp"
+#elif defined(__HIGHC__)
+ #define OS "MSDOS/HighC"
+#elif defined(__WATCOMC__)
+ #define OS "MSDOS/Watcom"
+#else
+ #define OS "MSDOS/?"
+#endif
+
+#define PACKAGE "curl"
+
+#define HAVE_ARPA_INET_H 1
+#define HAVE_FCNTL_H 1
+#define HAVE_GETADDRINFO 1
+#define HAVE_GETNAMEINFO 1
+#define HAVE_GETPROTOBYNAME 1
+#define HAVE_GETTIMEOFDAY 1
+#define HAVE_IO_H 1
+#define HAVE_IOCTL 1
+#define HAVE_IOCTL_FIONBIO 1
+#define HAVE_IOCTLSOCKET 1
+#define HAVE_IOCTLSOCKET_FIONBIO 1
+#define HAVE_LIMITS_H 1
+#define HAVE_LOCALE_H 1
+#define HAVE_LONGLONG 1
+#define HAVE_MEMORY_H 1
+#define HAVE_NETDB_H 1
+#define HAVE_NETINET_IN_H 1
+#define HAVE_NETINET_TCP_H 1
+#define HAVE_NET_IF_H 1
+#define HAVE_PROCESS_H 1
+#define HAVE_RECV 1
+#define HAVE_RECVFROM 1
+#define HAVE_SELECT 1
+#define HAVE_SEND 1
+#define HAVE_SETJMP_H 1
+#define HAVE_SETLOCALE 1
+#define HAVE_SETMODE 1
+#define HAVE_SIGNAL 1
+#define HAVE_SOCKET 1
+#define HAVE_SPNEGO 1
+#define HAVE_STRDUP 1
+#define HAVE_STRICMP 1
+#define HAVE_STRTOLL 1
+#define HAVE_STRUCT_TIMEVAL 1
+#define HAVE_STRUCT_IN6_ADDR 1
+#define HAVE_SYS_IOCTL_H 1
+#define HAVE_SYS_SOCKET_H 1
+#define HAVE_SYS_STAT_H 1
+#define HAVE_SYS_TYPES_H 1
+#define HAVE_TERMIOS_H 1
+#define HAVE_TIME_H 1
+#define HAVE_UNISTD_H 1
+
+#define NEED_MALLOC_H 1
+
+#define RETSIGTYPE void
+#define SIZEOF_INT 4
+#define SIZEOF_LONG_DOUBLE 16
+#define SIZEOF_SHORT 2
+#define STDC_HEADERS 1
+#define TIME_WITH_SYS_TIME 1
+
+/* Qualifiers for send(), recv(), recvfrom() and getnameinfo(). */
+
+#define SEND_TYPE_ARG1 int
+#define SEND_QUAL_ARG2 const
+#define SEND_TYPE_ARG2 void *
+#define SEND_TYPE_ARG3 int
+#define SEND_TYPE_ARG4 int
+#define SEND_TYPE_RETV int
+
+#define RECV_TYPE_ARG1 int
+#define RECV_TYPE_ARG2 void *
+#define RECV_TYPE_ARG3 int
+#define RECV_TYPE_ARG4 int
+#define RECV_TYPE_RETV int
+
+#define RECVFROM_TYPE_ARG1 int
+#define RECVFROM_TYPE_ARG2 void
+#define RECVFROM_TYPE_ARG3 int
+#define RECVFROM_TYPE_ARG4 int
+#define RECVFROM_TYPE_ARG5 struct sockaddr
+#define RECVFROM_TYPE_ARG6 int
+#define RECVFROM_TYPE_RETV int
+#define RECVFROM_TYPE_ARG2_IS_VOID 1
+
+#define GETNAMEINFO_QUAL_ARG1 const
+#define GETNAMEINFO_TYPE_ARG1 struct sockaddr *
+#define GETNAMEINFO_TYPE_ARG2 int
+#define GETNAMEINFO_TYPE_ARG46 int
+#define GETNAMEINFO_TYPE_ARG7 int
+
+#define BSD
+
+/* CURLDEBUG definition enables memory tracking */
+/* #define CURLDEBUG */
+
+/* USE_ZLIB on cmd-line */
+#ifdef USE_ZLIB
+ #define HAVE_ZLIB_H 1
+ #define HAVE_LIBZ 1
+#endif
+
+/* USE_SSLEAY on cmd-line */
+#ifdef USE_SSLEAY
+ #define HAVE_CRYPTO_CLEANUP_ALL_EX_DATA 1
+ #define HAVE_OPENSSL_ENGINE_H 1
+ #define OPENSSL_NO_KRB5 1
+ #define USE_OPENSSL 1
+#endif
+
+/* to disable LDAP */
+#define CURL_DISABLE_LDAP 1
+
+#define in_addr_t u_long
+
+#if defined(__HIGHC__) || \
+ (defined(__GNUC__) && (__GNUC__ < 4))
+#define ssize_t int
+#endif
+
+#define CURL_CA_BUNDLE getenv("CURL_CA_BUNDLE")
+
+/* Target HAVE_x section */
+
+#if defined(DJGPP)
+ #define HAVE_BASENAME 1
+ #define HAVE_STRCASECMP 1
+ #define HAVE_SIGACTION 1
+ #define HAVE_SIGSETJMP 1
+ #define HAVE_SYS_TIME_H 1
+ #define HAVE_VARIADIC_MACROS_GCC 1
+
+ #if (DJGPP_MINOR >= 4)
+ #define HAVE_STRLCAT 1
+ #endif
+
+ /* Because djgpp <= 2.03 doesn't have snprintf() etc. */
+ #if (DJGPP_MINOR < 4)
+ #define _MPRINTF_REPLACE
+ #endif
+
+#elif defined(__WATCOMC__)
+ #define HAVE_STRCASECMP 1
+
+#elif defined(__HIGHC__)
+ #define HAVE_SYS_TIME_H 1
+#endif
+
+#ifdef MSDOS /* Watt-32 */
+ #define HAVE_CLOSESOCKET_CAMEL 1
+ #define CloseSocket(s) close_s((s))
+#endif
+
+#undef word
+#undef byte
+
+#endif /* HEADER_CONFIG_DOS_H */
+
diff --git a/lib/connect.c b/lib/connect.c
index eb6df71..e178633 100644
--- a/lib/connect.c
+++ b/lib/connect.c
@@ -112,10 +112,11 @@ struct Curl_sockaddr_ex {
static bool verifyconnect(curl_socket_t sockfd, int *error);
-static curl_socket_t
+static CURLcode
singleipconnect(struct connectdata *conn,
const Curl_addrinfo *ai, /* start connecting to this */
long timeout_ms,
+ curl_socket_t *sock,
bool *connected);
/*
@@ -173,6 +174,9 @@ long Curl_timeleft(struct connectdata *conn,
/* substract elapsed time */
timeout_ms -= Curl_tvdiff(*nowp, data->progress.t_startsingle);
+ if(!timeout_ms)
+ /* avoid returning 0 as that means no timeout! */
+ return -1;
return timeout_ms;
}
@@ -180,16 +184,13 @@ long Curl_timeleft(struct connectdata *conn,
/*
* waitconnect() waits for a TCP connect on the given socket for the specified
* number if milliseconds. It returns:
- * 0 fine connect
- * -1 select() error
- * 1 select() timeout
- * 2 select() returned with an error condition fd_set
*/
#define WAITCONN_CONNECTED 0
#define WAITCONN_SELECT_ERROR -1
#define WAITCONN_TIMEOUT 1
#define WAITCONN_FDSET_ERROR 2
+#define WAITCONN_ABORTED 3
static
int waitconnect(struct connectdata *conn,
@@ -209,9 +210,8 @@ int waitconnect(struct connectdata *conn,
/* now select() until we get connect or timeout */
rc = Curl_socket_ready(CURL_SOCKET_BAD, sockfd, (int)(timeout_msec>1000?
1000:timeout_msec));
-
if(Curl_pgrsUpdate(conn))
- return CURLE_ABORTED_BY_CALLBACK;
+ return WAITCONN_ABORTED;
if(-1 == rc)
/* error, no connect here, try next */
@@ -492,37 +492,130 @@ static bool verifyconnect(curl_socket_t sockfd, int *error)
/* Used within the multi interface. Try next IP address, return TRUE if no
more address exists or error */
-static bool trynextip(struct connectdata *conn,
- int sockindex,
- bool *connected)
+static CURLcode trynextip(struct connectdata *conn,
+ int sockindex,
+ bool *connected)
{
curl_socket_t sockfd;
Curl_addrinfo *ai;
- /* first close the failed socket */
- sclose(conn->sock[sockindex]);
+ /* First clean up after the failed socket.
+ Don't close it yet to ensure that the next IP's socket gets a different
+ file descriptor, which can prevent bugs when the curl_multi_socket_action
+ interface is used with certain select() replacements such as kqueue. */
+ curl_socket_t fd_to_close = conn->sock[sockindex];
conn->sock[sockindex] = CURL_SOCKET_BAD;
*connected = FALSE;
- if(sockindex != FIRSTSOCKET)
- return TRUE; /* no next */
+ if(sockindex != FIRSTSOCKET) {
+ sclose(fd_to_close);
+ return CURLE_COULDNT_CONNECT; /* no next */
+ }
/* try the next address */
ai = conn->ip_addr->ai_next;
while(ai) {
- sockfd = singleipconnect(conn, ai, 0L, connected);
+ CURLcode res = singleipconnect(conn, ai, 0L, &sockfd, connected);
+ if(res)
+ return res;
if(sockfd != CURL_SOCKET_BAD) {
/* store the new socket descriptor */
conn->sock[sockindex] = sockfd;
conn->ip_addr = ai;
- return FALSE;
+ sclose(fd_to_close);
+ return CURLE_OK;
}
ai = ai->ai_next;
}
+ sclose(fd_to_close);
+ return CURLE_COULDNT_CONNECT;
+}
+
+/* retrieves ip address and port from a sockaddr structure */
+static bool getaddressinfo(struct sockaddr* sa, char* addr,
+ long* port)
+{
+ unsigned short us_port;
+ struct sockaddr_in* si = NULL;
+#ifdef ENABLE_IPV6
+ struct sockaddr_in6* si6 = NULL;
+#endif
+
+ switch (sa->sa_family) {
+ case AF_INET:
+ si = (struct sockaddr_in*) sa;
+ if(Curl_inet_ntop(sa->sa_family, &si->sin_addr,
+ addr, MAX_IPADR_LEN) == NULL)
+ return FALSE;
+ us_port = ntohs(si->sin_port);
+ *port = us_port;
+ break;
+#ifdef ENABLE_IPV6
+ case AF_INET6:
+ si6 = (struct sockaddr_in6*)sa;
+ if(Curl_inet_ntop(sa->sa_family, &si6->sin6_addr,
+ addr, MAX_IPADR_LEN) == NULL)
+ return FALSE;
+ us_port = ntohs(si6->sin6_port);
+ *port = us_port;
+ break;
+#endif
+ default:
+ addr[0] = '\0';
+ *port = 0;
+ }
return TRUE;
}
+/* retrieves the start/end point information of a socket of an established
+ connection */
+void Curl_updateconninfo(struct connectdata *conn, curl_socket_t sockfd)
+{
+ int error;
+ curl_socklen_t len;
+ struct Curl_sockaddr_storage ssrem;
+ struct Curl_sockaddr_storage ssloc;
+ struct SessionHandle *data = conn->data;
+ struct PureInfo *info = &conn->data->info;
+
+ if(conn->bits.reuse)
+ /* reusing same connection */
+ return;
+
+ len = sizeof(struct Curl_sockaddr_storage);
+ if(getpeername(sockfd, (struct sockaddr*) &ssrem, &len)) {
+ error = SOCKERRNO;
+ failf(data, "getpeername() failed with errno %d: %s",
+ error, Curl_strerror(conn, error));
+ return;
+ }
+
+ len = sizeof(struct Curl_sockaddr_storage);
+ if(getsockname(sockfd, (struct sockaddr*) &ssloc, &len)) {
+ error = SOCKERRNO;
+ failf(data, "getsockname() failed with errno %d: %s",
+ error, Curl_strerror(conn, error));
+ return;
+ }
+
+ if(!getaddressinfo((struct sockaddr*)&ssrem,
+ info->ip, &info->port)) {
+ error = ERRNO;
+ failf(data, "ssrem inet_ntop() failed with errno %d: %s",
+ error, Curl_strerror(conn, error));
+ return;
+ }
+
+ if(!getaddressinfo((struct sockaddr*)&ssloc,
+ info->localip, &info->localport)) {
+ error = ERRNO;
+ failf(data, "ssloc inet_ntop() failed with errno %d: %s",
+ error, Curl_strerror(conn, error));
+ return;
+ }
+}
+
/*
* Curl_is_connected() is used from the multi interface to check if the
* firstsocket has connected.
@@ -537,6 +630,7 @@ CURLcode Curl_is_connected(struct connectdata *conn,
CURLcode code = CURLE_OK;
curl_socket_t sockfd = conn->sock[sockindex];
long allow = DEFAULT_CONNECT_TIMEOUT;
+ int error = 0;
DEBUGASSERT(sockindex >= FIRSTSOCKET && sockindex <= SECONDARYSOCKET);
@@ -544,13 +638,6 @@ CURLcode Curl_is_connected(struct connectdata *conn,
if(conn->bits.tcpconnect) {
/* we are connected already! */
- long allow_total = 0;
-
- /* subtract the most strict timeout of the ones */
- if(data->set.timeout)
- allow_total = data->set.timeout;
-
- Curl_expire(data, allow_total);
*connected = TRUE;
return CURLE_OK;
}
@@ -564,52 +651,52 @@ CURLcode Curl_is_connected(struct connectdata *conn,
return CURLE_OPERATION_TIMEDOUT;
}
- Curl_expire(data, allow);
-
/* check for connect without timeout as we want to return immediately */
rc = waitconnect(conn, sockfd, 0);
+ if(WAITCONN_TIMEOUT == rc)
+ /* not an error, but also no connection yet */
+ return code;
if(WAITCONN_CONNECTED == rc) {
- int error;
if(verifyconnect(sockfd, &error)) {
/* we are connected, awesome! */
conn->bits.tcpconnect = TRUE;
*connected = TRUE;
+ Curl_pgrsTime(data, TIMER_CONNECT); /* connect done */
+ Curl_verboseconnect(conn);
+ Curl_updateconninfo(conn, sockfd);
+
return CURLE_OK;
}
/* nope, not connected for real */
- data->state.os_errno = error;
- infof(data, "Connection failed\n");
- if(trynextip(conn, sockindex, connected)) {
- failf(data, "Failed connect to %s:%ld; %s",
- conn->host.name, conn->port, Curl_strerror(conn, error));
- code = CURLE_COULDNT_CONNECT;
- }
}
- else if(WAITCONN_TIMEOUT != rc) {
- int error = 0;
-
+ else {
/* nope, not connected */
if(WAITCONN_FDSET_ERROR == rc) {
(void)verifyconnect(sockfd, &error);
- data->state.os_errno = error;
- infof(data, "%s\n",Curl_strerror(conn,error));
+ infof(data, "%s\n",Curl_strerror(conn, error));
}
else
infof(data, "Connection failed\n");
-
- if(trynextip(conn, sockindex, connected)) {
- error = SOCKERRNO;
- data->state.os_errno = error;
- failf(data, "Failed connect to %s:%ld; %s",
- conn->host.name, conn->port, Curl_strerror(conn, error));
- code = CURLE_COULDNT_CONNECT;
- }
}
+
/*
- * If the connection failed here, we should attempt to connect to the "next
- * address" for the given host.
+ * The connection failed here, we should attempt to connect to the "next
+ * address" for the given host. But first remember the latest error.
*/
+ if(error) {
+ data->state.os_errno = error;
+ SET_SOCKERRNO(error);
+ }
+
+ code = trynextip(conn, sockindex, connected);
+
+ if(code) {
+ error = SOCKERRNO;
+ data->state.os_errno = error;
+ failf(data, "Failed connect to %s:%ld; %s",
+ conn->host.name, conn->port, Curl_strerror(conn, error));
+ }
return code;
}
@@ -691,12 +778,20 @@ void Curl_sndbufset(curl_socket_t sockfd)
#endif
-/* singleipconnect() connects to the given IP only, and it may return without
- having connected if used from the multi interface. */
-static curl_socket_t
+/*
+ * singleipconnect()
+ *
+ * Note that even on connect fail it returns CURLE_OK, but with 'sock' set to
+ * CURL_SOCKET_BAD. Other errors will however return proper errors.
+ *
+ * singleipconnect() connects to the given IP only, and it may return without
+ * having connected if used from the multi interface.
+ */
+static CURLcode
singleipconnect(struct connectdata *conn,
const Curl_addrinfo *ai,
long timeout_ms,
+ curl_socket_t *sockp,
bool *connected)
{
struct Curl_sockaddr_ex addr;
@@ -706,13 +801,15 @@ singleipconnect(struct connectdata *conn,
bool isconnected;
struct SessionHandle *data = conn->data;
curl_socket_t sockfd;
- CURLcode res;
+ CURLcode res = CURLE_OK;
const void *iptoprint;
struct sockaddr_in * const sa4 = (void *)&addr.sa_addr;
#ifdef ENABLE_IPV6
struct sockaddr_in6 * const sa6 = (void *)&addr.sa_addr;
#endif
+ *sockp = CURL_SOCKET_BAD;
+
/*
* The Curl_sockaddr_ex structure is basically libcurl's external API
* curl_sockaddr structure with enough space available to directly hold
@@ -751,7 +848,7 @@ singleipconnect(struct connectdata *conn,
if(sockfd == CURL_SOCKET_BAD)
/* no socket, no connection */
- return CURL_SOCKET_BAD;
+ return CURLE_OK;
#if defined(ENABLE_IPV6) && defined(HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID)
if (conn->scope && (addr.family == AF_INET6))
@@ -804,7 +901,7 @@ singleipconnect(struct connectdata *conn,
CURLSOCKTYPE_IPCXN);
if(error) {
sclose(sockfd); /* close the socket and bail out */
- return CURL_SOCKET_BAD;
+ return res;
}
}
@@ -812,7 +909,7 @@ singleipconnect(struct connectdata *conn,
res = bindlocal(conn, sockfd, addr.family);
if(res) {
sclose(sockfd); /* close socket and bail out */
- return CURL_SOCKET_BAD;
+ return res;
}
/* set socket non-blocking */
@@ -840,6 +937,10 @@ singleipconnect(struct connectdata *conn,
#endif
#endif
rc = waitconnect(conn, sockfd, timeout_ms);
+ if(WAITCONN_ABORTED == rc) {
+ sclose(sockfd);
+ return CURLE_ABORTED_BY_CALLBACK;
+ }
break;
default:
/* unknown error, fallthrough and try another address! */
@@ -855,7 +956,8 @@ singleipconnect(struct connectdata *conn,
if((WAITCONN_TIMEOUT == rc) &&
(data->state.used_interface == Curl_if_multi)) {
/* Timeout when running the multi interface */
- return sockfd;
+ *sockp = sockfd;
+ return CURLE_OK;
}
isconnected = verifyconnect(sockfd, &error);
@@ -864,7 +966,9 @@ singleipconnect(struct connectdata *conn,
/* we are connected, awesome! */
*connected = TRUE; /* this is a true connect */
infof(data, "connected\n");
- return sockfd;
+ Curl_updateconninfo(conn, sockfd);
+ *sockp = sockfd;
+ return CURLE_OK;
}
else if(WAITCONN_TIMEOUT == rc)
infof(data, "Timeout\n");
@@ -876,7 +980,7 @@ singleipconnect(struct connectdata *conn,
/* connect failed or timed out */
sclose(sockfd);
- return CURL_SOCKET_BAD;
+ return CURLE_OK;
}
/*
@@ -918,7 +1022,6 @@ CURLcode Curl_connecthost(struct connectdata *conn, /* context */
failf(data, "Connection time-out");
return CURLE_OPERATION_TIMEDOUT;
}
- Curl_expire(data, timeout_ms);
/* Max time for each address */
num_addr = Curl_num_addresses(remotehost->addr);
@@ -941,7 +1044,11 @@ CURLcode Curl_connecthost(struct connectdata *conn, /* context */
curr_addr = curr_addr->ai_next, aliasindex++) {
/* start connecting to the IP curr_addr points to */
- sockfd = singleipconnect(conn, curr_addr, timeout_per_addr, connected);
+ CURLcode res =
+ singleipconnect(conn, curr_addr, timeout_per_addr, &sockfd, connected);
+
+ if(res)
+ return res;
if(sockfd != CURL_SOCKET_BAD)
break;
@@ -979,12 +1086,12 @@ CURLcode Curl_connecthost(struct connectdata *conn, /* context */
* Used to extract socket and connectdata struct for the most recent
* transfer on the given SessionHandle.
*
- * The socket 'long' will be -1 in case of failure!
+ * The returned socket will be CURL_SOCKET_BAD in case of failure!
*/
-CURLcode Curl_getconnectinfo(struct SessionHandle *data,
- long *param_longp,
- struct connectdata **connp)
+curl_socket_t Curl_getconnectinfo(struct SessionHandle *data,
+ struct connectdata **connp)
{
+ curl_socket_t sockfd;
if((data->state.lastconnect != -1) &&
(data->state.connc->connects[data->state.lastconnect] != NULL)) {
struct connectdata *c =
@@ -992,13 +1099,13 @@ CURLcode Curl_getconnectinfo(struct SessionHandle *data,
if(connp)
/* only store this if the caller cares for it */
*connp = c;
- *param_longp = c->sock[FIRSTSOCKET];
+ sockfd = c->sock[FIRSTSOCKET];
/* we have a socket connected, let's determine if the server shut down */
/* determine if ssl */
if(c->ssl[FIRSTSOCKET].use) {
/* use the SSL context */
if(!Curl_ssl_check_cxn(c))
- *param_longp = -1; /* FIN received */
+ return CURL_SOCKET_BAD; /* FIN received */
}
/* Minix 3.1 doesn't support any flags on recv; just assume socket is OK */
#ifdef MSG_PEEK
@@ -1007,13 +1114,13 @@ CURLcode Curl_getconnectinfo(struct SessionHandle *data,
char buf;
if(recv((RECV_TYPE_ARG1)c->sock[FIRSTSOCKET], (RECV_TYPE_ARG2)&buf,
(RECV_TYPE_ARG3)1, (RECV_TYPE_ARG4)MSG_PEEK) == 0) {
- *param_longp = -1; /* FIN received */
+ return CURL_SOCKET_BAD; /* FIN received */
}
}
#endif
}
else
- *param_longp = -1;
+ return CURL_SOCKET_BAD;
- return CURLE_OK;
+ return sockfd;
}
diff --git a/lib/connect.h b/lib/connect.h
index 36ea4f6..2c6b10a 100644
--- a/lib/connect.h
+++ b/lib/connect.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -47,11 +47,10 @@ long Curl_timeleft(struct connectdata *conn,
* Used to extract socket and connectdata struct for the most recent
* transfer on the given SessionHandle.
*
- * The socket 'long' will be -1 in case of failure!
+ * The returned socket will be CURL_SOCKET_BAD in case of failure!
*/
-CURLcode Curl_getconnectinfo(struct SessionHandle *data,
- long *param_longp,
- struct connectdata **connp);
+curl_socket_t Curl_getconnectinfo(struct SessionHandle *data,
+ struct connectdata **connp);
#ifdef WIN32
/* When you run a program that uses the Windows Sockets API, you may
@@ -68,4 +67,6 @@ void Curl_sndbufset(curl_socket_t sockfd);
#define Curl_sndbufset(y)
#endif
+void Curl_updateconninfo(struct connectdata *conn, curl_socket_t sockfd);
+
#endif
diff --git a/lib/content_encoding.c b/lib/content_encoding.c
index 69aa7bc..6fb7c8d 100644
--- a/lib/content_encoding.c
+++ b/lib/content_encoding.c
@@ -103,7 +103,7 @@ inflate_stream(struct connectdata *conn,
status = inflate(z, Z_SYNC_FLUSH);
if(status == Z_OK || status == Z_STREAM_END) {
allow_restart = 0;
- if(DSIZ - z->avail_out) {
+ if((DSIZ - z->avail_out) && (!k->ignorebody)) {
result = Curl_client_write(conn, CLIENTWRITE_BODY, decomp,
DSIZ - z->avail_out);
/* if !CURLE_OK, clean up, return */
@@ -123,7 +123,9 @@ inflate_stream(struct connectdata *conn,
}
/* Done with these bytes, exit */
- if(status == Z_OK && z->avail_in == 0) {
+
+ /* status is always Z_OK at this point! */
+ if(z->avail_in == 0) {
free(decomp);
return result;
}
@@ -247,7 +249,6 @@ static enum {
/* Skip over the NUL */
--len;
- ++data;
}
if(flags & HEAD_CRC) {
@@ -255,7 +256,6 @@ static enum {
return GZIP_UNDERFLOW;
len -= 2;
- data += 2;
}
*headerlen = totallen - len;
diff --git a/lib/curl_addrinfo.c b/lib/curl_addrinfo.c
index c38a1ed..5098fa4 100644
--- a/lib/curl_addrinfo.c
+++ b/lib/curl_addrinfo.c
@@ -151,7 +151,10 @@ Curl_getaddrinfo_ex(const char *nodename,
ca->ai_next = NULL;
if((ai->ai_addrlen > 0) && (ai->ai_addr != NULL)) {
- ca->ai_addrlen = ai->ai_addrlen;
+ /* typecast below avoid warning on at least win64:
+ conversion from 'size_t' to 'curl_socklen_t', possible loss of data
+ */
+ ca->ai_addrlen = (curl_socklen_t)ai->ai_addrlen;
if((ca->ai_addr = malloc(ca->ai_addrlen)) == NULL) {
error = EAI_MEMORY;
free(ca);
diff --git a/lib/curl_config.h.cmake b/lib/curl_config.h.cmake
index fd6b32a..deebe71 100644
--- a/lib/curl_config.h.cmake
+++ b/lib/curl_config.h.cmake
@@ -58,10 +58,7 @@
/* to enable hidden symbols */
#cmakedefine CURL_HIDDEN_SYMBOLS ${CURL_HIDDEN_SYMBOLS}
-/* W$ LDAP with non-W$ compiler */
-#cmakedefine CURL_LDAP_HYBRID ${CURL_LDAP_HYBRID}
-
-/* Use W$ LDAP implementation */
+/* Use Windows LDAP implementation */
#cmakedefine CURL_LDAP_WIN ${CURL_LDAP_WIN}
/* when not building a shared library */
@@ -889,6 +886,9 @@
/* if GnuTLS is enabled */
#cmakedefine USE_GNUTLS ${USE_GNUTLS}
+/* if PolarSSL is enabled */
+#cmakedefine USE_POLARSSL ${USE_POLARSSL}
+
/* if libSSH2 is in use */
#cmakedefine USE_LIBSSH2 ${USE_LIBSSH2}
diff --git a/lib/curl_config.h.in b/lib/curl_config.h.in
index 846fb27..15ea387 100644
--- a/lib/curl_config.h.in
+++ b/lib/curl_config.h.in
@@ -24,6 +24,9 @@
/* to disable FTP */
#undef CURL_DISABLE_FTP
+/* to disable Gopher */
+#undef CURL_DISABLE_GOPHER
+
/* to disable HTTP */
#undef CURL_DISABLE_HTTP
@@ -63,10 +66,7 @@
/* to enable hidden symbols */
#undef CURL_HIDDEN_SYMBOLS
-/* W$ LDAP with non-W$ compiler */
-#undef CURL_LDAP_HYBRID
-
-/* Use W$ LDAP implementation */
+/* Use Windows LDAP implementation */
#undef CURL_LDAP_WIN
/* when not building a shared library */
@@ -352,6 +352,9 @@
/* Define to 1 if you have the ldap.h header file. */
#undef HAVE_LDAP_H
+/* Define to 1 if you have the `ldap_init_fd' function. */
+#undef HAVE_LDAP_INIT_FD
+
/* Use LDAPS implementation */
#undef HAVE_LDAP_SSL
@@ -361,6 +364,9 @@
/* Define to 1 if you have the `ldap_url_parse' function. */
#undef HAVE_LDAP_URL_PARSE
+/* Define to 1 if you have the `gcrypt' library (-lgcrypt). */
+#undef HAVE_LIBGCRYPT
+
/* Define to 1 if you have the <libgen.h> header file. */
#undef HAVE_LIBGEN_H
@@ -373,12 +379,24 @@
/* Define to 1 if you have the `resolve' library (-lresolve). */
#undef HAVE_LIBRESOLVE
+/* Define to 1 if you have the <librtmp/rtmp.h> header file. */
+#undef HAVE_LIBRTMP_RTMP_H
+
/* Define to 1 if you have the `ssh2' library (-lssh2). */
#undef HAVE_LIBSSH2
+/* Define to 1 if you have the `libssh2_exit' function. */
+#undef HAVE_LIBSSH2_EXIT
+
/* Define to 1 if you have the <libssh2.h> header file. */
#undef HAVE_LIBSSH2_H
+/* Define to 1 if you have the `libssh2_init' function. */
+#undef HAVE_LIBSSH2_INIT
+
+/* Define to 1 if you have the `libssh2_scp_send64' function. */
+#undef HAVE_LIBSSH2_SCP_SEND64
+
/* Define to 1 if you have the `libssh2_version' function. */
#undef HAVE_LIBSSH2_VERSION
@@ -482,6 +500,9 @@
/* Define to 1 if you have a working POSIX-style strerror_r function. */
#undef HAVE_POSIX_STRERROR_R
+/* if you have <pthread.h> */
+#undef HAVE_PTHREAD_H
+
/* Define to 1 if you have the <pwd.h> header file. */
#undef HAVE_PWD_H
@@ -912,6 +933,9 @@
/* if GnuTLS is enabled */
#undef USE_GNUTLS
+/* if librtmp is in use */
+#undef USE_LIBRTMP
+
/* if libSSH2 is in use */
#undef USE_LIBSSH2
@@ -921,12 +945,21 @@
/* if NSS is enabled */
#undef USE_NSS
+/* Use OpenLDAP-specific code */
+#undef USE_OPENLDAP
+
/* if OpenSSL is in use */
#undef USE_OPENSSL
+/* if PolarSSL is enabled */
+#undef USE_POLARSSL
+
/* if SSL is enabled */
#undef USE_SSLEAY
+/* if you want POSIX threaded DNS lookup */
+#undef USE_THREADS_POSIX
+
/* Define to 1 if you are building a Windows target without large file
support. */
#undef USE_WIN32_LARGE_FILES
diff --git a/lib/curl_fnmatch.c b/lib/curl_fnmatch.c
new file mode 100644
index 0000000..ad4ec18
--- /dev/null
+++ b/lib/curl_fnmatch.c
@@ -0,0 +1,424 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at http://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ***************************************************************************/
+
+#include "setup.h"
+
+#include "curl_fnmatch.h"
+
+#define _MPRINTF_REPLACE /* use our functions only */
+#include <curl/mprintf.h>
+
+#include "curl_memory.h"
+/* The last #include file should be: */
+#include "memdebug.h"
+
+#define CURLFNM_CHARSET_LEN (sizeof(char) * 256)
+#define CURLFNM_CHSET_SIZE (CURLFNM_CHARSET_LEN + 15)
+
+#define CURLFNM_NEGATE CURLFNM_CHARSET_LEN
+
+#define CURLFNM_ALNUM (CURLFNM_CHARSET_LEN + 1)
+#define CURLFNM_DIGIT (CURLFNM_CHARSET_LEN + 2)
+#define CURLFNM_XDIGIT (CURLFNM_CHARSET_LEN + 3)
+#define CURLFNM_ALPHA (CURLFNM_CHARSET_LEN + 4)
+#define CURLFNM_PRINT (CURLFNM_CHARSET_LEN + 5)
+#define CURLFNM_BLANK (CURLFNM_CHARSET_LEN + 6)
+#define CURLFNM_LOWER (CURLFNM_CHARSET_LEN + 7)
+#define CURLFNM_GRAPH (CURLFNM_CHARSET_LEN + 8)
+#define CURLFNM_SPACE (CURLFNM_CHARSET_LEN + 9)
+#define CURLFNM_UPPER (CURLFNM_CHARSET_LEN + 10)
+
+typedef enum {
+ CURLFNM_LOOP_DEFAULT = 0,
+ CURLFNM_LOOP_BACKSLASH
+} loop_state;
+
+typedef enum {
+ CURLFNM_SCHS_DEFAULT = 0,
+ CURLFNM_SCHS_MAYRANGE,
+ CURLFNM_SCHS_MAYRANGE2,
+ CURLFNM_SCHS_RIGHTBR,
+ CURLFNM_SCHS_RIGHTBRLEFTBR
+} setcharset_state;
+
+typedef enum {
+ CURLFNM_PKW_INIT = 0,
+ CURLFNM_PKW_DDOT
+} parsekey_state;
+
+#define SETCHARSET_OK 1
+#define SETCHARSET_FAIL 0
+
+static int parsekeyword(unsigned char **pattern, unsigned char *charset)
+{
+ parsekey_state state = CURLFNM_PKW_INIT;
+#define KEYLEN 10
+ char keyword[KEYLEN] = { 0 };
+ int found = FALSE;
+ int i;
+ unsigned char *p = *pattern;
+ for(i = 0; !found; i++) {
+ char c = *p++;
+ if(i >= KEYLEN)
+ return SETCHARSET_FAIL;
+ switch(state) {
+ case CURLFNM_PKW_INIT:
+ if(ISALPHA(c) && ISLOWER(c))
+ keyword[i] = c;
+ else if(c == ':')
+ state = CURLFNM_PKW_DDOT;
+ else
+ return 0;
+ break;
+ case CURLFNM_PKW_DDOT:
+ if(c == ']')
+ found = TRUE;
+ else
+ return SETCHARSET_FAIL;
+ }
+ }
+#undef KEYLEN
+
+ *pattern = p; /* move caller's pattern pointer */
+ if(strcmp(keyword, "digit") == 0)
+ charset[CURLFNM_DIGIT] = 1;
+ else if(strcmp(keyword, "alnum") == 0)
+ charset[CURLFNM_ALNUM] = 1;
+ else if(strcmp(keyword, "alpha") == 0)
+ charset[CURLFNM_ALPHA] = 1;
+ else if(strcmp(keyword, "xdigit") == 0)
+ charset[CURLFNM_XDIGIT] = 1;
+ else if(strcmp(keyword, "print") == 0)
+ charset[CURLFNM_PRINT] = 1;
+ else if(strcmp(keyword, "graph") == 0)
+ charset[CURLFNM_GRAPH] = 1;
+ else if(strcmp(keyword, "space") == 0)
+ charset[CURLFNM_SPACE] = 1;
+ else if(strcmp(keyword, "blank") == 0)
+ charset[CURLFNM_BLANK] = 1;
+ else if(strcmp(keyword, "upper") == 0)
+ charset[CURLFNM_UPPER] = 1;
+ else if(strcmp(keyword, "lower") == 0)
+ charset[CURLFNM_LOWER] = 1;
+ else
+ return SETCHARSET_FAIL;
+ return SETCHARSET_OK;
+}
+
+/* returns 1 (true) if pattern is OK, 0 if is bad ("p" is pattern pointer) */
+static int setcharset(unsigned char **p, unsigned char *charset)
+{
+ setcharset_state state = CURLFNM_SCHS_DEFAULT;
+ unsigned char rangestart = 0;
+ unsigned char lastchar = 0;
+ bool something_found = FALSE;
+ unsigned char c;
+ for(;;) {
+ c = **p;
+ switch(state) {
+ case CURLFNM_SCHS_DEFAULT:
+ if(ISALNUM(c)) { /* ASCII value */
+ rangestart = c;
+ charset[c] = 1;
+ (*p)++;
+ state = CURLFNM_SCHS_MAYRANGE;
+ something_found = TRUE;
+ }
+ else if(c == ']') {
+ if(something_found)
+ return SETCHARSET_OK;
+ else
+ something_found = TRUE;
+ state = CURLFNM_SCHS_RIGHTBR;
+ charset[c] = 1;
+ (*p)++;
+ }
+ else if(c == '[') {
+ char c2 = *((*p)+1);
+ if(c2 == ':') { /* there has to be a keyword */
+ (*p) += 2;
+ if(parsekeyword(p, charset)) {
+ state = CURLFNM_SCHS_DEFAULT;
+ }
+ else
+ return SETCHARSET_FAIL;
+ }
+ else {
+ charset[c] = 1;
+ (*p)++;
+ }
+ something_found = TRUE;
+ }
+ else if(c == '?' || c == '*') {
+ something_found = TRUE;
+ charset[c] = 1;
+ (*p)++;
+ }
+ else if(c == '^' || c == '!') {
+ if(!something_found) {
+ if(charset[CURLFNM_NEGATE]) {
+ charset[c] = 1;
+ something_found = TRUE;
+ }
+ else
+ charset[CURLFNM_NEGATE] = 1; /* negate charset */
+ }
+ else
+ charset[c] = 1;
+ (*p)++;
+ }
+ else if(c == '\\') {
+ c = *(++(*p));
+ if(ISPRINT((c))) {
+ something_found = TRUE;
+ state = CURLFNM_SCHS_MAYRANGE;
+ charset[c] = 1;
+ rangestart = c;
+ (*p)++;
+ }
+ else
+ return SETCHARSET_FAIL;
+ }
+ else if(c == '\0') {
+ return SETCHARSET_FAIL;
+ }
+ else {
+ charset[c] = 1;
+ (*p)++;
+ something_found = TRUE;
+ }
+ break;
+ case CURLFNM_SCHS_MAYRANGE:
+ if(c == '-') {
+ charset[c] = 1;
+ (*p)++;
+ lastchar = '-';
+ state = CURLFNM_SCHS_MAYRANGE2;
+ }
+ else if(c == '[') {
+ state = CURLFNM_SCHS_DEFAULT;
+ }
+ else if(ISALNUM(c)) {
+ charset[c] = 1;
+ (*p)++;
+ }
+ else if(c == '\\') {
+ c = *(++(*p));
+ if(ISPRINT(c)) {
+ charset[c] = 1;
+ (*p)++;
+ }
+ else
+ return SETCHARSET_FAIL;
+ }
+ else if(c == ']') {
+ return SETCHARSET_OK;
+ }
+ else
+ return SETCHARSET_FAIL;
+ break;
+ case CURLFNM_SCHS_MAYRANGE2:
+ if(c == '\\') {
+ c = *(++(*p));
+ if(!ISPRINT(c))
+ return SETCHARSET_FAIL;
+ }
+ if(c == ']') {
+ return SETCHARSET_OK;
+ }
+ else if(c == '\\') {
+ c = *(++(*p));
+ if(ISPRINT(c)) {
+ charset[c] = 1;
+ state = CURLFNM_SCHS_DEFAULT;
+ (*p)++;
+ }
+ else
+ return SETCHARSET_FAIL;
+ }
+ if(c >= rangestart) {
+ if((ISLOWER(c) && ISLOWER(rangestart)) ||
+ (ISDIGIT(c) && ISDIGIT(rangestart)) ||
+ (ISUPPER(c) && ISUPPER(rangestart))) {
+ charset[lastchar] = 0;
+ rangestart++;
+ while(rangestart++ <= c)
+ charset[rangestart-1] = 1;
+ (*p)++;
+ state = CURLFNM_SCHS_DEFAULT;
+ }
+ else
+ return SETCHARSET_FAIL;
+ }
+ break;
+ case CURLFNM_SCHS_RIGHTBR:
+ if(c == '[') {
+ state = CURLFNM_SCHS_RIGHTBRLEFTBR;
+ charset[c] = 1;
+ (*p)++;
+ }
+ else if(c == ']') {
+ return SETCHARSET_OK;
+ }
+ else if(c == '\0') {
+ return SETCHARSET_FAIL;
+ }
+ else if(ISPRINT(c)) {
+ charset[c] = 1;
+ (*p)++;
+ state = CURLFNM_SCHS_DEFAULT;
+ }
+ else
+ /* used 'goto fail' instead of 'return SETCHARSET_FAIL' to avoid a
+ * nonsense warning 'statement not reached' at end of the fnc when
+ * compiling on Solaris */
+ goto fail;
+ break;
+ case CURLFNM_SCHS_RIGHTBRLEFTBR:
+ if(c == ']') {
+ return SETCHARSET_OK;
+ }
+ else {
+ state = CURLFNM_SCHS_DEFAULT;
+ charset[c] = 1;
+ (*p)++;
+ }
+ break;
+ }
+ }
+fail:
+ return SETCHARSET_FAIL;
+}
+
+static int loop(const unsigned char *pattern, const unsigned char *string)
+{
+ loop_state state = CURLFNM_LOOP_DEFAULT;
+ unsigned char *p = (unsigned char *)pattern;
+ unsigned char *s = (unsigned char *)string;
+ unsigned char charset[CURLFNM_CHSET_SIZE] = { 0 };
+ int rc = 0;
+
+ for (;;) {
+ switch(state) {
+ case CURLFNM_LOOP_DEFAULT:
+ if(*p == '*') {
+ while(*(p+1) == '*') /* eliminate multiple stars */
+ p++;
+ if(*s == '\0' && *(p+1) == '\0')
+ return CURL_FNMATCH_MATCH;
+ rc = loop(p + 1, s); /* *.txt matches .txt <=> .txt matches .txt */
+ if(rc == CURL_FNMATCH_MATCH)
+ return CURL_FNMATCH_MATCH;
+ if(*s) /* let the star eat up one character */
+ s++;
+ else
+ return CURL_FNMATCH_NOMATCH;
+ }
+ else if(*p == '?') {
+ if(ISPRINT(*s)) {
+ s++;
+ p++;
+ }
+ else if(*s == '\0')
+ return CURL_FNMATCH_NOMATCH;
+ else
+ return CURL_FNMATCH_FAIL; /* cannot deal with other character */
+ }
+ else if(*p == '\0') {
+ if(*s == '\0')
+ return CURL_FNMATCH_MATCH;
+ else
+ return CURL_FNMATCH_NOMATCH;
+ }
+ else if(*p == '\\') {
+ state = CURLFNM_LOOP_BACKSLASH;
+ p++;
+ }
+ else if(*p == '[') {
+ unsigned char *pp = p+1; /* cannot handle with pointer to register */
+ if(setcharset(&pp, charset)) {
+ int found = FALSE;
+ if(charset[(unsigned int)*s])
+ found = TRUE;
+ else if(charset[CURLFNM_ALNUM])
+ found = ISALNUM(*s);
+ else if(charset[CURLFNM_ALPHA])
+ found = ISALPHA(*s);
+ else if(charset[CURLFNM_DIGIT])
+ found = ISDIGIT(*s);
+ else if(charset[CURLFNM_XDIGIT])
+ found = ISXDIGIT(*s);
+ else if(charset[CURLFNM_PRINT])
+ found = ISPRINT(*s);
+ else if(charset[CURLFNM_SPACE])
+ found = ISSPACE(*s);
+ else if(charset[CURLFNM_UPPER])
+ found = ISUPPER(*s);
+ else if(charset[CURLFNM_LOWER])
+ found = ISLOWER(*s);
+ else if(charset[CURLFNM_BLANK])
+ found = ISBLANK(*s);
+ else if(charset[CURLFNM_GRAPH])
+ found = ISGRAPH(*s);
+
+ if(charset[CURLFNM_NEGATE])
+ found = !found;
+
+ if(found) {
+ p = pp+1;
+ s++;
+ memset(charset, 0, CURLFNM_CHSET_SIZE);
+ }
+ else
+ return CURL_FNMATCH_NOMATCH;
+ }
+ else
+ return CURL_FNMATCH_FAIL;
+ }
+ else {
+ if(*p++ != *s++)
+ return CURL_FNMATCH_NOMATCH;
+ }
+ break;
+ case CURLFNM_LOOP_BACKSLASH:
+ if(ISPRINT(*p)) {
+ if(*p++ == *s++)
+ state = CURLFNM_LOOP_DEFAULT;
+ else
+ return CURL_FNMATCH_NOMATCH;
+ }
+ else
+ return CURL_FNMATCH_FAIL;
+ break;
+ }
+ }
+}
+
+int Curl_fnmatch(void *ptr, const char *pattern, const char *string)
+{
+ (void)ptr; /* the argument is specified by the curl_fnmatch_callback
+ prototype, but not used by Curl_fnmatch() */
+ if(!pattern || !string) {
+ return CURL_FNMATCH_FAIL;
+ }
+ return loop((unsigned char *)pattern, (unsigned char *)string);
+}
diff --git a/lib/curl_fnmatch.h b/lib/curl_fnmatch.h
new file mode 100644
index 0000000..6335d03
--- /dev/null
+++ b/lib/curl_fnmatch.h
@@ -0,0 +1,44 @@
+#ifndef HEADER_CURL_FNMATCH_H
+#define HEADER_CURL_FNMATCH_H
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at http://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ***************************************************************************/
+
+#define CURL_FNMATCH_MATCH 0
+#define CURL_FNMATCH_NOMATCH 1
+#define CURL_FNMATCH_FAIL 2
+
+/* default pattern matching function
+ * =================================
+ * Implemented with recursive backtracking, if you want to use Curl_fnmatch,
+ * please note that there is not implemented UTF/UNICODE support.
+ *
+ * Implemented features:
+ * '?' notation, does not match UTF characters
+ * '*' can also work with UTF string
+ * [a-zA-Z0-9] enumeration support
+ *
+ * keywords: alnum, digit, xdigit, alpha, print, blank, lower, graph, space
+ * and upper (use as "[[:alnum:]]")
+ */
+int Curl_fnmatch(void *ptr, const char *pattern, const char *string);
+
+#endif /* HEADER_CURL_FNMATCH_H */
diff --git a/lib/curl_gethostname.c b/lib/curl_gethostname.c
new file mode 100644
index 0000000..7f0bfed
--- /dev/null
+++ b/lib/curl_gethostname.c
@@ -0,0 +1,81 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at http://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ***************************************************************************/
+
+#include "setup.h"
+
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+
+#include "curl_gethostname.h"
+
+/*
+ * Curl_gethostname() is a wrapper around gethostname() which allows
+ * overriding the host name that the function would normally return.
+ * This capability is used by the test suite to verify exact matching
+ * of NTLM authentication, which exercises libcurl's MD4 and DES code.
+ *
+ * For libcurl debug enabled builds host name overriding takes place
+ * when environment variable CURL_GETHOSTNAME is set, using the value
+ * held by the variable to override returned host name.
+ *
+ * For libcurl shared library release builds the test suite preloads
+ * another shared library named libhostname using the LD_PRELOAD
+ * mechanism which intercepts, and might override, the gethostname()
+ * function call. In this case a given platform must support the
+ * LD_PRELOAD mechanism and additionally have environment variable
+ * CURL_GETHOSTNAME set in order to override the returned host name.
+ *
+ * For libcurl static library release builds no overriding takes place.
+ */
+
+int Curl_gethostname(char *name, GETHOSTNAME_TYPE_ARG2 namelen) {
+
+#ifndef HAVE_GETHOSTNAME
+
+ /* Allow compilation and return failure when unavailable */
+ (void) name;
+ (void) namelen;
+ return -1;
+
+#else
+
+#ifdef DEBUGBUILD
+
+ /* Override host name when environment variable CURL_GETHOSTNAME is set */
+ const char *force_hostname = getenv("CURL_GETHOSTNAME");
+ if(force_hostname) {
+ strncpy(name, force_hostname, namelen);
+ name[namelen-1] = '\0';
+ return 0;
+ }
+
+#endif /* DEBUGBUILD */
+
+ /* The call to system's gethostname() might get intercepted by the
+ libhostname library when libcurl is built as a non-debug shared
+ library when running the test suite. */
+ return gethostname(name, namelen);
+
+#endif
+
+}
diff --git a/lib/curl_gethostname.h b/lib/curl_gethostname.h
new file mode 100644
index 0000000..b8ecf88
--- /dev/null
+++ b/lib/curl_gethostname.h
@@ -0,0 +1,27 @@
+#ifndef HEADER_CURL_GETHOSTNAME_H
+#define HEADER_CURL_GETHOSTNAME_H
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at http://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ***************************************************************************/
+
+int Curl_gethostname(char *name, GETHOSTNAME_TYPE_ARG2 namelen);
+
+#endif /* HEADER_CURL_GETHOSTNAME_H */
diff --git a/lib/curl_hmac.h b/lib/curl_hmac.h
new file mode 100644
index 0000000..9b65c8c
--- /dev/null
+++ b/lib/curl_hmac.h
@@ -0,0 +1,67 @@
+#ifndef HEADER_CURL_HMAC_H
+#define HEADER_CURL_HMAC_H
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at http://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ***************************************************************************/
+
+#ifndef CURL_DISABLE_CRYPTO_AUTH
+
+typedef void (* HMAC_hinit_func)(void * context);
+typedef void (* HMAC_hupdate_func)(void * context,
+ const unsigned char * data,
+ unsigned int len);
+typedef void (* HMAC_hfinal_func)(unsigned char * result, void * context);
+
+
+/* Per-hash function HMAC parameters. */
+
+typedef struct {
+ HMAC_hinit_func hmac_hinit; /* Initialize context procedure. */
+ HMAC_hupdate_func hmac_hupdate; /* Update context with data. */
+ HMAC_hfinal_func hmac_hfinal; /* Get final result procedure. */
+ unsigned int hmac_ctxtsize; /* Context structure size. */
+ unsigned int hmac_maxkeylen; /* Maximum key length (bytes). */
+ unsigned int hmac_resultlen; /* Result length (bytes). */
+} HMAC_params;
+
+
+/* HMAC computation context. */
+
+typedef struct {
+ const HMAC_params * hmac_hash; /* Hash function definition. */
+ void * hmac_hashctxt1; /* Hash function context 1. */
+ void * hmac_hashctxt2; /* Hash function context 2. */
+} HMAC_context;
+
+
+/* Prototypes. */
+
+HMAC_context * Curl_HMAC_init(const HMAC_params * hashparams,
+ const unsigned char * key,
+ unsigned int keylen);
+int Curl_HMAC_update(HMAC_context * context,
+ const unsigned char * data,
+ unsigned int len);
+int Curl_HMAC_final(HMAC_context * context, unsigned char * result);
+
+#endif
+
+#endif /* HEADER_CURL_HMAC_H */
diff --git a/lib/curl_ldap.h b/lib/curl_ldap.h
index 1f28afe..3cce4bf 100644
--- a/lib/curl_ldap.h
+++ b/lib/curl_ldap.h
@@ -8,7 +8,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2007, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -25,7 +25,8 @@
#ifndef CURL_DISABLE_LDAP
extern const struct Curl_handler Curl_handler_ldap;
-#ifdef HAVE_LDAP_SSL
+#if (defined(USE_OPENLDAP) && defined(USE_SSL)) || \
+ (!defined(USE_OPENLDAP) && defined(HAVE_LDAP_SSL))
extern const struct Curl_handler Curl_handler_ldaps;
#endif
diff --git a/lib/curl_md4.h b/lib/curl_md4.h
new file mode 100644
index 0000000..6b6c16e
--- /dev/null
+++ b/lib/curl_md4.h
@@ -0,0 +1,33 @@
+#ifndef HEADER_CURL_MD4_H
+#define HEADER_CURL_MD4_H
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at http://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ***************************************************************************/
+
+#include "setup.h"
+
+/* NSS crypto library does not provide the MD4 hash algorithm, so that we have
+ * a local implementation of it */
+#ifdef USE_NSS
+void Curl_md4it(unsigned char *output, const unsigned char *input, size_t len);
+#endif /* USE_NSS */
+
+#endif /* HEADER_CURL_MD4_H */
diff --git a/lib/curl_md5.h b/lib/curl_md5.h
index cab9915..ddc61e3 100644
--- a/lib/curl_md5.h
+++ b/lib/curl_md5.h
@@ -22,7 +22,13 @@
*
***************************************************************************/
+#ifndef CURL_DISABLE_CRYPTO_AUTH
+#include "curl_hmac.h"
+
+extern const HMAC_params Curl_HMAC_MD5[1];
+
void Curl_md5it(unsigned char *output,
const unsigned char *input);
+#endif
#endif /* HEADER_CURL_MD5_H */
diff --git a/lib/curl_rtmp.c b/lib/curl_rtmp.c
new file mode 100644
index 0000000..df30dc1
--- /dev/null
+++ b/lib/curl_rtmp.c
@@ -0,0 +1,284 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 2010, Howard Chu, <hyc@highlandsun.com>
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at http://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ***************************************************************************/
+
+#include "setup.h"
+
+#ifdef USE_LIBRTMP
+
+#include "urldata.h"
+#include "nonblock.h" /* for curlx_nonblock */
+#include "progress.h" /* for Curl_pgrsSetUploadSize */
+#include "transfer.h"
+#include <curl/curl.h>
+#include <librtmp/rtmp.h>
+
+#define _MPRINTF_REPLACE /* use our functions only */
+#include <curl/mprintf.h>
+
+#include "curl_memory.h"
+/* The last #include file should be: */
+#include "memdebug.h"
+
+#ifdef _WIN32
+#define setsockopt(a,b,c,d,e) (setsockopt)(a,b,c,(const char *)d,(int)e)
+#define SET_RCVTIMEO(tv,s) int tv = s*1000
+#else
+#define SET_RCVTIMEO(tv,s) struct timeval tv = {s,0}
+#endif
+
+#define DEF_BUFTIME (2*60*60*1000) /* 2 hours */
+
+static CURLcode rtmp_setup(struct connectdata *conn);
+static CURLcode rtmp_do(struct connectdata *conn, bool *done);
+static CURLcode rtmp_done(struct connectdata *conn, CURLcode, bool premature);
+static CURLcode rtmp_connect(struct connectdata *conn, bool *done);
+static CURLcode rtmp_disconnect(struct connectdata *conn);
+
+static Curl_recv rtmp_recv;
+static Curl_send rtmp_send;
+
+/*
+ * RTMP protocol handler.h, based on http://rtmpdump.mplayerhq.hu
+ */
+
+const struct Curl_handler Curl_handler_rtmp = {
+ "RTMP", /* scheme */
+ rtmp_setup, /* setup_connection */
+ rtmp_do, /* do_it */
+ rtmp_done, /* done */
+ ZERO_NULL, /* do_more */
+ rtmp_connect, /* connect_it */
+ ZERO_NULL, /* connecting */
+ ZERO_NULL, /* doing */
+ ZERO_NULL, /* proto_getsock */
+ ZERO_NULL, /* doing_getsock */
+ ZERO_NULL, /* perform_getsock */
+ rtmp_disconnect, /* disconnect */
+ PORT_RTMP, /* defport */
+ PROT_RTMP /* protocol */
+};
+
+const struct Curl_handler Curl_handler_rtmpt = {
+ "RTMPT", /* scheme */
+ rtmp_setup, /* setup_connection */
+ rtmp_do, /* do_it */
+ rtmp_done, /* done */
+ ZERO_NULL, /* do_more */
+ rtmp_connect, /* connect_it */
+ ZERO_NULL, /* connecting */
+ ZERO_NULL, /* doing */
+ ZERO_NULL, /* proto_getsock */
+ ZERO_NULL, /* doing_getsock */
+ ZERO_NULL, /* perform_getsock */
+ rtmp_disconnect, /* disconnect */
+ PORT_RTMPT, /* defport */
+ PROT_RTMPT /* protocol */
+};
+
+const struct Curl_handler Curl_handler_rtmpe = {
+ "RTMPE", /* scheme */
+ rtmp_setup, /* setup_connection */
+ rtmp_do, /* do_it */
+ rtmp_done, /* done */
+ ZERO_NULL, /* do_more */
+ rtmp_connect, /* connect_it */
+ ZERO_NULL, /* connecting */
+ ZERO_NULL, /* doing */
+ ZERO_NULL, /* proto_getsock */
+ ZERO_NULL, /* doing_getsock */
+ ZERO_NULL, /* perform_getsock */
+ rtmp_disconnect, /* disconnect */
+ PORT_RTMP, /* defport */
+ PROT_RTMPE /* protocol */
+};
+
+const struct Curl_handler Curl_handler_rtmpte = {
+ "RTMPTE", /* scheme */
+ rtmp_setup, /* setup_connection */
+ rtmp_do, /* do_it */
+ rtmp_done, /* done */
+ ZERO_NULL, /* do_more */
+ rtmp_connect, /* connect_it */
+ ZERO_NULL, /* connecting */
+ ZERO_NULL, /* doing */
+ ZERO_NULL, /* proto_getsock */
+ ZERO_NULL, /* doing_getsock */
+ ZERO_NULL, /* perform_getsock */
+ rtmp_disconnect, /* disconnect */
+ PORT_RTMPT, /* defport */
+ PROT_RTMPTE /* protocol */
+};
+
+const struct Curl_handler Curl_handler_rtmps = {
+ "RTMPS", /* scheme */
+ rtmp_setup, /* setup_connection */
+ rtmp_do, /* do_it */
+ rtmp_done, /* done */
+ ZERO_NULL, /* do_more */
+ rtmp_connect, /* connect_it */
+ ZERO_NULL, /* connecting */
+ ZERO_NULL, /* doing */
+ ZERO_NULL, /* proto_getsock */
+ ZERO_NULL, /* doing_getsock */
+ ZERO_NULL, /* perform_getsock */
+ rtmp_disconnect, /* disconnect */
+ PORT_RTMPS, /* defport */
+ PROT_RTMPS /* protocol */
+};
+const struct Curl_handler Curl_handler_rtmpts = {
+ "RTMPTS", /* scheme */
+ rtmp_setup, /* setup_connection */
+ rtmp_do, /* do_it */
+ rtmp_done, /* done */
+ ZERO_NULL, /* do_more */
+ rtmp_connect, /* connect_it */
+ ZERO_NULL, /* connecting */
+ ZERO_NULL, /* doing */
+ ZERO_NULL, /* proto_getsock */
+ ZERO_NULL, /* doing_getsock */
+ ZERO_NULL, /* perform_getsock */
+ rtmp_disconnect, /* disconnect */
+ PORT_RTMPS, /* defport */
+ PROT_RTMPTS /* protocol */
+};
+
+static CURLcode rtmp_setup(struct connectdata *conn)
+{
+ RTMP *r = RTMP_Alloc();
+
+ if (!r)
+ return CURLE_OUT_OF_MEMORY;
+
+ RTMP_Init(r);
+ RTMP_SetBufferMS(r, DEF_BUFTIME);
+ if (!RTMP_SetupURL(r, conn->data->change.url)) {
+ RTMP_Free(r);
+ return CURLE_URL_MALFORMAT;
+ }
+ conn->proto.generic = r;
+ return CURLE_OK;
+}
+
+static CURLcode rtmp_connect(struct connectdata *conn, bool *done)
+{
+ RTMP *r = conn->proto.generic;
+ SET_RCVTIMEO(tv,10);
+
+ r->m_sb.sb_socket = conn->sock[FIRSTSOCKET];
+
+ /* We have to know if it's a write before we send the
+ * connect request packet
+ */
+ if (conn->data->set.upload)
+ r->Link.protocol |= RTMP_FEATURE_WRITE;
+
+ /* For plain streams, use the buffer toggle trick to keep data flowing */
+ if (!(r->Link.lFlags & RTMP_LF_LIVE) && !(r->Link.protocol & RTMP_FEATURE_HTTP))
+ r->Link.lFlags |= RTMP_LF_BUFX;
+
+ curlx_nonblock(r->m_sb.sb_socket, FALSE);
+ setsockopt(r->m_sb.sb_socket, SOL_SOCKET, SO_RCVTIMEO, (char *)&tv, sizeof(tv));
+
+ if (!RTMP_Connect1(r, NULL))
+ return CURLE_FAILED_INIT;
+
+ /* Clients must send a periodic BytesReceived report to the server */
+ r->m_bSendCounter = true;
+
+ *done = TRUE;
+ conn->recv[FIRSTSOCKET] = rtmp_recv;
+ conn->send[FIRSTSOCKET] = rtmp_send;
+ return CURLE_OK;
+}
+
+static CURLcode rtmp_do(struct connectdata *conn, bool *done)
+{
+ RTMP *r = conn->proto.generic;
+
+ if (!RTMP_ConnectStream(r, 0))
+ return CURLE_FAILED_INIT;
+
+ if (conn->data->set.upload) {
+ Curl_pgrsSetUploadSize(conn->data, conn->data->set.infilesize);
+ Curl_setup_transfer(conn, -1, -1, FALSE, NULL, FIRSTSOCKET, NULL);
+ } else
+ Curl_setup_transfer(conn, FIRSTSOCKET, -1, FALSE, NULL, -1, NULL);
+ *done = TRUE;
+ return CURLE_OK;
+}
+
+static CURLcode rtmp_done(struct connectdata *conn, CURLcode status,
+ bool premature)
+{
+ (void)conn; /* unused */
+ (void)status; /* unused */
+ (void)premature; /* unused */
+
+ return CURLE_OK;
+}
+
+static CURLcode rtmp_disconnect(struct connectdata *conn)
+{
+ RTMP *r = conn->proto.generic;
+ if (r) {
+ conn->proto.generic = NULL;
+ RTMP_Close(r);
+ RTMP_Free(r);
+ }
+ return CURLE_OK;
+}
+
+static ssize_t rtmp_recv(struct connectdata *conn, int sockindex, char *buf,
+ size_t len, CURLcode *err)
+{
+ RTMP *r = conn->proto.generic;
+ ssize_t nread;
+
+ (void)sockindex; /* unused */
+
+ nread = RTMP_Read(r, buf, len);
+ if (nread < 0) {
+ if (r->m_read.status == RTMP_READ_COMPLETE ||
+ r->m_read.status == RTMP_READ_EOF) {
+ conn->data->req.size = conn->data->req.bytecount;
+ nread = 0;
+ } else
+ *err = CURLE_RECV_ERROR;
+ }
+ return nread;
+}
+
+static ssize_t rtmp_send(struct connectdata *conn, int sockindex,
+ const void *buf, size_t len, CURLcode *err)
+{
+ RTMP *r = conn->proto.generic;
+ ssize_t num;
+
+ (void)sockindex; /* unused */
+
+ num = RTMP_Write(r, (char *)buf, len);
+ if (num < 0) {
+ *err = CURLE_SEND_ERROR;
+ }
+ return num;
+}
+#endif /* USE_LIBRTMP */
diff --git a/lib/curl_rtmp.h b/lib/curl_rtmp.h
new file mode 100644
index 0000000..4a9e9e6
--- /dev/null
+++ b/lib/curl_rtmp.h
@@ -0,0 +1,33 @@
+#ifndef HEADER_CURL_RTMP_H
+#define HEADER_CURL_RTMP_H
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 2010, Howard Chu, <hyc@highlandsun.com>
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at http://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ***************************************************************************/
+#ifdef USE_LIBRTMP
+extern const struct Curl_handler Curl_handler_rtmp;
+extern const struct Curl_handler Curl_handler_rtmpt;
+extern const struct Curl_handler Curl_handler_rtmpe;
+extern const struct Curl_handler Curl_handler_rtmpte;
+extern const struct Curl_handler Curl_handler_rtmps;
+extern const struct Curl_handler Curl_handler_rtmpts;
+#endif
+
+#endif /* HEADER_CURL_RTMP_H */
diff --git a/lib/curl_sspi.c b/lib/curl_sspi.c
index 6b19b47..b985dbc 100644
--- a/lib/curl_sspi.c
+++ b/lib/curl_sspi.c
@@ -36,6 +36,9 @@
#include "memdebug.h"
+/* We use our own typedef here since some headers might lack these */
+typedef PSecurityFunctionTableA (APIENTRY *INITSECURITYINTERFACE_FN_A)(VOID);
+
/* Handle of security.dll or secur32.dll, depending on Windows version */
HMODULE s_hSecDll = NULL;
@@ -59,7 +62,7 @@ CURLcode
Curl_sspi_global_init(void)
{
OSVERSIONINFO osver;
- INIT_SECURITY_INTERFACE_A pInitSecurityInterface;
+ INITSECURITYINTERFACE_FN_A pInitSecurityInterface;
/* If security interface is not yet initialized try to do this */
if(s_hSecDll == NULL) {
@@ -84,7 +87,7 @@ Curl_sspi_global_init(void)
return CURLE_FAILED_INIT;
/* Get address of the InitSecurityInterfaceA function from the SSPI dll */
- pInitSecurityInterface = (INIT_SECURITY_INTERFACE_A)
+ pInitSecurityInterface = (INITSECURITYINTERFACE_FN_A)
GetProcAddress(s_hSecDll, "InitSecurityInterfaceA");
if(! pInitSecurityInterface)
return CURLE_FAILED_INIT;
diff --git a/lib/dict.c b/lib/dict.c
index 1deab76..d86923a 100644
--- a/lib/dict.c
+++ b/lib/dict.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -217,13 +217,12 @@ static CURLcode dict_do(struct connectdata *conn, bool *done)
free(eword);
- if(result)
+ if(result) {
failf(data, "Failed sending DICT request");
- else
- result = Curl_setup_transfer(conn, FIRSTSOCKET, -1, FALSE, bytecount,
- -1, NULL); /* no upload */
- if(result)
return result;
+ }
+ Curl_setup_transfer(conn, FIRSTSOCKET, -1, FALSE, bytecount,
+ -1, NULL); /* no upload */
}
else if(Curl_raw_nequal(path, DICT_DEFINE, sizeof(DICT_DEFINE)-1) ||
Curl_raw_nequal(path, DICT_DEFINE2, sizeof(DICT_DEFINE2)-1) ||
@@ -265,15 +264,12 @@ static CURLcode dict_do(struct connectdata *conn, bool *done)
free(eword);
- if(result)
+ if(result) {
failf(data, "Failed sending DICT request");
- else
- result = Curl_setup_transfer(conn, FIRSTSOCKET, -1, FALSE, bytecount,
- -1, NULL); /* no upload */
-
- if(result)
return result;
-
+ }
+ Curl_setup_transfer(conn, FIRSTSOCKET, -1, FALSE, bytecount,
+ -1, NULL); /* no upload */
}
else {
@@ -290,13 +286,12 @@ static CURLcode dict_do(struct connectdata *conn, bool *done)
"CLIENT " LIBCURL_NAME " " LIBCURL_VERSION "\r\n"
"%s\r\n"
"QUIT\r\n", ppath);
- if(result)
+ if(result) {
failf(data, "Failed sending DICT request");
- else
- result = Curl_setup_transfer(conn, FIRSTSOCKET, -1, FALSE, bytecount,
- -1, NULL);
- if(result)
return result;
+ }
+
+ Curl_setup_transfer(conn, FIRSTSOCKET, -1, FALSE, bytecount, -1, NULL);
}
}
diff --git a/lib/easy.c b/lib/easy.c
index 35fb018..1f839fe 100644
--- a/lib/easy.c
+++ b/lib/easy.c
@@ -287,6 +287,13 @@ CURLcode curl_global_init(long flags)
}
#endif
+#if defined(USE_LIBSSH2) && defined(HAVE_LIBSSH2_INIT)
+ if(libssh2_init(0)) {
+ DEBUGF(fprintf(stderr, "Error: libssh2_init failed\n"));
+ return CURLE_FAILED_INIT;
+ }
+#endif
+
init_flags = flags;
/* Preset pseudo-random number sequence. */
@@ -355,6 +362,10 @@ void curl_global_cleanup(void)
amiga_cleanup();
#endif
+#if defined(USE_LIBSSH2) && defined(HAVE_LIBSSH2_EXIT)
+ (void)libssh2_exit();
+#endif
+
init_flags = 0;
}
@@ -689,8 +700,9 @@ CURL *curl_easy_duphandle(CURL *incurl)
}
#ifdef USE_ARES
- /* If we use ares, we setup a new ares channel for the new handle */
- if(ARES_SUCCESS != ares_init(&outcurl->state.areschannel))
+ /* If we use ares, we clone the ares channel for the new handle */
+ if(ARES_SUCCESS != ares_dup(&outcurl->state.areschannel,
+ data->state.areschannel))
break;
#endif
@@ -1061,9 +1073,6 @@ static CURLcode easy_connection(struct SessionHandle *data,
curl_socket_t *sfd,
struct connectdata **connp)
{
- CURLcode ret;
- long sockfd;
-
if(data == NULL)
return CURLE_BAD_FUNCTION_ARGUMENT;
@@ -1073,18 +1082,13 @@ static CURLcode easy_connection(struct SessionHandle *data,
return CURLE_UNSUPPORTED_PROTOCOL;
}
- ret = Curl_getconnectinfo(data, &sockfd, connp);
- if(ret != CURLE_OK)
- return ret;
+ *sfd = Curl_getconnectinfo(data, connp);
- if(sockfd == -1) {
+ if(*sfd == CURL_SOCKET_BAD) {
failf(data, "Failed to get recent socket");
return CURLE_UNSUPPORTED_PROTOCOL;
}
- *sfd = (curl_socket_t)sockfd; /* we know that this is actually a socket
- descriptor so the typecast is fine here */
-
return CURLE_OK;
}
@@ -1097,7 +1101,6 @@ CURLcode curl_easy_recv(CURL *curl, void *buffer, size_t buflen, size_t *n)
{
curl_socket_t sfd;
CURLcode ret;
- int ret1;
ssize_t n1;
struct connectdata *c;
struct SessionHandle *data = (struct SessionHandle *)curl;
@@ -1107,13 +1110,10 @@ CURLcode curl_easy_recv(CURL *curl, void *buffer, size_t buflen, size_t *n)
return ret;
*n = 0;
- ret1 = Curl_read(c, sfd, buffer, buflen, &n1);
+ ret = Curl_read(c, sfd, buffer, buflen, &n1);
- if(ret1 == -1)
- return CURLE_AGAIN;
-
- if(ret1 != CURLE_OK)
- return (CURLcode)ret1;
+ if(ret != CURLE_OK)
+ return ret;
*n = (size_t)n1;
diff --git a/lib/escape.c b/lib/escape.c
index 37d21e7..735e1d8 100644
--- a/lib/escape.c
+++ b/lib/escape.c
@@ -43,8 +43,10 @@
#include "memdebug.h"
/* Portable character check (remember EBCDIC). Do not use isalnum() because
-its behavior is altered by the current locale. */
-static bool Curl_isalnum(unsigned char in)
+ its behavior is altered by the current locale.
+ See http://tools.ietf.org/html/rfc3986#section-2.3
+*/
+static bool Curl_isunreserved(unsigned char in)
{
switch (in) {
case '0': case '1': case '2': case '3': case '4':
@@ -59,6 +61,7 @@ static bool Curl_isalnum(unsigned char in)
case 'K': case 'L': case 'M': case 'N': case 'O':
case 'P': case 'Q': case 'R': case 'S': case 'T':
case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z':
+ case '-': case '.': case '_': case '~':
return TRUE;
default:
break;
@@ -100,7 +103,7 @@ char *curl_easy_escape(CURL *handle, const char *string, int inlength)
while(length--) {
in = *string;
- if (Curl_isalnum(in)) {
+ if (Curl_isunreserved(in)) {
/* just copy this */
ns[strindex++]=in;
}
diff --git a/lib/file.c b/lib/file.c
index 6c14ee8..91176aa 100644
--- a/lib/file.c
+++ b/lib/file.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -146,7 +146,7 @@ static CURLcode file_range(struct connectdata *conn)
if(data->state.use_range && data->state.range) {
from=curlx_strtoofft(data->state.range, &ptr, 0);
- while(ptr && *ptr && (isspace((int)*ptr) || (*ptr=='-')))
+ while(*ptr && (isspace((int)*ptr) || (*ptr=='-')))
ptr++;
to=curlx_strtoofft(ptr, &ptr2, 0);
if(ptr == ptr2) {
@@ -161,11 +161,10 @@ static CURLcode file_range(struct connectdata *conn)
}
else if(from < 0) {
/* -Y */
- totalsize = -from;
data->req.maxdownload = -from;
data->state.resume_from = from;
DEBUGF(infof(data, "RANGE the last %" FORMAT_OFF_T " bytes\n",
- totalsize));
+ -from));
}
else {
/* X-Y */
diff --git a/lib/fileinfo.c b/lib/fileinfo.c
new file mode 100644
index 0000000..f5dbfce
--- /dev/null
+++ b/lib/fileinfo.c
@@ -0,0 +1,75 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at http://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ***************************************************************************/
+
+#include "setup.h"
+
+#include <stdlib.h>
+#include "strdup.h"
+#include "fileinfo.h"
+
+#define _MPRINTF_REPLACE /* use our functions only */
+#include <curl/mprintf.h>
+
+#include "curl_memory.h"
+/* The last #include file should be: */
+#include "memdebug.h"
+
+struct curl_fileinfo *Curl_fileinfo_alloc(void)
+{
+ struct curl_fileinfo *tmp = malloc(sizeof(struct curl_fileinfo));
+ if(!tmp)
+ return NULL;
+ memset(tmp, 0, sizeof(struct curl_fileinfo));
+ return tmp;
+}
+
+void Curl_fileinfo_dtor(void *user, void *element)
+{
+ struct curl_fileinfo *finfo = element;
+ (void) user;
+ if(!finfo)
+ return;
+
+ if(finfo->b_data){
+ free(finfo->b_data);
+ }
+
+ free(finfo);
+}
+
+struct curl_fileinfo *Curl_fileinfo_dup(const struct curl_fileinfo *src)
+{
+ struct curl_fileinfo *ptr = malloc(sizeof(struct curl_fileinfo));
+ if(!ptr)
+ return NULL;
+ *ptr = *src;
+
+ ptr->b_data = malloc(src->b_size);
+ if(!ptr->b_data) {
+ free(ptr);
+ return NULL;
+ }
+ else {
+ memcpy(ptr->b_data, src->b_data, src->b_size);
+ return ptr;
+ }
+}
diff --git a/lib/fileinfo.h b/lib/fileinfo.h
new file mode 100644
index 0000000..b0e5e59
--- /dev/null
+++ b/lib/fileinfo.h
@@ -0,0 +1,33 @@
+#ifndef HEADER_CURL_FILEINFO_H
+#define HEADER_CURL_FILEINFO_H
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at http://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ***************************************************************************/
+
+#include <curl/curl.h>
+
+struct curl_fileinfo *Curl_fileinfo_alloc(void);
+
+void Curl_fileinfo_dtor(void *, void *);
+
+struct curl_fileinfo *Curl_fileinfo_dup(const struct curl_fileinfo *src);
+
+#endif /* HEADER_CURL_FILEINFO_H */
diff --git a/lib/firefox-db2pem.sh b/lib/firefox-db2pem.sh
new file mode 100644
index 0000000..14ac576
--- /dev/null
+++ b/lib/firefox-db2pem.sh
@@ -0,0 +1,54 @@
+#!/bin/sh
+# ***************************************************************************
+# * _ _ ____ _
+# * Project ___| | | | _ \| |
+# * / __| | | | |_) | |
+# * | (__| |_| | _ <| |___
+# * \___|\___/|_| \_\_____|
+# *
+# * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+# *
+# * This software is licensed as described in the file COPYING, which
+# * you should have received as part of this distribution. The terms
+# * are also available at http://curl.haxx.se/docs/copyright.html.
+# *
+# * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+# * copies of the Software, and permit persons to whom the Software is
+# * furnished to do so, under the terms of the COPYING file.
+# *
+# * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+# * KIND, either express or implied.
+# *
+# ***************************************************************************
+# This shell script creates a fresh ca-bundle.crt file for use with libcurl.
+# It extracts all ca certs it finds in the local Firefox database and converts
+# them all into PEM format.
+#
+db=`ls -1d $HOME/.mozilla/firefox/*default`
+out=$1
+
+if test -z "$out"; then
+ out="ca-bundle.crt" # use a sensible default
+fi
+
+currentdate=`date`
+
+cat >$out <<EOF
+##
+## Bundle of CA Root Certificates
+##
+## Converted at: ${currentdate}
+## These were converted from the local Firefox directory by the db2pem script.
+##
+EOF
+
+
+certutil -L -h 'Builtin Object Token' -d $db | \
+grep ' *[CcGTPpu]*,[CcGTPpu]*,[CcGTPpu]* *$' | \
+sed -e 's/ *[CcGTPpu]*,[CcGTPpu]*,[CcGTPpu]* *$//' -e 's/\(.*\)/"\1"/' | \
+sort | \
+while read nickname; \
+ do echo $nickname | sed -e "s/Builtin Object Token://g"; \
+eval certutil -d $db -L -n "$nickname" -a ; \
+done >> $out
+
diff --git a/lib/ftp.c b/lib/ftp.c
index f821d12..60d9517 100644
--- a/lib/ftp.c
+++ b/lib/ftp.c
@@ -71,6 +71,8 @@
#include "http.h" /* for HTTP proxy tunnel stuff */
#include "socks.h"
#include "ftp.h"
+#include "fileinfo.h"
+#include "ftplistparser.h"
#if defined(HAVE_KRB4) || defined(HAVE_GSSAPI)
#include "krb4.h"
@@ -144,6 +146,14 @@ static CURLcode ftp_doing(struct connectdata *conn,
bool *dophase_done);
static CURLcode ftp_setup_connection(struct connectdata * conn);
+static CURLcode init_wc_data(struct connectdata *conn);
+static CURLcode wc_statemach(struct connectdata *conn);
+
+static void wc_data_dtor(void *ptr);
+
+static CURLcode ftp_state_post_retr_size(struct connectdata *conn,
+ curl_off_t filesize);
+
/* easy-to-use macro: */
#define FTPSENDF(x,y,z) if((result = Curl_ftpsendf(x,y,z)) != CURLE_OK) \
return result
@@ -314,7 +324,7 @@ static CURLcode AllowServerConnect(struct connectdata *conn)
for(;;) {
timeout_ms = Curl_timeleft(conn, NULL, TRUE);
- if(timeout_ms <= 0) {
+ if(timeout_ms < 0) {
/* if a timeout was already reached, bail out */
failf(data, "Timeout while waiting for server connect");
return CURLE_OPERATION_TIMEDOUT;
@@ -820,7 +830,7 @@ static CURLcode ftp_state_use_port(struct connectdata *conn,
/* resolv ip/host to ip */
rc = Curl_resolv(conn, host, 0, &h);
if(rc == CURLRESOLV_PENDING)
- rc = Curl_wait_for_resolv(conn, &h);
+ (void)Curl_wait_for_resolv(conn, &h);
if(h) {
res = h->addr;
/* when we return from this function, we can forget about this entry
@@ -1378,7 +1388,7 @@ static CURLcode ftp_state_ul_setup(struct connectdata *conn,
infof(data, "File already completely uploaded\n");
/* no data to transfer */
- result=Curl_setup_transfer(conn, -1, -1, FALSE, NULL, -1, NULL);
+ Curl_setup_transfer(conn, -1, -1, FALSE, NULL, -1, NULL);
/* Set ->transfer so that we won't get any error in
* ftp_done() because we didn't transfer anything! */
@@ -1469,8 +1479,14 @@ static CURLcode ftp_state_quote(struct connectdata *conn,
if(ftp->transfer != FTPTRANSFER_BODY)
state(conn, FTP_STOP);
else {
- PPSENDF(&ftpc->pp, "SIZE %s", ftpc->file);
- state(conn, FTP_RETR_SIZE);
+ if(ftpc->known_filesize != -1) {
+ Curl_pgrsSetDownloadSize(data, ftpc->known_filesize);
+ result = ftp_state_post_retr_size(conn, ftpc->known_filesize);
+ }
+ else {
+ PPSENDF(&ftpc->pp, "SIZE %s", ftpc->file);
+ state(conn, FTP_RETR_SIZE);
+ }
}
break;
case FTP_STOR_PREQUOTE:
@@ -1630,8 +1646,9 @@ static CURLcode ftp_state_pasv_resp(struct connectdata *conn,
*/
rc = Curl_resolv(conn, conn->proxy.name, (int)conn->port, &addr);
if(rc == CURLRESOLV_PENDING)
- /* BLOCKING */
- rc = Curl_wait_for_resolv(conn, &addr);
+ /* BLOCKING, ignores the return code but 'addr' will be NULL in
+ case of failure */
+ (void)Curl_wait_for_resolv(conn, &addr);
connectport =
(unsigned short)conn->port; /* we connect to the proxy's port */
@@ -1647,7 +1664,7 @@ static CURLcode ftp_state_pasv_resp(struct connectdata *conn,
rc = Curl_resolv(conn, newhost, newport, &addr);
if(rc == CURLRESOLV_PENDING)
/* BLOCKING */
- rc = Curl_wait_for_resolv(conn, &addr);
+ (void)Curl_wait_for_resolv(conn, &addr);
connectport = newport; /* we connect to the remote port */
@@ -1973,7 +1990,7 @@ static CURLcode ftp_state_post_retr_size(struct connectdata *conn,
if(ftp->downloadsize == 0) {
/* no data to transfer */
- result = Curl_setup_transfer(conn, -1, -1, FALSE, NULL, -1, NULL);
+ Curl_setup_transfer(conn, -1, -1, FALSE, NULL, -1, NULL);
infof(data, "File already completely downloaded\n");
/* Set ->transfer so that we won't get any error in ftp_done()
@@ -2115,8 +2132,8 @@ static CURLcode ftp_state_stor_resp(struct connectdata *conn,
/* set the SO_SNDBUF for the secondary socket for those who need it */
Curl_sndbufset(conn->sock[SECONDARYSOCKET]);
- result = Curl_setup_transfer(conn, -1, -1, FALSE, NULL, /* no download */
- SECONDARYSOCKET, ftp->bytecountp);
+ Curl_setup_transfer(conn, -1, -1, FALSE, NULL, /* no download */
+ SECONDARYSOCKET, ftp->bytecountp);
state(conn, FTP_STOP);
conn->proto.ftpc.pp.pending_resp = TRUE; /* expect a server response */
@@ -2229,11 +2246,8 @@ static CURLcode ftp_state_get_resp(struct connectdata *conn,
infof(data, "Getting file with size: %" FORMAT_OFF_T "\n", size);
/* FTP download: */
- result=Curl_setup_transfer(conn, SECONDARYSOCKET, size, FALSE,
- ftp->bytecountp,
- -1, NULL); /* no upload here */
- if(result)
- return result;
+ Curl_setup_transfer(conn, SECONDARYSOCKET, size, FALSE,
+ ftp->bytecountp, -1, NULL); /* no upload here */
conn->proto.ftpc.pp.pending_resp = TRUE; /* expect server response */
state(conn, FTP_STOP);
@@ -2410,7 +2424,7 @@ static CURLcode ftp_statemach_act(struct connectdata *conn)
set a valid level */
Curl_sec_request_prot(conn, data->set.str[STRING_KRB_LEVEL]);
- if(Curl_sec_login(conn) != 0)
+ if(Curl_sec_login(conn) != CURLE_OK)
infof(data, "Logging in with password in cleartext!\n");
else
infof(data, "Authentication successful\n");
@@ -2857,6 +2871,8 @@ static CURLcode ftp_init(struct connectdata *conn)
if(TRUE == isBadFtpString(ftp->passwd))
return CURLE_URL_MALFORMAT;
+ conn->proto.ftpc.known_filesize = -1; /* unknown size for now */
+
return CURLE_OK;
}
@@ -3020,6 +3036,13 @@ static CURLcode ftp_done(struct connectdata *conn, CURLcode status,
if(ftpc->prevpath)
free(ftpc->prevpath);
+ if(data->set.wildcardmatch) {
+ if(data->set.chunk_end && ftpc->file) {
+ data->set.chunk_end(data->wildcard.customptr);
+ }
+ ftpc->known_filesize = -1;
+ }
+
/* get the "raw" path */
path = curl_easy_unescape(data, path_to_use, 0, NULL);
if(!path) {
@@ -3053,10 +3076,6 @@ static CURLcode ftp_done(struct connectdata *conn, CURLcode status,
/* free the dir tree and file parts */
freedirs(ftpc);
-#if defined(HAVE_KRB4) || defined(HAVE_GSSAPI)
- Curl_sec_fflush_fd(conn, conn->sock[SECONDARYSOCKET]);
-#endif
-
/* shut down the socket to inform the server we're done */
#ifdef _WIN32_WCE
@@ -3180,6 +3199,8 @@ CURLcode ftp_sendquote(struct connectdata *conn, struct curl_slist *quote)
ssize_t nread;
int ftpcode;
CURLcode result;
+ struct ftp_conn *ftpc = &conn->proto.ftpc;
+ struct pingpong *pp = &ftpc->pp;
item = quote;
while(item) {
@@ -3199,6 +3220,8 @@ CURLcode ftp_sendquote(struct connectdata *conn, struct curl_slist *quote)
FTPSENDF(conn, "%s", cmd);
+ pp->response = Curl_tvnow(); /* timeout relative now */
+
result = Curl_GetFTPResponse(&nread, conn, &ftpcode);
if(result)
return result;
@@ -3285,7 +3308,6 @@ ftp_pasv_verbose(struct connectdata *conn,
static CURLcode ftp_range(struct connectdata *conn)
{
curl_off_t from, to;
- curl_off_t totalsize=-1;
char *ptr;
char *ptr2;
struct SessionHandle *data = conn->data;
@@ -3293,7 +3315,7 @@ static CURLcode ftp_range(struct connectdata *conn)
if(data->state.use_range && data->state.range) {
from=curlx_strtoofft(data->state.range, &ptr, 0);
- while(ptr && *ptr && (ISSPACE(*ptr) || (*ptr=='-')))
+ while(*ptr && (ISSPACE(*ptr) || (*ptr=='-')))
ptr++;
to=curlx_strtoofft(ptr, &ptr2, 0);
if(ptr == ptr2) {
@@ -3308,16 +3330,14 @@ static CURLcode ftp_range(struct connectdata *conn)
}
else if(from < 0) {
/* -Y */
- totalsize = -from;
data->req.maxdownload = -from;
data->state.resume_from = from;
DEBUGF(infof(conn->data, "FTP RANGE the last %" FORMAT_OFF_T " bytes\n",
- totalsize));
+ -from));
}
else {
/* X-Y */
- totalsize = to-from;
- data->req.maxdownload = totalsize+1; /* include last byte */
+ data->req.maxdownload = (to-from)+1; /* include last byte */
data->state.resume_from = from;
DEBUGF(infof(conn->data, "FTP RANGE from %" FORMAT_OFF_T
" getting %" FORMAT_OFF_T " bytes\n",
@@ -3393,7 +3413,7 @@ static CURLcode ftp_nextconnect(struct connectdata *conn)
if((result == CURLE_OK) && (ftp->transfer != FTPTRANSFER_BODY))
/* no data to transfer. FIX: it feels like a kludge to have this here
too! */
- result = Curl_setup_transfer(conn, -1, -1, FALSE, NULL, -1, NULL);
+ Curl_setup_transfer(conn, -1, -1, FALSE, NULL, -1, NULL);
/* end of transfer */
DEBUGF(infof(data, "DO-MORE phase ends with %d\n", (int)result));
@@ -3450,6 +3470,221 @@ CURLcode ftp_perform(struct connectdata *conn,
return result;
}
+static void wc_data_dtor(void *ptr)
+{
+ struct ftp_wc_tmpdata *tmp = ptr;
+ if(tmp)
+ Curl_ftp_parselist_data_free(&tmp->parser);
+ Curl_safefree(tmp);
+}
+
+static CURLcode init_wc_data(struct connectdata *conn)
+{
+ char *last_slash;
+ char *path = conn->data->state.path;
+ struct WildcardData *wildcard = &(conn->data->wildcard);
+ CURLcode ret = CURLE_OK;
+ struct ftp_wc_tmpdata *ftp_tmp;
+
+ last_slash = strrchr(conn->data->state.path, '/');
+ if(last_slash) {
+ last_slash++;
+ if(last_slash[0] == '\0') {
+ wildcard->state = CURLWC_CLEAN;
+ ret = ftp_parse_url_path(conn);
+ return ret;
+ }
+ else {
+ wildcard->pattern = strdup(last_slash);
+ if (!wildcard->pattern)
+ return CURLE_OUT_OF_MEMORY;
+ last_slash[0] = '\0'; /* cut file from path */
+ }
+ }
+ else { /* there is only 'wildcard pattern' or nothing */
+ if(path[0]) {
+ wildcard->pattern = strdup(path);
+ if (!wildcard->pattern)
+ return CURLE_OUT_OF_MEMORY;
+ path[0] = '\0';
+ }
+ else { /* only list */
+ wildcard->state = CURLWC_CLEAN;
+ ret = ftp_parse_url_path(conn);
+ return ret;
+ }
+ }
+
+ /* program continues only if URL is not ending with slash, allocate needed
+ resources for wildcard transfer */
+
+ /* allocate ftp protocol specific temporary wildcard data */
+ ftp_tmp = malloc(sizeof(struct ftp_wc_tmpdata));
+ if(!ftp_tmp) {
+ return CURLE_OUT_OF_MEMORY;
+ }
+
+ /* INITIALIZE parselist structure */
+ ftp_tmp->parser = Curl_ftp_parselist_data_alloc();
+ if(!ftp_tmp->parser) {
+ free(ftp_tmp);
+ return CURLE_OUT_OF_MEMORY;
+ }
+
+ wildcard->tmp = ftp_tmp; /* put it to the WildcardData tmp pointer */
+ wildcard->tmp_dtor = wc_data_dtor;
+
+ /* wildcard does not support NOCWD option (assert it?) */
+ if(conn->data->set.ftp_filemethod == FTPFILE_NOCWD)
+ conn->data->set.ftp_filemethod = FTPFILE_MULTICWD;
+
+ /* try to parse ftp url */
+ ret = ftp_parse_url_path(conn);
+ if(ret) {
+ return ret;
+ }
+
+ /* backup old write_function */
+ ftp_tmp->backup.write_function = conn->data->set.fwrite_func;
+ /* parsing write function (callback included directly from ftplistparser.c) */
+ conn->data->set.fwrite_func = Curl_ftp_parselist;
+ /* backup old file descriptor */
+ ftp_tmp->backup.file_descriptor = conn->data->set.out;
+ /* let the writefunc callback know what curl pointer is working with */
+ conn->data->set.out = conn;
+
+ wildcard->path = strdup(conn->data->state.path);
+ if(!wildcard->path) {
+ return CURLE_OUT_OF_MEMORY;
+ }
+
+ infof(conn->data, "Wildcard - Parsing started\n");
+ return CURLE_OK;
+}
+
+static CURLcode wc_statemach(struct connectdata *conn)
+{
+ struct ftp_conn *ftpc = &conn->proto.ftpc;
+ struct WildcardData *wildcard = &(conn->data->wildcard);
+ struct ftp_wc_tmpdata *ftp_tmp = wildcard->tmp;
+ char *tmp_path;
+ CURLcode ret = CURLE_OK;
+ long userresponse = 0;
+ switch (wildcard->state) {
+ case CURLWC_INIT:
+ ret = init_wc_data(conn);
+ if(wildcard->state == CURLWC_CLEAN)
+ /* only listing! */
+ break;
+ else
+ wildcard->state = ret ? CURLWC_ERROR : CURLWC_MATCHING;
+ break;
+
+ case CURLWC_MATCHING:
+ /* In this state is LIST response successfully parsed, so lets restore
+ previous WRITEFUNCTION callback and WRITEDATA pointer */
+ ftp_tmp = wildcard->tmp;
+ conn->data->set.fwrite_func = ftp_tmp->backup.write_function;
+ conn->data->set.out = ftp_tmp->backup.file_descriptor;
+ wildcard->state = CURLWC_DOWNLOADING;
+
+ if(Curl_ftp_parselist_geterror(ftp_tmp->parser)) {
+ /* error found in LIST parsing */
+ wildcard->state = CURLWC_CLEAN;
+ return wc_statemach(conn);
+ }
+ else if(wildcard->filelist->size == 0) {
+ /* no corresponding file */
+ wildcard->state = CURLWC_CLEAN;
+ return CURLE_REMOTE_FILE_NOT_FOUND;
+ }
+ ret = wc_statemach(conn);
+ break;
+
+ case CURLWC_DOWNLOADING: {
+ /* filelist has at least one file, lets get first one */
+ struct curl_fileinfo *finfo = wildcard->filelist->head->ptr;
+ tmp_path = malloc(strlen(conn->data->state.path) +
+ strlen(finfo->filename) + 1);
+ if(!tmp_path) {
+ return CURLE_OUT_OF_MEMORY;
+ }
+
+ tmp_path[0] = 0;
+ /* make full path to matched file */
+ strcat(tmp_path, wildcard->path);
+ strcat(tmp_path, finfo->filename);
+ /* switch default "state.pathbuffer" and tmp_path, good to see
+ ftp_parse_url_path function to understand this trick */
+ if(conn->data->state.pathbuffer)
+ free(conn->data->state.pathbuffer);
+ conn->data->state.pathbuffer = tmp_path;
+ conn->data->state.path = tmp_path;
+
+ infof(conn->data, "Wildcard - START of \"%s\"\n", finfo->filename);
+ if(conn->data->set.chunk_bgn) {
+ userresponse = conn->data->set.chunk_bgn(
+ finfo, wildcard->customptr, (int)wildcard->filelist->size);
+ switch(userresponse) {
+ case CURL_CHUNK_BGN_FUNC_SKIP:
+ infof(conn->data, "Wildcard - \"%s\" skipped by user\n",
+ finfo->filename);
+ wildcard->state = CURLWC_SKIP;
+ return wc_statemach(conn);
+ case CURL_CHUNK_BGN_FUNC_FAIL:
+ return CURLE_CHUNK_FAILED;
+ }
+ }
+
+ if(finfo->filetype != CURLFILETYPE_FILE) {
+ wildcard->state = CURLWC_SKIP;
+ return wc_statemach(conn);
+ }
+
+ if(finfo->flags & CURLFINFOFLAG_KNOWN_SIZE)
+ ftpc->known_filesize = finfo->size;
+
+ ret = ftp_parse_url_path(conn);
+ if(ret) {
+ return ret;
+ }
+
+ /* we don't need the Curl_fileinfo of first file anymore */
+ Curl_llist_remove(wildcard->filelist, wildcard->filelist->head, NULL);
+
+ if(wildcard->filelist->size == 0) { /* remains only one file to down. */
+ wildcard->state = CURLWC_CLEAN;
+ /* after that will be ftp_do called once again and no transfer
+ will be done because of CURLWC_CLEAN state */
+ return CURLE_OK;
+ }
+ } break;
+
+ case CURLWC_SKIP: {
+ if(conn->data->set.chunk_end)
+ conn->data->set.chunk_end(conn->data->wildcard.customptr);
+ Curl_llist_remove(wildcard->filelist, wildcard->filelist->head, NULL);
+ wildcard->state = (wildcard->filelist->size == 0) ?
+ CURLWC_CLEAN : CURLWC_DOWNLOADING;
+ ret = wc_statemach(conn);
+ } break;
+
+ case CURLWC_CLEAN:
+ ret = CURLE_OK;
+ if(ftp_tmp) {
+ ret = Curl_ftp_parselist_geterror(ftp_tmp->parser);
+ }
+ wildcard->state = ret ? CURLWC_ERROR : CURLWC_DONE;
+ break;
+
+ case CURLWC_DONE:
+ case CURLWC_ERROR:
+ break;
+ }
+
+ return ret;
+}
+
/***********************************************************************
*
* ftp_do()
@@ -3476,9 +3711,21 @@ static CURLcode ftp_do(struct connectdata *conn, bool *done)
if(retcode)
return retcode;
- retcode = ftp_parse_url_path(conn);
- if(retcode)
- return retcode;
+ if(conn->data->set.wildcardmatch) {
+ retcode = wc_statemach(conn);
+ if(conn->data->wildcard.state == CURLWC_SKIP ||
+ conn->data->wildcard.state == CURLWC_DONE) {
+ /* do not call ftp_regular_transfer */
+ return CURLE_OK;
+ }
+ if(retcode) /* error, loop or skipping the file */
+ return retcode;
+ }
+ else { /* no wildcard FSM needed */
+ retcode = ftp_parse_url_path(conn);
+ if(retcode)
+ return retcode;
+ }
retcode = ftp_regular_transfer(conn, done);
@@ -3613,6 +3860,10 @@ static CURLcode ftp_disconnect(struct connectdata *conn)
Curl_pp_disconnect(pp);
+#if defined(HAVE_KRB4) || defined(HAVE_GSSAPI)
+ Curl_sec_end(conn);
+#endif
+
return CURLE_OK;
}
@@ -3820,7 +4071,7 @@ static CURLcode ftp_dophase_done(struct connectdata *conn,
if(ftp->transfer != FTPTRANSFER_BODY)
/* no data to transfer */
- result=Curl_setup_transfer(conn, -1, -1, FALSE, NULL, -1, NULL);
+ Curl_setup_transfer(conn, -1, -1, FALSE, NULL, -1, NULL);
else if(!connected)
/* since we didn't connect now, we want do_more to get called */
conn->bits.do_more = TRUE;
@@ -3927,6 +4178,7 @@ static CURLcode ftp_setup_connection(struct connectdata * conn)
}
data->state.path++; /* don't include the initial slash */
+ data->state.slash_removed = TRUE; /* we've skipped the slash */
/* FTP URLs support an extension like ";type=<typecode>" that
* we'll try to get now! */
@@ -3938,6 +4190,7 @@ static CURLcode ftp_setup_connection(struct connectdata * conn)
if(type) {
*type = 0; /* it was in the middle of the hostname */
command = Curl_raw_toupper(type[6]);
+ conn->bits.type_set = TRUE;
switch (command) {
case 'A': /* ASCII mode */
diff --git a/lib/ftp.h b/lib/ftp.h
index 7a4f89e..d8ef348 100644
--- a/lib/ftp.h
+++ b/lib/ftp.h
@@ -79,6 +79,17 @@ typedef enum {
FTP_LAST /* never used */
} ftpstate;
+struct ftp_parselist_data; /* defined later in ftplistparser.c */
+
+struct ftp_wc_tmpdata {
+ struct ftp_parselist_data *parser;
+
+ struct {
+ curl_write_callback write_function;
+ FILE *file_descriptor;
+ } backup;
+};
+
typedef enum {
FTPFILE_MULTICWD = 1, /* as defined by RFC1738 */
FTPFILE_NOCWD = 2, /* use SIZE / RETR / STOR on the full path */
@@ -135,6 +146,8 @@ struct ftp_conn {
int count3; /* general purpose counter for the state machine */
ftpstate state; /* always use ftp.c:state() to change state! */
char * server_os; /* The target server operating system. */
+ curl_off_t known_filesize; /* file size is different from -1, if wildcard
+ LIST parsing was done and wc_statemach set it */
};
#endif /* HEADER_CURL_FTP_H */
diff --git a/lib/ftplistparser.c b/lib/ftplistparser.c
new file mode 100644
index 0000000..c59ea7e
--- /dev/null
+++ b/lib/ftplistparser.c
@@ -0,0 +1,1045 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at http://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ***************************************************************************/
+
+/**
+ * Now implemented:
+ *
+ * 1) UNIX version 1
+ * drwxr-xr-x 1 user01 ftp 512 Jan 29 23:32 prog
+ * 2) UNIX version 2
+ * drwxr-xr-x 1 user01 ftp 512 Jan 29 1997 prog
+ * 3) UNIX version 3
+ * drwxr-xr-x 1 1 1 512 Jan 29 23:32 prog
+ * 4) UNIX symlink
+ * lrwxr-xr-x 1 user01 ftp 512 Jan 29 23:32 prog -> prog2000
+ * 5) DOS style
+ * 01-29-97 11:32PM <DIR> prog
+ */
+
+#include "setup.h"
+
+#include <time.h>
+
+#include "ftplistparser.h"
+#include "curl_fnmatch.h"
+
+#include "urldata.h"
+#include "ftp.h"
+#include "fileinfo.h"
+#include "llist.h"
+#include "strtoofft.h"
+#include "rawstr.h"
+#include "ftp.h"
+
+#define _MPRINTF_REPLACE /* use our functions only */
+#include <curl/mprintf.h>
+
+#include "curl_memory.h"
+/* The last #include file should be: */
+#include "memdebug.h"
+
+/* allocs buffer which will contain one line of LIST command response */
+#define FTP_BUFFER_ALLOCSIZE 160
+
+typedef enum {
+ PL_UNIX_TOTALSIZE = 0,
+ PL_UNIX_FILETYPE,
+ PL_UNIX_PERMISSION,
+ PL_UNIX_HLINKS,
+ PL_UNIX_USER,
+ PL_UNIX_GROUP,
+ PL_UNIX_SIZE,
+ PL_UNIX_TIME,
+ PL_UNIX_FILENAME,
+ PL_UNIX_SYMLINK
+} pl_unix_mainstate;
+
+typedef union {
+ enum {
+ PL_UNIX_TOTALSIZE_INIT = 0,
+ PL_UNIX_TOTALSIZE_READING
+ } total_dirsize;
+
+ enum {
+ PL_UNIX_HLINKS_PRESPACE = 0,
+ PL_UNIX_HLINKS_NUMBER
+ } hlinks;
+
+ enum {
+ PL_UNIX_USER_PRESPACE = 0,
+ PL_UNIX_USER_PARSING
+ } user;
+
+ enum {
+ PL_UNIX_GROUP_PRESPACE = 0,
+ PL_UNIX_GROUP_NAME
+ } group;
+
+ enum {
+ PL_UNIX_SIZE_PRESPACE = 0,
+ PL_UNIX_SIZE_NUMBER
+ } size;
+
+ enum {
+ PL_UNIX_TIME_PREPART1 = 0,
+ PL_UNIX_TIME_PART1,
+ PL_UNIX_TIME_PREPART2,
+ PL_UNIX_TIME_PART2,
+ PL_UNIX_TIME_PREPART3,
+ PL_UNIX_TIME_PART3
+ } time;
+
+ enum {
+ PL_UNIX_FILENAME_PRESPACE = 0,
+ PL_UNIX_FILENAME_NAME,
+ PL_UNIX_FILENAME_WINDOWSEOL
+ } filename;
+
+ enum {
+ PL_UNIX_SYMLINK_PRESPACE = 0,
+ PL_UNIX_SYMLINK_NAME,
+ PL_UNIX_SYMLINK_PRETARGET1,
+ PL_UNIX_SYMLINK_PRETARGET2,
+ PL_UNIX_SYMLINK_PRETARGET3,
+ PL_UNIX_SYMLINK_PRETARGET4,
+ PL_UNIX_SYMLINK_TARGET,
+ PL_UNIX_SYMLINK_WINDOWSEOL
+ } symlink;
+} pl_unix_substate;
+
+typedef enum {
+ PL_WINNT_DATE = 0,
+ PL_WINNT_TIME,
+ PL_WINNT_DIRORSIZE,
+ PL_WINNT_FILENAME
+} pl_winNT_mainstate;
+
+typedef union {
+ enum {
+ PL_WINNT_TIME_PRESPACE = 0,
+ PL_WINNT_TIME_TIME
+ } time;
+ enum {
+ PL_WINNT_DIRORSIZE_PRESPACE = 0,
+ PL_WINNT_DIRORSIZE_CONTENT
+ } dirorsize;
+ enum {
+ PL_WINNT_FILENAME_PRESPACE = 0,
+ PL_WINNT_FILENAME_CONTENT,
+ PL_WINNT_FILENAME_WINEOL
+ } filename;
+} pl_winNT_substate;
+
+/* This struct is used in wildcard downloading - for parsing LIST response */
+struct ftp_parselist_data {
+ enum {
+ OS_TYPE_UNKNOWN = 0,
+ OS_TYPE_UNIX,
+ OS_TYPE_WIN_NT
+ } os_type;
+
+ union {
+ struct {
+ pl_unix_mainstate main;
+ pl_unix_substate sub;
+ } UNIX;
+
+ struct {
+ pl_winNT_mainstate main;
+ pl_winNT_substate sub;
+ } NT;
+ } state;
+
+ CURLcode error;
+ struct curl_fileinfo *file_data;
+ unsigned int item_length;
+ size_t item_offset;
+ struct {
+ size_t filename;
+ size_t user;
+ size_t group;
+ size_t time;
+ size_t perm;
+ size_t symlink_target;
+ } offsets;
+};
+
+struct ftp_parselist_data *Curl_ftp_parselist_data_alloc(void)
+{
+ return calloc(1, sizeof(struct ftp_parselist_data));
+}
+
+
+void Curl_ftp_parselist_data_free(struct ftp_parselist_data **pl_data)
+{
+ if(*pl_data)
+ free(*pl_data);
+ *pl_data = NULL;
+}
+
+
+CURLcode Curl_ftp_parselist_geterror(struct ftp_parselist_data *pl_data)
+{
+ return pl_data->error;
+}
+
+
+#define FTP_LP_MALFORMATED_PERM 0x01000000
+
+static int ftp_pl_get_permission(const char *str)
+{
+ int permissions = 0;
+ /* USER */
+ if(str[0] == 'r')
+ permissions |= 1 << 8;
+ else if(str[0] != '-')
+ permissions |= FTP_LP_MALFORMATED_PERM;
+ if(str[1] == 'w')
+ permissions |= 1 << 7;
+ else if(str[1] != '-')
+ permissions |= FTP_LP_MALFORMATED_PERM;
+
+ if(str[2] == 'x')
+ permissions |= 1 << 6;
+ else if(str[2] == 's') {
+ permissions |= 1 << 6;
+ permissions |= 1 << 11;
+ }
+ else if(str[2] == 'S')
+ permissions |= 1 << 11;
+ else if(str[2] != '-')
+ permissions |= FTP_LP_MALFORMATED_PERM;
+ /* GROUP */
+ if(str[3] == 'r')
+ permissions |= 1 << 5;
+ else if(str[3] != '-')
+ permissions |= FTP_LP_MALFORMATED_PERM;
+ if(str[4] == 'w')
+ permissions |= 1 << 4;
+ else if(str[4] != '-')
+ permissions |= FTP_LP_MALFORMATED_PERM;
+ if(str[5] == 'x')
+ permissions |= 1 << 3;
+ else if(str[5] == 's') {
+ permissions |= 1 << 3;
+ permissions |= 1 << 10;
+ }
+ else if(str[5] == 'S')
+ permissions |= 1 << 10;
+ else if(str[5] != '-')
+ permissions |= FTP_LP_MALFORMATED_PERM;
+ /* others */
+ if(str[6] == 'r')
+ permissions |= 1 << 2;
+ else if(str[6] != '-')
+ permissions |= FTP_LP_MALFORMATED_PERM;
+ if(str[7] == 'w')
+ permissions |= 1 << 1;
+ else if(str[7] != '-')
+ permissions |= FTP_LP_MALFORMATED_PERM;
+ if(str[8] == 'x')
+ permissions |= 1;
+ else if(str[8] == 't') {
+ permissions |= 1;
+ permissions |= 1 << 9;
+ }
+ else if(str[8] == 'T')
+ permissions |= 1 << 9;
+ else if(str[8] != '-')
+ permissions |= FTP_LP_MALFORMATED_PERM;
+
+ return permissions;
+}
+
+static void PL_ERROR(struct connectdata *conn, CURLcode err)
+{
+ struct ftp_wc_tmpdata *tmpdata = conn->data->wildcard.tmp;
+ struct ftp_parselist_data *parser = tmpdata->parser;
+ if(parser->file_data)
+ Curl_fileinfo_dtor(NULL, parser->file_data);
+ parser->file_data = NULL;
+ parser->error = err;
+}
+
+static bool ftp_pl_gettime(struct ftp_parselist_data *parser, char *string)
+{
+ (void)parser;
+ (void)string;
+ /* TODO
+ * There could be possible parse timestamp from server. Leaving unimplemented
+ * for now.
+ * If you want implement this, please add CURLFINFOFLAG_KNOWN_TIME flag to
+ * parser->file_data->flags
+ *
+ * Ftp servers are giving usually these formats:
+ * Apr 11 1998 (unknown time.. set it to 00:00:00?)
+ * Apr 11 12:21 (unknown year -> set it to NOW() time?)
+ * 08-05-09 02:49PM (ms-dos format)
+ * 20100421092538 -> for MLST/MLSD response
+ */
+
+ return FALSE;
+}
+
+static CURLcode ftp_pl_insert_finfo(struct connectdata *conn,
+ struct curl_fileinfo *finfo)
+{
+ curl_fnmatch_callback compare;
+ struct WildcardData *wc = &conn->data->wildcard;
+ struct ftp_wc_tmpdata *tmpdata = wc->tmp;
+ struct curl_llist *llist = wc->filelist;
+ struct ftp_parselist_data *parser = tmpdata->parser;
+ bool add = TRUE;
+
+ /* move finfo pointers to b_data */
+ char *str = finfo->b_data;
+ finfo->filename = str + parser->offsets.filename;
+ finfo->strings.group = parser->offsets.group ?
+ str + parser->offsets.group : NULL;
+ finfo->strings.perm = parser->offsets.perm ?
+ str + parser->offsets.perm : NULL;
+ finfo->strings.target = parser->offsets.symlink_target ?
+ str + parser->offsets.symlink_target : NULL;
+ finfo->strings.time = str + parser->offsets.time;
+ finfo->strings.user = parser->offsets.user ?
+ str + parser->offsets.user : NULL;
+
+ /* get correct fnmatch callback */
+ compare = conn->data->set.fnmatch;
+ if(!compare)
+ compare = Curl_fnmatch;
+
+ /* filter pattern-corresponding filenames */
+ if(compare(conn->data->set.fnmatch_data, wc->pattern, finfo->filename) == 0) {
+ /* discard symlink which is containing multiple " -> " */
+ if((finfo->filetype == CURLFILETYPE_SYMLINK) && finfo->strings.target &&
+ (strstr(finfo->strings.target, " -> "))) {
+ add = FALSE;
+ }
+ }
+ else {
+ add = FALSE;
+ }
+
+ if(add) {
+ if(!Curl_llist_insert_next(llist, llist->tail, finfo)) {
+ Curl_fileinfo_dtor(NULL, finfo);
+ tmpdata->parser->file_data = NULL;
+ return CURLE_OUT_OF_MEMORY;
+ }
+ }
+ else {
+ Curl_fileinfo_dtor(NULL, finfo);
+ }
+
+ tmpdata->parser->file_data = NULL;
+ return CURLE_OK;
+}
+
+size_t Curl_ftp_parselist(char *buffer, size_t size, size_t nmemb,
+ void *connptr)
+{
+ size_t bufflen = size*nmemb;
+ struct connectdata *conn = (struct connectdata *)connptr;
+ struct ftp_wc_tmpdata *tmpdata = conn->data->wildcard.tmp;
+ struct ftp_parselist_data *parser = tmpdata->parser;
+ struct curl_fileinfo *finfo;
+ unsigned long i = 0;
+ CURLcode rc;
+
+ if(parser->error) { /* error in previous call */
+ /* scenario:
+ * 1. call => OK..
+ * 2. call => OUT_OF_MEMORY (or other error)
+ * 3. (last) call => is skipped RIGHT HERE and the error is hadled later
+ * in wc_statemach()
+ */
+ return bufflen;
+ }
+
+ if(parser->os_type == OS_TYPE_UNKNOWN && bufflen > 0) {
+ /* considering info about FILE response format */
+ parser->os_type = (buffer[0] >= '0' && buffer[0] <= '9') ?
+ OS_TYPE_WIN_NT : OS_TYPE_UNIX;
+ }
+
+ while(i < bufflen) { /* FSM */
+
+ char c = buffer[i];
+ if(!parser->file_data) { /* tmp file data is not allocated yet */
+ parser->file_data = Curl_fileinfo_alloc();
+ if(!parser->file_data) {
+ parser->error = CURLE_OUT_OF_MEMORY;
+ return bufflen;
+ }
+ parser->file_data->b_data = malloc(FTP_BUFFER_ALLOCSIZE);
+ if(!parser->file_data->b_data) {
+ PL_ERROR(conn, CURLE_OUT_OF_MEMORY);
+ return bufflen;
+ }
+ parser->file_data->b_size = FTP_BUFFER_ALLOCSIZE;
+ parser->item_offset = 0;
+ parser->item_length = 0;
+ }
+
+ finfo = parser->file_data;
+ finfo->b_data[finfo->b_used++] = c;
+
+ if(finfo->b_used >= finfo->b_size - 1) {
+ /* if it is important, extend buffer space for file data */
+ char *tmp = realloc(finfo->b_data,
+ finfo->b_size + FTP_BUFFER_ALLOCSIZE);
+ if(tmp) {
+ finfo->b_size += FTP_BUFFER_ALLOCSIZE;
+ finfo->b_data = tmp;
+ }
+ else {
+ Curl_fileinfo_dtor(NULL, parser->file_data);
+ parser->file_data = NULL;
+ parser->error = CURLE_OUT_OF_MEMORY;
+ PL_ERROR(conn, CURLE_OUT_OF_MEMORY);
+ return bufflen;
+ }
+ }
+
+ switch (parser->os_type) {
+ case OS_TYPE_UNIX:
+ switch (parser->state.UNIX.main) {
+ case PL_UNIX_TOTALSIZE:
+ switch(parser->state.UNIX.sub.total_dirsize) {
+ case PL_UNIX_TOTALSIZE_INIT:
+ if(c == 't') {
+ parser->state.UNIX.sub.total_dirsize = PL_UNIX_TOTALSIZE_READING;
+ parser->item_length++;
+ }
+ else {
+ parser->state.UNIX.main = PL_UNIX_FILETYPE;
+ /* start FSM again not considering size of directory */
+ finfo->b_used = 0;
+ i--;
+ }
+ break;
+ case PL_UNIX_TOTALSIZE_READING:
+ parser->item_length++;
+ if(c == '\r') {
+ parser->item_length--;
+ finfo->b_used--;
+ }
+ else if(c == '\n') {
+ finfo->b_data[parser->item_length - 1] = 0;
+ if(strncmp("total ", finfo->b_data, 6) == 0) {
+ char *endptr = NULL;
+ /* here we can deal with directory size */
+ curlx_strtoofft(finfo->b_data+6, &endptr, 10);
+ if(*endptr != 0) {
+ PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
+ return bufflen;
+ }
+ else {
+ parser->state.UNIX.main = PL_UNIX_FILETYPE;
+ finfo->b_used = 0;
+ }
+ }
+ else {
+ PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
+ return bufflen;
+ }
+ }
+ break;
+ }
+ break;
+ case PL_UNIX_FILETYPE:
+ switch (c) {
+ case '-':
+ finfo->filetype = CURLFILETYPE_FILE;
+ break;
+ case 'd':
+ finfo->filetype = CURLFILETYPE_DIRECTORY;
+ break;
+ case 'l':
+ finfo->filetype = CURLFILETYPE_SYMLINK;
+ break;
+ case 'p':
+ finfo->filetype = CURLFILETYPE_NAMEDPIPE;
+ break;
+ case 's':
+ finfo->filetype = CURLFILETYPE_SOCKET;
+ break;
+ case 'c':
+ finfo->filetype = CURLFILETYPE_DEVICE_CHAR;
+ break;
+ case 'b':
+ finfo->filetype = CURLFILETYPE_DEVICE_BLOCK;
+ break;
+ case 'D':
+ finfo->filetype = CURLFILETYPE_DOOR;
+ break;
+ default:
+ PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
+ return bufflen;
+ }
+ parser->state.UNIX.main = PL_UNIX_PERMISSION;
+ parser->item_length = 0;
+ parser->item_offset = 1;
+ break;
+ case PL_UNIX_PERMISSION:
+ parser->item_length++;
+ if(parser->item_length <= 9) {
+ if(!strchr("rwx-tTsS", c)) {
+ PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
+ return bufflen;
+ }
+ }
+ else if(parser->item_length == 10) {
+ unsigned int perm;
+ if(c != ' ') {
+ PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
+ return bufflen;
+ }
+ finfo->b_data[10] = 0; /* terminate permissions */
+ perm = ftp_pl_get_permission(finfo->b_data + parser->item_offset);
+ if(perm & FTP_LP_MALFORMATED_PERM) {
+ PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
+ return bufflen;
+ }
+ parser->file_data->flags |= CURLFINFOFLAG_KNOWN_PERM;
+ parser->file_data->perm = perm;
+ parser->offsets.perm = parser->item_offset;
+
+ parser->item_length = 0;
+ parser->state.UNIX.main = PL_UNIX_HLINKS;
+ parser->state.UNIX.sub.hlinks = PL_UNIX_HLINKS_PRESPACE;
+ }
+ break;
+ case PL_UNIX_HLINKS:
+ switch(parser->state.UNIX.sub.hlinks) {
+ case PL_UNIX_HLINKS_PRESPACE:
+ if(c != ' ') {
+ if(c >= '0' && c <= '9') {
+ parser->item_offset = finfo->b_used - 1;
+ parser->item_length = 1;
+ parser->state.UNIX.sub.hlinks = PL_UNIX_HLINKS_NUMBER;
+ }
+ else {
+ PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
+ return bufflen;
+ }
+ }
+ break;
+ case PL_UNIX_HLINKS_NUMBER:
+ parser->item_length ++;
+ if(c == ' ') {
+ char *p;
+ long int hlinks;
+ finfo->b_data[parser->item_offset + parser->item_length - 1] = 0;
+ hlinks = strtol(finfo->b_data + parser->item_offset, &p, 10);
+ if(p[0] == '\0' && hlinks != LONG_MAX && hlinks != LONG_MIN) {
+ parser->file_data->flags |= CURLFINFOFLAG_KNOWN_HLINKCOUNT;
+ parser->file_data->hardlinks = hlinks;
+ }
+ parser->item_length = 0;
+ parser->item_offset = 0;
+ parser->state.UNIX.main = PL_UNIX_USER;
+ parser->state.UNIX.sub.user = PL_UNIX_USER_PRESPACE;
+ }
+ else if(c < '0' || c > '9') {
+ PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
+ return bufflen;
+ }
+ break;
+ }
+ break;
+ case PL_UNIX_USER:
+ switch(parser->state.UNIX.sub.user) {
+ case PL_UNIX_USER_PRESPACE:
+ if(c != ' ') {
+ parser->item_offset = finfo->b_used - 1;
+ parser->item_length = 1;
+ parser->state.UNIX.sub.user = PL_UNIX_USER_PARSING;
+ }
+ break;
+ case PL_UNIX_USER_PARSING:
+ parser->item_length++;
+ if(c == ' ') {
+ finfo->b_data[parser->item_offset + parser->item_length - 1] = 0;
+ parser->offsets.user = parser->item_offset;
+ parser->state.UNIX.main = PL_UNIX_GROUP;
+ parser->state.UNIX.sub.group = PL_UNIX_GROUP_PRESPACE;
+ parser->item_offset = 0;
+ parser->item_length = 0;
+ }
+ break;
+ }
+ break;
+ case PL_UNIX_GROUP:
+ switch(parser->state.UNIX.sub.group) {
+ case PL_UNIX_GROUP_PRESPACE:
+ if(c != ' ') {
+ parser->item_offset = finfo->b_used - 1;
+ parser->item_length = 1;
+ parser->state.UNIX.sub.group = PL_UNIX_GROUP_NAME;
+ }
+ break;
+ case PL_UNIX_GROUP_NAME:
+ parser->item_length++;
+ if(c == ' ') {
+ finfo->b_data[parser->item_offset + parser->item_length - 1] = 0;
+ parser->offsets.group = parser->item_offset;
+ parser->state.UNIX.main = PL_UNIX_SIZE;
+ parser->state.UNIX.sub.size = PL_UNIX_SIZE_PRESPACE;
+ parser->item_offset = 0;
+ parser->item_length = 0;
+ }
+ break;
+ }
+ break;
+ case PL_UNIX_SIZE:
+ switch(parser->state.UNIX.sub.size) {
+ case PL_UNIX_SIZE_PRESPACE:
+ if(c != ' ') {
+ if(c >= '0' && c <= '9') {
+ parser->item_offset = finfo->b_used - 1;
+ parser->item_length = 1;
+ parser->state.UNIX.sub.size = PL_UNIX_SIZE_NUMBER;
+ }
+ else {
+ PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
+ return bufflen;
+ }
+ }
+ break;
+ case PL_UNIX_SIZE_NUMBER:
+ parser->item_length++;
+ if(c == ' ') {
+ char *p;
+ curl_off_t fsize;
+ finfo->b_data[parser->item_offset + parser->item_length - 1] = 0;
+ fsize = curlx_strtoofft(finfo->b_data+parser->item_offset, &p, 10);
+ if(p[0] == '\0' && fsize != CURL_OFF_T_MAX &&
+ fsize != CURL_OFF_T_MIN) {
+ parser->file_data->flags |= CURLFINFOFLAG_KNOWN_SIZE;
+ parser->file_data->size = fsize;
+ }
+ parser->item_length = 0;
+ parser->item_offset = 0;
+ parser->state.UNIX.main = PL_UNIX_TIME;
+ parser->state.UNIX.sub.time = PL_UNIX_TIME_PREPART1;
+ }
+ else if (!ISDIGIT(c)) {
+ PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
+ return bufflen;
+ }
+ break;
+ }
+ break;
+ case PL_UNIX_TIME:
+ switch(parser->state.UNIX.sub.time) {
+ case PL_UNIX_TIME_PREPART1:
+ if(c != ' ') {
+ if(ISALNUM(c)) {
+ parser->item_offset = finfo->b_used -1;
+ parser->item_length = 1;
+ parser->state.UNIX.sub.time = PL_UNIX_TIME_PART1;
+ }
+ else {
+ PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
+ return bufflen;
+ }
+ }
+ break;
+ case PL_UNIX_TIME_PART1:
+ parser->item_length++;
+ if(c == ' ') {
+ parser->state.UNIX.sub.time = PL_UNIX_TIME_PREPART2;
+ }
+ else if(!ISALNUM(c) && c != '.') {
+ PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
+ return bufflen;
+ }
+ break;
+ case PL_UNIX_TIME_PREPART2:
+ parser->item_length++;
+ if(c != ' ') {
+ if(ISALNUM(c)) {
+ parser->state.UNIX.sub.time = PL_UNIX_TIME_PART2;
+ }
+ else {
+ PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
+ return bufflen;
+ }
+ }
+ break;
+ case PL_UNIX_TIME_PART2:
+ parser->item_length++;
+ if(c == ' ') {
+ parser->state.UNIX.sub.time = PL_UNIX_TIME_PREPART3;
+ }
+ else if(!ISALNUM(c) && c != '.') {
+ PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
+ return bufflen;
+ }
+ break;
+ case PL_UNIX_TIME_PREPART3:
+ parser->item_length++;
+ if(c != ' ') {
+ if(ISALNUM(c)) {
+ parser->state.UNIX.sub.time = PL_UNIX_TIME_PART3;
+ }
+ else {
+ PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
+ return bufflen;
+ }
+ }
+ break;
+ case PL_UNIX_TIME_PART3:
+ parser->item_length++;
+ if(c == ' ') {
+ finfo->b_data[parser->item_offset + parser->item_length -1] = 0;
+ parser->offsets.time = parser->item_offset;
+ if(ftp_pl_gettime(parser, finfo->b_data + parser->item_offset)) {
+ parser->file_data->flags |= CURLFINFOFLAG_KNOWN_TIME;
+ }
+ if(finfo->filetype == CURLFILETYPE_SYMLINK) {
+ parser->state.UNIX.main = PL_UNIX_SYMLINK;
+ parser->state.UNIX.sub.symlink = PL_UNIX_SYMLINK_PRESPACE;
+ }
+ else {
+ parser->state.UNIX.main = PL_UNIX_FILENAME;
+ parser->state.UNIX.sub.filename = PL_UNIX_FILENAME_PRESPACE;
+ }
+ }
+ else if(!ISALNUM(c) && c != '.' && c != ':') {
+ PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
+ return bufflen;
+ }
+ break;
+ }
+ break;
+ case PL_UNIX_FILENAME:
+ switch(parser->state.UNIX.sub.filename) {
+ case PL_UNIX_FILENAME_PRESPACE:
+ if(c != ' ') {
+ parser->item_offset = finfo->b_used - 1;
+ parser->item_length = 1;
+ parser->state.UNIX.sub.filename = PL_UNIX_FILENAME_NAME;
+ }
+ break;
+ case PL_UNIX_FILENAME_NAME:
+ parser->item_length++;
+ if(c == '\r') {
+ parser->item_length--;
+ parser->state.UNIX.sub.filename = PL_UNIX_FILENAME_WINDOWSEOL;
+ }
+ else if(c == '\n') {
+ finfo->b_data[parser->item_offset + parser->item_length - 1] = 0;
+ parser->offsets.filename = parser->item_offset;
+ parser->state.UNIX.main = PL_UNIX_FILETYPE;
+ rc = ftp_pl_insert_finfo(conn, finfo);
+ if(rc) {
+ PL_ERROR(conn, rc);
+ return bufflen;
+ }
+ }
+ break;
+ case PL_UNIX_FILENAME_WINDOWSEOL:
+ if(c == '\n') {
+ finfo->b_data[parser->item_offset + parser->item_length] = 0;
+ parser->offsets.filename = parser->item_offset;
+ parser->state.UNIX.main = PL_UNIX_FILETYPE;
+ rc = ftp_pl_insert_finfo(conn, finfo);
+ if(rc) {
+ PL_ERROR(conn, rc);
+ return bufflen;
+ }
+ }
+ else {
+ PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
+ return bufflen;
+ }
+ break;
+ }
+ break;
+ case PL_UNIX_SYMLINK:
+ switch(parser->state.UNIX.sub.symlink) {
+ case PL_UNIX_SYMLINK_PRESPACE:
+ if(c != ' ') {
+ parser->item_offset = finfo->b_used - 1;
+ parser->item_length = 1;
+ parser->state.UNIX.sub.symlink = PL_UNIX_SYMLINK_NAME;
+ }
+ break;
+ case PL_UNIX_SYMLINK_NAME:
+ parser->item_length++;
+ if(c == ' ') {
+ parser->state.UNIX.sub.symlink = PL_UNIX_SYMLINK_PRETARGET1;
+ }
+ else if(c == '\r' || c == '\n') {
+ PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
+ return bufflen;
+ }
+ break;
+ case PL_UNIX_SYMLINK_PRETARGET1:
+ parser->item_length++;
+ if(c == '-') {
+ parser->state.UNIX.sub.symlink = PL_UNIX_SYMLINK_PRETARGET2;
+ }
+ else if(c == '\r' || c == '\n') {
+ PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
+ return bufflen;
+ }
+ else {
+ parser->state.UNIX.sub.symlink = PL_UNIX_SYMLINK_NAME;
+ }
+ break;
+ case PL_UNIX_SYMLINK_PRETARGET2:
+ parser->item_length++;
+ if(c == '>') {
+ parser->state.UNIX.sub.symlink = PL_UNIX_SYMLINK_PRETARGET3;
+ }
+ else if(c == '\r' || c == '\n') {
+ PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
+ return bufflen;
+ }
+ else {
+ parser->state.UNIX.sub.symlink = PL_UNIX_SYMLINK_NAME;
+ }
+ break;
+ case PL_UNIX_SYMLINK_PRETARGET3:
+ parser->item_length++;
+ if(c == ' ') {
+ parser->state.UNIX.sub.symlink = PL_UNIX_SYMLINK_PRETARGET4;
+ /* now place where is symlink following */
+ finfo->b_data[parser->item_offset + parser->item_length - 4] = 0;
+ parser->offsets.filename = parser->item_offset;
+ parser->item_length = 0;
+ parser->item_offset = 0;
+ }
+ else if(c == '\r' || c == '\n') {
+ PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
+ return bufflen;
+ }
+ else {
+ parser->state.UNIX.sub.symlink = PL_UNIX_SYMLINK_NAME;
+ }
+ break;
+ case PL_UNIX_SYMLINK_PRETARGET4:
+ if(c != '\r' && c != '\n') {
+ parser->state.UNIX.sub.symlink = PL_UNIX_SYMLINK_TARGET;
+ parser->item_offset = finfo->b_used - 1;
+ parser->item_length = 1;
+ }
+ else {
+ PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
+ return bufflen;
+ }
+ break;
+ case PL_UNIX_SYMLINK_TARGET:
+ parser->item_length ++;
+ if(c == '\r') {
+ parser->item_length --;
+ parser->state.UNIX.sub.symlink = PL_UNIX_SYMLINK_WINDOWSEOL;
+ }
+ else if(c == '\n') {
+ finfo->b_data[parser->item_offset + parser->item_length - 1] = 0;
+ parser->offsets.symlink_target = parser->item_offset;
+ rc = ftp_pl_insert_finfo(conn, finfo);
+ if(rc) {
+ PL_ERROR(conn, rc);
+ return bufflen;
+ }
+ parser->state.UNIX.main = PL_UNIX_FILETYPE;
+ }
+ break;
+ case PL_UNIX_SYMLINK_WINDOWSEOL:
+ if(c == '\n') {
+ finfo->b_data[parser->item_offset + parser->item_length - 1] = 0;
+ parser->offsets.symlink_target = parser->item_offset;
+ rc = ftp_pl_insert_finfo(conn, finfo);
+ if(rc) {
+ PL_ERROR(conn, rc);
+ return bufflen;
+ }
+ parser->state.UNIX.main = PL_UNIX_FILETYPE;
+ }
+ else {
+ PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
+ return bufflen;
+ }
+ break;
+ }
+ break;
+ }
+ break;
+ case OS_TYPE_WIN_NT:
+ switch(parser->state.NT.main) {
+ case PL_WINNT_DATE:
+ parser->item_length++;
+ if(parser->item_length < 9) {
+ if(!strchr("0123456789-", c)) { /* only simple control */
+ PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
+ return bufflen;
+ }
+ }
+ else if(parser->item_length == 9) {
+ if(c == ' ') {
+ parser->state.NT.main = PL_WINNT_TIME;
+ parser->state.NT.sub.time = PL_WINNT_TIME_PRESPACE;
+ }
+ else {
+ PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
+ return bufflen;
+ }
+ }
+ else {
+ PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
+ return bufflen;
+ }
+ break;
+ case PL_WINNT_TIME:
+ parser->item_length++;
+ switch(parser->state.NT.sub.time) {
+ case PL_WINNT_TIME_PRESPACE:
+ if(!ISSPACE(c)) {
+ parser->state.NT.sub.time = PL_WINNT_TIME_TIME;
+ }
+ break;
+ case PL_WINNT_TIME_TIME:
+ if(c == ' ') {
+ parser->offsets.time = parser->item_offset;
+ finfo->b_data[parser->item_offset + parser->item_length -1] = 0;
+ parser->state.NT.main = PL_WINNT_DIRORSIZE;
+ parser->state.NT.sub.dirorsize = PL_WINNT_DIRORSIZE_PRESPACE;
+ parser->item_length = 0;
+ }
+ else if(!strchr("APM0123456789:", c)) {
+ PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
+ return bufflen;
+ }
+ break;
+ }
+ break;
+ case PL_WINNT_DIRORSIZE:
+ switch(parser->state.NT.sub.dirorsize) {
+ case PL_WINNT_DIRORSIZE_PRESPACE:
+ if(c == ' ') {
+
+ }
+ else {
+ parser->item_offset = finfo->b_used - 1;
+ parser->item_length = 1;
+ parser->state.NT.sub.dirorsize = PL_WINNT_DIRORSIZE_CONTENT;
+ }
+ break;
+ case PL_WINNT_DIRORSIZE_CONTENT:
+ parser->item_length ++;
+ if(c == ' ') {
+ finfo->b_data[parser->item_offset + parser->item_length - 1] = 0;
+ if(strcmp("<DIR>", finfo->b_data + parser->item_offset) == 0) {
+ finfo->filetype = CURLFILETYPE_DIRECTORY;
+ finfo->size = 0;
+ }
+ else {
+ char *endptr;
+ finfo->size = curlx_strtoofft(finfo->b_data + parser->item_offset,
+ &endptr, 10);
+ if(!*endptr) {
+ if(finfo->size == CURL_OFF_T_MAX ||
+ finfo->size == CURL_OFF_T_MIN) {
+ if(errno == ERANGE) {
+ PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
+ return bufflen;
+ }
+ }
+ }
+ else {
+ PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
+ return bufflen;
+ }
+ /* correct file type */
+ parser->file_data->filetype = CURLFILETYPE_FILE;
+ }
+
+ parser->file_data->flags |= CURLFINFOFLAG_KNOWN_SIZE;
+ parser->item_length = 0;
+ parser->state.NT.main = PL_WINNT_FILENAME;
+ parser->state.NT.sub.filename = PL_WINNT_FILENAME_PRESPACE;
+ }
+ break;
+ }
+ break;
+ case PL_WINNT_FILENAME:
+ switch (parser->state.NT.sub.filename) {
+ case PL_WINNT_FILENAME_PRESPACE:
+ if(c != ' ') {
+ parser->item_offset = finfo->b_used -1;
+ parser->item_length = 1;
+ parser->state.NT.sub.filename = PL_WINNT_FILENAME_CONTENT;
+ }
+ break;
+ case PL_WINNT_FILENAME_CONTENT:
+ parser->item_length++;
+ if(c == '\r') {
+ parser->state.NT.sub.filename = PL_WINNT_FILENAME_WINEOL;
+ finfo->b_data[finfo->b_used - 1] = 0;
+ }
+ else if(c == '\n') {
+ parser->offsets.filename = parser->item_offset;
+ finfo->b_data[finfo->b_used - 1] = 0;
+ parser->offsets.filename = parser->item_offset;
+ rc = ftp_pl_insert_finfo(conn, finfo);
+ if(rc) {
+ PL_ERROR(conn, rc);
+ return bufflen;
+ }
+ parser->state.NT.main = PL_WINNT_DATE;
+ parser->state.NT.sub.filename = PL_WINNT_FILENAME_PRESPACE;
+ }
+ break;
+ case PL_WINNT_FILENAME_WINEOL:
+ if(c == '\n') {
+ parser->offsets.filename = parser->item_offset;
+ rc = ftp_pl_insert_finfo(conn, finfo);
+ if(rc) {
+ PL_ERROR(conn, rc);
+ return bufflen;
+ }
+ parser->state.NT.main = PL_WINNT_DATE;
+ parser->state.NT.sub.filename = PL_WINNT_FILENAME_PRESPACE;
+ }
+ else {
+ PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
+ return bufflen;
+ }
+ break;
+ }
+ break;
+ }
+ break;
+ default:
+ return bufflen+1;
+ }
+
+ i++;
+ }
+
+ return bufflen;
+}
diff --git a/lib/ftplistparser.h b/lib/ftplistparser.h
new file mode 100644
index 0000000..67a06c2
--- /dev/null
+++ b/lib/ftplistparser.h
@@ -0,0 +1,39 @@
+#ifndef HEADER_CURL_FTPLISTPARSER_H
+#define HEADER_CURL_FTPLISTPARSER_H
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at http://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ***************************************************************************/
+
+#include <curl/curl.h>
+
+/* WRITEFUNCTION callback for parsing LIST responses */
+size_t Curl_ftp_parselist(char *buffer, size_t size, size_t nmemb,
+ void *connptr);
+
+struct ftp_parselist_data; /* defined inside ftplibparser.c */
+
+CURLcode Curl_ftp_parselist_geterror(struct ftp_parselist_data *pl_data);
+
+struct ftp_parselist_data *Curl_ftp_parselist_data_alloc(void);
+
+void Curl_ftp_parselist_data_free(struct ftp_parselist_data **pl_data);
+
+#endif /* HEADER_CURL_FTPLISTPARSER_H */
diff --git a/lib/getinfo.c b/lib/getinfo.c
index 7a0ed71..c00e675 100644
--- a/lib/getinfo.c
+++ b/lib/getinfo.c
@@ -66,6 +66,12 @@ CURLcode Curl_initinfo(struct SessionHandle *data)
info->header_size = 0;
info->request_size = 0;
info->numconnects = 0;
+
+ info->ip[0] = 0;
+ info->port = 0;
+ info->localip[0] = 0;
+ info->localport = 0;
+
return CURLE_OK;
}
@@ -77,6 +83,7 @@ CURLcode Curl_getinfo(struct SessionHandle *data, CURLINFO info, ...)
char **param_charp=NULL;
struct curl_slist **param_slistp=NULL;
int type;
+ curl_socket_t sockfd;
union {
struct curl_certinfo * to_certinfo;
@@ -213,7 +220,16 @@ CURLcode Curl_getinfo(struct SessionHandle *data, CURLINFO info, ...)
*param_charp = data->state.most_recent_ftp_entrypath;
break;
case CURLINFO_LASTSOCKET:
- (void)Curl_getconnectinfo(data, param_longp, NULL);
+ sockfd = Curl_getconnectinfo(data, NULL);
+
+ /* note: this is not a good conversion for systems with 64 bit sockets and
+ 32 bit longs */
+ if(sockfd != CURL_SOCKET_BAD)
+ *param_longp = (long)sockfd;
+ else
+ /* this interface is documented to return -1 in case of badness, which
+ may not be the same as the CURL_SOCKET_BAD value */
+ *param_longp = -1;
break;
case CURLINFO_REDIRECT_URL:
/* Return the URL this request would have been redirected to if that
@@ -224,6 +240,19 @@ CURLcode Curl_getinfo(struct SessionHandle *data, CURLINFO info, ...)
/* Return the ip address of the most recent (primary) connection */
*param_charp = data->info.ip;
break;
+ case CURLINFO_PRIMARY_PORT:
+ /* Return the (remote) port of the most recent (primary) connection */
+ *param_longp = data->info.port;
+ break;
+ case CURLINFO_LOCAL_IP:
+ /* Return the source/local ip address of the most recent (primary)
+ connection */
+ *param_charp = data->info.localip;
+ break;
+ case CURLINFO_LOCAL_PORT:
+ /* Return the local port of the most recent (primary) connection */
+ *param_longp = data->info.localport;
+ break;
case CURLINFO_CERTINFO:
/* Return the a pointer to the certinfo struct. Not really an slist
pointer but we can pretend it is here */
diff --git a/lib/gopher.c b/lib/gopher.c
new file mode 100644
index 0000000..aa9c45b
--- /dev/null
+++ b/lib/gopher.c
@@ -0,0 +1,208 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at http://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ***************************************************************************/
+
+#include "setup.h"
+
+#ifndef CURL_DISABLE_GOPHER
+
+/* -- WIN32 approved -- */
+#include <stdio.h>
+#include <string.h>
+#include <stdarg.h>
+#include <stdlib.h>
+#include <ctype.h>
+
+#ifdef WIN32
+#include <time.h>
+#include <io.h>
+#else
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#include <netinet/in.h>
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#include <netdb.h>
+#ifdef HAVE_ARPA_INET_H
+#include <arpa/inet.h>
+#endif
+#ifdef HAVE_NET_IF_H
+#include <net/if.h>
+#endif
+#ifdef HAVE_SYS_IOCTL_H
+#include <sys/ioctl.h>
+#endif
+
+#ifdef HAVE_SYS_PARAM_H
+#include <sys/param.h>
+#endif
+
+#ifdef HAVE_SYS_SELECT_H
+#include <sys/select.h>
+#endif
+
+
+#endif
+
+#include "urldata.h"
+#include <curl/curl.h>
+#include "transfer.h"
+#include "sendf.h"
+
+#include "progress.h"
+#include "strequal.h"
+#include "gopher.h"
+#include "rawstr.h"
+#include "select.h"
+#include "url.h"
+
+#define _MPRINTF_REPLACE /* use our functions only */
+#include <curl/mprintf.h>
+
+/* The last #include file should be: */
+#include "memdebug.h"
+
+
+/*
+ * Forward declarations.
+ */
+
+static CURLcode gopher_do(struct connectdata *conn, bool *done);
+
+/*
+ * Gopher protocol handler.
+ * This is also a nice simple template to build off for simple
+ * connect-command-download protocols.
+ */
+
+const struct Curl_handler Curl_handler_gopher = {
+ "GOPHER", /* scheme */
+ ZERO_NULL, /* setup_connection */
+ gopher_do, /* do_it */
+ ZERO_NULL, /* done */
+ ZERO_NULL, /* do_more */
+ ZERO_NULL, /* connect_it */
+ ZERO_NULL, /* connecting */
+ ZERO_NULL, /* doing */
+ ZERO_NULL, /* proto_getsock */
+ ZERO_NULL, /* doing_getsock */
+ ZERO_NULL, /* perform_getsock */
+ ZERO_NULL, /* disconnect */
+ PORT_GOPHER, /* defport */
+ PROT_GOPHER /* protocol */
+};
+
+static CURLcode gopher_do(struct connectdata *conn, bool *done)
+{
+ CURLcode result=CURLE_OK;
+ struct SessionHandle *data=conn->data;
+ curl_socket_t sockfd = conn->sock[FIRSTSOCKET];
+
+ curl_off_t *bytecount = &data->req.bytecount;
+ char *path = data->state.path;
+ char *sel;
+ char *sel_org = NULL;
+ ssize_t amount, k;
+
+ *done = TRUE; /* unconditionally */
+
+ /* Create selector. Degenerate cases: / and /1 => convert to "" */
+ if (strlen(path) <= 2)
+ sel = (char *)"";
+ else {
+ char *newp;
+ size_t j, i;
+ int len;
+
+ /* Otherwise, drop / and the first character (i.e., item type) ... */
+ newp = path;
+ newp+=2;
+
+ /* ... then turn ? into TAB for search servers, Veronica, etc. ... */
+ j = strlen(newp);
+ for(i=0; i<j; i++)
+ if(newp[i] == '?')
+ newp[i] = '\x09';
+
+ /* ... and finally unescape */
+ sel = curl_easy_unescape(data, newp, 0, &len);
+ if (!sel)
+ return CURLE_OUT_OF_MEMORY;
+ sel_org = sel;
+ }
+
+ /* We use Curl_write instead of Curl_sendf to make sure the entire buffer is
+ sent, which could be sizeable with long selectors. */
+ k = strlen(sel);
+
+ for(;;) {
+ result = Curl_write(conn, sockfd, sel, k, &amount);
+ if (CURLE_OK == result) { /* Which may not have written it all! */
+ result = Curl_client_write(conn, CLIENTWRITE_HEADER, sel, amount);
+ if(result) {
+ Curl_safefree(sel_org);
+ return result;
+ }
+ k -= amount;
+ sel += amount;
+ if (k < 1)
+ break; /* but it did write it all */
+ }
+ else {
+ failf(data, "Failed sending Gopher request");
+ Curl_safefree(sel_org);
+ return result;
+ }
+ /* Don't busyloop. The entire loop thing is a work-around as it causes a
+ BLOCKING behavior which is a NO-NO. This function should rather be
+ split up in a do and a doing piece where the pieces that aren't
+ possible to send now will be sent in the doing function repeatedly
+ until the entire request is sent.
+
+ Wait a while for the socket to be writable. Note that this doesn't
+ acknowledge the timeout.
+ */
+ Curl_socket_ready(CURL_SOCKET_BAD, sockfd, 100);
+ }
+
+ Curl_safefree(sel_org);
+
+ /* We can use Curl_sendf to send the terminal \r\n relatively safely and
+ save allocing another string/doing another _write loop. */
+ result = Curl_sendf(sockfd, conn, "\r\n");
+ if (result != CURLE_OK) {
+ failf(data, "Failed sending Gopher request");
+ return result;
+ }
+ result = Curl_client_write(conn, CLIENTWRITE_HEADER, (char *)"\r\n", 2);
+ if(result)
+ return result;
+
+ Curl_setup_transfer(conn, FIRSTSOCKET, -1, FALSE, bytecount,
+ -1, NULL); /* no upload */
+ return CURLE_OK;
+}
+#endif /*CURL_DISABLE_GOPHER*/
diff --git a/lib/gopher.h b/lib/gopher.h
new file mode 100644
index 0000000..38bbc4b
--- /dev/null
+++ b/lib/gopher.h
@@ -0,0 +1,29 @@
+#ifndef HEADER_CURL_GOPHER_H
+#define HEADER_CURL_GOPHER_H
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at http://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ***************************************************************************/
+
+#ifndef CURL_DISABLE_GOPHER
+extern const struct Curl_handler Curl_handler_gopher;
+#endif
+
+#endif /* HEADER_CURL_GOPHER_H */
diff --git a/lib/gtls.c b/lib/gtls.c
index b7fa3c9..99be073 100644
--- a/lib/gtls.c
+++ b/lib/gtls.c
@@ -182,54 +182,76 @@ static void unload_file(gnutls_datum data) {
}
-/* this function does a BLOCKING SSL/TLS (re-)handshake */
+/* this function does a SSL/TLS (re-)handshake */
static CURLcode handshake(struct connectdata *conn,
- gnutls_session session,
int sockindex,
- bool duringconnect)
+ bool duringconnect,
+ bool nonblocking)
{
struct SessionHandle *data = conn->data;
+ struct ssl_connect_data *connssl = &conn->ssl[sockindex];
+ gnutls_session session = conn->ssl[sockindex].session;
+ curl_socket_t sockfd = conn->sock[sockindex];
+ long timeout_ms;
int rc;
- if(!gtls_inited)
- Curl_gtls_init();
- do {
- rc = gnutls_handshake(session);
+ int what;
- if((rc == GNUTLS_E_AGAIN) || (rc == GNUTLS_E_INTERRUPTED)) {
- long timeout_ms = Curl_timeleft(conn, NULL, duringconnect);
+ while(1) {
+ /* check allowed time left */
+ timeout_ms = Curl_timeleft(conn, NULL, duringconnect);
- if(timeout_ms < 0) {
- /* a precaution, no need to continue if time already is up */
- failf(data, "SSL connection timeout");
- return CURLE_OPERATION_TIMEDOUT;
- }
+ if(timeout_ms < 0) {
+ /* no need to continue if time already is up */
+ failf(data, "SSL connection timeout");
+ return CURLE_OPERATION_TIMEDOUT;
+ }
- rc = Curl_socket_ready(conn->sock[sockindex],
- conn->sock[sockindex], (int)timeout_ms);
- if(rc > 0)
- /* reabable or writable, go loop*/
- continue;
- else if(0 == rc) {
- /* timeout */
- failf(data, "SSL connection timeout");
- return CURLE_OPERATION_TIMEDOUT;
- }
- else {
- /* anything that gets here is fatally bad */
+ /* if ssl is expecting something, check if it's available. */
+ if(connssl->connecting_state == ssl_connect_2_reading
+ || connssl->connecting_state == ssl_connect_2_writing) {
+
+ curl_socket_t writefd = ssl_connect_2_writing==
+ connssl->connecting_state?sockfd:CURL_SOCKET_BAD;
+ curl_socket_t readfd = ssl_connect_2_reading==
+ connssl->connecting_state?sockfd:CURL_SOCKET_BAD;
+
+ what = Curl_socket_ready(readfd, writefd,
+ nonblocking?0:(int)timeout_ms);
+ if(what < 0) {
+ /* fatal error */
failf(data, "select/poll on SSL socket, errno: %d", SOCKERRNO);
return CURLE_SSL_CONNECT_ERROR;
}
+ else if(0 == what) {
+ if(nonblocking) {
+ return CURLE_OK;
+ }
+ else {
+ /* timeout */
+ failf(data, "SSL connection timeout");
+ return CURLE_OPERATION_TIMEDOUT;
+ }
+ }
+ /* socket is readable or writable */
}
- else
- break;
- } while(1);
- if(rc < 0) {
- failf(data, "gnutls_handshake() failed: %s", gnutls_strerror(rc));
- return CURLE_SSL_CONNECT_ERROR;
- }
+ rc = gnutls_handshake(session);
- return CURLE_OK;
+ if((rc == GNUTLS_E_AGAIN) || (rc == GNUTLS_E_INTERRUPTED)) {
+ connssl->connecting_state =
+ gnutls_record_get_direction(session)?
+ ssl_connect_2_writing:ssl_connect_2_reading;
+ if(nonblocking) {
+ return CURLE_OK;
+ }
+ } else if (rc < 0) {
+ failf(data, "gnutls_handshake() failed: %s", gnutls_strerror(rc));
+ } else {
+ /* Reset our connect state machine */
+ connssl->connecting_state = ssl_connect_1;
+ return CURLE_OK;
+ }
+ }
}
static gnutls_x509_crt_fmt do_file_type(const char *type)
@@ -243,31 +265,14 @@ static gnutls_x509_crt_fmt do_file_type(const char *type)
return -1;
}
-
-/*
- * This function is called after the TCP connect has completed. Setup the TLS
- * layer and do all necessary magic.
- */
-CURLcode
-Curl_gtls_connect(struct connectdata *conn,
- int sockindex)
-
+static CURLcode
+gtls_connect_step1(struct connectdata *conn,
+ int sockindex)
{
static const int cert_type_priority[] = { GNUTLS_CRT_X509, 0 };
struct SessionHandle *data = conn->data;
gnutls_session session;
int rc;
- unsigned int cert_list_size;
- const gnutls_datum *chainp;
- unsigned int verify_status;
- gnutls_x509_crt x509_cert,x509_issuer;
- gnutls_datum issuerp;
- char certbuf[256]; /* big enough? */
- size_t size;
- unsigned int algo;
- unsigned int bits;
- time_t certclock;
- const char *ptr;
void *ssl_sessionid;
size_t ssl_idsize;
bool sni = TRUE; /* default is SNI enabled */
@@ -411,10 +416,32 @@ Curl_gtls_connect(struct connectdata *conn,
infof (data, "SSL re-using session ID\n");
}
- rc = handshake(conn, session, sockindex, TRUE);
- if(rc)
- /* handshake() sets its own error message with failf() */
- return rc;
+ return CURLE_OK;
+}
+
+static Curl_recv gtls_recv;
+static Curl_send gtls_send;
+
+static CURLcode
+gtls_connect_step3(struct connectdata *conn,
+ int sockindex)
+{
+ unsigned int cert_list_size;
+ const gnutls_datum *chainp;
+ unsigned int verify_status;
+ gnutls_x509_crt x509_cert,x509_issuer;
+ gnutls_datum issuerp;
+ char certbuf[256]; /* big enough? */
+ size_t size;
+ unsigned int algo;
+ unsigned int bits;
+ time_t certclock;
+ const char *ptr;
+ struct SessionHandle *data = conn->data;
+ gnutls_session session = conn->ssl[sockindex].session;
+ int rc;
+ int incache;
+ void *ssl_sessionid;
/* This function will return the peer's raw certificate (chain) as sent by
the peer. These certificates are in raw format (DER encoded for
@@ -606,6 +633,8 @@ Curl_gtls_connect(struct connectdata *conn,
infof(data, "\t MAC: %s\n", ptr);
conn->ssl[sockindex].state = ssl_connection_complete;
+ conn->recv[sockindex] = gtls_recv;
+ conn->send[sockindex] = gtls_send;
{
/* we always unconditionally get the session id here, as even if we
@@ -623,33 +652,100 @@ Curl_gtls_connect(struct connectdata *conn,
/* extract session ID to the allocated buffer */
gnutls_session_get_data(session, connect_sessionid, &connect_idsize);
- if(ssl_sessionid)
+ incache = !(Curl_ssl_getsessionid(conn, &ssl_sessionid, NULL));
+ if (incache) {
/* there was one before in the cache, so instead of risking that the
previous one was rejected, we just kill that and store the new */
Curl_ssl_delsessionid(conn, ssl_sessionid);
+ }
/* store this session id */
return Curl_ssl_addsessionid(conn, connect_sessionid, connect_idsize);
}
+ }
+
+ return CURLE_OK;
+}
+
+
+/*
+ * This function is called after the TCP connect has completed. Setup the TLS
+ * layer and do all necessary magic.
+ */
+/* We use connssl->connecting_state to keep track of the connection status;
+ there are three states: 'ssl_connect_1' (not started yet or complete),
+ 'ssl_connect_2_reading' (waiting for data from server), and
+ 'ssl_connect_2_writing' (waiting to be able to write).
+ */
+static CURLcode
+gtls_connect_common(struct connectdata *conn,
+ int sockindex,
+ bool nonblocking,
+ bool *done)
+{
+ int rc;
+ struct ssl_connect_data *connssl = &conn->ssl[sockindex];
+ /* Initiate the connection, if not already done */
+ if(ssl_connect_1==connssl->connecting_state) {
+ rc = gtls_connect_step1 (conn, sockindex);
+ if(rc)
+ return rc;
+ }
+
+ rc = handshake(conn, sockindex, TRUE, nonblocking);
+ if(rc)
+ /* handshake() sets its own error message with failf() */
+ return rc;
+
+ /* Finish connecting once the handshake is done */
+ if(ssl_connect_1==connssl->connecting_state) {
+ rc = gtls_connect_step3(conn, sockindex);
+ if(rc)
+ return rc;
}
+ *done = ssl_connect_1==connssl->connecting_state;
+
return CURLE_OK;
}
+CURLcode
+Curl_gtls_connect_nonblocking(struct connectdata *conn,
+ int sockindex,
+ bool *done)
+{
+ return gtls_connect_common(conn, sockindex, TRUE, done);
+}
+
+CURLcode
+Curl_gtls_connect(struct connectdata *conn,
+ int sockindex)
-/* for documentation see Curl_ssl_send() in sslgen.h */
-ssize_t Curl_gtls_send(struct connectdata *conn,
- int sockindex,
- const void *mem,
- size_t len,
- int *curlcode)
+{
+ CURLcode retcode;
+ bool done = FALSE;
+
+ retcode = gtls_connect_common(conn, sockindex, FALSE, &done);
+ if(retcode)
+ return retcode;
+
+ DEBUGASSERT(done);
+
+ return CURLE_OK;
+}
+
+static ssize_t gtls_send(struct connectdata *conn,
+ int sockindex,
+ const void *mem,
+ size_t len,
+ CURLcode *curlcode)
{
ssize_t rc = gnutls_record_send(conn->ssl[sockindex].session, mem, len);
if(rc < 0 ) {
*curlcode = (rc == GNUTLS_E_AGAIN)
- ? /* EWOULDBLOCK */ -1
+ ? CURLE_AGAIN
: CURLE_SEND_ERROR;
rc = -1;
@@ -751,36 +847,29 @@ int Curl_gtls_shutdown(struct connectdata *conn, int sockindex)
return retval;
}
-/* for documentation see Curl_ssl_recv() in sslgen.h */
-ssize_t Curl_gtls_recv(struct connectdata *conn, /* connection data */
- int num, /* socketindex */
- char *buf, /* store read data here */
- size_t buffersize, /* max amount to read */
- int *curlcode)
+static ssize_t gtls_recv(struct connectdata *conn, /* connection data */
+ int num, /* socketindex */
+ char *buf, /* store read data here */
+ size_t buffersize, /* max amount to read */
+ CURLcode *curlcode)
{
ssize_t ret;
ret = gnutls_record_recv(conn->ssl[num].session, buf, buffersize);
if((ret == GNUTLS_E_AGAIN) || (ret == GNUTLS_E_INTERRUPTED)) {
- *curlcode = -1;
+ *curlcode = CURLE_AGAIN;
return -1;
}
if(ret == GNUTLS_E_REHANDSHAKE) {
/* BLOCKING call, this is bad but a work-around for now. Fixing this "the
proper way" takes a whole lot of work. */
- CURLcode rc = handshake(conn, conn->ssl[num].session, num, FALSE);
+ CURLcode rc = handshake(conn, num, FALSE, FALSE);
if(rc)
/* handshake() writes error message on its own */
*curlcode = rc;
else
- *curlcode = -1; /* then return as if this was a wouldblock */
- return -1;
- }
-
- if(!ret) {
- failf(conn->data, "Peer closed the TLS connection");
- *curlcode = CURLE_RECV_ERROR;
+ *curlcode = CURLE_AGAIN; /* then return as if this was a wouldblock */
return -1;
}
diff --git a/lib/gtls.h b/lib/gtls.h
index 9fe618a..51e0af1 100644
--- a/lib/gtls.h
+++ b/lib/gtls.h
@@ -27,6 +27,9 @@
int Curl_gtls_init(void);
int Curl_gtls_cleanup(void);
CURLcode Curl_gtls_connect(struct connectdata *conn, int sockindex);
+CURLcode Curl_gtls_connect_nonblocking(struct connectdata *conn,
+ int sockindex,
+ bool *done);
/* tell GnuTLS to close down all open information regarding connections (and
thus session ID caching etc) */
@@ -35,14 +38,6 @@ void Curl_gtls_close_all(struct SessionHandle *data);
/* close a SSL connection */
void Curl_gtls_close(struct connectdata *conn, int sockindex);
-/* for documentation see Curl_ssl_send() in sslgen.h */
-ssize_t Curl_gtls_send(struct connectdata *conn, int sockindex,
- const void *mem, size_t len, int *curlcode);
-
-/* for documentation see Curl_ssl_recv() in sslgen.h */
-ssize_t Curl_gtls_recv(struct connectdata *conn, int num, char *buf,
- size_t buffersize, int *curlcode);
-
void Curl_gtls_session_free(void *ptr);
size_t Curl_gtls_version(char *buffer, size_t size);
int Curl_gtls_shutdown(struct connectdata *conn, int sockindex);
@@ -52,6 +47,7 @@ int Curl_gtls_seed(struct SessionHandle *data);
#define curlssl_init Curl_gtls_init
#define curlssl_cleanup Curl_gtls_cleanup
#define curlssl_connect Curl_gtls_connect
+#define curlssl_connect_nonblocking Curl_gtls_connect_nonblocking
#define curlssl_session_free(x) Curl_gtls_session_free(x)
#define curlssl_close_all Curl_gtls_close_all
#define curlssl_close Curl_gtls_close
@@ -59,8 +55,6 @@ int Curl_gtls_seed(struct SessionHandle *data);
#define curlssl_set_engine(x,y) (x=x, y=y, CURLE_FAILED_INIT)
#define curlssl_set_engine_default(x) (x=x, CURLE_FAILED_INIT)
#define curlssl_engines_list(x) (x=x, (struct curl_slist *)NULL)
-#define curlssl_send Curl_gtls_send
-#define curlssl_recv Curl_gtls_recv
#define curlssl_version Curl_gtls_version
#define curlssl_check_cxn(x) (x=x, -1)
#define curlssl_data_pending(x,y) (x=x, y=y, 0)
diff --git a/lib/hmac.c b/lib/hmac.c
new file mode 100644
index 0000000..0c01d11
--- /dev/null
+++ b/lib/hmac.c
@@ -0,0 +1,131 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at http://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ * RFC2104 Keyed-Hashing for Message Authentication
+ *
+ ***************************************************************************/
+
+#include "setup.h"
+
+#ifndef CURL_DISABLE_CRYPTO_AUTH
+
+#include "curl_hmac.h"
+
+#define _MPRINTF_REPLACE /* use our functions only */
+#include <curl/mprintf.h>
+
+#include "curl_memory.h"
+/* The last #include file should be: */
+#include "memdebug.h"
+
+/*
+ * Generic HMAC algorithm.
+ *
+ * This module computes HMAC digests based on any hash function. Parameters
+ * and computing procedures are set-up dynamically at HMAC computation
+ * context initialisation.
+ */
+
+static const unsigned char hmac_ipad = 0x36;
+static const unsigned char hmac_opad = 0x5C;
+
+
+
+HMAC_context *
+Curl_HMAC_init(const HMAC_params * hashparams,
+ const unsigned char * key,
+ unsigned int keylen)
+{
+ size_t i;
+ HMAC_context * ctxt;
+ unsigned char * hkey;
+ unsigned char b;
+
+ /* Create HMAC context. */
+ i = sizeof *ctxt + 2 * hashparams->hmac_ctxtsize + hashparams->hmac_resultlen;
+ ctxt = (HMAC_context *) malloc(i);
+
+ if(!ctxt)
+ return ctxt;
+
+ ctxt->hmac_hash = hashparams;
+ ctxt->hmac_hashctxt1 = (void *) (ctxt + 1);
+ ctxt->hmac_hashctxt2 = (void *) ((char *) ctxt->hmac_hashctxt1 +
+ hashparams->hmac_ctxtsize);
+
+ /* If the key is too long, replace it by its hash digest. */
+ if(keylen > hashparams->hmac_maxkeylen) {
+ (*hashparams->hmac_hinit)(ctxt->hmac_hashctxt1);
+ (*hashparams->hmac_hupdate)(ctxt->hmac_hashctxt1, key, keylen);
+ hkey = (unsigned char *) ctxt->hmac_hashctxt2 + hashparams->hmac_ctxtsize;
+ (*hashparams->hmac_hfinal)(hkey, ctxt->hmac_hashctxt1);
+ key = hkey;
+ keylen = hashparams->hmac_resultlen;
+ }
+
+ /* Prime the two hash contexts with the modified key. */
+ (*hashparams->hmac_hinit)(ctxt->hmac_hashctxt1);
+ (*hashparams->hmac_hinit)(ctxt->hmac_hashctxt2);
+
+ for (i = 0; i < keylen; i++) {
+ b = *key ^ hmac_ipad;
+ (*hashparams->hmac_hupdate)(ctxt->hmac_hashctxt1, &b, 1);
+ b = *key++ ^ hmac_opad;
+ (*hashparams->hmac_hupdate)(ctxt->hmac_hashctxt2, &b, 1);
+ }
+
+ for (; i < hashparams->hmac_maxkeylen; i++) {
+ (*hashparams->hmac_hupdate)(ctxt->hmac_hashctxt1, &hmac_ipad, 1);
+ (*hashparams->hmac_hupdate)(ctxt->hmac_hashctxt2, &hmac_opad, 1);
+ }
+
+ /* Done, return pointer to HMAC context. */
+ return ctxt;
+}
+
+int Curl_HMAC_update(HMAC_context * ctxt,
+ const unsigned char * data,
+ unsigned int len)
+{
+ /* Update first hash calculation. */
+ (*ctxt->hmac_hash->hmac_hupdate)(ctxt->hmac_hashctxt1, data, len);
+ return 0;
+}
+
+
+int Curl_HMAC_final(HMAC_context * ctxt, unsigned char * result)
+{
+ const HMAC_params * hashparams = ctxt->hmac_hash;
+
+ /* Do not get result if called with a null parameter: only release storage. */
+
+ if(!result)
+ result = (unsigned char *) ctxt->hmac_hashctxt2 +
+ ctxt->hmac_hash->hmac_ctxtsize;
+
+ (*hashparams->hmac_hfinal)(result, ctxt->hmac_hashctxt1);
+ (*hashparams->hmac_hupdate)(ctxt->hmac_hashctxt2,
+ result, hashparams->hmac_resultlen);
+ (*hashparams->hmac_hfinal)(result, ctxt->hmac_hashctxt2);
+ free((char *) ctxt);
+ return 0;
+}
+
+#endif /* CURL_DISABLE_CRYPTO_AUTH */
diff --git a/lib/hostares.c b/lib/hostares.c
index 01b2142..a00fefa 100644
--- a/lib/hostares.c
+++ b/lib/hostares.c
@@ -251,7 +251,7 @@ CURLcode Curl_wait_for_resolv(struct connectdata *conn,
second is left, otherwise just use 1000ms to make sure the progress
callback gets called frequent enough */
if(!tvp->tv_sec)
- timeout_ms = tvp->tv_usec/1000;
+ timeout_ms = (int)(tvp->tv_usec/1000);
else
timeout_ms = 1000;
diff --git a/lib/hostip.c b/lib/hostip.c
index 8f6a52e..6185c13 100644
--- a/lib/hostip.c
+++ b/lib/hostip.c
@@ -78,7 +78,9 @@
#if defined(CURLRES_SYNCH) && \
defined(HAVE_ALARM) && defined(SIGALRM) && defined(HAVE_SIGSETJMP)
/* alarm-based timeouts can only be used with all the dependencies satisfied */
-#define USE_ALARM_TIMEOUT
+// Disable this timeout, as there are a *lot* of crashes that seem to happen in
+// this code on Mac, but not on Windows
+// #define USE_ALARM_TIMEOUT
#endif
/*
@@ -719,5 +721,3 @@ struct curl_hash *Curl_mk_dnscache(void)
{
return Curl_hash_alloc(7, Curl_hash_str, Curl_str_key_compare, freednsentry);
}
-
-
diff --git a/lib/hostip4.c b/lib/hostip4.c
index fbc7d49..05dd73e 100644
--- a/lib/hostip4.c
+++ b/lib/hostip4.c
@@ -160,7 +160,7 @@ Curl_addrinfo *Curl_ipv4_resolve_r(const char *hostname,
snprintf(sbuf, sizeof(sbuf), "%d", port);
sbufptr = sbuf;
}
- hints.ai_flags = AI_CANONNAME;
+
(void)Curl_getaddrinfo_ex(hostname, sbufptr, &hints, &ai);
#elif defined(HAVE_GETHOSTBYNAME_R)
diff --git a/lib/hostip6.c b/lib/hostip6.c
index fb3ad0c..7d0a912 100644
--- a/lib/hostip6.c
+++ b/lib/hostip6.c
@@ -213,11 +213,6 @@ Curl_addrinfo *Curl_getaddrinfo(struct connectdata *conn,
/* the given address is numerical only, prevent a reverse lookup */
hints.ai_flags = AI_NUMERICHOST;
}
-#ifdef HAVE_GSSAPI
- if(conn->data->set.krb)
- /* if krb is used, we (might) need the canonical host name */
- hints.ai_flags |= AI_CANONNAME;
-#endif
if(port) {
snprintf(sbuf, sizeof(sbuf), "%d", port);
diff --git a/lib/hostthre.c b/lib/hostthre.c
index 1e4845e..e8dfa54 100644
--- a/lib/hostthre.c
+++ b/lib/hostthre.c
@@ -419,8 +419,6 @@ CURLcode Curl_is_resolved(struct connectdata *conn,
if (done) {
getaddrinfo_complete(conn);
- if (td->poll_interval != 0)
- Curl_expire(conn->data, 0);
Curl_destroy_thread_data(&conn->async);
if(!conn->async.dns) {
@@ -431,26 +429,21 @@ CURLcode Curl_is_resolved(struct connectdata *conn,
*entry = conn->async.dns;
} else {
/* poll for name lookup done with exponential backoff up to 250ms */
- int elapsed;
-
- elapsed = Curl_tvdiff(Curl_tvnow(), data->progress.t_startsingle);
- if (elapsed < 0) {
+ int elapsed = Curl_tvdiff(Curl_tvnow(), data->progress.t_startsingle);
+ if (elapsed < 0)
elapsed = 0;
- }
- if (td->poll_interval == 0) {
+ if (td->poll_interval == 0)
/* Start at 1ms poll interval */
td->poll_interval = 1;
- } else if (elapsed >= td->interval_end) {
+ else if (elapsed >= td->interval_end)
/* Back-off exponentially if last interval expired */
td->poll_interval *= 2;
- }
if (td->poll_interval > 250)
td->poll_interval = 250;
td->interval_end = elapsed + td->poll_interval;
-
Curl_expire(conn->data, td->poll_interval);
}
@@ -484,8 +477,6 @@ Curl_addrinfo *Curl_getaddrinfo(struct connectdata *conn,
int port,
int *waitp)
{
- struct hostent *h = NULL;
- struct SessionHandle *data = conn->data;
struct in_addr in;
*waitp = 0; /* default to synchronous response */
@@ -561,9 +552,7 @@ Curl_addrinfo *Curl_getaddrinfo(struct connectdata *conn,
memset(&hints, 0, sizeof(hints));
hints.ai_family = pf;
hints.ai_socktype = conn->socktype;
-#if 0 /* removed nov 8 2005 before 7.15.1 */
- hints.ai_flags = AI_CANONNAME;
-#endif
+
snprintf(sbuf, sizeof(sbuf), "%d", port);
/* fire up a new resolver thread! */
diff --git a/lib/http.c b/lib/http.c
index 7ffc34d..413ef3d 100644
--- a/lib/http.c
+++ b/lib/http.c
@@ -977,12 +977,15 @@ Curl_send_buffer *Curl_add_buffer_init(void)
* Returns CURLcode
*/
CURLcode Curl_add_buffer_send(Curl_send_buffer *in,
- struct connectdata *conn,
- long *bytes_written, /* add the number of sent bytes
- to this counter */
- size_t included_body_bytes, /* how much of the buffer
- contains body data */
- int socketindex)
+ struct connectdata *conn,
+
+ /* add the number of sent bytes to this
+ counter */
+ long *bytes_written,
+
+ /* how much of the buffer contains body data */
+ size_t included_body_bytes,
+ int socketindex)
{
ssize_t amount;
@@ -1069,7 +1072,10 @@ CURLcode Curl_add_buffer_send(Curl_send_buffer *in,
accordingly */
http->writebytecount += bodylen;
- *bytes_written += amount;
+ /* 'amount' can never be a very large value here so typecasting it so a
+ signed 31 bit value should not cause problems even if ssize_t is
+ 64bit */
+ *bytes_written += (long)amount;
if(http) {
if((size_t)amount != size) {
@@ -1283,7 +1289,6 @@ CURLcode Curl_proxyCONNECT(struct connectdata *conn,
struct SessionHandle *data=conn->data;
struct SingleRequest *k = &data->req;
CURLcode result;
- int res;
long timeout =
data->set.timeout?data->set.timeout:PROXY_TIMEOUT; /* in milliseconds */
curl_socket_t tunnelsocket = conn->sock[sockindex];
@@ -1381,7 +1386,7 @@ CURLcode Curl_proxyCONNECT(struct connectdata *conn,
if(CURLE_OK == result) {
/* Now send off the request */
result = Curl_add_buffer_send(req_buffer, conn,
- &data->info.request_size, 0, sockindex);
+ &data->info.request_size, 0, sockindex);
}
req_buffer = NULL;
if(result)
@@ -1467,11 +1472,10 @@ CURLcode Curl_proxyCONNECT(struct connectdata *conn,
break;
default:
DEBUGASSERT(ptr+BUFSIZE-nread <= data->state.buffer+BUFSIZE+1);
- res = Curl_read(conn, tunnelsocket, ptr, BUFSIZE-nread, &gotbytes);
- if(res< 0)
- /* EWOULDBLOCK */
+ result = Curl_read(conn, tunnelsocket, ptr, BUFSIZE-nread, &gotbytes);
+ if(result==CURLE_AGAIN)
continue; /* go loop yourself */
- else if(res)
+ else if(result)
keepon = FALSE;
else if(gotbytes <= 0) {
keepon = FALSE;
@@ -1817,9 +1821,9 @@ static CURLcode https_connecting(struct connectdata *conn, bool *done)
}
#endif
-#ifdef USE_SSLEAY
-/* This function is OpenSSL-specific. It should be made to query the generic
- SSL layer instead. */
+#if defined(USE_SSLEAY) || defined(USE_GNUTLS)
+/* This function is for OpenSSL and GnuTLS only. It should be made to query
+ the generic SSL layer instead. */
static int https_getsock(struct connectdata *conn,
curl_socket_t *socks,
int numsocks)
@@ -1844,7 +1848,7 @@ static int https_getsock(struct connectdata *conn,
return CURLE_OK;
}
#else
-#ifdef USE_GNUTLS
+#ifdef USE_NSS
static int https_getsock(struct connectdata *conn,
curl_socket_t *socks,
int numsocks)
@@ -1855,7 +1859,7 @@ static int https_getsock(struct connectdata *conn,
return GETSOCK_BLANK;
}
#else
-#ifdef USE_NSS
+#ifdef USE_QSOSSL
static int https_getsock(struct connectdata *conn,
curl_socket_t *socks,
int numsocks)
@@ -1866,7 +1870,7 @@ static int https_getsock(struct connectdata *conn,
return GETSOCK_BLANK;
}
#else
-#ifdef USE_QSOSSL
+#ifdef USE_POLARSSL
static int https_getsock(struct connectdata *conn,
curl_socket_t *socks,
int numsocks)
@@ -2224,7 +2228,10 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
if((conn->protocol&PROT_HTTP) &&
data->set.upload &&
(data->set.infilesize == -1)) {
- if (use_http_1_1(data, conn)) {
+ if(conn->bits.authneg)
+ /* don't enable chunked during auth neg */
+ ;
+ else if(use_http_1_1(data, conn)) {
/* HTTP, upload, unknown file size and not HTTP 1.0 */
data->req.upload_chunky = TRUE;
}
@@ -2529,7 +2536,8 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
/* url */
if (paste_ftp_userpwd)
result = Curl_add_bufferf(req_buffer, "ftp://%s:%s@%s",
- conn->user, conn->passwd, ppath + sizeof("ftp://") - 1);
+ conn->user, conn->passwd,
+ ppath + sizeof("ftp://") - 1);
else
result = Curl_add_buffer(req_buffer, ppath, strlen(ppath));
if (result)
@@ -2665,14 +2673,13 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
return result;
result = Curl_add_buffer_send(req_buffer, conn,
- &data->info.request_size, 0, FIRSTSOCKET);
+ &data->info.request_size, 0, FIRSTSOCKET);
if(result)
failf(data, "Failed sending POST request");
else
/* setup variables for the upcoming transfer */
- result = Curl_setup_transfer(conn, FIRSTSOCKET, -1, TRUE,
- &http->readbytecount,
- -1, NULL);
+ Curl_setup_transfer(conn, FIRSTSOCKET, -1, TRUE, &http->readbytecount,
+ -1, NULL);
break;
}
@@ -2735,15 +2742,14 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
/* fire away the whole request to the server */
result = Curl_add_buffer_send(req_buffer, conn,
- &data->info.request_size, 0, FIRSTSOCKET);
+ &data->info.request_size, 0, FIRSTSOCKET);
if(result)
failf(data, "Failed sending POST request");
else
/* setup variables for the upcoming transfer */
- result = Curl_setup_transfer(conn, FIRSTSOCKET, -1, TRUE,
- &http->readbytecount,
- FIRSTSOCKET,
- &http->writebytecount);
+ Curl_setup_transfer(conn, FIRSTSOCKET, -1, TRUE,
+ &http->readbytecount, FIRSTSOCKET,
+ &http->writebytecount);
if(result) {
Curl_formclean(&http->sendit); /* free that whole lot */
@@ -2788,15 +2794,14 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
/* this sends the buffer and frees all the buffer resources */
result = Curl_add_buffer_send(req_buffer, conn,
- &data->info.request_size, 0, FIRSTSOCKET);
+ &data->info.request_size, 0, FIRSTSOCKET);
if(result)
failf(data, "Failed sending PUT request");
else
/* prepare for transfer */
- result = Curl_setup_transfer(conn, FIRSTSOCKET, -1, TRUE,
- &http->readbytecount,
- postsize?FIRSTSOCKET:-1,
- postsize?&http->writebytecount:NULL);
+ Curl_setup_transfer(conn, FIRSTSOCKET, -1, TRUE,
+ &http->readbytecount, postsize?FIRSTSOCKET:-1,
+ postsize?&http->writebytecount:NULL);
if(result)
return result;
break;
@@ -2889,6 +2894,8 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
}
if(result)
return result;
+ /* Make sure the progress information is accurate */
+ Curl_pgrsSetUploadSize(data, postsize);
}
else {
/* A huge POST coming up, do data separate from the request */
@@ -2938,16 +2945,14 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
}
/* issue the request */
result = Curl_add_buffer_send(req_buffer, conn, &data->info.request_size,
- (size_t)included_body, FIRSTSOCKET);
+ (size_t)included_body, FIRSTSOCKET);
if(result)
failf(data, "Failed sending HTTP POST request");
else
- result =
- Curl_setup_transfer(conn, FIRSTSOCKET, -1, TRUE,
- &http->readbytecount,
- http->postdata?FIRSTSOCKET:-1,
- http->postdata?&http->writebytecount:NULL);
+ Curl_setup_transfer(conn, FIRSTSOCKET, -1, TRUE,
+ &http->readbytecount, http->postdata?FIRSTSOCKET:-1,
+ http->postdata?&http->writebytecount:NULL);
break;
default:
@@ -2957,16 +2962,15 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
/* issue the request */
result = Curl_add_buffer_send(req_buffer, conn,
- &data->info.request_size, 0, FIRSTSOCKET);
+ &data->info.request_size, 0, FIRSTSOCKET);
if(result)
failf(data, "Failed sending HTTP request");
else
/* HTTP GET/HEAD download: */
- result = Curl_setup_transfer(conn, FIRSTSOCKET, -1, TRUE,
- &http->readbytecount,
- http->postdata?FIRSTSOCKET:-1,
- http->postdata?&http->writebytecount:NULL);
+ Curl_setup_transfer(conn, FIRSTSOCKET, -1, TRUE, &http->readbytecount,
+ http->postdata?FIRSTSOCKET:-1,
+ http->postdata?&http->writebytecount:NULL);
}
if(result)
return result;
@@ -3289,13 +3293,6 @@ CURLcode Curl_http_readwrite_headers(struct SessionHandle *data,
data->req.deductheadercount =
(100 <= k->httpcode && 199 >= k->httpcode)?data->req.headerbytecount:0;
- if(data->state.resume_from &&
- (data->set.httpreq==HTTPREQ_GET) &&
- (k->httpcode == 416)) {
- /* "Requested Range Not Satisfiable" */
- *stop_reading = TRUE;
- }
-
if(!*stop_reading) {
/* Curl_http_auth_act() checks what authentication methods
* that are available and decides which one (if any) to
@@ -3508,9 +3505,6 @@ CURLcode Curl_http_readwrite_headers(struct SessionHandle *data,
* message-body, and thus is always terminated by the first
* empty line after the header fields. */
/* FALLTHROUGH */
- case 416: /* Requested Range Not Satisfiable, it has the
- Content-Length: set as the "real" document but no
- actual response is sent. */
case 304:
/* (quote from RFC2616, section 10.3.5): The 304 response
* MUST NOT contain a message-body, and thus is always
@@ -3542,10 +3536,7 @@ CURLcode Curl_http_readwrite_headers(struct SessionHandle *data,
/* Curl_convert_from_network calls failf if unsuccessful */
#endif /* CURL_DOES_CONVERSIONS */
- /* Check for Content-Length: header lines to get size. Ignore
- the header completely if we get a 416 response as then we're
- resuming a document that we don't get, and this header contains
- info about the true size of the document we didn't get now. */
+ /* Check for Content-Length: header lines to get size */
if(!k->ignorecl && !data->set.ignorecl &&
checkprefix("Content-Length:", k->p)) {
curl_off_t contentlength = curlx_strtoofft(k->p+15, NULL, 10);
@@ -3643,20 +3634,6 @@ CURLcode Curl_http_readwrite_headers(struct SessionHandle *data,
/* init our chunky engine */
Curl_httpchunk_init(conn);
}
-
- else if(checkprefix("Trailer:", k->p) ||
- checkprefix("Trailers:", k->p)) {
- /*
- * This test helps Curl_httpchunk_read() to determine to look
- * for well formed trailers after the zero chunksize record. In
- * this case a CRLF is required after the zero chunksize record
- * when no trailers are sent, or after the last trailer record.
- *
- * It seems both Trailer: and Trailers: occur in the wild.
- */
- k->trailerhdrpresent = TRUE;
- }
-
else if(checkprefix("Content-Encoding:", k->p) &&
data->set.str[STRING_ENCODING]) {
/*
diff --git a/lib/http.h b/lib/http.h
index b7c1abf..3007c31 100644
--- a/lib/http.h
+++ b/lib/http.h
@@ -56,11 +56,10 @@ Curl_send_buffer *Curl_add_buffer_init(void);
CURLcode Curl_add_bufferf(Curl_send_buffer *in, const char *fmt, ...);
CURLcode Curl_add_buffer(Curl_send_buffer *in, const void *inptr, size_t size);
CURLcode Curl_add_buffer_send(Curl_send_buffer *in,
- struct connectdata *conn,
- long *bytes_written,
- size_t included_body_bytes,
- int socketindex);
-
+ struct connectdata *conn,
+ long *bytes_written,
+ size_t included_body_bytes,
+ int socketindex);
CURLcode Curl_add_timecondition(struct SessionHandle *data,
Curl_send_buffer *buf);
diff --git a/lib/http_chunks.c b/lib/http_chunks.c
index a66f872..0d41979 100644
--- a/lib/http_chunks.c
+++ b/lib/http_chunks.c
@@ -184,22 +184,8 @@ CHUNKcode Curl_httpchunk_read(struct connectdata *conn,
if(*datap == 0x0a) {
/* we're now expecting data to come, unless size was zero! */
if(0 == ch->datasize) {
- if(k->trailerhdrpresent!=TRUE) {
- /* No Trailer: header found - revert to original Curl processing */
- ch->state = CHUNK_STOPCR;
-
- /* We need to increment the datap here since we bypass the
- increment below with the immediate break */
- length--;
- datap++;
-
- /* This is the final byte, continue to read the final CRLF */
- break;
- }
- else {
- ch->state = CHUNK_TRAILER; /* attempt to read trailers */
- conn->trlPos=0;
- }
+ ch->state = CHUNK_TRAILER; /* now check for trailers */
+ conn->trlPos=0;
}
else {
ch->state = CHUNK_DATA;
@@ -280,9 +266,9 @@ CHUNKcode Curl_httpchunk_read(struct connectdata *conn,
datap++;
length--;
}
- else {
+ else
return CHUNKE_BAD_CHUNK;
- }
+
break;
case CHUNK_POSTLF:
@@ -295,80 +281,32 @@ CHUNKcode Curl_httpchunk_read(struct connectdata *conn,
datap++;
length--;
}
- else {
+ else
return CHUNKE_BAD_CHUNK;
- }
break;
case CHUNK_TRAILER:
- /* conn->trailer is assumed to be freed in url.c on a
- connection basis */
- if(conn->trlPos >= conn->trlMax) {
- /* in this logic we always allocate one byte more than trlMax
- contains, just because CHUNK_TRAILER_POSTCR will append two bytes
- so we need to make sure we have room for an extra byte */
- char *ptr;
- if(conn->trlMax) {
- conn->trlMax *= 2;
- ptr = realloc(conn->trailer, conn->trlMax + 1);
- }
- else {
- conn->trlMax=128;
- ptr = malloc(conn->trlMax + 1);
- }
- if(!ptr)
- return CHUNKE_OUT_OF_MEMORY;
- conn->trailer = ptr;
- }
- conn->trailer[conn->trlPos++]=*datap;
-
- if(*datap == 0x0d)
- ch->state = CHUNK_TRAILER_CR;
- else {
- datap++;
- length--;
- }
- break;
-
- case CHUNK_TRAILER_CR:
if(*datap == 0x0d) {
- ch->state = CHUNK_TRAILER_POSTCR;
- datap++;
- length--;
- }
- else
- return CHUNKE_BAD_CHUNK;
- break;
-
- case CHUNK_TRAILER_POSTCR:
- if(*datap == 0x0a) {
- conn->trailer[conn->trlPos++]=0x0a;
- conn->trailer[conn->trlPos]=0;
- if(conn->trlPos==2) {
- ch->state = CHUNK_STOP;
- length--;
+ /* this is the end of a trailer, but if the trailer was zero bytes
+ there was no trailer and we move on */
- /*
- * Note that this case skips over the final STOP states since we've
- * already read the final CRLF and need to return
- */
+ if(conn->trlPos) {
+ /* we allocate trailer with 3 bytes extra room to fit this */
+ conn->trailer[conn->trlPos++]=0x0d;
+ conn->trailer[conn->trlPos++]=0x0a;
+ conn->trailer[conn->trlPos]=0;
- ch->dataleft = length;
-
- return CHUNKE_STOP; /* return stop */
- }
- else {
#ifdef CURL_DOES_CONVERSIONS
/* Convert to host encoding before calling Curl_client_write */
result = Curl_convert_from_network(conn->data,
conn->trailer,
conn->trlPos);
- if(result != CURLE_OK) {
+ if(result != CURLE_OK)
/* Curl_convert_from_network calls failf if unsuccessful */
/* Treat it as a bad chunk */
- return(CHUNKE_BAD_CHUNK);
- }
+ return CHUNKE_BAD_CHUNK;
+
#endif /* CURL_DOES_CONVERSIONS */
if(!data->set.http_te_skip) {
result = Curl_client_write(conn, CLIENTWRITE_HEADER,
@@ -376,9 +314,44 @@ CHUNKcode Curl_httpchunk_read(struct connectdata *conn,
if(result)
return CHUNKE_WRITE_ERROR;
}
+ conn->trlPos=0;
+ ch->state = CHUNK_TRAILER_CR;
}
- ch->state = CHUNK_TRAILER;
- conn->trlPos=0;
+ else {
+ /* no trailer, we're on the final CRLF pair */
+ ch->state = CHUNK_TRAILER_POSTCR;
+ break; /* don't advance the pointer */
+ }
+ }
+ else {
+ /* conn->trailer is assumed to be freed in url.c on a
+ connection basis */
+ if(conn->trlPos >= conn->trlMax) {
+ /* we always allocate three extra bytes, just because when the full
+ header has been received we append CRLF\0 */
+ char *ptr;
+ if(conn->trlMax) {
+ conn->trlMax *= 2;
+ ptr = realloc(conn->trailer, conn->trlMax + 3);
+ }
+ else {
+ conn->trlMax=128;
+ ptr = malloc(conn->trlMax + 3);
+ }
+ if(!ptr)
+ return CHUNKE_OUT_OF_MEMORY;
+ conn->trailer = ptr;
+ }
+ fprintf(stderr, "MOO: %c\n", *datap);
+ conn->trailer[conn->trlPos++]=*datap;
+ }
+ datap++;
+ length--;
+ break;
+
+ case CHUNK_TRAILER_CR:
+ if(*datap == 0x0a) {
+ ch->state = CHUNK_TRAILER_POSTCR;
datap++;
length--;
}
@@ -386,6 +359,20 @@ CHUNKcode Curl_httpchunk_read(struct connectdata *conn,
return CHUNKE_BAD_CHUNK;
break;
+ case CHUNK_TRAILER_POSTCR:
+ /* We enter this state when a CR should arrive so we expect to
+ have to first pass a CR before we wait for LF */
+ if(*datap != 0x0d) {
+ /* not a CR then it must be another header in the trailer */
+ ch->state = CHUNK_TRAILER;
+ break;
+ }
+ datap++;
+ length--;
+ /* now wait for the final LF */
+ ch->state = CHUNK_STOP;
+ break;
+
case CHUNK_STOPCR:
/* Read the final CRLF that ends all chunk bodies */
@@ -394,9 +381,8 @@ CHUNKcode Curl_httpchunk_read(struct connectdata *conn,
datap++;
length--;
}
- else {
+ else
return CHUNKE_BAD_CHUNK;
- }
break;
case CHUNK_STOP:
@@ -409,9 +395,8 @@ CHUNKcode Curl_httpchunk_read(struct connectdata *conn,
ch->dataleft = length;
return CHUNKE_STOP; /* return stop */
}
- else {
+ else
return CHUNKE_BAD_CHUNK;
- }
default:
return CHUNKE_STATE_ERROR;
diff --git a/lib/http_digest.c b/lib/http_digest.c
index ff3871c..be40fc7 100644
--- a/lib/http_digest.c
+++ b/lib/http_digest.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -129,7 +129,6 @@ CURLdigest Curl_input_digest(struct connectdata *conn,
const char *header) /* rest of the *-authenticate:
header */
{
- bool more = TRUE;
char *token = NULL;
char *tmp = NULL;
bool foundAuth = FALSE;
@@ -159,7 +158,7 @@ CURLdigest Curl_input_digest(struct connectdata *conn,
/* clear off any former leftovers and init to defaults */
Curl_digest_cleanup_one(d);
- while(more) {
+ while(1) {
char value[MAX_VALUE_LENGTH];
char content[MAX_CONTENT_LENGTH];
diff --git a/lib/http_negotiate.c b/lib/http_negotiate.c
index 956f734..80b0b50 100644
--- a/lib/http_negotiate.c
+++ b/lib/http_negotiate.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -277,6 +277,7 @@ CURLcode Curl_output_negotiate(struct connectdata *conn, bool proxy)
&conn->data->state.negotiate;
char *encoded = NULL;
size_t len;
+ char *userp;
#ifdef HAVE_SPNEGO /* Handle SPNEGO */
if(checkprefix("Negotiate", neg_ctx->protocol)) {
@@ -305,9 +306,15 @@ CURLcode Curl_output_negotiate(struct connectdata *conn, bool proxy)
infof(conn->data, "Make SPNEGO Initial Token failed\n");
}
else {
- free(neg_ctx->output_token.value);
+ free(responseToken);
responseToken = NULL;
+ free(neg_ctx->output_token.value);
neg_ctx->output_token.value = malloc(spnegoTokenLength);
+ if(neg_ctx->output_token.value == NULL) {
+ free(spnegoToken);
+ spnegoToken = NULL;
+ return CURLE_OUT_OF_MEMORY;
+ }
memcpy(neg_ctx->output_token.value, spnegoToken,spnegoTokenLength);
neg_ctx->output_token.length = spnegoTokenLength;
free(spnegoToken);
@@ -324,12 +331,16 @@ CURLcode Curl_output_negotiate(struct connectdata *conn, bool proxy)
if(len == 0)
return CURLE_OUT_OF_MEMORY;
- conn->allocptr.userpwd =
- aprintf("%sAuthorization: %s %s\r\n", proxy ? "Proxy-" : "",
- neg_ctx->protocol, encoded);
+ userp = aprintf("%sAuthorization: %s %s\r\n", proxy ? "Proxy-" : "",
+ neg_ctx->protocol, encoded);
+
+ if(proxy)
+ conn->allocptr.proxyuserpwd = userp;
+ else
+ conn->allocptr.userpwd = userp;
free(encoded);
Curl_cleanup_negotiate (conn->data);
- return (conn->allocptr.userpwd == NULL) ? CURLE_OUT_OF_MEMORY : CURLE_OK;
+ return (userp == NULL) ? CURLE_OUT_OF_MEMORY : CURLE_OK;
}
static void cleanup(struct negotiatedata *neg_ctx)
diff --git a/lib/http_ntlm.c b/lib/http_ntlm.c
index 36e538e..f5b696a 100644
--- a/lib/http_ntlm.c
+++ b/lib/http_ntlm.c
@@ -58,6 +58,7 @@
#include "curl_base64.h"
#include "http_ntlm.h"
#include "url.h"
+#include "curl_gethostname.h"
#include "curl_memory.h"
#define _MPRINTF_REPLACE /* use our functions only */
@@ -116,6 +117,15 @@
#define MD5_DIGEST_LENGTH 16
#define MD4_DIGEST_LENGTH 16
+#elif defined(USE_NSS)
+
+#include "curl_md4.h"
+#include "nssg.h"
+#include <nss.h>
+#include <pk11pub.h>
+#include <hasht.h>
+#define MD5_DIGEST_LENGTH MD5_LENGTH
+
#elif defined(USE_WINDOWS_SSPI)
#include "curl_sspi.h"
@@ -250,6 +260,11 @@ CURLntlm Curl_input_ntlm(struct connectdata *conn,
static const char type2_marker[] = { 0x02, 0x00, 0x00, 0x00 };
#endif
+#ifdef USE_NSS
+ if(CURLE_OK != Curl_nss_force_init(conn->data))
+ return CURLNTLM_BAD;
+#endif
+
ntlm = proxy?&conn->proxyntlm:&conn->ntlm;
/* skip initial whitespaces */
@@ -351,16 +366,14 @@ static void setup_des_key(const unsigned char *key_56,
DES_set_odd_parity(&key);
DES_set_key(&key, ks);
}
-#elif defined(USE_GNUTLS)
+
+#else /* defined(USE_SSLEAY) */
/*
- * Turns a 56 bit key into the 64 bit, odd parity key and sets the key.
+ * Turns a 56 bit key into the 64 bit, odd parity key. Used by GnuTLS and NSS.
*/
-static void setup_des_key(const unsigned char *key_56,
- gcry_cipher_hd_t *des)
+static void extend_key_56_to_64(const unsigned char *key_56, char *key)
{
- char key[8];
-
key[0] = key_56[0];
key[1] = (unsigned char)(((key_56[0] << 7) & 0xFF) | (key_56[1] >> 1));
key[2] = (unsigned char)(((key_56[1] << 6) & 0xFF) | (key_56[2] >> 2));
@@ -369,10 +382,84 @@ static void setup_des_key(const unsigned char *key_56,
key[5] = (unsigned char)(((key_56[4] << 3) & 0xFF) | (key_56[5] >> 5));
key[6] = (unsigned char)(((key_56[5] << 2) & 0xFF) | (key_56[6] >> 6));
key[7] = (unsigned char) ((key_56[6] << 1) & 0xFF);
+}
+
+#if defined(USE_GNUTLS)
+/*
+ * Turns a 56 bit key into the 64 bit, odd parity key and sets the key.
+ */
+static void setup_des_key(const unsigned char *key_56,
+ gcry_cipher_hd_t *des)
+{
+ char key[8];
+ extend_key_56_to_64(key_56, key);
gcry_cipher_setkey(*des, key, 8);
}
-#endif
+
+#elif defined(USE_NSS)
+
+/*
+ * Expands a 56 bit key KEY_56 to 64 bit and encrypts 64 bit of data, using
+ * the expanded key. The caller is responsible for giving 64 bit of valid
+ * data is IN and (at least) 64 bit large buffer as OUT.
+ */
+static bool encrypt_des(const unsigned char *in, unsigned char *out,
+ const unsigned char *key_56)
+{
+ const CK_MECHANISM_TYPE mech = CKM_DES_ECB; /* DES cipher in ECB mode */
+ PK11SlotInfo *slot = NULL;
+ char key[8]; /* expanded 64 bit key */
+ SECItem key_item;
+ PK11SymKey *symkey = NULL;
+ SECItem *param = NULL;
+ PK11Context *ctx = NULL;
+ int out_len; /* not used, required by NSS */
+ bool rv = FALSE;
+
+ /* use internal slot for DES encryption (requires NSS to be initialized) */
+ slot = PK11_GetInternalKeySlot();
+ if(!slot)
+ return FALSE;
+
+ /* expand the 56 bit key to 64 bit and wrap by NSS */
+ extend_key_56_to_64(key_56, key);
+ key_item.data = (unsigned char *)key;
+ key_item.len = /* hard-wired */ 8;
+ symkey = PK11_ImportSymKey(slot, mech, PK11_OriginUnwrap, CKA_ENCRYPT,
+ &key_item, NULL);
+ if(!symkey)
+ goto fail;
+
+ /* create DES encryption context */
+ param = PK11_ParamFromIV(mech, /* no IV in ECB mode */ NULL);
+ if(!param)
+ goto fail;
+ ctx = PK11_CreateContextBySymKey(mech, CKA_ENCRYPT, symkey, param);
+ if(!ctx)
+ goto fail;
+
+ /* perform the encryption */
+ if(SECSuccess == PK11_CipherOp(ctx, out, &out_len, /* outbuflen */ 8,
+ (unsigned char *)in, /* inbuflen */ 8)
+ && SECSuccess == PK11_Finalize(ctx))
+ rv = /* all OK */ TRUE;
+
+fail:
+ /* cleanup */
+ if(ctx)
+ PK11_DestroyContext(ctx, PR_TRUE);
+ if(symkey)
+ PK11_FreeSymKey(symkey);
+ if(param)
+ SECITEM_FreeItem(param, PR_TRUE);
+ PK11_FreeSlot(slot);
+ return rv;
+}
+
+#endif /* defined(USE_NSS) */
+
+#endif /* defined(USE_SSLEAY) */
/*
* takes a 21 byte array and treats it as 3 56-bit DES keys. The
@@ -414,6 +501,10 @@ static void lm_resp(const unsigned char *keys,
setup_des_key(keys+14, &des);
gcry_cipher_encrypt(des, results+16, 8, plaintext, 8);
gcry_cipher_close(des);
+#elif defined(USE_NSS)
+ encrypt_des(plaintext, results, keys);
+ encrypt_des(plaintext, results+8, keys+7);
+ encrypt_des(plaintext, results+16, keys+14);
#endif
}
@@ -470,11 +561,14 @@ static void mk_lm_hash(struct SessionHandle *data,
setup_des_key(pw+7, &des);
gcry_cipher_encrypt(des, lmbuffer+8, 8, magic, 8);
gcry_cipher_close(des);
+#elif defined(USE_NSS)
+ encrypt_des(magic, lmbuffer, pw);
+ encrypt_des(magic, lmbuffer+8, pw+7);
#endif
memset(lmbuffer + 16, 0, 21 - 16);
}
- }
+}
#if USE_NTRESPONSES
static void ascii_to_unicode_le(unsigned char *dest, const char *src,
@@ -525,6 +619,8 @@ static CURLcode mk_nt_hash(struct SessionHandle *data,
gcry_md_write(MD4pw, pw, 2*len);
memcpy (ntbuffer, gcry_md_read (MD4pw, 0), MD4_DIGEST_LENGTH);
gcry_md_close(MD4pw);
+#elif defined(USE_NSS)
+ Curl_md4it(ntbuffer, pw, 2*len);
#endif
memset(ntbuffer + 16, 0, 21 - 16);
@@ -599,6 +695,11 @@ CURLcode Curl_output_ntlm(struct connectdata *conn,
DEBUGASSERT(conn);
DEBUGASSERT(conn->data);
+#ifdef USE_NSS
+ if(CURLE_OK != Curl_nss_force_init(conn->data))
+ return CURLE_OUT_OF_MEMORY;
+#endif
+
if(proxy) {
allocuserpwd = &conn->allocptr.proxyuserpwd;
userp = conn->proxyuser;
@@ -894,7 +995,7 @@ CURLcode Curl_output_ntlm(struct connectdata *conn,
user = userp;
userlen = strlen(user);
- if(gethostname(host, HOSTNAME_MAX)) {
+ if(Curl_gethostname(host, HOSTNAME_MAX)) {
infof(conn->data, "gethostname() failed, continuing without!");
hostlen = 0;
}
@@ -926,6 +1027,11 @@ CURLcode Curl_output_ntlm(struct connectdata *conn,
gcry_md_hd_t MD5pw;
Curl_gtls_seed(conn->data); /* Initiate the seed if not already done */
gcry_randomize(entropy, 8, GCRY_STRONG_RANDOM);
+#elif defined(USE_NSS)
+ PK11Context *MD5pw;
+ unsigned int outlen;
+ Curl_nss_seed(conn->data); /* Initiate the seed if not already done */
+ PK11_GenerateRandom(entropy, 8);
#endif
/* 8 bytes random data as challenge in lmresp */
@@ -946,6 +1052,11 @@ CURLcode Curl_output_ntlm(struct connectdata *conn,
gcry_md_write(MD5pw, tmp, MD5_DIGEST_LENGTH);
memcpy(md5sum, gcry_md_read (MD5pw, 0), MD5_DIGEST_LENGTH);
gcry_md_close(MD5pw);
+#elif defined(USE_NSS)
+ MD5pw = PK11_CreateDigestContext(SEC_OID_MD5);
+ PK11_DigestOp(MD5pw, tmp, 16);
+ PK11_DigestFinal(MD5pw, md5sum, &outlen, MD5_DIGEST_LENGTH);
+ PK11_DestroyContext(MD5pw, PR_TRUE);
#endif
/* We shall only use the first 8 bytes of md5sum,
diff --git a/lib/imap.c b/lib/imap.c
index f7b895d..cdadd17 100644
--- a/lib/imap.c
+++ b/lib/imap.c
@@ -436,12 +436,11 @@ static CURLcode imap_state_fetch_resp(struct connectdata *conn,
if(!filesize)
/* the entire data is already transfered! */
- result=Curl_setup_transfer(conn, -1, -1, FALSE, NULL, -1, NULL);
+ Curl_setup_transfer(conn, -1, -1, FALSE, NULL, -1, NULL);
else
/* IMAP download */
- result=Curl_setup_transfer(conn, FIRSTSOCKET, filesize, FALSE,
- imap->bytecountp,
- -1, NULL); /* no upload here */
+ Curl_setup_transfer(conn, FIRSTSOCKET, filesize, FALSE,
+ imap->bytecountp, -1, NULL); /* no upload here */
data->req.maxdownload = filesize;
}
@@ -924,15 +923,14 @@ static CURLcode imap_parse_url_path(struct connectdata *conn)
static CURLcode imap_dophase_done(struct connectdata *conn,
bool connected)
{
- CURLcode result = CURLE_OK;
struct FTP *imap = conn->data->state.proto.imap;
(void)connected;
if(imap->transfer != FTPTRANSFER_BODY)
/* no data to transfer */
- result=Curl_setup_transfer(conn, -1, -1, FALSE, NULL, -1, NULL);
+ Curl_setup_transfer(conn, -1, -1, FALSE, NULL, -1, NULL);
- return result;
+ return CURLE_OK;
}
/* called from multi.c while DOing */
diff --git a/lib/inet_pton.c b/lib/inet_pton.c
index 9189ce6..db4f393 100644
--- a/lib/inet_pton.c
+++ b/lib/inet_pton.c
@@ -159,7 +159,7 @@ inet_pton6(const char *src, unsigned char *dst)
unsigned char tmp[IN6ADDRSZ], *tp, *endp, *colonp;
const char *xdigits, *curtok;
int ch, saw_xdigit;
- unsigned int val;
+ size_t val;
memset((tp = tmp), 0, IN6ADDRSZ);
endp = tp + IN6ADDRSZ;
@@ -218,8 +218,8 @@ inet_pton6(const char *src, unsigned char *dst)
* Since some memmove()'s erroneously fail to handle
* overlapping regions, we'll do the shift by hand.
*/
- const long n = tp - colonp;
- long i;
+ const size_t n = tp - colonp;
+ size_t i;
if(tp == endp)
return (0);
diff --git a/lib/krb4.h b/lib/krb4.h
index 81998b5..5da1dc6 100644
--- a/lib/krb4.h
+++ b/lib/krb4.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2006, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -47,24 +47,20 @@ extern struct Curl_sec_client_mech Curl_krb5_client_mech;
#endif
CURLcode Curl_krb_kauth(struct connectdata *conn);
-int Curl_sec_fflush_fd(struct connectdata *conn, int fd);
int Curl_sec_fprintf (struct connectdata *, FILE *, const char *, ...);
int Curl_sec_getc (struct connectdata *conn, FILE *);
int Curl_sec_putc (struct connectdata *conn, int, FILE *);
-int Curl_sec_read (struct connectdata *conn, int, void *, int);
int Curl_sec_read_msg (struct connectdata *conn, char *, int);
int Curl_sec_vfprintf(struct connectdata *, FILE *, const char *, va_list);
int Curl_sec_fprintf2(struct connectdata *conn, FILE *f, const char *fmt, ...);
int Curl_sec_vfprintf2(struct connectdata *conn, FILE *, const char *, va_list);
-ssize_t Curl_sec_send(struct connectdata *conn, int, const char *, int);
-int Curl_sec_write(struct connectdata *conn, int, const char *, int);
void Curl_sec_end (struct connectdata *);
-int Curl_sec_login (struct connectdata *);
+CURLcode Curl_sec_login (struct connectdata *);
void Curl_sec_prot (int, char **);
int Curl_sec_request_prot (struct connectdata *conn, const char *level);
-void Curl_sec_set_protection_level(struct connectdata *conn);
+int Curl_sec_set_protection_level(struct connectdata *conn);
void Curl_sec_status (void);
enum protection_level Curl_set_command_prot(struct connectdata *,
diff --git a/lib/krb5.c b/lib/krb5.c
index 36afc3c..2530395 100644
--- a/lib/krb5.c
+++ b/lib/krb5.c
@@ -1,6 +1,6 @@
/* GSSAPI/krb5 support for FTP - loosely based on old krb4.c
*
- * Copyright (c) 1995, 1996, 1997, 1998, 1999 Kungliga Tekniska Högskolan
+ * Copyright (c) 1995, 1996, 1997, 1998, 1999, 2010 Kungliga Tekniska Högskolan
* (Royal Institute of Technology, Stockholm, Sweden).
* Copyright (c) 2004 - 2009 Daniel Stenberg
* All rights reserved.
@@ -76,9 +76,18 @@
#define REMOTE_ADDR conn->ip_addr->ai_addr
static int
+krb5_init(void *app_data)
+{
+ gss_ctx_id_t *context = app_data;
+ /* Make sure our context is initialized for krb5_end. */
+ *context = GSS_C_NO_CONTEXT;
+ return 0;
+}
+
+static int
krb5_check_prot(void *app_data, int level)
{
- app_data = NULL; /* prevent compiler warning */
+ (void)app_data; /* unused */
if(level == prot_confidential)
return -1;
return 0;
@@ -161,15 +170,15 @@ krb5_encode(void *app_data, const void *from, int length, int level, void **to,
static int
krb5_auth(void *app_data, struct connectdata *conn)
{
- int ret;
+ int ret = AUTH_OK;
char *p;
- const char *host = conn->dns_entry->addr->ai_canonname;
+ const char *host = conn->host.name;
ssize_t nread;
curl_socklen_t l = sizeof(conn->local_addr);
struct SessionHandle *data = conn->data;
CURLcode result;
const char *service = "ftp", *srv_host = "host";
- gss_buffer_desc gssbuf, _gssresp, *gssresp;
+ gss_buffer_desc input_buffer, output_buffer, _gssresp, *gssresp;
OM_uint32 maj, min;
gss_name_t gssname;
gss_ctx_id_t *context = app_data;
@@ -205,28 +214,31 @@ krb5_auth(void *app_data, struct connectdata *conn)
return -1;
}
- gssbuf.value = data->state.buffer;
- gssbuf.length = snprintf(gssbuf.value, BUFSIZE, "%s@%s", service, host);
- maj = gss_import_name(&min, &gssbuf, GSS_C_NT_HOSTBASED_SERVICE, &gssname);
+ input_buffer.value = data->state.buffer;
+ input_buffer.length = snprintf(input_buffer.value, BUFSIZE, "%s@%s",
+ service, host);
+ maj = gss_import_name(&min, &input_buffer, GSS_C_NT_HOSTBASED_SERVICE,
+ &gssname);
if(maj != GSS_S_COMPLETE) {
gss_release_name(&min, &gssname);
if(service == srv_host) {
- Curl_failf(data, "Error importing service name %s", gssbuf.value);
+ Curl_failf(data, "Error importing service name %s", input_buffer.value);
return AUTH_ERROR;
}
service = srv_host;
continue;
}
- {
- gss_OID t;
- gss_display_name(&min, gssname, &gssbuf, &t);
- Curl_infof(data, "Trying against %s\n", gssbuf.value);
- gss_release_buffer(&min, &gssbuf);
- }
+ /* We pass NULL as |output_name_type| to avoid a leak. */
+ gss_display_name(&min, gssname, &output_buffer, NULL);
+ Curl_infof(data, "Trying against %s\n", output_buffer.value);
gssresp = GSS_C_NO_BUFFER;
*context = GSS_C_NO_CONTEXT;
do {
+ /* Release the buffer at each iteration to avoid leaking: the first time
+ we are releasing the memory from gss_display_name. The last item is
+ taken care by a final gss_release_buffer. */
+ gss_release_buffer(&min, &output_buffer);
ret = AUTH_OK;
maj = gss_init_sec_context(&min,
GSS_C_NO_CREDENTIAL,
@@ -238,7 +250,7 @@ krb5_auth(void *app_data, struct connectdata *conn)
&chan,
gssresp,
NULL,
- &gssbuf,
+ &output_buffer,
NULL,
NULL);
@@ -253,9 +265,9 @@ krb5_auth(void *app_data, struct connectdata *conn)
break;
}
- if(gssbuf.length != 0) {
- if(Curl_base64_encode(data, (char *)gssbuf.value, gssbuf.length, &p)
- < 1) {
+ if(output_buffer.length != 0) {
+ if(Curl_base64_encode(data, (char *)output_buffer.value,
+ output_buffer.length, &p) < 1) {
Curl_infof(data, "Out of memory base64-encoding");
ret = AUTH_CONTINUE;
break;
@@ -298,6 +310,7 @@ krb5_auth(void *app_data, struct connectdata *conn)
} while(maj == GSS_S_CONTINUE_NEEDED);
gss_release_name(&min, &gssname);
+ gss_release_buffer(&min, &output_buffer);
if(gssresp)
free(_gssresp.value);
@@ -307,14 +320,25 @@ krb5_auth(void *app_data, struct connectdata *conn)
service = srv_host;
}
+ return ret;
+}
+
+static void krb5_end(void *app_data)
+{
+ OM_uint32 maj, min;
+ gss_ctx_id_t *context = app_data;
+ if (*context != GSS_C_NO_CONTEXT) {
+ maj = gss_delete_sec_context(&min, context, GSS_C_NO_BUFFER);
+ DEBUGASSERT(maj == GSS_S_COMPLETE);
+ }
}
struct Curl_sec_client_mech Curl_krb5_client_mech = {
"GSSAPI",
sizeof(gss_ctx_id_t),
- NULL, /* init */
+ krb5_init,
krb5_auth,
- NULL, /* end */
+ krb5_end,
krb5_check_prot,
krb5_overhead,
krb5_encode,
diff --git a/lib/ldap.c b/lib/ldap.c
index 07ec5b0..d6556c9 100644
--- a/lib/ldap.c
+++ b/lib/ldap.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -22,7 +22,19 @@
#include "setup.h"
-#ifndef CURL_DISABLE_LDAP
+#if !defined(CURL_DISABLE_LDAP) && !defined(USE_OPENLDAP)
+
+/*
+ * Notice that USE_OPENLDAP is only a source code selection switch. When
+ * libcurl is built with USE_OPENLDAP defined the libcurl source code that
+ * gets compiled is the code from openldap.c, otherwise the code that gets
+ * compiled is the code from ldap.c.
+ *
+ * When USE_OPENLDAP is defined a recent version of the OpenLDAP library
+ * might be required for compilation and runtime. In order to use ancient
+ * OpenLDAP library versions, USE_OPENLDAP shall not be defined.
+ */
+
/* -- WIN32 approved -- */
#include <stdio.h>
#include <string.h>
@@ -31,15 +43,7 @@
#include <ctype.h>
#include <errno.h>
-#ifdef CURL_LDAP_HYBRID /* If W$ definitions are needed. */
-# include <windows.h>
- /* Remember we are NOT in a W$ compiler! */
-# undef WIN32
-# undef _WIN32
-# undef __WIN32__
-#endif
-
-#ifdef CURL_LDAP_WIN /* Use W$ LDAP implementation. */
+#ifdef CURL_LDAP_WIN /* Use Windows LDAP implementation. */
# include <winldap.h>
# ifndef LDAP_VENDOR_NAME
# error Your Platform SDK is NOT sufficient for LDAP support! Update your Platform SDK, or disable LDAP support!
@@ -47,14 +51,14 @@
# include <winber.h>
# endif
#else
-#define LDAP_DEPRECATED 1 /* Be sure ldap_init() is defined. */
-#ifdef HAVE_LBER_H
-# include <lber.h>
-#endif
+# define LDAP_DEPRECATED 1 /* Be sure ldap_init() is defined. */
+# ifdef HAVE_LBER_H
+# include <lber.h>
+# endif
# include <ldap.h>
-#if (defined(HAVE_LDAP_SSL) && defined(HAVE_LDAP_SSL_H))
-# include <ldap_ssl.h>
-#endif /* HAVE_LDAP_SSL && HAVE_LDAP_SSL_H */
+# if (defined(HAVE_LDAP_SSL) && defined(HAVE_LDAP_SSL_H))
+# include <ldap_ssl.h>
+# endif /* HAVE_LDAP_SSL && HAVE_LDAP_SSL_H */
#endif
#ifdef HAVE_UNISTD_H
@@ -715,4 +719,4 @@ static void _ldap_free_urldesc (LDAPURLDesc *ludp)
free (ludp);
}
#endif /* !HAVE_LDAP_URL_PARSE */
-#endif /* CURL_DISABLE_LDAP */
+#endif /* !CURL_DISABLE_LDAP && !USE_OPENLDAP */
diff --git a/lib/libcurl.imp b/lib/libcurl.imp
new file mode 100644
index 0000000..74943af
--- /dev/null
+++ b/lib/libcurl.imp
@@ -0,0 +1,51 @@
+#
+# Definition file for the NLM version of the LIBCURL library from curl
+#
+# (LIBCURL)
+ curl_easy_cleanup,
+ curl_easy_escape,
+ curl_easy_unescape,
+ curl_easy_getinfo,
+ curl_easy_init,
+ curl_easy_pause,
+ curl_easy_perform,
+ curl_easy_setopt,
+ curl_escape,
+ curl_unescape,
+ curl_formfree,
+ curl_getdate,
+ curl_getenv,
+ curl_global_cleanup,
+ curl_global_init,
+ curl_slist_append,
+ curl_slist_free_all,
+ curl_version,
+ curl_maprintf,
+ curl_mfprintf,
+ curl_mprintf,
+ curl_msprintf,
+ curl_msnprintf,
+ curl_mvfprintf,
+ curl_mvsnprintf,
+ curl_strequal,
+ curl_strnequal,
+ curl_easy_duphandle,
+ curl_formadd,
+ curl_multi_init,
+ curl_multi_add_handle,
+ curl_multi_remove_handle,
+ curl_multi_fdset,
+ curl_multi_perform,
+ curl_multi_cleanup,
+ curl_multi_info_read,
+ curl_free,
+ curl_version_info,
+ curl_share_init,
+ curl_share_setopt,
+ curl_share_cleanup,
+ curl_global_init_mem,
+ curl_easy_strerror,
+ curl_multi_strerror,
+ curl_share_strerror,
+ curl_easy_reset
+
diff --git a/lib/libcurl.plist b/lib/libcurl.plist
new file mode 100644
index 0000000..0ea606f
--- /dev/null
+++ b/lib/libcurl.plist
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist SYSTEM "file://localhost/System/Library/DTDs/PropertyList.dtd">
+<plist version="0.9">
+<dict>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+
+ <key>CFBundleDevelopmentRegion</key>
+ <string>English</string>
+
+ <key>CFBundleExecutable</key>
+ <string>curl</string>
+
+ <key>CFBundleIdentifier</key>
+ <string>com.libcurl.libcurl</string>
+
+ <key>CFBundleVersion</key>
+ <string>7.21.2</string>
+
+ <key>CFBundleName</key>
+ <string>libcurl</string>
+
+ <key>CFBundlePackageType</key>
+ <string>FMWK</string>
+
+ <key>CFBundleSignature</key>
+ <string>????</string>
+
+ <key>CFBundleShortVersionString</key>
+ <string>libcurl 7.21.2</string>
+
+ <key>CFBundleGetInfoString</key>
+ <string>libcurl.plist 7.21.2</string>
+</dict>
+</plist> \ No newline at end of file
diff --git a/lib/libcurl.rc b/lib/libcurl.rc
new file mode 100644
index 0000000..47b944a
--- /dev/null
+++ b/lib/libcurl.rc
@@ -0,0 +1,63 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at http://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ***************************************************************************/
+#include <winver.h>
+#include "../include/curl/curlver.h"
+
+LANGUAGE 0x09,0x01
+
+#define RC_VERSION LIBCURL_VERSION_MAJOR, LIBCURL_VERSION_MINOR, LIBCURL_VERSION_PATCH, 0
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION RC_VERSION
+ PRODUCTVERSION RC_VERSION
+ FILEFLAGSMASK 0x3fL
+#if defined(DEBUGBUILD) || defined(_DEBUG)
+ FILEFLAGS 1
+#else
+ FILEFLAGS 0
+#endif
+ FILEOS VOS__WINDOWS32
+ FILETYPE VFT_DLL
+ FILESUBTYPE 0x0L
+
+BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "040904b0"
+ BEGIN
+ VALUE "CompanyName", "The cURL library, http://curl.haxx.se/\0"
+ VALUE "FileDescription", "libcurl Shared Library\0"
+ VALUE "FileVersion", LIBCURL_VERSION "\0"
+ VALUE "InternalName", "libcurl\0"
+ VALUE "OriginalFilename", "libcurl.dll\0"
+ VALUE "ProductName", "The cURL library\0"
+ VALUE "ProductVersion", LIBCURL_VERSION "\0"
+ VALUE "LegalCopyright", "© " LIBCURL_COPYRIGHT "\0"
+ VALUE "License", "http://curl.haxx.se/docs/copyright.html\0"
+ END
+ END
+
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x409, 1200
+ END
+END
diff --git a/lib/libcurl.vcproj b/lib/libcurl.vcproj
new file mode 100755
index 0000000..bbd2995
--- /dev/null
+++ b/lib/libcurl.vcproj
@@ -0,0 +1,2515 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="libcurl"
+ ProjectGUID="{F6829817-CDBC-4BBE-B629-3BD21F4A797D}"
+ RootNamespace="libcurl"
+ TargetFrameworkVersion="0"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="4"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ EnableManagedIncrementalBuild="0"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=".;..\include;&quot;..\..\openssl-0.9.8h\Win32\include&quot;;&quot;..\..\zlib-1.2.3&quot;"
+ PreprocessorDefinitions="WIN32;_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;CURL_DISABLE_LDAP;USE_SSLEAY;USE_OPENSSL;HAVE_ZLIB_H"
+ MinimalRebuild="true"
+ RuntimeLibrary="3"
+ EnableEnhancedInstructionSet="1"
+ PrecompiledHeaderFile=""
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="4"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ EnableManagedIncrementalBuild="0"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories=".;..\include;&quot;..\..\openssl-0.9.8h\Win32\include&quot;;&quot;..\..\zlib-1.2.3&quot;"
+ PreprocessorDefinitions="WIN32;NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;CURL_DISABLE_LDAP;USE_SSLEAY;USE_OPENSSL;HAVE_ZLIB_H"
+ StringPooling="true"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="true"
+ EnableEnhancedInstructionSet="1"
+ PrecompiledHeaderFile=""
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ >
+ <File
+ RelativePath="base64.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="connect.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="content_encoding.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="cookie.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="curl_addrinfo.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="curl_fnmatch.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="curl_gethostname.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="curl_memrchr.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="curl_rand.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="curl_rtmp.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="curl_sspi.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="curl_threads.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="dict.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="easy.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="escape.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="file.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="fileinfo.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="formdata.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="ftp.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="ftplistparser.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="getenv.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="getinfo.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="gopher.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="gtls.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="hash.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="hmac.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="hostares.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="hostasyn.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="hostip.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="hostip4.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="hostip6.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="hostsyn.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="hostthre.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="http.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="http_chunks.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="http_digest.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="http_negotiate.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="http_ntlm.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="if2ip.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="imap.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="inet_ntop.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="inet_pton.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="krb4.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="krb5.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="ldap.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="llist.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="md4.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="md5.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="memdebug.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="mprintf.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="multi.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="netrc.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="nonblock.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="nss.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="openldap.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="parsedate.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="pingpong.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="polarssl.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="pop3.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="progress.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="qssl.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="rawstr.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="rtsp.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="security.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="select.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="sendf.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="share.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="slist.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="smtp.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="socks.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="socks_gssapi.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="socks_sspi.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="speedcheck.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="splay.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="ssh.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="sslgen.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="ssluse.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="strdup.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="strequal.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="strerror.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="strtok.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="strtoofft.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="telnet.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="tftp.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="timeval.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="transfer.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="url.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="version.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="warnless.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="wildcard.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ >
+ <File
+ RelativePath="arpa_telnet.h"
+ >
+ </File>
+ <File
+ RelativePath="config-win32.h"
+ >
+ </File>
+ <File
+ RelativePath="connect.h"
+ >
+ </File>
+ <File
+ RelativePath="content_encoding.h"
+ >
+ </File>
+ <File
+ RelativePath="cookie.h"
+ >
+ </File>
+ <File
+ RelativePath="curl_addrinfo.h"
+ >
+ </File>
+ <File
+ RelativePath="curl_base64.h"
+ >
+ </File>
+ <File
+ RelativePath="curl_fnmatch.h"
+ >
+ </File>
+ <File
+ RelativePath="curl_gethostname.h"
+ >
+ </File>
+ <File
+ RelativePath="curl_hmac.h"
+ >
+ </File>
+ <File
+ RelativePath="curl_ldap.h"
+ >
+ </File>
+ <File
+ RelativePath="curl_md4.h"
+ >
+ </File>
+ <File
+ RelativePath="curl_md5.h"
+ >
+ </File>
+ <File
+ RelativePath="curl_memory.h"
+ >
+ </File>
+ <File
+ RelativePath="curl_memrchr.h"
+ >
+ </File>
+ <File
+ RelativePath="curl_rand.h"
+ >
+ </File>
+ <File
+ RelativePath="curl_rtmp.h"
+ >
+ </File>
+ <File
+ RelativePath="curl_sspi.h"
+ >
+ </File>
+ <File
+ RelativePath="curl_threads.h"
+ >
+ </File>
+ <File
+ RelativePath="curlx.h"
+ >
+ </File>
+ <File
+ RelativePath="dict.h"
+ >
+ </File>
+ <File
+ RelativePath="easyif.h"
+ >
+ </File>
+ <File
+ RelativePath="escape.h"
+ >
+ </File>
+ <File
+ RelativePath="file.h"
+ >
+ </File>
+ <File
+ RelativePath="fileinfo.h"
+ >
+ </File>
+ <File
+ RelativePath="formdata.h"
+ >
+ </File>
+ <File
+ RelativePath="ftp.h"
+ >
+ </File>
+ <File
+ RelativePath="ftplistparser.h"
+ >
+ </File>
+ <File
+ RelativePath="getinfo.h"
+ >
+ </File>
+ <File
+ RelativePath="gopher.h"
+ >
+ </File>
+ <File
+ RelativePath="gtls.h"
+ >
+ </File>
+ <File
+ RelativePath="hash.h"
+ >
+ </File>
+ <File
+ RelativePath="hostip.h"
+ >
+ </File>
+ <File
+ RelativePath="http.h"
+ >
+ </File>
+ <File
+ RelativePath="http_chunks.h"
+ >
+ </File>
+ <File
+ RelativePath="http_digest.h"
+ >
+ </File>
+ <File
+ RelativePath="http_negotiate.h"
+ >
+ </File>
+ <File
+ RelativePath="http_ntlm.h"
+ >
+ </File>
+ <File
+ RelativePath="if2ip.h"
+ >
+ </File>
+ <File
+ RelativePath="imap.h"
+ >
+ </File>
+ <File
+ RelativePath="inet_ntop.h"
+ >
+ </File>
+ <File
+ RelativePath="inet_pton.h"
+ >
+ </File>
+ <File
+ RelativePath="krb4.h"
+ >
+ </File>
+ <File
+ RelativePath="llist.h"
+ >
+ </File>
+ <File
+ RelativePath="memdebug.h"
+ >
+ </File>
+ <File
+ RelativePath="multiif.h"
+ >
+ </File>
+ <File
+ RelativePath="netrc.h"
+ >
+ </File>
+ <File
+ RelativePath="nonblock.h"
+ >
+ </File>
+ <File
+ RelativePath="nssg.h"
+ >
+ </File>
+ <File
+ RelativePath="parsedate.h"
+ >
+ </File>
+ <File
+ RelativePath="pingpong.h"
+ >
+ </File>
+ <File
+ RelativePath="polarssl.h"
+ >
+ </File>
+ <File
+ RelativePath="pop3.h"
+ >
+ </File>
+ <File
+ RelativePath="progress.h"
+ >
+ </File>
+ <File
+ RelativePath="qssl.h"
+ >
+ </File>
+ <File
+ RelativePath="rawstr.h"
+ >
+ </File>
+ <File
+ RelativePath="rtsp.h"
+ >
+ </File>
+ <File
+ RelativePath="select.h"
+ >
+ </File>
+ <File
+ RelativePath="sendf.h"
+ >
+ </File>
+ <File
+ RelativePath="setup.h"
+ >
+ </File>
+ <File
+ RelativePath="setup_once.h"
+ >
+ </File>
+ <File
+ RelativePath="share.h"
+ >
+ </File>
+ <File
+ RelativePath="slist.h"
+ >
+ </File>
+ <File
+ RelativePath="smtp.h"
+ >
+ </File>
+ <File
+ RelativePath="sockaddr.h"
+ >
+ </File>
+ <File
+ RelativePath="socks.h"
+ >
+ </File>
+ <File
+ RelativePath="speedcheck.h"
+ >
+ </File>
+ <File
+ RelativePath="splay.h"
+ >
+ </File>
+ <File
+ RelativePath="ssh.h"
+ >
+ </File>
+ <File
+ RelativePath="sslgen.h"
+ >
+ </File>
+ <File
+ RelativePath="ssluse.h"
+ >
+ </File>
+ <File
+ RelativePath="strdup.h"
+ >
+ </File>
+ <File
+ RelativePath="strequal.h"
+ >
+ </File>
+ <File
+ RelativePath="strerror.h"
+ >
+ </File>
+ <File
+ RelativePath="strtok.h"
+ >
+ </File>
+ <File
+ RelativePath="strtoofft.h"
+ >
+ </File>
+ <File
+ RelativePath="telnet.h"
+ >
+ </File>
+ <File
+ RelativePath="tftp.h"
+ >
+ </File>
+ <File
+ RelativePath="timeval.h"
+ >
+ </File>
+ <File
+ RelativePath="transfer.h"
+ >
+ </File>
+ <File
+ RelativePath="url.h"
+ >
+ </File>
+ <File
+ RelativePath="urldata.h"
+ >
+ </File>
+ <File
+ RelativePath="warnless.h"
+ >
+ </File>
+ <File
+ RelativePath="wildcard.h"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ >
+ <File
+ RelativePath="libcurl.rc"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/lib/llist.c b/lib/llist.c
index a121c60..71238fa 100644
--- a/lib/llist.c
+++ b/lib/llist.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -31,8 +31,8 @@
/* this must be the last include file */
#include "memdebug.h"
-void
-Curl_llist_init(struct curl_llist *l, curl_llist_dtor dtor)
+static void
+llist_init(struct curl_llist *l, curl_llist_dtor dtor)
{
l->size = 0;
l->dtor = dtor;
@@ -49,13 +49,19 @@ Curl_llist_alloc(curl_llist_dtor dtor)
if(NULL == list)
return NULL;
- Curl_llist_init(list, dtor);
+ llist_init(list, dtor);
return list;
}
/*
- * Curl_llist_insert_next() returns 1 on success and 0 on failure.
+ * Curl_llist_insert_next()
+ *
+ * Inserts a new list element after the given one 'e'. If the given existing
+ * entry is NULL and the list already has elements, the new one will be
+ * inserted first in the list.
+ *
+ * Returns: 1 on success and 0 on failure.
*/
int
Curl_llist_insert_next(struct curl_llist *list, struct curl_llist_element *e,
@@ -73,15 +79,21 @@ Curl_llist_insert_next(struct curl_llist *list, struct curl_llist_element *e,
list->tail = ne;
}
else {
- ne->next = e->next;
+ /* if 'e' is NULL here, we insert the new element first in the list */
+ ne->next = e?e->next:list->head;
ne->prev = e;
- if(e->next) {
+ if(!e) {
+ list->head->prev = ne;
+ list->head = ne;
+ }
+ else if(e->next) {
e->next->prev = ne;
}
else {
list->tail = ne;
}
- e->next = ne;
+ if(e)
+ e->next = ne;
}
++list->size;
diff --git a/lib/llist.h b/lib/llist.h
index 358d3d6..c33912a 100644
--- a/lib/llist.h
+++ b/lib/llist.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2008, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -43,16 +43,11 @@ struct curl_llist {
size_t size;
};
-void Curl_llist_init(struct curl_llist *, curl_llist_dtor);
struct curl_llist *Curl_llist_alloc(curl_llist_dtor);
int Curl_llist_insert_next(struct curl_llist *, struct curl_llist_element *,
const void *);
-int Curl_llist_insert_prev(struct curl_llist *, struct curl_llist_element *,
- const void *);
int Curl_llist_remove(struct curl_llist *, struct curl_llist_element *,
void *);
-int Curl_llist_remove_next(struct curl_llist *, struct curl_llist_element *,
- void *);
size_t Curl_llist_count(struct curl_llist *);
void Curl_llist_destroy(struct curl_llist *, void *);
int Curl_llist_move(struct curl_llist *, struct curl_llist_element *,
diff --git a/lib/makefile.amiga b/lib/makefile.amiga
new file mode 100644
index 0000000..7b7fa8f
--- /dev/null
+++ b/lib/makefile.amiga
@@ -0,0 +1,22 @@
+#
+# libcurl Makefile for AmigaOS ...
+#
+
+# change the follow to where you have the AmiTCP SDK v4.3 includes:
+
+ATCPSDKI= /GG/netinclude
+
+
+CC = m68k-amigaos-gcc
+CFLAGS = -I$(ATCPSDKI) -m68020-60 -O2 -msoft-float -noixemul -g -I. -I../include -W -Wall
+
+include Makefile.inc
+CSOURCES += amigaos.c
+OBJS = $(CSOURCES:.c=.o)
+
+all: $(OBJS)
+ ar cru libcurl.a $(OBJS)
+ ranlib libcurl.a
+
+install:
+ $(INSTALL) -c ./libcurl.a /lib/libcurl.a
diff --git a/lib/makefile.dj b/lib/makefile.dj
new file mode 100644
index 0000000..90faf33
--- /dev/null
+++ b/lib/makefile.dj
@@ -0,0 +1,49 @@
+#
+# Adapted for djgpp2 / Watt-32 / DOS by
+# Gisle Vanem <giva@bgnett.no>
+#
+
+DEPEND_PREREQ = curl_config.h
+TOPDIR = ..
+
+include ../packages/DOS/common.dj
+include Makefile.inc
+
+OBJECTS := $(patsubst %.c,$(OBJ_DIR)/%.o,$(strip $(CSOURCES)))
+
+CURL_LIB = libcurl.a
+
+# NOTE: if ../include/curl/curlbuild.h is missing, you're probably building
+# this from a git checkout and then you need to run buildconf.bat first.
+
+all: $(OBJ_DIR) curl_config.h $(CURL_LIB)
+
+$(CURL_LIB): $(OBJECTS)
+ ar rs $@ $?
+
+curl_config.h: config.dos
+ $(COPY) $^ $@
+
+# clean generated files
+#
+genclean:
+ - $(DELETE) curl_config.h
+
+# clean object files and subdir
+#
+objclean: genclean
+ - $(DELETE) $(OBJ_DIR)$(DS)*.o
+ - $(RMDIR) $(OBJ_DIR)
+
+# clean without removing built library
+#
+clean: objclean
+ - $(DELETE) depend.dj
+
+# clean everything
+#
+realclean vclean: clean
+ - $(DELETE) $(CURL_LIB)
+
+-include depend.dj
+
diff --git a/lib/md4.c b/lib/md4.c
new file mode 100644
index 0000000..ecf3bfc
--- /dev/null
+++ b/lib/md4.c
@@ -0,0 +1,281 @@
+/*-
+ Copyright (C) 1990-2, RSA Data Security, Inc. All rights reserved.
+
+ License to copy and use this software is granted provided that it
+ is identified as the "RSA Data Security, Inc. MD4 Message-Digest
+ Algorithm" in all material mentioning or referencing this software
+ or this function.
+
+ License is also granted to make and use derivative works provided
+ that such works are identified as "derived from the RSA Data
+ Security, Inc. MD4 Message-Digest Algorithm" in all material
+ mentioning or referencing the derived work.
+
+ RSA Data Security, Inc. makes no representations concerning either
+ the merchantability of this software or the suitability of this
+ software for any particular purpose. It is provided "as is"
+ without express or implied warranty of any kind.
+
+ These notices must be retained in any copies of any part of this
+ documentation and/or software.
+ */
+
+#include "setup.h"
+
+/* NSS crypto library does not provide the MD4 hash algorithm, so that we have
+ * a local implementation of it */
+#ifdef USE_NSS
+
+#include "curl_md4.h"
+#include <string.h>
+
+typedef unsigned int UINT4;
+
+typedef struct MD4Context {
+ UINT4 state[4]; /* state (ABCD) */
+ UINT4 count[2]; /* number of bits, modulo 2^64 (lsb first) */
+ unsigned char buffer[64]; /* input buffer */
+} MD4_CTX;
+
+/* Constants for MD4Transform routine.
+ */
+#define S11 3
+#define S12 7
+#define S13 11
+#define S14 19
+#define S21 3
+#define S22 5
+#define S23 9
+#define S24 13
+#define S31 3
+#define S32 9
+#define S33 11
+#define S34 15
+
+static void MD4Transform(UINT4 [4], const unsigned char [64]);
+static void Encode(unsigned char *, UINT4 *, unsigned int);
+static void Decode(UINT4 *, const unsigned char *, unsigned int);
+
+static unsigned char PADDING[64] = {
+ 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+/* F, G and H are basic MD4 functions.
+ */
+#define F(x, y, z) (((x) & (y)) | ((~x) & (z)))
+#define G(x, y, z) (((x) & (y)) | ((x) & (z)) | ((y) & (z)))
+#define H(x, y, z) ((x) ^ (y) ^ (z))
+
+/* ROTATE_LEFT rotates x left n bits.
+ */
+#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n))))
+
+/* FF, GG and HH are transformations for rounds 1, 2 and 3 */
+/* Rotation is separate from addition to prevent recomputation */
+#define FF(a, b, c, d, x, s) { \
+ (a) += F ((b), (c), (d)) + (x); \
+ (a) = ROTATE_LEFT ((a), (s)); \
+ }
+#define GG(a, b, c, d, x, s) { \
+ (a) += G ((b), (c), (d)) + (x) + (UINT4)0x5a827999; \
+ (a) = ROTATE_LEFT ((a), (s)); \
+ }
+#define HH(a, b, c, d, x, s) { \
+ (a) += H ((b), (c), (d)) + (x) + (UINT4)0x6ed9eba1; \
+ (a) = ROTATE_LEFT ((a), (s)); \
+ }
+
+/* MD4 initialization. Begins an MD4 operation, writing a new context.
+ */
+static void MD4Init(MD4_CTX *context)
+{
+ context->count[0] = context->count[1] = 0;
+
+ /* Load magic initialization constants.
+ */
+ context->state[0] = 0x67452301;
+ context->state[1] = 0xefcdab89;
+ context->state[2] = 0x98badcfe;
+ context->state[3] = 0x10325476;
+}
+
+/* MD4 block update operation. Continues an MD4 message-digest
+ operation, processing another message block, and updating the
+ context.
+ */
+static void MD4Update(MD4_CTX *context, const unsigned char *input,
+ unsigned int inputLen)
+{
+ unsigned int i, bufindex, partLen;
+
+ /* Compute number of bytes mod 64 */
+ bufindex = (unsigned int)((context->count[0] >> 3) & 0x3F);
+ /* Update number of bits */
+ if ((context->count[0] += ((UINT4)inputLen << 3))
+ < ((UINT4)inputLen << 3))
+ context->count[1]++;
+ context->count[1] += ((UINT4)inputLen >> 29);
+
+ partLen = 64 - bufindex;
+ /* Transform as many times as possible.
+ */
+ if (inputLen >= partLen) {
+ memcpy(&context->buffer[bufindex], input, partLen);
+ MD4Transform (context->state, context->buffer);
+
+ for (i = partLen; i + 63 < inputLen; i += 64)
+ MD4Transform (context->state, &input[i]);
+
+ bufindex = 0;
+ }
+ else
+ i = 0;
+
+ /* Buffer remaining input */
+ memcpy(&context->buffer[bufindex], &input[i], inputLen-i);
+}
+
+/* MD4 padding. */
+static void MD4Pad(MD4_CTX *context)
+{
+ unsigned char bits[8];
+ unsigned int bufindex, padLen;
+
+ /* Save number of bits */
+ Encode (bits, context->count, 8);
+
+ /* Pad out to 56 mod 64.
+ */
+ bufindex = (unsigned int)((context->count[0] >> 3) & 0x3f);
+ padLen = (bufindex < 56) ? (56 - bufindex) : (120 - bufindex);
+ MD4Update (context, PADDING, padLen);
+
+ /* Append length (before padding) */
+ MD4Update (context, bits, 8);
+}
+
+/* MD4 finalization. Ends an MD4 message-digest operation, writing the
+ the message digest and zeroizing the context.
+ */
+static void MD4Final (unsigned char digest[16], MD4_CTX *context)
+{
+ /* Do padding */
+ MD4Pad (context);
+
+ /* Store state in digest */
+ Encode (digest, context->state, 16);
+
+ /* Zeroize sensitive information.
+ */
+ memset(context, 0, sizeof(*context));
+}
+
+/* MD4 basic transformation. Transforms state based on block.
+ */
+static void MD4Transform (UINT4 state[4], const unsigned char block[64])
+{
+ UINT4 a = state[0], b = state[1], c = state[2], d = state[3], x[16];
+
+ Decode (x, block, 64);
+
+ /* Round 1 */
+ FF (a, b, c, d, x[ 0], S11); /* 1 */
+ FF (d, a, b, c, x[ 1], S12); /* 2 */
+ FF (c, d, a, b, x[ 2], S13); /* 3 */
+ FF (b, c, d, a, x[ 3], S14); /* 4 */
+ FF (a, b, c, d, x[ 4], S11); /* 5 */
+ FF (d, a, b, c, x[ 5], S12); /* 6 */
+ FF (c, d, a, b, x[ 6], S13); /* 7 */
+ FF (b, c, d, a, x[ 7], S14); /* 8 */
+ FF (a, b, c, d, x[ 8], S11); /* 9 */
+ FF (d, a, b, c, x[ 9], S12); /* 10 */
+ FF (c, d, a, b, x[10], S13); /* 11 */
+ FF (b, c, d, a, x[11], S14); /* 12 */
+ FF (a, b, c, d, x[12], S11); /* 13 */
+ FF (d, a, b, c, x[13], S12); /* 14 */
+ FF (c, d, a, b, x[14], S13); /* 15 */
+ FF (b, c, d, a, x[15], S14); /* 16 */
+
+ /* Round 2 */
+ GG (a, b, c, d, x[ 0], S21); /* 17 */
+ GG (d, a, b, c, x[ 4], S22); /* 18 */
+ GG (c, d, a, b, x[ 8], S23); /* 19 */
+ GG (b, c, d, a, x[12], S24); /* 20 */
+ GG (a, b, c, d, x[ 1], S21); /* 21 */
+ GG (d, a, b, c, x[ 5], S22); /* 22 */
+ GG (c, d, a, b, x[ 9], S23); /* 23 */
+ GG (b, c, d, a, x[13], S24); /* 24 */
+ GG (a, b, c, d, x[ 2], S21); /* 25 */
+ GG (d, a, b, c, x[ 6], S22); /* 26 */
+ GG (c, d, a, b, x[10], S23); /* 27 */
+ GG (b, c, d, a, x[14], S24); /* 28 */
+ GG (a, b, c, d, x[ 3], S21); /* 29 */
+ GG (d, a, b, c, x[ 7], S22); /* 30 */
+ GG (c, d, a, b, x[11], S23); /* 31 */
+ GG (b, c, d, a, x[15], S24); /* 32 */
+
+ /* Round 3 */
+ HH (a, b, c, d, x[ 0], S31); /* 33 */
+ HH (d, a, b, c, x[ 8], S32); /* 34 */
+ HH (c, d, a, b, x[ 4], S33); /* 35 */
+ HH (b, c, d, a, x[12], S34); /* 36 */
+ HH (a, b, c, d, x[ 2], S31); /* 37 */
+ HH (d, a, b, c, x[10], S32); /* 38 */
+ HH (c, d, a, b, x[ 6], S33); /* 39 */
+ HH (b, c, d, a, x[14], S34); /* 40 */
+ HH (a, b, c, d, x[ 1], S31); /* 41 */
+ HH (d, a, b, c, x[ 9], S32); /* 42 */
+ HH (c, d, a, b, x[ 5], S33); /* 43 */
+ HH (b, c, d, a, x[13], S34); /* 44 */
+ HH (a, b, c, d, x[ 3], S31); /* 45 */
+ HH (d, a, b, c, x[11], S32); /* 46 */
+ HH (c, d, a, b, x[ 7], S33); /* 47 */
+ HH (b, c, d, a, x[15], S34); /* 48 */
+
+ state[0] += a;
+ state[1] += b;
+ state[2] += c;
+ state[3] += d;
+
+ /* Zeroize sensitive information.
+ */
+ memset(x, 0, sizeof(x));
+}
+
+/* Encodes input (UINT4) into output (unsigned char). Assumes len is
+ a multiple of 4.
+ */
+static void Encode(unsigned char *output, UINT4 *input, unsigned int len)
+{
+ unsigned int i, j;
+
+ for (i = 0, j = 0; j < len; i++, j += 4) {
+ output[j] = (unsigned char)(input[i] & 0xff);
+ output[j+1] = (unsigned char)((input[i] >> 8) & 0xff);
+ output[j+2] = (unsigned char)((input[i] >> 16) & 0xff);
+ output[j+3] = (unsigned char)((input[i] >> 24) & 0xff);
+ }
+}
+
+/* Decodes input (unsigned char) into output (UINT4). Assumes len is
+ a multiple of 4.
+ */
+static void Decode (UINT4 *output, const unsigned char *input, unsigned int len)
+{
+ unsigned int i, j;
+
+ for (i = 0, j = 0; j < len; i++, j += 4)
+ output[i] = ((UINT4)input[j]) | (((UINT4)input[j+1]) << 8) |
+ (((UINT4)input[j+2]) << 16) | (((UINT4)input[j+3]) << 24);
+}
+
+void Curl_md4it(unsigned char *output, const unsigned char *input, size_t len)
+{
+ MD4_CTX ctx;
+ MD4Init(&ctx);
+ MD4Update(&ctx, input, (unsigned int)len);
+ MD4Final(output, &ctx);
+}
+#endif /* USE_NSS */
diff --git a/lib/md5.c b/lib/md5.c
index 32d0634..b3912c5 100644
--- a/lib/md5.c
+++ b/lib/md5.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2008, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -27,19 +27,30 @@
#include <string.h>
#include "curl_md5.h"
+#include "curl_hmac.h"
#ifdef USE_GNUTLS
#include <gcrypt.h>
-void Curl_md5it(unsigned char *outbuffer, /* 16 bytes */
- const unsigned char *input)
+typedef gcry_md_hd_t MD5_CTX;
+
+static void MD5_Init(MD5_CTX * ctx)
+{
+ gcry_md_open(ctx, GCRY_MD_MD5, 0);
+}
+
+static void MD5_Update(MD5_CTX * ctx,
+ const unsigned char * input,
+ unsigned int inputLen)
+{
+ gcry_md_write(*ctx, input, inputLen);
+}
+
+static void MD5_Final(unsigned char digest[16], MD5_CTX * ctx)
{
- gcry_md_hd_t ctx;
- gcry_md_open(&ctx, GCRY_MD_MD5, 0);
- gcry_md_write(ctx, input, (unsigned int)strlen((char *)input));
- memcpy (outbuffer, gcry_md_read (ctx, 0), 16);
- gcry_md_close(ctx);
+ memcpy(digest, gcry_md_read(*ctx, 0), 16);
+ gcry_md_close(*ctx);
}
#else
@@ -194,7 +205,7 @@ static void MD5_Update (struct md5_ctx *context, /* context */
/* Transform as many times as possible. */
if(inputLen >= partLen) {
- memcpy((void *)&context->buffer[bufindex], (void *)input, partLen);
+ memcpy(&context->buffer[bufindex], input, partLen);
MD5Transform(context->state, context->buffer);
for (i = partLen; i + 63 < inputLen; i += 64)
@@ -206,7 +217,7 @@ static void MD5_Update (struct md5_ctx *context, /* context */
i = 0;
/* Buffer remaining input */
- memcpy((void *)&context->buffer[bufindex], (void *)&input[i], inputLen-i);
+ memcpy(&context->buffer[bufindex], &input[i], inputLen-i);
}
/* MD5 finalization. Ends an MD5 message-digest operation, writing the
@@ -358,6 +369,20 @@ static void Decode (UINT4 *output,
#endif /* USE_SSLEAY */
+#endif /* USE_GNUTLS */
+
+const HMAC_params Curl_HMAC_MD5[] = {
+ {
+ (HMAC_hinit_func) MD5_Init, /* Hash initialization function. */
+ (HMAC_hupdate_func) MD5_Update, /* Hash update function. */
+ (HMAC_hfinal_func) MD5_Final, /* Hash computation end function. */
+ sizeof(MD5_CTX), /* Size of hash context structure. */
+ 64, /* Maximum key length. */
+ 16 /* Result size. */
+ }
+};
+
+
void Curl_md5it(unsigned char *outbuffer, /* 16 bytes */
const unsigned char *input)
{
@@ -367,6 +392,4 @@ void Curl_md5it(unsigned char *outbuffer, /* 16 bytes */
MD5_Final(outbuffer, &ctx);
}
-#endif /* USE_GNUTLS */
-
#endif /* CURL_DISABLE_CRYPTO_AUTH */
diff --git a/lib/mk-ca-bundle.pl b/lib/mk-ca-bundle.pl
index 8d461d0..3586dc4 100755
--- a/lib/mk-ca-bundle.pl
+++ b/lib/mk-ca-bundle.pl
@@ -40,7 +40,7 @@ my $url = 'http://mxr.mozilla.org/seamonkey/source/security/nss/lib/ckfw/builtin
# If the OpenSSL commandline is not in search path you can configure it here!
my $openssl = 'openssl';
-my $version = $1 if ('$Revision$' =~ /\s(\d+\.\d+)\s/);
+my $version = '1.14';
getopts('bhilnqtuv');
diff --git a/lib/mk-ca-bundle.vbs b/lib/mk-ca-bundle.vbs
new file mode 100755
index 0000000..5a4b4ed
--- /dev/null
+++ b/lib/mk-ca-bundle.vbs
@@ -0,0 +1,271 @@
+'***************************************************************************
+'* _ _ ____ _
+'* Project ___| | | | _ \| |
+'* / __| | | | |_) | |
+'* | (__| |_| | _ <| |___
+'* \___|\___/|_| \_\_____|
+'*
+'* Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+'*
+'* This software is licensed as described in the file COPYING, which
+'* you should have received as part of this distribution. The terms
+'* are also available at http://curl.haxx.se/docs/copyright.html.
+'*
+'* You may opt to use, copy, modify, merge, publish, distribute and/or sell
+'* copies of the Software, and permit persons to whom the Software is
+'* furnished to do so, under the terms of the COPYING file.
+'*
+'* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+'* KIND, either express or implied.
+'*
+'***************************************************************************
+'* Script to fetch certdata.txt from Mozilla.org site and create a
+'* ca-bundle.crt for use with OpenSSL / libcurl / libcurl bindings
+'* Requires WinHttp.WinHttpRequest.5.1 and ADODB.Stream which are part of
+'* W2000 SP3 or later, WXP SP1 or later, W2003 Server SP1 or later.
+'* Hacked by Guenter Knauf
+'***************************************************************************
+Option Explicit
+Const myVersion = "0.3.5"
+
+Const myUrl = "http://mxr.mozilla.org/firefox/source/security/nss/lib/ckfw/builtins/certdata.txt?raw=1"
+
+Const myOpenssl = "openssl.exe"
+
+Const myCdSavF = FALSE ' Flag: save downloaded data to file certdata.txt
+Const myCaBakF = TRUE ' Flag: backup existing ca-bundle certificate
+Const myAskLiF = TRUE ' Flag: display certdata.txt license agreement
+Const myAskTiF = TRUE ' Flag: ask to include certificate text info
+
+'******************* Nothing to configure below! *******************
+Dim objShell, objNetwork, objFSO, objHttp
+Dim myBase, mySelf, myFh, myTmpFh, myCdData, myCdFile, myCaFile, myTmpName, myBakNum, myOptTxt, i
+Set objNetwork = WScript.CreateObject("WScript.Network")
+Set objShell = WScript.CreateObject("WScript.Shell")
+Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
+Set objHttp = WScript.CreateObject("WinHttp.WinHttpRequest.5.1")
+If objHttp Is Nothing Then Set objHttp = WScript.CreateObject("WinHttp.WinHttpRequest")
+myBase = Left(WScript.ScriptFullName, InstrRev(WScript.ScriptFullName, "\"))
+mySelf = Left(WScript.ScriptName, InstrRev(WScript.ScriptName, ".") - 1) & " " & myVersion
+myCdFile = Mid(myUrl, InstrRev(myUrl, "/") + 1, InstrRev(myUrl, "?") - InstrRev(myUrl, "/") - 1)
+myCaFile = "ca-bundle.crt"
+myTmpName = InputBox("Enter output filename:", mySelf, myCaFile)
+If Not (myTmpName = "") Then
+ myCaFile = myTmpName
+End If
+' Lets ignore SSL invalid cert errors
+objHttp.Option(4) = 256 + 512 + 4096 + 8192
+objHttp.SetTimeouts 0, 5000, 10000, 10000
+objHttp.Open "GET", myUrl, FALSE
+objHttp.setRequestHeader "User-Agent", WScript.ScriptName & "/" & myVersion
+objHttp.Send ""
+If Not (objHttp.statusText = "OK") Then
+ MsgBox("Failed to download '" & myCdFile & "': " & objHttp.statusText), vbCritical, mySelf
+ WScript.Quit 1
+End If
+' Convert data from ResponseBody instead of using ResponseText because of UTF-8
+myCdData = ConvertBinaryData(objHttp.ResponseBody)
+Set objHttp = Nothing
+' Write received data to file if enabled
+If (myCdSavF = TRUE) Then
+ Set myFh = objFSO.OpenTextFile(myCdFile, 2, TRUE)
+ myFh.Write myCdData
+ myFh.Close
+End If
+' Backup exitsing ca-bundle certificate file
+If (myCaBakF = TRUE) Then
+ If objFSO.FileExists(myCaFile) Then
+ Dim myBakFile, b
+ b = 1
+ myBakFile = myCaFile & ".~" & b & "~"
+ While objFSO.FileExists(myBakFile)
+ b = b + 1
+ myBakFile = myCaFile & ".~" & b & "~"
+ Wend
+ Set myTmpFh = objFSO.GetFile(myCaFile)
+ myTmpFh.Move myBakFile
+ End If
+End If
+If (myAskTiF = TRUE) Then
+ If (6 = objShell.PopUp("Do you want to include text information about each certificate?" & vbLf & _
+ "(requires OpenSSL commandline in current directory or in search path)",, _
+ mySelf, vbQuestion + vbYesNo + vbDefaultButton2)) Then
+ myOptTxt = TRUE
+ Else
+ myOptTxt = FALSE
+ End If
+End If
+' Process the received data
+Dim myLines, myPattern, myInsideCert, myInsideLicense, myLicenseText, myNumCerts
+Dim myLabel, myOctets, myData, myPem, myRev, j
+myData = ""
+myLines = Split(myCdData, vbLf, -1)
+Set myFh = objFSO.OpenTextFile(myCaFile, 2, TRUE)
+myFh.Write "##" & vbLf
+myFh.Write "## " & myCaFile & " -- Bundle of CA Root Certificates" & vbLf
+myFh.Write "##" & vbLf
+myFh.Write "## Converted at: " & Now & vbLf
+myFh.Write "##" & vbLf
+myFh.Write "## This is a bundle of X.509 certificates of public Certificate Authorities" & vbLf
+myFh.Write "## (CA). These were automatically extracted from Mozilla's root certificates" & vbLf
+myFh.Write "## file (certdata.txt). This file can be found in the mozilla source tree:" & vbLf
+myFh.Write "## '/mozilla/security/nss/lib/ckfw/builtins/certdata.txt'" & vbLf
+myFh.Write "##" & vbLf
+myFh.Write "## It contains the certificates in PEM format and therefore" & vbLf
+myFh.Write "## can be directly used with curl / libcurl / php_curl, or with" & vbLf
+myFh.Write "## an Apache+mod_ssl webserver for SSL client authentication." & vbLf
+myFh.Write "## Just configure this file as the SSLCACertificateFile." & vbLf
+myFh.Write "##" & vbLf
+myFh.Write vbLf
+For i = 0 To UBound(myLines)
+ If InstrRev(myLines(i), "CKA_LABEL ") Then
+ myPattern = "^CKA_LABEL\s+[A-Z0-9]+\s+""(.+?)"""
+ myLabel = RegExprFirst(myPattern, myLines(i))
+ End If
+ If (myInsideCert = TRUE) Then
+ If InstrRev(myLines(i), "END") Then
+ myInsideCert = FALSE
+ myFh.Write myLabel & vbLf
+ myFh.Write String(Len(myLabel), "=") & vbLf
+ myPem = "-----BEGIN CERTIFICATE-----" & vbLf & _
+ Base64Encode(myData) & vbLf & _
+ "-----END CERTIFICATE-----" & vbLf
+ If (myOptTxt = FALSE) Then
+ myFh.Write myPem & vbLf
+ Else
+ Dim myCmd, myRval, myTmpIn, myTmpOut
+ myTmpIn = objFSO.GetSpecialFolder(2).Path & "\" & objFSO.GetTempName
+ myTmpOut = objFSO.GetSpecialFolder(2).Path & "\" & objFSO.GetTempName
+ Set myTmpFh = objFSO.OpenTextFile(myTmpIn, 2, TRUE)
+ myTmpFh.Write myPem
+ myTmpFh.Close
+ myCmd = myOpenssl & " x509 -md5 -fingerprint -text -inform PEM" & _
+ " -in " & myTmpIn & " -out " & myTmpOut
+ myRval = objShell.Run (myCmd, 0, TRUE)
+ objFSO.DeleteFile myTmpIn, TRUE
+ If Not (myRval = 0) Then
+ MsgBox("Failed to process PEM cert with OpenSSL commandline!"), vbCritical, mySelf
+ objFSO.DeleteFile myTmpOut, TRUE
+ WScript.Quit 3
+ End If
+ Set myTmpFh = objFSO.OpenTextFile(myTmpOut, 1)
+ myFh.Write myTmpFh.ReadAll & vbLf
+ myTmpFh.Close
+ objFSO.DeleteFile myTmpOut, TRUE
+ End If
+ myData = ""
+ myNumCerts = myNumCerts + 1
+ Else
+ myOctets = Split(myLines(i), "\")
+ For j = 1 To UBound(myOctets)
+ myData = myData & Chr(CByte("&o" & myOctets(j)))
+ Next
+ End If
+ End If
+ If InstrRev(myLines(i), "CVS_ID ") Then
+ myPattern = "^CVS_ID\s+""(.+?)"""
+ myRev = RegExprFirst(myPattern, myLines(i))
+ myFh.Write "# " & myRev & vbLf & vbLf
+ End If
+ If InstrRev(myLines(i), "CKA_VALUE MULTILINE_OCTAL") Then
+ myInsideCert = TRUE
+ End If
+ If InstrRev(myLines(i), "***** BEGIN LICENSE BLOCK *****") Then
+ myInsideLicense = TRUE
+ End If
+ If (myInsideLicense = TRUE) Then
+ myFh.Write myLines(i) & vbLf
+ myLicenseText = myLicenseText & Mid(myLines(i), 2) & vbLf
+ End If
+ If InstrRev(myLines(i), "***** END LICENSE BLOCK *****") Then
+ myInsideLicense = FALSE
+ If (myAskLiF = TRUE) Then
+ If Not (6 = objShell.PopUp(myLicenseText & vbLf & _
+ "Do you agree to the license shown above (required to proceed) ?",, _
+ mySelf, vbQuestion + vbYesNo + vbDefaultButton1)) Then
+ myFh.Close
+ objFSO.DeleteFile myCaFile, TRUE
+ WScript.Quit 2
+ End If
+ End If
+ End If
+Next
+myFh.Close
+objShell.PopUp "Done (" & myNumCerts & " CA certs processed).", 20, mySelf, vbInformation
+WScript.Quit 0
+
+Function ConvertBinaryData(arrBytes)
+ Dim objStream
+ Set objStream = CreateObject("ADODB.Stream")
+ objStream.Open
+ objStream.Type = 1
+ objStream.Write arrBytes
+ objStream.Position = 0
+ objStream.Type = 2
+ objStream.Charset = "ascii"
+ ConvertBinaryData = objStream.ReadText
+ Set objStream = Nothing
+End Function
+
+Function RegExprFirst(SearchPattern, TheString)
+ Dim objRegExp, Matches ' create variables.
+ Set objRegExp = New RegExp ' create a regular expression.
+ objRegExp.Pattern = SearchPattern ' sets the search pattern.
+ objRegExp.IgnoreCase = TRUE ' set to ignores case.
+ objRegExp.Global = TRUE ' set to gloabal search.
+ Set Matches = objRegExp.Execute(TheString) ' do the search.
+ If (Matches.Count) Then
+ RegExprFirst = Matches(0).SubMatches(0) ' return first match.
+ Else
+ RegExprFirst = ""
+ End If
+ Set objRegExp = Nothing
+End Function
+
+Function Base64Encode(inData)
+ Const Base64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
+ Dim cOut, sOut, I
+
+ 'For each group of 3 bytes
+ For I = 1 To Len(inData) Step 3
+ Dim nGroup, pOut, sGroup
+
+ 'Create one long from this 3 bytes.
+ nGroup = &H10000 * Asc(Mid(inData, I, 1)) + _
+ &H100 * MyASC(Mid(inData, I + 1, 1)) + _
+ MyASC(Mid(inData, I + 2, 1))
+
+ 'Oct splits the long To 8 groups with 3 bits
+ nGroup = Oct(nGroup)
+
+ 'Add leading zeros
+ nGroup = String(8 - Len(nGroup), "0") & nGroup
+
+ 'Convert To base64
+ pOut = Mid(Base64, CLng("&o" & Mid(nGroup, 1, 2)) + 1, 1) & _
+ Mid(Base64, CLng("&o" & Mid(nGroup, 3, 2)) + 1, 1) & _
+ Mid(Base64, CLng("&o" & Mid(nGroup, 5, 2)) + 1, 1) & _
+ Mid(Base64, CLng("&o" & Mid(nGroup, 7, 2)) + 1, 1)
+
+ 'Add the part To OutPut string
+ sOut = sOut + pOut
+
+ 'Add a new line For Each 76 chars In dest (76*3/4 = 57)
+ If (I < Len(inData) - 2) Then
+ If (I + 2) Mod 57 = 0 Then sOut = sOut & vbLf
+ End If
+ Next
+ Select Case Len(inData) Mod 3
+ Case 1: '8 bit final
+ sOut = Left(sOut, Len(sOut) - 2) & "=="
+ Case 2: '16 bit final
+ sOut = Left(sOut, Len(sOut) - 1) & "="
+ End Select
+ Base64Encode = sOut
+End Function
+
+Function MyASC(OneChar)
+ If OneChar = "" Then MyASC = 0 Else MyASC = Asc(OneChar)
+End Function
+
+
diff --git a/lib/mprintf.c b/lib/mprintf.c
index 1d93c58..536c0c2 100644
--- a/lib/mprintf.c
+++ b/lib/mprintf.c
@@ -963,7 +963,6 @@ static int dprintf_formatf(
/* RECURSIVE USAGE */
len = curl_msnprintf(fptr, left, ".%ld", prec);
fptr += len;
- left -= len;
}
if(p->flags & FLAGS_LONG)
*fptr++ = 'l';
diff --git a/lib/multi.c b/lib/multi.c
index 476cb81..875e136 100644
--- a/lib/multi.c
+++ b/lib/multi.c
@@ -61,7 +61,6 @@
struct Curl_message {
/* the 'CURLMsg' is the part that is visible to the external user */
struct CURLMsg extmsg;
- struct Curl_message *next;
};
/* NOTE: if you add a state here, add the name to the statename[] array as
@@ -84,7 +83,7 @@ typedef enum {
CURLM_STATE_TOOFAST, /* wait because limit-rate exceeded */
CURLM_STATE_DONE, /* post data transfer operation */
CURLM_STATE_COMPLETED, /* operation complete */
-
+ CURLM_STATE_MSGSENT, /* the operation complete message is sent */
CURLM_STATE_LAST /* not a true state, never use this */
} CURLMstate;
@@ -110,12 +109,7 @@ struct Curl_one_easy {
CURLMstate state; /* the handle's state */
CURLcode result; /* previous result */
- struct Curl_message *msg; /* A pointer to one single posted message.
- Cleanup should be done on this pointer NOT on
- the linked list in Curl_multi. This message
- will be deleted when this handle is removed
- from the multi-handle */
- int msg_num; /* number of messages left in 'msg' to return */
+ struct Curl_message msg; /* A single posted message. */
/* Array with the plain socket numbers this handle takes care of, in no
particular order. Note that all sockets are added to the sockhash, where
@@ -142,10 +136,11 @@ struct Curl_multi {
struct Curl_one_easy easy;
int num_easy; /* amount of entries in the linked list above. */
- int num_msgs; /* amount of messages in the easy handles */
int num_alive; /* amount of easy handles that are added but have not yet
reached COMPLETE state */
+ struct curl_llist *msglist; /* a list of messages from completed transfers */
+
/* callback function and user data pointer for the *socket() API */
curl_socket_callback socket_cb;
void *socket_userp;
@@ -197,6 +192,9 @@ static void moveHandleFromRecvToDonePipeline(struct SessionHandle *handle,
struct connectdata *conn);
static bool isHandleAtHead(struct SessionHandle *handle,
struct curl_llist *pipeline);
+static CURLMcode add_next_timeout(struct timeval now,
+ struct Curl_multi *multi,
+ struct SessionHandle *d);
#ifdef DEBUGBUILD
static const char * const statename[]={
@@ -216,9 +214,12 @@ static const char * const statename[]={
"TOOFAST",
"DONE",
"COMPLETED",
+ "MSGSENT",
};
#endif
+static void multi_freetimeout(void *a, void *b);
+
/* always use this function to change state, to make debugging easier */
static void multistate(struct Curl_one_easy *easy, CURLMstate state)
{
@@ -360,6 +361,33 @@ static struct curl_hash *sh_init(void)
sh_freeentry);
}
+/*
+ * multi_addmsg()
+ *
+ * Called when a transfer is completed. Adds the given msg pointer to
+ * the list kept in the multi handle.
+ */
+static CURLMcode multi_addmsg(struct Curl_multi *multi,
+ struct Curl_message *msg)
+{
+ if(!Curl_llist_insert_next(multi->msglist, multi->msglist->tail, msg))
+ return CURLM_OUT_OF_MEMORY;
+
+ return CURLM_OK;
+}
+
+/*
+ * multi_freeamsg()
+ *
+ * Callback used by the llist system when a single list entry is destroyed.
+ */
+static void multi_freeamsg(void *a, void *b)
+{
+ (void)a;
+ (void)b;
+}
+
+
CURLM *curl_multi_init(void)
{
struct Curl_multi *multi = calloc(1, sizeof(struct Curl_multi));
@@ -370,27 +398,20 @@ CURLM *curl_multi_init(void)
multi->type = CURL_MULTI_HANDLE;
multi->hostcache = Curl_mk_dnscache();
- if(!multi->hostcache) {
- /* failure, free mem and bail out */
- free(multi);
- return NULL;
- }
+ if(!multi->hostcache)
+ goto error;
multi->sockhash = sh_init();
- if(!multi->sockhash) {
- /* failure, free mem and bail out */
- Curl_hash_destroy(multi->hostcache);
- free(multi);
- return NULL;
- }
+ if(!multi->sockhash)
+ goto error;
multi->connc = Curl_mk_connc(CONNCACHE_MULTI, -1L);
- if(!multi->connc) {
- Curl_hash_destroy(multi->sockhash);
- Curl_hash_destroy(multi->hostcache);
- free(multi);
- return NULL;
- }
+ if(!multi->connc)
+ goto error;
+
+ multi->msglist = Curl_llist_alloc(multi_freeamsg);
+ if(!multi->msglist)
+ goto error;
/* Let's make the doubly-linked list a circular list. This makes
the linked list code simpler and allows inserting at the end
@@ -399,6 +420,17 @@ CURLM *curl_multi_init(void)
multi->easy.prev = &multi->easy;
return (CURLM *) multi;
+
+ error:
+ if(multi->sockhash)
+ Curl_hash_destroy(multi->sockhash);
+ if(multi->hostcache)
+ Curl_hash_destroy(multi->hostcache);
+ if(multi->connc)
+ Curl_rm_connc(multi->connc);
+
+ free(multi);
+ return NULL;
}
CURLMcode curl_multi_add_handle(CURLM *multi_handle,
@@ -408,6 +440,7 @@ CURLMcode curl_multi_add_handle(CURLM *multi_handle,
struct Curl_one_easy *easy;
struct closure *cl;
struct closure *prev=NULL;
+ struct SessionHandle *data = easy_handle;
/* First, make some basic checks that the CURLM handle is a good handle */
if(!GOOD_MULTI_HANDLE(multi))
@@ -422,6 +455,10 @@ CURLMcode curl_multi_add_handle(CURLM *multi_handle,
/* possibly we should create a new unique error code for this condition */
return CURLM_BAD_EASY_HANDLE;
+ data->state.timeoutlist = Curl_llist_alloc(multi_freetimeout);
+ if(!data->state.timeoutlist)
+ return CURLM_OUT_OF_MEMORY;
+
/* Now, time to add an easy handle to the multi stack */
easy = calloc(1, sizeof(struct Curl_one_easy));
if(!easy)
@@ -575,6 +612,7 @@ CURLMcode curl_multi_remove_handle(CURLM *multi_handle,
{
struct Curl_multi *multi=(struct Curl_multi *)multi_handle;
struct Curl_one_easy *easy;
+ struct SessionHandle *data = curl_handle;
/* First, make some basic checks that the CURLM handle is a good handle */
if(!GOOD_MULTI_HANDLE(multi))
@@ -585,10 +623,10 @@ CURLMcode curl_multi_remove_handle(CURLM *multi_handle,
return CURLM_BAD_EASY_HANDLE;
/* pick-up from the 'curl_handle' the kept position in the list */
- easy = ((struct SessionHandle *)curl_handle)->multi_pos;
+ easy = data->multi_pos;
if(easy) {
- bool premature = (bool)(easy->state != CURLM_STATE_COMPLETED);
+ bool premature = (bool)(easy->state < CURLM_STATE_COMPLETED);
bool easy_owns_conn = (bool)(easy->easy_conn &&
(easy->easy_conn->data == easy->easy_handle));
@@ -618,6 +656,12 @@ CURLMcode curl_multi_remove_handle(CURLM *multi_handle,
curl_easy_cleanup is called. */
Curl_expire(easy->easy_handle, 0);
+ /* destroy the timeout list that is held in the easy handle */
+ if(data->state.timeoutlist) {
+ Curl_llist_destroy(data->state.timeoutlist, NULL);
+ data->state.timeoutlist = NULL;
+ }
+
if(easy->easy_handle->dns.hostcachetype == HCACHE_MULTI) {
/* clear out the usage of the shared DNS cache */
easy->easy_handle->dns.hostcache = NULL;
@@ -656,6 +700,10 @@ CURLMcode curl_multi_remove_handle(CURLM *multi_handle,
to that since we're not part of that handle anymore */
easy->easy_handle->state.connc = NULL;
+ /* Since we return the connection back to the communal connection pool
+ we mark the last connection as inaccessible */
+ easy->easy_handle->state.lastconnect = -1;
+
/* Modify the connectindex since this handle can't point to the
connection cache anymore.
@@ -679,6 +727,22 @@ CURLMcode curl_multi_remove_handle(CURLM *multi_handle,
Curl_easy_addmulti(easy->easy_handle, NULL); /* clear the association
to this multi handle */
+ {
+ /* make sure there's no pending message in the queue sent from this easy
+ handle */
+ struct curl_llist_element *e;
+
+ for(e = multi->msglist->head; e; e = e->next) {
+ struct Curl_message *msg = e->ptr;
+
+ if(msg->extmsg.easy_handle == easy->easy_handle) {
+ Curl_llist_remove(multi->msglist, e, NULL);
+ /* there can only be one from this specific handle */
+ break;
+ }
+ }
+ }
+
/* make the previous node point to our next */
if(easy->prev)
easy->prev->next = easy->next;
@@ -693,8 +757,6 @@ CURLMcode curl_multi_remove_handle(CURLM *multi_handle,
/* NOTE NOTE NOTE
We do not touch the easy handle here! */
- if(easy->msg)
- free(easy->msg);
free(easy);
multi->num_easy--; /* one less to care about now */
@@ -779,6 +841,7 @@ static int multi_getsock(struct Curl_one_easy *easy,
to be present */
case CURLM_STATE_TOOFAST: /* returns 0, so will not select. */
case CURLM_STATE_COMPLETED:
+ case CURLM_STATE_MSGSENT:
case CURLM_STATE_INIT:
case CURLM_STATE_CONNECT:
case CURLM_STATE_WAITDO:
@@ -866,6 +929,7 @@ CURLMcode curl_multi_fdset(CURLM *multi_handle,
}
static CURLMcode multi_runsingle(struct Curl_multi *multi,
+ struct timeval now,
struct Curl_one_easy *easy)
{
struct Curl_message *msg = NULL;
@@ -876,10 +940,14 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
bool done = FALSE;
CURLMcode result = CURLM_OK;
struct SingleRequest *k;
+ struct SessionHandle *data;
+ long timeout_ms;
if(!GOOD_EASY_HANDLE(easy->easy_handle))
return CURLM_BAD_EASY_HANDLE;
+ data = easy->easy_handle;
+
do {
/* this is a do-while loop just to allow a break to skip to the end
of it */
@@ -887,18 +955,18 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
/* Handle the case when the pipe breaks, i.e., the connection
we're using gets cleaned up and we're left with nothing. */
- if(easy->easy_handle->state.pipe_broke) {
- infof(easy->easy_handle, "Pipe broke: handle 0x%p, url = %s\n",
- easy, easy->easy_handle->state.path);
+ if(data->state.pipe_broke) {
+ infof(data, "Pipe broke: handle 0x%p, url = %s\n",
+ easy, data->state.path);
- if(easy->state != CURLM_STATE_COMPLETED) {
+ if(easy->state < CURLM_STATE_COMPLETED) {
/* Head back to the CONNECT state */
multistate(easy, CURLM_STATE_CONNECT);
result = CURLM_CALL_MULTI_PERFORM;
easy->result = CURLE_OK;
}
- easy->easy_handle->state.pipe_broke = FALSE;
+ data->state.pipe_broke = FALSE;
easy->easy_conn = NULL;
break;
}
@@ -906,31 +974,59 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
if(easy->easy_conn && easy->state > CURLM_STATE_CONNECT &&
easy->state < CURLM_STATE_COMPLETED)
/* Make sure we set the connection's current owner */
- easy->easy_conn->data = easy->easy_handle;
+ easy->easy_conn->data = data;
+
+ if(easy->easy_conn && (easy->state >= CURLM_STATE_CONNECT)) {
+ /* we need to wait for the connect state as only then is the
+ start time stored */
+
+ timeout_ms = Curl_timeleft(easy->easy_conn, &now,
+ easy->state <= CURLM_STATE_WAITDO);
+
+ if(timeout_ms < 0) {
+ /* Handle timed out */
+ if(easy->state == CURLM_STATE_WAITRESOLVE)
+ failf(data, "Resolving timed out after %ld milliseconds",
+ Curl_tvdiff(now, data->progress.t_startsingle));
+ else if(easy->state == CURLM_STATE_WAITCONNECT)
+ failf(data, "Connection timed out after %ld milliseconds",
+ Curl_tvdiff(now, data->progress.t_startsingle));
+ else {
+ k = &data->req;
+ failf(data, "Operation timed out after %ld milliseconds with %"
+ FORMAT_OFF_T " out of %" FORMAT_OFF_T " bytes received",
+ Curl_tvdiff(now, data->progress.t_startsingle), k->bytecount,
+ k->size);
+ }
+ easy->result = CURLE_OPERATION_TIMEDOUT;
+ multistate(easy, CURLM_STATE_COMPLETED);
+ break;
+ }
+ }
switch(easy->state) {
case CURLM_STATE_INIT:
/* init this transfer. */
- easy->result=Curl_pretransfer(easy->easy_handle);
+ easy->result=Curl_pretransfer(data);
if(CURLE_OK == easy->result) {
/* after init, go CONNECT */
multistate(easy, CURLM_STATE_CONNECT);
result = CURLM_CALL_MULTI_PERFORM;
- easy->easy_handle->state.used_interface = Curl_if_multi;
+ data->state.used_interface = Curl_if_multi;
}
break;
case CURLM_STATE_CONNECT:
/* Connect. We get a connection identifier filled in. */
- Curl_pgrsTime(easy->easy_handle, TIMER_STARTSINGLE);
- easy->result = Curl_connect(easy->easy_handle, &easy->easy_conn,
+ Curl_pgrsTime(data, TIMER_STARTSINGLE);
+ easy->result = Curl_connect(data, &easy->easy_conn,
&async, &protocol_connect);
if(CURLE_OK == easy->result) {
/* Add this handle to the send or pend pipeline */
- easy->result = addHandleToSendOrPendPipeline(easy->easy_handle,
+ easy->result = addHandleToSendOrPendPipeline(data,
easy->easy_conn);
if(CURLE_OK == easy->result) {
if(async)
@@ -1013,9 +1109,9 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
if(easy->easy_conn->bits.proxy_connect_closed) {
/* reset the error buffer */
- if(easy->easy_handle->set.errorbuffer)
- easy->easy_handle->set.errorbuffer[0] = '\0';
- easy->easy_handle->state.errorbuf = FALSE;
+ if(data->set.errorbuffer)
+ data->set.errorbuffer[0] = '\0';
+ data->state.errorbuf = FALSE;
easy->result = CURLE_OK;
result = CURLM_CALL_MULTI_PERFORM;
@@ -1087,7 +1183,7 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
}
else if(easy->result) {
/* failure detected */
- Curl_posttransfer(easy->easy_handle);
+ Curl_posttransfer(data);
Curl_done(&easy->easy_conn, easy->result, FALSE);
disconnect_conn = TRUE;
}
@@ -1096,15 +1192,15 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
case CURLM_STATE_WAITDO:
/* Wait for our turn to DO when we're pipelining requests */
#ifdef DEBUGBUILD
- infof(easy->easy_handle, "Conn %ld send pipe %zu inuse %d athead %d\n",
+ infof(data, "Conn %ld send pipe %zu inuse %d athead %d\n",
easy->easy_conn->connectindex,
easy->easy_conn->send_pipe->size,
easy->easy_conn->writechannel_inuse?1:0,
- isHandleAtHead(easy->easy_handle,
+ isHandleAtHead(data,
easy->easy_conn->send_pipe)?1:0);
#endif
if(!easy->easy_conn->writechannel_inuse &&
- isHandleAtHead(easy->easy_handle,
+ isHandleAtHead(data,
easy->easy_conn->send_pipe)) {
/* Grab the channel */
easy->easy_conn->writechannel_inuse = TRUE;
@@ -1114,7 +1210,7 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
break;
case CURLM_STATE_DO:
- if(easy->easy_handle->set.connect_only) {
+ if(data->set.connect_only) {
/* keep connection open for application to use the socket */
easy->easy_conn->bits.close = FALSE;
multistate(easy, CURLM_STATE_DONE);
@@ -1128,6 +1224,17 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
if(CURLE_OK == easy->result) {
if(!dophase_done) {
+ /* some steps needed for wildcard matching */
+ if(data->set.wildcardmatch) {
+ struct WildcardData *wc = &data->wildcard;
+ if(wc->state == CURLWC_DONE || wc->state == CURLWC_SKIP) {
+ /* skip some states if it is important */
+ Curl_done(&easy->easy_conn, CURLE_OK, FALSE);
+ multistate(easy, CURLM_STATE_DONE);
+ result = CURLM_CALL_MULTI_PERFORM;
+ break;
+ }
+ }
/* DO was not completed in one function call, we must continue
DOING... */
multistate(easy, CURLM_STATE_DOING);
@@ -1168,7 +1275,7 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
else
retry = (bool)(newurl?TRUE:FALSE);
- Curl_posttransfer(easy->easy_handle);
+ Curl_posttransfer(data);
drc = Curl_done(&easy->easy_conn, easy->result, FALSE);
/* When set to retry the connection, we must to go back to
@@ -1176,7 +1283,7 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
if(retry) {
if ((drc == CURLE_OK) || (drc == CURLE_SEND_ERROR)) {
follow = FOLLOW_RETRY;
- drc = Curl_follow(easy->easy_handle, newurl, follow);
+ drc = Curl_follow(data, newurl, follow);
if(drc == CURLE_OK) {
multistate(easy, CURLM_STATE_CONNECT);
result = CURLM_CALL_MULTI_PERFORM;
@@ -1201,7 +1308,7 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
}
else {
/* failure detected */
- Curl_posttransfer(easy->easy_handle);
+ Curl_posttransfer(data);
Curl_done(&easy->easy_conn, easy->result, FALSE);
disconnect_conn = TRUE;
}
@@ -1230,7 +1337,7 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
}
else {
/* failure detected */
- Curl_posttransfer(easy->easy_handle);
+ Curl_posttransfer(data);
Curl_done(&easy->easy_conn, easy->result, FALSE);
disconnect_conn = TRUE;
}
@@ -1256,7 +1363,7 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
}
else {
/* failure detected */
- Curl_posttransfer(easy->easy_handle);
+ Curl_posttransfer(data);
Curl_done(&easy->easy_conn, easy->result, FALSE);
disconnect_conn = TRUE;
}
@@ -1265,7 +1372,7 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
case CURLM_STATE_DO_DONE:
/* Move ourselves from the send to recv pipeline */
- moveHandleFromSendToRecvPipeline(easy->easy_handle, easy->easy_conn);
+ moveHandleFromSendToRecvPipeline(data, easy->easy_conn);
/* Check if we can move pending requests to send pipe */
checkPendPipeline(easy->easy_conn);
multistate(easy, CURLM_STATE_WAITPERFORM);
@@ -1275,7 +1382,7 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
case CURLM_STATE_WAITPERFORM:
/* Wait for our turn to PERFORM */
if(!easy->easy_conn->readchannel_inuse &&
- isHandleAtHead(easy->easy_handle,
+ isHandleAtHead(data,
easy->easy_conn->recv_pipe)) {
/* Grab the channel */
easy->easy_conn->readchannel_inuse = TRUE;
@@ -1284,11 +1391,11 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
}
#ifdef DEBUGBUILD
else {
- infof(easy->easy_handle, "Conn %ld recv pipe %zu inuse %d athead %d\n",
+ infof(data, "Conn %ld recv pipe %zu inuse %d athead %d\n",
easy->easy_conn->connectindex,
easy->easy_conn->recv_pipe->size,
easy->easy_conn->readchannel_inuse?1:0,
- isHandleAtHead(easy->easy_handle,
+ isHandleAtHead(data,
easy->easy_conn->recv_pipe)?1:0);
}
#endif
@@ -1296,37 +1403,50 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
case CURLM_STATE_TOOFAST: /* limit-rate exceeded in either direction */
/* if both rates are within spec, resume transfer */
- Curl_pgrsUpdate(easy->easy_conn);
- if( ( ( easy->easy_handle->set.max_send_speed == 0 ) ||
- ( easy->easy_handle->progress.ulspeed <
- easy->easy_handle->set.max_send_speed ) ) &&
- ( ( easy->easy_handle->set.max_recv_speed == 0 ) ||
- ( easy->easy_handle->progress.dlspeed <
- easy->easy_handle->set.max_recv_speed ) )
- )
+ if( ( (data->set.max_send_speed == 0) ||
+ (data->progress.ulspeed < data->set.max_send_speed )) &&
+ ( (data->set.max_recv_speed == 0) ||
+ (data->progress.dlspeed < data->set.max_recv_speed) ) )
multistate(easy, CURLM_STATE_PERFORM);
break;
case CURLM_STATE_PERFORM:
- /* check if over speed */
- if( ( ( easy->easy_handle->set.max_send_speed > 0 ) &&
- ( easy->easy_handle->progress.ulspeed >
- easy->easy_handle->set.max_send_speed ) ) ||
- ( ( easy->easy_handle->set.max_recv_speed > 0 ) &&
- ( easy->easy_handle->progress.dlspeed >
- easy->easy_handle->set.max_recv_speed ) )
- ) {
- /* Transfer is over the speed limit. Change state. TODO: Call
- * Curl_expire() with the time left until we're targeted to be below
- * the speed limit again. */
- multistate(easy, CURLM_STATE_TOOFAST );
+ /* check if over send speed */
+ if( (data->set.max_send_speed > 0) &&
+ (data->progress.ulspeed > data->set.max_send_speed) ) {
+ int buffersize;
+
+ multistate(easy, CURLM_STATE_TOOFAST);
+
+ /* calculate upload rate-limitation timeout. */
+ buffersize = (int)(data->set.buffer_size ?
+ data->set.buffer_size : BUFSIZE);
+ timeout_ms = Curl_sleep_time(data->set.max_send_speed,
+ data->progress.ulspeed, buffersize);
+ Curl_expire(data, timeout_ms);
+ break;
+ }
+
+ /* check if over recv speed */
+ if( (data->set.max_recv_speed > 0) &&
+ (data->progress.dlspeed > data->set.max_recv_speed) ) {
+ int buffersize;
+
+ multistate(easy, CURLM_STATE_TOOFAST);
+
+ /* Calculate download rate-limitation timeout. */
+ buffersize = (int)(data->set.buffer_size ?
+ data->set.buffer_size : BUFSIZE);
+ timeout_ms = Curl_sleep_time(data->set.max_recv_speed,
+ data->progress.dlspeed, buffersize);
+ Curl_expire(data, timeout_ms);
break;
}
/* read/write data if it is ready to do so */
easy->result = Curl_readwrite(easy->easy_conn, &done);
- k = &easy->easy_handle->req;
+ k = &data->req;
if(!(k->keepon & KEEP_RECV)) {
/* We're done receiving */
@@ -1338,7 +1458,7 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
easy->easy_conn->writechannel_inuse = FALSE;
}
- if(easy->result) {
+ if(easy->result) {
/* The transfer phase returned error, we mark the connection to get
* closed to prevent being re-used. This is because we can't possibly
* know if the connection is in a good shape or not now. Unless it is
@@ -1348,7 +1468,7 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
if(!(easy->easy_conn->protocol & PROT_DUALCHANNEL))
easy->easy_conn->bits.close = TRUE;
- Curl_posttransfer(easy->easy_handle);
+ Curl_posttransfer(data);
Curl_done(&easy->easy_conn, easy->result, FALSE);
}
else if(TRUE == done) {
@@ -1361,10 +1481,10 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
retry = (bool)(newurl?TRUE:FALSE);
/* call this even if the readwrite function returned error */
- Curl_posttransfer(easy->easy_handle);
+ Curl_posttransfer(data);
/* we're no longer receving */
- moveHandleFromRecvToDonePipeline(easy->easy_handle,
+ moveHandleFromRecvToDonePipeline(data,
easy->easy_conn);
/* expire the new receiving pipeline head */
@@ -1376,19 +1496,19 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
/* When we follow redirects or is set to retry the connection, we must
to go back to the CONNECT state */
- if(easy->easy_handle->req.newurl || retry) {
+ if(data->req.newurl || retry) {
if(!retry) {
/* if the URL is a follow-location and not just a retried request
then figure out the URL here */
- newurl = easy->easy_handle->req.newurl;
- easy->easy_handle->req.newurl = NULL;
+ newurl = data->req.newurl;
+ data->req.newurl = NULL;
follow = FOLLOW_REDIR;
}
else
follow = FOLLOW_RETRY;
easy->result = Curl_done(&easy->easy_conn, CURLE_OK, FALSE);
if(easy->result == CURLE_OK)
- easy->result = Curl_follow(easy->easy_handle, newurl, follow);
+ easy->result = Curl_follow(data, newurl, follow);
if(CURLE_OK == easy->result) {
multistate(easy, CURLM_STATE_CONNECT);
result = CURLM_CALL_MULTI_PERFORM;
@@ -1403,10 +1523,10 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
/* but first check to see if we got a location info even though we're
not following redirects */
- if (easy->easy_handle->req.location) {
- newurl = easy->easy_handle->req.location;
- easy->easy_handle->req.location = NULL;
- easy->result = Curl_follow(easy->easy_handle, newurl, FOLLOW_FAKE);
+ if (data->req.location) {
+ newurl = data->req.location;
+ data->req.location = NULL;
+ easy->result = Curl_follow(data, newurl, FOLLOW_FAKE);
if (easy->result)
free(newurl);
}
@@ -1423,9 +1543,9 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
if(easy->easy_conn) {
/* Remove ourselves from the receive and done pipelines. Handle
should be on one of these lists, depending upon how we got here. */
- Curl_removeHandleFromPipeline(easy->easy_handle,
+ Curl_removeHandleFromPipeline(data,
easy->easy_conn->recv_pipe);
- Curl_removeHandleFromPipeline(easy->easy_handle,
+ Curl_removeHandleFromPipeline(data,
easy->easy_conn->done_pipe);
/* Check if we can move pending requests to send pipe */
checkPendPipeline(easy->easy_conn);
@@ -1449,6 +1569,16 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
easy->easy_conn = NULL;
}
+ if(data->set.wildcardmatch) {
+ if(data->wildcard.state != CURLWC_DONE) {
+ /* if a wildcard is set and we are not ending -> lets start again
+ with CURLM_STATE_INIT */
+ result = CURLM_CALL_MULTI_PERFORM;
+ multistate(easy, CURLM_STATE_INIT);
+ break;
+ }
+ }
+
/* after we have DONE what we're supposed to do, go COMPLETED, and
it doesn't matter what the Curl_done() returned! */
multistate(easy, CURLM_STATE_COMPLETED);
@@ -1464,13 +1594,18 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
/* Important: reset the conn pointer so that we don't point to memory
that could be freed anytime */
easy->easy_conn = NULL;
+
+ Curl_expire(data, 0); /* stop all timers */
break;
+ case CURLM_STATE_MSGSENT:
+ return CURLM_OK; /* do nothing */
+
default:
return CURLM_INTERNAL_ERROR;
}
- if(CURLM_STATE_COMPLETED != easy->state) {
+ if(CURLM_STATE_COMPLETED > easy->state) {
if(CURLE_OK != easy->result) {
/*
* If an error was returned, and we aren't in completed state now,
@@ -1480,17 +1615,17 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
/* NOTE: no attempt to disconnect connections must be made
in the case blocks above - cleanup happens only here */
- easy->easy_handle->state.pipe_broke = FALSE;
+ data->state.pipe_broke = FALSE;
if(easy->easy_conn) {
/* if this has a connection, unsubscribe from the pipelines */
easy->easy_conn->writechannel_inuse = FALSE;
easy->easy_conn->readchannel_inuse = FALSE;
- Curl_removeHandleFromPipeline(easy->easy_handle,
+ Curl_removeHandleFromPipeline(data,
easy->easy_conn->send_pipe);
- Curl_removeHandleFromPipeline(easy->easy_handle,
+ Curl_removeHandleFromPipeline(data,
easy->easy_conn->recv_pipe);
- Curl_removeHandleFromPipeline(easy->easy_handle,
+ Curl_removeHandleFromPipeline(data,
easy->easy_conn->done_pipe);
/* Check if we can move pending requests to send pipe */
checkPendPipeline(easy->easy_conn);
@@ -1507,30 +1642,29 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
multistate(easy, CURLM_STATE_COMPLETED);
}
+ /* if there's still a connection to use, call the progress function */
+ else if(easy->easy_conn && Curl_pgrsUpdate(easy->easy_conn))
+ easy->result = CURLE_ABORTED_BY_CALLBACK;
}
} while(0);
- if((CURLM_STATE_COMPLETED == easy->state) && !easy->msg) {
- if(easy->easy_handle->dns.hostcachetype == HCACHE_MULTI) {
+
+ if(CURLM_STATE_COMPLETED == easy->state) {
+ if(data->dns.hostcachetype == HCACHE_MULTI) {
/* clear out the usage of the shared DNS cache */
- easy->easy_handle->dns.hostcache = NULL;
- easy->easy_handle->dns.hostcachetype = HCACHE_NONE;
+ data->dns.hostcache = NULL;
+ data->dns.hostcachetype = HCACHE_NONE;
}
- /* now add a node to the Curl_message linked list with this info */
- msg = malloc(sizeof(struct Curl_message));
-
- if(!msg)
- return CURLM_OUT_OF_MEMORY;
+ /* now fill in the Curl_message with this info */
+ msg = &easy->msg;
msg->extmsg.msg = CURLMSG_DONE;
- msg->extmsg.easy_handle = easy->easy_handle;
+ msg->extmsg.easy_handle = data;
msg->extmsg.data.result = easy->result;
- msg->next = NULL;
- easy->msg = msg;
- easy->msg_num = 1; /* there is one unread message here */
+ result = multi_addmsg(multi, msg);
- multi->num_msgs++; /* increase message counter */
+ multistate(easy, CURLM_STATE_MSGSENT);
}
return result;
@@ -1543,6 +1677,7 @@ CURLMcode curl_multi_perform(CURLM *multi_handle, int *running_handles)
struct Curl_one_easy *easy;
CURLMcode returncode=CURLM_OK;
struct Curl_tree *t;
+ struct timeval now = Curl_tvnow();
if(!GOOD_MULTI_HANDLE(multi))
return CURLM_BAD_HANDLE;
@@ -1550,11 +1685,26 @@ CURLMcode curl_multi_perform(CURLM *multi_handle, int *running_handles)
easy=multi->easy.next;
while(easy != &multi->easy) {
CURLMcode result;
+ struct WildcardData *wc = &easy->easy_handle->wildcard;
+
+ if(easy->easy_handle->set.wildcardmatch) {
+ if(!wc->filelist) {
+ CURLcode ret = Curl_wildcard_init(wc); /* init wildcard structures */
+ if(ret)
+ return CURLM_OUT_OF_MEMORY;
+ }
+ }
do
- result = multi_runsingle(multi, easy);
+ result = multi_runsingle(multi, now, easy);
while (CURLM_CALL_MULTI_PERFORM == result);
+ if(easy->easy_handle->set.wildcardmatch) {
+ /* destruct wildcard structures if it is needed */
+ if(wc->state == CURLWC_DONE || result)
+ Curl_wildcard_dtor(wc);
+ }
+
if(result)
returncode = result;
@@ -1565,20 +1715,17 @@ CURLMcode curl_multi_perform(CURLM *multi_handle, int *running_handles)
* Simply remove all expired timers from the splay since handles are dealt
* with unconditionally by this function and curl_multi_timeout() requires
* that already passed/handled expire times are removed from the splay.
+ *
+ * It is important that the 'now' value is set at the entry of this function
+ * and not for the current time as it may have ticked a little while since
+ * then and then we risk this loop to remove timers that actually have not
+ * been handled!
*/
do {
- struct timeval now = Curl_tvnow();
-
multi->timetree = Curl_splaygetbest(now, multi->timetree, &t);
- if(t) {
- struct SessionHandle *d = t->payload;
- struct timeval* tv = &d->state.expiretime;
-
- /* clear the expire times within the handles that we remove from the
- splay tree */
- tv->tv_sec = 0;
- tv->tv_usec = 0;
- }
+ if(t)
+ /* the removed may have another timeout in queue */
+ (void)add_next_timeout(now, multi, t->payload);
} while(t);
@@ -1590,14 +1737,6 @@ CURLMcode curl_multi_perform(CURLM *multi_handle, int *running_handles)
return returncode;
}
-/* This is called when an easy handle is cleanup'ed that is part of a multi
- handle */
-void Curl_multi_rmeasy(void *multi_handle, CURL *easy_handle)
-{
- curl_multi_remove_handle(multi_handle, easy_handle);
-}
-
-
CURLMcode curl_multi_cleanup(CURLM *multi_handle)
{
struct Curl_multi *multi=(struct Curl_multi *)multi_handle;
@@ -1638,6 +1777,9 @@ CURLMcode curl_multi_cleanup(CURLM *multi_handle)
Curl_rm_connc(multi->connc);
+ /* remove the pending list of messages */
+ Curl_llist_destroy(multi->msglist, NULL);
+
/* remove all easy handles */
easy = multi->easy.next;
while(easy != &multi->easy) {
@@ -1653,8 +1795,6 @@ CURLMcode curl_multi_cleanup(CURLM *multi_handle)
Curl_easy_addmulti(easy->easy_handle, NULL); /* clear the association */
- if(easy->msg)
- free(easy->msg);
free(easy);
easy = nexteasy;
}
@@ -1667,33 +1807,38 @@ CURLMcode curl_multi_cleanup(CURLM *multi_handle)
return CURLM_BAD_HANDLE;
}
+/*
+ * curl_multi_info_read()
+ *
+ * This function is the primary way for a multi/multi_socket application to
+ * figure out if a transfer has ended. We MUST make this function as fast as
+ * possible as it will be polled frequently and we MUST NOT scan any lists in
+ * here to figure out things. We must scale fine to thousands of handles and
+ * beyond. The current design is fully O(1).
+ */
+
CURLMsg *curl_multi_info_read(CURLM *multi_handle, int *msgs_in_queue)
{
struct Curl_multi *multi=(struct Curl_multi *)multi_handle;
+ struct Curl_message *msg;
*msgs_in_queue = 0; /* default to none */
- if(GOOD_MULTI_HANDLE(multi)) {
- struct Curl_one_easy *easy;
+ if(GOOD_MULTI_HANDLE(multi) && Curl_llist_count(multi->msglist)) {
+ /* there is one or more messages in the list */
+ struct curl_llist_element *e;
- if(!multi->num_msgs)
- return NULL; /* no messages left to return */
+ /* extract the head of the list to return */
+ e = multi->msglist->head;
- easy=multi->easy.next;
- while(easy != &multi->easy) {
- if(easy->msg_num) {
- easy->msg_num--;
- break;
- }
- easy = easy->next;
- }
- if(!easy)
- return NULL; /* this means internal count confusion really */
+ msg = e->ptr;
- multi->num_msgs--;
- *msgs_in_queue = multi->num_msgs;
+ /* remove the extracted entry */
+ Curl_llist_remove(multi->msglist, e, NULL);
- return &easy->msg->extmsg;
+ *msgs_in_queue = (int)Curl_llist_count(multi->msglist);
+
+ return &msg->extmsg;
}
else
return NULL;
@@ -1757,11 +1902,12 @@ static void singlesocket(struct Curl_multi *multi,
return;
}
+ /* we know (entry != NULL) at this point, see the logic above */
multi->socket_cb(easy->easy_handle,
s,
action,
multi->socket_userp,
- entry ? entry->socketp : NULL);
+ entry->socketp);
entry->action = action; /* store the current action state */
}
@@ -1851,6 +1997,62 @@ static void singlesocket(struct Curl_multi *multi,
easy->numsocks = num;
}
+/*
+ * add_next_timeout()
+ *
+ * Each SessionHandle has a list of timeouts. The add_next_timeout() is called
+ * when it has just been removed from the splay tree because the timeout has
+ * expired. This function is then to advance in the list to pick the next
+ * timeout to use (skip the already expired ones) and add this node back to
+ * the splay tree again.
+ *
+ * The splay tree only has each sessionhandle as a single node and the nearest
+ * timeout is used to sort it on.
+ */
+static CURLMcode add_next_timeout(struct timeval now,
+ struct Curl_multi *multi,
+ struct SessionHandle *d)
+{
+ struct timeval *tv = &d->state.expiretime;
+ struct curl_llist *list = d->state.timeoutlist;
+ struct curl_llist_element *e;
+
+ /* move over the timeout list for this specific handle and remove all
+ timeouts that are now passed tense and store the next pending
+ timeout in *tv */
+ for(e = list->head; e; ) {
+ struct curl_llist_element *n = e->next;
+ long diff = curlx_tvdiff(*(struct timeval *)e->ptr, now);
+ if(diff <= 0)
+ /* remove outdated entry */
+ Curl_llist_remove(list, e, NULL);
+ else
+ /* the list is sorted so get out on the first mismatch */
+ break;
+ e = n;
+ }
+ if(!list->size) {
+ /* clear the expire times within the handles that we remove from the
+ splay tree */
+ tv->tv_sec = 0;
+ tv->tv_usec = 0;
+ }
+ else {
+ e = list->head;
+ /* copy the first entry to 'tv' */
+ memcpy(tv, e->ptr, sizeof(*tv));
+
+ /* remove first entry from list */
+ Curl_llist_remove(list, e, NULL);
+
+ /* insert this node again into the splay */
+ multi->timetree = Curl_splayinsert(*tv, multi->timetree,
+ &d->state.timenode);
+ }
+ return CURLM_OK;
+}
+
+
static CURLMcode multi_socket(struct Curl_multi *multi,
bool checkall,
curl_socket_t s,
@@ -1860,6 +2062,7 @@ static CURLMcode multi_socket(struct Curl_multi *multi,
CURLMcode result = CURLM_OK;
struct SessionHandle *data = NULL;
struct Curl_tree *t;
+ struct timeval now = Curl_tvnow();
if(checkall) {
struct Curl_one_easy *easyp;
@@ -1914,7 +2117,7 @@ static CURLMcode multi_socket(struct Curl_multi *multi,
data->set.one_easy->easy_conn->cselect_bits = ev_bitmask;
do
- result = multi_runsingle(multi, data->set.one_easy);
+ result = multi_runsingle(multi, now, data->set.one_easy);
while (CURLM_CALL_MULTI_PERFORM == result);
if(data->set.one_easy->easy_conn)
@@ -1934,18 +2137,23 @@ static CURLMcode multi_socket(struct Curl_multi *multi,
}
}
+ now.tv_usec += 40000; /* compensate for bad precision timers that might've
+ triggered too early */
+ if(now.tv_usec > 1000000) {
+ now.tv_sec++;
+ now.tv_usec -= 1000000;
+ }
+
/*
* The loop following here will go on as long as there are expire-times left
* to process in the splay and 'data' will be re-assigned for every expired
* handle we deal with.
*/
do {
- struct timeval now;
-
/* the first loop lap 'data' can be NULL */
if(data) {
do
- result = multi_runsingle(multi, data->set.one_easy);
+ result = multi_runsingle(multi, now, data->set.one_easy);
while (CURLM_CALL_MULTI_PERFORM == result);
if(CURLM_OK >= result)
@@ -1957,20 +2165,10 @@ static CURLMcode multi_socket(struct Curl_multi *multi,
/* Check if there's one (more) expired timer to deal with! This function
extracts a matching node if there is one */
- now = Curl_tvnow();
- now.tv_usec += 1000; /* to compensate for the truncating of 999us to 0ms,
- we always add time here to make the comparison
- below better */
-
multi->timetree = Curl_splaygetbest(now, multi->timetree, &t);
if(t) {
- /* assign 'data' to be the easy handle we just removed from the splay
- tree */
- data = t->payload;
- /* clear the expire time within the handle we removed from the
- splay tree */
- data->state.expiretime.tv_sec = 0;
- data->state.expiretime.tv_usec = 0;
+ data = t->payload; /* assign this for next loop */
+ (void)add_next_timeout(now, multi, t->payload);
}
} while(t);
@@ -2106,12 +2304,22 @@ CURLMcode curl_multi_timeout(CURLM *multi_handle,
static int update_timer(struct Curl_multi *multi)
{
long timeout_ms;
+
if(!multi->timer_cb)
return 0;
- if( multi_timeout(multi, &timeout_ms) != CURLM_OK )
+ if(multi_timeout(multi, &timeout_ms)) {
return -1;
- if( timeout_ms < 0 )
+ }
+ if( timeout_ms < 0 ) {
+ static const struct timeval none={0,0};
+ if(Curl_splaycomparekeys(none, multi->timer_lastcall)) {
+ multi->timer_lastcall = none;
+ /* there's no timeout now but there was one previously, tell the app to
+ disable it */
+ return multi->timer_cb((CURLM*)multi, -1, multi->timer_userp);
+ }
return 0;
+ }
/* When multi_timeout() is done, multi->timetree points to the node with the
* timeout we got the (relative) time-out time for. We can thus easily check
@@ -2129,7 +2337,9 @@ static CURLcode addHandleToSendOrPendPipeline(struct SessionHandle *handle,
struct connectdata *conn)
{
size_t pipeLen = conn->send_pipe->size + conn->recv_pipe->size;
+ struct curl_llist_element *sendhead = conn->send_pipe->head;
struct curl_llist *pipeline;
+ CURLcode rc;
if(!Curl_isPipeliningEnabled(handle) ||
pipeLen == 0)
@@ -2142,7 +2352,17 @@ static CURLcode addHandleToSendOrPendPipeline(struct SessionHandle *handle,
pipeline = conn->pend_pipe;
}
- return Curl_addHandleToPipeline(handle, pipeline);
+ rc = Curl_addHandleToPipeline(handle, pipeline);
+
+ if (pipeline == conn->send_pipe && sendhead != conn->send_pipe->head) {
+ /* this is a new one as head, expire it */
+ conn->writechannel_inuse = FALSE; /* not in use yet */
+ infof(conn->data, "%p is at send pipe head!\n",
+ conn->send_pipe->head->ptr);
+ Curl_expire(conn->send_pipe->head->ptr, 1);
+ }
+
+ return rc;
}
static int checkPendPipeline(struct connectdata *conn)
@@ -2242,10 +2462,74 @@ static bool isHandleAtHead(struct SessionHandle *handle,
return FALSE;
}
-/* given a number of milliseconds from now to use to set the 'act before
- this'-time for the transfer, to be extracted by curl_multi_timeout()
+/*
+ * multi_freetimeout()
+ *
+ * Callback used by the llist system when a single timeout list entry is
+ * destroyed.
+ */
+static void multi_freetimeout(void *user, void *entryptr)
+{
+ (void)user;
+
+ /* the entry was plain malloc()'ed */
+ free(entryptr);
+}
+
+/*
+ * multi_addtimeout()
+ *
+ * Add a timestamp to the list of timeouts. Keep the list sorted so that head
+ * of list is always the timeout nearest in time.
+ *
+ */
+static CURLMcode
+multi_addtimeout(struct curl_llist *timeoutlist,
+ struct timeval *stamp)
+{
+ struct curl_llist_element *e;
+ struct timeval *timedup;
+ struct curl_llist_element *prev = NULL;
+
+ timedup = malloc(sizeof(*timedup));
+ if(!timedup)
+ return CURLM_OUT_OF_MEMORY;
+
+ /* copy the timestamp */
+ memcpy(timedup, stamp, sizeof(*timedup));
+
+ if(Curl_llist_count(timeoutlist)) {
+ /* find the correct spot in the list */
+ for(e = timeoutlist->head; e; e = e->next) {
+ struct timeval *checktime = e->ptr;
+ long diff = curlx_tvdiff(*checktime, *timedup);
+ if(diff > 0)
+ break;
+ prev = e;
+ }
+
+ }
+ /* else
+ this is the first timeout on the list */
- Pass zero to clear the timeout value for this handle.
+ if(!Curl_llist_insert_next(timeoutlist, prev, timedup)) {
+ free(timedup);
+ return CURLM_OUT_OF_MEMORY;
+ }
+
+ return CURLM_OK;
+}
+
+/*
+ * Curl_expire()
+ *
+ * given a number of milliseconds from now to use to set the 'act before
+ * this'-time for the transfer, to be extracted by curl_multi_timeout()
+ *
+ * Note that the timeout will be added to a queue of timeouts if it defines a
+ * moment in time that is later than the current head of queue.
+ *
+ * Pass zero to clear all timeout values for this handle.
*/
void Curl_expire(struct SessionHandle *data, long milli)
{
@@ -2263,11 +2547,18 @@ void Curl_expire(struct SessionHandle *data, long milli)
if(nowp->tv_sec || nowp->tv_usec) {
/* Since this is an cleared time, we must remove the previous entry from
the splay tree */
+ struct curl_llist *list = data->state.timeoutlist;
+
rc = Curl_splayremovebyaddr(multi->timetree,
&data->state.timenode,
&multi->timetree);
if(rc)
infof(data, "Internal error clearing splay node = %d\n", rc);
+
+ /* flush the timeout list too */
+ while(list->size > 0)
+ Curl_llist_remove(list, list->tail, NULL);
+
infof(data, "Expire cleared\n");
nowp->tv_sec = 0;
nowp->tv_usec = 0;
@@ -2293,9 +2584,16 @@ void Curl_expire(struct SessionHandle *data, long milli)
Compare if the new time is earlier, and only remove-old/add-new if it
is. */
long diff = curlx_tvdiff(set, *nowp);
- if(diff > 0)
- /* the new expire time was later so we don't change this */
+ if(diff > 0) {
+ /* the new expire time was later so just add it to the queue
+ and get out */
+ multi_addtimeout(data->state.timeoutlist, &set);
return;
+ }
+
+ /* the new time is newer than the presently set one, so add the current
+ to the queue and update the head */
+ multi_addtimeout(data->state.timeoutlist, nowp);
/* Since this is an updated time, we must remove the previous entry from
the splay tree first and then re-add the new value */
@@ -2307,10 +2605,6 @@ void Curl_expire(struct SessionHandle *data, long milli)
}
*nowp = set;
-#if 0
- infof(data, "Expire at %ld / %ld (%ldms) %p\n",
- (long)nowp->tv_sec, (long)nowp->tv_usec, milli, data);
-#endif
data->state.timenode.payload = data;
multi->timetree = Curl_splayinsert(*nowp,
multi->timetree,
@@ -2462,7 +2756,7 @@ void Curl_multi_dump(const struct Curl_multi *multi_handle)
fprintf(stderr, "* Multi status: %d handles, %d alive\n",
multi->num_easy, multi->num_alive);
for(easy=multi->easy.next; easy != &multi->easy; easy = easy->next) {
- if(easy->state != CURLM_STATE_COMPLETED) {
+ if(easy->state < CURLM_STATE_COMPLETED) {
/* only display handles that are not completed */
fprintf(stderr, "handle %p, state %s, %d sockets\n",
(void *)easy->easy_handle,
diff --git a/lib/multiif.h b/lib/multiif.h
index 798544e..7691818 100644
--- a/lib/multiif.h
+++ b/lib/multiif.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -27,8 +27,6 @@
*/
void Curl_expire(struct SessionHandle *data, long milli);
-void Curl_multi_rmeasy(void *multi, CURL *data);
-
bool Curl_multi_canPipeline(const struct Curl_multi* multi);
void Curl_multi_handlePipeBreak(struct SessionHandle *data);
diff --git a/lib/nss.c b/lib/nss.c
index 0f8ebd5..6d3f12c 100644
--- a/lib/nss.c
+++ b/lib/nss.c
@@ -63,6 +63,7 @@
#include <secport.h>
#include <certdb.h>
#include <base64.h>
+#include <cert.h>
#include "curl_memory.h"
#include "rawstr.h"
@@ -79,6 +80,7 @@
PRFileDesc *PR_ImportTCPSocket(PRInt32 osfd);
PRLock * nss_initlock = NULL;
+PRLock * nss_crllock = NULL;
volatile int initialized = 0;
@@ -411,78 +413,90 @@ static int nss_load_cert(struct ssl_connect_data *ssl,
return 1;
}
-static int nss_load_crl(const char* crlfilename, PRBool ascii)
+/* add given CRL to cache if it is not already there */
+static SECStatus nss_cache_crl(SECItem *crlDER)
{
- PRFileDesc *infile;
- PRStatus prstat;
- PRFileInfo info;
- PRInt32 nb;
- int rv;
- SECItem crlDER;
- CERTSignedCrl *crl=NULL;
- PK11SlotInfo *slot=NULL;
-
- infile = PR_Open(crlfilename,PR_RDONLY,0);
- if (!infile) {
- return 0;
+ CERTCertDBHandle *db = CERT_GetDefaultCertDB();
+ CERTSignedCrl *crl = SEC_FindCrlByDERCert(db, crlDER, 0);
+ if(crl) {
+ /* CRL already cached */
+ SEC_DestroyCrl(crl);
+ SECITEM_FreeItem(crlDER, PR_FALSE);
+ return SECSuccess;
}
- crlDER.data = NULL;
- prstat = PR_GetOpenFileInfo(infile,&info);
- if (prstat!=PR_SUCCESS)
- return 0;
- if (ascii) {
- SECItem filedata;
- char *asc,*body;
- filedata.data = NULL;
- if (!SECITEM_AllocItem(NULL,&filedata,info.size))
- return 0;
- nb = PR_Read(infile,filedata.data,info.size);
- if (nb!=info.size)
- return 0;
- asc = (char*)filedata.data;
- if (!asc)
- return 0;
- body=strstr(asc,"-----BEGIN");
- if (body != NULL) {
- char *trailer=NULL;
- asc = body;
- body = PORT_Strchr(asc,'\n');
- if (!body)
- body = PORT_Strchr(asc,'\r');
- if (body)
- trailer = strstr(++body,"-----END");
- if (trailer!=NULL)
- *trailer='\0';
- else
- return 0;
- }
- else {
- body = asc;
- }
- rv = ATOB_ConvertAsciiToItem(&crlDER,body);
- PORT_Free(filedata.data);
- if (rv)
- return 0;
+ /* acquire lock before call of CERT_CacheCRL() */
+ PR_Lock(nss_crllock);
+ if(SECSuccess != CERT_CacheCRL(db, crlDER)) {
+ /* unable to cache CRL */
+ PR_Unlock(nss_crllock);
+ SECITEM_FreeItem(crlDER, PR_FALSE);
+ return SECFailure;
}
- else {
- if (!SECITEM_AllocItem(NULL,&crlDER,info.size))
- return 0;
- nb = PR_Read(infile,crlDER.data,info.size);
- if (nb!=info.size)
- return 0;
+
+ /* we need to clear session cache, so that the CRL could take effect */
+ SSL_ClearSessionCache();
+ PR_Unlock(nss_crllock);
+ return SECSuccess;
+}
+
+static SECStatus nss_load_crl(const char* crlfilename)
+{
+ PRFileDesc *infile;
+ PRFileInfo info;
+ SECItem filedata = { 0, NULL, 0 };
+ SECItem crlDER = { 0, NULL, 0 };
+ char *body;
+
+ infile = PR_Open(crlfilename, PR_RDONLY, 0);
+ if(!infile)
+ return SECFailure;
+
+ if(PR_SUCCESS != PR_GetOpenFileInfo(infile, &info))
+ goto fail;
+
+ if(!SECITEM_AllocItem(NULL, &filedata, info.size + /* zero ended */ 1))
+ goto fail;
+
+ if(info.size != PR_Read(infile, filedata.data, info.size))
+ goto fail;
+
+ /* place a trailing zero right after the visible data */
+ body = (char*)filedata.data;
+ body[--filedata.len] = '\0';
+
+ body = strstr(body, "-----BEGIN");
+ if(body) {
+ /* assume ASCII */
+ char *trailer;
+ char *begin = PORT_Strchr(body, '\n');
+ if(!begin)
+ begin = PORT_Strchr(body, '\r');
+ if(!begin)
+ goto fail;
+
+ trailer = strstr(++begin, "-----END");
+ if(!trailer)
+ goto fail;
+
+ /* retrieve DER from ASCII */
+ *trailer = '\0';
+ if(ATOB_ConvertAsciiToItem(&crlDER, begin))
+ goto fail;
+
+ SECITEM_FreeItem(&filedata, PR_FALSE);
}
+ else
+ /* assume DER */
+ crlDER = filedata;
- slot = PK11_GetInternalKeySlot();
- crl = PK11_ImportCRL(slot,&crlDER,
- NULL,SEC_CRL_TYPE,
- NULL,CRL_IMPORT_DEFAULT_OPTIONS,
- NULL,(CRL_DECODE_DEFAULT_OPTIONS|
- CRL_DECODE_DONT_COPY_DER));
- if (slot) PK11_FreeSlot(slot);
- if (!crl) return 0;
- SEC_DestroyCrl(crl);
- return 1;
+ PR_Close(infile);
+ return nss_cache_crl(&crlDER);
+
+fail:
+ PR_Close(infile);
+ SECITEM_FreeItem(&filedata, PR_FALSE);
+ return SECFailure;
}
static int nss_load_key(struct connectdata *conn, int sockindex,
@@ -877,6 +891,57 @@ isTLSIntoleranceError(PRInt32 err)
}
}
+static CURLcode init_nss(struct SessionHandle *data)
+{
+ char *cert_dir;
+ struct_stat st;
+ if(initialized)
+ return CURLE_OK;
+
+ /* First we check if $SSL_DIR points to a valid dir */
+ cert_dir = getenv("SSL_DIR");
+ if(cert_dir) {
+ if((stat(cert_dir, &st) != 0) ||
+ (!S_ISDIR(st.st_mode))) {
+ cert_dir = NULL;
+ }
+ }
+
+ /* Now we check if the default location is a valid dir */
+ if(!cert_dir) {
+ if((stat(SSL_DIR, &st) == 0) &&
+ (S_ISDIR(st.st_mode))) {
+ cert_dir = (char *)SSL_DIR;
+ }
+ }
+
+ if(!NSS_IsInitialized()) {
+ SECStatus rv;
+ initialized = 1;
+ infof(data, "Initializing NSS with certpath: %s\n",
+ cert_dir ? cert_dir : "none");
+ if(!cert_dir) {
+ rv = NSS_NoDB_Init(NULL);
+ }
+ else {
+ char *certpath =
+ PR_smprintf("%s%s", NSS_VersionCheck("3.12.0") ? "sql:" : "", cert_dir);
+ rv = NSS_Initialize(certpath, "", "", "", NSS_INIT_READONLY);
+ PR_smprintf_free(certpath);
+ }
+ if(rv != SECSuccess) {
+ infof(data, "Unable to initialize NSS database\n");
+ initialized = 0;
+ return CURLE_SSL_CACERT_BADFILE;
+ }
+ }
+
+ if(num_enabled_ciphers() == 0)
+ NSS_SetDomesticPolicy();
+
+ return CURLE_OK;
+}
+
/**
* Global SSL init
*
@@ -889,6 +954,7 @@ int Curl_nss_init(void)
if (nss_initlock == NULL) {
PR_Init(PR_USER_THREAD, PR_PRIORITY_NORMAL, 256);
nss_initlock = PR_NewLock();
+ nss_crllock = PR_NewLock();
}
/* We will actually initialize NSS later */
@@ -896,6 +962,21 @@ int Curl_nss_init(void)
return 1;
}
+CURLcode Curl_nss_force_init(struct SessionHandle *data)
+{
+ CURLcode rv;
+ if(!nss_initlock) {
+ failf(data, "unable to initialize NSS, curl_global_init() should have been "
+ "called with CURL_GLOBAL_SSL or CURL_GLOBAL_ALL");
+ return CURLE_OUT_OF_MEMORY;
+ }
+
+ PR_Lock(nss_initlock);
+ rv = init_nss(data);
+ PR_Unlock(nss_initlock);
+ return rv;
+}
+
/* Global cleanup */
void Curl_nss_cleanup(void)
{
@@ -918,6 +999,7 @@ void Curl_nss_cleanup(void)
PR_Unlock(nss_initlock);
PR_DestroyLock(nss_initlock);
+ PR_DestroyLock(nss_crllock);
nss_initlock = NULL;
initialized = 0;
@@ -1010,6 +1092,9 @@ static bool handle_cc_error(PRInt32 err, struct SessionHandle *data)
}
}
+static Curl_recv nss_recv;
+static Curl_send nss_send;
+
CURLcode Curl_nss_connect(struct connectdata *conn, int sockindex)
{
PRInt32 err;
@@ -1020,15 +1105,12 @@ CURLcode Curl_nss_connect(struct connectdata *conn, int sockindex)
struct SessionHandle *data = conn->data;
curl_socket_t sockfd = conn->sock[sockindex];
struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- SECStatus rv;
- char *certDir = NULL;
int curlerr;
const int *cipher_to_enable;
PRSocketOptionData sock_opt;
+ long time_left;
PRUint32 timeout;
- curlerr = CURLE_SSL_CONNECT_ERROR;
-
if (connssl->state == ssl_connection_complete)
return CURLE_OK;
@@ -1042,76 +1124,36 @@ CURLcode Curl_nss_connect(struct connectdata *conn, int sockindex)
/* FIXME. NSS doesn't support multiple databases open at the same time. */
PR_Lock(nss_initlock);
- if(!initialized) {
- struct_stat st;
-
- /* First we check if $SSL_DIR points to a valid dir */
- certDir = getenv("SSL_DIR");
- if(certDir) {
- if((stat(certDir, &st) != 0) ||
- (!S_ISDIR(st.st_mode))) {
- certDir = NULL;
- }
- }
-
- /* Now we check if the default location is a valid dir */
- if(!certDir) {
- if((stat(SSL_DIR, &st) == 0) &&
- (S_ISDIR(st.st_mode))) {
- certDir = (char *)SSL_DIR;
- }
- }
-
- if (!NSS_IsInitialized()) {
- initialized = 1;
- infof(conn->data, "Initializing NSS with certpath: %s\n",
- certDir ? certDir : "none");
- if(!certDir) {
- rv = NSS_NoDB_Init(NULL);
- }
- else {
- char *certpath = PR_smprintf("%s%s",
- NSS_VersionCheck("3.12.0") ? "sql:" : "",
- certDir);
- rv = NSS_Initialize(certpath, "", "", "", NSS_INIT_READONLY);
- PR_smprintf_free(certpath);
- }
- if(rv != SECSuccess) {
- infof(conn->data, "Unable to initialize NSS database\n");
- curlerr = CURLE_SSL_CACERT_BADFILE;
- initialized = 0;
- PR_Unlock(nss_initlock);
- goto error;
- }
- }
+ curlerr = init_nss(conn->data);
+ if(CURLE_OK != curlerr) {
+ PR_Unlock(nss_initlock);
+ goto error;
+ }
- if(num_enabled_ciphers() == 0)
- NSS_SetDomesticPolicy();
+ curlerr = CURLE_SSL_CONNECT_ERROR;
#ifdef HAVE_PK11_CREATEGENERICOBJECT
- if(!mod) {
- char *configstring = aprintf("library=%s name=PEM", pem_library);
- if(!configstring) {
- PR_Unlock(nss_initlock);
- goto error;
- }
- mod = SECMOD_LoadUserModule(configstring, NULL, PR_FALSE);
- free(configstring);
+ if(!mod) {
+ char *configstring = aprintf("library=%s name=PEM", pem_library);
+ if(!configstring) {
+ PR_Unlock(nss_initlock);
+ goto error;
+ }
+ mod = SECMOD_LoadUserModule(configstring, NULL, PR_FALSE);
+ free(configstring);
- if(!mod || !mod->loaded) {
- if(mod) {
- SECMOD_DestroyModule(mod);
- mod = NULL;
- }
- infof(data, "WARNING: failed to load NSS PEM library %s. Using "
- "OpenSSL PEM certificates will not work.\n", pem_library);
+ if(!mod || !mod->loaded) {
+ if(mod) {
+ SECMOD_DestroyModule(mod);
+ mod = NULL;
}
+ infof(data, "WARNING: failed to load NSS PEM library %s. Using "
+ "OpenSSL PEM certificates will not work.\n", pem_library);
}
+ }
#endif
- PK11_SetPasswordFunc(nss_get_password);
-
- }
+ PK11_SetPasswordFunc(nss_get_password);
PR_Unlock(nss_initlock);
model = PR_NewTCPSocket();
@@ -1243,8 +1285,7 @@ CURLcode Curl_nss_connect(struct connectdata *conn, int sockindex)
data->set.ssl.CApath ? data->set.ssl.CApath : "none");
if (data->set.ssl.CRLfile) {
- int rc = nss_load_crl(data->set.ssl.CRLfile, PR_FALSE);
- if (!rc) {
+ if(SECSuccess != nss_load_crl(data->set.ssl.CRLfile)) {
curlerr = CURLE_SSL_CRL_BADFILE;
goto error;
}
@@ -1302,8 +1343,15 @@ CURLcode Curl_nss_connect(struct connectdata *conn, int sockindex)
SSL_SetURL(connssl->handle, conn->host.name);
+ /* check timeout situation */
+ time_left = Curl_timeleft(conn, NULL, TRUE);
+ if(time_left < 0L) {
+ failf(data, "timed out before SSL handshake");
+ goto error;
+ }
+ timeout = PR_MillisecondsToInterval((PRUint32) time_left);
+
/* Force the handshake now */
- timeout = PR_MillisecondsToInterval((PRUint32)Curl_timeleft(conn, NULL, TRUE));
if(SSL_ForceHandshakeWithTimeout(connssl->handle, timeout) != SECSuccess) {
if(conn->data->set.ssl.certverifyresult == SSL_ERROR_BAD_CERT_DOMAIN)
curlerr = CURLE_PEER_FAILED_VERIFICATION;
@@ -1313,6 +1361,8 @@ CURLcode Curl_nss_connect(struct connectdata *conn, int sockindex)
}
connssl->state = ssl_connection_complete;
+ conn->recv[sockindex] = nss_recv;
+ conn->send[sockindex] = nss_send;
display_conn_info(conn, connssl->handle);
@@ -1365,12 +1415,11 @@ CURLcode Curl_nss_connect(struct connectdata *conn, int sockindex)
return curlerr;
}
-/* for documentation see Curl_ssl_send() in sslgen.h */
-int Curl_nss_send(struct connectdata *conn, /* connection data */
- int sockindex, /* socketindex */
- const void *mem, /* send this data */
- size_t len, /* amount to write */
- int *curlcode)
+static ssize_t nss_send(struct connectdata *conn, /* connection data */
+ int sockindex, /* socketindex */
+ const void *mem, /* send this data */
+ size_t len, /* amount to write */
+ CURLcode *curlcode)
{
int rc;
@@ -1379,7 +1428,7 @@ int Curl_nss_send(struct connectdata *conn, /* connection data */
if(rc < 0) {
PRInt32 err = PR_GetError();
if(err == PR_WOULD_BLOCK_ERROR)
- *curlcode = -1; /* EWOULDBLOCK */
+ *curlcode = CURLE_AGAIN;
else if(handle_cc_error(err, conn->data))
*curlcode = CURLE_SSL_CERTPROBLEM;
else {
@@ -1391,12 +1440,11 @@ int Curl_nss_send(struct connectdata *conn, /* connection data */
return rc; /* number of bytes */
}
-/* for documentation see Curl_ssl_recv() in sslgen.h */
-ssize_t Curl_nss_recv(struct connectdata * conn, /* connection data */
- int num, /* socketindex */
- char *buf, /* store read data here */
- size_t buffersize, /* max amount to read */
- int *curlcode)
+static ssize_t nss_recv(struct connectdata * conn, /* connection data */
+ int num, /* socketindex */
+ char *buf, /* store read data here */
+ size_t buffersize, /* max amount to read */
+ CURLcode *curlcode)
{
ssize_t nread;
@@ -1406,7 +1454,7 @@ ssize_t Curl_nss_recv(struct connectdata * conn, /* connection data */
PRInt32 err = PR_GetError();
if(err == PR_WOULD_BLOCK_ERROR)
- *curlcode = -1; /* EWOULDBLOCK */
+ *curlcode = CURLE_AGAIN;
else if(handle_cc_error(err, conn->data))
*curlcode = CURLE_SSL_CERTPROBLEM;
else {
@@ -1422,4 +1470,12 @@ size_t Curl_nss_version(char *buffer, size_t size)
{
return snprintf(buffer, size, "NSS/%s", NSS_VERSION);
}
+
+int Curl_nss_seed(struct SessionHandle *data)
+{
+ /* TODO: implement? */
+ (void) data;
+ return 0;
+}
+
#endif /* USE_NSS */
diff --git a/lib/nssg.h b/lib/nssg.h
index 309c3d6..f9cc46a 100644
--- a/lib/nssg.h
+++ b/lib/nssg.h
@@ -42,24 +42,13 @@ int Curl_nss_close_all(struct SessionHandle *data);
int Curl_nss_init(void);
void Curl_nss_cleanup(void);
-/* for documentation see Curl_ssl_send() in sslgen.h */
-int Curl_nss_send(struct connectdata *conn,
- int sockindex,
- const void *mem,
- size_t len,
- int *curlcode);
-
-/* for documentation see Curl_ssl_recv() in sslgen.h */
-ssize_t Curl_nss_recv(struct connectdata *conn, /* connection data */
- int num, /* socketindex */
- char *buf, /* store read data here */
- size_t buffersize, /* max amount to read */
- int *curlcode);
-
size_t Curl_nss_version(char *buffer, size_t size);
int Curl_nss_check_cxn(struct connectdata *cxn);
int Curl_nss_seed(struct SessionHandle *data);
+/* initialize NSS library if not already */
+CURLcode Curl_nss_force_init(struct SessionHandle *data);
+
/* API setup for NSS */
#define curlssl_init Curl_nss_init
#define curlssl_cleanup Curl_nss_cleanup
@@ -74,8 +63,6 @@ int Curl_nss_seed(struct SessionHandle *data);
#define curlssl_set_engine(x,y) (x=x, y=y, CURLE_FAILED_INIT)
#define curlssl_set_engine_default(x) (x=x, CURLE_FAILED_INIT)
#define curlssl_engines_list(x) (x=x, (struct curl_slist *)NULL)
-#define curlssl_send Curl_nss_send
-#define curlssl_recv Curl_nss_recv
#define curlssl_version Curl_nss_version
#define curlssl_check_cxn(x) Curl_nss_check_cxn(x)
#define curlssl_data_pending(x,y) (x=x, y=y, 0)
diff --git a/lib/openldap.c b/lib/openldap.c
new file mode 100644
index 0000000..4d5db4a
--- /dev/null
+++ b/lib/openldap.c
@@ -0,0 +1,635 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 2010, Howard Chu, <hyc@openldap.org>
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at http://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ***************************************************************************/
+
+#include "setup.h"
+
+#if !defined(CURL_DISABLE_LDAP) && defined(USE_OPENLDAP)
+
+/*
+ * Notice that USE_OPENLDAP is only a source code selection switch. When
+ * libcurl is built with USE_OPENLDAP defined the libcurl source code that
+ * gets compiled is the code from openldap.c, otherwise the code that gets
+ * compiled is the code from ldap.c.
+ *
+ * When USE_OPENLDAP is defined a recent version of the OpenLDAP library
+ * might be required for compilation and runtime. In order to use ancient
+ * OpenLDAP library versions, USE_OPENLDAP shall not be defined.
+ */
+
+#include <ldap.h>
+
+#include "urldata.h"
+#include <curl/curl.h>
+#include "sendf.h"
+#include "sslgen.h"
+#include "transfer.h"
+#include "curl_ldap.h"
+#include "curl_memory.h"
+#include "curl_base64.h"
+
+#define _MPRINTF_REPLACE /* use our functions only */
+#include <curl/mprintf.h>
+
+#include "memdebug.h"
+
+#ifndef _LDAP_PVT_H
+extern int ldap_pvt_url_scheme2proto(const char *);
+extern int ldap_init_fd(ber_socket_t fd, int proto, const char *url, LDAP **ld);
+#endif
+
+static CURLcode ldap_setup(struct connectdata *conn);
+static CURLcode ldap_do(struct connectdata *conn, bool *done);
+static CURLcode ldap_done(struct connectdata *conn, CURLcode, bool);
+static CURLcode ldap_connect(struct connectdata *conn, bool *done);
+static CURLcode ldap_connecting(struct connectdata *conn, bool *done);
+static CURLcode ldap_disconnect(struct connectdata *conn);
+
+static Curl_recv ldap_recv;
+
+/*
+ * LDAP protocol handler.
+ */
+
+const struct Curl_handler Curl_handler_ldap = {
+ "LDAP", /* scheme */
+ ldap_setup, /* setup_connection */
+ ldap_do, /* do_it */
+ ldap_done, /* done */
+ ZERO_NULL, /* do_more */
+ ldap_connect, /* connect_it */
+ ldap_connecting, /* connecting */
+ ZERO_NULL, /* doing */
+ ZERO_NULL, /* proto_getsock */
+ ZERO_NULL, /* doing_getsock */
+ ZERO_NULL, /* perform_getsock */
+ ldap_disconnect, /* disconnect */
+ PORT_LDAP, /* defport */
+ PROT_LDAP /* protocol */
+};
+
+#ifdef USE_SSL
+/*
+ * LDAPS protocol handler.
+ */
+
+const struct Curl_handler Curl_handler_ldaps = {
+ "LDAPS", /* scheme */
+ ldap_setup, /* setup_connection */
+ ldap_do, /* do_it */
+ ldap_done, /* done */
+ ZERO_NULL, /* do_more */
+ ldap_connect, /* connect_it */
+ ldap_connecting, /* connecting */
+ ZERO_NULL, /* doing */
+ ZERO_NULL, /* proto_getsock */
+ ZERO_NULL, /* doing_getsock */
+ ZERO_NULL, /* perform_getsock */
+ ldap_disconnect, /* disconnect */
+ PORT_LDAPS, /* defport */
+ PROT_LDAP | PROT_SSL /* protocol */
+};
+#endif
+
+static const char *url_errs[] = {
+ "success",
+ "out of memory",
+ "bad parameter",
+ "unrecognized scheme",
+ "unbalanced delimiter",
+ "bad URL",
+ "bad host or port",
+ "bad or missing attributes",
+ "bad or missing scope",
+ "bad or missing filter",
+ "bad or missing extensions"
+};
+
+typedef struct ldapconninfo {
+ LDAP *ld;
+ Curl_recv *recv; /* for stacking SSL handler */
+ Curl_send *send;
+ int proto;
+ int msgid;
+ bool ssldone;
+ bool sslinst;
+ bool didbind;
+} ldapconninfo;
+
+typedef struct ldapreqinfo {
+ int msgid;
+ int nument;
+} ldapreqinfo;
+
+static CURLcode ldap_setup(struct connectdata *conn)
+{
+ ldapconninfo *li;
+ LDAPURLDesc *lud;
+ struct SessionHandle *data=conn->data;
+ int rc, proto;
+ CURLcode status;
+
+ rc = ldap_url_parse(data->change.url, &lud);
+ if (rc != LDAP_URL_SUCCESS) {
+ const char *msg = "url parsing problem";
+ status = CURLE_URL_MALFORMAT;
+ if (rc > LDAP_URL_SUCCESS && rc <= LDAP_URL_ERR_BADEXTS) {
+ if (rc == LDAP_URL_ERR_MEM)
+ status = CURLE_OUT_OF_MEMORY;
+ msg = url_errs[rc];
+ }
+ failf(conn->data, "LDAP local: %s", msg);
+ return status;
+ }
+ proto = ldap_pvt_url_scheme2proto(lud->lud_scheme);
+ ldap_free_urldesc(lud);
+
+ li = calloc(1, sizeof(ldapconninfo));
+ li->proto = proto;
+ conn->proto.generic = li;
+ conn->bits.close = FALSE;
+ /* TODO:
+ * - provide option to choose SASL Binds instead of Simple
+ */
+ return CURLE_OK;
+}
+
+#ifdef USE_SSL
+static Sockbuf_IO ldapsb_tls;
+#endif
+
+static CURLcode ldap_connect(struct connectdata *conn, bool *done)
+{
+ ldapconninfo *li = conn->proto.generic;
+ struct SessionHandle *data=conn->data;
+ int rc, proto = LDAP_VERSION3;
+ char hosturl[1024], *ptr;
+
+ strcpy(hosturl, "ldap");
+ ptr = hosturl+4;
+ if (conn->protocol & PROT_SSL)
+ *ptr++ = 's';
+ snprintf(ptr, sizeof(hosturl)-(ptr-hosturl), "://%s:%d",
+ conn->host.name, conn->port);
+
+ rc = ldap_init_fd(conn->sock[FIRSTSOCKET], li->proto, hosturl, &li->ld);
+ if (rc) {
+ failf(data, "LDAP local: Cannot connect to %s, %s",
+ hosturl, ldap_err2string(rc));
+ return CURLE_COULDNT_CONNECT;
+ }
+
+ ldap_set_option(li->ld, LDAP_OPT_PROTOCOL_VERSION, &proto);
+
+#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_PROXY)
+ if(conn->bits.tunnel_proxy && conn->bits.httpproxy) {
+ /* for LDAP over HTTP proxy */
+ struct HTTP http_proxy;
+ ldapconninfo *li_save;
+ CURLcode result;
+
+ /* BLOCKING */
+ /* We want "seamless" LDAP operations through HTTP proxy tunnel */
+
+ /* Curl_proxyCONNECT is based on a pointer to a struct HTTP at the member
+ * conn->proto.http; we want LDAP through HTTP and we have to change the
+ * member temporarily for connecting to the HTTP proxy. After
+ * Curl_proxyCONNECT we have to set back the member to the original struct
+ * LDAP pointer
+ */
+ li_save = data->state.proto.generic;
+ memset(&http_proxy, 0, sizeof(http_proxy));
+ data->state.proto.http = &http_proxy;
+ result = Curl_proxyCONNECT(conn, FIRSTSOCKET,
+ conn->host.name, conn->remote_port);
+
+ data->state.proto.generic = li_save;
+
+ if(CURLE_OK != result)
+ return result;
+ }
+#endif /* !CURL_DISABLE_HTTP && !CURL_DISABLE_PROXY */
+
+#ifdef USE_SSL
+ if (conn->protocol & PROT_SSL) {
+ CURLcode res;
+ if (data->state.used_interface == Curl_if_easy) {
+ res = Curl_ssl_connect(conn, FIRSTSOCKET);
+ if (res)
+ return res;
+ li->ssldone = TRUE;
+ } else {
+ res = Curl_ssl_connect_nonblocking(conn, FIRSTSOCKET, &li->ssldone);
+ if (res)
+ return res;
+ }
+ }
+#endif
+
+ if (data->state.used_interface == Curl_if_easy)
+ return ldap_connecting(conn, done);
+
+ return CURLE_OK;
+}
+
+static CURLcode ldap_connecting(struct connectdata *conn, bool *done)
+{
+ ldapconninfo *li = conn->proto.generic;
+ struct SessionHandle *data=conn->data;
+ LDAPMessage *result = NULL;
+ struct timeval tv = {0,1}, *tvp;
+ int rc, err;
+ char *info = NULL;
+
+#ifdef USE_SSL
+ if (conn->protocol & PROT_SSL) {
+ /* Is the SSL handshake complete yet? */
+ if (!li->ssldone) {
+ CURLcode res = Curl_ssl_connect_nonblocking(conn, FIRSTSOCKET, &li->ssldone);
+ if (res || !li->ssldone)
+ return res;
+ }
+ /* Have we installed the libcurl SSL handlers into the sockbuf yet? */
+ if (!li->sslinst) {
+ Sockbuf *sb;
+ ldap_get_option(li->ld, LDAP_OPT_SOCKBUF, &sb);
+ ber_sockbuf_add_io(sb, &ldapsb_tls, LBER_SBIOD_LEVEL_TRANSPORT, conn);
+ li->sslinst = TRUE;
+ li->recv = conn->recv[FIRSTSOCKET];
+ li->send = conn->send[FIRSTSOCKET];
+ }
+ }
+#endif
+
+ if (data->state.used_interface == Curl_if_easy)
+ tvp = NULL; /* let ldap_result block indefinitely */
+ else
+ tvp = &tv;
+
+retry:
+ if (!li->didbind) {
+ char *binddn;
+ struct berval passwd;
+
+ if (conn->bits.user_passwd) {
+ binddn = conn->user;
+ passwd.bv_val = conn->passwd;
+ passwd.bv_len = strlen(passwd.bv_val);
+ } else {
+ binddn = NULL;
+ passwd.bv_val = NULL;
+ passwd.bv_len = 0;
+ }
+ rc = ldap_sasl_bind(li->ld, binddn, LDAP_SASL_SIMPLE, &passwd,
+ NULL, NULL, &li->msgid);
+ if (rc)
+ return CURLE_LDAP_CANNOT_BIND;
+ li->didbind = TRUE;
+ if (tvp)
+ return CURLE_OK;
+ }
+
+ rc = ldap_result(li->ld, li->msgid, LDAP_MSG_ONE, tvp, &result);
+ if (rc < 0) {
+ failf(data, "LDAP local: bind ldap_result %s", ldap_err2string(rc));
+ return CURLE_LDAP_CANNOT_BIND;
+ }
+ if (rc == 0) {
+ /* timed out */
+ return CURLE_OK;
+ }
+ rc = ldap_parse_result(li->ld, result, &err, NULL, &info, NULL, NULL, 1);
+ if (rc) {
+ failf(data, "LDAP local: bind ldap_parse_result %s", ldap_err2string(rc));
+ return CURLE_LDAP_CANNOT_BIND;
+ }
+ /* Try to fallback to LDAPv2? */
+ if (err == LDAP_PROTOCOL_ERROR) {
+ int proto;
+ ldap_get_option(li->ld, LDAP_OPT_PROTOCOL_VERSION, &proto);
+ if (proto == LDAP_VERSION3) {
+ ldap_memfree(info);
+ proto = LDAP_VERSION2;
+ ldap_set_option(li->ld, LDAP_OPT_PROTOCOL_VERSION, &proto);
+ li->didbind = FALSE;
+ goto retry;
+ }
+ }
+
+ if (err) {
+ failf(data, "LDAP remote: bind failed %s %s", ldap_err2string(rc),
+ info ? info : "");
+ return CURLE_LOGIN_DENIED;
+ }
+ conn->recv[FIRSTSOCKET] = ldap_recv;
+ *done = TRUE;
+ return CURLE_OK;
+}
+
+static CURLcode ldap_disconnect(struct connectdata *conn)
+{
+ ldapconninfo *li = conn->proto.generic;
+
+ if (li) {
+ if (li->ld) {
+ ldap_unbind_ext(li->ld, NULL, NULL);
+ li->ld = NULL;
+ }
+ conn->proto.generic = NULL;
+ free(li);
+ }
+ return CURLE_OK;
+}
+
+static CURLcode ldap_do(struct connectdata *conn, bool *done)
+{
+ ldapconninfo *li = conn->proto.generic;
+ ldapreqinfo *lr;
+ CURLcode status = CURLE_OK;
+ int rc = 0;
+ LDAPURLDesc *ludp = NULL;
+ int msgid;
+ struct SessionHandle *data=conn->data;
+
+ conn->bits.close = FALSE;
+
+ infof(data, "LDAP local: %s\n", data->change.url);
+
+ rc = ldap_url_parse(data->change.url, &ludp);
+ if (rc != LDAP_URL_SUCCESS) {
+ const char *msg = "url parsing problem";
+ status = CURLE_URL_MALFORMAT;
+ if (rc > LDAP_URL_SUCCESS && rc <= LDAP_URL_ERR_BADEXTS) {
+ if (rc == LDAP_URL_ERR_MEM)
+ status = CURLE_OUT_OF_MEMORY;
+ msg = url_errs[rc];
+ }
+ failf(conn->data, "LDAP local: %s", msg);
+ return status;
+ }
+
+ rc = ldap_search_ext(li->ld, ludp->lud_dn, ludp->lud_scope,
+ ludp->lud_filter, ludp->lud_attrs, 0,
+ NULL, NULL, NULL, 0, &msgid);
+ ldap_free_urldesc(ludp);
+ if (rc != LDAP_SUCCESS) {
+ failf(data, "LDAP local: ldap_search_ext %s", ldap_err2string(rc));
+ return CURLE_LDAP_SEARCH_FAILED;
+ }
+ lr = calloc(1,sizeof(ldapreqinfo));
+ lr->msgid = msgid;
+ data->state.proto.generic = lr;
+ Curl_setup_transfer(conn, FIRSTSOCKET, -1, FALSE, NULL, -1, NULL);
+ *done = TRUE;
+ return CURLE_OK;
+}
+
+static CURLcode ldap_done(struct connectdata *conn, CURLcode res,
+ bool premature)
+{
+ ldapreqinfo *lr = conn->data->state.proto.generic;
+ (void)res;
+ (void)premature;
+
+ if (lr) {
+ /* if there was a search in progress, abandon it */
+ if (lr->msgid) {
+ ldapconninfo *li = conn->proto.generic;
+ ldap_abandon_ext(li->ld, lr->msgid, NULL, NULL);
+ lr->msgid = 0;
+ }
+ conn->data->state.proto.generic = NULL;
+ free(lr);
+ }
+ return CURLE_OK;
+}
+
+static ssize_t ldap_recv(struct connectdata *conn, int sockindex, char *buf,
+ size_t len, CURLcode *err)
+{
+ ldapconninfo *li = conn->proto.generic;
+ struct SessionHandle *data=conn->data;
+ ldapreqinfo *lr = data->state.proto.generic;
+ int rc, ret;
+ LDAPMessage *result = NULL;
+ LDAPMessage *ent;
+ BerElement *ber = NULL;
+ struct timeval tv = {0,1};
+ (void)len;
+ (void)buf;
+ (void)sockindex;
+
+ rc = ldap_result(li->ld, lr->msgid, LDAP_MSG_RECEIVED, &tv, &result);
+ if (rc < 0) {
+ failf(data, "LDAP local: search ldap_result %s", ldap_err2string(rc));
+ *err = CURLE_RECV_ERROR;
+ return -1;
+ }
+
+ *err = CURLE_AGAIN;
+ ret = -1;
+
+ /* timed out */
+ if (result == NULL)
+ return ret;
+
+ for (ent = ldap_first_message(li->ld, result); ent;
+ ent = ldap_next_message(li->ld, ent)) {
+ struct berval bv, *bvals, **bvp = &bvals;
+ int binary = 0, msgtype;
+
+ msgtype = ldap_msgtype(ent);
+ if (msgtype == LDAP_RES_SEARCH_RESULT) {
+ int code;
+ char *info = NULL;
+ rc = ldap_parse_result(li->ld, ent, &code, NULL, &info, NULL, NULL, 0);
+ if (rc) {
+ failf(data, "LDAP local: search ldap_parse_result %s", ldap_err2string(rc));
+ *err = CURLE_LDAP_SEARCH_FAILED;
+ } else if (code && code != LDAP_SIZELIMIT_EXCEEDED) {
+ failf(data, "LDAP remote: search failed %s %s", ldap_err2string(rc),
+ info ? info : "");
+ *err = CURLE_LDAP_SEARCH_FAILED;
+ } else {
+ /* successful */
+ if (code == LDAP_SIZELIMIT_EXCEEDED)
+ infof(data, "There are more than %d entries\n", lr->nument);
+ data->req.size = data->req.bytecount;
+ *err = CURLE_OK;
+ ret = 0;
+ }
+ lr->msgid = 0;
+ ldap_memfree(info);
+ break;
+ } else if (msgtype != LDAP_RES_SEARCH_ENTRY) {
+ continue;
+ }
+
+ lr->nument++;
+ rc = ldap_get_dn_ber(li->ld, ent, &ber, &bv);
+ Curl_client_write(conn, CLIENTWRITE_BODY, (char *)"DN: ", 4);
+ Curl_client_write(conn, CLIENTWRITE_BODY, (char *)bv.bv_val, bv.bv_len);
+ Curl_client_write(conn, CLIENTWRITE_BODY, (char *)"\n", 1);
+ data->req.bytecount += bv.bv_len + 5;
+
+ for (rc = ldap_get_attribute_ber(li->ld, ent, ber, &bv, bvp);
+ rc == LDAP_SUCCESS;
+ rc = ldap_get_attribute_ber(li->ld, ent, ber, &bv, bvp)) {
+ int i;
+
+ if (bv.bv_val == NULL) break;
+
+ if (bv.bv_len > 7 && !strncmp(bv.bv_val + bv.bv_len - 7, ";binary", 7))
+ binary = 1;
+
+ for (i=0; bvals[i].bv_val != NULL; i++) {
+ int binval = 0;
+ Curl_client_write(conn, CLIENTWRITE_BODY, (char *)"\t", 1);
+ Curl_client_write(conn, CLIENTWRITE_BODY, (char *)bv.bv_val, bv.bv_len);
+ Curl_client_write(conn, CLIENTWRITE_BODY, (char *)":", 1);
+ data->req.bytecount += bv.bv_len + 2;
+
+ if (!binary) {
+ /* check for leading or trailing whitespace */
+ if (isspace(bvals[i].bv_val[0]) ||
+ isspace(bvals[i].bv_val[bvals[i].bv_len-1])) {
+ binval = 1;
+ } else {
+ /* check for unprintable characters */
+ unsigned int j;
+ for (j=0; j<bvals[i].bv_len; j++)
+ if (!isprint(bvals[i].bv_val[j])) {
+ binval = 1;
+ break;
+ }
+ }
+ }
+ if (binary || binval) {
+ char *val_b64;
+ /* Binary value, encode to base64. */
+ size_t val_b64_sz = Curl_base64_encode(data,
+ bvals[i].bv_val,
+ bvals[i].bv_len,
+ &val_b64);
+ Curl_client_write(conn, CLIENTWRITE_BODY, (char *)": ", 2);
+ data->req.bytecount += 2;
+ if(val_b64_sz > 0) {
+ Curl_client_write(conn, CLIENTWRITE_BODY, val_b64, val_b64_sz);
+ free(val_b64);
+ data->req.bytecount += val_b64_sz;
+ }
+ } else {
+ Curl_client_write(conn, CLIENTWRITE_BODY, (char *)" ", 1);
+ Curl_client_write(conn, CLIENTWRITE_BODY, bvals[i].bv_val,
+ bvals[i].bv_len);
+ data->req.bytecount += bvals[i].bv_len + 1;
+ }
+ Curl_client_write(conn, CLIENTWRITE_BODY, (char *)"\n", 0);
+ data->req.bytecount++;
+ }
+ ber_memfree(bvals);
+ Curl_client_write(conn, CLIENTWRITE_BODY, (char *)"\n", 0);
+ data->req.bytecount++;
+ }
+ Curl_client_write(conn, CLIENTWRITE_BODY, (char *)"\n", 0);
+ data->req.bytecount++;
+ ber_free(ber, 0);
+ }
+ ldap_msgfree(result);
+ return ret;
+}
+
+#ifdef USE_SSL
+static int
+ldapsb_tls_setup(Sockbuf_IO_Desc *sbiod, void *arg)
+{
+ sbiod->sbiod_pvt = arg;
+ return 0;
+}
+
+static int
+ldapsb_tls_remove(Sockbuf_IO_Desc *sbiod)
+{
+ sbiod->sbiod_pvt = NULL;
+ return 0;
+}
+
+/* We don't need to do anything because libcurl does it already */
+static int
+ldapsb_tls_close(Sockbuf_IO_Desc *sbiod)
+{
+ (void)sbiod;
+ return 0;
+}
+
+static int
+ldapsb_tls_ctrl(Sockbuf_IO_Desc *sbiod, int opt, void *arg)
+{
+ (void)arg;
+ if (opt == LBER_SB_OPT_DATA_READY) {
+ struct connectdata *conn = sbiod->sbiod_pvt;
+ return Curl_ssl_data_pending(conn, FIRSTSOCKET);
+ }
+ return 0;
+}
+
+static ber_slen_t
+ldapsb_tls_read(Sockbuf_IO_Desc *sbiod, void *buf, ber_len_t len)
+{
+ struct connectdata *conn = sbiod->sbiod_pvt;
+ ldapconninfo *li = conn->proto.generic;
+ ber_slen_t ret;
+ CURLcode err = CURLE_RECV_ERROR;
+
+ ret = li->recv(conn, FIRSTSOCKET, buf, len, &err);
+ if (ret < 0 && err == CURLE_AGAIN) {
+ SET_SOCKERRNO(EWOULDBLOCK);
+ }
+ return ret;
+}
+
+static ber_slen_t
+ldapsb_tls_write(Sockbuf_IO_Desc *sbiod, void *buf, ber_len_t len)
+{
+ struct connectdata *conn = sbiod->sbiod_pvt;
+ ldapconninfo *li = conn->proto.generic;
+ ber_slen_t ret;
+ CURLcode err = CURLE_SEND_ERROR;
+
+ ret = li->send(conn, FIRSTSOCKET, buf, len, &err);
+ if (ret < 0 && err == CURLE_AGAIN) {
+ SET_SOCKERRNO(EWOULDBLOCK);
+ }
+ return ret;
+}
+
+static Sockbuf_IO ldapsb_tls =
+{
+ ldapsb_tls_setup,
+ ldapsb_tls_remove,
+ ldapsb_tls_ctrl,
+ ldapsb_tls_read,
+ ldapsb_tls_write,
+ ldapsb_tls_close
+};
+#endif /* USE_SSL */
+
+#endif /* !CURL_DISABLE_LDAP && USE_OPENLDAP */
diff --git a/lib/parsedate.c b/lib/parsedate.c
index 8e26f1c..5d8af26 100644
--- a/lib/parsedate.c
+++ b/lib/parsedate.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -370,7 +370,12 @@ int Curl_parsedate(const char *date, time_t *output)
(3 == sscanf(date, "%02d:%02d:%02d", &hournum, &minnum, &secnum))) {
/* time stamp! */
date += 8;
- found = TRUE;
+ }
+ else if((secnum == -1) &&
+ (2 == sscanf(date, "%02d:%02d", &hournum, &minnum))) {
+ /* time stamp without seconds */
+ date += 5;
+ secnum = 0;
}
else {
val = (int)strtol(date, &end, 10);
diff --git a/lib/pingpong.c b/lib/pingpong.c
index c6b6f2f..876a6a2 100644
--- a/lib/pingpong.c
+++ b/lib/pingpong.c
@@ -322,7 +322,7 @@ CURLcode Curl_pp_readresp(curl_socket_t sockfd,
*/
DEBUGASSERT((ptr+pp->cache_size) <= (buf+BUFSIZE+1));
memcpy(ptr, pp->cache, pp->cache_size);
- gotbytes = pp->cache_size;
+ gotbytes = (ssize_t)pp->cache_size;
free(pp->cache); /* free the cache */
pp->cache = NULL; /* clear the pointer */
pp->cache_size = 0; /* zero the size just in case */
@@ -340,8 +340,7 @@ CURLcode Curl_pp_readresp(curl_socket_t sockfd,
#if defined(HAVE_KRB4) || defined(HAVE_GSSAPI)
conn->data_prot = prot;
#endif
- if(res < 0)
- /* EWOULDBLOCK */
+ if(res == CURLE_AGAIN)
return CURLE_OK; /* return */
#ifdef CURL_DOES_CONVERSIONS
@@ -387,8 +386,8 @@ CURLcode Curl_pp_readresp(curl_socket_t sockfd,
if(!conn->sec_complete)
#endif
if(data->set.verbose)
- Curl_debug(data, CURLINFO_HEADER_IN,
- pp->linestart_resp, (size_t)perline, conn);
+ Curl_debug(data, CURLINFO_HEADER_IN,
+ pp->linestart_resp, (size_t)perline, conn);
/*
* We pass all response-lines to the callback function registered
diff --git a/lib/pingpong.h b/lib/pingpong.h
index a629aee..cbbff8f 100644
--- a/lib/pingpong.h
+++ b/lib/pingpong.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2007, 2009, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -56,7 +56,7 @@ struct pingpong {
struct timeval response; /* set to Curl_tvnow() when a command has been sent
off, used to time-out response reading */
long response_time; /* When no timeout is given, this is the amount of
- seconds we await for a server response. */
+ milliseconds we await for a server response. */
struct connectdata *conn; /* points to the connectdata struct that this
belongs to */
diff --git a/lib/polarssl.c b/lib/polarssl.c
new file mode 100644
index 0000000..e81e660
--- /dev/null
+++ b/lib/polarssl.c
@@ -0,0 +1,375 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 2010, Hoi-Ho Chan, <hoiho.chan@gmail.com>
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at http://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ***************************************************************************/
+
+/*
+ * Source file for all PolarSSL-specific code for the TLS/SSL layer. No code
+ * but sslgen.c should ever call or use these functions.
+ *
+ */
+
+#include "setup.h"
+#ifdef USE_POLARSSL
+
+#include <string.h>
+#include <stdlib.h>
+#include <ctype.h>
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+
+#include <polarssl/net.h>
+#include <polarssl/ssl.h>
+#include <polarssl/havege.h>
+#include <polarssl/certs.h>
+#include <polarssl/x509.h>
+
+#include "urldata.h"
+#include "sendf.h"
+#include "inet_pton.h"
+#include "polarssl.h"
+#include "sslgen.h"
+#include "parsedate.h"
+#include "connect.h" /* for the connect timeout */
+#include "select.h"
+#include "rawstr.h"
+
+#define _MPRINTF_REPLACE /* use our functions only */
+#include <curl/mprintf.h>
+#include "curl_memory.h"
+/* The last #include file should be: */
+#include "memdebug.h"
+
+/* Define this to enable lots of debugging for PolarSSL */
+#undef POLARSSL_DEBUG
+
+#ifdef POLARSSL_DEBUG
+static void polarssl_debug(void *context, int level, char *line)
+{
+ struct SessionHandle *data = NULL;
+
+ if(!context)
+ return;
+
+ data = (struct SessionHandle *)context;
+
+ infof(data, "%s", line);
+}
+#else
+#endif
+
+static Curl_recv polarssl_recv;
+static Curl_send polarssl_send;
+
+/*
+ * This function loads all the client/CA certificates and CRLs. Setup the TLS
+ * layer and do all necessary magic.
+ */
+CURLcode
+Curl_polarssl_connect(struct connectdata *conn,
+ int sockindex)
+{
+ struct SessionHandle *data = conn->data;
+ bool sni = TRUE; /* default is SNI enabled */
+ int ret = -1;
+#ifdef ENABLE_IPV6
+ struct in6_addr addr;
+#else
+ struct in_addr addr;
+#endif
+ void *old_session = NULL;
+ size_t old_session_size = 0;
+ char buffer[1024];
+
+ if(conn->ssl[sockindex].state == ssl_connection_complete)
+ return CURLE_OK;
+
+ /* PolarSSL only supports SSLv3 and TLSv1 */
+ if(data->set.ssl.version == CURL_SSLVERSION_SSLv2) {
+ failf(data, "PolarSSL does not support SSLv2");
+ return CURLE_SSL_CONNECT_ERROR;
+ } else if(data->set.ssl.version == CURL_SSLVERSION_SSLv3) {
+ sni = FALSE; /* SSLv3 has no SNI */
+ }
+
+ havege_init(&conn->ssl[sockindex].hs);
+
+ /* Load the trusted CA */
+ memset(&conn->ssl[sockindex].cacert, 0, sizeof(x509_cert));
+
+ if(data->set.str[STRING_SSL_CAFILE]) {
+ ret = x509parse_crtfile(&conn->ssl[sockindex].cacert,
+ data->set.str[STRING_SSL_CAFILE]);
+
+ if(ret) {
+ failf(data, "Error reading ca cert file %s: -0x%04X",
+ data->set.str[STRING_SSL_CAFILE], -ret);
+
+ if(data->set.ssl.verifypeer)
+ return CURLE_SSL_CACERT_BADFILE;
+ }
+ }
+
+ /* Load the client certificate */
+ memset(&conn->ssl[sockindex].clicert, 0, sizeof(x509_cert));
+
+ if(data->set.str[STRING_CERT]) {
+ ret = x509parse_crtfile(&conn->ssl[sockindex].clicert,
+ data->set.str[STRING_CERT]);
+
+ if(ret) {
+ failf(data, "Error reading client cert file %s: -0x%04X",
+ data->set.str[STRING_CERT], -ret);
+ return CURLE_SSL_CERTPROBLEM;
+ }
+ }
+
+ /* Load the client private key */
+ if(data->set.str[STRING_KEY]) {
+ ret = x509parse_keyfile(&conn->ssl[sockindex].rsa,
+ data->set.str[STRING_KEY],
+ data->set.str[STRING_KEY_PASSWD]);
+
+ if(ret) {
+ failf(data, "Error reading private key %s: -0x%04X",
+ data->set.str[STRING_KEY], -ret);
+ return CURLE_SSL_CERTPROBLEM;
+ }
+ }
+
+ /* Load the CRL */
+ memset(&conn->ssl[sockindex].crl, 0, sizeof(x509_crl));
+
+ if(data->set.str[STRING_SSL_CRLFILE]) {
+ ret = x509parse_crlfile(&conn->ssl[sockindex].crl,
+ data->set.str[STRING_SSL_CRLFILE]);
+
+ if(ret) {
+ failf(data, "Error reading CRL file %s: -0x%04X",
+ data->set.str[STRING_SSL_CRLFILE], -ret);
+ return CURLE_SSL_CRL_BADFILE;
+ }
+ }
+
+ infof(data, "PolarSSL: Connected to %s:%d\n",
+ conn->host.name, conn->remote_port);
+
+ havege_init(&conn->ssl[sockindex].hs);
+
+ if(ssl_init(&conn->ssl[sockindex].ssl)) {
+ failf(data, "PolarSSL: ssl_init failed");
+ return CURLE_SSL_CONNECT_ERROR;
+ }
+
+ ssl_set_endpoint(&conn->ssl[sockindex].ssl, SSL_IS_CLIENT);
+ ssl_set_authmode(&conn->ssl[sockindex].ssl, SSL_VERIFY_OPTIONAL);
+
+ ssl_set_rng(&conn->ssl[sockindex].ssl, havege_rand,
+ &conn->ssl[sockindex].hs);
+ ssl_set_bio(&conn->ssl[sockindex].ssl,
+ net_recv, &conn->sock[sockindex],
+ net_send, &conn->sock[sockindex]);
+
+ ssl_set_ciphers(&conn->ssl[sockindex].ssl, ssl_default_ciphers);
+
+ if(!Curl_ssl_getsessionid(conn, &old_session, &old_session_size)) {
+ memcpy(&conn->ssl[sockindex].ssn, old_session, old_session_size);
+ infof(data, "PolarSSL re-using session\n");
+ }
+
+ ssl_set_session(&conn->ssl[sockindex].ssl, 1, 600,
+ &conn->ssl[sockindex].ssn);
+
+ ssl_set_ca_chain(&conn->ssl[sockindex].ssl,
+ &conn->ssl[sockindex].cacert,
+ &conn->ssl[sockindex].crl,
+ conn->host.name);
+
+ ssl_set_own_cert(&conn->ssl[sockindex].ssl,
+ &conn->ssl[sockindex].clicert, &conn->ssl[sockindex].rsa);
+
+ if(!Curl_inet_pton(AF_INET, conn->host.name, &addr) &&
+#ifdef ENABLE_IPV6
+ !Curl_inet_pton(AF_INET6, conn->host.name, &addr) &&
+#endif
+ sni && ssl_set_hostname(&conn->ssl[sockindex].ssl, conn->host.name)) {
+ infof(data, "WARNING: failed to configure "
+ "server name indication (SNI) TLS extension\n");
+ }
+
+ infof(data, "PolarSSL: performing SSL/TLS handshake...\n");
+
+#ifdef POLARSSL_DEBUG
+ ssl_set_dbg(&conn->ssl[sockindex].ssl, polarssl_debug, data);
+#endif
+
+ do {
+ if (!(ret = ssl_handshake(&conn->ssl[sockindex].ssl))) {
+ break;
+ } else if(ret != POLARSSL_ERR_NET_TRY_AGAIN) {
+ failf(data, "ssl_handshake returned -0x%04X", -ret);
+ return CURLE_SSL_CONNECT_ERROR;
+ } else {
+ /* wait for data from server... */
+ long timeout_ms = Curl_timeleft(conn, NULL, TRUE);
+
+ if(timeout_ms < 0) {
+ failf(data, "SSL connection timeout");
+ return CURLE_OPERATION_TIMEDOUT;
+ }
+
+ switch(Curl_socket_ready(conn->sock[sockindex],
+ CURL_SOCKET_BAD, timeout_ms)) {
+ case 0:
+ failf(data, "SSL handshake timeout");
+ return CURLE_OPERATION_TIMEDOUT;
+ break;
+ case CURL_CSELECT_IN:
+ continue;
+ break;
+ default:
+ return CURLE_SSL_CONNECT_ERROR;
+ break;
+ }
+ }
+ } while (1);
+
+ infof(data, "PolarSSL: Handshake complete, cipher is %s\n",
+ ssl_get_cipher(&conn->ssl[sockindex].ssl));
+
+ ret = ssl_get_verify_result(&conn->ssl[sockindex].ssl);
+
+ if(ret && data->set.ssl.verifypeer) {
+ if(ret & BADCERT_EXPIRED)
+ failf(data, "Cert verify failed: BADCERT_EXPIRED\n");
+
+ if(ret & BADCERT_REVOKED)
+ failf(data, "Cert verify failed: BADCERT_REVOKED");
+
+ if(ret & BADCERT_CN_MISMATCH)
+ failf(data, "Cert verify failed: BADCERT_CN_MISMATCH");
+
+ if(ret & BADCERT_NOT_TRUSTED)
+ failf(data, "Cert verify failed: BADCERT_NOT_TRUSTED");
+
+ return CURLE_SSL_CACERT;
+ }
+
+ if(conn->ssl[sockindex].ssl.peer_cert) {
+ /* If the session was resumed, there will be no peer certs */
+ memset(buffer, 0, sizeof(buffer));
+
+ if(x509parse_cert_info(buffer, sizeof(buffer), (char *)"* ",
+ conn->ssl[sockindex].ssl.peer_cert) != -1)
+ infof(data, "Dumping cert info:\n%s\n", buffer);
+ }
+
+ conn->ssl[sockindex].state = ssl_connection_complete;
+ conn->recv[sockindex] = polarssl_recv;
+ conn->send[sockindex] = polarssl_send;
+
+ /* Save the current session data for possible re-use */
+ {
+ void *new_session = malloc(sizeof(conn->ssl[sockindex].ssn));
+
+ if(new_session) {
+ memcpy(new_session, &conn->ssl[sockindex].ssn,
+ sizeof(conn->ssl[sockindex].ssn));
+
+ if(old_session)
+ Curl_ssl_delsessionid(conn, old_session);
+
+ return Curl_ssl_addsessionid(conn, new_session,
+ sizeof(conn->ssl[sockindex].ssn));
+ }
+ }
+
+ return CURLE_OK;
+}
+
+static ssize_t polarssl_send(struct connectdata *conn,
+ int sockindex,
+ const void *mem,
+ size_t len,
+ CURLcode *curlcode)
+{
+ int ret = -1;
+
+ ret = ssl_write(&conn->ssl[sockindex].ssl,
+ (unsigned char *)mem, len);
+
+ if(ret < 0) {
+ *curlcode = (ret == POLARSSL_ERR_NET_TRY_AGAIN) ?
+ CURLE_AGAIN : CURLE_SEND_ERROR;
+ ret = -1;
+ }
+
+ return ret;
+}
+
+void Curl_polarssl_close_all(struct SessionHandle *data)
+{
+ (void)data;
+}
+
+void Curl_polarssl_close(struct connectdata *conn, int sockindex)
+{
+ rsa_free(&conn->ssl[sockindex].rsa);
+ x509_free(&conn->ssl[sockindex].clicert);
+ x509_free(&conn->ssl[sockindex].cacert);
+ x509_crl_free(&conn->ssl[sockindex].crl);
+ ssl_free(&conn->ssl[sockindex].ssl);
+}
+
+static ssize_t polarssl_recv(struct connectdata *conn,
+ int num,
+ char *buf,
+ size_t buffersize,
+ CURLcode *curlcode)
+{
+ int ret = -1;
+ ssize_t len = -1;
+
+ memset(buf, 0, buffersize);
+ ret = ssl_read(&conn->ssl[num].ssl, (unsigned char *)buf, buffersize);
+
+ if(ret <= 0) {
+ *curlcode = (ret == POLARSSL_ERR_NET_TRY_AGAIN) ?
+ CURLE_AGAIN : CURLE_RECV_ERROR;
+ return -1;
+ }
+
+ len = ret;
+
+ return len;
+}
+
+void Curl_polarssl_session_free(void *ptr)
+{
+ free(ptr);
+}
+
+size_t Curl_polarssl_version(char *buffer, size_t size)
+{
+ return snprintf(buffer, size, "PolarSSL");
+}
+
+#endif
diff --git a/lib/polarssl.h b/lib/polarssl.h
new file mode 100644
index 0000000..964af17
--- /dev/null
+++ b/lib/polarssl.h
@@ -0,0 +1,57 @@
+#ifndef HEADER_CURL_POLARSSL_H
+#define HEADER_CURL_POLARSSL_H
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 2010, Hoi-Ho Chan, <hoiho.chan@gmail.com>
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at http://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ * $Id: polarssl.h,v 1.10 2009-02-12 20:48:43 danf Exp $
+ ***************************************************************************/
+
+#ifdef USE_POLARSSL
+
+CURLcode Curl_polarssl_connect(struct connectdata *conn, int sockindex);
+
+/* tell PolarSSL to close down all open information regarding connections (and
+ thus session ID caching etc) */
+void Curl_polarssl_close_all(struct SessionHandle *data);
+
+ /* close a SSL connection */
+void Curl_polarssl_close(struct connectdata *conn, int sockindex);
+
+void Curl_polarssl_session_free(void *ptr);
+size_t Curl_polarssl_version(char *buffer, size_t size);
+int Curl_polarssl_shutdown(struct connectdata *conn, int sockindex);
+
+/* API setup for PolarSSL */
+#define curlssl_init() (1)
+#define curlssl_cleanup()
+#define curlssl_connect Curl_polarssl_connect
+#define curlssl_session_free(x) Curl_polarssl_session_free(x)
+#define curlssl_close_all Curl_polarssl_close_all
+#define curlssl_close Curl_polarssl_close
+#define curlssl_shutdown(x,y) 0
+#define curlssl_set_engine(x,y) (x=x, y=y, CURLE_FAILED_INIT)
+#define curlssl_set_engine_default(x) (x=x, CURLE_FAILED_INIT)
+#define curlssl_engines_list(x) (x=x, (struct curl_slist *)NULL)
+#define curlssl_version Curl_polarssl_version
+#define curlssl_check_cxn(x) (x=x, -1)
+#define curlssl_data_pending(x,y) (x=x, y=y, 0)
+
+#endif /* USE_POLARSSL */
+#endif /* HEADER_CURL_POLARSSL_H */
diff --git a/lib/pop3.c b/lib/pop3.c
index 4894f3c..9609b62 100644
--- a/lib/pop3.c
+++ b/lib/pop3.c
@@ -311,10 +311,10 @@ static CURLcode pop3_state_user_resp(struct connectdata *conn,
failf(data, "Access denied. %c", pop3code);
result = CURLE_LOGIN_DENIED;
}
-
- /* send PASS */
- result = Curl_pp_sendf(&conn->proto.pop3c.pp, "PASS %s",
- pop3->passwd?pop3->passwd:"");
+ else
+ /* send PASS */
+ result = Curl_pp_sendf(&conn->proto.pop3c.pp, "PASS %s",
+ pop3->passwd?pop3->passwd:"");
if(result)
return result;
@@ -359,9 +359,8 @@ static CURLcode pop3_state_retr_resp(struct connectdata *conn,
}
/* POP3 download */
- result=Curl_setup_transfer(conn, FIRSTSOCKET, -1, FALSE,
- pop3->bytecountp,
- -1, NULL); /* no upload here */
+ Curl_setup_transfer(conn, FIRSTSOCKET, -1, FALSE,
+ pop3->bytecountp, -1, NULL); /* no upload here */
if(pp->cache) {
/* At this point there is a bunch of data in the header "cache" that is
@@ -403,9 +402,8 @@ static CURLcode pop3_state_list_resp(struct connectdata *conn,
}
/* POP3 download */
- result=Curl_setup_transfer(conn, FIRSTSOCKET, -1, FALSE,
- pop3->bytecountp,
- -1, NULL); /* no upload here */
+ Curl_setup_transfer(conn, FIRSTSOCKET, -1, FALSE, pop3->bytecountp,
+ -1, NULL); /* no upload here */
if(pp->cache) {
/* cache holds the email ID listing */
@@ -830,7 +828,8 @@ static CURLcode pop3_disconnect(struct connectdata *conn)
/* The POP3 session may or may not have been allocated/setup at this
point! */
- (void)pop3_quit(conn); /* ignore errors on the LOGOUT */
+ if(pop3c->pp.conn)
+ (void)pop3_quit(conn); /* ignore errors on the LOGOUT */
Curl_pp_disconnect(&pop3c->pp);
@@ -851,10 +850,11 @@ static CURLcode pop3_parse_url_path(struct connectdata *conn)
struct pop3_conn *pop3c = &conn->proto.pop3c;
struct SessionHandle *data = conn->data;
const char *path = data->state.path;
- int len;
/* url decode the path and use this mailbox */
- pop3c->mailbox = curl_easy_unescape(data, path, 0, &len);
+ pop3c->mailbox = curl_easy_unescape(data, path, 0, NULL);
+ if (!pop3c->mailbox)
+ return CURLE_OUT_OF_MEMORY;
return CURLE_OK;
}
@@ -863,18 +863,17 @@ static CURLcode pop3_parse_url_path(struct connectdata *conn)
static CURLcode pop3_dophase_done(struct connectdata *conn,
bool connected)
{
- CURLcode result = CURLE_OK;
struct FTP *pop3 = conn->data->state.proto.pop3;
struct pop3_conn *pop3c = &conn->proto.pop3c;
- (void)connected;
+ (void)connected;
if(pop3->transfer != FTPTRANSFER_BODY)
/* no data to transfer */
- result=Curl_setup_transfer(conn, -1, -1, FALSE, NULL, -1, NULL);
+ Curl_setup_transfer(conn, -1, -1, FALSE, NULL, -1, NULL);
free(pop3c->mailbox);
- return result;
+ return CURLE_OK;
}
/* called from multi.c while DOing */
diff --git a/lib/qssl.c b/lib/qssl.c
index 5a08a25..dd4f911 100644
--- a/lib/qssl.c
+++ b/lib/qssl.c
@@ -242,6 +242,9 @@ static CURLcode Curl_qsossl_handshake(struct connectdata * conn, int sockindex)
}
+static Curl_recv qsossl_recv;
+static Curl_send qsossl_send;
+
CURLcode Curl_qsossl_connect(struct connectdata * conn, int sockindex)
{
@@ -263,8 +266,11 @@ CURLcode Curl_qsossl_connect(struct connectdata * conn, int sockindex)
connssl->state = ssl_connection_none;
}
}
- if (rc == CURLE_OK)
+ if (rc == CURLE_OK) {
connssl->state = ssl_connection_complete;
+ conn->recv[sockindex] = qsossl_recv;
+ conn->send[sockindex] = qsossl_send;
+ }
return rc;
}
@@ -374,9 +380,8 @@ int Curl_qsossl_shutdown(struct connectdata * conn, int sockindex)
}
-/* for documentation see Curl_ssl_send() in sslgen.h */
-ssize_t Curl_qsossl_send(struct connectdata * conn, int sockindex,
- const void * mem, size_t len, int * curlcode)
+static ssize_t qsossl_send(struct connectdata * conn, int sockindex,
+ const void * mem, size_t len, CURLcode * curlcode)
{
/* SSL_Write() is said to return 'int' while write() and send() returns
@@ -392,14 +397,14 @@ ssize_t Curl_qsossl_send(struct connectdata * conn, int sockindex,
/* The operation did not complete; the same SSL I/O function
should be called again later. This is basicly an EWOULDBLOCK
equivalent. */
- *curlcode = -1; /* EWOULDBLOCK */
+ *curlcode = CURLE_AGAIN;
return -1;
case SSL_ERROR_IO:
switch (errno) {
case EWOULDBLOCK:
case EINTR:
- *curlcode = -1; /* EWOULDBLOCK */
+ *curlcode = CURLE_AGAIN;
return -1;
}
@@ -419,9 +424,8 @@ ssize_t Curl_qsossl_send(struct connectdata * conn, int sockindex,
}
-/* for documentation see Curl_ssl_recv() in sslgen.h */
-ssize_t Curl_qsossl_recv(struct connectdata * conn, int num, char * buf,
- size_t buffersize, int * curlcode)
+static ssize_t qsossl_recv(struct connectdata * conn, int num, char * buf,
+ size_t buffersize, CURLcode * curlcode)
{
char error_buffer[120]; /* OpenSSL documents that this must be at
@@ -440,13 +444,13 @@ ssize_t Curl_qsossl_recv(struct connectdata * conn, int num, char * buf,
case SSL_ERROR_BAD_STATE:
/* there's data pending, re-invoke SSL_Read(). */
- *curlcode = -1; /* EWOULDBLOCK */
+ *curlcode = CURLE_AGAIN;
return -1;
case SSL_ERROR_IO:
switch (errno) {
case EWOULDBLOCK:
- *curlcode = -1; /* EWOULDBLOCK */
+ *curlcode = CURLE_AGAIN;
return -1;
}
diff --git a/lib/qssl.h b/lib/qssl.h
index a0cf8cc..45190e6 100644
--- a/lib/qssl.h
+++ b/lib/qssl.h
@@ -36,20 +36,6 @@ void Curl_qsossl_close(struct connectdata *conn, int sockindex);
int Curl_qsossl_close_all(struct SessionHandle * data);
int Curl_qsossl_shutdown(struct connectdata * conn, int sockindex);
-/* for documentation see Curl_ssl_send() in sslgen.h */
-ssize_t Curl_qsossl_send(struct connectdata * conn,
- int sockindex,
- const void * mem,
- size_t len,
- int * curlcode);
-
-/* for documentation see Curl_ssl_recv() in sslgen.h */
-ssize_t Curl_qsossl_recv(struct connectdata * conn, /* connection data */
- int num, /* socketindex */
- char * buf, /* store read data here */
- size_t buffersize, /* max amount to read */
- int * curlcode);
-
size_t Curl_qsossl_version(char * buffer, size_t size);
int Curl_qsossl_check_cxn(struct connectdata * cxn);
@@ -66,8 +52,6 @@ int Curl_qsossl_check_cxn(struct connectdata * cxn);
#define curlssl_set_engine(x,y) CURLE_FAILED_INIT
#define curlssl_set_engine_default(x) CURLE_FAILED_INIT
#define curlssl_engines_list(x) NULL
-#define curlssl_send Curl_qsossl_send
-#define curlssl_recv Curl_qsossl_recv
#define curlssl_version Curl_qsossl_version
#define curlssl_check_cxn(x) Curl_qsossl_check_cxn(x)
#define curlssl_data_pending(x,y) 0
diff --git a/lib/rtsp.c b/lib/rtsp.c
index 8cc200b..1254c73 100644
--- a/lib/rtsp.c
+++ b/lib/rtsp.c
@@ -254,8 +254,8 @@ CURLcode Curl_rtsp(struct connectdata *conn, bool *done)
}
if(rtspreq == RTSPREQ_RECEIVE) {
- result = Curl_setup_transfer(conn, FIRSTSOCKET, -1, TRUE,
- &http->readbytecount, -1, NULL);
+ Curl_setup_transfer(conn, FIRSTSOCKET, -1, TRUE,
+ &http->readbytecount, -1, NULL);
return result;
}
@@ -503,15 +503,9 @@ CURLcode Curl_rtsp(struct connectdata *conn, bool *done)
return result;
}
- result = Curl_setup_transfer(conn, FIRSTSOCKET, -1, TRUE,
- &http->readbytecount,
- putsize?FIRSTSOCKET:-1,
- putsize?&http->writebytecount:NULL);
-
- if(result) {
- failf(data, "Failed RTSP transfer");
- return result;
- }
+ Curl_setup_transfer(conn, FIRSTSOCKET, -1, TRUE, &http->readbytecount,
+ putsize?FIRSTSOCKET:-1,
+ putsize?&http->writebytecount:NULL);
/* Increment the CSeq on success */
data->state.rtsp_next_client_CSeq++;
@@ -715,7 +709,7 @@ CURLcode Curl_rtsp_parseheader(struct connectdata *conn,
while(*start && ISSPACE(*start))
start++;
- if(!start) {
+ if(!*start) {
failf(data, "Got a blank Session ID");
}
else if(data->set.str[STRING_RTSP_SESSION_ID]) {
diff --git a/lib/security.c b/lib/security.c
index 03fc679..73a5540 100644
--- a/lib/security.c
+++ b/lib/security.c
@@ -10,7 +10,7 @@
* Copyright (c) 1998, 1999 Kungliga Tekniska Högskolan
* (Royal Institute of Technology, Stockholm, Sweden).
*
- * Copyright (C) 2001 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 2001 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
*
* All rights reserved.
*
@@ -46,10 +46,7 @@
#ifndef CURL_DISABLE_FTP
#if defined(HAVE_KRB4) || defined(HAVE_GSSAPI)
-#define _MPRINTF_REPLACE /* we want curl-functions instead of native ones */
-#include <curl/mprintf.h>
-
-#include <stdlib.h>
+#include <stdarg.h>
#include <string.h>
#ifdef HAVE_NETDB_H
@@ -61,11 +58,11 @@
#endif
#include "urldata.h"
-#include "krb4.h"
#include "curl_base64.h"
-#include "sendf.h"
-#include "ftp.h"
#include "curl_memory.h"
+#include "krb4.h"
+#include "ftp.h"
+#include "sendf.h"
#include "rawstr.h"
/* The last #include file should be: */
@@ -91,92 +88,142 @@ name_to_level(const char *name)
return (enum protection_level)-1;
}
+/* Convert a protocol |level| to its char representation.
+ We take an int to catch programming mistakes. */
+static char level_to_char(int level) {
+ switch(level) {
+ case prot_clear:
+ return 'C';
+ case prot_safe:
+ return 'S';
+ case prot_confidential:
+ return 'E';
+ case prot_private:
+ return 'P';
+ case prot_cmd:
+ /* Fall through */
+ default:
+ /* Those 2 cases should not be reached! */
+ break;
+ }
+ DEBUGASSERT(0);
+ /* Default to the most secure alternative. */
+ return 'P';
+}
+
static const struct Curl_sec_client_mech * const mechs[] = {
-#ifdef HAVE_GSSAPI
+#if defined(HAVE_GSSAPI)
&Curl_krb5_client_mech,
#endif
-#ifdef HAVE_KRB4
+#if defined(HAVE_KRB4)
&Curl_krb4_client_mech,
#endif
NULL
};
-/* TODO: This function isn't actually used anywhere and should be removed */
-int
-Curl_sec_getc(struct connectdata *conn, FILE *F)
+/* Send an FTP command defined by |message| and the optional arguments. The
+ function returns the ftp_code. If an error occurs, -1 is returned. */
+static int ftp_send_command(struct connectdata *conn, const char *message, ...)
{
- if(conn->sec_complete && conn->data_prot) {
- char c;
- if(Curl_sec_read(conn, fileno(F), &c, 1) <= 0)
- return EOF;
- return c;
+ int ftp_code;
+ ssize_t nread;
+ va_list args;
+ char print_buffer[50];
+
+ va_start(args, message);
+ vsnprintf(print_buffer, sizeof(print_buffer), message, args);
+ va_end(args);
+
+ if(Curl_ftpsendf(conn, print_buffer) != CURLE_OK) {
+ ftp_code = -1;
+ }
+ else {
+ if(Curl_GetFTPResponse(&nread, conn, &ftp_code) != CURLE_OK)
+ ftp_code = -1;
}
- else
- return getc(F);
+
+ (void)nread; /* Unused */
+ return ftp_code;
}
-static int
-block_read(int fd, void *buf, size_t len)
+/* Read |len| from the socket |fd| and store it in |to|. Return a CURLcode
+ saying whether an error occured or CURLE_OK if |len| was read. */
+static CURLcode
+socket_read(curl_socket_t fd, void *to, size_t len)
{
- unsigned char *p = buf;
- int b;
- while(len) {
- b = read(fd, p, len);
- if(b == 0)
- return 0;
- else if(b < 0 && (errno == EINTR || errno == EAGAIN))
- /* TODO: this will busy loop in the EAGAIN case */
- continue;
- else if(b < 0)
- return -1;
- len -= b;
- p += b;
+ char *to_p = to;
+ CURLcode code;
+ ssize_t nread;
+
+ while(len > 0) {
+ code = Curl_read_plain(fd, to_p, len, &nread);
+ if(code == CURLE_OK) {
+ len -= nread;
+ to_p += nread;
+ }
+ else {
+ /* FIXME: We are doing a busy wait */
+ if(code == CURLE_AGAIN)
+ continue;
+ return code;
+ }
}
- return p - (unsigned char*)buf;
+ return CURLE_OK;
}
-static int
-block_write(int fd, const void *buf, size_t len)
+
+/* Write |len| bytes from the buffer |to| to the socket |fd|. Return a
+ CURLcode saying whether an error occured or CURLE_OK if |len| was
+ written. */
+static CURLcode
+socket_write(struct connectdata *conn, curl_socket_t fd, const void *to,
+ size_t len)
{
- const unsigned char *p = buf;
- int b;
- while(len) {
- b = write(fd, p, len);
- if(b < 0 && (errno == EINTR || errno == EAGAIN))
- continue;
- else if(b < 0)
- return -1;
- len -= b;
- p += b;
+ const char *to_p = to;
+ CURLcode code;
+ ssize_t written;
+
+ while(len > 0) {
+ code = Curl_write_plain(conn, fd, to_p, len, &written);
+ if(code == CURLE_OK) {
+ len -= written;
+ to_p += written;
+ }
+ else {
+ /* FIXME: We are doing a busy wait */
+ if(code == CURLE_AGAIN)
+ continue;
+ return code;
+ }
}
- return p - (unsigned char*)buf;
+ return CURLE_OK;
}
-static int
-sec_get_data(struct connectdata *conn,
- int fd, struct krb4buffer *buf)
+static CURLcode read_data(struct connectdata *conn,
+ curl_socket_t fd,
+ struct krb4buffer *buf)
{
int len;
- int b;
+ void* tmp;
+ CURLcode ret;
+
+ ret = socket_read(fd, &len, sizeof(len));
+ if (ret != CURLE_OK)
+ return ret;
- b = block_read(fd, &len, sizeof(len));
- if(b == 0)
- return 0;
- else if(b < 0)
- return -1;
len = ntohl(len);
- /* TODO: This realloc will cause a memory leak in an out of memory
- * condition */
- buf->data = realloc(buf->data, len);
- b = buf->data ? block_read(fd, buf->data, len) : -1;
- if(b == 0)
- return 0;
- else if(b < 0)
- return -1;
- buf->size = (conn->mech->decode)(conn->app_data, buf->data, len,
- conn->data_prot, conn);
+ tmp = realloc(buf->data, len);
+ if (tmp == NULL)
+ return CURLE_OUT_OF_MEMORY;
+
+ buf->data = tmp;
+ ret = socket_read(fd, buf->data, len);
+ if (ret != CURLE_OK)
+ return ret;
+ buf->size = conn->mech->decode(conn->app_data, buf->data, len,
+ conn->data_prot, conn);
buf->index = 0;
- return 0;
+ return CURLE_OK;
}
static size_t
@@ -189,131 +236,109 @@ buffer_read(struct krb4buffer *buf, void *data, size_t len)
return len;
}
-static size_t
-buffer_write(struct krb4buffer *buf, void *data, size_t len)
+/* Matches Curl_recv signature */
+static ssize_t sec_recv(struct connectdata *conn, int sockindex,
+ char *buffer, size_t len, CURLcode *err)
{
- if(buf->index + len > buf->size) {
- void *tmp;
- if(buf->data == NULL)
- tmp = malloc(1024);
- else
- tmp = realloc(buf->data, buf->index + len);
- if(tmp == NULL)
- return -1;
- buf->data = tmp;
- buf->size = buf->index + len;
- }
- memcpy((char*)buf->data + buf->index, data, len);
- buf->index += len;
- return len;
-}
+ size_t bytes_read;
+ size_t total_read = 0;
+ curl_socket_t fd = conn->sock[sockindex];
-int
-Curl_sec_read(struct connectdata *conn, int fd, void *buffer, int length)
-{
- size_t len;
- int rx = 0;
+ *err = CURLE_OK;
- if(conn->sec_complete == 0 || conn->data_prot == 0)
- return read(fd, buffer, length);
+ /* Handle clear text response. */
+ if(conn->sec_complete == 0 || conn->data_prot == prot_clear)
+ return read(fd, buffer, len);
- if(conn->in_buffer.eof_flag){
+ if(conn->in_buffer.eof_flag) {
conn->in_buffer.eof_flag = 0;
return 0;
}
- len = buffer_read(&conn->in_buffer, buffer, length);
- length -= len;
- rx += len;
- buffer = (char*)buffer + len;
+ bytes_read = buffer_read(&conn->in_buffer, buffer, len);
+ len -= bytes_read;
+ total_read += bytes_read;
+ buffer += bytes_read;
- while(length) {
- if(sec_get_data(conn, fd, &conn->in_buffer) < 0)
+ while(len > 0) {
+ if(read_data(conn, fd, &conn->in_buffer) != CURLE_OK)
return -1;
if(conn->in_buffer.size == 0) {
- if(rx)
+ if(bytes_read > 0)
conn->in_buffer.eof_flag = 1;
- return rx;
+ return bytes_read;
}
- len = buffer_read(&conn->in_buffer, buffer, length);
- length -= len;
- rx += len;
- buffer = (char*)buffer + len;
+ bytes_read = buffer_read(&conn->in_buffer, buffer, len);
+ len -= bytes_read;
+ total_read += bytes_read;
+ buffer += bytes_read;
}
- return rx;
+ /* FIXME: Check for overflow */
+ return total_read;
}
-static int
-sec_send(struct connectdata *conn, int fd, const char *from, int length)
+/* Send |length| bytes from |from| to the |fd| socket taking care of encoding
+ and negociating with the server. |from| can be NULL. */
+/* FIXME: We don't check for errors nor report any! */
+static void do_sec_send(struct connectdata *conn, curl_socket_t fd,
+ const char *from, int length)
{
- int bytes;
- void *buf;
- enum protection_level protlevel = conn->data_prot;
- int iscmd = protlevel == prot_cmd;
+ size_t bytes;
+ size_t htonl_bytes;
+ char *buffer;
+ char *cmd_buffer;
+ enum protection_level prot_level = conn->data_prot;
+ bool iscmd = prot_level == prot_cmd;
if(iscmd) {
if(!strncmp(from, "PASS ", 5) || !strncmp(from, "ACCT ", 5))
- protlevel = prot_private;
+ prot_level = prot_private;
else
- protlevel = conn->command_prot;
+ prot_level = conn->command_prot;
}
- bytes = (conn->mech->encode)(conn->app_data, from, length, protlevel,
- &buf, conn);
+ bytes = conn->mech->encode(conn->app_data, from, length, prot_level,
+ (void**)&buffer, conn);
if(iscmd) {
- char *cmdbuf;
-
- bytes = Curl_base64_encode(conn->data, (char *)buf, bytes, &cmdbuf);
+ bytes = Curl_base64_encode(conn->data, buffer, bytes, &cmd_buffer);
if(bytes > 0) {
- if(protlevel == prot_private)
- block_write(fd, "ENC ", 4);
+ static const char *enc = "ENC ";
+ static const char *mic = "MIC ";
+ if(prot_level == prot_private)
+ socket_write(conn, fd, enc, 4);
else
- block_write(fd, "MIC ", 4);
- block_write(fd, cmdbuf, bytes);
- block_write(fd, "\r\n", 2);
- Curl_infof(conn->data, "%s %s\n",
- protlevel == prot_private ? "ENC" : "MIC", cmdbuf);
- free(cmdbuf);
+ socket_write(conn, fd, mic, 4);
+
+ socket_write(conn, fd, cmd_buffer, bytes);
+ socket_write(conn, fd, "\r\n", 2);
+ infof(conn->data, "Send: %s%s\n", prot_level == prot_private?enc:mic,
+ cmd_buffer);
+ free(cmd_buffer);
}
}
else {
- bytes = htonl(bytes);
- block_write(fd, &bytes, sizeof(bytes));
- block_write(fd, buf, ntohl(bytes));
- }
- free(buf);
- return length;
-}
-
-int
-Curl_sec_fflush_fd(struct connectdata *conn, int fd)
-{
- if(conn->data_prot != prot_clear) {
- if(conn->out_buffer.index > 0){
- Curl_sec_write(conn, fd,
- conn->out_buffer.data, conn->out_buffer.index);
- conn->out_buffer.index = 0;
- }
- sec_send(conn, fd, NULL, 0);
+ htonl_bytes = htonl(bytes);
+ socket_write(conn, fd, &htonl_bytes, sizeof(htonl_bytes));
+ socket_write(conn, fd, buffer, bytes);
}
- return 0;
+ free(buffer);
}
-int
-Curl_sec_write(struct connectdata *conn, int fd, const char *buffer, int length)
+static ssize_t sec_write(struct connectdata *conn, curl_socket_t fd,
+ const char *buffer, size_t length)
{
- int len = conn->buffer_size;
+ /* FIXME: Check for overflow */
+ ssize_t len = conn->buffer_size;
int tx = 0;
- if(conn->data_prot == prot_clear)
- return write(fd, buffer, length);
-
- len -= (conn->mech->overhead)(conn->app_data, conn->data_prot, len);
+ len -= conn->mech->overhead(conn->app_data, conn->data_prot, len);
if(len <= 0)
len = length;
- while(length){
- if(length < len)
+ while(length) {
+ if(len >= 0 || length < (size_t)len) {
+ /* FIXME: Check for overflow. */
len = length;
- sec_send(conn, fd, buffer, len);
+ }
+ do_sec_send(conn, fd, buffer, len);
length -= len;
buffer += len;
tx += len;
@@ -321,63 +346,57 @@ Curl_sec_write(struct connectdata *conn, int fd, const char *buffer, int length)
return tx;
}
-ssize_t
-Curl_sec_send(struct connectdata *conn, int num, const char *buffer, int length)
-{
- curl_socket_t fd = conn->sock[num];
- return (ssize_t)Curl_sec_write(conn, fd, buffer, length);
-}
-
-int
-Curl_sec_putc(struct connectdata *conn, int c, FILE *F)
+/* Matches Curl_send signature */
+static ssize_t sec_send(struct connectdata *conn, int sockindex,
+ const void *buffer, size_t len, CURLcode *err)
{
- char ch = (char)c;
- if(conn->data_prot == prot_clear)
- return putc(c, F);
-
- buffer_write(&conn->out_buffer, &ch, 1);
- if(c == '\n' || conn->out_buffer.index >= 1024 /* XXX */) {
- Curl_sec_write(conn, fileno(F), conn->out_buffer.data,
- conn->out_buffer.index);
- conn->out_buffer.index = 0;
- }
- return c;
+ curl_socket_t fd = conn->sock[sockindex];
+ *err = CURLE_OK;
+ return sec_write(conn, fd, buffer, len);
}
-int
-Curl_sec_read_msg(struct connectdata *conn, char *s, int level)
+/* FIXME: |level| should not be an int but a struct protection_level */
+int Curl_sec_read_msg(struct connectdata *conn, char *buffer, int level)
{
- int len;
- unsigned char *buf;
- int code;
-
- len = Curl_base64_decode(s + 4, &buf); /* XXX */
- if(len > 0)
- len = (conn->mech->decode)(conn->app_data, buf, len, level, conn);
- else
+ /* decoded_len should be size_t or ssize_t but conn->mech->decode returns an
+ int */
+ int decoded_len;
+ char *buf;
+ int ret_code;
+
+ decoded_len = Curl_base64_decode(buffer + 4, (unsigned char **)&buf);
+ if(decoded_len <= 0) {
+ free(buf);
return -1;
+ }
- if(len < 0) {
+ decoded_len = conn->mech->decode(conn->app_data, buf, decoded_len,
+ level, conn);
+ if(decoded_len <= 0) {
free(buf);
return -1;
}
if(conn->data->set.verbose) {
- buf[len] = '\n';
- Curl_debug(conn->data, CURLINFO_HEADER_IN, (char *)buf, len + 1, conn);
+ buf[decoded_len] = '\n';
+ Curl_debug(conn->data, CURLINFO_HEADER_IN, buf, decoded_len + 1, conn);
}
- buf[len] = '\0';
-
+ buf[decoded_len] = '\0';
+ DEBUGASSERT(decoded_len > 3);
if(buf[3] == '-')
- code = 0;
- else
- sscanf((char *)buf, "%d", &code);
- if(buf[len-1] == '\n')
- buf[len-1] = '\0';
- strcpy(s, (char *)buf);
+ ret_code = 0;
+ else {
+ /* Check for error? */
+ sscanf(buf, "%d", &ret_code);
+ }
+
+ if(buf[decoded_len - 1] == '\n')
+ buf[decoded_len - 1] = '\0';
+ /* FIXME: Is |buffer| length always greater than |decoded_len|? */
+ strcpy(buffer, buf);
free(buf);
- return code;
+ return ret_code;
}
enum protection_level
@@ -388,64 +407,62 @@ Curl_set_command_prot(struct connectdata *conn, enum protection_level level)
return old;
}
-static int
-sec_prot_internal(struct connectdata *conn, int level)
+/* FIXME: The error code returned here is never checked. */
+int Curl_sec_set_protection_level(struct connectdata *conn)
{
- char *p;
- unsigned int s = 1048576;
- ssize_t nread;
+ int code;
+ char* pbsz;
+ static unsigned int buffer_size = 1 << 20; /* 1048576 */
+ enum protection_level level = conn->request_data_prot;
- if(!conn->sec_complete){
- infof(conn->data, "No security data exchange has taken place.\n");
+ if(!conn->sec_complete) {
+ infof(conn->data, "Trying to change the protection level after the"
+ "completion of the data exchange.\n");
return -1;
}
- if(level){
- int code;
- if(Curl_ftpsendf(conn, "PBSZ %u", s))
- return -1;
+ /* Bail out if we try to set up the same level */
+ if(conn->data_prot == level)
+ return 0;
- if(Curl_GetFTPResponse(&nread, conn, &code))
+ if(level) {
+ code = ftp_send_command(conn, "PBSZ %u", buffer_size);
+ if(code < 0)
return -1;
- if(code/100 != 2){
- failf(conn->data, "Failed to set protection buffer size.");
+ if(code/100 != 2) {
+ failf(conn->data, "Failed to set the protection's buffer size.");
return -1;
}
- conn->buffer_size = s;
-
- p = strstr(conn->data->state.buffer, "PBSZ=");
- if(p)
- sscanf(p, "PBSZ=%u", &s);
- if(s < conn->buffer_size)
- conn->buffer_size = s;
+ conn->buffer_size = buffer_size;
+
+ pbsz = strstr(conn->data->state.buffer, "PBSZ=");
+ if(pbsz) {
+ /* FIXME: Checks for errors in sscanf? */
+ sscanf(pbsz, "PBSZ=%u", &buffer_size);
+ if(buffer_size < conn->buffer_size)
+ conn->buffer_size = buffer_size;
+ }
}
- if(Curl_ftpsendf(conn, "PROT %c", level["CSEP"]))
- return -1;
+ /* Now try to negiociate the protection level. */
+ code = ftp_send_command(conn, "PROT %c", level_to_char(level));
- if(Curl_GetFTPResponse(&nread, conn, NULL))
+ if(code < 0)
return -1;
- if(conn->data->state.buffer[0] != '2'){
- failf(conn->data, "Failed to set protection level.");
+ if(code/100 != 2) {
+ failf(conn->data, "Failed to set the protection level.");
return -1;
}
- conn->data_prot = (enum protection_level)level;
+ conn->data_prot = level;
if(level == prot_private)
- conn->command_prot = (enum protection_level)level;
- return 0;
-}
+ conn->command_prot = level;
-void
-Curl_sec_set_protection_level(struct connectdata *conn)
-{
- if(conn->sec_complete && conn->data_prot != conn->request_data_prot)
- sec_prot_internal(conn, conn->request_data_prot);
+ return 0;
}
-
int
Curl_sec_request_prot(struct connectdata *conn, const char *level)
{
@@ -456,67 +473,81 @@ Curl_sec_request_prot(struct connectdata *conn, const char *level)
return 0;
}
-int
-Curl_sec_login(struct connectdata *conn)
+static CURLcode choose_mech(struct connectdata *conn)
{
int ret;
- const struct Curl_sec_client_mech * const *m;
- ssize_t nread;
- struct SessionHandle *data=conn->data;
- int ftpcode;
-
- for(m = mechs; *m && (*m)->name; m++) {
- void *tmp;
-
- tmp = realloc(conn->app_data, (*m)->size);
- if(tmp == NULL) {
- failf (data, "realloc %u failed", (*m)->size);
- return -1;
- }
- conn->app_data = tmp;
-
- if((*m)->init && (*(*m)->init)(conn->app_data) != 0) {
- infof(data, "Skipping %s...\n", (*m)->name);
+ struct SessionHandle *data = conn->data;
+ const struct Curl_sec_client_mech * const *mech;
+ void *tmp_allocation;
+ const char *mech_name;
+
+ for(mech = mechs; (*mech); ++mech) {
+ mech_name = (*mech)->name;
+ /* We have no mechanism with a NULL name but keep this check */
+ DEBUGASSERT(mech_name != NULL);
+ if(mech_name == NULL) {
+ infof(data, "Skipping mechanism with empty name (%p)\n", mech);
continue;
}
- infof(data, "Trying %s...\n", (*m)->name);
+ tmp_allocation = realloc(conn->app_data, (*mech)->size);
+ if(tmp_allocation == NULL) {
+ failf(data, "Failed realloc of size %u", (*mech)->size);
+ mech = NULL;
+ return CURLE_OUT_OF_MEMORY;
+ }
+ conn->app_data = tmp_allocation;
- if(Curl_ftpsendf(conn, "AUTH %s", (*m)->name))
- return -1;
+ if((*mech)->init) {
+ ret = (*mech)->init(conn);
+ if(ret != 0) {
+ infof(data, "Failed initialization for %s. Skipping it.\n", mech_name);
+ continue;
+ }
+ }
- if(Curl_GetFTPResponse(&nread, conn, &ftpcode))
- return -1;
+ infof(data, "Trying mechanism %s...\n", mech_name);
+ ret = ftp_send_command(conn, "AUTH %s", mech_name);
+ if(ret < 0)
+ /* FIXME: This error is too generic but it is OK for now. */
+ return CURLE_COULDNT_CONNECT;
- if(conn->data->state.buffer[0] != '3'){
- switch(ftpcode) {
+ if(ret/100 != 3) {
+ switch(ret) {
case 504:
- infof(data,
- "%s is not supported by the server.\n", (*m)->name);
+ infof(data, "Mechanism %s is not supported by the server (server "
+ "returned ftp code: 504).\n", mech_name);
break;
case 534:
- infof(data, "%s rejected as security mechanism.\n", (*m)->name);
+ infof(data, "Mechanism %s was rejected by the server (server returned "
+ "ftp code: 534).\n", mech_name);
break;
default:
- if(conn->data->state.buffer[0] == '5') {
- infof(data, "The server doesn't support the FTP "
- "security extensions.\n");
- return -1;
+ if(ret/100 == 5) {
+ infof(data, "The server does not support the security extensions.\n");
+ return CURLE_USE_SSL_FAILED;
}
break;
}
continue;
}
- ret = (*(*m)->auth)(conn->app_data, conn);
+ /* Authenticate */
+ ret = (*mech)->auth(conn->app_data, conn);
if(ret == AUTH_CONTINUE)
continue;
- else if(ret != AUTH_OK){
- /* mechanism is supposed to output error string */
+ else if(ret != AUTH_OK) {
+ /* Mechanism has dumped the error to stderr, don't error here. */
return -1;
}
- conn->mech = *m;
+ DEBUGASSERT(ret == AUTH_OK);
+
+ conn->mech = *mech;
conn->sec_complete = 1;
+ conn->recv[FIRSTSOCKET] = sec_recv;
+ conn->send[FIRSTSOCKET] = sec_send;
+ conn->recv[SECONDARYSOCKET] = sec_recv;
+ conn->send[SECONDARYSOCKET] = sec_send;
conn->command_prot = prot_safe;
/* Set the requested protection level */
/* BLOCKING */
@@ -524,23 +555,38 @@ Curl_sec_login(struct connectdata *conn)
break;
}
- return *m == NULL;
+ return mech != NULL ? CURLE_OK : CURLE_FAILED_INIT;
}
+CURLcode
+Curl_sec_login(struct connectdata *conn)
+{
+ return choose_mech(conn);
+}
+
+
void
Curl_sec_end(struct connectdata *conn)
{
- if(conn->mech != NULL) {
- if(conn->mech->end)
- (conn->mech->end)(conn->app_data);
- memset(conn->app_data, 0, conn->mech->size);
+ if(conn->mech != NULL && conn->mech->end)
+ conn->mech->end(conn->app_data);
+ if(conn->app_data) {
free(conn->app_data);
conn->app_data = NULL;
}
+ if(conn->in_buffer.data) {
+ free(conn->in_buffer.data);
+ conn->in_buffer.data = NULL;
+ conn->in_buffer.size = 0;
+ conn->in_buffer.index = 0;
+ /* FIXME: Is this really needed? */
+ conn->in_buffer.eof_flag = 0;
+ }
conn->sec_complete = 0;
conn->data_prot = (enum protection_level)0;
- conn->mech=NULL;
+ conn->mech = NULL;
}
-#endif /* HAVE_KRB4 */
+#endif /* HAVE_KRB4 || HAVE_GSSAPI */
+
#endif /* CURL_DISABLE_FTP */
diff --git a/lib/sendf.c b/lib/sendf.c
index ff4aee3..b73c224 100644
--- a/lib/sendf.c
+++ b/lib/sendf.c
@@ -234,42 +234,11 @@ CURLcode Curl_sendf(curl_socket_t sockfd, struct connectdata *conn,
return res;
}
-static ssize_t send_plain(struct connectdata *conn,
- int num,
- const void *mem,
- size_t len)
-{
- curl_socket_t sockfd = conn->sock[num];
- ssize_t bytes_written = swrite(sockfd, mem, len);
-
- if(-1 == bytes_written) {
- int err = SOCKERRNO;
-
- if(
-#ifdef WSAEWOULDBLOCK
- /* This is how Windows does it */
- (WSAEWOULDBLOCK == err)
-#else
- /* errno may be EWOULDBLOCK or on some systems EAGAIN when it returned
- due to its inability to send off data without blocking. We therefor
- treat both error codes the same here */
- (EWOULDBLOCK == err) || (EAGAIN == err) || (EINTR == err)
-#endif
- )
- /* this is just a case of EWOULDBLOCK */
- bytes_written=0;
- else
- failf(conn->data, "Send failure: %s",
- Curl_strerror(conn, err));
- }
- return bytes_written;
-}
-
/*
* Curl_write() is an internal write function that sends data to the
* server. Works with plain sockets, SCP, SSL or kerberos.
*
- * If the write would block (EWOULDBLOCK), we return CURLE_OK and
+ * If the write would block (CURLE_AGAIN), we return CURLE_OK and
* (*written == 0). Otherwise we return regular CURLcode value.
*/
CURLcode Curl_write(struct connectdata *conn,
@@ -279,29 +248,20 @@ CURLcode Curl_write(struct connectdata *conn,
ssize_t *written)
{
ssize_t bytes_written;
- int curlcode = CURLE_OK;
+ CURLcode curlcode = CURLE_OK;
int num = (sockfd == conn->sock[SECONDARYSOCKET]);
- if(conn->ssl[num].state == ssl_connection_complete)
- bytes_written = Curl_ssl_send(conn, num, mem, len, &curlcode);
- else if(Curl_ssh_enabled(conn, PROT_SCP))
- bytes_written = Curl_scp_send(conn, num, mem, len);
- else if(Curl_ssh_enabled(conn, PROT_SFTP))
- bytes_written = Curl_sftp_send(conn, num, mem, len);
- else if(conn->sec_complete)
- bytes_written = Curl_sec_send(conn, num, mem, len);
- else
- bytes_written = send_plain(conn, num, mem, len);
+ bytes_written = conn->send[num](conn, num, mem, len, &curlcode);
*written = bytes_written;
- if(-1 != bytes_written)
- /* we completely ignore the curlcode value when -1 is not returned */
+ if(bytes_written >= 0)
+ /* we completely ignore the curlcode value when subzero is not returned */
return CURLE_OK;
- /* handle EWOULDBLOCK or a send failure */
+ /* handle CURLE_AGAIN or a send failure */
switch(curlcode) {
- case /* EWOULDBLOCK */ -1:
- *written = /* EWOULDBLOCK */ 0;
+ case CURLE_AGAIN:
+ *written = 0;
return CURLE_OK;
case CURLE_OK:
@@ -314,6 +274,39 @@ CURLcode Curl_write(struct connectdata *conn,
}
}
+ssize_t Curl_send_plain(struct connectdata *conn, int num,
+ const void *mem, size_t len, CURLcode *code)
+{
+ curl_socket_t sockfd = conn->sock[num];
+ ssize_t bytes_written = swrite(sockfd, mem, len);
+
+ *code = CURLE_OK;
+ if(-1 == bytes_written) {
+ int err = SOCKERRNO;
+
+ if(
+#ifdef WSAEWOULDBLOCK
+ /* This is how Windows does it */
+ (WSAEWOULDBLOCK == err)
+#else
+ /* errno may be EWOULDBLOCK or on some systems EAGAIN when it returned
+ due to its inability to send off data without blocking. We therefor
+ treat both error codes the same here */
+ (EWOULDBLOCK == err) || (EAGAIN == err) || (EINTR == err)
+#endif
+ ) {
+ /* this is just a case of EWOULDBLOCK */
+ bytes_written=0;
+ *code = CURLE_AGAIN;
+ } else {
+ failf(conn->data, "Send failure: %s",
+ Curl_strerror(conn, err));
+ *code = CURLE_SEND_ERROR;
+ }
+ }
+ return bytes_written;
+}
+
/*
* Curl_write_plain() is an internal write function that sends data to the
* server using plain sockets only. Otherwise meant to have the exact same
@@ -329,14 +322,45 @@ CURLcode Curl_write_plain(struct connectdata *conn,
CURLcode retcode;
int num = (sockfd == conn->sock[SECONDARYSOCKET]);
- bytes_written = send_plain(conn, num, mem, len);
+ bytes_written = Curl_send_plain(conn, num, mem, len, &retcode);
*written = bytes_written;
- retcode = (-1 != bytes_written)?CURLE_OK:CURLE_SEND_ERROR;
return retcode;
}
+ssize_t Curl_recv_plain(struct connectdata *conn, int num, char *buf,
+ size_t len, CURLcode *code)
+{
+ curl_socket_t sockfd = conn->sock[num];
+ ssize_t nread = sread(sockfd, buf, len);
+
+ *code = CURLE_OK;
+ if(-1 == nread) {
+ int err = SOCKERRNO;
+
+ if(
+#ifdef WSAEWOULDBLOCK
+ /* This is how Windows does it */
+ (WSAEWOULDBLOCK == err)
+#else
+ /* errno may be EWOULDBLOCK or on some systems EAGAIN when it returned
+ due to its inability to send off data without blocking. We therefor
+ treat both error codes the same here */
+ (EWOULDBLOCK == err) || (EAGAIN == err) || (EINTR == err)
+#endif
+ ) {
+ /* this is just a case of EWOULDBLOCK */
+ *code = CURLE_AGAIN;
+ } else {
+ failf(conn->data, "Recv failure: %s",
+ Curl_strerror(conn, err));
+ *code = CURLE_RECV_ERROR;
+ }
+ }
+ return nread;
+}
+
static CURLcode pausewrite(struct SessionHandle *data,
int type, /* what type of data */
const char *ptr,
@@ -476,7 +500,7 @@ CURLcode Curl_client_write(struct connectdata *conn,
return CURLE_OK;
}
-int Curl_read_plain(curl_socket_t sockfd,
+CURLcode Curl_read_plain(curl_socket_t sockfd,
char *buf,
size_t bytesfromsocket,
ssize_t *n)
@@ -490,7 +514,7 @@ int Curl_read_plain(curl_socket_t sockfd,
#else
if((EWOULDBLOCK == err) || (EAGAIN == err) || (EINTR == err))
#endif
- return -1;
+ return CURLE_AGAIN;
else
return CURLE_RECV_ERROR;
}
@@ -504,15 +528,15 @@ int Curl_read_plain(curl_socket_t sockfd,
* Internal read-from-socket function. This is meant to deal with plain
* sockets, SSL sockets and kerberos sockets.
*
- * If the read would block (EWOULDBLOCK) we return -1. Otherwise we return
- * a regular CURLcode value.
+ * Returns a regular CURLcode value.
*/
-int Curl_read(struct connectdata *conn, /* connection data */
+CURLcode Curl_read(struct connectdata *conn, /* connection data */
curl_socket_t sockfd, /* read from this socket */
char *buf, /* store read data here */
size_t sizerequested, /* max amount to read */
ssize_t *n) /* amount bytes read */
{
+ CURLcode curlcode = CURLE_RECV_ERROR;
ssize_t nread = 0;
size_t bytesfromsocket = 0;
char *buffertofill = NULL;
@@ -552,50 +576,17 @@ int Curl_read(struct connectdata *conn, /* connection data */
buffertofill = buf;
}
- if(conn->ssl[num].state == ssl_connection_complete) {
- int curlcode = CURLE_RECV_ERROR;
- nread = Curl_ssl_recv(conn, num, buffertofill, bytesfromsocket, &curlcode);
+ nread = conn->recv[num](conn, num, buffertofill, bytesfromsocket, &curlcode);
+ if(nread < 0)
+ return curlcode;
- if(nread == -1)
- return curlcode;
- }
- else if(Curl_ssh_enabled(conn, (PROT_SCP|PROT_SFTP))) {
- if(conn->protocol & PROT_SCP)
- nread = Curl_scp_recv(conn, num, buffertofill, bytesfromsocket);
- else if(conn->protocol & PROT_SFTP)
- nread = Curl_sftp_recv(conn, num, buffertofill, bytesfromsocket);
-#ifdef LIBSSH2CHANNEL_EAGAIN
- if(nread == LIBSSH2CHANNEL_EAGAIN)
- /* EWOULDBLOCK */
- return -1;
-#endif
- if(nread < 0)
- /* since it is negative and not EAGAIN, it was a protocol-layer error */
- return CURLE_RECV_ERROR;
- }
- else {
- if(conn->sec_complete)
- nread = Curl_sec_read(conn, sockfd, buffertofill,
- bytesfromsocket);
- /* TODO: Need to handle EAGAIN here somehow, similar to how it
- * is done in Curl_read_plain, either right here or in Curl_sec_read
- * itself. */
- else {
- int ret = Curl_read_plain(sockfd, buffertofill, bytesfromsocket,
- &nread);
- if(ret)
- return ret;
- }
+ if(pipelining) {
+ memcpy(buf, conn->master_buffer, nread);
+ conn->buf_len = nread;
+ conn->read_pos = nread;
}
- if(nread >= 0) {
- if(pipelining) {
- memcpy(buf, conn->master_buffer, nread);
- conn->buf_len = nread;
- conn->read_pos = nread;
- }
- *n += nread;
- }
+ *n += nread;
return CURLE_OK;
}
diff --git a/lib/sendf.h b/lib/sendf.h
index 5732a0b..8f0ea24 100644
--- a/lib/sendf.h
+++ b/lib/sendf.h
@@ -55,15 +55,20 @@ CURLcode Curl_client_write(struct connectdata *conn, int type, char *ptr,
size_t len);
/* internal read-function, does plain socket only */
-int Curl_read_plain(curl_socket_t sockfd,
- char *buf,
- size_t bytesfromsocket,
- ssize_t *n);
+CURLcode Curl_read_plain(curl_socket_t sockfd,
+ char *buf,
+ size_t bytesfromsocket,
+ ssize_t *n);
+
+ssize_t Curl_recv_plain(struct connectdata *conn, int num, char *buf,
+ size_t len, CURLcode *code);
+ssize_t Curl_send_plain(struct connectdata *conn, int num,
+ const void *mem, size_t len, CURLcode *code);
/* internal read-function, does plain socket, SSL and krb4 */
-int Curl_read(struct connectdata *conn, curl_socket_t sockfd,
- char *buf, size_t buffersize,
- ssize_t *n);
+CURLcode Curl_read(struct connectdata *conn, curl_socket_t sockfd,
+ char *buf, size_t buffersize,
+ ssize_t *n);
/* internal write-function, does plain socket, SSL, SCP, SFTP and krb4 */
CURLcode Curl_write(struct connectdata *conn,
curl_socket_t sockfd,
diff --git a/lib/setup.h b/lib/setup.h
index ca98ad7..cc016c9 100644
--- a/lib/setup.h
+++ b/lib/setup.h
@@ -356,6 +356,18 @@
# endif
#endif
+/*
+ * Arg 2 type for gethostname in case it hasn't been defined in config file.
+ */
+
+#ifndef GETHOSTNAME_TYPE_ARG2
+# ifdef USE_WINSOCK
+# define GETHOSTNAME_TYPE_ARG2 int
+# else
+# define GETHOSTNAME_TYPE_ARG2 size_t
+# endif
+#endif
+
/* Below we define some functions. They should
4. set the SIGALRM signal timeout
@@ -497,7 +509,7 @@
#if defined(_MSC_VER) && !defined(__POCC__)
# if !defined(HAVE_WINDOWS_H) || ((_MSC_VER < 1300) && !defined(_FILETIME_))
# if !defined(ALLOW_MSVC6_WITHOUT_PSDK)
-# error MSVC 6.0 requires 'February 2003 Platform SDK' a.k.a. 'Windows Server 2003 PSDK'
+# error MSVC 6.0 requires "February 2003 Platform SDK" a.k.a. "Windows Server 2003 PSDK"
# else
# define CURL_DISABLE_LDAP 1
# endif
@@ -525,12 +537,12 @@ int netware_init(void);
#define LIBIDN_REQUIRED_VERSION "0.4.1"
-#if defined(USE_GNUTLS) || defined(USE_SSLEAY) || defined(USE_NSS) || defined(USE_QSOSSL)
+#if defined(USE_GNUTLS) || defined(USE_SSLEAY) || defined(USE_NSS) || defined(USE_QSOSSL) || defined(USE_POLARSSL)
#define USE_SSL /* SSL support has been enabled */
#endif
#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_NTLM)
-#if defined(USE_SSLEAY) || defined(USE_WINDOWS_SSPI) || defined(USE_GNUTLS)
+#if defined(USE_SSLEAY) || defined(USE_WINDOWS_SSPI) || defined(USE_GNUTLS) || defined(USE_NSS)
#define USE_NTLM
#endif
#endif
@@ -540,6 +552,11 @@ int netware_init(void);
#define CURL_CA_BUNDLE getenv("CURL_CA_BUNDLE")
#endif
+/* Define S_ISREG if not defined by system headers, f.e. MSVC */
+#if !defined(S_ISREG) && defined(S_IFMT) && defined(S_IFREG)
+#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
+#endif
+
/*
* Include macros and defines that should only be processed once.
*/
diff --git a/lib/setup_once.h b/lib/setup_once.h
index 473eef2..85e78e8 100644
--- a/lib/setup_once.h
+++ b/lib/setup_once.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -261,24 +261,42 @@ struct timeval {
/*
- * Typedef to 'unsigned char' if bool is not an available 'typedefed' type.
+ * 'bool' exists on platforms with <stdbool.h>, i.e. C99 platforms.
+ * On non-C99 platforms there's no bool, so define an enum for that.
+ * On C99 platforms 'false' and 'true' also exist. Enum uses a
+ * global namespace though, so use bool_false and bool_true.
*/
#ifndef HAVE_BOOL_T
-typedef unsigned char bool;
-#define HAVE_BOOL_T
+ typedef enum {
+ bool_false = 0,
+ bool_true = 1
+ } bool;
+
+/*
+ * Use a define to let 'true' and 'false' use those enums. There
+ * are currently no use of true and false in libcurl proper, but
+ * there are some in the examples. This will cater for any later
+ * code happening to use true and false.
+ */
+# define false bool_false
+# define true bool_true
+# define HAVE_BOOL_T
#endif
/*
- * Default definition of uppercase TRUE and FALSE.
+ * Redefine TRUE and FALSE too, to catch current use. With this
+ * change, 'bool found = 1' will give a warning on MIPSPro, but
+ * 'bool found = TRUE' will not. Change tested on IRIX/MIPSPro,
+ * AIX 5.1/Xlc, Tru64 5.1/cc, w/make test too.
*/
#ifndef TRUE
-#define TRUE 1
+#define TRUE true
#endif
#ifndef FALSE
-#define FALSE 0
+#define FALSE false
#endif
@@ -373,38 +391,63 @@ typedef int sig_atomic_t;
#define EINTR WSAEINTR
#undef EINVAL /* override definition in errno.h */
#define EINVAL WSAEINVAL
+#undef EWOULDBLOCK /* override definition in errno.h */
#define EWOULDBLOCK WSAEWOULDBLOCK
+#undef EINPROGRESS /* override definition in errno.h */
#define EINPROGRESS WSAEINPROGRESS
+#undef EALREADY /* override definition in errno.h */
#define EALREADY WSAEALREADY
+#undef ENOTSOCK /* override definition in errno.h */
#define ENOTSOCK WSAENOTSOCK
+#undef EDESTADDRREQ /* override definition in errno.h */
#define EDESTADDRREQ WSAEDESTADDRREQ
+#undef EMSGSIZE /* override definition in errno.h */
#define EMSGSIZE WSAEMSGSIZE
+#undef EPROTOTYPE /* override definition in errno.h */
#define EPROTOTYPE WSAEPROTOTYPE
+#undef ENOPROTOOPT /* override definition in errno.h */
#define ENOPROTOOPT WSAENOPROTOOPT
+#undef EPROTONOSUPPORT /* override definition in errno.h */
#define EPROTONOSUPPORT WSAEPROTONOSUPPORT
#define ESOCKTNOSUPPORT WSAESOCKTNOSUPPORT
+#undef EOPNOTSUPP /* override definition in errno.h */
#define EOPNOTSUPP WSAEOPNOTSUPP
#define EPFNOSUPPORT WSAEPFNOSUPPORT
+#undef EAFNOSUPPORT /* override definition in errno.h */
#define EAFNOSUPPORT WSAEAFNOSUPPORT
+#undef EADDRINUSE /* override definition in errno.h */
#define EADDRINUSE WSAEADDRINUSE
+#undef EADDRNOTAVAIL /* override definition in errno.h */
#define EADDRNOTAVAIL WSAEADDRNOTAVAIL
+#undef ENETDOWN /* override definition in errno.h */
#define ENETDOWN WSAENETDOWN
+#undef ENETUNREACH /* override definition in errno.h */
#define ENETUNREACH WSAENETUNREACH
+#undef ENETRESET /* override definition in errno.h */
#define ENETRESET WSAENETRESET
+#undef ECONNABORTED /* override definition in errno.h */
#define ECONNABORTED WSAECONNABORTED
+#undef ECONNRESET /* override definition in errno.h */
#define ECONNRESET WSAECONNRESET
+#undef ENOBUFS /* override definition in errno.h */
#define ENOBUFS WSAENOBUFS
+#undef EISCONN /* override definition in errno.h */
#define EISCONN WSAEISCONN
+#undef ENOTCONN /* override definition in errno.h */
#define ENOTCONN WSAENOTCONN
#define ESHUTDOWN WSAESHUTDOWN
#define ETOOMANYREFS WSAETOOMANYREFS
+#undef ETIMEDOUT /* override definition in errno.h */
#define ETIMEDOUT WSAETIMEDOUT
+#undef ECONNREFUSED /* override definition in errno.h */
#define ECONNREFUSED WSAECONNREFUSED
+#undef ELOOP /* override definition in errno.h */
#define ELOOP WSAELOOP
#ifndef ENAMETOOLONG /* possible previous definition in errno.h */
#define ENAMETOOLONG WSAENAMETOOLONG
#endif
#define EHOSTDOWN WSAEHOSTDOWN
+#undef EHOSTUNREACH /* override definition in errno.h */
#define EHOSTUNREACH WSAEHOSTUNREACH
#ifndef ENOTEMPTY /* possible previous definition in errno.h */
#define ENOTEMPTY WSAENOTEMPTY
diff --git a/lib/smtp.c b/lib/smtp.c
index 654f435..55e03d5 100644
--- a/lib/smtp.c
+++ b/lib/smtp.c
@@ -20,6 +20,9 @@
*
* RFC2821 SMTP protocol
* RFC3207 SMTP over TLS
+ * RFC4954 SMTP Authentication
+ * RFC2195 CRAM-MD5 authentication
+ * RFC4616 PLAIN authentication
*
***************************************************************************/
@@ -85,6 +88,10 @@
#include "url.h"
#include "rawstr.h"
#include "strtoofft.h"
+#include "curl_base64.h"
+#include "curl_md5.h"
+#include "curl_hmac.h"
+#include "curl_gethostname.h"
#define _MPRINTF_REPLACE /* use our functions only */
#include <curl/mprintf.h>
@@ -202,26 +209,74 @@ static const struct Curl_handler Curl_handler_smtps_proxy = {
#endif
-/* fucntion that checks for an ending smtp status code at the start of the
- given string */
+/* Function that checks for an ending smtp status code at the start of the
+ given string.
+ As a side effect, it also flags allowed authentication mechanisms according
+ to EHLO AUTH response. */
static int smtp_endofresp(struct pingpong *pp, int *resp)
{
char *line = pp->linestart_resp;
size_t len = pp->nread_resp;
+ struct connectdata *conn = pp->conn;
+ struct smtp_conn *smtpc = &conn->proto.smtpc;
+ int result;
+ size_t wordlen;
+
+ if(len < 4 || !ISDIGIT(line[0]) || !ISDIGIT(line[1]) || !ISDIGIT(line[2]))
+ return FALSE; /* Nothing for us. */
+
+ if((result = line[3] == ' '))
+ *resp = atoi(line);
+
+ line += 4;
+ len -= 4;
+
+ if(smtpc->state == SMTP_EHLO && len >= 5 && !memcmp(line, "AUTH ", 5)) {
+ line += 5;
+ len -= 5;
+
+ for (;;) {
+ while (len &&
+ (*line == ' ' || *line == '\t' ||
+ *line == '\r' || *line == '\n')) {
+ line++;
+ len--;
+ }
- if( (len >= 4) && (' ' == line[3]) &&
- ISDIGIT(line[0]) && ISDIGIT(line[1]) && ISDIGIT(line[2])) {
- *resp=atoi(line);
- return TRUE;
+ if(!len)
+ break;
+
+ for (wordlen = 0; wordlen < len && line[wordlen] != ' ' &&
+ line[wordlen] != '\t' && line[wordlen] != '\r' &&
+ line[wordlen] != '\n';)
+ wordlen++;
+
+ if(wordlen == 5 && !memcmp(line, "LOGIN", 5))
+ smtpc->authmechs |= SMTP_AUTH_LOGIN;
+ else if(wordlen == 5 && !memcmp(line, "PLAIN", 5))
+ smtpc->authmechs |= SMTP_AUTH_PLAIN;
+ else if(wordlen == 8 && !memcmp(line, "CRAM-MD5", 8))
+ smtpc->authmechs |= SMTP_AUTH_CRAM_MD5;
+ else if(wordlen == 10 && !memcmp(line, "DIGEST-MD5", 10))
+ smtpc->authmechs |= SMTP_AUTH_DIGEST_MD5;
+ else if(wordlen == 6 && !memcmp(line, "GSSAPI", 6))
+ smtpc->authmechs |= SMTP_AUTH_GSSAPI;
+ else if(wordlen == 8 && !memcmp(line, "EXTERNAL", 8))
+ smtpc->authmechs |= SMTP_AUTH_EXTERNAL;
+
+ line += wordlen;
+ len -= wordlen;
+ }
}
- return FALSE; /* nothing for us */
+ return result;
}
/* This is the ONLY way to change SMTP state! */
static void state(struct connectdata *conn,
smtpstate newstate)
{
+ struct smtp_conn *smtpc = &conn->proto.smtpc;
#if defined(DEBUGBUILD) && !defined(CURL_DISABLE_VERBOSE_STRINGS)
/* for debug purposes */
static const char * const names[]={
@@ -230,6 +285,11 @@ static void state(struct connectdata *conn,
"EHLO",
"HELO",
"STARTTLS",
+ "AUTHPLAIN",
+ "AUTHLOGIN",
+ "AUTHPASSWD",
+ "AUTHCRAM",
+ "AUTH",
"MAIL",
"RCPT",
"DATA",
@@ -237,9 +297,6 @@ static void state(struct connectdata *conn,
"QUIT",
/* LAST */
};
-#endif
- struct smtp_conn *smtpc = &conn->proto.smtpc;
-#if defined(DEBUGBUILD) && !defined(CURL_DISABLE_VERBOSE_STRINGS)
if(smtpc->state != newstate)
infof(conn->data, "SMTP %p state change from %s to %s\n",
smtpc, names[smtpc->state], names[newstate]);
@@ -252,8 +309,10 @@ static CURLcode smtp_state_ehlo(struct connectdata *conn)
CURLcode result;
struct smtp_conn *smtpc = &conn->proto.smtpc;
+ smtpc->authmechs = 0; /* No known authentication mechanisms yet. */
+
/* send EHLO */
- result = Curl_pp_sendf(&conn->proto.smtpc.pp, "EHLO %s", smtpc->domain);
+ result = Curl_pp_sendf(&smtpc->pp, "EHLO %s", smtpc->domain);
if(result)
return result;
@@ -268,7 +327,7 @@ static CURLcode smtp_state_helo(struct connectdata *conn)
struct smtp_conn *smtpc = &conn->proto.smtpc;
/* send HELO */
- result = Curl_pp_sendf(&conn->proto.smtpc.pp, "HELO %s", smtpc->domain);
+ result = Curl_pp_sendf(&smtpc->pp, "HELO %s", smtpc->domain);
if(result)
return result;
@@ -277,6 +336,111 @@ static CURLcode smtp_state_helo(struct connectdata *conn)
return CURLE_OK;
}
+static size_t smtp_auth_plain_data(struct connectdata * conn, char * * outptr)
+{
+ char plainauth[2 * MAX_CURL_USER_LENGTH + MAX_CURL_PASSWORD_LENGTH];
+ size_t ulen;
+ size_t plen;
+
+ ulen = strlen(conn->user);
+ plen = strlen(conn->passwd);
+
+ if(2 * ulen + plen + 2 > sizeof plainauth)
+ return 0;
+
+ memcpy(plainauth, conn->user, ulen);
+ plainauth[ulen] = '\0';
+ memcpy(plainauth + ulen + 1, conn->user, ulen);
+ plainauth[2 * ulen + 1] = '\0';
+ memcpy(plainauth + 2 * ulen + 2, conn->passwd, plen);
+ return Curl_base64_encode(conn->data, plainauth, 2 * ulen + plen + 2, outptr);
+}
+
+static size_t smtp_auth_login_user(struct connectdata * conn, char * * outptr)
+{
+ size_t ulen;
+
+ ulen = strlen(conn->user);
+
+ if(!ulen) {
+ *outptr = strdup("=");
+ return *outptr? 1: 0;
+ }
+
+ return Curl_base64_encode(conn->data, conn->user, ulen, outptr);
+}
+
+static CURLcode smtp_authenticate(struct connectdata *conn)
+{
+ CURLcode result = CURLE_OK;
+ struct smtp_conn *smtpc = &conn->proto.smtpc;
+ char * initresp;
+ const char * mech;
+ size_t l;
+ smtpstate state1;
+ smtpstate state2;
+
+ if(!conn->bits.user_passwd)
+ state(conn, SMTP_STOP); /* End of connect phase. */
+ else {
+ initresp = (char *) NULL;
+ l = 1;
+
+ /* Check supported authentication mechanisms by decreasing order of
+ preference. */
+ mech = (const char *) NULL; /* Avoid compiler warnings. */
+ state1 = SMTP_STOP;
+ state2 = SMTP_STOP;
+
+#ifndef CURL_DISABLE_CRYPTO_AUTH
+ if(smtpc->authmechs & SMTP_AUTH_CRAM_MD5) {
+ mech = "CRAM-MD5";
+ state1 = SMTP_AUTHCRAM;
+ }
+ else
+#endif
+ if(smtpc->authmechs & SMTP_AUTH_PLAIN) {
+ mech = "PLAIN";
+ state1 = SMTP_AUTHPLAIN;
+ state2 = SMTP_AUTH;
+ l = smtp_auth_plain_data(conn, &initresp);
+ }
+ else if(smtpc->authmechs & SMTP_AUTH_LOGIN) {
+ mech = "LOGIN";
+ state1 = SMTP_AUTHLOGIN;
+ state2 = SMTP_AUTHPASSWD;
+ l = smtp_auth_login_user(conn, &initresp);
+ }
+ else {
+ infof(conn->data, "No known auth mechanisms supported!\n");
+ result = CURLE_LOGIN_DENIED; /* Other mechanisms not supported. */
+ }
+
+ if(!result) {
+ if(!l)
+ result = CURLE_OUT_OF_MEMORY;
+ else if(initresp &&
+ l + strlen(mech) <= 512 - 8) { /* AUTH <mech> ...<crlf> */
+ result = Curl_pp_sendf(&smtpc->pp, "AUTH %s %s", mech, initresp);
+ free(initresp);
+
+ if(!result)
+ state(conn, state2);
+ }
+ else {
+ Curl_safefree(initresp);
+
+ result = Curl_pp_sendf(&smtpc->pp, "AUTH %s", mech);
+
+ if(!result)
+ state(conn, state1);
+ }
+ }
+ }
+
+ return result;
+}
+
/* For the SMTP "protocol connect" and "doing" phases only */
static int smtp_getsock(struct connectdata *conn,
curl_socket_t *socks,
@@ -295,12 +459,12 @@ static CURLcode smtp_state_starttls_resp(struct connectdata *conn,
(void)instate; /* no use for this yet */
if(smtpcode != 220) {
- if(data->set.ftp_ssl == CURLUSESSL_TRY)
- state(conn, SMTP_STOP);
- else {
+ if(data->set.ftp_ssl != CURLUSESSL_TRY) {
failf(data, "STARTTLS denied. %c", smtpcode);
result = CURLE_LOGIN_DENIED;
}
+ else
+ result = smtp_authenticate(conn);
}
else {
/* Curl_ssl_connect is BLOCKING */
@@ -324,23 +488,23 @@ static CURLcode smtp_state_ehlo_resp(struct connectdata *conn,
(void)instate; /* no use for this yet */
if(smtpcode/100 != 2) {
- if(data->set.ftp_ssl <= CURLUSESSL_TRY)
+ if((data->set.ftp_ssl <= CURLUSESSL_TRY || conn->ssl[FIRSTSOCKET].use) &&
+ !conn->bits.user_passwd)
result = smtp_state_helo(conn);
else {
failf(data, "Access denied: %d", smtpcode);
result = CURLE_LOGIN_DENIED;
}
- }
+ }
else if(data->set.ftp_ssl && !conn->ssl[FIRSTSOCKET].use) {
/* We don't have a SSL/TLS connection yet, but SSL is requested. Switch
to TLS connection now */
- result = Curl_pp_sendf(&conn->proto.smtpc.pp, "STARTTLS", NULL);
+ result = Curl_pp_sendf(&conn->proto.smtpc.pp, "STARTTLS");
state(conn, SMTP_STARTTLS);
}
- else {
- /* end the connect phase */
- state(conn, SMTP_STOP);
- }
+ else
+ result = smtp_authenticate(conn);
+
return result;
}
@@ -357,7 +521,7 @@ static CURLcode smtp_state_helo_resp(struct connectdata *conn,
if(smtpcode/100 != 2) {
failf(data, "Access denied: %d", smtpcode);
result = CURLE_LOGIN_DENIED;
- }
+ }
else {
/* end the connect phase */
state(conn, SMTP_STOP);
@@ -365,6 +529,223 @@ static CURLcode smtp_state_helo_resp(struct connectdata *conn,
return result;
}
+/* for AUTH PLAIN (without initial response) responses */
+static CURLcode smtp_state_authplain_resp(struct connectdata *conn,
+ int smtpcode,
+ smtpstate instate)
+{
+ CURLcode result = CURLE_OK;
+ struct SessionHandle *data = conn->data;
+ size_t l;
+ char * plainauth;
+
+ (void)instate; /* no use for this yet */
+
+ if(smtpcode != 334) {
+ failf(data, "Access denied: %d", smtpcode);
+ result = CURLE_LOGIN_DENIED;
+ }
+ else {
+ l = smtp_auth_plain_data(conn, &plainauth);
+
+ if(!l)
+ result = CURLE_OUT_OF_MEMORY;
+ else {
+ result = Curl_pp_sendf(&conn->proto.smtpc.pp, "%s", plainauth);
+ free(plainauth);
+
+ if(!result)
+ state(conn, SMTP_AUTH);
+ }
+ }
+
+ return result;
+}
+
+/* for AUTH LOGIN (without initial response) responses */
+static CURLcode smtp_state_authlogin_resp(struct connectdata *conn,
+ int smtpcode,
+ smtpstate instate)
+{
+ CURLcode result = CURLE_OK;
+ struct SessionHandle *data = conn->data;
+ size_t l;
+ char * authuser;
+
+ (void)instate; /* no use for this yet */
+
+ if(smtpcode != 334) {
+ failf(data, "Access denied: %d", smtpcode);
+ result = CURLE_LOGIN_DENIED;
+ }
+ else {
+ l = smtp_auth_login_user(conn, &authuser);
+
+ if(!l)
+ result = CURLE_OUT_OF_MEMORY;
+ else {
+ result = Curl_pp_sendf(&conn->proto.smtpc.pp, "%s", authuser);
+ free(authuser);
+
+ if(!result)
+ state(conn, SMTP_AUTHPASSWD);
+ }
+ }
+
+ return result;
+}
+
+/* for responses to user entry of AUTH LOGIN. */
+static CURLcode smtp_state_authpasswd_resp(struct connectdata *conn,
+ int smtpcode,
+ smtpstate instate)
+{
+ CURLcode result = CURLE_OK;
+ struct SessionHandle *data = conn->data;
+ size_t plen;
+ size_t l;
+ char *authpasswd;
+
+ (void)instate; /* no use for this yet */
+
+ if(smtpcode != 334) {
+ failf(data, "Access denied: %d", smtpcode);
+ result = CURLE_LOGIN_DENIED;
+ }
+ else {
+ plen = strlen(conn->passwd);
+
+ if(!plen)
+ result = Curl_pp_sendf(&conn->proto.smtpc.pp, "=");
+ else {
+ l = Curl_base64_encode(data, conn->passwd, plen, &authpasswd);
+
+ if(!l)
+ result = CURLE_OUT_OF_MEMORY;
+ else {
+ result = Curl_pp_sendf(&conn->proto.smtpc.pp, "%s", authpasswd);
+ free(authpasswd);
+
+ if(!result)
+ state(conn, SMTP_AUTH);
+ }
+ }
+ }
+
+ return result;
+}
+
+#ifndef CURL_DISABLE_CRYPTO_AUTH
+
+/* for AUTH CRAM-MD5 responses. */
+static CURLcode smtp_state_authcram_resp(struct connectdata *conn,
+ int smtpcode,
+ smtpstate instate)
+{
+ CURLcode result = CURLE_OK;
+ struct SessionHandle *data = conn->data;
+ char * chlg64 = data->state.buffer;
+ unsigned char * chlg;
+ size_t chlglen;
+ size_t l;
+ char * rplyb64;
+ HMAC_context * ctxt;
+ unsigned char digest[16];
+ char reply[MAX_CURL_USER_LENGTH + 32 /* 2 * size of MD5 digest */ + 1];
+
+ (void)instate; /* no use for this yet */
+
+ if(smtpcode != 334) {
+ failf(data, "Access denied: %d", smtpcode);
+ return CURLE_LOGIN_DENIED;
+ }
+
+ /* Get the challenge. */
+ for (chlg64 += 4; *chlg64 == ' ' || *chlg64 == '\t'; chlg64++)
+ ;
+
+ chlg = (unsigned char *) NULL;
+ chlglen = 0;
+
+ if(*chlg64 != '=') {
+ for (l = strlen(chlg64); l--;)
+ if(chlg64[l] != '\r' && chlg64[l] != '\n' && chlg64[l] != ' ' &&
+ chlg64[l] != '\t')
+ break;
+
+ if(++l) {
+ chlg64[l] = '\0';
+
+ if(!(chlglen = Curl_base64_decode(chlg64, &chlg)))
+ return CURLE_OUT_OF_MEMORY;
+ }
+ }
+
+ /* Compute digest. */
+ ctxt = Curl_HMAC_init(Curl_HMAC_MD5,
+ (const unsigned char *) conn->passwd,
+ (unsigned int)(strlen(conn->passwd)));
+
+ if(!ctxt) {
+ if(chlg)
+ free(chlg);
+
+ return CURLE_OUT_OF_MEMORY;
+ }
+
+ if(chlglen > 0)
+ Curl_HMAC_update(ctxt, chlg, (unsigned int)(chlglen));
+
+ if(chlg)
+ free(chlg);
+
+ Curl_HMAC_final(ctxt, digest);
+
+ /* Prepare the reply. */
+ snprintf(reply, sizeof reply,
+ "%s %02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
+ conn->user, digest[0], digest[1], digest[2], digest[3], digest[4], digest[5],
+ digest[6], digest[7], digest[8], digest[9], digest[10], digest[11],
+ digest[12], digest[13], digest[14], digest[15]);
+
+ /* Encode it to base64 and send it. */
+ l = Curl_base64_encode(data, reply, 0, &rplyb64);
+
+ if(!l)
+ result = CURLE_OUT_OF_MEMORY;
+ else {
+ result = Curl_pp_sendf(&conn->proto.smtpc.pp, "%s", rplyb64);
+ free(rplyb64);
+
+ if(!result)
+ state(conn, SMTP_AUTH);
+ }
+
+ return result;
+}
+
+#endif
+
+/* for final responses to AUTH sequences. */
+static CURLcode smtp_state_auth_resp(struct connectdata *conn,
+ int smtpcode,
+ smtpstate instate)
+{
+ CURLcode result = CURLE_OK;
+ struct SessionHandle *data = conn->data;
+
+ (void)instate; /* no use for this yet */
+
+ if(smtpcode != 235) {
+ failf(data, "Authentication failed: %d", smtpcode);
+ result = CURLE_LOGIN_DENIED;
+ }
+ else
+ state(conn, SMTP_STOP); /* End of connect phase. */
+
+ return result;
+}
+
/* start the DO phase */
static CURLcode smtp_mail(struct connectdata *conn)
{
@@ -451,7 +832,7 @@ static CURLcode smtp_state_rcpt_resp(struct connectdata *conn,
}
/* send DATA */
- result = Curl_pp_sendf(&conn->proto.smtpc.pp, "DATA", "");
+ result = Curl_pp_sendf(&conn->proto.smtpc.pp, "DATA");
if(result)
return result;
@@ -465,7 +846,6 @@ static CURLcode smtp_state_data_resp(struct connectdata *conn,
int smtpcode,
smtpstate instate)
{
- CURLcode result = CURLE_OK;
struct SessionHandle *data = conn->data;
struct FTP *smtp = data->state.proto.smtp;
@@ -477,11 +857,11 @@ static CURLcode smtp_state_data_resp(struct connectdata *conn,
}
/* SMTP upload */
- result = Curl_setup_transfer(conn, -1, -1, FALSE, NULL, /* no download */
- FIRSTSOCKET, smtp->bytecountp);
+ Curl_setup_transfer(conn, -1, -1, FALSE, NULL, /* no download */
+ FIRSTSOCKET, smtp->bytecountp);
state(conn, SMTP_STOP);
- return result;
+ return CURLE_OK;
}
/* for the POSTDATA response, which is received after the entire DATA
@@ -542,6 +922,32 @@ static CURLcode smtp_statemach_act(struct connectdata *conn)
result = smtp_state_helo_resp(conn, smtpcode, smtpc->state);
break;
+ case SMTP_STARTTLS:
+ result = smtp_state_starttls_resp(conn, smtpcode, smtpc->state);
+ break;
+
+ case SMTP_AUTHPLAIN:
+ result = smtp_state_authplain_resp(conn, smtpcode, smtpc->state);
+ break;
+
+ case SMTP_AUTHLOGIN:
+ result = smtp_state_authlogin_resp(conn, smtpcode, smtpc->state);
+ break;
+
+ case SMTP_AUTHPASSWD:
+ result = smtp_state_authpasswd_resp(conn, smtpcode, smtpc->state);
+ break;
+
+#ifndef CURL_DISABLE_CRYPTO_AUTH
+ case SMTP_AUTHCRAM:
+ result = smtp_state_authcram_resp(conn, smtpcode, smtpc->state);
+ break;
+#endif
+
+ case SMTP_AUTH:
+ result = smtp_state_auth_resp(conn, smtpcode, smtpc->state);
+ break;
+
case SMTP_MAIL:
result = smtp_state_mail_resp(conn, smtpcode, smtpc->state);
break;
@@ -550,10 +956,6 @@ static CURLcode smtp_statemach_act(struct connectdata *conn)
result = smtp_state_rcpt_resp(conn, smtpcode, smtpc->state);
break;
- case SMTP_STARTTLS:
- result = smtp_state_starttls_resp(conn, smtpcode, smtpc->state);
- break;
-
case SMTP_DATA:
result = smtp_state_data_resp(conn, smtpcode, smtpc->state);
break;
@@ -644,10 +1046,7 @@ static CURLcode smtp_connect(struct connectdata *conn,
struct pingpong *pp=&smtpc->pp;
const char *path = conn->data->state.path;
int len;
-
-#ifdef HAVE_GETHOSTNAME
- char localhost[1024 + 1];
-#endif
+ char localhost[1024 + 1];
*done = FALSE; /* default to not done yet */
@@ -713,17 +1112,15 @@ static CURLcode smtp_connect(struct connectdata *conn,
pp->conn = conn;
if(!*path) {
-#ifdef HAVE_GETHOSTNAME
- if(!gethostname(localhost, sizeof localhost))
+ if(!Curl_gethostname(localhost, sizeof localhost))
path = localhost;
else
-#endif
- path = "localhost";
+ path = "localhost";
}
/* url decode the path and use it as domain with EHLO */
smtpc->domain = curl_easy_unescape(conn->data, path, 0, &len);
- if (!smtpc->domain)
+ if(!smtpc->domain)
return CURLE_OUT_OF_MEMORY;
/* When we connect, we start in the state where we await the server greeting
@@ -894,7 +1291,7 @@ static CURLcode smtp_quit(struct connectdata *conn)
{
CURLcode result = CURLE_OK;
- result = Curl_pp_sendf(&conn->proto.smtpc.pp, "QUIT", NULL);
+ result = Curl_pp_sendf(&conn->proto.smtpc.pp, "QUIT");
if(result)
return result;
state(conn, SMTP_QUIT);
@@ -922,11 +1319,15 @@ static CURLcode smtp_disconnect(struct connectdata *conn)
/* The SMTP session may or may not have been allocated/setup at this
point! */
- if (smtpc->pp.conn)
+ if(smtpc->pp.conn)
(void)smtp_quit(conn); /* ignore errors on the LOGOUT */
Curl_pp_disconnect(&smtpc->pp);
+ /* This won't already be freed in some error cases */
+ Curl_safefree(smtpc->domain);
+ smtpc->domain = NULL;
+
return CURLE_OK;
}
@@ -934,18 +1335,18 @@ static CURLcode smtp_disconnect(struct connectdata *conn)
static CURLcode smtp_dophase_done(struct connectdata *conn,
bool connected)
{
- CURLcode result = CURLE_OK;
struct FTP *smtp = conn->data->state.proto.smtp;
struct smtp_conn *smtpc= &conn->proto.smtpc;
(void)connected;
if(smtp->transfer != FTPTRANSFER_BODY)
/* no data to transfer */
- result=Curl_setup_transfer(conn, -1, -1, FALSE, NULL, -1, NULL);
+ Curl_setup_transfer(conn, -1, -1, FALSE, NULL, -1, NULL);
free(smtpc->domain);
+ smtpc->domain = NULL;
- return result;
+ return CURLE_OK;
}
/* called from multi.c while DOing */
diff --git a/lib/smtp.h b/lib/smtp.h
index 4716338..417fd52 100644
--- a/lib/smtp.h
+++ b/lib/smtp.h
@@ -34,6 +34,11 @@ typedef enum {
SMTP_EHLO,
SMTP_HELO,
SMTP_STARTTLS,
+ SMTP_AUTHPLAIN,
+ SMTP_AUTHLOGIN,
+ SMTP_AUTHPASSWD,
+ SMTP_AUTHCRAM,
+ SMTP_AUTH,
SMTP_MAIL, /* MAIL FROM */
SMTP_RCPT, /* RCPT TO */
SMTP_DATA,
@@ -49,10 +54,19 @@ struct smtp_conn {
char *domain; /* what to send in the EHLO */
size_t eob; /* number of bytes of the EOB (End Of Body) that has been
received thus far */
+ unsigned int authmechs; /* Accepted authentication methods. */
smtpstate state; /* always use smtp.c:state() to change state! */
struct curl_slist *rcpt;
};
+/* Authentication mechanism flags. */
+#define SMTP_AUTH_LOGIN 0x0001
+#define SMTP_AUTH_PLAIN 0x0002
+#define SMTP_AUTH_CRAM_MD5 0x0004
+#define SMTP_AUTH_DIGEST_MD5 0x0008
+#define SMTP_AUTH_GSSAPI 0x0010
+#define SMTP_AUTH_EXTERNAL 0x0020
+
extern const struct Curl_handler Curl_handler_smtp;
extern const struct Curl_handler Curl_handler_smtps;
diff --git a/lib/socks.c b/lib/socks.c
index eb79567..7b5740b 100644
--- a/lib/socks.c
+++ b/lib/socks.c
@@ -77,7 +77,7 @@ int Curl_blockread_all(struct connectdata *conn, /* connection data */
conntime = Curl_tvdiff(tvnow, conn->created);
if(conntime > conn_timeout) {
/* we already got the timeout */
- result = ~CURLE_OK;
+ result = CURLE_OPERATION_TIMEDOUT;
break;
}
if(Curl_socket_ready(sockfd, CURL_SOCKET_BAD,
@@ -86,7 +86,9 @@ int Curl_blockread_all(struct connectdata *conn, /* connection data */
break;
}
result = Curl_read_plain(sockfd, buf, buffersize, &nread);
- if(result)
+ if(CURLE_AGAIN == result)
+ continue;
+ else if(result)
break;
if(buffersize == nread) {
@@ -172,8 +174,8 @@ CURLcode Curl_SOCKS4(const char *proxy_name,
return CURLE_COULDNT_RESOLVE_PROXY;
if(rc == CURLRESOLV_PENDING)
- /* this requires that we're in "wait for resolve" state */
- rc = Curl_wait_for_resolv(conn, &dns);
+ /* ignores the return code, but 'dns' remains NULL on failure */
+ (void)Curl_wait_for_resolv(conn, &dns);
/*
* We cannot use 'hostent' as a struct that Curl_resolv() returns. It
@@ -511,11 +513,13 @@ CURLcode Curl_SOCKS5(const char *proxy_name,
*/
len = 0;
socksreq[len++] = 1; /* username/pw subnegotiation version */
- socksreq[len++] = (char) userlen;
- memcpy(socksreq + len, proxy_name, userlen);
+ socksreq[len++] = (unsigned char) userlen;
+ if(proxy_name && userlen)
+ memcpy(socksreq + len, proxy_name, userlen);
len += (int)userlen;
- socksreq[len++] = (char) pwlen;
- memcpy(socksreq + len, proxy_password, pwlen);
+ socksreq[len++] = (unsigned char) pwlen;
+ if(proxy_password && pwlen)
+ memcpy(socksreq + len, proxy_password, pwlen);
len += (int)pwlen;
code = Curl_write_plain(conn, sock, (char *)socksreq, len, &written);
@@ -597,9 +601,12 @@ CURLcode Curl_SOCKS5(const char *proxy_name,
if(rc == CURLRESOLV_ERROR)
return CURLE_COULDNT_RESOLVE_HOST;
- if(rc == CURLRESOLV_PENDING)
+ if(rc == CURLRESOLV_PENDING) {
/* this requires that we're in "wait for resolve" state */
- rc = Curl_wait_for_resolv(conn, &dns);
+ code = Curl_wait_for_resolv(conn, &dns);
+ if(code != CURLE_OK)
+ return code;
+ }
/*
* We cannot use 'hostent' as a struct that Curl_resolv() returns. It
diff --git a/lib/splay.c b/lib/splay.c
index db3dbea..dcc42cf 100644
--- a/lib/splay.c
+++ b/lib/splay.c
@@ -394,6 +394,10 @@ int main(int argc, argv_item_t argv[])
for (i = 0; i < MAX; i++) {
struct timeval key;
ptrs[i] = t = malloc(sizeof(struct Curl_tree));
+ if(!t) {
+ puts("out of memory!");
+ return 0;
+ }
key.tv_sec = 0;
#ifdef TEST2
@@ -405,10 +409,6 @@ int main(int argc, argv_item_t argv[])
#endif
t->payload = (void *)key.tv_usec; /* for simplicity */
- if(!t) {
- puts("out of memory!");
- return 0;
- }
root = Curl_splayinsert(key, root, t);
}
diff --git a/lib/ssh.c b/lib/ssh.c
index ff5994b..314d898 100644
--- a/lib/ssh.c
+++ b/lib/ssh.c
@@ -486,6 +486,17 @@ static int sshkeycallback(CURL *easy,
#endif
/*
+ * Earlier libssh2 versions didn't do SCP properly beyond 32bit sizes on 32bit
+ * architectures so we check of the necessary function is present.
+ */
+#ifndef HAVE_LIBSSH2_SCP_SEND64
+#define SCP_SEND(a,b,c,d) libssh2_scp_send_ex(a, b, (int)(c), (size_t)d, 0, 0)
+#else
+#define SCP_SEND(a,b,c,d) libssh2_scp_send64(a, b, (int)(c), \
+ (libssh2_uint64_t)d, 0, 0)
+#endif
+
+/*
* ssh_statemach_act() runs the SSH state machine as far as it can without
* blocking and without reaching the end. The data the pointer 'block' points
* to will be set to TRUE if the libssh2 function returns LIBSSH2_ERROR_EAGAIN
@@ -1431,6 +1442,11 @@ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block)
data->state.resume_from = 0;
}
else {
+ curl_off_t size = attrs.filesize;
+ if(size < 0) {
+ failf(data, "Bad file size (%" FORMAT_OFF_T ")", size);
+ return CURLE_BAD_DOWNLOAD_RESUME;
+ }
data->state.resume_from = attrs.filesize;
}
}
@@ -1556,8 +1572,7 @@ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block)
Curl_pgrsSetUploadSize(data, data->set.infilesize);
}
/* upload data */
- result = Curl_setup_transfer(conn, -1, -1, FALSE, NULL,
- FIRSTSOCKET, NULL);
+ Curl_setup_transfer(conn, -1, -1, FALSE, NULL, FIRSTSOCKET, NULL);
/* not set by Curl_setup_transfer to preserve keepon bits */
conn->sockfd = conn->writesockfd;
@@ -1850,7 +1865,7 @@ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block)
sshc->readdir_longentry = NULL;
/* no data to transfer */
- result = Curl_setup_transfer(conn, -1, -1, FALSE, NULL, -1, NULL);
+ Curl_setup_transfer(conn, -1, -1, FALSE, NULL, -1, NULL);
state(conn, SSH_STOP);
break;
@@ -1901,16 +1916,19 @@ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block)
data->req.maxdownload = -1;
}
else {
- curl_off_t size;
+ curl_off_t size = attrs.filesize;
- size = attrs.filesize;
+ if(size < 0) {
+ failf(data, "Bad file size (%" FORMAT_OFF_T ")", size);
+ return CURLE_BAD_DOWNLOAD_RESUME;
+ }
if(conn->data->state.use_range) {
curl_off_t from, to;
char *ptr;
char *ptr2;
from=curlx_strtoofft(conn->data->state.range, &ptr, 0);
- while(ptr && *ptr && (isspace((int)*ptr) || (*ptr=='-')))
+ while(*ptr && (isspace((int)*ptr) || (*ptr=='-')))
ptr++;
to=curlx_strtoofft(ptr, &ptr2, 0);
if((ptr == ptr2) /* no "to" value given */
@@ -1975,14 +1993,14 @@ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block)
/* Setup the actual download */
if(data->req.size == 0) {
/* no data to transfer */
- result = Curl_setup_transfer(conn, -1, -1, FALSE, NULL, -1, NULL);
+ Curl_setup_transfer(conn, -1, -1, FALSE, NULL, -1, NULL);
infof(data, "File already completely downloaded\n");
state(conn, SSH_STOP);
break;
}
else {
- result = Curl_setup_transfer(conn, FIRSTSOCKET, data->req.size,
- FALSE, NULL, -1, NULL);
+ Curl_setup_transfer(conn, FIRSTSOCKET, data->req.size,
+ FALSE, NULL, -1, NULL);
/* not set by Curl_setup_transfer to preserve keepon bits */
conn->writesockfd = conn->sockfd;
@@ -2084,9 +2102,8 @@ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block)
* directory in the path.
*/
sshc->ssh_channel =
- libssh2_scp_send_ex(sshc->ssh_session, sftp_scp->path,
- (int)(data->set.new_file_perms),
- (size_t)data->set.infilesize, 0, 0);
+ SCP_SEND(sshc->ssh_session, sftp_scp->path, data->set.new_file_perms,
+ data->set.infilesize);
if(!sshc->ssh_channel) {
if(libssh2_session_last_errno(sshc->ssh_session) ==
LIBSSH2_ERROR_EAGAIN) {
@@ -2107,8 +2124,8 @@ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block)
}
/* upload data */
- result = Curl_setup_transfer(conn, -1, data->req.size, FALSE, NULL,
- FIRSTSOCKET, NULL);
+ Curl_setup_transfer(conn, -1, data->req.size, FALSE, NULL,
+ FIRSTSOCKET, NULL);
/* not set by Curl_setup_transfer to preserve keepon bits */
conn->sockfd = conn->writesockfd;
@@ -2159,8 +2176,7 @@ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block)
/* download data */
bytecount = (curl_off_t)sb.st_size;
data->req.maxdownload = (curl_off_t)sb.st_size;
- result = Curl_setup_transfer(conn, FIRSTSOCKET,
- bytecount, FALSE, NULL, -1, NULL);
+ Curl_setup_transfer(conn, FIRSTSOCKET, bytecount, FALSE, NULL, -1, NULL);
/* not set by Curl_setup_transfer to preserve keepon bits */
conn->writesockfd = conn->sockfd;
@@ -2410,15 +2426,28 @@ static CURLcode ssh_multi_statemach(struct connectdata *conn, bool *done)
return result;
}
-static CURLcode ssh_easy_statemach(struct connectdata *conn)
+static CURLcode ssh_easy_statemach(struct connectdata *conn,
+ bool duringconnect)
{
struct ssh_conn *sshc = &conn->proto.sshc;
CURLcode result = CURLE_OK;
+ struct SessionHandle *data = conn->data;
while((sshc->state != SSH_STOP) && !result) {
bool block;
+ long left;
+
result = ssh_statemach_act(conn, &block);
+ if(Curl_pgrsUpdate(conn))
+ return CURLE_ABORTED_BY_CALLBACK;
+
+ left = Curl_timeleft(conn, NULL, duringconnect);
+ if(left < 0) {
+ failf(data, "Operation timed out\n");
+ return CURLE_OPERATION_TIMEDOUT;
+ }
+
#ifdef HAVE_LIBSSH2_SESSION_BLOCK_DIRECTION
if((CURLE_OK == result) && block) {
int dir = libssh2_session_block_directions(sshc->ssh_session);
@@ -2432,7 +2461,8 @@ static CURLcode ssh_easy_statemach(struct connectdata *conn)
fd_write = sock;
}
/* wait for the socket to become ready */
- Curl_socket_ready(fd_read, fd_write, 1000); /* ignore result */
+ Curl_socket_ready(fd_read, fd_write,
+ (int)(left>1000?1000:left)); /* ignore result */
}
#endif
@@ -2466,6 +2496,9 @@ static CURLcode ssh_init(struct connectdata *conn)
return CURLE_OK;
}
+static Curl_recv scp_recv, sftp_recv;
+static Curl_send scp_send, sftp_send;
+
/*
* Curl_ssh_connect() gets called from Curl_protocol_connect() to allow us to
* do protocol-specific actions at connect-time.
@@ -2491,6 +2524,13 @@ static CURLcode ssh_connect(struct connectdata *conn, bool *done)
if(result)
return result;
+ if(conn->protocol & PROT_SCP) {
+ conn->recv[FIRSTSOCKET] = scp_recv;
+ conn->send[FIRSTSOCKET] = scp_send;
+ } else {
+ conn->recv[FIRSTSOCKET] = sftp_recv;
+ conn->send[FIRSTSOCKET] = sftp_send;
+ }
ssh = &conn->proto.sshc;
#ifdef CURL_LIBSSH2_DEBUG
@@ -2540,7 +2580,7 @@ static CURLcode ssh_connect(struct connectdata *conn, bool *done)
if(data->state.used_interface == Curl_if_multi)
result = ssh_multi_statemach(conn, done);
else {
- result = ssh_easy_statemach(conn);
+ result = ssh_easy_statemach(conn, TRUE);
if(!result)
*done = TRUE;
}
@@ -2576,7 +2616,7 @@ CURLcode scp_perform(struct connectdata *conn,
result = ssh_multi_statemach(conn, dophase_done);
}
else {
- result = ssh_easy_statemach(conn);
+ result = ssh_easy_statemach(conn, FALSE);
*dophase_done = TRUE; /* with the easy interface we are done here */
}
*connected = conn->bits.tcpconnect;
@@ -2657,7 +2697,7 @@ static CURLcode scp_disconnect(struct connectdata *conn)
state(conn, SSH_SESSION_DISCONNECT);
- result = ssh_easy_statemach(conn);
+ result = ssh_easy_statemach(conn, FALSE);
}
return result;
@@ -2678,7 +2718,7 @@ static CURLcode ssh_done(struct connectdata *conn, CURLcode status)
non-blocking DONE operations, not in the multi state machine and with
Curl_done() invokes on several places in the code!
*/
- result = ssh_easy_statemach(conn);
+ result = ssh_easy_statemach(conn, FALSE);
}
else
result = status;
@@ -2705,8 +2745,8 @@ static CURLcode scp_done(struct connectdata *conn, CURLcode status,
}
/* return number of received (decrypted) bytes */
-ssize_t Curl_scp_send(struct connectdata *conn, int sockindex,
- const void *mem, size_t len)
+static ssize_t scp_send(struct connectdata *conn, int sockindex,
+ const void *mem, size_t len, CURLcode *err)
{
ssize_t nwrite;
(void)sockindex; /* we only support SCP on the fixed known primary socket */
@@ -2717,8 +2757,10 @@ ssize_t Curl_scp_send(struct connectdata *conn, int sockindex,
ssh_block2waitfor(conn, (nwrite == LIBSSH2_ERROR_EAGAIN)?TRUE:FALSE);
- if(nwrite == LIBSSH2_ERROR_EAGAIN)
- return 0;
+ if(nwrite == LIBSSH2_ERROR_EAGAIN) {
+ *err = CURLE_AGAIN;
+ nwrite = 0;
+ }
return nwrite;
}
@@ -2727,8 +2769,8 @@ ssize_t Curl_scp_send(struct connectdata *conn, int sockindex,
* If the read would block (EWOULDBLOCK) we return -1. Otherwise we return
* a regular CURLcode value.
*/
-ssize_t Curl_scp_recv(struct connectdata *conn, int sockindex,
- char *mem, size_t len)
+static ssize_t scp_recv(struct connectdata *conn, int sockindex,
+ char *mem, size_t len, CURLcode *err)
{
ssize_t nread;
(void)sockindex; /* we only support SCP on the fixed known primary socket */
@@ -2738,6 +2780,10 @@ ssize_t Curl_scp_recv(struct connectdata *conn, int sockindex,
libssh2_channel_read(conn->proto.sshc.ssh_channel, mem, len);
ssh_block2waitfor(conn, (nread == LIBSSH2_ERROR_EAGAIN)?TRUE:FALSE);
+ if (nread == LIBSSH2_ERROR_EAGAIN) {
+ *err = CURLE_AGAIN;
+ nread = -1;
+ }
return nread;
}
@@ -2774,7 +2820,7 @@ CURLcode sftp_perform(struct connectdata *conn,
result = ssh_multi_statemach(conn, dophase_done);
}
else {
- result = ssh_easy_statemach(conn);
+ result = ssh_easy_statemach(conn, FALSE);
*dophase_done = TRUE; /* with the easy interface we are done here */
}
*connected = conn->bits.tcpconnect;
@@ -2814,7 +2860,7 @@ static CURLcode sftp_disconnect(struct connectdata *conn)
if(conn->proto.sshc.ssh_session) {
/* only if there's a session still around to use! */
state(conn, SSH_SFTP_SHUTDOWN);
- result = ssh_easy_statemach(conn);
+ result = ssh_easy_statemach(conn, FALSE);
}
DEBUGF(infof(conn->data, "SSH DISCONNECT is done\n"));
@@ -2842,8 +2888,8 @@ static CURLcode sftp_done(struct connectdata *conn, CURLcode status,
}
/* return number of sent bytes */
-ssize_t Curl_sftp_send(struct connectdata *conn, int sockindex,
- const void *mem, size_t len)
+static ssize_t sftp_send(struct connectdata *conn, int sockindex,
+ const void *mem, size_t len, CURLcode *err)
{
ssize_t nwrite; /* libssh2_sftp_write() used to return size_t in 0.14
but is changed to ssize_t in 0.15. These days we don't
@@ -2854,8 +2900,10 @@ ssize_t Curl_sftp_send(struct connectdata *conn, int sockindex,
ssh_block2waitfor(conn, (nwrite == LIBSSH2_ERROR_EAGAIN)?TRUE:FALSE);
- if(nwrite == LIBSSH2_ERROR_EAGAIN)
- return 0;
+ if(nwrite == LIBSSH2_ERROR_EAGAIN) {
+ *err = CURLE_AGAIN;
+ nwrite = 0;
+ }
return nwrite;
}
@@ -2863,8 +2911,8 @@ ssize_t Curl_sftp_send(struct connectdata *conn, int sockindex,
/*
* Return number of received (decrypted) bytes
*/
-ssize_t Curl_sftp_recv(struct connectdata *conn, int sockindex,
- char *mem, size_t len)
+static ssize_t sftp_recv(struct connectdata *conn, int sockindex,
+ char *mem, size_t len, CURLcode *err)
{
ssize_t nread;
(void)sockindex;
@@ -2873,6 +2921,10 @@ ssize_t Curl_sftp_recv(struct connectdata *conn, int sockindex,
ssh_block2waitfor(conn, (nread == LIBSSH2_ERROR_EAGAIN)?TRUE:FALSE);
+ if(nread == LIBSSH2_ERROR_EAGAIN) {
+ *err = CURLE_AGAIN;
+ nread = -1;
+ }
return nread;
}
diff --git a/lib/ssh.h b/lib/ssh.h
index 4e268c2..406220c 100644
--- a/lib/ssh.h
+++ b/lib/ssh.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -151,37 +151,21 @@ struct ssh_conn {
#endif
#if defined(LIBSSH2_VERSION_NUM) && (LIBSSH2_VERSION_NUM >= 0x010000)
-/* libssh2_sftp_seek64() has only ever been provided by libssh2 1.0 or
- later */
# define HAVE_LIBSSH2_SFTP_SEEK64 1
#else
# undef HAVE_LIBSSH2_SFTP_SEEK64
#endif
+#if defined(LIBSSH2_VERSION_NUM) && (LIBSSH2_VERSION_NUM >= 0x010206)
+# define HAVE_LIBSSH2_SCP_SEND64 1
+#else
+# undef HAVE_LIBSSH2_SCP_SEND64
+#endif
+
extern const struct Curl_handler Curl_handler_scp;
extern const struct Curl_handler Curl_handler_sftp;
-ssize_t Curl_scp_send(struct connectdata *conn, int sockindex,
- const void *mem, size_t len);
-ssize_t Curl_scp_recv(struct connectdata *conn, int sockindex,
- char *mem, size_t len);
-
-ssize_t Curl_sftp_send(struct connectdata *conn, int sockindex,
- const void *mem, size_t len);
-ssize_t Curl_sftp_recv(struct connectdata *conn, int sockindex,
- char *mem, size_t len);
-
-#define Curl_ssh_enabled(conn,prot) (conn->protocol & prot)
-
-#else /* USE_LIBSSH2 */
-
-#define Curl_ssh_enabled(x,y) 0
-#define Curl_scp_send(a,b,c,d) 0
-#define Curl_sftp_send(a,b,c,d) 0
-#define Curl_scp_recv(a,b,c,d) 0
-#define Curl_sftp_recv(a,b,c,d) 0
-
#endif /* USE_LIBSSH2 */
#endif /* HEADER_CURL_SSH_H */
diff --git a/lib/sslgen.c b/lib/sslgen.c
index df2a407..bd8dc17 100644
--- a/lib/sslgen.c
+++ b/lib/sslgen.c
@@ -31,6 +31,7 @@
Curl_ossl_ - prefix for OpenSSL ones
Curl_gtls_ - prefix for GnuTLS ones
Curl_nss_ - prefix for NSS ones
+ Curl_polarssl_ - prefix for PolarSSL ones
Note that this source code uses curlssl_* functions, and they are all
defines/macros #defined by the lib-specific header files.
@@ -55,6 +56,7 @@
#include "gtls.h" /* GnuTLS versions */
#include "nssg.h" /* NSS versions */
#include "qssl.h" /* QSOSSL versions */
+#include "polarssl.h" /* PolarSSL versions */
#include "sendf.h"
#include "rawstr.h"
#include "url.h"
@@ -408,25 +410,6 @@ struct curl_slist *Curl_ssl_engines_list(struct SessionHandle *data)
return curlssl_engines_list(data);
}
-ssize_t Curl_ssl_send(struct connectdata *conn,
- int sockindex,
- const void *mem,
- size_t len,
- int *curlcode)
-{
- return curlssl_send(conn, sockindex, mem, len, curlcode);
-}
-
-ssize_t Curl_ssl_recv(struct connectdata *conn,
- int sockindex,
- char *mem,
- size_t len,
- int *curlcode)
-{
- return curlssl_recv(conn, sockindex, mem, len, curlcode);
-}
-
-
/*
* This sets up a session ID cache to the specified size. Make sure this code
* is agnostic to what underlying SSL technology we use.
diff --git a/lib/sslgen.h b/lib/sslgen.h
index c56265e..997e30d 100644
--- a/lib/sslgen.h
+++ b/lib/sslgen.h
@@ -45,28 +45,6 @@ CURLcode Curl_ssl_set_engine(struct SessionHandle *data, const char *engine);
CURLcode Curl_ssl_set_engine_default(struct SessionHandle *data);
struct curl_slist *Curl_ssl_engines_list(struct SessionHandle *data);
-/* If the write would block (EWOULDBLOCK) or fail, we we return -1.
- * The error or -1 (for EWOULDBLOCK) is then stored in *curlcode.
- * Otherwise we return the count of (non-SSL) bytes transfered.
- */
-ssize_t Curl_ssl_send(struct connectdata *conn, /* connection data */
- int sockindex, /* socketindex */
- const void *mem, /* data to write */
- size_t len, /* max amount to write */
- int *curlcode); /* error to return,
- -1 means EWOULDBLOCK */
-
-/* If the read would block (EWOULDBLOCK) or fail, we we return -1.
- * The error or -1 (for EWOULDBLOCK) is then stored in *curlcode.
- * Otherwise we return the count of (non-SSL) bytes transfered.
- */
-ssize_t Curl_ssl_recv(struct connectdata *conn, /* connection data */
- int sockindex, /* socketindex */
- char *mem, /* store read data here */
- size_t len, /* max amount to read */
- int *curlcode); /* error to return,
- -1 means EWOULDBLOCK */
-
/* init the SSL session ID cache */
CURLcode Curl_ssl_initsessions(struct SessionHandle *, long);
size_t Curl_ssl_version(char *buffer, size_t size);
diff --git a/lib/ssluse.c b/lib/ssluse.c
index d9cf382..474bc9a 100644
--- a/lib/ssluse.c
+++ b/lib/ssluse.c
@@ -64,6 +64,7 @@
#include <openssl/x509v3.h>
#include <openssl/dsa.h>
#include <openssl/dh.h>
+#include <openssl/err.h>
#else
#include <rand.h>
#include <x509v3.h>
@@ -882,6 +883,8 @@ int Curl_ossl_shutdown(struct connectdata *conn, int sockindex)
int what = Curl_socket_ready(conn->sock[sockindex],
CURL_SOCKET_BAD, SSL_SHUTDOWN_TIMEOUT);
if(what > 0) {
+ ERR_clear_error();
+
/* Something to read, let's do it and hope that it is the close
notify alert from the server */
nread = (ssize_t)SSL_read(conn->ssl[sockindex].handle, buf,
@@ -1592,10 +1595,8 @@ ossl_connect_step1(struct connectdata *conn,
if ( !lookup ||
(!X509_load_crl_file(lookup,data->set.str[STRING_SSL_CRLFILE],
X509_FILETYPE_PEM)) ) {
- failf(data,"error loading CRL file :\n"
- " CRLfile: %s\n",
- data->set.str[STRING_SSL_CRLFILE]?
- data->set.str[STRING_SSL_CRLFILE]: "none");
+ failf(data,"error loading CRL file: %s\n",
+ data->set.str[STRING_SSL_CRLFILE]);
return CURLE_SSL_CRL_BADFILE;
}
else {
@@ -1684,6 +1685,8 @@ ossl_connect_step2(struct connectdata *conn, int sockindex)
|| ssl_connect_2_reading == connssl->connecting_state
|| ssl_connect_2_writing == connssl->connecting_state);
+ ERR_clear_error();
+
err = SSL_connect(connssl->handle);
/* 1 is fine
@@ -2352,6 +2355,9 @@ ossl_connect_step3(struct connectdata *conn,
return retcode;
}
+static Curl_recv ossl_recv;
+static Curl_send ossl_send;
+
static CURLcode
ossl_connect_common(struct connectdata *conn,
int sockindex,
@@ -2422,8 +2428,17 @@ ossl_connect_common(struct connectdata *conn,
/* socket is readable or writable */
}
+ /* Run transaction, and return to the caller if it failed or if this
+ * connection is done nonblocking and this loop would execute again. This
+ * permits the owner of a multi handle to abort a connection attempt
+ * before step2 has completed while ensuring that a client using select()
+ * or epoll() will always have a valid fdset to wait on.
+ */
retcode = ossl_connect_step2(conn, sockindex);
- if(retcode || (data->state.used_interface == Curl_if_multi))
+ if(retcode || (nonblocking &&
+ (ssl_connect_2 == connssl->connecting_state ||
+ ssl_connect_2_reading == connssl->connecting_state ||
+ ssl_connect_2_writing == connssl->connecting_state)))
return retcode;
} /* repeat step2 until all transactions are done. */
@@ -2437,6 +2452,8 @@ ossl_connect_common(struct connectdata *conn,
if(ssl_connect_done==connssl->connecting_state) {
connssl->state = ssl_connection_complete;
+ conn->recv[sockindex] = ossl_recv;
+ conn->send[sockindex] = ossl_send;
*done = TRUE;
}
else
@@ -2482,12 +2499,11 @@ bool Curl_ossl_data_pending(const struct connectdata *conn,
return FALSE;
}
-/* for documentation see Curl_ssl_send() in sslgen.h */
-ssize_t Curl_ossl_send(struct connectdata *conn,
- int sockindex,
- const void *mem,
- size_t len,
- int *curlcode)
+static ssize_t ossl_send(struct connectdata *conn,
+ int sockindex,
+ const void *mem,
+ size_t len,
+ CURLcode *curlcode)
{
/* SSL_write() is said to return 'int' while write() and send() returns
'size_t' */
@@ -2498,6 +2514,8 @@ ssize_t Curl_ossl_send(struct connectdata *conn,
int memlen;
int rc;
+ ERR_clear_error();
+
memlen = (len > (size_t)INT_MAX) ? INT_MAX : (int)len;
rc = SSL_write(conn->ssl[sockindex].handle, mem, memlen);
@@ -2510,7 +2528,7 @@ ssize_t Curl_ossl_send(struct connectdata *conn,
/* The operation did not complete; the same TLS/SSL I/O function
should be called again later. This is basicly an EWOULDBLOCK
equivalent. */
- *curlcode = /* EWOULDBLOCK */ -1;
+ *curlcode = CURLE_AGAIN;
return -1;
case SSL_ERROR_SYSCALL:
failf(conn->data, "SSL_write() returned SYSCALL, errno = %d",
@@ -2534,12 +2552,11 @@ ssize_t Curl_ossl_send(struct connectdata *conn,
return (ssize_t)rc; /* number of bytes */
}
-/* for documentation see Curl_ssl_recv() in sslgen.h */
-ssize_t Curl_ossl_recv(struct connectdata *conn, /* connection data */
- int num, /* socketindex */
- char *buf, /* store read data here */
- size_t buffersize, /* max amount to read */
- int *curlcode)
+static ssize_t ossl_recv(struct connectdata *conn, /* connection data */
+ int num, /* socketindex */
+ char *buf, /* store read data here */
+ size_t buffersize, /* max amount to read */
+ CURLcode *curlcode)
{
char error_buffer[120]; /* OpenSSL documents that this must be at
least 120 bytes long. */
@@ -2547,6 +2564,8 @@ ssize_t Curl_ossl_recv(struct connectdata *conn, /* connection data */
ssize_t nread;
int buffsize;
+ ERR_clear_error();
+
buffsize = (buffersize > (size_t)INT_MAX) ? INT_MAX : (int)buffersize;
nread = (ssize_t)SSL_read(conn->ssl[num].handle, buf, buffsize);
if(nread < 0) {
@@ -2560,7 +2579,7 @@ ssize_t Curl_ossl_recv(struct connectdata *conn, /* connection data */
case SSL_ERROR_WANT_READ:
case SSL_ERROR_WANT_WRITE:
/* there's data pending, re-invoke SSL_read() */
- *curlcode = -1; /* EWOULDBLOCK */
+ *curlcode = CURLE_AGAIN;
return -1;
default:
/* openssl/ssl.h says "look at error stack/return value/errno" */
diff --git a/lib/ssluse.h b/lib/ssluse.h
index 00357af..2ac0ad2 100644
--- a/lib/ssluse.h
+++ b/lib/ssluse.h
@@ -56,20 +56,6 @@ struct curl_slist *Curl_ossl_engines_list(struct SessionHandle *data);
int Curl_ossl_init(void);
void Curl_ossl_cleanup(void);
-/* for documentation see Curl_ssl_send() in sslgen.h */
-ssize_t Curl_ossl_send(struct connectdata *conn,
- int sockindex,
- const void *mem,
- size_t len,
- int *curlcode);
-
-/* for documentation see Curl_ssl_recv() in sslgen.h */
-ssize_t Curl_ossl_recv(struct connectdata *conn, /* connection data */
- int num, /* socketindex */
- char *buf, /* store read data here */
- size_t buffersize, /* max amount to read */
- int *curlcode);
-
size_t Curl_ossl_version(char *buffer, size_t size);
int Curl_ossl_check_cxn(struct connectdata *cxn);
int Curl_ossl_seed(struct SessionHandle *data);
@@ -90,8 +76,6 @@ bool Curl_ossl_data_pending(const struct connectdata *conn,
#define curlssl_set_engine(x,y) Curl_ossl_set_engine(x,y)
#define curlssl_set_engine_default(x) Curl_ossl_set_engine_default(x)
#define curlssl_engines_list(x) Curl_ossl_engines_list(x)
-#define curlssl_send Curl_ossl_send
-#define curlssl_recv Curl_ossl_recv
#define curlssl_version Curl_ossl_version
#define curlssl_check_cxn Curl_ossl_check_cxn
#define curlssl_data_pending(x,y) Curl_ossl_data_pending(x,y)
diff --git a/lib/stamp-h1 b/lib/stamp-h1
deleted file mode 100644
index 8f5adb6..0000000
--- a/lib/stamp-h1
+++ /dev/null
@@ -1 +0,0 @@
-timestamp for lib/curl_config.h
diff --git a/lib/strerror.c b/lib/strerror.c
index 673e89c..e8ecea5 100644
--- a/lib/strerror.c
+++ b/lib/strerror.c
@@ -275,6 +275,12 @@ curl_easy_strerror(CURLcode error)
case CURLE_RTSP_SESSION_ERROR:
return "RTSP session error";
+ case CURLE_FTP_BAD_FILE_LIST:
+ return "Unable to parse FTP file list";
+
+ case CURLE_CHUNK_FAILED:
+ return "Chunk callback failed";
+
/* error codes not used by current libcurl */
case CURLE_OBSOLETE4:
case CURLE_OBSOLETE10:
diff --git a/lib/strtoofft.c b/lib/strtoofft.c
index f75eb8a..61ff05b 100644
--- a/lib/strtoofft.c
+++ b/lib/strtoofft.c
@@ -131,9 +131,9 @@ curlx_strtoll(const char *nptr, char **endptr, int base)
}
else {
if(is_negative)
- value = CURL_LLONG_MIN;
+ value = CURL_OFF_T_MIN;
else
- value = CURL_LLONG_MAX;
+ value = CURL_OFF_T_MAX;
SET_ERRNO(ERANGE);
}
diff --git a/lib/strtoofft.h b/lib/strtoofft.h
index bf27a17..8208e87 100644
--- a/lib/strtoofft.h
+++ b/lib/strtoofft.h
@@ -57,7 +57,12 @@
# define curlx_strtoofft strtol
#endif
-#define CURL_LLONG_MAX CURL_OFF_T_C(0x7FFFFFFFFFFFFFFF)
-#define CURL_LLONG_MIN (-CURL_LLONG_MAX - CURL_OFF_T_C(1))
+#if (CURL_SIZEOF_CURL_OFF_T == 4)
+# define CURL_OFF_T_MAX CURL_OFF_T_C(0x7FFFFFFF)
+#else
+ /* assume CURL_SIZEOF_CURL_OFF_T == 8 */
+# define CURL_OFF_T_MAX CURL_OFF_T_C(0x7FFFFFFFFFFFFFFF)
+#endif
+#define CURL_OFF_T_MIN (-CURL_OFF_T_MAX - CURL_OFF_T_C(1))
#endif /* HEADER_CURL_STRTOOFFT_H */
diff --git a/lib/telnet.c b/lib/telnet.c
index 9409f49..1a5683d 100644
--- a/lib/telnet.c
+++ b/lib/telnet.c
@@ -67,6 +67,7 @@
#include "sendf.h"
#include "telnet.h"
#include "connect.h"
+#include "progress.h"
#define _MPRINTF_REPLACE /* use our functions only */
#include <curl/mprintf.h>
@@ -962,16 +963,16 @@ CURLcode telrcv(struct connectdata *conn,
struct SessionHandle *data = conn->data;
struct TELNET *tn = (struct TELNET *)data->state.proto.telnet;
-#define startskipping() \
- if(startwrite >= 0) { \
- result = Curl_client_write(conn, \
- CLIENTWRITE_BODY, \
- (char *)&inbuf[startwrite], \
- in-startwrite); \
- if(result != CURLE_OK) \
- return result; \
- } \
- startwrite = -1
+#define startskipping() \
+ if(startwrite >= 0) { \
+ result = Curl_client_write(conn, \
+ CLIENTWRITE_BODY, \
+ (char *)&inbuf[startwrite], \
+ in-startwrite); \
+ if(result != CURLE_OK) \
+ return result; \
+ } \
+ startwrite = -1
#define writebyte() \
if(startwrite < 0) \
@@ -1206,8 +1207,10 @@ static CURLcode telnet_do(struct connectdata *conn, bool *done)
#else
int interval_ms;
struct pollfd pfd[2];
+ int poll_cnt;
+ curl_off_t total_dl = 0;
+ curl_off_t total_ul = 0;
#endif
- int ret;
ssize_t nread;
struct timeval now;
bool keepon = TRUE;
@@ -1379,14 +1382,13 @@ static CURLcode telnet_do(struct connectdata *conn, bool *done)
}
if(events.lNetworkEvents & FD_READ) {
/* read data from network */
- ret = Curl_read(conn, sockfd, buf, BUFSIZE - 1, &nread);
- /* returned sub-zero, this would've blocked. Loop again */
- if(ret < 0)
+ code = Curl_read(conn, sockfd, buf, BUFSIZE - 1, &nread);
+ /* read would've blocked. Loop again */
+ if(code == CURLE_AGAIN)
break;
/* returned not-zero, this an error */
- else if(ret) {
+ else if(code) {
keepon = FALSE;
- code = (CURLcode)ret;
break;
}
/* returned zero but actually received 0 or less here,
@@ -1402,8 +1404,6 @@ static CURLcode telnet_do(struct connectdata *conn, bool *done)
break;
}
- fflush(stdout);
-
/* Negotiate if the peer has started negotiating,
otherwise don't. We don't want to speak telnet with
non-telnet servers, like POP or SMTP. */
@@ -1446,37 +1446,37 @@ static CURLcode telnet_do(struct connectdata *conn, bool *done)
#else
pfd[0].fd = sockfd;
pfd[0].events = POLLIN;
- pfd[1].fd = 0;
- pfd[1].events = POLLIN;
- interval_ms = 1 * 1000;
+
+ if (data->set.is_fread_set) {
+ poll_cnt = 1;
+ interval_ms = 100; /* poll user-supplied read function */
+ }
+ else {
+ pfd[1].fd = 0;
+ pfd[1].events = POLLIN;
+ poll_cnt = 2;
+ interval_ms = 1 * 1000;
+ }
while(keepon) {
- switch (Curl_poll(pfd, 2, interval_ms)) {
+ switch (Curl_poll(pfd, poll_cnt, interval_ms)) {
case -1: /* error, stop reading */
keepon = FALSE;
continue;
case 0: /* timeout */
- break;
+ pfd[0].revents = 0;
+ pfd[1].revents = 0;
+ /* fall through */
default: /* read! */
- if(pfd[1].revents & POLLIN) { /* read from stdin */
- nread = read(0, buf, 255);
- code = send_telnet_data(conn, buf, nread);
- if(code) {
- keepon = FALSE;
- break;
- }
- }
-
if(pfd[0].revents & POLLIN) {
/* read data from network */
- ret = Curl_read(conn, sockfd, buf, BUFSIZE - 1, &nread);
- /* returned sub-zero, this would've blocked. Loop again */
- if(ret < 0)
+ code = Curl_read(conn, sockfd, buf, BUFSIZE - 1, &nread);
+ /* read would've blocked. Loop again */
+ if(code == CURLE_AGAIN)
break;
/* returned not-zero, this an error */
- else if(ret) {
+ else if(code) {
keepon = FALSE;
- code = (CURLcode)ret;
break;
}
/* returned zero but actually received 0 or less here,
@@ -1486,6 +1486,8 @@ static CURLcode telnet_do(struct connectdata *conn, bool *done)
break;
}
+ total_dl += nread;
+ Curl_pgrsSetDownloadCounter(data, total_dl);
code = telrcv(conn, (unsigned char *)buf, nread);
if(code) {
keepon = FALSE;
@@ -1500,7 +1502,39 @@ static CURLcode telnet_do(struct connectdata *conn, bool *done)
tn->already_negotiated = 1;
}
}
- }
+
+ nread = 0;
+ if (poll_cnt == 2) {
+ if(pfd[1].revents & POLLIN) { /* read from stdin */
+ nread = read(0, buf, BUFSIZE - 1);
+ }
+ }
+ else {
+ /* read from user-supplied method */
+ nread = (int)conn->fread_func(buf, 1, BUFSIZE - 1, conn->fread_in);
+ if (nread == CURL_READFUNC_ABORT) {
+ keepon = FALSE;
+ break;
+ }
+ if (nread == CURL_READFUNC_PAUSE)
+ break;
+ }
+
+ if (nread > 0) {
+ code = send_telnet_data(conn, buf, nread);
+ if(code) {
+ keepon = FALSE;
+ break;
+ }
+ total_ul += nread;
+ Curl_pgrsSetUploadCounter(data, total_ul);
+ }
+ else if (nread < 0)
+ keepon = FALSE;
+
+ break;
+ } /* poll switch statement */
+
if(data->set.timeout) {
now = Curl_tvnow();
if(Curl_tvdiff(now, conn->created) >= data->set.timeout) {
@@ -1509,6 +1543,11 @@ static CURLcode telnet_do(struct connectdata *conn, bool *done)
keepon = FALSE;
}
}
+
+ if(Curl_pgrsUpdate(conn)) {
+ code = CURLE_ABORTED_BY_CALLBACK;
+ break;
+ }
}
#endif
/* mark this as "no further transfer wanted" */
diff --git a/lib/tftp.c b/lib/tftp.c
index dc21c54..782bb73 100644
--- a/lib/tftp.c
+++ b/lib/tftp.c
@@ -87,8 +87,10 @@
#define TFTP_BLKSIZE_MIN 8
#define TFTP_BLKSIZE_MAX 65464
#define TFTP_OPTION_BLKSIZE "blksize"
-#define TFTP_OPTION_TSIZE "tsize"
-#define TFTP_OPTION_INTERVAL "interval"
+
+/* from RFC2349: */
+#define TFTP_OPTION_TSIZE "tsize"
+#define TFTP_OPTION_INTERVAL "timeout"
typedef enum {
TFTP_MODE_NETASCII=0,
@@ -167,7 +169,7 @@ static CURLcode tftp_connect(struct connectdata *conn, bool *done);
static CURLcode tftp_disconnect(struct connectdata *conn);
static CURLcode tftp_do(struct connectdata *conn, bool *done);
static CURLcode tftp_done(struct connectdata *conn,
- CURLcode, bool premature);
+ CURLcode, bool premature);
static CURLcode tftp_setup_connection(struct connectdata * conn);
static CURLcode tftp_multi_statemach(struct connectdata *conn, bool *done);
static CURLcode tftp_doing(struct connectdata *conn, bool *dophase_done);
@@ -372,12 +374,12 @@ static CURLcode tftp_parse_option_ack(tftp_state_data_t *state,
}
else if(blksize > TFTP_BLKSIZE_MAX) {
failf(data, "%s (%d)", "blksize is larger than max supported",
- TFTP_BLKSIZE_MAX);
+ TFTP_BLKSIZE_MAX);
return CURLE_TFTP_ILLEGAL;
}
else if(blksize < TFTP_BLKSIZE_MIN) {
failf(data, "%s (%d)", "blksize is smaller than min supported",
- TFTP_BLKSIZE_MIN);
+ TFTP_BLKSIZE_MIN);
return CURLE_TFTP_ILLEGAL;
}
else if (blksize > state->requested_blksize) {
@@ -385,13 +387,13 @@ static CURLcode tftp_parse_option_ack(tftp_state_data_t *state,
* support for the server requesting a bigger blksize than the client
* requests */
failf(data, "%s (%ld)",
- "server requested blksize larger than allocated", blksize);
+ "server requested blksize larger than allocated", blksize);
return CURLE_TFTP_ILLEGAL;
}
state->blksize = (int)blksize;
infof(data, "%s (%d) %s (%d)\n", "blksize parsed from OACK",
- state->blksize, "requested", state->requested_blksize);
+ state->blksize, "requested", state->requested_blksize);
}
else if(checkprefix(option, TFTP_OPTION_TSIZE)) {
long tsize = 0;
@@ -524,18 +526,21 @@ static CURLcode tftp_send_first(tftp_state_data_t *state, tftp_event_t event)
TFTP_OPTION_BLKSIZE);
sbytes += tftp_option_add(state, sbytes,
(char *)state->spacket.data+sbytes, buf );
- /* add timeout option, this is the max time the session may live */
- snprintf( buf, sizeof(buf), "%d", state->retry_time*state->retry_max );
+
+ /* add timeout option */
+ snprintf( buf, sizeof(buf), "%d", state->retry_time);
sbytes += tftp_option_add(state, sbytes,
(char *)state->spacket.data+sbytes,
TFTP_OPTION_INTERVAL);
sbytes += tftp_option_add(state, sbytes,
(char *)state->spacket.data+sbytes, buf );
+ /* the typecase for the 3rd argument is mostly for systems that do
+ not have a size_t argument, like older unixes that want an 'int' */
senddata = sendto(state->sockfd, (void *)state->spacket.data,
- sbytes, 0,
- state->conn->ip_addr->ai_addr,
- state->conn->ip_addr->ai_addrlen);
+ (SEND_TYPE_ARG3)sbytes, 0,
+ state->conn->ip_addr->ai_addr,
+ state->conn->ip_addr->ai_addrlen);
if(senddata != (ssize_t)sbytes) {
failf(data, "%s", Curl_strerror(state->conn, SOCKERRNO));
}
@@ -570,6 +575,10 @@ static CURLcode tftp_send_first(tftp_state_data_t *state, tftp_event_t event)
return res;
}
+/* the next blocknum is x + 1 but it needs to wrap at an unsigned 16bit
+ boundary */
+#define NEXT_BLOCKNUM(x) (((x)+1)&0xffff)
+
/**********************************************************
*
* tftp_rx
@@ -588,16 +597,17 @@ static CURLcode tftp_rx(tftp_state_data_t *state, tftp_event_t event)
case TFTP_EVENT_DATA:
/* Is this the block we expect? */
rblock = getrpacketblock(&state->rpacket);
- if((state->block+1) != rblock) {
+ if(NEXT_BLOCKNUM(state->block) != rblock) {
/* No, log it, up the retry count and fail if over the limit */
infof(data,
"Received unexpected DATA packet block %d\n", rblock);
state->retries++;
- if(state->retries>state->retry_max) {
+ if(state->retries > state->retry_max) {
failf(data, "tftp_rx: giving up waiting for block %d",
- state->block+1);
+ NEXT_BLOCKNUM(state->block));
return CURLE_TFTP_ILLEGAL;
}
+ break;
}
/* This is the expected block. Reset counters and ACK it. */
state->block = (unsigned short)rblock;
@@ -648,7 +658,7 @@ static CURLcode tftp_rx(tftp_state_data_t *state, tftp_event_t event)
state->retries++;
infof(data,
"Timeout waiting for block %d ACK. Retries = %d\n",
- state->block+1, state->retries);
+ NEXT_BLOCKNUM(state->block), state->retries);
if(state->retries > state->retry_max) {
state->error = TFTP_ERR_TIMEOUT;
state->state = TFTP_STATE_FIN;
@@ -659,7 +669,6 @@ static CURLcode tftp_rx(tftp_state_data_t *state, tftp_event_t event)
4, SEND_4TH_ARG,
(struct sockaddr *)&state->remote_addr,
state->remote_addrlen);
- /* Check all sbytes were sent */
if(sbytes<0) {
failf(data, "%s", Curl_strerror(state->conn, SOCKERRNO));
return CURLE_SEND_ERROR;
@@ -670,10 +679,10 @@ static CURLcode tftp_rx(tftp_state_data_t *state, tftp_event_t event)
case TFTP_EVENT_ERROR:
setpacketevent(&state->spacket, TFTP_EVENT_ERROR);
setpacketblock(&state->spacket, state->block);
- sbytes = sendto(state->sockfd, (void *)state->spacket.data,
- 4, SEND_4TH_ARG,
- (struct sockaddr *)&state->remote_addr,
- state->remote_addrlen);
+ (void)sendto(state->sockfd, (void *)state->spacket.data,
+ 4, SEND_4TH_ARG,
+ (struct sockaddr *)&state->remote_addr,
+ state->remote_addrlen);
/* don't bother with the return code, but if the socket is still up we
* should be a good TFTP client and let the server know we're done */
state->state = TFTP_STATE_FIN;
@@ -707,42 +716,48 @@ static CURLcode tftp_tx(tftp_state_data_t *state, tftp_event_t event)
case TFTP_EVENT_ACK:
case TFTP_EVENT_OACK:
if (event == TFTP_EVENT_ACK) {
- /* Ack the packet */
- rblock = getrpacketblock(&state->rpacket);
-
- if(rblock != state->block) {
- /* This isn't the expected block. Log it and up the retry counter */
- infof(data, "Received ACK for block %d, expecting %d\n",
- rblock, state->block);
- state->retries++;
- /* Bail out if over the maximum */
- if(state->retries>state->retry_max) {
- failf(data, "tftp_tx: giving up waiting for block %d ack",
- state->block);
- res = CURLE_SEND_ERROR;
- }
- else {
- /* Re-send the data packet */
- sbytes = sendto(state->sockfd, (void *)&state->spacket,
- 4+state->sbytes, SEND_4TH_ARG,
- (struct sockaddr *)&state->remote_addr,
- state->remote_addrlen);
- /* Check all sbytes were sent */
- if(sbytes<0) {
- failf(data, "%s", Curl_strerror(state->conn, SOCKERRNO));
- res = CURLE_SEND_ERROR;
- }
+ /* Ack the packet */
+ rblock = getrpacketblock(&state->rpacket);
+
+ if(rblock != state->block &&
+ /* There's a bug in tftpd-hpa that causes it to send us an ack for
+ * 65535 when the block number wraps to 0. So when we're expecting
+ * 0, also accept 65535. See
+ * http://syslinux.zytor.com/archives/2010-September/015253.html
+ * */
+ !(state->block == 0 && rblock == 65535)) {
+ /* This isn't the expected block. Log it and up the retry counter */
+ infof(data, "Received ACK for block %d, expecting %d\n",
+ rblock, state->block);
+ state->retries++;
+ /* Bail out if over the maximum */
+ if(state->retries>state->retry_max) {
+ failf(data, "tftp_tx: giving up waiting for block %d ack",
+ state->block);
+ res = CURLE_SEND_ERROR;
+ }
+ else {
+ /* Re-send the data packet */
+ sbytes = sendto(state->sockfd, (void *)&state->spacket,
+ 4+state->sbytes, SEND_4TH_ARG,
+ (struct sockaddr *)&state->remote_addr,
+ state->remote_addrlen);
+ /* Check all sbytes were sent */
+ if(sbytes<0) {
+ failf(data, "%s", Curl_strerror(state->conn, SOCKERRNO));
+ res = CURLE_SEND_ERROR;
}
- return res;
- }
- /* This is the expected packet. Reset the counters and send the next
- block */
- time(&state->rx_time);
- state->block++;
- }
- else {
- state->block = 1; /* first data block is 1 when using OACK */
+ }
+ return res;
+ }
+ /* This is the expected packet. Reset the counters and send the next
+ block */
+ time(&state->rx_time);
+ state->block++;
}
+ else
+ state->block = 1; /* first data block is 1 when using OACK */
+
state->retries = 0;
setpacketevent(&state->spacket, TFTP_EVENT_DATA);
setpacketblock(&state->spacket, state->block);
@@ -750,8 +765,7 @@ static CURLcode tftp_tx(tftp_state_data_t *state, tftp_event_t event)
state->state = TFTP_STATE_FIN;
return CURLE_OK;
}
- res = Curl_fillreadbuffer(state->conn, (size_t)state->blksize,
- &state->sbytes);
+ res = Curl_fillreadbuffer(state->conn, state->blksize, &state->sbytes);
if(res)
return res;
sbytes = sendto(state->sockfd, (void *)state->spacket.data,
@@ -772,7 +786,7 @@ static CURLcode tftp_tx(tftp_state_data_t *state, tftp_event_t event)
/* Increment the retry counter and log the timeout */
state->retries++;
infof(data, "Timeout waiting for block %d ACK. "
- " Retries = %d\n", state->block+1, state->retries);
+ " Retries = %d\n", NEXT_BLOCKNUM(state->block), state->retries);
/* Decide if we've had enough */
if(state->retries > state->retry_max) {
state->error = TFTP_ERR_TIMEOUT;
@@ -798,10 +812,9 @@ static CURLcode tftp_tx(tftp_state_data_t *state, tftp_event_t event)
state->state = TFTP_STATE_FIN;
setpacketevent(&state->spacket, TFTP_EVENT_ERROR);
setpacketblock(&state->spacket, state->block);
- sbytes = sendto(state->sockfd, (void *)state->spacket.data,
- 4, SEND_4TH_ARG,
- (struct sockaddr *)&state->remote_addr,
- state->remote_addrlen);
+ (void)sendto(state->sockfd, (void *)state->spacket.data, 4, SEND_4TH_ARG,
+ (struct sockaddr *)&state->remote_addr,
+ state->remote_addrlen);
/* don't bother with the return code, but if the socket is still up we
* should be a good TFTP client and let the server know we're done */
state->state = TFTP_STATE_FIN;
@@ -1025,7 +1038,7 @@ static CURLcode tftp_connect(struct connectdata *conn, bool *done)
*
**********************************************************/
static CURLcode tftp_done(struct connectdata *conn, CURLcode status,
- bool premature)
+ bool premature)
{
CURLcode code = CURLE_OK;
tftp_state_data_t *state = (tftp_state_data_t *)conn->proto.tftpc;
@@ -1049,7 +1062,7 @@ static CURLcode tftp_done(struct connectdata *conn, CURLcode status,
*
**********************************************************/
static int tftp_getsock(struct connectdata *conn, curl_socket_t *socks,
- int numsocks)
+ int numsocks)
{
if(!numsocks)
return GETSOCK_BLANK;
@@ -1078,11 +1091,11 @@ static CURLcode tftp_receive_packet(struct connectdata *conn)
/* Receive the packet */
fromlen = sizeof(fromaddr);
state->rbytes = (int)recvfrom(state->sockfd,
- (void *)state->rpacket.data,
- state->blksize+4,
- 0,
- (struct sockaddr *)&fromaddr,
- &fromlen);
+ (void *)state->rpacket.data,
+ state->blksize+4,
+ 0,
+ (struct sockaddr *)&fromaddr,
+ &fromlen);
if(state->remote_addrlen==0) {
memcpy(&state->remote_addr, &fromaddr, fromlen);
state->remote_addrlen = fromlen;
@@ -1102,10 +1115,10 @@ static CURLcode tftp_receive_packet(struct connectdata *conn)
case TFTP_EVENT_DATA:
/* Don't pass to the client empty or retransmitted packets */
if(state->rbytes > 4 &&
- ((state->block+1) == getrpacketblock(&state->rpacket))) {
+ (NEXT_BLOCKNUM(state->block) == getrpacketblock(&state->rpacket))) {
result = Curl_client_write(conn, CLIENTWRITE_BODY,
- (char *)state->rpacket.data+4,
- state->rbytes-4);
+ (char *)state->rpacket.data+4,
+ state->rbytes-4);
if(result) {
tftp_state_machine(state, TFTP_EVENT_ERROR);
return result;
@@ -1122,8 +1135,8 @@ static CURLcode tftp_receive_packet(struct connectdata *conn)
break;
case TFTP_EVENT_OACK:
result = tftp_parse_option_ack(state,
- (const char *)state->rpacket.data+2,
- state->rbytes-2);
+ (const char *)state->rpacket.data+2,
+ state->rbytes-2);
if(result)
return result;
break;
@@ -1164,17 +1177,18 @@ static long tftp_state_timeout(struct connectdata *conn, tftp_event_t *event)
(long)current, (long)state->max_time));
state->error = TFTP_ERR_TIMEOUT;
state->state = TFTP_STATE_FIN;
- return(0);
+ return 0;
}
else if (current > state->rx_time+state->retry_time) {
if (event)
*event = TFTP_EVENT_TIMEOUT;
time(&state->rx_time); /* update even though we received nothing */
- return(state->max_time-current);
- }
- else {
- return(state->max_time-current);
}
+
+ /* there's a typecast below here since 'time_t' may in fact be larger than
+ 'long', but we estimate that a 'long' will still be able to hold number
+ of seconds even if "only" 32 bit */
+ return (long)(state->max_time - current);
}
@@ -1192,7 +1206,7 @@ static CURLcode tftp_easy_statemach(struct connectdata *conn)
CURLcode result = CURLE_OK;
struct SessionHandle *data = conn->data;
tftp_state_data_t *state = (tftp_state_data_t *)conn->proto.tftpc;
- int fd_read;
+ curl_socket_t fd_read;
long timeout_ms;
struct SingleRequest *k = &data->req;
struct timeval transaction_start = Curl_tvnow();
@@ -1244,11 +1258,11 @@ static CURLcode tftp_easy_statemach(struct connectdata *conn)
/* Force a progress callback if it's been too long */
if (Curl_tvdiff(k->now, k->start) >= data->set.timeout) {
- if(Curl_pgrsUpdate(conn)) {
- tftp_state_machine(state, TFTP_EVENT_ERROR);
- return CURLE_ABORTED_BY_CALLBACK;
- }
- k->start = k->now;
+ if(Curl_pgrsUpdate(conn)) {
+ tftp_state_machine(state, TFTP_EVENT_ERROR);
+ return CURLE_ABORTED_BY_CALLBACK;
+ }
+ k->start = k->now;
}
if(rc == -1) {
@@ -1275,7 +1289,7 @@ static CURLcode tftp_easy_statemach(struct connectdata *conn)
else {
result = tftp_receive_packet(conn);
if (result == CURLE_OK)
- transaction_start = Curl_tvnow();
+ transaction_start = Curl_tvnow();
if(k->bytecountp)
*k->bytecountp = k->bytecount; /* read count */
@@ -1296,7 +1310,7 @@ static CURLcode tftp_easy_statemach(struct connectdata *conn)
}
/* Tell curl we're done */
- result = Curl_setup_transfer(conn, -1, -1, FALSE, NULL, -1, NULL);
+ Curl_setup_transfer(conn, -1, -1, FALSE, NULL, -1, NULL);
return(result);
}
@@ -1330,7 +1344,7 @@ static CURLcode tftp_multi_statemach(struct connectdata *conn, bool *done)
*done = (bool)(state->state == TFTP_STATE_FIN);
if(*done)
/* Tell curl we're done */
- result = Curl_setup_transfer(conn, -1, -1, FALSE, NULL, -1, NULL);
+ Curl_setup_transfer(conn, -1, -1, FALSE, NULL, -1, NULL);
}
else {
/* no timeouts to handle, check our socket */
@@ -1352,7 +1366,7 @@ static CURLcode tftp_multi_statemach(struct connectdata *conn, bool *done)
*done = (bool)(state->state == TFTP_STATE_FIN);
if(*done)
/* Tell curl we're done */
- result = Curl_setup_transfer(conn, -1, -1, FALSE, NULL, -1, NULL);
+ Curl_setup_transfer(conn, -1, -1, FALSE, NULL, -1, NULL);
}
/* if rc == 0, then select() timed out */
}
@@ -1447,7 +1461,7 @@ static CURLcode tftp_do(struct connectdata *conn, bool *done)
/* If tftp_perform() returned an error, use that for return code. If it
was OK, see if tftp_translate_code() has an error. */
- if (code == CURLE_OK)
+ if (code == CURLE_OK)
/* If we have encountered an internal tftp error, translate it. */
code = tftp_translate_code(state->error);
diff --git a/lib/transfer.c b/lib/transfer.c
index 2d50405..78bd7f1 100644
--- a/lib/transfer.c
+++ b/lib/transfer.c
@@ -103,6 +103,7 @@
#include "multiif.h"
#include "easyif.h" /* for Curl_convert_to_network prototype */
#include "rtsp.h"
+#include "connect.h"
#define _MPRINTF_REPLACE /* use our functions only */
#include <curl/mprintf.h>
@@ -194,7 +195,8 @@ CURLcode Curl_fillreadbuffer(struct connectdata *conn, int bytes, int *nreadp)
/* \n will become \r\n later on */
endofline_native = "\n";
endofline_network = "\x0a";
- } else {
+ }
+ else {
endofline_native = "\r\n";
endofline_network = "\x0d\x0a";
}
@@ -219,21 +221,20 @@ CURLcode Curl_fillreadbuffer(struct connectdata *conn, int bytes, int *nreadp)
if(data->set.prefer_ascii) {
/* translate the protocol and data */
length = nread;
- } else {
+ }
+ else {
/* just translate the protocol portion */
length = strlen(hexbuffer);
}
res = Curl_convert_to_network(data, data->req.upload_fromhere, length);
/* Curl_convert_to_network calls failf if unsuccessful */
- if(res != CURLE_OK) {
+ if(res)
return(res);
- }
#endif /* CURL_DOES_CONVERSIONS */
- if((nread - hexlen) == 0) {
+ if((nread - hexlen) == 0)
/* mark this as done once this chunk is transfered */
data->req.upload_done = TRUE;
- }
nread+=(int)strlen(endofline_native); /* for the added end of line */
}
@@ -340,11 +341,11 @@ static void read_rewind(struct connectdata *conn,
show = CURLMIN(conn->buf_len - conn->read_pos, sizeof(buf)-1);
if(conn->master_buffer) {
- memcpy(buf, conn->master_buffer + conn->read_pos, show);
- buf[show] = '\0';
+ memcpy(buf, conn->master_buffer + conn->read_pos, show);
+ buf[show] = '\0';
}
else {
- buf[0] = '\0';
+ buf[0] = '\0';
}
DEBUGF(infof(conn->data,
@@ -376,12 +377,11 @@ static CURLcode readwrite_data(struct SessionHandle *data,
*done = FALSE;
/* This is where we loop until we have read everything there is to
- read or we get a EWOULDBLOCK */
+ read or we get a CURLE_AGAIN */
do {
size_t buffersize = data->set.buffer_size?
data->set.buffer_size : BUFSIZE;
size_t bytestoread = buffersize;
- int readrc;
if(k->size != -1 && !k->header) {
/* make sure we don't read "too much" if we can help it since we
@@ -394,15 +394,12 @@ static CURLcode readwrite_data(struct SessionHandle *data,
if(bytestoread) {
/* receive data from the network! */
- readrc = Curl_read(conn, conn->sockfd, k->buf, bytestoread, &nread);
+ result = Curl_read(conn, conn->sockfd, k->buf, bytestoread, &nread);
- /* subzero, this would've blocked */
- if(0 > readrc)
+ /* read would've blocked */
+ if(CURLE_AGAIN == result)
break; /* get out of loop */
- /* get the CURLcode from the int */
- result = (CURLcode)readrc;
-
if(result>0)
return result;
}
@@ -598,9 +595,12 @@ static CURLcode readwrite_data(struct SessionHandle *data,
dataleft = conn->chunk.dataleft;
if(dataleft != 0) {
- infof(conn->data, "Leftovers after chunking. "
- " Rewinding %zu bytes\n",dataleft);
- read_rewind(conn, dataleft);
+ infof(conn->data, "Leftovers after chunking: %zu bytes", dataleft);
+ if(conn->data->multi && Curl_multi_canPipeline(conn->data->multi)) {
+ /* only attempt the rewind if we truly are pipelining */
+ infof(conn->data, "Rewinding %zu bytes\n",dataleft);
+ read_rewind(conn, dataleft);
+ }
}
}
/* If it returned OK, we just keep going */
@@ -623,22 +623,22 @@ static CURLcode readwrite_data(struct SessionHandle *data,
/* The 'excess' amount below can't be more than BUFSIZE which
always will fit in a size_t */
infof(data,
- "Rewinding stream by : %zu"
- " bytes on url %s (size = %" FORMAT_OFF_T
- ", maxdownload = %" FORMAT_OFF_T
- ", bytecount = %" FORMAT_OFF_T ", nread = %zd)\n",
- excess, data->state.path,
- k->size, k->maxdownload, k->bytecount, nread);
+ "Rewinding stream by : %zu"
+ " bytes on url %s (size = %" FORMAT_OFF_T
+ ", maxdownload = %" FORMAT_OFF_T
+ ", bytecount = %" FORMAT_OFF_T ", nread = %zd)\n",
+ excess, data->state.path,
+ k->size, k->maxdownload, k->bytecount, nread);
read_rewind(conn, excess);
}
else {
infof(data,
- "Excess found in a non pipelined read:"
- " excess = %zu"
- ", size = %" FORMAT_OFF_T
- ", maxdownload = %" FORMAT_OFF_T
- ", bytecount = %" FORMAT_OFF_T "\n",
- excess, k->size, k->maxdownload, k->bytecount);
+ "Excess found in a non pipelined read:"
+ " excess = %zu"
+ ", size = %" FORMAT_OFF_T
+ ", maxdownload = %" FORMAT_OFF_T
+ ", bytecount = %" FORMAT_OFF_T "\n",
+ excess, k->size, k->maxdownload, k->bytecount);
}
}
@@ -738,7 +738,7 @@ static CURLcode readwrite_data(struct SessionHandle *data,
/* Parse the excess data */
k->str += nread;
- nread = excess;
+ nread = (ssize_t)excess;
result = Curl_rtsp_rtp_readwrite(data, conn, &nread, &readmore);
if(result)
@@ -815,6 +815,9 @@ static CURLcode readwrite_upload(struct SessionHandle *data,
k->keepon &= ~KEEP_SEND; /* disable writing */
k->start100 = Curl_tvnow(); /* timeout count starts now */
*didwhat &= ~KEEP_SEND; /* we didn't write anything actually */
+
+ /* set a timeout for the multi interface */
+ Curl_expire(data, CURL_TIMEOUT_EXPECT_100);
break;
}
@@ -994,7 +997,7 @@ CURLcode Curl_readwrite(struct connectdata *conn,
status is not known. */
select_res = Curl_socket_ready(fd_read, fd_write, 0);
- if(select_res == CURL_CSELECT_ERR) {
+ if(select_res & CURL_CSELECT_ERR) {
failf(data, "select/poll returned error");
return CURLE_SEND_ERROR;
}
@@ -1061,16 +1064,17 @@ CURLcode Curl_readwrite(struct connectdata *conn,
return result;
if(k->keepon) {
- if(data->set.timeout &&
- (Curl_tvdiff(k->now, k->start) >= data->set.timeout)) {
+ if(0 > Curl_timeleft(conn, &k->now, FALSE)) {
if(k->size != -1) {
failf(data, "Operation timed out after %ld milliseconds with %"
FORMAT_OFF_T " out of %" FORMAT_OFF_T " bytes received",
- Curl_tvdiff(k->now, k->start), k->bytecount, k->size);
- } else {
+ Curl_tvdiff(k->now, data->progress.t_startsingle), k->bytecount,
+ k->size);
+ }
+ else {
failf(data, "Operation timed out after %ld milliseconds with %"
FORMAT_OFF_T " bytes received",
- Curl_tvdiff(k->now, k->start), k->bytecount);
+ Curl_tvdiff(k->now, data->progress.t_startsingle), k->bytecount);
}
return CURLE_OPERATION_TIMEDOUT;
}
@@ -1225,7 +1229,7 @@ long Curl_sleep_time(curl_off_t rate_bps, curl_off_t cur_rate_bps,
*/
if(rv > 0x7fffffff)
rv = 0x7fffffff;
-
+
return (long)rv;
}
@@ -1343,12 +1347,10 @@ Transfer(struct connectdata *conn)
to work with, skip the timeout */
timeout_ms = 0;
else {
- if(data->set.timeout) {
- totmp = (int)(data->set.timeout - Curl_tvdiff(k->now, k->start));
- if(totmp < 0)
- return CURLE_OPERATION_TIMEDOUT;
- }
- else
+ totmp = Curl_timeleft(conn, &k->now, FALSE);
+ if(totmp < 0)
+ return CURLE_OPERATION_TIMEDOUT;
+ else if(!totmp)
totmp = 1000;
if (totmp < timeout_ms)
@@ -1433,6 +1435,12 @@ CURLcode Curl_pretransfer(struct SessionHandle *data)
Curl_initinfo(data); /* reset session-specific information "variables" */
Curl_pgrsStartNow(data);
+ if(data->set.timeout)
+ Curl_expire(data, data->set.timeout);
+
+ if(data->set.connecttimeout)
+ Curl_expire(data, data->set.connecttimeout);
+
return CURLE_OK;
}
@@ -2009,12 +2017,7 @@ CURLcode Curl_retry_request(struct connectdata *conn,
return CURLE_OK;
}
-/*
- * Curl_perform() is the internal high-level function that gets called by the
- * external curl_easy_perform() function. It inits, performs and cleans up a
- * single file transfer.
- */
-CURLcode Curl_perform(struct SessionHandle *data)
+static CURLcode Curl_do_perform(struct SessionHandle *data)
{
CURLcode res;
CURLcode res2;
@@ -2049,6 +2052,15 @@ CURLcode Curl_perform(struct SessionHandle *data)
res = Curl_do(&conn, &do_done);
if(res == CURLE_OK) {
+ if(conn->data->set.wildcardmatch) {
+ if(conn->data->wildcard.state == CURLWC_DONE ||
+ conn->data->wildcard.state == CURLWC_SKIP) {
+ /* keep connection open for application to use the socket */
+ conn->bits.close = FALSE;
+ res = Curl_done(&conn, CURLE_OK, FALSE);
+ break;
+ }
+ }
res = Transfer(conn); /* now fetch that URL please */
if((res == CURLE_OK) || (res == CURLE_RECV_ERROR)) {
bool retry = FALSE;
@@ -2056,13 +2068,12 @@ CURLcode Curl_perform(struct SessionHandle *data)
if(rc)
res = rc;
else
- retry = (bool)(newurl?TRUE:FALSE);
+ retry = (newurl?TRUE:FALSE);
if(retry) {
+ /* we know (newurl != NULL) at this point */
res = CURLE_OK;
follow = FOLLOW_RETRY;
- if (!newurl)
- res = CURLE_OUT_OF_MEMORY;
}
else if (res == CURLE_OK) {
/*
@@ -2113,9 +2124,9 @@ CURLcode Curl_perform(struct SessionHandle *data)
/* Curl_do() failed, clean up left-overs in the done-call, but note
that at some cases the conn pointer is NULL when Curl_do() failed
and the connection cache is very small so only call Curl_done() if
- conn is still "alive".
- */
- res2 = Curl_done(&conn, res, FALSE);
+ conn is still "alive". */
+ /* ignore return code since we already have an error to return */
+ (void)Curl_done(&conn, res, FALSE);
/*
* Important: 'conn' cannot be used here, since it may have been closed
@@ -2166,10 +2177,43 @@ CURLcode Curl_perform(struct SessionHandle *data)
}
/*
+ * Curl_perform() is the internal high-level function that gets called by the
+ * external curl_easy_perform() function. It inits, performs and cleans up a
+ * single file transfer.
+ */
+CURLcode Curl_perform(struct SessionHandle *data)
+{
+ CURLcode res;
+ if(!data->set.wildcardmatch)
+ return Curl_do_perform(data);
+
+ /* init main wildcard structures */
+ res = Curl_wildcard_init(&data->wildcard);
+ if(res)
+ return res;
+
+ res = Curl_do_perform(data);
+ if(res) {
+ Curl_wildcard_dtor(&data->wildcard);
+ return res;
+ }
+
+ /* wildcard loop */
+ while(!res && data->wildcard.state != CURLWC_DONE)
+ res = Curl_do_perform(data);
+
+ Curl_wildcard_dtor(&data->wildcard);
+
+ /* wildcard download finished or failed */
+ data->wildcard.state = CURLWC_INIT;
+ return res;
+}
+
+/*
* Curl_setup_transfer() is called to setup some basic properties for the
* upcoming transfer.
*/
-CURLcode
+void
Curl_setup_transfer(
struct connectdata *conn, /* connection data */
int sockindex, /* socket index to read from or -1 */
@@ -2214,9 +2258,8 @@ Curl_setup_transfer(
/* we want header and/or body, if neither then don't do this! */
if(k->getheader || !data->set.opt_no_body) {
- if(conn->sockfd != CURL_SOCKET_BAD) {
+ if(conn->sockfd != CURL_SOCKET_BAD)
k->keepon |= KEEP_RECV;
- }
if(conn->writesockfd != CURL_SOCKET_BAD) {
/* HTTP 1.1 magic:
@@ -2233,6 +2276,9 @@ Curl_setup_transfer(
/* wait with write until we either got 100-continue or a timeout */
k->exp100 = EXP100_AWAITING_CONTINUE;
k->start100 = k->start;
+
+ /* set a timeout for the multi interface */
+ Curl_expire(data, CURL_TIMEOUT_EXPECT_100);
}
else {
if(data->state.expect100header)
@@ -2246,5 +2292,4 @@ Curl_setup_transfer(
} /* if(conn->writesockfd != CURL_SOCKET_BAD) */
} /* if(k->getheader || !data->set.opt_no_body) */
- return CURLE_OK;
}
diff --git a/lib/transfer.h b/lib/transfer.h
index 4c2bc9e..790e1e3 100644
--- a/lib/transfer.h
+++ b/lib/transfer.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -49,7 +49,7 @@ CURLcode Curl_reconnect_request(struct connectdata **connp);
CURLcode Curl_retry_request(struct connectdata *conn, char **url);
/* This sets up a forthcoming transfer */
-CURLcode
+void
Curl_setup_transfer (struct connectdata *data,
int sockindex, /* socket index to read from or -1 */
curl_off_t size, /* -1 if unknown at this point */
diff --git a/lib/url.c b/lib/url.c
index 357f213..1b65a92 100644
--- a/lib/url.c
+++ b/lib/url.c
@@ -137,6 +137,8 @@ void idn_free (void *ptr); /* prototype from idn-free.h, not provided by
#include "http_ntlm.h"
#include "socks.h"
#include "rtsp.h"
+#include "curl_rtmp.h"
+#include "gopher.h"
#define _MPRINTF_REPLACE /* use our functions only */
#include <curl/mprintf.h>
@@ -150,11 +152,6 @@ static long ConnectionKillOne(struct SessionHandle *data);
static void conn_free(struct connectdata *conn);
static void signalPipeClose(struct curl_llist *pipeline, bool pipe_broke);
-#ifdef CURL_DISABLE_VERBOSE_STRINGS
-#define verboseconnect(x) do { } while (0)
-#endif
-
-
/*
* Protocol table.
*/
@@ -187,11 +184,11 @@ static const struct Curl_handler * const protocols[] = {
#ifndef CURL_DISABLE_LDAP
&Curl_handler_ldap,
-#endif
-
-#if !defined(CURL_DISABLE_LDAP) && defined(HAVE_LDAP_SSL)
+#if (defined(USE_OPENLDAP) && defined(USE_SSL)) || \
+ (!defined(USE_OPENLDAP) && defined(HAVE_LDAP_SSL))
&Curl_handler_ldaps,
#endif
+#endif
#ifndef CURL_DISABLE_FILE
&Curl_handler_file,
@@ -231,6 +228,19 @@ static const struct Curl_handler * const protocols[] = {
&Curl_handler_rtsp,
#endif
+#ifndef CURL_DISABLE_GOPHER
+ &Curl_handler_gopher,
+#endif
+
+#ifdef USE_LIBRTMP
+ &Curl_handler_rtmp,
+ &Curl_handler_rtmpt,
+ &Curl_handler_rtmpe,
+ &Curl_handler_rtmpte,
+ &Curl_handler_rtmps,
+ &Curl_handler_rtmpts,
+#endif
+
(struct Curl_handler *) NULL
};
@@ -471,10 +481,20 @@ CURLcode Curl_close(struct SessionHandle *data)
}
#endif
+ Curl_expire(data, 0); /* shut off timers */
+
if(m)
/* This handle is still part of a multi handle, take care of this first
and detach this handle from there. */
- Curl_multi_rmeasy(data->multi, data);
+ curl_multi_remove_handle(data->multi, data);
+
+ /* Destroy the timeout list that is held in the easy handle. It is
+ /normally/ done by curl_multi_remove_handle() but this is "just in
+ case" */
+ if(data->state.timeoutlist) {
+ Curl_llist_destroy(data->state.timeoutlist, NULL);
+ data->state.timeoutlist = NULL;
+ }
data->magic = 0; /* force a clear AFTER the possibly enforced removal from
the multi handle, since that function uses the magic
@@ -690,6 +710,8 @@ CURLcode Curl_init_userdefined(struct UserDefined *set)
/* use fread as default function to read input */
set->fread_func = (curl_read_callback)fread;
+ set->is_fread_set = 0;
+ set->is_fwrite_set = 0;
set->seek_func = ZERO_NULL;
set->seek_client = ZERO_NULL;
@@ -763,6 +785,10 @@ CURLcode Curl_init_userdefined(struct UserDefined *set)
res = setstropt(&set->str[STRING_SSL_CAPATH], (char *) CURL_CA_PATH);
#endif
+ set->wildcardmatch = FALSE;
+ set->chunk_bgn = ZERO_NULL;
+ set->chunk_end = ZERO_NULL;
+
return res;
}
@@ -831,6 +857,9 @@ CURLcode Curl_open(struct SessionHandle **curl)
data->progress.flags |= PGRS_HIDE;
data->state.current_speed = -1; /* init to negative == impossible */
+ data->wildcard.state = CURLWC_INIT;
+ data->wildcard.filelist = NULL;
+ data->set.fnmatch = ZERO_NULL;
/* This no longer creates a connection cache here. It is instead made on
the first call to curl_easy_perform() or when the handle is added to a
multi stack. */
@@ -1390,19 +1419,6 @@ CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option,
data->set.httpversion = va_arg(param, long);
break;
- case CURLOPT_CUSTOMREQUEST:
- /*
- * Set a custom string to use as request
- */
- result = setstropt(&data->set.str[STRING_CUSTOMREQUEST],
- va_arg(param, char *));
-
- /* we don't set
- data->set.httpreq = HTTPREQ_CUSTOM;
- here, we continue as if we were using the already set type
- and this just changes the actual request keyword */
- break;
-
case CURLOPT_HTTPAUTH:
/*
* Set HTTP Authentication type BITMASK.
@@ -1434,6 +1450,21 @@ CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option,
}
break;
+#endif /* CURL_DISABLE_HTTP */
+
+ case CURLOPT_CUSTOMREQUEST:
+ /*
+ * Set a custom string to use as request
+ */
+ result = setstropt(&data->set.str[STRING_CUSTOMREQUEST],
+ va_arg(param, char *));
+
+ /* we don't set
+ data->set.httpreq = HTTPREQ_CUSTOM;
+ here, we continue as if we were using the already set type
+ and this just changes the actual request keyword */
+ break;
+
#ifndef CURL_DISABLE_PROXY
case CURLOPT_HTTPPROXYTUNNEL:
/*
@@ -1478,7 +1509,6 @@ CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option,
data->set.proxyauth = auth;
}
break;
-#endif /* CURL_DISABLE_HTTP */
case CURLOPT_PROXY:
/*
@@ -1518,7 +1548,7 @@ CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option,
break;
}
break;
-#endif
+#endif /* CURL_DISABLE_PROXY */
#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)
case CURLOPT_SOCKS5_GSSAPI_SERVICE:
@@ -1825,18 +1855,26 @@ CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option,
* Set data write callback
*/
data->set.fwrite_func = va_arg(param, curl_write_callback);
- if(!data->set.fwrite_func)
+ if(!data->set.fwrite_func) {
+ data->set.is_fwrite_set = 0;
/* When set to NULL, reset to our internal default function */
data->set.fwrite_func = (curl_write_callback)fwrite;
+ }
+ else
+ data->set.is_fwrite_set = 1;
break;
case CURLOPT_READFUNCTION:
/*
* Read data callback
*/
data->set.fread_func = va_arg(param, curl_read_callback);
- if(!data->set.fread_func)
+ if(!data->set.fread_func) {
+ data->set.is_fread_set = 0;
/* When set to NULL, reset to our internal default function */
data->set.fread_func = (curl_read_callback)fread;
+ }
+ else
+ data->set.is_fread_set = 1;
break;
case CURLOPT_SEEKFUNCTION:
/*
@@ -2440,6 +2478,25 @@ CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option,
/* Set the user defined RTP write function */
data->set.fwrite_rtp = va_arg(param, curl_write_callback);
break;
+
+ case CURLOPT_WILDCARDMATCH:
+ data->set.wildcardmatch = (bool)(0 != va_arg(param, long));
+ break;
+ case CURLOPT_CHUNK_BGN_FUNCTION:
+ data->set.chunk_bgn = va_arg(param, curl_chunk_bgn_callback);
+ break;
+ case CURLOPT_CHUNK_END_FUNCTION:
+ data->set.chunk_end = va_arg(param, curl_chunk_end_callback);
+ break;
+ case CURLOPT_FNMATCH_FUNCTION:
+ data->set.fnmatch = va_arg(param, curl_fnmatch_callback);
+ break;
+ case CURLOPT_CHUNK_DATA:
+ data->wildcard.customptr = va_arg(param, void *);
+ break;
+ case CURLOPT_FNMATCH_DATA:
+ data->set.fnmatch_data = va_arg(param, void *);
+ break;
default:
/* unknown tag and its companion, just ignore: */
result = CURLE_FAILED_INIT; /* correct this */
@@ -2524,7 +2581,6 @@ CURLcode Curl_disconnect(struct connectdata *conn)
NULL, Curl_scan_cache_used);
#endif
- Curl_expire(data, 0); /* shut off timers */
Curl_hostcache_prune(data); /* kill old DNS cache entries */
{
@@ -2643,11 +2699,10 @@ static bool RTSPConnIsDead(struct connectdata *check)
}
else if (sval & CURL_CSELECT_IN) {
/* readable with no error. could be closed or could be alive */
- long connectinfo = 0;
- Curl_getconnectinfo(check->data, &connectinfo, &check);
- if(connectinfo != -1) {
+ curl_socket_t connectinfo =
+ Curl_getconnectinfo(check->data, &check);
+ if(connectinfo != CURL_SOCKET_BAD)
ret_val = FALSE;
- }
}
return ret_val;
@@ -3085,7 +3140,7 @@ ConnectionStore(struct SessionHandle *data,
/* after a TCP connection to the proxy has been verified, this function does
the next magic step.
- Note: this function (and its sub-functions) calls failf()
+ Note: this function's sub-functions call failf()
*/
CURLcode Curl_connected_proxy(struct connectdata *conn)
@@ -3093,12 +3148,6 @@ CURLcode Curl_connected_proxy(struct connectdata *conn)
CURLcode result = CURLE_OK;
struct SessionHandle *data = conn->data;
- if(conn->bits.tcpconnect)
- /* allow this to get called again from the multi interface when TCP is
- found connected in the state machine, even though it has already been
- called if the connection happened "instantly" */
- return CURLE_OK;
-
switch(data->set.proxytype) {
#ifndef CURL_DISABLE_PROXY
case CURLPROXY_SOCKS5:
@@ -3169,11 +3218,12 @@ static CURLcode ConnectPlease(struct SessionHandle *data,
* verboseconnect() displays verbose information after a connect
*/
#ifndef CURL_DISABLE_VERBOSE_STRINGS
-static void verboseconnect(struct connectdata *conn)
+void Curl_verboseconnect(struct connectdata *conn)
{
- infof(conn->data, "Connected to %s (%s) port %ld (#%ld)\n",
- conn->bits.proxy ? conn->proxy.dispname : conn->host.dispname,
- conn->ip_addr_str, conn->port, conn->connectindex);
+ if(conn->data->set.verbose)
+ infof(conn->data, "Connected to %s (%s) port %ld (#%ld)\n",
+ conn->bits.proxy ? conn->proxy.dispname : conn->host.dispname,
+ conn->ip_addr_str, conn->port, conn->connectindex);
}
#endif
@@ -3264,9 +3314,7 @@ CURLcode Curl_protocol_connect(struct connectdata *conn,
if(!conn->bits.tcpconnect) {
Curl_pgrsTime(data, TIMER_CONNECT); /* connect done */
-
- if(data->set.verbose)
- verboseconnect(conn);
+ Curl_verboseconnect(conn);
}
if(!conn->bits.protoconnstart) {
@@ -4133,7 +4181,7 @@ static CURLcode parse_url_userpass(struct SessionHandle *data,
* set user/passwd, but doing that first adds more cases here :-(
*/
- conn->bits.userpwd_in_url = 1;
+ conn->bits.userpwd_in_url = TRUE;
if(data->set.use_netrc != CURL_NETRC_REQUIRED) {
/* We could use the one in the URL */
@@ -4224,18 +4272,23 @@ static CURLcode parse_remote_port(struct SessionHandle *data,
if(conn->bits.httpproxy) {
/* we need to create new URL with the new port number */
char *url;
- /* FTPS connections have the FTP bit set too, so they match as well */
- bool isftp = (bool)(0 != (conn->protocol & PROT_FTP));
+ char type[12]="";
+
+ if(conn->bits.type_set)
+ snprintf(type, sizeof(type), ";type=%c",
+ data->set.prefer_ascii?'A':
+ (data->set.ftp_list_only?'D':'I'));
/*
- * This synthesized URL isn't always right--suffixes like ;type=A
- * are stripped off. It would be better to work directly from the
- * original URL and simply replace the port part of it.
+ * This synthesized URL isn't always right--suffixes like ;type=A are
+ * stripped off. It would be better to work directly from the original
+ * URL and simply replace the port part of it.
*/
- url = aprintf("%s://%s%s%s:%hu%s%s", conn->handler->scheme,
+ url = aprintf("%s://%s%s%s:%hu%s%s%s", conn->handler->scheme,
conn->bits.ipv6_ip?"[":"", conn->host.name,
conn->bits.ipv6_ip?"]":"", conn->remote_port,
- isftp?"/":"", data->state.path);
+ data->state.slash_removed?"/":"", data->state.path,
+ type);
if(!url)
return CURLE_OUT_OF_MEMORY;
@@ -4267,6 +4320,11 @@ static CURLcode parse_remote_port(struct SessionHandle *data,
*portptr = '\0'; /* cut off the name there */
conn->remote_port = curlx_ultous(port);
}
+ else if(!port)
+ /* Browser behavior adaptation. If there's a colon with no digits after,
+ just cut off the name there which makes us ignore the colon and just
+ use the default port. Firefox and Chrome both do that. */
+ *portptr = '\0';
}
return CURLE_OK;
}
@@ -4347,30 +4405,7 @@ static CURLcode resolve_server(struct SessionHandle *data,
bool *async)
{
CURLcode result=CURLE_OK;
- long shortest = 0; /* default to no timeout */
-
- /*************************************************************
- * Set timeout if that is being used
- *************************************************************/
- if(data->set.timeout || data->set.connecttimeout) {
-
- /* We set the timeout on the name resolving phase first, separately from
- * the download/upload part to allow a maximum time on everything. This is
- * a signal-based timeout, why it won't work and shouldn't be used in
- * multi-threaded environments. */
-
- shortest = data->set.timeout; /* default to this timeout value */
- if(shortest && data->set.connecttimeout &&
- (data->set.connecttimeout < shortest))
- /* if both are set, pick the shortest */
- shortest = data->set.connecttimeout;
- else if(!shortest)
- /* if timeout is not set, use the connect timeout */
- shortest = data->set.connecttimeout;
- /* We can expect the conn->created time to be "now", as that was just
- recently set in the beginning of this function and nothing slow
- has been done since then until now. */
- }
+ long timeout_ms = Curl_timeleft(conn, NULL, TRUE);
/*************************************************************
* Resolve the name of the server or proxy
@@ -4397,7 +4432,7 @@ static CURLcode resolve_server(struct SessionHandle *data,
/* Resolve target host right on */
rc = Curl_resolv_timeout(conn, conn->host.name, (int)conn->port,
- &hostaddr, shortest);
+ &hostaddr, timeout_ms);
if(rc == CURLRESOLV_PENDING)
*async = TRUE;
@@ -4418,7 +4453,7 @@ static CURLcode resolve_server(struct SessionHandle *data,
/* resolve proxy */
rc = Curl_resolv_timeout(conn, conn->proxy.name, (int)conn->port,
- &hostaddr, shortest);
+ &hostaddr, timeout_ms);
if(rc == CURLRESOLV_PENDING)
*async = TRUE;
@@ -4707,7 +4742,7 @@ static CURLcode create_conn(struct SessionHandle *data,
proxy = NULL;
}
/* proxy must be freed later unless NULL */
- if(proxy && *proxy) {
+ if(proxy) {
long bits = conn->protocol & (PROT_HTTPS|PROT_SSL);
if((conn->proxytype == CURLPROXY_HTTP) ||
@@ -4750,6 +4785,11 @@ static CURLcode create_conn(struct SessionHandle *data,
return result;
}
+ conn->recv[FIRSTSOCKET] = Curl_recv_plain;
+ conn->send[FIRSTSOCKET] = Curl_send_plain;
+ conn->recv[SECONDARYSOCKET] = Curl_recv_plain;
+ conn->send[SECONDARYSOCKET] = Curl_send_plain;
+
/***********************************************************************
* file: is a special case in that it doesn't need a network connection
***********************************************************************/
@@ -4779,9 +4819,8 @@ static CURLcode create_conn(struct SessionHandle *data,
return result;
}
- result = Curl_setup_transfer(conn, -1, -1, FALSE,
- NULL, /* no download */
- -1, NULL); /* no upload */
+ Curl_setup_transfer(conn, -1, -1, FALSE, NULL, /* no download */
+ -1, NULL); /* no upload */
}
return result;
@@ -4986,8 +5025,8 @@ static CURLcode setup_conn(struct connectdata *conn,
Curl_pgrsTime(data, TIMER_APPCONNECT); /* we're connected already */
conn->bits.tcpconnect = TRUE;
*protocol_done = TRUE;
- if(data->set.verbose)
- verboseconnect(conn);
+ Curl_verboseconnect(conn);
+ Curl_updateconninfo(conn, conn->sock[FIRSTSOCKET]);
}
/* Stop the loop now */
break;
@@ -5093,8 +5132,6 @@ CURLcode Curl_done(struct connectdata **connp,
conn = *connp;
data = conn->data;
- Curl_expire(data, 0); /* stop timer */
-
if(conn->bits.done)
/* Stop if Curl_done() has already been called */
return CURLE_OK;
@@ -5248,10 +5285,8 @@ static CURLcode do_init(struct connectdata *conn)
static void do_complete(struct connectdata *conn)
{
conn->data->req.chunk=FALSE;
- conn->data->req.trailerhdrpresent=FALSE;
-
conn->data->req.maxfd = (conn->sockfd>conn->writesockfd?
- conn->sockfd:conn->writesockfd)+1;
+ conn->sockfd:conn->writesockfd)+1;
}
CURLcode Curl_do(struct connectdata **connp, bool *done)
diff --git a/lib/url.h b/lib/url.h
index cb3dd2f..63d7f2c 100644
--- a/lib/url.h
+++ b/lib/url.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -86,4 +86,11 @@ void Curl_reset_reqproto(struct connectdata *conn);
CURLcode Curl_connected_proxy(struct connectdata *conn);
+#ifdef CURL_DISABLE_VERBOSE_STRINGS
+#define Curl_verboseconnect(x) do { } while (0)
+#else
+void Curl_verboseconnect(struct connectdata *conn);
+#endif
+
+
#endif
diff --git a/lib/urldata.h b/lib/urldata.h
index ad172d6..4d60591 100644
--- a/lib/urldata.h
+++ b/lib/urldata.h
@@ -43,6 +43,10 @@
#define PORT_SMTP 25
#define PORT_SMTPS 465 /* sometimes called SSMTP */
#define PORT_RTSP 554
+#define PORT_RTMP 1935
+#define PORT_RTMPT PORT_HTTP
+#define PORT_RTMPS PORT_HTTPS
+#define PORT_GOPHER 70
#define DICT_MATCH "/MATCH:"
#define DICT_MATCH2 "/M:"
@@ -102,6 +106,11 @@
#include <gnutls/gnutls.h>
#endif
+#ifdef USE_POLARSSL
+#include <polarssl/havege.h>
+#include <polarssl/ssl.h>
+#endif
+
#ifdef USE_NSS
#include <nspr.h>
#include <pk11pub.h>
@@ -148,6 +157,7 @@
#include "ssh.h"
#include "http.h"
#include "rtsp.h"
+#include "wildcard.h"
#ifdef HAVE_GSSAPI
# ifdef HAVE_GSSGNU
@@ -231,7 +241,18 @@ struct ssl_connect_data {
#ifdef USE_GNUTLS
gnutls_session session;
gnutls_certificate_credentials cred;
+ ssl_connect_state connecting_state;
#endif /* USE_GNUTLS */
+#ifdef USE_POLARSSL
+ havege_state hs;
+ ssl_context ssl;
+ ssl_session ssn;
+ int server_fd;
+ x509_cert cacert;
+ x509_cert clicert;
+ x509_crl crl;
+ rsa_context rsa;
+#endif /* USE_POLARSSL */
#ifdef USE_NSS
PRFileDesc *handle;
char *client_nickname;
@@ -398,6 +419,7 @@ struct ConnectBits {
that libcurl should reconnect and continue. */
bool bound; /* set true if bind() has already been done on this socket/
connection */
+ bool type_set; /* type= was used in the URL */
};
struct hostname {
@@ -567,9 +589,6 @@ struct SingleRequest {
bool forbidchunk; /* used only to explicitly forbid chunk-upload for
specific upload buffers. See readmoredata() in
http.c for details. */
- bool trailerhdrpresent; /* Set when Trailer: header found in HTTP response.
- Required to determine whether to look for trailers
- in case of Transfer-Encoding: chunking */
};
/*
@@ -632,6 +651,20 @@ struct Curl_handler {
long protocol; /* PROT_* flags concerning the protocol set */
};
+/* return the count of bytes sent, or -1 on error */
+typedef ssize_t (Curl_send)(struct connectdata *conn, /* connection data */
+ int sockindex, /* socketindex */
+ const void *buf, /* data to write */
+ size_t len, /* max amount to write */
+ CURLcode *err); /* error to return */
+
+/* return the count of bytes read, or -1 on error */
+typedef ssize_t (Curl_recv)(struct connectdata *conn, /* connection data */
+ int sockindex, /* socketindex */
+ char *buf, /* store data here */
+ size_t len, /* max amount to read */
+ CURLcode *err); /* error to return */
+
/*
* The connectdata struct contains all fields and variables that should be
* unique for an entire connection.
@@ -674,13 +707,21 @@ struct connectdata {
#define PROT_SMTP CURLPROTO_SMTP
#define PROT_SMTPS CURLPROTO_SMTPS
#define PROT_RTSP CURLPROTO_RTSP
+#define PROT_RTMP CURLPROTO_RTMP
+#define PROT_RTMPT CURLPROTO_RTMPT
+#define PROT_RTMPE CURLPROTO_RTMPE
+#define PROT_RTMPTE CURLPROTO_RTMPTE
+#define PROT_RTMPS CURLPROTO_RTMPS
+#define PROT_RTMPTS CURLPROTO_RTMPTS
+#define PROT_GOPHER CURLPROTO_GOPHER
-/* (1<<18) is currently the highest used bit in the public bitmask. We make
- sure we use "private bits" above the public ones to make things easier. */
+/* (1<<25) is currently the highest used bit in the public bitmask. We make
+ sure we use "private bits" above the public ones to make things easier;
+ Gopher will not conflict with the current bit 25. */
-#define PROT_EXTMASK 0xfffff
+#define PROT_EXTMASK 0x03ffffff
-#define PROT_SSL (1<<25) /* protocol requires SSL */
+#define PROT_SSL (1<<29) /* protocol requires SSL */
/* these ones need action before socket close */
#define PROT_CLOSEACTION (PROT_FTP | PROT_IMAP | PROT_POP3)
@@ -728,6 +769,9 @@ struct connectdata {
curl_socket_t sock[2]; /* two sockets, the second is used for the data
transfer when doing FTP */
+ Curl_recv *recv[2];
+ Curl_send *send[2];
+
struct ssl_connect_data ssl[2]; /* this is for ssl-stuff */
struct ssl_config_data ssl_config;
@@ -762,7 +806,7 @@ struct connectdata {
enum protection_level data_prot;
enum protection_level request_data_prot;
size_t buffer_size;
- struct krb4buffer in_buffer, out_buffer;
+ struct krb4buffer in_buffer;
void *app_data;
const struct Curl_sec_client_mech *mech;
struct sockaddr_in local_addr;
@@ -829,6 +873,7 @@ struct connectdata {
struct pop3_conn pop3c;
struct smtp_conn smtpc;
struct rtsp_conn rtspc;
+ void *generic;
} proto;
int cselect_bits; /* bitmask of socket events */
@@ -867,6 +912,12 @@ struct PureInfo {
char ip[MAX_IPADR_LEN]; /* this buffer gets the numerical ip version stored
at the connect *attempt* so it will get the last
tried connect IP even on failures */
+ long port; /* the remote port the last connection was established to */
+ char localip[MAX_IPADR_LEN]; /* this buffer gets the numerical (local) ip
+ stored from where the last connection was
+ established */
+ long localport; /* the local (src) port the last connection
+ originated from */
struct curl_certinfo certs; /* info about the certs, only populated in
OpenSSL builds. Asked for with
CURLOPT_CERTINFO / CURLINFO_CERTINFO */
@@ -1043,6 +1094,7 @@ struct UrlState {
#endif /* USE_SSLEAY */
struct timeval expiretime; /* set this with Curl_expire() only */
struct Curl_tree timenode; /* for the splay stuff */
+ struct curl_llist *timeoutlist; /* list of pending timeouts */
/* a place to store the most recently set FTP entrypath */
char *most_recent_ftp_entrypath;
@@ -1077,7 +1129,8 @@ struct UrlState {
char *pathbuffer;/* allocated buffer to store the URL's path part in */
char *path; /* path to use, points to somewhere within the pathbuffer
area */
-
+ bool slash_removed; /* set TRUE if the 'path' points to a path where the
+ initial URL slash separator has been taken off */
bool use_range;
bool rangestringalloc; /* the range string is malloc()'ed */
@@ -1234,6 +1287,8 @@ struct UserDefined {
curl_write_callback fwrite_header; /* function that stores headers */
curl_write_callback fwrite_rtp; /* function that stores interleaved RTP */
curl_read_callback fread_func; /* function that reads the input */
+ int is_fread_set; /* boolean, has read callback been set to non-NULL? */
+ int is_fwrite_set; /* boolean, has write callback been set to non-NULL? */
curl_progress_callback fprogress; /* function for progress information */
curl_debug_callback fdebug; /* function that write informational data */
curl_ioctl_callback ioctl_func; /* function for I/O control */
@@ -1372,6 +1427,13 @@ struct UserDefined {
/* Common RTSP header options */
Curl_RtspReq rtspreq; /* RTSP request type */
long rtspversion; /* like httpversion, for RTSP */
+ bool wildcardmatch; /* enable wildcard matching */
+ curl_chunk_bgn_callback chunk_bgn; /* called before part of transfer starts */
+ curl_chunk_end_callback chunk_end; /* called after part transferring
+ stopped */
+ curl_fnmatch_callback fnmatch; /* callback to decide which file corresponds
+ to pattern (e.g. if WILDCARDMATCH is on) */
+ void *fnmatch_data;
};
struct Names {
@@ -1413,6 +1475,7 @@ struct SessionHandle {
struct Progress progress; /* for all the progress meter data */
struct UrlState state; /* struct for fields used for state info and
other dynamic purposes */
+ struct WildcardData wildcard; /* wildcard download state info */
struct PureInfo info; /* stats, reports and info data */
#if defined(CURL_DOES_CONVERSIONS) && defined(HAVE_ICONV)
iconv_t outbound_cd; /* for translating to the network encoding */
diff --git a/lib/vc6libcurl.dsp b/lib/vc6libcurl.dsp
new file mode 100644
index 0000000..ee8f6f1
--- /dev/null
+++ b/lib/vc6libcurl.dsp
@@ -0,0 +1,862 @@
+# Microsoft Developer Studio Project File - Name="libcurl" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=libcurl - Win32 LIB Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "libcurl.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "libcurl.mak" CFG="libcurl - Win32 LIB Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "libcurl - Win32 DLL Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "libcurl - Win32 DLL Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "libcurl - Win32 LIB Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "libcurl - Win32 LIB Release" (based on "Win32 (x86) Static Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+
+!IF "$(CFG)" == "libcurl - Win32 DLL Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "DLL-Debug"
+# PROP BASE Intermediate_Dir "DLL-Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "DLL-Debug"
+# PROP Intermediate_Dir "DLL-Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+CPP=cl.exe
+# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "." /I "..\include" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "BUILDING_LIBCURL" /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "." /I "..\include" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "BUILDING_LIBCURL" /FD /GZ /c
+MTL=midl.exe
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+RSC=rc.exe
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib ws2_32.lib wldap32.lib /nologo /dll /incremental:no /map /debug /machine:I386 /out:"DLL-Debug/libcurld.dll" /implib:"DLL-Debug/libcurld_imp.lib" /pdbtype:sept
+# ADD LINK32 kernel32.lib ws2_32.lib wldap32.lib /nologo /dll /incremental:no /map /debug /machine:I386 /out:"DLL-Debug/libcurld.dll" /implib:"DLL-Debug/libcurld_imp.lib" /pdbtype:sept
+
+!ELSEIF "$(CFG)" == "libcurl - Win32 DLL Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "DLL-Release"
+# PROP BASE Intermediate_Dir "DLL-Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "DLL-Release"
+# PROP Intermediate_Dir "DLL-Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+CPP=cl.exe
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I "..\include" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "BUILDING_LIBCURL" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I "..\include" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "BUILDING_LIBCURL" /FD /c
+MTL=midl.exe
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+RSC=rc.exe
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib ws2_32.lib wldap32.lib /nologo /dll /pdb:none /machine:I386 /out:"DLL-Release/libcurl.dll" /implib:"DLL-Release/libcurl_imp.lib"
+# ADD LINK32 kernel32.lib ws2_32.lib wldap32.lib /nologo /dll /pdb:none /machine:I386 /out:"DLL-Release/libcurl.dll" /implib:"DLL-Release/libcurl_imp.lib"
+
+!ELSEIF "$(CFG)" == "libcurl - Win32 LIB Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "LIB-Debug"
+# PROP BASE Intermediate_Dir "LIB-Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "LIB-Debug"
+# PROP Intermediate_Dir "LIB-Debug"
+# PROP Target_Dir ""
+CPP=cl.exe
+# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "." /I "..\include" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "BUILDING_LIBCURL" /D "CURL_STATICLIB" /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "." /I "..\include" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "BUILDING_LIBCURL" /D "CURL_STATICLIB" /FD /GZ /c
+RSC=rc.exe
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo /out:"LIB-Debug/libcurld.lib" /machine:I386
+# ADD LIB32 /nologo /out:"LIB-Debug/libcurld.lib" /machine:I386
+
+!ELSEIF "$(CFG)" == "libcurl - Win32 LIB Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "LIB-Release"
+# PROP BASE Intermediate_Dir "LIB-Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "LIB-Release"
+# PROP Intermediate_Dir "LIB-Release"
+# PROP Target_Dir ""
+CPP=cl.exe
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I "..\include" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "BUILDING_LIBCURL" /D "CURL_STATICLIB" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I "..\include" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "BUILDING_LIBCURL" /D "CURL_STATICLIB" /FD /c
+RSC=rc.exe
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo /out:"LIB-Release/libcurl.lib" /machine:I386
+# ADD LIB32 /nologo /out:"LIB-Release/libcurl.lib" /machine:I386
+
+!ENDIF
+
+# Begin Target
+
+# Name "libcurl - Win32 DLL Debug"
+# Name "libcurl - Win32 DLL Release"
+# Name "libcurl - Win32 LIB Debug"
+# Name "libcurl - Win32 LIB Release"
+# Begin Group "Source Files"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\base64.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\connect.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\content_encoding.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\cookie.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\curl_addrinfo.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\curl_fnmatch.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\curl_gethostname.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\curl_memrchr.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\curl_rand.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\curl_rtmp.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\curl_sspi.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\curl_threads.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\dict.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\easy.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\escape.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\file.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\fileinfo.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\formdata.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\ftp.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\ftplistparser.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\getenv.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\getinfo.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\gopher.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\gtls.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\hash.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\hmac.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\hostares.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\hostasyn.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\hostip4.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\hostip6.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\hostip.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\hostsyn.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\hostthre.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\http.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\http_chunks.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\http_digest.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\http_negotiate.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\http_ntlm.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\if2ip.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\imap.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\inet_ntop.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\inet_pton.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\krb4.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\krb5.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\ldap.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\llist.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\md4.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\md5.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\memdebug.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\mprintf.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\multi.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\netrc.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\nonblock.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\nss.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\openldap.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\parsedate.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\pingpong.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\polarssl.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\pop3.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\progress.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\qssl.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\rawstr.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\rtsp.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\security.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\select.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\sendf.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\share.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\slist.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\smtp.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\socks.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\socks_gssapi.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\socks_sspi.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\speedcheck.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\splay.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\ssh.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\sslgen.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\ssluse.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\strdup.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\strequal.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\strerror.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\strtok.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\strtoofft.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\telnet.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\tftp.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\timeval.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\transfer.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\url.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\version.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\warnless.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\wildcard.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\arpa_telnet.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\config-win32.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\connect.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\content_encoding.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\cookie.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\curl_addrinfo.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\curl_base64.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\curl_fnmatch.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\curl_gethostname.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\curl_hmac.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\curl_ldap.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\curl_md4.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\curl_md5.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\curl_memory.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\curl_memrchr.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\curl_rand.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\curl_rtmp.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\curl_sspi.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\curl_threads.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\curlx.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\dict.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\easyif.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\escape.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\file.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\fileinfo.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\formdata.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\ftp.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\ftplistparser.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\getinfo.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\gopher.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\gtls.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\hash.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\hostip.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\http_chunks.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\http_digest.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\http.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\http_negotiate.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\http_ntlm.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\if2ip.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\imap.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\inet_ntop.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\inet_pton.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\krb4.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\llist.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\memdebug.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\multiif.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\netrc.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\nonblock.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\nssg.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\parsedate.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\pingpong.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\polarssl.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\pop3.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\progress.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\qssl.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\rawstr.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\rtsp.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\select.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\sendf.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\setup.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\setup_once.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\share.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\slist.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\smtp.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\sockaddr.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\socks.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\speedcheck.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\splay.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\ssh.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\sslgen.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\ssluse.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\strdup.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\strequal.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\strerror.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\strtok.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\strtoofft.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\telnet.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\tftp.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\timeval.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\transfer.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\urldata.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\url.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\warnless.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\wildcard.h
+# End Source File
+# End Group
+
+# Begin Group "Resource Files"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\libcurl.rc
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/lib/vc6libcurl.dsw b/lib/vc6libcurl.dsw
new file mode 100644
index 0000000..1fa8814
--- /dev/null
+++ b/lib/vc6libcurl.dsw
@@ -0,0 +1,29 @@
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "libcurl"=".\vc6libcurl.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
diff --git a/lib/version.c b/lib/version.c
index aa86e39..9ba2e33 100644
--- a/lib/version.c
+++ b/lib/version.c
@@ -44,6 +44,10 @@
#include <iconv.h>
#endif
+#ifdef USE_LIBRTMP
+#include <librtmp/rtmp.h>
+#endif
+
#ifdef USE_LIBSSH2
#include <libssh2.h>
#endif
@@ -111,6 +115,26 @@ char *curl_version(void)
left -= len;
ptr += len;
#endif
+#ifdef USE_LIBRTMP
+ {
+ char suff[2];
+ if (RTMP_LIB_VERSION & 0xff) {
+ suff[0] = (RTMP_LIB_VERSION & 0xff) + 'a' - 1;
+ suff[1] = '\0';
+ } else {
+ suff[0] = '\0';
+ }
+ len = snprintf(ptr, left, " librtmp/%d.%d%s",
+ RTMP_LIB_VERSION >> 16, (RTMP_LIB_VERSION >> 8) & 0xff, suff);
+/*
+ If another lib version is added below this one, this code would
+ also have to do:
+
+ left -= len;
+ ptr += len;
+*/
+ }
+#endif
return version;
}
@@ -134,6 +158,9 @@ static const char * const protocols[] = {
#if defined(USE_SSL) && !defined(CURL_DISABLE_FTP)
"ftps",
#endif
+#ifndef CURL_DISABLE_GOPHER
+ "gopher",
+#endif
#ifndef CURL_DISABLE_HTTP
"http",
#endif
@@ -148,16 +175,20 @@ static const char * const protocols[] = {
#endif
#ifndef CURL_DISABLE_LDAP
"ldap",
-#endif
-#if defined(HAVE_LDAP_SSL) && !defined(CURL_DISABLE_LDAP)
+#if (defined(USE_OPENLDAP) && defined(USE_SSL)) || \
+ (!defined(USE_OPENLDAP) && defined(HAVE_LDAP_SSL))
"ldaps",
#endif
+#endif
#ifndef CURL_DISABLE_POP3
"pop3",
#endif
#if defined(USE_SSL) && !defined(CURL_DISABLE_POP3)
"pop3s",
#endif
+#ifdef USE_LIBRTMP
+ "rtmp",
+#endif
#ifndef CURL_DISABLE_RTSP
"rtsp",
#endif
diff --git a/lib/wildcard.c b/lib/wildcard.c
new file mode 100644
index 0000000..9fe5d51
--- /dev/null
+++ b/lib/wildcard.c
@@ -0,0 +1,76 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at http://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ***************************************************************************/
+
+#include "setup.h"
+#include "wildcard.h"
+#include "llist.h"
+#include "fileinfo.h"
+
+#define _MPRINTF_REPLACE /* use our functions only */
+#include <curl/mprintf.h>
+
+#include "curl_memory.h"
+/* The last #include file should be: */
+#include "memdebug.h"
+
+CURLcode Curl_wildcard_init(struct WildcardData *wc)
+{
+ DEBUGASSERT(wc->filelist == NULL);
+ /* now allocate only wc->filelist, everything else
+ will be allocated if it is needed. */
+ wc->filelist = Curl_llist_alloc(Curl_fileinfo_dtor);
+ if(!wc->filelist) {;
+ return CURLE_OUT_OF_MEMORY;
+ }
+ return CURLE_OK;
+}
+
+void Curl_wildcard_dtor(struct WildcardData *wc)
+{
+ if(!wc)
+ return;
+
+ if(wc->tmp_dtor) {
+ wc->tmp_dtor(wc->tmp);
+ wc->tmp_dtor = ZERO_NULL;
+ wc->tmp = NULL;
+ }
+ DEBUGASSERT(wc->tmp == NULL);
+
+ if(wc->filelist) {
+ Curl_llist_destroy(wc->filelist, NULL);
+ wc->filelist = NULL;
+ }
+
+ if(wc->path) {
+ free(wc->path);
+ wc->path = NULL;
+ }
+
+ if(wc->pattern) {
+ free(wc->pattern);
+ wc->pattern = NULL;
+ }
+
+ wc->customptr = NULL;
+ wc->state = CURLWC_INIT;
+}
diff --git a/lib/wildcard.h b/lib/wildcard.h
new file mode 100644
index 0000000..8f732d1
--- /dev/null
+++ b/lib/wildcard.h
@@ -0,0 +1,58 @@
+#ifndef HEADER_CURL_WILDCARD_H
+#define HEADER_CURL_WILDCARD_H
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at http://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ***************************************************************************/
+
+#include <curl/curl.h>
+
+/* list of wildcard process states */
+typedef enum {
+ CURLWC_INIT = 0,
+ CURLWC_MATCHING, /* library is trying to get list of addresses for
+ downloading */
+ CURLWC_DOWNLOADING,
+ CURLWC_CLEAN, /* deallocate resources and reset settings */
+ CURLWC_SKIP, /* skip over concrete file */
+ CURLWC_ERROR, /* error cases */
+ CURLWC_DONE /* if is wildcard->state == CURLWC_DONE wildcard loop in
+ Curl_perform() will end */
+} curl_wildcard_states;
+
+typedef void (*curl_wildcard_tmp_dtor)(void *ptr);
+
+/* struct keeping information about wildcard download process */
+struct WildcardData {
+ curl_wildcard_states state;
+ char *path; /* path to the directory, where we trying wildcard-match */
+ char *pattern; /* wildcard pattern */
+ struct curl_llist *filelist; /* llist with struct Curl_fileinfo */
+ void *tmp; /* pointer to protocol specific temporary data */
+ curl_wildcard_tmp_dtor tmp_dtor;
+ void *customptr; /* for CURLOPT_CHUNK_DATA pointer */
+};
+
+CURLcode Curl_wildcard_init(struct WildcardData *wc);
+void Curl_wildcard_dtor(struct WildcardData *wc);
+
+struct SessionHandle;
+
+#endif /* HEADER_CURL_WILDCARD_H */
diff --git a/libcurl.pc.in b/libcurl.pc.in
new file mode 100644
index 0000000..6eea31f
--- /dev/null
+++ b/libcurl.pc.in
@@ -0,0 +1,39 @@
+#***************************************************************************
+# _ _ ____ _
+# Project ___| | | | _ \| |
+# / __| | | | |_) | |
+# | (__| |_| | _ <| |___
+# \___|\___/|_| \_\_____|
+#
+# Copyright (C) 2004 - 2007, Daniel Stenberg, <daniel@haxx.se>, et al.
+#
+# This software is licensed as described in the file COPYING, which
+# you should have received as part of this distribution. The terms
+# are also available at http://curl.haxx.se/docs/copyright.html.
+#
+# You may opt to use, copy, modify, merge, publish, distribute and/or sell
+# copies of the Software, and permit persons to whom the Software is
+# furnished to do so, under the terms of the COPYING file.
+#
+# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+# KIND, either express or implied.
+#
+###########################################################################
+
+# This should most probably benefit from getting a "Requires:" field added
+# dynamically by configure.
+#
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+supported_protocols="@SUPPORT_PROTOCOLS@"
+supported_features="@SUPPORT_FEATURES@"
+
+Name: libcurl
+URL: http://curl.haxx.se/
+Description: Library to transfer files with ftp, http, etc.
+Version: @VERSION@
+Libs: -L${libdir} -lcurl @LIBS@
+Libs.private: @LIBCURL_LIBS@ @LIBS@
+Cflags: -I${includedir}
diff --git a/ltmain.sh b/ltmain.sh
new file mode 100755
index 0000000..d88da2c
--- /dev/null
+++ b/ltmain.sh
@@ -0,0 +1,8413 @@
+# Generated from ltmain.m4sh.
+
+# ltmain.sh (GNU libtool) 2.2.6b
+# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 2008 Free Software Foundation, Inc.
+# This is free software; see the source for copying conditions. There is NO
+# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+# GNU Libtool 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.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy
+# can be downloaded from http://www.gnu.org/licenses/gpl.html,
+# or obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+# Usage: $progname [OPTION]... [MODE-ARG]...
+#
+# Provide generalized library-building support services.
+#
+# --config show all configuration variables
+# --debug enable verbose shell tracing
+# -n, --dry-run display commands without modifying any files
+# --features display basic configuration information and exit
+# --mode=MODE use operation mode MODE
+# --preserve-dup-deps don't remove duplicate dependency libraries
+# --quiet, --silent don't print informational messages
+# --tag=TAG use configuration variables from tag TAG
+# -v, --verbose print informational messages (default)
+# --version print version information
+# -h, --help print short or long help message
+#
+# MODE must be one of the following:
+#
+# clean remove files from the build directory
+# compile compile a source file into a libtool object
+# execute automatically set library path, then run a program
+# finish complete the installation of libtool libraries
+# install install libraries or executables
+# link create a library or an executable
+# uninstall remove libraries from an installed directory
+#
+# MODE-ARGS vary depending on the MODE.
+# Try `$progname --help --mode=MODE' for a more detailed description of MODE.
+#
+# When reporting a bug, please describe a test case to reproduce it and
+# include the following information:
+#
+# host-triplet: $host
+# shell: $SHELL
+# compiler: $LTCC
+# compiler flags: $LTCFLAGS
+# linker: $LD (gnu? $with_gnu_ld)
+# $progname: (GNU libtool) 2.2.6b Debian-2.2.6b-2
+# automake: $automake_version
+# autoconf: $autoconf_version
+#
+# Report bugs to <bug-libtool@gnu.org>.
+
+PROGRAM=ltmain.sh
+PACKAGE=libtool
+VERSION="2.2.6b Debian-2.2.6b-2"
+TIMESTAMP=""
+package_revision=1.3017
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
+fi
+BIN_SH=xpg4; export BIN_SH # for Tru64
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# NLS nuisances: We save the old values to restore during execute mode.
+# Only set LANG and LC_ALL to C if already set.
+# These must not be set unconditionally because not all systems understand
+# e.g. LANG=C (notably SCO).
+lt_user_locale=
+lt_safe_locale=
+for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
+do
+ eval "if test \"\${$lt_var+set}\" = set; then
+ save_$lt_var=\$$lt_var
+ $lt_var=C
+ export $lt_var
+ lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\"
+ lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\"
+ fi"
+done
+
+$lt_unset CDPATH
+
+
+
+
+
+: ${CP="cp -f"}
+: ${ECHO="echo"}
+: ${EGREP="/bin/grep -E"}
+: ${FGREP="/bin/grep -F"}
+: ${GREP="/bin/grep"}
+: ${LN_S="ln -s"}
+: ${MAKE="make"}
+: ${MKDIR="mkdir"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+: ${SED="/bin/sed"}
+: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
+: ${Xsed="$SED -e 1s/^X//"}
+
+# Global variables:
+EXIT_SUCCESS=0
+EXIT_FAILURE=1
+EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing.
+EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake.
+
+exit_status=$EXIT_SUCCESS
+
+# Make sure IFS has a sensible default
+lt_nl='
+'
+IFS=" $lt_nl"
+
+dirname="s,/[^/]*$,,"
+basename="s,^.*/,,"
+
+# func_dirname_and_basename file append nondir_replacement
+# perform func_basename and func_dirname in a single function
+# call:
+# dirname: Compute the dirname of FILE. If nonempty,
+# add APPEND to the result, otherwise set result
+# to NONDIR_REPLACEMENT.
+# value returned in "$func_dirname_result"
+# basename: Compute filename of FILE.
+# value retuned in "$func_basename_result"
+# Implementation must be kept synchronized with func_dirname
+# and func_basename. For efficiency, we do not delegate to
+# those functions but instead duplicate the functionality here.
+func_dirname_and_basename ()
+{
+ # Extract subdirectory from the argument.
+ func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
+ if test "X$func_dirname_result" = "X${1}"; then
+ func_dirname_result="${3}"
+ else
+ func_dirname_result="$func_dirname_result${2}"
+ fi
+ func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
+}
+
+# Generated shell functions inserted here.
+
+# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
+# is ksh but when the shell is invoked as "sh" and the current value of
+# the _XPG environment variable is not equal to 1 (one), the special
+# positional parameter $0, within a function call, is the name of the
+# function.
+progpath="$0"
+
+# The name of this program:
+# In the unlikely event $progname began with a '-', it would play havoc with
+# func_echo (imagine progname=-n), so we prepend ./ in that case:
+func_dirname_and_basename "$progpath"
+progname=$func_basename_result
+case $progname in
+ -*) progname=./$progname ;;
+esac
+
+# Make sure we have an absolute path for reexecution:
+case $progpath in
+ [\\/]*|[A-Za-z]:\\*) ;;
+ *[\\/]*)
+ progdir=$func_dirname_result
+ progdir=`cd "$progdir" && pwd`
+ progpath="$progdir/$progname"
+ ;;
+ *)
+ save_IFS="$IFS"
+ IFS=:
+ for progdir in $PATH; do
+ IFS="$save_IFS"
+ test -x "$progdir/$progname" && break
+ done
+ IFS="$save_IFS"
+ test -n "$progdir" || progdir=`pwd`
+ progpath="$progdir/$progname"
+ ;;
+esac
+
+# Sed substitution that helps us do robust quoting. It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed="${SED}"' -e 1s/^X//'
+sed_quote_subst='s/\([`"$\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Re-`\' parameter expansions in output of double_quote_subst that were
+# `\'-ed in input to the same. If an odd number of `\' preceded a '$'
+# in input to double_quote_subst, that '$' was protected from expansion.
+# Since each input `\' is now two `\'s, look for any number of runs of
+# four `\'s followed by two `\'s and then a '$'. `\' that '$'.
+bs='\\'
+bs2='\\\\'
+bs4='\\\\\\\\'
+dollar='\$'
+sed_double_backslash="\
+ s/$bs4/&\\
+/g
+ s/^$bs2$dollar/$bs&/
+ s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g
+ s/\n//g"
+
+# Standard options:
+opt_dry_run=false
+opt_help=false
+opt_quiet=false
+opt_verbose=false
+opt_warning=:
+
+# func_echo arg...
+# Echo program name prefixed message, along with the current mode
+# name if it has been set yet.
+func_echo ()
+{
+ $ECHO "$progname${mode+: }$mode: $*"
+}
+
+# func_verbose arg...
+# Echo program name prefixed message in verbose mode only.
+func_verbose ()
+{
+ $opt_verbose && func_echo ${1+"$@"}
+
+ # A bug in bash halts the script if the last line of a function
+ # fails when set -e is in force, so we need another command to
+ # work around that:
+ :
+}
+
+# func_error arg...
+# Echo program name prefixed message to standard error.
+func_error ()
+{
+ $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2
+}
+
+# func_warning arg...
+# Echo program name prefixed warning message to standard error.
+func_warning ()
+{
+ $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2
+
+ # bash bug again:
+ :
+}
+
+# func_fatal_error arg...
+# Echo program name prefixed message to standard error, and exit.
+func_fatal_error ()
+{
+ func_error ${1+"$@"}
+ exit $EXIT_FAILURE
+}
+
+# func_fatal_help arg...
+# Echo program name prefixed message to standard error, followed by
+# a help hint, and exit.
+func_fatal_help ()
+{
+ func_error ${1+"$@"}
+ func_fatal_error "$help"
+}
+help="Try \`$progname --help' for more information." ## default
+
+
+# func_grep expression filename
+# Check whether EXPRESSION matches any line of FILENAME, without output.
+func_grep ()
+{
+ $GREP "$1" "$2" >/dev/null 2>&1
+}
+
+
+# func_mkdir_p directory-path
+# Make sure the entire path to DIRECTORY-PATH is available.
+func_mkdir_p ()
+{
+ my_directory_path="$1"
+ my_dir_list=
+
+ if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then
+
+ # Protect directory names starting with `-'
+ case $my_directory_path in
+ -*) my_directory_path="./$my_directory_path" ;;
+ esac
+
+ # While some portion of DIR does not yet exist...
+ while test ! -d "$my_directory_path"; do
+ # ...make a list in topmost first order. Use a colon delimited
+ # list incase some portion of path contains whitespace.
+ my_dir_list="$my_directory_path:$my_dir_list"
+
+ # If the last portion added has no slash in it, the list is done
+ case $my_directory_path in */*) ;; *) break ;; esac
+
+ # ...otherwise throw away the child directory and loop
+ my_directory_path=`$ECHO "X$my_directory_path" | $Xsed -e "$dirname"`
+ done
+ my_dir_list=`$ECHO "X$my_dir_list" | $Xsed -e 's,:*$,,'`
+
+ save_mkdir_p_IFS="$IFS"; IFS=':'
+ for my_dir in $my_dir_list; do
+ IFS="$save_mkdir_p_IFS"
+ # mkdir can fail with a `File exist' error if two processes
+ # try to create one of the directories concurrently. Don't
+ # stop in that case!
+ $MKDIR "$my_dir" 2>/dev/null || :
+ done
+ IFS="$save_mkdir_p_IFS"
+
+ # Bail out if we (or some other process) failed to create a directory.
+ test -d "$my_directory_path" || \
+ func_fatal_error "Failed to create \`$1'"
+ fi
+}
+
+
+# func_mktempdir [string]
+# Make a temporary directory that won't clash with other running
+# libtool processes, and avoids race conditions if possible. If
+# given, STRING is the basename for that directory.
+func_mktempdir ()
+{
+ my_template="${TMPDIR-/tmp}/${1-$progname}"
+
+ if test "$opt_dry_run" = ":"; then
+ # Return a directory name, but don't create it in dry-run mode
+ my_tmpdir="${my_template}-$$"
+ else
+
+ # If mktemp works, use that first and foremost
+ my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null`
+
+ if test ! -d "$my_tmpdir"; then
+ # Failing that, at least try and use $RANDOM to avoid a race
+ my_tmpdir="${my_template}-${RANDOM-0}$$"
+
+ save_mktempdir_umask=`umask`
+ umask 0077
+ $MKDIR "$my_tmpdir"
+ umask $save_mktempdir_umask
+ fi
+
+ # If we're not in dry-run mode, bomb out on failure
+ test -d "$my_tmpdir" || \
+ func_fatal_error "cannot create temporary directory \`$my_tmpdir'"
+ fi
+
+ $ECHO "X$my_tmpdir" | $Xsed
+}
+
+
+# func_quote_for_eval arg
+# Aesthetically quote ARG to be evaled later.
+# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT
+# is double-quoted, suitable for a subsequent eval, whereas
+# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters
+# which are still active within double quotes backslashified.
+func_quote_for_eval ()
+{
+ case $1 in
+ *[\\\`\"\$]*)
+ func_quote_for_eval_unquoted_result=`$ECHO "X$1" | $Xsed -e "$sed_quote_subst"` ;;
+ *)
+ func_quote_for_eval_unquoted_result="$1" ;;
+ esac
+
+ case $func_quote_for_eval_unquoted_result in
+ # Double-quote args containing shell metacharacters to delay
+ # word splitting, command substitution and and variable
+ # expansion for a subsequent eval.
+ # Many Bourne shells cannot handle close brackets correctly
+ # in scan sets, so we specify it separately.
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\""
+ ;;
+ *)
+ func_quote_for_eval_result="$func_quote_for_eval_unquoted_result"
+ esac
+}
+
+
+# func_quote_for_expand arg
+# Aesthetically quote ARG to be evaled later; same as above,
+# but do not quote variable references.
+func_quote_for_expand ()
+{
+ case $1 in
+ *[\\\`\"]*)
+ my_arg=`$ECHO "X$1" | $Xsed \
+ -e "$double_quote_subst" -e "$sed_double_backslash"` ;;
+ *)
+ my_arg="$1" ;;
+ esac
+
+ case $my_arg in
+ # Double-quote args containing shell metacharacters to delay
+ # word splitting and command substitution for a subsequent eval.
+ # Many Bourne shells cannot handle close brackets correctly
+ # in scan sets, so we specify it separately.
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ my_arg="\"$my_arg\""
+ ;;
+ esac
+
+ func_quote_for_expand_result="$my_arg"
+}
+
+
+# func_show_eval cmd [fail_exp]
+# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is
+# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP
+# is given, then evaluate it.
+func_show_eval ()
+{
+ my_cmd="$1"
+ my_fail_exp="${2-:}"
+
+ ${opt_silent-false} || {
+ func_quote_for_expand "$my_cmd"
+ eval "func_echo $func_quote_for_expand_result"
+ }
+
+ if ${opt_dry_run-false}; then :; else
+ eval "$my_cmd"
+ my_status=$?
+ if test "$my_status" -eq 0; then :; else
+ eval "(exit $my_status); $my_fail_exp"
+ fi
+ fi
+}
+
+
+# func_show_eval_locale cmd [fail_exp]
+# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is
+# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP
+# is given, then evaluate it. Use the saved locale for evaluation.
+func_show_eval_locale ()
+{
+ my_cmd="$1"
+ my_fail_exp="${2-:}"
+
+ ${opt_silent-false} || {
+ func_quote_for_expand "$my_cmd"
+ eval "func_echo $func_quote_for_expand_result"
+ }
+
+ if ${opt_dry_run-false}; then :; else
+ eval "$lt_user_locale
+ $my_cmd"
+ my_status=$?
+ eval "$lt_safe_locale"
+ if test "$my_status" -eq 0; then :; else
+ eval "(exit $my_status); $my_fail_exp"
+ fi
+ fi
+}
+
+
+
+
+
+# func_version
+# Echo version message to standard output and exit.
+func_version ()
+{
+ $SED -n '/^# '$PROGRAM' (GNU /,/# warranty; / {
+ s/^# //
+ s/^# *$//
+ s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/
+ p
+ }' < "$progpath"
+ exit $?
+}
+
+# func_usage
+# Echo short help message to standard output and exit.
+func_usage ()
+{
+ $SED -n '/^# Usage:/,/# -h/ {
+ s/^# //
+ s/^# *$//
+ s/\$progname/'$progname'/
+ p
+ }' < "$progpath"
+ $ECHO
+ $ECHO "run \`$progname --help | more' for full usage"
+ exit $?
+}
+
+# func_help
+# Echo long help message to standard output and exit.
+func_help ()
+{
+ $SED -n '/^# Usage:/,/# Report bugs to/ {
+ s/^# //
+ s/^# *$//
+ s*\$progname*'$progname'*
+ s*\$host*'"$host"'*
+ s*\$SHELL*'"$SHELL"'*
+ s*\$LTCC*'"$LTCC"'*
+ s*\$LTCFLAGS*'"$LTCFLAGS"'*
+ s*\$LD*'"$LD"'*
+ s/\$with_gnu_ld/'"$with_gnu_ld"'/
+ s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/
+ s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/
+ p
+ }' < "$progpath"
+ exit $?
+}
+
+# func_missing_arg argname
+# Echo program name prefixed message to standard error and set global
+# exit_cmd.
+func_missing_arg ()
+{
+ func_error "missing argument for $1"
+ exit_cmd=exit
+}
+
+exit_cmd=:
+
+
+
+
+
+# Check that we have a working $ECHO.
+if test "X$1" = X--no-reexec; then
+ # Discard the --no-reexec flag, and continue.
+ shift
+elif test "X$1" = X--fallback-echo; then
+ # Avoid inline document here, it may be left over
+ :
+elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then
+ # Yippee, $ECHO works!
+ :
+else
+ # Restart under the correct shell, and then maybe $ECHO will work.
+ exec $SHELL "$progpath" --no-reexec ${1+"$@"}
+fi
+
+if test "X$1" = X--fallback-echo; then
+ # used as fallback echo
+ shift
+ cat <<EOF
+$*
+EOF
+ exit $EXIT_SUCCESS
+fi
+
+magic="%%%MAGIC variable%%%"
+magic_exe="%%%MAGIC EXE variable%%%"
+
+# Global variables.
+# $mode is unset
+nonopt=
+execute_dlfiles=
+preserve_args=
+lo2o="s/\\.lo\$/.${objext}/"
+o2lo="s/\\.${objext}\$/.lo/"
+extracted_archives=
+extracted_serial=0
+
+opt_dry_run=false
+opt_duplicate_deps=false
+opt_silent=false
+opt_debug=:
+
+# If this variable is set in any of the actions, the command in it
+# will be execed at the end. This prevents here-documents from being
+# left over by shells.
+exec_cmd=
+
+# func_fatal_configuration arg...
+# Echo program name prefixed message to standard error, followed by
+# a configuration failure hint, and exit.
+func_fatal_configuration ()
+{
+ func_error ${1+"$@"}
+ func_error "See the $PACKAGE documentation for more information."
+ func_fatal_error "Fatal configuration error."
+}
+
+
+# func_config
+# Display the configuration for all the tags in this script.
+func_config ()
+{
+ re_begincf='^# ### BEGIN LIBTOOL'
+ re_endcf='^# ### END LIBTOOL'
+
+ # Default configuration.
+ $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
+
+ # Now print the configurations for the tags.
+ for tagname in $taglist; do
+ $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
+ done
+
+ exit $?
+}
+
+# func_features
+# Display the features supported by this script.
+func_features ()
+{
+ $ECHO "host: $host"
+ if test "$build_libtool_libs" = yes; then
+ $ECHO "enable shared libraries"
+ else
+ $ECHO "disable shared libraries"
+ fi
+ if test "$build_old_libs" = yes; then
+ $ECHO "enable static libraries"
+ else
+ $ECHO "disable static libraries"
+ fi
+
+ exit $?
+}
+
+# func_enable_tag tagname
+# Verify that TAGNAME is valid, and either flag an error and exit, or
+# enable the TAGNAME tag. We also add TAGNAME to the global $taglist
+# variable here.
+func_enable_tag ()
+{
+ # Global variable:
+ tagname="$1"
+
+ re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
+ re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
+ sed_extractcf="/$re_begincf/,/$re_endcf/p"
+
+ # Validate tagname.
+ case $tagname in
+ *[!-_A-Za-z0-9,/]*)
+ func_fatal_error "invalid tag name: $tagname"
+ ;;
+ esac
+
+ # Don't test for the "default" C tag, as we know it's
+ # there but not specially marked.
+ case $tagname in
+ CC) ;;
+ *)
+ if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
+ taglist="$taglist $tagname"
+
+ # Evaluate the configuration. Be careful to quote the path
+ # and the sed script, to avoid splitting on whitespace, but
+ # also don't use non-portable quotes within backquotes within
+ # quotes we have to do it in 2 steps:
+ extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
+ eval "$extractedcf"
+ else
+ func_error "ignoring unknown tag $tagname"
+ fi
+ ;;
+ esac
+}
+
+# Parse options once, thoroughly. This comes as soon as possible in
+# the script to make things like `libtool --version' happen quickly.
+{
+
+ # Shorthand for --mode=foo, only valid as the first argument
+ case $1 in
+ clean|clea|cle|cl)
+ shift; set dummy --mode clean ${1+"$@"}; shift
+ ;;
+ compile|compil|compi|comp|com|co|c)
+ shift; set dummy --mode compile ${1+"$@"}; shift
+ ;;
+ execute|execut|execu|exec|exe|ex|e)
+ shift; set dummy --mode execute ${1+"$@"}; shift
+ ;;
+ finish|finis|fini|fin|fi|f)
+ shift; set dummy --mode finish ${1+"$@"}; shift
+ ;;
+ install|instal|insta|inst|ins|in|i)
+ shift; set dummy --mode install ${1+"$@"}; shift
+ ;;
+ link|lin|li|l)
+ shift; set dummy --mode link ${1+"$@"}; shift
+ ;;
+ uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
+ shift; set dummy --mode uninstall ${1+"$@"}; shift
+ ;;
+ esac
+
+ # Parse non-mode specific arguments:
+ while test "$#" -gt 0; do
+ opt="$1"
+ shift
+
+ case $opt in
+ --config) func_config ;;
+
+ --debug) preserve_args="$preserve_args $opt"
+ func_echo "enabling shell trace mode"
+ opt_debug='set -x'
+ $opt_debug
+ ;;
+
+ -dlopen) test "$#" -eq 0 && func_missing_arg "$opt" && break
+ execute_dlfiles="$execute_dlfiles $1"
+ shift
+ ;;
+
+ --dry-run | -n) opt_dry_run=: ;;
+ --features) func_features ;;
+ --finish) mode="finish" ;;
+
+ --mode) test "$#" -eq 0 && func_missing_arg "$opt" && break
+ case $1 in
+ # Valid mode arguments:
+ clean) ;;
+ compile) ;;
+ execute) ;;
+ finish) ;;
+ install) ;;
+ link) ;;
+ relink) ;;
+ uninstall) ;;
+
+ # Catch anything else as an error
+ *) func_error "invalid argument for $opt"
+ exit_cmd=exit
+ break
+ ;;
+ esac
+
+ mode="$1"
+ shift
+ ;;
+
+ --preserve-dup-deps)
+ opt_duplicate_deps=: ;;
+
+ --quiet|--silent) preserve_args="$preserve_args $opt"
+ opt_silent=:
+ ;;
+
+ --verbose| -v) preserve_args="$preserve_args $opt"
+ opt_silent=false
+ ;;
+
+ --tag) test "$#" -eq 0 && func_missing_arg "$opt" && break
+ preserve_args="$preserve_args $opt $1"
+ func_enable_tag "$1" # tagname is set here
+ shift
+ ;;
+
+ # Separate optargs to long options:
+ -dlopen=*|--mode=*|--tag=*)
+ func_opt_split "$opt"
+ set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"}
+ shift
+ ;;
+
+ -\?|-h) func_usage ;;
+ --help) opt_help=: ;;
+ --version) func_version ;;
+
+ -*) func_fatal_help "unrecognized option \`$opt'" ;;
+
+ *) nonopt="$opt"
+ break
+ ;;
+ esac
+ done
+
+
+ case $host in
+ *cygwin* | *mingw* | *pw32* | *cegcc*)
+ # don't eliminate duplications in $postdeps and $predeps
+ opt_duplicate_compiler_generated_deps=:
+ ;;
+ *)
+ opt_duplicate_compiler_generated_deps=$opt_duplicate_deps
+ ;;
+ esac
+
+ # Having warned about all mis-specified options, bail out if
+ # anything was wrong.
+ $exit_cmd $EXIT_FAILURE
+}
+
+# func_check_version_match
+# Ensure that we are using m4 macros, and libtool script from the same
+# release of libtool.
+func_check_version_match ()
+{
+ if test "$package_revision" != "$macro_revision"; then
+ if test "$VERSION" != "$macro_version"; then
+ if test -z "$macro_version"; then
+ cat >&2 <<_LT_EOF
+$progname: Version mismatch error. This is $PACKAGE $VERSION, but the
+$progname: definition of this LT_INIT comes from an older release.
+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
+$progname: and run autoconf again.
+_LT_EOF
+ else
+ cat >&2 <<_LT_EOF
+$progname: Version mismatch error. This is $PACKAGE $VERSION, but the
+$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
+$progname: and run autoconf again.
+_LT_EOF
+ fi
+ else
+ cat >&2 <<_LT_EOF
+$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision,
+$progname: but the definition of this LT_INIT comes from revision $macro_revision.
+$progname: You should recreate aclocal.m4 with macros from revision $package_revision
+$progname: of $PACKAGE $VERSION and run autoconf again.
+_LT_EOF
+ fi
+
+ exit $EXIT_MISMATCH
+ fi
+}
+
+
+## ----------- ##
+## Main. ##
+## ----------- ##
+
+$opt_help || {
+ # Sanity checks first:
+ func_check_version_match
+
+ if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
+ func_fatal_configuration "not configured to build any kind of library"
+ fi
+
+ test -z "$mode" && func_fatal_error "error: you must specify a MODE."
+
+
+ # Darwin sucks
+ eval std_shrext=\"$shrext_cmds\"
+
+
+ # Only execute mode is allowed to have -dlopen flags.
+ if test -n "$execute_dlfiles" && test "$mode" != execute; then
+ func_error "unrecognized option \`-dlopen'"
+ $ECHO "$help" 1>&2
+ exit $EXIT_FAILURE
+ fi
+
+ # Change the help message to a mode-specific one.
+ generic_help="$help"
+ help="Try \`$progname --help --mode=$mode' for more information."
+}
+
+
+# func_lalib_p file
+# True iff FILE is a libtool `.la' library or `.lo' object file.
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_lalib_p ()
+{
+ test -f "$1" &&
+ $SED -e 4q "$1" 2>/dev/null \
+ | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
+}
+
+# func_lalib_unsafe_p file
+# True iff FILE is a libtool `.la' library or `.lo' object file.
+# This function implements the same check as func_lalib_p without
+# resorting to external programs. To this end, it redirects stdin and
+# closes it afterwards, without saving the original file descriptor.
+# As a safety measure, use it only where a negative result would be
+# fatal anyway. Works if `file' does not exist.
+func_lalib_unsafe_p ()
+{
+ lalib_p=no
+ if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
+ for lalib_p_l in 1 2 3 4
+ do
+ read lalib_p_line
+ case "$lalib_p_line" in
+ \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
+ esac
+ done
+ exec 0<&5 5<&-
+ fi
+ test "$lalib_p" = yes
+}
+
+# func_ltwrapper_script_p file
+# True iff FILE is a libtool wrapper script
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_script_p ()
+{
+ func_lalib_p "$1"
+}
+
+# func_ltwrapper_executable_p file
+# True iff FILE is a libtool wrapper executable
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_executable_p ()
+{
+ func_ltwrapper_exec_suffix=
+ case $1 in
+ *.exe) ;;
+ *) func_ltwrapper_exec_suffix=.exe ;;
+ esac
+ $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
+}
+
+# func_ltwrapper_scriptname file
+# Assumes file is an ltwrapper_executable
+# uses $file to determine the appropriate filename for a
+# temporary ltwrapper_script.
+func_ltwrapper_scriptname ()
+{
+ func_ltwrapper_scriptname_result=""
+ if func_ltwrapper_executable_p "$1"; then
+ func_dirname_and_basename "$1" "" "."
+ func_stripname '' '.exe' "$func_basename_result"
+ func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
+ fi
+}
+
+# func_ltwrapper_p file
+# True iff FILE is a libtool wrapper script or wrapper executable
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_p ()
+{
+ func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
+}
+
+
+# func_execute_cmds commands fail_cmd
+# Execute tilde-delimited COMMANDS.
+# If FAIL_CMD is given, eval that upon failure.
+# FAIL_CMD may read-access the current command in variable CMD!
+func_execute_cmds ()
+{
+ $opt_debug
+ save_ifs=$IFS; IFS='~'
+ for cmd in $1; do
+ IFS=$save_ifs
+ eval cmd=\"$cmd\"
+ func_show_eval "$cmd" "${2-:}"
+ done
+ IFS=$save_ifs
+}
+
+
+# func_source file
+# Source FILE, adding directory component if necessary.
+# Note that it is not necessary on cygwin/mingw to append a dot to
+# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
+# behavior happens only for exec(3), not for open(2)! Also, sourcing
+# `FILE.' does not work on cygwin managed mounts.
+func_source ()
+{
+ $opt_debug
+ case $1 in
+ */* | *\\*) . "$1" ;;
+ *) . "./$1" ;;
+ esac
+}
+
+
+# func_infer_tag arg
+# Infer tagged configuration to use if any are available and
+# if one wasn't chosen via the "--tag" command line option.
+# Only attempt this if the compiler in the base compile
+# command doesn't match the default compiler.
+# arg is usually of the form 'gcc ...'
+func_infer_tag ()
+{
+ $opt_debug
+ if test -n "$available_tags" && test -z "$tagname"; then
+ CC_quoted=
+ for arg in $CC; do
+ func_quote_for_eval "$arg"
+ CC_quoted="$CC_quoted $func_quote_for_eval_result"
+ done
+ case $@ in
+ # Blanks in the command may have been stripped by the calling shell,
+ # but not from the CC environment variable when configure was run.
+ " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) ;;
+ # Blanks at the start of $base_compile will cause this to fail
+ # if we don't check for them as well.
+ *)
+ for z in $available_tags; do
+ if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
+ # Evaluate the configuration.
+ eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
+ CC_quoted=
+ for arg in $CC; do
+ # Double-quote args containing other shell metacharacters.
+ func_quote_for_eval "$arg"
+ CC_quoted="$CC_quoted $func_quote_for_eval_result"
+ done
+ case "$@ " in
+ " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*)
+ # The compiler in the base compile command matches
+ # the one in the tagged configuration.
+ # Assume this is the tagged configuration we want.
+ tagname=$z
+ break
+ ;;
+ esac
+ fi
+ done
+ # If $tagname still isn't set, then no tagged configuration
+ # was found and let the user know that the "--tag" command
+ # line option must be used.
+ if test -z "$tagname"; then
+ func_echo "unable to infer tagged configuration"
+ func_fatal_error "specify a tag with \`--tag'"
+# else
+# func_verbose "using $tagname tagged configuration"
+ fi
+ ;;
+ esac
+ fi
+}
+
+
+
+# func_write_libtool_object output_name pic_name nonpic_name
+# Create a libtool object file (analogous to a ".la" file),
+# but don't create it if we're doing a dry run.
+func_write_libtool_object ()
+{
+ write_libobj=${1}
+ if test "$build_libtool_libs" = yes; then
+ write_lobj=\'${2}\'
+ else
+ write_lobj=none
+ fi
+
+ if test "$build_old_libs" = yes; then
+ write_oldobj=\'${3}\'
+ else
+ write_oldobj=none
+ fi
+
+ $opt_dry_run || {
+ cat >${write_libobj}T <<EOF
+# $write_libobj - a libtool object file
+# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# Name of the PIC object.
+pic_object=$write_lobj
+
+# Name of the non-PIC object
+non_pic_object=$write_oldobj
+
+EOF
+ $MV "${write_libobj}T" "${write_libobj}"
+ }
+}
+
+# func_mode_compile arg...
+func_mode_compile ()
+{
+ $opt_debug
+ # Get the compilation command and the source file.
+ base_compile=
+ srcfile="$nonopt" # always keep a non-empty value in "srcfile"
+ suppress_opt=yes
+ suppress_output=
+ arg_mode=normal
+ libobj=
+ later=
+ pie_flag=
+
+ for arg
+ do
+ case $arg_mode in
+ arg )
+ # do not "continue". Instead, add this to base_compile
+ lastarg="$arg"
+ arg_mode=normal
+ ;;
+
+ target )
+ libobj="$arg"
+ arg_mode=normal
+ continue
+ ;;
+
+ normal )
+ # Accept any command-line options.
+ case $arg in
+ -o)
+ test -n "$libobj" && \
+ func_fatal_error "you cannot specify \`-o' more than once"
+ arg_mode=target
+ continue
+ ;;
+
+ -pie | -fpie | -fPIE)
+ pie_flag="$pie_flag $arg"
+ continue
+ ;;
+
+ -shared | -static | -prefer-pic | -prefer-non-pic)
+ later="$later $arg"
+ continue
+ ;;
+
+ -no-suppress)
+ suppress_opt=no
+ continue
+ ;;
+
+ -Xcompiler)
+ arg_mode=arg # the next one goes into the "base_compile" arg list
+ continue # The current "srcfile" will either be retained or
+ ;; # replaced later. I would guess that would be a bug.
+
+ -Wc,*)
+ func_stripname '-Wc,' '' "$arg"
+ args=$func_stripname_result
+ lastarg=
+ save_ifs="$IFS"; IFS=','
+ for arg in $args; do
+ IFS="$save_ifs"
+ func_quote_for_eval "$arg"
+ lastarg="$lastarg $func_quote_for_eval_result"
+ done
+ IFS="$save_ifs"
+ func_stripname ' ' '' "$lastarg"
+ lastarg=$func_stripname_result
+
+ # Add the arguments to base_compile.
+ base_compile="$base_compile $lastarg"
+ continue
+ ;;
+
+ *)
+ # Accept the current argument as the source file.
+ # The previous "srcfile" becomes the current argument.
+ #
+ lastarg="$srcfile"
+ srcfile="$arg"
+ ;;
+ esac # case $arg
+ ;;
+ esac # case $arg_mode
+
+ # Aesthetically quote the previous argument.
+ func_quote_for_eval "$lastarg"
+ base_compile="$base_compile $func_quote_for_eval_result"
+ done # for arg
+
+ case $arg_mode in
+ arg)
+ func_fatal_error "you must specify an argument for -Xcompile"
+ ;;
+ target)
+ func_fatal_error "you must specify a target with \`-o'"
+ ;;
+ *)
+ # Get the name of the library object.
+ test -z "$libobj" && {
+ func_basename "$srcfile"
+ libobj="$func_basename_result"
+ }
+ ;;
+ esac
+
+ # Recognize several different file suffixes.
+ # If the user specifies -o file.o, it is replaced with file.lo
+ case $libobj in
+ *.[cCFSifmso] | \
+ *.ada | *.adb | *.ads | *.asm | \
+ *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
+ *.[fF][09]? | *.for | *.java | *.obj | *.sx)
+ func_xform "$libobj"
+ libobj=$func_xform_result
+ ;;
+ esac
+
+ case $libobj in
+ *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
+ *)
+ func_fatal_error "cannot determine name of library object from \`$libobj'"
+ ;;
+ esac
+
+ func_infer_tag $base_compile
+
+ for arg in $later; do
+ case $arg in
+ -shared)
+ test "$build_libtool_libs" != yes && \
+ func_fatal_configuration "can not build a shared library"
+ build_old_libs=no
+ continue
+ ;;
+
+ -static)
+ build_libtool_libs=no
+ build_old_libs=yes
+ continue
+ ;;
+
+ -prefer-pic)
+ pic_mode=yes
+ continue
+ ;;
+
+ -prefer-non-pic)
+ pic_mode=no
+ continue
+ ;;
+ esac
+ done
+
+ func_quote_for_eval "$libobj"
+ test "X$libobj" != "X$func_quote_for_eval_result" \
+ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \
+ && func_warning "libobj name \`$libobj' may not contain shell special characters."
+ func_dirname_and_basename "$obj" "/" ""
+ objname="$func_basename_result"
+ xdir="$func_dirname_result"
+ lobj=${xdir}$objdir/$objname
+
+ test -z "$base_compile" && \
+ func_fatal_help "you must specify a compilation command"
+
+ # Delete any leftover library objects.
+ if test "$build_old_libs" = yes; then
+ removelist="$obj $lobj $libobj ${libobj}T"
+ else
+ removelist="$lobj $libobj ${libobj}T"
+ fi
+
+ # On Cygwin there's no "real" PIC flag so we must build both object types
+ case $host_os in
+ cygwin* | mingw* | pw32* | os2* | cegcc*)
+ pic_mode=default
+ ;;
+ esac
+ if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
+ # non-PIC code in shared libraries is not supported
+ pic_mode=default
+ fi
+
+ # Calculate the filename of the output object if compiler does
+ # not support -o with -c
+ if test "$compiler_c_o" = no; then
+ output_obj=`$ECHO "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext}
+ lockfile="$output_obj.lock"
+ else
+ output_obj=
+ need_locks=no
+ lockfile=
+ fi
+
+ # Lock this critical section if it is needed
+ # We use this script file to make the link, it avoids creating a new file
+ if test "$need_locks" = yes; then
+ until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
+ func_echo "Waiting for $lockfile to be removed"
+ sleep 2
+ done
+ elif test "$need_locks" = warn; then
+ if test -f "$lockfile"; then
+ $ECHO "\
+*** ERROR, $lockfile exists and contains:
+`cat $lockfile 2>/dev/null`
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together. If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+ $opt_dry_run || $RM $removelist
+ exit $EXIT_FAILURE
+ fi
+ removelist="$removelist $output_obj"
+ $ECHO "$srcfile" > "$lockfile"
+ fi
+
+ $opt_dry_run || $RM $removelist
+ removelist="$removelist $lockfile"
+ trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
+
+ if test -n "$fix_srcfile_path"; then
+ eval srcfile=\"$fix_srcfile_path\"
+ fi
+ func_quote_for_eval "$srcfile"
+ qsrcfile=$func_quote_for_eval_result
+
+ # Only build a PIC object if we are building libtool libraries.
+ if test "$build_libtool_libs" = yes; then
+ # Without this assignment, base_compile gets emptied.
+ fbsd_hideous_sh_bug=$base_compile
+
+ if test "$pic_mode" != no; then
+ command="$base_compile $qsrcfile $pic_flag"
+ else
+ # Don't build PIC code
+ command="$base_compile $qsrcfile"
+ fi
+
+ func_mkdir_p "$xdir$objdir"
+
+ if test -z "$output_obj"; then
+ # Place PIC objects in $objdir
+ command="$command -o $lobj"
+ fi
+
+ func_show_eval_locale "$command" \
+ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
+
+ if test "$need_locks" = warn &&
+ test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+ $ECHO "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together. If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+ $opt_dry_run || $RM $removelist
+ exit $EXIT_FAILURE
+ fi
+
+ # Just move the object if needed, then go on to compile the next one
+ if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
+ func_show_eval '$MV "$output_obj" "$lobj"' \
+ 'error=$?; $opt_dry_run || $RM $removelist; exit $error'
+ fi
+
+ # Allow error messages only from the first compilation.
+ if test "$suppress_opt" = yes; then
+ suppress_output=' >/dev/null 2>&1'
+ fi
+ fi
+
+ # Only build a position-dependent object if we build old libraries.
+ if test "$build_old_libs" = yes; then
+ if test "$pic_mode" != yes; then
+ # Don't build PIC code
+ command="$base_compile $qsrcfile$pie_flag"
+ else
+ command="$base_compile $qsrcfile $pic_flag"
+ fi
+ if test "$compiler_c_o" = yes; then
+ command="$command -o $obj"
+ fi
+
+ # Suppress compiler output if we already did a PIC compilation.
+ command="$command$suppress_output"
+ func_show_eval_locale "$command" \
+ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
+
+ if test "$need_locks" = warn &&
+ test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+ $ECHO "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together. If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+ $opt_dry_run || $RM $removelist
+ exit $EXIT_FAILURE
+ fi
+
+ # Just move the object if needed
+ if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
+ func_show_eval '$MV "$output_obj" "$obj"' \
+ 'error=$?; $opt_dry_run || $RM $removelist; exit $error'
+ fi
+ fi
+
+ $opt_dry_run || {
+ func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
+
+ # Unlock the critical section if it was locked
+ if test "$need_locks" != no; then
+ removelist=$lockfile
+ $RM "$lockfile"
+ fi
+ }
+
+ exit $EXIT_SUCCESS
+}
+
+$opt_help || {
+test "$mode" = compile && func_mode_compile ${1+"$@"}
+}
+
+func_mode_help ()
+{
+ # We need to display help for each of the modes.
+ case $mode in
+ "")
+ # Generic help is extracted from the usage comments
+ # at the start of this file.
+ func_help
+ ;;
+
+ clean)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
+
+Remove files from the build directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed
+to RM.
+
+If FILE is a libtool library, object or program, all the files associated
+with it are deleted. Otherwise, only FILE itself is deleted using RM."
+ ;;
+
+ compile)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
+
+Compile a source file into a libtool library object.
+
+This mode accepts the following additional options:
+
+ -o OUTPUT-FILE set the output file name to OUTPUT-FILE
+ -no-suppress do not suppress compiler output for multiple passes
+ -prefer-pic try to building PIC objects only
+ -prefer-non-pic try to building non-PIC objects only
+ -shared do not build a \`.o' file suitable for static linking
+ -static only build a \`.o' file suitable for static linking
+
+COMPILE-COMMAND is a command to be used in creating a \`standard' object file
+from the given SOURCEFILE.
+
+The output file name is determined by removing the directory component from
+SOURCEFILE, then substituting the C source code suffix \`.c' with the
+library object suffix, \`.lo'."
+ ;;
+
+ execute)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
+
+Automatically set library path, then run a program.
+
+This mode accepts the following additional options:
+
+ -dlopen FILE add the directory containing FILE to the library path
+
+This mode sets the library path environment variable according to \`-dlopen'
+flags.
+
+If any of the ARGS are libtool executable wrappers, then they are translated
+into their corresponding uninstalled binary, and any of their required library
+directories are added to the library path.
+
+Then, COMMAND is executed, with ARGS as arguments."
+ ;;
+
+ finish)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
+
+Complete the installation of libtool libraries.
+
+Each LIBDIR is a directory that contains libtool libraries.
+
+The commands that this mode executes may require superuser privileges. Use
+the \`--dry-run' option if you just want to see what would be executed."
+ ;;
+
+ install)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
+
+Install executables or libraries.
+
+INSTALL-COMMAND is the installation command. The first component should be
+either the \`install' or \`cp' program.
+
+The following components of INSTALL-COMMAND are treated specially:
+
+ -inst-prefix PREFIX-DIR Use PREFIX-DIR as a staging area for installation
+
+The rest of the components are interpreted as arguments to that command (only
+BSD-compatible install options are recognized)."
+ ;;
+
+ link)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
+
+Link object files or libraries together to form another library, or to
+create an executable program.
+
+LINK-COMMAND is a command using the C compiler that you would use to create
+a program from several object files.
+
+The following components of LINK-COMMAND are treated specially:
+
+ -all-static do not do any dynamic linking at all
+ -avoid-version do not add a version suffix if possible
+ -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime
+ -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols
+ -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
+ -export-symbols SYMFILE
+ try to export only the symbols listed in SYMFILE
+ -export-symbols-regex REGEX
+ try to export only the symbols matching REGEX
+ -LLIBDIR search LIBDIR for required installed libraries
+ -lNAME OUTPUT-FILE requires the installed library libNAME
+ -module build a library that can dlopened
+ -no-fast-install disable the fast-install mode
+ -no-install link a not-installable executable
+ -no-undefined declare that a library does not refer to external symbols
+ -o OUTPUT-FILE create OUTPUT-FILE from the specified objects
+ -objectlist FILE Use a list of object files found in FILE to specify objects
+ -precious-files-regex REGEX
+ don't remove output files matching REGEX
+ -release RELEASE specify package release information
+ -rpath LIBDIR the created library will eventually be installed in LIBDIR
+ -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries
+ -shared only do dynamic linking of libtool libraries
+ -shrext SUFFIX override the standard shared library file extension
+ -static do not do any dynamic linking of uninstalled libtool libraries
+ -static-libtool-libs
+ do not do any dynamic linking of libtool libraries
+ -version-info CURRENT[:REVISION[:AGE]]
+ specify library version info [each variable defaults to 0]
+ -weak LIBNAME declare that the target provides the LIBNAME interface
+
+All other options (arguments beginning with \`-') are ignored.
+
+Every other argument is treated as a filename. Files ending in \`.la' are
+treated as uninstalled libtool libraries, other files are standard or library
+object files.
+
+If the OUTPUT-FILE ends in \`.la', then a libtool library is created,
+only library objects (\`.lo' files) may be specified, and \`-rpath' is
+required, except when creating a convenience library.
+
+If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
+using \`ar' and \`ranlib', or on Windows using \`lib'.
+
+If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
+is created, otherwise an executable program is created."
+ ;;
+
+ uninstall)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
+
+Remove libraries from an installation directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed
+to RM.
+
+If FILE is a libtool library, all the files associated with it are deleted.
+Otherwise, only FILE itself is deleted using RM."
+ ;;
+
+ *)
+ func_fatal_help "invalid operation mode \`$mode'"
+ ;;
+ esac
+
+ $ECHO
+ $ECHO "Try \`$progname --help' for more information about other modes."
+
+ exit $?
+}
+
+ # Now that we've collected a possible --mode arg, show help if necessary
+ $opt_help && func_mode_help
+
+
+# func_mode_execute arg...
+func_mode_execute ()
+{
+ $opt_debug
+ # The first argument is the command name.
+ cmd="$nonopt"
+ test -z "$cmd" && \
+ func_fatal_help "you must specify a COMMAND"
+
+ # Handle -dlopen flags immediately.
+ for file in $execute_dlfiles; do
+ test -f "$file" \
+ || func_fatal_help "\`$file' is not a file"
+
+ dir=
+ case $file in
+ *.la)
+ # Check to see that this really is a libtool archive.
+ func_lalib_unsafe_p "$file" \
+ || func_fatal_help "\`$lib' is not a valid libtool archive"
+
+ # Read the libtool library.
+ dlname=
+ library_names=
+ func_source "$file"
+
+ # Skip this library if it cannot be dlopened.
+ if test -z "$dlname"; then
+ # Warn if it was a shared library.
+ test -n "$library_names" && \
+ func_warning "\`$file' was not linked with \`-export-dynamic'"
+ continue
+ fi
+
+ func_dirname "$file" "" "."
+ dir="$func_dirname_result"
+
+ if test -f "$dir/$objdir/$dlname"; then
+ dir="$dir/$objdir"
+ else
+ if test ! -f "$dir/$dlname"; then
+ func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'"
+ fi
+ fi
+ ;;
+
+ *.lo)
+ # Just add the directory containing the .lo file.
+ func_dirname "$file" "" "."
+ dir="$func_dirname_result"
+ ;;
+
+ *)
+ func_warning "\`-dlopen' is ignored for non-libtool libraries and objects"
+ continue
+ ;;
+ esac
+
+ # Get the absolute pathname.
+ absdir=`cd "$dir" && pwd`
+ test -n "$absdir" && dir="$absdir"
+
+ # Now add the directory to shlibpath_var.
+ if eval "test -z \"\$$shlibpath_var\""; then
+ eval "$shlibpath_var=\"\$dir\""
+ else
+ eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
+ fi
+ done
+
+ # This variable tells wrapper scripts just to set shlibpath_var
+ # rather than running their programs.
+ libtool_execute_magic="$magic"
+
+ # Check if any of the arguments is a wrapper script.
+ args=
+ for file
+ do
+ case $file in
+ -*) ;;
+ *)
+ # Do a test to see if this is really a libtool program.
+ if func_ltwrapper_script_p "$file"; then
+ func_source "$file"
+ # Transform arg to wrapped name.
+ file="$progdir/$program"
+ elif func_ltwrapper_executable_p "$file"; then
+ func_ltwrapper_scriptname "$file"
+ func_source "$func_ltwrapper_scriptname_result"
+ # Transform arg to wrapped name.
+ file="$progdir/$program"
+ fi
+ ;;
+ esac
+ # Quote arguments (to preserve shell metacharacters).
+ func_quote_for_eval "$file"
+ args="$args $func_quote_for_eval_result"
+ done
+
+ if test "X$opt_dry_run" = Xfalse; then
+ if test -n "$shlibpath_var"; then
+ # Export the shlibpath_var.
+ eval "export $shlibpath_var"
+ fi
+
+ # Restore saved environment variables
+ for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
+ do
+ eval "if test \"\${save_$lt_var+set}\" = set; then
+ $lt_var=\$save_$lt_var; export $lt_var
+ else
+ $lt_unset $lt_var
+ fi"
+ done
+
+ # Now prepare to actually exec the command.
+ exec_cmd="\$cmd$args"
+ else
+ # Display what would be done.
+ if test -n "$shlibpath_var"; then
+ eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
+ $ECHO "export $shlibpath_var"
+ fi
+ $ECHO "$cmd$args"
+ exit $EXIT_SUCCESS
+ fi
+}
+
+test "$mode" = execute && func_mode_execute ${1+"$@"}
+
+
+# func_mode_finish arg...
+func_mode_finish ()
+{
+ $opt_debug
+ libdirs="$nonopt"
+ admincmds=
+
+ if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
+ for dir
+ do
+ libdirs="$libdirs $dir"
+ done
+
+ for libdir in $libdirs; do
+ if test -n "$finish_cmds"; then
+ # Do each command in the finish commands.
+ func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
+'"$cmd"'"'
+ fi
+ if test -n "$finish_eval"; then
+ # Do the single finish_eval.
+ eval cmds=\"$finish_eval\"
+ $opt_dry_run || eval "$cmds" || admincmds="$admincmds
+ $cmds"
+ fi
+ done
+ fi
+
+ # Exit here if they wanted silent mode.
+ $opt_silent && exit $EXIT_SUCCESS
+
+ $ECHO "X----------------------------------------------------------------------" | $Xsed
+ $ECHO "Libraries have been installed in:"
+ for libdir in $libdirs; do
+ $ECHO " $libdir"
+ done
+ $ECHO
+ $ECHO "If you ever happen to want to link against installed libraries"
+ $ECHO "in a given directory, LIBDIR, you must either use libtool, and"
+ $ECHO "specify the full pathname of the library, or use the \`-LLIBDIR'"
+ $ECHO "flag during linking and do at least one of the following:"
+ if test -n "$shlibpath_var"; then
+ $ECHO " - add LIBDIR to the \`$shlibpath_var' environment variable"
+ $ECHO " during execution"
+ fi
+ if test -n "$runpath_var"; then
+ $ECHO " - add LIBDIR to the \`$runpath_var' environment variable"
+ $ECHO " during linking"
+ fi
+ if test -n "$hardcode_libdir_flag_spec"; then
+ libdir=LIBDIR
+ eval flag=\"$hardcode_libdir_flag_spec\"
+
+ $ECHO " - use the \`$flag' linker flag"
+ fi
+ if test -n "$admincmds"; then
+ $ECHO " - have your system administrator run these commands:$admincmds"
+ fi
+ if test -f /etc/ld.so.conf; then
+ $ECHO " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
+ fi
+ $ECHO
+
+ $ECHO "See any operating system documentation about shared libraries for"
+ case $host in
+ solaris2.[6789]|solaris2.1[0-9])
+ $ECHO "more information, such as the ld(1), crle(1) and ld.so(8) manual"
+ $ECHO "pages."
+ ;;
+ *)
+ $ECHO "more information, such as the ld(1) and ld.so(8) manual pages."
+ ;;
+ esac
+ $ECHO "X----------------------------------------------------------------------" | $Xsed
+ exit $EXIT_SUCCESS
+}
+
+test "$mode" = finish && func_mode_finish ${1+"$@"}
+
+
+# func_mode_install arg...
+func_mode_install ()
+{
+ $opt_debug
+ # There may be an optional sh(1) argument at the beginning of
+ # install_prog (especially on Windows NT).
+ if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
+ # Allow the use of GNU shtool's install command.
+ $ECHO "X$nonopt" | $GREP shtool >/dev/null; then
+ # Aesthetically quote it.
+ func_quote_for_eval "$nonopt"
+ install_prog="$func_quote_for_eval_result "
+ arg=$1
+ shift
+ else
+ install_prog=
+ arg=$nonopt
+ fi
+
+ # The real first argument should be the name of the installation program.
+ # Aesthetically quote it.
+ func_quote_for_eval "$arg"
+ install_prog="$install_prog$func_quote_for_eval_result"
+
+ # We need to accept at least all the BSD install flags.
+ dest=
+ files=
+ opts=
+ prev=
+ install_type=
+ isdir=no
+ stripme=
+ for arg
+ do
+ if test -n "$dest"; then
+ files="$files $dest"
+ dest=$arg
+ continue
+ fi
+
+ case $arg in
+ -d) isdir=yes ;;
+ -f)
+ case " $install_prog " in
+ *[\\\ /]cp\ *) ;;
+ *) prev=$arg ;;
+ esac
+ ;;
+ -g | -m | -o)
+ prev=$arg
+ ;;
+ -s)
+ stripme=" -s"
+ continue
+ ;;
+ -*)
+ ;;
+ *)
+ # If the previous option needed an argument, then skip it.
+ if test -n "$prev"; then
+ prev=
+ else
+ dest=$arg
+ continue
+ fi
+ ;;
+ esac
+
+ # Aesthetically quote the argument.
+ func_quote_for_eval "$arg"
+ install_prog="$install_prog $func_quote_for_eval_result"
+ done
+
+ test -z "$install_prog" && \
+ func_fatal_help "you must specify an install program"
+
+ test -n "$prev" && \
+ func_fatal_help "the \`$prev' option requires an argument"
+
+ if test -z "$files"; then
+ if test -z "$dest"; then
+ func_fatal_help "no file or destination specified"
+ else
+ func_fatal_help "you must specify a destination"
+ fi
+ fi
+
+ # Strip any trailing slash from the destination.
+ func_stripname '' '/' "$dest"
+ dest=$func_stripname_result
+
+ # Check to see that the destination is a directory.
+ test -d "$dest" && isdir=yes
+ if test "$isdir" = yes; then
+ destdir="$dest"
+ destname=
+ else
+ func_dirname_and_basename "$dest" "" "."
+ destdir="$func_dirname_result"
+ destname="$func_basename_result"
+
+ # Not a directory, so check to see that there is only one file specified.
+ set dummy $files; shift
+ test "$#" -gt 1 && \
+ func_fatal_help "\`$dest' is not a directory"
+ fi
+ case $destdir in
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
+ *)
+ for file in $files; do
+ case $file in
+ *.lo) ;;
+ *)
+ func_fatal_help "\`$destdir' must be an absolute directory name"
+ ;;
+ esac
+ done
+ ;;
+ esac
+
+ # This variable tells wrapper scripts just to set variables rather
+ # than running their programs.
+ libtool_install_magic="$magic"
+
+ staticlibs=
+ future_libdirs=
+ current_libdirs=
+ for file in $files; do
+
+ # Do each installation.
+ case $file in
+ *.$libext)
+ # Do the static libraries later.
+ staticlibs="$staticlibs $file"
+ ;;
+
+ *.la)
+ # Check to see that this really is a libtool archive.
+ func_lalib_unsafe_p "$file" \
+ || func_fatal_help "\`$file' is not a valid libtool archive"
+
+ library_names=
+ old_library=
+ relink_command=
+ func_source "$file"
+
+ # Add the libdir to current_libdirs if it is the destination.
+ if test "X$destdir" = "X$libdir"; then
+ case "$current_libdirs " in
+ *" $libdir "*) ;;
+ *) current_libdirs="$current_libdirs $libdir" ;;
+ esac
+ else
+ # Note the libdir as a future libdir.
+ case "$future_libdirs " in
+ *" $libdir "*) ;;
+ *) future_libdirs="$future_libdirs $libdir" ;;
+ esac
+ fi
+
+ func_dirname "$file" "/" ""
+ dir="$func_dirname_result"
+ dir="$dir$objdir"
+
+ if test -n "$relink_command"; then
+ # Determine the prefix the user has applied to our future dir.
+ inst_prefix_dir=`$ECHO "X$destdir" | $Xsed -e "s%$libdir\$%%"`
+
+ # Don't allow the user to place us outside of our expected
+ # location b/c this prevents finding dependent libraries that
+ # are installed to the same prefix.
+ # At present, this check doesn't affect windows .dll's that
+ # are installed into $libdir/../bin (currently, that works fine)
+ # but it's something to keep an eye on.
+ test "$inst_prefix_dir" = "$destdir" && \
+ func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir"
+
+ if test -n "$inst_prefix_dir"; then
+ # Stick the inst_prefix_dir data into the link command.
+ relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
+ else
+ relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%%"`
+ fi
+
+ func_warning "relinking \`$file'"
+ func_show_eval "$relink_command" \
+ 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"'
+ fi
+
+ # See the names of the shared library.
+ set dummy $library_names; shift
+ if test -n "$1"; then
+ realname="$1"
+ shift
+
+ srcname="$realname"
+ test -n "$relink_command" && srcname="$realname"T
+
+ # Install the shared library and build the symlinks.
+ func_show_eval "$install_prog $dir/$srcname $destdir/$realname" \
+ 'exit $?'
+ tstripme="$stripme"
+ case $host_os in
+ cygwin* | mingw* | pw32* | cegcc*)
+ case $realname in
+ *.dll.a)
+ tstripme=""
+ ;;
+ esac
+ ;;
+ esac
+ if test -n "$tstripme" && test -n "$striplib"; then
+ func_show_eval "$striplib $destdir/$realname" 'exit $?'
+ fi
+
+ if test "$#" -gt 0; then
+ # Delete the old symlinks, and create new ones.
+ # Try `ln -sf' first, because the `ln' binary might depend on
+ # the symlink we replace! Solaris /bin/ln does not understand -f,
+ # so we also need to try rm && ln -s.
+ for linkname
+ do
+ test "$linkname" != "$realname" \
+ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
+ done
+ fi
+
+ # Do each command in the postinstall commands.
+ lib="$destdir/$realname"
+ func_execute_cmds "$postinstall_cmds" 'exit $?'
+ fi
+
+ # Install the pseudo-library for information purposes.
+ func_basename "$file"
+ name="$func_basename_result"
+ instname="$dir/$name"i
+ func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
+
+ # Maybe install the static library, too.
+ test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
+ ;;
+
+ *.lo)
+ # Install (i.e. copy) a libtool object.
+
+ # Figure out destination file name, if it wasn't already specified.
+ if test -n "$destname"; then
+ destfile="$destdir/$destname"
+ else
+ func_basename "$file"
+ destfile="$func_basename_result"
+ destfile="$destdir/$destfile"
+ fi
+
+ # Deduce the name of the destination old-style object file.
+ case $destfile in
+ *.lo)
+ func_lo2o "$destfile"
+ staticdest=$func_lo2o_result
+ ;;
+ *.$objext)
+ staticdest="$destfile"
+ destfile=
+ ;;
+ *)
+ func_fatal_help "cannot copy a libtool object to \`$destfile'"
+ ;;
+ esac
+
+ # Install the libtool object if requested.
+ test -n "$destfile" && \
+ func_show_eval "$install_prog $file $destfile" 'exit $?'
+
+ # Install the old object if enabled.
+ if test "$build_old_libs" = yes; then
+ # Deduce the name of the old-style object file.
+ func_lo2o "$file"
+ staticobj=$func_lo2o_result
+ func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
+ fi
+ exit $EXIT_SUCCESS
+ ;;
+
+ *)
+ # Figure out destination file name, if it wasn't already specified.
+ if test -n "$destname"; then
+ destfile="$destdir/$destname"
+ else
+ func_basename "$file"
+ destfile="$func_basename_result"
+ destfile="$destdir/$destfile"
+ fi
+
+ # If the file is missing, and there is a .exe on the end, strip it
+ # because it is most likely a libtool script we actually want to
+ # install
+ stripped_ext=""
+ case $file in
+ *.exe)
+ if test ! -f "$file"; then
+ func_stripname '' '.exe' "$file"
+ file=$func_stripname_result
+ stripped_ext=".exe"
+ fi
+ ;;
+ esac
+
+ # Do a test to see if this is really a libtool program.
+ case $host in
+ *cygwin* | *mingw*)
+ if func_ltwrapper_executable_p "$file"; then
+ func_ltwrapper_scriptname "$file"
+ wrapper=$func_ltwrapper_scriptname_result
+ else
+ func_stripname '' '.exe' "$file"
+ wrapper=$func_stripname_result
+ fi
+ ;;
+ *)
+ wrapper=$file
+ ;;
+ esac
+ if func_ltwrapper_script_p "$wrapper"; then
+ notinst_deplibs=
+ relink_command=
+
+ func_source "$wrapper"
+
+ # Check the variables that should have been set.
+ test -z "$generated_by_libtool_version" && \
+ func_fatal_error "invalid libtool wrapper script \`$wrapper'"
+
+ finalize=yes
+ for lib in $notinst_deplibs; do
+ # Check to see that each library is installed.
+ libdir=
+ if test -f "$lib"; then
+ func_source "$lib"
+ fi
+ libfile="$libdir/"`$ECHO "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test
+ if test -n "$libdir" && test ! -f "$libfile"; then
+ func_warning "\`$lib' has not been installed in \`$libdir'"
+ finalize=no
+ fi
+ done
+
+ relink_command=
+ func_source "$wrapper"
+
+ outputname=
+ if test "$fast_install" = no && test -n "$relink_command"; then
+ $opt_dry_run || {
+ if test "$finalize" = yes; then
+ tmpdir=`func_mktempdir`
+ func_basename "$file$stripped_ext"
+ file="$func_basename_result"
+ outputname="$tmpdir/$file"
+ # Replace the output file specification.
+ relink_command=`$ECHO "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`
+
+ $opt_silent || {
+ func_quote_for_expand "$relink_command"
+ eval "func_echo $func_quote_for_expand_result"
+ }
+ if eval "$relink_command"; then :
+ else
+ func_error "error: relink \`$file' with the above command before installing it"
+ $opt_dry_run || ${RM}r "$tmpdir"
+ continue
+ fi
+ file="$outputname"
+ else
+ func_warning "cannot relink \`$file'"
+ fi
+ }
+ else
+ # Install the binary that we compiled earlier.
+ file=`$ECHO "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"`
+ fi
+ fi
+
+ # remove .exe since cygwin /usr/bin/install will append another
+ # one anyway
+ case $install_prog,$host in
+ */usr/bin/install*,*cygwin*)
+ case $file:$destfile in
+ *.exe:*.exe)
+ # this is ok
+ ;;
+ *.exe:*)
+ destfile=$destfile.exe
+ ;;
+ *:*.exe)
+ func_stripname '' '.exe' "$destfile"
+ destfile=$func_stripname_result
+ ;;
+ esac
+ ;;
+ esac
+ func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
+ $opt_dry_run || if test -n "$outputname"; then
+ ${RM}r "$tmpdir"
+ fi
+ ;;
+ esac
+ done
+
+ for file in $staticlibs; do
+ func_basename "$file"
+ name="$func_basename_result"
+
+ # Set up the ranlib parameters.
+ oldlib="$destdir/$name"
+
+ func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
+
+ if test -n "$stripme" && test -n "$old_striplib"; then
+ func_show_eval "$old_striplib $oldlib" 'exit $?'
+ fi
+
+ # Do each command in the postinstall commands.
+ func_execute_cmds "$old_postinstall_cmds" 'exit $?'
+ done
+
+ test -n "$future_libdirs" && \
+ func_warning "remember to run \`$progname --finish$future_libdirs'"
+
+ if test -n "$current_libdirs"; then
+ # Maybe just do a dry run.
+ $opt_dry_run && current_libdirs=" -n$current_libdirs"
+ exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
+ else
+ exit $EXIT_SUCCESS
+ fi
+}
+
+test "$mode" = install && func_mode_install ${1+"$@"}
+
+
+# func_generate_dlsyms outputname originator pic_p
+# Extract symbols from dlprefiles and create ${outputname}S.o with
+# a dlpreopen symbol table.
+func_generate_dlsyms ()
+{
+ $opt_debug
+ my_outputname="$1"
+ my_originator="$2"
+ my_pic_p="${3-no}"
+ my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'`
+ my_dlsyms=
+
+ if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+ if test -n "$NM" && test -n "$global_symbol_pipe"; then
+ my_dlsyms="${my_outputname}S.c"
+ else
+ func_error "not configured to extract global symbols from dlpreopened files"
+ fi
+ fi
+
+ if test -n "$my_dlsyms"; then
+ case $my_dlsyms in
+ "") ;;
+ *.c)
+ # Discover the nlist of each of the dlfiles.
+ nlist="$output_objdir/${my_outputname}.nm"
+
+ func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
+
+ # Parse the name list into a source file.
+ func_verbose "creating $output_objdir/$my_dlsyms"
+
+ $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
+/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */
+/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */
+
+#ifdef __cplusplus
+extern \"C\" {
+#endif
+
+/* External symbol declarations for the compiler. */\
+"
+
+ if test "$dlself" = yes; then
+ func_verbose "generating symbol list for \`$output'"
+
+ $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
+
+ # Add our own program objects to the symbol list.
+ progfiles=`$ECHO "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+ for progfile in $progfiles; do
+ func_verbose "extracting global C symbols from \`$progfile'"
+ $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'"
+ done
+
+ if test -n "$exclude_expsyms"; then
+ $opt_dry_run || {
+ eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
+ eval '$MV "$nlist"T "$nlist"'
+ }
+ fi
+
+ if test -n "$export_symbols_regex"; then
+ $opt_dry_run || {
+ eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
+ eval '$MV "$nlist"T "$nlist"'
+ }
+ fi
+
+ # Prepare the list of exported symbols
+ if test -z "$export_symbols"; then
+ export_symbols="$output_objdir/$outputname.exp"
+ $opt_dry_run || {
+ $RM $export_symbols
+ eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
+ case $host in
+ *cygwin* | *mingw* | *cegcc* )
+ eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+ eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
+ ;;
+ esac
+ }
+ else
+ $opt_dry_run || {
+ eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
+ eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
+ eval '$MV "$nlist"T "$nlist"'
+ case $host in
+ *cygwin | *mingw* | *cegcc* )
+ eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+ eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
+ ;;
+ esac
+ }
+ fi
+ fi
+
+ for dlprefile in $dlprefiles; do
+ func_verbose "extracting global C symbols from \`$dlprefile'"
+ func_basename "$dlprefile"
+ name="$func_basename_result"
+ $opt_dry_run || {
+ eval '$ECHO ": $name " >> "$nlist"'
+ eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'"
+ }
+ done
+
+ $opt_dry_run || {
+ # Make sure we have at least an empty file.
+ test -f "$nlist" || : > "$nlist"
+
+ if test -n "$exclude_expsyms"; then
+ $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
+ $MV "$nlist"T "$nlist"
+ fi
+
+ # Try sorting and uniquifying the output.
+ if $GREP -v "^: " < "$nlist" |
+ if sort -k 3 </dev/null >/dev/null 2>&1; then
+ sort -k 3
+ else
+ sort +2
+ fi |
+ uniq > "$nlist"S; then
+ :
+ else
+ $GREP -v "^: " < "$nlist" > "$nlist"S
+ fi
+
+ if test -f "$nlist"S; then
+ eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
+ else
+ $ECHO '/* NONE */' >> "$output_objdir/$my_dlsyms"
+ fi
+
+ $ECHO >> "$output_objdir/$my_dlsyms" "\
+
+/* The mapping between symbol names and symbols. */
+typedef struct {
+ const char *name;
+ void *address;
+} lt_dlsymlist;
+"
+ case $host in
+ *cygwin* | *mingw* | *cegcc* )
+ $ECHO >> "$output_objdir/$my_dlsyms" "\
+/* DATA imports from DLLs on WIN32 con't be const, because
+ runtime relocations are performed -- see ld's documentation
+ on pseudo-relocs. */"
+ lt_dlsym_const= ;;
+ *osf5*)
+ echo >> "$output_objdir/$my_dlsyms" "\
+/* This system does not cope well with relocations in const data */"
+ lt_dlsym_const= ;;
+ *)
+ lt_dlsym_const=const ;;
+ esac
+
+ $ECHO >> "$output_objdir/$my_dlsyms" "\
+extern $lt_dlsym_const lt_dlsymlist
+lt_${my_prefix}_LTX_preloaded_symbols[];
+$lt_dlsym_const lt_dlsymlist
+lt_${my_prefix}_LTX_preloaded_symbols[] =
+{\
+ { \"$my_originator\", (void *) 0 },"
+
+ case $need_lib_prefix in
+ no)
+ eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
+ ;;
+ *)
+ eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
+ ;;
+ esac
+ $ECHO >> "$output_objdir/$my_dlsyms" "\
+ {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+ return lt_${my_prefix}_LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif\
+"
+ } # !$opt_dry_run
+
+ pic_flag_for_symtable=
+ case "$compile_command " in
+ *" -static "*) ;;
+ *)
+ case $host in
+ # compiling the symbol table file with pic_flag works around
+ # a FreeBSD bug that causes programs to crash when -lm is
+ # linked before any other PIC object. But we must not use
+ # pic_flag when linking with -static. The problem exists in
+ # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
+ *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
+ pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
+ *-*-hpux*)
+ pic_flag_for_symtable=" $pic_flag" ;;
+ *)
+ if test "X$my_pic_p" != Xno; then
+ pic_flag_for_symtable=" $pic_flag"
+ fi
+ ;;
+ esac
+ ;;
+ esac
+ symtab_cflags=
+ for arg in $LTCFLAGS; do
+ case $arg in
+ -pie | -fpie | -fPIE) ;;
+ *) symtab_cflags="$symtab_cflags $arg" ;;
+ esac
+ done
+
+ # Now compile the dynamic symbol file.
+ func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
+
+ # Clean up the generated files.
+ func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"'
+
+ # Transform the symbol file into the correct name.
+ symfileobj="$output_objdir/${my_outputname}S.$objext"
+ case $host in
+ *cygwin* | *mingw* | *cegcc* )
+ if test -f "$output_objdir/$my_outputname.def"; then
+ compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+ finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+ else
+ compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
+ finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
+ fi
+ ;;
+ *)
+ compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
+ finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
+ ;;
+ esac
+ ;;
+ *)
+ func_fatal_error "unknown suffix for \`$my_dlsyms'"
+ ;;
+ esac
+ else
+ # We keep going just in case the user didn't refer to
+ # lt_preloaded_symbols. The linker will fail if global_symbol_pipe
+ # really was required.
+
+ # Nullify the symbol file.
+ compile_command=`$ECHO "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"`
+ finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
+ fi
+}
+
+# func_win32_libid arg
+# return the library type of file 'arg'
+#
+# Need a lot of goo to handle *both* DLLs and import libs
+# Has to be a shell function in order to 'eat' the argument
+# that is supplied when $file_magic_command is called.
+func_win32_libid ()
+{
+ $opt_debug
+ win32_libid_type="unknown"
+ win32_fileres=`file -L $1 2>/dev/null`
+ case $win32_fileres in
+ *ar\ archive\ import\ library*) # definitely import
+ win32_libid_type="x86 archive import"
+ ;;
+ *ar\ archive*) # could be an import, or static
+ if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
+ $EGREP 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then
+ win32_nmres=`eval $NM -f posix -A $1 |
+ $SED -n -e '
+ 1,100{
+ / I /{
+ s,.*,import,
+ p
+ q
+ }
+ }'`
+ case $win32_nmres in
+ import*) win32_libid_type="x86 archive import";;
+ *) win32_libid_type="x86 archive static";;
+ esac
+ fi
+ ;;
+ *DLL*)
+ win32_libid_type="x86 DLL"
+ ;;
+ *executable*) # but shell scripts are "executable" too...
+ case $win32_fileres in
+ *MS\ Windows\ PE\ Intel*)
+ win32_libid_type="x86 DLL"
+ ;;
+ esac
+ ;;
+ esac
+ $ECHO "$win32_libid_type"
+}
+
+
+
+# func_extract_an_archive dir oldlib
+func_extract_an_archive ()
+{
+ $opt_debug
+ f_ex_an_ar_dir="$1"; shift
+ f_ex_an_ar_oldlib="$1"
+ func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" 'exit $?'
+ if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
+ :
+ else
+ func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
+ fi
+}
+
+
+# func_extract_archives gentop oldlib ...
+func_extract_archives ()
+{
+ $opt_debug
+ my_gentop="$1"; shift
+ my_oldlibs=${1+"$@"}
+ my_oldobjs=""
+ my_xlib=""
+ my_xabs=""
+ my_xdir=""
+
+ for my_xlib in $my_oldlibs; do
+ # Extract the objects.
+ case $my_xlib in
+ [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;;
+ *) my_xabs=`pwd`"/$my_xlib" ;;
+ esac
+ func_basename "$my_xlib"
+ my_xlib="$func_basename_result"
+ my_xlib_u=$my_xlib
+ while :; do
+ case " $extracted_archives " in
+ *" $my_xlib_u "*)
+ func_arith $extracted_serial + 1
+ extracted_serial=$func_arith_result
+ my_xlib_u=lt$extracted_serial-$my_xlib ;;
+ *) break ;;
+ esac
+ done
+ extracted_archives="$extracted_archives $my_xlib_u"
+ my_xdir="$my_gentop/$my_xlib_u"
+
+ func_mkdir_p "$my_xdir"
+
+ case $host in
+ *-darwin*)
+ func_verbose "Extracting $my_xabs"
+ # Do not bother doing anything if just a dry run
+ $opt_dry_run || {
+ darwin_orig_dir=`pwd`
+ cd $my_xdir || exit $?
+ darwin_archive=$my_xabs
+ darwin_curdir=`pwd`
+ darwin_base_archive=`basename "$darwin_archive"`
+ darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
+ if test -n "$darwin_arches"; then
+ darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
+ darwin_arch=
+ func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
+ for darwin_arch in $darwin_arches ; do
+ func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}"
+ $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}"
+ cd "unfat-$$/${darwin_base_archive}-${darwin_arch}"
+ func_extract_an_archive "`pwd`" "${darwin_base_archive}"
+ cd "$darwin_curdir"
+ $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}"
+ done # $darwin_arches
+ ## Okay now we've a bunch of thin objects, gotta fatten them up :)
+ darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u`
+ darwin_file=
+ darwin_files=
+ for darwin_file in $darwin_filelist; do
+ darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP`
+ $LIPO -create -output "$darwin_file" $darwin_files
+ done # $darwin_filelist
+ $RM -rf unfat-$$
+ cd "$darwin_orig_dir"
+ else
+ cd $darwin_orig_dir
+ func_extract_an_archive "$my_xdir" "$my_xabs"
+ fi # $darwin_arches
+ } # !$opt_dry_run
+ ;;
+ *)
+ func_extract_an_archive "$my_xdir" "$my_xabs"
+ ;;
+ esac
+ my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`
+ done
+
+ func_extract_archives_result="$my_oldobjs"
+}
+
+
+
+# func_emit_wrapper_part1 [arg=no]
+#
+# Emit the first part of a libtool wrapper script on stdout.
+# For more information, see the description associated with
+# func_emit_wrapper(), below.
+func_emit_wrapper_part1 ()
+{
+ func_emit_wrapper_part1_arg1=no
+ if test -n "$1" ; then
+ func_emit_wrapper_part1_arg1=$1
+ fi
+
+ $ECHO "\
+#! $SHELL
+
+# $output - temporary wrapper script for $objdir/$outputname
+# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+#
+# The $output program cannot be directly executed until all the libtool
+# libraries that it depends on are installed.
+#
+# This wrapper script should never be moved out of the build directory.
+# If it is, it will not operate correctly.
+
+# Sed substitution that helps us do robust quoting. It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed='${SED} -e 1s/^X//'
+sed_quote_subst='$sed_quote_subst'
+
+# Be Bourne compatible
+if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '\${1+\"\$@\"}'='\"\$@\"'
+ setopt NO_GLOB_SUBST
+else
+ case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
+fi
+BIN_SH=xpg4; export BIN_SH # for Tru64
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+relink_command=\"$relink_command\"
+
+# This environment variable determines our operation mode.
+if test \"\$libtool_install_magic\" = \"$magic\"; then
+ # install mode needs the following variables:
+ generated_by_libtool_version='$macro_version'
+ notinst_deplibs='$notinst_deplibs'
+else
+ # When we are sourced in execute mode, \$file and \$ECHO are already set.
+ if test \"\$libtool_execute_magic\" != \"$magic\"; then
+ ECHO=\"$qecho\"
+ file=\"\$0\"
+ # Make sure echo works.
+ if test \"X\$1\" = X--no-reexec; then
+ # Discard the --no-reexec flag, and continue.
+ shift
+ elif test \"X\`{ \$ECHO '\t'; } 2>/dev/null\`\" = 'X\t'; then
+ # Yippee, \$ECHO works!
+ :
+ else
+ # Restart under the correct shell, and then maybe \$ECHO will work.
+ exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"}
+ fi
+ fi\
+"
+ $ECHO "\
+
+ # Find the directory that this script lives in.
+ thisdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\`
+ test \"x\$thisdir\" = \"x\$file\" && thisdir=.
+
+ # Follow symbolic links until we get to the real thisdir.
+ file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\`
+ while test -n \"\$file\"; do
+ destdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\`
+
+ # If there was a directory component, then change thisdir.
+ if test \"x\$destdir\" != \"x\$file\"; then
+ case \"\$destdir\" in
+ [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
+ *) thisdir=\"\$thisdir/\$destdir\" ;;
+ esac
+ fi
+
+ file=\`\$ECHO \"X\$file\" | \$Xsed -e 's%^.*/%%'\`
+ file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\`
+ done
+"
+}
+# end: func_emit_wrapper_part1
+
+# func_emit_wrapper_part2 [arg=no]
+#
+# Emit the second part of a libtool wrapper script on stdout.
+# For more information, see the description associated with
+# func_emit_wrapper(), below.
+func_emit_wrapper_part2 ()
+{
+ func_emit_wrapper_part2_arg1=no
+ if test -n "$1" ; then
+ func_emit_wrapper_part2_arg1=$1
+ fi
+
+ $ECHO "\
+
+ # Usually 'no', except on cygwin/mingw when embedded into
+ # the cwrapper.
+ WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_part2_arg1
+ if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
+ # special case for '.'
+ if test \"\$thisdir\" = \".\"; then
+ thisdir=\`pwd\`
+ fi
+ # remove .libs from thisdir
+ case \"\$thisdir\" in
+ *[\\\\/]$objdir ) thisdir=\`\$ECHO \"X\$thisdir\" | \$Xsed -e 's%[\\\\/][^\\\\/]*$%%'\` ;;
+ $objdir ) thisdir=. ;;
+ esac
+ fi
+
+ # Try to get the absolute directory name.
+ absdir=\`cd \"\$thisdir\" && pwd\`
+ test -n \"\$absdir\" && thisdir=\"\$absdir\"
+"
+
+ if test "$fast_install" = yes; then
+ $ECHO "\
+ program=lt-'$outputname'$exeext
+ progdir=\"\$thisdir/$objdir\"
+
+ if test ! -f \"\$progdir/\$program\" ||
+ { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
+ test \"X\$file\" != \"X\$progdir/\$program\"; }; then
+
+ file=\"\$\$-\$program\"
+
+ if test ! -d \"\$progdir\"; then
+ $MKDIR \"\$progdir\"
+ else
+ $RM \"\$progdir/\$file\"
+ fi"
+
+ $ECHO "\
+
+ # relink executable if necessary
+ if test -n \"\$relink_command\"; then
+ if relink_command_output=\`eval \$relink_command 2>&1\`; then :
+ else
+ $ECHO \"\$relink_command_output\" >&2
+ $RM \"\$progdir/\$file\"
+ exit 1
+ fi
+ fi
+
+ $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
+ { $RM \"\$progdir/\$program\";
+ $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
+ $RM \"\$progdir/\$file\"
+ fi"
+ else
+ $ECHO "\
+ program='$outputname'
+ progdir=\"\$thisdir/$objdir\"
+"
+ fi
+
+ $ECHO "\
+
+ if test -f \"\$progdir/\$program\"; then"
+
+ # Export our shlibpath_var if we have one.
+ if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+ $ECHO "\
+ # Add our own library path to $shlibpath_var
+ $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
+
+ # Some systems cannot cope with colon-terminated $shlibpath_var
+ # The second colon is a workaround for a bug in BeOS R4 sed
+ $shlibpath_var=\`\$ECHO \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\`
+
+ export $shlibpath_var
+"
+ fi
+
+ # fixup the dll searchpath if we need to.
+ if test -n "$dllsearchpath"; then
+ $ECHO "\
+ # Add the dll search path components to the executable PATH
+ PATH=$dllsearchpath:\$PATH
+"
+ fi
+
+ $ECHO "\
+ if test \"\$libtool_execute_magic\" != \"$magic\"; then
+ # Run the actual program with our arguments.
+"
+ case $host in
+ # Backslashes separate directories on plain windows
+ *-*-mingw | *-*-os2* | *-cegcc*)
+ $ECHO "\
+ exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
+"
+ ;;
+
+ *)
+ $ECHO "\
+ exec \"\$progdir/\$program\" \${1+\"\$@\"}
+"
+ ;;
+ esac
+ $ECHO "\
+ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
+ exit 1
+ fi
+ else
+ # The program doesn't exist.
+ \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2
+ \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
+ $ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
+ exit 1
+ fi
+fi\
+"
+}
+# end: func_emit_wrapper_part2
+
+
+# func_emit_wrapper [arg=no]
+#
+# Emit a libtool wrapper script on stdout.
+# Don't directly open a file because we may want to
+# incorporate the script contents within a cygwin/mingw
+# wrapper executable. Must ONLY be called from within
+# func_mode_link because it depends on a number of variables
+# set therein.
+#
+# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
+# variable will take. If 'yes', then the emitted script
+# will assume that the directory in which it is stored is
+# the $objdir directory. This is a cygwin/mingw-specific
+# behavior.
+func_emit_wrapper ()
+{
+ func_emit_wrapper_arg1=no
+ if test -n "$1" ; then
+ func_emit_wrapper_arg1=$1
+ fi
+
+ # split this up so that func_emit_cwrapperexe_src
+ # can call each part independently.
+ func_emit_wrapper_part1 "${func_emit_wrapper_arg1}"
+ func_emit_wrapper_part2 "${func_emit_wrapper_arg1}"
+}
+
+
+# func_to_host_path arg
+#
+# Convert paths to host format when used with build tools.
+# Intended for use with "native" mingw (where libtool itself
+# is running under the msys shell), or in the following cross-
+# build environments:
+# $build $host
+# mingw (msys) mingw [e.g. native]
+# cygwin mingw
+# *nix + wine mingw
+# where wine is equipped with the `winepath' executable.
+# In the native mingw case, the (msys) shell automatically
+# converts paths for any non-msys applications it launches,
+# but that facility isn't available from inside the cwrapper.
+# Similar accommodations are necessary for $host mingw and
+# $build cygwin. Calling this function does no harm for other
+# $host/$build combinations not listed above.
+#
+# ARG is the path (on $build) that should be converted to
+# the proper representation for $host. The result is stored
+# in $func_to_host_path_result.
+func_to_host_path ()
+{
+ func_to_host_path_result="$1"
+ if test -n "$1" ; then
+ case $host in
+ *mingw* )
+ lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
+ case $build in
+ *mingw* ) # actually, msys
+ # awkward: cmd appends spaces to result
+ lt_sed_strip_trailing_spaces="s/[ ]*\$//"
+ func_to_host_path_tmp1=`( cmd //c echo "$1" |\
+ $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""`
+ func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
+ $SED -e "$lt_sed_naive_backslashify"`
+ ;;
+ *cygwin* )
+ func_to_host_path_tmp1=`cygpath -w "$1"`
+ func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
+ $SED -e "$lt_sed_naive_backslashify"`
+ ;;
+ * )
+ # Unfortunately, winepath does not exit with a non-zero
+ # error code, so we are forced to check the contents of
+ # stdout. On the other hand, if the command is not
+ # found, the shell will set an exit code of 127 and print
+ # *an error message* to stdout. So we must check for both
+ # error code of zero AND non-empty stdout, which explains
+ # the odd construction:
+ func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null`
+ if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then
+ func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
+ $SED -e "$lt_sed_naive_backslashify"`
+ else
+ # Allow warning below.
+ func_to_host_path_result=""
+ fi
+ ;;
+ esac
+ if test -z "$func_to_host_path_result" ; then
+ func_error "Could not determine host path corresponding to"
+ func_error " '$1'"
+ func_error "Continuing, but uninstalled executables may not work."
+ # Fallback:
+ func_to_host_path_result="$1"
+ fi
+ ;;
+ esac
+ fi
+}
+# end: func_to_host_path
+
+# func_to_host_pathlist arg
+#
+# Convert pathlists to host format when used with build tools.
+# See func_to_host_path(), above. This function supports the
+# following $build/$host combinations (but does no harm for
+# combinations not listed here):
+# $build $host
+# mingw (msys) mingw [e.g. native]
+# cygwin mingw
+# *nix + wine mingw
+#
+# Path separators are also converted from $build format to
+# $host format. If ARG begins or ends with a path separator
+# character, it is preserved (but converted to $host format)
+# on output.
+#
+# ARG is a pathlist (on $build) that should be converted to
+# the proper representation on $host. The result is stored
+# in $func_to_host_pathlist_result.
+func_to_host_pathlist ()
+{
+ func_to_host_pathlist_result="$1"
+ if test -n "$1" ; then
+ case $host in
+ *mingw* )
+ lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
+ # Remove leading and trailing path separator characters from
+ # ARG. msys behavior is inconsistent here, cygpath turns them
+ # into '.;' and ';.', and winepath ignores them completely.
+ func_to_host_pathlist_tmp2="$1"
+ # Once set for this call, this variable should not be
+ # reassigned. It is used in tha fallback case.
+ func_to_host_pathlist_tmp1=`echo "$func_to_host_pathlist_tmp2" |\
+ $SED -e 's|^:*||' -e 's|:*$||'`
+ case $build in
+ *mingw* ) # Actually, msys.
+ # Awkward: cmd appends spaces to result.
+ lt_sed_strip_trailing_spaces="s/[ ]*\$//"
+ func_to_host_pathlist_tmp2=`( cmd //c echo "$func_to_host_pathlist_tmp1" |\
+ $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""`
+ func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\
+ $SED -e "$lt_sed_naive_backslashify"`
+ ;;
+ *cygwin* )
+ func_to_host_pathlist_tmp2=`cygpath -w -p "$func_to_host_pathlist_tmp1"`
+ func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\
+ $SED -e "$lt_sed_naive_backslashify"`
+ ;;
+ * )
+ # unfortunately, winepath doesn't convert pathlists
+ func_to_host_pathlist_result=""
+ func_to_host_pathlist_oldIFS=$IFS
+ IFS=:
+ for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do
+ IFS=$func_to_host_pathlist_oldIFS
+ if test -n "$func_to_host_pathlist_f" ; then
+ func_to_host_path "$func_to_host_pathlist_f"
+ if test -n "$func_to_host_path_result" ; then
+ if test -z "$func_to_host_pathlist_result" ; then
+ func_to_host_pathlist_result="$func_to_host_path_result"
+ else
+ func_to_host_pathlist_result="$func_to_host_pathlist_result;$func_to_host_path_result"
+ fi
+ fi
+ fi
+ IFS=:
+ done
+ IFS=$func_to_host_pathlist_oldIFS
+ ;;
+ esac
+ if test -z "$func_to_host_pathlist_result" ; then
+ func_error "Could not determine the host path(s) corresponding to"
+ func_error " '$1'"
+ func_error "Continuing, but uninstalled executables may not work."
+ # Fallback. This may break if $1 contains DOS-style drive
+ # specifications. The fix is not to complicate the expression
+ # below, but for the user to provide a working wine installation
+ # with winepath so that path translation in the cross-to-mingw
+ # case works properly.
+ lt_replace_pathsep_nix_to_dos="s|:|;|g"
+ func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\
+ $SED -e "$lt_replace_pathsep_nix_to_dos"`
+ fi
+ # Now, add the leading and trailing path separators back
+ case "$1" in
+ :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result"
+ ;;
+ esac
+ case "$1" in
+ *: ) func_to_host_pathlist_result="$func_to_host_pathlist_result;"
+ ;;
+ esac
+ ;;
+ esac
+ fi
+}
+# end: func_to_host_pathlist
+
+# func_emit_cwrapperexe_src
+# emit the source code for a wrapper executable on stdout
+# Must ONLY be called from within func_mode_link because
+# it depends on a number of variable set therein.
+func_emit_cwrapperexe_src ()
+{
+ cat <<EOF
+
+/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
+ Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+
+ The $output program cannot be directly executed until all the libtool
+ libraries that it depends on are installed.
+
+ This wrapper executable should never be moved out of the build directory.
+ If it is, it will not operate correctly.
+
+ Currently, it simply execs the wrapper *script* "$SHELL $output",
+ but could eventually absorb all of the scripts functionality and
+ exec $objdir/$outputname directly.
+*/
+EOF
+ cat <<"EOF"
+#include <stdio.h>
+#include <stdlib.h>
+#ifdef _MSC_VER
+# include <direct.h>
+# include <process.h>
+# include <io.h>
+# define setmode _setmode
+#else
+# include <unistd.h>
+# include <stdint.h>
+# ifdef __CYGWIN__
+# include <io.h>
+# define HAVE_SETENV
+# ifdef __STRICT_ANSI__
+char *realpath (const char *, char *);
+int putenv (char *);
+int setenv (const char *, const char *, int);
+# endif
+# endif
+#endif
+#include <malloc.h>
+#include <stdarg.h>
+#include <assert.h>
+#include <string.h>
+#include <ctype.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+
+#if defined(PATH_MAX)
+# define LT_PATHMAX PATH_MAX
+#elif defined(MAXPATHLEN)
+# define LT_PATHMAX MAXPATHLEN
+#else
+# define LT_PATHMAX 1024
+#endif
+
+#ifndef S_IXOTH
+# define S_IXOTH 0
+#endif
+#ifndef S_IXGRP
+# define S_IXGRP 0
+#endif
+
+#ifdef _MSC_VER
+# define S_IXUSR _S_IEXEC
+# define stat _stat
+# ifndef _INTPTR_T_DEFINED
+# define intptr_t int
+# endif
+#endif
+
+#ifndef DIR_SEPARATOR
+# define DIR_SEPARATOR '/'
+# define PATH_SEPARATOR ':'
+#endif
+
+#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
+ defined (__OS2__)
+# define HAVE_DOS_BASED_FILE_SYSTEM
+# define FOPEN_WB "wb"
+# ifndef DIR_SEPARATOR_2
+# define DIR_SEPARATOR_2 '\\'
+# endif
+# ifndef PATH_SEPARATOR_2
+# define PATH_SEPARATOR_2 ';'
+# endif
+#endif
+
+#ifndef DIR_SEPARATOR_2
+# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
+#else /* DIR_SEPARATOR_2 */
+# define IS_DIR_SEPARATOR(ch) \
+ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
+#endif /* DIR_SEPARATOR_2 */
+
+#ifndef PATH_SEPARATOR_2
+# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
+#else /* PATH_SEPARATOR_2 */
+# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
+#endif /* PATH_SEPARATOR_2 */
+
+#ifdef __CYGWIN__
+# define FOPEN_WB "wb"
+#endif
+
+#ifndef FOPEN_WB
+# define FOPEN_WB "w"
+#endif
+#ifndef _O_BINARY
+# define _O_BINARY 0
+#endif
+
+#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type)))
+#define XFREE(stale) do { \
+ if (stale) { free ((void *) stale); stale = 0; } \
+} while (0)
+
+#undef LTWRAPPER_DEBUGPRINTF
+#if defined DEBUGWRAPPER
+# define LTWRAPPER_DEBUGPRINTF(args) ltwrapper_debugprintf args
+static void
+ltwrapper_debugprintf (const char *fmt, ...)
+{
+ va_list args;
+ va_start (args, fmt);
+ (void) vfprintf (stderr, fmt, args);
+ va_end (args);
+}
+#else
+# define LTWRAPPER_DEBUGPRINTF(args)
+#endif
+
+const char *program_name = NULL;
+
+void *xmalloc (size_t num);
+char *xstrdup (const char *string);
+const char *base_name (const char *name);
+char *find_executable (const char *wrapper);
+char *chase_symlinks (const char *pathspec);
+int make_executable (const char *path);
+int check_executable (const char *path);
+char *strendzap (char *str, const char *pat);
+void lt_fatal (const char *message, ...);
+void lt_setenv (const char *name, const char *value);
+char *lt_extend_str (const char *orig_value, const char *add, int to_end);
+void lt_opt_process_env_set (const char *arg);
+void lt_opt_process_env_prepend (const char *arg);
+void lt_opt_process_env_append (const char *arg);
+int lt_split_name_value (const char *arg, char** name, char** value);
+void lt_update_exe_path (const char *name, const char *value);
+void lt_update_lib_path (const char *name, const char *value);
+
+static const char *script_text_part1 =
+EOF
+
+ func_emit_wrapper_part1 yes |
+ $SED -e 's/\([\\"]\)/\\\1/g' \
+ -e 's/^/ "/' -e 's/$/\\n"/'
+ echo ";"
+ cat <<EOF
+
+static const char *script_text_part2 =
+EOF
+ func_emit_wrapper_part2 yes |
+ $SED -e 's/\([\\"]\)/\\\1/g' \
+ -e 's/^/ "/' -e 's/$/\\n"/'
+ echo ";"
+
+ cat <<EOF
+const char * MAGIC_EXE = "$magic_exe";
+const char * LIB_PATH_VARNAME = "$shlibpath_var";
+EOF
+
+ if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+ func_to_host_pathlist "$temp_rpath"
+ cat <<EOF
+const char * LIB_PATH_VALUE = "$func_to_host_pathlist_result";
+EOF
+ else
+ cat <<"EOF"
+const char * LIB_PATH_VALUE = "";
+EOF
+ fi
+
+ if test -n "$dllsearchpath"; then
+ func_to_host_pathlist "$dllsearchpath:"
+ cat <<EOF
+const char * EXE_PATH_VARNAME = "PATH";
+const char * EXE_PATH_VALUE = "$func_to_host_pathlist_result";
+EOF
+ else
+ cat <<"EOF"
+const char * EXE_PATH_VARNAME = "";
+const char * EXE_PATH_VALUE = "";
+EOF
+ fi
+
+ if test "$fast_install" = yes; then
+ cat <<EOF
+const char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
+EOF
+ else
+ cat <<EOF
+const char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
+EOF
+ fi
+
+
+ cat <<"EOF"
+
+#define LTWRAPPER_OPTION_PREFIX "--lt-"
+#define LTWRAPPER_OPTION_PREFIX_LENGTH 5
+
+static const size_t opt_prefix_len = LTWRAPPER_OPTION_PREFIX_LENGTH;
+static const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
+
+static const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script";
+
+static const size_t env_set_opt_len = LTWRAPPER_OPTION_PREFIX_LENGTH + 7;
+static const char *env_set_opt = LTWRAPPER_OPTION_PREFIX "env-set";
+ /* argument is putenv-style "foo=bar", value of foo is set to bar */
+
+static const size_t env_prepend_opt_len = LTWRAPPER_OPTION_PREFIX_LENGTH + 11;
+static const char *env_prepend_opt = LTWRAPPER_OPTION_PREFIX "env-prepend";
+ /* argument is putenv-style "foo=bar", new value of foo is bar${foo} */
+
+static const size_t env_append_opt_len = LTWRAPPER_OPTION_PREFIX_LENGTH + 10;
+static const char *env_append_opt = LTWRAPPER_OPTION_PREFIX "env-append";
+ /* argument is putenv-style "foo=bar", new value of foo is ${foo}bar */
+
+int
+main (int argc, char *argv[])
+{
+ char **newargz;
+ int newargc;
+ char *tmp_pathspec;
+ char *actual_cwrapper_path;
+ char *actual_cwrapper_name;
+ char *target_name;
+ char *lt_argv_zero;
+ intptr_t rval = 127;
+
+ int i;
+
+ program_name = (char *) xstrdup (base_name (argv[0]));
+ LTWRAPPER_DEBUGPRINTF (("(main) argv[0] : %s\n", argv[0]));
+ LTWRAPPER_DEBUGPRINTF (("(main) program_name : %s\n", program_name));
+
+ /* very simple arg parsing; don't want to rely on getopt */
+ for (i = 1; i < argc; i++)
+ {
+ if (strcmp (argv[i], dumpscript_opt) == 0)
+ {
+EOF
+ case "$host" in
+ *mingw* | *cygwin* )
+ # make stdout use "unix" line endings
+ echo " setmode(1,_O_BINARY);"
+ ;;
+ esac
+
+ cat <<"EOF"
+ printf ("%s", script_text_part1);
+ printf ("%s", script_text_part2);
+ return 0;
+ }
+ }
+
+ newargz = XMALLOC (char *, argc + 1);
+ tmp_pathspec = find_executable (argv[0]);
+ if (tmp_pathspec == NULL)
+ lt_fatal ("Couldn't find %s", argv[0]);
+ LTWRAPPER_DEBUGPRINTF (("(main) found exe (before symlink chase) at : %s\n",
+ tmp_pathspec));
+
+ actual_cwrapper_path = chase_symlinks (tmp_pathspec);
+ LTWRAPPER_DEBUGPRINTF (("(main) found exe (after symlink chase) at : %s\n",
+ actual_cwrapper_path));
+ XFREE (tmp_pathspec);
+
+ actual_cwrapper_name = xstrdup( base_name (actual_cwrapper_path));
+ strendzap (actual_cwrapper_path, actual_cwrapper_name);
+
+ /* wrapper name transforms */
+ strendzap (actual_cwrapper_name, ".exe");
+ tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
+ XFREE (actual_cwrapper_name);
+ actual_cwrapper_name = tmp_pathspec;
+ tmp_pathspec = 0;
+
+ /* target_name transforms -- use actual target program name; might have lt- prefix */
+ target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
+ strendzap (target_name, ".exe");
+ tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
+ XFREE (target_name);
+ target_name = tmp_pathspec;
+ tmp_pathspec = 0;
+
+ LTWRAPPER_DEBUGPRINTF (("(main) libtool target name: %s\n",
+ target_name));
+EOF
+
+ cat <<EOF
+ newargz[0] =
+ XMALLOC (char, (strlen (actual_cwrapper_path) +
+ strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
+ strcpy (newargz[0], actual_cwrapper_path);
+ strcat (newargz[0], "$objdir");
+ strcat (newargz[0], "/");
+EOF
+
+ cat <<"EOF"
+ /* stop here, and copy so we don't have to do this twice */
+ tmp_pathspec = xstrdup (newargz[0]);
+
+ /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
+ strcat (newargz[0], actual_cwrapper_name);
+
+ /* DO want the lt- prefix here if it exists, so use target_name */
+ lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
+ XFREE (tmp_pathspec);
+ tmp_pathspec = NULL;
+EOF
+
+ case $host_os in
+ mingw*)
+ cat <<"EOF"
+ {
+ char* p;
+ while ((p = strchr (newargz[0], '\\')) != NULL)
+ {
+ *p = '/';
+ }
+ while ((p = strchr (lt_argv_zero, '\\')) != NULL)
+ {
+ *p = '/';
+ }
+ }
+EOF
+ ;;
+ esac
+
+ cat <<"EOF"
+ XFREE (target_name);
+ XFREE (actual_cwrapper_path);
+ XFREE (actual_cwrapper_name);
+
+ lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
+ lt_setenv ("DUALCASE", "1"); /* for MSK sh */
+ lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
+ lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
+
+ newargc=0;
+ for (i = 1; i < argc; i++)
+ {
+ if (strncmp (argv[i], env_set_opt, env_set_opt_len) == 0)
+ {
+ if (argv[i][env_set_opt_len] == '=')
+ {
+ const char *p = argv[i] + env_set_opt_len + 1;
+ lt_opt_process_env_set (p);
+ }
+ else if (argv[i][env_set_opt_len] == '\0' && i + 1 < argc)
+ {
+ lt_opt_process_env_set (argv[++i]); /* don't copy */
+ }
+ else
+ lt_fatal ("%s missing required argument", env_set_opt);
+ continue;
+ }
+ if (strncmp (argv[i], env_prepend_opt, env_prepend_opt_len) == 0)
+ {
+ if (argv[i][env_prepend_opt_len] == '=')
+ {
+ const char *p = argv[i] + env_prepend_opt_len + 1;
+ lt_opt_process_env_prepend (p);
+ }
+ else if (argv[i][env_prepend_opt_len] == '\0' && i + 1 < argc)
+ {
+ lt_opt_process_env_prepend (argv[++i]); /* don't copy */
+ }
+ else
+ lt_fatal ("%s missing required argument", env_prepend_opt);
+ continue;
+ }
+ if (strncmp (argv[i], env_append_opt, env_append_opt_len) == 0)
+ {
+ if (argv[i][env_append_opt_len] == '=')
+ {
+ const char *p = argv[i] + env_append_opt_len + 1;
+ lt_opt_process_env_append (p);
+ }
+ else if (argv[i][env_append_opt_len] == '\0' && i + 1 < argc)
+ {
+ lt_opt_process_env_append (argv[++i]); /* don't copy */
+ }
+ else
+ lt_fatal ("%s missing required argument", env_append_opt);
+ continue;
+ }
+ if (strncmp (argv[i], ltwrapper_option_prefix, opt_prefix_len) == 0)
+ {
+ /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
+ namespace, but it is not one of the ones we know about and
+ have already dealt with, above (inluding dump-script), then
+ report an error. Otherwise, targets might begin to believe
+ they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
+ namespace. The first time any user complains about this, we'll
+ need to make LTWRAPPER_OPTION_PREFIX a configure-time option
+ or a configure.ac-settable value.
+ */
+ lt_fatal ("Unrecognized option in %s namespace: '%s'",
+ ltwrapper_option_prefix, argv[i]);
+ }
+ /* otherwise ... */
+ newargz[++newargc] = xstrdup (argv[i]);
+ }
+ newargz[++newargc] = NULL;
+
+ LTWRAPPER_DEBUGPRINTF (("(main) lt_argv_zero : %s\n", (lt_argv_zero ? lt_argv_zero : "<NULL>")));
+ for (i = 0; i < newargc; i++)
+ {
+ LTWRAPPER_DEBUGPRINTF (("(main) newargz[%d] : %s\n", i, (newargz[i] ? newargz[i] : "<NULL>")));
+ }
+
+EOF
+
+ case $host_os in
+ mingw*)
+ cat <<"EOF"
+ /* execv doesn't actually work on mingw as expected on unix */
+ rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
+ if (rval == -1)
+ {
+ /* failed to start process */
+ LTWRAPPER_DEBUGPRINTF (("(main) failed to launch target \"%s\": errno = %d\n", lt_argv_zero, errno));
+ return 127;
+ }
+ return rval;
+EOF
+ ;;
+ *)
+ cat <<"EOF"
+ execv (lt_argv_zero, newargz);
+ return rval; /* =127, but avoids unused variable warning */
+EOF
+ ;;
+ esac
+
+ cat <<"EOF"
+}
+
+void *
+xmalloc (size_t num)
+{
+ void *p = (void *) malloc (num);
+ if (!p)
+ lt_fatal ("Memory exhausted");
+
+ return p;
+}
+
+char *
+xstrdup (const char *string)
+{
+ return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
+ string) : NULL;
+}
+
+const char *
+base_name (const char *name)
+{
+ const char *base;
+
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+ /* Skip over the disk name in MSDOS pathnames. */
+ if (isalpha ((unsigned char) name[0]) && name[1] == ':')
+ name += 2;
+#endif
+
+ for (base = name; *name; name++)
+ if (IS_DIR_SEPARATOR (*name))
+ base = name + 1;
+ return base;
+}
+
+int
+check_executable (const char *path)
+{
+ struct stat st;
+
+ LTWRAPPER_DEBUGPRINTF (("(check_executable) : %s\n",
+ path ? (*path ? path : "EMPTY!") : "NULL!"));
+ if ((!path) || (!*path))
+ return 0;
+
+ if ((stat (path, &st) >= 0)
+ && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
+ return 1;
+ else
+ return 0;
+}
+
+int
+make_executable (const char *path)
+{
+ int rval = 0;
+ struct stat st;
+
+ LTWRAPPER_DEBUGPRINTF (("(make_executable) : %s\n",
+ path ? (*path ? path : "EMPTY!") : "NULL!"));
+ if ((!path) || (!*path))
+ return 0;
+
+ if (stat (path, &st) >= 0)
+ {
+ rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
+ }
+ return rval;
+}
+
+/* Searches for the full path of the wrapper. Returns
+ newly allocated full path name if found, NULL otherwise
+ Does not chase symlinks, even on platforms that support them.
+*/
+char *
+find_executable (const char *wrapper)
+{
+ int has_slash = 0;
+ const char *p;
+ const char *p_next;
+ /* static buffer for getcwd */
+ char tmp[LT_PATHMAX + 1];
+ int tmp_len;
+ char *concat_name;
+
+ LTWRAPPER_DEBUGPRINTF (("(find_executable) : %s\n",
+ wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!"));
+
+ if ((wrapper == NULL) || (*wrapper == '\0'))
+ return NULL;
+
+ /* Absolute path? */
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+ if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
+ {
+ concat_name = xstrdup (wrapper);
+ if (check_executable (concat_name))
+ return concat_name;
+ XFREE (concat_name);
+ }
+ else
+ {
+#endif
+ if (IS_DIR_SEPARATOR (wrapper[0]))
+ {
+ concat_name = xstrdup (wrapper);
+ if (check_executable (concat_name))
+ return concat_name;
+ XFREE (concat_name);
+ }
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+ }
+#endif
+
+ for (p = wrapper; *p; p++)
+ if (*p == '/')
+ {
+ has_slash = 1;
+ break;
+ }
+ if (!has_slash)
+ {
+ /* no slashes; search PATH */
+ const char *path = getenv ("PATH");
+ if (path != NULL)
+ {
+ for (p = path; *p; p = p_next)
+ {
+ const char *q;
+ size_t p_len;
+ for (q = p; *q; q++)
+ if (IS_PATH_SEPARATOR (*q))
+ break;
+ p_len = q - p;
+ p_next = (*q == '\0' ? q : q + 1);
+ if (p_len == 0)
+ {
+ /* empty path: current directory */
+ if (getcwd (tmp, LT_PATHMAX) == NULL)
+ lt_fatal ("getcwd failed");
+ tmp_len = strlen (tmp);
+ concat_name =
+ XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
+ memcpy (concat_name, tmp, tmp_len);
+ concat_name[tmp_len] = '/';
+ strcpy (concat_name + tmp_len + 1, wrapper);
+ }
+ else
+ {
+ concat_name =
+ XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
+ memcpy (concat_name, p, p_len);
+ concat_name[p_len] = '/';
+ strcpy (concat_name + p_len + 1, wrapper);
+ }
+ if (check_executable (concat_name))
+ return concat_name;
+ XFREE (concat_name);
+ }
+ }
+ /* not found in PATH; assume curdir */
+ }
+ /* Relative path | not found in path: prepend cwd */
+ if (getcwd (tmp, LT_PATHMAX) == NULL)
+ lt_fatal ("getcwd failed");
+ tmp_len = strlen (tmp);
+ concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
+ memcpy (concat_name, tmp, tmp_len);
+ concat_name[tmp_len] = '/';
+ strcpy (concat_name + tmp_len + 1, wrapper);
+
+ if (check_executable (concat_name))
+ return concat_name;
+ XFREE (concat_name);
+ return NULL;
+}
+
+char *
+chase_symlinks (const char *pathspec)
+{
+#ifndef S_ISLNK
+ return xstrdup (pathspec);
+#else
+ char buf[LT_PATHMAX];
+ struct stat s;
+ char *tmp_pathspec = xstrdup (pathspec);
+ char *p;
+ int has_symlinks = 0;
+ while (strlen (tmp_pathspec) && !has_symlinks)
+ {
+ LTWRAPPER_DEBUGPRINTF (("checking path component for symlinks: %s\n",
+ tmp_pathspec));
+ if (lstat (tmp_pathspec, &s) == 0)
+ {
+ if (S_ISLNK (s.st_mode) != 0)
+ {
+ has_symlinks = 1;
+ break;
+ }
+
+ /* search backwards for last DIR_SEPARATOR */
+ p = tmp_pathspec + strlen (tmp_pathspec) - 1;
+ while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
+ p--;
+ if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
+ {
+ /* no more DIR_SEPARATORS left */
+ break;
+ }
+ *p = '\0';
+ }
+ else
+ {
+ char *errstr = strerror (errno);
+ lt_fatal ("Error accessing file %s (%s)", tmp_pathspec, errstr);
+ }
+ }
+ XFREE (tmp_pathspec);
+
+ if (!has_symlinks)
+ {
+ return xstrdup (pathspec);
+ }
+
+ tmp_pathspec = realpath (pathspec, buf);
+ if (tmp_pathspec == 0)
+ {
+ lt_fatal ("Could not follow symlinks for %s", pathspec);
+ }
+ return xstrdup (tmp_pathspec);
+#endif
+}
+
+char *
+strendzap (char *str, const char *pat)
+{
+ size_t len, patlen;
+
+ assert (str != NULL);
+ assert (pat != NULL);
+
+ len = strlen (str);
+ patlen = strlen (pat);
+
+ if (patlen <= len)
+ {
+ str += len - patlen;
+ if (strcmp (str, pat) == 0)
+ *str = '\0';
+ }
+ return str;
+}
+
+static void
+lt_error_core (int exit_status, const char *mode,
+ const char *message, va_list ap)
+{
+ fprintf (stderr, "%s: %s: ", program_name, mode);
+ vfprintf (stderr, message, ap);
+ fprintf (stderr, ".\n");
+
+ if (exit_status >= 0)
+ exit (exit_status);
+}
+
+void
+lt_fatal (const char *message, ...)
+{
+ va_list ap;
+ va_start (ap, message);
+ lt_error_core (EXIT_FAILURE, "FATAL", message, ap);
+ va_end (ap);
+}
+
+void
+lt_setenv (const char *name, const char *value)
+{
+ LTWRAPPER_DEBUGPRINTF (("(lt_setenv) setting '%s' to '%s'\n",
+ (name ? name : "<NULL>"),
+ (value ? value : "<NULL>")));
+ {
+#ifdef HAVE_SETENV
+ /* always make a copy, for consistency with !HAVE_SETENV */
+ char *str = xstrdup (value);
+ setenv (name, str, 1);
+#else
+ int len = strlen (name) + 1 + strlen (value) + 1;
+ char *str = XMALLOC (char, len);
+ sprintf (str, "%s=%s", name, value);
+ if (putenv (str) != EXIT_SUCCESS)
+ {
+ XFREE (str);
+ }
+#endif
+ }
+}
+
+char *
+lt_extend_str (const char *orig_value, const char *add, int to_end)
+{
+ char *new_value;
+ if (orig_value && *orig_value)
+ {
+ int orig_value_len = strlen (orig_value);
+ int add_len = strlen (add);
+ new_value = XMALLOC (char, add_len + orig_value_len + 1);
+ if (to_end)
+ {
+ strcpy (new_value, orig_value);
+ strcpy (new_value + orig_value_len, add);
+ }
+ else
+ {
+ strcpy (new_value, add);
+ strcpy (new_value + add_len, orig_value);
+ }
+ }
+ else
+ {
+ new_value = xstrdup (add);
+ }
+ return new_value;
+}
+
+int
+lt_split_name_value (const char *arg, char** name, char** value)
+{
+ const char *p;
+ int len;
+ if (!arg || !*arg)
+ return 1;
+
+ p = strchr (arg, (int)'=');
+
+ if (!p)
+ return 1;
+
+ *value = xstrdup (++p);
+
+ len = strlen (arg) - strlen (*value);
+ *name = XMALLOC (char, len);
+ strncpy (*name, arg, len-1);
+ (*name)[len - 1] = '\0';
+
+ return 0;
+}
+
+void
+lt_opt_process_env_set (const char *arg)
+{
+ char *name = NULL;
+ char *value = NULL;
+
+ if (lt_split_name_value (arg, &name, &value) != 0)
+ {
+ XFREE (name);
+ XFREE (value);
+ lt_fatal ("bad argument for %s: '%s'", env_set_opt, arg);
+ }
+
+ lt_setenv (name, value);
+ XFREE (name);
+ XFREE (value);
+}
+
+void
+lt_opt_process_env_prepend (const char *arg)
+{
+ char *name = NULL;
+ char *value = NULL;
+ char *new_value = NULL;
+
+ if (lt_split_name_value (arg, &name, &value) != 0)
+ {
+ XFREE (name);
+ XFREE (value);
+ lt_fatal ("bad argument for %s: '%s'", env_prepend_opt, arg);
+ }
+
+ new_value = lt_extend_str (getenv (name), value, 0);
+ lt_setenv (name, new_value);
+ XFREE (new_value);
+ XFREE (name);
+ XFREE (value);
+}
+
+void
+lt_opt_process_env_append (const char *arg)
+{
+ char *name = NULL;
+ char *value = NULL;
+ char *new_value = NULL;
+
+ if (lt_split_name_value (arg, &name, &value) != 0)
+ {
+ XFREE (name);
+ XFREE (value);
+ lt_fatal ("bad argument for %s: '%s'", env_append_opt, arg);
+ }
+
+ new_value = lt_extend_str (getenv (name), value, 1);
+ lt_setenv (name, new_value);
+ XFREE (new_value);
+ XFREE (name);
+ XFREE (value);
+}
+
+void
+lt_update_exe_path (const char *name, const char *value)
+{
+ LTWRAPPER_DEBUGPRINTF (("(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
+ (name ? name : "<NULL>"),
+ (value ? value : "<NULL>")));
+
+ if (name && *name && value && *value)
+ {
+ char *new_value = lt_extend_str (getenv (name), value, 0);
+ /* some systems can't cope with a ':'-terminated path #' */
+ int len = strlen (new_value);
+ while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
+ {
+ new_value[len-1] = '\0';
+ }
+ lt_setenv (name, new_value);
+ XFREE (new_value);
+ }
+}
+
+void
+lt_update_lib_path (const char *name, const char *value)
+{
+ LTWRAPPER_DEBUGPRINTF (("(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
+ (name ? name : "<NULL>"),
+ (value ? value : "<NULL>")));
+
+ if (name && *name && value && *value)
+ {
+ char *new_value = lt_extend_str (getenv (name), value, 0);
+ lt_setenv (name, new_value);
+ XFREE (new_value);
+ }
+}
+
+
+EOF
+}
+# end: func_emit_cwrapperexe_src
+
+# func_mode_link arg...
+func_mode_link ()
+{
+ $opt_debug
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+ # It is impossible to link a dll without this setting, and
+ # we shouldn't force the makefile maintainer to figure out
+ # which system we are compiling for in order to pass an extra
+ # flag for every libtool invocation.
+ # allow_undefined=no
+
+ # FIXME: Unfortunately, there are problems with the above when trying
+ # to make a dll which has undefined symbols, in which case not
+ # even a static library is built. For now, we need to specify
+ # -no-undefined on the libtool link line when we can be certain
+ # that all symbols are satisfied, otherwise we get a static library.
+ allow_undefined=yes
+ ;;
+ *)
+ allow_undefined=yes
+ ;;
+ esac
+ libtool_args=$nonopt
+ base_compile="$nonopt $@"
+ compile_command=$nonopt
+ finalize_command=$nonopt
+
+ compile_rpath=
+ finalize_rpath=
+ compile_shlibpath=
+ finalize_shlibpath=
+ convenience=
+ old_convenience=
+ deplibs=
+ old_deplibs=
+ compiler_flags=
+ linker_flags=
+ dllsearchpath=
+ lib_search_path=`pwd`
+ inst_prefix_dir=
+ new_inherited_linker_flags=
+
+ avoid_version=no
+ dlfiles=
+ dlprefiles=
+ dlself=no
+ export_dynamic=no
+ export_symbols=
+ export_symbols_regex=
+ generated=
+ libobjs=
+ ltlibs=
+ module=no
+ no_install=no
+ objs=
+ non_pic_objects=
+ precious_files_regex=
+ prefer_static_libs=no
+ preload=no
+ prev=
+ prevarg=
+ release=
+ rpath=
+ xrpath=
+ perm_rpath=
+ temp_rpath=
+ thread_safe=no
+ vinfo=
+ vinfo_number=no
+ weak_libs=
+ single_module="${wl}-single_module"
+ func_infer_tag $base_compile
+
+ # We need to know -static, to get the right output filenames.
+ for arg
+ do
+ case $arg in
+ -shared)
+ test "$build_libtool_libs" != yes && \
+ func_fatal_configuration "can not build a shared library"
+ build_old_libs=no
+ break
+ ;;
+ -all-static | -static | -static-libtool-libs)
+ case $arg in
+ -all-static)
+ if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
+ func_warning "complete static linking is impossible in this configuration"
+ fi
+ if test -n "$link_static_flag"; then
+ dlopen_self=$dlopen_self_static
+ fi
+ prefer_static_libs=yes
+ ;;
+ -static)
+ if test -z "$pic_flag" && test -n "$link_static_flag"; then
+ dlopen_self=$dlopen_self_static
+ fi
+ prefer_static_libs=built
+ ;;
+ -static-libtool-libs)
+ if test -z "$pic_flag" && test -n "$link_static_flag"; then
+ dlopen_self=$dlopen_self_static
+ fi
+ prefer_static_libs=yes
+ ;;
+ esac
+ build_libtool_libs=no
+ build_old_libs=yes
+ break
+ ;;
+ esac
+ done
+
+ # See if our shared archives depend on static archives.
+ test -n "$old_archive_from_new_cmds" && build_old_libs=yes
+
+ # Go through the arguments, transforming them on the way.
+ while test "$#" -gt 0; do
+ arg="$1"
+ shift
+ func_quote_for_eval "$arg"
+ qarg=$func_quote_for_eval_unquoted_result
+ func_append libtool_args " $func_quote_for_eval_result"
+
+ # If the previous option needs an argument, assign it.
+ if test -n "$prev"; then
+ case $prev in
+ output)
+ func_append compile_command " @OUTPUT@"
+ func_append finalize_command " @OUTPUT@"
+ ;;
+ esac
+
+ case $prev in
+ dlfiles|dlprefiles)
+ if test "$preload" = no; then
+ # Add the symbol object into the linking commands.
+ func_append compile_command " @SYMFILE@"
+ func_append finalize_command " @SYMFILE@"
+ preload=yes
+ fi
+ case $arg in
+ *.la | *.lo) ;; # We handle these cases below.
+ force)
+ if test "$dlself" = no; then
+ dlself=needless
+ export_dynamic=yes
+ fi
+ prev=
+ continue
+ ;;
+ self)
+ if test "$prev" = dlprefiles; then
+ dlself=yes
+ elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
+ dlself=yes
+ else
+ dlself=needless
+ export_dynamic=yes
+ fi
+ prev=
+ continue
+ ;;
+ *)
+ if test "$prev" = dlfiles; then
+ dlfiles="$dlfiles $arg"
+ else
+ dlprefiles="$dlprefiles $arg"
+ fi
+ prev=
+ continue
+ ;;
+ esac
+ ;;
+ expsyms)
+ export_symbols="$arg"
+ test -f "$arg" \
+ || func_fatal_error "symbol file \`$arg' does not exist"
+ prev=
+ continue
+ ;;
+ expsyms_regex)
+ export_symbols_regex="$arg"
+ prev=
+ continue
+ ;;
+ framework)
+ case $host in
+ *-*-darwin*)
+ case "$deplibs " in
+ *" $qarg.ltframework "*) ;;
+ *) deplibs="$deplibs $qarg.ltframework" # this is fixed later
+ ;;
+ esac
+ ;;
+ esac
+ prev=
+ continue
+ ;;
+ inst_prefix)
+ inst_prefix_dir="$arg"
+ prev=
+ continue
+ ;;
+ objectlist)
+ if test -f "$arg"; then
+ save_arg=$arg
+ moreargs=
+ for fil in `cat "$save_arg"`
+ do
+# moreargs="$moreargs $fil"
+ arg=$fil
+ # A libtool-controlled object.
+
+ # Check to see that this really is a libtool object.
+ if func_lalib_unsafe_p "$arg"; then
+ pic_object=
+ non_pic_object=
+
+ # Read the .lo file
+ func_source "$arg"
+
+ if test -z "$pic_object" ||
+ test -z "$non_pic_object" ||
+ test "$pic_object" = none &&
+ test "$non_pic_object" = none; then
+ func_fatal_error "cannot find name of object for \`$arg'"
+ fi
+
+ # Extract subdirectory from the argument.
+ func_dirname "$arg" "/" ""
+ xdir="$func_dirname_result"
+
+ if test "$pic_object" != none; then
+ # Prepend the subdirectory the object is found in.
+ pic_object="$xdir$pic_object"
+
+ if test "$prev" = dlfiles; then
+ if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
+ dlfiles="$dlfiles $pic_object"
+ prev=
+ continue
+ else
+ # If libtool objects are unsupported, then we need to preload.
+ prev=dlprefiles
+ fi
+ fi
+
+ # CHECK ME: I think I busted this. -Ossama
+ if test "$prev" = dlprefiles; then
+ # Preload the old-style object.
+ dlprefiles="$dlprefiles $pic_object"
+ prev=
+ fi
+
+ # A PIC object.
+ func_append libobjs " $pic_object"
+ arg="$pic_object"
+ fi
+
+ # Non-PIC object.
+ if test "$non_pic_object" != none; then
+ # Prepend the subdirectory the object is found in.
+ non_pic_object="$xdir$non_pic_object"
+
+ # A standard non-PIC object
+ func_append non_pic_objects " $non_pic_object"
+ if test -z "$pic_object" || test "$pic_object" = none ; then
+ arg="$non_pic_object"
+ fi
+ else
+ # If the PIC object exists, use it instead.
+ # $xdir was prepended to $pic_object above.
+ non_pic_object="$pic_object"
+ func_append non_pic_objects " $non_pic_object"
+ fi
+ else
+ # Only an error if not doing a dry-run.
+ if $opt_dry_run; then
+ # Extract subdirectory from the argument.
+ func_dirname "$arg" "/" ""
+ xdir="$func_dirname_result"
+
+ func_lo2o "$arg"
+ pic_object=$xdir$objdir/$func_lo2o_result
+ non_pic_object=$xdir$func_lo2o_result
+ func_append libobjs " $pic_object"
+ func_append non_pic_objects " $non_pic_object"
+ else
+ func_fatal_error "\`$arg' is not a valid libtool object"
+ fi
+ fi
+ done
+ else
+ func_fatal_error "link input file \`$arg' does not exist"
+ fi
+ arg=$save_arg
+ prev=
+ continue
+ ;;
+ precious_regex)
+ precious_files_regex="$arg"
+ prev=
+ continue
+ ;;
+ release)
+ release="-$arg"
+ prev=
+ continue
+ ;;
+ rpath | xrpath)
+ # We need an absolute path.
+ case $arg in
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
+ *)
+ func_fatal_error "only absolute run-paths are allowed"
+ ;;
+ esac
+ if test "$prev" = rpath; then
+ case "$rpath " in
+ *" $arg "*) ;;
+ *) rpath="$rpath $arg" ;;
+ esac
+ else
+ case "$xrpath " in
+ *" $arg "*) ;;
+ *) xrpath="$xrpath $arg" ;;
+ esac
+ fi
+ prev=
+ continue
+ ;;
+ shrext)
+ shrext_cmds="$arg"
+ prev=
+ continue
+ ;;
+ weak)
+ weak_libs="$weak_libs $arg"
+ prev=
+ continue
+ ;;
+ xcclinker)
+ linker_flags="$linker_flags $qarg"
+ compiler_flags="$compiler_flags $qarg"
+ prev=
+ func_append compile_command " $qarg"
+ func_append finalize_command " $qarg"
+ continue
+ ;;
+ xcompiler)
+ compiler_flags="$compiler_flags $qarg"
+ prev=
+ func_append compile_command " $qarg"
+ func_append finalize_command " $qarg"
+ continue
+ ;;
+ xlinker)
+ linker_flags="$linker_flags $qarg"
+ compiler_flags="$compiler_flags $wl$qarg"
+ prev=
+ func_append compile_command " $wl$qarg"
+ func_append finalize_command " $wl$qarg"
+ continue
+ ;;
+ *)
+ eval "$prev=\"\$arg\""
+ prev=
+ continue
+ ;;
+ esac
+ fi # test -n "$prev"
+
+ prevarg="$arg"
+
+ case $arg in
+ -all-static)
+ if test -n "$link_static_flag"; then
+ # See comment for -static flag below, for more details.
+ func_append compile_command " $link_static_flag"
+ func_append finalize_command " $link_static_flag"
+ fi
+ continue
+ ;;
+
+ -allow-undefined)
+ # FIXME: remove this flag sometime in the future.
+ func_fatal_error "\`-allow-undefined' must not be used because it is the default"
+ ;;
+
+ -avoid-version)
+ avoid_version=yes
+ continue
+ ;;
+
+ -dlopen)
+ prev=dlfiles
+ continue
+ ;;
+
+ -dlpreopen)
+ prev=dlprefiles
+ continue
+ ;;
+
+ -export-dynamic)
+ export_dynamic=yes
+ continue
+ ;;
+
+ -export-symbols | -export-symbols-regex)
+ if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
+ func_fatal_error "more than one -exported-symbols argument is not allowed"
+ fi
+ if test "X$arg" = "X-export-symbols"; then
+ prev=expsyms
+ else
+ prev=expsyms_regex
+ fi
+ continue
+ ;;
+
+ -framework)
+ prev=framework
+ continue
+ ;;
+
+ -inst-prefix-dir)
+ prev=inst_prefix
+ continue
+ ;;
+
+ # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
+ # so, if we see these flags be careful not to treat them like -L
+ -L[A-Z][A-Z]*:*)
+ case $with_gcc/$host in
+ no/*-*-irix* | /*-*-irix*)
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ ;;
+ esac
+ continue
+ ;;
+
+ -L*)
+ func_stripname '-L' '' "$arg"
+ dir=$func_stripname_result
+ if test -z "$dir"; then
+ if test "$#" -gt 0; then
+ func_fatal_error "require no space between \`-L' and \`$1'"
+ else
+ func_fatal_error "need path for \`-L' option"
+ fi
+ fi
+ # We need an absolute path.
+ case $dir in
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
+ *)
+ absdir=`cd "$dir" && pwd`
+ test -z "$absdir" && \
+ func_fatal_error "cannot determine absolute directory name of \`$dir'"
+ dir="$absdir"
+ ;;
+ esac
+ case "$deplibs " in
+ *" -L$dir "*) ;;
+ *)
+ deplibs="$deplibs -L$dir"
+ lib_search_path="$lib_search_path $dir"
+ ;;
+ esac
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+ testbindir=`$ECHO "X$dir" | $Xsed -e 's*/lib$*/bin*'`
+ case :$dllsearchpath: in
+ *":$dir:"*) ;;
+ ::) dllsearchpath=$dir;;
+ *) dllsearchpath="$dllsearchpath:$dir";;
+ esac
+ case :$dllsearchpath: in
+ *":$testbindir:"*) ;;
+ ::) dllsearchpath=$testbindir;;
+ *) dllsearchpath="$dllsearchpath:$testbindir";;
+ esac
+ ;;
+ esac
+ continue
+ ;;
+
+ -l*)
+ if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc*)
+ # These systems don't actually have a C or math library (as such)
+ continue
+ ;;
+ *-*-os2*)
+ # These systems don't actually have a C library (as such)
+ test "X$arg" = "X-lc" && continue
+ ;;
+ *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+ # Do not include libc due to us having libc/libc_r.
+ test "X$arg" = "X-lc" && continue
+ ;;
+ *-*-rhapsody* | *-*-darwin1.[012])
+ # Rhapsody C and math libraries are in the System framework
+ deplibs="$deplibs System.ltframework"
+ continue
+ ;;
+ *-*-sco3.2v5* | *-*-sco5v6*)
+ # Causes problems with __ctype
+ test "X$arg" = "X-lc" && continue
+ ;;
+ *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
+ # Compiler inserts libc in the correct place for threads to work
+ test "X$arg" = "X-lc" && continue
+ ;;
+ esac
+ elif test "X$arg" = "X-lc_r"; then
+ case $host in
+ *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+ # Do not include libc_r directly, use -pthread flag.
+ continue
+ ;;
+ esac
+ fi
+ deplibs="$deplibs $arg"
+ continue
+ ;;
+
+ -module)
+ module=yes
+ continue
+ ;;
+
+ # Tru64 UNIX uses -model [arg] to determine the layout of C++
+ # classes, name mangling, and exception handling.
+ # Darwin uses the -arch flag to determine output architecture.
+ -model|-arch|-isysroot)
+ compiler_flags="$compiler_flags $arg"
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ prev=xcompiler
+ continue
+ ;;
+
+ -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
+ compiler_flags="$compiler_flags $arg"
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ case "$new_inherited_linker_flags " in
+ *" $arg "*) ;;
+ * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;;
+ esac
+ continue
+ ;;
+
+ -multi_module)
+ single_module="${wl}-multi_module"
+ continue
+ ;;
+
+ -no-fast-install)
+ fast_install=no
+ continue
+ ;;
+
+ -no-install)
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
+ # The PATH hackery in wrapper scripts is required on Windows
+ # and Darwin in order for the loader to find any dlls it needs.
+ func_warning "\`-no-install' is ignored for $host"
+ func_warning "assuming \`-no-fast-install' instead"
+ fast_install=no
+ ;;
+ *) no_install=yes ;;
+ esac
+ continue
+ ;;
+
+ -no-undefined)
+ allow_undefined=no
+ continue
+ ;;
+
+ -objectlist)
+ prev=objectlist
+ continue
+ ;;
+
+ -o) prev=output ;;
+
+ -precious-files-regex)
+ prev=precious_regex
+ continue
+ ;;
+
+ -release)
+ prev=release
+ continue
+ ;;
+
+ -rpath)
+ prev=rpath
+ continue
+ ;;
+
+ -R)
+ prev=xrpath
+ continue
+ ;;
+
+ -R*)
+ func_stripname '-R' '' "$arg"
+ dir=$func_stripname_result
+ # We need an absolute path.
+ case $dir in
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
+ *)
+ func_fatal_error "only absolute run-paths are allowed"
+ ;;
+ esac
+ case "$xrpath " in
+ *" $dir "*) ;;
+ *) xrpath="$xrpath $dir" ;;
+ esac
+ continue
+ ;;
+
+ -shared)
+ # The effects of -shared are defined in a previous loop.
+ continue
+ ;;
+
+ -shrext)
+ prev=shrext
+ continue
+ ;;
+
+ -static | -static-libtool-libs)
+ # The effects of -static are defined in a previous loop.
+ # We used to do the same as -all-static on platforms that
+ # didn't have a PIC flag, but the assumption that the effects
+ # would be equivalent was wrong. It would break on at least
+ # Digital Unix and AIX.
+ continue
+ ;;
+
+ -thread-safe)
+ thread_safe=yes
+ continue
+ ;;
+
+ -version-info)
+ prev=vinfo
+ continue
+ ;;
+
+ -version-number)
+ prev=vinfo
+ vinfo_number=yes
+ continue
+ ;;
+
+ -weak)
+ prev=weak
+ continue
+ ;;
+
+ -Wc,*)
+ func_stripname '-Wc,' '' "$arg"
+ args=$func_stripname_result
+ arg=
+ save_ifs="$IFS"; IFS=','
+ for flag in $args; do
+ IFS="$save_ifs"
+ func_quote_for_eval "$flag"
+ arg="$arg $wl$func_quote_for_eval_result"
+ compiler_flags="$compiler_flags $func_quote_for_eval_result"
+ done
+ IFS="$save_ifs"
+ func_stripname ' ' '' "$arg"
+ arg=$func_stripname_result
+ ;;
+
+ -Wl,*)
+ func_stripname '-Wl,' '' "$arg"
+ args=$func_stripname_result
+ arg=
+ save_ifs="$IFS"; IFS=','
+ for flag in $args; do
+ IFS="$save_ifs"
+ func_quote_for_eval "$flag"
+ arg="$arg $wl$func_quote_for_eval_result"
+ compiler_flags="$compiler_flags $wl$func_quote_for_eval_result"
+ linker_flags="$linker_flags $func_quote_for_eval_result"
+ done
+ IFS="$save_ifs"
+ func_stripname ' ' '' "$arg"
+ arg=$func_stripname_result
+ ;;
+
+ -Xcompiler)
+ prev=xcompiler
+ continue
+ ;;
+
+ -Xlinker)
+ prev=xlinker
+ continue
+ ;;
+
+ -XCClinker)
+ prev=xcclinker
+ continue
+ ;;
+
+ # -msg_* for osf cc
+ -msg_*)
+ func_quote_for_eval "$arg"
+ arg="$func_quote_for_eval_result"
+ ;;
+
+ # -64, -mips[0-9] enable 64-bit mode on the SGI compiler
+ # -r[0-9][0-9]* specifies the processor on the SGI compiler
+ # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler
+ # +DA*, +DD* enable 64-bit mode on the HP compiler
+ # -q* pass through compiler args for the IBM compiler
+ # -m*, -t[45]*, -txscale* pass through architecture-specific
+ # compiler args for GCC
+ # -F/path gives path to uninstalled frameworks, gcc on darwin
+ # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC
+ # @file GCC response files
+ -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
+ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*)
+ func_quote_for_eval "$arg"
+ arg="$func_quote_for_eval_result"
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ compiler_flags="$compiler_flags $arg"
+ continue
+ ;;
+
+ # Some other compiler flag.
+ -* | +*)
+ func_quote_for_eval "$arg"
+ arg="$func_quote_for_eval_result"
+ ;;
+
+ *.$objext)
+ # A standard object.
+ objs="$objs $arg"
+ ;;
+
+ *.lo)
+ # A libtool-controlled object.
+
+ # Check to see that this really is a libtool object.
+ if func_lalib_unsafe_p "$arg"; then
+ pic_object=
+ non_pic_object=
+
+ # Read the .lo file
+ func_source "$arg"
+
+ if test -z "$pic_object" ||
+ test -z "$non_pic_object" ||
+ test "$pic_object" = none &&
+ test "$non_pic_object" = none; then
+ func_fatal_error "cannot find name of object for \`$arg'"
+ fi
+
+ # Extract subdirectory from the argument.
+ func_dirname "$arg" "/" ""
+ xdir="$func_dirname_result"
+
+ if test "$pic_object" != none; then
+ # Prepend the subdirectory the object is found in.
+ pic_object="$xdir$pic_object"
+
+ if test "$prev" = dlfiles; then
+ if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
+ dlfiles="$dlfiles $pic_object"
+ prev=
+ continue
+ else
+ # If libtool objects are unsupported, then we need to preload.
+ prev=dlprefiles
+ fi
+ fi
+
+ # CHECK ME: I think I busted this. -Ossama
+ if test "$prev" = dlprefiles; then
+ # Preload the old-style object.
+ dlprefiles="$dlprefiles $pic_object"
+ prev=
+ fi
+
+ # A PIC object.
+ func_append libobjs " $pic_object"
+ arg="$pic_object"
+ fi
+
+ # Non-PIC object.
+ if test "$non_pic_object" != none; then
+ # Prepend the subdirectory the object is found in.
+ non_pic_object="$xdir$non_pic_object"
+
+ # A standard non-PIC object
+ func_append non_pic_objects " $non_pic_object"
+ if test -z "$pic_object" || test "$pic_object" = none ; then
+ arg="$non_pic_object"
+ fi
+ else
+ # If the PIC object exists, use it instead.
+ # $xdir was prepended to $pic_object above.
+ non_pic_object="$pic_object"
+ func_append non_pic_objects " $non_pic_object"
+ fi
+ else
+ # Only an error if not doing a dry-run.
+ if $opt_dry_run; then
+ # Extract subdirectory from the argument.
+ func_dirname "$arg" "/" ""
+ xdir="$func_dirname_result"
+
+ func_lo2o "$arg"
+ pic_object=$xdir$objdir/$func_lo2o_result
+ non_pic_object=$xdir$func_lo2o_result
+ func_append libobjs " $pic_object"
+ func_append non_pic_objects " $non_pic_object"
+ else
+ func_fatal_error "\`$arg' is not a valid libtool object"
+ fi
+ fi
+ ;;
+
+ *.$libext)
+ # An archive.
+ deplibs="$deplibs $arg"
+ old_deplibs="$old_deplibs $arg"
+ continue
+ ;;
+
+ *.la)
+ # A libtool-controlled library.
+
+ if test "$prev" = dlfiles; then
+ # This library was specified with -dlopen.
+ dlfiles="$dlfiles $arg"
+ prev=
+ elif test "$prev" = dlprefiles; then
+ # The library was specified with -dlpreopen.
+ dlprefiles="$dlprefiles $arg"
+ prev=
+ else
+ deplibs="$deplibs $arg"
+ fi
+ continue
+ ;;
+
+ # Some other compiler argument.
+ *)
+ # Unknown arguments in both finalize_command and compile_command need
+ # to be aesthetically quoted because they are evaled later.
+ func_quote_for_eval "$arg"
+ arg="$func_quote_for_eval_result"
+ ;;
+ esac # arg
+
+ # Now actually substitute the argument into the commands.
+ if test -n "$arg"; then
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ fi
+ done # argument parsing loop
+
+ test -n "$prev" && \
+ func_fatal_help "the \`$prevarg' option requires an argument"
+
+ if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
+ eval arg=\"$export_dynamic_flag_spec\"
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ fi
+
+ oldlibs=
+ # calculate the name of the file, without its directory
+ func_basename "$output"
+ outputname="$func_basename_result"
+ libobjs_save="$libobjs"
+
+ if test -n "$shlibpath_var"; then
+ # get the directories listed in $shlibpath_var
+ eval shlib_search_path=\`\$ECHO \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
+ else
+ shlib_search_path=
+ fi
+ eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
+ eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
+
+ func_dirname "$output" "/" ""
+ output_objdir="$func_dirname_result$objdir"
+ # Create the object directory.
+ func_mkdir_p "$output_objdir"
+
+ # Determine the type of output
+ case $output in
+ "")
+ func_fatal_help "you must specify an output file"
+ ;;
+ *.$libext) linkmode=oldlib ;;
+ *.lo | *.$objext) linkmode=obj ;;
+ *.la) linkmode=lib ;;
+ *) linkmode=prog ;; # Anything else should be a program.
+ esac
+
+ specialdeplibs=
+
+ libs=
+ # Find all interdependent deplibs by searching for libraries
+ # that are linked more than once (e.g. -la -lb -la)
+ for deplib in $deplibs; do
+ if $opt_duplicate_deps ; then
+ case "$libs " in
+ *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+ esac
+ fi
+ libs="$libs $deplib"
+ done
+
+ if test "$linkmode" = lib; then
+ libs="$predeps $libs $compiler_lib_search_path $postdeps"
+
+ # Compute libraries that are listed more than once in $predeps
+ # $postdeps and mark them as special (i.e., whose duplicates are
+ # not to be eliminated).
+ pre_post_deps=
+ if $opt_duplicate_compiler_generated_deps; then
+ for pre_post_dep in $predeps $postdeps; do
+ case "$pre_post_deps " in
+ *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;;
+ esac
+ pre_post_deps="$pre_post_deps $pre_post_dep"
+ done
+ fi
+ pre_post_deps=
+ fi
+
+ deplibs=
+ newdependency_libs=
+ newlib_search_path=
+ need_relink=no # whether we're linking any uninstalled libtool libraries
+ notinst_deplibs= # not-installed libtool libraries
+ notinst_path= # paths that contain not-installed libtool libraries
+
+ case $linkmode in
+ lib)
+ passes="conv dlpreopen link"
+ for file in $dlfiles $dlprefiles; do
+ case $file in
+ *.la) ;;
+ *)
+ func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file"
+ ;;
+ esac
+ done
+ ;;
+ prog)
+ compile_deplibs=
+ finalize_deplibs=
+ alldeplibs=no
+ newdlfiles=
+ newdlprefiles=
+ passes="conv scan dlopen dlpreopen link"
+ ;;
+ *) passes="conv"
+ ;;
+ esac
+
+ for pass in $passes; do
+ # The preopen pass in lib mode reverses $deplibs; put it back here
+ # so that -L comes before libs that need it for instance...
+ if test "$linkmode,$pass" = "lib,link"; then
+ ## FIXME: Find the place where the list is rebuilt in the wrong
+ ## order, and fix it there properly
+ tmp_deplibs=
+ for deplib in $deplibs; do
+ tmp_deplibs="$deplib $tmp_deplibs"
+ done
+ deplibs="$tmp_deplibs"
+ fi
+
+ if test "$linkmode,$pass" = "lib,link" ||
+ test "$linkmode,$pass" = "prog,scan"; then
+ libs="$deplibs"
+ deplibs=
+ fi
+ if test "$linkmode" = prog; then
+ case $pass in
+ dlopen) libs="$dlfiles" ;;
+ dlpreopen) libs="$dlprefiles" ;;
+ link)
+ libs="$deplibs %DEPLIBS%"
+ test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs"
+ ;;
+ esac
+ fi
+ if test "$linkmode,$pass" = "lib,dlpreopen"; then
+ # Collect and forward deplibs of preopened libtool libs
+ for lib in $dlprefiles; do
+ # Ignore non-libtool-libs
+ dependency_libs=
+ case $lib in
+ *.la) func_source "$lib" ;;
+ esac
+
+ # Collect preopened libtool deplibs, except any this library
+ # has declared as weak libs
+ for deplib in $dependency_libs; do
+ deplib_base=`$ECHO "X$deplib" | $Xsed -e "$basename"`
+ case " $weak_libs " in
+ *" $deplib_base "*) ;;
+ *) deplibs="$deplibs $deplib" ;;
+ esac
+ done
+ done
+ libs="$dlprefiles"
+ fi
+ if test "$pass" = dlopen; then
+ # Collect dlpreopened libraries
+ save_deplibs="$deplibs"
+ deplibs=
+ fi
+
+ for deplib in $libs; do
+ lib=
+ found=no
+ case $deplib in
+ -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
+ if test "$linkmode,$pass" = "prog,link"; then
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ compiler_flags="$compiler_flags $deplib"
+ if test "$linkmode" = lib ; then
+ case "$new_inherited_linker_flags " in
+ *" $deplib "*) ;;
+ * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
+ esac
+ fi
+ fi
+ continue
+ ;;
+ -l*)
+ if test "$linkmode" != lib && test "$linkmode" != prog; then
+ func_warning "\`-l' is ignored for archives/objects"
+ continue
+ fi
+ func_stripname '-l' '' "$deplib"
+ name=$func_stripname_result
+ if test "$linkmode" = lib; then
+ searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
+ else
+ searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
+ fi
+ for searchdir in $searchdirs; do
+ for search_ext in .la $std_shrext .so .a; do
+ # Search the libtool library
+ lib="$searchdir/lib${name}${search_ext}"
+ if test -f "$lib"; then
+ if test "$search_ext" = ".la"; then
+ found=yes
+ else
+ found=no
+ fi
+ break 2
+ fi
+ done
+ done
+ if test "$found" != yes; then
+ # deplib doesn't seem to be a libtool library
+ if test "$linkmode,$pass" = "prog,link"; then
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ deplibs="$deplib $deplibs"
+ test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
+ fi
+ continue
+ else # deplib is a libtool library
+ # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
+ # We need to do some special things here, and not later.
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ case " $predeps $postdeps " in
+ *" $deplib "*)
+ if func_lalib_p "$lib"; then
+ library_names=
+ old_library=
+ func_source "$lib"
+ for l in $old_library $library_names; do
+ ll="$l"
+ done
+ if test "X$ll" = "X$old_library" ; then # only static version available
+ found=no
+ func_dirname "$lib" "" "."
+ ladir="$func_dirname_result"
+ lib=$ladir/$old_library
+ if test "$linkmode,$pass" = "prog,link"; then
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ deplibs="$deplib $deplibs"
+ test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
+ fi
+ continue
+ fi
+ fi
+ ;;
+ *) ;;
+ esac
+ fi
+ fi
+ ;; # -l
+ *.ltframework)
+ if test "$linkmode,$pass" = "prog,link"; then
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ deplibs="$deplib $deplibs"
+ if test "$linkmode" = lib ; then
+ case "$new_inherited_linker_flags " in
+ *" $deplib "*) ;;
+ * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
+ esac
+ fi
+ fi
+ continue
+ ;;
+ -L*)
+ case $linkmode in
+ lib)
+ deplibs="$deplib $deplibs"
+ test "$pass" = conv && continue
+ newdependency_libs="$deplib $newdependency_libs"
+ func_stripname '-L' '' "$deplib"
+ newlib_search_path="$newlib_search_path $func_stripname_result"
+ ;;
+ prog)
+ if test "$pass" = conv; then
+ deplibs="$deplib $deplibs"
+ continue
+ fi
+ if test "$pass" = scan; then
+ deplibs="$deplib $deplibs"
+ else
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ fi
+ func_stripname '-L' '' "$deplib"
+ newlib_search_path="$newlib_search_path $func_stripname_result"
+ ;;
+ *)
+ func_warning "\`-L' is ignored for archives/objects"
+ ;;
+ esac # linkmode
+ continue
+ ;; # -L
+ -R*)
+ if test "$pass" = link; then
+ func_stripname '-R' '' "$deplib"
+ dir=$func_stripname_result
+ # Make sure the xrpath contains only unique directories.
+ case "$xrpath " in
+ *" $dir "*) ;;
+ *) xrpath="$xrpath $dir" ;;
+ esac
+ fi
+ deplibs="$deplib $deplibs"
+ continue
+ ;;
+ *.la) lib="$deplib" ;;
+ *.$libext)
+ if test "$pass" = conv; then
+ deplibs="$deplib $deplibs"
+ continue
+ fi
+ case $linkmode in
+ lib)
+ # Linking convenience modules into shared libraries is allowed,
+ # but linking other static libraries is non-portable.
+ case " $dlpreconveniencelibs " in
+ *" $deplib "*) ;;
+ *)
+ valid_a_lib=no
+ case $deplibs_check_method in
+ match_pattern*)
+ set dummy $deplibs_check_method; shift
+ match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+ if eval "\$ECHO \"X$deplib\"" 2>/dev/null | $Xsed -e 10q \
+ | $EGREP "$match_pattern_regex" > /dev/null; then
+ valid_a_lib=yes
+ fi
+ ;;
+ pass_all)
+ valid_a_lib=yes
+ ;;
+ esac
+ if test "$valid_a_lib" != yes; then
+ $ECHO
+ $ECHO "*** Warning: Trying to link with static lib archive $deplib."
+ $ECHO "*** I have the capability to make that library automatically link in when"
+ $ECHO "*** you link to this library. But I can only do this if you have a"
+ $ECHO "*** shared version of the library, which you do not appear to have"
+ $ECHO "*** because the file extensions .$libext of this argument makes me believe"
+ $ECHO "*** that it is just a static archive that I should not use here."
+ else
+ $ECHO
+ $ECHO "*** Warning: Linking the shared library $output against the"
+ $ECHO "*** static library $deplib is not portable!"
+ deplibs="$deplib $deplibs"
+ fi
+ ;;
+ esac
+ continue
+ ;;
+ prog)
+ if test "$pass" != link; then
+ deplibs="$deplib $deplibs"
+ else
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ fi
+ continue
+ ;;
+ esac # linkmode
+ ;; # *.$libext
+ *.lo | *.$objext)
+ if test "$pass" = conv; then
+ deplibs="$deplib $deplibs"
+ elif test "$linkmode" = prog; then
+ if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
+ # If there is no dlopen support or we're linking statically,
+ # we need to preload.
+ newdlprefiles="$newdlprefiles $deplib"
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ newdlfiles="$newdlfiles $deplib"
+ fi
+ fi
+ continue
+ ;;
+ %DEPLIBS%)
+ alldeplibs=yes
+ continue
+ ;;
+ esac # case $deplib
+
+ if test "$found" = yes || test -f "$lib"; then :
+ else
+ func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'"
+ fi
+
+ # Check to see that this really is a libtool archive.
+ func_lalib_unsafe_p "$lib" \
+ || func_fatal_error "\`$lib' is not a valid libtool archive"
+
+ func_dirname "$lib" "" "."
+ ladir="$func_dirname_result"
+
+ dlname=
+ dlopen=
+ dlpreopen=
+ libdir=
+ library_names=
+ old_library=
+ inherited_linker_flags=
+ # If the library was installed with an old release of libtool,
+ # it will not redefine variables installed, or shouldnotlink
+ installed=yes
+ shouldnotlink=no
+ avoidtemprpath=
+
+
+ # Read the .la file
+ func_source "$lib"
+
+ # Convert "-framework foo" to "foo.ltframework"
+ if test -n "$inherited_linker_flags"; then
+ tmp_inherited_linker_flags=`$ECHO "X$inherited_linker_flags" | $Xsed -e 's/-framework \([^ $]*\)/\1.ltframework/g'`
+ for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
+ case " $new_inherited_linker_flags " in
+ *" $tmp_inherited_linker_flag "*) ;;
+ *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";;
+ esac
+ done
+ fi
+ dependency_libs=`$ECHO "X $dependency_libs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+ if test "$linkmode,$pass" = "lib,link" ||
+ test "$linkmode,$pass" = "prog,scan" ||
+ { test "$linkmode" != prog && test "$linkmode" != lib; }; then
+ test -n "$dlopen" && dlfiles="$dlfiles $dlopen"
+ test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
+ fi
+
+ if test "$pass" = conv; then
+ # Only check for convenience libraries
+ deplibs="$lib $deplibs"
+ if test -z "$libdir"; then
+ if test -z "$old_library"; then
+ func_fatal_error "cannot find name of link library for \`$lib'"
+ fi
+ # It is a libtool convenience library, so add in its objects.
+ convenience="$convenience $ladir/$objdir/$old_library"
+ old_convenience="$old_convenience $ladir/$objdir/$old_library"
+ tmp_libs=
+ for deplib in $dependency_libs; do
+ deplibs="$deplib $deplibs"
+ if $opt_duplicate_deps ; then
+ case "$tmp_libs " in
+ *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+ esac
+ fi
+ tmp_libs="$tmp_libs $deplib"
+ done
+ elif test "$linkmode" != prog && test "$linkmode" != lib; then
+ func_fatal_error "\`$lib' is not a convenience library"
+ fi
+ continue
+ fi # $pass = conv
+
+
+ # Get the name of the library we link against.
+ linklib=
+ for l in $old_library $library_names; do
+ linklib="$l"
+ done
+ if test -z "$linklib"; then
+ func_fatal_error "cannot find name of link library for \`$lib'"
+ fi
+
+ # This library was specified with -dlopen.
+ if test "$pass" = dlopen; then
+ if test -z "$libdir"; then
+ func_fatal_error "cannot -dlopen a convenience library: \`$lib'"
+ fi
+ if test -z "$dlname" ||
+ test "$dlopen_support" != yes ||
+ test "$build_libtool_libs" = no; then
+ # If there is no dlname, no dlopen support or we're linking
+ # statically, we need to preload. We also need to preload any
+ # dependent libraries so libltdl's deplib preloader doesn't
+ # bomb out in the load deplibs phase.
+ dlprefiles="$dlprefiles $lib $dependency_libs"
+ else
+ newdlfiles="$newdlfiles $lib"
+ fi
+ continue
+ fi # $pass = dlopen
+
+ # We need an absolute path.
+ case $ladir in
+ [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
+ *)
+ abs_ladir=`cd "$ladir" && pwd`
+ if test -z "$abs_ladir"; then
+ func_warning "cannot determine absolute directory name of \`$ladir'"
+ func_warning "passing it literally to the linker, although it might fail"
+ abs_ladir="$ladir"
+ fi
+ ;;
+ esac
+ func_basename "$lib"
+ laname="$func_basename_result"
+
+ # Find the relevant object directory and library name.
+ if test "X$installed" = Xyes; then
+ if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+ func_warning "library \`$lib' was moved."
+ dir="$ladir"
+ absdir="$abs_ladir"
+ libdir="$abs_ladir"
+ else
+ dir="$libdir"
+ absdir="$libdir"
+ fi
+ test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
+ else
+ if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+ dir="$ladir"
+ absdir="$abs_ladir"
+ # Remove this search path later
+ notinst_path="$notinst_path $abs_ladir"
+ else
+ dir="$ladir/$objdir"
+ absdir="$abs_ladir/$objdir"
+ # Remove this search path later
+ notinst_path="$notinst_path $abs_ladir"
+ fi
+ fi # $installed = yes
+ func_stripname 'lib' '.la' "$laname"
+ name=$func_stripname_result
+
+ # This library was specified with -dlpreopen.
+ if test "$pass" = dlpreopen; then
+ if test -z "$libdir" && test "$linkmode" = prog; then
+ func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'"
+ fi
+ # Prefer using a static library (so that no silly _DYNAMIC symbols
+ # are required to link).
+ if test -n "$old_library"; then
+ newdlprefiles="$newdlprefiles $dir/$old_library"
+ # Keep a list of preopened convenience libraries to check
+ # that they are being used correctly in the link pass.
+ test -z "$libdir" && \
+ dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library"
+ # Otherwise, use the dlname, so that lt_dlopen finds it.
+ elif test -n "$dlname"; then
+ newdlprefiles="$newdlprefiles $dir/$dlname"
+ else
+ newdlprefiles="$newdlprefiles $dir/$linklib"
+ fi
+ fi # $pass = dlpreopen
+
+ if test -z "$libdir"; then
+ # Link the convenience library
+ if test "$linkmode" = lib; then
+ deplibs="$dir/$old_library $deplibs"
+ elif test "$linkmode,$pass" = "prog,link"; then
+ compile_deplibs="$dir/$old_library $compile_deplibs"
+ finalize_deplibs="$dir/$old_library $finalize_deplibs"
+ else
+ deplibs="$lib $deplibs" # used for prog,scan pass
+ fi
+ continue
+ fi
+
+
+ if test "$linkmode" = prog && test "$pass" != link; then
+ newlib_search_path="$newlib_search_path $ladir"
+ deplibs="$lib $deplibs"
+
+ linkalldeplibs=no
+ if test "$link_all_deplibs" != no || test -z "$library_names" ||
+ test "$build_libtool_libs" = no; then
+ linkalldeplibs=yes
+ fi
+
+ tmp_libs=
+ for deplib in $dependency_libs; do
+ case $deplib in
+ -L*) func_stripname '-L' '' "$deplib"
+ newlib_search_path="$newlib_search_path $func_stripname_result"
+ ;;
+ esac
+ # Need to link against all dependency_libs?
+ if test "$linkalldeplibs" = yes; then
+ deplibs="$deplib $deplibs"
+ else
+ # Need to hardcode shared library paths
+ # or/and link against static libraries
+ newdependency_libs="$deplib $newdependency_libs"
+ fi
+ if $opt_duplicate_deps ; then
+ case "$tmp_libs " in
+ *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+ esac
+ fi
+ tmp_libs="$tmp_libs $deplib"
+ done # for deplib
+ continue
+ fi # $linkmode = prog...
+
+ if test "$linkmode,$pass" = "prog,link"; then
+ if test -n "$library_names" &&
+ { { test "$prefer_static_libs" = no ||
+ test "$prefer_static_libs,$installed" = "built,yes"; } ||
+ test -z "$old_library"; }; then
+ # We need to hardcode the library path
+ if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
+ # Make sure the rpath contains only unique directories.
+ case "$temp_rpath:" in
+ *"$absdir:"*) ;;
+ *) temp_rpath="$temp_rpath$absdir:" ;;
+ esac
+ fi
+
+ # Hardcode the library path.
+ # Skip directories that are in the system default run-time
+ # search path.
+ case " $sys_lib_dlsearch_path " in
+ *" $absdir "*) ;;
+ *)
+ case "$compile_rpath " in
+ *" $absdir "*) ;;
+ *) compile_rpath="$compile_rpath $absdir"
+ esac
+ ;;
+ esac
+ case " $sys_lib_dlsearch_path " in
+ *" $libdir "*) ;;
+ *)
+ case "$finalize_rpath " in
+ *" $libdir "*) ;;
+ *) finalize_rpath="$finalize_rpath $libdir"
+ esac
+ ;;
+ esac
+ fi # $linkmode,$pass = prog,link...
+
+ if test "$alldeplibs" = yes &&
+ { test "$deplibs_check_method" = pass_all ||
+ { test "$build_libtool_libs" = yes &&
+ test -n "$library_names"; }; }; then
+ # We only need to search for static libraries
+ continue
+ fi
+ fi
+
+ link_static=no # Whether the deplib will be linked statically
+ use_static_libs=$prefer_static_libs
+ if test "$use_static_libs" = built && test "$installed" = yes; then
+ use_static_libs=no
+ fi
+ if test -n "$library_names" &&
+ { test "$use_static_libs" = no || test -z "$old_library"; }; then
+ case $host in
+ *cygwin* | *mingw* | *cegcc*)
+ # No point in relinking DLLs because paths are not encoded
+ notinst_deplibs="$notinst_deplibs $lib"
+ need_relink=no
+ ;;
+ *)
+ if test "$installed" = no; then
+ notinst_deplibs="$notinst_deplibs $lib"
+ need_relink=yes
+ fi
+ ;;
+ esac
+ # This is a shared library
+
+ # Warn about portability, can't link against -module's on some
+ # systems (darwin). Don't bleat about dlopened modules though!
+ dlopenmodule=""
+ for dlpremoduletest in $dlprefiles; do
+ if test "X$dlpremoduletest" = "X$lib"; then
+ dlopenmodule="$dlpremoduletest"
+ break
+ fi
+ done
+ if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then
+ $ECHO
+ if test "$linkmode" = prog; then
+ $ECHO "*** Warning: Linking the executable $output against the loadable module"
+ else
+ $ECHO "*** Warning: Linking the shared library $output against the loadable module"
+ fi
+ $ECHO "*** $linklib is not portable!"
+ fi
+ if test "$linkmode" = lib &&
+ test "$hardcode_into_libs" = yes; then
+ # Hardcode the library path.
+ # Skip directories that are in the system default run-time
+ # search path.
+ case " $sys_lib_dlsearch_path " in
+ *" $absdir "*) ;;
+ *)
+ case "$compile_rpath " in
+ *" $absdir "*) ;;
+ *) compile_rpath="$compile_rpath $absdir"
+ esac
+ ;;
+ esac
+ case " $sys_lib_dlsearch_path " in
+ *" $libdir "*) ;;
+ *)
+ case "$finalize_rpath " in
+ *" $libdir "*) ;;
+ *) finalize_rpath="$finalize_rpath $libdir"
+ esac
+ ;;
+ esac
+ fi
+
+ if test -n "$old_archive_from_expsyms_cmds"; then
+ # figure out the soname
+ set dummy $library_names
+ shift
+ realname="$1"
+ shift
+ libname=`eval "\\$ECHO \"$libname_spec\""`
+ # use dlname if we got it. it's perfectly good, no?
+ if test -n "$dlname"; then
+ soname="$dlname"
+ elif test -n "$soname_spec"; then
+ # bleh windows
+ case $host in
+ *cygwin* | mingw* | *cegcc*)
+ func_arith $current - $age
+ major=$func_arith_result
+ versuffix="-$major"
+ ;;
+ esac
+ eval soname=\"$soname_spec\"
+ else
+ soname="$realname"
+ fi
+
+ # Make a new name for the extract_expsyms_cmds to use
+ soroot="$soname"
+ func_basename "$soroot"
+ soname="$func_basename_result"
+ func_stripname 'lib' '.dll' "$soname"
+ newlib=libimp-$func_stripname_result.a
+
+ # If the library has no export list, then create one now
+ if test -f "$output_objdir/$soname-def"; then :
+ else
+ func_verbose "extracting exported symbol list from \`$soname'"
+ func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
+ fi
+
+ # Create $newlib
+ if test -f "$output_objdir/$newlib"; then :; else
+ func_verbose "generating import library for \`$soname'"
+ func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
+ fi
+ # make sure the library variables are pointing to the new library
+ dir=$output_objdir
+ linklib=$newlib
+ fi # test -n "$old_archive_from_expsyms_cmds"
+
+ if test "$linkmode" = prog || test "$mode" != relink; then
+ add_shlibpath=
+ add_dir=
+ add=
+ lib_linked=yes
+ case $hardcode_action in
+ immediate | unsupported)
+ if test "$hardcode_direct" = no; then
+ add="$dir/$linklib"
+ case $host in
+ *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;;
+ *-*-sysv4*uw2*) add_dir="-L$dir" ;;
+ *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
+ *-*-unixware7*) add_dir="-L$dir" ;;
+ *-*-darwin* )
+ # if the lib is a (non-dlopened) module then we can not
+ # link against it, someone is ignoring the earlier warnings
+ if /usr/bin/file -L $add 2> /dev/null |
+ $GREP ": [^:]* bundle" >/dev/null ; then
+ if test "X$dlopenmodule" != "X$lib"; then
+ $ECHO "*** Warning: lib $linklib is a module, not a shared library"
+ if test -z "$old_library" ; then
+ $ECHO
+ $ECHO "*** And there doesn't seem to be a static archive available"
+ $ECHO "*** The link will probably fail, sorry"
+ else
+ add="$dir/$old_library"
+ fi
+ elif test -n "$old_library"; then
+ add="$dir/$old_library"
+ fi
+ fi
+ esac
+ elif test "$hardcode_minus_L" = no; then
+ case $host in
+ *-*-sunos*) add_shlibpath="$dir" ;;
+ esac
+ add_dir="-L$dir"
+ add="-l$name"
+ elif test "$hardcode_shlibpath_var" = no; then
+ add_shlibpath="$dir"
+ add="-l$name"
+ else
+ lib_linked=no
+ fi
+ ;;
+ relink)
+ if test "$hardcode_direct" = yes &&
+ test "$hardcode_direct_absolute" = no; then
+ add="$dir/$linklib"
+ elif test "$hardcode_minus_L" = yes; then
+ add_dir="-L$dir"
+ # Try looking first in the location we're being installed to.
+ if test -n "$inst_prefix_dir"; then
+ case $libdir in
+ [\\/]*)
+ add_dir="$add_dir -L$inst_prefix_dir$libdir"
+ ;;
+ esac
+ fi
+ add="-l$name"
+ elif test "$hardcode_shlibpath_var" = yes; then
+ add_shlibpath="$dir"
+ add="-l$name"
+ else
+ lib_linked=no
+ fi
+ ;;
+ *) lib_linked=no ;;
+ esac
+
+ if test "$lib_linked" != yes; then
+ func_fatal_configuration "unsupported hardcode properties"
+ fi
+
+ if test -n "$add_shlibpath"; then
+ case :$compile_shlibpath: in
+ *":$add_shlibpath:"*) ;;
+ *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
+ esac
+ fi
+ if test "$linkmode" = prog; then
+ test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
+ test -n "$add" && compile_deplibs="$add $compile_deplibs"
+ else
+ test -n "$add_dir" && deplibs="$add_dir $deplibs"
+ test -n "$add" && deplibs="$add $deplibs"
+ if test "$hardcode_direct" != yes &&
+ test "$hardcode_minus_L" != yes &&
+ test "$hardcode_shlibpath_var" = yes; then
+ case :$finalize_shlibpath: in
+ *":$libdir:"*) ;;
+ *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
+ esac
+ fi
+ fi
+ fi
+
+ if test "$linkmode" = prog || test "$mode" = relink; then
+ add_shlibpath=
+ add_dir=
+ add=
+ # Finalize command for both is simple: just hardcode it.
+ if test "$hardcode_direct" = yes &&
+ test "$hardcode_direct_absolute" = no; then
+ add="$libdir/$linklib"
+ elif test "$hardcode_minus_L" = yes; then
+ add_dir="-L$libdir"
+ add="-l$name"
+ elif test "$hardcode_shlibpath_var" = yes; then
+ case :$finalize_shlibpath: in
+ *":$libdir:"*) ;;
+ *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
+ esac
+ add="-l$name"
+ elif test "$hardcode_automatic" = yes; then
+ if test -n "$inst_prefix_dir" &&
+ test -f "$inst_prefix_dir$libdir/$linklib" ; then
+ add="$inst_prefix_dir$libdir/$linklib"
+ else
+ add="$libdir/$linklib"
+ fi
+ else
+ # We cannot seem to hardcode it, guess we'll fake it.
+ add_dir="-L$libdir"
+ # Try looking first in the location we're being installed to.
+ if test -n "$inst_prefix_dir"; then
+ case $libdir in
+ [\\/]*)
+ add_dir="$add_dir -L$inst_prefix_dir$libdir"
+ ;;
+ esac
+ fi
+ add="-l$name"
+ fi
+
+ if test "$linkmode" = prog; then
+ test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
+ test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
+ else
+ test -n "$add_dir" && deplibs="$add_dir $deplibs"
+ test -n "$add" && deplibs="$add $deplibs"
+ fi
+ fi
+ elif test "$linkmode" = prog; then
+ # Here we assume that one of hardcode_direct or hardcode_minus_L
+ # is not unsupported. This is valid on all known static and
+ # shared platforms.
+ if test "$hardcode_direct" != unsupported; then
+ test -n "$old_library" && linklib="$old_library"
+ compile_deplibs="$dir/$linklib $compile_deplibs"
+ finalize_deplibs="$dir/$linklib $finalize_deplibs"
+ else
+ compile_deplibs="-l$name -L$dir $compile_deplibs"
+ finalize_deplibs="-l$name -L$dir $finalize_deplibs"
+ fi
+ elif test "$build_libtool_libs" = yes; then
+ # Not a shared library
+ if test "$deplibs_check_method" != pass_all; then
+ # We're trying link a shared library against a static one
+ # but the system doesn't support it.
+
+ # Just print a warning and add the library to dependency_libs so
+ # that the program can be linked against the static library.
+ $ECHO
+ $ECHO "*** Warning: This system can not link to static lib archive $lib."
+ $ECHO "*** I have the capability to make that library automatically link in when"
+ $ECHO "*** you link to this library. But I can only do this if you have a"
+ $ECHO "*** shared version of the library, which you do not appear to have."
+ if test "$module" = yes; then
+ $ECHO "*** But as you try to build a module library, libtool will still create "
+ $ECHO "*** a static module, that should work as long as the dlopening application"
+ $ECHO "*** is linked with the -dlopen flag to resolve symbols at runtime."
+ if test -z "$global_symbol_pipe"; then
+ $ECHO
+ $ECHO "*** However, this would only work if libtool was able to extract symbol"
+ $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could"
+ $ECHO "*** not find such a program. So, this module is probably useless."
+ $ECHO "*** \`nm' from GNU binutils and a full rebuild may help."
+ fi
+ if test "$build_old_libs" = no; then
+ build_libtool_libs=module
+ build_old_libs=yes
+ else
+ build_libtool_libs=no
+ fi
+ fi
+ else
+ deplibs="$dir/$old_library $deplibs"
+ link_static=yes
+ fi
+ fi # link shared/static library?
+
+ if test "$linkmode" = lib; then
+ if test -n "$dependency_libs" &&
+ { test "$hardcode_into_libs" != yes ||
+ test "$build_old_libs" = yes ||
+ test "$link_static" = yes; }; then
+ # Extract -R from dependency_libs
+ temp_deplibs=
+ for libdir in $dependency_libs; do
+ case $libdir in
+ -R*) func_stripname '-R' '' "$libdir"
+ temp_xrpath=$func_stripname_result
+ case " $xrpath " in
+ *" $temp_xrpath "*) ;;
+ *) xrpath="$xrpath $temp_xrpath";;
+ esac;;
+ *) temp_deplibs="$temp_deplibs $libdir";;
+ esac
+ done
+ dependency_libs="$temp_deplibs"
+ fi
+
+ newlib_search_path="$newlib_search_path $absdir"
+ # Link against this library
+ test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
+ # ... and its dependency_libs
+ tmp_libs=
+ for deplib in $dependency_libs; do
+ newdependency_libs="$deplib $newdependency_libs"
+ if $opt_duplicate_deps ; then
+ case "$tmp_libs " in
+ *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+ esac
+ fi
+ tmp_libs="$tmp_libs $deplib"
+ done
+
+ if test "$link_all_deplibs" != no; then
+ # Add the search paths of all dependency libraries
+ for deplib in $dependency_libs; do
+ path=
+ case $deplib in
+ -L*) path="$deplib" ;;
+ *.la)
+ func_dirname "$deplib" "" "."
+ dir="$func_dirname_result"
+ # We need an absolute path.
+ case $dir in
+ [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
+ *)
+ absdir=`cd "$dir" && pwd`
+ if test -z "$absdir"; then
+ func_warning "cannot determine absolute directory name of \`$dir'"
+ absdir="$dir"
+ fi
+ ;;
+ esac
+ if $GREP "^installed=no" $deplib > /dev/null; then
+ case $host in
+ *-*-darwin*)
+ depdepl=
+ eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
+ if test -n "$deplibrary_names" ; then
+ for tmp in $deplibrary_names ; do
+ depdepl=$tmp
+ done
+ if test -f "$absdir/$objdir/$depdepl" ; then
+ depdepl="$absdir/$objdir/$depdepl"
+ darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
+ if test -z "$darwin_install_name"; then
+ darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
+ fi
+ compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
+ linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}"
+ path=
+ fi
+ fi
+ ;;
+ *)
+ path="-L$absdir/$objdir"
+ ;;
+ esac
+ else
+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+ test -z "$libdir" && \
+ func_fatal_error "\`$deplib' is not a valid libtool archive"
+ test "$absdir" != "$libdir" && \
+ func_warning "\`$deplib' seems to be moved"
+
+ path="-L$absdir"
+ fi
+ ;;
+ esac
+ case " $deplibs " in
+ *" $path "*) ;;
+ *) deplibs="$path $deplibs" ;;
+ esac
+ done
+ fi # link_all_deplibs != no
+ fi # linkmode = lib
+ done # for deplib in $libs
+ if test "$pass" = link; then
+ if test "$linkmode" = "prog"; then
+ compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
+ finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
+ else
+ compiler_flags="$compiler_flags "`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+ fi
+ fi
+ dependency_libs="$newdependency_libs"
+ if test "$pass" = dlpreopen; then
+ # Link the dlpreopened libraries before other libraries
+ for deplib in $save_deplibs; do
+ deplibs="$deplib $deplibs"
+ done
+ fi
+ if test "$pass" != dlopen; then
+ if test "$pass" != conv; then
+ # Make sure lib_search_path contains only unique directories.
+ lib_search_path=
+ for dir in $newlib_search_path; do
+ case "$lib_search_path " in
+ *" $dir "*) ;;
+ *) lib_search_path="$lib_search_path $dir" ;;
+ esac
+ done
+ newlib_search_path=
+ fi
+
+ if test "$linkmode,$pass" != "prog,link"; then
+ vars="deplibs"
+ else
+ vars="compile_deplibs finalize_deplibs"
+ fi
+ for var in $vars dependency_libs; do
+ # Add libraries to $var in reverse order
+ eval tmp_libs=\"\$$var\"
+ new_libs=
+ for deplib in $tmp_libs; do
+ # FIXME: Pedantically, this is the right thing to do, so
+ # that some nasty dependency loop isn't accidentally
+ # broken:
+ #new_libs="$deplib $new_libs"
+ # Pragmatically, this seems to cause very few problems in
+ # practice:
+ case $deplib in
+ -L*) new_libs="$deplib $new_libs" ;;
+ -R*) ;;
+ *)
+ # And here is the reason: when a library appears more
+ # than once as an explicit dependence of a library, or
+ # is implicitly linked in more than once by the
+ # compiler, it is considered special, and multiple
+ # occurrences thereof are not removed. Compare this
+ # with having the same library being listed as a
+ # dependency of multiple other libraries: in this case,
+ # we know (pedantically, we assume) the library does not
+ # need to be listed more than once, so we keep only the
+ # last copy. This is not always right, but it is rare
+ # enough that we require users that really mean to play
+ # such unportable linking tricks to link the library
+ # using -Wl,-lname, so that libtool does not consider it
+ # for duplicate removal.
+ case " $specialdeplibs " in
+ *" $deplib "*) new_libs="$deplib $new_libs" ;;
+ *)
+ case " $new_libs " in
+ *" $deplib "*) ;;
+ *) new_libs="$deplib $new_libs" ;;
+ esac
+ ;;
+ esac
+ ;;
+ esac
+ done
+ tmp_libs=
+ for deplib in $new_libs; do
+ case $deplib in
+ -L*)
+ case " $tmp_libs " in
+ *" $deplib "*) ;;
+ *) tmp_libs="$tmp_libs $deplib" ;;
+ esac
+ ;;
+ *) tmp_libs="$tmp_libs $deplib" ;;
+ esac
+ done
+ eval $var=\"$tmp_libs\"
+ done # for var
+ fi
+ # Last step: remove runtime libs from dependency_libs
+ # (they stay in deplibs)
+ tmp_libs=
+ for i in $dependency_libs ; do
+ case " $predeps $postdeps $compiler_lib_search_path " in
+ *" $i "*)
+ i=""
+ ;;
+ esac
+ if test -n "$i" ; then
+ tmp_libs="$tmp_libs $i"
+ fi
+ done
+ dependency_libs=$tmp_libs
+ done # for pass
+ if test "$linkmode" = prog; then
+ dlfiles="$newdlfiles"
+ fi
+ if test "$linkmode" = prog || test "$linkmode" = lib; then
+ dlprefiles="$newdlprefiles"
+ fi
+
+ case $linkmode in
+ oldlib)
+ if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+ func_warning "\`-dlopen' is ignored for archives"
+ fi
+
+ case " $deplibs" in
+ *\ -l* | *\ -L*)
+ func_warning "\`-l' and \`-L' are ignored for archives" ;;
+ esac
+
+ test -n "$rpath" && \
+ func_warning "\`-rpath' is ignored for archives"
+
+ test -n "$xrpath" && \
+ func_warning "\`-R' is ignored for archives"
+
+ test -n "$vinfo" && \
+ func_warning "\`-version-info/-version-number' is ignored for archives"
+
+ test -n "$release" && \
+ func_warning "\`-release' is ignored for archives"
+
+ test -n "$export_symbols$export_symbols_regex" && \
+ func_warning "\`-export-symbols' is ignored for archives"
+
+ # Now set the variables for building old libraries.
+ build_libtool_libs=no
+ oldlibs="$output"
+ objs="$objs$old_deplibs"
+ ;;
+
+ lib)
+ # Make sure we only generate libraries of the form `libNAME.la'.
+ case $outputname in
+ lib*)
+ func_stripname 'lib' '.la' "$outputname"
+ name=$func_stripname_result
+ eval shared_ext=\"$shrext_cmds\"
+ eval libname=\"$libname_spec\"
+ ;;
+ *)
+ test "$module" = no && \
+ func_fatal_help "libtool library \`$output' must begin with \`lib'"
+
+ if test "$need_lib_prefix" != no; then
+ # Add the "lib" prefix for modules if required
+ func_stripname '' '.la' "$outputname"
+ name=$func_stripname_result
+ eval shared_ext=\"$shrext_cmds\"
+ eval libname=\"$libname_spec\"
+ else
+ func_stripname '' '.la' "$outputname"
+ libname=$func_stripname_result
+ fi
+ ;;
+ esac
+
+ if test -n "$objs"; then
+ if test "$deplibs_check_method" != pass_all; then
+ func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs"
+ else
+ $ECHO
+ $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
+ $ECHO "*** objects $objs is not portable!"
+ libobjs="$libobjs $objs"
+ fi
+ fi
+
+ test "$dlself" != no && \
+ func_warning "\`-dlopen self' is ignored for libtool libraries"
+
+ set dummy $rpath
+ shift
+ test "$#" -gt 1 && \
+ func_warning "ignoring multiple \`-rpath's for a libtool library"
+
+ install_libdir="$1"
+
+ oldlibs=
+ if test -z "$rpath"; then
+ if test "$build_libtool_libs" = yes; then
+ # Building a libtool convenience library.
+ # Some compilers have problems with a `.al' extension so
+ # convenience libraries should have the same extension an
+ # archive normally would.
+ oldlibs="$output_objdir/$libname.$libext $oldlibs"
+ build_libtool_libs=convenience
+ build_old_libs=yes
+ fi
+
+ test -n "$vinfo" && \
+ func_warning "\`-version-info/-version-number' is ignored for convenience libraries"
+
+ test -n "$release" && \
+ func_warning "\`-release' is ignored for convenience libraries"
+ else
+
+ # Parse the version information argument.
+ save_ifs="$IFS"; IFS=':'
+ set dummy $vinfo 0 0 0
+ shift
+ IFS="$save_ifs"
+
+ test -n "$7" && \
+ func_fatal_help "too many parameters to \`-version-info'"
+
+ # convert absolute version numbers to libtool ages
+ # this retains compatibility with .la files and attempts
+ # to make the code below a bit more comprehensible
+
+ case $vinfo_number in
+ yes)
+ number_major="$1"
+ number_minor="$2"
+ number_revision="$3"
+ #
+ # There are really only two kinds -- those that
+ # use the current revision as the major version
+ # and those that subtract age and use age as
+ # a minor version. But, then there is irix
+ # which has an extra 1 added just for fun
+ #
+ case $version_type in
+ darwin|linux|osf|windows|none)
+ func_arith $number_major + $number_minor
+ current=$func_arith_result
+ age="$number_minor"
+ revision="$number_revision"
+ ;;
+ freebsd-aout|freebsd-elf|sunos)
+ current="$number_major"
+ revision="$number_minor"
+ age="0"
+ ;;
+ irix|nonstopux)
+ func_arith $number_major + $number_minor
+ current=$func_arith_result
+ age="$number_minor"
+ revision="$number_minor"
+ lt_irix_increment=no
+ ;;
+ *)
+ func_fatal_configuration "$modename: unknown library version type \`$version_type'"
+ ;;
+ esac
+ ;;
+ no)
+ current="$1"
+ revision="$2"
+ age="$3"
+ ;;
+ esac
+
+ # Check that each of the things are valid numbers.
+ case $current in
+ 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+ *)
+ func_error "CURRENT \`$current' must be a nonnegative integer"
+ func_fatal_error "\`$vinfo' is not valid version information"
+ ;;
+ esac
+
+ case $revision in
+ 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+ *)
+ func_error "REVISION \`$revision' must be a nonnegative integer"
+ func_fatal_error "\`$vinfo' is not valid version information"
+ ;;
+ esac
+
+ case $age in
+ 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+ *)
+ func_error "AGE \`$age' must be a nonnegative integer"
+ func_fatal_error "\`$vinfo' is not valid version information"
+ ;;
+ esac
+
+ if test "$age" -gt "$current"; then
+ func_error "AGE \`$age' is greater than the current interface number \`$current'"
+ func_fatal_error "\`$vinfo' is not valid version information"
+ fi
+
+ # Calculate the version variables.
+ major=
+ versuffix=
+ verstring=
+ case $version_type in
+ none) ;;
+
+ darwin)
+ # Like Linux, but with the current version available in
+ # verstring for coding it into the library header
+ func_arith $current - $age
+ major=.$func_arith_result
+ versuffix="$major.$age.$revision"
+ # Darwin ld doesn't like 0 for these options...
+ func_arith $current + 1
+ minor_current=$func_arith_result
+ xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
+ verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
+ ;;
+
+ freebsd-aout)
+ major=".$current"
+ versuffix=".$current.$revision";
+ ;;
+
+ freebsd-elf)
+ major=".$current"
+ versuffix=".$current"
+ ;;
+
+ irix | nonstopux)
+ if test "X$lt_irix_increment" = "Xno"; then
+ func_arith $current - $age
+ else
+ func_arith $current - $age + 1
+ fi
+ major=$func_arith_result
+
+ case $version_type in
+ nonstopux) verstring_prefix=nonstopux ;;
+ *) verstring_prefix=sgi ;;
+ esac
+ verstring="$verstring_prefix$major.$revision"
+
+ # Add in all the interfaces that we are compatible with.
+ loop=$revision
+ while test "$loop" -ne 0; do
+ func_arith $revision - $loop
+ iface=$func_arith_result
+ func_arith $loop - 1
+ loop=$func_arith_result
+ verstring="$verstring_prefix$major.$iface:$verstring"
+ done
+
+ # Before this point, $major must not contain `.'.
+ major=.$major
+ versuffix="$major.$revision"
+ ;;
+
+ linux)
+ func_arith $current - $age
+ major=.$func_arith_result
+ versuffix="$major.$age.$revision"
+ ;;
+
+ osf)
+ func_arith $current - $age
+ major=.$func_arith_result
+ versuffix=".$current.$age.$revision"
+ verstring="$current.$age.$revision"
+
+ # Add in all the interfaces that we are compatible with.
+ loop=$age
+ while test "$loop" -ne 0; do
+ func_arith $current - $loop
+ iface=$func_arith_result
+ func_arith $loop - 1
+ loop=$func_arith_result
+ verstring="$verstring:${iface}.0"
+ done
+
+ # Make executables depend on our current version.
+ verstring="$verstring:${current}.0"
+ ;;
+
+ qnx)
+ major=".$current"
+ versuffix=".$current"
+ ;;
+
+ sunos)
+ major=".$current"
+ versuffix=".$current.$revision"
+ ;;
+
+ windows)
+ # Use '-' rather than '.', since we only want one
+ # extension on DOS 8.3 filesystems.
+ func_arith $current - $age
+ major=$func_arith_result
+ versuffix="-$major"
+ ;;
+
+ *)
+ func_fatal_configuration "unknown library version type \`$version_type'"
+ ;;
+ esac
+
+ # Clear the version info if we defaulted, and they specified a release.
+ if test -z "$vinfo" && test -n "$release"; then
+ major=
+ case $version_type in
+ darwin)
+ # we can't check for "0.0" in archive_cmds due to quoting
+ # problems, so we reset it completely
+ verstring=
+ ;;
+ *)
+ verstring="0.0"
+ ;;
+ esac
+ if test "$need_version" = no; then
+ versuffix=
+ else
+ versuffix=".0.0"
+ fi
+ fi
+
+ # Remove version info from name if versioning should be avoided
+ if test "$avoid_version" = yes && test "$need_version" = no; then
+ major=
+ versuffix=
+ verstring=""
+ fi
+
+ # Check to see if the archive will have undefined symbols.
+ if test "$allow_undefined" = yes; then
+ if test "$allow_undefined_flag" = unsupported; then
+ func_warning "undefined symbols not allowed in $host shared libraries"
+ build_libtool_libs=no
+ build_old_libs=yes
+ fi
+ else
+ # Don't allow undefined symbols.
+ allow_undefined_flag="$no_undefined_flag"
+ fi
+
+ fi
+
+ func_generate_dlsyms "$libname" "$libname" "yes"
+ libobjs="$libobjs $symfileobj"
+ test "X$libobjs" = "X " && libobjs=
+
+ if test "$mode" != relink; then
+ # Remove our outputs, but don't remove object files since they
+ # may have been created when compiling PIC objects.
+ removelist=
+ tempremovelist=`$ECHO "$output_objdir/*"`
+ for p in $tempremovelist; do
+ case $p in
+ *.$objext | *.gcno)
+ ;;
+ $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
+ if test "X$precious_files_regex" != "X"; then
+ if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
+ then
+ continue
+ fi
+ fi
+ removelist="$removelist $p"
+ ;;
+ *) ;;
+ esac
+ done
+ test -n "$removelist" && \
+ func_show_eval "${RM}r \$removelist"
+ fi
+
+ # Now set the variables for building old libraries.
+ if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
+ oldlibs="$oldlibs $output_objdir/$libname.$libext"
+
+ # Transform .lo files to .o files.
+ oldobjs="$objs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP`
+ fi
+
+ # Eliminate all temporary directories.
+ #for path in $notinst_path; do
+ # lib_search_path=`$ECHO "X$lib_search_path " | $Xsed -e "s% $path % %g"`
+ # deplibs=`$ECHO "X$deplibs " | $Xsed -e "s% -L$path % %g"`
+ # dependency_libs=`$ECHO "X$dependency_libs " | $Xsed -e "s% -L$path % %g"`
+ #done
+
+ if test -n "$xrpath"; then
+ # If the user specified any rpath flags, then add them.
+ temp_xrpath=
+ for libdir in $xrpath; do
+ temp_xrpath="$temp_xrpath -R$libdir"
+ case "$finalize_rpath " in
+ *" $libdir "*) ;;
+ *) finalize_rpath="$finalize_rpath $libdir" ;;
+ esac
+ done
+ if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
+ dependency_libs="$temp_xrpath $dependency_libs"
+ fi
+ fi
+
+ # Make sure dlfiles contains only unique files that won't be dlpreopened
+ old_dlfiles="$dlfiles"
+ dlfiles=
+ for lib in $old_dlfiles; do
+ case " $dlprefiles $dlfiles " in
+ *" $lib "*) ;;
+ *) dlfiles="$dlfiles $lib" ;;
+ esac
+ done
+
+ # Make sure dlprefiles contains only unique files
+ old_dlprefiles="$dlprefiles"
+ dlprefiles=
+ for lib in $old_dlprefiles; do
+ case "$dlprefiles " in
+ *" $lib "*) ;;
+ *) dlprefiles="$dlprefiles $lib" ;;
+ esac
+ done
+
+ if test "$build_libtool_libs" = yes; then
+ if test -n "$rpath"; then
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc*)
+ # these systems don't actually have a c library (as such)!
+ ;;
+ *-*-rhapsody* | *-*-darwin1.[012])
+ # Rhapsody C library is in the System framework
+ deplibs="$deplibs System.ltframework"
+ ;;
+ *-*-netbsd*)
+ # Don't link with libc until the a.out ld.so is fixed.
+ ;;
+ *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+ # Do not include libc due to us having libc/libc_r.
+ ;;
+ *-*-sco3.2v5* | *-*-sco5v6*)
+ # Causes problems with __ctype
+ ;;
+ *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
+ # Compiler inserts libc in the correct place for threads to work
+ ;;
+ *)
+ # Add libc to deplibs on all other systems if necessary.
+ if test "$build_libtool_need_lc" = "yes"; then
+ deplibs="$deplibs -lc"
+ fi
+ ;;
+ esac
+ fi
+
+ # Transform deplibs into only deplibs that can be linked in shared.
+ name_save=$name
+ libname_save=$libname
+ release_save=$release
+ versuffix_save=$versuffix
+ major_save=$major
+ # I'm not sure if I'm treating the release correctly. I think
+ # release should show up in the -l (ie -lgmp5) so we don't want to
+ # add it in twice. Is that correct?
+ release=""
+ versuffix=""
+ major=""
+ newdeplibs=
+ droppeddeps=no
+ case $deplibs_check_method in
+ pass_all)
+ # Don't check for shared/static. Everything works.
+ # This might be a little naive. We might want to check
+ # whether the library exists or not. But this is on
+ # osf3 & osf4 and I'm not really sure... Just
+ # implementing what was already the behavior.
+ newdeplibs=$deplibs
+ ;;
+ test_compile)
+ # This code stresses the "libraries are programs" paradigm to its
+ # limits. Maybe even breaks it. We compile a program, linking it
+ # against the deplibs as a proxy for the library. Then we can check
+ # whether they linked in statically or dynamically with ldd.
+ $opt_dry_run || $RM conftest.c
+ cat > conftest.c <<EOF
+ int main() { return 0; }
+EOF
+ $opt_dry_run || $RM conftest
+ if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
+ ldd_output=`ldd conftest`
+ for i in $deplibs; do
+ case $i in
+ -l*)
+ func_stripname -l '' "$i"
+ name=$func_stripname_result
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ case " $predeps $postdeps " in
+ *" $i "*)
+ newdeplibs="$newdeplibs $i"
+ i=""
+ ;;
+ esac
+ fi
+ if test -n "$i" ; then
+ libname=`eval "\\$ECHO \"$libname_spec\""`
+ deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
+ set dummy $deplib_matches; shift
+ deplib_match=$1
+ if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+ newdeplibs="$newdeplibs $i"
+ else
+ droppeddeps=yes
+ $ECHO
+ $ECHO "*** Warning: dynamic linker does not accept needed library $i."
+ $ECHO "*** I have the capability to make that library automatically link in when"
+ $ECHO "*** you link to this library. But I can only do this if you have a"
+ $ECHO "*** shared version of the library, which I believe you do not have"
+ $ECHO "*** because a test_compile did reveal that the linker did not use it for"
+ $ECHO "*** its dynamic dependency list that programs get resolved with at runtime."
+ fi
+ fi
+ ;;
+ *)
+ newdeplibs="$newdeplibs $i"
+ ;;
+ esac
+ done
+ else
+ # Error occurred in the first compile. Let's try to salvage
+ # the situation: Compile a separate program for each library.
+ for i in $deplibs; do
+ case $i in
+ -l*)
+ func_stripname -l '' "$i"
+ name=$func_stripname_result
+ $opt_dry_run || $RM conftest
+ if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
+ ldd_output=`ldd conftest`
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ case " $predeps $postdeps " in
+ *" $i "*)
+ newdeplibs="$newdeplibs $i"
+ i=""
+ ;;
+ esac
+ fi
+ if test -n "$i" ; then
+ libname=`eval "\\$ECHO \"$libname_spec\""`
+ deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
+ set dummy $deplib_matches; shift
+ deplib_match=$1
+ if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+ newdeplibs="$newdeplibs $i"
+ else
+ droppeddeps=yes
+ $ECHO
+ $ECHO "*** Warning: dynamic linker does not accept needed library $i."
+ $ECHO "*** I have the capability to make that library automatically link in when"
+ $ECHO "*** you link to this library. But I can only do this if you have a"
+ $ECHO "*** shared version of the library, which you do not appear to have"
+ $ECHO "*** because a test_compile did reveal that the linker did not use this one"
+ $ECHO "*** as a dynamic dependency that programs can get resolved with at runtime."
+ fi
+ fi
+ else
+ droppeddeps=yes
+ $ECHO
+ $ECHO "*** Warning! Library $i is needed by this library but I was not able to"
+ $ECHO "*** make it link in! You will probably need to install it or some"
+ $ECHO "*** library that it depends on before this library will be fully"
+ $ECHO "*** functional. Installing it before continuing would be even better."
+ fi
+ ;;
+ *)
+ newdeplibs="$newdeplibs $i"
+ ;;
+ esac
+ done
+ fi
+ ;;
+ file_magic*)
+ set dummy $deplibs_check_method; shift
+ file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+ for a_deplib in $deplibs; do
+ case $a_deplib in
+ -l*)
+ func_stripname -l '' "$a_deplib"
+ name=$func_stripname_result
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ case " $predeps $postdeps " in
+ *" $a_deplib "*)
+ newdeplibs="$newdeplibs $a_deplib"
+ a_deplib=""
+ ;;
+ esac
+ fi
+ if test -n "$a_deplib" ; then
+ libname=`eval "\\$ECHO \"$libname_spec\""`
+ for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+ potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+ for potent_lib in $potential_libs; do
+ # Follow soft links.
+ if ls -lLd "$potent_lib" 2>/dev/null |
+ $GREP " -> " >/dev/null; then
+ continue
+ fi
+ # The statement above tries to avoid entering an
+ # endless loop below, in case of cyclic links.
+ # We might still enter an endless loop, since a link
+ # loop can be closed while we follow links,
+ # but so what?
+ potlib="$potent_lib"
+ while test -h "$potlib" 2>/dev/null; do
+ potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
+ case $potliblink in
+ [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
+ *) potlib=`$ECHO "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";;
+ esac
+ done
+ if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
+ $SED -e 10q |
+ $EGREP "$file_magic_regex" > /dev/null; then
+ newdeplibs="$newdeplibs $a_deplib"
+ a_deplib=""
+ break 2
+ fi
+ done
+ done
+ fi
+ if test -n "$a_deplib" ; then
+ droppeddeps=yes
+ $ECHO
+ $ECHO "*** Warning: linker path does not have real file for library $a_deplib."
+ $ECHO "*** I have the capability to make that library automatically link in when"
+ $ECHO "*** you link to this library. But I can only do this if you have a"
+ $ECHO "*** shared version of the library, which you do not appear to have"
+ $ECHO "*** because I did check the linker path looking for a file starting"
+ if test -z "$potlib" ; then
+ $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
+ else
+ $ECHO "*** with $libname and none of the candidates passed a file format test"
+ $ECHO "*** using a file magic. Last file checked: $potlib"
+ fi
+ fi
+ ;;
+ *)
+ # Add a -L argument.
+ newdeplibs="$newdeplibs $a_deplib"
+ ;;
+ esac
+ done # Gone through all deplibs.
+ ;;
+ match_pattern*)
+ set dummy $deplibs_check_method; shift
+ match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+ for a_deplib in $deplibs; do
+ case $a_deplib in
+ -l*)
+ func_stripname -l '' "$a_deplib"
+ name=$func_stripname_result
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ case " $predeps $postdeps " in
+ *" $a_deplib "*)
+ newdeplibs="$newdeplibs $a_deplib"
+ a_deplib=""
+ ;;
+ esac
+ fi
+ if test -n "$a_deplib" ; then
+ libname=`eval "\\$ECHO \"$libname_spec\""`
+ for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+ potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+ for potent_lib in $potential_libs; do
+ potlib="$potent_lib" # see symlink-check above in file_magic test
+ if eval "\$ECHO \"X$potent_lib\"" 2>/dev/null | $Xsed -e 10q | \
+ $EGREP "$match_pattern_regex" > /dev/null; then
+ newdeplibs="$newdeplibs $a_deplib"
+ a_deplib=""
+ break 2
+ fi
+ done
+ done
+ fi
+ if test -n "$a_deplib" ; then
+ droppeddeps=yes
+ $ECHO
+ $ECHO "*** Warning: linker path does not have real file for library $a_deplib."
+ $ECHO "*** I have the capability to make that library automatically link in when"
+ $ECHO "*** you link to this library. But I can only do this if you have a"
+ $ECHO "*** shared version of the library, which you do not appear to have"
+ $ECHO "*** because I did check the linker path looking for a file starting"
+ if test -z "$potlib" ; then
+ $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
+ else
+ $ECHO "*** with $libname and none of the candidates passed a file format test"
+ $ECHO "*** using a regex pattern. Last file checked: $potlib"
+ fi
+ fi
+ ;;
+ *)
+ # Add a -L argument.
+ newdeplibs="$newdeplibs $a_deplib"
+ ;;
+ esac
+ done # Gone through all deplibs.
+ ;;
+ none | unknown | *)
+ newdeplibs=""
+ tmp_deplibs=`$ECHO "X $deplibs" | $Xsed \
+ -e 's/ -lc$//' -e 's/ -[LR][^ ]*//g'`
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ for i in $predeps $postdeps ; do
+ # can't use Xsed below, because $i might contain '/'
+ tmp_deplibs=`$ECHO "X $tmp_deplibs" | $Xsed -e "s,$i,,"`
+ done
+ fi
+ if $ECHO "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' |
+ $GREP . >/dev/null; then
+ $ECHO
+ if test "X$deplibs_check_method" = "Xnone"; then
+ $ECHO "*** Warning: inter-library dependencies are not supported in this platform."
+ else
+ $ECHO "*** Warning: inter-library dependencies are not known to be supported."
+ fi
+ $ECHO "*** All declared inter-library dependencies are being dropped."
+ droppeddeps=yes
+ fi
+ ;;
+ esac
+ versuffix=$versuffix_save
+ major=$major_save
+ release=$release_save
+ libname=$libname_save
+ name=$name_save
+
+ case $host in
+ *-*-rhapsody* | *-*-darwin1.[012])
+ # On Rhapsody replace the C library with the System framework
+ newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
+ ;;
+ esac
+
+ if test "$droppeddeps" = yes; then
+ if test "$module" = yes; then
+ $ECHO
+ $ECHO "*** Warning: libtool could not satisfy all declared inter-library"
+ $ECHO "*** dependencies of module $libname. Therefore, libtool will create"
+ $ECHO "*** a static module, that should work as long as the dlopening"
+ $ECHO "*** application is linked with the -dlopen flag."
+ if test -z "$global_symbol_pipe"; then
+ $ECHO
+ $ECHO "*** However, this would only work if libtool was able to extract symbol"
+ $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could"
+ $ECHO "*** not find such a program. So, this module is probably useless."
+ $ECHO "*** \`nm' from GNU binutils and a full rebuild may help."
+ fi
+ if test "$build_old_libs" = no; then
+ oldlibs="$output_objdir/$libname.$libext"
+ build_libtool_libs=module
+ build_old_libs=yes
+ else
+ build_libtool_libs=no
+ fi
+ else
+ $ECHO "*** The inter-library dependencies that have been dropped here will be"
+ $ECHO "*** automatically added whenever a program is linked with this library"
+ $ECHO "*** or is declared to -dlopen it."
+
+ if test "$allow_undefined" = no; then
+ $ECHO
+ $ECHO "*** Since this library must not contain undefined symbols,"
+ $ECHO "*** because either the platform does not support them or"
+ $ECHO "*** it was explicitly requested with -no-undefined,"
+ $ECHO "*** libtool will only create a static version of it."
+ if test "$build_old_libs" = no; then
+ oldlibs="$output_objdir/$libname.$libext"
+ build_libtool_libs=module
+ build_old_libs=yes
+ else
+ build_libtool_libs=no
+ fi
+ fi
+ fi
+ fi
+ # Done checking deplibs!
+ deplibs=$newdeplibs
+ fi
+ # Time to change all our "foo.ltframework" stuff back to "-framework foo"
+ case $host in
+ *-*-darwin*)
+ newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+ new_inherited_linker_flags=`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+ deplibs=`$ECHO "X $deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+ ;;
+ esac
+
+ # move library search paths that coincide with paths to not yet
+ # installed libraries to the beginning of the library search list
+ new_libs=
+ for path in $notinst_path; do
+ case " $new_libs " in
+ *" -L$path/$objdir "*) ;;
+ *)
+ case " $deplibs " in
+ *" -L$path/$objdir "*)
+ new_libs="$new_libs -L$path/$objdir" ;;
+ esac
+ ;;
+ esac
+ done
+ for deplib in $deplibs; do
+ case $deplib in
+ -L*)
+ case " $new_libs " in
+ *" $deplib "*) ;;
+ *) new_libs="$new_libs $deplib" ;;
+ esac
+ ;;
+ *) new_libs="$new_libs $deplib" ;;
+ esac
+ done
+ deplibs="$new_libs"
+
+ # All the library-specific variables (install_libdir is set above).
+ library_names=
+ old_library=
+ dlname=
+
+ # Test again, we may have decided not to build it any more
+ if test "$build_libtool_libs" = yes; then
+ if test "$hardcode_into_libs" = yes; then
+ # Hardcode the library paths
+ hardcode_libdirs=
+ dep_rpath=
+ rpath="$finalize_rpath"
+ test "$mode" != relink && rpath="$compile_rpath$rpath"
+ for libdir in $rpath; do
+ if test -n "$hardcode_libdir_flag_spec"; then
+ if test -n "$hardcode_libdir_separator"; then
+ if test -z "$hardcode_libdirs"; then
+ hardcode_libdirs="$libdir"
+ else
+ # Just accumulate the unique libdirs.
+ case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+ *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+ ;;
+ *)
+ hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+ ;;
+ esac
+ fi
+ else
+ eval flag=\"$hardcode_libdir_flag_spec\"
+ dep_rpath="$dep_rpath $flag"
+ fi
+ elif test -n "$runpath_var"; then
+ case "$perm_rpath " in
+ *" $libdir "*) ;;
+ *) perm_rpath="$perm_rpath $libdir" ;;
+ esac
+ fi
+ done
+ # Substitute the hardcoded libdirs into the rpath.
+ if test -n "$hardcode_libdir_separator" &&
+ test -n "$hardcode_libdirs"; then
+ libdir="$hardcode_libdirs"
+ if test -n "$hardcode_libdir_flag_spec_ld"; then
+ eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"
+ else
+ eval dep_rpath=\"$hardcode_libdir_flag_spec\"
+ fi
+ fi
+ if test -n "$runpath_var" && test -n "$perm_rpath"; then
+ # We should set the runpath_var.
+ rpath=
+ for dir in $perm_rpath; do
+ rpath="$rpath$dir:"
+ done
+ eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
+ fi
+ test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
+ fi
+
+ shlibpath="$finalize_shlibpath"
+ test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
+ if test -n "$shlibpath"; then
+ eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
+ fi
+
+ # Get the real and link names of the library.
+ eval shared_ext=\"$shrext_cmds\"
+ eval library_names=\"$library_names_spec\"
+ set dummy $library_names
+ shift
+ realname="$1"
+ shift
+
+ if test -n "$soname_spec"; then
+ eval soname=\"$soname_spec\"
+ else
+ soname="$realname"
+ fi
+ if test -z "$dlname"; then
+ dlname=$soname
+ fi
+
+ lib="$output_objdir/$realname"
+ linknames=
+ for link
+ do
+ linknames="$linknames $link"
+ done
+
+ # Use standard objects if they are pic
+ test -z "$pic_flag" && libobjs=`$ECHO "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+ test "X$libobjs" = "X " && libobjs=
+
+ delfiles=
+ if test -n "$export_symbols" && test -n "$include_expsyms"; then
+ $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
+ export_symbols="$output_objdir/$libname.uexp"
+ delfiles="$delfiles $export_symbols"
+ fi
+
+ orig_export_symbols=
+ case $host_os in
+ cygwin* | mingw* | cegcc*)
+ if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
+ # exporting using user supplied symfile
+ if test "x`$SED 1q $export_symbols`" != xEXPORTS; then
+ # and it's NOT already a .def file. Must figure out
+ # which of the given symbols are data symbols and tag
+ # them as such. So, trigger use of export_symbols_cmds.
+ # export_symbols gets reassigned inside the "prepare
+ # the list of exported symbols" if statement, so the
+ # include_expsyms logic still works.
+ orig_export_symbols="$export_symbols"
+ export_symbols=
+ always_export_symbols=yes
+ fi
+ fi
+ ;;
+ esac
+
+ # Prepare the list of exported symbols
+ if test -z "$export_symbols"; then
+ if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
+ func_verbose "generating symbol list for \`$libname.la'"
+ export_symbols="$output_objdir/$libname.exp"
+ $opt_dry_run || $RM $export_symbols
+ cmds=$export_symbols_cmds
+ save_ifs="$IFS"; IFS='~'
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ eval cmd=\"$cmd\"
+ func_len " $cmd"
+ len=$func_len_result
+ if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+ func_show_eval "$cmd" 'exit $?'
+ skipped_export=false
+ else
+ # The command line is too long to execute in one step.
+ func_verbose "using reloadable object file for export list..."
+ skipped_export=:
+ # Break out early, otherwise skipped_export may be
+ # set to false by a later but shorter cmd.
+ break
+ fi
+ done
+ IFS="$save_ifs"
+ if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then
+ func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+ func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
+ fi
+ fi
+ fi
+
+ if test -n "$export_symbols" && test -n "$include_expsyms"; then
+ tmp_export_symbols="$export_symbols"
+ test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
+ $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"'
+ fi
+
+ if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then
+ # The given exports_symbols file has to be filtered, so filter it.
+ func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
+ # FIXME: $output_objdir/$libname.filter potentially contains lots of
+ # 's' commands which not all seds can handle. GNU sed should be fine
+ # though. Also, the filter scales superlinearly with the number of
+ # global variables. join(1) would be nice here, but unfortunately
+ # isn't a blessed tool.
+ $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
+ delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
+ export_symbols=$output_objdir/$libname.def
+ $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
+ fi
+
+ tmp_deplibs=
+ for test_deplib in $deplibs; do
+ case " $convenience " in
+ *" $test_deplib "*) ;;
+ *)
+ tmp_deplibs="$tmp_deplibs $test_deplib"
+ ;;
+ esac
+ done
+ deplibs="$tmp_deplibs"
+
+ if test -n "$convenience"; then
+ if test -n "$whole_archive_flag_spec" &&
+ test "$compiler_needs_object" = yes &&
+ test -z "$libobjs"; then
+ # extract the archives, so we have objects to list.
+ # TODO: could optimize this to just extract one archive.
+ whole_archive_flag_spec=
+ fi
+ if test -n "$whole_archive_flag_spec"; then
+ save_libobjs=$libobjs
+ eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+ test "X$libobjs" = "X " && libobjs=
+ else
+ gentop="$output_objdir/${outputname}x"
+ generated="$generated $gentop"
+
+ func_extract_archives $gentop $convenience
+ libobjs="$libobjs $func_extract_archives_result"
+ test "X$libobjs" = "X " && libobjs=
+ fi
+ fi
+
+ if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
+ eval flag=\"$thread_safe_flag_spec\"
+ linker_flags="$linker_flags $flag"
+ fi
+
+ # Make a backup of the uninstalled library when relinking
+ if test "$mode" = relink; then
+ $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
+ fi
+
+ # Do each of the archive commands.
+ if test "$module" = yes && test -n "$module_cmds" ; then
+ if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+ eval test_cmds=\"$module_expsym_cmds\"
+ cmds=$module_expsym_cmds
+ else
+ eval test_cmds=\"$module_cmds\"
+ cmds=$module_cmds
+ fi
+ else
+ if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+ eval test_cmds=\"$archive_expsym_cmds\"
+ cmds=$archive_expsym_cmds
+ else
+ eval test_cmds=\"$archive_cmds\"
+ cmds=$archive_cmds
+ fi
+ fi
+
+ if test "X$skipped_export" != "X:" &&
+ func_len " $test_cmds" &&
+ len=$func_len_result &&
+ test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+ :
+ else
+ # The command line is too long to link in one step, link piecewise
+ # or, if using GNU ld and skipped_export is not :, use a linker
+ # script.
+
+ # Save the value of $output and $libobjs because we want to
+ # use them later. If we have whole_archive_flag_spec, we
+ # want to use save_libobjs as it was before
+ # whole_archive_flag_spec was expanded, because we can't
+ # assume the linker understands whole_archive_flag_spec.
+ # This may have to be revisited, in case too many
+ # convenience libraries get linked in and end up exceeding
+ # the spec.
+ if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
+ save_libobjs=$libobjs
+ fi
+ save_output=$output
+ output_la=`$ECHO "X$output" | $Xsed -e "$basename"`
+
+ # Clear the reloadable object creation command queue and
+ # initialize k to one.
+ test_cmds=
+ concat_cmds=
+ objlist=
+ last_robj=
+ k=1
+
+ if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then
+ output=${output_objdir}/${output_la}.lnkscript
+ func_verbose "creating GNU ld script: $output"
+ $ECHO 'INPUT (' > $output
+ for obj in $save_libobjs
+ do
+ $ECHO "$obj" >> $output
+ done
+ $ECHO ')' >> $output
+ delfiles="$delfiles $output"
+ elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then
+ output=${output_objdir}/${output_la}.lnk
+ func_verbose "creating linker input file list: $output"
+ : > $output
+ set x $save_libobjs
+ shift
+ firstobj=
+ if test "$compiler_needs_object" = yes; then
+ firstobj="$1 "
+ shift
+ fi
+ for obj
+ do
+ $ECHO "$obj" >> $output
+ done
+ delfiles="$delfiles $output"
+ output=$firstobj\"$file_list_spec$output\"
+ else
+ if test -n "$save_libobjs"; then
+ func_verbose "creating reloadable object files..."
+ output=$output_objdir/$output_la-${k}.$objext
+ eval test_cmds=\"$reload_cmds\"
+ func_len " $test_cmds"
+ len0=$func_len_result
+ len=$len0
+
+ # Loop over the list of objects to be linked.
+ for obj in $save_libobjs
+ do
+ func_len " $obj"
+ func_arith $len + $func_len_result
+ len=$func_arith_result
+ if test "X$objlist" = X ||
+ test "$len" -lt "$max_cmd_len"; then
+ func_append objlist " $obj"
+ else
+ # The command $test_cmds is almost too long, add a
+ # command to the queue.
+ if test "$k" -eq 1 ; then
+ # The first file doesn't have a previous command to add.
+ eval concat_cmds=\"$reload_cmds $objlist $last_robj\"
+ else
+ # All subsequent reloadable object files will link in
+ # the last one created.
+ eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj~\$RM $last_robj\"
+ fi
+ last_robj=$output_objdir/$output_la-${k}.$objext
+ func_arith $k + 1
+ k=$func_arith_result
+ output=$output_objdir/$output_la-${k}.$objext
+ objlist=$obj
+ func_len " $last_robj"
+ func_arith $len0 + $func_len_result
+ len=$func_arith_result
+ fi
+ done
+ # Handle the remaining objects by creating one last
+ # reloadable object file. All subsequent reloadable object
+ # files will link in the last one created.
+ test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+ eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\"
+ if test -n "$last_robj"; then
+ eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\"
+ fi
+ delfiles="$delfiles $output"
+
+ else
+ output=
+ fi
+
+ if ${skipped_export-false}; then
+ func_verbose "generating symbol list for \`$libname.la'"
+ export_symbols="$output_objdir/$libname.exp"
+ $opt_dry_run || $RM $export_symbols
+ libobjs=$output
+ # Append the command to create the export file.
+ test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
+ if test -n "$last_robj"; then
+ eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
+ fi
+ fi
+
+ test -n "$save_libobjs" &&
+ func_verbose "creating a temporary reloadable object file: $output"
+
+ # Loop through the commands generated above and execute them.
+ save_ifs="$IFS"; IFS='~'
+ for cmd in $concat_cmds; do
+ IFS="$save_ifs"
+ $opt_silent || {
+ func_quote_for_expand "$cmd"
+ eval "func_echo $func_quote_for_expand_result"
+ }
+ $opt_dry_run || eval "$cmd" || {
+ lt_exit=$?
+
+ # Restore the uninstalled library and exit
+ if test "$mode" = relink; then
+ ( cd "$output_objdir" && \
+ $RM "${realname}T" && \
+ $MV "${realname}U" "$realname" )
+ fi
+
+ exit $lt_exit
+ }
+ done
+ IFS="$save_ifs"
+
+ if test -n "$export_symbols_regex" && ${skipped_export-false}; then
+ func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+ func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
+ fi
+ fi
+
+ if ${skipped_export-false}; then
+ if test -n "$export_symbols" && test -n "$include_expsyms"; then
+ tmp_export_symbols="$export_symbols"
+ test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
+ $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"'
+ fi
+
+ if test -n "$orig_export_symbols"; then
+ # The given exports_symbols file has to be filtered, so filter it.
+ func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
+ # FIXME: $output_objdir/$libname.filter potentially contains lots of
+ # 's' commands which not all seds can handle. GNU sed should be fine
+ # though. Also, the filter scales superlinearly with the number of
+ # global variables. join(1) would be nice here, but unfortunately
+ # isn't a blessed tool.
+ $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
+ delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
+ export_symbols=$output_objdir/$libname.def
+ $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
+ fi
+ fi
+
+ libobjs=$output
+ # Restore the value of output.
+ output=$save_output
+
+ if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
+ eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+ test "X$libobjs" = "X " && libobjs=
+ fi
+ # Expand the library linking commands again to reset the
+ # value of $libobjs for piecewise linking.
+
+ # Do each of the archive commands.
+ if test "$module" = yes && test -n "$module_cmds" ; then
+ if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+ cmds=$module_expsym_cmds
+ else
+ cmds=$module_cmds
+ fi
+ else
+ if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+ cmds=$archive_expsym_cmds
+ else
+ cmds=$archive_cmds
+ fi
+ fi
+ fi
+
+ if test -n "$delfiles"; then
+ # Append the command to remove temporary files to $cmds.
+ eval cmds=\"\$cmds~\$RM $delfiles\"
+ fi
+
+ # Add any objects from preloaded convenience libraries
+ if test -n "$dlprefiles"; then
+ gentop="$output_objdir/${outputname}x"
+ generated="$generated $gentop"
+
+ func_extract_archives $gentop $dlprefiles
+ libobjs="$libobjs $func_extract_archives_result"
+ test "X$libobjs" = "X " && libobjs=
+ fi
+
+ save_ifs="$IFS"; IFS='~'
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ eval cmd=\"$cmd\"
+ $opt_silent || {
+ func_quote_for_expand "$cmd"
+ eval "func_echo $func_quote_for_expand_result"
+ }
+ $opt_dry_run || eval "$cmd" || {
+ lt_exit=$?
+
+ # Restore the uninstalled library and exit
+ if test "$mode" = relink; then
+ ( cd "$output_objdir" && \
+ $RM "${realname}T" && \
+ $MV "${realname}U" "$realname" )
+ fi
+
+ exit $lt_exit
+ }
+ done
+ IFS="$save_ifs"
+
+ # Restore the uninstalled library and exit
+ if test "$mode" = relink; then
+ $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
+
+ if test -n "$convenience"; then
+ if test -z "$whole_archive_flag_spec"; then
+ func_show_eval '${RM}r "$gentop"'
+ fi
+ fi
+
+ exit $EXIT_SUCCESS
+ fi
+
+ # Create links to the real library.
+ for linkname in $linknames; do
+ if test "$realname" != "$linkname"; then
+ func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
+ fi
+ done
+
+ # If -module or -export-dynamic was specified, set the dlname.
+ if test "$module" = yes || test "$export_dynamic" = yes; then
+ # On all known operating systems, these are identical.
+ dlname="$soname"
+ fi
+ fi
+ ;;
+
+ obj)
+ if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+ func_warning "\`-dlopen' is ignored for objects"
+ fi
+
+ case " $deplibs" in
+ *\ -l* | *\ -L*)
+ func_warning "\`-l' and \`-L' are ignored for objects" ;;
+ esac
+
+ test -n "$rpath" && \
+ func_warning "\`-rpath' is ignored for objects"
+
+ test -n "$xrpath" && \
+ func_warning "\`-R' is ignored for objects"
+
+ test -n "$vinfo" && \
+ func_warning "\`-version-info' is ignored for objects"
+
+ test -n "$release" && \
+ func_warning "\`-release' is ignored for objects"
+
+ case $output in
+ *.lo)
+ test -n "$objs$old_deplibs" && \
+ func_fatal_error "cannot build library object \`$output' from non-libtool objects"
+
+ libobj=$output
+ func_lo2o "$libobj"
+ obj=$func_lo2o_result
+ ;;
+ *)
+ libobj=
+ obj="$output"
+ ;;
+ esac
+
+ # Delete the old objects.
+ $opt_dry_run || $RM $obj $libobj
+
+ # Objects from convenience libraries. This assumes
+ # single-version convenience libraries. Whenever we create
+ # different ones for PIC/non-PIC, this we'll have to duplicate
+ # the extraction.
+ reload_conv_objs=
+ gentop=
+ # reload_cmds runs $LD directly, so let us get rid of
+ # -Wl from whole_archive_flag_spec and hope we can get by with
+ # turning comma into space..
+ wl=
+
+ if test -n "$convenience"; then
+ if test -n "$whole_archive_flag_spec"; then
+ eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
+ reload_conv_objs=$reload_objs\ `$ECHO "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'`
+ else
+ gentop="$output_objdir/${obj}x"
+ generated="$generated $gentop"
+
+ func_extract_archives $gentop $convenience
+ reload_conv_objs="$reload_objs $func_extract_archives_result"
+ fi
+ fi
+
+ # Create the old-style object.
+ reload_objs="$objs$old_deplibs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
+
+ output="$obj"
+ func_execute_cmds "$reload_cmds" 'exit $?'
+
+ # Exit if we aren't doing a library object file.
+ if test -z "$libobj"; then
+ if test -n "$gentop"; then
+ func_show_eval '${RM}r "$gentop"'
+ fi
+
+ exit $EXIT_SUCCESS
+ fi
+
+ if test "$build_libtool_libs" != yes; then
+ if test -n "$gentop"; then
+ func_show_eval '${RM}r "$gentop"'
+ fi
+
+ # Create an invalid libtool object if no PIC, so that we don't
+ # accidentally link it into a program.
+ # $show "echo timestamp > $libobj"
+ # $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
+ exit $EXIT_SUCCESS
+ fi
+
+ if test -n "$pic_flag" || test "$pic_mode" != default; then
+ # Only do commands if we really have different PIC objects.
+ reload_objs="$libobjs $reload_conv_objs"
+ output="$libobj"
+ func_execute_cmds "$reload_cmds" 'exit $?'
+ fi
+
+ if test -n "$gentop"; then
+ func_show_eval '${RM}r "$gentop"'
+ fi
+
+ exit $EXIT_SUCCESS
+ ;;
+
+ prog)
+ case $host in
+ *cygwin*) func_stripname '' '.exe' "$output"
+ output=$func_stripname_result.exe;;
+ esac
+ test -n "$vinfo" && \
+ func_warning "\`-version-info' is ignored for programs"
+
+ test -n "$release" && \
+ func_warning "\`-release' is ignored for programs"
+
+ test "$preload" = yes \
+ && test "$dlopen_support" = unknown \
+ && test "$dlopen_self" = unknown \
+ && test "$dlopen_self_static" = unknown && \
+ func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support."
+
+ case $host in
+ *-*-rhapsody* | *-*-darwin1.[012])
+ # On Rhapsody replace the C library is the System framework
+ compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
+ finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
+ ;;
+ esac
+
+ case $host in
+ *-*-darwin*)
+ # Don't allow lazy linking, it breaks C++ global constructors
+ # But is supposedly fixed on 10.4 or later (yay!).
+ if test "$tagname" = CXX ; then
+ case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
+ 10.[0123])
+ compile_command="$compile_command ${wl}-bind_at_load"
+ finalize_command="$finalize_command ${wl}-bind_at_load"
+ ;;
+ esac
+ fi
+ # Time to change all our "foo.ltframework" stuff back to "-framework foo"
+ compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+ finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+ ;;
+ esac
+
+
+ # move library search paths that coincide with paths to not yet
+ # installed libraries to the beginning of the library search list
+ new_libs=
+ for path in $notinst_path; do
+ case " $new_libs " in
+ *" -L$path/$objdir "*) ;;
+ *)
+ case " $compile_deplibs " in
+ *" -L$path/$objdir "*)
+ new_libs="$new_libs -L$path/$objdir" ;;
+ esac
+ ;;
+ esac
+ done
+ for deplib in $compile_deplibs; do
+ case $deplib in
+ -L*)
+ case " $new_libs " in
+ *" $deplib "*) ;;
+ *) new_libs="$new_libs $deplib" ;;
+ esac
+ ;;
+ *) new_libs="$new_libs $deplib" ;;
+ esac
+ done
+ compile_deplibs="$new_libs"
+
+
+ compile_command="$compile_command $compile_deplibs"
+ finalize_command="$finalize_command $finalize_deplibs"
+
+ if test -n "$rpath$xrpath"; then
+ # If the user specified any rpath flags, then add them.
+ for libdir in $rpath $xrpath; do
+ # This is the magic to use -rpath.
+ case "$finalize_rpath " in
+ *" $libdir "*) ;;
+ *) finalize_rpath="$finalize_rpath $libdir" ;;
+ esac
+ done
+ fi
+
+ # Now hardcode the library paths
+ rpath=
+ hardcode_libdirs=
+ for libdir in $compile_rpath $finalize_rpath; do
+ if test -n "$hardcode_libdir_flag_spec"; then
+ if test -n "$hardcode_libdir_separator"; then
+ if test -z "$hardcode_libdirs"; then
+ hardcode_libdirs="$libdir"
+ else
+ # Just accumulate the unique libdirs.
+ case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+ *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+ ;;
+ *)
+ hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+ ;;
+ esac
+ fi
+ else
+ eval flag=\"$hardcode_libdir_flag_spec\"
+ rpath="$rpath $flag"
+ fi
+ elif test -n "$runpath_var"; then
+ case "$perm_rpath " in
+ *" $libdir "*) ;;
+ *) perm_rpath="$perm_rpath $libdir" ;;
+ esac
+ fi
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+ testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'`
+ case :$dllsearchpath: in
+ *":$libdir:"*) ;;
+ ::) dllsearchpath=$libdir;;
+ *) dllsearchpath="$dllsearchpath:$libdir";;
+ esac
+ case :$dllsearchpath: in
+ *":$testbindir:"*) ;;
+ ::) dllsearchpath=$testbindir;;
+ *) dllsearchpath="$dllsearchpath:$testbindir";;
+ esac
+ ;;
+ esac
+ done
+ # Substitute the hardcoded libdirs into the rpath.
+ if test -n "$hardcode_libdir_separator" &&
+ test -n "$hardcode_libdirs"; then
+ libdir="$hardcode_libdirs"
+ eval rpath=\" $hardcode_libdir_flag_spec\"
+ fi
+ compile_rpath="$rpath"
+
+ rpath=
+ hardcode_libdirs=
+ for libdir in $finalize_rpath; do
+ if test -n "$hardcode_libdir_flag_spec"; then
+ if test -n "$hardcode_libdir_separator"; then
+ if test -z "$hardcode_libdirs"; then
+ hardcode_libdirs="$libdir"
+ else
+ # Just accumulate the unique libdirs.
+ case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+ *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+ ;;
+ *)
+ hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+ ;;
+ esac
+ fi
+ else
+ eval flag=\"$hardcode_libdir_flag_spec\"
+ rpath="$rpath $flag"
+ fi
+ elif test -n "$runpath_var"; then
+ case "$finalize_perm_rpath " in
+ *" $libdir "*) ;;
+ *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;;
+ esac
+ fi
+ done
+ # Substitute the hardcoded libdirs into the rpath.
+ if test -n "$hardcode_libdir_separator" &&
+ test -n "$hardcode_libdirs"; then
+ libdir="$hardcode_libdirs"
+ eval rpath=\" $hardcode_libdir_flag_spec\"
+ fi
+ finalize_rpath="$rpath"
+
+ if test -n "$libobjs" && test "$build_old_libs" = yes; then
+ # Transform all the library objects into standard objects.
+ compile_command=`$ECHO "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+ finalize_command=`$ECHO "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+ fi
+
+ func_generate_dlsyms "$outputname" "@PROGRAM@" "no"
+
+ # template prelinking step
+ if test -n "$prelink_cmds"; then
+ func_execute_cmds "$prelink_cmds" 'exit $?'
+ fi
+
+ wrappers_required=yes
+ case $host in
+ *cygwin* | *mingw* )
+ if test "$build_libtool_libs" != yes; then
+ wrappers_required=no
+ fi
+ ;;
+ *cegcc)
+ # Disable wrappers for cegcc, we are cross compiling anyway.
+ wrappers_required=no
+ ;;
+ *)
+ if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
+ wrappers_required=no
+ fi
+ ;;
+ esac
+ if test "$wrappers_required" = no; then
+ # Replace the output file specification.
+ compile_command=`$ECHO "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
+ link_command="$compile_command$compile_rpath"
+
+ # We have no uninstalled library dependencies, so finalize right now.
+ exit_status=0
+ func_show_eval "$link_command" 'exit_status=$?'
+
+ # Delete the generated files.
+ if test -f "$output_objdir/${outputname}S.${objext}"; then
+ func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"'
+ fi
+
+ exit $exit_status
+ fi
+
+ if test -n "$compile_shlibpath$finalize_shlibpath"; then
+ compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
+ fi
+ if test -n "$finalize_shlibpath"; then
+ finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
+ fi
+
+ compile_var=
+ finalize_var=
+ if test -n "$runpath_var"; then
+ if test -n "$perm_rpath"; then
+ # We should set the runpath_var.
+ rpath=
+ for dir in $perm_rpath; do
+ rpath="$rpath$dir:"
+ done
+ compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
+ fi
+ if test -n "$finalize_perm_rpath"; then
+ # We should set the runpath_var.
+ rpath=
+ for dir in $finalize_perm_rpath; do
+ rpath="$rpath$dir:"
+ done
+ finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
+ fi
+ fi
+
+ if test "$no_install" = yes; then
+ # We don't need to create a wrapper script.
+ link_command="$compile_var$compile_command$compile_rpath"
+ # Replace the output file specification.
+ link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
+ # Delete the old output file.
+ $opt_dry_run || $RM $output
+ # Link the executable and exit
+ func_show_eval "$link_command" 'exit $?'
+ exit $EXIT_SUCCESS
+ fi
+
+ if test "$hardcode_action" = relink; then
+ # Fast installation is not supported
+ link_command="$compile_var$compile_command$compile_rpath"
+ relink_command="$finalize_var$finalize_command$finalize_rpath"
+
+ func_warning "this platform does not like uninstalled shared libraries"
+ func_warning "\`$output' will be relinked during installation"
+ else
+ if test "$fast_install" != no; then
+ link_command="$finalize_var$compile_command$finalize_rpath"
+ if test "$fast_install" = yes; then
+ relink_command=`$ECHO "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'`
+ else
+ # fast_install is set to needless
+ relink_command=
+ fi
+ else
+ link_command="$compile_var$compile_command$compile_rpath"
+ relink_command="$finalize_var$finalize_command$finalize_rpath"
+ fi
+ fi
+
+ # Replace the output file specification.
+ link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
+
+ # Delete the old output files.
+ $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
+
+ func_show_eval "$link_command" 'exit $?'
+
+ # Now create the wrapper script.
+ func_verbose "creating $output"
+
+ # Quote the relink command for shipping.
+ if test -n "$relink_command"; then
+ # Preserve any variables that may affect compiler behavior
+ for var in $variables_saved_for_relink; do
+ if eval test -z \"\${$var+set}\"; then
+ relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
+ elif eval var_value=\$$var; test -z "$var_value"; then
+ relink_command="$var=; export $var; $relink_command"
+ else
+ func_quote_for_eval "$var_value"
+ relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
+ fi
+ done
+ relink_command="(cd `pwd`; $relink_command)"
+ relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"`
+ fi
+
+ # Quote $ECHO for shipping.
+ if test "X$ECHO" = "X$SHELL $progpath --fallback-echo"; then
+ case $progpath in
+ [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";;
+ *) qecho="$SHELL `pwd`/$progpath --fallback-echo";;
+ esac
+ qecho=`$ECHO "X$qecho" | $Xsed -e "$sed_quote_subst"`
+ else
+ qecho=`$ECHO "X$ECHO" | $Xsed -e "$sed_quote_subst"`
+ fi
+
+ # Only actually do things if not in dry run mode.
+ $opt_dry_run || {
+ # win32 will think the script is a binary if it has
+ # a .exe suffix, so we strip it off here.
+ case $output in
+ *.exe) func_stripname '' '.exe' "$output"
+ output=$func_stripname_result ;;
+ esac
+ # test for cygwin because mv fails w/o .exe extensions
+ case $host in
+ *cygwin*)
+ exeext=.exe
+ func_stripname '' '.exe' "$outputname"
+ outputname=$func_stripname_result ;;
+ *) exeext= ;;
+ esac
+ case $host in
+ *cygwin* | *mingw* )
+ func_dirname_and_basename "$output" "" "."
+ output_name=$func_basename_result
+ output_path=$func_dirname_result
+ cwrappersource="$output_path/$objdir/lt-$output_name.c"
+ cwrapper="$output_path/$output_name.exe"
+ $RM $cwrappersource $cwrapper
+ trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
+
+ func_emit_cwrapperexe_src > $cwrappersource
+
+ # The wrapper executable is built using the $host compiler,
+ # because it contains $host paths and files. If cross-
+ # compiling, it, like the target executable, must be
+ # executed on the $host or under an emulation environment.
+ $opt_dry_run || {
+ $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
+ $STRIP $cwrapper
+ }
+
+ # Now, create the wrapper script for func_source use:
+ func_ltwrapper_scriptname $cwrapper
+ $RM $func_ltwrapper_scriptname_result
+ trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
+ $opt_dry_run || {
+ # note: this script will not be executed, so do not chmod.
+ if test "x$build" = "x$host" ; then
+ $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
+ else
+ func_emit_wrapper no > $func_ltwrapper_scriptname_result
+ fi
+ }
+ ;;
+ * )
+ $RM $output
+ trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
+
+ func_emit_wrapper no > $output
+ chmod +x $output
+ ;;
+ esac
+ }
+ exit $EXIT_SUCCESS
+ ;;
+ esac
+
+ # See if we need to build an old-fashioned archive.
+ for oldlib in $oldlibs; do
+
+ if test "$build_libtool_libs" = convenience; then
+ oldobjs="$libobjs_save $symfileobj"
+ addlibs="$convenience"
+ build_libtool_libs=no
+ else
+ if test "$build_libtool_libs" = module; then
+ oldobjs="$libobjs_save"
+ build_libtool_libs=no
+ else
+ oldobjs="$old_deplibs $non_pic_objects"
+ if test "$preload" = yes && test -f "$symfileobj"; then
+ oldobjs="$oldobjs $symfileobj"
+ fi
+ fi
+ addlibs="$old_convenience"
+ fi
+
+ if test -n "$addlibs"; then
+ gentop="$output_objdir/${outputname}x"
+ generated="$generated $gentop"
+
+ func_extract_archives $gentop $addlibs
+ oldobjs="$oldobjs $func_extract_archives_result"
+ fi
+
+ # Do each command in the archive commands.
+ if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
+ cmds=$old_archive_from_new_cmds
+ else
+
+ # Add any objects from preloaded convenience libraries
+ if test -n "$dlprefiles"; then
+ gentop="$output_objdir/${outputname}x"
+ generated="$generated $gentop"
+
+ func_extract_archives $gentop $dlprefiles
+ oldobjs="$oldobjs $func_extract_archives_result"
+ fi
+
+ # POSIX demands no paths to be encoded in archives. We have
+ # to avoid creating archives with duplicate basenames if we
+ # might have to extract them afterwards, e.g., when creating a
+ # static archive out of a convenience library, or when linking
+ # the entirety of a libtool archive into another (currently
+ # not supported by libtool).
+ if (for obj in $oldobjs
+ do
+ func_basename "$obj"
+ $ECHO "$func_basename_result"
+ done | sort | sort -uc >/dev/null 2>&1); then
+ :
+ else
+ $ECHO "copying selected object files to avoid basename conflicts..."
+ gentop="$output_objdir/${outputname}x"
+ generated="$generated $gentop"
+ func_mkdir_p "$gentop"
+ save_oldobjs=$oldobjs
+ oldobjs=
+ counter=1
+ for obj in $save_oldobjs
+ do
+ func_basename "$obj"
+ objbase="$func_basename_result"
+ case " $oldobjs " in
+ " ") oldobjs=$obj ;;
+ *[\ /]"$objbase "*)
+ while :; do
+ # Make sure we don't pick an alternate name that also
+ # overlaps.
+ newobj=lt$counter-$objbase
+ func_arith $counter + 1
+ counter=$func_arith_result
+ case " $oldobjs " in
+ *[\ /]"$newobj "*) ;;
+ *) if test ! -f "$gentop/$newobj"; then break; fi ;;
+ esac
+ done
+ func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
+ oldobjs="$oldobjs $gentop/$newobj"
+ ;;
+ *) oldobjs="$oldobjs $obj" ;;
+ esac
+ done
+ fi
+ eval cmds=\"$old_archive_cmds\"
+
+ func_len " $cmds"
+ len=$func_len_result
+ if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+ cmds=$old_archive_cmds
+ else
+ # the command line is too long to link in one step, link in parts
+ func_verbose "using piecewise archive linking..."
+ save_RANLIB=$RANLIB
+ RANLIB=:
+ objlist=
+ concat_cmds=
+ save_oldobjs=$oldobjs
+ oldobjs=
+ # Is there a better way of finding the last object in the list?
+ for obj in $save_oldobjs
+ do
+ last_oldobj=$obj
+ done
+ eval test_cmds=\"$old_archive_cmds\"
+ func_len " $test_cmds"
+ len0=$func_len_result
+ len=$len0
+ for obj in $save_oldobjs
+ do
+ func_len " $obj"
+ func_arith $len + $func_len_result
+ len=$func_arith_result
+ func_append objlist " $obj"
+ if test "$len" -lt "$max_cmd_len"; then
+ :
+ else
+ # the above command should be used before it gets too long
+ oldobjs=$objlist
+ if test "$obj" = "$last_oldobj" ; then
+ RANLIB=$save_RANLIB
+ fi
+ test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
+ objlist=
+ len=$len0
+ fi
+ done
+ RANLIB=$save_RANLIB
+ oldobjs=$objlist
+ if test "X$oldobjs" = "X" ; then
+ eval cmds=\"\$concat_cmds\"
+ else
+ eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
+ fi
+ fi
+ fi
+ func_execute_cmds "$cmds" 'exit $?'
+ done
+
+ test -n "$generated" && \
+ func_show_eval "${RM}r$generated"
+
+ # Now create the libtool archive.
+ case $output in
+ *.la)
+ old_library=
+ test "$build_old_libs" = yes && old_library="$libname.$libext"
+ func_verbose "creating $output"
+
+ # Preserve any variables that may affect compiler behavior
+ for var in $variables_saved_for_relink; do
+ if eval test -z \"\${$var+set}\"; then
+ relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
+ elif eval var_value=\$$var; test -z "$var_value"; then
+ relink_command="$var=; export $var; $relink_command"
+ else
+ func_quote_for_eval "$var_value"
+ relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
+ fi
+ done
+ # Quote the link command for shipping.
+ relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
+ relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"`
+ if test "$hardcode_automatic" = yes ; then
+ relink_command=
+ fi
+
+ # Only create the output if not a dry run.
+ $opt_dry_run || {
+ for installed in no yes; do
+ if test "$installed" = yes; then
+ if test -z "$install_libdir"; then
+ break
+ fi
+ output="$output_objdir/$outputname"i
+ # Replace all uninstalled libtool libraries with the installed ones
+ newdependency_libs=
+ for deplib in $dependency_libs; do
+ case $deplib in
+ *.la)
+ func_basename "$deplib"
+ name="$func_basename_result"
+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+ test -z "$libdir" && \
+ func_fatal_error "\`$deplib' is not a valid libtool archive"
+ newdependency_libs="$newdependency_libs $libdir/$name"
+ ;;
+ *) newdependency_libs="$newdependency_libs $deplib" ;;
+ esac
+ done
+ dependency_libs="$newdependency_libs"
+ newdlfiles=
+
+ for lib in $dlfiles; do
+ case $lib in
+ *.la)
+ func_basename "$lib"
+ name="$func_basename_result"
+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+ test -z "$libdir" && \
+ func_fatal_error "\`$lib' is not a valid libtool archive"
+ newdlfiles="$newdlfiles $libdir/$name"
+ ;;
+ *) newdlfiles="$newdlfiles $lib" ;;
+ esac
+ done
+ dlfiles="$newdlfiles"
+ newdlprefiles=
+ for lib in $dlprefiles; do
+ case $lib in
+ *.la)
+ # Only pass preopened files to the pseudo-archive (for
+ # eventual linking with the app. that links it) if we
+ # didn't already link the preopened objects directly into
+ # the library:
+ func_basename "$lib"
+ name="$func_basename_result"
+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+ test -z "$libdir" && \
+ func_fatal_error "\`$lib' is not a valid libtool archive"
+ newdlprefiles="$newdlprefiles $libdir/$name"
+ ;;
+ esac
+ done
+ dlprefiles="$newdlprefiles"
+ else
+ newdlfiles=
+ for lib in $dlfiles; do
+ case $lib in
+ [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
+ *) abs=`pwd`"/$lib" ;;
+ esac
+ newdlfiles="$newdlfiles $abs"
+ done
+ dlfiles="$newdlfiles"
+ newdlprefiles=
+ for lib in $dlprefiles; do
+ case $lib in
+ [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
+ *) abs=`pwd`"/$lib" ;;
+ esac
+ newdlprefiles="$newdlprefiles $abs"
+ done
+ dlprefiles="$newdlprefiles"
+ fi
+ $RM $output
+ # place dlname in correct position for cygwin
+ tdlname=$dlname
+ case $host,$output,$installed,$module,$dlname in
+ *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;;
+ esac
+ $ECHO > $output "\
+# $outputname - a libtool library file
+# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# The name that we can dlopen(3).
+dlname='$tdlname'
+
+# Names of this library.
+library_names='$library_names'
+
+# The name of the static archive.
+old_library='$old_library'
+
+# Linker flags that can not go in dependency_libs.
+inherited_linker_flags='$new_inherited_linker_flags'
+
+# Libraries that this one depends upon.
+dependency_libs='$dependency_libs'
+
+# Names of additional weak libraries provided by this library
+weak_library_names='$weak_libs'
+
+# Version information for $libname.
+current=$current
+age=$age
+revision=$revision
+
+# Is this an already installed library?
+installed=$installed
+
+# Should we warn about portability when linking against -modules?
+shouldnotlink=$module
+
+# Files to dlopen/dlpreopen
+dlopen='$dlfiles'
+dlpreopen='$dlprefiles'
+
+# Directory that this library needs to be installed in:
+libdir='$install_libdir'"
+ if test "$installed" = no && test "$need_relink" = yes; then
+ $ECHO >> $output "\
+relink_command=\"$relink_command\""
+ fi
+ done
+ }
+
+ # Do a symbolic link so that the libtool archive can be found in
+ # LD_LIBRARY_PATH before the program is installed.
+ func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
+ ;;
+ esac
+ exit $EXIT_SUCCESS
+}
+
+{ test "$mode" = link || test "$mode" = relink; } &&
+ func_mode_link ${1+"$@"}
+
+
+# func_mode_uninstall arg...
+func_mode_uninstall ()
+{
+ $opt_debug
+ RM="$nonopt"
+ files=
+ rmforce=
+ exit_status=0
+
+ # This variable tells wrapper scripts just to set variables rather
+ # than running their programs.
+ libtool_install_magic="$magic"
+
+ for arg
+ do
+ case $arg in
+ -f) RM="$RM $arg"; rmforce=yes ;;
+ -*) RM="$RM $arg" ;;
+ *) files="$files $arg" ;;
+ esac
+ done
+
+ test -z "$RM" && \
+ func_fatal_help "you must specify an RM program"
+
+ rmdirs=
+
+ origobjdir="$objdir"
+ for file in $files; do
+ func_dirname "$file" "" "."
+ dir="$func_dirname_result"
+ if test "X$dir" = X.; then
+ objdir="$origobjdir"
+ else
+ objdir="$dir/$origobjdir"
+ fi
+ func_basename "$file"
+ name="$func_basename_result"
+ test "$mode" = uninstall && objdir="$dir"
+
+ # Remember objdir for removal later, being careful to avoid duplicates
+ if test "$mode" = clean; then
+ case " $rmdirs " in
+ *" $objdir "*) ;;
+ *) rmdirs="$rmdirs $objdir" ;;
+ esac
+ fi
+
+ # Don't error if the file doesn't exist and rm -f was used.
+ if { test -L "$file"; } >/dev/null 2>&1 ||
+ { test -h "$file"; } >/dev/null 2>&1 ||
+ test -f "$file"; then
+ :
+ elif test -d "$file"; then
+ exit_status=1
+ continue
+ elif test "$rmforce" = yes; then
+ continue
+ fi
+
+ rmfiles="$file"
+
+ case $name in
+ *.la)
+ # Possibly a libtool archive, so verify it.
+ if func_lalib_p "$file"; then
+ func_source $dir/$name
+
+ # Delete the libtool libraries and symlinks.
+ for n in $library_names; do
+ rmfiles="$rmfiles $objdir/$n"
+ done
+ test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"
+
+ case "$mode" in
+ clean)
+ case " $library_names " in
+ # " " in the beginning catches empty $dlname
+ *" $dlname "*) ;;
+ *) rmfiles="$rmfiles $objdir/$dlname" ;;
+ esac
+ test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
+ ;;
+ uninstall)
+ if test -n "$library_names"; then
+ # Do each command in the postuninstall commands.
+ func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
+ fi
+
+ if test -n "$old_library"; then
+ # Do each command in the old_postuninstall commands.
+ func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
+ fi
+ # FIXME: should reinstall the best remaining shared library.
+ ;;
+ esac
+ fi
+ ;;
+
+ *.lo)
+ # Possibly a libtool object, so verify it.
+ if func_lalib_p "$file"; then
+
+ # Read the .lo file
+ func_source $dir/$name
+
+ # Add PIC object to the list of files to remove.
+ if test -n "$pic_object" &&
+ test "$pic_object" != none; then
+ rmfiles="$rmfiles $dir/$pic_object"
+ fi
+
+ # Add non-PIC object to the list of files to remove.
+ if test -n "$non_pic_object" &&
+ test "$non_pic_object" != none; then
+ rmfiles="$rmfiles $dir/$non_pic_object"
+ fi
+ fi
+ ;;
+
+ *)
+ if test "$mode" = clean ; then
+ noexename=$name
+ case $file in
+ *.exe)
+ func_stripname '' '.exe' "$file"
+ file=$func_stripname_result
+ func_stripname '' '.exe' "$name"
+ noexename=$func_stripname_result
+ # $file with .exe has already been added to rmfiles,
+ # add $file without .exe
+ rmfiles="$rmfiles $file"
+ ;;
+ esac
+ # Do a test to see if this is a libtool program.
+ if func_ltwrapper_p "$file"; then
+ if func_ltwrapper_executable_p "$file"; then
+ func_ltwrapper_scriptname "$file"
+ relink_command=
+ func_source $func_ltwrapper_scriptname_result
+ rmfiles="$rmfiles $func_ltwrapper_scriptname_result"
+ else
+ relink_command=
+ func_source $dir/$noexename
+ fi
+
+ # note $name still contains .exe if it was in $file originally
+ # as does the version of $file that was added into $rmfiles
+ rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}"
+ if test "$fast_install" = yes && test -n "$relink_command"; then
+ rmfiles="$rmfiles $objdir/lt-$name"
+ fi
+ if test "X$noexename" != "X$name" ; then
+ rmfiles="$rmfiles $objdir/lt-${noexename}.c"
+ fi
+ fi
+ fi
+ ;;
+ esac
+ func_show_eval "$RM $rmfiles" 'exit_status=1'
+ done
+ objdir="$origobjdir"
+
+ # Try to remove the ${objdir}s in the directories where we deleted files
+ for dir in $rmdirs; do
+ if test -d "$dir"; then
+ func_show_eval "rmdir $dir >/dev/null 2>&1"
+ fi
+ done
+
+ exit $exit_status
+}
+
+{ test "$mode" = uninstall || test "$mode" = clean; } &&
+ func_mode_uninstall ${1+"$@"}
+
+test -z "$mode" && {
+ help="$generic_help"
+ func_fatal_help "you must specify a MODE"
+}
+
+test -z "$exec_cmd" && \
+ func_fatal_help "invalid operation mode \`$mode'"
+
+if test -n "$exec_cmd"; then
+ eval exec "$exec_cmd"
+ exit $EXIT_FAILURE
+fi
+
+exit $exit_status
+
+
+# The TAGs below are defined such that we never get into a situation
+# in which we disable both kinds of libraries. Given conflicting
+# choices, we go for a static library, that is the most portable,
+# since we can't tell whether shared libraries were disabled because
+# the user asked for that or because the platform doesn't support
+# them. This is particularly important on AIX, because we don't
+# support having both static and shared libraries enabled at the same
+# time on that platform, so we default to a shared-only configuration.
+# If a disable-shared tag is given, we'll fallback to a static-only
+# configuration. But we'll never go from static-only to shared-only.
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
+build_libtool_libs=no
+build_old_libs=yes
+# ### END LIBTOOL TAG CONFIG: disable-shared
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-static
+build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
+# ### END LIBTOOL TAG CONFIG: disable-static
+
+# Local Variables:
+# mode:shell-script
+# sh-indentation:2
+# End:
+# vi:sw=2
+
diff --git a/m4/curl-compilers.m4 b/m4/curl-compilers.m4
new file mode 100644
index 0000000..1ea4d17
--- /dev/null
+++ b/m4/curl-compilers.m4
@@ -0,0 +1,1421 @@
+#***************************************************************************
+# _ _ ____ _
+# Project ___| | | | _ \| |
+# / __| | | | |_) | |
+# | (__| |_| | _ <| |___
+# \___|\___/|_| \_\_____|
+#
+# Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+#
+# This software is licensed as described in the file COPYING, which
+# you should have received as part of this distribution. The terms
+# are also available at http://curl.haxx.se/docs/copyright.html.
+#
+# You may opt to use, copy, modify, merge, publish, distribute and/or sell
+# copies of the Software, and permit persons to whom the Software is
+# furnished to do so, under the terms of the COPYING file.
+#
+# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+# KIND, either express or implied.
+#
+#***************************************************************************
+
+# File version for 'aclocal' use. Keep it a single number.
+# serial 55
+
+
+dnl CURL_CHECK_COMPILER
+dnl -------------------------------------------------
+dnl Verify if the C compiler being used is known.
+
+AC_DEFUN([CURL_CHECK_COMPILER], [
+ #
+ compiler_id="unknown"
+ compiler_num="0"
+ #
+ flags_dbg_all="unknown"
+ flags_dbg_yes="unknown"
+ flags_dbg_off="unknown"
+ flags_opt_all="unknown"
+ flags_opt_yes="unknown"
+ flags_opt_off="unknown"
+ #
+ CURL_CHECK_COMPILER_DEC_C
+ CURL_CHECK_COMPILER_HPUX_C
+ CURL_CHECK_COMPILER_IBM_C
+ CURL_CHECK_COMPILER_INTEL_C
+ CURL_CHECK_COMPILER_CLANG
+ CURL_CHECK_COMPILER_GNU_C
+ CURL_CHECK_COMPILER_LCC
+ CURL_CHECK_COMPILER_SGI_MIPSPRO_C
+ CURL_CHECK_COMPILER_SGI_MIPS_C
+ CURL_CHECK_COMPILER_SUNPRO_C
+ CURL_CHECK_COMPILER_TINY_C
+ CURL_CHECK_COMPILER_WATCOM_C
+ #
+ if test "$compiler_id" = "unknown"; then
+ cat <<_EOF 1>&2
+***
+*** Warning: This configure script does not have information about the
+*** compiler you are using, relative to the flags required to enable or
+*** disable generation of debug info, optimization options or warnings.
+***
+*** Whatever settings are present in CFLAGS will be used for this run.
+***
+*** If you wish to help the cURL project to better support your compiler
+*** you can report this and the required info on the libcurl development
+*** mailing list: http://cool.haxx.se/mailman/listinfo/curl-library/
+***
+_EOF
+ fi
+])
+
+
+dnl CURL_CHECK_COMPILER_CLANG
+dnl -------------------------------------------------
+dnl Verify if compiler being used is clang.
+
+AC_DEFUN([CURL_CHECK_COMPILER_CLANG], [
+ AC_BEFORE([$0],[CURL_CHECK_COMPILER_GNU_C])dnl
+ AC_MSG_CHECKING([if compiler is clang])
+ CURL_CHECK_DEF([__clang__], [], [silent])
+ if test "$curl_cv_have_def___clang__" = "yes"; then
+ AC_MSG_RESULT([yes])
+ compiler_id="CLANG"
+ clangver=`$CC -dumpversion`
+ clangvhi=`echo $clangver | cut -d . -f1`
+ clangvlo=`echo $clangver | cut -d . -f2`
+ compiler_num=`(expr $clangvhi "*" 100 + $clangvlo) 2>/dev/null`
+ flags_dbg_all="-g -g0 -g1 -g2 -g3"
+ flags_dbg_all="$flags_dbg_all -ggdb"
+ flags_dbg_all="$flags_dbg_all -gstabs"
+ flags_dbg_all="$flags_dbg_all -gstabs+"
+ flags_dbg_all="$flags_dbg_all -gcoff"
+ flags_dbg_all="$flags_dbg_all -gxcoff"
+ flags_dbg_all="$flags_dbg_all -gdwarf-2"
+ flags_dbg_all="$flags_dbg_all -gvms"
+ flags_dbg_yes="-g"
+ flags_dbg_off="-g0"
+ flags_opt_all="-O -O0 -O1 -O2 -Os -O3 -O4"
+ flags_opt_yes="-Os"
+ flags_opt_off="-O0"
+ else
+ AC_MSG_RESULT([no])
+ fi
+])
+
+
+dnl CURL_CHECK_COMPILER_DEC_C
+dnl -------------------------------------------------
+dnl Verify if compiler being used is DEC C.
+
+AC_DEFUN([CURL_CHECK_COMPILER_DEC_C], [
+ AC_MSG_CHECKING([if compiler is DEC/Compaq/HP C])
+ CURL_CHECK_DEF([__DECC], [], [silent])
+ CURL_CHECK_DEF([__DECC_VER], [], [silent])
+ if test "$curl_cv_have_def___DECC" = "yes" &&
+ test "$curl_cv_have_def___DECC_VER" = "yes"; then
+ AC_MSG_RESULT([yes])
+ compiler_id="DEC_C"
+ flags_dbg_all="-g -g0 -g1 -g2 -g3"
+ flags_dbg_yes="-g2"
+ flags_dbg_off="-g0"
+ flags_opt_all="-O -O0 -O1 -O2 -O3 -O4"
+ flags_opt_yes="-O1"
+ flags_opt_off="-O0"
+ else
+ AC_MSG_RESULT([no])
+ fi
+])
+
+
+dnl CURL_CHECK_COMPILER_GNU_C
+dnl -------------------------------------------------
+dnl Verify if compiler being used is GNU C.
+
+AC_DEFUN([CURL_CHECK_COMPILER_GNU_C], [
+ AC_REQUIRE([CURL_CHECK_COMPILER_INTEL_C])dnl
+ AC_REQUIRE([CURL_CHECK_COMPILER_CLANG])dnl
+ AC_MSG_CHECKING([if compiler is GNU C])
+ CURL_CHECK_DEF([__GNUC__], [], [silent])
+ if test "$curl_cv_have_def___GNUC__" = "yes" &&
+ test "$compiler_id" = "unknown"; then
+ AC_MSG_RESULT([yes])
+ compiler_id="GNU_C"
+ gccver=`$CC -dumpversion`
+ gccvhi=`echo $gccver | cut -d . -f1`
+ gccvlo=`echo $gccver | cut -d . -f2`
+ compiler_num=`(expr $gccvhi "*" 100 + $gccvlo) 2>/dev/null`
+ flags_dbg_all="-g -g0 -g1 -g2 -g3"
+ flags_dbg_all="$flags_dbg_all -ggdb"
+ flags_dbg_all="$flags_dbg_all -gstabs"
+ flags_dbg_all="$flags_dbg_all -gstabs+"
+ flags_dbg_all="$flags_dbg_all -gcoff"
+ flags_dbg_all="$flags_dbg_all -gxcoff"
+ flags_dbg_all="$flags_dbg_all -gdwarf-2"
+ flags_dbg_all="$flags_dbg_all -gvms"
+ flags_dbg_yes="-g"
+ flags_dbg_off="-g0"
+ flags_opt_all="-O -O0 -O1 -O2 -O3 -Os"
+ flags_opt_yes="-O2"
+ flags_opt_off="-O0"
+ else
+ AC_MSG_RESULT([no])
+ fi
+])
+
+
+dnl CURL_CHECK_COMPILER_HPUX_C
+dnl -------------------------------------------------
+dnl Verify if compiler being used is HP-UX C.
+
+AC_DEFUN([CURL_CHECK_COMPILER_HPUX_C], [
+ AC_MSG_CHECKING([if compiler is HP-UX C])
+ CURL_CHECK_DEF([__HP_cc], [], [silent])
+ if test "$curl_cv_have_def___HP_cc" = "yes"; then
+ AC_MSG_RESULT([yes])
+ compiler_id="HP_UX_C"
+ flags_dbg_all="-g -s"
+ flags_dbg_yes="-g"
+ flags_dbg_off="-s"
+ flags_opt_all="-O +O0 +O1 +O2 +O3 +O4"
+ flags_opt_yes="+O2"
+ flags_opt_off="+O0"
+ else
+ AC_MSG_RESULT([no])
+ fi
+])
+
+
+dnl CURL_CHECK_COMPILER_IBM_C
+dnl -------------------------------------------------
+dnl Verify if compiler being used is IBM C.
+
+AC_DEFUN([CURL_CHECK_COMPILER_IBM_C], [
+ AC_MSG_CHECKING([if compiler is IBM C])
+ CURL_CHECK_DEF([__IBMC__], [], [silent])
+ if test "$curl_cv_have_def___IBMC__" = "yes"; then
+ AC_MSG_RESULT([yes])
+ compiler_id="IBM_C"
+ flags_dbg_all="-g -g0 -g1 -g2 -g3"
+ flags_dbg_yes="-g"
+ flags_dbg_off=""
+ flags_opt_all="-O -O0 -O1 -O2 -O3 -O4 -O5"
+ flags_opt_all="$flags_opt_all -qnooptimize"
+ flags_opt_all="$flags_opt_all -qoptimize=0"
+ flags_opt_all="$flags_opt_all -qoptimize=1"
+ flags_opt_all="$flags_opt_all -qoptimize=2"
+ flags_opt_all="$flags_opt_all -qoptimize=3"
+ flags_opt_all="$flags_opt_all -qoptimize=4"
+ flags_opt_all="$flags_opt_all -qoptimize=5"
+ flags_opt_yes="-O2"
+ flags_opt_off="-qnooptimize"
+ else
+ AC_MSG_RESULT([no])
+ fi
+])
+
+
+dnl CURL_CHECK_COMPILER_INTEL_C
+dnl -------------------------------------------------
+dnl Verify if compiler being used is Intel C.
+
+AC_DEFUN([CURL_CHECK_COMPILER_INTEL_C], [
+ AC_BEFORE([$0],[CURL_CHECK_COMPILER_GNU_C])dnl
+ AC_MSG_CHECKING([if compiler is Intel C])
+ CURL_CHECK_DEF([__INTEL_COMPILER], [], [silent])
+ if test "$curl_cv_have_def___INTEL_COMPILER" = "yes"; then
+ AC_MSG_RESULT([yes])
+ compiler_num="$curl_cv_def___INTEL_COMPILER"
+ CURL_CHECK_DEF([__unix__], [], [silent])
+ if test "$curl_cv_have_def___unix__" = "yes"; then
+ compiler_id="INTEL_UNIX_C"
+ flags_dbg_all="-g -g0"
+ flags_dbg_yes="-g"
+ flags_dbg_off="-g0"
+ flags_opt_all="-O -O0 -O1 -O2 -O3 -Os"
+ flags_opt_yes="-O2"
+ flags_opt_off="-O0"
+ else
+ compiler_id="INTEL_WINDOWS_C"
+ flags_dbg_all="/ZI /Zi /zI /zi /ZD /Zd /zD /zd /Z7 /z7 /Oy /Oy-"
+ flags_dbg_all="$flags_dbg_all /debug"
+ flags_dbg_all="$flags_dbg_all /debug:none"
+ flags_dbg_all="$flags_dbg_all /debug:minimal"
+ flags_dbg_all="$flags_dbg_all /debug:partial"
+ flags_dbg_all="$flags_dbg_all /debug:full"
+ flags_dbg_all="$flags_dbg_all /debug:semantic_stepping"
+ flags_dbg_all="$flags_dbg_all /debug:extended"
+ flags_dbg_yes="/Zi /Oy-"
+ flags_dbg_off="/debug:none /Oy-"
+ flags_opt_all="/O /O0 /O1 /O2 /O3 /Od /Og /Og- /Oi /Oi-"
+ flags_opt_yes="/O2"
+ flags_opt_off="/Od"
+ fi
+ else
+ AC_MSG_RESULT([no])
+ fi
+])
+
+
+dnl CURL_CHECK_COMPILER_LCC
+dnl -------------------------------------------------
+dnl Verify if compiler being used is LCC.
+
+AC_DEFUN([CURL_CHECK_COMPILER_LCC], [
+ AC_MSG_CHECKING([if compiler is LCC])
+ CURL_CHECK_DEF([__LCC__], [], [silent])
+ if test "$curl_cv_have_def___LCC__" = "yes"; then
+ AC_MSG_RESULT([yes])
+ compiler_id="LCC"
+ flags_dbg_all="-g"
+ flags_dbg_yes="-g"
+ flags_dbg_off=""
+ flags_opt_all=""
+ flags_opt_yes=""
+ flags_opt_off=""
+ else
+ AC_MSG_RESULT([no])
+ fi
+])
+
+
+dnl CURL_CHECK_COMPILER_SGI_MIPS_C
+dnl -------------------------------------------------
+dnl Verify if compiler being used is SGI MIPS C.
+
+AC_DEFUN([CURL_CHECK_COMPILER_SGI_MIPS_C], [
+ AC_REQUIRE([CURL_CHECK_COMPILER_SGI_MIPSPRO_C])dnl
+ AC_MSG_CHECKING([if compiler is SGI MIPS C])
+ CURL_CHECK_DEF([__GNUC__], [], [silent])
+ CURL_CHECK_DEF([__sgi], [], [silent])
+ if test "$curl_cv_have_def___GNUC__" = "no" &&
+ test "$curl_cv_have_def___sgi" = "yes" &&
+ test "$compiler_id" = "unknown"; then
+ AC_MSG_RESULT([yes])
+ compiler_id="SGI_MIPS_C"
+ flags_dbg_all="-g -g0 -g1 -g2 -g3"
+ flags_dbg_yes="-g"
+ flags_dbg_off="-g0"
+ flags_opt_all="-O -O0 -O1 -O2 -O3 -Ofast"
+ flags_opt_yes="-O2"
+ flags_opt_off="-O0"
+ else
+ AC_MSG_RESULT([no])
+ fi
+])
+
+
+dnl CURL_CHECK_COMPILER_SGI_MIPSPRO_C
+dnl -------------------------------------------------
+dnl Verify if compiler being used is SGI MIPSpro C.
+
+AC_DEFUN([CURL_CHECK_COMPILER_SGI_MIPSPRO_C], [
+ AC_BEFORE([$0],[CURL_CHECK_COMPILER_SGI_MIPS_C])dnl
+ AC_MSG_CHECKING([if compiler is SGI MIPSpro C])
+ CURL_CHECK_DEF([__GNUC__], [], [silent])
+ CURL_CHECK_DEF([_COMPILER_VERSION], [], [silent])
+ CURL_CHECK_DEF([_SGI_COMPILER_VERSION], [], [silent])
+ if test "$curl_cv_have_def___GNUC__" = "no" &&
+ (test "$curl_cv_have_def__SGI_COMPILER_VERSION" = "yes" ||
+ test "$curl_cv_have_def__COMPILER_VERSION" = "yes"); then
+ AC_MSG_RESULT([yes])
+ compiler_id="SGI_MIPSPRO_C"
+ flags_dbg_all="-g -g0 -g1 -g2 -g3"
+ flags_dbg_yes="-g"
+ flags_dbg_off="-g0"
+ flags_opt_all="-O -O0 -O1 -O2 -O3 -Ofast"
+ flags_opt_yes="-O2"
+ flags_opt_off="-O0"
+ else
+ AC_MSG_RESULT([no])
+ fi
+])
+
+
+dnl CURL_CHECK_COMPILER_SUNPRO_C
+dnl -------------------------------------------------
+dnl Verify if compiler being used is SunPro C.
+
+AC_DEFUN([CURL_CHECK_COMPILER_SUNPRO_C], [
+ AC_MSG_CHECKING([if compiler is SunPro C])
+ CURL_CHECK_DEF([__SUNPRO_C], [], [silent])
+ if test "$curl_cv_have_def___SUNPRO_C" = "yes"; then
+ AC_MSG_RESULT([yes])
+ compiler_id="SUNPRO_C"
+ flags_dbg_all="-g -s"
+ flags_dbg_yes="-g"
+ flags_dbg_off="-s"
+ flags_opt_all="-O -xO -xO1 -xO2 -xO3 -xO4 -xO5"
+ flags_opt_yes="-xO2"
+ flags_opt_off=""
+ else
+ AC_MSG_RESULT([no])
+ fi
+])
+
+
+dnl CURL_CHECK_COMPILER_TINY_C
+dnl -------------------------------------------------
+dnl Verify if compiler being used is Tiny C.
+
+AC_DEFUN([CURL_CHECK_COMPILER_TINY_C], [
+ AC_MSG_CHECKING([if compiler is Tiny C])
+ CURL_CHECK_DEF([__TINYC__], [], [silent])
+ if test "$curl_cv_have_def___TINYC__" = "yes"; then
+ AC_MSG_RESULT([yes])
+ compiler_id="TINY_C"
+ flags_dbg_all="-g -b"
+ flags_dbg_yes="-g"
+ flags_dbg_off=""
+ flags_opt_all=""
+ flags_opt_yes=""
+ flags_opt_off=""
+ else
+ AC_MSG_RESULT([no])
+ fi
+])
+
+
+dnl CURL_CHECK_COMPILER_WATCOM_C
+dnl -------------------------------------------------
+dnl Verify if compiler being used is Watcom C.
+
+AC_DEFUN([CURL_CHECK_COMPILER_WATCOM_C], [
+ AC_MSG_CHECKING([if compiler is Watcom C])
+ CURL_CHECK_DEF([__WATCOMC__], [], [silent])
+ if test "$curl_cv_have_def___WATCOMC__" = "yes"; then
+ AC_MSG_RESULT([yes])
+ CURL_CHECK_DEF([__UNIX__], [], [silent])
+ if test "$curl_cv_have_def___UNIX__" = "yes"; then
+ compiler_id="WATCOM_UNIX_C"
+ flags_dbg_all="-g1 -g1+ -g2 -g3"
+ flags_dbg_yes="-g2"
+ flags_dbg_off=""
+ flags_opt_all="-O0 -O1 -O2 -O3"
+ flags_opt_yes="-O2"
+ flags_opt_off="-O0"
+ else
+ compiler_id="WATCOM_WINDOWS_C"
+ flags_dbg_all=""
+ flags_dbg_yes=""
+ flags_dbg_off=""
+ flags_opt_all=""
+ flags_opt_yes=""
+ flags_opt_off=""
+ fi
+ else
+ AC_MSG_RESULT([no])
+ fi
+])
+
+
+dnl CURL_CONVERT_INCLUDE_TO_ISYSTEM
+dnl -------------------------------------------------
+dnl Changes standard include paths present in CFLAGS
+dnl and CPPFLAGS into isystem include paths. This is
+dnl done to prevent GNUC from generating warnings on
+dnl headers from these locations, although on ancient
+dnl GNUC versions these warnings are not silenced.
+
+AC_DEFUN([CURL_CONVERT_INCLUDE_TO_ISYSTEM], [
+ AC_REQUIRE([CURL_SHFUNC_SQUEEZE])dnl
+ tmp_has_include="no"
+ tmp_chg_FLAGS="$CFLAGS"
+ for word1 in $tmp_chg_FLAGS; do
+ case "$word1" in
+ -I*)
+ tmp_has_include="yes"
+ ;;
+ esac
+ done
+ if test "$tmp_has_include" = "yes"; then
+ tmp_chg_FLAGS=`echo "$tmp_chg_FLAGS" | "$SED" 's/^-I/ -isystem /g'`
+ tmp_chg_FLAGS=`echo "$tmp_chg_FLAGS" | "$SED" 's/ -I/ -isystem /g'`
+ CFLAGS="$tmp_chg_FLAGS"
+ squeeze CFLAGS
+ fi
+ tmp_has_include="no"
+ tmp_chg_FLAGS="$CPPFLAGS"
+ for word1 in $tmp_chg_FLAGS; do
+ case "$word1" in
+ -I*)
+ tmp_has_include="yes"
+ ;;
+ esac
+ done
+ if test "$tmp_has_include" = "yes"; then
+ tmp_chg_FLAGS=`echo "$tmp_chg_FLAGS" | "$SED" 's/^-I/ -isystem /g'`
+ tmp_chg_FLAGS=`echo "$tmp_chg_FLAGS" | "$SED" 's/ -I/ -isystem /g'`
+ CPPFLAGS="$tmp_chg_FLAGS"
+ squeeze CPPFLAGS
+ fi
+])
+
+
+dnl CURL_COMPILER_WORKS_IFELSE ([ACTION-IF-WORKS], [ACTION-IF-NOT-WORKS])
+dnl -------------------------------------------------
+dnl Verify if the C compiler seems to work with the
+dnl settings that are 'active' at the time the test
+dnl is performed.
+
+AC_DEFUN([CURL_COMPILER_WORKS_IFELSE], [
+ dnl compilation capability verification
+ tmp_compiler_works="unknown"
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ ]],[[
+ int i = 1;
+ return i;
+ ]])
+ ],[
+ tmp_compiler_works="yes"
+ ],[
+ tmp_compiler_works="no"
+ echo " " >&6
+ sed 's/^/cc-fail: /' conftest.err >&6
+ echo " " >&6
+ ])
+ dnl linking capability verification
+ if test "$tmp_compiler_works" = "yes"; then
+ AC_LINK_IFELSE([
+ AC_LANG_PROGRAM([[
+ ]],[[
+ int i = 1;
+ return i;
+ ]])
+ ],[
+ tmp_compiler_works="yes"
+ ],[
+ tmp_compiler_works="no"
+ echo " " >&6
+ sed 's/^/link-fail: /' conftest.err >&6
+ echo " " >&6
+ ])
+ fi
+ dnl only do runtime verification when not cross-compiling
+ if test "x$cross_compiling" != "xyes" &&
+ test "$tmp_compiler_works" = "yes"; then
+ AC_RUN_IFELSE([
+ AC_LANG_PROGRAM([[
+# ifdef __STDC__
+# include <stdlib.h>
+# endif
+ ]],[[
+ int i = 0;
+ exit(i);
+ ]])
+ ],[
+ tmp_compiler_works="yes"
+ ],[
+ tmp_compiler_works="no"
+ echo " " >&6
+ echo "run-fail: test program exited with status $ac_status" >&6
+ echo " " >&6
+ ])
+ fi
+ dnl branch upon test result
+ if test "$tmp_compiler_works" = "yes"; then
+ ifelse($1,,:,[$1])
+ ifelse($2,,,[else
+ $2])
+ fi
+])
+
+
+dnl CURL_SET_COMPILER_BASIC_OPTS
+dnl -------------------------------------------------
+dnl Sets compiler specific options/flags which do not
+dnl depend on configure's debug, optimize or warnings
+dnl options.
+
+AC_DEFUN([CURL_SET_COMPILER_BASIC_OPTS], [
+ AC_REQUIRE([CURL_CHECK_COMPILER])dnl
+ AC_REQUIRE([CURL_SHFUNC_SQUEEZE])dnl
+ #
+ if test "$compiler_id" != "unknown"; then
+ #
+ if test "$compiler_id" = "GNU_C" ||
+ test "$compiler_id" = "CLANG"; then
+ CURL_CONVERT_INCLUDE_TO_ISYSTEM
+ fi
+ #
+ tmp_save_CPPFLAGS="$CPPFLAGS"
+ tmp_save_CFLAGS="$CFLAGS"
+ tmp_CPPFLAGS=""
+ tmp_CFLAGS=""
+ #
+ case "$compiler_id" in
+ #
+ CLANG)
+ #
+ dnl Disable warnings for unused arguments, otherwise clang will
+ dnl warn about compile-time arguments used during link-time, like
+ dnl -O and -g and -pedantic.
+ tmp_CFLAGS="$tmp_CFLAGS -Qunused-arguments"
+ ;;
+ #
+ DEC_C)
+ #
+ dnl Select strict ANSI C compiler mode
+ tmp_CFLAGS="$tmp_CFLAGS -std1"
+ dnl Turn off optimizer ANSI C aliasing rules
+ tmp_CFLAGS="$tmp_CFLAGS -noansi_alias"
+ dnl Generate warnings for missing function prototypes
+ tmp_CFLAGS="$tmp_CFLAGS -warnprotos"
+ dnl Change some warnings into fatal errors
+ tmp_CFLAGS="$tmp_CFLAGS -msg_fatal toofewargs,toomanyargs"
+ ;;
+ #
+ GNU_C)
+ #
+ dnl Placeholder
+ tmp_CFLAGS="$tmp_CFLAGS"
+ ;;
+ #
+ HP_UX_C)
+ #
+ dnl Disallow run-time dereferencing of null pointers
+ tmp_CFLAGS="$tmp_CFLAGS -z"
+ dnl Disable some remarks
+ dnl #4227: padding struct with n bytes to align member
+ dnl #4255: padding size of struct with n bytes to alignment boundary
+ tmp_CFLAGS="$tmp_CFLAGS +W 4227,4255"
+ ;;
+ #
+ IBM_C)
+ #
+ dnl Ensure that compiler optimizations are always thread-safe.
+ tmp_CFLAGS="$tmp_CFLAGS -qthreaded"
+ dnl Disable type based strict aliasing optimizations, using worst
+ dnl case aliasing assumptions when compiling. Type based aliasing
+ dnl would restrict the lvalues that could be safely used to access
+ dnl a data object.
+ tmp_CFLAGS="$tmp_CFLAGS -qnoansialias"
+ dnl Force compiler to stop after the compilation phase, without
+ dnl generating an object code file when compilation has errors.
+ tmp_CFLAGS="$tmp_CFLAGS -qhalt=e"
+ ;;
+ #
+ INTEL_UNIX_C)
+ #
+ dnl On unix this compiler uses gcc's header files, so
+ dnl we select ANSI C89 dialect plus GNU extensions.
+ tmp_CFLAGS="$tmp_CFLAGS -std=gnu89"
+ dnl Change some warnings into errors
+ dnl #140: too many arguments in function call
+ dnl #147: declaration is incompatible with 'previous one'
+ dnl #165: too few arguments in function call
+ dnl #266: function declared implicitly
+ tmp_CPPFLAGS="$tmp_CPPFLAGS -we 140,147,165,266"
+ dnl Disable some remarks
+ dnl #279: controlling expression is constant
+ dnl #981: operands are evaluated in unspecified order
+ dnl #1469: "cc" clobber ignored
+ tmp_CPPFLAGS="$tmp_CPPFLAGS -wd 279,981,1469"
+ ;;
+ #
+ INTEL_WINDOWS_C)
+ #
+ dnl Placeholder
+ tmp_CFLAGS="$tmp_CFLAGS"
+ ;;
+ #
+ LCC)
+ #
+ dnl Disallow run-time dereferencing of null pointers
+ tmp_CFLAGS="$tmp_CFLAGS -n"
+ ;;
+ #
+ SGI_MIPS_C)
+ #
+ dnl Placeholder
+ tmp_CFLAGS="$tmp_CFLAGS"
+ ;;
+ #
+ SGI_MIPSPRO_C)
+ #
+ dnl Placeholder
+ tmp_CFLAGS="$tmp_CFLAGS"
+ ;;
+ #
+ SUNPRO_C)
+ #
+ dnl Placeholder
+ tmp_CFLAGS="$tmp_CFLAGS"
+ ;;
+ #
+ TINY_C)
+ #
+ dnl Placeholder
+ tmp_CFLAGS="$tmp_CFLAGS"
+ ;;
+ #
+ WATCOM_UNIX_C)
+ #
+ dnl Placeholder
+ tmp_CFLAGS="$tmp_CFLAGS"
+ ;;
+ #
+ WATCOM_WINDOWS_C)
+ #
+ dnl Placeholder
+ tmp_CFLAGS="$tmp_CFLAGS"
+ ;;
+ #
+ esac
+ #
+ squeeze tmp_CPPFLAGS
+ squeeze tmp_CFLAGS
+ #
+ if test ! -z "$tmp_CFLAGS" || test ! -z "$tmp_CPPFLAGS"; then
+ AC_MSG_CHECKING([if compiler accepts some basic options])
+ CPPFLAGS="$tmp_save_CPPFLAGS $tmp_CPPFLAGS"
+ CFLAGS="$tmp_save_CFLAGS $tmp_CFLAGS"
+ squeeze CPPFLAGS
+ squeeze CFLAGS
+ CURL_COMPILER_WORKS_IFELSE([
+ AC_MSG_RESULT([yes])
+ AC_MSG_NOTICE([compiler options added: $tmp_CFLAGS $tmp_CPPFLAGS])
+ ],[
+ AC_MSG_RESULT([no])
+ AC_MSG_WARN([compiler options rejected: $tmp_CFLAGS $tmp_CPPFLAGS])
+ dnl restore initial settings
+ CPPFLAGS="$tmp_save_CPPFLAGS"
+ CFLAGS="$tmp_save_CFLAGS"
+ ])
+ fi
+ #
+ fi
+])
+
+
+dnl CURL_SET_COMPILER_DEBUG_OPTS
+dnl -------------------------------------------------
+dnl Sets compiler specific options/flags which depend
+dnl on configure's debug option.
+
+AC_DEFUN([CURL_SET_COMPILER_DEBUG_OPTS], [
+ AC_REQUIRE([CURL_CHECK_OPTION_DEBUG])dnl
+ AC_REQUIRE([CURL_CHECK_COMPILER])dnl
+ AC_REQUIRE([CURL_SHFUNC_SQUEEZE])dnl
+ #
+ if test "$compiler_id" != "unknown"; then
+ #
+ tmp_save_CFLAGS="$CFLAGS"
+ tmp_save_CPPFLAGS="$CPPFLAGS"
+ #
+ tmp_options=""
+ tmp_CFLAGS="$CFLAGS"
+ tmp_CPPFLAGS="$CPPFLAGS"
+ CURL_VAR_STRIP([tmp_CFLAGS],[$flags_dbg_all])
+ CURL_VAR_STRIP([tmp_CPPFLAGS],[$flags_dbg_all])
+ #
+ if test "$want_debug" = "yes"; then
+ AC_MSG_CHECKING([if compiler accepts debug enabling options])
+ tmp_options="$flags_dbg_yes"
+ fi
+ if test "$want_debug" = "no"; then
+ AC_MSG_CHECKING([if compiler accepts debug disabling options])
+ tmp_options="$flags_dbg_off"
+ fi
+ #
+ CPPFLAGS="$tmp_CPPFLAGS"
+ CFLAGS="$tmp_CFLAGS $tmp_options"
+ squeeze CPPFLAGS
+ squeeze CFLAGS
+ CURL_COMPILER_WORKS_IFELSE([
+ AC_MSG_RESULT([yes])
+ AC_MSG_NOTICE([compiler options added: $tmp_options])
+ ],[
+ AC_MSG_RESULT([no])
+ AC_MSG_WARN([compiler options rejected: $tmp_options])
+ dnl restore initial settings
+ CPPFLAGS="$tmp_save_CPPFLAGS"
+ CFLAGS="$tmp_save_CFLAGS"
+ ])
+ #
+ fi
+])
+
+
+dnl CURL_SET_COMPILER_OPTIMIZE_OPTS
+dnl -------------------------------------------------
+dnl Sets compiler specific options/flags which depend
+dnl on configure's optimize option.
+
+AC_DEFUN([CURL_SET_COMPILER_OPTIMIZE_OPTS], [
+ AC_REQUIRE([CURL_CHECK_OPTION_OPTIMIZE])dnl
+ AC_REQUIRE([CURL_CHECK_COMPILER])dnl
+ AC_REQUIRE([CURL_SHFUNC_SQUEEZE])dnl
+ #
+ if test "$compiler_id" != "unknown"; then
+ #
+ tmp_save_CFLAGS="$CFLAGS"
+ tmp_save_CPPFLAGS="$CPPFLAGS"
+ #
+ tmp_options=""
+ tmp_CFLAGS="$CFLAGS"
+ tmp_CPPFLAGS="$CPPFLAGS"
+ honor_optimize_option="yes"
+ #
+ dnl If optimization request setting has not been explicitly specified,
+ dnl it has been derived from the debug setting and initially assumed.
+ dnl This initially assumed optimizer setting will finally be ignored
+ dnl if CFLAGS or CPPFLAGS already hold optimizer flags. This implies
+ dnl that an initially assumed optimizer setting might not be honored.
+ #
+ if test "$want_optimize" = "assume_no" ||
+ test "$want_optimize" = "assume_yes"; then
+ AC_MSG_CHECKING([if compiler optimizer assumed setting might be used])
+ CURL_VAR_MATCH_IFELSE([tmp_CFLAGS],[$flags_opt_all],[
+ honor_optimize_option="no"
+ ])
+ CURL_VAR_MATCH_IFELSE([tmp_CPPFLAGS],[$flags_opt_all],[
+ honor_optimize_option="no"
+ ])
+ AC_MSG_RESULT([$honor_optimize_option])
+ if test "$honor_optimize_option" = "yes"; then
+ if test "$want_optimize" = "assume_yes"; then
+ want_optimize="yes"
+ fi
+ if test "$want_optimize" = "assume_no"; then
+ want_optimize="no"
+ fi
+ fi
+ fi
+ #
+ if test "$honor_optimize_option" = "yes"; then
+ CURL_VAR_STRIP([tmp_CFLAGS],[$flags_opt_all])
+ CURL_VAR_STRIP([tmp_CPPFLAGS],[$flags_opt_all])
+ if test "$want_optimize" = "yes"; then
+ AC_MSG_CHECKING([if compiler accepts optimizer enabling options])
+ tmp_options="$flags_opt_yes"
+ fi
+ if test "$want_optimize" = "no"; then
+ AC_MSG_CHECKING([if compiler accepts optimizer disabling options])
+ tmp_options="$flags_opt_off"
+ fi
+ CPPFLAGS="$tmp_CPPFLAGS"
+ CFLAGS="$tmp_CFLAGS $tmp_options"
+ squeeze CPPFLAGS
+ squeeze CFLAGS
+ CURL_COMPILER_WORKS_IFELSE([
+ AC_MSG_RESULT([yes])
+ AC_MSG_NOTICE([compiler options added: $tmp_options])
+ ],[
+ AC_MSG_RESULT([no])
+ AC_MSG_WARN([compiler options rejected: $tmp_options])
+ dnl restore initial settings
+ CPPFLAGS="$tmp_save_CPPFLAGS"
+ CFLAGS="$tmp_save_CFLAGS"
+ ])
+ fi
+ #
+ fi
+])
+
+
+dnl CURL_SET_COMPILER_WARNING_OPTS
+dnl -------------------------------------------------
+dnl Sets compiler options/flags which depend on
+dnl configure's warnings given option.
+
+AC_DEFUN([CURL_SET_COMPILER_WARNING_OPTS], [
+ AC_REQUIRE([CURL_CHECK_OPTION_WARNINGS])dnl
+ AC_REQUIRE([CURL_CHECK_COMPILER])dnl
+ AC_REQUIRE([CURL_SHFUNC_SQUEEZE])dnl
+ #
+ if test "$compiler_id" != "unknown"; then
+ #
+ tmp_save_CPPFLAGS="$CPPFLAGS"
+ tmp_save_CFLAGS="$CFLAGS"
+ tmp_CPPFLAGS=""
+ tmp_CFLAGS=""
+ #
+ case "$compiler_id" in
+ #
+ CLANG)
+ #
+ if test "$want_warnings" = "yes"; then
+ dnl All versions of clang support the same warnings as at least
+ dnl gcc 4.2.1 except -Wunused.
+ tmp_CFLAGS="$tmp_CFLAGS -pedantic"
+ tmp_CFLAGS="$tmp_CFLAGS -Wall -Wextra"
+ tmp_CFLAGS="$tmp_CFLAGS -Wpointer-arith -Wwrite-strings"
+ tmp_CFLAGS="$tmp_CFLAGS -Wshadow"
+ tmp_CFLAGS="$tmp_CFLAGS -Winline -Wnested-externs"
+ tmp_CFLAGS="$tmp_CFLAGS -Wmissing-declarations"
+ tmp_CFLAGS="$tmp_CFLAGS -Wmissing-prototypes"
+ tmp_CFLAGS="$tmp_CFLAGS -Wno-long-long"
+ tmp_CFLAGS="$tmp_CFLAGS -Wfloat-equal"
+ tmp_CFLAGS="$tmp_CFLAGS -Wno-multichar -Wsign-compare"
+ tmp_CFLAGS="$tmp_CFLAGS -Wundef"
+ tmp_CFLAGS="$tmp_CFLAGS -Wno-format-nonliteral"
+ tmp_CFLAGS="$tmp_CFLAGS -Wendif-labels -Wstrict-prototypes"
+ tmp_CFLAGS="$tmp_CFLAGS -Wdeclaration-after-statement"
+ tmp_CFLAGS="$tmp_CFLAGS -Wcast-align"
+ tmp_CFLAGS="$tmp_CFLAGS -Wno-system-headers"
+ tmp_CFLAGS="$tmp_CFLAGS -Wshorten-64-to-32"
+ #
+ dnl Only clang 1.1 or later
+ if test "$compiler_num" -ge "101"; then
+ tmp_CFLAGS="$tmp_CFLAGS -Wunused"
+ fi
+ fi
+ ;;
+ #
+ DEC_C)
+ #
+ if test "$want_warnings" = "yes"; then
+ dnl Select a higher warning level than default level2
+ tmp_CFLAGS="$tmp_CFLAGS -msg_enable level3"
+ fi
+ ;;
+ #
+ GNU_C)
+ #
+ if test "$want_warnings" = "yes"; then
+ #
+ dnl Do not enable -pedantic when cross-compiling with a gcc older
+ dnl than 3.0, to avoid warnings from third party system headers.
+ if test "x$cross_compiling" != "xyes" ||
+ test "$compiler_num" -ge "300"; then
+ tmp_CFLAGS="$tmp_CFLAGS -pedantic"
+ fi
+ #
+ dnl Set of options we believe *ALL* gcc versions support:
+ tmp_CFLAGS="$tmp_CFLAGS -Wall -W"
+ #
+ dnl Only gcc 1.4 or later
+ if test "$compiler_num" -ge "104"; then
+ tmp_CFLAGS="$tmp_CFLAGS -Wpointer-arith -Wwrite-strings"
+ dnl If not cross-compiling with a gcc older than 3.0
+ if test "x$cross_compiling" != "xyes" ||
+ test "$compiler_num" -ge "300"; then
+ tmp_CFLAGS="$tmp_CFLAGS -Wunused -Wshadow"
+ fi
+ fi
+ #
+ dnl Only gcc 2.7 or later
+ if test "$compiler_num" -ge "207"; then
+ tmp_CFLAGS="$tmp_CFLAGS -Winline -Wnested-externs"
+ dnl If not cross-compiling with a gcc older than 3.0
+ if test "x$cross_compiling" != "xyes" ||
+ test "$compiler_num" -ge "300"; then
+ tmp_CFLAGS="$tmp_CFLAGS -Wmissing-declarations"
+ tmp_CFLAGS="$tmp_CFLAGS -Wmissing-prototypes"
+ fi
+ fi
+ #
+ dnl Only gcc 2.95 or later
+ if test "$compiler_num" -ge "295"; then
+ tmp_CFLAGS="$tmp_CFLAGS -Wno-long-long"
+ fi
+ #
+ dnl Only gcc 2.96 or later
+ if test "$compiler_num" -ge "296"; then
+ tmp_CFLAGS="$tmp_CFLAGS -Wfloat-equal"
+ tmp_CFLAGS="$tmp_CFLAGS -Wno-multichar -Wsign-compare"
+ dnl -Wundef used only if gcc is 2.96 or later since we get
+ dnl lots of "`_POSIX_C_SOURCE' is not defined" in system
+ dnl headers with gcc 2.95.4 on FreeBSD 4.9
+ tmp_CFLAGS="$tmp_CFLAGS -Wundef"
+ fi
+ #
+ dnl Only gcc 2.97 or later
+ if test "$compiler_num" -ge "297"; then
+ tmp_CFLAGS="$tmp_CFLAGS -Wno-format-nonliteral"
+ fi
+ #
+ dnl Only gcc 3.0 or later
+ if test "$compiler_num" -ge "300"; then
+ dnl -Wunreachable-code seems totally unreliable on my gcc 3.3.2 on
+ dnl on i686-Linux as it gives us heaps with false positives.
+ dnl Also, on gcc 4.0.X it is totally unbearable and complains all
+ dnl over making it unusable for generic purposes. Let's not use it.
+ tmp_CFLAGS="$tmp_CFLAGS"
+ fi
+ #
+ dnl Only gcc 3.3 or later
+ if test "$compiler_num" -ge "303"; then
+ tmp_CFLAGS="$tmp_CFLAGS -Wendif-labels -Wstrict-prototypes"
+ fi
+ #
+ dnl Only gcc 3.4 or later
+ if test "$compiler_num" -ge "304"; then
+ tmp_CFLAGS="$tmp_CFLAGS -Wdeclaration-after-statement"
+ fi
+ #
+ dnl Only gcc 4.2 or later
+ if test "$compiler_num" -ge "402"; then
+ tmp_CFLAGS="$tmp_CFLAGS -Wcast-align"
+ fi
+ dnl Only gcc 4.3 or later
+ if test "$compiler_num" -ge "403"; then
+ tmp_CFLAGS="$tmp_CFLAGS -Wtype-limits -Wold-style-declaration"
+ tmp_CFLAGS="$tmp_CFLAGS -Wmissing-parameter-type -Wempty-body"
+ tmp_CFLAGS="$tmp_CFLAGS -Wclobbered -Wignored-qualifiers"
+ tmp_CFLAGS="$tmp_CFLAGS -Wconversion -Wno-sign-conversion -Wvla"
+ fi
+ #
+ fi
+ #
+ dnl Do not issue warnings for code in system include paths.
+ if test "$compiler_num" -ge "300"; then
+ tmp_CFLAGS="$tmp_CFLAGS -Wno-system-headers"
+ else
+ dnl When cross-compiling with a gcc older than 3.0, disable
+ dnl some warnings triggered on third party system headers.
+ if test "x$cross_compiling" = "xyes"; then
+ if test "$compiler_num" -ge "104"; then
+ dnl gcc 1.4 or later
+ tmp_CFLAGS="$tmp_CFLAGS -Wno-unused -Wno-shadow"
+ fi
+ if test "$compiler_num" -ge "207"; then
+ dnl gcc 2.7 or later
+ tmp_CFLAGS="$tmp_CFLAGS -Wno-missing-declarations"
+ tmp_CFLAGS="$tmp_CFLAGS -Wno-missing-prototypes"
+ fi
+ fi
+ fi
+ ;;
+ #
+ HP_UX_C)
+ #
+ if test "$want_warnings" = "yes"; then
+ dnl Issue all warnings
+ tmp_CFLAGS="$tmp_CFLAGS +w1"
+ fi
+ ;;
+ #
+ IBM_C)
+ #
+ dnl Placeholder
+ tmp_CFLAGS="$tmp_CFLAGS"
+ ;;
+ #
+ INTEL_UNIX_C)
+ #
+ if test "$want_warnings" = "yes"; then
+ if test "$compiler_num" -gt "600"; then
+ dnl Show errors, warnings, and remarks
+ tmp_CPPFLAGS="$tmp_CPPFLAGS -Wall -w2"
+ dnl Perform extra compile-time code checking
+ tmp_CPPFLAGS="$tmp_CPPFLAGS -Wcheck"
+ dnl Warn on nested comments
+ tmp_CPPFLAGS="$tmp_CPPFLAGS -Wcomment"
+ dnl Show warnings relative to deprecated features
+ tmp_CPPFLAGS="$tmp_CPPFLAGS -Wdeprecated"
+ dnl Enable warnings for missing prototypes
+ tmp_CPPFLAGS="$tmp_CPPFLAGS -Wmissing-prototypes"
+ dnl Enable warnings for 64-bit portability issues
+ tmp_CPPFLAGS="$tmp_CPPFLAGS -Wp64"
+ dnl Enable warnings for questionable pointer arithmetic
+ tmp_CPPFLAGS="$tmp_CPPFLAGS -Wpointer-arith"
+ dnl Check for function return typw issues
+ tmp_CPPFLAGS="$tmp_CPPFLAGS -Wreturn-type"
+ dnl Warn on variable declarations hiding a previous one
+ tmp_CPPFLAGS="$tmp_CPPFLAGS -Wshadow"
+ dnl Warn when a variable is used before initialized
+ tmp_CPPFLAGS="$tmp_CPPFLAGS -Wuninitialized"
+ dnl Warn if a declared function is not used
+ tmp_CPPFLAGS="$tmp_CPPFLAGS -Wunused-function"
+ fi
+ fi
+ dnl Disable using EBP register in optimizations
+ tmp_CFLAGS="$tmp_CFLAGS -fno-omit-frame-pointer"
+ dnl Disable use of ANSI C aliasing rules in optimizations
+ tmp_CFLAGS="$tmp_CFLAGS -fno-strict-aliasing"
+ dnl Value-safe optimizations on floating-point data
+ tmp_CFLAGS="$tmp_CFLAGS -fp-model precise"
+ dnl Only icc 10.0 or later
+ if test "$compiler_num" -ge "1000"; then
+ dnl Disable vectorizer diagnostic information
+ tmp_CFLAGS="$tmp_CFLAGS -vec-report0"
+ fi
+ ;;
+ #
+ INTEL_WINDOWS_C)
+ #
+ dnl Placeholder
+ tmp_CFLAGS="$tmp_CFLAGS"
+ ;;
+ #
+ LCC)
+ #
+ if test "$want_warnings" = "yes"; then
+ dnl Highest warning level is double -A, next is single -A.
+ dnl Due to the big number of warnings these trigger on third
+ dnl party header files it is impractical for us to use any of
+ dnl them here. If you want them simply define it in CPPFLAGS.
+ tmp_CFLAGS="$tmp_CFLAGS"
+ fi
+ ;;
+ #
+ SGI_MIPS_C)
+ #
+ if test "$want_warnings" = "yes"; then
+ dnl Perform stricter semantic and lint-like checks
+ tmp_CFLAGS="$tmp_CFLAGS -fullwarn"
+ fi
+ ;;
+ #
+ SGI_MIPSPRO_C)
+ #
+ if test "$want_warnings" = "yes"; then
+ dnl Perform stricter semantic and lint-like checks
+ tmp_CFLAGS="$tmp_CFLAGS -fullwarn"
+ dnl Disable some remarks
+ dnl #1209: controlling expression is constant
+ tmp_CFLAGS="$tmp_CFLAGS -woff 1209"
+ fi
+ ;;
+ #
+ SUNPRO_C)
+ #
+ if test "$want_warnings" = "yes"; then
+ dnl Perform stricter semantic and lint-like checks
+ tmp_CFLAGS="$tmp_CFLAGS -v"
+ fi
+ ;;
+ #
+ TINY_C)
+ #
+ if test "$want_warnings" = "yes"; then
+ dnl Activate all warnings
+ tmp_CFLAGS="$tmp_CFLAGS -Wall"
+ dnl Make string constants be of type const char *
+ tmp_CFLAGS="$tmp_CFLAGS -Wwrite-strings"
+ dnl Warn use of unsupported GCC features ignored by TCC
+ tmp_CFLAGS="$tmp_CFLAGS -Wunsupported"
+ fi
+ ;;
+ #
+ WATCOM_UNIX_C)
+ #
+ if test "$want_warnings" = "yes"; then
+ dnl Issue all warnings
+ tmp_CFLAGS="$tmp_CFLAGS -Wall -Wextra"
+ fi
+ ;;
+ #
+ WATCOM_WINDOWS_C)
+ #
+ dnl Placeholder
+ tmp_CFLAGS="$tmp_CFLAGS"
+ ;;
+ #
+ esac
+ #
+ squeeze tmp_CPPFLAGS
+ squeeze tmp_CFLAGS
+ #
+ if test ! -z "$tmp_CFLAGS" || test ! -z "$tmp_CPPFLAGS"; then
+ AC_MSG_CHECKING([if compiler accepts strict warning options])
+ CPPFLAGS="$tmp_save_CPPFLAGS $tmp_CPPFLAGS"
+ CFLAGS="$tmp_save_CFLAGS $tmp_CFLAGS"
+ squeeze CPPFLAGS
+ squeeze CFLAGS
+ CURL_COMPILER_WORKS_IFELSE([
+ AC_MSG_RESULT([yes])
+ AC_MSG_NOTICE([compiler options added: $tmp_CFLAGS $tmp_CPPFLAGS])
+ ],[
+ AC_MSG_RESULT([no])
+ AC_MSG_WARN([compiler options rejected: $tmp_CFLAGS $tmp_CPPFLAGS])
+ dnl restore initial settings
+ CPPFLAGS="$tmp_save_CPPFLAGS"
+ CFLAGS="$tmp_save_CFLAGS"
+ ])
+ fi
+ #
+ fi
+])
+
+
+dnl CURL_SHFUNC_SQUEEZE
+dnl -------------------------------------------------
+dnl Declares a shell function squeeze() which removes
+dnl redundant whitespace out of a shell variable.
+
+AC_DEFUN([CURL_SHFUNC_SQUEEZE], [
+squeeze() {
+ _sqz_result=""
+ eval _sqz_input=\[$][$]1
+ for _sqz_token in $_sqz_input; do
+ if test -z "$_sqz_result"; then
+ _sqz_result="$_sqz_token"
+ else
+ _sqz_result="$_sqz_result $_sqz_token"
+ fi
+ done
+ eval [$]1=\$_sqz_result
+ return 0
+}
+])
+
+
+dnl CURL_CHECK_CURLDEBUG
+dnl -------------------------------------------------
+dnl Settings which depend on configure's curldebug given
+dnl option, and other additional configure pre-requisites.
+dnl Actually the curl debug memory tracking feature can
+dnl only be used/enabled when libcurl is built as a static
+dnl library or as a shared one on those systems on which
+dnl shared libraries support undefined symbols.
+
+AC_DEFUN([CURL_CHECK_CURLDEBUG], [
+ AC_REQUIRE([CURL_SHFUNC_SQUEEZE])dnl
+ supports_curldebug="unknown"
+ if test "$want_curldebug" = "yes"; then
+ if test "x$enable_shared" != "xno" &&
+ test "x$enable_shared" != "xyes"; then
+ AC_MSG_WARN([unknown enable_shared setting.])
+ supports_curldebug="no"
+ fi
+ if test "x$enable_static" != "xno" &&
+ test "x$enable_static" != "xyes"; then
+ AC_MSG_WARN([unknown enable_static setting.])
+ supports_curldebug="no"
+ fi
+ if test "$supports_curldebug" != "no"; then
+ if test "$enable_shared" = "yes" &&
+ test "$need_no_undefined" = "yes"; then
+ supports_curldebug="no"
+ AC_MSG_WARN([shared library does not support undefined symbols.])
+ fi
+ fi
+ fi
+ #
+ if test "$want_curldebug" = "yes"; then
+ AC_MSG_CHECKING([if curl debug memory tracking can be enabled])
+ test "$supports_curldebug" = "no" || supports_curldebug="yes"
+ AC_MSG_RESULT([$supports_curldebug])
+ if test "$supports_curldebug" = "no"; then
+ AC_MSG_WARN([cannot enable curl debug memory tracking.])
+ want_curldebug="no"
+ fi
+ fi
+ #
+ if test "$want_curldebug" = "yes"; then
+ CPPFLAGS="$CPPFLAGS -DCURLDEBUG"
+ squeeze CPPFLAGS
+ fi
+ if test "$want_debug" = "yes"; then
+ CPPFLAGS="$CPPFLAGS -DDEBUGBUILD"
+ squeeze CPPFLAGS
+ fi
+])
+
+
+dnl CURL_CHECK_NO_UNDEFINED
+dnl -------------------------------------------------
+dnl Checks if the -no-undefined flag must be used when
+dnl building shared libraries. This is required on all
+dnl systems on which shared libraries should not have
+dnl references to undefined symbols. This check should
+dnl not be done before AC-PROG-LIBTOOL.
+
+AC_DEFUN([CURL_CHECK_NO_UNDEFINED], [
+ AC_BEFORE([$0],[CURL_CHECK_CURLDEBUG])dnl
+ AC_MSG_CHECKING([if shared libraries need -no-undefined])
+ need_no_undefined="no"
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc* | *-*-aix*)
+ need_no_undefined="yes"
+ ;;
+ esac
+ if test "x$allow_undefined" = "xno"; then
+ need_no_undefined="yes"
+ elif test "x$allow_undefined_flag" = "xunsupported"; then
+ need_no_undefined="yes"
+ fi
+ AC_MSG_RESULT($need_no_undefined)
+])
+
+
+dnl CURL_CHECK_PROG_CC
+dnl -------------------------------------------------
+dnl Check for compiler program, preventing CFLAGS and
+dnl CPPFLAGS from being unexpectedly changed.
+
+AC_DEFUN([CURL_CHECK_PROG_CC], [
+ ac_save_CFLAGS="$CFLAGS"
+ ac_save_CPPFLAGS="$CPPFLAGS"
+ AC_PROG_CC
+ CFLAGS="$ac_save_CFLAGS"
+ CPPFLAGS="$ac_save_CPPFLAGS"
+])
+
+
+dnl CURL_CHECK_COMPILER_HALT_ON_ERROR
+dnl -------------------------------------------------
+dnl Verifies if the compiler actually halts after the
+dnl compilation phase without generating any object
+dnl code file, when the source compiles with errors.
+
+AC_DEFUN([CURL_CHECK_COMPILER_HALT_ON_ERROR], [
+ AC_MSG_CHECKING([if compiler halts on compilation errors])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ ]],[[
+ force compilation error
+ ]])
+ ],[
+ AC_MSG_RESULT([no])
+ AC_MSG_ERROR([compiler does not halt on compilation errors.])
+ ],[
+ AC_MSG_RESULT([yes])
+ ])
+])
+
+
+dnl CURL_CHECK_COMPILER_ARRAY_SIZE_NEGATIVE
+dnl -------------------------------------------------
+dnl Verifies if the compiler actually halts after the
+dnl compilation phase without generating any object
+dnl code file, when the source code tries to define a
+dnl type for a constant array with negative dimension.
+
+AC_DEFUN([CURL_CHECK_COMPILER_ARRAY_SIZE_NEGATIVE], [
+ AC_REQUIRE([CURL_CHECK_COMPILER_HALT_ON_ERROR])dnl
+ AC_MSG_CHECKING([if compiler halts on negative sized arrays])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ typedef char bad_t[sizeof(char) == sizeof(int) ? -1 : -1 ];
+ ]],[[
+ bad_t dummy;
+ ]])
+ ],[
+ AC_MSG_RESULT([no])
+ AC_MSG_ERROR([compiler does not halt on negative sized arrays.])
+ ],[
+ AC_MSG_RESULT([yes])
+ ])
+])
+
+
+dnl CURL_CHECK_COMPILER_STRUCT_MEMBER_SIZE
+dnl -------------------------------------------------
+dnl Verifies if the compiler is capable of handling the
+dnl size of a struct member, struct which is a function
+dnl result, as a compilation-time condition inside the
+dnl type definition of a constant array.
+
+AC_DEFUN([CURL_CHECK_COMPILER_STRUCT_MEMBER_SIZE], [
+ AC_REQUIRE([CURL_CHECK_COMPILER_ARRAY_SIZE_NEGATIVE])dnl
+ AC_MSG_CHECKING([if compiler struct member size checking works])
+ tst_compiler_check_one_works="unknown"
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ struct mystruct {
+ int mi;
+ char mc;
+ struct mystruct *next;
+ };
+ struct mystruct myfunc();
+ typedef char good_t1[sizeof(myfunc().mi) == sizeof(int) ? 1 : -1 ];
+ typedef char good_t2[sizeof(myfunc().mc) == sizeof(char) ? 1 : -1 ];
+ ]],[[
+ good_t1 dummy1;
+ good_t2 dummy2;
+ ]])
+ ],[
+ tst_compiler_check_one_works="yes"
+ ],[
+ tst_compiler_check_one_works="no"
+ sed 's/^/cc-src: /' conftest.$ac_ext >&6
+ sed 's/^/cc-err: /' conftest.err >&6
+ ])
+ tst_compiler_check_two_works="unknown"
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ struct mystruct {
+ int mi;
+ char mc;
+ struct mystruct *next;
+ };
+ struct mystruct myfunc();
+ typedef char bad_t1[sizeof(myfunc().mi) != sizeof(int) ? 1 : -1 ];
+ typedef char bad_t2[sizeof(myfunc().mc) != sizeof(char) ? 1 : -1 ];
+ ]],[[
+ bad_t1 dummy1;
+ bad_t2 dummy2;
+ ]])
+ ],[
+ tst_compiler_check_two_works="no"
+ ],[
+ tst_compiler_check_two_works="yes"
+ ])
+ if test "$tst_compiler_check_one_works" = "yes" &&
+ test "$tst_compiler_check_two_works" = "yes"; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ AC_MSG_ERROR([compiler fails struct member size checking.])
+ fi
+])
+
+
+dnl CURL_VAR_MATCH (VARNAME, VALUE)
+dnl -------------------------------------------------
+dnl Verifies if shell variable VARNAME contains VALUE.
+dnl Contents of variable VARNAME and VALUE are handled
+dnl as whitespace separated lists of words. If at least
+dnl one word of VALUE is present in VARNAME the match
+dnl is considered positive, otherwise false.
+
+AC_DEFUN([CURL_VAR_MATCH], [
+ ac_var_match_word="no"
+ for word1 in $[$1]; do
+ for word2 in [$2]; do
+ if test "$word1" = "$word2"; then
+ ac_var_match_word="yes"
+ fi
+ done
+ done
+])
+
+
+dnl CURL_VAR_MATCH_IFELSE (VARNAME, VALUE,
+dnl [ACTION-IF-MATCH], [ACTION-IF-NOT-MATCH])
+dnl -------------------------------------------------
+dnl This performs a CURL_VAR_MATCH check and executes
+dnl first branch if the match is positive, otherwise
+dnl the second branch is executed.
+
+AC_DEFUN([CURL_VAR_MATCH_IFELSE], [
+ CURL_VAR_MATCH([$1],[$2])
+ if test "$ac_var_match_word" = "yes"; then
+ ifelse($3,,:,[$3])
+ ifelse($4,,,[else
+ $4])
+ fi
+])
+
+
+dnl CURL_VAR_STRIP (VARNAME, VALUE)
+dnl -------------------------------------------------
+dnl Contents of variable VARNAME and VALUE are handled
+dnl as whitespace separated lists of words. Each word
+dnl from VALUE is removed from VARNAME when present.
+
+AC_DEFUN([CURL_VAR_STRIP], [
+ AC_REQUIRE([CURL_SHFUNC_SQUEEZE])dnl
+ ac_var_stripped=""
+ for word1 in $[$1]; do
+ ac_var_strip_word="no"
+ for word2 in [$2]; do
+ if test "$word1" = "$word2"; then
+ ac_var_strip_word="yes"
+ fi
+ done
+ if test "$ac_var_strip_word" = "no"; then
+ ac_var_stripped="$ac_var_stripped $word1"
+ fi
+ done
+ dnl squeeze whitespace out of result
+ [$1]="$ac_var_stripped"
+ squeeze [$1]
+])
+
diff --git a/m4/curl-confopts.m4 b/m4/curl-confopts.m4
new file mode 100644
index 0000000..bb25bb9
--- /dev/null
+++ b/m4/curl-confopts.m4
@@ -0,0 +1,498 @@
+#***************************************************************************
+# _ _ ____ _
+# Project ___| | | | _ \| |
+# / __| | | | |_) | |
+# | (__| |_| | _ <| |___
+# \___|\___/|_| \_\_____|
+#
+# Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+#
+# This software is licensed as described in the file COPYING, which
+# you should have received as part of this distribution. The terms
+# are also available at http://curl.haxx.se/docs/copyright.html.
+#
+# You may opt to use, copy, modify, merge, publish, distribute and/or sell
+# copies of the Software, and permit persons to whom the Software is
+# furnished to do so, under the terms of the COPYING file.
+#
+# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+# KIND, either express or implied.
+#
+#***************************************************************************
+
+# File version for 'aclocal' use. Keep it a single number.
+# serial 13
+
+dnl CURL_CHECK_OPTION_THREADED_RESOLVER
+dnl -------------------------------------------------
+dnl Verify if configure has been invoked with option
+dnl --enable-threaded-resolver or --disable-threaded-resolver, and
+dnl set shell variable want_thres as appropriate.
+
+AC_DEFUN([CURL_CHECK_OPTION_THREADED_RESOLVER], [
+ AC_MSG_CHECKING([whether to enable the threaded resolver])
+ OPT_THRES="default"
+ AC_ARG_ENABLE(threaded_resolver,
+AC_HELP_STRING([--enable-threaded-resolver],[Enable threaded resolver])
+AC_HELP_STRING([--disable-threaded-resolver],[Disable threaded resolver]),
+ OPT_THRES=$enableval)
+ case "$OPT_THRES" in
+ yes)
+ dnl --enable-threaded-resolver option used
+ want_thres="yes"
+ ;;
+ *)
+ dnl configure option not specified
+ want_thres="no"
+ ;;
+ esac
+ AC_MSG_RESULT([$want_thres])
+])
+
+dnl CURL_CHECK_OPTION_ARES
+dnl -------------------------------------------------
+dnl Verify if configure has been invoked with option
+dnl --enable-ares or --disable-ares, and
+dnl set shell variable want_ares as appropriate.
+
+AC_DEFUN([CURL_CHECK_OPTION_ARES], [
+dnl AC_BEFORE([$0],[CURL_CHECK_OPTION_THREADS])dnl
+ AC_BEFORE([$0],[CURL_CHECK_LIB_ARES])dnl
+ AC_MSG_CHECKING([whether to enable c-ares for DNS lookups])
+ OPT_ARES="default"
+ AC_ARG_ENABLE(ares,
+AC_HELP_STRING([--enable-ares@<:@=PATH@:>@],[Enable c-ares for DNS lookups])
+AC_HELP_STRING([--disable-ares],[Disable c-ares for DNS lookups]),
+ OPT_ARES=$enableval)
+ case "$OPT_ARES" in
+ no)
+ dnl --disable-ares option used
+ want_ares="no"
+ ;;
+ default)
+ dnl configure option not specified
+ want_ares="no"
+ ;;
+ *)
+ dnl --enable-ares option used
+ want_ares="yes"
+ if test -n "$enableval" && test "$enableval" != "yes"; then
+ want_ares_path="$enableval"
+ fi
+ ;;
+ esac
+ AC_MSG_RESULT([$want_ares])
+])
+
+
+dnl CURL_CHECK_OPTION_CURLDEBUG
+dnl -------------------------------------------------
+dnl Verify if configure has been invoked with option
+dnl --enable-curldebug or --disable-curldebug, and set
+dnl shell variable want_curldebug value as appropriate.
+
+AC_DEFUN([CURL_CHECK_OPTION_CURLDEBUG], [
+ AC_BEFORE([$0],[CURL_CHECK_CURLDEBUG])dnl
+ AC_MSG_CHECKING([whether to enable curl debug memory tracking])
+ OPT_CURLDEBUG_BUILD="default"
+ AC_ARG_ENABLE(curldebug,
+AC_HELP_STRING([--enable-curldebug],[Enable curl debug memory tracking])
+AC_HELP_STRING([--disable-curldebug],[Disable curl debug memory tracking]),
+ OPT_CURLDEBUG_BUILD=$enableval)
+ case "$OPT_CURLDEBUG_BUILD" in
+ no)
+ dnl --disable-curldebug option used
+ want_curldebug="no"
+ AC_MSG_RESULT([no])
+ ;;
+ default)
+ dnl configure's curldebug option not specified. Initially we will
+ dnl handle this as a a request to use the same setting as option
+ dnl --enable-debug. IOW, initially, for debug-enabled builds
+ dnl this will be handled as a request to enable curldebug if
+ dnl possible, and for debug-disabled builds this will be handled
+ dnl as a request to disable curldebug.
+ if test "$want_debug" = "yes"; then
+ AC_MSG_RESULT([(assumed) yes])
+ else
+ AC_MSG_RESULT([no])
+ fi
+ want_curldebug_assumed="yes"
+ want_curldebug="$want_debug"
+ ;;
+ *)
+ dnl --enable-curldebug option used.
+ dnl The use of this option value is a request to enable curl's
+ dnl debug memory tracking for the libcurl library. This can only
+ dnl be done when some requisites are simultaneously satisfied.
+ dnl Later on, these requisites are verified and if they are not
+ dnl fully satisfied the option will be ignored and act as if
+ dnl --disable-curldebug had been given setting shell variable
+ dnl want_curldebug to 'no'.
+ want_curldebug="yes"
+ AC_MSG_RESULT([yes])
+ ;;
+ esac
+])
+
+
+dnl CURL_CHECK_OPTION_DEBUG
+dnl -------------------------------------------------
+dnl Verify if configure has been invoked with option
+dnl --enable-debug or --disable-debug, and set shell
+dnl variable want_debug value as appropriate.
+
+AC_DEFUN([CURL_CHECK_OPTION_DEBUG], [
+ AC_BEFORE([$0],[CURL_CHECK_OPTION_WARNINGS])dnl
+ AC_BEFORE([$0],[CURL_CHECK_OPTION_CURLDEBUG])dnl
+ AC_BEFORE([$0],[CURL_CHECK_PROG_CC])dnl
+ AC_MSG_CHECKING([whether to enable debug build options])
+ OPT_DEBUG_BUILD="default"
+ AC_ARG_ENABLE(debug,
+AC_HELP_STRING([--enable-debug],[Enable debug build options])
+AC_HELP_STRING([--disable-debug],[Disable debug build options]),
+ OPT_DEBUG_BUILD=$enableval)
+ case "$OPT_DEBUG_BUILD" in
+ no)
+ dnl --disable-debug option used
+ want_debug="no"
+ ;;
+ default)
+ dnl configure option not specified
+ want_debug="no"
+ ;;
+ *)
+ dnl --enable-debug option used
+ want_debug="yes"
+ ;;
+ esac
+ AC_MSG_RESULT([$want_debug])
+])
+
+
+dnl CURL_CHECK_OPTION_NONBLOCKING
+dnl -------------------------------------------------
+dnl Verify if configure has been invoked with option
+dnl --enable-nonblocking or --disable-nonblocking, and
+dnl set shell variable want_nonblocking as appropriate.
+
+AC_DEFUN([CURL_CHECK_OPTION_NONBLOCKING], [
+ AC_BEFORE([$0],[CURL_CHECK_NONBLOCKING_SOCKET])dnl
+ AC_MSG_CHECKING([whether to enable non-blocking communications])
+ OPT_NONBLOCKING="default"
+ AC_ARG_ENABLE(nonblocking,
+AC_HELP_STRING([--enable-nonblocking],[Enable non-blocking communications])
+AC_HELP_STRING([--disable-nonblocking],[Disable non-blocking communications]),
+ OPT_NONBLOCKING=$enableval)
+ case "$OPT_NONBLOCKING" in
+ no)
+ dnl --disable-nonblocking option used
+ want_nonblocking="no"
+ ;;
+ default)
+ dnl configure option not specified
+ want_nonblocking="yes"
+ ;;
+ *)
+ dnl --enable-nonblocking option used
+ want_nonblocking="yes"
+ ;;
+ esac
+ AC_MSG_RESULT([$want_nonblocking])
+])
+
+
+dnl CURL_CHECK_OPTION_OPTIMIZE
+dnl -------------------------------------------------
+dnl Verify if configure has been invoked with option
+dnl --enable-optimize or --disable-optimize, and set
+dnl shell variable want_optimize value as appropriate.
+
+AC_DEFUN([CURL_CHECK_OPTION_OPTIMIZE], [
+ AC_REQUIRE([CURL_CHECK_OPTION_DEBUG])dnl
+ AC_BEFORE([$0],[CURL_CHECK_PROG_CC])dnl
+ AC_MSG_CHECKING([whether to enable compiler optimizer])
+ OPT_COMPILER_OPTIMIZE="default"
+ AC_ARG_ENABLE(optimize,
+AC_HELP_STRING([--enable-optimize],[Enable compiler optimizations])
+AC_HELP_STRING([--disable-optimize],[Disable compiler optimizations]),
+ OPT_COMPILER_OPTIMIZE=$enableval)
+ case "$OPT_COMPILER_OPTIMIZE" in
+ no)
+ dnl --disable-optimize option used. We will handle this as
+ dnl a request to disable compiler optimizations if possible.
+ dnl If the compiler is known CFLAGS and CPPFLAGS will be
+ dnl overridden, otherwise this can not be honored.
+ want_optimize="no"
+ AC_MSG_RESULT([no])
+ ;;
+ default)
+ dnl configure's optimize option not specified. Initially we will
+ dnl handle this as a a request contrary to configure's setting
+ dnl for --enable-debug. IOW, initially, for debug-enabled builds
+ dnl this will be handled as a request to disable optimizations if
+ dnl possible, and for debug-disabled builds this will be handled
+ dnl initially as a request to enable optimizations if possible.
+ dnl Finally, if the compiler is known and CFLAGS and CPPFLAGS do
+ dnl not have any optimizer flag the request will be honored, in
+ dnl any other case the request can not be honored.
+ dnl IOW, existing optimizer flags defined in CFLAGS or CPPFLAGS
+ dnl will always take precedence over any initial assumption.
+ if test "$want_debug" = "yes"; then
+ want_optimize="assume_no"
+ AC_MSG_RESULT([(assumed) no])
+ else
+ want_optimize="assume_yes"
+ AC_MSG_RESULT([(assumed) yes])
+ fi
+ ;;
+ *)
+ dnl --enable-optimize option used. We will handle this as
+ dnl a request to enable compiler optimizations if possible.
+ dnl If the compiler is known CFLAGS and CPPFLAGS will be
+ dnl overridden, otherwise this can not be honored.
+ want_optimize="yes"
+ AC_MSG_RESULT([yes])
+ ;;
+ esac
+])
+
+
+dnl CURL_CHECK_OPTION_THREADS
+dnl -------------------------------------------------
+dnl Verify if configure has been invoked with option
+dnl --enable-threads or --disable-threads, and
+dnl set shell variable want_threads as appropriate.
+
+dnl AC_DEFUN([CURL_CHECK_OPTION_THREADS], [
+dnl AC_BEFORE([$0],[CURL_CHECK_LIB_THREADS])dnl
+dnl AC_MSG_CHECKING([whether to enable threads for DNS lookups])
+dnl OPT_THREADS="default"
+dnl AC_ARG_ENABLE(threads,
+dnl AC_HELP_STRING([--enable-threads@<:@=PATH@:>@],[Enable threads for DNS lookups])
+dnl AC_HELP_STRING([--disable-threads],[Disable threads for DNS lookups]),
+dnl OPT_THREADS=$enableval)
+dnl case "$OPT_THREADS" in
+dnl no)
+dnl dnl --disable-threads option used
+dnl want_threads="no"
+dnl AC_MSG_RESULT([no])
+dnl ;;
+dnl default)
+dnl dnl configure option not specified
+dnl want_threads="no"
+dnl AC_MSG_RESULT([(assumed) no])
+dnl ;;
+dnl *)
+dnl dnl --enable-threads option used
+dnl want_threads="yes"
+dnl want_threads_path="$enableval"
+dnl AC_MSG_RESULT([yes])
+dnl ;;
+dnl esac
+dnl #
+dnl if test "$want_ares" = "assume_yes"; then
+dnl if test "$want_threads" = "yes"; then
+dnl AC_MSG_CHECKING([whether to ignore c-ares enabling assumed setting])
+dnl AC_MSG_RESULT([yes])
+dnl want_ares="no"
+dnl else
+dnl want_ares="yes"
+dnl fi
+dnl fi
+dnl if test "$want_threads" = "yes" && test "$want_ares" = "yes"; then
+dnl AC_MSG_ERROR([options --enable-ares and --enable-threads are mutually exclusive, at most one may be enabled.])
+dnl fi
+dnl ])
+
+
+dnl CURL_CHECK_OPTION_WARNINGS
+dnl -------------------------------------------------
+dnl Verify if configure has been invoked with option
+dnl --enable-warnings or --disable-warnings, and set
+dnl shell variable want_warnings as appropriate.
+
+AC_DEFUN([CURL_CHECK_OPTION_WARNINGS], [
+ AC_REQUIRE([CURL_CHECK_OPTION_DEBUG])dnl
+ AC_BEFORE([$0],[CURL_CHECK_OPTION_WERROR])dnl
+ AC_BEFORE([$0],[CURL_CHECK_PROG_CC])dnl
+ AC_MSG_CHECKING([whether to enable strict compiler warnings])
+ OPT_COMPILER_WARNINGS="default"
+ AC_ARG_ENABLE(warnings,
+AC_HELP_STRING([--enable-warnings],[Enable strict compiler warnings])
+AC_HELP_STRING([--disable-warnings],[Disable strict compiler warnings]),
+ OPT_COMPILER_WARNINGS=$enableval)
+ case "$OPT_COMPILER_WARNINGS" in
+ no)
+ dnl --disable-warnings option used
+ want_warnings="no"
+ ;;
+ default)
+ dnl configure option not specified, so
+ dnl use same setting as --enable-debug
+ want_warnings="$want_debug"
+ ;;
+ *)
+ dnl --enable-warnings option used
+ want_warnings="yes"
+ ;;
+ esac
+ AC_MSG_RESULT([$want_warnings])
+])
+
+dnl CURL_CHECK_OPTION_WERROR
+dnl -------------------------------------------------
+dnl Verify if configure has been invoked with option
+dnl --enable-werror or --disable-werror, and set
+dnl shell variable want_werror as appropriate.
+
+AC_DEFUN([CURL_CHECK_OPTION_WERROR], [
+ AC_BEFORE([$0],[CURL_CHECK_COMPILER])dnl
+ AC_MSG_CHECKING([whether to enable compiler warnings as errors])
+ OPT_COMPILER_WERROR="default"
+ AC_ARG_ENABLE(werror,
+AC_HELP_STRING([--enable-werror],[Enable compiler warnings as errors])
+AC_HELP_STRING([--disable-werror],[Disable compiler warnings as errors]),
+ OPT_COMPILER_WERROR=$enableval)
+ case "$OPT_COMPILER_WERROR" in
+ no)
+ dnl --disable-werror option used
+ want_werror="no"
+ ;;
+ default)
+ dnl configure option not specified
+ want_werror="no"
+ ;;
+ *)
+ dnl --enable-werror option used
+ want_werror="yes"
+ ;;
+ esac
+ AC_MSG_RESULT([$want_werror])
+])
+
+
+dnl CURL_CHECK_NONBLOCKING_SOCKET
+dnl -------------------------------------------------
+dnl Check for how to set a socket into non-blocking state.
+
+AC_DEFUN([CURL_CHECK_NONBLOCKING_SOCKET], [
+ AC_REQUIRE([CURL_CHECK_OPTION_NONBLOCKING])dnl
+ AC_REQUIRE([CURL_CHECK_FUNC_FCNTL])dnl
+ AC_REQUIRE([CURL_CHECK_FUNC_IOCTL])dnl
+ AC_REQUIRE([CURL_CHECK_FUNC_IOCTLSOCKET])dnl
+ AC_REQUIRE([CURL_CHECK_FUNC_IOCTLSOCKET_CAMEL])dnl
+ AC_REQUIRE([CURL_CHECK_FUNC_SETSOCKOPT])dnl
+ #
+ tst_method="unknown"
+ if test "$want_nonblocking" = "yes"; then
+ AC_MSG_CHECKING([how to set a socket into non-blocking mode])
+ if test "x$ac_cv_func_fcntl_o_nonblock" = "xyes"; then
+ tst_method="fcntl O_NONBLOCK"
+ elif test "x$ac_cv_func_ioctl_fionbio" = "xyes"; then
+ tst_method="ioctl FIONBIO"
+ elif test "x$ac_cv_func_ioctlsocket_fionbio" = "xyes"; then
+ tst_method="ioctlsocket FIONBIO"
+ elif test "x$ac_cv_func_ioctlsocket_camel_fionbio" = "xyes"; then
+ tst_method="IoctlSocket FIONBIO"
+ elif test "x$ac_cv_func_setsockopt_so_nonblock" = "xyes"; then
+ tst_method="setsockopt SO_NONBLOCK"
+ fi
+ AC_MSG_RESULT([$tst_method])
+ if test "$tst_method" = "unknown"; then
+ AC_MSG_WARN([cannot determine non-blocking socket method.])
+ fi
+ fi
+ if test "$tst_method" = "unknown"; then
+ AC_DEFINE_UNQUOTED(USE_BLOCKING_SOCKETS, 1,
+ [Define to disable non-blocking sockets.])
+ AC_MSG_WARN([non-blocking sockets disabled.])
+ fi
+])
+
+
+dnl CURL_CHECK_LIB_ARES
+dnl -------------------------------------------------
+dnl When c-ares library support has been requested,
+dnl performs necessary checks and adjustsments needed
+dnl to enable support of this library.
+
+AC_DEFUN([CURL_CHECK_LIB_ARES], [
+ #
+ if test "$want_ares" = "yes"; then
+ dnl c-ares library support has been requested
+ clean_CPPFLAGS="$CPPFLAGS"
+ clean_LDFLAGS="$LDFLAGS"
+ clean_LIBS="$LIBS"
+ embedded_ares="unknown"
+ configure_runpath=`pwd`
+ embedded_ares_builddir="$configure_runpath/ares"
+ if test -n "$want_ares_path"; then
+ dnl c-ares library path has been specified
+ ares_CPPFLAGS="-I$want_ares_path/include"
+ ares_LDFLAGS="-L$want_ares_path/lib"
+ ares_LIBS="-lcares"
+ else
+ dnl c-ares library path has not been given
+ if test -d "$srcdir/ares"; then
+ dnl c-ares sources embedded in curl tree
+ embedded_ares="yes"
+ AC_CONFIG_SUBDIRS(ares)
+ dnl c-ares has installable configured header files, path
+ dnl inclusion fully done in makefiles for in-tree builds.
+ ares_CPPFLAGS=""
+ ares_LDFLAGS="-L$embedded_ares_builddir"
+ ares_LIBS="-lcares"
+ else
+ dnl c-ares path not specified, use defaults
+ ares_CPPFLAGS=""
+ ares_LDFLAGS=""
+ ares_LIBS="-lcares"
+ fi
+ fi
+ #
+ CPPFLAGS="$ares_CPPFLAGS $clean_CPPFLAGS"
+ LDFLAGS="$ares_LDFLAGS $clean_LDFLAGS"
+ LIBS="$ares_LIBS $clean_LIBS"
+ #
+ if test "$embedded_ares" != "yes"; then
+ dnl check if c-ares new enough when not using an embedded
+ dnl source tree one which normally has not been built yet.
+ AC_MSG_CHECKING([that c-ares is good and recent enough])
+ AC_LINK_IFELSE([
+ AC_LANG_PROGRAM([[
+#include <ares.h>
+ /* set of dummy functions in case c-ares was built with debug */
+ void curl_dofree() { }
+ void curl_sclose() { }
+ void curl_domalloc() { }
+ void curl_docalloc() { }
+ void curl_socket() { }
+ ]],[[
+ ares_channel channel;
+ ares_cancel(channel); /* added in 1.2.0 */
+ ares_process_fd(channel, 0, 0); /* added in 1.4.0 */
+ ares_dup(&channel, channel); /* added in 1.6.0 */
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ ],[
+ AC_MSG_RESULT([no])
+ AC_MSG_ERROR([c-ares library defective or too old])
+ dnl restore initial settings
+ CPPFLAGS="$clean_CPPFLAGS"
+ LDFLAGS="$clean_LDFLAGS"
+ LIBS="$clean_LIBS"
+ # prevent usage
+ want_ares="no"
+ ])
+ fi
+ if test "$want_ares" = "yes"; then
+ dnl finally c-ares will be used
+ AC_DEFINE(USE_ARES, 1, [Define to enable c-ares support])
+ AC_SUBST([USE_ARES], [1])
+ curl_res_msg="c-ares"
+ fi
+ fi
+])
+
diff --git a/m4/curl-functions.m4 b/m4/curl-functions.m4
new file mode 100644
index 0000000..36bd31c
--- /dev/null
+++ b/m4/curl-functions.m4
@@ -0,0 +1,5905 @@
+#***************************************************************************
+# _ _ ____ _
+# Project ___| | | | _ \| |
+# / __| | | | |_) | |
+# | (__| |_| | _ <| |___
+# \___|\___/|_| \_\_____|
+#
+# Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+#
+# This software is licensed as described in the file COPYING, which
+# you should have received as part of this distribution. The terms
+# are also available at http://curl.haxx.se/docs/copyright.html.
+#
+# You may opt to use, copy, modify, merge, publish, distribute and/or sell
+# copies of the Software, and permit persons to whom the Software is
+# furnished to do so, under the terms of the COPYING file.
+#
+# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+# KIND, either express or implied.
+#
+#***************************************************************************
+
+# File version for 'aclocal' use. Keep it a single number.
+# serial 64
+
+
+dnl CURL_INCLUDES_ARPA_INET
+dnl -------------------------------------------------
+dnl Set up variable with list of headers that must be
+dnl included when arpa/inet.h is to be included.
+
+AC_DEFUN([CURL_INCLUDES_ARPA_INET], [
+curl_includes_arpa_inet="\
+/* includes start */
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+# include <sys/socket.h>
+#endif
+#ifdef HAVE_NETINET_IN_H
+# include <netinet/in.h>
+#endif
+#ifdef HAVE_ARPA_INET_H
+# include <arpa/inet.h>
+#endif
+/* includes end */"
+ AC_CHECK_HEADERS(
+ sys/types.h sys/socket.h netinet/in.h arpa/inet.h,
+ [], [], [$curl_includes_arpa_inet])
+])
+
+
+dnl CURL_INCLUDES_FCNTL
+dnl -------------------------------------------------
+dnl Set up variable with list of headers that must be
+dnl included when fcntl.h is to be included.
+
+AC_DEFUN([CURL_INCLUDES_FCNTL], [
+curl_includes_fcntl="\
+/* includes start */
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+#ifdef HAVE_FCNTL_H
+# include <fcntl.h>
+#endif
+/* includes end */"
+ AC_CHECK_HEADERS(
+ sys/types.h unistd.h fcntl.h,
+ [], [], [$curl_includes_fcntl])
+])
+
+
+dnl CURL_INCLUDES_IFADDRS
+dnl -------------------------------------------------
+dnl Set up variable with list of headers that must be
+dnl included when ifaddrs.h is to be included.
+
+AC_DEFUN([CURL_INCLUDES_IFADDRS], [
+curl_includes_ifaddrs="\
+/* includes start */
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+# include <sys/socket.h>
+#endif
+#ifdef HAVE_NETINET_IN_H
+# include <netinet/in.h>
+#endif
+#ifdef HAVE_IFADDRS_H
+# include <ifaddrs.h>
+#endif
+/* includes end */"
+ AC_CHECK_HEADERS(
+ sys/types.h sys/socket.h netinet/in.h ifaddrs.h,
+ [], [], [$curl_includes_ifaddrs])
+])
+
+
+dnl CURL_INCLUDES_INTTYPES
+dnl -------------------------------------------------
+dnl Set up variable with list of headers that must be
+dnl included when inttypes.h is to be included.
+
+AC_DEFUN([CURL_INCLUDES_INTTYPES], [
+curl_includes_inttypes="\
+/* includes start */
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#endif
+#ifdef HAVE_INTTYPES_H
+# include <inttypes.h>
+#endif
+/* includes end */"
+ case $host_os in
+ irix*)
+ ac_cv_header_stdint_h="no"
+ ;;
+ esac
+ AC_CHECK_HEADERS(
+ sys/types.h stdint.h inttypes.h,
+ [], [], [$curl_includes_inttypes])
+])
+
+
+dnl CURL_INCLUDES_LIBGEN
+dnl -------------------------------------------------
+dnl Set up variable with list of headers that must be
+dnl included when libgen.h is to be included.
+
+AC_DEFUN([CURL_INCLUDES_LIBGEN], [
+curl_includes_libgen="\
+/* includes start */
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_LIBGEN_H
+# include <libgen.h>
+#endif
+/* includes end */"
+ AC_CHECK_HEADERS(
+ sys/types.h libgen.h,
+ [], [], [$curl_includes_libgen])
+])
+
+
+dnl CURL_INCLUDES_NETDB
+dnl -------------------------------------------------
+dnl Set up variable with list of headers that must be
+dnl included when netdb.h is to be included.
+
+AC_DEFUN([CURL_INCLUDES_NETDB], [
+curl_includes_netdb="\
+/* includes start */
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_NETDB_H
+# include <netdb.h>
+#endif
+/* includes end */"
+ AC_CHECK_HEADERS(
+ sys/types.h netdb.h,
+ [], [], [$curl_includes_netdb])
+])
+
+
+dnl CURL_INCLUDES_POLL
+dnl -------------------------------------------------
+dnl Set up variable with list of headers that must be
+dnl included when poll.h is to be included.
+
+AC_DEFUN([CURL_INCLUDES_POLL], [
+curl_includes_poll="\
+/* includes start */
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_POLL_H
+# include <poll.h>
+#endif
+#ifdef HAVE_SYS_POLL_H
+# include <sys/poll.h>
+#endif
+/* includes end */"
+ AC_CHECK_HEADERS(
+ sys/types.h poll.h sys/poll.h,
+ [], [], [$curl_includes_poll])
+])
+
+
+dnl CURL_INCLUDES_SETJMP
+dnl -------------------------------------------------
+dnl Set up variable with list of headers that must be
+dnl included when setjmp.h is to be included.
+
+AC_DEFUN([CURL_INCLUDES_SETJMP], [
+curl_includes_setjmp="\
+/* includes start */
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SETJMP_H
+# include <setjmp.h>
+#endif
+/* includes end */"
+ AC_CHECK_HEADERS(
+ sys/types.h setjmp.h,
+ [], [], [$curl_includes_setjmp])
+])
+
+
+dnl CURL_INCLUDES_SIGNAL
+dnl -------------------------------------------------
+dnl Set up variable with list of headers that must be
+dnl included when signal.h is to be included.
+
+AC_DEFUN([CURL_INCLUDES_SIGNAL], [
+curl_includes_signal="\
+/* includes start */
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SIGNAL_H
+# include <signal.h>
+#endif
+/* includes end */"
+ AC_CHECK_HEADERS(
+ sys/types.h signal.h,
+ [], [], [$curl_includes_signal])
+])
+
+
+dnl CURL_INCLUDES_SOCKET
+dnl -------------------------------------------------
+dnl Set up variable with list of headers that must be
+dnl included when socket.h is to be included.
+
+AC_DEFUN([CURL_INCLUDES_SOCKET], [
+curl_includes_socket="\
+/* includes start */
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SOCKET_H
+# include <socket.h>
+#endif
+/* includes end */"
+ AC_CHECK_HEADERS(
+ sys/types.h socket.h,
+ [], [], [$curl_includes_socket])
+])
+
+
+dnl CURL_INCLUDES_STDIO
+dnl -------------------------------------------------
+dnl Set up variable with list of headers that must be
+dnl included when stdio.h is to be included.
+
+AC_DEFUN([CURL_INCLUDES_STDIO], [
+curl_includes_stdio="\
+/* includes start */
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_STDIO_H
+# include <stdio.h>
+#endif
+/* includes end */"
+ AC_CHECK_HEADERS(
+ sys/types.h stdio.h,
+ [], [], [$curl_includes_stdio])
+])
+
+
+dnl CURL_INCLUDES_STDLIB
+dnl -------------------------------------------------
+dnl Set up variable with list of headers that must be
+dnl included when stdlib.h is to be included.
+
+AC_DEFUN([CURL_INCLUDES_STDLIB], [
+curl_includes_stdlib="\
+/* includes start */
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_STDLIB_H
+# include <stdlib.h>
+#endif
+/* includes end */"
+ AC_CHECK_HEADERS(
+ sys/types.h stdlib.h,
+ [], [], [$curl_includes_stdlib])
+])
+
+
+dnl CURL_INCLUDES_STRING
+dnl -------------------------------------------------
+dnl Set up variable with list of headers that must be
+dnl included when string(s).h is to be included.
+
+AC_DEFUN([CURL_INCLUDES_STRING], [
+curl_includes_string="\
+/* includes start */
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_STRING_H
+# include <string.h>
+#endif
+#ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif
+/* includes end */"
+ AC_CHECK_HEADERS(
+ sys/types.h string.h strings.h,
+ [], [], [$curl_includes_string])
+])
+
+
+dnl CURL_INCLUDES_STROPTS
+dnl -------------------------------------------------
+dnl Set up variable with list of headers that must be
+dnl included when stropts.h is to be included.
+
+AC_DEFUN([CURL_INCLUDES_STROPTS], [
+curl_includes_stropts="\
+/* includes start */
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+# include <sys/socket.h>
+#endif
+#ifdef HAVE_SYS_IOCTL_H
+# include <sys/ioctl.h>
+#endif
+#ifdef HAVE_STROPTS_H
+# include <stropts.h>
+#endif
+/* includes end */"
+ AC_CHECK_HEADERS(
+ sys/types.h unistd.h sys/socket.h sys/ioctl.h stropts.h,
+ [], [], [$curl_includes_stropts])
+])
+
+
+dnl CURL_INCLUDES_SYS_SOCKET
+dnl -------------------------------------------------
+dnl Set up variable with list of headers that must be
+dnl included when sys/socket.h is to be included.
+
+AC_DEFUN([CURL_INCLUDES_SYS_SOCKET], [
+curl_includes_sys_socket="\
+/* includes start */
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+# include <sys/socket.h>
+#endif
+/* includes end */"
+ AC_CHECK_HEADERS(
+ sys/types.h sys/socket.h,
+ [], [], [$curl_includes_sys_socket])
+])
+
+
+dnl CURL_INCLUDES_SYS_TYPES
+dnl -------------------------------------------------
+dnl Set up variable with list of headers that must be
+dnl included when sys/types.h is to be included.
+
+AC_DEFUN([CURL_INCLUDES_SYS_TYPES], [
+curl_includes_sys_types="\
+/* includes start */
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+/* includes end */"
+ AC_CHECK_HEADERS(
+ sys/types.h,
+ [], [], [$curl_includes_sys_types])
+])
+
+
+dnl CURL_INCLUDES_SYS_UIO
+dnl -------------------------------------------------
+dnl Set up variable with list of headers that must be
+dnl included when sys/uio.h is to be included.
+
+AC_DEFUN([CURL_INCLUDES_SYS_UIO], [
+curl_includes_sys_uio="\
+/* includes start */
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_UIO_H
+# include <sys/uio.h>
+#endif
+/* includes end */"
+ AC_CHECK_HEADERS(
+ sys/types.h sys/uio.h,
+ [], [], [$curl_includes_sys_uio])
+])
+
+
+dnl CURL_INCLUDES_TIME
+dnl -------------------------------------------------
+dnl Set up variable with list of headers that must be
+dnl included when time.h is to be included.
+
+AC_DEFUN([CURL_INCLUDES_TIME], [
+AC_REQUIRE([AC_HEADER_TIME])dnl
+curl_includes_time="\
+/* includes start */
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_TIME_H
+# include <sys/time.h>
+# ifdef TIME_WITH_SYS_TIME
+# include <time.h>
+# endif
+#else
+# ifdef HAVE_TIME_H
+# include <time.h>
+# endif
+#endif
+/* includes end */"
+ AC_CHECK_HEADERS(
+ sys/types.h sys/time.h time.h,
+ [], [], [$curl_includes_time])
+])
+
+
+dnl CURL_INCLUDES_UNISTD
+dnl -------------------------------------------------
+dnl Set up variable with list of headers that must be
+dnl included when unistd.h is to be included.
+
+AC_DEFUN([CURL_INCLUDES_UNISTD], [
+curl_includes_unistd="\
+/* includes start */
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+/* includes end */"
+ AC_CHECK_HEADERS(
+ sys/types.h unistd.h,
+ [], [], [$curl_includes_unistd])
+])
+
+
+dnl CURL_INCLUDES_WINSOCK2
+dnl -------------------------------------------------
+dnl Set up variable with list of headers that must be
+dnl included when winsock(2).h is to be included.
+
+AC_DEFUN([CURL_INCLUDES_WINSOCK2], [
+curl_includes_winsock2="\
+/* includes start */
+#ifdef HAVE_WINDOWS_H
+# ifndef WIN32_LEAN_AND_MEAN
+# define WIN32_LEAN_AND_MEAN
+# endif
+# include <windows.h>
+# ifdef HAVE_WINSOCK2_H
+# include <winsock2.h>
+# else
+# ifdef HAVE_WINSOCK_H
+# include <winsock.h>
+# endif
+# endif
+#endif
+/* includes end */"
+ CURL_CHECK_HEADER_WINDOWS
+ CURL_CHECK_HEADER_WINSOCK
+ CURL_CHECK_HEADER_WINSOCK2
+])
+
+
+dnl CURL_INCLUDES_WS2TCPIP
+dnl -------------------------------------------------
+dnl Set up variable with list of headers that must be
+dnl included when ws2tcpip.h is to be included.
+
+AC_DEFUN([CURL_INCLUDES_WS2TCPIP], [
+curl_includes_ws2tcpip="\
+/* includes start */
+#ifdef HAVE_WINDOWS_H
+# ifndef WIN32_LEAN_AND_MEAN
+# define WIN32_LEAN_AND_MEAN
+# endif
+# include <windows.h>
+# ifdef HAVE_WINSOCK2_H
+# include <winsock2.h>
+# ifdef HAVE_WS2TCPIP_H
+# include <ws2tcpip.h>
+# endif
+# endif
+#endif
+/* includes end */"
+ CURL_CHECK_HEADER_WINDOWS
+ CURL_CHECK_HEADER_WINSOCK2
+ CURL_CHECK_HEADER_WS2TCPIP
+])
+
+
+dnl CURL_PREPROCESS_CALLCONV
+dnl -------------------------------------------------
+dnl Set up variable with a preprocessor block which
+dnl defines function calling convention.
+
+AC_DEFUN([CURL_PREPROCESS_CALLCONV], [
+curl_preprocess_callconv="\
+/* preprocess start */
+#ifdef HAVE_WINDOWS_H
+# define FUNCALLCONV __stdcall
+#else
+# define FUNCALLCONV
+#endif
+/* preprocess end */"
+])
+
+
+dnl CURL_CHECK_FUNC_ALARM
+dnl -------------------------------------------------
+dnl Verify if alarm is available, prototyped, and
+dnl can be compiled. If all of these are true, and
+dnl usage has not been previously disallowed with
+dnl shell variable curl_disallow_alarm, then
+dnl HAVE_ALARM will be defined.
+
+AC_DEFUN([CURL_CHECK_FUNC_ALARM], [
+ AC_REQUIRE([CURL_INCLUDES_UNISTD])dnl
+ #
+ tst_links_alarm="unknown"
+ tst_proto_alarm="unknown"
+ tst_compi_alarm="unknown"
+ tst_allow_alarm="unknown"
+ #
+ AC_MSG_CHECKING([if alarm can be linked])
+ AC_LINK_IFELSE([
+ AC_LANG_FUNC_LINK_TRY([alarm])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_links_alarm="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_links_alarm="no"
+ ])
+ #
+ if test "$tst_links_alarm" = "yes"; then
+ AC_MSG_CHECKING([if alarm is prototyped])
+ AC_EGREP_CPP([alarm],[
+ $curl_includes_unistd
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_proto_alarm="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_proto_alarm="no"
+ ])
+ fi
+ #
+ if test "$tst_proto_alarm" = "yes"; then
+ AC_MSG_CHECKING([if alarm is compilable])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_unistd
+ ]],[[
+ if(0 != alarm(0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_alarm="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_alarm="no"
+ ])
+ fi
+ #
+ if test "$tst_compi_alarm" = "yes"; then
+ AC_MSG_CHECKING([if alarm usage allowed])
+ if test "x$curl_disallow_alarm" != "xyes"; then
+ AC_MSG_RESULT([yes])
+ tst_allow_alarm="yes"
+ else
+ AC_MSG_RESULT([no])
+ tst_allow_alarm="no"
+ fi
+ fi
+ #
+ AC_MSG_CHECKING([if alarm might be used])
+ if test "$tst_links_alarm" = "yes" &&
+ test "$tst_proto_alarm" = "yes" &&
+ test "$tst_compi_alarm" = "yes" &&
+ test "$tst_allow_alarm" = "yes"; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE_UNQUOTED(HAVE_ALARM, 1,
+ [Define to 1 if you have the alarm function.])
+ ac_cv_func_alarm="yes"
+ else
+ AC_MSG_RESULT([no])
+ ac_cv_func_alarm="no"
+ fi
+])
+
+
+dnl CURL_CHECK_FUNC_BASENAME
+dnl -------------------------------------------------
+dnl Verify if basename is available, prototyped, and
+dnl can be compiled. If all of these are true, and
+dnl usage has not been previously disallowed with
+dnl shell variable curl_disallow_basename, then
+dnl HAVE_BASENAME will be defined.
+
+AC_DEFUN([CURL_CHECK_FUNC_BASENAME], [
+ AC_REQUIRE([CURL_INCLUDES_STRING])dnl
+ AC_REQUIRE([CURL_INCLUDES_LIBGEN])dnl
+ AC_REQUIRE([CURL_INCLUDES_UNISTD])dnl
+ #
+ tst_links_basename="unknown"
+ tst_proto_basename="unknown"
+ tst_compi_basename="unknown"
+ tst_allow_basename="unknown"
+ #
+ AC_MSG_CHECKING([if basename can be linked])
+ AC_LINK_IFELSE([
+ AC_LANG_FUNC_LINK_TRY([basename])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_links_basename="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_links_basename="no"
+ ])
+ #
+ if test "$tst_links_basename" = "yes"; then
+ AC_MSG_CHECKING([if basename is prototyped])
+ AC_EGREP_CPP([basename],[
+ $curl_includes_string
+ $curl_includes_libgen
+ $curl_includes_unistd
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_proto_basename="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_proto_basename="no"
+ ])
+ fi
+ #
+ if test "$tst_proto_basename" = "yes"; then
+ AC_MSG_CHECKING([if basename is compilable])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_string
+ $curl_includes_libgen
+ $curl_includes_unistd
+ ]],[[
+ if(0 != basename(0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_basename="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_basename="no"
+ ])
+ fi
+ #
+ if test "$tst_compi_basename" = "yes"; then
+ AC_MSG_CHECKING([if basename usage allowed])
+ if test "x$curl_disallow_basename" != "xyes"; then
+ AC_MSG_RESULT([yes])
+ tst_allow_basename="yes"
+ else
+ AC_MSG_RESULT([no])
+ tst_allow_basename="no"
+ fi
+ fi
+ #
+ AC_MSG_CHECKING([if basename might be used])
+ if test "$tst_links_basename" = "yes" &&
+ test "$tst_proto_basename" = "yes" &&
+ test "$tst_compi_basename" = "yes" &&
+ test "$tst_allow_basename" = "yes"; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE_UNQUOTED(HAVE_BASENAME, 1,
+ [Define to 1 if you have the basename function.])
+ ac_cv_func_basename="yes"
+ else
+ AC_MSG_RESULT([no])
+ ac_cv_func_basename="no"
+ fi
+])
+
+
+dnl CURL_CHECK_FUNC_CLOSESOCKET
+dnl -------------------------------------------------
+dnl Verify if closesocket is available, prototyped, and
+dnl can be compiled. If all of these are true, and
+dnl usage has not been previously disallowed with
+dnl shell variable curl_disallow_closesocket, then
+dnl HAVE_CLOSESOCKET will be defined.
+
+AC_DEFUN([CURL_CHECK_FUNC_CLOSESOCKET], [
+ AC_REQUIRE([CURL_INCLUDES_WINSOCK2])dnl
+ AC_REQUIRE([CURL_INCLUDES_SOCKET])dnl
+ #
+ tst_links_closesocket="unknown"
+ tst_proto_closesocket="unknown"
+ tst_compi_closesocket="unknown"
+ tst_allow_closesocket="unknown"
+ #
+ AC_MSG_CHECKING([if closesocket can be linked])
+ AC_LINK_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_winsock2
+ $curl_includes_socket
+ ]],[[
+ if(0 != closesocket(0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_links_closesocket="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_links_closesocket="no"
+ ])
+ #
+ if test "$tst_links_closesocket" = "yes"; then
+ AC_MSG_CHECKING([if closesocket is prototyped])
+ AC_EGREP_CPP([closesocket],[
+ $curl_includes_winsock2
+ $curl_includes_socket
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_proto_closesocket="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_proto_closesocket="no"
+ ])
+ fi
+ #
+ if test "$tst_proto_closesocket" = "yes"; then
+ AC_MSG_CHECKING([if closesocket is compilable])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_winsock2
+ $curl_includes_socket
+ ]],[[
+ if(0 != closesocket(0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_closesocket="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_closesocket="no"
+ ])
+ fi
+ #
+ if test "$tst_compi_closesocket" = "yes"; then
+ AC_MSG_CHECKING([if closesocket usage allowed])
+ if test "x$curl_disallow_closesocket" != "xyes"; then
+ AC_MSG_RESULT([yes])
+ tst_allow_closesocket="yes"
+ else
+ AC_MSG_RESULT([no])
+ tst_allow_closesocket="no"
+ fi
+ fi
+ #
+ AC_MSG_CHECKING([if closesocket might be used])
+ if test "$tst_links_closesocket" = "yes" &&
+ test "$tst_proto_closesocket" = "yes" &&
+ test "$tst_compi_closesocket" = "yes" &&
+ test "$tst_allow_closesocket" = "yes"; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE_UNQUOTED(HAVE_CLOSESOCKET, 1,
+ [Define to 1 if you have the closesocket function.])
+ ac_cv_func_closesocket="yes"
+ else
+ AC_MSG_RESULT([no])
+ ac_cv_func_closesocket="no"
+ fi
+])
+
+
+dnl CURL_CHECK_FUNC_CLOSESOCKET_CAMEL
+dnl -------------------------------------------------
+dnl Verify if CloseSocket is available, prototyped, and
+dnl can be compiled. If all of these are true, and
+dnl usage has not been previously disallowed with
+dnl shell variable curl_disallow_closesocket_camel,
+dnl then HAVE_CLOSESOCKET_CAMEL will be defined.
+
+AC_DEFUN([CURL_CHECK_FUNC_CLOSESOCKET_CAMEL], [
+ AC_REQUIRE([CURL_INCLUDES_SYS_SOCKET])dnl
+ #
+ tst_links_closesocket_camel="unknown"
+ tst_proto_closesocket_camel="unknown"
+ tst_compi_closesocket_camel="unknown"
+ tst_allow_closesocket_camel="unknown"
+ #
+ AC_MSG_CHECKING([if CloseSocket can be linked])
+ AC_LINK_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_sys_socket
+ ]],[[
+ if(0 != CloseSocket(0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_links_closesocket_camel="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_links_closesocket_camel="no"
+ ])
+ #
+ if test "$tst_links_closesocket_camel" = "yes"; then
+ AC_MSG_CHECKING([if CloseSocket is prototyped])
+ AC_EGREP_CPP([CloseSocket],[
+ $curl_includes_sys_socket
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_proto_closesocket_camel="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_proto_closesocket_camel="no"
+ ])
+ fi
+ #
+ if test "$tst_proto_closesocket_camel" = "yes"; then
+ AC_MSG_CHECKING([if CloseSocket is compilable])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_sys_socket
+ ]],[[
+ if(0 != CloseSocket(0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_closesocket_camel="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_closesocket_camel="no"
+ ])
+ fi
+ #
+ if test "$tst_compi_closesocket_camel" = "yes"; then
+ AC_MSG_CHECKING([if CloseSocket usage allowed])
+ if test "x$curl_disallow_closesocket_camel" != "xyes"; then
+ AC_MSG_RESULT([yes])
+ tst_allow_closesocket_camel="yes"
+ else
+ AC_MSG_RESULT([no])
+ tst_allow_closesocket_camel="no"
+ fi
+ fi
+ #
+ AC_MSG_CHECKING([if CloseSocket might be used])
+ if test "$tst_links_closesocket_camel" = "yes" &&
+ test "$tst_proto_closesocket_camel" = "yes" &&
+ test "$tst_compi_closesocket_camel" = "yes" &&
+ test "$tst_allow_closesocket_camel" = "yes"; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE_UNQUOTED(HAVE_CLOSESOCKET_CAMEL, 1,
+ [Define to 1 if you have the CloseSocket camel case function.])
+ ac_cv_func_closesocket_camel="yes"
+ else
+ AC_MSG_RESULT([no])
+ ac_cv_func_closesocket_camel="no"
+ fi
+])
+
+
+dnl CURL_CHECK_FUNC_CONNECT
+dnl -------------------------------------------------
+dnl Verify if connect is available, prototyped, and
+dnl can be compiled. If all of these are true, and
+dnl usage has not been previously disallowed with
+dnl shell variable curl_disallow_connect, then
+dnl HAVE_CONNECT will be defined.
+
+AC_DEFUN([CURL_CHECK_FUNC_CONNECT], [
+ AC_REQUIRE([CURL_INCLUDES_WINSOCK2])dnl
+ AC_REQUIRE([CURL_INCLUDES_SYS_SOCKET])dnl
+ AC_REQUIRE([CURL_INCLUDES_SOCKET])dnl
+ #
+ tst_links_connect="unknown"
+ tst_proto_connect="unknown"
+ tst_compi_connect="unknown"
+ tst_allow_connect="unknown"
+ #
+ AC_MSG_CHECKING([if connect can be linked])
+ AC_LINK_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_winsock2
+ $curl_includes_sys_socket
+ $curl_includes_socket
+ ]],[[
+ if(0 != connect(0, 0, 0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_links_connect="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_links_connect="no"
+ ])
+ #
+ if test "$tst_links_connect" = "yes"; then
+ AC_MSG_CHECKING([if connect is prototyped])
+ AC_EGREP_CPP([connect],[
+ $curl_includes_winsock2
+ $curl_includes_sys_socket
+ $curl_includes_socket
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_proto_connect="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_proto_connect="no"
+ ])
+ fi
+ #
+ if test "$tst_proto_connect" = "yes"; then
+ AC_MSG_CHECKING([if connect is compilable])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_winsock2
+ $curl_includes_sys_socket
+ $curl_includes_socket
+ ]],[[
+ if(0 != connect(0, 0, 0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_connect="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_connect="no"
+ ])
+ fi
+ #
+ if test "$tst_compi_connect" = "yes"; then
+ AC_MSG_CHECKING([if connect usage allowed])
+ if test "x$curl_disallow_connect" != "xyes"; then
+ AC_MSG_RESULT([yes])
+ tst_allow_connect="yes"
+ else
+ AC_MSG_RESULT([no])
+ tst_allow_connect="no"
+ fi
+ fi
+ #
+ AC_MSG_CHECKING([if connect might be used])
+ if test "$tst_links_connect" = "yes" &&
+ test "$tst_proto_connect" = "yes" &&
+ test "$tst_compi_connect" = "yes" &&
+ test "$tst_allow_connect" = "yes"; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE_UNQUOTED(HAVE_CONNECT, 1,
+ [Define to 1 if you have the connect function.])
+ ac_cv_func_connect="yes"
+ else
+ AC_MSG_RESULT([no])
+ ac_cv_func_connect="no"
+ fi
+])
+
+
+dnl CURL_CHECK_FUNC_FCNTL
+dnl -------------------------------------------------
+dnl Verify if fcntl is available, prototyped, and
+dnl can be compiled. If all of these are true, and
+dnl usage has not been previously disallowed with
+dnl shell variable curl_disallow_fcntl, then
+dnl HAVE_FCNTL will be defined.
+
+AC_DEFUN([CURL_CHECK_FUNC_FCNTL], [
+ AC_REQUIRE([CURL_INCLUDES_FCNTL])dnl
+ #
+ tst_links_fcntl="unknown"
+ tst_proto_fcntl="unknown"
+ tst_compi_fcntl="unknown"
+ tst_allow_fcntl="unknown"
+ #
+ AC_MSG_CHECKING([if fcntl can be linked])
+ AC_LINK_IFELSE([
+ AC_LANG_FUNC_LINK_TRY([fcntl])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_links_fcntl="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_links_fcntl="no"
+ ])
+ #
+ if test "$tst_links_fcntl" = "yes"; then
+ AC_MSG_CHECKING([if fcntl is prototyped])
+ AC_EGREP_CPP([fcntl],[
+ $curl_includes_fcntl
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_proto_fcntl="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_proto_fcntl="no"
+ ])
+ fi
+ #
+ if test "$tst_proto_fcntl" = "yes"; then
+ AC_MSG_CHECKING([if fcntl is compilable])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_fcntl
+ ]],[[
+ if(0 != fcntl(0, 0, 0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_fcntl="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_fcntl="no"
+ ])
+ fi
+ #
+ if test "$tst_compi_fcntl" = "yes"; then
+ AC_MSG_CHECKING([if fcntl usage allowed])
+ if test "x$curl_disallow_fcntl" != "xyes"; then
+ AC_MSG_RESULT([yes])
+ tst_allow_fcntl="yes"
+ else
+ AC_MSG_RESULT([no])
+ tst_allow_fcntl="no"
+ fi
+ fi
+ #
+ AC_MSG_CHECKING([if fcntl might be used])
+ if test "$tst_links_fcntl" = "yes" &&
+ test "$tst_proto_fcntl" = "yes" &&
+ test "$tst_compi_fcntl" = "yes" &&
+ test "$tst_allow_fcntl" = "yes"; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE_UNQUOTED(HAVE_FCNTL, 1,
+ [Define to 1 if you have the fcntl function.])
+ ac_cv_func_fcntl="yes"
+ CURL_CHECK_FUNC_FCNTL_O_NONBLOCK
+ else
+ AC_MSG_RESULT([no])
+ ac_cv_func_fcntl="no"
+ fi
+])
+
+
+dnl CURL_CHECK_FUNC_FCNTL_O_NONBLOCK
+dnl -------------------------------------------------
+dnl Verify if fcntl with status flag O_NONBLOCK is
+dnl available, can be compiled, and seems to work. If
+dnl all of these are true, then HAVE_FCNTL_O_NONBLOCK
+dnl will be defined.
+
+AC_DEFUN([CURL_CHECK_FUNC_FCNTL_O_NONBLOCK], [
+ #
+ tst_compi_fcntl_o_nonblock="unknown"
+ tst_allow_fcntl_o_nonblock="unknown"
+ #
+ case $host_os in
+ sunos4* | aix3* | beos*)
+ dnl O_NONBLOCK does not work on these platforms
+ curl_disallow_fcntl_o_nonblock="yes"
+ ;;
+ esac
+ #
+ if test "$ac_cv_func_fcntl" = "yes"; then
+ AC_MSG_CHECKING([if fcntl O_NONBLOCK is compilable])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_fcntl
+ ]],[[
+ int flags = 0;
+ if(0 != fcntl(0, F_SETFL, flags | O_NONBLOCK))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_fcntl_o_nonblock="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_fcntl_o_nonblock="no"
+ ])
+ fi
+ #
+ if test "$tst_compi_fcntl_o_nonblock" = "yes"; then
+ AC_MSG_CHECKING([if fcntl O_NONBLOCK usage allowed])
+ if test "x$curl_disallow_fcntl_o_nonblock" != "xyes"; then
+ AC_MSG_RESULT([yes])
+ tst_allow_fcntl_o_nonblock="yes"
+ else
+ AC_MSG_RESULT([no])
+ tst_allow_fcntl_o_nonblock="no"
+ fi
+ fi
+ #
+ AC_MSG_CHECKING([if fcntl O_NONBLOCK might be used])
+ if test "$tst_compi_fcntl_o_nonblock" = "yes" &&
+ test "$tst_allow_fcntl_o_nonblock" = "yes"; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE_UNQUOTED(HAVE_FCNTL_O_NONBLOCK, 1,
+ [Define to 1 if you have a working fcntl O_NONBLOCK function.])
+ ac_cv_func_fcntl_o_nonblock="yes"
+ else
+ AC_MSG_RESULT([no])
+ ac_cv_func_fcntl_o_nonblock="no"
+ fi
+])
+
+
+dnl CURL_CHECK_FUNC_FDOPEN
+dnl -------------------------------------------------
+dnl Verify if fdopen is available, prototyped, and
+dnl can be compiled. If all of these are true, and
+dnl usage has not been previously disallowed with
+dnl shell variable curl_disallow_fdopen, then
+dnl HAVE_FDOPEN will be defined.
+
+AC_DEFUN([CURL_CHECK_FUNC_FDOPEN], [
+ AC_REQUIRE([CURL_INCLUDES_STDIO])dnl
+ #
+ tst_links_fdopen="unknown"
+ tst_proto_fdopen="unknown"
+ tst_compi_fdopen="unknown"
+ tst_allow_fdopen="unknown"
+ #
+ AC_MSG_CHECKING([if fdopen can be linked])
+ AC_LINK_IFELSE([
+ AC_LANG_FUNC_LINK_TRY([fdopen])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_links_fdopen="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_links_fdopen="no"
+ ])
+ #
+ if test "$tst_links_fdopen" = "yes"; then
+ AC_MSG_CHECKING([if fdopen is prototyped])
+ AC_EGREP_CPP([fdopen],[
+ $curl_includes_stdio
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_proto_fdopen="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_proto_fdopen="no"
+ ])
+ fi
+ #
+ if test "$tst_proto_fdopen" = "yes"; then
+ AC_MSG_CHECKING([if fdopen is compilable])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_stdio
+ ]],[[
+ if(0 != fdopen(0, 0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_fdopen="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_fdopen="no"
+ ])
+ fi
+ #
+ if test "$tst_compi_fdopen" = "yes"; then
+ AC_MSG_CHECKING([if fdopen usage allowed])
+ if test "x$curl_disallow_fdopen" != "xyes"; then
+ AC_MSG_RESULT([yes])
+ tst_allow_fdopen="yes"
+ else
+ AC_MSG_RESULT([no])
+ tst_allow_fdopen="no"
+ fi
+ fi
+ #
+ AC_MSG_CHECKING([if fdopen might be used])
+ if test "$tst_links_fdopen" = "yes" &&
+ test "$tst_proto_fdopen" = "yes" &&
+ test "$tst_compi_fdopen" = "yes" &&
+ test "$tst_allow_fdopen" = "yes"; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE_UNQUOTED(HAVE_FDOPEN, 1,
+ [Define to 1 if you have the fdopen function.])
+ ac_cv_func_fdopen="yes"
+ else
+ AC_MSG_RESULT([no])
+ ac_cv_func_fdopen="no"
+ fi
+])
+
+
+dnl CURL_CHECK_FUNC_FREEADDRINFO
+dnl -------------------------------------------------
+dnl Verify if freeaddrinfo is available, prototyped,
+dnl and can be compiled. If all of these are true,
+dnl and usage has not been previously disallowed with
+dnl shell variable curl_disallow_freeaddrinfo, then
+dnl HAVE_FREEADDRINFO will be defined.
+
+AC_DEFUN([CURL_CHECK_FUNC_FREEADDRINFO], [
+ AC_REQUIRE([CURL_INCLUDES_WS2TCPIP])dnl
+ AC_REQUIRE([CURL_INCLUDES_SYS_SOCKET])dnl
+ AC_REQUIRE([CURL_INCLUDES_NETDB])dnl
+ #
+ tst_links_freeaddrinfo="unknown"
+ tst_proto_freeaddrinfo="unknown"
+ tst_compi_freeaddrinfo="unknown"
+ tst_allow_freeaddrinfo="unknown"
+ #
+ AC_MSG_CHECKING([if freeaddrinfo can be linked])
+ AC_LINK_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_ws2tcpip
+ $curl_includes_sys_socket
+ $curl_includes_netdb
+ ]],[[
+ freeaddrinfo(0);
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_links_freeaddrinfo="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_links_freeaddrinfo="no"
+ ])
+ #
+ if test "$tst_links_freeaddrinfo" = "yes"; then
+ AC_MSG_CHECKING([if freeaddrinfo is prototyped])
+ AC_EGREP_CPP([freeaddrinfo],[
+ $curl_includes_ws2tcpip
+ $curl_includes_sys_socket
+ $curl_includes_netdb
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_proto_freeaddrinfo="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_proto_freeaddrinfo="no"
+ ])
+ fi
+ #
+ if test "$tst_proto_freeaddrinfo" = "yes"; then
+ AC_MSG_CHECKING([if freeaddrinfo is compilable])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_ws2tcpip
+ $curl_includes_sys_socket
+ $curl_includes_netdb
+ ]],[[
+ freeaddrinfo(0);
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_freeaddrinfo="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_freeaddrinfo="no"
+ ])
+ fi
+ #
+ if test "$tst_compi_freeaddrinfo" = "yes"; then
+ AC_MSG_CHECKING([if freeaddrinfo usage allowed])
+ if test "x$curl_disallow_freeaddrinfo" != "xyes"; then
+ AC_MSG_RESULT([yes])
+ tst_allow_freeaddrinfo="yes"
+ else
+ AC_MSG_RESULT([no])
+ tst_allow_freeaddrinfo="no"
+ fi
+ fi
+ #
+ AC_MSG_CHECKING([if freeaddrinfo might be used])
+ if test "$tst_links_freeaddrinfo" = "yes" &&
+ test "$tst_proto_freeaddrinfo" = "yes" &&
+ test "$tst_compi_freeaddrinfo" = "yes" &&
+ test "$tst_allow_freeaddrinfo" = "yes"; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE_UNQUOTED(HAVE_FREEADDRINFO, 1,
+ [Define to 1 if you have the freeaddrinfo function.])
+ ac_cv_func_freeaddrinfo="yes"
+ else
+ AC_MSG_RESULT([no])
+ ac_cv_func_freeaddrinfo="no"
+ fi
+])
+
+
+dnl CURL_CHECK_FUNC_FREEIFADDRS
+dnl -------------------------------------------------
+dnl Verify if freeifaddrs is available, prototyped, and
+dnl can be compiled. If all of these are true, and
+dnl usage has not been previously disallowed with
+dnl shell variable curl_disallow_freeifaddrs, then
+dnl HAVE_FREEIFADDRS will be defined.
+
+AC_DEFUN([CURL_CHECK_FUNC_FREEIFADDRS], [
+ AC_REQUIRE([CURL_INCLUDES_IFADDRS])dnl
+ #
+ tst_links_freeifaddrs="unknown"
+ tst_proto_freeifaddrs="unknown"
+ tst_compi_freeifaddrs="unknown"
+ tst_allow_freeifaddrs="unknown"
+ #
+ AC_MSG_CHECKING([if freeifaddrs can be linked])
+ AC_LINK_IFELSE([
+ AC_LANG_FUNC_LINK_TRY([freeifaddrs])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_links_freeifaddrs="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_links_freeifaddrs="no"
+ ])
+ #
+ if test "$tst_links_freeifaddrs" = "yes"; then
+ AC_MSG_CHECKING([if freeifaddrs is prototyped])
+ AC_EGREP_CPP([freeifaddrs],[
+ $curl_includes_ifaddrs
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_proto_freeifaddrs="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_proto_freeifaddrs="no"
+ ])
+ fi
+ #
+ if test "$tst_proto_freeifaddrs" = "yes"; then
+ AC_MSG_CHECKING([if freeifaddrs is compilable])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_ifaddrs
+ ]],[[
+ freeifaddrs(0);
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_freeifaddrs="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_freeifaddrs="no"
+ ])
+ fi
+ #
+ if test "$tst_compi_freeifaddrs" = "yes"; then
+ AC_MSG_CHECKING([if freeifaddrs usage allowed])
+ if test "x$curl_disallow_freeifaddrs" != "xyes"; then
+ AC_MSG_RESULT([yes])
+ tst_allow_freeifaddrs="yes"
+ else
+ AC_MSG_RESULT([no])
+ tst_allow_freeifaddrs="no"
+ fi
+ fi
+ #
+ AC_MSG_CHECKING([if freeifaddrs might be used])
+ if test "$tst_links_freeifaddrs" = "yes" &&
+ test "$tst_proto_freeifaddrs" = "yes" &&
+ test "$tst_compi_freeifaddrs" = "yes" &&
+ test "$tst_allow_freeifaddrs" = "yes"; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE_UNQUOTED(HAVE_FREEIFADDRS, 1,
+ [Define to 1 if you have the freeifaddrs function.])
+ ac_cv_func_freeifaddrs="yes"
+ else
+ AC_MSG_RESULT([no])
+ ac_cv_func_freeifaddrs="no"
+ fi
+])
+
+
+dnl CURL_CHECK_FUNC_FTRUNCATE
+dnl -------------------------------------------------
+dnl Verify if ftruncate is available, prototyped, and
+dnl can be compiled. If all of these are true, and
+dnl usage has not been previously disallowed with
+dnl shell variable curl_disallow_ftruncate, then
+dnl HAVE_FTRUNCATE will be defined.
+
+AC_DEFUN([CURL_CHECK_FUNC_FTRUNCATE], [
+ AC_REQUIRE([CURL_INCLUDES_UNISTD])dnl
+ #
+ tst_links_ftruncate="unknown"
+ tst_proto_ftruncate="unknown"
+ tst_compi_ftruncate="unknown"
+ tst_allow_ftruncate="unknown"
+ #
+ AC_MSG_CHECKING([if ftruncate can be linked])
+ AC_LINK_IFELSE([
+ AC_LANG_FUNC_LINK_TRY([ftruncate])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_links_ftruncate="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_links_ftruncate="no"
+ ])
+ #
+ if test "$tst_links_ftruncate" = "yes"; then
+ AC_MSG_CHECKING([if ftruncate is prototyped])
+ AC_EGREP_CPP([ftruncate],[
+ $curl_includes_unistd
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_proto_ftruncate="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_proto_ftruncate="no"
+ ])
+ fi
+ #
+ if test "$tst_proto_ftruncate" = "yes"; then
+ AC_MSG_CHECKING([if ftruncate is compilable])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_unistd
+ ]],[[
+ if(0 != ftruncate(0, 0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_ftruncate="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_ftruncate="no"
+ ])
+ fi
+ #
+ if test "$tst_compi_ftruncate" = "yes"; then
+ AC_MSG_CHECKING([if ftruncate usage allowed])
+ if test "x$curl_disallow_ftruncate" != "xyes"; then
+ AC_MSG_RESULT([yes])
+ tst_allow_ftruncate="yes"
+ else
+ AC_MSG_RESULT([no])
+ tst_allow_ftruncate="no"
+ fi
+ fi
+ #
+ AC_MSG_CHECKING([if ftruncate might be used])
+ if test "$tst_links_ftruncate" = "yes" &&
+ test "$tst_proto_ftruncate" = "yes" &&
+ test "$tst_compi_ftruncate" = "yes" &&
+ test "$tst_allow_ftruncate" = "yes"; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE_UNQUOTED(HAVE_FTRUNCATE, 1,
+ [Define to 1 if you have the ftruncate function.])
+ ac_cv_func_ftruncate="yes"
+ else
+ AC_MSG_RESULT([no])
+ ac_cv_func_ftruncate="no"
+ fi
+])
+
+
+dnl CURL_CHECK_FUNC_GETADDRINFO
+dnl -------------------------------------------------
+dnl Verify if getaddrinfo is available, prototyped, can
+dnl be compiled and seems to work. If all of these are
+dnl true, and usage has not been previously disallowed
+dnl with shell variable curl_disallow_getaddrinfo, then
+dnl HAVE_GETADDRINFO will be defined. Additionally when
+dnl HAVE_GETADDRINFO gets defined this will also attempt
+dnl to find out if getaddrinfo happens to be threadsafe,
+dnl defining HAVE_GETADDRINFO_THREADSAFE when true.
+
+AC_DEFUN([CURL_CHECK_FUNC_GETADDRINFO], [
+ AC_REQUIRE([CURL_INCLUDES_WS2TCPIP])dnl
+ AC_REQUIRE([CURL_INCLUDES_STDLIB])dnl
+ AC_REQUIRE([CURL_INCLUDES_STRING])dnl
+ AC_REQUIRE([CURL_INCLUDES_SYS_SOCKET])dnl
+ AC_REQUIRE([CURL_INCLUDES_NETDB])dnl
+ #
+ tst_links_getaddrinfo="unknown"
+ tst_proto_getaddrinfo="unknown"
+ tst_compi_getaddrinfo="unknown"
+ tst_works_getaddrinfo="unknown"
+ tst_allow_getaddrinfo="unknown"
+ tst_tsafe_getaddrinfo="unknown"
+ #
+ AC_MSG_CHECKING([if getaddrinfo can be linked])
+ AC_LINK_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_ws2tcpip
+ $curl_includes_sys_socket
+ $curl_includes_netdb
+ ]],[[
+ if(0 != getaddrinfo(0, 0, 0, 0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_links_getaddrinfo="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_links_getaddrinfo="no"
+ ])
+ #
+ if test "$tst_links_getaddrinfo" = "yes"; then
+ AC_MSG_CHECKING([if getaddrinfo is prototyped])
+ AC_EGREP_CPP([getaddrinfo],[
+ $curl_includes_ws2tcpip
+ $curl_includes_sys_socket
+ $curl_includes_netdb
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_proto_getaddrinfo="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_proto_getaddrinfo="no"
+ ])
+ fi
+ #
+ if test "$tst_proto_getaddrinfo" = "yes"; then
+ AC_MSG_CHECKING([if getaddrinfo is compilable])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_ws2tcpip
+ $curl_includes_sys_socket
+ $curl_includes_netdb
+ ]],[[
+ if(0 != getaddrinfo(0, 0, 0, 0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_getaddrinfo="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_getaddrinfo="no"
+ ])
+ fi
+ #
+ dnl only do runtime verification when not cross-compiling
+ if test "x$cross_compiling" != "xyes" &&
+ test "$tst_compi_getaddrinfo" = "yes"; then
+ AC_MSG_CHECKING([if getaddrinfo seems to work])
+ AC_RUN_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_ws2tcpip
+ $curl_includes_stdlib
+ $curl_includes_string
+ $curl_includes_sys_socket
+ $curl_includes_netdb
+ ]],[[
+ struct addrinfo hints;
+ struct addrinfo *ai = 0;
+ int error;
+
+ memset(&hints, 0, sizeof(hints));
+ hints.ai_flags = AI_NUMERICHOST;
+ hints.ai_family = AF_UNSPEC;
+ hints.ai_socktype = SOCK_STREAM;
+ error = getaddrinfo("127.0.0.1", 0, &hints, &ai);
+ if(error || !ai)
+ exit(1); /* fail */
+ else
+ exit(0);
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_works_getaddrinfo="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_works_getaddrinfo="no"
+ ])
+ fi
+ #
+ if test "$tst_compi_getaddrinfo" = "yes" &&
+ test "$tst_works_getaddrinfo" != "no"; then
+ AC_MSG_CHECKING([if getaddrinfo usage allowed])
+ if test "x$curl_disallow_getaddrinfo" != "xyes"; then
+ AC_MSG_RESULT([yes])
+ tst_allow_getaddrinfo="yes"
+ else
+ AC_MSG_RESULT([no])
+ tst_allow_getaddrinfo="no"
+ fi
+ fi
+ #
+ AC_MSG_CHECKING([if getaddrinfo might be used])
+ if test "$tst_links_getaddrinfo" = "yes" &&
+ test "$tst_proto_getaddrinfo" = "yes" &&
+ test "$tst_compi_getaddrinfo" = "yes" &&
+ test "$tst_allow_getaddrinfo" = "yes" &&
+ test "$tst_works_getaddrinfo" != "no"; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE_UNQUOTED(HAVE_GETADDRINFO, 1,
+ [Define to 1 if you have a working getaddrinfo function.])
+ ac_cv_func_getaddrinfo="yes"
+ else
+ AC_MSG_RESULT([no])
+ ac_cv_func_getaddrinfo="no"
+ ac_cv_func_getaddrinfo_threadsafe="no"
+ fi
+ #
+ if test "$ac_cv_func_getaddrinfo" = "yes"; then
+ AC_MSG_CHECKING([if getaddrinfo is threadsafe])
+ case $host_os in
+ aix[[1234]].* | aix5.[[01]].*)
+ dnl aix 5.1 and older
+ tst_tsafe_getaddrinfo="no"
+ ;;
+ aix*)
+ dnl aix 5.2 and newer
+ tst_tsafe_getaddrinfo="yes"
+ ;;
+ darwin[[12345]].*)
+ dnl darwin 5.0 and mac os x 10.1.X and older
+ tst_tsafe_getaddrinfo="no"
+ ;;
+ darwin*)
+ dnl darwin 6.0 and mac os x 10.2.X and newer
+ tst_tsafe_getaddrinfo="yes"
+ ;;
+ freebsd[[1234]].* | freebsd5.[[1234]]*)
+ dnl freebsd 5.4 and older
+ tst_tsafe_getaddrinfo="no"
+ ;;
+ freebsd*)
+ dnl freebsd 5.5 and newer
+ tst_tsafe_getaddrinfo="yes"
+ ;;
+ hpux[[123456789]].* | hpux10.* | hpux11.0* | hpux11.10*)
+ dnl hpux 11.10 and older
+ tst_tsafe_getaddrinfo="no"
+ ;;
+ hpux*)
+ dnl hpux 11.11 and newer
+ tst_tsafe_getaddrinfo="yes"
+ ;;
+ netbsd[[123]].*)
+ dnl netbsd 3.X and older
+ tst_tsafe_getaddrinfo="no"
+ ;;
+ netbsd*)
+ dnl netbsd 4.X and newer
+ tst_tsafe_getaddrinfo="yes"
+ ;;
+ *bsd*)
+ dnl All other bsd's
+ tst_tsafe_getaddrinfo="no"
+ ;;
+ solaris2*)
+ dnl solaris which have it
+ tst_tsafe_getaddrinfo="yes"
+ ;;
+ esac
+ if test "$tst_tsafe_getaddrinfo" = "unknown"; then
+ CURL_CHECK_DEF_CC([h_errno], [
+ $curl_includes_ws2tcpip
+ $curl_includes_sys_socket
+ $curl_includes_netdb
+ ], [silent])
+ if test "$curl_cv_have_def_h_errno" = "no"; then
+ tst_tsafe_getaddrinfo="no"
+ fi
+ fi
+ if test "$tst_tsafe_getaddrinfo" = "unknown"; then
+ tst_tsafe_getaddrinfo="yes"
+ fi
+ AC_MSG_RESULT([$tst_tsafe_getaddrinfo])
+ if test "$tst_tsafe_getaddrinfo" = "yes"; then
+ AC_DEFINE_UNQUOTED(HAVE_GETADDRINFO_THREADSAFE, 1,
+ [Define to 1 if the getaddrinfo function is threadsafe.])
+ ac_cv_func_getaddrinfo_threadsafe="yes"
+ else
+ ac_cv_func_getaddrinfo_threadsafe="no"
+ fi
+ fi
+])
+
+
+dnl CURL_CHECK_FUNC_GETHOSTBYADDR
+dnl -------------------------------------------------
+dnl Verify if gethostbyaddr is available, prototyped,
+dnl and can be compiled. If all of these are true,
+dnl and usage has not been previously disallowed with
+dnl shell variable curl_disallow_gethostbyaddr, then
+dnl HAVE_GETHOSTBYADDR will be defined.
+
+AC_DEFUN([CURL_CHECK_FUNC_GETHOSTBYADDR], [
+ AC_REQUIRE([CURL_INCLUDES_WINSOCK2])dnl
+ AC_REQUIRE([CURL_INCLUDES_NETDB])dnl
+ #
+ tst_links_gethostbyaddr="unknown"
+ tst_proto_gethostbyaddr="unknown"
+ tst_compi_gethostbyaddr="unknown"
+ tst_allow_gethostbyaddr="unknown"
+ #
+ AC_MSG_CHECKING([if gethostbyaddr can be linked])
+ AC_LINK_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_winsock2
+ $curl_includes_netdb
+ ]],[[
+ if(0 != gethostbyaddr(0, 0, 0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_links_gethostbyaddr="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_links_gethostbyaddr="no"
+ ])
+ #
+ if test "$tst_links_gethostbyaddr" = "yes"; then
+ AC_MSG_CHECKING([if gethostbyaddr is prototyped])
+ AC_EGREP_CPP([gethostbyaddr],[
+ $curl_includes_winsock2
+ $curl_includes_netdb
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_proto_gethostbyaddr="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_proto_gethostbyaddr="no"
+ ])
+ fi
+ #
+ if test "$tst_proto_gethostbyaddr" = "yes"; then
+ AC_MSG_CHECKING([if gethostbyaddr is compilable])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_winsock2
+ $curl_includes_netdb
+ ]],[[
+ if(0 != gethostbyaddr(0, 0, 0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_gethostbyaddr="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_gethostbyaddr="no"
+ ])
+ fi
+ #
+ if test "$tst_compi_gethostbyaddr" = "yes"; then
+ AC_MSG_CHECKING([if gethostbyaddr usage allowed])
+ if test "x$curl_disallow_gethostbyaddr" != "xyes"; then
+ AC_MSG_RESULT([yes])
+ tst_allow_gethostbyaddr="yes"
+ else
+ AC_MSG_RESULT([no])
+ tst_allow_gethostbyaddr="no"
+ fi
+ fi
+ #
+ AC_MSG_CHECKING([if gethostbyaddr might be used])
+ if test "$tst_links_gethostbyaddr" = "yes" &&
+ test "$tst_proto_gethostbyaddr" = "yes" &&
+ test "$tst_compi_gethostbyaddr" = "yes" &&
+ test "$tst_allow_gethostbyaddr" = "yes"; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE_UNQUOTED(HAVE_GETHOSTBYADDR, 1,
+ [Define to 1 if you have the gethostbyaddr function.])
+ ac_cv_func_gethostbyaddr="yes"
+ else
+ AC_MSG_RESULT([no])
+ ac_cv_func_gethostbyaddr="no"
+ fi
+])
+
+
+dnl CURL_CHECK_FUNC_GETHOSTBYADDR_R
+dnl -------------------------------------------------
+dnl Verify if gethostbyaddr_r is available, prototyped,
+dnl and can be compiled. If all of these are true, and
+dnl usage has not been previously disallowed with
+dnl shell variable curl_disallow_gethostbyaddr_r, then
+dnl HAVE_GETHOSTBYADDR_R will be defined.
+
+AC_DEFUN([CURL_CHECK_FUNC_GETHOSTBYADDR_R], [
+ AC_REQUIRE([CURL_INCLUDES_NETDB])dnl
+ #
+ tst_links_gethostbyaddr_r="unknown"
+ tst_proto_gethostbyaddr_r="unknown"
+ tst_compi_gethostbyaddr_r="unknown"
+ tst_allow_gethostbyaddr_r="unknown"
+ tst_nargs_gethostbyaddr_r="unknown"
+ #
+ AC_MSG_CHECKING([if gethostbyaddr_r can be linked])
+ AC_LINK_IFELSE([
+ AC_LANG_FUNC_LINK_TRY([gethostbyaddr_r])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_links_gethostbyaddr_r="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_links_gethostbyaddr_r="no"
+ ])
+ #
+ if test "$tst_links_gethostbyaddr_r" = "yes"; then
+ AC_MSG_CHECKING([if gethostbyaddr_r is prototyped])
+ AC_EGREP_CPP([gethostbyaddr_r],[
+ $curl_includes_netdb
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_proto_gethostbyaddr_r="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_proto_gethostbyaddr_r="no"
+ ])
+ fi
+ #
+ if test "$tst_proto_gethostbyaddr_r" = "yes"; then
+ if test "$tst_nargs_gethostbyaddr_r" = "unknown"; then
+ AC_MSG_CHECKING([if gethostbyaddr_r takes 5 args.])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_netdb
+ ]],[[
+ if(0 != gethostbyaddr_r(0, 0, 0, 0, 0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_gethostbyaddr_r="yes"
+ tst_nargs_gethostbyaddr_r="5"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_gethostbyaddr_r="no"
+ ])
+ fi
+ if test "$tst_nargs_gethostbyaddr_r" = "unknown"; then
+ AC_MSG_CHECKING([if gethostbyaddr_r takes 7 args.])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_netdb
+ ]],[[
+ if(0 != gethostbyaddr_r(0, 0, 0, 0, 0, 0, 0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_gethostbyaddr_r="yes"
+ tst_nargs_gethostbyaddr_r="7"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_gethostbyaddr_r="no"
+ ])
+ fi
+ if test "$tst_nargs_gethostbyaddr_r" = "unknown"; then
+ AC_MSG_CHECKING([if gethostbyaddr_r takes 8 args.])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_netdb
+ ]],[[
+ if(0 != gethostbyaddr_r(0, 0, 0, 0, 0, 0, 0, 0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_gethostbyaddr_r="yes"
+ tst_nargs_gethostbyaddr_r="8"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_gethostbyaddr_r="no"
+ ])
+ fi
+ AC_MSG_CHECKING([if gethostbyaddr_r is compilable])
+ if test "$tst_compi_gethostbyaddr_r" = "yes"; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ fi
+ fi
+ #
+ if test "$tst_compi_gethostbyaddr_r" = "yes"; then
+ AC_MSG_CHECKING([if gethostbyaddr_r usage allowed])
+ if test "x$curl_disallow_gethostbyaddr_r" != "xyes"; then
+ AC_MSG_RESULT([yes])
+ tst_allow_gethostbyaddr_r="yes"
+ else
+ AC_MSG_RESULT([no])
+ tst_allow_gethostbyaddr_r="no"
+ fi
+ fi
+ #
+ AC_MSG_CHECKING([if gethostbyaddr_r might be used])
+ if test "$tst_links_gethostbyaddr_r" = "yes" &&
+ test "$tst_proto_gethostbyaddr_r" = "yes" &&
+ test "$tst_compi_gethostbyaddr_r" = "yes" &&
+ test "$tst_allow_gethostbyaddr_r" = "yes"; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE_UNQUOTED(HAVE_GETHOSTBYADDR_R, 1,
+ [Define to 1 if you have the gethostbyaddr_r function.])
+ dnl AC_DEFINE_UNQUOTED(GETHOSTBYADDR_R_ARGS, $tst_nargs_gethostbyaddr_r,
+ dnl [Specifies the number of arguments to gethostbyaddr_r])
+ #
+ if test "$tst_nargs_gethostbyaddr_r" -eq "5"; then
+ AC_DEFINE(HAVE_GETHOSTBYADDR_R_5, 1, [gethostbyaddr_r() takes 5 args])
+ elif test "$tst_nargs_gethostbyaddr_r" -eq "7"; then
+ AC_DEFINE(HAVE_GETHOSTBYADDR_R_7, 1, [gethostbyaddr_r() takes 7 args])
+ elif test "$tst_nargs_gethostbyaddr_r" -eq "8"; then
+ AC_DEFINE(HAVE_GETHOSTBYADDR_R_8, 1, [gethostbyaddr_r() takes 8 args])
+ fi
+ #
+ ac_cv_func_gethostbyaddr_r="yes"
+ else
+ AC_MSG_RESULT([no])
+ ac_cv_func_gethostbyaddr_r="no"
+ fi
+])
+
+
+dnl CURL_CHECK_FUNC_GETHOSTBYNAME
+dnl -------------------------------------------------
+dnl Verify if gethostbyname is available, prototyped,
+dnl and can be compiled. If all of these are true,
+dnl and usage has not been previously disallowed with
+dnl shell variable curl_disallow_gethostbyname, then
+dnl HAVE_GETHOSTBYNAME will be defined.
+
+AC_DEFUN([CURL_CHECK_FUNC_GETHOSTBYNAME], [
+ AC_REQUIRE([CURL_INCLUDES_WINSOCK2])dnl
+ AC_REQUIRE([CURL_INCLUDES_NETDB])dnl
+ #
+ tst_links_gethostbyname="unknown"
+ tst_proto_gethostbyname="unknown"
+ tst_compi_gethostbyname="unknown"
+ tst_allow_gethostbyname="unknown"
+ #
+ AC_MSG_CHECKING([if gethostbyname can be linked])
+ AC_LINK_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_winsock2
+ $curl_includes_netdb
+ ]],[[
+ if(0 != gethostbyname(0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_links_gethostbyname="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_links_gethostbyname="no"
+ ])
+ #
+ if test "$tst_links_gethostbyname" = "yes"; then
+ AC_MSG_CHECKING([if gethostbyname is prototyped])
+ AC_EGREP_CPP([gethostbyname],[
+ $curl_includes_winsock2
+ $curl_includes_netdb
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_proto_gethostbyname="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_proto_gethostbyname="no"
+ ])
+ fi
+ #
+ if test "$tst_proto_gethostbyname" = "yes"; then
+ AC_MSG_CHECKING([if gethostbyname is compilable])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_winsock2
+ $curl_includes_netdb
+ ]],[[
+ if(0 != gethostbyname(0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_gethostbyname="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_gethostbyname="no"
+ ])
+ fi
+ #
+ if test "$tst_compi_gethostbyname" = "yes"; then
+ AC_MSG_CHECKING([if gethostbyname usage allowed])
+ if test "x$curl_disallow_gethostbyname" != "xyes"; then
+ AC_MSG_RESULT([yes])
+ tst_allow_gethostbyname="yes"
+ else
+ AC_MSG_RESULT([no])
+ tst_allow_gethostbyname="no"
+ fi
+ fi
+ #
+ AC_MSG_CHECKING([if gethostbyname might be used])
+ if test "$tst_links_gethostbyname" = "yes" &&
+ test "$tst_proto_gethostbyname" = "yes" &&
+ test "$tst_compi_gethostbyname" = "yes" &&
+ test "$tst_allow_gethostbyname" = "yes"; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE_UNQUOTED(HAVE_GETHOSTBYNAME, 1,
+ [Define to 1 if you have the gethostbyname function.])
+ ac_cv_func_gethostbyname="yes"
+ else
+ AC_MSG_RESULT([no])
+ ac_cv_func_gethostbyname="no"
+ fi
+])
+
+
+dnl CURL_CHECK_FUNC_GETHOSTBYNAME_R
+dnl -------------------------------------------------
+dnl Verify if gethostbyname_r is available, prototyped,
+dnl and can be compiled. If all of these are true, and
+dnl usage has not been previously disallowed with
+dnl shell variable curl_disallow_gethostbyname_r, then
+dnl HAVE_GETHOSTBYNAME_R will be defined.
+
+AC_DEFUN([CURL_CHECK_FUNC_GETHOSTBYNAME_R], [
+ AC_REQUIRE([CURL_INCLUDES_NETDB])dnl
+ #
+ tst_links_gethostbyname_r="unknown"
+ tst_proto_gethostbyname_r="unknown"
+ tst_compi_gethostbyname_r="unknown"
+ tst_allow_gethostbyname_r="unknown"
+ tst_nargs_gethostbyname_r="unknown"
+ #
+ AC_MSG_CHECKING([if gethostbyname_r can be linked])
+ AC_LINK_IFELSE([
+ AC_LANG_FUNC_LINK_TRY([gethostbyname_r])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_links_gethostbyname_r="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_links_gethostbyname_r="no"
+ ])
+ #
+ if test "$tst_links_gethostbyname_r" = "yes"; then
+ AC_MSG_CHECKING([if gethostbyname_r is prototyped])
+ AC_EGREP_CPP([gethostbyname_r],[
+ $curl_includes_netdb
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_proto_gethostbyname_r="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_proto_gethostbyname_r="no"
+ ])
+ fi
+ #
+ if test "$tst_proto_gethostbyname_r" = "yes"; then
+ if test "$tst_nargs_gethostbyname_r" = "unknown"; then
+ AC_MSG_CHECKING([if gethostbyname_r takes 3 args.])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_netdb
+ ]],[[
+ if(0 != gethostbyname_r(0, 0, 0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_gethostbyname_r="yes"
+ tst_nargs_gethostbyname_r="3"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_gethostbyname_r="no"
+ ])
+ fi
+ if test "$tst_nargs_gethostbyname_r" = "unknown"; then
+ AC_MSG_CHECKING([if gethostbyname_r takes 5 args.])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_netdb
+ ]],[[
+ if(0 != gethostbyname_r(0, 0, 0, 0, 0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_gethostbyname_r="yes"
+ tst_nargs_gethostbyname_r="5"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_gethostbyname_r="no"
+ ])
+ fi
+ if test "$tst_nargs_gethostbyname_r" = "unknown"; then
+ AC_MSG_CHECKING([if gethostbyname_r takes 6 args.])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_netdb
+ ]],[[
+ if(0 != gethostbyname_r(0, 0, 0, 0, 0, 0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_gethostbyname_r="yes"
+ tst_nargs_gethostbyname_r="6"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_gethostbyname_r="no"
+ ])
+ fi
+ AC_MSG_CHECKING([if gethostbyname_r is compilable])
+ if test "$tst_compi_gethostbyname_r" = "yes"; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ fi
+ fi
+ #
+ if test "$tst_compi_gethostbyname_r" = "yes"; then
+ AC_MSG_CHECKING([if gethostbyname_r usage allowed])
+ if test "x$curl_disallow_gethostbyname_r" != "xyes"; then
+ AC_MSG_RESULT([yes])
+ tst_allow_gethostbyname_r="yes"
+ else
+ AC_MSG_RESULT([no])
+ tst_allow_gethostbyname_r="no"
+ fi
+ fi
+ #
+ AC_MSG_CHECKING([if gethostbyname_r might be used])
+ if test "$tst_links_gethostbyname_r" = "yes" &&
+ test "$tst_proto_gethostbyname_r" = "yes" &&
+ test "$tst_compi_gethostbyname_r" = "yes" &&
+ test "$tst_allow_gethostbyname_r" = "yes"; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE_UNQUOTED(HAVE_GETHOSTBYNAME_R, 1,
+ [Define to 1 if you have the gethostbyname_r function.])
+ dnl AC_DEFINE_UNQUOTED(GETHOSTBYNAME_R_ARGS, $tst_nargs_gethostbyname_r,
+ dnl [Specifies the number of arguments to gethostbyname_r])
+ #
+ if test "$tst_nargs_gethostbyname_r" -eq "3"; then
+ AC_DEFINE(HAVE_GETHOSTBYNAME_R_3, 1, [gethostbyname_r() takes 3 args])
+ elif test "$tst_nargs_gethostbyname_r" -eq "5"; then
+ AC_DEFINE(HAVE_GETHOSTBYNAME_R_5, 1, [gethostbyname_r() takes 5 args])
+ elif test "$tst_nargs_gethostbyname_r" -eq "6"; then
+ AC_DEFINE(HAVE_GETHOSTBYNAME_R_6, 1, [gethostbyname_r() takes 6 args])
+ fi
+ #
+ ac_cv_func_gethostbyname_r="yes"
+ else
+ AC_MSG_RESULT([no])
+ ac_cv_func_gethostbyname_r="no"
+ fi
+])
+
+
+dnl CURL_CHECK_FUNC_GETHOSTNAME
+dnl -------------------------------------------------
+dnl Verify if gethostname is available, prototyped, and
+dnl can be compiled. If all of these are true, and
+dnl usage has not been previously disallowed with
+dnl shell variable curl_disallow_gethostname, then
+dnl HAVE_GETHOSTNAME will be defined.
+
+AC_DEFUN([CURL_CHECK_FUNC_GETHOSTNAME], [
+ AC_REQUIRE([CURL_INCLUDES_WINSOCK2])dnl
+ AC_REQUIRE([CURL_INCLUDES_UNISTD])dnl
+ #
+ tst_links_gethostname="unknown"
+ tst_proto_gethostname="unknown"
+ tst_compi_gethostname="unknown"
+ tst_allow_gethostname="unknown"
+ #
+ AC_MSG_CHECKING([if gethostname can be linked])
+ AC_LINK_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_winsock2
+ $curl_includes_unistd
+ ]],[[
+ if(0 != gethostname(0, 0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_links_gethostname="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_links_gethostname="no"
+ ])
+ #
+ if test "$tst_links_gethostname" = "yes"; then
+ AC_MSG_CHECKING([if gethostname is prototyped])
+ AC_EGREP_CPP([gethostname],[
+ $curl_includes_winsock2
+ $curl_includes_unistd
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_proto_gethostname="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_proto_gethostname="no"
+ ])
+ fi
+ #
+ if test "$tst_proto_gethostname" = "yes"; then
+ AC_MSG_CHECKING([if gethostname is compilable])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_winsock2
+ $curl_includes_unistd
+ ]],[[
+ if(0 != gethostname(0, 0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_gethostname="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_gethostname="no"
+ ])
+ fi
+ #
+ if test "$tst_compi_gethostname" = "yes"; then
+ AC_MSG_CHECKING([if gethostname usage allowed])
+ if test "x$curl_disallow_gethostname" != "xyes"; then
+ AC_MSG_RESULT([yes])
+ tst_allow_gethostname="yes"
+ else
+ AC_MSG_RESULT([no])
+ tst_allow_gethostname="no"
+ fi
+ fi
+ #
+ AC_MSG_CHECKING([if gethostname might be used])
+ if test "$tst_links_gethostname" = "yes" &&
+ test "$tst_proto_gethostname" = "yes" &&
+ test "$tst_compi_gethostname" = "yes" &&
+ test "$tst_allow_gethostname" = "yes"; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE_UNQUOTED(HAVE_GETHOSTNAME, 1,
+ [Define to 1 if you have the gethostname function.])
+ ac_cv_func_gethostname="yes"
+ else
+ AC_MSG_RESULT([no])
+ ac_cv_func_gethostname="no"
+ fi
+])
+
+
+dnl CURL_CHECK_FUNC_GETIFADDRS
+dnl -------------------------------------------------
+dnl Verify if getifaddrs is available, prototyped, can
+dnl be compiled and seems to work. If all of these are
+dnl true, and usage has not been previously disallowed
+dnl with shell variable curl_disallow_getifaddrs, then
+dnl HAVE_GETIFADDRS will be defined.
+
+AC_DEFUN([CURL_CHECK_FUNC_GETIFADDRS], [
+ AC_REQUIRE([CURL_INCLUDES_STDLIB])dnl
+ AC_REQUIRE([CURL_INCLUDES_IFADDRS])dnl
+ #
+ tst_links_getifaddrs="unknown"
+ tst_proto_getifaddrs="unknown"
+ tst_compi_getifaddrs="unknown"
+ tst_works_getifaddrs="unknown"
+ tst_allow_getifaddrs="unknown"
+ #
+ AC_MSG_CHECKING([if getifaddrs can be linked])
+ AC_LINK_IFELSE([
+ AC_LANG_FUNC_LINK_TRY([getifaddrs])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_links_getifaddrs="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_links_getifaddrs="no"
+ ])
+ #
+ if test "$tst_links_getifaddrs" = "yes"; then
+ AC_MSG_CHECKING([if getifaddrs is prototyped])
+ AC_EGREP_CPP([getifaddrs],[
+ $curl_includes_ifaddrs
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_proto_getifaddrs="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_proto_getifaddrs="no"
+ ])
+ fi
+ #
+ if test "$tst_proto_getifaddrs" = "yes"; then
+ AC_MSG_CHECKING([if getifaddrs is compilable])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_ifaddrs
+ ]],[[
+ if(0 != getifaddrs(0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_getifaddrs="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_getifaddrs="no"
+ ])
+ fi
+ #
+ dnl only do runtime verification when not cross-compiling
+ if test "x$cross_compiling" != "xyes" &&
+ test "$tst_compi_getifaddrs" = "yes"; then
+ AC_MSG_CHECKING([if getifaddrs seems to work])
+ AC_RUN_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_stdlib
+ $curl_includes_ifaddrs
+ ]],[[
+ struct ifaddrs *ifa = 0;
+ int error;
+
+ error = getifaddrs(&ifa);
+ if(error || !ifa)
+ exit(1); /* fail */
+ else
+ exit(0);
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_works_getifaddrs="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_works_getifaddrs="no"
+ ])
+ fi
+ #
+ if test "$tst_compi_getifaddrs" = "yes" &&
+ test "$tst_works_getifaddrs" != "no"; then
+ AC_MSG_CHECKING([if getifaddrs usage allowed])
+ if test "x$curl_disallow_getifaddrs" != "xyes"; then
+ AC_MSG_RESULT([yes])
+ tst_allow_getifaddrs="yes"
+ else
+ AC_MSG_RESULT([no])
+ tst_allow_getifaddrs="no"
+ fi
+ fi
+ #
+ AC_MSG_CHECKING([if getifaddrs might be used])
+ if test "$tst_links_getifaddrs" = "yes" &&
+ test "$tst_proto_getifaddrs" = "yes" &&
+ test "$tst_compi_getifaddrs" = "yes" &&
+ test "$tst_allow_getifaddrs" = "yes" &&
+ test "$tst_works_getifaddrs" != "no"; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE_UNQUOTED(HAVE_GETIFADDRS, 1,
+ [Define to 1 if you have a working getifaddrs function.])
+ ac_cv_func_getifaddrs="yes"
+ else
+ AC_MSG_RESULT([no])
+ ac_cv_func_getifaddrs="no"
+ fi
+])
+
+
+dnl CURL_CHECK_FUNC_GETSERVBYPORT_R
+dnl -------------------------------------------------
+dnl Verify if getservbyport_r is available, prototyped,
+dnl and can be compiled. If all of these are true, and
+dnl usage has not been previously disallowed with
+dnl shell variable curl_disallow_getservbyport_r, then
+dnl HAVE_GETSERVBYPORT_R will be defined.
+
+AC_DEFUN([CURL_CHECK_FUNC_GETSERVBYPORT_R], [
+ AC_REQUIRE([CURL_INCLUDES_NETDB])dnl
+ #
+ tst_links_getservbyport_r="unknown"
+ tst_proto_getservbyport_r="unknown"
+ tst_compi_getservbyport_r="unknown"
+ tst_allow_getservbyport_r="unknown"
+ tst_nargs_getservbyport_r="unknown"
+ #
+ AC_MSG_CHECKING([if getservbyport_r can be linked])
+ AC_LINK_IFELSE([
+ AC_LANG_FUNC_LINK_TRY([getservbyport_r])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_links_getservbyport_r="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_links_getservbyport_r="no"
+ ])
+ #
+ if test "$tst_links_getservbyport_r" = "yes"; then
+ AC_MSG_CHECKING([if getservbyport_r is prototyped])
+ AC_EGREP_CPP([getservbyport_r],[
+ $curl_includes_netdb
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_proto_getservbyport_r="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_proto_getservbyport_r="no"
+ ])
+ fi
+ #
+ if test "$tst_proto_getservbyport_r" = "yes"; then
+ if test "$tst_nargs_getservbyport_r" = "unknown"; then
+ AC_MSG_CHECKING([if getservbyport_r takes 4 args.])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_netdb
+ ]],[[
+ if(0 != getservbyport_r(0, 0, 0, 0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_getservbyport_r="yes"
+ tst_nargs_getservbyport_r="4"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_getservbyport_r="no"
+ ])
+ fi
+ if test "$tst_nargs_getservbyport_r" = "unknown"; then
+ AC_MSG_CHECKING([if getservbyport_r takes 5 args.])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_netdb
+ ]],[[
+ if(0 != getservbyport_r(0, 0, 0, 0, 0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_getservbyport_r="yes"
+ tst_nargs_getservbyport_r="5"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_getservbyport_r="no"
+ ])
+ fi
+ if test "$tst_nargs_getservbyport_r" = "unknown"; then
+ AC_MSG_CHECKING([if getservbyport_r takes 6 args.])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_netdb
+ ]],[[
+ if(0 != getservbyport_r(0, 0, 0, 0, 0, 0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_getservbyport_r="yes"
+ tst_nargs_getservbyport_r="6"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_getservbyport_r="no"
+ ])
+ fi
+ AC_MSG_CHECKING([if getservbyport_r is compilable])
+ if test "$tst_compi_getservbyport_r" = "yes"; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ fi
+ fi
+ #
+ if test "$tst_compi_getservbyport_r" = "yes"; then
+ AC_MSG_CHECKING([if getservbyport_r usage allowed])
+ if test "x$curl_disallow_getservbyport_r" != "xyes"; then
+ AC_MSG_RESULT([yes])
+ tst_allow_getservbyport_r="yes"
+ else
+ AC_MSG_RESULT([no])
+ tst_allow_getservbyport_r="no"
+ fi
+ fi
+ #
+ AC_MSG_CHECKING([if getservbyport_r might be used])
+ if test "$tst_links_getservbyport_r" = "yes" &&
+ test "$tst_proto_getservbyport_r" = "yes" &&
+ test "$tst_compi_getservbyport_r" = "yes" &&
+ test "$tst_allow_getservbyport_r" = "yes"; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE_UNQUOTED(HAVE_GETSERVBYPORT_R, 1,
+ [Define to 1 if you have the getservbyport_r function.])
+ AC_DEFINE_UNQUOTED(GETSERVBYPORT_R_ARGS, $tst_nargs_getservbyport_r,
+ [Specifies the number of arguments to getservbyport_r])
+ if test "$tst_nargs_getservbyport_r" -eq "4"; then
+ AC_DEFINE(GETSERVBYPORT_R_BUFSIZE, sizeof(struct servent_data),
+ [Specifies the size of the buffer to pass to getservbyport_r])
+ else
+ AC_DEFINE(GETSERVBYPORT_R_BUFSIZE, 4096,
+ [Specifies the size of the buffer to pass to getservbyport_r])
+ fi
+ ac_cv_func_getservbyport_r="yes"
+ else
+ AC_MSG_RESULT([no])
+ ac_cv_func_getservbyport_r="no"
+ fi
+])
+
+
+dnl CURL_CHECK_FUNC_GMTIME_R
+dnl -------------------------------------------------
+dnl Verify if gmtime_r is available, prototyped, can
+dnl be compiled and seems to work. If all of these are
+dnl true, and usage has not been previously disallowed
+dnl with shell variable curl_disallow_gmtime_r, then
+dnl HAVE_GMTIME_R will be defined.
+
+AC_DEFUN([CURL_CHECK_FUNC_GMTIME_R], [
+ AC_REQUIRE([CURL_INCLUDES_STDLIB])dnl
+ AC_REQUIRE([CURL_INCLUDES_TIME])dnl
+ #
+ tst_links_gmtime_r="unknown"
+ tst_proto_gmtime_r="unknown"
+ tst_compi_gmtime_r="unknown"
+ tst_works_gmtime_r="unknown"
+ tst_allow_gmtime_r="unknown"
+ #
+ AC_MSG_CHECKING([if gmtime_r can be linked])
+ AC_LINK_IFELSE([
+ AC_LANG_FUNC_LINK_TRY([gmtime_r])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_links_gmtime_r="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_links_gmtime_r="no"
+ ])
+ #
+ if test "$tst_links_gmtime_r" = "yes"; then
+ AC_MSG_CHECKING([if gmtime_r is prototyped])
+ AC_EGREP_CPP([gmtime_r],[
+ $curl_includes_time
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_proto_gmtime_r="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_proto_gmtime_r="no"
+ ])
+ fi
+ #
+ if test "$tst_proto_gmtime_r" = "yes"; then
+ AC_MSG_CHECKING([if gmtime_r is compilable])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_time
+ ]],[[
+ if(0 != gmtime_r(0, 0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_gmtime_r="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_gmtime_r="no"
+ ])
+ fi
+ #
+ dnl only do runtime verification when not cross-compiling
+ if test "x$cross_compiling" != "xyes" &&
+ test "$tst_compi_gmtime_r" = "yes"; then
+ AC_MSG_CHECKING([if gmtime_r seems to work])
+ AC_RUN_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_stdlib
+ $curl_includes_time
+ ]],[[
+ time_t local = 1170352587;
+ struct tm *gmt = 0;
+ struct tm result;
+ gmt = gmtime_r(&local, &result);
+ if(gmt)
+ exit(0);
+ else
+ exit(1);
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_works_gmtime_r="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_works_gmtime_r="no"
+ ])
+ fi
+ #
+ if test "$tst_compi_gmtime_r" = "yes" &&
+ test "$tst_works_gmtime_r" != "no"; then
+ AC_MSG_CHECKING([if gmtime_r usage allowed])
+ if test "x$curl_disallow_gmtime_r" != "xyes"; then
+ AC_MSG_RESULT([yes])
+ tst_allow_gmtime_r="yes"
+ else
+ AC_MSG_RESULT([no])
+ tst_allow_gmtime_r="no"
+ fi
+ fi
+ #
+ AC_MSG_CHECKING([if gmtime_r might be used])
+ if test "$tst_links_gmtime_r" = "yes" &&
+ test "$tst_proto_gmtime_r" = "yes" &&
+ test "$tst_compi_gmtime_r" = "yes" &&
+ test "$tst_allow_gmtime_r" = "yes" &&
+ test "$tst_works_gmtime_r" != "no"; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE_UNQUOTED(HAVE_GMTIME_R, 1,
+ [Define to 1 if you have a working gmtime_r function.])
+ ac_cv_func_gmtime_r="yes"
+ else
+ AC_MSG_RESULT([no])
+ ac_cv_func_gmtime_r="no"
+ fi
+])
+
+
+dnl CURL_CHECK_FUNC_INET_NTOA_R
+dnl -------------------------------------------------
+dnl Verify if inet_ntoa_r is available, prototyped,
+dnl and can be compiled. If all of these are true, and
+dnl usage has not been previously disallowed with
+dnl shell variable curl_disallow_inet_ntoa_r, then
+dnl HAVE_INET_NTOA_R will be defined.
+
+AC_DEFUN([CURL_CHECK_FUNC_INET_NTOA_R], [
+ AC_REQUIRE([CURL_INCLUDES_ARPA_INET])dnl
+ #
+ tst_links_inet_ntoa_r="unknown"
+ tst_proto_inet_ntoa_r="unknown"
+ tst_compi_inet_ntoa_r="unknown"
+ tst_allow_inet_ntoa_r="unknown"
+ tst_nargs_inet_ntoa_r="unknown"
+ #
+ AC_MSG_CHECKING([if inet_ntoa_r can be linked])
+ AC_LINK_IFELSE([
+ AC_LANG_FUNC_LINK_TRY([inet_ntoa_r])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_links_inet_ntoa_r="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_links_inet_ntoa_r="no"
+ ])
+ #
+ if test "$tst_links_inet_ntoa_r" = "yes"; then
+ AC_MSG_CHECKING([if inet_ntoa_r is prototyped])
+ AC_EGREP_CPP([inet_ntoa_r],[
+ $curl_includes_arpa_inet
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_proto_inet_ntoa_r="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_proto_inet_ntoa_r="no"
+ ])
+ fi
+ #
+ if test "$tst_proto_inet_ntoa_r" = "yes"; then
+ if test "$tst_nargs_inet_ntoa_r" = "unknown"; then
+ AC_MSG_CHECKING([if inet_ntoa_r takes 2 args.])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_arpa_inet
+ ]],[[
+ struct in_addr addr;
+ if(0 != inet_ntoa_r(addr, 0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_inet_ntoa_r="yes"
+ tst_nargs_inet_ntoa_r="2"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_inet_ntoa_r="no"
+ ])
+ fi
+ if test "$tst_nargs_inet_ntoa_r" = "unknown"; then
+ AC_MSG_CHECKING([if inet_ntoa_r takes 3 args.])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_arpa_inet
+ ]],[[
+ struct in_addr addr;
+ if(0 != inet_ntoa_r(addr, 0, 0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_inet_ntoa_r="yes"
+ tst_nargs_inet_ntoa_r="3"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_inet_ntoa_r="no"
+ ])
+ fi
+ AC_MSG_CHECKING([if inet_ntoa_r is compilable])
+ if test "$tst_compi_inet_ntoa_r" = "yes"; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ fi
+ fi
+ #
+ if test "$tst_compi_inet_ntoa_r" = "yes"; then
+ AC_MSG_CHECKING([if inet_ntoa_r usage allowed])
+ if test "x$curl_disallow_inet_ntoa_r" != "xyes"; then
+ AC_MSG_RESULT([yes])
+ tst_allow_inet_ntoa_r="yes"
+ else
+ AC_MSG_RESULT([no])
+ tst_allow_inet_ntoa_r="no"
+ fi
+ fi
+ #
+ AC_MSG_CHECKING([if inet_ntoa_r might be used])
+ if test "$tst_links_inet_ntoa_r" = "yes" &&
+ test "$tst_proto_inet_ntoa_r" = "yes" &&
+ test "$tst_compi_inet_ntoa_r" = "yes" &&
+ test "$tst_allow_inet_ntoa_r" = "yes"; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE_UNQUOTED(HAVE_INET_NTOA_R, 1,
+ [Define to 1 if you have the inet_ntoa_r function.])
+ dnl AC_DEFINE_UNQUOTED(INET_NTOA_R_ARGS, $tst_nargs_inet_ntoa_r,
+ dnl [Specifies the number of arguments to inet_ntoa_r])
+ #
+ if test "$tst_nargs_inet_ntoa_r" -eq "2"; then
+ AC_DEFINE(HAVE_INET_NTOA_R_2, 1, [inet_ntoa_r() takes 2 args])
+ elif test "$tst_nargs_inet_ntoa_r" -eq "3"; then
+ AC_DEFINE(HAVE_INET_NTOA_R_3, 1, [inet_ntoa_r() takes 3 args])
+ fi
+ #
+ ac_cv_func_inet_ntoa_r="yes"
+ else
+ AC_MSG_RESULT([no])
+ ac_cv_func_inet_ntoa_r="no"
+ fi
+])
+
+
+dnl CURL_CHECK_FUNC_INET_NTOP
+dnl -------------------------------------------------
+dnl Verify if inet_ntop is available, prototyped, can
+dnl be compiled and seems to work. If all of these are
+dnl true, and usage has not been previously disallowed
+dnl with shell variable curl_disallow_inet_ntop, then
+dnl HAVE_INET_NTOP will be defined.
+
+AC_DEFUN([CURL_CHECK_FUNC_INET_NTOP], [
+ AC_REQUIRE([CURL_INCLUDES_STDLIB])dnl
+ AC_REQUIRE([CURL_INCLUDES_ARPA_INET])dnl
+ AC_REQUIRE([CURL_INCLUDES_STRING])dnl
+ #
+ tst_links_inet_ntop="unknown"
+ tst_proto_inet_ntop="unknown"
+ tst_compi_inet_ntop="unknown"
+ tst_works_inet_ntop="unknown"
+ tst_allow_inet_ntop="unknown"
+ #
+ AC_MSG_CHECKING([if inet_ntop can be linked])
+ AC_LINK_IFELSE([
+ AC_LANG_FUNC_LINK_TRY([inet_ntop])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_links_inet_ntop="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_links_inet_ntop="no"
+ ])
+ #
+ if test "$tst_links_inet_ntop" = "yes"; then
+ AC_MSG_CHECKING([if inet_ntop is prototyped])
+ AC_EGREP_CPP([inet_ntop],[
+ $curl_includes_arpa_inet
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_proto_inet_ntop="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_proto_inet_ntop="no"
+ ])
+ fi
+ #
+ if test "$tst_proto_inet_ntop" = "yes"; then
+ AC_MSG_CHECKING([if inet_ntop is compilable])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_arpa_inet
+ ]],[[
+ if(0 != inet_ntop(0, 0, 0, 0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_inet_ntop="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_inet_ntop="no"
+ ])
+ fi
+ #
+ dnl only do runtime verification when not cross-compiling
+ if test "x$cross_compiling" != "xyes" &&
+ test "$tst_compi_inet_ntop" = "yes"; then
+ AC_MSG_CHECKING([if inet_ntop seems to work])
+ AC_RUN_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_stdlib
+ $curl_includes_arpa_inet
+ $curl_includes_string
+ ]],[[
+ char ipv6res[sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255")];
+ char ipv4res[sizeof "255.255.255.255"];
+ unsigned char ipv6a[26];
+ unsigned char ipv4a[5];
+ char *ipv6ptr = 0;
+ char *ipv4ptr = 0;
+ /* - */
+ ipv4res[0] = '\0';
+ ipv4a[0] = 0xc0;
+ ipv4a[1] = 0xa8;
+ ipv4a[2] = 0x64;
+ ipv4a[3] = 0x01;
+ ipv4a[4] = 0x01;
+ /* - */
+ ipv4ptr = inet_ntop(AF_INET, ipv4a, ipv4res, sizeof(ipv4res));
+ if(!ipv4ptr)
+ exit(1); /* fail */
+ if(ipv4ptr != ipv4res)
+ exit(1); /* fail */
+ if(!ipv4ptr[0])
+ exit(1); /* fail */
+ if(memcmp(ipv4res, "192.168.100.1", 13) != 0)
+ exit(1); /* fail */
+ /* - */
+ ipv6res[0] = '\0';
+ memset(ipv6a, 0, sizeof(ipv6a));
+ ipv6a[0] = 0xfe;
+ ipv6a[1] = 0x80;
+ ipv6a[8] = 0x02;
+ ipv6a[9] = 0x14;
+ ipv6a[10] = 0x4f;
+ ipv6a[11] = 0xff;
+ ipv6a[12] = 0xfe;
+ ipv6a[13] = 0x0b;
+ ipv6a[14] = 0x76;
+ ipv6a[15] = 0xc8;
+ ipv6a[25] = 0x01;
+ /* - */
+ ipv6ptr = inet_ntop(AF_INET6, ipv6a, ipv6res, sizeof(ipv6res));
+ if(!ipv6ptr)
+ exit(1); /* fail */
+ if(ipv6ptr != ipv6res)
+ exit(1); /* fail */
+ if(!ipv6ptr[0])
+ exit(1); /* fail */
+ if(memcmp(ipv6res, "fe80::214:4fff:fe0b:76c8", 24) != 0)
+ exit(1); /* fail */
+ /* - */
+ exit(0);
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_works_inet_ntop="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_works_inet_ntop="no"
+ ])
+ fi
+ #
+ if test "$tst_compi_inet_ntop" = "yes" &&
+ test "$tst_works_inet_ntop" != "no"; then
+ AC_MSG_CHECKING([if inet_ntop usage allowed])
+ if test "x$curl_disallow_inet_ntop" != "xyes"; then
+ AC_MSG_RESULT([yes])
+ tst_allow_inet_ntop="yes"
+ else
+ AC_MSG_RESULT([no])
+ tst_allow_inet_ntop="no"
+ fi
+ fi
+ #
+ AC_MSG_CHECKING([if inet_ntop might be used])
+ if test "$tst_links_inet_ntop" = "yes" &&
+ test "$tst_proto_inet_ntop" = "yes" &&
+ test "$tst_compi_inet_ntop" = "yes" &&
+ test "$tst_allow_inet_ntop" = "yes" &&
+ test "$tst_works_inet_ntop" != "no"; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE_UNQUOTED(HAVE_INET_NTOP, 1,
+ [Define to 1 if you have a IPv6 capable working inet_ntop function.])
+ ac_cv_func_inet_ntop="yes"
+ else
+ AC_MSG_RESULT([no])
+ ac_cv_func_inet_ntop="no"
+ fi
+])
+
+
+dnl CURL_CHECK_FUNC_INET_PTON
+dnl -------------------------------------------------
+dnl Verify if inet_pton is available, prototyped, can
+dnl be compiled and seems to work. If all of these are
+dnl true, and usage has not been previously disallowed
+dnl with shell variable curl_disallow_inet_pton, then
+dnl HAVE_INET_PTON will be defined.
+
+AC_DEFUN([CURL_CHECK_FUNC_INET_PTON], [
+ AC_REQUIRE([CURL_INCLUDES_STDLIB])dnl
+ AC_REQUIRE([CURL_INCLUDES_ARPA_INET])dnl
+ AC_REQUIRE([CURL_INCLUDES_STRING])dnl
+ #
+ tst_links_inet_pton="unknown"
+ tst_proto_inet_pton="unknown"
+ tst_compi_inet_pton="unknown"
+ tst_works_inet_pton="unknown"
+ tst_allow_inet_pton="unknown"
+ #
+ AC_MSG_CHECKING([if inet_pton can be linked])
+ AC_LINK_IFELSE([
+ AC_LANG_FUNC_LINK_TRY([inet_pton])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_links_inet_pton="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_links_inet_pton="no"
+ ])
+ #
+ if test "$tst_links_inet_pton" = "yes"; then
+ AC_MSG_CHECKING([if inet_pton is prototyped])
+ AC_EGREP_CPP([inet_pton],[
+ $curl_includes_arpa_inet
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_proto_inet_pton="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_proto_inet_pton="no"
+ ])
+ fi
+ #
+ if test "$tst_proto_inet_pton" = "yes"; then
+ AC_MSG_CHECKING([if inet_pton is compilable])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_arpa_inet
+ ]],[[
+ if(0 != inet_pton(0, 0, 0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_inet_pton="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_inet_pton="no"
+ ])
+ fi
+ #
+ dnl only do runtime verification when not cross-compiling
+ if test "x$cross_compiling" != "xyes" &&
+ test "$tst_compi_inet_pton" = "yes"; then
+ AC_MSG_CHECKING([if inet_pton seems to work])
+ AC_RUN_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_stdlib
+ $curl_includes_arpa_inet
+ $curl_includes_string
+ ]],[[
+ unsigned char ipv6a[16+1];
+ unsigned char ipv4a[4+1];
+ const char *ipv6src = "fe80::214:4fff:fe0b:76c8";
+ const char *ipv4src = "192.168.100.1";
+ /* - */
+ memset(ipv4a, 1, sizeof(ipv4a));
+ if(1 != inet_pton(AF_INET, ipv4src, ipv4a))
+ exit(1); /* fail */
+ /* - */
+ if( (ipv4a[0] != 0xc0) ||
+ (ipv4a[1] != 0xa8) ||
+ (ipv4a[2] != 0x64) ||
+ (ipv4a[3] != 0x01) ||
+ (ipv4a[4] != 0x01) )
+ exit(1); /* fail */
+ /* - */
+ memset(ipv6a, 1, sizeof(ipv6a));
+ if(1 != inet_pton(AF_INET6, ipv6src, ipv6a))
+ exit(1); /* fail */
+ /* - */
+ if( (ipv6a[0] != 0xfe) ||
+ (ipv6a[1] != 0x80) ||
+ (ipv6a[8] != 0x02) ||
+ (ipv6a[9] != 0x14) ||
+ (ipv6a[10] != 0x4f) ||
+ (ipv6a[11] != 0xff) ||
+ (ipv6a[12] != 0xfe) ||
+ (ipv6a[13] != 0x0b) ||
+ (ipv6a[14] != 0x76) ||
+ (ipv6a[15] != 0xc8) ||
+ (ipv6a[16] != 0x01) )
+ exit(1); /* fail */
+ /* - */
+ if( (ipv6a[2] != 0x0) ||
+ (ipv6a[3] != 0x0) ||
+ (ipv6a[4] != 0x0) ||
+ (ipv6a[5] != 0x0) ||
+ (ipv6a[6] != 0x0) ||
+ (ipv6a[7] != 0x0) )
+ exit(1); /* fail */
+ /* - */
+ exit(0);
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_works_inet_pton="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_works_inet_pton="no"
+ ])
+ fi
+ #
+ if test "$tst_compi_inet_pton" = "yes" &&
+ test "$tst_works_inet_pton" != "no"; then
+ AC_MSG_CHECKING([if inet_pton usage allowed])
+ if test "x$curl_disallow_inet_pton" != "xyes"; then
+ AC_MSG_RESULT([yes])
+ tst_allow_inet_pton="yes"
+ else
+ AC_MSG_RESULT([no])
+ tst_allow_inet_pton="no"
+ fi
+ fi
+ #
+ AC_MSG_CHECKING([if inet_pton might be used])
+ if test "$tst_links_inet_pton" = "yes" &&
+ test "$tst_proto_inet_pton" = "yes" &&
+ test "$tst_compi_inet_pton" = "yes" &&
+ test "$tst_allow_inet_pton" = "yes" &&
+ test "$tst_works_inet_pton" != "no"; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE_UNQUOTED(HAVE_INET_PTON, 1,
+ [Define to 1 if you have a IPv6 capable working inet_pton function.])
+ ac_cv_func_inet_pton="yes"
+ else
+ AC_MSG_RESULT([no])
+ ac_cv_func_inet_pton="no"
+ fi
+])
+
+
+dnl CURL_CHECK_FUNC_IOCTL
+dnl -------------------------------------------------
+dnl Verify if ioctl is available, prototyped, and
+dnl can be compiled. If all of these are true, and
+dnl usage has not been previously disallowed with
+dnl shell variable curl_disallow_ioctl, then
+dnl HAVE_IOCTL will be defined.
+
+AC_DEFUN([CURL_CHECK_FUNC_IOCTL], [
+ AC_REQUIRE([CURL_INCLUDES_STROPTS])dnl
+ #
+ tst_links_ioctl="unknown"
+ tst_proto_ioctl="unknown"
+ tst_compi_ioctl="unknown"
+ tst_allow_ioctl="unknown"
+ #
+ AC_MSG_CHECKING([if ioctl can be linked])
+ AC_LINK_IFELSE([
+ AC_LANG_FUNC_LINK_TRY([ioctl])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_links_ioctl="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_links_ioctl="no"
+ ])
+ #
+ if test "$tst_links_ioctl" = "yes"; then
+ AC_MSG_CHECKING([if ioctl is prototyped])
+ AC_EGREP_CPP([ioctl],[
+ $curl_includes_stropts
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_proto_ioctl="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_proto_ioctl="no"
+ ])
+ fi
+ #
+ if test "$tst_proto_ioctl" = "yes"; then
+ AC_MSG_CHECKING([if ioctl is compilable])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_stropts
+ ]],[[
+ if(0 != ioctl(0, 0, 0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_ioctl="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_ioctl="no"
+ ])
+ fi
+ #
+ if test "$tst_compi_ioctl" = "yes"; then
+ AC_MSG_CHECKING([if ioctl usage allowed])
+ if test "x$curl_disallow_ioctl" != "xyes"; then
+ AC_MSG_RESULT([yes])
+ tst_allow_ioctl="yes"
+ else
+ AC_MSG_RESULT([no])
+ tst_allow_ioctl="no"
+ fi
+ fi
+ #
+ AC_MSG_CHECKING([if ioctl might be used])
+ if test "$tst_links_ioctl" = "yes" &&
+ test "$tst_proto_ioctl" = "yes" &&
+ test "$tst_compi_ioctl" = "yes" &&
+ test "$tst_allow_ioctl" = "yes"; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE_UNQUOTED(HAVE_IOCTL, 1,
+ [Define to 1 if you have the ioctl function.])
+ ac_cv_func_ioctl="yes"
+ CURL_CHECK_FUNC_IOCTL_FIONBIO
+ CURL_CHECK_FUNC_IOCTL_SIOCGIFADDR
+ else
+ AC_MSG_RESULT([no])
+ ac_cv_func_ioctl="no"
+ fi
+])
+
+
+dnl CURL_CHECK_FUNC_IOCTL_FIONBIO
+dnl -------------------------------------------------
+dnl Verify if ioctl with the FIONBIO command is
+dnl available, can be compiled, and seems to work. If
+dnl all of these are true, then HAVE_IOCTL_FIONBIO
+dnl will be defined.
+
+AC_DEFUN([CURL_CHECK_FUNC_IOCTL_FIONBIO], [
+ #
+ tst_compi_ioctl_fionbio="unknown"
+ tst_allow_ioctl_fionbio="unknown"
+ #
+ if test "$ac_cv_func_ioctl" = "yes"; then
+ AC_MSG_CHECKING([if ioctl FIONBIO is compilable])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_stropts
+ ]],[[
+ int flags = 0;
+ if(0 != ioctl(0, FIONBIO, &flags))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_ioctl_fionbio="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_ioctl_fionbio="no"
+ ])
+ fi
+ #
+ if test "$tst_compi_ioctl_fionbio" = "yes"; then
+ AC_MSG_CHECKING([if ioctl FIONBIO usage allowed])
+ if test "x$curl_disallow_ioctl_fionbio" != "xyes"; then
+ AC_MSG_RESULT([yes])
+ tst_allow_ioctl_fionbio="yes"
+ else
+ AC_MSG_RESULT([no])
+ tst_allow_ioctl_fionbio="no"
+ fi
+ fi
+ #
+ AC_MSG_CHECKING([if ioctl FIONBIO might be used])
+ if test "$tst_compi_ioctl_fionbio" = "yes" &&
+ test "$tst_allow_ioctl_fionbio" = "yes"; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE_UNQUOTED(HAVE_IOCTL_FIONBIO, 1,
+ [Define to 1 if you have a working ioctl FIONBIO function.])
+ ac_cv_func_ioctl_fionbio="yes"
+ else
+ AC_MSG_RESULT([no])
+ ac_cv_func_ioctl_fionbio="no"
+ fi
+])
+
+
+dnl CURL_CHECK_FUNC_IOCTL_SIOCGIFADDR
+dnl -------------------------------------------------
+dnl Verify if ioctl with the SIOCGIFADDR command is available,
+dnl struct ifreq is defined, they can be compiled, and seem to
+dnl work. If all of these are true, then HAVE_IOCTL_SIOCGIFADDR
+dnl will be defined.
+
+AC_DEFUN([CURL_CHECK_FUNC_IOCTL_SIOCGIFADDR], [
+ #
+ tst_compi_ioctl_siocgifaddr="unknown"
+ tst_allow_ioctl_siocgifaddr="unknown"
+ #
+ if test "$ac_cv_func_ioctl" = "yes"; then
+ AC_MSG_CHECKING([if ioctl SIOCGIFADDR is compilable])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_stropts
+ #include <net/if.h>
+ ]],[[
+ struct ifreq ifr;
+ if(0 != ioctl(0, SIOCGIFADDR, &ifr))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_ioctl_siocgifaddr="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_ioctl_siocgifaddr="no"
+ ])
+ fi
+ #
+ if test "$tst_compi_ioctl_siocgifaddr" = "yes"; then
+ AC_MSG_CHECKING([if ioctl SIOCGIFADDR usage allowed])
+ if test "x$curl_disallow_ioctl_siocgifaddr" != "xyes"; then
+ AC_MSG_RESULT([yes])
+ tst_allow_ioctl_siocgifaddr="yes"
+ else
+ AC_MSG_RESULT([no])
+ tst_allow_ioctl_siocgifaddr="no"
+ fi
+ fi
+ #
+ AC_MSG_CHECKING([if ioctl SIOCGIFADDR might be used])
+ if test "$tst_compi_ioctl_siocgifaddr" = "yes" &&
+ test "$tst_allow_ioctl_siocgifaddr" = "yes"; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE_UNQUOTED(HAVE_IOCTL_SIOCGIFADDR, 1,
+ [Define to 1 if you have a working ioctl SIOCGIFADDR function.])
+ ac_cv_func_ioctl_siocgifaddr="yes"
+ else
+ AC_MSG_RESULT([no])
+ ac_cv_func_ioctl_siocgifaddr="no"
+ fi
+])
+
+
+dnl CURL_CHECK_FUNC_IOCTLSOCKET
+dnl -------------------------------------------------
+dnl Verify if ioctlsocket is available, prototyped, and
+dnl can be compiled. If all of these are true, and
+dnl usage has not been previously disallowed with
+dnl shell variable curl_disallow_ioctlsocket, then
+dnl HAVE_IOCTLSOCKET will be defined.
+
+AC_DEFUN([CURL_CHECK_FUNC_IOCTLSOCKET], [
+ AC_REQUIRE([CURL_INCLUDES_WINSOCK2])dnl
+ #
+ tst_links_ioctlsocket="unknown"
+ tst_proto_ioctlsocket="unknown"
+ tst_compi_ioctlsocket="unknown"
+ tst_allow_ioctlsocket="unknown"
+ #
+ AC_MSG_CHECKING([if ioctlsocket can be linked])
+ AC_LINK_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_winsock2
+ ]],[[
+ if(0 != ioctlsocket(0, 0, 0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_links_ioctlsocket="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_links_ioctlsocket="no"
+ ])
+ #
+ if test "$tst_links_ioctlsocket" = "yes"; then
+ AC_MSG_CHECKING([if ioctlsocket is prototyped])
+ AC_EGREP_CPP([ioctlsocket],[
+ $curl_includes_winsock2
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_proto_ioctlsocket="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_proto_ioctlsocket="no"
+ ])
+ fi
+ #
+ if test "$tst_proto_ioctlsocket" = "yes"; then
+ AC_MSG_CHECKING([if ioctlsocket is compilable])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_winsock2
+ ]],[[
+ if(0 != ioctlsocket(0, 0, 0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_ioctlsocket="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_ioctlsocket="no"
+ ])
+ fi
+ #
+ if test "$tst_compi_ioctlsocket" = "yes"; then
+ AC_MSG_CHECKING([if ioctlsocket usage allowed])
+ if test "x$curl_disallow_ioctlsocket" != "xyes"; then
+ AC_MSG_RESULT([yes])
+ tst_allow_ioctlsocket="yes"
+ else
+ AC_MSG_RESULT([no])
+ tst_allow_ioctlsocket="no"
+ fi
+ fi
+ #
+ AC_MSG_CHECKING([if ioctlsocket might be used])
+ if test "$tst_links_ioctlsocket" = "yes" &&
+ test "$tst_proto_ioctlsocket" = "yes" &&
+ test "$tst_compi_ioctlsocket" = "yes" &&
+ test "$tst_allow_ioctlsocket" = "yes"; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE_UNQUOTED(HAVE_IOCTLSOCKET, 1,
+ [Define to 1 if you have the ioctlsocket function.])
+ ac_cv_func_ioctlsocket="yes"
+ CURL_CHECK_FUNC_IOCTLSOCKET_FIONBIO
+ else
+ AC_MSG_RESULT([no])
+ ac_cv_func_ioctlsocket="no"
+ fi
+])
+
+
+dnl CURL_CHECK_FUNC_IOCTLSOCKET_FIONBIO
+dnl -------------------------------------------------
+dnl Verify if ioctlsocket with the FIONBIO command is
+dnl available, can be compiled, and seems to work. If
+dnl all of these are true, then HAVE_IOCTLSOCKET_FIONBIO
+dnl will be defined.
+
+AC_DEFUN([CURL_CHECK_FUNC_IOCTLSOCKET_FIONBIO], [
+ #
+ tst_compi_ioctlsocket_fionbio="unknown"
+ tst_allow_ioctlsocket_fionbio="unknown"
+ #
+ if test "$ac_cv_func_ioctlsocket" = "yes"; then
+ AC_MSG_CHECKING([if ioctlsocket FIONBIO is compilable])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_winsock2
+ ]],[[
+ int flags = 0;
+ if(0 != ioctlsocket(0, FIONBIO, &flags))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_ioctlsocket_fionbio="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_ioctlsocket_fionbio="no"
+ ])
+ fi
+ #
+ if test "$tst_compi_ioctlsocket_fionbio" = "yes"; then
+ AC_MSG_CHECKING([if ioctlsocket FIONBIO usage allowed])
+ if test "x$curl_disallow_ioctlsocket_fionbio" != "xyes"; then
+ AC_MSG_RESULT([yes])
+ tst_allow_ioctlsocket_fionbio="yes"
+ else
+ AC_MSG_RESULT([no])
+ tst_allow_ioctlsocket_fionbio="no"
+ fi
+ fi
+ #
+ AC_MSG_CHECKING([if ioctlsocket FIONBIO might be used])
+ if test "$tst_compi_ioctlsocket_fionbio" = "yes" &&
+ test "$tst_allow_ioctlsocket_fionbio" = "yes"; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE_UNQUOTED(HAVE_IOCTLSOCKET_FIONBIO, 1,
+ [Define to 1 if you have a working ioctlsocket FIONBIO function.])
+ ac_cv_func_ioctlsocket_fionbio="yes"
+ else
+ AC_MSG_RESULT([no])
+ ac_cv_func_ioctlsocket_fionbio="no"
+ fi
+])
+
+
+dnl CURL_CHECK_FUNC_IOCTLSOCKET_CAMEL
+dnl -------------------------------------------------
+dnl Verify if IoctlSocket is available, prototyped, and
+dnl can be compiled. If all of these are true, and
+dnl usage has not been previously disallowed with
+dnl shell variable curl_disallow_ioctlsocket_camel,
+dnl then HAVE_IOCTLSOCKET_CAMEL will be defined.
+
+AC_DEFUN([CURL_CHECK_FUNC_IOCTLSOCKET_CAMEL], [
+ AC_REQUIRE([CURL_INCLUDES_STROPTS])dnl
+ #
+ tst_links_ioctlsocket_camel="unknown"
+ tst_proto_ioctlsocket_camel="unknown"
+ tst_compi_ioctlsocket_camel="unknown"
+ tst_allow_ioctlsocket_camel="unknown"
+ #
+ AC_MSG_CHECKING([if IoctlSocket can be linked])
+ AC_LINK_IFELSE([
+ AC_LANG_FUNC_LINK_TRY([IoctlSocket])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_links_ioctlsocket_camel="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_links_ioctlsocket_camel="no"
+ ])
+ #
+ if test "$tst_links_ioctlsocket_camel" = "yes"; then
+ AC_MSG_CHECKING([if IoctlSocket is prototyped])
+ AC_EGREP_CPP([IoctlSocket],[
+ $curl_includes_stropts
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_proto_ioctlsocket_camel="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_proto_ioctlsocket_camel="no"
+ ])
+ fi
+ #
+ if test "$tst_proto_ioctlsocket_camel" = "yes"; then
+ AC_MSG_CHECKING([if IoctlSocket is compilable])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_stropts
+ ]],[[
+ if(0 != IoctlSocket(0, 0, 0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_ioctlsocket_camel="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_ioctlsocket_camel="no"
+ ])
+ fi
+ #
+ if test "$tst_compi_ioctlsocket_camel" = "yes"; then
+ AC_MSG_CHECKING([if IoctlSocket usage allowed])
+ if test "x$curl_disallow_ioctlsocket_camel" != "xyes"; then
+ AC_MSG_RESULT([yes])
+ tst_allow_ioctlsocket_camel="yes"
+ else
+ AC_MSG_RESULT([no])
+ tst_allow_ioctlsocket_camel="no"
+ fi
+ fi
+ #
+ AC_MSG_CHECKING([if IoctlSocket might be used])
+ if test "$tst_links_ioctlsocket_camel" = "yes" &&
+ test "$tst_proto_ioctlsocket_camel" = "yes" &&
+ test "$tst_compi_ioctlsocket_camel" = "yes" &&
+ test "$tst_allow_ioctlsocket_camel" = "yes"; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE_UNQUOTED(HAVE_IOCTLSOCKET_CAMEL, 1,
+ [Define to 1 if you have the IoctlSocket camel case function.])
+ ac_cv_func_ioctlsocket_camel="yes"
+ CURL_CHECK_FUNC_IOCTLSOCKET_CAMEL_FIONBIO
+ else
+ AC_MSG_RESULT([no])
+ ac_cv_func_ioctlsocket_camel="no"
+ fi
+])
+
+
+dnl CURL_CHECK_FUNC_IOCTLSOCKET_CAMEL_FIONBIO
+dnl -------------------------------------------------
+dnl Verify if IoctlSocket with FIONBIO command is available,
+dnl can be compiled, and seems to work. If all of these are
+dnl true, then HAVE_IOCTLSOCKET_CAMEL_FIONBIO will be defined.
+
+AC_DEFUN([CURL_CHECK_FUNC_IOCTLSOCKET_CAMEL_FIONBIO], [
+ #
+ tst_compi_ioctlsocket_camel_fionbio="unknown"
+ tst_allow_ioctlsocket_camel_fionbio="unknown"
+ #
+ if test "$ac_cv_func_ioctlsocket_camel" = "yes"; then
+ AC_MSG_CHECKING([if IoctlSocket FIONBIO is compilable])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_stropts
+ ]],[[
+ long flags = 0;
+ if(0 != ioctlsocket(0, FIONBIO, &flags))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_ioctlsocket_camel_fionbio="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_ioctlsocket_camel_fionbio="no"
+ ])
+ fi
+ #
+ if test "$tst_compi_ioctlsocket_camel_fionbio" = "yes"; then
+ AC_MSG_CHECKING([if IoctlSocket FIONBIO usage allowed])
+ if test "x$curl_disallow_ioctlsocket_camel_fionbio" != "xyes"; then
+ AC_MSG_RESULT([yes])
+ tst_allow_ioctlsocket_camel_fionbio="yes"
+ else
+ AC_MSG_RESULT([no])
+ tst_allow_ioctlsocket_camel_fionbio="no"
+ fi
+ fi
+ #
+ AC_MSG_CHECKING([if IoctlSocket FIONBIO might be used])
+ if test "$tst_compi_ioctlsocket_camel_fionbio" = "yes" &&
+ test "$tst_allow_ioctlsocket_camel_fionbio" = "yes"; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE_UNQUOTED(HAVE_IOCTLSOCKET_CAMEL_FIONBIO, 1,
+ [Define to 1 if you have a working IoctlSocket camel case FIONBIO function.])
+ ac_cv_func_ioctlsocket_camel_fionbio="yes"
+ else
+ AC_MSG_RESULT([no])
+ ac_cv_func_ioctlsocket_camel_fionbio="no"
+ fi
+])
+
+
+dnl CURL_CHECK_FUNC_LOCALTIME_R
+dnl -------------------------------------------------
+dnl Verify if localtime_r is available, prototyped, can
+dnl be compiled and seems to work. If all of these are
+dnl true, and usage has not been previously disallowed
+dnl with shell variable curl_disallow_localtime_r, then
+dnl HAVE_LOCALTIME_R will be defined.
+
+AC_DEFUN([CURL_CHECK_FUNC_LOCALTIME_R], [
+ AC_REQUIRE([CURL_INCLUDES_STDLIB])dnl
+ AC_REQUIRE([CURL_INCLUDES_TIME])dnl
+ #
+ tst_links_localtime_r="unknown"
+ tst_proto_localtime_r="unknown"
+ tst_compi_localtime_r="unknown"
+ tst_works_localtime_r="unknown"
+ tst_allow_localtime_r="unknown"
+ #
+ AC_MSG_CHECKING([if localtime_r can be linked])
+ AC_LINK_IFELSE([
+ AC_LANG_FUNC_LINK_TRY([localtime_r])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_links_localtime_r="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_links_localtime_r="no"
+ ])
+ #
+ if test "$tst_links_localtime_r" = "yes"; then
+ AC_MSG_CHECKING([if localtime_r is prototyped])
+ AC_EGREP_CPP([localtime_r],[
+ $curl_includes_time
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_proto_localtime_r="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_proto_localtime_r="no"
+ ])
+ fi
+ #
+ if test "$tst_proto_localtime_r" = "yes"; then
+ AC_MSG_CHECKING([if localtime_r is compilable])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_time
+ ]],[[
+ if(0 != localtime_r(0, 0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_localtime_r="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_localtime_r="no"
+ ])
+ fi
+ #
+ dnl only do runtime verification when not cross-compiling
+ if test "x$cross_compiling" != "xyes" &&
+ test "$tst_compi_localtime_r" = "yes"; then
+ AC_MSG_CHECKING([if localtime_r seems to work])
+ AC_RUN_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_stdlib
+ $curl_includes_time
+ ]],[[
+ time_t clock = 1170352587;
+ struct tm *tmp = 0;
+ struct tm result;
+ tmp = localtime_r(&clock, &result);
+ if(tmp)
+ exit(0);
+ else
+ exit(1);
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_works_localtime_r="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_works_localtime_r="no"
+ ])
+ fi
+ #
+ if test "$tst_compi_localtime_r" = "yes" &&
+ test "$tst_works_localtime_r" != "no"; then
+ AC_MSG_CHECKING([if localtime_r usage allowed])
+ if test "x$curl_disallow_localtime_r" != "xyes"; then
+ AC_MSG_RESULT([yes])
+ tst_allow_localtime_r="yes"
+ else
+ AC_MSG_RESULT([no])
+ tst_allow_localtime_r="no"
+ fi
+ fi
+ #
+ AC_MSG_CHECKING([if localtime_r might be used])
+ if test "$tst_links_localtime_r" = "yes" &&
+ test "$tst_proto_localtime_r" = "yes" &&
+ test "$tst_compi_localtime_r" = "yes" &&
+ test "$tst_allow_localtime_r" = "yes" &&
+ test "$tst_works_localtime_r" != "no"; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE_UNQUOTED(HAVE_LOCALTIME_R, 1,
+ [Define to 1 if you have a working localtime_r function.])
+ ac_cv_func_localtime_r="yes"
+ else
+ AC_MSG_RESULT([no])
+ ac_cv_func_localtime_r="no"
+ fi
+])
+
+
+dnl CURL_CHECK_FUNC_MEMRCHR
+dnl -------------------------------------------------
+dnl Verify if memrchr is available, prototyped, and
+dnl can be compiled. If all of these are true, and
+dnl usage has not been previously disallowed with
+dnl shell variable curl_disallow_memrchr, then
+dnl HAVE_MEMRCHR will be defined.
+
+AC_DEFUN([CURL_CHECK_FUNC_MEMRCHR], [
+ AC_REQUIRE([CURL_INCLUDES_STRING])dnl
+ #
+ tst_links_memrchr="unknown"
+ tst_macro_memrchr="unknown"
+ tst_proto_memrchr="unknown"
+ tst_compi_memrchr="unknown"
+ tst_allow_memrchr="unknown"
+ #
+ AC_MSG_CHECKING([if memrchr can be linked])
+ AC_LINK_IFELSE([
+ AC_LANG_FUNC_LINK_TRY([memrchr])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_links_memrchr="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_links_memrchr="no"
+ ])
+ #
+ if test "$tst_links_memrchr" = "no"; then
+ AC_MSG_CHECKING([if memrchr seems a macro])
+ AC_LINK_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_string
+ ]],[[
+ if(0 != memrchr(0, 0, 0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_macro_memrchr="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_macro_memrchr="no"
+ ])
+ fi
+ #
+ if test "$tst_links_memrchr" = "yes"; then
+ AC_MSG_CHECKING([if memrchr is prototyped])
+ AC_EGREP_CPP([memrchr],[
+ $curl_includes_string
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_proto_memrchr="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_proto_memrchr="no"
+ ])
+ fi
+ #
+ if test "$tst_proto_memrchr" = "yes" ||
+ test "$tst_macro_memrchr" = "yes"; then
+ AC_MSG_CHECKING([if memrchr is compilable])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_string
+ ]],[[
+ if(0 != memrchr(0, 0, 0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_memrchr="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_memrchr="no"
+ ])
+ fi
+ #
+ if test "$tst_compi_memrchr" = "yes"; then
+ AC_MSG_CHECKING([if memrchr usage allowed])
+ if test "x$curl_disallow_memrchr" != "xyes"; then
+ AC_MSG_RESULT([yes])
+ tst_allow_memrchr="yes"
+ else
+ AC_MSG_RESULT([no])
+ tst_allow_memrchr="no"
+ fi
+ fi
+ #
+ AC_MSG_CHECKING([if memrchr might be used])
+ if (test "$tst_proto_memrchr" = "yes" ||
+ test "$tst_macro_memrchr" = "yes") &&
+ test "$tst_compi_memrchr" = "yes" &&
+ test "$tst_allow_memrchr" = "yes"; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE_UNQUOTED(HAVE_MEMRCHR, 1,
+ [Define to 1 if you have the memrchr function or macro.])
+ ac_cv_func_memrchr="yes"
+ else
+ AC_MSG_RESULT([no])
+ ac_cv_func_memrchr="no"
+ fi
+])
+
+
+dnl CURL_CHECK_FUNC_POLL
+dnl -------------------------------------------------
+dnl Verify if poll is available, prototyped, can
+dnl be compiled and seems to work. If all of these are
+dnl true, and usage has not been previously disallowed
+dnl with shell variable curl_disallow_poll, then
+dnl HAVE_POLL will be defined.
+
+AC_DEFUN([CURL_CHECK_FUNC_POLL], [
+ AC_REQUIRE([CURL_INCLUDES_STDLIB])dnl
+ AC_REQUIRE([CURL_INCLUDES_POLL])dnl
+ #
+ tst_links_poll="unknown"
+ tst_proto_poll="unknown"
+ tst_compi_poll="unknown"
+ tst_works_poll="unknown"
+ tst_allow_poll="unknown"
+ #
+ case $host_os in
+ darwin*|interix*)
+ dnl poll() does not work on these platforms
+ dnl Interix: "does provide poll(), but the implementing developer must
+ dnl have been in a bad mood, because poll() only works on the /proc
+ dnl filesystem here"
+ curl_disallow_poll="yes"
+ ;;
+ esac
+ #
+ AC_MSG_CHECKING([if poll can be linked])
+ AC_LINK_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_poll
+ ]],[[
+ if(0 != poll(0, 0, 0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_links_poll="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_links_poll="no"
+ ])
+ #
+ if test "$tst_links_poll" = "yes"; then
+ AC_MSG_CHECKING([if poll is prototyped])
+ AC_EGREP_CPP([poll],[
+ $curl_includes_poll
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_proto_poll="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_proto_poll="no"
+ ])
+ fi
+ #
+ if test "$tst_proto_poll" = "yes"; then
+ AC_MSG_CHECKING([if poll is compilable])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_poll
+ ]],[[
+ if(0 != poll(0, 0, 0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_poll="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_poll="no"
+ ])
+ fi
+ #
+ dnl only do runtime verification when not cross-compiling
+ if test "x$cross_compiling" != "xyes" &&
+ test "$tst_compi_poll" = "yes"; then
+ AC_MSG_CHECKING([if poll seems to work])
+ AC_RUN_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_stdlib
+ $curl_includes_poll
+ ]],[[
+ if(0 != poll(0, 0, 10))
+ exit(1); /* fail */
+ else
+ exit(0);
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_works_poll="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_works_poll="no"
+ ])
+ fi
+ #
+ if test "$tst_compi_poll" = "yes" &&
+ test "$tst_works_poll" != "no"; then
+ AC_MSG_CHECKING([if poll usage allowed])
+ if test "x$curl_disallow_poll" != "xyes"; then
+ AC_MSG_RESULT([yes])
+ tst_allow_poll="yes"
+ else
+ AC_MSG_RESULT([no])
+ tst_allow_poll="no"
+ fi
+ fi
+ #
+ AC_MSG_CHECKING([if poll might be used])
+ if test "$tst_links_poll" = "yes" &&
+ test "$tst_proto_poll" = "yes" &&
+ test "$tst_compi_poll" = "yes" &&
+ test "$tst_allow_poll" = "yes" &&
+ test "$tst_works_poll" != "no"; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE_UNQUOTED(HAVE_POLL, 1,
+ [Define to 1 if you have a working poll function.])
+ AC_DEFINE_UNQUOTED(HAVE_POLL_FINE, 1,
+ [If you have a fine poll])
+ ac_cv_func_poll="yes"
+ else
+ AC_MSG_RESULT([no])
+ ac_cv_func_poll="no"
+ fi
+])
+
+
+dnl CURL_CHECK_FUNC_SETSOCKOPT
+dnl -------------------------------------------------
+dnl Verify if setsockopt is available, prototyped, and
+dnl can be compiled. If all of these are true, and
+dnl usage has not been previously disallowed with
+dnl shell variable curl_disallow_setsockopt, then
+dnl HAVE_SETSOCKOPT will be defined.
+
+AC_DEFUN([CURL_CHECK_FUNC_SETSOCKOPT], [
+ AC_REQUIRE([CURL_INCLUDES_WINSOCK2])dnl
+ AC_REQUIRE([CURL_INCLUDES_SYS_SOCKET])dnl
+ #
+ tst_links_setsockopt="unknown"
+ tst_proto_setsockopt="unknown"
+ tst_compi_setsockopt="unknown"
+ tst_allow_setsockopt="unknown"
+ #
+ AC_MSG_CHECKING([if setsockopt can be linked])
+ AC_LINK_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_winsock2
+ $curl_includes_sys_socket
+ ]],[[
+ if(0 != setsockopt(0, 0, 0, 0, 0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_links_setsockopt="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_links_setsockopt="no"
+ ])
+ #
+ if test "$tst_links_setsockopt" = "yes"; then
+ AC_MSG_CHECKING([if setsockopt is prototyped])
+ AC_EGREP_CPP([setsockopt],[
+ $curl_includes_winsock2
+ $curl_includes_sys_socket
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_proto_setsockopt="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_proto_setsockopt="no"
+ ])
+ fi
+ #
+ if test "$tst_proto_setsockopt" = "yes"; then
+ AC_MSG_CHECKING([if setsockopt is compilable])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_winsock2
+ $curl_includes_sys_socket
+ ]],[[
+ if(0 != setsockopt(0, 0, 0, 0, 0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_setsockopt="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_setsockopt="no"
+ ])
+ fi
+ #
+ if test "$tst_compi_setsockopt" = "yes"; then
+ AC_MSG_CHECKING([if setsockopt usage allowed])
+ if test "x$curl_disallow_setsockopt" != "xyes"; then
+ AC_MSG_RESULT([yes])
+ tst_allow_setsockopt="yes"
+ else
+ AC_MSG_RESULT([no])
+ tst_allow_setsockopt="no"
+ fi
+ fi
+ #
+ AC_MSG_CHECKING([if setsockopt might be used])
+ if test "$tst_links_setsockopt" = "yes" &&
+ test "$tst_proto_setsockopt" = "yes" &&
+ test "$tst_compi_setsockopt" = "yes" &&
+ test "$tst_allow_setsockopt" = "yes"; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE_UNQUOTED(HAVE_SETSOCKOPT, 1,
+ [Define to 1 if you have the setsockopt function.])
+ ac_cv_func_setsockopt="yes"
+ CURL_CHECK_FUNC_SETSOCKOPT_SO_NONBLOCK
+ else
+ AC_MSG_RESULT([no])
+ ac_cv_func_setsockopt="no"
+ fi
+])
+
+
+dnl CURL_CHECK_FUNC_SETSOCKOPT_SO_NONBLOCK
+dnl -------------------------------------------------
+dnl Verify if setsockopt with the SO_NONBLOCK command is
+dnl available, can be compiled, and seems to work. If
+dnl all of these are true, then HAVE_SETSOCKOPT_SO_NONBLOCK
+dnl will be defined.
+
+AC_DEFUN([CURL_CHECK_FUNC_SETSOCKOPT_SO_NONBLOCK], [
+ #
+ tst_compi_setsockopt_so_nonblock="unknown"
+ tst_allow_setsockopt_so_nonblock="unknown"
+ #
+ if test "$ac_cv_func_setsockopt" = "yes"; then
+ AC_MSG_CHECKING([if setsockopt SO_NONBLOCK is compilable])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_winsock2
+ $curl_includes_sys_socket
+ ]],[[
+ if(0 != setsockopt(0, SOL_SOCKET, SO_NONBLOCK, 0, 0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_setsockopt_so_nonblock="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_setsockopt_so_nonblock="no"
+ ])
+ fi
+ #
+ if test "$tst_compi_setsockopt_so_nonblock" = "yes"; then
+ AC_MSG_CHECKING([if setsockopt SO_NONBLOCK usage allowed])
+ if test "x$curl_disallow_setsockopt_so_nonblock" != "xyes"; then
+ AC_MSG_RESULT([yes])
+ tst_allow_setsockopt_so_nonblock="yes"
+ else
+ AC_MSG_RESULT([no])
+ tst_allow_setsockopt_so_nonblock="no"
+ fi
+ fi
+ #
+ AC_MSG_CHECKING([if setsockopt SO_NONBLOCK might be used])
+ if test "$tst_compi_setsockopt_so_nonblock" = "yes" &&
+ test "$tst_allow_setsockopt_so_nonblock" = "yes"; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE_UNQUOTED(HAVE_SETSOCKOPT_SO_NONBLOCK, 1,
+ [Define to 1 if you have a working setsockopt SO_NONBLOCK function.])
+ ac_cv_func_setsockopt_so_nonblock="yes"
+ else
+ AC_MSG_RESULT([no])
+ ac_cv_func_setsockopt_so_nonblock="no"
+ fi
+])
+
+
+dnl CURL_CHECK_FUNC_SIGACTION
+dnl -------------------------------------------------
+dnl Verify if sigaction is available, prototyped, and
+dnl can be compiled. If all of these are true, and
+dnl usage has not been previously disallowed with
+dnl shell variable curl_disallow_sigaction, then
+dnl HAVE_SIGACTION will be defined.
+
+AC_DEFUN([CURL_CHECK_FUNC_SIGACTION], [
+ AC_REQUIRE([CURL_INCLUDES_SIGNAL])dnl
+ #
+ tst_links_sigaction="unknown"
+ tst_proto_sigaction="unknown"
+ tst_compi_sigaction="unknown"
+ tst_allow_sigaction="unknown"
+ #
+ AC_MSG_CHECKING([if sigaction can be linked])
+ AC_LINK_IFELSE([
+ AC_LANG_FUNC_LINK_TRY([sigaction])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_links_sigaction="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_links_sigaction="no"
+ ])
+ #
+ if test "$tst_links_sigaction" = "yes"; then
+ AC_MSG_CHECKING([if sigaction is prototyped])
+ AC_EGREP_CPP([sigaction],[
+ $curl_includes_signal
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_proto_sigaction="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_proto_sigaction="no"
+ ])
+ fi
+ #
+ if test "$tst_proto_sigaction" = "yes"; then
+ AC_MSG_CHECKING([if sigaction is compilable])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_signal
+ ]],[[
+ if(0 != sigaction(0, 0, 0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_sigaction="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_sigaction="no"
+ ])
+ fi
+ #
+ if test "$tst_compi_sigaction" = "yes"; then
+ AC_MSG_CHECKING([if sigaction usage allowed])
+ if test "x$curl_disallow_sigaction" != "xyes"; then
+ AC_MSG_RESULT([yes])
+ tst_allow_sigaction="yes"
+ else
+ AC_MSG_RESULT([no])
+ tst_allow_sigaction="no"
+ fi
+ fi
+ #
+ AC_MSG_CHECKING([if sigaction might be used])
+ if test "$tst_links_sigaction" = "yes" &&
+ test "$tst_proto_sigaction" = "yes" &&
+ test "$tst_compi_sigaction" = "yes" &&
+ test "$tst_allow_sigaction" = "yes"; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE_UNQUOTED(HAVE_SIGACTION, 1,
+ [Define to 1 if you have the sigaction function.])
+ ac_cv_func_sigaction="yes"
+ else
+ AC_MSG_RESULT([no])
+ ac_cv_func_sigaction="no"
+ fi
+])
+
+
+dnl CURL_CHECK_FUNC_SIGINTERRUPT
+dnl -------------------------------------------------
+dnl Verify if siginterrupt is available, prototyped, and
+dnl can be compiled. If all of these are true, and
+dnl usage has not been previously disallowed with
+dnl shell variable curl_disallow_siginterrupt, then
+dnl HAVE_SIGINTERRUPT will be defined.
+
+AC_DEFUN([CURL_CHECK_FUNC_SIGINTERRUPT], [
+ AC_REQUIRE([CURL_INCLUDES_SIGNAL])dnl
+ #
+ tst_links_siginterrupt="unknown"
+ tst_proto_siginterrupt="unknown"
+ tst_compi_siginterrupt="unknown"
+ tst_allow_siginterrupt="unknown"
+ #
+ AC_MSG_CHECKING([if siginterrupt can be linked])
+ AC_LINK_IFELSE([
+ AC_LANG_FUNC_LINK_TRY([siginterrupt])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_links_siginterrupt="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_links_siginterrupt="no"
+ ])
+ #
+ if test "$tst_links_siginterrupt" = "yes"; then
+ AC_MSG_CHECKING([if siginterrupt is prototyped])
+ AC_EGREP_CPP([siginterrupt],[
+ $curl_includes_signal
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_proto_siginterrupt="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_proto_siginterrupt="no"
+ ])
+ fi
+ #
+ if test "$tst_proto_siginterrupt" = "yes"; then
+ AC_MSG_CHECKING([if siginterrupt is compilable])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_signal
+ ]],[[
+ if(0 != siginterrupt(0, 0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_siginterrupt="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_siginterrupt="no"
+ ])
+ fi
+ #
+ if test "$tst_compi_siginterrupt" = "yes"; then
+ AC_MSG_CHECKING([if siginterrupt usage allowed])
+ if test "x$curl_disallow_siginterrupt" != "xyes"; then
+ AC_MSG_RESULT([yes])
+ tst_allow_siginterrupt="yes"
+ else
+ AC_MSG_RESULT([no])
+ tst_allow_siginterrupt="no"
+ fi
+ fi
+ #
+ AC_MSG_CHECKING([if siginterrupt might be used])
+ if test "$tst_links_siginterrupt" = "yes" &&
+ test "$tst_proto_siginterrupt" = "yes" &&
+ test "$tst_compi_siginterrupt" = "yes" &&
+ test "$tst_allow_siginterrupt" = "yes"; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE_UNQUOTED(HAVE_SIGINTERRUPT, 1,
+ [Define to 1 if you have the siginterrupt function.])
+ ac_cv_func_siginterrupt="yes"
+ else
+ AC_MSG_RESULT([no])
+ ac_cv_func_siginterrupt="no"
+ fi
+])
+
+
+dnl CURL_CHECK_FUNC_SIGNAL
+dnl -------------------------------------------------
+dnl Verify if signal is available, prototyped, and
+dnl can be compiled. If all of these are true, and
+dnl usage has not been previously disallowed with
+dnl shell variable curl_disallow_signal, then
+dnl HAVE_SIGNAL will be defined.
+
+AC_DEFUN([CURL_CHECK_FUNC_SIGNAL], [
+ AC_REQUIRE([CURL_INCLUDES_SIGNAL])dnl
+ #
+ tst_links_signal="unknown"
+ tst_proto_signal="unknown"
+ tst_compi_signal="unknown"
+ tst_allow_signal="unknown"
+ #
+ AC_MSG_CHECKING([if signal can be linked])
+ AC_LINK_IFELSE([
+ AC_LANG_FUNC_LINK_TRY([signal])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_links_signal="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_links_signal="no"
+ ])
+ #
+ if test "$tst_links_signal" = "yes"; then
+ AC_MSG_CHECKING([if signal is prototyped])
+ AC_EGREP_CPP([signal],[
+ $curl_includes_signal
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_proto_signal="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_proto_signal="no"
+ ])
+ fi
+ #
+ if test "$tst_proto_signal" = "yes"; then
+ AC_MSG_CHECKING([if signal is compilable])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_signal
+ ]],[[
+ if(0 != signal(0, 0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_signal="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_signal="no"
+ ])
+ fi
+ #
+ if test "$tst_compi_signal" = "yes"; then
+ AC_MSG_CHECKING([if signal usage allowed])
+ if test "x$curl_disallow_signal" != "xyes"; then
+ AC_MSG_RESULT([yes])
+ tst_allow_signal="yes"
+ else
+ AC_MSG_RESULT([no])
+ tst_allow_signal="no"
+ fi
+ fi
+ #
+ AC_MSG_CHECKING([if signal might be used])
+ if test "$tst_links_signal" = "yes" &&
+ test "$tst_proto_signal" = "yes" &&
+ test "$tst_compi_signal" = "yes" &&
+ test "$tst_allow_signal" = "yes"; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE_UNQUOTED(HAVE_SIGNAL, 1,
+ [Define to 1 if you have the signal function.])
+ ac_cv_func_signal="yes"
+ else
+ AC_MSG_RESULT([no])
+ ac_cv_func_signal="no"
+ fi
+])
+
+
+dnl CURL_CHECK_FUNC_SIGSETJMP
+dnl -------------------------------------------------
+dnl Verify if sigsetjmp is available, prototyped, and
+dnl can be compiled. If all of these are true, and
+dnl usage has not been previously disallowed with
+dnl shell variable curl_disallow_sigsetjmp, then
+dnl HAVE_SIGSETJMP will be defined.
+
+AC_DEFUN([CURL_CHECK_FUNC_SIGSETJMP], [
+ AC_REQUIRE([CURL_INCLUDES_SETJMP])dnl
+ #
+ tst_links_sigsetjmp="unknown"
+ tst_macro_sigsetjmp="unknown"
+ tst_proto_sigsetjmp="unknown"
+ tst_compi_sigsetjmp="unknown"
+ tst_allow_sigsetjmp="unknown"
+ #
+ AC_MSG_CHECKING([if sigsetjmp can be linked])
+ AC_LINK_IFELSE([
+ AC_LANG_FUNC_LINK_TRY([sigsetjmp])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_links_sigsetjmp="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_links_sigsetjmp="no"
+ ])
+ #
+ if test "$tst_links_sigsetjmp" = "no"; then
+ AC_MSG_CHECKING([if sigsetjmp seems a macro])
+ AC_LINK_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_setjmp
+ ]],[[
+ sigjmp_buf env;
+ if(0 != sigsetjmp(env, 0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_macro_sigsetjmp="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_macro_sigsetjmp="no"
+ ])
+ fi
+ #
+ if test "$tst_links_sigsetjmp" = "yes"; then
+ AC_MSG_CHECKING([if sigsetjmp is prototyped])
+ AC_EGREP_CPP([sigsetjmp],[
+ $curl_includes_setjmp
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_proto_sigsetjmp="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_proto_sigsetjmp="no"
+ ])
+ fi
+ #
+ if test "$tst_proto_sigsetjmp" = "yes" ||
+ test "$tst_macro_sigsetjmp" = "yes"; then
+ AC_MSG_CHECKING([if sigsetjmp is compilable])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_setjmp
+ ]],[[
+ sigjmp_buf env;
+ if(0 != sigsetjmp(env, 0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_sigsetjmp="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_sigsetjmp="no"
+ ])
+ fi
+ #
+ if test "$tst_compi_sigsetjmp" = "yes"; then
+ AC_MSG_CHECKING([if sigsetjmp usage allowed])
+ if test "x$curl_disallow_sigsetjmp" != "xyes"; then
+ AC_MSG_RESULT([yes])
+ tst_allow_sigsetjmp="yes"
+ else
+ AC_MSG_RESULT([no])
+ tst_allow_sigsetjmp="no"
+ fi
+ fi
+ #
+ AC_MSG_CHECKING([if sigsetjmp might be used])
+ if (test "$tst_proto_sigsetjmp" = "yes" ||
+ test "$tst_macro_sigsetjmp" = "yes") &&
+ test "$tst_compi_sigsetjmp" = "yes" &&
+ test "$tst_allow_sigsetjmp" = "yes"; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE_UNQUOTED(HAVE_SIGSETJMP, 1,
+ [Define to 1 if you have the sigsetjmp function or macro.])
+ ac_cv_func_sigsetjmp="yes"
+ else
+ AC_MSG_RESULT([no])
+ ac_cv_func_sigsetjmp="no"
+ fi
+])
+
+
+dnl CURL_CHECK_FUNC_SOCKET
+dnl -------------------------------------------------
+dnl Verify if socket is available, prototyped, and
+dnl can be compiled. If all of these are true, and
+dnl usage has not been previously disallowed with
+dnl shell variable curl_disallow_socket, then
+dnl HAVE_SOCKET will be defined.
+
+AC_DEFUN([CURL_CHECK_FUNC_SOCKET], [
+ AC_REQUIRE([CURL_INCLUDES_WINSOCK2])dnl
+ AC_REQUIRE([CURL_INCLUDES_SYS_SOCKET])dnl
+ AC_REQUIRE([CURL_INCLUDES_SOCKET])dnl
+ #
+ tst_links_socket="unknown"
+ tst_proto_socket="unknown"
+ tst_compi_socket="unknown"
+ tst_allow_socket="unknown"
+ #
+ AC_MSG_CHECKING([if socket can be linked])
+ AC_LINK_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_winsock2
+ $curl_includes_sys_socket
+ $curl_includes_socket
+ ]],[[
+ if(0 != socket(0, 0, 0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_links_socket="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_links_socket="no"
+ ])
+ #
+ if test "$tst_links_socket" = "yes"; then
+ AC_MSG_CHECKING([if socket is prototyped])
+ AC_EGREP_CPP([socket],[
+ $curl_includes_winsock2
+ $curl_includes_sys_socket
+ $curl_includes_socket
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_proto_socket="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_proto_socket="no"
+ ])
+ fi
+ #
+ if test "$tst_proto_socket" = "yes"; then
+ AC_MSG_CHECKING([if socket is compilable])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_winsock2
+ $curl_includes_sys_socket
+ $curl_includes_socket
+ ]],[[
+ if(0 != socket(0, 0, 0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_socket="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_socket="no"
+ ])
+ fi
+ #
+ if test "$tst_compi_socket" = "yes"; then
+ AC_MSG_CHECKING([if socket usage allowed])
+ if test "x$curl_disallow_socket" != "xyes"; then
+ AC_MSG_RESULT([yes])
+ tst_allow_socket="yes"
+ else
+ AC_MSG_RESULT([no])
+ tst_allow_socket="no"
+ fi
+ fi
+ #
+ AC_MSG_CHECKING([if socket might be used])
+ if test "$tst_links_socket" = "yes" &&
+ test "$tst_proto_socket" = "yes" &&
+ test "$tst_compi_socket" = "yes" &&
+ test "$tst_allow_socket" = "yes"; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE_UNQUOTED(HAVE_SOCKET, 1,
+ [Define to 1 if you have the socket function.])
+ ac_cv_func_socket="yes"
+ else
+ AC_MSG_RESULT([no])
+ ac_cv_func_socket="no"
+ fi
+])
+
+
+dnl CURL_CHECK_FUNC_STRCASECMP
+dnl -------------------------------------------------
+dnl Verify if strcasecmp is available, prototyped, and
+dnl can be compiled. If all of these are true, and
+dnl usage has not been previously disallowed with
+dnl shell variable curl_disallow_strcasecmp, then
+dnl HAVE_STRCASECMP will be defined.
+
+AC_DEFUN([CURL_CHECK_FUNC_STRCASECMP], [
+ AC_REQUIRE([CURL_INCLUDES_STRING])dnl
+ #
+ tst_links_strcasecmp="unknown"
+ tst_proto_strcasecmp="unknown"
+ tst_compi_strcasecmp="unknown"
+ tst_allow_strcasecmp="unknown"
+ #
+ AC_MSG_CHECKING([if strcasecmp can be linked])
+ AC_LINK_IFELSE([
+ AC_LANG_FUNC_LINK_TRY([strcasecmp])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_links_strcasecmp="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_links_strcasecmp="no"
+ ])
+ #
+ if test "$tst_links_strcasecmp" = "yes"; then
+ AC_MSG_CHECKING([if strcasecmp is prototyped])
+ AC_EGREP_CPP([strcasecmp],[
+ $curl_includes_string
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_proto_strcasecmp="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_proto_strcasecmp="no"
+ ])
+ fi
+ #
+ if test "$tst_proto_strcasecmp" = "yes"; then
+ AC_MSG_CHECKING([if strcasecmp is compilable])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_string
+ ]],[[
+ if(0 != strcasecmp(0, 0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_strcasecmp="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_strcasecmp="no"
+ ])
+ fi
+ #
+ if test "$tst_compi_strcasecmp" = "yes"; then
+ AC_MSG_CHECKING([if strcasecmp usage allowed])
+ if test "x$curl_disallow_strcasecmp" != "xyes"; then
+ AC_MSG_RESULT([yes])
+ tst_allow_strcasecmp="yes"
+ else
+ AC_MSG_RESULT([no])
+ tst_allow_strcasecmp="no"
+ fi
+ fi
+ #
+ AC_MSG_CHECKING([if strcasecmp might be used])
+ if test "$tst_links_strcasecmp" = "yes" &&
+ test "$tst_proto_strcasecmp" = "yes" &&
+ test "$tst_compi_strcasecmp" = "yes" &&
+ test "$tst_allow_strcasecmp" = "yes"; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE_UNQUOTED(HAVE_STRCASECMP, 1,
+ [Define to 1 if you have the strcasecmp function.])
+ ac_cv_func_strcasecmp="yes"
+ else
+ AC_MSG_RESULT([no])
+ ac_cv_func_strcasecmp="no"
+ fi
+])
+
+
+dnl CURL_CHECK_FUNC_STRCASESTR
+dnl -------------------------------------------------
+dnl Verify if strcasestr is available, prototyped, and
+dnl can be compiled. If all of these are true, and
+dnl usage has not been previously disallowed with
+dnl shell variable curl_disallow_strcasestr, then
+dnl HAVE_STRCASESTR will be defined.
+
+AC_DEFUN([CURL_CHECK_FUNC_STRCASESTR], [
+ AC_REQUIRE([CURL_INCLUDES_STRING])dnl
+ #
+ tst_links_strcasestr="unknown"
+ tst_proto_strcasestr="unknown"
+ tst_compi_strcasestr="unknown"
+ tst_allow_strcasestr="unknown"
+ #
+ AC_MSG_CHECKING([if strcasestr can be linked])
+ AC_LINK_IFELSE([
+ AC_LANG_FUNC_LINK_TRY([strcasestr])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_links_strcasestr="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_links_strcasestr="no"
+ ])
+ #
+ if test "$tst_links_strcasestr" = "yes"; then
+ AC_MSG_CHECKING([if strcasestr is prototyped])
+ AC_EGREP_CPP([strcasestr],[
+ $curl_includes_string
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_proto_strcasestr="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_proto_strcasestr="no"
+ ])
+ fi
+ #
+ if test "$tst_proto_strcasestr" = "yes"; then
+ AC_MSG_CHECKING([if strcasestr is compilable])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_string
+ ]],[[
+ if(0 != strcasestr(0, 0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_strcasestr="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_strcasestr="no"
+ ])
+ fi
+ #
+ if test "$tst_compi_strcasestr" = "yes"; then
+ AC_MSG_CHECKING([if strcasestr usage allowed])
+ if test "x$curl_disallow_strcasestr" != "xyes"; then
+ AC_MSG_RESULT([yes])
+ tst_allow_strcasestr="yes"
+ else
+ AC_MSG_RESULT([no])
+ tst_allow_strcasestr="no"
+ fi
+ fi
+ #
+ AC_MSG_CHECKING([if strcasestr might be used])
+ if test "$tst_links_strcasestr" = "yes" &&
+ test "$tst_proto_strcasestr" = "yes" &&
+ test "$tst_compi_strcasestr" = "yes" &&
+ test "$tst_allow_strcasestr" = "yes"; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE_UNQUOTED(HAVE_STRCASESTR, 1,
+ [Define to 1 if you have the strcasestr function.])
+ ac_cv_func_strcasestr="yes"
+ else
+ AC_MSG_RESULT([no])
+ ac_cv_func_strcasestr="no"
+ fi
+])
+
+
+dnl CURL_CHECK_FUNC_STRCMPI
+dnl -------------------------------------------------
+dnl Verify if strcmpi is available, prototyped, and
+dnl can be compiled. If all of these are true, and
+dnl usage has not been previously disallowed with
+dnl shell variable curl_disallow_strcmpi, then
+dnl HAVE_STRCMPI will be defined.
+
+AC_DEFUN([CURL_CHECK_FUNC_STRCMPI], [
+ AC_REQUIRE([CURL_INCLUDES_STRING])dnl
+ #
+ tst_links_strcmpi="unknown"
+ tst_proto_strcmpi="unknown"
+ tst_compi_strcmpi="unknown"
+ tst_allow_strcmpi="unknown"
+ #
+ AC_MSG_CHECKING([if strcmpi can be linked])
+ AC_LINK_IFELSE([
+ AC_LANG_FUNC_LINK_TRY([strcmpi])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_links_strcmpi="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_links_strcmpi="no"
+ ])
+ #
+ if test "$tst_links_strcmpi" = "yes"; then
+ AC_MSG_CHECKING([if strcmpi is prototyped])
+ AC_EGREP_CPP([strcmpi],[
+ $curl_includes_string
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_proto_strcmpi="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_proto_strcmpi="no"
+ ])
+ fi
+ #
+ if test "$tst_proto_strcmpi" = "yes"; then
+ AC_MSG_CHECKING([if strcmpi is compilable])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_string
+ ]],[[
+ if(0 != strcmpi(0, 0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_strcmpi="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_strcmpi="no"
+ ])
+ fi
+ #
+ if test "$tst_compi_strcmpi" = "yes"; then
+ AC_MSG_CHECKING([if strcmpi usage allowed])
+ if test "x$curl_disallow_strcmpi" != "xyes"; then
+ AC_MSG_RESULT([yes])
+ tst_allow_strcmpi="yes"
+ else
+ AC_MSG_RESULT([no])
+ tst_allow_strcmpi="no"
+ fi
+ fi
+ #
+ AC_MSG_CHECKING([if strcmpi might be used])
+ if test "$tst_links_strcmpi" = "yes" &&
+ test "$tst_proto_strcmpi" = "yes" &&
+ test "$tst_compi_strcmpi" = "yes" &&
+ test "$tst_allow_strcmpi" = "yes"; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE_UNQUOTED(HAVE_STRCMPI, 1,
+ [Define to 1 if you have the strcmpi function.])
+ ac_cv_func_strcmpi="yes"
+ else
+ AC_MSG_RESULT([no])
+ ac_cv_func_strcmpi="no"
+ fi
+])
+
+
+dnl CURL_CHECK_FUNC_STRDUP
+dnl -------------------------------------------------
+dnl Verify if strdup is available, prototyped, and
+dnl can be compiled. If all of these are true, and
+dnl usage has not been previously disallowed with
+dnl shell variable curl_disallow_strdup, then
+dnl HAVE_STRDUP will be defined.
+
+AC_DEFUN([CURL_CHECK_FUNC_STRDUP], [
+ AC_REQUIRE([CURL_INCLUDES_STRING])dnl
+ #
+ tst_links_strdup="unknown"
+ tst_proto_strdup="unknown"
+ tst_compi_strdup="unknown"
+ tst_allow_strdup="unknown"
+ #
+ AC_MSG_CHECKING([if strdup can be linked])
+ AC_LINK_IFELSE([
+ AC_LANG_FUNC_LINK_TRY([strdup])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_links_strdup="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_links_strdup="no"
+ ])
+ #
+ if test "$tst_links_strdup" = "yes"; then
+ AC_MSG_CHECKING([if strdup is prototyped])
+ AC_EGREP_CPP([strdup],[
+ $curl_includes_string
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_proto_strdup="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_proto_strdup="no"
+ ])
+ fi
+ #
+ if test "$tst_proto_strdup" = "yes"; then
+ AC_MSG_CHECKING([if strdup is compilable])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_string
+ ]],[[
+ if(0 != strdup(0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_strdup="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_strdup="no"
+ ])
+ fi
+ #
+ if test "$tst_compi_strdup" = "yes"; then
+ AC_MSG_CHECKING([if strdup usage allowed])
+ if test "x$curl_disallow_strdup" != "xyes"; then
+ AC_MSG_RESULT([yes])
+ tst_allow_strdup="yes"
+ else
+ AC_MSG_RESULT([no])
+ tst_allow_strdup="no"
+ fi
+ fi
+ #
+ AC_MSG_CHECKING([if strdup might be used])
+ if test "$tst_links_strdup" = "yes" &&
+ test "$tst_proto_strdup" = "yes" &&
+ test "$tst_compi_strdup" = "yes" &&
+ test "$tst_allow_strdup" = "yes"; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE_UNQUOTED(HAVE_STRDUP, 1,
+ [Define to 1 if you have the strdup function.])
+ ac_cv_func_strdup="yes"
+ else
+ AC_MSG_RESULT([no])
+ ac_cv_func_strdup="no"
+ fi
+])
+
+
+dnl CURL_CHECK_FUNC_STRERROR_R
+dnl -------------------------------------------------
+dnl Verify if strerror_r is available, prototyped, can be compiled and
+dnl seems to work. If all of these are true, and usage has not been
+dnl previously disallowed with shell variable curl_disallow_strerror_r,
+dnl then HAVE_STRERROR_R and STRERROR_R_TYPE_ARG3 will be defined, as
+dnl well as one of HAVE_GLIBC_STRERROR_R or HAVE_POSIX_STRERROR_R.
+dnl
+dnl glibc-style strerror_r:
+dnl
+dnl char *strerror_r(int errnum, char *workbuf, size_t bufsize);
+dnl
+dnl glibc-style strerror_r returns a pointer to the the error string,
+dnl and might use the provided workbuf as a scratch area if needed. A
+dnl quick test on a few systems shows that it's usually not used at all.
+dnl
+dnl POSIX-style strerror_r:
+dnl
+dnl int strerror_r(int errnum, char *resultbuf, size_t bufsize);
+dnl
+dnl POSIX-style strerror_r returns 0 upon successful completion and the
+dnl error string in the provided resultbuf.
+dnl
+
+AC_DEFUN([CURL_CHECK_FUNC_STRERROR_R], [
+ AC_REQUIRE([CURL_INCLUDES_STDLIB])dnl
+ AC_REQUIRE([CURL_INCLUDES_STRING])dnl
+ #
+ tst_links_strerror_r="unknown"
+ tst_proto_strerror_r="unknown"
+ tst_compi_strerror_r="unknown"
+ tst_glibc_strerror_r="unknown"
+ tst_posix_strerror_r="unknown"
+ tst_allow_strerror_r="unknown"
+ tst_works_glibc_strerror_r="unknown"
+ tst_works_posix_strerror_r="unknown"
+ tst_glibc_strerror_r_type_arg3="unknown"
+ tst_posix_strerror_r_type_arg3="unknown"
+ #
+ AC_MSG_CHECKING([if strerror_r can be linked])
+ AC_LINK_IFELSE([
+ AC_LANG_FUNC_LINK_TRY([strerror_r])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_links_strerror_r="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_links_strerror_r="no"
+ ])
+ #
+ if test "$tst_links_strerror_r" = "yes"; then
+ AC_MSG_CHECKING([if strerror_r is prototyped])
+ AC_EGREP_CPP([strerror_r],[
+ $curl_includes_string
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_proto_strerror_r="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_proto_strerror_r="no"
+ ])
+ fi
+ #
+ if test "$tst_proto_strerror_r" = "yes"; then
+ AC_MSG_CHECKING([if strerror_r is compilable])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_string
+ ]],[[
+ if(0 != strerror_r(0, 0, 0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_strerror_r="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_strerror_r="no"
+ ])
+ fi
+ #
+ if test "$tst_compi_strerror_r" = "yes"; then
+ AC_MSG_CHECKING([if strerror_r is glibc like])
+ tst_glibc_strerror_r_type_arg3="unknown"
+ for arg3 in 'size_t' 'int' 'unsigned int'; do
+ if test "$tst_glibc_strerror_r_type_arg3" = "unknown"; then
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_string
+ ]],[[
+ char *strerror_r(int errnum, char *workbuf, $arg3 bufsize);
+ if(0 != strerror_r(0, 0, 0))
+ return 1;
+ ]])
+ ],[
+ tst_glibc_strerror_r_type_arg3="$arg3"
+ ])
+ fi
+ done
+ case "$tst_glibc_strerror_r_type_arg3" in
+ unknown)
+ AC_MSG_RESULT([no])
+ tst_glibc_strerror_r="no"
+ ;;
+ *)
+ AC_MSG_RESULT([yes])
+ tst_glibc_strerror_r="yes"
+ ;;
+ esac
+ fi
+ #
+ dnl only do runtime verification when not cross-compiling
+ if test "x$cross_compiling" != "xyes" &&
+ test "$tst_glibc_strerror_r" = "yes"; then
+ AC_MSG_CHECKING([if strerror_r seems to work])
+ AC_RUN_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_stdlib
+ $curl_includes_string
+# include <errno.h>
+ ]],[[
+ char buffer[1024];
+ char *string = 0;
+ buffer[0] = '\0';
+ string = strerror_r(EACCES, buffer, sizeof(buffer));
+ if(!string)
+ exit(1); /* fail */
+ if(!string[0])
+ exit(1); /* fail */
+ else
+ exit(0);
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_works_glibc_strerror_r="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_works_glibc_strerror_r="no"
+ ])
+ fi
+ #
+ if test "$tst_compi_strerror_r" = "yes" &&
+ test "$tst_works_glibc_strerror_r" != "yes"; then
+ AC_MSG_CHECKING([if strerror_r is POSIX like])
+ tst_posix_strerror_r_type_arg3="unknown"
+ for arg3 in 'size_t' 'int' 'unsigned int'; do
+ if test "$tst_posix_strerror_r_type_arg3" = "unknown"; then
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_string
+ ]],[[
+ int strerror_r(int errnum, char *resultbuf, $arg3 bufsize);
+ if(0 != strerror_r(0, 0, 0))
+ return 1;
+ ]])
+ ],[
+ tst_posix_strerror_r_type_arg3="$arg3"
+ ])
+ fi
+ done
+ case "$tst_posix_strerror_r_type_arg3" in
+ unknown)
+ AC_MSG_RESULT([no])
+ tst_posix_strerror_r="no"
+ ;;
+ *)
+ AC_MSG_RESULT([yes])
+ tst_posix_strerror_r="yes"
+ ;;
+ esac
+ fi
+ #
+ dnl only do runtime verification when not cross-compiling
+ if test "x$cross_compiling" != "xyes" &&
+ test "$tst_posix_strerror_r" = "yes"; then
+ AC_MSG_CHECKING([if strerror_r seems to work])
+ AC_RUN_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_stdlib
+ $curl_includes_string
+# include <errno.h>
+ ]],[[
+ char buffer[1024];
+ int error = 1;
+ buffer[0] = '\0';
+ error = strerror_r(EACCES, buffer, sizeof(buffer));
+ if(error)
+ exit(1); /* fail */
+ if(buffer[0] == '\0')
+ exit(1); /* fail */
+ else
+ exit(0);
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_works_posix_strerror_r="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_works_posix_strerror_r="no"
+ ])
+ fi
+ #
+ if test "$tst_works_glibc_strerror_r" = "yes"; then
+ tst_posix_strerror_r="no"
+ fi
+ if test "$tst_works_posix_strerror_r" = "yes"; then
+ tst_glibc_strerror_r="no"
+ fi
+ if test "$tst_glibc_strerror_r" = "yes" &&
+ test "$tst_works_glibc_strerror_r" != "no" &&
+ test "$tst_posix_strerror_r" != "yes"; then
+ tst_allow_strerror_r="check"
+ fi
+ if test "$tst_posix_strerror_r" = "yes" &&
+ test "$tst_works_posix_strerror_r" != "no" &&
+ test "$tst_glibc_strerror_r" != "yes"; then
+ tst_allow_strerror_r="check"
+ fi
+ if test "$tst_allow_strerror_r" = "check"; then
+ AC_MSG_CHECKING([if strerror_r usage allowed])
+ if test "x$curl_disallow_strerror_r" != "xyes"; then
+ AC_MSG_RESULT([yes])
+ tst_allow_strerror_r="yes"
+ else
+ AC_MSG_RESULT([no])
+ tst_allow_strerror_r="no"
+ fi
+ fi
+ #
+ AC_MSG_CHECKING([if strerror_r might be used])
+ if test "$tst_links_strerror_r" = "yes" &&
+ test "$tst_proto_strerror_r" = "yes" &&
+ test "$tst_compi_strerror_r" = "yes" &&
+ test "$tst_allow_strerror_r" = "yes"; then
+ AC_MSG_RESULT([yes])
+ if test "$tst_glibc_strerror_r" = "yes"; then
+ AC_DEFINE_UNQUOTED(HAVE_STRERROR_R, 1,
+ [Define to 1 if you have the strerror_r function.])
+ AC_DEFINE_UNQUOTED(HAVE_GLIBC_STRERROR_R, 1,
+ [Define to 1 if you have a working glibc-style strerror_r function.])
+ AC_DEFINE_UNQUOTED(STRERROR_R_TYPE_ARG3, $tst_glibc_strerror_r_type_arg3,
+ [Define to the type of arg 3 for strerror_r.])
+ fi
+ if test "$tst_posix_strerror_r" = "yes"; then
+ AC_DEFINE_UNQUOTED(HAVE_STRERROR_R, 1,
+ [Define to 1 if you have the strerror_r function.])
+ AC_DEFINE_UNQUOTED(HAVE_POSIX_STRERROR_R, 1,
+ [Define to 1 if you have a working POSIX-style strerror_r function.])
+ AC_DEFINE_UNQUOTED(STRERROR_R_TYPE_ARG3, $tst_posix_strerror_r_type_arg3,
+ [Define to the type of arg 3 for strerror_r.])
+ fi
+ ac_cv_func_strerror_r="yes"
+ else
+ AC_MSG_RESULT([no])
+ ac_cv_func_strerror_r="no"
+ fi
+ #
+ if test "$tst_compi_strerror_r" = "yes" &&
+ test "$tst_allow_strerror_r" = "unknown"; then
+ AC_MSG_WARN([cannot determine strerror_r() style: edit lib/curl_config.h manually.])
+ fi
+ #
+])
+
+
+dnl CURL_CHECK_FUNC_STRICMP
+dnl -------------------------------------------------
+dnl Verify if stricmp is available, prototyped, and
+dnl can be compiled. If all of these are true, and
+dnl usage has not been previously disallowed with
+dnl shell variable curl_disallow_stricmp, then
+dnl HAVE_STRICMP will be defined.
+
+AC_DEFUN([CURL_CHECK_FUNC_STRICMP], [
+ AC_REQUIRE([CURL_INCLUDES_STRING])dnl
+ #
+ tst_links_stricmp="unknown"
+ tst_proto_stricmp="unknown"
+ tst_compi_stricmp="unknown"
+ tst_allow_stricmp="unknown"
+ #
+ AC_MSG_CHECKING([if stricmp can be linked])
+ AC_LINK_IFELSE([
+ AC_LANG_FUNC_LINK_TRY([stricmp])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_links_stricmp="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_links_stricmp="no"
+ ])
+ #
+ if test "$tst_links_stricmp" = "yes"; then
+ AC_MSG_CHECKING([if stricmp is prototyped])
+ AC_EGREP_CPP([stricmp],[
+ $curl_includes_string
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_proto_stricmp="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_proto_stricmp="no"
+ ])
+ fi
+ #
+ if test "$tst_proto_stricmp" = "yes"; then
+ AC_MSG_CHECKING([if stricmp is compilable])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_string
+ ]],[[
+ if(0 != stricmp(0, 0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_stricmp="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_stricmp="no"
+ ])
+ fi
+ #
+ if test "$tst_compi_stricmp" = "yes"; then
+ AC_MSG_CHECKING([if stricmp usage allowed])
+ if test "x$curl_disallow_stricmp" != "xyes"; then
+ AC_MSG_RESULT([yes])
+ tst_allow_stricmp="yes"
+ else
+ AC_MSG_RESULT([no])
+ tst_allow_stricmp="no"
+ fi
+ fi
+ #
+ AC_MSG_CHECKING([if stricmp might be used])
+ if test "$tst_links_stricmp" = "yes" &&
+ test "$tst_proto_stricmp" = "yes" &&
+ test "$tst_compi_stricmp" = "yes" &&
+ test "$tst_allow_stricmp" = "yes"; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE_UNQUOTED(HAVE_STRICMP, 1,
+ [Define to 1 if you have the stricmp function.])
+ ac_cv_func_stricmp="yes"
+ else
+ AC_MSG_RESULT([no])
+ ac_cv_func_stricmp="no"
+ fi
+])
+
+
+dnl CURL_CHECK_FUNC_STRLCAT
+dnl -------------------------------------------------
+dnl Verify if strlcat is available, prototyped, and
+dnl can be compiled. If all of these are true, and
+dnl usage has not been previously disallowed with
+dnl shell variable curl_disallow_strlcat, then
+dnl HAVE_STRLCAT will be defined.
+
+AC_DEFUN([CURL_CHECK_FUNC_STRLCAT], [
+ AC_REQUIRE([CURL_INCLUDES_STRING])dnl
+ #
+ tst_links_strlcat="unknown"
+ tst_proto_strlcat="unknown"
+ tst_compi_strlcat="unknown"
+ tst_allow_strlcat="unknown"
+ #
+ AC_MSG_CHECKING([if strlcat can be linked])
+ AC_LINK_IFELSE([
+ AC_LANG_FUNC_LINK_TRY([strlcat])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_links_strlcat="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_links_strlcat="no"
+ ])
+ #
+ if test "$tst_links_strlcat" = "yes"; then
+ AC_MSG_CHECKING([if strlcat is prototyped])
+ AC_EGREP_CPP([strlcat],[
+ $curl_includes_string
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_proto_strlcat="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_proto_strlcat="no"
+ ])
+ fi
+ #
+ if test "$tst_proto_strlcat" = "yes"; then
+ AC_MSG_CHECKING([if strlcat is compilable])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_string
+ ]],[[
+ if(0 != strlcat(0, 0, 0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_strlcat="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_strlcat="no"
+ ])
+ fi
+ #
+ if test "$tst_compi_strlcat" = "yes"; then
+ AC_MSG_CHECKING([if strlcat usage allowed])
+ if test "x$curl_disallow_strlcat" != "xyes"; then
+ AC_MSG_RESULT([yes])
+ tst_allow_strlcat="yes"
+ else
+ AC_MSG_RESULT([no])
+ tst_allow_strlcat="no"
+ fi
+ fi
+ #
+ AC_MSG_CHECKING([if strlcat might be used])
+ if test "$tst_links_strlcat" = "yes" &&
+ test "$tst_proto_strlcat" = "yes" &&
+ test "$tst_compi_strlcat" = "yes" &&
+ test "$tst_allow_strlcat" = "yes"; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE_UNQUOTED(HAVE_STRLCAT, 1,
+ [Define to 1 if you have the strlcat function.])
+ ac_cv_func_strlcat="yes"
+ else
+ AC_MSG_RESULT([no])
+ ac_cv_func_strlcat="no"
+ fi
+])
+
+
+dnl CURL_CHECK_FUNC_STRNCASECMP
+dnl -------------------------------------------------
+dnl Verify if strncasecmp is available, prototyped, and
+dnl can be compiled. If all of these are true, and
+dnl usage has not been previously disallowed with
+dnl shell variable curl_disallow_strncasecmp, then
+dnl HAVE_STRNCASECMP will be defined.
+
+AC_DEFUN([CURL_CHECK_FUNC_STRNCASECMP], [
+ AC_REQUIRE([CURL_INCLUDES_STRING])dnl
+ #
+ tst_links_strncasecmp="unknown"
+ tst_proto_strncasecmp="unknown"
+ tst_compi_strncasecmp="unknown"
+ tst_allow_strncasecmp="unknown"
+ #
+ AC_MSG_CHECKING([if strncasecmp can be linked])
+ AC_LINK_IFELSE([
+ AC_LANG_FUNC_LINK_TRY([strncasecmp])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_links_strncasecmp="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_links_strncasecmp="no"
+ ])
+ #
+ if test "$tst_links_strncasecmp" = "yes"; then
+ AC_MSG_CHECKING([if strncasecmp is prototyped])
+ AC_EGREP_CPP([strncasecmp],[
+ $curl_includes_string
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_proto_strncasecmp="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_proto_strncasecmp="no"
+ ])
+ fi
+ #
+ if test "$tst_proto_strncasecmp" = "yes"; then
+ AC_MSG_CHECKING([if strncasecmp is compilable])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_string
+ ]],[[
+ if(0 != strncasecmp(0, 0, 0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_strncasecmp="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_strncasecmp="no"
+ ])
+ fi
+ #
+ if test "$tst_compi_strncasecmp" = "yes"; then
+ AC_MSG_CHECKING([if strncasecmp usage allowed])
+ if test "x$curl_disallow_strncasecmp" != "xyes"; then
+ AC_MSG_RESULT([yes])
+ tst_allow_strncasecmp="yes"
+ else
+ AC_MSG_RESULT([no])
+ tst_allow_strncasecmp="no"
+ fi
+ fi
+ #
+ AC_MSG_CHECKING([if strncasecmp might be used])
+ if test "$tst_links_strncasecmp" = "yes" &&
+ test "$tst_proto_strncasecmp" = "yes" &&
+ test "$tst_compi_strncasecmp" = "yes" &&
+ test "$tst_allow_strncasecmp" = "yes"; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE_UNQUOTED(HAVE_STRNCASECMP, 1,
+ [Define to 1 if you have the strncasecmp function.])
+ ac_cv_func_strncasecmp="yes"
+ else
+ AC_MSG_RESULT([no])
+ ac_cv_func_strncasecmp="no"
+ fi
+])
+
+
+dnl CURL_CHECK_FUNC_STRNCMPI
+dnl -------------------------------------------------
+dnl Verify if strncmpi is available, prototyped, and
+dnl can be compiled. If all of these are true, and
+dnl usage has not been previously disallowed with
+dnl shell variable curl_disallow_strncmpi, then
+dnl HAVE_STRNCMPI will be defined.
+
+AC_DEFUN([CURL_CHECK_FUNC_STRNCMPI], [
+ AC_REQUIRE([CURL_INCLUDES_STRING])dnl
+ #
+ tst_links_strncmpi="unknown"
+ tst_proto_strncmpi="unknown"
+ tst_compi_strncmpi="unknown"
+ tst_allow_strncmpi="unknown"
+ #
+ AC_MSG_CHECKING([if strncmpi can be linked])
+ AC_LINK_IFELSE([
+ AC_LANG_FUNC_LINK_TRY([strncmpi])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_links_strncmpi="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_links_strncmpi="no"
+ ])
+ #
+ if test "$tst_links_strncmpi" = "yes"; then
+ AC_MSG_CHECKING([if strncmpi is prototyped])
+ AC_EGREP_CPP([strncmpi],[
+ $curl_includes_string
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_proto_strncmpi="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_proto_strncmpi="no"
+ ])
+ fi
+ #
+ if test "$tst_proto_strncmpi" = "yes"; then
+ AC_MSG_CHECKING([if strncmpi is compilable])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_string
+ ]],[[
+ if(0 != strncmpi(0, 0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_strncmpi="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_strncmpi="no"
+ ])
+ fi
+ #
+ if test "$tst_compi_strncmpi" = "yes"; then
+ AC_MSG_CHECKING([if strncmpi usage allowed])
+ if test "x$curl_disallow_strncmpi" != "xyes"; then
+ AC_MSG_RESULT([yes])
+ tst_allow_strncmpi="yes"
+ else
+ AC_MSG_RESULT([no])
+ tst_allow_strncmpi="no"
+ fi
+ fi
+ #
+ AC_MSG_CHECKING([if strncmpi might be used])
+ if test "$tst_links_strncmpi" = "yes" &&
+ test "$tst_proto_strncmpi" = "yes" &&
+ test "$tst_compi_strncmpi" = "yes" &&
+ test "$tst_allow_strncmpi" = "yes"; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE_UNQUOTED(HAVE_STRNCMPI, 1,
+ [Define to 1 if you have the strncmpi function.])
+ ac_cv_func_strncmpi="yes"
+ else
+ AC_MSG_RESULT([no])
+ ac_cv_func_strncmpi="no"
+ fi
+])
+
+
+dnl CURL_CHECK_FUNC_STRNICMP
+dnl -------------------------------------------------
+dnl Verify if strnicmp is available, prototyped, and
+dnl can be compiled. If all of these are true, and
+dnl usage has not been previously disallowed with
+dnl shell variable curl_disallow_strnicmp, then
+dnl HAVE_STRNICMP will be defined.
+
+AC_DEFUN([CURL_CHECK_FUNC_STRNICMP], [
+ AC_REQUIRE([CURL_INCLUDES_STRING])dnl
+ #
+ tst_links_strnicmp="unknown"
+ tst_proto_strnicmp="unknown"
+ tst_compi_strnicmp="unknown"
+ tst_allow_strnicmp="unknown"
+ #
+ AC_MSG_CHECKING([if strnicmp can be linked])
+ AC_LINK_IFELSE([
+ AC_LANG_FUNC_LINK_TRY([strnicmp])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_links_strnicmp="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_links_strnicmp="no"
+ ])
+ #
+ if test "$tst_links_strnicmp" = "yes"; then
+ AC_MSG_CHECKING([if strnicmp is prototyped])
+ AC_EGREP_CPP([strnicmp],[
+ $curl_includes_string
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_proto_strnicmp="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_proto_strnicmp="no"
+ ])
+ fi
+ #
+ if test "$tst_proto_strnicmp" = "yes"; then
+ AC_MSG_CHECKING([if strnicmp is compilable])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_string
+ ]],[[
+ if(0 != strnicmp(0, 0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_strnicmp="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_strnicmp="no"
+ ])
+ fi
+ #
+ if test "$tst_compi_strnicmp" = "yes"; then
+ AC_MSG_CHECKING([if strnicmp usage allowed])
+ if test "x$curl_disallow_strnicmp" != "xyes"; then
+ AC_MSG_RESULT([yes])
+ tst_allow_strnicmp="yes"
+ else
+ AC_MSG_RESULT([no])
+ tst_allow_strnicmp="no"
+ fi
+ fi
+ #
+ AC_MSG_CHECKING([if strnicmp might be used])
+ if test "$tst_links_strnicmp" = "yes" &&
+ test "$tst_proto_strnicmp" = "yes" &&
+ test "$tst_compi_strnicmp" = "yes" &&
+ test "$tst_allow_strnicmp" = "yes"; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE_UNQUOTED(HAVE_STRNICMP, 1,
+ [Define to 1 if you have the strnicmp function.])
+ ac_cv_func_strnicmp="yes"
+ else
+ AC_MSG_RESULT([no])
+ ac_cv_func_strnicmp="no"
+ fi
+])
+
+
+dnl CURL_CHECK_FUNC_STRSTR
+dnl -------------------------------------------------
+dnl Verify if strstr is available, prototyped, and
+dnl can be compiled. If all of these are true, and
+dnl usage has not been previously disallowed with
+dnl shell variable curl_disallow_strstr, then
+dnl HAVE_STRSTR will be defined.
+
+AC_DEFUN([CURL_CHECK_FUNC_STRSTR], [
+ AC_REQUIRE([CURL_INCLUDES_STRING])dnl
+ #
+ tst_links_strstr="unknown"
+ tst_proto_strstr="unknown"
+ tst_compi_strstr="unknown"
+ tst_allow_strstr="unknown"
+ #
+ AC_MSG_CHECKING([if strstr can be linked])
+ AC_LINK_IFELSE([
+ AC_LANG_FUNC_LINK_TRY([strstr])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_links_strstr="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_links_strstr="no"
+ ])
+ #
+ if test "$tst_links_strstr" = "yes"; then
+ AC_MSG_CHECKING([if strstr is prototyped])
+ AC_EGREP_CPP([strstr],[
+ $curl_includes_string
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_proto_strstr="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_proto_strstr="no"
+ ])
+ fi
+ #
+ if test "$tst_proto_strstr" = "yes"; then
+ AC_MSG_CHECKING([if strstr is compilable])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_string
+ ]],[[
+ if(0 != strstr(0, 0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_strstr="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_strstr="no"
+ ])
+ fi
+ #
+ if test "$tst_compi_strstr" = "yes"; then
+ AC_MSG_CHECKING([if strstr usage allowed])
+ if test "x$curl_disallow_strstr" != "xyes"; then
+ AC_MSG_RESULT([yes])
+ tst_allow_strstr="yes"
+ else
+ AC_MSG_RESULT([no])
+ tst_allow_strstr="no"
+ fi
+ fi
+ #
+ AC_MSG_CHECKING([if strstr might be used])
+ if test "$tst_links_strstr" = "yes" &&
+ test "$tst_proto_strstr" = "yes" &&
+ test "$tst_compi_strstr" = "yes" &&
+ test "$tst_allow_strstr" = "yes"; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE_UNQUOTED(HAVE_STRSTR, 1,
+ [Define to 1 if you have the strstr function.])
+ ac_cv_func_strstr="yes"
+ else
+ AC_MSG_RESULT([no])
+ ac_cv_func_strstr="no"
+ fi
+])
+
+
+dnl CURL_CHECK_FUNC_STRTOK_R
+dnl -------------------------------------------------
+dnl Verify if strtok_r is available, prototyped, and
+dnl can be compiled. If all of these are true, and
+dnl usage has not been previously disallowed with
+dnl shell variable curl_disallow_strtok_r, then
+dnl HAVE_STRTOK_R will be defined.
+
+AC_DEFUN([CURL_CHECK_FUNC_STRTOK_R], [
+ AC_REQUIRE([CURL_INCLUDES_STRING])dnl
+ #
+ tst_links_strtok_r="unknown"
+ tst_proto_strtok_r="unknown"
+ tst_compi_strtok_r="unknown"
+ tst_allow_strtok_r="unknown"
+ #
+ AC_MSG_CHECKING([if strtok_r can be linked])
+ AC_LINK_IFELSE([
+ AC_LANG_FUNC_LINK_TRY([strtok_r])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_links_strtok_r="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_links_strtok_r="no"
+ ])
+ #
+ if test "$tst_links_strtok_r" = "yes"; then
+ AC_MSG_CHECKING([if strtok_r is prototyped])
+ AC_EGREP_CPP([strtok_r],[
+ $curl_includes_string
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_proto_strtok_r="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_proto_strtok_r="no"
+ ])
+ fi
+ #
+ if test "$tst_proto_strtok_r" = "yes"; then
+ AC_MSG_CHECKING([if strtok_r is compilable])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_string
+ ]],[[
+ if(0 != strtok_r(0, 0, 0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_strtok_r="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_strtok_r="no"
+ ])
+ fi
+ #
+ if test "$tst_compi_strtok_r" = "yes"; then
+ AC_MSG_CHECKING([if strtok_r usage allowed])
+ if test "x$curl_disallow_strtok_r" != "xyes"; then
+ AC_MSG_RESULT([yes])
+ tst_allow_strtok_r="yes"
+ else
+ AC_MSG_RESULT([no])
+ tst_allow_strtok_r="no"
+ fi
+ fi
+ #
+ AC_MSG_CHECKING([if strtok_r might be used])
+ if test "$tst_links_strtok_r" = "yes" &&
+ test "$tst_proto_strtok_r" = "yes" &&
+ test "$tst_compi_strtok_r" = "yes" &&
+ test "$tst_allow_strtok_r" = "yes"; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE_UNQUOTED(HAVE_STRTOK_R, 1,
+ [Define to 1 if you have the strtok_r function.])
+ ac_cv_func_strtok_r="yes"
+ else
+ AC_MSG_RESULT([no])
+ ac_cv_func_strtok_r="no"
+ fi
+])
+
+
+dnl CURL_CHECK_FUNC_STRTOLL
+dnl -------------------------------------------------
+dnl Verify if strtoll is available, prototyped, and
+dnl can be compiled. If all of these are true, and
+dnl usage has not been previously disallowed with
+dnl shell variable curl_disallow_strtoll, then
+dnl HAVE_STRTOLL will be defined.
+
+AC_DEFUN([CURL_CHECK_FUNC_STRTOLL], [
+ AC_REQUIRE([CURL_INCLUDES_STDLIB])dnl
+ #
+ tst_links_strtoll="unknown"
+ tst_proto_strtoll="unknown"
+ tst_compi_strtoll="unknown"
+ tst_allow_strtoll="unknown"
+ #
+ AC_MSG_CHECKING([if strtoll can be linked])
+ AC_LINK_IFELSE([
+ AC_LANG_FUNC_LINK_TRY([strtoll])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_links_strtoll="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_links_strtoll="no"
+ ])
+ #
+ if test "$tst_links_strtoll" = "yes"; then
+ AC_MSG_CHECKING([if strtoll is prototyped])
+ AC_EGREP_CPP([strtoll],[
+ $curl_includes_stdlib
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_proto_strtoll="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_proto_strtoll="no"
+ ])
+ fi
+ #
+ if test "$tst_proto_strtoll" = "yes"; then
+ AC_MSG_CHECKING([if strtoll is compilable])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_stdlib
+ ]],[[
+ if(0 != strtoll(0, 0, 0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_strtoll="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_strtoll="no"
+ ])
+ fi
+ #
+ if test "$tst_compi_strtoll" = "yes"; then
+ AC_MSG_CHECKING([if strtoll usage allowed])
+ if test "x$curl_disallow_strtoll" != "xyes"; then
+ AC_MSG_RESULT([yes])
+ tst_allow_strtoll="yes"
+ else
+ AC_MSG_RESULT([no])
+ tst_allow_strtoll="no"
+ fi
+ fi
+ #
+ AC_MSG_CHECKING([if strtoll might be used])
+ if test "$tst_links_strtoll" = "yes" &&
+ test "$tst_proto_strtoll" = "yes" &&
+ test "$tst_compi_strtoll" = "yes" &&
+ test "$tst_allow_strtoll" = "yes"; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE_UNQUOTED(HAVE_STRTOLL, 1,
+ [Define to 1 if you have the strtoll function.])
+ ac_cv_func_strtoll="yes"
+ else
+ AC_MSG_RESULT([no])
+ ac_cv_func_strtoll="no"
+ fi
+])
+
+
+dnl CURL_CHECK_FUNC_WRITEV
+dnl -------------------------------------------------
+dnl Verify if writev is available, prototyped, and
+dnl can be compiled. If all of these are true, and
+dnl usage has not been previously disallowed with
+dnl shell variable curl_disallow_writev, then
+dnl HAVE_WRITEV will be defined.
+
+AC_DEFUN([CURL_CHECK_FUNC_WRITEV], [
+ AC_REQUIRE([CURL_INCLUDES_SYS_UIO])dnl
+ #
+ tst_links_writev="unknown"
+ tst_proto_writev="unknown"
+ tst_compi_writev="unknown"
+ tst_allow_writev="unknown"
+ #
+ AC_MSG_CHECKING([if writev can be linked])
+ AC_LINK_IFELSE([
+ AC_LANG_FUNC_LINK_TRY([writev])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_links_writev="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_links_writev="no"
+ ])
+ #
+ if test "$tst_links_writev" = "yes"; then
+ AC_MSG_CHECKING([if writev is prototyped])
+ AC_EGREP_CPP([writev],[
+ $curl_includes_sys_uio
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_proto_writev="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_proto_writev="no"
+ ])
+ fi
+ #
+ if test "$tst_proto_writev" = "yes"; then
+ AC_MSG_CHECKING([if writev is compilable])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_sys_uio
+ ]],[[
+ if(0 != writev(0, 0, 0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_writev="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_writev="no"
+ ])
+ fi
+ #
+ if test "$tst_compi_writev" = "yes"; then
+ AC_MSG_CHECKING([if writev usage allowed])
+ if test "x$curl_disallow_writev" != "xyes"; then
+ AC_MSG_RESULT([yes])
+ tst_allow_writev="yes"
+ else
+ AC_MSG_RESULT([no])
+ tst_allow_writev="no"
+ fi
+ fi
+ #
+ AC_MSG_CHECKING([if writev might be used])
+ if test "$tst_links_writev" = "yes" &&
+ test "$tst_proto_writev" = "yes" &&
+ test "$tst_compi_writev" = "yes" &&
+ test "$tst_allow_writev" = "yes"; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE_UNQUOTED(HAVE_WRITEV, 1,
+ [Define to 1 if you have the writev function.])
+ ac_cv_func_writev="yes"
+ else
+ AC_MSG_RESULT([no])
+ ac_cv_func_writev="no"
+ fi
+])
diff --git a/m4/curl-override.m4 b/m4/curl-override.m4
new file mode 100644
index 0000000..326c59c
--- /dev/null
+++ b/m4/curl-override.m4
@@ -0,0 +1,101 @@
+#***************************************************************************
+#***************************************************************************
+
+# File version for 'aclocal' use. Keep it a single number.
+# serial 3
+
+dnl CURL_OVERRIDE_AUTOCONF
+dnl -------------------------------------------------
+dnl Placing a call to this macro in configure.ac after
+dnl the one to AC_INIT will make macros in this file
+dnl visible to the rest of the compilation overriding
+dnl those from Autoconf.
+
+AC_DEFUN([CURL_OVERRIDE_AUTOCONF], [
+AC_BEFORE([$0],[AC_PROG_LIBTOOL])
+# using curl-override.m4
+])
+
+dnl Override some Libtool tests
+dnl -------------------------------------------------
+dnl This is done to prevent Libtool 1.5.X from doing
+dnl unnecesary C++, Fortran and Java tests and reduce
+dnl resulting configure script by nearly 300 Kb.
+
+m4_define([AC_LIBTOOL_LANG_CXX_CONFIG],[:])
+m4_define([AC_LIBTOOL_LANG_F77_CONFIG],[:])
+m4_define([AC_LIBTOOL_LANG_GCJ_CONFIG],[:])
+
+dnl Override Autoconf's AC_LANG_PROGRAM (C)
+dnl -------------------------------------------------
+dnl This is done to prevent compiler warning
+dnl 'function declaration isn't a prototype'
+dnl in function main. This requires at least
+dnl a c89 compiler and does not suport K&R.
+
+m4_define([AC_LANG_PROGRAM(C)],
+[$1
+int main (void)
+{
+$2
+ ;
+ return 0;
+}])
+
+dnl Override Autoconf's AC_LANG_CALL (C)
+dnl -------------------------------------------------
+dnl This is a backport of Autoconf's 2.60 with the
+dnl embedded comments that hit the resulting script
+dnl removed. This is done to reduce configure size
+dnl and use fixed macro across Autoconf versions.
+
+m4_define([AC_LANG_CALL(C)],
+[AC_LANG_PROGRAM([$1
+m4_if([$2], [main], ,
+[
+#ifdef __cplusplus
+extern "C"
+#endif
+char $2 ();])], [return $2 ();])])
+
+dnl Override Autoconf's AC_LANG_FUNC_LINK_TRY (C)
+dnl -------------------------------------------------
+dnl This is a backport of Autoconf's 2.60 with the
+dnl embedded comments that hit the resulting script
+dnl removed. This is done to reduce configure size
+dnl and use fixed macro across Autoconf versions.
+
+m4_define([AC_LANG_FUNC_LINK_TRY(C)],
+[AC_LANG_PROGRAM(
+[
+#define $1 innocuous_$1
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+#undef $1
+#ifdef __cplusplus
+extern "C"
+#endif
+char $1 ();
+#if defined __stub_$1 || defined __stub___$1
+choke me
+#endif
+], [return $1 ();])])
+
+dnl Override Autoconf's PATH_SEPARATOR check
+dnl -------------------------------------------------
+dnl This is done to ensure that the same check is
+dnl used across different Autoconf versions and to
+dnl allow us to use this macro early enough in the
+dnl configure script.
+
+m4_defun([_AS_PATH_SEPARATOR_PREPARE],
+[CURL_CHECK_PATH_SEPARATOR
+m4_define([$0],[])])
+
+m4_defun([_LT_AC_LIBTOOL_SYS_PATH_SEPARATOR],
+[CURL_CHECK_PATH_SEPARATOR
+m4_define([$0],[])])
+
diff --git a/m4/curl-reentrant.m4 b/m4/curl-reentrant.m4
new file mode 100644
index 0000000..2e2d868
--- /dev/null
+++ b/m4/curl-reentrant.m4
@@ -0,0 +1,617 @@
+#***************************************************************************
+# _ _ ____ _
+# Project ___| | | | _ \| |
+# / __| | | | |_) | |
+# | (__| |_| | _ <| |___
+# \___|\___/|_| \_\_____|
+#
+# Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al.
+#
+# This software is licensed as described in the file COPYING, which
+# you should have received as part of this distribution. The terms
+# are also available at http://curl.haxx.se/docs/copyright.html.
+#
+# You may opt to use, copy, modify, merge, publish, distribute and/or sell
+# copies of the Software, and permit persons to whom the Software is
+# furnished to do so, under the terms of the COPYING file.
+#
+# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+# KIND, either express or implied.
+#
+#***************************************************************************
+
+# File version for 'aclocal' use. Keep it a single number.
+# serial 8
+
+dnl Note 1
+dnl ------
+dnl None of the CURL_CHECK_NEED_REENTRANT_* macros shall use HAVE_FOO_H to
+dnl conditionally include header files. These macros are used early in the
+dnl configure process much before header file availability is known.
+
+
+dnl CURL_CHECK_NEED_REENTRANT_ERRNO
+dnl -------------------------------------------------
+dnl Checks if the preprocessor _REENTRANT definition
+dnl makes errno available as a preprocessor macro.
+
+AC_DEFUN([CURL_CHECK_NEED_REENTRANT_ERRNO], [
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+#include <errno.h>
+ ]],[[
+ if(0 != errno)
+ return 1;
+ ]])
+ ],[
+ tmp_errno="yes"
+ ],[
+ tmp_errno="no"
+ ])
+ if test "$tmp_errno" = "yes"; then
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+#include <errno.h>
+ ]],[[
+#ifdef errno
+ int dummy=1;
+#else
+ force compilation error
+#endif
+ ]])
+ ],[
+ tmp_errno="errno_macro_defined"
+ ],[
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+#define _REENTRANT
+#include <errno.h>
+ ]],[[
+#ifdef errno
+ int dummy=1;
+#else
+ force compilation error
+#endif
+ ]])
+ ],[
+ tmp_errno="errno_macro_needs_reentrant"
+ tmp_need_reentrant="yes"
+ ])
+ ])
+ fi
+])
+
+
+dnl CURL_CHECK_NEED_REENTRANT_GMTIME_R
+dnl -------------------------------------------------
+dnl Checks if the preprocessor _REENTRANT definition
+dnl makes function gmtime_r compiler visible.
+
+AC_DEFUN([CURL_CHECK_NEED_REENTRANT_GMTIME_R], [
+ AC_LINK_IFELSE([
+ AC_LANG_FUNC_LINK_TRY([gmtime_r])
+ ],[
+ tmp_gmtime_r="yes"
+ ],[
+ tmp_gmtime_r="no"
+ ])
+ if test "$tmp_gmtime_r" = "yes"; then
+ AC_EGREP_CPP([gmtime_r],[
+#include <sys/types.h>
+#include <time.h>
+ ],[
+ tmp_gmtime_r="proto_declared"
+ ],[
+ AC_EGREP_CPP([gmtime_r],[
+#define _REENTRANT
+#include <sys/types.h>
+#include <time.h>
+ ],[
+ tmp_gmtime_r="proto_needs_reentrant"
+ tmp_need_reentrant="yes"
+ ])
+ ])
+ fi
+])
+
+
+dnl CURL_CHECK_NEED_REENTRANT_LOCALTIME_R
+dnl -------------------------------------------------
+dnl Checks if the preprocessor _REENTRANT definition
+dnl makes function localtime_r compiler visible.
+
+AC_DEFUN([CURL_CHECK_NEED_REENTRANT_LOCALTIME_R], [
+ AC_LINK_IFELSE([
+ AC_LANG_FUNC_LINK_TRY([localtime_r])
+ ],[
+ tmp_localtime_r="yes"
+ ],[
+ tmp_localtime_r="no"
+ ])
+ if test "$tmp_localtime_r" = "yes"; then
+ AC_EGREP_CPP([localtime_r],[
+#include <sys/types.h>
+#include <time.h>
+ ],[
+ tmp_localtime_r="proto_declared"
+ ],[
+ AC_EGREP_CPP([localtime_r],[
+#define _REENTRANT
+#include <sys/types.h>
+#include <time.h>
+ ],[
+ tmp_localtime_r="proto_needs_reentrant"
+ tmp_need_reentrant="yes"
+ ])
+ ])
+ fi
+])
+
+
+dnl CURL_CHECK_NEED_REENTRANT_STRERROR_R
+dnl -------------------------------------------------
+dnl Checks if the preprocessor _REENTRANT definition
+dnl makes function strerror_r compiler visible.
+
+AC_DEFUN([CURL_CHECK_NEED_REENTRANT_STRERROR_R], [
+ AC_LINK_IFELSE([
+ AC_LANG_FUNC_LINK_TRY([strerror_r])
+ ],[
+ tmp_strerror_r="yes"
+ ],[
+ tmp_strerror_r="no"
+ ])
+ if test "$tmp_strerror_r" = "yes"; then
+ AC_EGREP_CPP([strerror_r],[
+#include <sys/types.h>
+#include <string.h>
+ ],[
+ tmp_strerror_r="proto_declared"
+ ],[
+ AC_EGREP_CPP([strerror_r],[
+#define _REENTRANT
+#include <sys/types.h>
+#include <string.h>
+ ],[
+ tmp_strerror_r="proto_needs_reentrant"
+ tmp_need_reentrant="yes"
+ ])
+ ])
+ fi
+])
+
+
+dnl CURL_CHECK_NEED_REENTRANT_STRTOK_R
+dnl -------------------------------------------------
+dnl Checks if the preprocessor _REENTRANT definition
+dnl makes function strtok_r compiler visible.
+
+AC_DEFUN([CURL_CHECK_NEED_REENTRANT_STRTOK_R], [
+ AC_LINK_IFELSE([
+ AC_LANG_FUNC_LINK_TRY([strtok_r])
+ ],[
+ tmp_strtok_r="yes"
+ ],[
+ tmp_strtok_r="no"
+ ])
+ if test "$tmp_strtok_r" = "yes"; then
+ AC_EGREP_CPP([strtok_r],[
+#include <sys/types.h>
+#include <string.h>
+ ],[
+ tmp_strtok_r="proto_declared"
+ ],[
+ AC_EGREP_CPP([strtok_r],[
+#define _REENTRANT
+#include <sys/types.h>
+#include <string.h>
+ ],[
+ tmp_strtok_r="proto_needs_reentrant"
+ tmp_need_reentrant="yes"
+ ])
+ ])
+ fi
+])
+
+
+dnl CURL_CHECK_NEED_REENTRANT_INET_NTOA_R
+dnl -------------------------------------------------
+dnl Checks if the preprocessor _REENTRANT definition
+dnl makes function inet_ntoa_r compiler visible.
+
+AC_DEFUN([CURL_CHECK_NEED_REENTRANT_INET_NTOA_R], [
+ AC_LINK_IFELSE([
+ AC_LANG_FUNC_LINK_TRY([inet_ntoa_r])
+ ],[
+ tmp_inet_ntoa_r="yes"
+ ],[
+ tmp_inet_ntoa_r="no"
+ ])
+ if test "$tmp_inet_ntoa_r" = "yes"; then
+ AC_EGREP_CPP([inet_ntoa_r],[
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+ ],[
+ tmp_inet_ntoa_r="proto_declared"
+ ],[
+ AC_EGREP_CPP([inet_ntoa_r],[
+#define _REENTRANT
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+ ],[
+ tmp_inet_ntoa_r="proto_needs_reentrant"
+ tmp_need_reentrant="yes"
+ ])
+ ])
+ fi
+])
+
+
+dnl CURL_CHECK_NEED_REENTRANT_GETHOSTBYADDR_R
+dnl -------------------------------------------------
+dnl Checks if the preprocessor _REENTRANT definition
+dnl makes function gethostbyaddr_r compiler visible.
+
+AC_DEFUN([CURL_CHECK_NEED_REENTRANT_GETHOSTBYADDR_R], [
+ AC_LINK_IFELSE([
+ AC_LANG_FUNC_LINK_TRY([gethostbyaddr_r])
+ ],[
+ tmp_gethostbyaddr_r="yes"
+ ],[
+ tmp_gethostbyaddr_r="no"
+ ])
+ if test "$tmp_gethostbyaddr_r" = "yes"; then
+ AC_EGREP_CPP([gethostbyaddr_r],[
+#include <sys/types.h>
+#include <netdb.h>
+ ],[
+ tmp_gethostbyaddr_r="proto_declared"
+ ],[
+ AC_EGREP_CPP([gethostbyaddr_r],[
+#define _REENTRANT
+#include <sys/types.h>
+#include <netdb.h>
+ ],[
+ tmp_gethostbyaddr_r="proto_needs_reentrant"
+ tmp_need_reentrant="yes"
+ ])
+ ])
+ fi
+])
+
+
+dnl CURL_CHECK_NEED_REENTRANT_GETHOSTBYNAME_R
+dnl -------------------------------------------------
+dnl Checks if the preprocessor _REENTRANT definition
+dnl makes function gethostbyname_r compiler visible.
+
+AC_DEFUN([CURL_CHECK_NEED_REENTRANT_GETHOSTBYNAME_R], [
+ AC_LINK_IFELSE([
+ AC_LANG_FUNC_LINK_TRY([gethostbyname_r])
+ ],[
+ tmp_gethostbyname_r="yes"
+ ],[
+ tmp_gethostbyname_r="no"
+ ])
+ if test "$tmp_gethostbyname_r" = "yes"; then
+ AC_EGREP_CPP([gethostbyname_r],[
+#include <sys/types.h>
+#include <netdb.h>
+ ],[
+ tmp_gethostbyname_r="proto_declared"
+ ],[
+ AC_EGREP_CPP([gethostbyname_r],[
+#define _REENTRANT
+#include <sys/types.h>
+#include <netdb.h>
+ ],[
+ tmp_gethostbyname_r="proto_needs_reentrant"
+ tmp_need_reentrant="yes"
+ ])
+ ])
+ fi
+])
+
+
+dnl CURL_CHECK_NEED_REENTRANT_GETPROTOBYNAME_R
+dnl -------------------------------------------------
+dnl Checks if the preprocessor _REENTRANT definition
+dnl makes function getprotobyname_r compiler visible.
+
+AC_DEFUN([CURL_CHECK_NEED_REENTRANT_GETPROTOBYNAME_R], [
+ AC_LINK_IFELSE([
+ AC_LANG_FUNC_LINK_TRY([getprotobyname_r])
+ ],[
+ tmp_getprotobyname_r="yes"
+ ],[
+ tmp_getprotobyname_r="no"
+ ])
+ if test "$tmp_getprotobyname_r" = "yes"; then
+ AC_EGREP_CPP([getprotobyname_r],[
+#include <sys/types.h>
+#include <netdb.h>
+ ],[
+ tmp_getprotobyname_r="proto_declared"
+ ],[
+ AC_EGREP_CPP([getprotobyname_r],[
+#define _REENTRANT
+#include <sys/types.h>
+#include <netdb.h>
+ ],[
+ tmp_getprotobyname_r="proto_needs_reentrant"
+ tmp_need_reentrant="yes"
+ ])
+ ])
+ fi
+])
+
+
+dnl CURL_CHECK_NEED_REENTRANT_GETSERVBYPORT_R
+dnl -------------------------------------------------
+dnl Checks if the preprocessor _REENTRANT definition
+dnl makes function getservbyport_r compiler visible.
+
+AC_DEFUN([CURL_CHECK_NEED_REENTRANT_GETSERVBYPORT_R], [
+ AC_LINK_IFELSE([
+ AC_LANG_FUNC_LINK_TRY([getservbyport_r])
+ ],[
+ tmp_getservbyport_r="yes"
+ ],[
+ tmp_getservbyport_r="no"
+ ])
+ if test "$tmp_getservbyport_r" = "yes"; then
+ AC_EGREP_CPP([getservbyport_r],[
+#include <sys/types.h>
+#include <netdb.h>
+ ],[
+ tmp_getservbyport_r="proto_declared"
+ ],[
+ AC_EGREP_CPP([getservbyport_r],[
+#define _REENTRANT
+#include <sys/types.h>
+#include <netdb.h>
+ ],[
+ tmp_getservbyport_r="proto_needs_reentrant"
+ tmp_need_reentrant="yes"
+ ])
+ ])
+ fi
+])
+
+
+dnl CURL_CHECK_NEED_REENTRANT_FUNCTIONS_R
+dnl -------------------------------------------------
+dnl Checks if the preprocessor _REENTRANT definition
+dnl makes several _r functions compiler visible.
+dnl Internal macro for CURL_CONFIGURE_REENTRANT.
+
+AC_DEFUN([CURL_CHECK_NEED_REENTRANT_FUNCTIONS_R], [
+ if test "$tmp_need_reentrant" = "no"; then
+ CURL_CHECK_NEED_REENTRANT_GMTIME_R
+ fi
+ if test "$tmp_need_reentrant" = "no"; then
+ CURL_CHECK_NEED_REENTRANT_LOCALTIME_R
+ fi
+ if test "$tmp_need_reentrant" = "no"; then
+ CURL_CHECK_NEED_REENTRANT_STRERROR_R
+ fi
+ if test "$tmp_need_reentrant" = "no"; then
+ CURL_CHECK_NEED_REENTRANT_STRTOK_R
+ fi
+ if test "$tmp_need_reentrant" = "no"; then
+ CURL_CHECK_NEED_REENTRANT_INET_NTOA_R
+ fi
+ if test "$tmp_need_reentrant" = "no"; then
+ CURL_CHECK_NEED_REENTRANT_GETHOSTBYADDR_R
+ fi
+ if test "$tmp_need_reentrant" = "no"; then
+ CURL_CHECK_NEED_REENTRANT_GETHOSTBYNAME_R
+ fi
+ if test "$tmp_need_reentrant" = "no"; then
+ CURL_CHECK_NEED_REENTRANT_GETPROTOBYNAME_R
+ fi
+ if test "$tmp_need_reentrant" = "no"; then
+ CURL_CHECK_NEED_REENTRANT_GETSERVBYPORT_R
+ fi
+])
+
+
+dnl CURL_CHECK_NEED_REENTRANT_SYSTEM
+dnl -------------------------------------------------
+dnl Checks if the preprocessor _REENTRANT definition
+dnl must be unconditionally done for this platform.
+dnl Internal macro for CURL_CONFIGURE_REENTRANT.
+
+AC_DEFUN([CURL_CHECK_NEED_REENTRANT_SYSTEM], [
+ case $host_os in
+ solaris*)
+ tmp_need_reentrant="yes"
+ ;;
+ *)
+ tmp_need_reentrant="no"
+ ;;
+ esac
+])
+
+
+dnl CURL_CHECK_NEED_THREAD_SAFE_SYSTEM
+dnl -------------------------------------------------
+dnl Checks if the preprocessor _THREAD_SAFE definition
+dnl must be unconditionally done for this platform.
+dnl Internal macro for CURL_CONFIGURE_THREAD_SAFE.
+
+AC_DEFUN([CURL_CHECK_NEED_THREAD_SAFE_SYSTEM], [
+ case $host_os in
+ aix[[123]].* | aix4.[[012]].*)
+ dnl aix 4.2 and older
+ tmp_need_thread_safe="no"
+ ;;
+ aix*)
+ dnl AIX 4.3 and newer
+ tmp_need_thread_safe="yes"
+ ;;
+ *)
+ tmp_need_thread_safe="no"
+ ;;
+ esac
+])
+
+
+dnl CURL_CONFIGURE_FROM_NOW_ON_WITH_REENTRANT
+dnl -------------------------------------------------
+dnl This macro ensures that configuration tests done
+dnl after this will execute with preprocessor symbol
+dnl _REENTRANT defined. This macro also ensures that
+dnl the generated config file defines NEED_REENTRANT
+dnl and that in turn setup.h will define _REENTRANT.
+dnl Internal macro for CURL_CONFIGURE_REENTRANT.
+
+AC_DEFUN([CURL_CONFIGURE_FROM_NOW_ON_WITH_REENTRANT], [
+AC_DEFINE(NEED_REENTRANT, 1,
+ [Define to 1 if _REENTRANT preprocessor symbol must be defined.])
+cat >>confdefs.h <<_EOF
+#ifndef _REENTRANT
+# define _REENTRANT
+#endif
+_EOF
+])
+
+
+dnl CURL_CONFIGURE_FROM_NOW_ON_WITH_THREAD_SAFE
+dnl -------------------------------------------------
+dnl This macro ensures that configuration tests done
+dnl after this will execute with preprocessor symbol
+dnl _THREAD_SAFE defined. This macro also ensures that
+dnl the generated config file defines NEED_THREAD_SAFE
+dnl and that in turn setup.h will define _THREAD_SAFE.
+dnl Internal macro for CURL_CONFIGURE_THREAD_SAFE.
+
+AC_DEFUN([CURL_CONFIGURE_FROM_NOW_ON_WITH_THREAD_SAFE], [
+AC_DEFINE(NEED_THREAD_SAFE, 1,
+ [Define to 1 if _THREAD_SAFE preprocessor symbol must be defined.])
+cat >>confdefs.h <<_EOF
+#ifndef _THREAD_SAFE
+# define _THREAD_SAFE
+#endif
+_EOF
+])
+
+
+dnl CURL_CONFIGURE_REENTRANT
+dnl -------------------------------------------------
+dnl This first checks if the preprocessor _REENTRANT
+dnl symbol is already defined. If it isn't currently
+dnl defined a set of checks are performed to verify
+dnl if its definition is required to make visible to
+dnl the compiler a set of *_r functions. Finally, if
+dnl _REENTRANT is already defined or needed it takes
+dnl care of making adjustments necessary to ensure
+dnl that it is defined equally for further configure
+dnl tests and generated config file.
+
+AC_DEFUN([CURL_CONFIGURE_REENTRANT], [
+ AC_PREREQ([2.50])dnl
+ #
+ AC_MSG_CHECKING([if _REENTRANT is already defined])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ ]],[[
+#ifdef _REENTRANT
+ int dummy=1;
+#else
+ force compilation error
+#endif
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tmp_reentrant_initially_defined="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tmp_reentrant_initially_defined="no"
+ ])
+ #
+ if test "$tmp_reentrant_initially_defined" = "no"; then
+ AC_MSG_CHECKING([if _REENTRANT is actually needed])
+ CURL_CHECK_NEED_REENTRANT_SYSTEM
+ if test "$tmp_need_reentrant" = "no"; then
+ CURL_CHECK_NEED_REENTRANT_ERRNO
+ fi
+ if test "$tmp_need_reentrant" = "no"; then
+ CURL_CHECK_NEED_REENTRANT_FUNCTIONS_R
+ fi
+ if test "$tmp_need_reentrant" = "yes"; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ fi
+ fi
+ #
+ AC_MSG_CHECKING([if _REENTRANT is onwards defined])
+ if test "$tmp_reentrant_initially_defined" = "yes" ||
+ test "$tmp_need_reentrant" = "yes"; then
+ CURL_CONFIGURE_FROM_NOW_ON_WITH_REENTRANT
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ fi
+ #
+])
+
+
+dnl CURL_CONFIGURE_THREAD_SAFE
+dnl -------------------------------------------------
+dnl This first checks if the preprocessor _THREAD_SAFE
+dnl symbol is already defined. If it isn't currently
+dnl defined a set of checks are performed to verify
+dnl if its definition is required. Finally, if
+dnl _THREAD_SAFE is already defined or needed it takes
+dnl care of making adjustments necessary to ensure
+dnl that it is defined equally for further configure
+dnl tests and generated config file.
+
+AC_DEFUN([CURL_CONFIGURE_THREAD_SAFE], [
+ AC_PREREQ([2.50])dnl
+ #
+ AC_MSG_CHECKING([if _THREAD_SAFE is already defined])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ ]],[[
+#ifdef _THREAD_SAFE
+ int dummy=1;
+#else
+ force compilation error
+#endif
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tmp_thread_safe_initially_defined="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tmp_thread_safe_initially_defined="no"
+ ])
+ #
+ if test "$tmp_thread_safe_initially_defined" = "no"; then
+ AC_MSG_CHECKING([if _THREAD_SAFE is actually needed])
+ CURL_CHECK_NEED_THREAD_SAFE_SYSTEM
+ if test "$tmp_need_thread_safe" = "yes"; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ fi
+ fi
+ #
+ AC_MSG_CHECKING([if _THREAD_SAFE is onwards defined])
+ if test "$tmp_thread_safe_initially_defined" = "yes" ||
+ test "$tmp_need_thread_safe" = "yes"; then
+ CURL_CONFIGURE_FROM_NOW_ON_WITH_THREAD_SAFE
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ fi
+ #
+])
+
diff --git a/m4/curl-system.m4 b/m4/curl-system.m4
new file mode 100644
index 0000000..6e3e9f9
--- /dev/null
+++ b/m4/curl-system.m4
@@ -0,0 +1,88 @@
+#***************************************************************************
+# _ _ ____ _
+# Project ___| | | | _ \| |
+# / __| | | | |_) | |
+# | (__| |_| | _ <| |___
+# \___|\___/|_| \_\_____|
+#
+# Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al.
+#
+# This software is licensed as described in the file COPYING, which
+# you should have received as part of this distribution. The terms
+# are also available at http://curl.haxx.se/docs/copyright.html.
+#
+# You may opt to use, copy, modify, merge, publish, distribute and/or sell
+# copies of the Software, and permit persons to whom the Software is
+# furnished to do so, under the terms of the COPYING file.
+#
+# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+# KIND, either express or implied.
+#
+#***************************************************************************
+
+# File version for 'aclocal' use. Keep it a single number.
+# serial 3
+
+
+dnl CURL_CHECK_PATH_SEPARATOR
+dnl -------------------------------------------------
+dnl Check and compute the path separator for us. This
+dnl path separator is the symbol used to diferentiate
+dnl or separate paths inside the PATH environment var.
+
+AC_DEFUN([CURL_CHECK_PATH_SEPARATOR], [
+ if test -z "$curl_cv_PATH_SEPARATOR"; then
+ if test -z "$PATH"; then
+ AC_MSG_ERROR([PATH not set. Cannot continue without PATH being set.])
+ fi
+ dnl Directory count in PATH when using a colon separator.
+ tst_dirs_col=0
+ tst_save_IFS=$IFS; IFS=':'
+ for tst_dir in $PATH; do
+ IFS=$tst_save_IFS
+ test -d "$tst_dir" && tst_dirs_col=`expr $tst_dirs_col + 1`
+ done
+ IFS=$tst_save_IFS
+ dnl Directory count in PATH when using a semicolon separator.
+ tst_dirs_sem=0
+ tst_save_IFS=$IFS; IFS=';'
+ for tst_dir in $PATH; do
+ IFS=$tst_save_IFS
+ test -d "$tst_dir" && tst_dirs_sem=`expr $tst_dirs_sem + 1`
+ done
+ IFS=$tst_save_IFS
+ if test $tst_dirs_sem -eq $tst_dirs_col; then
+ dnl When both counting methods give the same result we do not want to
+ dnl chose one over the other, and consider auto-detection not possible.
+ if test -z "$PATH_SEPARATOR"; then
+ dnl Stop dead until user provides PATH_SEPARATOR definition.
+ AC_MSG_ERROR([PATH_SEPARATOR not set. Cannot continue without it.])
+ fi
+ else
+ dnl Separator with the greater directory count is the auto-detected one.
+ if test $tst_dirs_sem -gt $tst_dirs_col; then
+ tst_auto_separator=';'
+ else
+ tst_auto_separator=':'
+ fi
+ if test -z "$PATH_SEPARATOR"; then
+ dnl Simply use the auto-detected one when not already set.
+ PATH_SEPARATOR="$tst_auto_separator"
+ fi
+ fi
+ curl_cv_PATH_SEPARATOR="$PATH_SEPARATOR"
+ fi
+ AC_SUBST([PATH_SEPARATOR])
+ AC_SUBST([PATH])
+])
+
+
+dnl CURL_CHECK_PATH_SEPARATOR_REQUIRED
+dnl -------------------------------------------------
+dnl Use this to ensure that the path separator check
+dnl macro is only expanded and included once.
+
+AC_DEFUN([CURL_CHECK_PATH_SEPARATOR_REQUIRED], [
+ AC_REQUIRE([CURL_CHECK_PATH_SEPARATOR])dnl
+])
+
diff --git a/m4/libtool.m4 b/m4/libtool.m4
new file mode 100644
index 0000000..a3fee53
--- /dev/null
+++ b/m4/libtool.m4
@@ -0,0 +1,7377 @@
+# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
+#
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+# 2006, 2007, 2008 Free Software Foundation, Inc.
+# Written by Gordon Matzigkeit, 1996
+#
+# This file 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.
+
+m4_define([_LT_COPYING], [dnl
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+# 2006, 2007, 2008 Free Software Foundation, Inc.
+# Written by Gordon Matzigkeit, 1996
+#
+# This file is part of GNU Libtool.
+#
+# GNU Libtool 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.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy
+# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
+# obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+])
+
+# serial 56 LT_INIT
+
+
+# LT_PREREQ(VERSION)
+# ------------------
+# Complain and exit if this libtool version is less that VERSION.
+m4_defun([LT_PREREQ],
+[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1,
+ [m4_default([$3],
+ [m4_fatal([Libtool version $1 or higher is required],
+ 63)])],
+ [$2])])
+
+
+# _LT_CHECK_BUILDDIR
+# ------------------
+# Complain if the absolute build directory name contains unusual characters
+m4_defun([_LT_CHECK_BUILDDIR],
+[case `pwd` in
+ *\ * | *\ *)
+ AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;;
+esac
+])
+
+
+# LT_INIT([OPTIONS])
+# ------------------
+AC_DEFUN([LT_INIT],
+[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT
+AC_BEFORE([$0], [LT_LANG])dnl
+AC_BEFORE([$0], [LT_OUTPUT])dnl
+AC_BEFORE([$0], [LTDL_INIT])dnl
+m4_require([_LT_CHECK_BUILDDIR])dnl
+
+dnl Autoconf doesn't catch unexpanded LT_ macros by default:
+m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl
+m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl
+dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4
+dnl unless we require an AC_DEFUNed macro:
+AC_REQUIRE([LTOPTIONS_VERSION])dnl
+AC_REQUIRE([LTSUGAR_VERSION])dnl
+AC_REQUIRE([LTVERSION_VERSION])dnl
+AC_REQUIRE([LTOBSOLETE_VERSION])dnl
+m4_require([_LT_PROG_LTMAIN])dnl
+
+dnl Parse OPTIONS
+_LT_SET_OPTIONS([$0], [$1])
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ltmain"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+AC_SUBST(LIBTOOL)dnl
+
+_LT_SETUP
+
+# Only expand once:
+m4_define([LT_INIT])
+])# LT_INIT
+
+# Old names:
+AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT])
+AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_PROG_LIBTOOL], [])
+dnl AC_DEFUN([AM_PROG_LIBTOOL], [])
+
+
+# _LT_CC_BASENAME(CC)
+# -------------------
+# Calculate cc_basename. Skip known compiler wrappers and cross-prefix.
+m4_defun([_LT_CC_BASENAME],
+[for cc_temp in $1""; do
+ case $cc_temp in
+ compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;;
+ distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+done
+cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+])
+
+
+# _LT_FILEUTILS_DEFAULTS
+# ----------------------
+# It is okay to use these file commands and assume they have been set
+# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'.
+m4_defun([_LT_FILEUTILS_DEFAULTS],
+[: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+])# _LT_FILEUTILS_DEFAULTS
+
+
+# _LT_SETUP
+# ---------
+m4_defun([_LT_SETUP],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+_LT_DECL([], [host_alias], [0], [The host system])dnl
+_LT_DECL([], [host], [0])dnl
+_LT_DECL([], [host_os], [0])dnl
+dnl
+_LT_DECL([], [build_alias], [0], [The build system])dnl
+_LT_DECL([], [build], [0])dnl
+_LT_DECL([], [build_os], [0])dnl
+dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([LT_PATH_LD])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+dnl
+AC_REQUIRE([AC_PROG_LN_S])dnl
+test -z "$LN_S" && LN_S="ln -s"
+_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl
+dnl
+AC_REQUIRE([LT_CMD_MAX_LEN])dnl
+_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl
+_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl
+dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_CHECK_SHELL_FEATURES])dnl
+m4_require([_LT_CMD_RELOAD])dnl
+m4_require([_LT_CHECK_MAGIC_METHOD])dnl
+m4_require([_LT_CMD_OLD_ARCHIVE])dnl
+m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+
+_LT_CONFIG_LIBTOOL_INIT([
+# See if we are running on zsh, and set the options which allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+fi
+])
+if test -n "${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+fi
+
+_LT_CHECK_OBJDIR
+
+m4_require([_LT_TAG_COMPILER])dnl
+_LT_PROG_ECHO_BACKSLASH
+
+case $host_os in
+aix3*)
+ # AIX sometimes has problems with the GCC collect2 program. For some
+ # reason, if we set the COLLECT_NAMES environment variable, the problems
+ # vanish in a puff of smoke.
+ if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+ fi
+ ;;
+esac
+
+# Sed substitution that helps us do robust quoting. It backslashifies
+# metacharacters that are still active within double-quoted strings.
+sed_quote_subst='s/\([["`$\\]]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\([["`\\]]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+# Global variables:
+ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
+
+_LT_CC_BASENAME([$compiler])
+
+# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+case $deplibs_check_method in
+file_magic*)
+ if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+ _LT_PATH_MAGIC
+ fi
+ ;;
+esac
+
+# Use C for the default configuration in the libtool script
+LT_SUPPORTED_TAG([CC])
+_LT_LANG_C_CONFIG
+_LT_LANG_DEFAULT_CONFIG
+_LT_CONFIG_COMMANDS
+])# _LT_SETUP
+
+
+# _LT_PROG_LTMAIN
+# ---------------
+# Note that this code is called both from `configure', and `config.status'
+# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably,
+# `config.status' has no value for ac_aux_dir unless we are using Automake,
+# so we pass a copy along to make sure it has a sensible value anyway.
+m4_defun([_LT_PROG_LTMAIN],
+[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl
+_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir'])
+ltmain="$ac_aux_dir/ltmain.sh"
+])# _LT_PROG_LTMAIN
+
+
+## ------------------------------------- ##
+## Accumulate code for creating libtool. ##
+## ------------------------------------- ##
+
+# So that we can recreate a full libtool script including additional
+# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS
+# in macros and then make a single call at the end using the `libtool'
+# label.
+
+
+# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS])
+# ----------------------------------------
+# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later.
+m4_define([_LT_CONFIG_LIBTOOL_INIT],
+[m4_ifval([$1],
+ [m4_append([_LT_OUTPUT_LIBTOOL_INIT],
+ [$1
+])])])
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_INIT])
+
+
+# _LT_CONFIG_LIBTOOL([COMMANDS])
+# ------------------------------
+# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later.
+m4_define([_LT_CONFIG_LIBTOOL],
+[m4_ifval([$1],
+ [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS],
+ [$1
+])])])
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS])
+
+
+# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS])
+# -----------------------------------------------------
+m4_defun([_LT_CONFIG_SAVE_COMMANDS],
+[_LT_CONFIG_LIBTOOL([$1])
+_LT_CONFIG_LIBTOOL_INIT([$2])
+])
+
+
+# _LT_FORMAT_COMMENT([COMMENT])
+# -----------------------------
+# Add leading comment marks to the start of each line, and a trailing
+# full-stop to the whole comment if one is not present already.
+m4_define([_LT_FORMAT_COMMENT],
+[m4_ifval([$1], [
+m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])],
+ [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.])
+)])
+
+
+
+## ------------------------ ##
+## FIXME: Eliminate VARNAME ##
+## ------------------------ ##
+
+
+# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?])
+# -------------------------------------------------------------------
+# CONFIGNAME is the name given to the value in the libtool script.
+# VARNAME is the (base) name used in the configure script.
+# VALUE may be 0, 1 or 2 for a computed quote escaped value based on
+# VARNAME. Any other value will be used directly.
+m4_define([_LT_DECL],
+[lt_if_append_uniq([lt_decl_varnames], [$2], [, ],
+ [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name],
+ [m4_ifval([$1], [$1], [$2])])
+ lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3])
+ m4_ifval([$4],
+ [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])])
+ lt_dict_add_subkey([lt_decl_dict], [$2],
+ [tagged?], [m4_ifval([$5], [yes], [no])])])
+])
+
+
+# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION])
+# --------------------------------------------------------
+m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])])
+
+
+# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...])
+# ------------------------------------------------
+m4_define([lt_decl_tag_varnames],
+[_lt_decl_filter([tagged?], [yes], $@)])
+
+
+# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..])
+# ---------------------------------------------------------
+m4_define([_lt_decl_filter],
+[m4_case([$#],
+ [0], [m4_fatal([$0: too few arguments: $#])],
+ [1], [m4_fatal([$0: too few arguments: $#: $1])],
+ [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)],
+ [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)],
+ [lt_dict_filter([lt_decl_dict], $@)])[]dnl
+])
+
+
+# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...])
+# --------------------------------------------------
+m4_define([lt_decl_quote_varnames],
+[_lt_decl_filter([value], [1], $@)])
+
+
+# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...])
+# ---------------------------------------------------
+m4_define([lt_decl_dquote_varnames],
+[_lt_decl_filter([value], [2], $@)])
+
+
+# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...])
+# ---------------------------------------------------
+m4_define([lt_decl_varnames_tagged],
+[m4_assert([$# <= 2])dnl
+_$0(m4_quote(m4_default([$1], [[, ]])),
+ m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]),
+ m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))])
+m4_define([_lt_decl_varnames_tagged],
+[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])])
+
+
+# lt_decl_all_varnames([SEPARATOR], [VARNAME1...])
+# ------------------------------------------------
+m4_define([lt_decl_all_varnames],
+[_$0(m4_quote(m4_default([$1], [[, ]])),
+ m4_if([$2], [],
+ m4_quote(lt_decl_varnames),
+ m4_quote(m4_shift($@))))[]dnl
+])
+m4_define([_lt_decl_all_varnames],
+[lt_join($@, lt_decl_varnames_tagged([$1],
+ lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl
+])
+
+
+# _LT_CONFIG_STATUS_DECLARE([VARNAME])
+# ------------------------------------
+# Quote a variable value, and forward it to `config.status' so that its
+# declaration there will have the same value as in `configure'. VARNAME
+# must have a single quote delimited value for this to work.
+m4_define([_LT_CONFIG_STATUS_DECLARE],
+[$1='`$ECHO "X$][$1" | $Xsed -e "$delay_single_quote_subst"`'])
+
+
+# _LT_CONFIG_STATUS_DECLARATIONS
+# ------------------------------
+# We delimit libtool config variables with single quotes, so when
+# we write them to config.status, we have to be sure to quote all
+# embedded single quotes properly. In configure, this macro expands
+# each variable declared with _LT_DECL (and _LT_TAGDECL) into:
+#
+# <var>='`$ECHO "X$<var>" | $Xsed -e "$delay_single_quote_subst"`'
+m4_defun([_LT_CONFIG_STATUS_DECLARATIONS],
+[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames),
+ [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])])
+
+
+# _LT_LIBTOOL_TAGS
+# ----------------
+# Output comment and list of tags supported by the script
+m4_defun([_LT_LIBTOOL_TAGS],
+[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl
+available_tags="_LT_TAGS"dnl
+])
+
+
+# _LT_LIBTOOL_DECLARE(VARNAME, [TAG])
+# -----------------------------------
+# Extract the dictionary values for VARNAME (optionally with TAG) and
+# expand to a commented shell variable setting:
+#
+# # Some comment about what VAR is for.
+# visible_name=$lt_internal_name
+m4_define([_LT_LIBTOOL_DECLARE],
+[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1],
+ [description])))[]dnl
+m4_pushdef([_libtool_name],
+ m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl
+m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])),
+ [0], [_libtool_name=[$]$1],
+ [1], [_libtool_name=$lt_[]$1],
+ [2], [_libtool_name=$lt_[]$1],
+ [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl
+m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl
+])
+
+
+# _LT_LIBTOOL_CONFIG_VARS
+# -----------------------
+# Produce commented declarations of non-tagged libtool config variables
+# suitable for insertion in the LIBTOOL CONFIG section of the `libtool'
+# script. Tagged libtool config variables (even for the LIBTOOL CONFIG
+# section) are produced by _LT_LIBTOOL_TAG_VARS.
+m4_defun([_LT_LIBTOOL_CONFIG_VARS],
+[m4_foreach([_lt_var],
+ m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)),
+ [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])])
+
+
+# _LT_LIBTOOL_TAG_VARS(TAG)
+# -------------------------
+m4_define([_LT_LIBTOOL_TAG_VARS],
+[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames),
+ [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])])
+
+
+# _LT_TAGVAR(VARNAME, [TAGNAME])
+# ------------------------------
+m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])])
+
+
+# _LT_CONFIG_COMMANDS
+# -------------------
+# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of
+# variables for single and double quote escaping we saved from calls
+# to _LT_DECL, we can put quote escaped variables declarations
+# into `config.status', and then the shell code to quote escape them in
+# for loops in `config.status'. Finally, any additional code accumulated
+# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded.
+m4_defun([_LT_CONFIG_COMMANDS],
+[AC_PROVIDE_IFELSE([LT_OUTPUT],
+ dnl If the libtool generation code has been placed in $CONFIG_LT,
+ dnl instead of duplicating it all over again into config.status,
+ dnl then we will have config.status run $CONFIG_LT later, so it
+ dnl needs to know what name is stored there:
+ [AC_CONFIG_COMMANDS([libtool],
+ [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])],
+ dnl If the libtool generation code is destined for config.status,
+ dnl expand the accumulated commands and init code now:
+ [AC_CONFIG_COMMANDS([libtool],
+ [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])])
+])#_LT_CONFIG_COMMANDS
+
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT],
+[
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+_LT_CONFIG_STATUS_DECLARATIONS
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# Quote evaled strings.
+for var in lt_decl_all_varnames([[ \
+]], lt_decl_quote_varnames); do
+ case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+ *[[\\\\\\\`\\"\\\$]]*)
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+ ;;
+ *)
+ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+ ;;
+ esac
+done
+
+# Double-quote double-evaled strings.
+for var in lt_decl_all_varnames([[ \
+]], lt_decl_dquote_varnames); do
+ case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+ *[[\\\\\\\`\\"\\\$]]*)
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+ ;;
+ *)
+ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+ ;;
+ esac
+done
+
+# Fix-up fallback echo if it was mangled by the above quoting rules.
+case \$lt_ECHO in
+*'\\\[$]0 --fallback-echo"')dnl "
+ lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\[$]0 --fallback-echo"\[$]/\[$]0 --fallback-echo"/'\`
+ ;;
+esac
+
+_LT_OUTPUT_LIBTOOL_INIT
+])
+
+
+# LT_OUTPUT
+# ---------
+# This macro allows early generation of the libtool script (before
+# AC_OUTPUT is called), incase it is used in configure for compilation
+# tests.
+AC_DEFUN([LT_OUTPUT],
+[: ${CONFIG_LT=./config.lt}
+AC_MSG_NOTICE([creating $CONFIG_LT])
+cat >"$CONFIG_LT" <<_LTEOF
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate a libtool stub with the current configuration.
+
+lt_cl_silent=false
+SHELL=\${CONFIG_SHELL-$SHELL}
+_LTEOF
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+AS_SHELL_SANITIZE
+_AS_PREPARE
+
+exec AS_MESSAGE_FD>&1
+exec AS_MESSAGE_LOG_FD>>config.log
+{
+ echo
+ AS_BOX([Running $as_me.])
+} >&AS_MESSAGE_LOG_FD
+
+lt_cl_help="\
+\`$as_me' creates a local libtool stub from the current configuration,
+for use in further configure time tests before the real libtool is
+generated.
+
+Usage: $[0] [[OPTIONS]]
+
+ -h, --help print this help, then exit
+ -V, --version print version number, then exit
+ -q, --quiet do not print progress messages
+ -d, --debug don't remove temporary files
+
+Report bugs to <bug-libtool@gnu.org>."
+
+lt_cl_version="\
+m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl
+m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])
+configured by $[0], generated by m4_PACKAGE_STRING.
+
+Copyright (C) 2008 Free Software Foundation, Inc.
+This config.lt script is free software; the Free Software Foundation
+gives unlimited permision to copy, distribute and modify it."
+
+while test $[#] != 0
+do
+ case $[1] in
+ --version | --v* | -V )
+ echo "$lt_cl_version"; exit 0 ;;
+ --help | --h* | -h )
+ echo "$lt_cl_help"; exit 0 ;;
+ --debug | --d* | -d )
+ debug=: ;;
+ --quiet | --q* | --silent | --s* | -q )
+ lt_cl_silent=: ;;
+
+ -*) AC_MSG_ERROR([unrecognized option: $[1]
+Try \`$[0] --help' for more information.]) ;;
+
+ *) AC_MSG_ERROR([unrecognized argument: $[1]
+Try \`$[0] --help' for more information.]) ;;
+ esac
+ shift
+done
+
+if $lt_cl_silent; then
+ exec AS_MESSAGE_FD>/dev/null
+fi
+_LTEOF
+
+cat >>"$CONFIG_LT" <<_LTEOF
+_LT_OUTPUT_LIBTOOL_COMMANDS_INIT
+_LTEOF
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+AC_MSG_NOTICE([creating $ofile])
+_LT_OUTPUT_LIBTOOL_COMMANDS
+AS_EXIT(0)
+_LTEOF
+chmod +x "$CONFIG_LT"
+
+# configure is writing to config.log, but config.lt does its own redirection,
+# appending to config.log, which fails on DOS, as config.log is still kept
+# open by configure. Here we exec the FD to /dev/null, effectively closing
+# config.log, so it can be properly (re)opened and appended to by config.lt.
+if test "$no_create" != yes; then
+ lt_cl_success=:
+ test "$silent" = yes &&
+ lt_config_lt_args="$lt_config_lt_args --quiet"
+ exec AS_MESSAGE_LOG_FD>/dev/null
+ $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false
+ exec AS_MESSAGE_LOG_FD>>config.log
+ $lt_cl_success || AS_EXIT(1)
+fi
+])# LT_OUTPUT
+
+
+# _LT_CONFIG(TAG)
+# ---------------
+# If TAG is the built-in tag, create an initial libtool script with a
+# default configuration from the untagged config vars. Otherwise add code
+# to config.status for appending the configuration named by TAG from the
+# matching tagged config vars.
+m4_defun([_LT_CONFIG],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+_LT_CONFIG_SAVE_COMMANDS([
+ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl
+ m4_if(_LT_TAG, [C], [
+ # See if we are running on zsh, and set the options which allow our
+ # commands through without removal of \ escapes.
+ if test -n "${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+ fi
+
+ cfgfile="${ofile}T"
+ trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+ $RM "$cfgfile"
+
+ cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+
+# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+_LT_COPYING
+_LT_LIBTOOL_TAGS
+
+# ### BEGIN LIBTOOL CONFIG
+_LT_LIBTOOL_CONFIG_VARS
+_LT_LIBTOOL_TAG_VARS
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+ case $host_os in
+ aix3*)
+ cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program. For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+fi
+_LT_EOF
+ ;;
+ esac
+
+ _LT_PROG_LTMAIN
+
+ # We use sed instead of cat because bash on DJGPP gets confused if
+ # if finds mixed CR/LF and LF-only lines. Since sed operates in
+ # text mode, it properly converts lines to CR/LF. This bash problem
+ # is reportedly fixed, but why not run on old versions too?
+ sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
+ || (rm -f "$cfgfile"; exit 1)
+
+ _LT_PROG_XSI_SHELLFNS
+
+ sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
+ || (rm -f "$cfgfile"; exit 1)
+
+ mv -f "$cfgfile" "$ofile" ||
+ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+ chmod +x "$ofile"
+],
+[cat <<_LT_EOF >> "$ofile"
+
+dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded
+dnl in a comment (ie after a #).
+# ### BEGIN LIBTOOL TAG CONFIG: $1
+_LT_LIBTOOL_TAG_VARS(_LT_TAG)
+# ### END LIBTOOL TAG CONFIG: $1
+_LT_EOF
+])dnl /m4_if
+],
+[m4_if([$1], [], [
+ PACKAGE='$PACKAGE'
+ VERSION='$VERSION'
+ TIMESTAMP='$TIMESTAMP'
+ RM='$RM'
+ ofile='$ofile'], [])
+])dnl /_LT_CONFIG_SAVE_COMMANDS
+])# _LT_CONFIG
+
+
+# LT_SUPPORTED_TAG(TAG)
+# ---------------------
+# Trace this macro to discover what tags are supported by the libtool
+# --tag option, using:
+# autoconf --trace 'LT_SUPPORTED_TAG:$1'
+AC_DEFUN([LT_SUPPORTED_TAG], [])
+
+
+# C support is built-in for now
+m4_define([_LT_LANG_C_enabled], [])
+m4_define([_LT_TAGS], [])
+
+
+# LT_LANG(LANG)
+# -------------
+# Enable libtool support for the given language if not already enabled.
+AC_DEFUN([LT_LANG],
+[AC_BEFORE([$0], [LT_OUTPUT])dnl
+m4_case([$1],
+ [C], [_LT_LANG(C)],
+ [C++], [_LT_LANG(CXX)],
+ [Java], [_LT_LANG(GCJ)],
+ [Fortran 77], [_LT_LANG(F77)],
+ [Fortran], [_LT_LANG(FC)],
+ [Windows Resource], [_LT_LANG(RC)],
+ [m4_ifdef([_LT_LANG_]$1[_CONFIG],
+ [_LT_LANG($1)],
+ [m4_fatal([$0: unsupported language: "$1"])])])dnl
+])# LT_LANG
+
+
+# _LT_LANG(LANGNAME)
+# ------------------
+m4_defun([_LT_LANG],
+[m4_ifdef([_LT_LANG_]$1[_enabled], [],
+ [LT_SUPPORTED_TAG([$1])dnl
+ m4_append([_LT_TAGS], [$1 ])dnl
+ m4_define([_LT_LANG_]$1[_enabled], [])dnl
+ _LT_LANG_$1_CONFIG($1)])dnl
+])# _LT_LANG
+
+
+# _LT_LANG_DEFAULT_CONFIG
+# -----------------------
+m4_defun([_LT_LANG_DEFAULT_CONFIG],
+[AC_PROVIDE_IFELSE([AC_PROG_CXX],
+ [LT_LANG(CXX)],
+ [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])])
+
+AC_PROVIDE_IFELSE([AC_PROG_F77],
+ [LT_LANG(F77)],
+ [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])])
+
+AC_PROVIDE_IFELSE([AC_PROG_FC],
+ [LT_LANG(FC)],
+ [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])])
+
+dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal
+dnl pulling things in needlessly.
+AC_PROVIDE_IFELSE([AC_PROG_GCJ],
+ [LT_LANG(GCJ)],
+ [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
+ [LT_LANG(GCJ)],
+ [AC_PROVIDE_IFELSE([LT_PROG_GCJ],
+ [LT_LANG(GCJ)],
+ [m4_ifdef([AC_PROG_GCJ],
+ [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])])
+ m4_ifdef([A][M_PROG_GCJ],
+ [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])])
+ m4_ifdef([LT_PROG_GCJ],
+ [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])])
+
+AC_PROVIDE_IFELSE([LT_PROG_RC],
+ [LT_LANG(RC)],
+ [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])])
+])# _LT_LANG_DEFAULT_CONFIG
+
+# Obsolete macros:
+AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)])
+AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)])
+AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)])
+AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_CXX], [])
+dnl AC_DEFUN([AC_LIBTOOL_F77], [])
+dnl AC_DEFUN([AC_LIBTOOL_FC], [])
+dnl AC_DEFUN([AC_LIBTOOL_GCJ], [])
+
+
+# _LT_TAG_COMPILER
+# ----------------
+m4_defun([_LT_TAG_COMPILER],
+[AC_REQUIRE([AC_PROG_CC])dnl
+
+_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl
+_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl
+_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl
+_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+])# _LT_TAG_COMPILER
+
+
+# _LT_COMPILER_BOILERPLATE
+# ------------------------
+# Check for compiler boilerplate output or warnings with
+# the simple compiler test code.
+m4_defun([_LT_COMPILER_BOILERPLATE],
+[m4_require([_LT_DECL_SED])dnl
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+])# _LT_COMPILER_BOILERPLATE
+
+
+# _LT_LINKER_BOILERPLATE
+# ----------------------
+# Check for linker boilerplate output or warnings with
+# the simple link test code.
+m4_defun([_LT_LINKER_BOILERPLATE],
+[m4_require([_LT_DECL_SED])dnl
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+])# _LT_LINKER_BOILERPLATE
+
+# _LT_REQUIRED_DARWIN_CHECKS
+# -------------------------
+m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
+ case $host_os in
+ rhapsody* | darwin*)
+ AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:])
+ AC_CHECK_TOOL([NMEDIT], [nmedit], [:])
+ AC_CHECK_TOOL([LIPO], [lipo], [:])
+ AC_CHECK_TOOL([OTOOL], [otool], [:])
+ AC_CHECK_TOOL([OTOOL64], [otool64], [:])
+ _LT_DECL([], [DSYMUTIL], [1],
+ [Tool to manipulate archived DWARF debug symbol files on Mac OS X])
+ _LT_DECL([], [NMEDIT], [1],
+ [Tool to change global to local symbols on Mac OS X])
+ _LT_DECL([], [LIPO], [1],
+ [Tool to manipulate fat objects and archives on Mac OS X])
+ _LT_DECL([], [OTOOL], [1],
+ [ldd/readelf like tool for Mach-O binaries on Mac OS X])
+ _LT_DECL([], [OTOOL64], [1],
+ [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4])
+
+ AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod],
+ [lt_cv_apple_cc_single_mod=no
+ if test -z "${LT_MULTI_MODULE}"; then
+ # By default we will add the -single_module flag. You can override
+ # by either setting the environment variable LT_MULTI_MODULE
+ # non-empty at configure time, or by adding -multi_module to the
+ # link flags.
+ rm -rf libconftest.dylib*
+ echo "int foo(void){return 1;}" > conftest.c
+ echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD
+ $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
+ _lt_result=$?
+ if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
+ lt_cv_apple_cc_single_mod=yes
+ else
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ fi
+ rm -rf libconftest.dylib*
+ rm -f conftest.*
+ fi])
+ AC_CACHE_CHECK([for -exported_symbols_list linker flag],
+ [lt_cv_ld_exported_symbols_list],
+ [lt_cv_ld_exported_symbols_list=no
+ save_LDFLAGS=$LDFLAGS
+ echo "_main" > conftest.sym
+ LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+ [lt_cv_ld_exported_symbols_list=yes],
+ [lt_cv_ld_exported_symbols_list=no])
+ LDFLAGS="$save_LDFLAGS"
+ ])
+ case $host_os in
+ rhapsody* | darwin1.[[012]])
+ _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
+ darwin1.*)
+ _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+ darwin*) # darwin 5.x on
+ # if running on 10.5 or later, the deployment target defaults
+ # to the OS version, if on x86, and 10.4, the deployment
+ # target defaults to 10.4. Don't you love it?
+ case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
+ 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)
+ _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+ 10.[[012]]*)
+ _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+ 10.*)
+ _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+ esac
+ ;;
+ esac
+ if test "$lt_cv_apple_cc_single_mod" = "yes"; then
+ _lt_dar_single_mod='$single_module'
+ fi
+ if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
+ _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
+ else
+ _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ fi
+ if test "$DSYMUTIL" != ":"; then
+ _lt_dsymutil='~$DSYMUTIL $lib || :'
+ else
+ _lt_dsymutil=
+ fi
+ ;;
+ esac
+])
+
+
+# _LT_DARWIN_LINKER_FEATURES
+# --------------------------
+# Checks for linker and compiler features on darwin
+m4_defun([_LT_DARWIN_LINKER_FEATURES],
+[
+ m4_require([_LT_REQUIRED_DARWIN_CHECKS])
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_automatic, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=''
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined"
+ case $cc_basename in
+ ifort*) _lt_dar_can_shared=yes ;;
+ *) _lt_dar_can_shared=$GCC ;;
+ esac
+ if test "$_lt_dar_can_shared" = "yes"; then
+ output_verbose_link_cmd=echo
+ _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
+ _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
+ _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
+ _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+ m4_if([$1], [CXX],
+[ if test "$lt_cv_apple_cc_single_mod" != "yes"; then
+ _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
+ _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
+ fi
+],[])
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+])
+
+# _LT_SYS_MODULE_PATH_AIX
+# -----------------------
+# Links a minimal program and checks the executable
+# for the system default hardcoded library path. In most cases,
+# this is /usr/lib:/lib, but when the MPI compilers are used
+# the location of the communication and MPI libs are included too.
+# If we don't find anything, use the default library path according
+# to the aix ld manual.
+m4_defun([_LT_SYS_MODULE_PATH_AIX],
+[m4_require([_LT_DECL_SED])dnl
+AC_LINK_IFELSE(AC_LANG_PROGRAM,[
+lt_aix_libpath_sed='
+ /Import File Strings/,/^$/ {
+ /^0/ {
+ s/^0 *\(.*\)$/\1/
+ p
+ }
+ }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+ aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi],[])
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+])# _LT_SYS_MODULE_PATH_AIX
+
+
+# _LT_SHELL_INIT(ARG)
+# -------------------
+m4_define([_LT_SHELL_INIT],
+[ifdef([AC_DIVERSION_NOTICE],
+ [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
+ [AC_DIVERT_PUSH(NOTICE)])
+$1
+AC_DIVERT_POP
+])# _LT_SHELL_INIT
+
+
+# _LT_PROG_ECHO_BACKSLASH
+# -----------------------
+# Add some code to the start of the generated configure script which
+# will find an echo command which doesn't interpret backslashes.
+m4_defun([_LT_PROG_ECHO_BACKSLASH],
+[_LT_SHELL_INIT([
+# Check that we are running under the correct shell.
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+case X$lt_ECHO in
+X*--fallback-echo)
+ # Remove one level of quotation (which was required for Make).
+ ECHO=`echo "$lt_ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','`
+ ;;
+esac
+
+ECHO=${lt_ECHO-echo}
+if test "X[$]1" = X--no-reexec; then
+ # Discard the --no-reexec flag, and continue.
+ shift
+elif test "X[$]1" = X--fallback-echo; then
+ # Avoid inline document here, it may be left over
+ :
+elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then
+ # Yippee, $ECHO works!
+ :
+else
+ # Restart under the correct shell.
+ exec $SHELL "[$]0" --no-reexec ${1+"[$]@"}
+fi
+
+if test "X[$]1" = X--fallback-echo; then
+ # used as fallback echo
+ shift
+ cat <<_LT_EOF
+[$]*
+_LT_EOF
+ exit 0
+fi
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+if test -z "$lt_ECHO"; then
+ if test "X${echo_test_string+set}" != Xset; then
+ # find a string as large as possible, as long as the shell can cope with it
+ for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do
+ # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
+ if { echo_test_string=`eval $cmd`; } 2>/dev/null &&
+ { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null
+ then
+ break
+ fi
+ done
+ fi
+
+ if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ :
+ else
+ # The Solaris, AIX, and Digital Unix default echo programs unquote
+ # backslashes. This makes it impossible to quote backslashes using
+ # echo "$something" | sed 's/\\/\\\\/g'
+ #
+ # So, first we look for a working echo in the user's PATH.
+
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for dir in $PATH /usr/ucb; do
+ IFS="$lt_save_ifs"
+ if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
+ test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ ECHO="$dir/echo"
+ break
+ fi
+ done
+ IFS="$lt_save_ifs"
+
+ if test "X$ECHO" = Xecho; then
+ # We didn't find a better echo, so look for alternatives.
+ if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ # This shell has a builtin print -r that does the trick.
+ ECHO='print -r'
+ elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } &&
+ test "X$CONFIG_SHELL" != X/bin/ksh; then
+ # If we have ksh, try running configure again with it.
+ ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+ export ORIGINAL_CONFIG_SHELL
+ CONFIG_SHELL=/bin/ksh
+ export CONFIG_SHELL
+ exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"}
+ else
+ # Try using printf.
+ ECHO='printf %s\n'
+ if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ # Cool, printf works
+ :
+ elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
+ test "X$echo_testing_string" = 'X\t' &&
+ echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
+ export CONFIG_SHELL
+ SHELL="$CONFIG_SHELL"
+ export SHELL
+ ECHO="$CONFIG_SHELL [$]0 --fallback-echo"
+ elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
+ test "X$echo_testing_string" = 'X\t' &&
+ echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ ECHO="$CONFIG_SHELL [$]0 --fallback-echo"
+ else
+ # maybe with a smaller string...
+ prev=:
+
+ for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do
+ if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null
+ then
+ break
+ fi
+ prev="$cmd"
+ done
+
+ if test "$prev" != 'sed 50q "[$]0"'; then
+ echo_test_string=`eval $prev`
+ export echo_test_string
+ exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"}
+ else
+ # Oops. We lost completely, so just stick with echo.
+ ECHO=echo
+ fi
+ fi
+ fi
+ fi
+ fi
+fi
+
+# Copy echo and quote the copy suitably for passing to libtool from
+# the Makefile, instead of quoting the original, which is used later.
+lt_ECHO=$ECHO
+if test "X$lt_ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then
+ lt_ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo"
+fi
+
+AC_SUBST(lt_ECHO)
+])
+_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts])
+_LT_DECL([], [ECHO], [1],
+ [An echo program that does not interpret backslashes])
+])# _LT_PROG_ECHO_BACKSLASH
+
+
+# _LT_ENABLE_LOCK
+# ---------------
+m4_defun([_LT_ENABLE_LOCK],
+[AC_ARG_ENABLE([libtool-lock],
+ [AS_HELP_STRING([--disable-libtool-lock],
+ [avoid locking (might break parallel builds)])])
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ case `/usr/bin/file conftest.$ac_objext` in
+ *ELF-32*)
+ HPUX_IA64_MODE="32"
+ ;;
+ *ELF-64*)
+ HPUX_IA64_MODE="64"
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+*-*-irix6*)
+ # Find out which ABI we are using.
+ echo '[#]line __oline__ "configure"' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ if test "$lt_cv_prog_gnu_ld" = yes; then
+ case `/usr/bin/file conftest.$ac_objext` in
+ *32-bit*)
+ LD="${LD-ld} -melf32bsmip"
+ ;;
+ *N32*)
+ LD="${LD-ld} -melf32bmipn32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -melf64bmip"
+ ;;
+ esac
+ else
+ case `/usr/bin/file conftest.$ac_objext` in
+ *32-bit*)
+ LD="${LD-ld} -32"
+ ;;
+ *N32*)
+ LD="${LD-ld} -n32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -64"
+ ;;
+ esac
+ fi
+ fi
+ rm -rf conftest*
+ ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ case `/usr/bin/file conftest.o` in
+ *32-bit*)
+ case $host in
+ x86_64-*kfreebsd*-gnu)
+ LD="${LD-ld} -m elf_i386_fbsd"
+ ;;
+ x86_64-*linux*)
+ LD="${LD-ld} -m elf_i386"
+ ;;
+ ppc64-*linux*|powerpc64-*linux*)
+ LD="${LD-ld} -m elf32ppclinux"
+ ;;
+ s390x-*linux*)
+ LD="${LD-ld} -m elf_s390"
+ ;;
+ sparc64-*linux*)
+ LD="${LD-ld} -m elf32_sparc"
+ ;;
+ esac
+ ;;
+ *64-bit*)
+ case $host in
+ x86_64-*kfreebsd*-gnu)
+ LD="${LD-ld} -m elf_x86_64_fbsd"
+ ;;
+ x86_64-*linux*)
+ LD="${LD-ld} -m elf_x86_64"
+ ;;
+ ppc*-*linux*|powerpc*-*linux*)
+ LD="${LD-ld} -m elf64ppc"
+ ;;
+ s390*-*linux*|s390*-*tpf*)
+ LD="${LD-ld} -m elf64_s390"
+ ;;
+ sparc*-*linux*)
+ LD="${LD-ld} -m elf64_sparc"
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+
+*-*-sco3.2v5*)
+ # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+ SAVE_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -belf"
+ AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
+ [AC_LANG_PUSH(C)
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
+ AC_LANG_POP])
+ if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+ # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+ CFLAGS="$SAVE_CFLAGS"
+ fi
+ ;;
+sparc*-*solaris*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ case `/usr/bin/file conftest.o` in
+ *64-bit*)
+ case $lt_cv_prog_gnu_ld in
+ yes*) LD="${LD-ld} -m elf64_sparc" ;;
+ *)
+ if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+ LD="${LD-ld} -64"
+ fi
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+esac
+
+need_locks="$enable_libtool_lock"
+])# _LT_ENABLE_LOCK
+
+
+# _LT_CMD_OLD_ARCHIVE
+# -------------------
+m4_defun([_LT_CMD_OLD_ARCHIVE],
+[AC_CHECK_TOOL(AR, ar, false)
+test -z "$AR" && AR=ar
+test -z "$AR_FLAGS" && AR_FLAGS=cru
+_LT_DECL([], [AR], [1], [The archiver])
+_LT_DECL([], [AR_FLAGS], [1])
+
+AC_CHECK_TOOL(STRIP, strip, :)
+test -z "$STRIP" && STRIP=:
+_LT_DECL([], [STRIP], [1], [A symbol stripping program])
+
+AC_CHECK_TOOL(RANLIB, ranlib, :)
+test -z "$RANLIB" && RANLIB=:
+_LT_DECL([], [RANLIB], [1],
+ [Commands used to install an old-style archive])
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+ case $host_os in
+ openbsd*)
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
+ ;;
+ *)
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
+ ;;
+ esac
+ old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+fi
+_LT_DECL([], [old_postinstall_cmds], [2])
+_LT_DECL([], [old_postuninstall_cmds], [2])
+_LT_TAGDECL([], [old_archive_cmds], [2],
+ [Commands used to build an old-style archive])
+])# _LT_CMD_OLD_ARCHIVE
+
+
+# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------------------
+# Check whether the given compiler option works
+AC_DEFUN([_LT_COMPILER_OPTION],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
+ [$2=no
+ m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="$3"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+ $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+ $2=yes
+ fi
+ fi
+ $RM conftest*
+])
+
+if test x"[$]$2" = xyes; then
+ m4_if([$5], , :, [$5])
+else
+ m4_if([$6], , :, [$6])
+fi
+])# _LT_COMPILER_OPTION
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [])
+
+
+# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+# [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------
+# Check whether the given linker option works
+AC_DEFUN([_LT_LINKER_OPTION],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
+ [$2=no
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS $3"
+ echo "$lt_simple_link_test_code" > conftest.$ac_ext
+ if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+ # The linker can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test -s conftest.err; then
+ # Append any errors to the config.log.
+ cat conftest.err 1>&AS_MESSAGE_LOG_FD
+ $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if diff conftest.exp conftest.er2 >/dev/null; then
+ $2=yes
+ fi
+ else
+ $2=yes
+ fi
+ fi
+ $RM -r conftest*
+ LDFLAGS="$save_LDFLAGS"
+])
+
+if test x"[$]$2" = xyes; then
+ m4_if([$4], , :, [$4])
+else
+ m4_if([$5], , :, [$5])
+fi
+])# _LT_LINKER_OPTION
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], [])
+
+
+# LT_CMD_MAX_LEN
+#---------------
+AC_DEFUN([LT_CMD_MAX_LEN],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+# find the maximum length of command line arguments
+AC_MSG_CHECKING([the maximum length of command line arguments])
+AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
+ i=0
+ teststring="ABCD"
+
+ case $build_os in
+ msdosdjgpp*)
+ # On DJGPP, this test can blow up pretty badly due to problems in libc
+ # (any single argument exceeding 2000 bytes causes a buffer overrun
+ # during glob expansion). Even if it were fixed, the result of this
+ # check would be larger than it should be.
+ lt_cv_sys_max_cmd_len=12288; # 12K is about right
+ ;;
+
+ gnu*)
+ # Under GNU Hurd, this test is not required because there is
+ # no limit to the length of command line arguments.
+ # Libtool will interpret -1 as no limit whatsoever
+ lt_cv_sys_max_cmd_len=-1;
+ ;;
+
+ cygwin* | mingw* | cegcc*)
+ # On Win9x/ME, this test blows up -- it succeeds, but takes
+ # about 5 minutes as the teststring grows exponentially.
+ # Worse, since 9x/ME are not pre-emptively multitasking,
+ # you end up with a "frozen" computer, even though with patience
+ # the test eventually succeeds (with a max line length of 256k).
+ # Instead, let's just punt: use the minimum linelength reported by
+ # all of the supported platforms: 8192 (on NT/2K/XP).
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ amigaos*)
+ # On AmigaOS with pdksh, this test takes hours, literally.
+ # So we just punt and use a minimum line length of 8192.
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
+ # This has been around since 386BSD, at least. Likely further.
+ if test -x /sbin/sysctl; then
+ lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+ elif test -x /usr/sbin/sysctl; then
+ lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+ else
+ lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs
+ fi
+ # And add a safety zone
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+ ;;
+
+ interix*)
+ # We know the value 262144 and hardcode it with a safety zone (like BSD)
+ lt_cv_sys_max_cmd_len=196608
+ ;;
+
+ osf*)
+ # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+ # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+ # nice to cause kernel panics so lets avoid the loop below.
+ # First set a reasonable default.
+ lt_cv_sys_max_cmd_len=16384
+ #
+ if test -x /sbin/sysconfig; then
+ case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+ *1*) lt_cv_sys_max_cmd_len=-1 ;;
+ esac
+ fi
+ ;;
+ sco3.2v5*)
+ lt_cv_sys_max_cmd_len=102400
+ ;;
+ sysv5* | sco5v6* | sysv4.2uw2*)
+ kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+ if test -n "$kargmax"; then
+ lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'`
+ else
+ lt_cv_sys_max_cmd_len=32768
+ fi
+ ;;
+ *)
+ lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+ if test -n "$lt_cv_sys_max_cmd_len"; then
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+ else
+ # Make teststring a little bigger before we do anything with it.
+ # a 1K string should be a reasonable start.
+ for i in 1 2 3 4 5 6 7 8 ; do
+ teststring=$teststring$teststring
+ done
+ SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+ # If test is not a shell built-in, we'll probably end up computing a
+ # maximum length that is only half of the actual maximum length, but
+ # we can't tell.
+ while { test "X"`$SHELL [$]0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \
+ = "XX$teststring$teststring"; } >/dev/null 2>&1 &&
+ test $i != 17 # 1/2 MB should be enough
+ do
+ i=`expr $i + 1`
+ teststring=$teststring$teststring
+ done
+ # Only check the string length outside the loop.
+ lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+ teststring=
+ # Add a significant safety factor because C++ compilers can tack on
+ # massive amounts of additional arguments before passing them to the
+ # linker. It appears as though 1/2 is a usable value.
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+ fi
+ ;;
+ esac
+])
+if test -n $lt_cv_sys_max_cmd_len ; then
+ AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
+else
+ AC_MSG_RESULT(none)
+fi
+max_cmd_len=$lt_cv_sys_max_cmd_len
+_LT_DECL([], [max_cmd_len], [0],
+ [What is the maximum length of a command?])
+])# LT_CMD_MAX_LEN
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [])
+
+
+# _LT_HEADER_DLFCN
+# ----------------
+m4_defun([_LT_HEADER_DLFCN],
+[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl
+])# _LT_HEADER_DLFCN
+
+
+# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
+# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
+# ----------------------------------------------------------------
+m4_defun([_LT_TRY_DLOPEN_SELF],
+[m4_require([_LT_HEADER_DLFCN])dnl
+if test "$cross_compiling" = yes; then :
+ [$4]
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+[#line __oline__ "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ /* dlclose (self); */
+ }
+ else
+ puts (dlerror ());
+
+ return status;
+}]
+_LT_EOF
+ if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
+ (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) $1 ;;
+ x$lt_dlneed_uscore) $2 ;;
+ x$lt_dlunknown|x*) $3 ;;
+ esac
+ else :
+ # compilation failed
+ $3
+ fi
+fi
+rm -fr conftest*
+])# _LT_TRY_DLOPEN_SELF
+
+
+# LT_SYS_DLOPEN_SELF
+# ------------------
+AC_DEFUN([LT_SYS_DLOPEN_SELF],
+[m4_require([_LT_HEADER_DLFCN])dnl
+if test "x$enable_dlopen" != xyes; then
+ enable_dlopen=unknown
+ enable_dlopen_self=unknown
+ enable_dlopen_self_static=unknown
+else
+ lt_cv_dlopen=no
+ lt_cv_dlopen_libs=
+
+ case $host_os in
+ beos*)
+ lt_cv_dlopen="load_add_on"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+ ;;
+
+ mingw* | pw32* | cegcc*)
+ lt_cv_dlopen="LoadLibrary"
+ lt_cv_dlopen_libs=
+ ;;
+
+ cygwin*)
+ lt_cv_dlopen="dlopen"
+ lt_cv_dlopen_libs=
+ ;;
+
+ darwin*)
+ # if libdl is installed we need to link against it
+ AC_CHECK_LIB([dl], [dlopen],
+ [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[
+ lt_cv_dlopen="dyld"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+ ])
+ ;;
+
+ *)
+ AC_CHECK_FUNC([shl_load],
+ [lt_cv_dlopen="shl_load"],
+ [AC_CHECK_LIB([dld], [shl_load],
+ [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"],
+ [AC_CHECK_FUNC([dlopen],
+ [lt_cv_dlopen="dlopen"],
+ [AC_CHECK_LIB([dl], [dlopen],
+ [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
+ [AC_CHECK_LIB([svld], [dlopen],
+ [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
+ [AC_CHECK_LIB([dld], [dld_link],
+ [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"])
+ ])
+ ])
+ ])
+ ])
+ ])
+ ;;
+ esac
+
+ if test "x$lt_cv_dlopen" != xno; then
+ enable_dlopen=yes
+ else
+ enable_dlopen=no
+ fi
+
+ case $lt_cv_dlopen in
+ dlopen)
+ save_CPPFLAGS="$CPPFLAGS"
+ test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+ save_LDFLAGS="$LDFLAGS"
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+ save_LIBS="$LIBS"
+ LIBS="$lt_cv_dlopen_libs $LIBS"
+
+ AC_CACHE_CHECK([whether a program can dlopen itself],
+ lt_cv_dlopen_self, [dnl
+ _LT_TRY_DLOPEN_SELF(
+ lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
+ lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
+ ])
+
+ if test "x$lt_cv_dlopen_self" = xyes; then
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+ AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
+ lt_cv_dlopen_self_static, [dnl
+ _LT_TRY_DLOPEN_SELF(
+ lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
+ lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross)
+ ])
+ fi
+
+ CPPFLAGS="$save_CPPFLAGS"
+ LDFLAGS="$save_LDFLAGS"
+ LIBS="$save_LIBS"
+ ;;
+ esac
+
+ case $lt_cv_dlopen_self in
+ yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+ *) enable_dlopen_self=unknown ;;
+ esac
+
+ case $lt_cv_dlopen_self_static in
+ yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+ *) enable_dlopen_self_static=unknown ;;
+ esac
+fi
+_LT_DECL([dlopen_support], [enable_dlopen], [0],
+ [Whether dlopen is supported])
+_LT_DECL([dlopen_self], [enable_dlopen_self], [0],
+ [Whether dlopen of programs is supported])
+_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0],
+ [Whether dlopen of statically linked programs is supported])
+])# LT_SYS_DLOPEN_SELF
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [])
+
+
+# _LT_COMPILER_C_O([TAGNAME])
+# ---------------------------
+# Check to see if options -c and -o are simultaneously supported by compiler.
+# This macro does not hard code the compiler like AC_PROG_CC_C_O.
+m4_defun([_LT_COMPILER_C_O],
+[m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
+ [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
+ [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
+ $RM -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&AS_MESSAGE_LOG_FD
+ echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+ _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+ fi
+ fi
+ chmod u+w . 2>&AS_MESSAGE_LOG_FD
+ $RM conftest*
+ # SGI C++ compiler will create directory out/ii_files/ for
+ # template instantiation
+ test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+ $RM out/* && rmdir out
+ cd ..
+ $RM -r conftest
+ $RM conftest*
+])
+_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1],
+ [Does compiler simultaneously support -c and -o options?])
+])# _LT_COMPILER_C_O
+
+
+# _LT_COMPILER_FILE_LOCKS([TAGNAME])
+# ----------------------------------
+# Check to see if we can do hard links to lock some files if needed
+m4_defun([_LT_COMPILER_FILE_LOCKS],
+[m4_require([_LT_ENABLE_LOCK])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+_LT_COMPILER_C_O([$1])
+
+hard_links="nottested"
+if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then
+ # do not overwrite the value of need_locks provided by the user
+ AC_MSG_CHECKING([if we can lock with hard links])
+ hard_links=yes
+ $RM conftest*
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ touch conftest.a
+ ln conftest.a conftest.b 2>&5 || hard_links=no
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ AC_MSG_RESULT([$hard_links])
+ if test "$hard_links" = no; then
+ AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe])
+ need_locks=warn
+ fi
+else
+ need_locks=no
+fi
+_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?])
+])# _LT_COMPILER_FILE_LOCKS
+
+
+# _LT_CHECK_OBJDIR
+# ----------------
+m4_defun([_LT_CHECK_OBJDIR],
+[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],
+[rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+ lt_cv_objdir=.libs
+else
+ # MS-DOS does not allow filenames that begin with a dot.
+ lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null])
+objdir=$lt_cv_objdir
+_LT_DECL([], [objdir], [0],
+ [The name of the directory that contains temporary libtool files])dnl
+m4_pattern_allow([LT_OBJDIR])dnl
+AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/",
+ [Define to the sub-directory in which libtool stores uninstalled libraries.])
+])# _LT_CHECK_OBJDIR
+
+
+# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME])
+# --------------------------------------
+# Check hardcoding attributes.
+m4_defun([_LT_LINKER_HARDCODE_LIBPATH],
+[AC_MSG_CHECKING([how to hardcode library paths into programs])
+_LT_TAGVAR(hardcode_action, $1)=
+if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" ||
+ test -n "$_LT_TAGVAR(runpath_var, $1)" ||
+ test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then
+
+ # We can hardcode non-existent directories.
+ if test "$_LT_TAGVAR(hardcode_direct, $1)" != no &&
+ # If the only mechanism to avoid hardcoding is shlibpath_var, we
+ # have to relink, otherwise we might link with an installed library
+ # when we should be linking with a yet-to-be-installed one
+ ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no &&
+ test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then
+ # Linking always hardcodes the temporary library directory.
+ _LT_TAGVAR(hardcode_action, $1)=relink
+ else
+ # We can link without hardcoding, and we can hardcode nonexisting dirs.
+ _LT_TAGVAR(hardcode_action, $1)=immediate
+ fi
+else
+ # We cannot hardcode anything, or else we can only hardcode existing
+ # directories.
+ _LT_TAGVAR(hardcode_action, $1)=unsupported
+fi
+AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)])
+
+if test "$_LT_TAGVAR(hardcode_action, $1)" = relink ||
+ test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then
+ # Fast installation is not supported
+ enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+ test "$enable_shared" = no; then
+ # Fast installation is not necessary
+ enable_fast_install=needless
+fi
+_LT_TAGDECL([], [hardcode_action], [0],
+ [How to hardcode a shared library path into an executable])
+])# _LT_LINKER_HARDCODE_LIBPATH
+
+
+# _LT_CMD_STRIPLIB
+# ----------------
+m4_defun([_LT_CMD_STRIPLIB],
+[m4_require([_LT_DECL_EGREP])
+striplib=
+old_striplib=
+AC_MSG_CHECKING([whether stripping libraries is possible])
+if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+ test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+ test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+ AC_MSG_RESULT([yes])
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+ case $host_os in
+ darwin*)
+ if test -n "$STRIP" ; then
+ striplib="$STRIP -x"
+ old_striplib="$STRIP -S"
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ fi
+ ;;
+ *)
+ AC_MSG_RESULT([no])
+ ;;
+ esac
+fi
+_LT_DECL([], [old_striplib], [1], [Commands to strip libraries])
+_LT_DECL([], [striplib], [1])
+])# _LT_CMD_STRIPLIB
+
+
+# _LT_SYS_DYNAMIC_LINKER([TAG])
+# -----------------------------
+# PORTME Fill in your ld.so characteristics
+m4_defun([_LT_SYS_DYNAMIC_LINKER],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_OBJDUMP])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_MSG_CHECKING([dynamic linker characteristics])
+m4_if([$1],
+ [], [
+if test "$GCC" = yes; then
+ case $host_os in
+ darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
+ *) lt_awk_arg="/^libraries:/" ;;
+ esac
+ lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+ if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then
+ # if the path contains ";" then we assume it to be the separator
+ # otherwise default to the standard path separator (i.e. ":") - it is
+ # assumed that no part of a normal pathname contains ";" but that should
+ # okay in the real world where ";" in dirpaths is itself problematic.
+ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+ # Ok, now we have the path, separated by spaces, we can step through it
+ # and add multilib dir if necessary.
+ lt_tmp_lt_search_path_spec=
+ lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+ for lt_sys_path in $lt_search_path_spec; do
+ if test -d "$lt_sys_path/$lt_multi_os_dir"; then
+ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
+ else
+ test -d "$lt_sys_path" && \
+ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+ fi
+ done
+ lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk '
+BEGIN {RS=" "; FS="/|\n";} {
+ lt_foo="";
+ lt_count=0;
+ for (lt_i = NF; lt_i > 0; lt_i--) {
+ if ($lt_i != "" && $lt_i != ".") {
+ if ($lt_i == "..") {
+ lt_count++;
+ } else {
+ if (lt_count == 0) {
+ lt_foo="/" $lt_i lt_foo;
+ } else {
+ lt_count--;
+ }
+ }
+ }
+ }
+ if (lt_foo != "") { lt_freq[[lt_foo]]++; }
+ if (lt_freq[[lt_foo]] == 1) { print lt_foo; }
+}'`
+ sys_lib_search_path_spec=`$ECHO $lt_search_path_spec`
+else
+ sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi])
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+ shlibpath_var=LIBPATH
+
+ # AIX 3 has no versioning support, so we append a major version to the name.
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+
+aix[[4-9]]*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ hardcode_into_libs=yes
+ if test "$host_cpu" = ia64; then
+ # AIX 5 supports IA64
+ library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ else
+ # With GCC up to 2.95.x, collect2 would create an import file
+ # for dependence libraries. The import file would start with
+ # the line `#! .'. This would cause the generated library to
+ # depend on `.', always an invalid library. This was fixed in
+ # development snapshots of GCC prior to 3.0.
+ case $host_os in
+ aix4 | aix4.[[01]] | aix4.[[01]].*)
+ if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+ echo ' yes '
+ echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+ :
+ else
+ can_build_shared=no
+ fi
+ ;;
+ esac
+ # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+ # soname into executable. Probably we can add versioning support to
+ # collect2, so additional links can be useful in future.
+ if test "$aix_use_runtimelinking" = yes; then
+ # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+ # instead of lib<name>.a to let people know that these are not
+ # typical AIX shared libraries.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ else
+ # We preserve .a as extension for shared libraries through AIX4.2
+ # and later when we are not doing run time linking.
+ library_names_spec='${libname}${release}.a $libname.a'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ fi
+ shlibpath_var=LIBPATH
+ fi
+ ;;
+
+amigaos*)
+ case $host_cpu in
+ powerpc)
+ # Since July 2007 AmigaOS4 officially supports .so libraries.
+ # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ ;;
+ m68k)
+ library_names_spec='$libname.ixlibrary $libname.a'
+ # Create ${libname}_ixlibrary.a entries in /sys/libs.
+ finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+ ;;
+ esac
+ ;;
+
+beos*)
+ library_names_spec='${libname}${shared_ext}'
+ dynamic_linker="$host_os ld.so"
+ shlibpath_var=LIBRARY_PATH
+ ;;
+
+bsdi[[45]]*)
+ version_type=linux
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+ sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+ # the default ld.so.conf also contains /usr/contrib/lib and
+ # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+ # libtool to hard-code these into programs
+ ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+ version_type=windows
+ shrext_cmds=".dll"
+ need_version=no
+ need_lib_prefix=no
+
+ case $GCC,$host_os in
+ yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
+ library_names_spec='$libname.dll.a'
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \${file}`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname~
+ chmod a+x \$dldir/$dlname~
+ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+ eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+ fi'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $RM \$dlpath'
+ shlibpath_overrides_runpath=yes
+
+ case $host_os in
+ cygwin*)
+ # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+ soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+ sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+ ;;
+ mingw* | cegcc*)
+ # MinGW DLLs use traditional 'lib' prefix
+ soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+ sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+ if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then
+ # It is most probably a Windows format PATH printed by
+ # mingw gcc, but we are running on Cygwin. Gcc prints its search
+ # path with ; separators, and with drive letters. We can handle the
+ # drive letters (cygwin fileutils understands them), so leave them,
+ # especially as we might pass files found there to a mingw objdump,
+ # which wouldn't understand a cygwinified path. Ahh.
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+ ;;
+ pw32*)
+ # pw32 DLLs use 'pw' prefix rather than 'lib'
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+ ;;
+ esac
+ ;;
+
+ *)
+ library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
+ ;;
+ esac
+ dynamic_linker='Win32 ld.exe'
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ ;;
+
+darwin* | rhapsody*)
+ dynamic_linker="$host_os dyld"
+ version_type=darwin
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+ soname_spec='${libname}${release}${major}$shared_ext'
+ shlibpath_overrides_runpath=yes
+ shlibpath_var=DYLD_LIBRARY_PATH
+ shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+m4_if([$1], [],[
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"])
+ sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+ ;;
+
+dgux*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+freebsd1*)
+ dynamic_linker=no
+ ;;
+
+freebsd* | dragonfly*)
+ # DragonFly does not have aout. When/if they implement a new
+ # versioning mechanism, adjust this.
+ if test -x /usr/bin/objformat; then
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+ freebsd[[123]]*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+ version_type=freebsd-$objformat
+ case $version_type in
+ freebsd-elf*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ need_version=no
+ need_lib_prefix=no
+ ;;
+ freebsd-*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+ need_version=yes
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+ freebsd2*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[[01]]* | freebsdelf3.[[01]]*)
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \
+ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1)
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+ *) # from 4.6 on, and DragonFly
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ esac
+ ;;
+
+gnu*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ hardcode_into_libs=yes
+ ;;
+
+hpux9* | hpux10* | hpux11*)
+ # Give a soname corresponding to the major version so that dld.sl refuses to
+ # link against other versions.
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ case $host_cpu in
+ ia64*)
+ shrext_cmds='.so'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.so"
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ if test "X$HPUX_IA64_MODE" = X32; then
+ sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+ else
+ sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+ fi
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ hppa*64*)
+ shrext_cmds='.sl'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ *)
+ shrext_cmds='.sl'
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=SHLIB_PATH
+ shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+ esac
+ # HP-UX runs *really* slowly unless shared libraries are mode 555.
+ postinstall_cmds='chmod 555 $lib'
+ ;;
+
+interix[[3-9]]*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $host_os in
+ nonstopux*) version_type=nonstopux ;;
+ *)
+ if test "$lt_cv_prog_gnu_ld" = yes; then
+ version_type=linux
+ else
+ version_type=irix
+ fi ;;
+ esac
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+ case $host_os in
+ irix5* | nonstopux*)
+ libsuff= shlibsuff=
+ ;;
+ *)
+ case $LD in # libtool.m4 will add one of these switches to LD
+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+ libsuff= shlibsuff= libmagic=32-bit;;
+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+ libsuff=32 shlibsuff=N32 libmagic=N32;;
+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+ libsuff=64 shlibsuff=64 libmagic=64-bit;;
+ *) libsuff= shlibsuff= libmagic=never-match;;
+ esac
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+ sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+ hardcode_into_libs=yes
+ ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+ dynamic_linker=no
+ ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ # Some binutils ld are patched to set DT_RUNPATH
+ save_LDFLAGS=$LDFLAGS
+ save_libdir=$libdir
+ eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \
+ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\""
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+ [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null],
+ [shlibpath_overrides_runpath=yes])])
+ LDFLAGS=$save_LDFLAGS
+ libdir=$save_libdir
+
+ # This implies no fast_install, which is unacceptable.
+ # Some rework will be needed to allow for fast_install
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+ # Append ld.so.conf contents to the search path
+ if test -f /etc/ld.so.conf; then
+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+ sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+ fi
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+ # powerpc, because MkLinux only supported shared libraries with the
+ # GNU dynamic linker. Since this was broken with cross compilers,
+ # most powerpc-linux boxes support dynamic linking these days and
+ # people can always --disable-shared, the test was removed, and we
+ # assume the GNU/Linux dynamic linker is in use.
+ dynamic_linker='GNU/Linux ld.so'
+ ;;
+
+netbsdelf*-gnu)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='NetBSD ld.elf_so'
+ ;;
+
+netbsd*)
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ dynamic_linker='NetBSD (a.out) ld.so'
+ else
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='NetBSD ld.elf_so'
+ fi
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+
+newsos6)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
+*nto* | *qnx*)
+ version_type=qnx
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='ldqnx.so'
+ ;;
+
+openbsd*)
+ version_type=sunos
+ sys_lib_dlsearch_path_spec="/usr/lib"
+ need_lib_prefix=no
+ # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+ case $host_os in
+ openbsd3.3 | openbsd3.3.*) need_version=yes ;;
+ *) need_version=no ;;
+ esac
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ case $host_os in
+ openbsd2.[[89]] | openbsd2.[[89]].*)
+ shlibpath_overrides_runpath=no
+ ;;
+ *)
+ shlibpath_overrides_runpath=yes
+ ;;
+ esac
+ else
+ shlibpath_overrides_runpath=yes
+ fi
+ ;;
+
+os2*)
+ libname_spec='$name'
+ shrext_cmds=".dll"
+ need_lib_prefix=no
+ library_names_spec='$libname${shared_ext} $libname.a'
+ dynamic_linker='OS/2 ld.exe'
+ shlibpath_var=LIBPATH
+ ;;
+
+osf3* | osf4* | osf5*)
+ version_type=osf
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+ sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+ ;;
+
+rdos*)
+ dynamic_linker=no
+ ;;
+
+solaris*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ # ldd complains unless libraries are executable
+ postinstall_cmds='chmod +x $lib'
+ ;;
+
+sunos4*)
+ version_type=sunos
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ if test "$with_gnu_ld" = yes; then
+ need_lib_prefix=no
+ fi
+ need_version=yes
+ ;;
+
+sysv4 | sysv4.3*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_vendor in
+ sni)
+ shlibpath_overrides_runpath=no
+ need_lib_prefix=no
+ runpath_var=LD_RUN_PATH
+ ;;
+ siemens)
+ need_lib_prefix=no
+ ;;
+ motorola)
+ need_lib_prefix=no
+ need_version=no
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+ ;;
+ esac
+ ;;
+
+sysv4*MP*)
+ if test -d /usr/nec ;then
+ version_type=linux
+ library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+ soname_spec='$libname${shared_ext}.$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ fi
+ ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ version_type=freebsd-elf
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ if test "$with_gnu_ld" = yes; then
+ sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+ else
+ sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+ case $host_os in
+ sco3.2v5*)
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+ ;;
+ esac
+ fi
+ sys_lib_dlsearch_path_spec='/usr/lib'
+ ;;
+
+tpf*)
+ # TPF is a cross-target only. Preferred cross-host = GNU/Linux.
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+uts4*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+*)
+ dynamic_linker=no
+ ;;
+esac
+AC_MSG_RESULT([$dynamic_linker])
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+ variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
+ sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+fi
+if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
+ sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+fi
+
+_LT_DECL([], [variables_saved_for_relink], [1],
+ [Variables whose values should be saved in libtool wrapper scripts and
+ restored at link time])
+_LT_DECL([], [need_lib_prefix], [0],
+ [Do we need the "lib" prefix for modules?])
+_LT_DECL([], [need_version], [0], [Do we need a version for libraries?])
+_LT_DECL([], [version_type], [0], [Library versioning type])
+_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable])
+_LT_DECL([], [shlibpath_var], [0],[Shared library path variable])
+_LT_DECL([], [shlibpath_overrides_runpath], [0],
+ [Is shlibpath searched before the hard-coded library search path?])
+_LT_DECL([], [libname_spec], [1], [Format of library name prefix])
+_LT_DECL([], [library_names_spec], [1],
+ [[List of archive names. First name is the real one, the rest are links.
+ The last name is the one that the linker finds with -lNAME]])
+_LT_DECL([], [soname_spec], [1],
+ [[The coded name of the library, if different from the real name]])
+_LT_DECL([], [postinstall_cmds], [2],
+ [Command to use after installation of a shared archive])
+_LT_DECL([], [postuninstall_cmds], [2],
+ [Command to use after uninstallation of a shared archive])
+_LT_DECL([], [finish_cmds], [2],
+ [Commands used to finish a libtool library installation in a directory])
+_LT_DECL([], [finish_eval], [1],
+ [[As "finish_cmds", except a single script fragment to be evaled but
+ not shown]])
+_LT_DECL([], [hardcode_into_libs], [0],
+ [Whether we should hardcode library paths into libraries])
+_LT_DECL([], [sys_lib_search_path_spec], [2],
+ [Compile-time system search path for libraries])
+_LT_DECL([], [sys_lib_dlsearch_path_spec], [2],
+ [Run-time system search path for libraries])
+])# _LT_SYS_DYNAMIC_LINKER
+
+
+# _LT_PATH_TOOL_PREFIX(TOOL)
+# --------------------------
+# find a file program which can recognize shared library
+AC_DEFUN([_LT_PATH_TOOL_PREFIX],
+[m4_require([_LT_DECL_EGREP])dnl
+AC_MSG_CHECKING([for $1])
+AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
+[case $MAGIC_CMD in
+[[\\/*] | ?:[\\/]*])
+ lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+ ;;
+*)
+ lt_save_MAGIC_CMD="$MAGIC_CMD"
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+dnl $ac_dummy forces splitting on constant user-supplied paths.
+dnl POSIX.2 word splitting is done only on the output of word expansions,
+dnl not every word. This closes a longstanding sh security hole.
+ ac_dummy="m4_if([$2], , $PATH, [$2])"
+ for ac_dir in $ac_dummy; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$1; then
+ lt_cv_path_MAGIC_CMD="$ac_dir/$1"
+ if test -n "$file_magic_test_file"; then
+ case $deplibs_check_method in
+ "file_magic "*)
+ file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+ MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+ $EGREP "$file_magic_regex" > /dev/null; then
+ :
+ else
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such. This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem. Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+ fi ;;
+ esac
+ fi
+ break
+ fi
+ done
+ IFS="$lt_save_ifs"
+ MAGIC_CMD="$lt_save_MAGIC_CMD"
+ ;;
+esac])
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+ AC_MSG_RESULT($MAGIC_CMD)
+else
+ AC_MSG_RESULT(no)
+fi
+_LT_DECL([], [MAGIC_CMD], [0],
+ [Used to examine libraries when file_magic_cmd begins with "file"])dnl
+])# _LT_PATH_TOOL_PREFIX
+
+# Old name:
+AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], [])
+
+
+# _LT_PATH_MAGIC
+# --------------
+# find a file program which can recognize a shared library
+m4_defun([_LT_PATH_MAGIC],
+[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+ if test -n "$ac_tool_prefix"; then
+ _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
+ else
+ MAGIC_CMD=:
+ fi
+fi
+])# _LT_PATH_MAGIC
+
+
+# LT_PATH_LD
+# ----------
+# find the pathname to the GNU or non-GNU linker
+AC_DEFUN([LT_PATH_LD],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_DECL_EGREP])dnl
+
+AC_ARG_WITH([gnu-ld],
+ [AS_HELP_STRING([--with-gnu-ld],
+ [assume the C compiler uses GNU ld @<:@default=no@:>@])],
+ [test "$withval" = no || with_gnu_ld=yes],
+ [with_gnu_ld=no])dnl
+
+ac_prog=ld
+if test "$GCC" = yes; then
+ # Check if gcc -print-prog-name=ld gives a path.
+ AC_MSG_CHECKING([for ld used by $CC])
+ case $host in
+ *-*-mingw*)
+ # gcc leaves a trailing carriage return which upsets mingw
+ ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+ *)
+ ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+ esac
+ case $ac_prog in
+ # Accept absolute paths.
+ [[\\/]]* | ?:[[\\/]]*)
+ re_direlt='/[[^/]][[^/]]*/\.\./'
+ # Canonicalize the pathname of ld
+ ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+ while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+ ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+ done
+ test -z "$LD" && LD="$ac_prog"
+ ;;
+ "")
+ # If it fails, then pretend we aren't using GCC.
+ ac_prog=ld
+ ;;
+ *)
+ # If it is relative, then search for the first ld in PATH.
+ with_gnu_ld=unknown
+ ;;
+ esac
+elif test "$with_gnu_ld" = yes; then
+ AC_MSG_CHECKING([for GNU ld])
+else
+ AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL(lt_cv_path_LD,
+[if test -z "$LD"; then
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+ lt_cv_path_LD="$ac_dir/$ac_prog"
+ # Check to see if the program is GNU ld. I'd rather use --version,
+ # but apparently some variants of GNU ld only accept -v.
+ # Break only if it was the GNU/non-GNU ld that we prefer.
+ case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+ *GNU* | *'with BFD'*)
+ test "$with_gnu_ld" != no && break
+ ;;
+ *)
+ test "$with_gnu_ld" != yes && break
+ ;;
+ esac
+ fi
+ done
+ IFS="$lt_save_ifs"
+else
+ lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi])
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+ AC_MSG_RESULT($LD)
+else
+ AC_MSG_RESULT(no)
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+_LT_PATH_LD_GNU
+AC_SUBST([LD])
+
+_LT_TAGDECL([], [LD], [1], [The linker used to build libraries])
+])# LT_PATH_LD
+
+# Old names:
+AU_ALIAS([AM_PROG_LD], [LT_PATH_LD])
+AU_ALIAS([AC_PROG_LD], [LT_PATH_LD])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_PROG_LD], [])
+dnl AC_DEFUN([AC_PROG_LD], [])
+
+
+# _LT_PATH_LD_GNU
+#- --------------
+m4_defun([_LT_PATH_LD_GNU],
+[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
+[# I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+ lt_cv_prog_gnu_ld=yes
+ ;;
+*)
+ lt_cv_prog_gnu_ld=no
+ ;;
+esac])
+with_gnu_ld=$lt_cv_prog_gnu_ld
+])# _LT_PATH_LD_GNU
+
+
+# _LT_CMD_RELOAD
+# --------------
+# find reload flag for linker
+# -- PORTME Some linkers may need a different reload flag.
+m4_defun([_LT_CMD_RELOAD],
+[AC_CACHE_CHECK([for $LD option to reload object files],
+ lt_cv_ld_reload_flag,
+ [lt_cv_ld_reload_flag='-r'])
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+ darwin*)
+ if test "$GCC" = yes; then
+ reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+ else
+ reload_cmds='$LD$reload_flag -o $output$reload_objs'
+ fi
+ ;;
+esac
+_LT_DECL([], [reload_flag], [1], [How to create reloadable object files])dnl
+_LT_DECL([], [reload_cmds], [2])dnl
+])# _LT_CMD_RELOAD
+
+
+# _LT_CHECK_MAGIC_METHOD
+# ----------------------
+# how to check for library dependencies
+# -- PORTME fill in with the dynamic library characteristics
+m4_defun([_LT_CHECK_MAGIC_METHOD],
+[m4_require([_LT_DECL_EGREP])
+m4_require([_LT_DECL_OBJDUMP])
+AC_CACHE_CHECK([how to recognize dependent libraries],
+lt_cv_deplibs_check_method,
+[lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix[[4-9]]*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+beos*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+bsdi[[45]]*)
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
+ lt_cv_file_magic_cmd='/usr/bin/file -L'
+ lt_cv_file_magic_test_file=/shlib/libc.so
+ ;;
+
+cygwin*)
+ # func_win32_libid is a shell function defined in ltmain.sh
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ ;;
+
+mingw* | pw32*)
+ # Base MSYS/MinGW do not provide the 'file' command needed by
+ # func_win32_libid shell function, so use a weaker test based on 'objdump',
+ # unless we find 'file', for example because we are cross-compiling.
+ if ( file / ) >/dev/null 2>&1; then
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ else
+ lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ fi
+ ;;
+
+cegcc)
+ # use the weaker test based on 'objdump'. See mingw*.
+ lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ ;;
+
+darwin* | rhapsody*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+freebsd* | dragonfly*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+ case $host_cpu in
+ i*86 )
+ # Not sure whether the presence of OpenBSD here was a mistake.
+ # Let's accept both of them until this is cleared up.
+ lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library'
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+ ;;
+ esac
+ else
+ lt_cv_deplibs_check_method=pass_all
+ fi
+ ;;
+
+gnu*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+hpux10.20* | hpux11*)
+ lt_cv_file_magic_cmd=/usr/bin/file
+ case $host_cpu in
+ ia64*)
+ lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
+ lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+ ;;
+ hppa*64*)
+ [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]']
+ lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+ ;;
+ *)
+ lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library'
+ lt_cv_file_magic_test_file=/usr/lib/libc.sl
+ ;;
+ esac
+ ;;
+
+interix[[3-9]]*)
+ # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$'
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $LD in
+ *-32|*"-32 ") libmagic=32-bit;;
+ *-n32|*"-n32 ") libmagic=N32;;
+ *-64|*"-64 ") libmagic=64-bit;;
+ *) libmagic=never-match;;
+ esac
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+netbsd* | netbsdelf*-gnu)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$'
+ fi
+ ;;
+
+newos6*)
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=/usr/lib/libnls.so
+ ;;
+
+*nto* | *qnx*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+openbsd*)
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+ fi
+ ;;
+
+osf3* | osf4* | osf5*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+rdos*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+solaris*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+sysv4 | sysv4.3*)
+ case $host_vendor in
+ motorola)
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+ ;;
+ ncr)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ sequent)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
+ ;;
+ sni)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
+ lt_cv_file_magic_test_file=/lib/libc.so
+ ;;
+ siemens)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ pc)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ esac
+ ;;
+
+tpf*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+esac
+])
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+_LT_DECL([], [deplibs_check_method], [1],
+ [Method to check whether dependent libraries are shared objects])
+_LT_DECL([], [file_magic_cmd], [1],
+ [Command to use when deplibs_check_method == "file_magic"])
+])# _LT_CHECK_MAGIC_METHOD
+
+
+# LT_PATH_NM
+# ----------
+# find the pathname to a BSD- or MS-compatible name lister
+AC_DEFUN([LT_PATH_NM],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM,
+[if test -n "$NM"; then
+ # Let the user override the test.
+ lt_cv_path_NM="$NM"
+else
+ lt_nm_to_check="${ac_tool_prefix}nm"
+ if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+ lt_nm_to_check="$lt_nm_to_check nm"
+ fi
+ for lt_tmp_nm in $lt_nm_to_check; do
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ tmp_nm="$ac_dir/$lt_tmp_nm"
+ if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+ # Check to see if the nm accepts a BSD-compat flag.
+ # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+ # nm: unknown option "B" ignored
+ # Tru64's nm complains that /dev/null is an invalid object file
+ case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+ */dev/null* | *'Invalid file or object type'*)
+ lt_cv_path_NM="$tmp_nm -B"
+ break
+ ;;
+ *)
+ case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+ */dev/null*)
+ lt_cv_path_NM="$tmp_nm -p"
+ break
+ ;;
+ *)
+ lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+ continue # so that we can try to find one that supports BSD flags
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ done
+ IFS="$lt_save_ifs"
+ done
+ : ${lt_cv_path_NM=no}
+fi])
+if test "$lt_cv_path_NM" != "no"; then
+ NM="$lt_cv_path_NM"
+else
+ # Didn't find any BSD compatible name lister, look for dumpbin.
+ AC_CHECK_TOOLS(DUMPBIN, ["dumpbin -symbols" "link -dump -symbols"], :)
+ AC_SUBST([DUMPBIN])
+ if test "$DUMPBIN" != ":"; then
+ NM="$DUMPBIN"
+ fi
+fi
+test -z "$NM" && NM=nm
+AC_SUBST([NM])
+_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl
+
+AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface],
+ [lt_cv_nm_interface="BSD nm"
+ echo "int some_variable = 0;" > conftest.$ac_ext
+ (eval echo "\"\$as_me:__oline__: $ac_compile\"" >&AS_MESSAGE_LOG_FD)
+ (eval "$ac_compile" 2>conftest.err)
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD)
+ (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ (eval echo "\"\$as_me:__oline__: output\"" >&AS_MESSAGE_LOG_FD)
+ cat conftest.out >&AS_MESSAGE_LOG_FD
+ if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+ lt_cv_nm_interface="MS dumpbin"
+ fi
+ rm -f conftest*])
+])# LT_PATH_NM
+
+# Old names:
+AU_ALIAS([AM_PROG_NM], [LT_PATH_NM])
+AU_ALIAS([AC_PROG_NM], [LT_PATH_NM])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_PROG_NM], [])
+dnl AC_DEFUN([AC_PROG_NM], [])
+
+
+# LT_LIB_M
+# --------
+# check for math library
+AC_DEFUN([LT_LIB_M],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+LIBM=
+case $host in
+*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*)
+ # These system don't have libm, or don't need it
+ ;;
+*-ncr-sysv4.3*)
+ AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
+ AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
+ ;;
+*)
+ AC_CHECK_LIB(m, cos, LIBM="-lm")
+ ;;
+esac
+AC_SUBST([LIBM])
+])# LT_LIB_M
+
+# Old name:
+AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_CHECK_LIBM], [])
+
+
+# _LT_COMPILER_NO_RTTI([TAGNAME])
+# -------------------------------
+m4_defun([_LT_COMPILER_NO_RTTI],
+[m4_require([_LT_TAG_COMPILER])dnl
+
+_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+
+if test "$GCC" = yes; then
+ _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+
+ _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
+ lt_cv_prog_compiler_rtti_exceptions,
+ [-fno-rtti -fno-exceptions], [],
+ [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
+fi
+_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1],
+ [Compiler flag to turn off builtin functions])
+])# _LT_COMPILER_NO_RTTI
+
+
+# _LT_CMD_GLOBAL_SYMBOLS
+# ----------------------
+m4_defun([_LT_CMD_GLOBAL_SYMBOLS],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+AC_REQUIRE([LT_PATH_LD])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+AC_MSG_CHECKING([command to parse $NM output from $compiler object])
+AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],
+[
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix. What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[[BCDEGRST]]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+ symcode='[[BCDT]]'
+ ;;
+cygwin* | mingw* | pw32* | cegcc*)
+ symcode='[[ABCDGISTW]]'
+ ;;
+hpux*)
+ if test "$host_cpu" = ia64; then
+ symcode='[[ABCDEGRST]]'
+ fi
+ ;;
+irix* | nonstopux*)
+ symcode='[[BCDEGRST]]'
+ ;;
+osf*)
+ symcode='[[BCDEGQRST]]'
+ ;;
+solaris*)
+ symcode='[[BDRT]]'
+ ;;
+sco3.2v5*)
+ symcode='[[DT]]'
+ ;;
+sysv4.2uw2*)
+ symcode='[[DT]]'
+ ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+ symcode='[[ABDT]]'
+ ;;
+sysv4)
+ symcode='[[DFNSTU]]'
+ ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+ symcode='[[ABCDGIRSTW]]' ;;
+esac
+
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'"
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+ opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+ ;;
+esac
+
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
+
+ # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+ symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+ # Write the raw and C identifiers.
+ if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+ # Fake it for dumpbin and say T for any non-static function
+ # and D for any global variable.
+ # Also find C++ and __fastcall symbols from MSVC++,
+ # which start with @ or ?.
+ lt_cv_sys_global_symbol_pipe="$AWK ['"\
+" {last_section=section; section=\$ 3};"\
+" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+" \$ 0!~/External *\|/{next};"\
+" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+" {if(hide[section]) next};"\
+" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
+" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
+" s[1]~/^[@?]/{print s[1], s[1]; next};"\
+" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
+" ' prfx=^$ac_symprfx]"
+ else
+ lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+ fi
+
+ # Check to see that the pipe works correctly.
+ pipe_works=no
+
+ rm -f conftest*
+ cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
+
+ if AC_TRY_EVAL(ac_compile); then
+ # Now try to grab the symbols.
+ nlist=conftest.nm
+ if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then
+ # Try sorting and uniquifying the output.
+ if sort "$nlist" | uniq > "$nlist"T; then
+ mv -f "$nlist"T "$nlist"
+ else
+ rm -f "$nlist"T
+ fi
+
+ # Make sure that we snagged all the symbols we need.
+ if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+ if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+ cat <<_LT_EOF > conftest.$ac_ext
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_LT_EOF
+ # Now generate the symbol file.
+ eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+
+ cat <<_LT_EOF >> conftest.$ac_ext
+
+/* The mapping between symbol names and symbols. */
+const struct {
+ const char *name;
+ void *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[[]] =
+{
+ { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+ $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+ cat <<\_LT_EOF >> conftest.$ac_ext
+ {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+ return lt__PROGRAM__LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+_LT_EOF
+ # Now try linking the two files.
+ mv conftest.$ac_objext conftstm.$ac_objext
+ lt_save_LIBS="$LIBS"
+ lt_save_CFLAGS="$CFLAGS"
+ LIBS="conftstm.$ac_objext"
+ CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
+ if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
+ pipe_works=yes
+ fi
+ LIBS="$lt_save_LIBS"
+ CFLAGS="$lt_save_CFLAGS"
+ else
+ echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
+ fi
+ else
+ echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD
+ fi
+ else
+ echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
+ fi
+ else
+ echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD
+ cat conftest.$ac_ext >&5
+ fi
+ rm -rf conftest* conftst*
+
+ # Do not use the global_symbol_pipe unless it works.
+ if test "$pipe_works" = yes; then
+ break
+ else
+ lt_cv_sys_global_symbol_pipe=
+ fi
+done
+])
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+ lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+ AC_MSG_RESULT(failed)
+else
+ AC_MSG_RESULT(ok)
+fi
+
+_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1],
+ [Take the output of nm and produce a listing of raw symbols and C names])
+_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1],
+ [Transform the output of nm in a proper C declaration])
+_LT_DECL([global_symbol_to_c_name_address],
+ [lt_cv_sys_global_symbol_to_c_name_address], [1],
+ [Transform the output of nm in a C name address pair])
+_LT_DECL([global_symbol_to_c_name_address_lib_prefix],
+ [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1],
+ [Transform the output of nm in a C name address pair when lib prefix is needed])
+]) # _LT_CMD_GLOBAL_SYMBOLS
+
+
+# _LT_COMPILER_PIC([TAGNAME])
+# ---------------------------
+m4_defun([_LT_COMPILER_PIC],
+[m4_require([_LT_TAG_COMPILER])dnl
+_LT_TAGVAR(lt_prog_compiler_wl, $1)=
+_LT_TAGVAR(lt_prog_compiler_pic, $1)=
+_LT_TAGVAR(lt_prog_compiler_static, $1)=
+
+AC_MSG_CHECKING([for $compiler option to produce PIC])
+m4_if([$1], [CXX], [
+ # C++ specific cases for pic, static, wl, etc.
+ if test "$GXX" = yes; then
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+ case $host_os in
+ aix*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ m68k)
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the `-m68020' flag to GCC prevents building anything better,
+ # like `-m68040'.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+ ;;
+ esac
+ ;;
+
+ beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+ mingw* | cygwin* | os2* | pw32* | cegcc*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ # Although the cygwin gcc ignores -fPIC, still need this for old-style
+ # (--disable-auto-import) libraries
+ m4_if([$1], [GCJ], [],
+ [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+ ;;
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+ ;;
+ *djgpp*)
+ # DJGPP does not support shared libraries at all
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+ ;;
+ interix[[3-9]]*)
+ # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+ # Instead, we relocate shared libraries at runtime.
+ ;;
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+ fi
+ ;;
+ hpux*)
+ # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+ # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag
+ # sets the default TLS model and affects inlining.
+ case $host_cpu in
+ hppa*64*)
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ ;;
+ *qnx* | *nto*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ else
+ case $host_os in
+ aix[[4-9]]*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ else
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+ chorus*)
+ case $cc_basename in
+ cxch68*)
+ # Green Hills C++ Compiler
+ # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+ ;;
+ esac
+ ;;
+ dgux*)
+ case $cc_basename in
+ ec++*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ ;;
+ ghcx*)
+ # Green Hills C++ Compiler
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ freebsd* | dragonfly*)
+ # FreeBSD uses GNU C++
+ ;;
+ hpux9* | hpux10* | hpux11*)
+ case $cc_basename in
+ CC*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+ if test "$host_cpu" != ia64; then
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+ fi
+ ;;
+ aCC*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+ case $host_cpu in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+ ;;
+ esac
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ interix*)
+ # This is c89, which is MS Visual C++ (no shared libs)
+ # Anyone wants to do a port?
+ ;;
+ irix5* | irix6* | nonstopux*)
+ case $cc_basename in
+ CC*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ # CC pic flag -KPIC is the default.
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ case $cc_basename in
+ KCC*)
+ # KAI C++ Compiler
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ ecpc* )
+ # old Intel C++ for x86_64 which still supported -KPIC.
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ icpc* )
+ # Intel C++, used to be incompatible with GCC.
+ # ICC 10 doesn't accept -KPIC any more.
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ pgCC* | pgcpp*)
+ # Portland Group C++ compiler
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ cxx*)
+ # Compaq C++
+ # Make sure the PIC flag is empty. It appears that all Alpha
+ # Linux and Compaq Tru64 Unix objects are PIC.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+ xlc* | xlC*)
+ # IBM XL 8.0 on PPC
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*)
+ # Sun C++ 5.9
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+ lynxos*)
+ ;;
+ m88k*)
+ ;;
+ mvs*)
+ case $cc_basename in
+ cxx*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ netbsd* | netbsdelf*-gnu)
+ ;;
+ *qnx* | *nto*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+ ;;
+ osf3* | osf4* | osf5*)
+ case $cc_basename in
+ KCC*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+ ;;
+ RCC*)
+ # Rational C++ 2.4.1
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ ;;
+ cxx*)
+ # Digital/Compaq C++
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # Make sure the PIC flag is empty. It appears that all Alpha
+ # Linux and Compaq Tru64 Unix objects are PIC.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ psos*)
+ ;;
+ solaris*)
+ case $cc_basename in
+ CC*)
+ # Sun C++ 4.2, 5.x and Centerline C++
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+ ;;
+ gcx*)
+ # Green Hills C++ Compiler
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ sunos4*)
+ case $cc_basename in
+ CC*)
+ # Sun C++ 4.x
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ lcc*)
+ # Lucid
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ case $cc_basename in
+ CC*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ esac
+ ;;
+ tandem*)
+ case $cc_basename in
+ NCC*)
+ # NonStop-UX NCC 3.20
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ vxworks*)
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ ;;
+ esac
+ fi
+],
+[
+ if test "$GCC" = yes; then
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+ case $host_os in
+ aix*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ m68k)
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the `-m68020' flag to GCC prevents building anything better,
+ # like `-m68040'.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+ ;;
+ esac
+ ;;
+
+ beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+
+ mingw* | cygwin* | pw32* | os2* | cegcc*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ # Although the cygwin gcc ignores -fPIC, still need this for old-style
+ # (--disable-auto-import) libraries
+ m4_if([$1], [GCJ], [],
+ [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+ ;;
+
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+ ;;
+
+ hpux*)
+ # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+ # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag
+ # sets the default TLS model and affects inlining.
+ case $host_cpu in
+ hppa*64*)
+ # +Z the default
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ ;;
+
+ interix[[3-9]]*)
+ # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+ # Instead, we relocate shared libraries at runtime.
+ ;;
+
+ msdosdjgpp*)
+ # Just because we use GCC doesn't mean we suddenly get shared libraries
+ # on systems that don't support them.
+ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ enable_shared=no
+ ;;
+
+ *nto* | *qnx*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+ fi
+ ;;
+
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ else
+ # PORTME Check for flag to pass linker flags through the system compiler.
+ case $host_os in
+ aix*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ else
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+
+ mingw* | cygwin* | pw32* | os2* | cegcc*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ m4_if([$1], [GCJ], [],
+ [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+ ;;
+
+ hpux9* | hpux10* | hpux11*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case $host_cpu in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+ ;;
+ esac
+ # Is there a better lt_prog_compiler_static that works with the bundled CC?
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # PIC (with -KPIC) is the default.
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+
+ linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ case $cc_basename in
+ # old Intel for x86_64 which still supported -KPIC.
+ ecc*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ # icc used to be incompatible with GCC.
+ # ICC 10 doesn't accept -KPIC any more.
+ icc* | ifort*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ # Lahey Fortran 8.1.
+ lf95*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='--static'
+ ;;
+ pgcc* | pgf77* | pgf90* | pgf95*)
+ # Portland Group compilers (*not* the Pentium gcc compiler,
+ # which looks to be a dead project)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ ccc*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # All Alpha code is PIC.
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+ xl*)
+ # IBM XL C 8.0/Fortran 10.1 on PPC
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*)
+ # Sun C 5.9
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ ;;
+ *Sun\ F*)
+ # Sun Fortran 8.3 passes all unrecognized flags to the linker
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)=''
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+
+ newsos6)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ *nto* | *qnx*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+ ;;
+
+ osf3* | osf4* | osf5*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # All OSF/1 code is PIC.
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+
+ rdos*)
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+
+ solaris*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ case $cc_basename in
+ f77* | f90* | f95*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;
+ esac
+ ;;
+
+ sunos4*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ sysv4 | sysv4.2uw2* | sysv4.3*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec ;then
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ fi
+ ;;
+
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ unicos*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ ;;
+
+ uts4*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ *)
+ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ ;;
+ esac
+ fi
+])
+case $host_os in
+ # For platforms which do not support PIC, -DPIC is meaningless:
+ *djgpp*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])"
+ ;;
+esac
+AC_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)])
+_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1],
+ [How to pass a linker flag through the compiler])
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then
+ _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works],
+ [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)],
+ [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [],
+ [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in
+ "" | " "*) ;;
+ *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;;
+ esac],
+ [_LT_TAGVAR(lt_prog_compiler_pic, $1)=
+ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
+fi
+_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1],
+ [Additional compiler flags for building library objects])
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\"
+_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works],
+ _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1),
+ $lt_tmp_static_flag,
+ [],
+ [_LT_TAGVAR(lt_prog_compiler_static, $1)=])
+_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1],
+ [Compiler flag to prevent dynamic linking])
+])# _LT_COMPILER_PIC
+
+
+# _LT_LINKER_SHLIBS([TAGNAME])
+# ----------------------------
+# See if the linker supports building shared libraries.
+m4_defun([_LT_LINKER_SHLIBS],
+[AC_REQUIRE([LT_PATH_LD])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+m4_if([$1], [CXX], [
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ case $host_os in
+ aix[[4-9]]*)
+ # If we're using GNU nm, then we don't want the "-C" option.
+ # -C means demangle to AIX nm, but means don't demangle with GNU nm
+ if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ else
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ fi
+ ;;
+ pw32*)
+ _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
+ ;;
+ cygwin* | mingw* | cegcc*)
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
+ ;;
+ linux* | k*bsd*-gnu)
+ _LT_TAGVAR(link_all_deplibs, $1)=no
+ ;;
+ *)
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ ;;
+ esac
+ _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
+], [
+ runpath_var=
+ _LT_TAGVAR(allow_undefined_flag, $1)=
+ _LT_TAGVAR(always_export_symbols, $1)=no
+ _LT_TAGVAR(archive_cmds, $1)=
+ _LT_TAGVAR(archive_expsym_cmds, $1)=
+ _LT_TAGVAR(compiler_needs_object, $1)=no
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)=
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ _LT_TAGVAR(hardcode_automatic, $1)=no
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+ _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=
+ _LT_TAGVAR(hardcode_minus_L, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+ _LT_TAGVAR(inherit_rpath, $1)=no
+ _LT_TAGVAR(link_all_deplibs, $1)=unknown
+ _LT_TAGVAR(module_cmds, $1)=
+ _LT_TAGVAR(module_expsym_cmds, $1)=
+ _LT_TAGVAR(old_archive_from_new_cmds, $1)=
+ _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)=
+ _LT_TAGVAR(thread_safe_flag_spec, $1)=
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=
+ # include_expsyms should be a list of space-separated symbols to be *always*
+ # included in the symbol list
+ _LT_TAGVAR(include_expsyms, $1)=
+ # exclude_expsyms can be an extended regexp of symbols to exclude
+ # it will be wrapped by ` (' and `)$', so one must not match beginning or
+ # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+ # as well as any symbol that contains `d'.
+ _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
+ # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+ # platforms (ab)use it in PIC code, but their linkers get confused if
+ # the symbol is explicitly referenced. Since portable code cannot
+ # rely on this symbol name, it's probably fine to never include it in
+ # preloaded symbol tables.
+ # Exclude shared library initialization/finalization symbols.
+dnl Note also adjust exclude_expsyms for C++ above.
+ extract_expsyms_cmds=
+
+ case $host_os in
+ cygwin* | mingw* | pw32* | cegcc*)
+ # FIXME: the MSVC++ port hasn't been tested in a loooong time
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ if test "$GCC" != yes; then
+ with_gnu_ld=no
+ fi
+ ;;
+ interix*)
+ # we just hope/assume this is gcc and not c89 (= MSVC++)
+ with_gnu_ld=yes
+ ;;
+ openbsd*)
+ with_gnu_ld=no
+ ;;
+ linux* | k*bsd*-gnu)
+ _LT_TAGVAR(link_all_deplibs, $1)=no
+ ;;
+ esac
+
+ _LT_TAGVAR(ld_shlibs, $1)=yes
+ if test "$with_gnu_ld" = yes; then
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ wlarc='${wl}'
+
+ # Set some defaults for GNU ld with shared library support. These
+ # are reset later if shared libraries are not supported. Putting them
+ # here allows them to be overridden if necessary.
+ runpath_var=LD_RUN_PATH
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+ _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ else
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=
+ fi
+ supports_anon_versioning=no
+ case `$LD -v 2>&1` in
+ *GNU\ gold*) supports_anon_versioning=yes ;;
+ *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
+ *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+ *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+ *\ 2.11.*) ;; # other 2.11 versions
+ *) supports_anon_versioning=yes ;;
+ esac
+
+ # See if GNU ld supports shared libraries.
+ case $host_os in
+ aix[[3-9]]*)
+ # On AIX/PPC, the GNU linker is very broken
+ if test "$host_cpu" != ia64; then
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support. If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+_LT_EOF
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)=''
+ ;;
+ m68k)
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ ;;
+ esac
+ ;;
+
+ beos*)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ cygwin* | mingw* | pw32* | cegcc*)
+ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+ # as there is no search path for DLLs.
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_TAGVAR(always_export_symbols, $1)=no
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
+
+ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ # If the export-symbols file already is a .def file (1st line
+ # is EXPORTS), use it as is; otherwise, prepend...
+ _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+ cp $export_symbols $output_objdir/$soname.def;
+ else
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ interix[[3-9]]*)
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+ # Instead, shared libraries are loaded at an image base (0x10000000 by
+ # default) and relocated if they conflict, which is a slow very memory
+ # consuming and fragmenting process. To avoid this, we pick a random,
+ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+ # time. Moving up from 0x10000000 also allows more sbrk(2) space.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ ;;
+
+ gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
+ tmp_diet=no
+ if test "$host_os" = linux-dietlibc; then
+ case $cc_basename in
+ diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn)
+ esac
+ fi
+ if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+ && test "$tmp_diet" = no
+ then
+ tmp_addflag=
+ tmp_sharedflag='-shared'
+ case $cc_basename,$host_cpu in
+ pgcc*) # Portland Group C compiler
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+ tmp_addflag=' $pic_flag'
+ ;;
+ pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+ tmp_addflag=' $pic_flag -Mnomain' ;;
+ ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64
+ tmp_addflag=' -i_dynamic' ;;
+ efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64
+ tmp_addflag=' -i_dynamic -nofor_main' ;;
+ ifc* | ifort*) # Intel Fortran compiler
+ tmp_addflag=' -nofor_main' ;;
+ lf95*) # Lahey Fortran 8.1
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=
+ tmp_sharedflag='--shared' ;;
+ xl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below)
+ tmp_sharedflag='-qmkshrobj'
+ tmp_addflag= ;;
+ esac
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*) # Sun C 5.9
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+ _LT_TAGVAR(compiler_needs_object, $1)=yes
+ tmp_sharedflag='-G' ;;
+ *Sun\ F*) # Sun Fortran 8.3
+ tmp_sharedflag='-G' ;;
+ esac
+ _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+
+ if test "x$supports_anon_versioning" = xyes; then
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+ fi
+
+ case $cc_basename in
+ xlf*)
+ # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+ _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'
+ _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
+ if test "x$supports_anon_versioning" = xyes; then
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+ fi
+ ;;
+ esac
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ netbsd* | netbsdelf*-gnu)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ fi
+ ;;
+
+ solaris*)
+ if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+ case `$LD -v 2>&1` in
+ *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*)
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** reliably create shared libraries on SCO systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ ;;
+ *)
+ # For security reasons, it is highly recommended that you always
+ # use absolute paths for naming shared libraries, and exclude the
+ # DT_RUNPATH tag from executables and libraries. But doing so
+ # requires that you compile everything twice, which is a pain.
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+
+ sunos4*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ wlarc=
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ *)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+
+ if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then
+ runpath_var=
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)=
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=
+ fi
+ else
+ # PORTME fill in a description of your system's linker (not GNU ld)
+ case $host_os in
+ aix3*)
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_TAGVAR(always_export_symbols, $1)=yes
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+ # Note: this linker hardcodes the directories in LIBPATH if there
+ # are no directories specified by -L.
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+ # Neither direct hardcoding nor static linking is supported with a
+ # broken collect2.
+ _LT_TAGVAR(hardcode_direct, $1)=unsupported
+ fi
+ ;;
+
+ aix[[4-9]]*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=""
+ else
+ # If we're using GNU nm, then we don't want the "-C" option.
+ # -C means demangle to AIX nm, but means don't demangle with GNU nm
+ if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ else
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ fi
+ aix_use_runtimelinking=no
+
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # need to do runtime linking.
+ case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
+ for ld_flag in $LDFLAGS; do
+ if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+ aix_use_runtimelinking=yes
+ break
+ fi
+ done
+ ;;
+ esac
+
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ _LT_TAGVAR(archive_cmds, $1)=''
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
+
+ if test "$GCC" = yes; then
+ case $host_os in aix4.[[012]]|aix4.[[012]].*)
+ # We only want to do this on AIX 4.2 and lower, the check
+ # below for broken collect2 doesn't work under 4.3+
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" &&
+ strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ :
+ else
+ # We have old collect2
+ _LT_TAGVAR(hardcode_direct, $1)=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=
+ fi
+ ;;
+ esac
+ shared_flag='-shared'
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag="$shared_flag "'${wl}-G'
+ fi
+ _LT_TAGVAR(link_all_deplibs, $1)=no
+ else
+ # not using gcc
+ if test "$host_cpu" = ia64; then
+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+ # chokes on -Wl,-G. The following line is correct:
+ shared_flag='-G'
+ else
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag='${wl}-G'
+ else
+ shared_flag='${wl}-bM:SRE'
+ fi
+ fi
+ fi
+
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
+ # It seems that -bexpall does not export symbols beginning with
+ # underscore (_), so it is better to generate a list of symbols to export.
+ _LT_TAGVAR(always_export_symbols, $1)=yes
+ if test "$aix_use_runtimelinking" = yes; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ _LT_SYS_MODULE_PATH_AIX
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ else
+ if test "$host_cpu" = ia64; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+ _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+ _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+ else
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ _LT_SYS_MODULE_PATH_AIX
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+ _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+ # Exported symbols can be pulled into shared objects from archives
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+ # This is similar to how AIX traditionally builds its shared libraries.
+ _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+ fi
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)=''
+ ;;
+ m68k)
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ ;;
+ esac
+ ;;
+
+ bsdi[[45]]*)
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
+ ;;
+
+ cygwin* | mingw* | pw32* | cegcc*)
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # Tell ltmain to make .dll files, not .so files.
+ shrext_cmds=".dll"
+ # FIXME: Setting linknames here is a bad hack.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames='
+ # The linker will automatically build a .lib file if we build a DLL.
+ _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+ # FIXME: Should let the user specify the lib program.
+ _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'
+ _LT_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`'
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ ;;
+
+ darwin* | rhapsody*)
+ _LT_DARWIN_LINKER_FEATURES($1)
+ ;;
+
+ dgux*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ freebsd1*)
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+ # support. Future versions do this automatically, but an explicit c++rt0.o
+ # does not break anything, and helps significantly (at the cost of a little
+ # extra space).
+ freebsd2.2*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+ freebsd2*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+ freebsd* | dragonfly*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ hpux9*)
+ if test "$GCC" = yes; then
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ fi
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ ;;
+
+ hpux10*)
+ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ if test "$with_gnu_ld" = no; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ fi
+ ;;
+
+ hpux11*)
+ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+ case $host_cpu in
+ hppa*64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ else
+ case $host_cpu in
+ hppa*64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ fi
+ if test "$with_gnu_ld" = no; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ case $host_cpu in
+ hppa*64*|ia64*)
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+ *)
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ ;;
+ esac
+ fi
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ if test "$GCC" = yes; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ # Try to use the -exported_symbol ld option, if it does not
+ # work, assume that -exports_file does not work either and
+ # implicitly export all symbols.
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+ AC_LINK_IFELSE(int foo(void) {},
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+ )
+ LDFLAGS="$save_LDFLAGS"
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+ fi
+ _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(inherit_rpath, $1)=yes
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+
+ netbsd* | netbsdelf*-gnu)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
+ fi
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ newsos6)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ *nto* | *qnx*)
+ ;;
+
+ openbsd*)
+ if test -f /usr/libexec/ld.so; then
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ else
+ case $host_os in
+ openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ ;;
+ esac
+ fi
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ os2*)
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+ _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+ ;;
+
+ osf3*)
+ if test "$GCC" = yes; then
+ _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+ fi
+ _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ ;;
+
+ osf4* | osf5*) # as osf3* with the addition of -msym flag
+ if test "$GCC" = yes; then
+ _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ else
+ _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+
+ # Both c and cxx compiler support -rpath directly
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+ fi
+ _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ ;;
+
+ solaris*)
+ _LT_TAGVAR(no_undefined_flag, $1)=' -z defs'
+ if test "$GCC" = yes; then
+ wlarc='${wl}'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ else
+ case `$CC -V 2>&1` in
+ *"Compilers 5.0"*)
+ wlarc=''
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+ ;;
+ *)
+ wlarc='${wl}'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ ;;
+ esac
+ fi
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ case $host_os in
+ solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+ *)
+ # The compiler driver will combine and reorder linker options,
+ # but understands `-z linker_flag'. GCC discards it without `$wl',
+ # but is careful enough not to reorder.
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
+ if test "$GCC" = yes; then
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+ else
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
+ fi
+ ;;
+ esac
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+
+ sunos4*)
+ if test "x$host_vendor" = xsequent; then
+ # Use $CC to link under sequent, because it throws in some extra .o
+ # files that make .init and .fini sections work.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ sysv4)
+ case $host_vendor in
+ sni)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true???
+ ;;
+ siemens)
+ ## LD is ld it makes a PLAMLIB
+ ## CC just makes a GrossModule.
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ ;;
+ motorola)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
+ ;;
+ esac
+ runpath_var='LD_RUN_PATH'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ sysv4.3*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ _LT_TAGVAR(ld_shlibs, $1)=yes
+ fi
+ ;;
+
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+ _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ runpath_var='LD_RUN_PATH'
+
+ if test "$GCC" = yes; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6*)
+ # Note: We can NOT use -z defs as we might desire, because we do not
+ # link with -lc, and that would cause any symbols used from libc to
+ # always be unresolved, which means just about no library would
+ # ever link correctly. If we're not using GNU ld we use -z text
+ # though, which does catch some bad symbols but isn't as heavy-handed
+ # as -z defs.
+ _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+ _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+ runpath_var='LD_RUN_PATH'
+
+ if test "$GCC" = yes; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ uts4*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ *)
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+
+ if test x$host_vendor = xsni; then
+ case $host in
+ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym'
+ ;;
+ esac
+ fi
+ fi
+])
+AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
+test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld
+
+_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl
+_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl
+_LT_DECL([], [extract_expsyms_cmds], [2],
+ [The commands to extract the exported symbol list from a shared archive])
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in
+x|xyes)
+ # Assume -lc should be added
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+
+ if test "$enable_shared" = yes && test "$GCC" = yes; then
+ case $_LT_TAGVAR(archive_cmds, $1) in
+ *'~'*)
+ # FIXME: we may have to deal with multi-command sequences.
+ ;;
+ '$CC '*)
+ # Test whether the compiler implicitly links with -lc since on some
+ # systems, -lgcc has to come before -lc. If gcc already passes -lc
+ # to ld, don't add -lc before -lgcc.
+ AC_MSG_CHECKING([whether -lc should be explicitly linked in])
+ $RM conftest*
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
+ soname=conftest
+ lib=conftest
+ libobjs=conftest.$ac_objext
+ deplibs=
+ wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1)
+ pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1)
+ compiler_flags=-v
+ linker_flags=-v
+ verstring=
+ output_objdir=.
+ libname=conftest
+ lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1)
+ _LT_TAGVAR(allow_undefined_flag, $1)=
+ if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1)
+ then
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ else
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+ fi
+ _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
+ else
+ cat conftest.err 1>&5
+ fi
+ $RM conftest*
+ AC_MSG_RESULT([$_LT_TAGVAR(archive_cmds_need_lc, $1)])
+ ;;
+ esac
+ fi
+ ;;
+esac
+
+_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0],
+ [Whether or not to add -lc for building shared libraries])
+_LT_TAGDECL([allow_libtool_libs_with_static_runtimes],
+ [enable_shared_with_static_runtimes], [0],
+ [Whether or not to disallow shared libs when runtime libs are static])
+_LT_TAGDECL([], [export_dynamic_flag_spec], [1],
+ [Compiler flag to allow reflexive dlopens])
+_LT_TAGDECL([], [whole_archive_flag_spec], [1],
+ [Compiler flag to generate shared objects directly from archives])
+_LT_TAGDECL([], [compiler_needs_object], [1],
+ [Whether the compiler copes with passing no objects directly])
+_LT_TAGDECL([], [old_archive_from_new_cmds], [2],
+ [Create an old-style archive from a shared archive])
+_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2],
+ [Create a temporary old-style archive to link instead of a shared archive])
+_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive])
+_LT_TAGDECL([], [archive_expsym_cmds], [2])
+_LT_TAGDECL([], [module_cmds], [2],
+ [Commands used to build a loadable module if different from building
+ a shared archive.])
+_LT_TAGDECL([], [module_expsym_cmds], [2])
+_LT_TAGDECL([], [with_gnu_ld], [1],
+ [Whether we are building with GNU ld or not])
+_LT_TAGDECL([], [allow_undefined_flag], [1],
+ [Flag that allows shared libraries with undefined symbols to be built])
+_LT_TAGDECL([], [no_undefined_flag], [1],
+ [Flag that enforces no undefined symbols])
+_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1],
+ [Flag to hardcode $libdir into a binary during linking.
+ This must work even if $libdir does not exist])
+_LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1],
+ [[If ld is used when linking, flag to hardcode $libdir into a binary
+ during linking. This must work even if $libdir does not exist]])
+_LT_TAGDECL([], [hardcode_libdir_separator], [1],
+ [Whether we need a single "-rpath" flag with a separated argument])
+_LT_TAGDECL([], [hardcode_direct], [0],
+ [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
+ DIR into the resulting binary])
+_LT_TAGDECL([], [hardcode_direct_absolute], [0],
+ [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
+ DIR into the resulting binary and the resulting library dependency is
+ "absolute", i.e impossible to change by setting ${shlibpath_var} if the
+ library is relocated])
+_LT_TAGDECL([], [hardcode_minus_L], [0],
+ [Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+ into the resulting binary])
+_LT_TAGDECL([], [hardcode_shlibpath_var], [0],
+ [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+ into the resulting binary])
+_LT_TAGDECL([], [hardcode_automatic], [0],
+ [Set to "yes" if building a shared library automatically hardcodes DIR
+ into the library and all subsequent libraries and executables linked
+ against it])
+_LT_TAGDECL([], [inherit_rpath], [0],
+ [Set to yes if linker adds runtime paths of dependent libraries
+ to runtime path list])
+_LT_TAGDECL([], [link_all_deplibs], [0],
+ [Whether libtool must link a program against all its dependency libraries])
+_LT_TAGDECL([], [fix_srcfile_path], [1],
+ [Fix the shell variable $srcfile for the compiler])
+_LT_TAGDECL([], [always_export_symbols], [0],
+ [Set to "yes" if exported symbols are required])
+_LT_TAGDECL([], [export_symbols_cmds], [2],
+ [The commands to list exported symbols])
+_LT_TAGDECL([], [exclude_expsyms], [1],
+ [Symbols that should not be listed in the preloaded symbols])
+_LT_TAGDECL([], [include_expsyms], [1],
+ [Symbols that must always be exported])
+_LT_TAGDECL([], [prelink_cmds], [2],
+ [Commands necessary for linking programs (against libraries) with templates])
+_LT_TAGDECL([], [file_list_spec], [1],
+ [Specify filename containing input files])
+dnl FIXME: Not yet implemented
+dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1],
+dnl [Compiler flag to generate thread safe objects])
+])# _LT_LINKER_SHLIBS
+
+
+# _LT_LANG_C_CONFIG([TAG])
+# ------------------------
+# Ensure that the configuration variables for a C compiler are suitably
+# defined. These variables are subsequently used by _LT_CONFIG to write
+# the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_C_CONFIG],
+[m4_require([_LT_DECL_EGREP])dnl
+lt_save_CC="$CC"
+AC_LANG_PUSH(C)
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+_LT_TAG_COMPILER
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+ _LT_COMPILER_NO_RTTI($1)
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_SYS_DYNAMIC_LINKER($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+ LT_SYS_DLOPEN_SELF
+ _LT_CMD_STRIPLIB
+
+ # Report which library types will actually be built
+ AC_MSG_CHECKING([if libtool supports shared libraries])
+ AC_MSG_RESULT([$can_build_shared])
+
+ AC_MSG_CHECKING([whether to build shared libraries])
+ test "$can_build_shared" = "no" && enable_shared=no
+
+ # On AIX, shared libraries and static libraries use the same namespace, and
+ # are all built from PIC.
+ case $host_os in
+ aix3*)
+ test "$enable_shared" = yes && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+
+ aix[[4-9]]*)
+ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+ test "$enable_shared" = yes && enable_static=no
+ fi
+ ;;
+ esac
+ AC_MSG_RESULT([$enable_shared])
+
+ AC_MSG_CHECKING([whether to build static libraries])
+ # Make sure either enable_shared or enable_static is yes.
+ test "$enable_shared" = yes || enable_static=yes
+ AC_MSG_RESULT([$enable_static])
+
+ _LT_CONFIG($1)
+fi
+AC_LANG_POP
+CC="$lt_save_CC"
+])# _LT_LANG_C_CONFIG
+
+
+# _LT_PROG_CXX
+# ------------
+# Since AC_PROG_CXX is broken, in that it returns g++ if there is no c++
+# compiler, we have our own version here.
+m4_defun([_LT_PROG_CXX],
+[
+pushdef([AC_MSG_ERROR], [_lt_caught_CXX_error=yes])
+AC_PROG_CXX
+if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
+ ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
+ (test "X$CXX" != "Xg++"))) ; then
+ AC_PROG_CXXCPP
+else
+ _lt_caught_CXX_error=yes
+fi
+popdef([AC_MSG_ERROR])
+])# _LT_PROG_CXX
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([_LT_PROG_CXX], [])
+
+
+# _LT_LANG_CXX_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for a C++ compiler are suitably
+# defined. These variables are subsequently used by _LT_CONFIG to write
+# the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_CXX_CONFIG],
+[AC_REQUIRE([_LT_PROG_CXX])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_EGREP])dnl
+
+AC_LANG_PUSH(C++)
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(compiler_needs_object, $1)=no
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for C++ test sources.
+ac_ext=cpp
+
+# Object file extension for compiled C++ test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the CXX compiler isn't working. Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_caught_CXX_error" != yes; then
+ # Code to be used in simple compile tests
+ lt_simple_compile_test_code="int some_variable = 0;"
+
+ # Code to be used in simple link tests
+ lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }'
+
+ # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+ _LT_TAG_COMPILER
+
+ # save warnings/boilerplate of simple test code
+ _LT_COMPILER_BOILERPLATE
+ _LT_LINKER_BOILERPLATE
+
+ # Allow CC to be a program name with arguments.
+ lt_save_CC=$CC
+ lt_save_LD=$LD
+ lt_save_GCC=$GCC
+ GCC=$GXX
+ lt_save_with_gnu_ld=$with_gnu_ld
+ lt_save_path_LD=$lt_cv_path_LD
+ if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
+ lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
+ else
+ $as_unset lt_cv_prog_gnu_ld
+ fi
+ if test -n "${lt_cv_path_LDCXX+set}"; then
+ lt_cv_path_LD=$lt_cv_path_LDCXX
+ else
+ $as_unset lt_cv_path_LD
+ fi
+ test -z "${LDCXX+set}" || LD=$LDCXX
+ CC=${CXX-"c++"}
+ compiler=$CC
+ _LT_TAGVAR(compiler, $1)=$CC
+ _LT_CC_BASENAME([$compiler])
+
+ if test -n "$compiler"; then
+ # We don't want -fno-exception when compiling C++ code, so set the
+ # no_builtin_flag separately
+ if test "$GXX" = yes; then
+ _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+ else
+ _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+ fi
+
+ if test "$GXX" = yes; then
+ # Set up default GNU C++ configuration
+
+ LT_PATH_LD
+
+ # Check if GNU C++ uses GNU ld as the underlying linker, since the
+ # archiving commands below assume that GNU ld is being used.
+ if test "$with_gnu_ld" = yes; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
+ # investigate it a little bit more. (MM)
+ wlarc='${wl}'
+
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if eval "`$CC -print-prog-name=ld` --help 2>&1" |
+ $GREP 'no-whole-archive' > /dev/null; then
+ _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ else
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=
+ fi
+ else
+ with_gnu_ld=no
+ wlarc=
+
+ # A generic and very simple default shared library creation
+ # command for GNU C++ for the case where it uses the native
+ # linker, instead of GNU ld. If possible, this setting should
+ # overridden to take advantage of the native linker features on
+ # the platform it is being used on.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+ fi
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+
+ else
+ GXX=no
+ with_gnu_ld=no
+ wlarc=
+ fi
+
+ # PORTME: fill in a description of your system's C++ link characteristics
+ AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+ _LT_TAGVAR(ld_shlibs, $1)=yes
+ case $host_os in
+ aix3*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ aix[[4-9]]*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=""
+ else
+ aix_use_runtimelinking=no
+
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # need to do runtime linking.
+ case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
+ for ld_flag in $LDFLAGS; do
+ case $ld_flag in
+ *-brtl*)
+ aix_use_runtimelinking=yes
+ break
+ ;;
+ esac
+ done
+ ;;
+ esac
+
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ _LT_TAGVAR(archive_cmds, $1)=''
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
+
+ if test "$GXX" = yes; then
+ case $host_os in aix4.[[012]]|aix4.[[012]].*)
+ # We only want to do this on AIX 4.2 and lower, the check
+ # below for broken collect2 doesn't work under 4.3+
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" &&
+ strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ :
+ else
+ # We have old collect2
+ _LT_TAGVAR(hardcode_direct, $1)=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=
+ fi
+ esac
+ shared_flag='-shared'
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag="$shared_flag "'${wl}-G'
+ fi
+ else
+ # not using gcc
+ if test "$host_cpu" = ia64; then
+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+ # chokes on -Wl,-G. The following line is correct:
+ shared_flag='-G'
+ else
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag='${wl}-G'
+ else
+ shared_flag='${wl}-bM:SRE'
+ fi
+ fi
+ fi
+
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
+ # It seems that -bexpall does not export symbols beginning with
+ # underscore (_), so it is better to generate a list of symbols to
+ # export.
+ _LT_TAGVAR(always_export_symbols, $1)=yes
+ if test "$aix_use_runtimelinking" = yes; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
+ # Determine the default libpath from the value encoded in an empty
+ # executable.
+ _LT_SYS_MODULE_PATH_AIX
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ else
+ if test "$host_cpu" = ia64; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+ _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+ _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+ else
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ _LT_SYS_MODULE_PATH_AIX
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+ _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+ # Exported symbols can be pulled into shared objects from archives
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+ # This is similar to how AIX traditionally builds its shared
+ # libraries.
+ _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+ fi
+ fi
+ ;;
+
+ beos*)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ chorus*)
+ case $cc_basename in
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ cygwin* | mingw* | pw32* | cegcc*)
+ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+ # as there is no search path for DLLs.
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_TAGVAR(always_export_symbols, $1)=no
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+
+ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ # If the export-symbols file already is a .def file (1st line
+ # is EXPORTS), use it as is; otherwise, prepend...
+ _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+ cp $export_symbols $output_objdir/$soname.def;
+ else
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ darwin* | rhapsody*)
+ _LT_DARWIN_LINKER_FEATURES($1)
+ ;;
+
+ dgux*)
+ case $cc_basename in
+ ec++*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ ghcx*)
+ # Green Hills C++ Compiler
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ freebsd[[12]]*)
+ # C++ shared libraries reported to be fairly broken before
+ # switch to ELF
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ freebsd-elf*)
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ ;;
+
+ freebsd* | dragonfly*)
+ # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+ # conventions
+ _LT_TAGVAR(ld_shlibs, $1)=yes
+ ;;
+
+ gnu*)
+ ;;
+
+ hpux9*)
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+ # but as the default
+ # location of the library.
+
+ case $cc_basename in
+ CC*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ aCC*)
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+ ;;
+ *)
+ if test "$GXX" = yes; then
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+
+ hpux10*|hpux11*)
+ if test $with_gnu_ld = no; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ case $host_cpu in
+ hppa*64*|ia64*)
+ ;;
+ *)
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ ;;
+ esac
+ fi
+ case $host_cpu in
+ hppa*64*|ia64*)
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+ *)
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+ # but as the default
+ # location of the library.
+ ;;
+ esac
+
+ case $cc_basename in
+ CC*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ aCC*)
+ case $host_cpu in
+ hppa*64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ ia64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ esac
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+ ;;
+ *)
+ if test "$GXX" = yes; then
+ if test $with_gnu_ld = no; then
+ case $host_cpu in
+ hppa*64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ ia64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ esac
+ fi
+ else
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+
+ interix[[3-9]]*)
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+ # Instead, shared libraries are loaded at an image base (0x10000000 by
+ # default) and relocated if they conflict, which is a slow very memory
+ # consuming and fragmenting process. To avoid this, we pick a random,
+ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+ # time. Moving up from 0x10000000 also allows more sbrk(2) space.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ ;;
+ irix5* | irix6*)
+ case $cc_basename in
+ CC*)
+ # SGI C++
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+
+ # Archives containing C++ object files must be created using
+ # "CC -ar", where "CC" is the IRIX C++ compiler. This is
+ # necessary to make sure instantiated templates are included
+ # in the archive.
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
+ ;;
+ *)
+ if test "$GXX" = yes; then
+ if test "$with_gnu_ld" = no; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib'
+ fi
+ fi
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+ esac
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(inherit_rpath, $1)=yes
+ ;;
+
+ linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ case $cc_basename in
+ KCC*)
+ # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+ # KCC will only create a shared library if the output file
+ # ends with ".so" (or ".sl" for HP-UX), so rename the library
+ # to its proper name (with version) after linking.
+ _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+ # Archives containing C++ object files must be created using
+ # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
+ ;;
+ icpc* | ecpc* )
+ # Intel C++
+ with_gnu_ld=yes
+ # version 8.0 and above of icpc choke on multiply defined symbols
+ # if we add $predep_objects and $postdep_objects, however 7.1 and
+ # earlier do not add the objects themselves.
+ case `$CC -V 2>&1` in
+ *"Version 7."*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ ;;
+ *) # Version 8.0 or newer
+ tmp_idyn=
+ case $host_cpu in
+ ia64*) tmp_idyn=' -i_dynamic';;
+ esac
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ ;;
+ esac
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+ ;;
+ pgCC* | pgcpp*)
+ # Portland Group C++ compiler
+ case `$CC -V` in
+ *pgCC\ [[1-5]]* | *pgcpp\ [[1-5]]*)
+ _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~
+ rm -rf $tpldir~
+ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
+ compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"'
+ _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~
+ rm -rf $tpldir~
+ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
+ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~
+ $RANLIB $oldlib'
+ _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~
+ rm -rf $tpldir~
+ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~
+ rm -rf $tpldir~
+ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+ ;;
+ *) # Version 6 will use weak symbols
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+ ;;
+ esac
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+ ;;
+ cxx*)
+ # Compaq C++
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
+
+ runpath_var=LD_RUN_PATH
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+ ;;
+ xl*)
+ # IBM XL 8.0 on PPC, with GNU ld
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ if test "x$supports_anon_versioning" = xyes; then
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+ fi
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*)
+ # Sun C++ 5.9
+ _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+ _LT_TAGVAR(compiler_needs_object, $1)=yes
+
+ # Not sure whether something based on
+ # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
+ # would be better.
+ output_verbose_link_cmd='echo'
+
+ # Archives containing C++ object files must be created using
+ # "CC -xar", where "CC" is the Sun C++ compiler. This is
+ # necessary to make sure instantiated templates are included
+ # in the archive.
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+
+ lynxos*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ m88k*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ mvs*)
+ case $cc_basename in
+ cxx*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+ wlarc=
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ fi
+ # Workaround some broken pre-1.5 toolchains
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
+ ;;
+
+ *nto* | *qnx*)
+ _LT_TAGVAR(ld_shlibs, $1)=yes
+ ;;
+
+ openbsd2*)
+ # C++ shared libraries are fairly broken
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ openbsd*)
+ if test -f /usr/libexec/ld.so; then
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ fi
+ output_verbose_link_cmd=echo
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ osf3* | osf4* | osf5*)
+ case $cc_basename in
+ KCC*)
+ # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+ # KCC will only create a shared library if the output file
+ # ends with ".so" (or ".sl" for HP-UX), so rename the library
+ # to its proper name (with version) after linking.
+ _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Archives containing C++ object files must be created using
+ # the KAI C++ compiler.
+ case $host in
+ osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;;
+ *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;;
+ esac
+ ;;
+ RCC*)
+ # Rational C++ 2.4.1
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ cxx*)
+ case $host in
+ osf3*)
+ _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ ;;
+ *)
+ _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
+ echo "-hidden">> $lib.exp~
+ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~
+ $RM $lib.exp'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+ ;;
+ esac
+
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+ ;;
+ *)
+ if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+ _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ case $host in
+ osf3*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ ;;
+ esac
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+
+ else
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+
+ psos*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ sunos4*)
+ case $cc_basename in
+ CC*)
+ # Sun C++ 4.x
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ lcc*)
+ # Lucid
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ solaris*)
+ case $cc_basename in
+ CC*)
+ # Sun C++ 4.2, 5.x and Centerline C++
+ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes
+ _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ case $host_os in
+ solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+ *)
+ # The compiler driver will combine and reorder linker options,
+ # but understands `-z linker_flag'.
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
+ ;;
+ esac
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+
+ output_verbose_link_cmd='echo'
+
+ # Archives containing C++ object files must be created using
+ # "CC -xar", where "CC" is the Sun C++ compiler. This is
+ # necessary to make sure instantiated templates are included
+ # in the archive.
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+ ;;
+ gcx*)
+ # Green Hills C++ Compiler
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+
+ # The C++ compiler must be used to create the archive.
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
+ ;;
+ *)
+ # GNU C++ compiler with Solaris linker
+ if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+ _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
+ if $CC --version | $GREP -v '^2\.7' > /dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+ else
+ # g++ 2.7 appears to require `-G' NOT `-shared' on this
+ # platform.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+ fi
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
+ case $host_os in
+ solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+ *)
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+ ;;
+ esac
+ fi
+ ;;
+ esac
+ ;;
+
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+ _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ runpath_var='LD_RUN_PATH'
+
+ case $cc_basename in
+ CC*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6*)
+ # Note: We can NOT use -z defs as we might desire, because we do not
+ # link with -lc, and that would cause any symbols used from libc to
+ # always be unresolved, which means just about no library would
+ # ever link correctly. If we're not using GNU ld we use -z text
+ # though, which does catch some bad symbols but isn't as heavy-handed
+ # as -z defs.
+ _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+ _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+ runpath_var='LD_RUN_PATH'
+
+ case $cc_basename in
+ CC*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ ;;
+
+ tandem*)
+ case $cc_basename in
+ NCC*)
+ # NonStop-UX NCC 3.20
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ vxworks*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+
+ AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
+ test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+ _LT_TAGVAR(GCC, $1)="$GXX"
+ _LT_TAGVAR(LD, $1)="$LD"
+
+ ## CAVEAT EMPTOR:
+ ## There is no encapsulation within the following macros, do not change
+ ## the running order or otherwise move them around unless you know exactly
+ ## what you are doing...
+ _LT_SYS_HIDDEN_LIBDEPS($1)
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_SYS_DYNAMIC_LINKER($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+
+ _LT_CONFIG($1)
+ fi # test -n "$compiler"
+
+ CC=$lt_save_CC
+ LDCXX=$LD
+ LD=$lt_save_LD
+ GCC=$lt_save_GCC
+ with_gnu_ld=$lt_save_with_gnu_ld
+ lt_cv_path_LDCXX=$lt_cv_path_LD
+ lt_cv_path_LD=$lt_save_path_LD
+ lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+ lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+fi # test "$_lt_caught_CXX_error" != yes
+
+AC_LANG_POP
+])# _LT_LANG_CXX_CONFIG
+
+
+# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME])
+# ---------------------------------
+# Figure out "hidden" library dependencies from verbose
+# compiler output when linking a shared library.
+# Parse the compiler output and extract the necessary
+# objects, libraries and library flags.
+m4_defun([_LT_SYS_HIDDEN_LIBDEPS],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+# Dependencies to place before and after the object being linked:
+_LT_TAGVAR(predep_objects, $1)=
+_LT_TAGVAR(postdep_objects, $1)=
+_LT_TAGVAR(predeps, $1)=
+_LT_TAGVAR(postdeps, $1)=
+_LT_TAGVAR(compiler_lib_search_path, $1)=
+
+dnl we can't use the lt_simple_compile_test_code here,
+dnl because it contains code intended for an executable,
+dnl not a library. It's possible we should let each
+dnl tag define a new lt_????_link_test_code variable,
+dnl but it's only used here...
+m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF
+int a;
+void foo (void) { a = 0; }
+_LT_EOF
+], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF
+class Foo
+{
+public:
+ Foo (void) { a = 0; }
+private:
+ int a;
+};
+_LT_EOF
+], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF
+ subroutine foo
+ implicit none
+ integer*4 a
+ a=0
+ return
+ end
+_LT_EOF
+], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF
+ subroutine foo
+ implicit none
+ integer a
+ a=0
+ return
+ end
+_LT_EOF
+], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF
+public class foo {
+ private int a;
+ public void bar (void) {
+ a = 0;
+ }
+};
+_LT_EOF
+])
+dnl Parse the compiler output and extract the necessary
+dnl objects, libraries and library flags.
+if AC_TRY_EVAL(ac_compile); then
+ # Parse the compiler output and extract the necessary
+ # objects, libraries and library flags.
+
+ # Sentinel used to keep track of whether or not we are before
+ # the conftest object file.
+ pre_test_object_deps_done=no
+
+ for p in `eval "$output_verbose_link_cmd"`; do
+ case $p in
+
+ -L* | -R* | -l*)
+ # Some compilers place space between "-{L,R}" and the path.
+ # Remove the space.
+ if test $p = "-L" ||
+ test $p = "-R"; then
+ prev=$p
+ continue
+ else
+ prev=
+ fi
+
+ if test "$pre_test_object_deps_done" = no; then
+ case $p in
+ -L* | -R*)
+ # Internal compiler library paths should come after those
+ # provided the user. The postdeps already come after the
+ # user supplied libs so there is no need to process them.
+ if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then
+ _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}"
+ else
+ _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}"
+ fi
+ ;;
+ # The "-l" case would never come before the object being
+ # linked, so don't bother handling this case.
+ esac
+ else
+ if test -z "$_LT_TAGVAR(postdeps, $1)"; then
+ _LT_TAGVAR(postdeps, $1)="${prev}${p}"
+ else
+ _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}"
+ fi
+ fi
+ ;;
+
+ *.$objext)
+ # This assumes that the test object file only shows up
+ # once in the compiler output.
+ if test "$p" = "conftest.$objext"; then
+ pre_test_object_deps_done=yes
+ continue
+ fi
+
+ if test "$pre_test_object_deps_done" = no; then
+ if test -z "$_LT_TAGVAR(predep_objects, $1)"; then
+ _LT_TAGVAR(predep_objects, $1)="$p"
+ else
+ _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p"
+ fi
+ else
+ if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then
+ _LT_TAGVAR(postdep_objects, $1)="$p"
+ else
+ _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p"
+ fi
+ fi
+ ;;
+
+ *) ;; # Ignore the rest.
+
+ esac
+ done
+
+ # Clean up.
+ rm -f a.out a.exe
+else
+ echo "libtool.m4: error: problem compiling $1 test program"
+fi
+
+$RM -f confest.$objext
+
+# PORTME: override above test on systems where it is broken
+m4_if([$1], [CXX],
+[case $host_os in
+interix[[3-9]]*)
+ # Interix 3.5 installs completely hosed .la files for C++, so rather than
+ # hack all around it, let's just trust "g++" to DTRT.
+ _LT_TAGVAR(predep_objects,$1)=
+ _LT_TAGVAR(postdep_objects,$1)=
+ _LT_TAGVAR(postdeps,$1)=
+ ;;
+
+linux*)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*)
+ # Sun C++ 5.9
+
+ # The more standards-conforming stlport4 library is
+ # incompatible with the Cstd library. Avoid specifying
+ # it if it's in CXXFLAGS. Ignore libCrun as
+ # -library=stlport4 depends on it.
+ case " $CXX $CXXFLAGS " in
+ *" -library=stlport4 "*)
+ solaris_use_stlport4=yes
+ ;;
+ esac
+
+ if test "$solaris_use_stlport4" != yes; then
+ _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
+ fi
+ ;;
+ esac
+ ;;
+
+solaris*)
+ case $cc_basename in
+ CC*)
+ # The more standards-conforming stlport4 library is
+ # incompatible with the Cstd library. Avoid specifying
+ # it if it's in CXXFLAGS. Ignore libCrun as
+ # -library=stlport4 depends on it.
+ case " $CXX $CXXFLAGS " in
+ *" -library=stlport4 "*)
+ solaris_use_stlport4=yes
+ ;;
+ esac
+
+ # Adding this requires a known-good setup of shared libraries for
+ # Sun compiler versions before 5.6, else PIC objects from an old
+ # archive will be linked into the output, leading to subtle bugs.
+ if test "$solaris_use_stlport4" != yes; then
+ _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
+ fi
+ ;;
+ esac
+ ;;
+esac
+])
+
+case " $_LT_TAGVAR(postdeps, $1) " in
+*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;;
+esac
+ _LT_TAGVAR(compiler_lib_search_dirs, $1)=
+if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then
+ _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'`
+fi
+_LT_TAGDECL([], [compiler_lib_search_dirs], [1],
+ [The directories searched by this compiler when creating a shared library])
+_LT_TAGDECL([], [predep_objects], [1],
+ [Dependencies to place before and after the objects being linked to
+ create a shared library])
+_LT_TAGDECL([], [postdep_objects], [1])
+_LT_TAGDECL([], [predeps], [1])
+_LT_TAGDECL([], [postdeps], [1])
+_LT_TAGDECL([], [compiler_lib_search_path], [1],
+ [The library search path used internally by the compiler when linking
+ a shared library])
+])# _LT_SYS_HIDDEN_LIBDEPS
+
+
+# _LT_PROG_F77
+# ------------
+# Since AC_PROG_F77 is broken, in that it returns the empty string
+# if there is no fortran compiler, we have our own version here.
+m4_defun([_LT_PROG_F77],
+[
+pushdef([AC_MSG_ERROR], [_lt_disable_F77=yes])
+AC_PROG_F77
+if test -z "$F77" || test "X$F77" = "Xno"; then
+ _lt_disable_F77=yes
+fi
+popdef([AC_MSG_ERROR])
+])# _LT_PROG_F77
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([_LT_PROG_F77], [])
+
+
+# _LT_LANG_F77_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for a Fortran 77 compiler are
+# suitably defined. These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_F77_CONFIG],
+[AC_REQUIRE([_LT_PROG_F77])dnl
+AC_LANG_PUSH(Fortran 77)
+
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for f77 test sources.
+ac_ext=f
+
+# Object file extension for compiled f77 test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the F77 compiler isn't working. Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_disable_F77" != yes; then
+ # Code to be used in simple compile tests
+ lt_simple_compile_test_code="\
+ subroutine t
+ return
+ end
+"
+
+ # Code to be used in simple link tests
+ lt_simple_link_test_code="\
+ program t
+ end
+"
+
+ # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+ _LT_TAG_COMPILER
+
+ # save warnings/boilerplate of simple test code
+ _LT_COMPILER_BOILERPLATE
+ _LT_LINKER_BOILERPLATE
+
+ # Allow CC to be a program name with arguments.
+ lt_save_CC="$CC"
+ lt_save_GCC=$GCC
+ CC=${F77-"f77"}
+ compiler=$CC
+ _LT_TAGVAR(compiler, $1)=$CC
+ _LT_CC_BASENAME([$compiler])
+ GCC=$G77
+ if test -n "$compiler"; then
+ AC_MSG_CHECKING([if libtool supports shared libraries])
+ AC_MSG_RESULT([$can_build_shared])
+
+ AC_MSG_CHECKING([whether to build shared libraries])
+ test "$can_build_shared" = "no" && enable_shared=no
+
+ # On AIX, shared libraries and static libraries use the same namespace, and
+ # are all built from PIC.
+ case $host_os in
+ aix3*)
+ test "$enable_shared" = yes && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+ aix[[4-9]]*)
+ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+ test "$enable_shared" = yes && enable_static=no
+ fi
+ ;;
+ esac
+ AC_MSG_RESULT([$enable_shared])
+
+ AC_MSG_CHECKING([whether to build static libraries])
+ # Make sure either enable_shared or enable_static is yes.
+ test "$enable_shared" = yes || enable_static=yes
+ AC_MSG_RESULT([$enable_static])
+
+ _LT_TAGVAR(GCC, $1)="$G77"
+ _LT_TAGVAR(LD, $1)="$LD"
+
+ ## CAVEAT EMPTOR:
+ ## There is no encapsulation within the following macros, do not change
+ ## the running order or otherwise move them around unless you know exactly
+ ## what you are doing...
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_SYS_DYNAMIC_LINKER($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+
+ _LT_CONFIG($1)
+ fi # test -n "$compiler"
+
+ GCC=$lt_save_GCC
+ CC="$lt_save_CC"
+fi # test "$_lt_disable_F77" != yes
+
+AC_LANG_POP
+])# _LT_LANG_F77_CONFIG
+
+
+# _LT_PROG_FC
+# -----------
+# Since AC_PROG_FC is broken, in that it returns the empty string
+# if there is no fortran compiler, we have our own version here.
+m4_defun([_LT_PROG_FC],
+[
+pushdef([AC_MSG_ERROR], [_lt_disable_FC=yes])
+AC_PROG_FC
+if test -z "$FC" || test "X$FC" = "Xno"; then
+ _lt_disable_FC=yes
+fi
+popdef([AC_MSG_ERROR])
+])# _LT_PROG_FC
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([_LT_PROG_FC], [])
+
+
+# _LT_LANG_FC_CONFIG([TAG])
+# -------------------------
+# Ensure that the configuration variables for a Fortran compiler are
+# suitably defined. These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_FC_CONFIG],
+[AC_REQUIRE([_LT_PROG_FC])dnl
+AC_LANG_PUSH(Fortran)
+
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for fc test sources.
+ac_ext=${ac_fc_srcext-f}
+
+# Object file extension for compiled fc test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the FC compiler isn't working. Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_disable_FC" != yes; then
+ # Code to be used in simple compile tests
+ lt_simple_compile_test_code="\
+ subroutine t
+ return
+ end
+"
+
+ # Code to be used in simple link tests
+ lt_simple_link_test_code="\
+ program t
+ end
+"
+
+ # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+ _LT_TAG_COMPILER
+
+ # save warnings/boilerplate of simple test code
+ _LT_COMPILER_BOILERPLATE
+ _LT_LINKER_BOILERPLATE
+
+ # Allow CC to be a program name with arguments.
+ lt_save_CC="$CC"
+ lt_save_GCC=$GCC
+ CC=${FC-"f95"}
+ compiler=$CC
+ GCC=$ac_cv_fc_compiler_gnu
+
+ _LT_TAGVAR(compiler, $1)=$CC
+ _LT_CC_BASENAME([$compiler])
+
+ if test -n "$compiler"; then
+ AC_MSG_CHECKING([if libtool supports shared libraries])
+ AC_MSG_RESULT([$can_build_shared])
+
+ AC_MSG_CHECKING([whether to build shared libraries])
+ test "$can_build_shared" = "no" && enable_shared=no
+
+ # On AIX, shared libraries and static libraries use the same namespace, and
+ # are all built from PIC.
+ case $host_os in
+ aix3*)
+ test "$enable_shared" = yes && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+ aix[[4-9]]*)
+ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+ test "$enable_shared" = yes && enable_static=no
+ fi
+ ;;
+ esac
+ AC_MSG_RESULT([$enable_shared])
+
+ AC_MSG_CHECKING([whether to build static libraries])
+ # Make sure either enable_shared or enable_static is yes.
+ test "$enable_shared" = yes || enable_static=yes
+ AC_MSG_RESULT([$enable_static])
+
+ _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu"
+ _LT_TAGVAR(LD, $1)="$LD"
+
+ ## CAVEAT EMPTOR:
+ ## There is no encapsulation within the following macros, do not change
+ ## the running order or otherwise move them around unless you know exactly
+ ## what you are doing...
+ _LT_SYS_HIDDEN_LIBDEPS($1)
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_SYS_DYNAMIC_LINKER($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+
+ _LT_CONFIG($1)
+ fi # test -n "$compiler"
+
+ GCC=$lt_save_GCC
+ CC="$lt_save_CC"
+fi # test "$_lt_disable_FC" != yes
+
+AC_LANG_POP
+])# _LT_LANG_FC_CONFIG
+
+
+# _LT_LANG_GCJ_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for the GNU Java Compiler compiler
+# are suitably defined. These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_GCJ_CONFIG],
+[AC_REQUIRE([LT_PROG_GCJ])dnl
+AC_LANG_SAVE
+
+# Source file extension for Java test sources.
+ac_ext=java
+
+# Object file extension for compiled Java test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="class foo {}"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+lt_save_GCC=$GCC
+GCC=yes
+CC=${GCJ-"gcj"}
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_TAGVAR(LD, $1)="$LD"
+_LT_CC_BASENAME([$compiler])
+
+# GCJ did not exist at the time GCC didn't implicitly link libc in.
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+ _LT_COMPILER_NO_RTTI($1)
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+
+ _LT_CONFIG($1)
+fi
+
+AC_LANG_RESTORE
+
+GCC=$lt_save_GCC
+CC="$lt_save_CC"
+])# _LT_LANG_GCJ_CONFIG
+
+
+# _LT_LANG_RC_CONFIG([TAG])
+# -------------------------
+# Ensure that the configuration variables for the Windows resource compiler
+# are suitably defined. These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_RC_CONFIG],
+[AC_REQUIRE([LT_PROG_RC])dnl
+AC_LANG_SAVE
+
+# Source file extension for RC test sources.
+ac_ext=rc
+
+# Object file extension for compiled RC test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }'
+
+# Code to be used in simple link tests
+lt_simple_link_test_code="$lt_simple_compile_test_code"
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+lt_save_GCC=$GCC
+GCC=
+CC=${RC-"windres"}
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_CC_BASENAME([$compiler])
+_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+
+if test -n "$compiler"; then
+ :
+ _LT_CONFIG($1)
+fi
+
+GCC=$lt_save_GCC
+AC_LANG_RESTORE
+CC="$lt_save_CC"
+])# _LT_LANG_RC_CONFIG
+
+
+# LT_PROG_GCJ
+# -----------
+AC_DEFUN([LT_PROG_GCJ],
+[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ],
+ [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ],
+ [AC_CHECK_TOOL(GCJ, gcj,)
+ test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
+ AC_SUBST(GCJFLAGS)])])[]dnl
+])
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_GCJ], [])
+
+
+# LT_PROG_RC
+# ----------
+AC_DEFUN([LT_PROG_RC],
+[AC_CHECK_TOOL(RC, windres,)
+])
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_RC], [])
+
+
+# _LT_DECL_EGREP
+# --------------
+# If we don't have a new enough Autoconf to choose the best grep
+# available, choose the one first in the user's PATH.
+m4_defun([_LT_DECL_EGREP],
+[AC_REQUIRE([AC_PROG_EGREP])dnl
+AC_REQUIRE([AC_PROG_FGREP])dnl
+test -z "$GREP" && GREP=grep
+_LT_DECL([], [GREP], [1], [A grep program that handles long lines])
+_LT_DECL([], [EGREP], [1], [An ERE matcher])
+_LT_DECL([], [FGREP], [1], [A literal string matcher])
+dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too
+AC_SUBST([GREP])
+])
+
+
+# _LT_DECL_OBJDUMP
+# --------------
+# If we don't have a new enough Autoconf to choose the best objdump
+# available, choose the one first in the user's PATH.
+m4_defun([_LT_DECL_OBJDUMP],
+[AC_CHECK_TOOL(OBJDUMP, objdump, false)
+test -z "$OBJDUMP" && OBJDUMP=objdump
+_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper])
+AC_SUBST([OBJDUMP])
+])
+
+
+# _LT_DECL_SED
+# ------------
+# Check for a fully-functional sed program, that truncates
+# as few characters as possible. Prefer GNU sed if found.
+m4_defun([_LT_DECL_SED],
+[AC_PROG_SED
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
+_LT_DECL([], [SED], [1], [A sed program that does not truncate output])
+_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"],
+ [Sed that helps us avoid accidentally triggering echo(1) options like -n])
+])# _LT_DECL_SED
+
+m4_ifndef([AC_PROG_SED], [
+############################################################
+# NOTE: This macro has been submitted for inclusion into #
+# GNU Autoconf as AC_PROG_SED. When it is available in #
+# a released version of Autoconf we should remove this #
+# macro and use it instead. #
+############################################################
+
+m4_defun([AC_PROG_SED],
+[AC_MSG_CHECKING([for a sed that does not truncate output])
+AC_CACHE_VAL(lt_cv_path_SED,
+[# Loop through the user's path and test for sed and gsed.
+# Then use that list of sed's as ones to test for truncation.
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for lt_ac_prog in sed gsed; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
+ lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
+ fi
+ done
+ done
+done
+IFS=$as_save_IFS
+lt_ac_max=0
+lt_ac_count=0
+# Add /usr/xpg4/bin/sed as it is typically found on Solaris
+# along with /bin/sed that truncates output.
+for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
+ test ! -f $lt_ac_sed && continue
+ cat /dev/null > conftest.in
+ lt_ac_count=0
+ echo $ECHO_N "0123456789$ECHO_C" >conftest.in
+ # Check for GNU sed and select it if it is found.
+ if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
+ lt_cv_path_SED=$lt_ac_sed
+ break
+ fi
+ while true; do
+ cat conftest.in conftest.in >conftest.tmp
+ mv conftest.tmp conftest.in
+ cp conftest.in conftest.nl
+ echo >>conftest.nl
+ $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
+ cmp -s conftest.out conftest.nl || break
+ # 10000 chars as input seems more than enough
+ test $lt_ac_count -gt 10 && break
+ lt_ac_count=`expr $lt_ac_count + 1`
+ if test $lt_ac_count -gt $lt_ac_max; then
+ lt_ac_max=$lt_ac_count
+ lt_cv_path_SED=$lt_ac_sed
+ fi
+ done
+done
+])
+SED=$lt_cv_path_SED
+AC_SUBST([SED])
+AC_MSG_RESULT([$SED])
+])#AC_PROG_SED
+])#m4_ifndef
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_SED], [])
+
+
+# _LT_CHECK_SHELL_FEATURES
+# ------------------------
+# Find out whether the shell is Bourne or XSI compatible,
+# or has some other useful features.
+m4_defun([_LT_CHECK_SHELL_FEATURES],
+[AC_MSG_CHECKING([whether the shell understands some XSI constructs])
+# Try some XSI features
+xsi_shell=no
+( _lt_dummy="a/b/c"
+ test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
+ = c,a/b,, \
+ && eval 'test $(( 1 + 1 )) -eq 2 \
+ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
+ && xsi_shell=yes
+AC_MSG_RESULT([$xsi_shell])
+_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell'])
+
+AC_MSG_CHECKING([whether the shell understands "+="])
+lt_shell_append=no
+( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \
+ >/dev/null 2>&1 \
+ && lt_shell_append=yes
+AC_MSG_RESULT([$lt_shell_append])
+_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append'])
+
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+ lt_unset=unset
+else
+ lt_unset=false
+fi
+_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl
+
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+ # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+ lt_SP2NL='tr \040 \012'
+ lt_NL2SP='tr \015\012 \040\040'
+ ;;
+ *) # EBCDIC based system
+ lt_SP2NL='tr \100 \n'
+ lt_NL2SP='tr \r\n \100\100'
+ ;;
+esac
+_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl
+_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl
+])# _LT_CHECK_SHELL_FEATURES
+
+
+# _LT_PROG_XSI_SHELLFNS
+# ---------------------
+# Bourne and XSI compatible variants of some useful shell functions.
+m4_defun([_LT_PROG_XSI_SHELLFNS],
+[case $xsi_shell in
+ yes)
+ cat << \_LT_EOF >> "$cfgfile"
+
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+ case ${1} in
+ */*) func_dirname_result="${1%/*}${2}" ;;
+ * ) func_dirname_result="${3}" ;;
+ esac
+}
+
+# func_basename file
+func_basename ()
+{
+ func_basename_result="${1##*/}"
+}
+
+# func_dirname_and_basename file append nondir_replacement
+# perform func_basename and func_dirname in a single function
+# call:
+# dirname: Compute the dirname of FILE. If nonempty,
+# add APPEND to the result, otherwise set result
+# to NONDIR_REPLACEMENT.
+# value returned in "$func_dirname_result"
+# basename: Compute filename of FILE.
+# value retuned in "$func_basename_result"
+# Implementation must be kept synchronized with func_dirname
+# and func_basename. For efficiency, we do not delegate to
+# those functions but instead duplicate the functionality here.
+func_dirname_and_basename ()
+{
+ case ${1} in
+ */*) func_dirname_result="${1%/*}${2}" ;;
+ * ) func_dirname_result="${3}" ;;
+ esac
+ func_basename_result="${1##*/}"
+}
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+func_stripname ()
+{
+ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+ # positional parameters, so assign one to ordinary parameter first.
+ func_stripname_result=${3}
+ func_stripname_result=${func_stripname_result#"${1}"}
+ func_stripname_result=${func_stripname_result%"${2}"}
+}
+
+# func_opt_split
+func_opt_split ()
+{
+ func_opt_split_opt=${1%%=*}
+ func_opt_split_arg=${1#*=}
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+ case ${1} in
+ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+ *) func_lo2o_result=${1} ;;
+ esac
+}
+
+# func_xform libobj-or-source
+func_xform ()
+{
+ func_xform_result=${1%.*}.lo
+}
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+ func_arith_result=$(( $[*] ))
+}
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+ func_len_result=${#1}
+}
+
+_LT_EOF
+ ;;
+ *) # Bourne compatible functions.
+ cat << \_LT_EOF >> "$cfgfile"
+
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+ # Extract subdirectory from the argument.
+ func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
+ if test "X$func_dirname_result" = "X${1}"; then
+ func_dirname_result="${3}"
+ else
+ func_dirname_result="$func_dirname_result${2}"
+ fi
+}
+
+# func_basename file
+func_basename ()
+{
+ func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
+}
+
+dnl func_dirname_and_basename
+dnl A portable version of this function is already defined in general.m4sh
+dnl so there is no need for it here.
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+# func_strip_suffix prefix name
+func_stripname ()
+{
+ case ${2} in
+ .*) func_stripname_result=`$ECHO "X${3}" \
+ | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;;
+ *) func_stripname_result=`$ECHO "X${3}" \
+ | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;;
+ esac
+}
+
+# sed scripts:
+my_sed_long_opt='1s/^\(-[[^=]]*\)=.*/\1/;q'
+my_sed_long_arg='1s/^-[[^=]]*=//'
+
+# func_opt_split
+func_opt_split ()
+{
+ func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"`
+ func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"`
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+ func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"`
+}
+
+# func_xform libobj-or-source
+func_xform ()
+{
+ func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[[^.]]*$/.lo/'`
+}
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+ func_arith_result=`expr "$[@]"`
+}
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+ func_len_result=`expr "$[1]" : ".*" 2>/dev/null || echo $max_cmd_len`
+}
+
+_LT_EOF
+esac
+
+case $lt_shell_append in
+ yes)
+ cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+ eval "$[1]+=\$[2]"
+}
+_LT_EOF
+ ;;
+ *)
+ cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+ eval "$[1]=\$$[1]\$[2]"
+}
+
+_LT_EOF
+ ;;
+ esac
+])
diff --git a/m4/ltoptions.m4 b/m4/ltoptions.m4
new file mode 100644
index 0000000..34151a3
--- /dev/null
+++ b/m4/ltoptions.m4
@@ -0,0 +1,368 @@
+# Helper functions for option handling. -*- Autoconf -*-
+#
+# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
+# Written by Gary V. Vaughan, 2004
+#
+# This file 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.
+
+# serial 6 ltoptions.m4
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])
+
+
+# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME)
+# ------------------------------------------
+m4_define([_LT_MANGLE_OPTION],
+[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])])
+
+
+# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME)
+# ---------------------------------------
+# Set option OPTION-NAME for macro MACRO-NAME, and if there is a
+# matching handler defined, dispatch to it. Other OPTION-NAMEs are
+# saved as a flag.
+m4_define([_LT_SET_OPTION],
+[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl
+m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]),
+ _LT_MANGLE_DEFUN([$1], [$2]),
+ [m4_warning([Unknown $1 option `$2'])])[]dnl
+])
+
+
+# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET])
+# ------------------------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+m4_define([_LT_IF_OPTION],
+[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])])
+
+
+# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET)
+# -------------------------------------------------------
+# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME
+# are set.
+m4_define([_LT_UNLESS_OPTIONS],
+[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
+ [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option),
+ [m4_define([$0_found])])])[]dnl
+m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3
+])[]dnl
+])
+
+
+# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST)
+# ----------------------------------------
+# OPTION-LIST is a space-separated list of Libtool options associated
+# with MACRO-NAME. If any OPTION has a matching handler declared with
+# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about
+# the unknown option and exit.
+m4_defun([_LT_SET_OPTIONS],
+[# Set options
+m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
+ [_LT_SET_OPTION([$1], _LT_Option)])
+
+m4_if([$1],[LT_INIT],[
+ dnl
+ dnl Simply set some default values (i.e off) if boolean options were not
+ dnl specified:
+ _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no
+ ])
+ _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no
+ ])
+ dnl
+ dnl If no reference was made to various pairs of opposing options, then
+ dnl we run the default mode handler for the pair. For example, if neither
+ dnl `shared' nor `disable-shared' was passed, we enable building of shared
+ dnl archives by default:
+ _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED])
+ _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC])
+ _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC])
+ _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install],
+ [_LT_ENABLE_FAST_INSTALL])
+ ])
+])# _LT_SET_OPTIONS
+
+
+## --------------------------------- ##
+## Macros to handle LT_INIT options. ##
+## --------------------------------- ##
+
+# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME)
+# -----------------------------------------
+m4_define([_LT_MANGLE_DEFUN],
+[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])])
+
+
+# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE)
+# -----------------------------------------------
+m4_define([LT_OPTION_DEFINE],
+[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl
+])# LT_OPTION_DEFINE
+
+
+# dlopen
+# ------
+LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes
+])
+
+AU_DEFUN([AC_LIBTOOL_DLOPEN],
+[_LT_SET_OPTION([LT_INIT], [dlopen])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `dlopen' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], [])
+
+
+# win32-dll
+# ---------
+# Declare package support for building win32 dll's.
+LT_OPTION_DEFINE([LT_INIT], [win32-dll],
+[enable_win32_dll=yes
+
+case $host in
+*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*)
+ AC_CHECK_TOOL(AS, as, false)
+ AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+ AC_CHECK_TOOL(OBJDUMP, objdump, false)
+ ;;
+esac
+
+test -z "$AS" && AS=as
+_LT_DECL([], [AS], [0], [Assembler program])dnl
+
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+_LT_DECL([], [DLLTOOL], [0], [DLL creation program])dnl
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+_LT_DECL([], [OBJDUMP], [0], [Object dumper program])dnl
+])# win32-dll
+
+AU_DEFUN([AC_LIBTOOL_WIN32_DLL],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+_LT_SET_OPTION([LT_INIT], [win32-dll])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `win32-dll' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [])
+
+
+# _LT_ENABLE_SHARED([DEFAULT])
+# ----------------------------
+# implement the --enable-shared flag, and supports the `shared' and
+# `disable-shared' LT_INIT options.
+# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_SHARED],
+[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([shared],
+ [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
+ [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])],
+ [p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_shared=yes ;;
+ no) enable_shared=no ;;
+ *)
+ enable_shared=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_shared=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac],
+ [enable_shared=]_LT_ENABLE_SHARED_DEFAULT)
+
+ _LT_DECL([build_libtool_libs], [enable_shared], [0],
+ [Whether or not to build shared libraries])
+])# _LT_ENABLE_SHARED
+
+LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])])
+
+# Old names:
+AC_DEFUN([AC_ENABLE_SHARED],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared])
+])
+
+AC_DEFUN([AC_DISABLE_SHARED],
+[_LT_SET_OPTION([LT_INIT], [disable-shared])
+])
+
+AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
+AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_ENABLE_SHARED], [])
+dnl AC_DEFUN([AM_DISABLE_SHARED], [])
+
+
+
+# _LT_ENABLE_STATIC([DEFAULT])
+# ----------------------------
+# implement the --enable-static flag, and support the `static' and
+# `disable-static' LT_INIT options.
+# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_STATIC],
+[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([static],
+ [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@],
+ [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])],
+ [p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_static=yes ;;
+ no) enable_static=no ;;
+ *)
+ enable_static=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_static=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac],
+ [enable_static=]_LT_ENABLE_STATIC_DEFAULT)
+
+ _LT_DECL([build_old_libs], [enable_static], [0],
+ [Whether or not to build static libraries])
+])# _LT_ENABLE_STATIC
+
+LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])])
+
+# Old names:
+AC_DEFUN([AC_ENABLE_STATIC],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static])
+])
+
+AC_DEFUN([AC_DISABLE_STATIC],
+[_LT_SET_OPTION([LT_INIT], [disable-static])
+])
+
+AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
+AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_ENABLE_STATIC], [])
+dnl AC_DEFUN([AM_DISABLE_STATIC], [])
+
+
+
+# _LT_ENABLE_FAST_INSTALL([DEFAULT])
+# ----------------------------------
+# implement the --enable-fast-install flag, and support the `fast-install'
+# and `disable-fast-install' LT_INIT options.
+# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_FAST_INSTALL],
+[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([fast-install],
+ [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
+ [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
+ [p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_fast_install=yes ;;
+ no) enable_fast_install=no ;;
+ *)
+ enable_fast_install=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_fast_install=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac],
+ [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT)
+
+_LT_DECL([fast_install], [enable_fast_install], [0],
+ [Whether or not to optimize for fast installation])dnl
+])# _LT_ENABLE_FAST_INSTALL
+
+LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])])
+
+# Old names:
+AU_DEFUN([AC_ENABLE_FAST_INSTALL],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the `fast-install' option into LT_INIT's first parameter.])
+])
+
+AU_DEFUN([AC_DISABLE_FAST_INSTALL],
+[_LT_SET_OPTION([LT_INIT], [disable-fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the `disable-fast-install' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], [])
+dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])
+
+
+# _LT_WITH_PIC([MODE])
+# --------------------
+# implement the --with-pic flag, and support the `pic-only' and `no-pic'
+# LT_INIT options.
+# MODE is either `yes' or `no'. If omitted, it defaults to `both'.
+m4_define([_LT_WITH_PIC],
+[AC_ARG_WITH([pic],
+ [AS_HELP_STRING([--with-pic],
+ [try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
+ [pic_mode="$withval"],
+ [pic_mode=default])
+
+test -z "$pic_mode" && pic_mode=m4_default([$1], [default])
+
+_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl
+])# _LT_WITH_PIC
+
+LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])])
+LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])])
+
+# Old name:
+AU_DEFUN([AC_LIBTOOL_PICMODE],
+[_LT_SET_OPTION([LT_INIT], [pic-only])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `pic-only' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_PICMODE], [])
+
+## ----------------- ##
+## LTDL_INIT Options ##
+## ----------------- ##
+
+m4_define([_LTDL_MODE], [])
+LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive],
+ [m4_define([_LTDL_MODE], [nonrecursive])])
+LT_OPTION_DEFINE([LTDL_INIT], [recursive],
+ [m4_define([_LTDL_MODE], [recursive])])
+LT_OPTION_DEFINE([LTDL_INIT], [subproject],
+ [m4_define([_LTDL_MODE], [subproject])])
+
+m4_define([_LTDL_TYPE], [])
+LT_OPTION_DEFINE([LTDL_INIT], [installable],
+ [m4_define([_LTDL_TYPE], [installable])])
+LT_OPTION_DEFINE([LTDL_INIT], [convenience],
+ [m4_define([_LTDL_TYPE], [convenience])])
diff --git a/m4/ltsugar.m4 b/m4/ltsugar.m4
new file mode 100644
index 0000000..9000a05
--- /dev/null
+++ b/m4/ltsugar.m4
@@ -0,0 +1,123 @@
+# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*-
+#
+# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
+# Written by Gary V. Vaughan, 2004
+#
+# This file 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.
+
+# serial 6 ltsugar.m4
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])])
+
+
+# lt_join(SEP, ARG1, [ARG2...])
+# -----------------------------
+# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their
+# associated separator.
+# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier
+# versions in m4sugar had bugs.
+m4_define([lt_join],
+[m4_if([$#], [1], [],
+ [$#], [2], [[$2]],
+ [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])])
+m4_define([_lt_join],
+[m4_if([$#$2], [2], [],
+ [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])])
+
+
+# lt_car(LIST)
+# lt_cdr(LIST)
+# ------------
+# Manipulate m4 lists.
+# These macros are necessary as long as will still need to support
+# Autoconf-2.59 which quotes differently.
+m4_define([lt_car], [[$1]])
+m4_define([lt_cdr],
+[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])],
+ [$#], 1, [],
+ [m4_dquote(m4_shift($@))])])
+m4_define([lt_unquote], $1)
+
+
+# lt_append(MACRO-NAME, STRING, [SEPARATOR])
+# ------------------------------------------
+# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'.
+# Note that neither SEPARATOR nor STRING are expanded; they are appended
+# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked).
+# No SEPARATOR is output if MACRO-NAME was previously undefined (different
+# than defined and empty).
+#
+# This macro is needed until we can rely on Autoconf 2.62, since earlier
+# versions of m4sugar mistakenly expanded SEPARATOR but not STRING.
+m4_define([lt_append],
+[m4_define([$1],
+ m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])])
+
+
+
+# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...])
+# ----------------------------------------------------------
+# Produce a SEP delimited list of all paired combinations of elements of
+# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list
+# has the form PREFIXmINFIXSUFFIXn.
+# Needed until we can rely on m4_combine added in Autoconf 2.62.
+m4_define([lt_combine],
+[m4_if(m4_eval([$# > 3]), [1],
+ [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl
+[[m4_foreach([_Lt_prefix], [$2],
+ [m4_foreach([_Lt_suffix],
+ ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[,
+ [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])])
+
+
+# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ])
+# -----------------------------------------------------------------------
+# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited
+# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ.
+m4_define([lt_if_append_uniq],
+[m4_ifdef([$1],
+ [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1],
+ [lt_append([$1], [$2], [$3])$4],
+ [$5])],
+ [lt_append([$1], [$2], [$3])$4])])
+
+
+# lt_dict_add(DICT, KEY, VALUE)
+# -----------------------------
+m4_define([lt_dict_add],
+[m4_define([$1($2)], [$3])])
+
+
+# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE)
+# --------------------------------------------
+m4_define([lt_dict_add_subkey],
+[m4_define([$1($2:$3)], [$4])])
+
+
+# lt_dict_fetch(DICT, KEY, [SUBKEY])
+# ----------------------------------
+m4_define([lt_dict_fetch],
+[m4_ifval([$3],
+ m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]),
+ m4_ifdef([$1($2)], [m4_defn([$1($2)])]))])
+
+
+# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE])
+# -----------------------------------------------------------------
+m4_define([lt_if_dict_fetch],
+[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4],
+ [$5],
+ [$6])])
+
+
+# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...])
+# --------------------------------------------------------------
+m4_define([lt_dict_filter],
+[m4_if([$5], [], [],
+ [lt_join(m4_quote(m4_default([$4], [[, ]])),
+ lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]),
+ [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl
+])
diff --git a/m4/ltversion.m4 b/m4/ltversion.m4
new file mode 100644
index 0000000..f3c5309
--- /dev/null
+++ b/m4/ltversion.m4
@@ -0,0 +1,23 @@
+# ltversion.m4 -- version numbers -*- Autoconf -*-
+#
+# Copyright (C) 2004 Free Software Foundation, Inc.
+# Written by Scott James Remnant, 2004
+#
+# This file 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.
+
+# Generated from ltversion.in.
+
+# serial 3017 ltversion.m4
+# This file is part of GNU Libtool
+
+m4_define([LT_PACKAGE_VERSION], [2.2.6b])
+m4_define([LT_PACKAGE_REVISION], [1.3017])
+
+AC_DEFUN([LTVERSION_VERSION],
+[macro_version='2.2.6b'
+macro_revision='1.3017'
+_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
+_LT_DECL(, macro_revision, 0)
+])
diff --git a/m4/lt~obsolete.m4 b/m4/lt~obsolete.m4
new file mode 100644
index 0000000..637bb20
--- /dev/null
+++ b/m4/lt~obsolete.m4
@@ -0,0 +1,92 @@
+# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*-
+#
+# Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc.
+# Written by Scott James Remnant, 2004.
+#
+# This file 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.
+
+# serial 4 lt~obsolete.m4
+
+# These exist entirely to fool aclocal when bootstrapping libtool.
+#
+# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN)
+# which have later been changed to m4_define as they aren't part of the
+# exported API, or moved to Autoconf or Automake where they belong.
+#
+# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN
+# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us
+# using a macro with the same name in our local m4/libtool.m4 it'll
+# pull the old libtool.m4 in (it doesn't see our shiny new m4_define
+# and doesn't know about Autoconf macros at all.)
+#
+# So we provide this file, which has a silly filename so it's always
+# included after everything else. This provides aclocal with the
+# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything
+# because those macros already exist, or will be overwritten later.
+# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6.
+#
+# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here.
+# Yes, that means every name once taken will need to remain here until
+# we give up compatibility with versions before 1.7, at which point
+# we need to keep only those names which we still refer to.
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])])
+
+m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])])
+m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])])
+m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])])
+m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])])
+m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])])
+m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])])
+m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])])
+m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])])
+m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])])
+m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])])
+m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])])
+m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])])
+m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])])
+m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])])
+m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])])
+m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])])
+m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])])
+m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])])
+m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])])
+m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])])
+m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])])
+m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])])
+m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])])
+m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])])
+m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])])
+m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])])
+m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])])
+m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])])
+m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])])
+m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])])
+m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])])
+m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])])
+m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])])
+m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])])
+m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])])
+m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])])
+m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])])
+m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])])
+m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])])
+m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])])
+m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])])
+m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])])
+m4_ifndef([AC_LIBTOOL_RC], [AC_DEFUN([AC_LIBTOOL_RC])])
+m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])])
+m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])])
+m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])])
+m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])])
+m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])])
+m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])])
+m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])])
+m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])])
diff --git a/maketgz b/maketgz
new file mode 100755
index 0000000..b2a09be
--- /dev/null
+++ b/maketgz
@@ -0,0 +1,186 @@
+#! /bin/sh
+# Script to build release-archives with. Note that this requires a checkout
+# from git and you should first run ./buildconf and build curl once.
+#
+#***************************************************************************
+# _ _ ____ _
+# Project ___| | | | _ \| |
+# / __| | | | |_) | |
+# | (__| |_| | _ <| |___
+# \___|\___/|_| \_\_____|
+#
+# Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+#
+# This software is licensed as described in the file COPYING, which
+# you should have received as part of this distribution. The terms
+# are also available at http://curl.haxx.se/docs/copyright.html.
+#
+# You may opt to use, copy, modify, merge, publish, distribute and/or sell
+# copies of the Software, and permit persons to whom the Software is
+# furnished to do so, under the terms of the COPYING file.
+#
+# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+# KIND, either express or implied.
+#
+###########################################################################
+
+version=$1
+
+if [ -z "$version" ]; then
+ echo "Specify a version number!"
+ exit
+fi
+
+libversion="$version"
+
+# we make curl the same version as libcurl
+curlversion=$libversion
+
+major=`echo $libversion |cut -d. -f1 | sed -e "s/[^0-9]//g"`
+minor=`echo $libversion |cut -d. -f2 | sed -e "s/[^0-9]//g"`
+patch=`echo $libversion |cut -d. -f3 | cut -d- -f1 | sed -e "s/[^0-9]//g"`
+
+numeric=`perl -e 'printf("%02x%02x%02x\n", '"$major, $minor, $patch);"`
+
+HEADER=include/curl/curlver.h
+CHEADER=src/version.h
+
+# requires a date command that knows -u for UTC time zone
+datestamp=`date -u`
+
+# Replace version number in header file:
+sed -e 's/^#define LIBCURL_VERSION .*/#define LIBCURL_VERSION "'$libversion'"/g' \
+ -e 's/^#define LIBCURL_VERSION_NUM .*/#define LIBCURL_VERSION_NUM 0x'$numeric'/g' \
+ -e 's/^#define LIBCURL_VERSION_MAJOR .*/#define LIBCURL_VERSION_MAJOR '$major'/g' \
+ -e 's/^#define LIBCURL_VERSION_MINOR .*/#define LIBCURL_VERSION_MINOR '$minor'/g' \
+ -e 's/^#define LIBCURL_VERSION_PATCH .*/#define LIBCURL_VERSION_PATCH '$patch'/g' \
+ -e "s/^#define LIBCURL_TIMESTAMP .*/#define LIBCURL_TIMESTAMP \"$datestamp\"/g" \
+ $HEADER >$HEADER.dist
+
+# Replace version number in header file:
+sed 's/#define CURL_VERSION .*/#define CURL_VERSION "'$curlversion'"/g' $CHEADER >$CHEADER.dist
+
+# Generate VC8, VC9, and VC10 versions from the VC6 Makefile versions
+for ver in vc8 vc9 vc10; do
+ make -f Makefile.dist $ver
+ mv src/Makefile.$ver src/Makefile.$ver.dist
+ mv lib/Makefile.$ver lib/Makefile.$ver.dist
+done
+
+# Replace version number in plist file:
+PLIST=lib/libcurl.plist
+sed "s/7\.12\.3/$libversion/g" $PLIST > $PLIST.dist
+
+echo "curl version $curlversion"
+echo "libcurl version $libversion"
+echo "libcurl numerical $numeric"
+echo "datestamp $datestamp"
+
+findprog()
+{
+ file="$1"
+ for part in `echo $PATH| tr ':' ' '`; do
+ path="$part/$file"
+ if [ -x "$path" ]; then
+ # there it is!
+ return 1
+ fi
+ done
+
+ # no such executable
+ return 0
+}
+
+echo "maketgz: cp lib/curl_config.h.in src/curl_config.h.in"
+cp lib/curl_config.h.in src/curl_config.h.in
+
+############################################################################
+#
+# Enforce a rerun of configure (updates the VERSION)
+#
+
+echo "Re-running config.status"
+./config.status --recheck >/dev/null
+
+############################################################################
+#
+# automake is needed to run to make a non-GNU Makefile.in if Makefile.am has
+# been modified.
+#
+
+if { findprog automake >/dev/null 2>/dev/null; } then
+ echo "- Could not find or run automake, I hope you know what you're doing!"
+else
+ echo "Runs automake --include-deps"
+ automake --include-deps Makefile >/dev/null
+fi
+
+############################################################################
+#
+# Make sure we have updated HTML versions of all man pages:
+#
+echo "make html"
+make -s html
+
+# And the PDF versions
+echo "make pdf"
+make -s pdf
+
+echo "produce CHANGES"
+git log --pretty=fuller --no-color --date=short --decorate=full -1000 | ./log2changes.pl > CHANGES.dist
+
+############################################################################
+#
+# Now run make dist to generate a tar.gz archive
+#
+
+echo "make dist"
+targz="curl-$version.tar.gz"
+make -s dist VERSION=$version
+
+############################################################################
+#
+# Now make a bz2 archive from the tar.gz original
+#
+
+bzip2="curl-$version.tar.bz2"
+echo "Generating $bzip2"
+gzip -dc $targz | bzip2 --best - > $bzip2
+
+############################################################################
+#
+# Now make an lzma archive from the tar.gz original
+#
+
+lzma="curl-$version.tar.lzma"
+echo "Generating $lzma"
+gzip -dc $targz | lzma --best - > $lzma
+
+############################################################################
+#
+# Now make a zip archive from the tar.gz original
+#
+makezip ()
+{
+ rm -rf $tempdir
+ mkdir $tempdir
+ cd $tempdir
+ gzip -dc ../$targz | tar -xf -
+ find . | zip $zip -@ >/dev/null
+ mv $zip ../
+ cd ..
+ rm -rf $tempdir
+}
+
+zip="curl-$version.zip"
+echo "Generating $zip"
+tempdir=".builddir"
+makezip
+
+echo "------------------"
+echo "maketgz report:"
+echo ""
+ls -l $targz $bzip2 $zip $lzma
+
+echo "Run this:"
+echo "gpg -b -a $targz && gpg -b -a $bzip2 && gpg -b -a $zip && gpg -b -a $lzma"
diff --git a/missing b/missing
new file mode 100755
index 0000000..a9f9d94
--- /dev/null
+++ b/missing
@@ -0,0 +1,283 @@
+#! /bin/sh
+# Common stub for a few missing GNU programs while installing.
+# Copyright 1996, 1997, 1999, 2000 Free Software Foundation, Inc.
+# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
+
+# 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 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.
+
+if test $# -eq 0; then
+ echo 1>&2 "Try \`$0 --help' for more information"
+ exit 1
+fi
+
+run=:
+
+# In the cases where this matters, `missing' is being run in the
+# srcdir already.
+if test -f configure.ac; then
+ configure_ac=configure.ac
+else
+ configure_ac=configure.in
+fi
+
+case "$1" in
+--run)
+ # Try to run requested program, and just exit if it succeeds.
+ run=
+ shift
+ "$@" && exit 0
+ ;;
+esac
+
+# If it does not exist, or fails to run (possibly an outdated version),
+# try to emulate it.
+case "$1" in
+
+ -h|--h|--he|--hel|--help)
+ echo "\
+$0 [OPTION]... PROGRAM [ARGUMENT]...
+
+Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
+error status if there is no known handling for PROGRAM.
+
+Options:
+ -h, --help display this help and exit
+ -v, --version output version information and exit
+ --run try to run the given command, and emulate it if it fails
+
+Supported PROGRAM values:
+ aclocal touch file \`aclocal.m4'
+ autoconf touch file \`configure'
+ autoheader touch file \`curl_config.h.in'
+ automake touch all \`Makefile.in' files
+ bison create \`y.tab.[ch]', if possible, from existing .[ch]
+ flex create \`lex.yy.c', if possible, from existing .c
+ help2man touch the output file
+ lex create \`lex.yy.c', if possible, from existing .c
+ makeinfo touch the output file
+ tar try tar, gnutar, gtar, then tar without non-portable flags
+ yacc create \`y.tab.[ch]', if possible, from existing .[ch]"
+ ;;
+
+ -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
+ echo "missing 0.3 - GNU automake"
+ ;;
+
+ -*)
+ echo 1>&2 "$0: Unknown \`$1' option"
+ echo 1>&2 "Try \`$0 --help' for more information"
+ exit 1
+ ;;
+
+ aclocal)
+ echo 1>&2 "\
+WARNING: \`$1' is missing on your system. You should only need it if
+ you modified \`acinclude.m4' or \`${configure_ac}'. You might want
+ to install the \`Automake' and \`Perl' packages. Grab them from
+ any GNU archive site."
+ touch aclocal.m4
+ ;;
+
+ autoconf)
+ echo 1>&2 "\
+WARNING: \`$1' is missing on your system. You should only need it if
+ you modified \`${configure_ac}'. You might want to install the
+ \`Autoconf' and \`GNU m4' packages. Grab them from any GNU
+ archive site."
+ touch configure
+ ;;
+
+ autoheader)
+ echo 1>&2 "\
+WARNING: \`$1' is missing on your system. You should only need it if
+ you modified \`acconfig.h' or \`${configure_ac}'. You might want
+ to install the \`Autoconf' and \`GNU m4' packages. Grab them
+ from any GNU archive site."
+ files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
+ test -z "$files" && files="curl_config.h"
+ touch_files=
+ for f in $files; do
+ case "$f" in
+ *:*) touch_files="$touch_files "`echo "$f" |
+ sed -e 's/^[^:]*://' -e 's/:.*//'`;;
+ *) touch_files="$touch_files $f.in";;
+ esac
+ done
+ touch $touch_files
+ ;;
+
+ automake)
+ echo 1>&2 "\
+WARNING: \`$1' is missing on your system. You should only need it if
+ you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
+ You might want to install the \`Automake' and \`Perl' packages.
+ Grab them from any GNU archive site."
+ find . -type f -name Makefile.am -print |
+ sed 's/\.am$/.in/' |
+ while read f; do touch "$f"; done
+ ;;
+
+ bison|yacc)
+ echo 1>&2 "\
+WARNING: \`$1' is missing on your system. You should only need it if
+ you modified a \`.y' file. You may need the \`Bison' package
+ in order for those modifications to take effect. You can get
+ \`Bison' from any GNU archive site."
+ rm -f y.tab.c y.tab.h
+ if [ $# -ne 1 ]; then
+ eval LASTARG="\${$#}"
+ case "$LASTARG" in
+ *.y)
+ SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
+ if [ -f "$SRCFILE" ]; then
+ cp "$SRCFILE" y.tab.c
+ fi
+ SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
+ if [ -f "$SRCFILE" ]; then
+ cp "$SRCFILE" y.tab.h
+ fi
+ ;;
+ esac
+ fi
+ if [ ! -f y.tab.h ]; then
+ echo >y.tab.h
+ fi
+ if [ ! -f y.tab.c ]; then
+ echo 'main() { return 0; }' >y.tab.c
+ fi
+ ;;
+
+ lex|flex)
+ echo 1>&2 "\
+WARNING: \`$1' is missing on your system. You should only need it if
+ you modified a \`.l' file. You may need the \`Flex' package
+ in order for those modifications to take effect. You can get
+ \`Flex' from any GNU archive site."
+ rm -f lex.yy.c
+ if [ $# -ne 1 ]; then
+ eval LASTARG="\${$#}"
+ case "$LASTARG" in
+ *.l)
+ SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
+ if [ -f "$SRCFILE" ]; then
+ cp "$SRCFILE" lex.yy.c
+ fi
+ ;;
+ esac
+ fi
+ if [ ! -f lex.yy.c ]; then
+ echo 'main() { return 0; }' >lex.yy.c
+ fi
+ ;;
+
+ help2man)
+ echo 1>&2 "\
+WARNING: \`$1' is missing on your system. You should only need it if
+ you modified a dependency of a manual page. You may need the
+ \`Help2man' package in order for those modifications to take
+ effect. You can get \`Help2man' from any GNU archive site."
+
+ file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
+ if test -z "$file"; then
+ file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'`
+ fi
+ if [ -f "$file" ]; then
+ touch $file
+ else
+ test -z "$file" || exec >$file
+ echo ".ab help2man is required to generate this page"
+ exit 1
+ fi
+ ;;
+
+ makeinfo)
+ if test -z "$run" && (makeinfo --version) > /dev/null 2>&1; then
+ # We have makeinfo, but it failed.
+ exit 1
+ fi
+
+ echo 1>&2 "\
+WARNING: \`$1' is missing on your system. You should only need it if
+ you modified a \`.texi' or \`.texinfo' file, or any other file
+ indirectly affecting the aspect of the manual. The spurious
+ call might also be the consequence of using a buggy \`make' (AIX,
+ DU, IRIX). You might want to install the \`Texinfo' package or
+ the \`GNU make' package. Grab either from any GNU archive site."
+ file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
+ if test -z "$file"; then
+ file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
+ file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file`
+ fi
+ touch $file
+ ;;
+
+ tar)
+ shift
+ if test -n "$run"; then
+ echo 1>&2 "ERROR: \`tar' requires --run"
+ exit 1
+ fi
+
+ # We have already tried tar in the generic part.
+ # Look for gnutar/gtar before invocation to avoid ugly error
+ # messages.
+ if (gnutar --version > /dev/null 2>&1); then
+ gnutar ${1+"$@"} && exit 0
+ fi
+ if (gtar --version > /dev/null 2>&1); then
+ gtar ${1+"$@"} && exit 0
+ fi
+ firstarg="$1"
+ if shift; then
+ case "$firstarg" in
+ *o*)
+ firstarg=`echo "$firstarg" | sed s/o//`
+ tar "$firstarg" ${1+"$@"} && exit 0
+ ;;
+ esac
+ case "$firstarg" in
+ *h*)
+ firstarg=`echo "$firstarg" | sed s/h//`
+ tar "$firstarg" ${1+"$@"} && exit 0
+ ;;
+ esac
+ fi
+
+ echo 1>&2 "\
+WARNING: I can't seem to be able to run \`tar' with the given arguments.
+ You may want to install GNU tar or Free paxutils, or check the
+ command line arguments."
+ exit 1
+ ;;
+
+ *)
+ echo 1>&2 "\
+WARNING: \`$1' is needed, and you do not seem to have it handy on your
+ system. You might have modified some files without having the
+ proper tools for further handling them. Check the \`README' file,
+ it often tells you about the needed prerequirements for installing
+ this package. You may also peek at any GNU archive site, in case
+ some other package would contain this missing \`$1' program."
+ exit 1
+ ;;
+esac
+
+exit 0
diff --git a/mkinstalldirs b/mkinstalldirs
new file mode 100644
index 0000000..115df4e
--- /dev/null
+++ b/mkinstalldirs
@@ -0,0 +1,39 @@
+#! /bin/sh
+# mkinstalldirs --- make directory hierarchy
+# Author: Noah Friedman <friedman@prep.ai.mit.edu>
+# Created: 1993-05-16
+# Public domain
+
+
+errstatus=0
+
+for file
+do
+ set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
+ shift
+
+ pathcomp=
+ for d
+ do
+ pathcomp="$pathcomp$d"
+ case "$pathcomp" in
+ -* ) pathcomp=./$pathcomp ;;
+ esac
+
+ if test ! -d "$pathcomp"; then
+ echo "mkdir -m0755 $pathcomp" 1>&2
+
+ mkdir -m0755 "$pathcomp" || lasterr=$?
+
+ if test ! -d "$pathcomp"; then
+ errstatus=$lasterr
+ fi
+ fi
+
+ pathcomp="$pathcomp/"
+ done
+done
+
+exit $errstatus
+
+# mkinstalldirs ends here
diff --git a/packages/AIX/Makefile.am b/packages/AIX/Makefile.am
new file mode 100644
index 0000000..4b038ed
--- /dev/null
+++ b/packages/AIX/Makefile.am
@@ -0,0 +1,3 @@
+SUBDIRS = RPM
+
+EXTRA_DIST = Makefile.am
diff --git a/packages/AIX/Makefile.in b/packages/AIX/Makefile.in
new file mode 100644
index 0000000..fe45453
--- /dev/null
+++ b/packages/AIX/Makefile.in
@@ -0,0 +1,563 @@
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005 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.
+
+@SET_MAKE@
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = packages/AIX
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
+ $(top_srcdir)/m4/curl-confopts.m4 \
+ $(top_srcdir)/m4/curl-functions.m4 \
+ $(top_srcdir)/m4/curl-override.m4 \
+ $(top_srcdir)/m4/curl-reentrant.m4 \
+ $(top_srcdir)/m4/curl-system.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/lib/curl_config.h \
+ $(top_builddir)/src/curl_config.h \
+ $(top_builddir)/include/curl/curlbuild.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-recursive \
+ install-exec-recursive install-info-recursive \
+ install-recursive installcheck-recursive installdirs-recursive \
+ pdf-recursive ps-recursive uninstall-info-recursive \
+ uninstall-recursive
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_LIBHOSTNAME_FALSE = @BUILD_LIBHOSTNAME_FALSE@
+BUILD_LIBHOSTNAME_TRUE = @BUILD_LIBHOSTNAME_TRUE@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_OPTIONS = @CONFIGURE_OPTIONS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CROSSCOMPILING_FALSE = @CROSSCOMPILING_FALSE@
+CROSSCOMPILING_TRUE = @CROSSCOMPILING_TRUE@
+CURLDEBUG_FALSE = @CURLDEBUG_FALSE@
+CURLDEBUG_TRUE = @CURLDEBUG_TRUE@
+CURL_CA_BUNDLE = @CURL_CA_BUNDLE@
+CURL_CFLAG_EXTRAS = @CURL_CFLAG_EXTRAS@
+CURL_DISABLE_DICT = @CURL_DISABLE_DICT@
+CURL_DISABLE_FILE = @CURL_DISABLE_FILE@
+CURL_DISABLE_FTP = @CURL_DISABLE_FTP@
+CURL_DISABLE_GOPHER = @CURL_DISABLE_GOPHER@
+CURL_DISABLE_HTTP = @CURL_DISABLE_HTTP@
+CURL_DISABLE_IMAP = @CURL_DISABLE_IMAP@
+CURL_DISABLE_LDAP = @CURL_DISABLE_LDAP@
+CURL_DISABLE_LDAPS = @CURL_DISABLE_LDAPS@
+CURL_DISABLE_POP3 = @CURL_DISABLE_POP3@
+CURL_DISABLE_PROXY = @CURL_DISABLE_PROXY@
+CURL_DISABLE_RTSP = @CURL_DISABLE_RTSP@
+CURL_DISABLE_SMTP = @CURL_DISABLE_SMTP@
+CURL_DISABLE_TELNET = @CURL_DISABLE_TELNET@
+CURL_DISABLE_TFTP = @CURL_DISABLE_TFTP@
+CURL_LIBS = @CURL_LIBS@
+CURL_NETWORK_LIBS = @CURL_NETWORK_LIBS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_SHARED = @ENABLE_SHARED@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_LDAP_SSL = @HAVE_LDAP_SSL@
+HAVE_LIBZ = @HAVE_LIBZ@
+HAVE_LIBZ_FALSE = @HAVE_LIBZ_FALSE@
+HAVE_LIBZ_TRUE = @HAVE_LIBZ_TRUE@
+HAVE_PK11_CREATEGENERICOBJECT = @HAVE_PK11_CREATEGENERICOBJECT@
+IDN_ENABLED = @IDN_ENABLED@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+IPV6_ENABLED = @IPV6_ENABLED@
+KRB4_ENABLED = @KRB4_ENABLED@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBCURL_LIBS = @LIBCURL_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+MANOPT = @MANOPT@
+MIMPURE_FALSE = @MIMPURE_FALSE@
+MIMPURE_TRUE = @MIMPURE_TRUE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NO_UNDEFINED_FALSE = @NO_UNDEFINED_FALSE@
+NO_UNDEFINED_TRUE = @NO_UNDEFINED_TRUE@
+NROFF = @NROFF@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH = @PATH@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+PKGADD_NAME = @PKGADD_NAME@
+PKGADD_PKG = @PKGADD_PKG@
+PKGADD_VENDOR = @PKGADD_VENDOR@
+PKGCONFIG = @PKGCONFIG@
+RANDOM_FILE = @RANDOM_FILE@
+RANLIB = @RANLIB@
+REQUIRE_LIB_DEPS = @REQUIRE_LIB_DEPS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SONAME_BUMP_FALSE = @SONAME_BUMP_FALSE@
+SONAME_BUMP_TRUE = @SONAME_BUMP_TRUE@
+SSL_ENABLED = @SSL_ENABLED@
+STATICLIB_FALSE = @STATICLIB_FALSE@
+STATICLIB_TRUE = @STATICLIB_TRUE@
+STRIP = @STRIP@
+SUPPORT_FEATURES = @SUPPORT_FEATURES@
+SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
+TEST_SERVER_LIBS = @TEST_SERVER_LIBS@
+USE_ARES = @USE_ARES@
+USE_EMBEDDED_ARES_FALSE = @USE_EMBEDDED_ARES_FALSE@
+USE_EMBEDDED_ARES_TRUE = @USE_EMBEDDED_ARES_TRUE@
+USE_GNUTLS = @USE_GNUTLS@
+USE_LIBRTMP = @USE_LIBRTMP@
+USE_LIBSSH2 = @USE_LIBSSH2@
+USE_MANUAL_FALSE = @USE_MANUAL_FALSE@
+USE_MANUAL_TRUE = @USE_MANUAL_TRUE@
+USE_NSS = @USE_NSS@
+USE_OPENLDAP = @USE_OPENLDAP@
+USE_POLARSSL = @USE_POLARSSL@
+USE_SSLEAY = @USE_SSLEAY@
+USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
+VERSION = @VERSION@
+VERSIONNUM = @VERSIONNUM@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+libext = @libext@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+SUBDIRS = RPM
+EXTRA_DIST = Makefile.am
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign packages/AIX/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --foreign packages/AIX/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+ -rm -f libtool
+uninstall-info-am:
+
+# 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.
+$(RECURSIVE_TARGETS):
+ @failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ 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) \
+ || eval $$failcom; \
+ 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:
+ @failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ rev=''; for subdir in $$list; do \
+ if test "$$subdir" = "."; then :; else \
+ rev="$$subdir $$rev"; \
+ fi; \
+ done; \
+ 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) \
+ || eval $$failcom; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique; \
+ fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ list='$(DISTFILES)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkdir_p) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+ list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -d "$(distdir)/$$subdir" \
+ || $(mkdir_p) "$(distdir)/$$subdir" \
+ || exit 1; \
+ distdir=`$(am__cd) $(distdir) && pwd`; \
+ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
+ (cd $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$top_distdir" \
+ distdir="$$distdir/$$subdir" \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-libtool \
+ distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-recursive
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-info-am
+
+uninstall-info: uninstall-info-recursive
+
+.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \
+ clean clean-generic clean-libtool clean-recursive ctags \
+ ctags-recursive distclean distclean-generic distclean-libtool \
+ distclean-recursive distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-exec install-exec-am install-info \
+ install-info-am install-man install-strip installcheck \
+ installcheck-am installdirs installdirs-am maintainer-clean \
+ maintainer-clean-generic maintainer-clean-recursive \
+ mostlyclean mostlyclean-generic mostlyclean-libtool \
+ mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \
+ uninstall uninstall-am uninstall-info-am
+
+# 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/packages/AIX/RPM/Makefile.am b/packages/AIX/RPM/Makefile.am
new file mode 100644
index 0000000..d1e7bf9
--- /dev/null
+++ b/packages/AIX/RPM/Makefile.am
@@ -0,0 +1,2 @@
+EXTRA_DIST = README curl.spec.in
+
diff --git a/packages/AIX/RPM/Makefile.in b/packages/AIX/RPM/Makefile.in
new file mode 100644
index 0000000..42f73d7
--- /dev/null
+++ b/packages/AIX/RPM/Makefile.in
@@ -0,0 +1,408 @@
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005 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.
+
+@SET_MAKE@
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = packages/AIX/RPM
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(srcdir)/curl.spec.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
+ $(top_srcdir)/m4/curl-confopts.m4 \
+ $(top_srcdir)/m4/curl-functions.m4 \
+ $(top_srcdir)/m4/curl-override.m4 \
+ $(top_srcdir)/m4/curl-reentrant.m4 \
+ $(top_srcdir)/m4/curl-system.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/lib/curl_config.h \
+ $(top_builddir)/src/curl_config.h \
+ $(top_builddir)/include/curl/curlbuild.h
+CONFIG_CLEAN_FILES = curl.spec
+SOURCES =
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_LIBHOSTNAME_FALSE = @BUILD_LIBHOSTNAME_FALSE@
+BUILD_LIBHOSTNAME_TRUE = @BUILD_LIBHOSTNAME_TRUE@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_OPTIONS = @CONFIGURE_OPTIONS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CROSSCOMPILING_FALSE = @CROSSCOMPILING_FALSE@
+CROSSCOMPILING_TRUE = @CROSSCOMPILING_TRUE@
+CURLDEBUG_FALSE = @CURLDEBUG_FALSE@
+CURLDEBUG_TRUE = @CURLDEBUG_TRUE@
+CURL_CA_BUNDLE = @CURL_CA_BUNDLE@
+CURL_CFLAG_EXTRAS = @CURL_CFLAG_EXTRAS@
+CURL_DISABLE_DICT = @CURL_DISABLE_DICT@
+CURL_DISABLE_FILE = @CURL_DISABLE_FILE@
+CURL_DISABLE_FTP = @CURL_DISABLE_FTP@
+CURL_DISABLE_GOPHER = @CURL_DISABLE_GOPHER@
+CURL_DISABLE_HTTP = @CURL_DISABLE_HTTP@
+CURL_DISABLE_IMAP = @CURL_DISABLE_IMAP@
+CURL_DISABLE_LDAP = @CURL_DISABLE_LDAP@
+CURL_DISABLE_LDAPS = @CURL_DISABLE_LDAPS@
+CURL_DISABLE_POP3 = @CURL_DISABLE_POP3@
+CURL_DISABLE_PROXY = @CURL_DISABLE_PROXY@
+CURL_DISABLE_RTSP = @CURL_DISABLE_RTSP@
+CURL_DISABLE_SMTP = @CURL_DISABLE_SMTP@
+CURL_DISABLE_TELNET = @CURL_DISABLE_TELNET@
+CURL_DISABLE_TFTP = @CURL_DISABLE_TFTP@
+CURL_LIBS = @CURL_LIBS@
+CURL_NETWORK_LIBS = @CURL_NETWORK_LIBS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_SHARED = @ENABLE_SHARED@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_LDAP_SSL = @HAVE_LDAP_SSL@
+HAVE_LIBZ = @HAVE_LIBZ@
+HAVE_LIBZ_FALSE = @HAVE_LIBZ_FALSE@
+HAVE_LIBZ_TRUE = @HAVE_LIBZ_TRUE@
+HAVE_PK11_CREATEGENERICOBJECT = @HAVE_PK11_CREATEGENERICOBJECT@
+IDN_ENABLED = @IDN_ENABLED@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+IPV6_ENABLED = @IPV6_ENABLED@
+KRB4_ENABLED = @KRB4_ENABLED@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBCURL_LIBS = @LIBCURL_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+MANOPT = @MANOPT@
+MIMPURE_FALSE = @MIMPURE_FALSE@
+MIMPURE_TRUE = @MIMPURE_TRUE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NO_UNDEFINED_FALSE = @NO_UNDEFINED_FALSE@
+NO_UNDEFINED_TRUE = @NO_UNDEFINED_TRUE@
+NROFF = @NROFF@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH = @PATH@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+PKGADD_NAME = @PKGADD_NAME@
+PKGADD_PKG = @PKGADD_PKG@
+PKGADD_VENDOR = @PKGADD_VENDOR@
+PKGCONFIG = @PKGCONFIG@
+RANDOM_FILE = @RANDOM_FILE@
+RANLIB = @RANLIB@
+REQUIRE_LIB_DEPS = @REQUIRE_LIB_DEPS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SONAME_BUMP_FALSE = @SONAME_BUMP_FALSE@
+SONAME_BUMP_TRUE = @SONAME_BUMP_TRUE@
+SSL_ENABLED = @SSL_ENABLED@
+STATICLIB_FALSE = @STATICLIB_FALSE@
+STATICLIB_TRUE = @STATICLIB_TRUE@
+STRIP = @STRIP@
+SUPPORT_FEATURES = @SUPPORT_FEATURES@
+SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
+TEST_SERVER_LIBS = @TEST_SERVER_LIBS@
+USE_ARES = @USE_ARES@
+USE_EMBEDDED_ARES_FALSE = @USE_EMBEDDED_ARES_FALSE@
+USE_EMBEDDED_ARES_TRUE = @USE_EMBEDDED_ARES_TRUE@
+USE_GNUTLS = @USE_GNUTLS@
+USE_LIBRTMP = @USE_LIBRTMP@
+USE_LIBSSH2 = @USE_LIBSSH2@
+USE_MANUAL_FALSE = @USE_MANUAL_FALSE@
+USE_MANUAL_TRUE = @USE_MANUAL_TRUE@
+USE_NSS = @USE_NSS@
+USE_OPENLDAP = @USE_OPENLDAP@
+USE_POLARSSL = @USE_POLARSSL@
+USE_SSLEAY = @USE_SSLEAY@
+USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
+VERSION = @VERSION@
+VERSIONNUM = @VERSIONNUM@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+libext = @libext@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+EXTRA_DIST = README curl.spec.in
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign packages/AIX/RPM/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --foreign packages/AIX/RPM/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+curl.spec: $(top_builddir)/config.status $(srcdir)/curl.spec.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+ -rm -f libtool
+uninstall-info-am:
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ list='$(DISTFILES)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkdir_p) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-libtool
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ distclean distclean-generic distclean-libtool distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-exec install-exec-am \
+ install-info install-info-am install-man install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+ uninstall-info-am
+
+# 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/packages/AIX/RPM/README b/packages/AIX/RPM/README
new file mode 100644
index 0000000..790beb8
--- /dev/null
+++ b/packages/AIX/RPM/README
@@ -0,0 +1,33 @@
+ _ _ ____ _
+ ___| | | | _ \| |
+ / __| | | | |_) | |
+ ( (__| |_| | _ <| |___
+ \___|\___/|_| \_\_____|
+ for AIX Toolbox
+
+Author: Tor Arntsen
+
+The spec file in this directory is based on the Linux ssl and non-ssl
+curl spec files, plus additions to make it AIX Toolbox compatible.
+
+The AIX Toolbox setup (installs into /opt/freeware, with symlinks in
+/usr/bin,/usr/lib,/usr/include) are based on IBM's aixtoolbox spec
+file written by David Clissold <cliss@austin.ibm.com>, see
+
+ftp://ftp.software.ibm.com/aixtoolbox/SPECS/curl-7.9.3-2.spec
+
+This spec file is designed to be a drop-in replacement for the
+old spec file found at the above link. Thus, like the old spec file
+this version is also a unified ssl/non-ssl version. To get non-ssl
+RPMs just pass --define 'nossl 1' to the command line when building
+the RPM, e.g.
+
+rpm -bb --define 'nossl 1' curl.spec
+
+Default is to build with ssl support.
+
+Lastly, the spec file expects the Curl source distribution file to be
+in .tar.bz2 format.
+
+The nifty cURL header of this README is a ripoff of the vms/readme file.
+
diff --git a/packages/AIX/RPM/curl.spec.in b/packages/AIX/RPM/curl.spec.in
new file mode 100644
index 0000000..a37e0d7
--- /dev/null
+++ b/packages/AIX/RPM/curl.spec.in
@@ -0,0 +1,132 @@
+# Use --define 'nossl 1' on the command line to disable SSL detection
+%{!?nossl:%define SSL 1}
+%{?nossl:%define SSL 0}
+
+%define name curl
+%define version @VERSION@
+%define release 1%{!?nossl:ssl}
+
+%define curlroot %{_builddir}/%{name}-%{version}
+
+Summary: get a file from a FTP or HTTP server.
+Name: %{name}
+Version: %{version}
+Release: %{release}
+License: MIT/X derivate
+Vendor: Daniel Stenberg <Daniel.Stenberg@haxx.se>
+Group: Applications/Internet
+Source: %{name}-%{version}.tar.bz2
+URL: http://curl.haxx.se/
+Provides: curl
+BuildRoot: %{_tmppath}/%{name}-%{version}-root
+Prefix: %{_prefix}
+
+%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 many useful tricks like proxy support, user authentication,
+ftp upload, HTTP post, file transfer resume and more.
+
+%if %{SSL} == 1
+Note: this version is compiled with SSL support.
+%else
+Note: this version is compiled without SSL support.
+%endif
+
+%package devel
+Summary: Development files for the curl libary
+Group: Development/Libraries
+%if %{SSL} == 1
+Requires: openssl >= 0.9.5
+%endif
+Requires: curl = %{version}
+Provides: curl-devel
+
+%description devel
+libcurl is the core engine of curl; this packages contains all the
+libs, headers, and manual pages to develop applications using libcurl.
+
+%define DEFCC xlc
+
+%prep
+rm -rf %{curlroot}
+%setup -q
+
+%build
+
+# Use the default compiler for this platform - gcc otherwise
+if [[ -z "$CC" ]]
+then
+ if test "X`type %{DEFCC} 2>/dev/null`" != 'X'; then
+ export CC=%{DEFCC}
+ else
+ export CC=gcc
+ fi
+fi
+
+cd %{curlroot} && (if [ -f configure.in ]; then mv -f configure.in configure.in.
+rpm; fi)
+
+./configure --prefix=%{prefix} \
+%if %{SSL} == 1
+ --with-ssl
+%else
+ --without-ssl
+%endif
+
+make
+
+%install
+[ "%{buildroot}" != "/" ] && rm -rf %{buildroot}
+make DESTDIR=%{buildroot} install-strip
+
+( cd $RPM_BUILD_ROOT # same as %{buildroot}
+
+ for dir in bin include
+ do
+ mkdir -p usr/$dir
+ cd usr/$dir
+ ln -sf ../..%{prefix}/$dir/* .
+ cd -
+ done
+
+ mkdir -p usr/lib
+ cd usr/lib
+ ln -sf ../..%{prefix}/lib/* .
+ cd -
+)
+
+%clean
+[ "%{buildroot}" != "/" ] && rm -rf %{buildroot}
+
+%files
+%defattr(-,root,root)
+%attr(0755,root,root) %{_bindir}/curl
+%attr(0644,root,root) %{_mandir}/man1/curl.1*
+%{_libdir}/libcurl.a
+%if %{SSL} == 1
+%{_datadir}/curl/curl-ca-bundle.crt
+%endif
+%doc CHANGES COPYING README RELEASE-NOTES
+%doc docs/BUGS docs/CONTRIBUTE docs/FAQ docs/FEATURES docs/HISTORY
+%doc docs/INSTALL docs/KNOWN_BUGS
+%doc docs/MANUAL docs/RESOURCES docs/THANKS docs/VERSIONS docs/TODO
+%doc docs/TheArtOfHttpScripting
+%if %{SSL} == 1
+%doc docs/SSLCERTS
+%endif
+/usr/bin/curl
+/usr/lib/libcurl.a
+
+%files devel
+%defattr(-,root,root)
+%attr(0755,root,root) %{_bindir}/curl-config
+%attr(0644,root,root) %{_mandir}/man1/curl-config.1*
+%attr(0644,root,root) %{_mandir}/man3/*
+%attr(0644,root,root) %{_includedir}/curl/*
+%{_libdir}/libcurl.la
+%doc docs/BINDINGS docs/INTERNALS docs/LICENSE-MIXING
+/usr/bin/curl-config
+/usr/include/curl
diff --git a/packages/DOS/README b/packages/DOS/README
new file mode 100644
index 0000000..c2ab9b9
--- /dev/null
+++ b/packages/DOS/README
@@ -0,0 +1,11 @@
+Gisle Vanem made curl build fine on DOS (and MingW) with djgpp, OpenSSL and his
+Watt-32 stack.
+
+'make djgpp' in the root curl dir should build it fine.
+
+Note 1: djgpp 2.04 beta has a sscanf() bug so the URL parsing isn't
+ done proberly. Use djgpp 2.03 until they fix it.
+
+Note 2: Compile Watt-32 (and OpenSSL) with the same version of djgpp.
+ Otherwise things go wrong because things like FS-extensions and
+ errnos have been changed between releases.
diff --git a/packages/DOS/common.dj b/packages/DOS/common.dj
new file mode 100644
index 0000000..a32f10c
--- /dev/null
+++ b/packages/DOS/common.dj
@@ -0,0 +1,136 @@
+#
+# Common defines for curl (djgpp/Watt-32)
+#
+# Assumes you've unpacked cURL with long-file names
+# I.e use "set LFN=y" before untaring on Win9x/XP.
+# Requires sed, yacc, rm and the usual stuff.
+#
+# Define TOPDIR before including this file.
+
+.SUFFIXES: .exe .y
+
+MAKEFILE = Makefile.dj
+OBJ_DIR = djgpp
+
+#
+# Find out if using a UNIX-like shell or a DOS command interpreter
+#
+ifneq ($(findstring COMMAND.COM,$(SHELL)),COMMAND.COM)
+ ifneq ($(findstring CMD.EXE,$(SHELL)),CMD.EXE)
+ ifneq ($(findstring 4DOS.COM,$(SHELL)),4DOS.COM)
+ IS_UNIX_SHELL = 1
+ endif
+ endif
+endif
+
+#
+# Define shell dependent commands and vars
+#
+ifeq ($(IS_UNIX_SHELL),1)
+ COPY = cp -f
+ DELETE = rm -f
+ MKDIR = mkdir
+ RMDIR = rm -f -r
+ DS = /
+else
+ COPY = copy
+ DELETE = del
+ MKDIR = mkdir
+ RMDIR = rmdir
+ DS = \$(NOTHING)
+endif
+
+#
+# OpenSSL is available from www.openssl.org and builds okay
+# with djgpp/Watt-32. Set to 0 if you don't need https URLs
+# (reduces curl.exe with approx 700 kB)
+#
+USE_SSL = 0
+
+#
+# Use zlib for contents encoding
+#
+USE_ZLIB = 0
+
+#
+# Use libidn for international domain names
+#
+USE_IDNA = 0
+
+#
+# Use Watt-32 IPv6 stack (only IPv6 name resolution working at the moment)
+#
+USE_IPV6 = 0
+
+#
+# Use C-Ares resolver library
+#
+USE_ARES = 0
+
+#
+# Enable debug code in libcurl/curl
+#
+USE_DEBUG = 0
+
+#
+# Enable memory tracking code in libcurl/curl
+#
+USE_CURLDEBUG = 0
+
+default: all
+
+#
+# Root directory for Waterloo tcp/ip etc. Change to suite.
+# WATT_ROOT should be set during Watt-32 install.
+#
+WATT32_ROOT = $(subst \,/,$(WATT_ROOT))
+OPENSSL_ROOT = e:/net/openssl.099
+ZLIB_ROOT = $(DJDIR)/contrib/zlib
+LIBIDN_ROOT = $(TOPDIR)/../IDN/libidn
+ARES_ROOT = $(TOPDIR)/ares
+
+CC = gcc
+YACC = bison -y
+
+CFLAGS = -g -gcoff -O2 -I. -I$(TOPDIR)/include -I$(TOPDIR)/lib \
+ -I$(WATT32_ROOT)/inc -Wall -DHAVE_CONFIG_H
+
+ifeq ($(USE_SSL),1)
+ CFLAGS += -DUSE_SSLEAY -DUSE_OPENSSL -I$(OPENSSL_ROOT)
+endif
+
+ifeq ($(USE_ZLIB),1)
+ CFLAGS += -DUSE_ZLIB -I$(ZLIB_ROOT)
+endif
+
+ifeq ($(USE_IPV6),1)
+ CFLAGS += -DENABLE_IPV6
+endif
+
+ifeq ($(USE_ARES),1)
+ CFLAGS += -DUSE_ARES -I$(ARES_ROOT)
+endif
+
+ifeq ($(USE_IDNA),1)
+ CFLAGS += -DHAVE_LIBIDN -DHAVE_IDN_FREE_H -DHAVE_IDN_FREE -DHAVE_TLD_H \
+ -DHAVE_TLD_STRERROR -I$(LIBIDN_ROOT)/lib
+endif
+
+ifeq ($(USE_DEBUG),1)
+ CFLAGS += -DDEBUG=1 -DDEBUGBUILD
+endif
+
+ifeq ($(USE_CURLDEBUG),1)
+ CFLAGS += -DCURLDEBUG
+endif
+
+$(OBJ_DIR):
+ $(MKDIR) $(OBJ_DIR)
+
+$(OBJ_DIR)/%.o: %.c
+ $(CC) $(CFLAGS) -o $@ -c $<
+ @echo
+
+depend: $(DEPEND_PREREQ) $(MAKEFILE)
+ $(CC) -MM $(CFLAGS) $(CSOURCES) | \
+ sed -e 's/^\([a-zA-Z0-9_-]*\.o:\)/$$(OBJ_DIR)\/\1/' > depend.dj
diff --git a/packages/EPM/Makefile.am b/packages/EPM/Makefile.am
new file mode 100644
index 0000000..b010a4b
--- /dev/null
+++ b/packages/EPM/Makefile.am
@@ -0,0 +1,3 @@
+AUTOMAKE_OPTIONS = foreign
+
+EXTRA_DIST = README curl.list.in
diff --git a/packages/EPM/Makefile.in b/packages/EPM/Makefile.in
new file mode 100644
index 0000000..122015e
--- /dev/null
+++ b/packages/EPM/Makefile.in
@@ -0,0 +1,409 @@
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005 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.
+
+@SET_MAKE@
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = packages/EPM
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(srcdir)/curl.list.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
+ $(top_srcdir)/m4/curl-confopts.m4 \
+ $(top_srcdir)/m4/curl-functions.m4 \
+ $(top_srcdir)/m4/curl-override.m4 \
+ $(top_srcdir)/m4/curl-reentrant.m4 \
+ $(top_srcdir)/m4/curl-system.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/lib/curl_config.h \
+ $(top_builddir)/src/curl_config.h \
+ $(top_builddir)/include/curl/curlbuild.h
+CONFIG_CLEAN_FILES = curl.list
+SOURCES =
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_LIBHOSTNAME_FALSE = @BUILD_LIBHOSTNAME_FALSE@
+BUILD_LIBHOSTNAME_TRUE = @BUILD_LIBHOSTNAME_TRUE@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_OPTIONS = @CONFIGURE_OPTIONS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CROSSCOMPILING_FALSE = @CROSSCOMPILING_FALSE@
+CROSSCOMPILING_TRUE = @CROSSCOMPILING_TRUE@
+CURLDEBUG_FALSE = @CURLDEBUG_FALSE@
+CURLDEBUG_TRUE = @CURLDEBUG_TRUE@
+CURL_CA_BUNDLE = @CURL_CA_BUNDLE@
+CURL_CFLAG_EXTRAS = @CURL_CFLAG_EXTRAS@
+CURL_DISABLE_DICT = @CURL_DISABLE_DICT@
+CURL_DISABLE_FILE = @CURL_DISABLE_FILE@
+CURL_DISABLE_FTP = @CURL_DISABLE_FTP@
+CURL_DISABLE_GOPHER = @CURL_DISABLE_GOPHER@
+CURL_DISABLE_HTTP = @CURL_DISABLE_HTTP@
+CURL_DISABLE_IMAP = @CURL_DISABLE_IMAP@
+CURL_DISABLE_LDAP = @CURL_DISABLE_LDAP@
+CURL_DISABLE_LDAPS = @CURL_DISABLE_LDAPS@
+CURL_DISABLE_POP3 = @CURL_DISABLE_POP3@
+CURL_DISABLE_PROXY = @CURL_DISABLE_PROXY@
+CURL_DISABLE_RTSP = @CURL_DISABLE_RTSP@
+CURL_DISABLE_SMTP = @CURL_DISABLE_SMTP@
+CURL_DISABLE_TELNET = @CURL_DISABLE_TELNET@
+CURL_DISABLE_TFTP = @CURL_DISABLE_TFTP@
+CURL_LIBS = @CURL_LIBS@
+CURL_NETWORK_LIBS = @CURL_NETWORK_LIBS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_SHARED = @ENABLE_SHARED@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_LDAP_SSL = @HAVE_LDAP_SSL@
+HAVE_LIBZ = @HAVE_LIBZ@
+HAVE_LIBZ_FALSE = @HAVE_LIBZ_FALSE@
+HAVE_LIBZ_TRUE = @HAVE_LIBZ_TRUE@
+HAVE_PK11_CREATEGENERICOBJECT = @HAVE_PK11_CREATEGENERICOBJECT@
+IDN_ENABLED = @IDN_ENABLED@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+IPV6_ENABLED = @IPV6_ENABLED@
+KRB4_ENABLED = @KRB4_ENABLED@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBCURL_LIBS = @LIBCURL_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+MANOPT = @MANOPT@
+MIMPURE_FALSE = @MIMPURE_FALSE@
+MIMPURE_TRUE = @MIMPURE_TRUE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NO_UNDEFINED_FALSE = @NO_UNDEFINED_FALSE@
+NO_UNDEFINED_TRUE = @NO_UNDEFINED_TRUE@
+NROFF = @NROFF@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH = @PATH@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+PKGADD_NAME = @PKGADD_NAME@
+PKGADD_PKG = @PKGADD_PKG@
+PKGADD_VENDOR = @PKGADD_VENDOR@
+PKGCONFIG = @PKGCONFIG@
+RANDOM_FILE = @RANDOM_FILE@
+RANLIB = @RANLIB@
+REQUIRE_LIB_DEPS = @REQUIRE_LIB_DEPS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SONAME_BUMP_FALSE = @SONAME_BUMP_FALSE@
+SONAME_BUMP_TRUE = @SONAME_BUMP_TRUE@
+SSL_ENABLED = @SSL_ENABLED@
+STATICLIB_FALSE = @STATICLIB_FALSE@
+STATICLIB_TRUE = @STATICLIB_TRUE@
+STRIP = @STRIP@
+SUPPORT_FEATURES = @SUPPORT_FEATURES@
+SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
+TEST_SERVER_LIBS = @TEST_SERVER_LIBS@
+USE_ARES = @USE_ARES@
+USE_EMBEDDED_ARES_FALSE = @USE_EMBEDDED_ARES_FALSE@
+USE_EMBEDDED_ARES_TRUE = @USE_EMBEDDED_ARES_TRUE@
+USE_GNUTLS = @USE_GNUTLS@
+USE_LIBRTMP = @USE_LIBRTMP@
+USE_LIBSSH2 = @USE_LIBSSH2@
+USE_MANUAL_FALSE = @USE_MANUAL_FALSE@
+USE_MANUAL_TRUE = @USE_MANUAL_TRUE@
+USE_NSS = @USE_NSS@
+USE_OPENLDAP = @USE_OPENLDAP@
+USE_POLARSSL = @USE_POLARSSL@
+USE_SSLEAY = @USE_SSLEAY@
+USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
+VERSION = @VERSION@
+VERSIONNUM = @VERSIONNUM@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+libext = @libext@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+AUTOMAKE_OPTIONS = foreign
+EXTRA_DIST = README curl.list.in
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign packages/EPM/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --foreign packages/EPM/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+curl.list: $(top_builddir)/config.status $(srcdir)/curl.list.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+ -rm -f libtool
+uninstall-info-am:
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ list='$(DISTFILES)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkdir_p) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-libtool
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ distclean distclean-generic distclean-libtool distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-exec install-exec-am \
+ install-info install-info-am install-man install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+ uninstall-info-am
+
+# 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/packages/EPM/README b/packages/EPM/README
new file mode 100644
index 0000000..3529dbf
--- /dev/null
+++ b/packages/EPM/README
@@ -0,0 +1,12 @@
+EPM is a free UNIX software/file packaging program that generates distribution
+archives from a list of files. EPM Can:
+
+ * Generate portable script-based distribution packages complete with
+ installation and removal scripts.
+ * Generate vendor distributions in AIX, BSD, Compaq Tru64, Debian, HP-UX,
+ IRIX, Red Hat, and Solaris formats.
+ * Provide a complete, cross-platform software distribution solution for your
+ applications.
+
+http://www.easysw.com/epm/
+
diff --git a/packages/EPM/curl.list.in b/packages/EPM/curl.list.in
new file mode 100644
index 0000000..39060dd
--- /dev/null
+++ b/packages/EPM/curl.list.in
@@ -0,0 +1,59 @@
+# Directories...
+$prefix=@prefix@
+$exec_prefix=@exec_prefix@
+$bindir=@bindir@
+$confdir=@sysconfdir@
+$docdir=@prefix@/doc
+$mandir=@mandir@
+$libdir=@libdir@
+$srcdir=@top_srcdir@
+$includedir=@includedir@
+$datarootdir=@datarootdir@
+
+# Product information
+%product curl
+%copyright 1998-2002 by Daniel Stenberg
+%vendor Daniel Stenberg, <daniel@haxx.se>
+%license ${srcdir}/MITX.txt
+%readme ${srcdir}/README
+%description Curl is a command line tool for transfering data specified
+%description with URL syntax
+%version @VERSION@
+%packager Giuseppe "Cowo" Corbelli <cowo@lugbs.linux.it>
+
+f 0644 cowo pppusers ${mandir}/man1/curl.1 ./docs/curl.1
+f 0644 cowo pppusers ${mandir}/man1/curl-config.1 ./docs/curl-config.1
+f 0644 cowo pppusers ${mandir}/man3/curl_easy_cleanup.3 ./docs/curl_easy_cleanup.3
+f 0644 cowo pppusers ${mandir}/man3/curl_easy_getinfo.3 ./docs/curl_easy_getinfo.3
+f 0644 cowo pppusers ${mandir}/man3/curl_easy_init.3 ./docs/curl_easy_init.3
+f 0644 cowo pppusers ${mandir}/man3/curl_easy_perform.3 ./docs/curl_easy_perform.3
+f 0644 cowo pppusers ${mandir}/man3/curl_easy_setopt.3 ./docs/curl_easy_setopt.3
+f 0644 cowo pppusers ${mandir}/man3/curl_easy_duphandle.3 ./docs/curl_easy_duphandle.3
+f 0644 cowo pppusers ${mandir}/man3/curl_formparse.3 ./docs/curl_formparse.3
+f 0644 cowo pppusers ${mandir}/man3/curl_formadd.3 ./docs/curl_formadd.3
+f 0644 cowo pppusers ${mandir}/man3/curl_formfree.3 ./docs/curl_formfree.3
+f 0644 cowo pppusers ${mandir}/man3/curl_getdate.3 ./docs/curl_getdate.3
+f 0644 cowo pppusers ${mandir}/man3/curl_getenv.3 ./docs/curl_getenv.3
+f 0644 cowo pppusers ${mandir}/man3/curl_slist_append.3 ./docs/curl_slist_append.3
+f 0644 cowo pppusers ${mandir}/man3/curl_slist_free_all.3 ./docs/curl_slist_free_all.3
+f 0644 cowo pppusers ${mandir}/man3/curl_version.3 ./docs/curl_version.3
+f 0644 cowo pppusers ${mandir}/man3/curl_escape.3 ./docs/curl_escape.3
+f 0644 cowo pppusers ${mandir}/man3/curl_unescape.3 ./docs/curl_unescape.3
+f 0644 cowo pppusers ${mandir}/man3/curl_strequal.3 ./docs/curl_strequal.3
+f 0644 cowo pppusers ${mandir}/man3/curl_strnequal.3 ./docs/curl_strnequal.3
+f 0644 cowo pppusers ${mandir}/man3/curl_mprintf.3 ./docs/curl_mprintf.3
+f 0644 cowo pppusers ${mandir}/man3/curl_global_init.3 ./docs/curl_global_init.3
+f 0644 cowo pppusers ${mandir}/man3/curl_global_cleanup.3 ./docs/curl_global_cleanup.3
+f 0644 cowo pppusers ${mandir}/man3/libcurl.3 ./docs/libcurl.3
+f 0755 cowo pppusers ${libdir}/libcurl.so.2.0.2 ./lib/.libs/libcurl.so.2.0.2
+f 0755 cowo pppusers ${libdir}/libcurl.la ./lib/libcurl.la
+f 0755 cowo pppusers ${libdir}/libcurl.la ./lib/.libs/libcurl.la
+f 0644 cowo pppusers ${libdir}/libcurl.a ./lib/.libs/libcurl.a
+f 0755 cowo pppusers ${bindir}/curl ./src/curl
+f 0755 cowo pppusers ${bindir}/curl ./src/.libs/curl
+f 0644 cowo pppusers ${includedir}/curl/curl.h ./include/curl/curl.h
+f 0644 cowo pppusers ${includedir}/curl/easy.h ./include/curl/easy.h
+f 0644 cowo pppusers ${includedir}/curl/mprintf.h ./include/curl/mprintf.h
+f 0644 cowo pppusers ${includedir}/curl/stdcheaders.h ./include/curl/stdcheaders.h
+f 0644 cowo pppusers ${includedir}/curl/types.h ./include/curl/types.h
+f 0755 cowo pppusers ${bindir}/curl-config ./curl-config
diff --git a/packages/Linux/Makefile.am b/packages/Linux/Makefile.am
new file mode 100644
index 0000000..5753055
--- /dev/null
+++ b/packages/Linux/Makefile.am
@@ -0,0 +1 @@
+SUBDIRS = RPM
diff --git a/packages/Linux/Makefile.in b/packages/Linux/Makefile.in
new file mode 100644
index 0000000..af05429
--- /dev/null
+++ b/packages/Linux/Makefile.in
@@ -0,0 +1,562 @@
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005 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.
+
+@SET_MAKE@
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = packages/Linux
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
+ $(top_srcdir)/m4/curl-confopts.m4 \
+ $(top_srcdir)/m4/curl-functions.m4 \
+ $(top_srcdir)/m4/curl-override.m4 \
+ $(top_srcdir)/m4/curl-reentrant.m4 \
+ $(top_srcdir)/m4/curl-system.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/lib/curl_config.h \
+ $(top_builddir)/src/curl_config.h \
+ $(top_builddir)/include/curl/curlbuild.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-recursive \
+ install-exec-recursive install-info-recursive \
+ install-recursive installcheck-recursive installdirs-recursive \
+ pdf-recursive ps-recursive uninstall-info-recursive \
+ uninstall-recursive
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_LIBHOSTNAME_FALSE = @BUILD_LIBHOSTNAME_FALSE@
+BUILD_LIBHOSTNAME_TRUE = @BUILD_LIBHOSTNAME_TRUE@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_OPTIONS = @CONFIGURE_OPTIONS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CROSSCOMPILING_FALSE = @CROSSCOMPILING_FALSE@
+CROSSCOMPILING_TRUE = @CROSSCOMPILING_TRUE@
+CURLDEBUG_FALSE = @CURLDEBUG_FALSE@
+CURLDEBUG_TRUE = @CURLDEBUG_TRUE@
+CURL_CA_BUNDLE = @CURL_CA_BUNDLE@
+CURL_CFLAG_EXTRAS = @CURL_CFLAG_EXTRAS@
+CURL_DISABLE_DICT = @CURL_DISABLE_DICT@
+CURL_DISABLE_FILE = @CURL_DISABLE_FILE@
+CURL_DISABLE_FTP = @CURL_DISABLE_FTP@
+CURL_DISABLE_GOPHER = @CURL_DISABLE_GOPHER@
+CURL_DISABLE_HTTP = @CURL_DISABLE_HTTP@
+CURL_DISABLE_IMAP = @CURL_DISABLE_IMAP@
+CURL_DISABLE_LDAP = @CURL_DISABLE_LDAP@
+CURL_DISABLE_LDAPS = @CURL_DISABLE_LDAPS@
+CURL_DISABLE_POP3 = @CURL_DISABLE_POP3@
+CURL_DISABLE_PROXY = @CURL_DISABLE_PROXY@
+CURL_DISABLE_RTSP = @CURL_DISABLE_RTSP@
+CURL_DISABLE_SMTP = @CURL_DISABLE_SMTP@
+CURL_DISABLE_TELNET = @CURL_DISABLE_TELNET@
+CURL_DISABLE_TFTP = @CURL_DISABLE_TFTP@
+CURL_LIBS = @CURL_LIBS@
+CURL_NETWORK_LIBS = @CURL_NETWORK_LIBS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_SHARED = @ENABLE_SHARED@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_LDAP_SSL = @HAVE_LDAP_SSL@
+HAVE_LIBZ = @HAVE_LIBZ@
+HAVE_LIBZ_FALSE = @HAVE_LIBZ_FALSE@
+HAVE_LIBZ_TRUE = @HAVE_LIBZ_TRUE@
+HAVE_PK11_CREATEGENERICOBJECT = @HAVE_PK11_CREATEGENERICOBJECT@
+IDN_ENABLED = @IDN_ENABLED@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+IPV6_ENABLED = @IPV6_ENABLED@
+KRB4_ENABLED = @KRB4_ENABLED@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBCURL_LIBS = @LIBCURL_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+MANOPT = @MANOPT@
+MIMPURE_FALSE = @MIMPURE_FALSE@
+MIMPURE_TRUE = @MIMPURE_TRUE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NO_UNDEFINED_FALSE = @NO_UNDEFINED_FALSE@
+NO_UNDEFINED_TRUE = @NO_UNDEFINED_TRUE@
+NROFF = @NROFF@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH = @PATH@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+PKGADD_NAME = @PKGADD_NAME@
+PKGADD_PKG = @PKGADD_PKG@
+PKGADD_VENDOR = @PKGADD_VENDOR@
+PKGCONFIG = @PKGCONFIG@
+RANDOM_FILE = @RANDOM_FILE@
+RANLIB = @RANLIB@
+REQUIRE_LIB_DEPS = @REQUIRE_LIB_DEPS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SONAME_BUMP_FALSE = @SONAME_BUMP_FALSE@
+SONAME_BUMP_TRUE = @SONAME_BUMP_TRUE@
+SSL_ENABLED = @SSL_ENABLED@
+STATICLIB_FALSE = @STATICLIB_FALSE@
+STATICLIB_TRUE = @STATICLIB_TRUE@
+STRIP = @STRIP@
+SUPPORT_FEATURES = @SUPPORT_FEATURES@
+SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
+TEST_SERVER_LIBS = @TEST_SERVER_LIBS@
+USE_ARES = @USE_ARES@
+USE_EMBEDDED_ARES_FALSE = @USE_EMBEDDED_ARES_FALSE@
+USE_EMBEDDED_ARES_TRUE = @USE_EMBEDDED_ARES_TRUE@
+USE_GNUTLS = @USE_GNUTLS@
+USE_LIBRTMP = @USE_LIBRTMP@
+USE_LIBSSH2 = @USE_LIBSSH2@
+USE_MANUAL_FALSE = @USE_MANUAL_FALSE@
+USE_MANUAL_TRUE = @USE_MANUAL_TRUE@
+USE_NSS = @USE_NSS@
+USE_OPENLDAP = @USE_OPENLDAP@
+USE_POLARSSL = @USE_POLARSSL@
+USE_SSLEAY = @USE_SSLEAY@
+USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
+VERSION = @VERSION@
+VERSIONNUM = @VERSIONNUM@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+libext = @libext@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+SUBDIRS = RPM
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign packages/Linux/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --foreign packages/Linux/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+ -rm -f libtool
+uninstall-info-am:
+
+# 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.
+$(RECURSIVE_TARGETS):
+ @failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ 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) \
+ || eval $$failcom; \
+ 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:
+ @failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ rev=''; for subdir in $$list; do \
+ if test "$$subdir" = "."; then :; else \
+ rev="$$subdir $$rev"; \
+ fi; \
+ done; \
+ 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) \
+ || eval $$failcom; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique; \
+ fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ list='$(DISTFILES)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkdir_p) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+ list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -d "$(distdir)/$$subdir" \
+ || $(mkdir_p) "$(distdir)/$$subdir" \
+ || exit 1; \
+ distdir=`$(am__cd) $(distdir) && pwd`; \
+ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
+ (cd $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$top_distdir" \
+ distdir="$$distdir/$$subdir" \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-libtool \
+ distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-recursive
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-info-am
+
+uninstall-info: uninstall-info-recursive
+
+.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \
+ clean clean-generic clean-libtool clean-recursive ctags \
+ ctags-recursive distclean distclean-generic distclean-libtool \
+ distclean-recursive distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-exec install-exec-am install-info \
+ install-info-am install-man install-strip installcheck \
+ installcheck-am installdirs installdirs-am maintainer-clean \
+ maintainer-clean-generic maintainer-clean-recursive \
+ mostlyclean mostlyclean-generic mostlyclean-libtool \
+ mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \
+ uninstall uninstall-am uninstall-info-am
+
+# 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/packages/Linux/RPM/Makefile.am b/packages/Linux/RPM/Makefile.am
new file mode 100644
index 0000000..5d46d87
--- /dev/null
+++ b/packages/Linux/RPM/Makefile.am
@@ -0,0 +1,2 @@
+EXTRA_DIST = README curl-ssl.spec.in curl.spec.in make_curl_rpm
+
diff --git a/packages/Linux/RPM/Makefile.in b/packages/Linux/RPM/Makefile.in
new file mode 100644
index 0000000..2298947
--- /dev/null
+++ b/packages/Linux/RPM/Makefile.in
@@ -0,0 +1,410 @@
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005 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.
+
+@SET_MAKE@
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = packages/Linux/RPM
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(srcdir)/curl-ssl.spec.in $(srcdir)/curl.spec.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
+ $(top_srcdir)/m4/curl-confopts.m4 \
+ $(top_srcdir)/m4/curl-functions.m4 \
+ $(top_srcdir)/m4/curl-override.m4 \
+ $(top_srcdir)/m4/curl-reentrant.m4 \
+ $(top_srcdir)/m4/curl-system.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/lib/curl_config.h \
+ $(top_builddir)/src/curl_config.h \
+ $(top_builddir)/include/curl/curlbuild.h
+CONFIG_CLEAN_FILES = curl.spec curl-ssl.spec
+SOURCES =
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_LIBHOSTNAME_FALSE = @BUILD_LIBHOSTNAME_FALSE@
+BUILD_LIBHOSTNAME_TRUE = @BUILD_LIBHOSTNAME_TRUE@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_OPTIONS = @CONFIGURE_OPTIONS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CROSSCOMPILING_FALSE = @CROSSCOMPILING_FALSE@
+CROSSCOMPILING_TRUE = @CROSSCOMPILING_TRUE@
+CURLDEBUG_FALSE = @CURLDEBUG_FALSE@
+CURLDEBUG_TRUE = @CURLDEBUG_TRUE@
+CURL_CA_BUNDLE = @CURL_CA_BUNDLE@
+CURL_CFLAG_EXTRAS = @CURL_CFLAG_EXTRAS@
+CURL_DISABLE_DICT = @CURL_DISABLE_DICT@
+CURL_DISABLE_FILE = @CURL_DISABLE_FILE@
+CURL_DISABLE_FTP = @CURL_DISABLE_FTP@
+CURL_DISABLE_GOPHER = @CURL_DISABLE_GOPHER@
+CURL_DISABLE_HTTP = @CURL_DISABLE_HTTP@
+CURL_DISABLE_IMAP = @CURL_DISABLE_IMAP@
+CURL_DISABLE_LDAP = @CURL_DISABLE_LDAP@
+CURL_DISABLE_LDAPS = @CURL_DISABLE_LDAPS@
+CURL_DISABLE_POP3 = @CURL_DISABLE_POP3@
+CURL_DISABLE_PROXY = @CURL_DISABLE_PROXY@
+CURL_DISABLE_RTSP = @CURL_DISABLE_RTSP@
+CURL_DISABLE_SMTP = @CURL_DISABLE_SMTP@
+CURL_DISABLE_TELNET = @CURL_DISABLE_TELNET@
+CURL_DISABLE_TFTP = @CURL_DISABLE_TFTP@
+CURL_LIBS = @CURL_LIBS@
+CURL_NETWORK_LIBS = @CURL_NETWORK_LIBS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_SHARED = @ENABLE_SHARED@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_LDAP_SSL = @HAVE_LDAP_SSL@
+HAVE_LIBZ = @HAVE_LIBZ@
+HAVE_LIBZ_FALSE = @HAVE_LIBZ_FALSE@
+HAVE_LIBZ_TRUE = @HAVE_LIBZ_TRUE@
+HAVE_PK11_CREATEGENERICOBJECT = @HAVE_PK11_CREATEGENERICOBJECT@
+IDN_ENABLED = @IDN_ENABLED@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+IPV6_ENABLED = @IPV6_ENABLED@
+KRB4_ENABLED = @KRB4_ENABLED@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBCURL_LIBS = @LIBCURL_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+MANOPT = @MANOPT@
+MIMPURE_FALSE = @MIMPURE_FALSE@
+MIMPURE_TRUE = @MIMPURE_TRUE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NO_UNDEFINED_FALSE = @NO_UNDEFINED_FALSE@
+NO_UNDEFINED_TRUE = @NO_UNDEFINED_TRUE@
+NROFF = @NROFF@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH = @PATH@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+PKGADD_NAME = @PKGADD_NAME@
+PKGADD_PKG = @PKGADD_PKG@
+PKGADD_VENDOR = @PKGADD_VENDOR@
+PKGCONFIG = @PKGCONFIG@
+RANDOM_FILE = @RANDOM_FILE@
+RANLIB = @RANLIB@
+REQUIRE_LIB_DEPS = @REQUIRE_LIB_DEPS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SONAME_BUMP_FALSE = @SONAME_BUMP_FALSE@
+SONAME_BUMP_TRUE = @SONAME_BUMP_TRUE@
+SSL_ENABLED = @SSL_ENABLED@
+STATICLIB_FALSE = @STATICLIB_FALSE@
+STATICLIB_TRUE = @STATICLIB_TRUE@
+STRIP = @STRIP@
+SUPPORT_FEATURES = @SUPPORT_FEATURES@
+SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
+TEST_SERVER_LIBS = @TEST_SERVER_LIBS@
+USE_ARES = @USE_ARES@
+USE_EMBEDDED_ARES_FALSE = @USE_EMBEDDED_ARES_FALSE@
+USE_EMBEDDED_ARES_TRUE = @USE_EMBEDDED_ARES_TRUE@
+USE_GNUTLS = @USE_GNUTLS@
+USE_LIBRTMP = @USE_LIBRTMP@
+USE_LIBSSH2 = @USE_LIBSSH2@
+USE_MANUAL_FALSE = @USE_MANUAL_FALSE@
+USE_MANUAL_TRUE = @USE_MANUAL_TRUE@
+USE_NSS = @USE_NSS@
+USE_OPENLDAP = @USE_OPENLDAP@
+USE_POLARSSL = @USE_POLARSSL@
+USE_SSLEAY = @USE_SSLEAY@
+USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
+VERSION = @VERSION@
+VERSIONNUM = @VERSIONNUM@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+libext = @libext@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+EXTRA_DIST = README curl-ssl.spec.in curl.spec.in make_curl_rpm
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign packages/Linux/RPM/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --foreign packages/Linux/RPM/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+curl.spec: $(top_builddir)/config.status $(srcdir)/curl.spec.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+curl-ssl.spec: $(top_builddir)/config.status $(srcdir)/curl-ssl.spec.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+ -rm -f libtool
+uninstall-info-am:
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ list='$(DISTFILES)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkdir_p) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-libtool
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ distclean distclean-generic distclean-libtool distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-exec install-exec-am \
+ install-info install-info-am install-man install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+ uninstall-info-am
+
+# 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/packages/Linux/RPM/README b/packages/Linux/RPM/README
new file mode 100644
index 0000000..a48ece0
--- /dev/null
+++ b/packages/Linux/RPM/README
@@ -0,0 +1,5 @@
+Author: Daniel (I'm not trustworthy, replace this!)
+
+Paul Marquis's 'make_curl_rpm' script is a fine example on how to automate the
+jobs. You need to fill in your own name and email at least.
+
diff --git a/packages/Linux/RPM/curl-ssl.spec.in b/packages/Linux/RPM/curl-ssl.spec.in
new file mode 100644
index 0000000..7f290ba
--- /dev/null
+++ b/packages/Linux/RPM/curl-ssl.spec.in
@@ -0,0 +1,84 @@
+%define name curl-ssl
+%define tarball curl
+%define version 7.11.0
+%define release 1
+
+%define curlroot %{_builddir}/%{tarball}-%{version}
+
+Summary: get a file from an FTP or HTTP server.
+Name: %{name}
+Version: %{version}
+Release: %{release}
+Copyright: MIT/X derivate
+Vendor: Daniel Stenberg <Daniel.Stenberg@haxx.se>
+Packager: Troy Engel <tengel@sonic.net>
+Group: Utilities/Console
+Source: %{tarball}-%{version}.tar.gz
+URL: http://curl.haxx.se/
+Provides: curl
+Obsoletes: curl
+BuildRoot: %{_tmppath}/%{tarball}-%{version}-root
+Requires: openssl >= 0.9.5
+
+%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.
+
+%package devel
+Summary: The includes, libs, and man pages to develop with libcurl
+Group: Development/Libraries
+Requires: openssl-devel >= 0.9.5
+Provides: curl-devel
+
+%description devel
+libcurl is the core engine of curl; this packages contains all the libs,
+headers, and manual pages to develop applications using libcurl.
+
+%prep
+
+%setup -q -n %{tarball}-%{version}
+
+%build
+cd %{curlroot} && (if [ -f configure.in ]; then mv -f configure.in configure.in.rpm; fi)
+%configure
+cd %{curlroot} && (if [ -f configure.in.rpm ]; then mv -f configure.in.rpm configure.in; fi)
+make
+
+%install
+[ "%{buildroot}" != "/" ] && rm -rf %{buildroot}
+make DESTDIR=%{buildroot} install-strip
+
+%clean
+[ "%{buildroot}" != "/" ] && rm -rf %{buildroot}
+[ "%{curlroot}" != "/" ] && rm -rf %{curlroot}
+
+%post
+/sbin/ldconfig
+
+%postun
+/sbin/ldconfig
+
+%files
+%defattr(-,root,root)
+%attr(0755,root,root) %{_bindir}/curl
+%attr(0644,root,root) %{_mandir}/man1/curl.1*
+%{_libdir}/libcurl.so*
+%{_datadir}/curl/curl-ca-bundle.crt
+%doc CHANGES COPYING README testcurl.sh docs/BUGS docs/SSLCERTS
+%doc docs/CONTRIBUTE docs/FAQ docs/FEATURES docs/HISTORY docs/INSTALL
+%doc docs/KNOWN_BUGS docs/MANUAL docs/RESOURCES docs/THANKS
+%doc docs/TODO docs/VERSIONS docs/TheArtOfHttpScripting tests
+
+%files devel
+%defattr(-,root,root)
+%attr(0755,root,root) %{_bindir}/curl-config
+%attr(0644,root,root) %{_mandir}/man1/curl-config.1*
+%attr(0644,root,root) %{_mandir}/man3/*
+%attr(0644,root,root) %{_includedir}/curl/*
+%{_libdir}/libcurl.a
+%{_libdir}/libcurl.la
+%doc docs/BINDINGS docs/INTERNALS docs/examples/* docs/libcurl-the-guide
diff --git a/packages/Linux/RPM/curl.spec.in b/packages/Linux/RPM/curl.spec.in
new file mode 100644
index 0000000..2382f57
--- /dev/null
+++ b/packages/Linux/RPM/curl.spec.in
@@ -0,0 +1,84 @@
+%define name curl
+%define version @VERSION@
+%define release 1
+%define prefix /usr
+
+%define builddir $RPM_BUILD_DIR/%{name}-%{version}
+
+Summary: get a file from an FTP or HTTP server.
+Name: %{name}
+Version: %{version}
+Release: %{release}
+Copyright: MPL
+Vendor: Daniel Stenberg <Daniel.Stenberg@haxx.se>
+Packager: Loic Dachary <loic@senga.org>
+Group: Utilities/Console
+Source: %{name}-%{version}.tar.gz
+URL: http://curl.haxx.se/
+BuildRoot: /tmp/%{name}-%{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 without SSL (https:) support.
+
+%package devel
+Summary: The includes, libs, and man pages to develop with libcurl
+Group: Development/Libraries
+
+%description devel
+libcurl is the core engine of curl; this packages contains all the libs,
+headers, and manual pages to develop applications using libcurl.
+
+%prep
+rm -rf %{builddir}
+
+%setup
+
+%build
+%configure --without-ssl --prefix=%{prefix}
+make
+
+%install
+rm -rf $RPM_BUILD_ROOT
+make DESTDIR=$RPM_BUILD_ROOT install-strip
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+rm -rf %{builddir}
+
+%post
+/sbin/ldconfig
+
+%postun
+/sbin/ldconfig
+
+%files
+%defattr(-,root,root)
+%attr(0755,root,root) %{_bindir}/curl
+%attr(0644,root,root) %{_mandir}/man1/*
+%{prefix}/lib/libcurl.so*
+%doc CHANGES LEGAL MITX.txt MPL-1.1.txt README docs/BUGS
+%doc docs/CONTRIBUTE docs/FAQ docs/FEATURES docs/INSTALL docs/INTERNALS
+%doc docs/LIBCURL docs/MANUAL docs/README* docs/RESOURCES docs/TODO
+%doc docs/TheArtOfHttpScripting
+
+%files devel
+%defattr(-,root,root)
+%attr(0644,root,root) %{_mandir}/man3/*
+%attr(0644,root,root) %{_includedir}/curl/*
+%{prefix}/lib/libcurl.a
+%{prefix}/lib/libcurl.la
+%doc docs/examples/*
+
+%changelog
+* Sun Jan 7 2001 Loic Dachary <loic@senga.org>
+
+ - use _mandir instead of prefix to locate man pages because
+ _mandir is not always prefix/man/man?.
+
diff --git a/packages/Linux/RPM/make_curl_rpm b/packages/Linux/RPM/make_curl_rpm
new file mode 100644
index 0000000..544a23b
--- /dev/null
+++ b/packages/Linux/RPM/make_curl_rpm
@@ -0,0 +1,62 @@
+#! /bin/sh
+# script to build curl RPM from src RPM (SSL and non-SSL versions)
+
+# initialize
+top_dir=/usr/src/redhat
+sources_dir=$top_dir/SOURCES
+specs_dir=$top_dir/SPECS
+rpms_dir=$top_dir/RPMS
+arch=`rpm --showrc | awk 'NF == 3 && $2 == "_arch" { print $3 }'`
+
+# fill in your own name and email here
+packager_name="Mr Joe Packager Person"
+packager_email='<Joe@packager.person>'
+
+# make sure we're running as root
+if test `id -u` -ne `id -u root`
+then
+ echo "you must build the RPM as root"
+ exit 1
+fi
+
+# get version and release number
+if test $# -lt 1
+then
+ echo "version number?"
+ read version
+else
+ version=$1
+fi
+
+if test $# -lt 2
+then
+ echo "release number?"
+ read release
+else
+ release=$2
+fi
+
+# build all the files
+targets="curl curl-ssl"
+for target in $targets
+do
+ # make sure src RPM exist
+ src_rpm="$target-$version-$release.src.rpm"
+ if test -f $src_rpm
+ then
+ rpm -ivh $src_rpm
+
+ # replace packager in spec file
+ sed -e 's/^Packager: .*/Packager: $packager_name $packager_email/' $specs_dir/$target.spec > $specs_dir/$target-$version-$arch.spec
+
+ # build it
+ if ! rpm -ba $specs_dir/$target-$version-$arch.spec
+ then
+ echo "error building $target for $arch -- check output above"
+ fi
+
+ echo "$target rpm is now in $rpms_dir/$arch"
+ else
+ echo $src_rpm does not exist
+ fi
+done
diff --git a/packages/Makefile.am b/packages/Makefile.am
new file mode 100644
index 0000000..e211c0a
--- /dev/null
+++ b/packages/Makefile.am
@@ -0,0 +1,32 @@
+SUBDIRS = Win32 Linux Solaris EPM AIX vms
+
+EXTRA_DIST = README \
+ DOS/README \
+ DOS/common.dj \
+ NetWare/get_ver.awk \
+ OS400/README.OS400 \
+ OS400/ccsidcurl.c \
+ OS400/ccsidcurl.h \
+ OS400/curl.inc.in \
+ OS400/initscript.sh \
+ OS400/make-include.sh \
+ OS400/make-lib.sh \
+ OS400/make-src.sh \
+ OS400/make-tests.sh \
+ OS400/makefile.sh \
+ OS400/os400sys.c \
+ OS400/os400sys.h \
+ Symbian/bwins/libcurlu.def \
+ Symbian/eabi/libcurlu.def \
+ Symbian/group/bld.inf \
+ Symbian/group/curl.iby \
+ Symbian/group/curl.mmp \
+ Symbian/group/curl.pkg \
+ Symbian/group/libcurl.iby \
+ Symbian/group/libcurl.mmp \
+ Symbian/group/libcurl.pkg \
+ Symbian/readme.txt \
+ TPF/curl.mak \
+ TPF/maketpf.env_curl \
+ TPF/maketpf.env_curllib
+
diff --git a/packages/Makefile.in b/packages/Makefile.in
new file mode 100644
index 0000000..9114470
--- /dev/null
+++ b/packages/Makefile.in
@@ -0,0 +1,593 @@
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005 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.
+
+@SET_MAKE@
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = packages
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
+ $(top_srcdir)/m4/curl-confopts.m4 \
+ $(top_srcdir)/m4/curl-functions.m4 \
+ $(top_srcdir)/m4/curl-override.m4 \
+ $(top_srcdir)/m4/curl-reentrant.m4 \
+ $(top_srcdir)/m4/curl-system.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/lib/curl_config.h \
+ $(top_builddir)/src/curl_config.h \
+ $(top_builddir)/include/curl/curlbuild.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-recursive \
+ install-exec-recursive install-info-recursive \
+ install-recursive installcheck-recursive installdirs-recursive \
+ pdf-recursive ps-recursive uninstall-info-recursive \
+ uninstall-recursive
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_LIBHOSTNAME_FALSE = @BUILD_LIBHOSTNAME_FALSE@
+BUILD_LIBHOSTNAME_TRUE = @BUILD_LIBHOSTNAME_TRUE@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_OPTIONS = @CONFIGURE_OPTIONS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CROSSCOMPILING_FALSE = @CROSSCOMPILING_FALSE@
+CROSSCOMPILING_TRUE = @CROSSCOMPILING_TRUE@
+CURLDEBUG_FALSE = @CURLDEBUG_FALSE@
+CURLDEBUG_TRUE = @CURLDEBUG_TRUE@
+CURL_CA_BUNDLE = @CURL_CA_BUNDLE@
+CURL_CFLAG_EXTRAS = @CURL_CFLAG_EXTRAS@
+CURL_DISABLE_DICT = @CURL_DISABLE_DICT@
+CURL_DISABLE_FILE = @CURL_DISABLE_FILE@
+CURL_DISABLE_FTP = @CURL_DISABLE_FTP@
+CURL_DISABLE_GOPHER = @CURL_DISABLE_GOPHER@
+CURL_DISABLE_HTTP = @CURL_DISABLE_HTTP@
+CURL_DISABLE_IMAP = @CURL_DISABLE_IMAP@
+CURL_DISABLE_LDAP = @CURL_DISABLE_LDAP@
+CURL_DISABLE_LDAPS = @CURL_DISABLE_LDAPS@
+CURL_DISABLE_POP3 = @CURL_DISABLE_POP3@
+CURL_DISABLE_PROXY = @CURL_DISABLE_PROXY@
+CURL_DISABLE_RTSP = @CURL_DISABLE_RTSP@
+CURL_DISABLE_SMTP = @CURL_DISABLE_SMTP@
+CURL_DISABLE_TELNET = @CURL_DISABLE_TELNET@
+CURL_DISABLE_TFTP = @CURL_DISABLE_TFTP@
+CURL_LIBS = @CURL_LIBS@
+CURL_NETWORK_LIBS = @CURL_NETWORK_LIBS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_SHARED = @ENABLE_SHARED@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_LDAP_SSL = @HAVE_LDAP_SSL@
+HAVE_LIBZ = @HAVE_LIBZ@
+HAVE_LIBZ_FALSE = @HAVE_LIBZ_FALSE@
+HAVE_LIBZ_TRUE = @HAVE_LIBZ_TRUE@
+HAVE_PK11_CREATEGENERICOBJECT = @HAVE_PK11_CREATEGENERICOBJECT@
+IDN_ENABLED = @IDN_ENABLED@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+IPV6_ENABLED = @IPV6_ENABLED@
+KRB4_ENABLED = @KRB4_ENABLED@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBCURL_LIBS = @LIBCURL_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+MANOPT = @MANOPT@
+MIMPURE_FALSE = @MIMPURE_FALSE@
+MIMPURE_TRUE = @MIMPURE_TRUE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NO_UNDEFINED_FALSE = @NO_UNDEFINED_FALSE@
+NO_UNDEFINED_TRUE = @NO_UNDEFINED_TRUE@
+NROFF = @NROFF@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH = @PATH@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+PKGADD_NAME = @PKGADD_NAME@
+PKGADD_PKG = @PKGADD_PKG@
+PKGADD_VENDOR = @PKGADD_VENDOR@
+PKGCONFIG = @PKGCONFIG@
+RANDOM_FILE = @RANDOM_FILE@
+RANLIB = @RANLIB@
+REQUIRE_LIB_DEPS = @REQUIRE_LIB_DEPS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SONAME_BUMP_FALSE = @SONAME_BUMP_FALSE@
+SONAME_BUMP_TRUE = @SONAME_BUMP_TRUE@
+SSL_ENABLED = @SSL_ENABLED@
+STATICLIB_FALSE = @STATICLIB_FALSE@
+STATICLIB_TRUE = @STATICLIB_TRUE@
+STRIP = @STRIP@
+SUPPORT_FEATURES = @SUPPORT_FEATURES@
+SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
+TEST_SERVER_LIBS = @TEST_SERVER_LIBS@
+USE_ARES = @USE_ARES@
+USE_EMBEDDED_ARES_FALSE = @USE_EMBEDDED_ARES_FALSE@
+USE_EMBEDDED_ARES_TRUE = @USE_EMBEDDED_ARES_TRUE@
+USE_GNUTLS = @USE_GNUTLS@
+USE_LIBRTMP = @USE_LIBRTMP@
+USE_LIBSSH2 = @USE_LIBSSH2@
+USE_MANUAL_FALSE = @USE_MANUAL_FALSE@
+USE_MANUAL_TRUE = @USE_MANUAL_TRUE@
+USE_NSS = @USE_NSS@
+USE_OPENLDAP = @USE_OPENLDAP@
+USE_POLARSSL = @USE_POLARSSL@
+USE_SSLEAY = @USE_SSLEAY@
+USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
+VERSION = @VERSION@
+VERSIONNUM = @VERSIONNUM@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+libext = @libext@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+SUBDIRS = Win32 Linux Solaris EPM AIX vms
+EXTRA_DIST = README \
+ DOS/README \
+ DOS/common.dj \
+ NetWare/get_ver.awk \
+ OS400/README.OS400 \
+ OS400/ccsidcurl.c \
+ OS400/ccsidcurl.h \
+ OS400/curl.inc.in \
+ OS400/initscript.sh \
+ OS400/make-include.sh \
+ OS400/make-lib.sh \
+ OS400/make-src.sh \
+ OS400/make-tests.sh \
+ OS400/makefile.sh \
+ OS400/os400sys.c \
+ OS400/os400sys.h \
+ Symbian/bwins/libcurlu.def \
+ Symbian/eabi/libcurlu.def \
+ Symbian/group/bld.inf \
+ Symbian/group/curl.iby \
+ Symbian/group/curl.mmp \
+ Symbian/group/curl.pkg \
+ Symbian/group/libcurl.iby \
+ Symbian/group/libcurl.mmp \
+ Symbian/group/libcurl.pkg \
+ Symbian/readme.txt \
+ TPF/curl.mak \
+ TPF/maketpf.env_curl \
+ TPF/maketpf.env_curllib
+
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign packages/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --foreign packages/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+ -rm -f libtool
+uninstall-info-am:
+
+# 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.
+$(RECURSIVE_TARGETS):
+ @failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ 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) \
+ || eval $$failcom; \
+ 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:
+ @failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ rev=''; for subdir in $$list; do \
+ if test "$$subdir" = "."; then :; else \
+ rev="$$subdir $$rev"; \
+ fi; \
+ done; \
+ 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) \
+ || eval $$failcom; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique; \
+ fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ $(mkdir_p) $(distdir)/DOS $(distdir)/NetWare $(distdir)/OS400 $(distdir)/Symbian $(distdir)/Symbian/bwins $(distdir)/Symbian/eabi $(distdir)/Symbian/group $(distdir)/TPF
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ list='$(DISTFILES)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkdir_p) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+ list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -d "$(distdir)/$$subdir" \
+ || $(mkdir_p) "$(distdir)/$$subdir" \
+ || exit 1; \
+ distdir=`$(am__cd) $(distdir) && pwd`; \
+ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
+ (cd $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$top_distdir" \
+ distdir="$$distdir/$$subdir" \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-libtool \
+ distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-recursive
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-info-am
+
+uninstall-info: uninstall-info-recursive
+
+.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \
+ clean clean-generic clean-libtool clean-recursive ctags \
+ ctags-recursive distclean distclean-generic distclean-libtool \
+ distclean-recursive distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-exec install-exec-am install-info \
+ install-info-am install-man install-strip installcheck \
+ installcheck-am installdirs installdirs-am maintainer-clean \
+ maintainer-clean-generic maintainer-clean-recursive \
+ mostlyclean mostlyclean-generic mostlyclean-libtool \
+ mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \
+ uninstall uninstall-am uninstall-info-am
+
+# 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/packages/NetWare/get_ver.awk b/packages/NetWare/get_ver.awk
new file mode 100644
index 0000000..2f3b308
--- /dev/null
+++ b/packages/NetWare/get_ver.awk
@@ -0,0 +1,75 @@
+# ***************************************************************************
+# * _ _ ____ _
+# * Project ___| | | | _ \| |
+# * / __| | | | |_) | |
+# * | (__| |_| | _ <| |___
+# * \___|\___/|_| \_\_____|
+# *
+# * Copyright (C) 1998 - 2008, Daniel Stenberg, <daniel@haxx.se>, et al.
+# *
+# * This software is licensed as described in the file COPYING, which
+# * you should have received as part of this distribution. The terms
+# * are also available at http://curl.haxx.se/docs/copyright.html.
+# *
+# * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+# * copies of the Software, and permit persons to whom the Software is
+# * furnished to do so, under the terms of the COPYING file.
+# *
+# * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+# * KIND, either express or implied.
+# *
+# ***************************************************************************
+# awk script which fetches curl / ares version number and string from input
+# file and writes them to STDOUT. Here you can get an awk version for Win32:
+# http://www.gknw.net/development/prgtools/awk-20070501.zip
+#
+BEGIN {
+ if (match (ARGV[1], /curlver.h/)) {
+ while ((getline < ARGV[1]) > 0) {
+ if (match ($0, /^#define LIBCURL_COPYRIGHT "[^"]+"$/)) {
+ libcurl_copyright_str = substr($0, 28, length($0)-28);
+ }
+ else if (match ($0, /^#define LIBCURL_VERSION "[^"]+"$/)) {
+ libcurl_ver_str = substr($3, 2, length($3)-2);
+ }
+ else if (match ($0, /^#define LIBCURL_VERSION_MAJOR [0-9]+$/)) {
+ libcurl_ver_major = substr($3, 1, length($3));
+ }
+ else if (match ($0, /^#define LIBCURL_VERSION_MINOR [0-9]+$/)) {
+ libcurl_ver_minor = substr($3, 1, length($3));
+ }
+ else if (match ($0, /^#define LIBCURL_VERSION_PATCH [0-9]+$/)) {
+ libcurl_ver_patch = substr($3, 1, length($3));
+ }
+ }
+ libcurl_ver = libcurl_ver_major "," libcurl_ver_minor "," libcurl_ver_patch;
+ print "LIBCURL_VERSION = " libcurl_ver "";
+ print "LIBCURL_VERSION_STR = " libcurl_ver_str "";
+ print "LIBCURL_COPYRIGHT_STR = " libcurl_copyright_str "";
+ }
+ if (match (ARGV[1], /ares_version.h/)) {
+ while ((getline < ARGV[1]) > 0) {
+ if (match ($0, /^#define ARES_COPYRIGHT "[^"]+"$/)) {
+ libcares_copyright_str = substr($0, 25, length($0)-25);
+ }
+ else if (match ($0, /^#define ARES_VERSION_STR "[^"]+"$/)) {
+ libcares_ver_str = substr($3, 2, length($3)-2);
+ }
+ else if (match ($0, /^#define ARES_VERSION_MAJOR [0-9]+$/)) {
+ libcares_ver_major = substr($3, 1, length($3));
+ }
+ else if (match ($0, /^#define ARES_VERSION_MINOR [0-9]+$/)) {
+ libcares_ver_minor = substr($3, 1, length($3));
+ }
+ else if (match ($0, /^#define ARES_VERSION_PATCH [0-9]+$/)) {
+ libcares_ver_patch = substr($3, 1, length($3));
+ }
+ }
+ libcares_ver = libcares_ver_major "," libcares_ver_minor "," libcares_ver_patch;
+ print "LIBCARES_VERSION = " libcares_ver "";
+ print "LIBCARES_VERSION_STR = " libcares_ver_str "";
+ print "LIBCARES_COPYRIGHT_STR = " libcares_copyright_str "";
+ }
+}
+
+
diff --git a/packages/OS400/README.OS400 b/packages/OS400/README.OS400
new file mode 100644
index 0000000..746bba8
--- /dev/null
+++ b/packages/OS400/README.OS400
@@ -0,0 +1,262 @@
+
+Implementation notes:
+
+ This is a true OS/400 implementation, not a PASE implementation (for PASE,
+use AIX implementation).
+
+ The biggest problem with OS/400 is EBCDIC. Libcurl implements an internal
+conversion mechanism, but it has been designed for computers that have a
+single native character set. OS/400 default native character set varies
+depending on the country for which it has been localized. And more, a job
+may dynamically alter its "native" character set.
+ Several characters that do not have fixed code in EBCDIC variants are
+used in libcurl strings. As a consequence, using the existing conversion
+mechanism would have lead in a localized binary library - not portable across
+countries.
+ For this reason, and because libcurl was originally designed for ASCII based
+operating systems, the current OS/400 implementation uses ASCII as internal
+character set. This has been accomplished using the QADRT library and
+include files, a C and system procedures ASCII wrapper library. See IBM QADRT
+description for more information.
+ This then results in libcurl being an ASCII library: any function string
+argument is taken/returned in ASCII and a C/C++ calling program built around
+QADRT may use libcurl functions as on any other platform.
+ QADRT does not define ASCII wrappers for all C/system procedures: the
+OS/400 configuration header file and an additional module (os400sys.c) define
+some more of them, that are used by libcurl and that QADRT left out.
+ To support all the different variants of EBCDIC, non-standard wrapper
+procedures have been added to libcurl on OS/400: they provide an additional
+CCSID (numeric Coded Character Set ID specific to OS/400) parameter for each
+string argument. String values passed to callback procedures are NOT converted,
+so text gathered this way is (probably !) ASCII.
+
+ Another OS/400 problem comes from the fact that the last fixed argument of a
+vararg procedure may not be of type char, unsigned char, short or unsigned
+short. Enums that are internally implemented by the C compiler as one of these
+types are also forbidden. Libcurl uses enums as vararg procedure tagfields...
+Happily, there is a pragma forcing enums to type "int". The original libcurl
+header files are thus altered during build process to use this pragma, in
+order to force libcurl enums of being type int (the pragma disposition in use
+before inclusion is restored before resuming the including unit compilation).
+
+ Three SSL implementations were present in libcurl. Nevertheless, none of them
+is available on OS/400. To support SSL on OS/400, a fourth implementation has
+been added (qssl.[ch]). There is no way to have different certificate stores
+for CAs and for personal/application certificates/key. More, the SSL context
+may be defined as an application identifier in the main certificate store,
+or as a keyring file. As a consequence, the meaning of some fields have been
+slightly altered:
+_ The "certificate identifier" is taken from CURLOPT_SSLCERT if defined, else
+from CURLOPT_CAINFO.
+_ The certificate identifier is then used as an application identifier in the
+main certificate store. If successful, this context is used.
+_ If the previous step failed, the certificate identifier is used as the file
+name of a keyring. CURLOPT_KEYPASSWD is used here as the keyring password.
+_ The default ca-bundle (CURLOPT_CAINFO) is set to the main certificate store's
+keyring file name: this allows to use the system global CAs by default. (In that
+case, the keyring password is safely recovered from the system... IBM dixit!)
+
+ Non-standard EBCDIC wrapper prototypes are defined in an additional header
+file: ccsidcurl.h. These should be self-explanatory to an OS/400-aware
+designer. CCSID 0 can be used to select the current job's CCSID.
+ Wrapper procedures with variable arguments are described below:
+
+_ curl_easy_setopt_ccsid()
+ Variable arguments are a string pointer and a CCSID (unsigned int) for
+options:
+ CURLOPT_CAINFO
+ CURLOPT_CAPATH
+ CURLOPT_COOKIE
+ CURLOPT_COOKIEFILE
+ CURLOPT_COOKIEJAR
+ CURLOPT_COOKIELIST
+ CURLOPT_CUSTOMREQUEST
+ CURLOPT_EGDSOCKET
+ CURLOPT_ENCODING
+ CURLOPT_FTPPORT
+ CURLOPT_FTP_ACCOUNT
+ CURLOPT_FTP_ALTERNATIVE_TO_USER
+ CURLOPT_INTERFACE
+ CURLOPT_KEYPASSWD
+ CURLOPT_KRBLEVEL
+ CURLOPT_NETRC_FILE
+ CURLOPT_COPYPOSTFIELDS
+ CURLOPT_PROXY
+ CURLOPT_PROXYUSERPWD
+ CURLOPT_RANDOM_FILE
+ CURLOPT_RANGE
+ CURLOPT_REFERER
+ CURLOPT_SSH_PRIVATE_KEYFILE
+ CURLOPT_SSH_PUBLIC_KEYFILE
+ CURLOPT_SSLCERT
+ CURLOPT_SSLCERTTYPE
+ CURLOPT_SSLENGINE
+ CURLOPT_SSLKEY
+ CURLOPT_SSLKEYTYPE
+ CURLOPT_SSL_CIPHER_LIST
+ CURLOPT_URL
+ CURLOPT_USERAGENT
+ CURLOPT_USERPWD
+ CURLOPT_SSH_HOST_PUBLIC_KEY_MD5
+ CURLOPT_CRLFILE
+ CURLOPT_ISSUERCERT
+ CURLOPT_USERNAME
+ CURLOPT_PASSWORD
+ CURLOPT_PROXYUSERNAME
+ CURLOPT_PROXYPASSWORD
+ CURLOPT_NOPROXY
+ CURLOPT_RTSP_SESSION_UID
+ CURLOPT_RTSP_STREAM_URI
+ CURLOPT_RTSP_TRANSPORT
+ CURLOPT_SOCKS5_GSSAPI_SERVICE
+ CURLOPT_MAIL_FROM
+ Else it is the same as for curl_easy_setopt().
+ Note that CURLOPT_ERRORBUFFER is not in the list above, since it gives the
+address of an (empty) character buffer, not the address of a string.
+CURLOPT_POSTFIELDS stores the address of static binary data (of type void *) and
+thus is not converted. If CURLOPT_COPYPOSTFIELDS is issued after
+CURLOPT_POSTFIELDSIZE != -1, the data size is adjusted according to the
+CCSID conversion result length.
+
+_ curl_formadd_ccsid()
+ In the variable argument list, string pointers should be followed by a (long)
+CCSID for the following options:
+ CURLFORM_FILENAME
+ CURLFORM_CONTENTTYPE
+ CURLFORM_BUFFER
+ CURLFORM_FILE
+ CURLFORM_FILECONTENT
+ CURLFORM_COPYCONTENTS
+ CURLFORM_COPYNAME
+ CURLFORM_PTRNAME
+ If taken from an argument array, an additional array entry must follow each
+entry containing one of the above option. This additional entry holds the CCSID
+in its value field, and the option field is meaningless.
+ It is not possible to have a string pointer and its CCSID across a function
+parameter/array boundary.
+ Please note that CURLFORM_PTRCONTENTS and CURLFORM_BUFFERPTR are considered
+unconvertible strings and thus are NOT followed by a CCSID.
+
+_ curl_easy_getinfo_ccsid
+ The following options are followed by a 'char * *' and a CCSID. Unlike
+curl_easy_getinfo(), the value returned in the pointer should be freed after
+use:
+ CURLINFO_EFFECTIVE_URL
+ CURLINFO_CONTENT_TYPE
+ CURLINFO_FTP_ENTRY_PATH
+ Other options are processed like in curl_easy_getinfo().
+
+ Standard compilation environment does support neither autotools nor make;
+in fact, very few common utilities are available. As a consequence, the
+config-os400.h has been coded manually and the compilation scripts are
+a set of shell scripts stored in subdirectory packages/OS400.
+
+ The "curl" command and the test environment are currently not supported on
+OS/400.
+
+
+Protocols currently implemented on OS/400:
+_ HTTP
+_ HTTPS
+_ FTP
+_ FTPS
+_ FTP with secure transmission.
+_ LDAP
+_ DICT
+_ TELNET
+
+
+
+Compiling on OS/400:
+
+ These instructions targets people who knows about OS/400, compiling, IFS and
+archive extraction. Do not ask questions about these subjects if you're not
+familiar with.
+
+_ As a prerequisite, QADRT development environment must be installed.
+_ Install the curl source directory in IFS.
+_ Enter shell (QSH)
+_ Change current directory to the curl installation directory
+_ Change current directory to ./packages/OS400
+_ Edit file iniscript.sh. You may want to change tunable configuration
+ parameters, like debug info generation, optimisation level, listing option,
+ target library, etc.
+_ Copy any file in the current directory to makelog (i.e.:
+ cp initscript.sh makelog): this is intended to create the makelog file with
+ an ASCII CCSID!
+_ Enter the command "sh makefile.sh > makelog 2>&1'
+_ Examine the makelog file to check for compilation errors.
+
+ Leaving file initscript.sh unchanged, this will produce the following OS/400
+objects:
+_ Library CURL. All other objects will be stored in this library.
+_ Modules for all libcurl units.
+_ Binding directory CURL_A, to be used at calling program link time for
+ statically binding the modules (specify BNDSRVPGM(QADRTTS QGLDCLNT QGLDBRDR)
+ when creating a program using CURL_A).
+_ Service program CURL.<soname>, where <soname> is extracted from the
+ lib/Makefile.am VERSION variable. To be used at calling program run-time
+ when this program has dynamically bound curl at link time.
+_ Binding directory CURL. To be used to dynamically bind libcurl when linking a
+ calling program.
+_ Source file H. It contains all the include members needed to compile a C/C++
+ module using libcurl, and an ILE/RPG /copy member for support in this
+ language.
+_ Standard C/C++ libcurl include members in file H.
+_ CCSIDCURL member in file H. This defines the non-standard EBCDIC wrappers for
+ C and C++.
+_ CURL.INC member in file H. This defines everything needed by an ILE/RPG
+ program using libcurl.
+_ LIBxxx modules and programs. Although the test environment is not supported
+ on OS/400, the libcurl test programs are compiled for manual tests.
+
+
+
+Special programming consideration:
+
+QADRT being used, the following points must be considered:
+_ If static binding is used, service program QADRTTS must be linked too.
+_ The EBCDIC CCSID used by QADRT is 37 by default, NOT THE JOB'S CCSID. If
+ another EBCDIC CCSID is required, it must be set via a locale through a call
+ to setlocale_a (QADRT's setlocale() ASCII wrapper) with category LC_ALL or
+ LC_CTYPE, or by setting environment variable QADRT_ENV_LOCALE to the locale
+ object path before executing the program.
+_ Do not use original source include files unless you know what you are doing.
+ Use the installed members instead (in /QSYS.LIB/CURL.LIB/H.FILE).
+
+
+
+ILE/RPG support:
+
+ Since 95% of the OS/400 programmers use ILE/RPG exclusively, a definition
+ /COPY member is provided for this language. To include all libcurl
+ definitions in an ILE/RPG module, line
+
+ h bnddir('CURL/CURL')
+
+must figure in the program header, and line
+
+ d/copy curl/h,curl.inc
+
+in the global data section of the module's source code.
+
+ No vararg procedure support exists in ILE/RPG: for this reason, the following
+considerations apply:
+_ Procedures curl_easy_setopt_long(), curl_easy_setopt_object(),
+ curl_easy_setopt_function() and curl_easy_setopt_offset() are all alias
+ prototypes to curl_easy_setopt(), but with different parameter lists.
+_ Procedures curl_easy_getinfo_string(), curl_easy_getinfo_long(),
+ curl_easy_getinfo_double() and curl_easy_getinfo_slist() are all alias
+ prototypes to curl_easy_getinfo(), but with different parameter lists.
+_ Procedures curl_multi_setopt_long(), curl_multi_setopt_object(),
+ curl_multi_setopt_function() and curl_multi_setopt_offset() are all alias
+ prototypes to curl_multi_setopt(), but with different parameter lists.
+_ The prototype of procedure curl_formadd() allows specifying a pointer option
+ and the CURLFORM_END option. This makes possible to use an option array
+ without any additional definition. If some specific incompatible argument
+ list is used in the ILE/RPG program, the latter must define a specialised
+ alias. The same applies to curl_formadd_ccsid() too.
+
+ Since RPG cannot cast a long to a pointer, procedure curl_form_long_value()
+is provided for that purpose: this allows storing a long value in the curl_forms
+array.
diff --git a/packages/OS400/ccsidcurl.c b/packages/OS400/ccsidcurl.c
new file mode 100644
index 0000000..ad67e1c
--- /dev/null
+++ b/packages/OS400/ccsidcurl.c
@@ -0,0 +1,1186 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at http://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ *
+ ***************************************************************************/
+
+/* CCSID API wrappers for OS/400. */
+
+#include <iconv.h>
+#include <string.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <stdarg.h>
+
+#pragma enum(int)
+
+#include "curl.h"
+#include "mprintf.h"
+#include "urldata.h"
+#include "url.h"
+#include "getinfo.h"
+#include "ccsidcurl.h"
+
+#include "os400sys.h"
+
+#ifndef SIZE_MAX
+#define SIZE_MAX ((size_t) ~0) /* Is unsigned on OS/400. */
+#endif
+
+
+#define ASCII_CCSID 819 /* Use ISO-8859-1 as ASCII. */
+#define NOCONV_CCSID 65535 /* No conversion. */
+#define ICONV_ID_SIZE 32 /* Size of iconv_open() code identifier. */
+#define ICONV_OPEN_ERROR(t) ((t).return_value == -1)
+
+#define ALLOC_GRANULE 8 /* Alloc. granule for curl_formadd_ccsid(). */
+
+
+static void
+makeOS400IconvCode(char buf[ICONV_ID_SIZE], unsigned int ccsid)
+
+{
+ /**
+ *** Convert a CCSID to the corresponding IBM iconv_open() character
+ *** code identifier.
+ *** This code is specific to the OS400 implementation of the iconv library.
+ *** CCSID 65535 (no conversion) is replaced by the ASCII CCSID.
+ *** CCSID 0 is interpreted by the OS400 as the job's CCSID.
+ **/
+
+ ccsid &= 0xFFFF;
+
+ if (ccsid == NOCONV_CCSID)
+ ccsid = ASCII_CCSID;
+
+ memset(buf, 0, ICONV_ID_SIZE);
+ curl_msprintf(buf, "IBMCCSID%05u0000000", ccsid);
+}
+
+
+static iconv_t
+iconv_open_CCSID(unsigned int ccsidout, unsigned int ccsidin, unsigned int cstr)
+
+{
+ char fromcode[ICONV_ID_SIZE];
+ char tocode[ICONV_ID_SIZE];
+
+ /**
+ *** Like iconv_open(), but character codes are given as CCSIDs.
+ *** If `cstr' is non-zero, conversion is set up to stop whenever a
+ *** null character is encountered.
+ *** See iconv_open() IBM description in "National Language Support API".
+ **/
+
+ makeOS400IconvCode(fromcode, ccsidin);
+ makeOS400IconvCode(tocode, ccsidout);
+ memset(tocode + 13, 0, sizeof tocode - 13); /* Dest. code id format. */
+
+ if (cstr)
+ fromcode[18] = '1'; /* Set null-terminator flag. */
+
+ return iconv_open(tocode, fromcode);
+}
+
+
+static int
+convert(char * d, size_t dlen, int dccsid,
+ const char * s, int slen, int sccsid)
+
+{
+ int i;
+ iconv_t cd;
+ size_t lslen;
+
+ /**
+ *** Convert `sccsid'-coded `slen'-data bytes at `s' into `dccsid'-coded
+ *** data stored in the `dlen'-byte buffer at `d'.
+ *** If `slen' < 0, source string is null-terminated.
+ *** CCSID 65535 (no conversion) is replaced by the ASCII CCSID.
+ *** Return the converted destination byte count, or -1 if error.
+ **/
+
+ if (sccsid == 65535)
+ sccsid = ASCII_CCSID;
+
+ if (dccsid == 65535)
+ dccsid = ASCII_CCSID;
+
+ if (sccsid == dccsid) {
+ lslen = slen >= 0? slen: strlen(s) + 1;
+ i = lslen < dlen? lslen: dlen;
+
+ if (s != d && i > 0)
+ memcpy(d, s, i);
+
+ return i;
+ }
+
+ if (slen < 0) {
+ lslen = 0;
+ cd = iconv_open_CCSID(dccsid, sccsid, 1);
+ }
+ else {
+ lslen = (size_t) slen;
+ cd = iconv_open_CCSID(dccsid, sccsid, 0);
+ }
+
+ if (ICONV_OPEN_ERROR(cd))
+ return -1;
+
+ i = dlen;
+
+ if ((int) iconv(cd, (char * *) &s, &lslen, &d, &dlen) < 0)
+ i = -1;
+ else
+ i -= dlen;
+
+ iconv_close(cd);
+ return i;
+}
+
+
+static char *
+dynconvert(int dccsid, const char * s, int slen, int sccsid)
+
+{
+ char * d;
+ char * cp;
+ size_t dlen;
+ int l;
+ int l2;
+ static const char nullbyte = 0;
+
+ /* Like convert, but the destination is allocated and returned. */
+
+ dlen = (size_t) (slen < 0? strlen(s): slen) + 1;
+ dlen *= MAX_CONV_EXPANSION; /* Allow some expansion. */
+ d = malloc(dlen);
+
+ if (!d)
+ return (char *) NULL;
+
+ l = convert(d, dlen, dccsid, s, slen, sccsid);
+
+ if (l < 0) {
+ free(d);
+ return (char *) NULL;
+ }
+
+ if (slen < 0) {
+ /* Need to null-terminate even when source length is given.
+ Since destination code size is unknown, use a conversion to generate
+ terminator. */
+
+ l2 = convert(d + l, dlen - l, dccsid, &nullbyte, -1, ASCII_CCSID);
+
+ if (l2 < 0) {
+ free(d);
+ return (char *) NULL;
+ }
+
+ l += l2;
+ }
+
+ if ((size_t) l < dlen) {
+ cp = realloc(d, l); /* Shorten to minimum needed. */
+
+ if (cp)
+ d = cp;
+ }
+
+ return d;
+}
+
+
+char *
+curl_version_ccsid(unsigned int ccsid)
+
+{
+ int i;
+ char * aversion;
+ char * eversion;
+
+ aversion = curl_version();
+
+ if (!aversion)
+ return aversion;
+
+ i = strlen(aversion) + 1;
+ i *= MAX_CONV_EXPANSION;
+
+ if (!(eversion = Curl_thread_buffer(LK_CURL_VERSION, i)))
+ return (char *) NULL;
+
+ if (convert(eversion, i, ccsid, aversion, -1, ASCII_CCSID) < 0)
+ return (char *) NULL;
+
+ return eversion;
+}
+
+
+char *
+curl_easy_escape_ccsid(CURL * handle, const char * string, int length,
+ unsigned int sccsid, unsigned int dccsid)
+
+{
+ char * s;
+ char * d;
+
+ if (!string) {
+ errno = EINVAL;
+ return (char *) NULL;
+ }
+
+ s = dynconvert(ASCII_CCSID, s, length? length: -1, sccsid);
+
+ if (!s)
+ return (char *) NULL;
+
+ d = curl_easy_escape(handle, s, 0);
+ free(s);
+
+ if (!d)
+ return (char *) NULL;
+
+ s = dynconvert(dccsid, d, -1, ASCII_CCSID);
+ free(d);
+ return s;
+}
+
+
+char *
+curl_easy_unescape_ccsid(CURL * handle, const char * string, int length,
+ int * outlength,
+ unsigned int sccsid, unsigned int dccsid)
+
+{
+ char * s;
+ char * d;
+
+ if (!string) {
+ errno = EINVAL;
+ return (char *) NULL;
+ }
+
+ s = dynconvert(ASCII_CCSID, s, length? length: -1, sccsid);
+
+ if (!s)
+ return (char *) NULL;
+
+ d = curl_easy_unescape(handle, s, 0, outlength);
+ free(s);
+
+ if (!d)
+ return (char *) NULL;
+
+ s = dynconvert(dccsid, d, -1, ASCII_CCSID);
+ free(d);
+
+ if (s && outlength)
+ *outlength = strlen(s);
+
+ return s;
+}
+
+
+struct curl_slist *
+curl_slist_append_ccsid(struct curl_slist * list,
+ const char * data, unsigned int ccsid)
+
+{
+ char * s;
+
+ s = (char *) NULL;
+
+ if (!data)
+ return curl_slist_append(list, data);
+
+ s = dynconvert(ASCII_CCSID, data, -1, ccsid);
+
+ if (!s)
+ return (struct curl_slist *) NULL;
+
+ list = curl_slist_append(list, s);
+ free(s);
+ return list;
+}
+
+
+time_t
+curl_getdate_ccsid(const char * p, const time_t * unused, unsigned int ccsid)
+
+{
+ char * s;
+ time_t t;
+
+ if (!p)
+ return curl_getdate(p, unused);
+
+ s = dynconvert(ASCII_CCSID, p, -1, ccsid);
+
+ if (!s)
+ return (time_t) -1;
+
+ t = curl_getdate(s, unused);
+ free(s);
+ return t;
+}
+
+
+static int
+convert_version_info_string(const char * * stringp,
+ char * * bufp, int * left, unsigned int ccsid)
+
+{
+ int l;
+
+ /* Helper for curl_version_info_ccsid(): convert a string if defined.
+ Result is stored in the `*left'-byte buffer at `*bufp'.
+ `*bufp' and `*left' are updated accordingly.
+ Return 0 if ok, else -1. */
+
+ if (*stringp) {
+ l = convert(*bufp, *left, ccsid, *stringp, -1, ASCII_CCSID);
+
+ if (l <= 0)
+ return -1;
+
+ *stringp = *bufp;
+ *bufp += l;
+ *left -= l;
+ }
+
+ return 0;
+}
+
+
+curl_version_info_data *
+curl_version_info_ccsid(CURLversion stamp, unsigned int ccsid)
+
+{
+ curl_version_info_data * p;
+ char * cp;
+ int n;
+ int nproto;
+ int i;
+ curl_version_info_data * id;
+
+ /* The assertion below is possible, because although the second operand
+ is an enum member, the first is a #define. In that case, the OS/400 C
+ compiler seems to compare string values after substitution. */
+
+#if CURLVERSION_NOW != CURLVERSION_FOURTH
+#error curl_version_info_data structure has changed: upgrade this procedure too.
+#endif
+
+ /* If caller has been compiled with a new version, error. */
+
+ if (stamp > CURLVERSION_NOW)
+ return (curl_version_info_data *) NULL;
+
+ p = curl_version_info(stamp);
+
+ if (!p)
+ return p;
+
+ /* Measure thread space needed. */
+
+ n = 0;
+ nproto = 0;
+
+ if (p->protocols) {
+ while (p->protocols[nproto])
+ n += strlen(p->protocols[nproto++]);
+
+ n += nproto++;
+ }
+
+ if (p->version)
+ n += strlen(p->version) + 1;
+
+ if (p->host)
+ n += strlen(p->host) + 1;
+
+ if (p->ssl_version)
+ n += strlen(p->ssl_version) + 1;
+
+ if (p->libz_version)
+ n += strlen(p->libz_version) + 1;
+
+ if (p->ares)
+ n += strlen(p->ares) + 1;
+
+ if (p->libidn)
+ n += strlen(p->libidn) + 1;
+
+ if (p->libssh_version)
+ n += strlen(p->libssh_version) + 1;
+
+ /* Allocate thread space. */
+
+ n *= MAX_CONV_EXPANSION;
+
+ if (nproto)
+ n += nproto * sizeof(const char *);
+
+ cp = Curl_thread_buffer(LK_VERSION_INFO_DATA, n);
+ id = (curl_version_info_data *) Curl_thread_buffer(LK_VERSION_INFO,
+ sizeof *id);
+
+ if (!id || !cp)
+ return (curl_version_info_data *) NULL;
+
+ /* Copy data and convert strings. */
+
+ memcpy((char *) id, (char *) p, sizeof *p);
+
+ if (id->protocols) {
+ id->protocols = (const char * const *) cp;
+ i = nproto * sizeof id->protocols[0];
+ memcpy(cp, (char *) p->protocols, i);
+ cp += i;
+ n -= i;
+
+ for (i = 0; id->protocols[i]; i++)
+ if (convert_version_info_string(((const char * *) id->protocols) + i,
+ &cp, &n, ccsid))
+ return (curl_version_info_data *) NULL;
+ }
+
+ if (convert_version_info_string(&id->version, &cp, &n, ccsid))
+ return (curl_version_info_data *) NULL;
+
+ if (convert_version_info_string(&id->host, &cp, &n, ccsid))
+ return (curl_version_info_data *) NULL;
+
+ if (convert_version_info_string(&id->ssl_version, &cp, &n, ccsid))
+ return (curl_version_info_data *) NULL;
+
+ if (convert_version_info_string(&id->libz_version, &cp, &n, ccsid))
+ return (curl_version_info_data *) NULL;
+
+ if (convert_version_info_string(&id->ares, &cp, &n, ccsid))
+ return (curl_version_info_data *) NULL;
+
+ if (convert_version_info_string(&id->libidn, &cp, &n, ccsid))
+ return (curl_version_info_data *) NULL;
+
+ if (convert_version_info_string(&id->libssh_version, &cp, &n, ccsid))
+ return (curl_version_info_data *) NULL;
+
+ return id;
+}
+
+
+const char *
+curl_easy_strerror_ccsid(CURLcode error, unsigned int ccsid)
+
+{
+ int i;
+ const char * s;
+ char * buf;
+
+ s = curl_easy_strerror(error);
+
+ if (!s)
+ return s;
+
+ i = MAX_CONV_EXPANSION * (strlen(s) + 1);
+
+ if (!(buf = Curl_thread_buffer(LK_EASY_STRERROR, i)))
+ return (const char *) NULL;
+
+ if (convert(buf, i, ccsid, s, -1, ASCII_CCSID) < 0)
+ return (const char *) NULL;
+
+ return (const char *) buf;
+}
+
+
+const char *
+curl_share_strerror_ccsid(CURLSHcode error, unsigned int ccsid)
+
+{
+ int i;
+ const char * s;
+ char * buf;
+
+ s = curl_share_strerror(error);
+
+ if (!s)
+ return s;
+
+ i = MAX_CONV_EXPANSION * (strlen(s) + 1);
+
+ if (!(buf = Curl_thread_buffer(LK_SHARE_STRERROR, i)))
+ return (const char *) NULL;
+
+ if (convert(buf, i, ccsid, s, -1, ASCII_CCSID) < 0)
+ return (const char *) NULL;
+
+ return (const char *) buf;
+}
+
+
+const char *
+curl_multi_strerror_ccsid(CURLMcode error, unsigned int ccsid)
+
+{
+ int i;
+ const char * s;
+ char * buf;
+
+ s = curl_multi_strerror(error);
+
+ if (!s)
+ return s;
+
+ i = MAX_CONV_EXPANSION * (strlen(s) + 1);
+
+ if (!(buf = Curl_thread_buffer(LK_MULTI_STRERROR, i)))
+ return (const char *) NULL;
+
+ if (convert(buf, i, ccsid, s, -1, ASCII_CCSID) < 0)
+ return (const char *) NULL;
+
+ return (const char *) buf;
+}
+
+
+CURLcode
+curl_easy_getinfo_ccsid(CURL * curl, CURLINFO info, ...)
+
+{
+ va_list arg;
+ void * paramp;
+ CURLcode ret;
+ unsigned int ccsid;
+ char * * cpp;
+ char * s;
+ char * d;
+ struct SessionHandle * data;
+
+ /* WARNING: unlike curl_easy_get_info(), the strings returned by this
+ procedure have to be free'ed. */
+
+ data = (struct SessionHandle *) curl;
+ va_start(arg, info);
+ paramp = va_arg(arg, void *);
+ ret = Curl_getinfo(data, info, paramp);
+
+ if (ret != CURLE_OK || ((int) info & CURLINFO_TYPEMASK) != CURLINFO_STRING) {
+ va_end(arg);
+ return ret;
+ }
+
+ ccsid = va_arg(arg, unsigned int);
+ va_end(arg);
+ cpp = (char * *) paramp;
+ s = *cpp;
+
+ if (!s)
+ return ret;
+
+ d = dynconvert(ccsid, s, -1, ASCII_CCSID);
+ *cpp = d;
+
+ if (!d)
+ return CURLE_OUT_OF_MEMORY;
+
+ return ret;
+}
+
+
+static int
+Curl_is_formadd_string(CURLformoption option)
+
+{
+ switch (option) {
+
+ case CURLFORM_FILENAME:
+ case CURLFORM_CONTENTTYPE:
+ case CURLFORM_BUFFER:
+ case CURLFORM_FILE:
+ case CURLFORM_FILECONTENT:
+ case CURLFORM_COPYCONTENTS:
+ case CURLFORM_COPYNAME:
+ return 1;
+ }
+
+ return 0;
+}
+
+
+static void
+Curl_formadd_release_local(struct curl_forms * forms, int nargs, int skip)
+
+{
+ while (nargs--)
+ if (nargs != skip)
+ if (Curl_is_formadd_string(forms[nargs].option))
+ if (forms[nargs].value)
+ free((char *) forms[nargs].value);
+
+ free((char *) forms);
+}
+
+
+static int
+Curl_formadd_convert(struct curl_forms * forms,
+ int formx, int lengthx, unsigned int ccsid)
+
+{
+ int l;
+ char * cp;
+ char * cp2;
+
+ if (formx < 0 || !forms[formx].value)
+ return 0;
+
+ if (lengthx >= 0)
+ l = (int) forms[lengthx].value;
+ else
+ l = strlen(forms[formx].value) + 1;
+
+ cp = malloc(MAX_CONV_EXPANSION * l);
+
+ if (!cp)
+ return -1;
+
+ l = convert(cp, MAX_CONV_EXPANSION * l, ASCII_CCSID,
+ forms[formx].value, l, ccsid);
+
+ if (l < 0) {
+ free(cp);
+ return -1;
+ }
+
+ cp2 = realloc(cp, l); /* Shorten buffer to the string size. */
+
+ if (cp2)
+ cp = cp2;
+
+ forms[formx].value = cp;
+
+ if (lengthx >= 0)
+ forms[lengthx].value = (char *) l; /* Update to length after conversion. */
+
+ return l;
+}
+
+
+CURLFORMcode
+curl_formadd_ccsid(struct curl_httppost * * httppost,
+ struct curl_httppost * * last_post, ...)
+
+{
+ va_list arg;
+ CURLformoption option;
+ CURLFORMcode result;
+ struct curl_forms * forms;
+ struct curl_forms * lforms;
+ struct curl_forms * tforms;
+ unsigned int lformlen;
+ const char * value;
+ unsigned int ccsid;
+ int nargs;
+ int namex;
+ int namelengthx;
+ int contentx;
+ int lengthx;
+ unsigned int contentccsid;
+ unsigned int nameccsid;
+
+ /* A single curl_formadd() call cannot be splitted in several calls to deal
+ with all parameters: the original parameters are thus copied to a local
+ curl_forms array and converted to ASCII when needed.
+ CURLFORM_PTRNAME is processed as if it were CURLFORM_COPYNAME.
+ CURLFORM_COPYNAME and CURLFORM_NAMELENGTH occurrence order in
+ parameters is not defined; for this reason, the actual conversion is
+ delayed to the end of parameter processing. The same applies to
+ CURLFORM_COPYCONTENTS/CURLFORM_CONTENTSLENGTH, but these may appear
+ several times in the parameter list; the problem resides here in knowing
+ which CURLFORM_CONTENTSLENGTH applies to which CURLFORM_COPYCONTENTS and
+ when we can be sure to have both info for conversion: end of parameter
+ list is such a point, but CURLFORM_CONTENTTYPE is also used here as a
+ natural separator between content data definitions; this seems to be
+ in accordance with FormAdd() behavior. */
+
+ /* Allocate the local curl_forms array. */
+
+ lformlen = ALLOC_GRANULE;
+ lforms = malloc(lformlen * sizeof *lforms);
+
+ if (!lforms)
+ return CURL_FORMADD_MEMORY;
+
+ /* Process the arguments, copying them into local array, latching conversion
+ indexes and converting when needed. */
+
+ result = CURL_FORMADD_OK;
+ nargs = 0;
+ contentx = -1;
+ lengthx = -1;
+ namex = -1;
+ namelengthx = -1;
+ forms = (struct curl_forms *) NULL;
+ va_start(arg, last_post);
+
+ for (;;) {
+ /* Make sure there is still room for an item in local array. */
+
+ if (nargs >= lformlen) {
+ lformlen += ALLOC_GRANULE;
+ tforms = realloc(lforms, lformlen * sizeof *lforms);
+
+ if (!tforms) {
+ result = CURL_FORMADD_MEMORY;
+ break;
+ }
+
+ lforms = tforms;
+ }
+
+ /* Get next option. */
+
+ if (forms) {
+ /* Get option from array. */
+
+ option = forms->option;
+ value = forms->value;
+ forms++;
+ }
+ else {
+ /* Get option from arguments. */
+
+ option = va_arg(arg, CURLformoption);
+
+ if (option == CURLFORM_END)
+ break;
+ }
+
+ /* Dispatch by option. */
+
+ switch (option) {
+
+ case CURLFORM_END:
+ forms = (struct curl_forms *) NULL; /* Leave array mode. */
+ continue;
+
+ case CURLFORM_ARRAY:
+ if (!forms) {
+ forms = va_arg(arg, struct curl_forms *);
+ continue;
+ }
+
+ result = CURL_FORMADD_ILLEGAL_ARRAY;
+ break;
+
+ case CURLFORM_COPYNAME:
+ option = CURLFORM_PTRNAME; /* Static for now. */
+
+ case CURLFORM_PTRNAME:
+ if (namex >= 0)
+ result = CURL_FORMADD_OPTION_TWICE;
+
+ namex = nargs;
+
+ if (!forms) {
+ value = va_arg(arg, char *);
+ nameccsid = (unsigned int) va_arg(arg, long);
+ }
+ else {
+ nameccsid = (unsigned int) forms->value;
+ forms++;
+ }
+
+ break;
+
+ case CURLFORM_COPYCONTENTS:
+ if (contentx >= 0)
+ result = CURL_FORMADD_OPTION_TWICE;
+
+ contentx = nargs;
+
+ if (!forms) {
+ value = va_arg(arg, char *);
+ contentccsid = (unsigned int) va_arg(arg, long);
+ }
+ else {
+ contentccsid = (unsigned int) forms->value;
+ forms++;
+ }
+
+ break;
+
+ case CURLFORM_PTRCONTENTS:
+ case CURLFORM_BUFFERPTR:
+ if (!forms)
+ value = va_arg(arg, char *); /* No conversion. */
+
+ break;
+
+ case CURLFORM_CONTENTSLENGTH:
+ lengthx = nargs;
+
+ if (!forms)
+ value = (char *) va_arg(arg, long);
+
+ break;
+
+ case CURLFORM_NAMELENGTH:
+ namelengthx = nargs;
+
+ if (!forms)
+ value = (char *) va_arg(arg, long);
+
+ break;
+
+ case CURLFORM_BUFFERLENGTH:
+ if (!forms)
+ value = (char *) va_arg(arg, long);
+
+ break;
+
+ case CURLFORM_CONTENTHEADER:
+ if (!forms)
+ value = (char *) va_arg(arg, struct curl_slist *);
+
+ break;
+
+ case CURLFORM_STREAM:
+ if (!forms)
+ value = (char *) va_arg(arg, void *);
+
+ break;
+
+ case CURLFORM_CONTENTTYPE:
+ /* If a previous content has been encountered, convert it now. */
+
+ if (Curl_formadd_convert(lforms, contentx, lengthx, contentccsid) < 0) {
+ result = CURL_FORMADD_MEMORY;
+ break;
+ }
+
+ contentx = -1;
+ lengthx = -1;
+ /* Fall into default. */
+
+ default:
+ /* Must be a convertible string. */
+
+ if (!Curl_is_formadd_string(option)) {
+ result = CURL_FORMADD_UNKNOWN_OPTION;
+ break;
+ }
+
+ if (!forms) {
+ value = va_arg(arg, char *);
+ ccsid = (unsigned int) va_arg(arg, long);
+ }
+ else {
+ ccsid = (unsigned int) forms->value;
+ forms++;
+ }
+
+ /* Do the conversion. */
+
+ lforms[nargs].value = value;
+
+ if (Curl_formadd_convert(lforms, nargs, -1, ccsid) < 0) {
+ result = CURL_FORMADD_MEMORY;
+ break;
+ }
+
+ value = lforms[nargs].value;
+ }
+
+ if (result != CURL_FORMADD_OK)
+ break;
+
+ lforms[nargs].value = value;
+ lforms[nargs++].option = option;
+ }
+
+ va_end(arg);
+
+ /* Convert the name and the last content, now that we know their lengths. */
+
+ if (result == CURL_FORMADD_OK && namex >= 0) {
+ if (Curl_formadd_convert(lforms, namex, namelengthx, nameccsid) < 0)
+ result = CURL_FORMADD_MEMORY;
+ else
+ lforms[namex].option = CURLFORM_COPYNAME; /* Force copy. */
+ }
+
+ if (result == CURL_FORMADD_OK) {
+ if (Curl_formadd_convert(lforms, contentx, lengthx, contentccsid) < 0)
+ result = CURL_FORMADD_MEMORY;
+ else
+ contentx = -1;
+ }
+
+ /* Do the formadd with our converted parameters. */
+
+ if (result == CURL_FORMADD_OK) {
+ lforms[nargs].option = CURLFORM_END;
+ result = curl_formadd(httppost, last_post,
+ CURLFORM_ARRAY, lforms, CURLFORM_END);
+ }
+
+ /* Terminate. */
+
+ Curl_formadd_release_local(lforms, nargs, contentx);
+ return result;
+}
+
+
+typedef struct {
+ curl_formget_callback append;
+ void * arg;
+ unsigned int ccsid;
+} cfcdata;
+
+
+static size_t
+Curl_formget_callback_ccsid(void * arg, const char * buf, size_t len)
+
+{
+ cfcdata * p;
+ char * b;
+ int l;
+ size_t ret;
+
+ p = (cfcdata *) arg;
+
+ if ((long) len <= 0)
+ return (*p->append)(p->arg, buf, len);
+
+ b = malloc(MAX_CONV_EXPANSION * len);
+
+ if (!b)
+ return (size_t) -1;
+
+ l = convert(b, MAX_CONV_EXPANSION * len, p->ccsid, buf, len, ASCII_CCSID);
+
+ if (l < 0) {
+ free(b);
+ return (size_t) -1;
+ }
+
+ ret = (*p->append)(p->arg, b, l);
+ free(b);
+ return ret == l? len: -1;
+}
+
+
+int
+curl_formget_ccsid(struct curl_httppost * form, void * arg,
+ curl_formget_callback append, unsigned int ccsid)
+
+{
+ cfcdata lcfc;
+
+ lcfc.append = append;
+ lcfc.arg = arg;
+ lcfc.ccsid = ccsid;
+ return curl_formget(form, (void *) &lcfc, Curl_formget_callback_ccsid);
+}
+
+
+CURLcode
+curl_easy_setopt_ccsid(CURL * curl, CURLoption tag, ...)
+
+{
+ CURLcode result;
+ va_list arg;
+ struct SessionHandle * data;
+ char * s;
+ char * cp;
+ unsigned int ccsid;
+ size_t len;
+ curl_off_t pfsize;
+ static char testwarn = 1;
+
+ /* Warns if this procedure has not been updated when the dupstring enum
+ changes.
+ We (try to) do it only once: there is no need to issue several times
+ the same message; but since threadsafeness is not handled here,
+ this may occur (and we don't care!). */
+
+ if (testwarn) {
+ testwarn = 0;
+
+ if ((int) STRING_LAST != (int) STRING_MAIL_FROM + 1)
+ curl_mfprintf(stderr,
+ "*** WARNING: curl_easy_setopt_ccsid() should be reworked ***\n");
+ }
+
+ data = (struct SessionHandle *) curl;
+ va_start(arg, tag);
+
+ switch (tag) {
+
+ case CURLOPT_CAINFO:
+ case CURLOPT_CAPATH:
+ case CURLOPT_COOKIE:
+ case CURLOPT_COOKIEFILE:
+ case CURLOPT_COOKIEJAR:
+ case CURLOPT_COOKIELIST:
+ case CURLOPT_CUSTOMREQUEST:
+ case CURLOPT_EGDSOCKET:
+ case CURLOPT_ENCODING:
+ case CURLOPT_FTPPORT:
+ case CURLOPT_FTP_ACCOUNT:
+ case CURLOPT_FTP_ALTERNATIVE_TO_USER:
+ case CURLOPT_INTERFACE:
+ case CURLOPT_KEYPASSWD:
+ case CURLOPT_KRBLEVEL:
+ case CURLOPT_NETRC_FILE:
+ case CURLOPT_PROXY:
+ case CURLOPT_PROXYUSERPWD:
+ case CURLOPT_RANDOM_FILE:
+ case CURLOPT_RANGE:
+ case CURLOPT_REFERER:
+ case CURLOPT_SSH_PRIVATE_KEYFILE:
+ case CURLOPT_SSH_PUBLIC_KEYFILE:
+ case CURLOPT_SSLCERT:
+ case CURLOPT_SSLCERTTYPE:
+ case CURLOPT_SSLENGINE:
+ case CURLOPT_SSLKEY:
+ case CURLOPT_SSLKEYTYPE:
+ case CURLOPT_SSL_CIPHER_LIST:
+ case CURLOPT_URL:
+ case CURLOPT_USERAGENT:
+ case CURLOPT_USERPWD:
+ case CURLOPT_SSH_HOST_PUBLIC_KEY_MD5:
+ case CURLOPT_CRLFILE:
+ case CURLOPT_ISSUERCERT:
+ case CURLOPT_USERNAME:
+ case CURLOPT_PASSWORD:
+ case CURLOPT_PROXYUSERNAME:
+ case CURLOPT_PROXYPASSWORD:
+ case CURLOPT_NOPROXY:
+ case CURLOPT_RTSP_SESSION_ID:
+ case CURLOPT_RTSP_STREAM_URI:
+ case CURLOPT_RTSP_TRANSPORT:
+ /* SSH2 not (yet) implemented on OS400. */
+ /* case CURLOPT_SSH_KNOWNHOSTS: */
+ case CURLOPT_SOCKS5_GSSAPI_SERVICE:
+ case CURLOPT_MAIL_FROM:
+ s = va_arg(arg, char *);
+ ccsid = va_arg(arg, unsigned int);
+
+ if (s) {
+ s = dynconvert(ASCII_CCSID, s, -1, ccsid);
+
+ if (!s) {
+ result = CURLE_OUT_OF_MEMORY;
+ break;
+ }
+ }
+
+ result = curl_easy_setopt(curl, tag, s);
+
+ if (s)
+ free(s);
+
+ break;
+
+ case CURLOPT_COPYPOSTFIELDS:
+ /* Special case: byte count may have been given by CURLOPT_POSTFIELDSIZE
+ prior to this call. In this case, convert the given byte count and
+ replace the length according to the conversion result. */
+ s = va_arg(arg, char *);
+ ccsid = va_arg(arg, unsigned int);
+
+ pfsize = data->set.postfieldsize;
+
+ if (!s || !pfsize || ccsid == NOCONV_CCSID || ccsid == ASCII_CCSID) {
+ result = curl_easy_setopt(curl, CURLOPT_COPYPOSTFIELDS, s);
+ break;
+ }
+
+ if (pfsize == -1) {
+ /* Data is null-terminated. */
+ s = dynconvert(ASCII_CCSID, s, -1, ccsid);
+
+ if (!s) {
+ result = CURLE_OUT_OF_MEMORY;
+ break;
+ }
+ }
+ else {
+ /* Data length specified. */
+
+ if (pfsize < 0 || pfsize > SIZE_MAX) {
+ result = CURLE_OUT_OF_MEMORY;
+ break;
+ }
+
+ len = pfsize;
+ pfsize = len * MAX_CONV_EXPANSION;
+
+ if (pfsize > SIZE_MAX)
+ pfsize = SIZE_MAX;
+
+ cp = malloc(pfsize);
+
+ if (!cp) {
+ result = CURLE_OUT_OF_MEMORY;
+ break;
+ }
+
+ pfsize = convert(cp, pfsize, ASCII_CCSID, s, len, ccsid);
+
+ if (pfsize < 0) {
+ free(cp);
+ result = CURLE_OUT_OF_MEMORY;
+ break;
+ }
+
+ data->set.postfieldsize = pfsize; /* Replace data size. */
+ s = cp;
+ }
+
+ result = curl_easy_setopt(curl, CURLOPT_POSTFIELDS, s);
+ data->set.str[STRING_COPYPOSTFIELDS] = s; /* Give to library. */
+ break;
+
+ case CURLOPT_ERRORBUFFER: /* This is an output buffer. */
+ default:
+ result = Curl_setopt(data, tag, arg);
+ break;
+ }
+
+ va_end(arg);
+ return result;
+}
+
+
+char *
+curl_form_long_value(long value)
+
+{
+ /* ILE/RPG cannot cast an integer to a pointer. This procedure does it. */
+
+ return (char *) value;
+}
diff --git a/packages/OS400/ccsidcurl.h b/packages/OS400/ccsidcurl.h
new file mode 100644
index 0000000..96340c9
--- /dev/null
+++ b/packages/OS400/ccsidcurl.h
@@ -0,0 +1,64 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2008, Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at http://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ *
+ ***************************************************************************/
+
+#ifndef __CURL_CCSIDCURL_H
+#define __CURL_CCSIDCURL_H
+
+#include "curl.h"
+#include "easy.h"
+#include "multi.h"
+
+
+CURL_EXTERN char * curl_version_ccsid(unsigned int ccsid);
+CURL_EXTERN char * curl_easy_escape_ccsid(CURL * handle,
+ const char * string, int length,
+ unsigned int sccsid,
+ unsigned int dccsid);
+CURL_EXTERN char * curl_easy_unescape_ccsid(CURL * handle, const char * string,
+ int length, int * outlength,
+ unsigned int sccsid,
+ unsigned int dccsid);
+CURL_EXTERN struct curl_slist * curl_slist_append_ccsid(struct curl_slist * lst,
+ const char * data,
+ unsigned int ccsid);
+CURL_EXTERN time_t curl_getdate_ccsid(const char * p, const time_t * unused,
+ unsigned int ccsid);
+CURL_EXTERN curl_version_info_data * curl_version_info_ccsid(CURLversion stamp,
+ unsigned int csid);
+CURL_EXTERN const char * curl_easy_strerror_ccsid(CURLcode error,
+ unsigned int ccsid);
+CURL_EXTERN const char * curl_share_strerror_ccsid(CURLSHcode error,
+ unsigned int ccsid);
+CURL_EXTERN const char * curl_multi_strerror_ccsid(CURLMcode error,
+ unsigned int ccsid);
+CURL_EXTERN CURLcode curl_easy_getinfo_ccsid(CURL * curl, CURLINFO info, ...);
+CURL_EXTERN CURLFORMcode curl_formadd_ccsid(struct curl_httppost * * httppost,
+ struct curl_httppost * * last_post,
+ ...);
+CURL_EXTERN char * curl_form_long_value(long value);
+CURL_EXTERN int curl_formget_ccsid(struct curl_httppost * form, void * arg,
+ curl_formget_callback append,
+ unsigned int ccsid);
+CURL_EXTERN CURLcode curl_easy_setopt_ccsid(CURL * curl, CURLoption tag, ...);
+
+#endif
diff --git a/packages/OS400/curl.inc.in b/packages/OS400/curl.inc.in
new file mode 100644
index 0000000..b5e46bb
--- /dev/null
+++ b/packages/OS400/curl.inc.in
@@ -0,0 +1,1966 @@
+ **************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at http://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF
+ * ANY KIND, either express or implied.
+ *
+ *
+ **************************************************************************
+ *
+ /if not defined(CURL_CURL_INC_)
+ /define CURL_CURL_INC_
+ *
+ * WARNING: this file should be kept in sync with C include files.
+ *
+ **************************************************************************
+ * Constants
+ **************************************************************************
+ *
+ d LIBCURL_VERSION...
+ d c '@LIBCURL_VERSION@'
+ d LIBCURL_VERSION_MAJOR...
+ d c @LIBCURL_VERSION_MAJOR@
+ d LIBCURL_VERSION_MINOR...
+ d c @LIBCURL_VERSION_MINOR@
+ d LIBCURL_VERSION_PATCH...
+ d c @LIBCURL_VERSION_PATCH@
+ d LIBCURL_VERSION_NUM...
+ d c X'00@LIBCURL_VERSION_NUM@'
+ d LIBCURL_TIMESTAMP...
+ d c '@LIBCURL_TIMESTAMP@'
+ *
+ d CURL_SOCKET_BAD...
+ d c -1
+ d CURL_SOCKET_TIMEOUT...
+ d c -1
+ *
+ /if not defined(CURL_MAX_WRITE_SIZE)
+ /define CURL_MAX_WRITE_SIZE
+ d CURL_MAX_WRITE_SIZE...
+ d c 16384
+ /endif
+ *
+ /if not defined(CURL_MAX_HTTP_HEADER)
+ /define CURL_MAX_HTTP_HEADER
+ d CURL_MAX_HTTP_HEADER...
+ d c 102400
+ /endif
+ *
+ d CURLINFO_STRING...
+ d c X'00100000'
+ d CURLINFO_LONG c X'00200000'
+ d CURLINFO_DOUBLE...
+ d c X'00300000'
+ d CURLINFO_SLIST c X'00400000'
+ d CURLINFO_MASK c X'000FFFFF'
+ d CURLINFO_TYPEMASK...
+ d c X'00F00000'
+ *
+ d CURL_GLOBAL_SSL...
+ d c X'00000001'
+ d CURL_GLOBAL_WIN32...
+ d c X'00000002'
+ d CURL_GLOBAL_ALL...
+ d c X'00000003'
+ d CURL_GLOBAL_NOTHING...
+ d c X'00000000'
+ d CURL_GLOBAL_DEFAULT...
+ d c X'00000003'
+ *
+ d CURL_VERSION_IPV6...
+ d c X'00000001'
+ d CURL_VERSION_KERBEROS4...
+ d c X'00000002'
+ d CURL_VERSION_SSL...
+ d c X'00000004'
+ d CURL_VERSION_LIBZ...
+ d c X'00000008'
+ d CURL_VERSION_NTLM...
+ d c X'00000010'
+ d CURL_VERSION_GSSNEGOTIATE...
+ d c X'00000020'
+ d CURL_VERSION_DEBUG...
+ d c X'00000040'
+ d CURL_VERSION_ASYNCHDNS...
+ d c X'00000080'
+ d CURL_VERSION_SPNEGO...
+ d c X'00000100'
+ d CURL_VERSION_LARGEFILE...
+ d c X'00000200'
+ d CURL_VERSION_IDN...
+ d c X'00000400'
+ d CURL_VERSION_SSPI...
+ d c X'00000800'
+ d CURL_VERSION_CONV...
+ d c X'00001000'
+ d CURL_VERSION_CURLDEBUG...
+ d c X'00002000'
+ *
+ d HTTPPOST_FILENAME...
+ d c X'00000001'
+ d HTTPPOST_READFILE...
+ d c X'00000002'
+ d HTTPPOST_PTRNAME...
+ d c X'00000004'
+ d HTTPPOST_PTRCONTENTS...
+ d c X'00000008'
+ d HTTPPOST_BUFFER...
+ d c X'00000010'
+ d HTTPPOST_PTRBUFFER...
+ d c X'00000020'
+ d HTTPPOST_CALLBACK...
+ d c X'00000040'
+ *
+ d CURL_SEEKFUNC_OK...
+ d c 0
+ d CURL_SEEKFUNC_FAIL...
+ d c 1
+ d CURL_SEEKFUNC_CANTSEEK...
+ d c 2
+ *
+ d CURL_READFUNC_ABORT...
+ d c X'10000000'
+ d CURL_READFUNC_PAUSE...
+ d c X'10000001'
+ *
+ d CURL_WRITEFUNC_PAUSE...
+ d c X'10000001'
+ *
+ d CURLAUTH_NONE c X'00000000'
+ d CURLAUTH_BASIC c X'00000001'
+ d CURLAUTH_DIGEST...
+ d c X'00000002'
+ d CURLAUTH_GSSNEGOTIATE...
+ d c X'00000004'
+ d CURLAUTH_NTLM c X'00000008'
+ d CURLAUTH_DIGEST_IE...
+ d c X'00000010'
+ d CURLAUTH_ANY c X'7FFFFFEF'
+ d CURLAUTH_ANYSAFE...
+ d c X'7FFFFFEE'
+ *
+ d CURLSSH_AUTH_ANY...
+ d c X'7FFFFFFF'
+ d CURLSSH_AUTH_NONE...
+ d c X'00000000'
+ d CURLSSH_AUTH_PUBLICKEY...
+ d c X'00000001'
+ d CURLSSH_AUTH_PASSWORD...
+ d c X'00000002'
+ d CURLSSH_AUTH_HOST...
+ d c X'00000004'
+ d CURLSSH_AUTH_KEYBOARD...
+ d c X'00000008'
+ d CURLSSH_AUTH_DEFAULT...
+ d c X'7FFFFFFF' CURLSSH_AUTH_ANY
+ *
+ d CURL_ERROR_SIZE...
+ d c 256
+ *
+ d CURLOPTTYPE_LONG...
+ d c 0
+ d CURLOPTTYPE_OBJECTPOINT...
+ d c 10000
+ d CURLOPTTYPE_FUNCTIONPOINT...
+ d c 20000
+ d CURLOPTTYPE_OFF_T...
+ d c 30000
+ *
+ d CURL_IPRESOLVE_WHATEVER...
+ d c 0
+ d CURL_IPRESOLVE_V4...
+ d c 1
+ d CURL_IPRESOLVE_V6...
+ d c 2
+ *
+ d CURL_HTTP_VERSION_NONE...
+ d c 0
+ d CURL_HTTP_VERSION_1_0...
+ d c 1
+ d CURL_HTTP_VERSION_1_1...
+ d c 2
+ *
+ d CURL_NETRC_IGNORED...
+ d c 0
+ d CURL_NETRC_OPTIONAL...
+ d c 1
+ d CURL_NETRC_REQUIRED...
+ d c 2
+ *
+ d CURL_SSLVERSION_DEFAULT...
+ d c 0
+ d CURL_SSLVERSION_TLSv1...
+ d c 1
+ d CURL_SSLVERSION_SSLv2...
+ d c 2
+ d CURL_SSLVERSION_SSLv3...
+ d c 3
+ *
+ d CURL_REDIR_GET_ALL...
+ d c 0
+ d CURL_REDIR_POST_301...
+ d c 1
+ d CURL_REDIR_POST_302...
+ d c 2
+ d CURL_REDIR_POST_ALL...
+ d c 3
+ *
+ d CURL_POLL_NONE c 0
+ d CURL_POLL_IN c 1
+ d CURL_POLL_OUT c 2
+ d CURL_POLL_INOUT...
+ d c 3
+ d CURL_POLL_REMOVE...
+ d c 4
+ *
+ d CURL_CSELECT_IN...
+ d c X'00000001'
+ d CURL_CSELECT_OUT...
+ d c X'00000002'
+ d CURL_CSELECT_ERR...
+ d c X'00000004'
+ *
+ d CURLPAUSE_RECV c X'00000001'
+ d CURLPAUSE_RECV_CONT...
+ d c X'00000000'
+ d CURLPAUSE_SEND c X'00000004'
+ d CURLPAUSE_SEND_CONT...
+ d c X'00000000'
+ d CURLPAUSE_ALL c X'00000005'
+ d CURLPAUSE_CONT c X'00000000'
+ *
+ d CURLINFOFLAG_KNOWN_FILENAME...
+ d c X'00000001'
+ d CURLINFOFLAG_KNOWN_FILETYPE...
+ d c X'00000002'
+ d CURLINFOFLAG_KNOWN_TIME...
+ d c X'00000004'
+ d CURLINFOFLAG_KNOWN_PERM...
+ d c X'00000008'
+ d CURLINFOFLAG_KNOWN_UID...
+ d c X'00000010'
+ d CURLINFOFLAG_KNOWN_GID...
+ d c X'00000020'
+ d CURLINFOFLAG_KNOWN_SIZE...
+ d c X'00000040'
+ d CURLINFOFLAG_KNOWN_HLINKCOUNT...
+ d c X'00000080'
+ *
+ d CURL_CHUNK_BGN_FUNC_OK...
+ d c 0
+ d CURL_CHUNK_BGN_FUNC_FAIL...
+ d c 1
+ d CURL_CHUNK_BGN_FUNC_SKIP...
+ d c 2
+ *
+ d CURL_CHUNK_END_FUNC_OK...
+ d c 0
+ d CURL_CHUNK_END_FUNC_FAIL...
+ d c 1
+ *
+ d CURL_FNMATCHFUNC_MATCH...
+ d c 0
+ d CURL_FNMATCHFUNC_NOMATCH...
+ d c 1
+ d CURL_FNMATCHFUNC_FAIL...
+ d c 2
+ *
+ **************************************************************************
+ * Types
+ **************************************************************************
+ *
+ d curl_socket_t s 10i 0 based(######ptr######)
+ *
+ d curl_off_t s 20i 0 based(######ptr######)
+ *
+ d CURLcode s 10i 0 based(######ptr######) Enum
+ d CURLE_OK c 0
+ d CURLE_UNSUPPORTED_PROTOCOL...
+ d c 1
+ d CURLE_FAILED_INIT...
+ d c 2
+ d CURLE_URL_MALFORMAT...
+ d c 3
+ d CURLE_OBSOLETE4...
+ d c 4
+ d CURLE_COULDNT_RESOLVE_PROXY...
+ d c 5
+ d CURLE_COULDNT_RESOLVE_HOST...
+ d c 6
+ d CURLE_COULDNT_CONNECT...
+ d c 7
+ d CURLE_FTP_WEIRD_SERVER_REPLY...
+ d c 8
+ d CURLE_REMOTE_ACCESS_DENIED...
+ d c 9
+ d CURLE_OBSOLETE10...
+ d c 10
+ d CURLE_FTP_WEIRD_PASS_REPLY...
+ d c 11
+ d CURLE_OBSOLETE12...
+ d c 12
+ d CURLE_FTP_WEIRD_PASV_REPLY...
+ d c 13
+ d CURLE_FTP_WEIRD_227_FORMAT...
+ d c 14
+ d CURLE_FTP_CANT_GET_HOST...
+ d c 15
+ d CURLE_OBSOLETE16...
+ d c 16
+ d CURLE_FTP_COULDNT_SET_TYPE...
+ d c 17
+ d CURLE_PARTIAL_FILE...
+ d c 18
+ d CURLE_FTP_COULDNT_RETR_FILE...
+ d c 19
+ d CURLE_OBSOLETE20...
+ d c 20
+ d CURLE_QUOTE_ERROR...
+ d c 21
+ d CURLE_HTTP_RETURNED_ERROR...
+ d c 22
+ d CURLE_WRITE_ERROR...
+ d c 23
+ d CURLE_OBSOLETE24...
+ d c 24
+ d CURLE_UPLOAD_FAILED...
+ d c 25
+ d CURLE_READ_ERROR...
+ d c 26
+ d CURLE_OUT_OF_MEMORY...
+ d c 27
+ d CURLE_OPERATION_TIMEDOUT...
+ d c 28
+ d CURLE_OBSOLETE29...
+ d c 29
+ d CURLE_FTP_PORT_FAILED...
+ d c 30
+ d CURLE_FTP_COULDNT_USE_REST...
+ d c 31
+ d CURLE_OBSOLETE32...
+ d c 32
+ d CURLE_RANGE_ERROR...
+ d c 33
+ d CURLE_HTTP_POST_ERROR...
+ d c 34
+ d CURLE_SSL_CONNECT_ERROR...
+ d c 35
+ d CURLE_BAD_DOWNLOAD_RESUME...
+ d c 36
+ d CURLE_FILE_COULDNT_READ_FILE...
+ d c 37
+ d CURLE_LDAP_CANNOT_BIND...
+ d c 38
+ d CURLE_LDAP_SEARCH_FAILED...
+ d c 39
+ d CURLE_OBSOLETE40...
+ d c 40
+ d CURLE_FUNCTION_NOT_FOUND...
+ d c 41
+ d CURLE_ABORTED_BY_CALLBACK...
+ d c 42
+ d CURLE_BAD_FUNCTION_ARGUMENT...
+ d c 43
+ d CURLE_OBSOLETE44...
+ d c 44
+ d CURLE_INTERFACE_FAILED...
+ d c 45
+ d CURLE_OBSOLETE46...
+ d c 46
+ d CURLE_TOO_MANY_REDIRECTS...
+ d c 47
+ d CURLE_UNKNOWN_TELNET_OPTION...
+ d c 48
+ d CURLE_TELNET_OPTION_SYNTAX...
+ d c 49
+ d CURLE_OBSOLETE50...
+ d c 50
+ d CURLE_PEER_FAILED_VERIFICATION...
+ d c 51
+ d CURLE_GOT_NOTHING...
+ d c 52
+ d CURLE_SSL_ENGINE_NOTFOUND...
+ d c 53
+ d CURLE_SSL_ENGINE_SETFAILED...
+ d c 54
+ d CURLE_SEND_ERROR...
+ d c 55
+ d CURLE_RECV_ERROR...
+ d c 56
+ d CURLE_OBSOLETE57...
+ d c 57
+ d CURLE_SSL_CERTPROBLEM...
+ d c 58
+ d CURLE_SSL_CIPHER...
+ d c 59
+ d CURLE_SSL_CACERT...
+ d c 60
+ d CURLE_BAD_CONTENT_ENCODING...
+ d c 61
+ d CURLE_LDAP_INVALID_URL...
+ d c 62
+ d CURLE_FILESIZE_EXCEEDED...
+ d c 63
+ d CURLE_USE_SSL_FAILED...
+ d c 64
+ d CURLE_SEND_FAIL_REWIND...
+ d c 65
+ d CURLE_SSL_ENGINE_INITFAILED...
+ d c 66
+ d CURLE_LOGIN_DENIED...
+ d c 67
+ d CURLE_TFTP_NOTFOUND...
+ d c 68
+ d CURLE_TFTP_PERM...
+ d c 69
+ d CURLE_REMOTE_DISK_FULL...
+ d c 70
+ d CURLE_TFTP_ILLEGAL...
+ d c 71
+ d CURLE_TFTP_UNKNOWNID...
+ d c 72
+ d CURLE_REMOTE_FILE_EXISTS...
+ d c 73
+ d CURLE_TFTP_NOSUCHUSER...
+ d c 74
+ d CURLE_CONV_FAILED...
+ d c 75
+ d CURLE_CONV_REQD...
+ d c 76
+ d CURLE_SSL_CACERT_BADFILE...
+ d c 77
+ d CURLE_REMOTE_FILE_NOT_FOUND...
+ d c 78
+ d CURLE_SSH...
+ d c 79
+ d CURLE_SSL_SHUTDOWN_FAILED...
+ d c 80
+ d CURLE_AGAIN...
+ d c 81
+ d CURLE_SSL_CRL_BADFILE...
+ d c 82
+ d CURLE_SSL_ISSUER_ERROR...
+ d c 83
+ d CURLE_FTP_PRET_FAILED...
+ d c 84
+ d CURLE_RTSP_CSEQ_ERROR...
+ d c 85
+ d CURLE_RTSP_SESSION_ERROR...
+ d c 86
+ d CURLE_FTP_BAD_FILE_LIST...
+ d c 87
+ d CURLE_CHUNK_FAILED...
+ d c 88
+ *
+ d curlioerr s 10i 0 based(######ptr######) Enum
+ d CURLIOE_OK c 0
+ d CURLIOE_UNKNOWNCMD...
+ d c 1
+ d CURLIOE_FAILRESTART...
+ d c 2
+ *
+ d curlfiletype s 10i 0 based(######ptr######) Enum
+ d CURLFILETYPE_FILE...
+ d c 0
+ d CURLFILETYPE_DIRECTORY...
+ d c 1
+ d CURLFILETYPE_SYMLINK...
+ d c 2
+ d CURLFILETYPE_DEVICE_BLOCK...
+ d c 3
+ d CURLFILETYPE_DEVICE_CHAR...
+ d c 4
+ d CURLFILETYPE_NAMEDPIPE...
+ d c 5
+ d CURLFILETYPE_SOCKET...
+ d c 6
+ d CURLFILETYPE_DOOR...
+ d c 7
+ *
+ d curliocmd s 10i 0 based(######ptr######) Enum
+ d CURLIOCMD_NOP c 0
+ d CURLIOCMD_RESTARTREAD...
+ d c 1
+ *
+ d curl_infotype s 10i 0 based(######ptr######) Enum
+ d CURLINFO_TEXT...
+ d c 0
+ d CURLINFO_HEADER_IN...
+ d c 1
+ d CURLINFO_HEADER_OUT...
+ d c 2
+ d CURLINFO_DATA_IN...
+ d c 3
+ d CURLINFO_DATA_OUT...
+ d c 4
+ d CURLINFO_SSL_DATA_IN...
+ d c 5
+ d CURLINFO_SSL_DATA_OUT...
+ d c 6
+ d CURLINFO_END...
+ d c 7
+ *
+ d curl_proxytype s 10i 0 based(######ptr######) Enum
+ d CURLPROXY_HTTP...
+ d c 0
+ d CURLPROXY_HTTP_1_0...
+ d c 1
+ d CURLPROXY_SOCKS4...
+ d c 4
+ d CURLPROXY_SOCKS5...
+ d c 5
+ d CURLPROXY_SOCKS4A...
+ d c 6
+ d CURLPROXY_SOCKS5_HOSTNAME...
+ d c 7
+ *
+ d curl_khstat s 10i 0 based(######ptr######) Enum
+ d CURLKHSTAT_FINE_ADD_TO_FILE...
+ d c 0
+ d CURLKHSTAT_FINE...
+ d c 1
+ d CURLKHSTAT_REJECT...
+ d c 2
+ d CURLKHSTAT_DEFER...
+ d c 3
+ d CURLKHSTAT_LAST...
+ d c 4
+ *
+ d curl_khmatch s 10i 0 based(######ptr######) Enum
+ d CURLKHMATCH_OK...
+ d c 0
+ d CURLKHMATCH_MISMATCH...
+ d c 1
+ d CURLKHMATCH_MISSING...
+ d c 2
+ d CURLKHMATCH_LAST...
+ d c 3
+ *
+ d curl_usessl s 10i 0 based(######ptr######) Enum
+ d CURLUSESSL_NONE...
+ d c 0
+ d CURLUSESSL_TRY...
+ d c 1
+ d CURLUSESSL_CONTROL...
+ d c 2
+ d CURLUSESSL_ALL...
+ d c 3
+ *
+ d curl_ftpccc s 10i 0 based(######ptr######) Enum
+ d CURLFTPSSL_CCC_NONE...
+ d c 0
+ d CURLFTPSSL_CCC_PASSIVE...
+ d c 1
+ d CURLFTPSSL_CCC_ACTIVE...
+ d c 2
+ *
+ d curl_ftpauth s 10i 0 based(######ptr######) Enum
+ d CURLFTPAUTH_DEFAULT...
+ d c 0
+ d CURLFTPAUTH_SSL...
+ d c 1
+ d CURLFTPAUTH_TLS...
+ d c 2
+ *
+ d curl_ftpcreatedir...
+ d s 10i 0 based(######ptr######) Enum
+ d CURLFTP_CREATE_DIR_NONE...
+ d c 0
+ d CURLFTP_CREATE_DIR...
+ d c 1
+ d CURLFTP_CREATE_DIR_RETRY...
+ d c 2
+ *
+ d curl_ftpmethod s 10i 0 based(######ptr######) Enum
+ d CURLFTPMETHOD_DEFAULT...
+ d c 0
+ d CURLFTPMETHOD_MULTICWD...
+ d c 1
+ d CURLFTPMETHOD_NOCWD...
+ d c 2
+ d CURLFTPMETHOD_SINGLECWD...
+ d c 3
+ *
+ d CURLPROTO_HTTP...
+ d c X'00000001'
+ d CURLPROTO_HTTPS...
+ d c X'00000002'
+ d CURLPROTO_FTP...
+ d c X'00000004'
+ d CURLPROTO_FTPS...
+ d c X'00000008'
+ d CURLPROTO_SCP...
+ d c X'00000010'
+ d CURLPROTO_SFTP...
+ d c X'00000020'
+ d CURLPROTO_TELNET...
+ d c X'00000040'
+ d CURLPROTO_LDAP...
+ d c X'00000080'
+ d CURLPROTO_LDAPS...
+ d c X'00000100'
+ d CURLPROTO_DICT...
+ d c X'00000200'
+ d CURLPROTO_FILE...
+ d c X'00000400'
+ d CURLPROTO_TFTP...
+ d c X'00000800'
+ d CURLPROTO_IMAP...
+ d c X'00001000'
+ d CURLPROTO_IMAPS...
+ d c X'00002000'
+ d CURLPROTO_POP3...
+ d c X'00004000'
+ d CURLPROTO_POP3S...
+ d c X'00008000'
+ d CURLPROTO_SMTP...
+ d c X'00010000'
+ d CURLPROTO_SMTPS...
+ d c X'00020000'
+ d CURLPROTO_RTSP...
+ d c X'00040000'
+ d CURLPROTO_RTMP...
+ d c X'00080000'
+ d CURLPROTO_RTMPT...
+ d c X'00100000'
+ d CURLPROTO_RTMPTE...
+ d c X'00200000'
+ d CURLPROTO_RTMPE...
+ d c X'00400000'
+ d CURLPROTO_RTMPS...
+ d c X'00800000'
+ d CURLPROTO_RTMPTS...
+ d c X'01000000'
+ d CURLPROTO_GOPHER...
+ d c X'02000000'
+ *
+ d CURLoption s 10i 0 based(######ptr######) Enum
+ d CURLOPT_FILE c 10001
+ d CURLOPT_WRITEDATA...
+ d c 10001
+ d CURLOPT_URL c 10002
+ d CURLOPT_PORT c 00003
+ d CURLOPT_PROXY c 10004
+ d CURLOPT_USERPWD...
+ d c 10005
+ d CURLOPT_PROXYUSERPWD...
+ d c 10006
+ d CURLOPT_RANGE c 10007
+ d CURLOPT_INFILE...
+ d c 10009
+ d CURLOPT_READDATA...
+ d c 10009
+ d CURLOPT_ERRORBUFFER...
+ d c 10010
+ d CURLOPT_WRITEFUNCTION...
+ d c 20011
+ d CURLOPT_READFUNCTION...
+ d c 20012
+ d CURLOPT_TIMEOUT...
+ d c 00013
+ d CURLOPT_INFILESIZE...
+ d c 00014
+ d CURLOPT_POSTFIELDS...
+ d c 10015
+ d CURLOPT_REFERER...
+ d c 10016
+ d CURLOPT_FTPPORT...
+ d c 10017
+ d CURLOPT_USERAGENT...
+ d c 10018
+ d CURLOPT_LOW_SPEED_LIMIT...
+ d c 00019
+ d CURLOPT_LOW_SPEED_TIME...
+ d c 00020
+ d CURLOPT_RESUME_FROM...
+ d c 00021
+ d CURLOPT_COOKIE...
+ d c 10022
+ d CURLOPT_HTTPHEADER...
+ d c 10023
+ d CURLOPT_RTSPHEADER...
+ d c 10023
+ d CURLOPT_HTTPPOST...
+ d c 10024
+ d CURLOPT_SSLCERT...
+ d c 10025
+ d CURLOPT_SSLCERTPASSWD...
+ d c 10026
+ d CURLOPT_KEYPASSWD...
+ d c 10026
+ d CURLOPT_CRLF c 00027
+ d CURLOPT_QUOTE c 10028
+ d CURLOPT_WRITEHEADER...
+ d c 10029
+ d CURLOPT_HEADERDATA...
+ d c 10029
+ d CURLOPT_COOKIEFILE...
+ d c 10031
+ d CURLOPT_SSLVERSION...
+ d c 00032
+ d CURLOPT_TIMECONDITION...
+ d c 00033
+ d CURLOPT_TIMEVALUE...
+ d c 00034
+ d CURLOPT_CUSTOMREQUEST...
+ d c 10036
+ d CURLOPT_STDERR...
+ d c 10037
+ d CURLOPT_POSTQUOTE...
+ d c 10039
+ d CURLOPT_WRITEINFO...
+ d c 10040
+ d CURLOPT_VERBOSE...
+ d c 00041
+ d CURLOPT_HEADER...
+ d c 00042
+ d CURLOPT_NOPROGRESS...
+ d c 00043
+ d CURLOPT_NOBODY...
+ d c 00044
+ d CURLOPT_FAILONERROR...
+ d c 00045
+ d CURLOPT_UPLOAD...
+ d c 00046
+ d CURLOPT_POST c 00047
+ d CURLOPT_DIRLISTONLY...
+ d c 00048
+ d CURLOPT_APPEND...
+ d c 00050
+ d CURLOPT_NETRC c 00051
+ d CURLOPT_FOLLOWLOCATION...
+ d c 00052
+ d CURLOPT_TRANSFERTEXT...
+ d c 00053
+ d CURLOPT_PUT c 00054
+ d CURLOPT_PROGRESSFUNCTION...
+ d c 20056
+ d CURLOPT_PROGRESSDATA...
+ d c 10057
+ d CURLOPT_AUTOREFERER...
+ d c 00058
+ d CURLOPT_PROXYPORT...
+ d c 00059
+ d CURLOPT_POSTFIELDSIZE...
+ d c 00060
+ d CURLOPT_HTTPPROXYTUNNEL...
+ d c 00061
+ d CURLOPT_INTERFACE...
+ d c 10062
+ d CURLOPT_KRBLEVEL...
+ d c 10063
+ d CURLOPT_SSL_VERIFYPEER...
+ d c 00064
+ d CURLOPT_CAINFO...
+ d c 10065
+ d CURLOPT_MAXREDIRS...
+ d c 00068
+ d CURLOPT_FILETIME...
+ d c 00069
+ d CURLOPT_TELNETOPTIONS...
+ d c 10070
+ d CURLOPT_MAXCONNECTS...
+ d c 00071
+ d CURLOPT_CLOSEPOLICY...
+ d c 00072
+ d CURLOPT_FRESH_CONNECT...
+ d c 00074
+ d CURLOPT_FORBID_REUSE...
+ d c 00075
+ d CURLOPT_RANDOM_FILE...
+ d c 10076
+ d CURLOPT_EGDSOCKET...
+ d c 10077
+ d CURLOPT_CONNECTTIMEOUT...
+ d c 00078
+ d CURLOPT_HEADERFUNCTION...
+ d c 20079
+ d CURLOPT_HTTPGET...
+ d c 00080
+ d CURLOPT_SSL_VERIFYHOST...
+ d c 00081
+ d CURLOPT_COOKIEJAR...
+ d c 10082
+ d CURLOPT_SSL_CIPHER_LIST...
+ d c 10083
+ d CURLOPT_HTTP_VERSION...
+ d c 00084
+ d CURLOPT_FTP_USE_EPSV...
+ d c 00085
+ d CURLOPT_SSLCERTTYPE...
+ d c 10086
+ d CURLOPT_SSLKEY...
+ d c 10087
+ d CURLOPT_SSLKEYTYPE...
+ d c 10088
+ d CURLOPT_SSLENGINE...
+ d c 10089
+ d CURLOPT_SSLENGINE_DEFAULT...
+ d c 00090
+ d CURLOPT_DNS_USE_GLOBAL_CACHE...
+ d c 00091
+ d CURLOPT_DNS_CACHE_TIMEOUT...
+ d c 00092
+ d CURLOPT_PREQUOTE...
+ d c 10093
+ d CURLOPT_DEBUGFUNCTION...
+ d c 20094
+ d CURLOPT_DEBUGDATA...
+ d c 10095
+ d CURLOPT_COOKIESESSION...
+ d c 00096
+ d CURLOPT_CAPATH...
+ d c 10097
+ d CURLOPT_BUFFERSIZE...
+ d c 00098
+ d CURLOPT_NOSIGNAL...
+ d c 00099
+ d CURLOPT_SHARE c 10100
+ d CURLOPT_PROXYTYPE...
+ d c 00101
+ d CURLOPT_ENCODING...
+ d c 10102
+ d CURLOPT_PRIVATE...
+ d c 10103
+ d CURLOPT_HTTP200ALIASES...
+ d c 10104
+ d CURLOPT_UNRESTRICTED_AUTH...
+ d c 00105
+ d CURLOPT_FTP_USE_EPRT...
+ d c 00106
+ d CURLOPT_HTTPAUTH...
+ d c 00107
+ d CURLOPT_SSL_CTX_FUNCTION...
+ d c 20108
+ d CURLOPT_SSL_CTX_DATA...
+ d c 10109
+ d CURLOPT_FTP_CREATE_MISSING_DIRS...
+ d c 00110
+ d CURLOPT_PROXYAUTH...
+ d c 00111
+ d CURLOPT_FTP_RESPONSE_TIMEOUT...
+ d c 00112
+ d CURLOPT_IPRESOLVE...
+ d c 00113
+ d CURLOPT_MAXFILESIZE...
+ d c 00114
+ d CURLOPT_INFILESIZE_LARGE...
+ d c 30115
+ d CURLOPT_RESUME_FROM_LARGE...
+ d c 30116
+ d CURLOPT_MAXFILESIZE_LARGE...
+ d c 30117
+ d CURLOPT_NETRC_FILE...
+ d c 10118
+ d CURLOPT_USE_SSL...
+ d c 00119
+ d CURLOPT_POSTFIELDSIZE_LARGE...
+ d c 30120
+ d CURLOPT_TCP_NODELAY...
+ d c 00121
+ d CURLOPT_FTPSSLAUTH...
+ d c 00129
+ d CURLOPT_IOCTLFUNCTION...
+ d c 20130
+ d CURLOPT_IOCTLDATA...
+ d c 10131
+ d CURLOPT_FTP_ACCOUNT...
+ d c 10134
+ d CURLOPT_COOKIELIST...
+ d c 10135
+ d CURLOPT_IGNORE_CONTENT_LENGTH...
+ d c 00136
+ d CURLOPT_FTP_SKIP_PASV_IP...
+ d c 00137
+ d CURLOPT_FTP_FILEMETHOD...
+ d c 00138
+ d CURLOPT_LOCALPORT...
+ d c 00139
+ d CURLOPT_LOCALPORTRANGE...
+ d c 00140
+ d CURLOPT_CONNECT_ONLY...
+ d c 00141
+ d CURLOPT_CONV_FROM_NETWORK_FUNCTION...
+ d c 20142
+ d CURLOPT_CONV_TO_NETWORK_FUNCTION...
+ d c 20143
+ d CURLOPT_CONV_FROM_UTF8_FUNCTION...
+ d c 20144
+ d CURLOPT_MAX_SEND_SPEED_LARGE...
+ d c 30145
+ d CURLOPT_MAX_RECV_SPEED_LARGE...
+ d c 30146
+ d CURLOPT_FTP_ALTERNATIVE_TO_USER...
+ d c 10147
+ d CURLOPT_SOCKOPTFUNCTION...
+ d c 20148
+ d CURLOPT_SOCKOPTDATA...
+ d c 10149
+ d CURLOPT_SSL_SESSIONID_CACHE...
+ d c 00150
+ d CURLOPT_SSH_AUTH_TYPES...
+ d c 00151
+ d CURLOPT_SSH_PUBLIC_KEYFILE...
+ d c 10152
+ d CURLOPT_SSH_PRIVATE_KEYFILE...
+ d c 10153
+ d CURLOPT_FTP_SSL_CCC...
+ d c 00154
+ d CURLOPT_TIMEOUT_MS...
+ d c 00155
+ d CURLOPT_CONNECTTIMEOUT_MS...
+ d c 00156
+ d CURLOPT_HTTP_TRANSFER_DECODING...
+ d c 00157
+ d CURLOPT_HTTP_CONTENT_DECODING...
+ d c 00158
+ d CURLOPT_NEW_FILE_PERMS...
+ d c 00159
+ d CURLOPT_NEW_DIRECTORY_PERMS...
+ d c 00160
+ d CURLOPT_POSTREDIR...
+ d c 00161
+ d CURLOPT_SSH_HOST_PUBLIC_KEY_MD5...
+ d c 10162
+ d CURLOPT_OPENSOCKETFUNCTION...
+ d c 20163
+ d CURLOPT_OPENSOCKETDATA...
+ d c 10164
+ d CURLOPT_COPYPOSTFIELDS...
+ d c 10165
+ d CURLOPT_PROXY_TRANSFER_MODE...
+ d c 00166
+ d CURLOPT_SEEKFUNCTION...
+ d c 20167
+ d CURLOPT_SEEKDATA...
+ d c 10168
+ d CURLOPT_CRLFILE...
+ d c 10169
+ d CURLOPT_ISSUERCERT...
+ d c 10170
+ d CURLOPT_ADDRESS_SCOPE...
+ d c 00171
+ d CURLOPT_CERTINFO...
+ d c 00172
+ d CURLOPT_USERNAME...
+ d c 10173
+ d CURLOPT_PASSWORD...
+ d c 10174
+ d CURLOPT_PROXYUSERNAME...
+ d c 10175
+ d CURLOPT_PROXYPASSWORD...
+ d c 10176
+ d CURLOPT_NOPROXY...
+ d c 10177
+ d CURLOPT_TFTP_BLKSIZE...
+ d c 00178
+ d CURLOPT_SOCKS5_GSSAPI_SERVICE...
+ d c 10179
+ d CURLOPT_SOCKS5_GSSAPI_NEC...
+ d c 00180
+ d CURLOPT_PROTOCOLS...
+ d c 00181
+ d CURLOPT_REDIR_PROTOCOLS...
+ d c 00182
+ d CURLOPT_SSH_KNOWNHOSTS...
+ d c 10183
+ d CURLOPT_SSH_KEYFUNCTION...
+ d c 20184
+ d CURLOPT_SSH_KEYDATA...
+ d c 10185
+ d CURLOPT_MAIL_FROM...
+ d c 10186
+ d CURLOPT_MAIL_RCPT...
+ d c 10187
+ d CURLOPT_FTP_USE_PRET...
+ d c 00188
+ d CURLOPT_RTSP_REQUEST...
+ d c 00189
+ d CURLOPT_RTSP_SESSION_ID...
+ d c 10190
+ d CURLOPT_RTSP_STREAM_URI...
+ d c 10191
+ d CURLOPT_RTSP_TRANSPORT...
+ d c 10192
+ d CURLOPT_RTSP_CLIENT_CSEQ...
+ d c 00193
+ d CURLOPT_RTSP_SERVER_CSEQ...
+ d c 00194
+ d CURLOPT_INTERLEAVEDATA...
+ d c 10195
+ d CURLOPT_INTERLEAVEFUNCTION...
+ d c 20196
+ d CURLOPT_WILDCARDMATCH...
+ d c 00197
+ d CURLOPT_CHUNK_BGN_FUNCTION...
+ d c 20198
+ d CURLOPT_CHUNK_END_FUNCTION...
+ d c 20199
+ d CURLOPT_FNMATCH_FUNCTION...
+ d c 20200
+ d CURLOPT_CHUNK_DATA...
+ d c 10201
+ d CURLOPT_FNMATCH_DATA...
+ d c 10202
+ *
+ d CURLOPT_SERVER_RESPONSE_TIMEOUT...
+ d c 00112
+ d CURLOPT_POST301...
+ d c 00161 Obsolescent
+ *
+ d CURLFORMcode s 10i 0 based(######ptr######) Enum
+ d CURL_FORMADD_OK...
+ d c 0
+ d CURL_FORMADD_MEMORY...
+ d c 1
+ d CURL_FORMADD_OPTION_TWICE...
+ d c 2
+ d CURL_FORMADD_NULL...
+ d c 3
+ d CURL_FORMADD_UNKNOWN_OPTION...
+ d c 4
+ d CURL_FORMADD_INCOMPLETE...
+ d c 5
+ d CURL_FORMADD_ILLEGAL_ARRAY...
+ d c 6
+ d CURL_FORMADD_DISABLED...
+ d c 7
+ *
+ d CURLformoption s 10i 0 based(######ptr######) Enum
+ d CURLFORM_NOTHING...
+ d c 0
+ d CURLFORM_COPYNAME...
+ d c 1
+ d CURLFORM_PTRNAME...
+ d c 2
+ d CURLFORM_NAMELENGTH...
+ d c 3
+ d CURLFORM_COPYCONTENTS...
+ d c 4
+ d CURLFORM_PTRCONTENTS...
+ d c 5
+ d CURLFORM_CONTENTSLENGTH...
+ d c 6
+ d CURLFORM_FILECONTENT...
+ d c 7
+ d CURLFORM_ARRAY...
+ d c 8
+ d CURLFORM_OBSOLETE...
+ d c 9
+ d CURLFORM_FILE...
+ d c 10
+ d CURLFORM_BUFFER...
+ d c 11
+ d CURLFORM_BUFFERPTR...
+ d c 12
+ d CURLFORM_BUFFERLENGTH...
+ d c 13
+ d CURLFORM_CONTENTTYPE...
+ d c 14
+ d CURLFORM_CONTENTHEADER...
+ d c 15
+ d CURLFORM_FILENAME...
+ d c 16
+ d CURLFORM_END...
+ d c 17
+ d CURLFORM_OBSOLETE2...
+ d c 18
+ d CURLFORM_STREAM...
+ d c 19
+ *
+ d CURLINFO s 10i 0 based(######ptr######) Enum
+ d CURLINFO_EFFECTIVE_URL... CURLINFO_STRING + 1
+ d c X'00100001'
+ d CURLINFO_RESPONSE_CODE... CURLINFO_LONG + 2
+ d c X'00200002'
+ d CURLINFO_TOTAL_TIME... CURLINFO_DOUBLE + 3
+ d c X'00300003'
+ d CURLINFO_NAMELOOKUP_TIME... CURLINFO_DOUBLE + 4
+ d c X'00300004'
+ d CURLINFO_CONNECT_TIME... CURLINFO_DOUBLE + 5
+ d c X'00300005'
+ d CURLINFO_PRETRANSFER_TIME... CURLINFO_DOUBLE + 6
+ d c X'00300006'
+ d CURLINFO_SIZE_UPLOAD... CURLINFO_DOUBLE + 7
+ d c X'00300007'
+ d CURLINFO_SIZE_DOWNLOAD... CURLINFO_DOUBLE + 8
+ d c X'00300008'
+ d CURLINFO_SPEED_DOWNLOAD... CURLINFO_DOUBLE + 9
+ d c X'00300009'
+ d CURLINFO_SPEED_UPLOAD... CURLINFO_DOUBLE + 10
+ d c X'0030000A'
+ d CURLINFO_HEADER_SIZE... CURLINFO_LONG + 11
+ d c X'0020000B'
+ d CURLINFO_REQUEST_SIZE... CURLINFO_LONG + 12
+ d c X'0020000C'
+ d CURLINFO_SSL_VERIFYRESULT... CURLINFO_LONG + 13
+ d c X'0020000D'
+ d CURLINFO_FILETIME... CURLINFO_LONG + 14
+ d c X'0020000E'
+ d CURLINFO_CONTENT_LENGTH_DOWNLOAD... CURLINFO_DOUBLE + 15
+ d c X'0030000F'
+ d CURLINFO_CONTENT_LENGTH_UPLOAD... CURLINFO_DOUBLE + 16
+ d c X'00300010'
+ d CURLINFO_STARTTRANSFER_TIME... CURLINFO_DOUBLE + 17
+ d c X'00300011'
+ d CURLINFO_CONTENT_TYPE... CURLINFO_STRING + 18
+ d c X'00100012'
+ d CURLINFO_REDIRECT_TIME... CURLINFO_DOUBLE + 19
+ d c X'00300013'
+ d CURLINFO_REDIRECT_COUNT... CURLINFO_LONG + 20
+ d c X'00200014'
+ d CURLINFO_PRIVATE... CURLINFO_STRING + 21
+ d c X'00100015'
+ d CURLINFO_HTTP_CONNECTCODE... CURLINFO_LONG + 22
+ d c X'00200016'
+ d CURLINFO_HTTPAUTH_AVAIL... CURLINFO_LONG + 23
+ d c X'00200017'
+ d CURLINFO_PROXYAUTH_AVAIL... CURLINFO_LONG + 24
+ d c X'00200018'
+ d CURLINFO_OS_ERRNO... CURLINFO_LONG + 25
+ d c X'00200019'
+ d CURLINFO_NUM_CONNECTS... CURLINFO_LONG + 26
+ d c X'0020001A'
+ d CURLINFO_SSL_ENGINES... CURLINFO_SLIST + 27
+ d c X'0040001B'
+ d CURLINFO_COOKIELIST... CURLINFO_SLIST + 28
+ d c X'0040001C'
+ d CURLINFO_LASTSOCKET... CURLINFO_LONG + 29
+ d c X'0020001D'
+ d CURLINFO_FTP_ENTRY_PATH... CURLINFO_STRING + 30
+ d c X'0010001E'
+ d CURLINFO_REDIRECT_URL... CURLINFO_STRING + 31
+ d c X'0010001F'
+ d CURLINFO_PRIMARY_IP... CURLINFO_STRING + 32
+ d c X'00100020'
+ d CURLINFO_APPCONNECT_TIME... CURLINFO_DOUBLE + 33
+ d c X'00300021'
+ d CURLINFO_CERTINFO... CURLINFO_SLIST + 34
+ d c X'00400022'
+ d CURLINFO_CONDITION_UNMET... CURLINFO_LONG + 35
+ d c X'00200023'
+ d CURLINFO_RTSP_SESSION_ID... CURLINFO_STRING + 36
+ d c X'00100024'
+ d CURLINFO_RTSP_CLIENT_CSEQ... CURLINFO_LONG + 37
+ d c X'00200025'
+ d CURLINFO_RTSP_SERVER_CSEQ... CURLINFO_LONG + 38
+ d c X'00200026'
+ d CURLINFO_RTSP_CSEQ_RECV... CURLINFO_LONG + 39
+ d c X'00200027'
+ d CURLINFO_PRIMARY_PORT... CURLINFO_LONG + 40
+ d c X'00200028'
+ d CURLINFO_LOCAL_IP... CURLINFO_STRING + 41
+ d c X'00100029'
+ d CURLINFO_LOCAL_PORT... CURLINFO_LONG + 42
+ d c X'0020002A'
+ *
+ d CURLINFO_HTTP_CODE... Old ...RESPONSE_CODE
+ d c X'00200002'
+ *
+ d curl_closepolicy...
+ d s 10i 0 based(######ptr######) Enum
+ d CURLCLOSEPOLICY_OLDEST...
+ d c 1
+ d CURLCLOSEPOLICY_LEAST_RECENTLY_USED...
+ d c 2
+ d CURLCLOSEPOLICY_LEAST_TRAFFIC...
+ d c 3
+ d CURLCLOSEPOLICY_SLOWEST...
+ d c 4
+ d CURLCLOSEPOLICY_CALLBACK...
+ d c 5
+ *
+ d curl_lock_data...
+ d s 10i 0 based(######ptr######) Enum
+ d CURL_LOCK_DATA_NONE...
+ d c 0
+ d CURL_LOCK_DATA_SHARE...
+ d c 1
+ d CURL_LOCK_DATA_COOKIE...
+ d c 2
+ d CURL_LOCK_DATA_DNS...
+ d c 3
+ d CURL_LOCK_DATA_SSL_SESSION...
+ d c 4
+ d CURL_LOCK_DATA_CONNECT...
+ d c 5
+ d CURL_LOCK_DATA_LAST...
+ d c 6
+ *
+ d curl_lock_access...
+ d s 10i 0 based(######ptr######) Enum
+ d CURL_LOCK_ACCESS_NONE...
+ d c 0
+ d CURL_LOCK_ACCESS_SHARED...
+ d c 1
+ d CURL_LOCK_ACCESS_SINGLE...
+ d c 2
+ *
+ d curl_TimeCond s 10i 0 based(######ptr######) Enum
+ d CURL_TIMECOND_NONE...
+ d c 0
+ d CURL_TIMECOND_IFMODSINCE...
+ d c 1
+ d CURL_TIMECOND_LASTMOD...
+ d c 2
+ d CURL_TIMECOND_LAST...
+ d c 3
+ *
+ d CURLSHcode s 10i 0 based(######ptr######) Enum
+ d CURLSHE_OK c 0
+ d CURLSHE_BAD_OPTION...
+ d c 1
+ d CURLSHE_IN_USE...
+ d c 2
+ d CURLSHE_INVALID...
+ d c 3
+ d CURLSHE_NOMEM...
+ d c 4
+ *
+ d CURLSHoption...
+ d s 10i 0 based(######ptr######) Enum
+ d CURLSHOPT_SHARE...
+ d c 1
+ d CURLSHOPT_UNSHARE...
+ d c 2
+ d CURLSHOPT_LOCKFUNC...
+ d c 3
+ d CURLSHOPT_UNLOCKFUNC...
+ d c 4
+ d CURLSHOPT_USERDATA...
+ d c 5
+ *
+ d CURLversion s 10i 0 based(######ptr######) Enum
+ d CURLVERSION_FIRST...
+ d c 0
+ d CURLVERSION_SECOND...
+ d c 1
+ d CURLVERSION_THIRD...
+ d c 2
+ d CURLVERSION_FOURTH...
+ d c 3
+ d CURLVERSION_NOW...
+ d c 3 CURLVERSION_FOURTH
+ *
+ d curlsocktype s 10i 0 based(######ptr######) Enum
+ d CURLSOCKTYPE_IPCXN...
+ d c 0
+ *
+ d CURLMcode s 10i 0 based(######ptr######) Enum
+ d CURLM_CALL_MULTI_PERFORM...
+ d c -1
+ d CURLM_CALL_MULTI_SOCKET...
+ d c -1
+ d CURLM_OK c 0
+ d CURLM_BAD_HANDLE...
+ d c 1
+ d CURLM_BAD_EASY_HANDLE...
+ d c 2
+ d CURLM_OUT_OF_MEMORY...
+ d c 3
+ d CURLM_INTERNAL_ERROR...
+ d c 4
+ d CURLM_BAD_SOCKET...
+ d c 5
+ d CURLM_UNKNOWN_OPTION...
+ d c 6
+ d CURLM_LAST c 7
+ *
+ d CURLMSG s 10i 0 based(######ptr######) Enum
+ d CURLMSG_NONE c 0
+ d CURLMSG_DONE c 1
+ *
+ d CURLMoption s 10i 0 based(######ptr######) Enum
+ d CURLMOPT_SOCKETFUNCTION...
+ d c 20001
+ d CURLMOPT_SOCKETDATA...
+ d c 10002
+ d CURLMOPT_PIPELINING...
+ d c 00003
+ d CURLMOPT_TIMERFUNCTION...
+ d c 20004
+ d CURLMOPT_TIMERDATA...
+ d c 10005
+ d CURLMOPT_MAXCONNECTS...
+ d c 00006
+ *
+ * Public API enums for RTSP requests.
+ *
+ d CURLRTSPREQ_NONE...
+ d c 0
+ d CURL_RTSPREQ_OPTIONS...
+ d c 1
+ d CURL_RTSPREQ_DESCRIBE...
+ d c 2
+ d CURL_RTSPREQ_ANNOUNCE...
+ d c 3
+ d CURL_RTSPREQ_SETUP...
+ d c 4
+ d CURL_RTSPREQ_PLAY...
+ d c 5
+ d CURL_RTSPREQ_PAUSE...
+ d c 6
+ d CURL_RTSPREQ_TEARDOWN...
+ d c 7
+ d CURL_RTSPREQ_GET_PARAMETER...
+ d c 8
+ d CURL_RTSPREQ_SET_PARAMETER...
+ d c 9
+ d CURL_RTSPREQ_RECORD...
+ d c 10
+ d CURL_RTSPREQ_RECEIVE...
+ d c 12
+ d CURL_RTSPREQ_LAST...
+ d c 13
+
+ *
+ * Renaming CURLMsg to CURL_Msg to avoid case-insensivity name clash.
+ *
+ d CURL_Msg ds based(######ptr######)
+ d qualified
+ d msg like(CURLMSG)
+ d easy_handle * CURL *
+ d data *
+ d whatever * overlay(data) void *
+ d result overlay(data) like(CURLcode)
+ *
+ d curl_http_post...
+ d ds based(######ptr######)
+ d qualified
+ d next * curl_httppost *
+ d name * char *
+ d namelength 10i 0 long
+ d contents * char *
+ d contentslength...
+ d 10i 0 long
+ d buffer * char *
+ d bufferlength...
+ d 10i 0 long
+ d contenttype * char *
+ d contentheader...
+ d * curl_slist *
+ d more * curl_httppost *
+ d flags 10i 0 long
+ d showfilename * char *
+ d userp * void *
+ *
+ d curl_sockaddr ds based(######ptr######)
+ d qualified
+ d family 10i 0
+ d socktype 10i 0
+ d protocol 10i 0
+ d addrlen 10u 0
+ d addr 16 struct sockaddr
+ *
+ d curl_khkey ds based(######ptr######)
+ d qualified
+ d key * const char *
+ d len 10u 0
+ d keytype 10i 0
+ *
+ d CURLKHTYPE_UNKNOWN...
+ d c 0
+ d CURLKHTYPE_RSA1...
+ d c 1
+ d CURLKHTYPE_RSA...
+ d c 2
+ d CURLKHTYPE_DSS...
+ d c 3
+ *
+ d curl_forms ds based(######ptr######)
+ d qualified
+ d option like(CURLformoption)
+ d value * const char *
+ d value_ptr * overlay(value)
+ d value_procptr...
+ d * overlay(value) procptr
+ *
+ d curl_slist ds based(######ptr######)
+ d qualified
+ d data * char *
+ d next * struct curl_slist *
+ *
+ d curl_version_info_data...
+ d ds based(######ptr######)
+ d qualified
+ d age like(CURLversion)
+ d version * const char *
+ d version_num 10u 0
+ d host * const char *
+ d features 10i 0
+ d ssl_version * const char *
+ d ssl_version_num...
+ d 10i 0 long
+ d libz_version * const char *
+ d protocols * const char * const *
+ d ares * const char *
+ d ares_num 10i 0
+ d libidn * const char *
+ d iconv_ver_num...
+ d 10i 0
+ d libssh_version...
+ d * const char *
+ *
+ d curl_certinfo ds based(######ptr######)
+ d qualified
+ d num_of_certs 10i 0
+ d certinfo * struct curl_slist **
+ *
+ d curl_fistrgs ds based(######ptr######)
+ d qualified
+ d time * char *
+ d perm * char *
+ d user * char *
+ d group * char *
+ d target * char *
+ *
+ d curl_fileinfo ds based(######ptr######)
+ d qualified
+ d filename * char *
+ d filetype like(curlfiletype)
+ d time 10i 0 time_t
+ d perm 10u 0
+ d uid 10i 0
+ d gid 10i 0
+ d size like(curl_off_t)
+ d hardlinks 10i 0
+ d strings likeds(curl_fistrgs)
+ d flags 10u 0
+ d b_data * char *
+ d b_size 10u 0 size_t
+ d b_used 10u 0 size_t
+ *
+ d curl_formget_callback...
+ d s * based(######ptr######) procptr
+ *
+ d curl_malloc_callback...
+ d s * based(######ptr######) procptr
+ *
+ d curl_free_callback...
+ d s * based(######ptr######) procptr
+ *
+ d curl_realloc_callback...
+ d s * based(######ptr######) procptr
+ *
+ d curl_strdup_callback...
+ d s * based(######ptr######) procptr
+ *
+ d curl_calloc_callback...
+ d s * based(######ptr######) procptr
+ *
+ d curl_lock_function...
+ d s * based(######ptr######) procptr
+ *
+ d curl_unlock_function...
+ d s * based(######ptr######) procptr
+ *
+ d curl_progress_callback...
+ d s * based(######ptr######) procptr
+ *
+ d curl_read_callback...
+ d s * based(######ptr######) procptr
+ *
+ d curl_write_callback...
+ d s * based(######ptr######) procptr
+ *
+ d curl_seek_callback...
+ d s * based(######ptr######) procptr
+ *
+ d curl_sockopt_callback...
+ d s * based(######ptr######) procptr
+ *
+ d curl_ioctl_callback...
+ d s * based(######ptr######) procptr
+ *
+ d curl_debug_callback...
+ d s * based(######ptr######) procptr
+ *
+ d curl_conv_callback...
+ d s * based(######ptr######) procptr
+ *
+ d curl_ssl_ctx_callback...
+ d s * based(######ptr######) procptr
+ *
+ d curl_socket_callback...
+ d s * based(######ptr######) procptr
+ *
+ d curl_opensocket_callback...
+ d s * based(######ptr######) procptr
+ *
+ d curl_sshkeycallback...
+ d s * based(######ptr######) procptr
+ *
+ d curl_chunk_bgn_callback...
+ d s * based(######ptr######) procptr
+ *
+ d curl_chunk_end_callback...
+ d s * based(######ptr######) procptr
+ *
+ d curl_fnmatch_callback...
+ d s * based(######ptr######) procptr
+ *
+ **************************************************************************
+ * Prototypes
+ **************************************************************************
+ *
+ * This procedure as a variable parameter list.
+ * This prototype allows use of an option array, or a single "object"
+ * option. Other argument lists may be implemented by alias procedure
+ * prototype definitions.
+ *
+ d curl_formadd pr extproc('curl_formadd')
+ d like(CURLFORMcode)
+ d httppost * curl_httppost *
+ d lastpost * curl_httppost *
+ d option1 value like(CURLFORMoption) CURLFORM_ARRAY
+ d options(*nopass)
+ d object1 * value options(*string: *nopass)
+ d option2 value like(CURLFORMoption) CURLFORM_END
+ d options(*nopass)
+ *
+ *
+ d curl_strequal pr 10i 0 extproc('curl_strequal')
+ d s1 * value options(*string)
+ d s2 * value options(*string)
+ *
+ d curl_strnequal pr 10i 0 extproc('curl_strnequal')
+ d s1 * value options(*string)
+ d s2 * value options(*string)
+ d n 10u 0 value
+ *
+ d curl_formget pr 10i 0 extproc('curl_formget')
+ d form * value curl_httppost *
+ d arg * value
+ d append value like(curl_formget_callback)
+ *
+ d curl_formfree pr extproc('curl_formfree')
+ d form * value curl_httppost *
+ *
+ d curl_getenv pr * extproc('curl_getenv')
+ d variable * value options(*string)
+ *
+ d curl_version pr * extproc('curl_version')
+ *
+ d curl_easy_escape...
+ d pr * extproc('curl_easy_escape') char *
+ d handle * value CURL *
+ d string * value options(*string)
+ d length 10i 0 value
+ *
+ d curl_escape pr * extproc('curl_escape') char *
+ d string * value options(*string)
+ d length 10i 0 value
+ *
+ d curl_easy_unescape...
+ d pr * extproc('curl_easy_unescape') char *
+ d handle * value CURL *
+ d string * value options(*string)
+ d length 10i 0 value
+ d outlength 10i 0 options(*omit)
+ *
+ d curl_unescape pr * extproc('curl_unescape') char *
+ d string * value options(*string)
+ d length 10i 0 value
+ *
+ d curl_free pr extproc('curl_free')
+ d p * value
+ *
+ d curl_global_init...
+ d pr extproc('curl_global_init')
+ d like(CURLcode)
+ d flags 10i 0 value
+ *
+ d curl_global_init_mem...
+ d pr extproc('curl_global_init_mem')
+ d like(CURLcode)
+ d m value like(curl_malloc_callback)
+ d f value like(curl_free_callback)
+ d r value like(curl_realloc_callback)
+ d s value like(curl_strdup_callback)
+ d c value like(curl_calloc_callback)
+ *
+ d curl_global_cleanup...
+ d pr extproc('curl_global_cleanup')
+ *
+ d curl_slist_append...
+ d pr * extproc('curl_slist_append') struct curl_slist *
+ d list * value struct curl_slist *
+ d data * value options(*string) const char *
+ *
+ d curl_slist_free_all...
+ d pr extproc('curl_slist_free_all')
+ d list * value struct curl_slist *
+ *
+ d curl_getdate pr 10i 0 extproc('curl_getdate') time_t
+ d p * value options(*string) const char *
+ d unused 10i 0 const options(*omit) time_t
+ *
+ d curl_share_init...
+ d pr * extproc('curl_share_init') CURLSH * (= void *)
+ *
+ * Variable argument type procedure.
+ * Multiply prototyped to support all possible types.
+ *
+ d curl_share_setopt_int...
+ d pr extproc('curl_share_setopt')
+ d like(CURLSHcode)
+ d share * value CURLSH * (= void *)
+ d option value like(CURLSHoption)
+ d intarg 10i 0 value options(*nopass)
+ *
+ d curl_share_setopt_ptr...
+ d pr extproc('curl_share_setopt')
+ d like(CURLSHcode)
+ d share * value CURLSH * (= void *)
+ d option value like(CURLSHoption)
+ d ptrarg * value options(*nopass)
+ *
+ d curl_share_setopt_proc...
+ d pr extproc('curl_share_setopt')
+ d like(CURLSHcode)
+ d share * value CURLSH * (= void *)
+ d option value like(CURLSHoption)
+ d procarg * value procptr options(*nopass)
+ *
+ d curl_share_cleanup...
+ d pr extproc('curl_share_cleanup')
+ d like(CURLSHcode)
+ d share * value CURLSH * (= void *)
+ *
+ d curl_version_info...
+ d pr * extproc('curl_version_info') c_i_version_data *
+ d version value like(CURLversion)
+ *
+ d curl_easy_strerror...
+ d pr * extproc('curl_easy_strerror') const char *
+ d code value like(CURLcode)
+ *
+ d curl_share_strerror...
+ d pr * extproc('curl_share_strerror') const char *
+ d code value like(CURLSHcode)
+ *
+ d curl_easy_init pr * extproc('curl_easy_init') CURL *
+ *
+ * Multiple prototypes for vararg procedure curl_easy_setopt.
+ *
+ d curl_easy_setopt_long...
+ d pr extproc('curl_easy_setopt')
+ d like(CURLcode)
+ d curl * value CURL *
+ d option value like(CURLoption)
+ d longarg 10i 0 value options(*nopass)
+ *
+ d curl_easy_setopt_object...
+ d pr extproc('curl_easy_setopt')
+ d like(CURLcode)
+ d curl * value CURL *
+ d option value like(CURLoption)
+ d objectarg * value options(*string: *nopass)
+ *
+ d curl_easy_setopt_function...
+ d pr extproc('curl_easy_setopt')
+ d like(CURLcode)
+ d curl * value CURL *
+ d option value like(CURLoption)
+ d functionarg * value procptr options(*nopass)
+ *
+ d curl_easy_setopt_offset...
+ d pr extproc('curl_easy_setopt')
+ d like(CURLcode)
+ d curl * value CURL *
+ d option value like(CURLoption)
+ d offsetarg value like(curl_off_t)
+ d options(*nopass)
+ *
+ *
+ d curl_easy_perform...
+ d pr extproc('curl_easy_perform')
+ d like(CURLcode)
+ d curl * value CURL *
+ *
+ d curl_easy_cleanup...
+ d pr extproc('curl_easy_cleanup')
+ d curl * value CURL *
+ *
+ * Multiple prototypes for vararg procedure curl_easy_getinfo.
+ *
+ d curl_easy_getinfo_string...
+ d pr extproc('curl_easy_getinfo')
+ d like(CURLcode)
+ d curl * value CURL *
+ d info value like(CURLINFO)
+ d stringarg * options(*nopass) char *
+ *
+ d curl_easy_getinfo_long...
+ d pr extproc('curl_easy_getinfo')
+ d like(CURLcode)
+ d curl * value CURL *
+ d info value like(CURLINFO)
+ d longarg 10i 0 options(*nopass)
+ *
+ d curl_easy_getinfo_double...
+ d pr extproc('curl_easy_getinfo')
+ d like(CURLcode)
+ d curl * value CURL *
+ d info value like(CURLINFO)
+ d doublearg 8f options(*nopass)
+ *
+ d curl_easy_getinfo_slist...
+ d pr extproc('curl_easy_getinfo')
+ d like(CURLcode)
+ d curl * value CURL *
+ d info value like(CURLINFO)
+ d slistarg * options(*nopass) struct curl_slist *
+ *
+ *
+ d curl_easy_duphandle...
+ d pr * extproc('curl_easy_duphandle') CURL *
+ d curl * value CURL *
+ *
+ d curl_easy_reset...
+ d pr extproc('curl_easy_reset')
+ d curl * value CURL *
+ *
+ d curl_easy_recv...
+ d pr extproc('curl_easy_recv')
+ d like(CURLcode)
+ d curl * value CURL *
+ d buffer * value void *
+ d buflen 10u 0 value size_t
+ d n 10u 0 size_t *
+ *
+ d curl_easy_send...
+ d pr extproc('curl_easy_send')
+ d like(CURLcode)
+ d curl * value CURL *
+ d buffer * value const void *
+ d buflen 10u 0 value size_t
+ d n 10u 0 size_t *
+ *
+ d curl_easy_pause...
+ d pr extproc('curl_easy_pause')
+ d curl * value CURL *
+ d bitmask 10i 0 value
+ *
+ d curl_multi_init...
+ d pr * extproc('curl_multi_init') CURLM *
+ *
+ d curl_multi_add_handle...
+ d pr extproc('curl_multi_add_handle')
+ d like(CURLMcode)
+ d multi_handle * value CURLM *
+ d curl_handle * value CURL *
+ *
+ d curl_multi_remove_handle...
+ d pr extproc('curl_multi_remove_handle')
+ d like(CURLMcode)
+ d multi_handle * value CURLM *
+ d curl_handle * value CURL *
+ *
+ d curl_multi_fdset...
+ d pr extproc('curl_multi_fdset')
+ d like(CURLMcode)
+ d multi_handle * value CURLM *
+ d read_fd_set 65535 options(*varsize) fd_set
+ d write_fd_set 65535 options(*varsize) fd_set
+ d exc_fd_set 65535 options(*varsize) fd_set
+ d max_fd 10i 0
+ *
+ d curl_multi_perform...
+ d pr extproc('curl_multi_perform')
+ d like(CURLMcode)
+ d multi_handle * value CURLM *
+ d running_handles...
+ d 10i 0
+ *
+ d curl_multi_cleanup...
+ d pr extproc('curl_multi_cleanup')
+ d like(CURLMcode)
+ d multi_handle * value CURLM *
+ *
+ d curl_multi_info_read...
+ d pr * extproc('curl_multi_info_read') CURL_Msg *
+ d multi_handle * value CURLM *
+ d msgs_in_queue 10i 0
+ *
+ d curl_multi_strerror...
+ d pr * extproc('curl_multi_strerror') char *
+ d code value like(CURLMcode)
+ *
+ d curl_multi_socket...
+ d pr extproc('curl_multi_socket')
+ d like(CURLMcode)
+ d multi_handle * value CURLM *
+ d s value like(curl_socket_t)
+ d running_handles...
+ d 10i 0
+ *
+ d curl_multi_socket_action...
+ d pr extproc('curl_multi_socket_action')
+ d like(CURLMcode)
+ d multi_handle * value CURLM *
+ d s value like(curl_socket_t)
+ d ev_bitmask 10i 0 value
+ d running_handles...
+ d 10i 0
+ *
+ d curl_multi_socket_all...
+ d pr extproc('curl_multi_socket_all')
+ d like(CURLMcode)
+ d multi_handle * value CURLM *
+ d running_handles...
+ d 10i 0
+ *
+ d curl_multi_timeout...
+ d pr extproc('curl_multi_timeout')
+ d like(CURLMcode)
+ d multi_handle * value CURLM *
+ d milliseconds 10i 0
+ *
+ * Multiple prototypes for vararg procedure curl_multi_setopt.
+ *
+ d curl_multi_setopt_long...
+ d pr extproc('curl_multi_setopt')
+ d like(CURLMcode)
+ d multi_handle * value CURLM *
+ d option value like(CURLMoption)
+ d longarg 10i 0 value options(*nopass)
+ *
+ d curl_multi_setopt_object...
+ d pr extproc('curl_multi_setopt')
+ d like(CURLMcode)
+ d multi_handle * value CURLM *
+ d option value like(CURLMoption)
+ d objectarg * value options(*string: *nopass)
+ *
+ d curl_multi_setopt_function...
+ d pr extproc('curl_multi_setopt')
+ d like(CURLMcode)
+ d multi_handle * value CURLM *
+ d option value like(CURLMoption)
+ d functionarg * value procptr options(*nopass)
+ *
+ d curl_multi_setopt_offset...
+ d pr extproc('curl_multi_setopt')
+ d like(CURLMcode)
+ d multi_handle * value CURLM *
+ d option value like(CURLMoption)
+ d offsetarg value like(curl_off_t)
+ d options(*nopass)
+ *
+ *
+ d curl_multi_assign...
+ d pr extproc('curl_multi_assign')
+ d like(CURLMcode)
+ d multi_handle * value CURLM *
+ d sockfd value like(curl_socket_t)
+ d sockp * value void *
+ *
+ **************************************************************************
+ * CCSID wrapper procedure prototypes
+ **************************************************************************
+ *
+ d curl_version_ccsid...
+ d pr * extproc('curl_version_ccsid')
+ d ccsid 10u 0 value
+ *
+ d curl_easy_escape_ccsid...
+ d pr * extproc('curl_easy_escape_ccsid') char *
+ d handle * value CURL *
+ d string * value options(*string)
+ d length 10i 0 value
+ d ccsid 10u 0 value
+ *
+ d curl_easy_unescape_ccsid...
+ d pr * extproc('curl_easy_unescape_ccsid') char *
+ d handle * value CURL *
+ d string * value options(*string)
+ d length 10i 0 value
+ d outlength 10i 0 options(*omit)
+ d ccsid 10u 0 value
+ *
+ d curl_slist_append_ccsid...
+ d pr * extproc('curl_slist_append_ccsid') struct curl_slist *
+ d list * value struct curl_slist *
+ d data * value options(*string) const char *
+ d ccsid 10u 0 value
+ *
+ d curl_getdate_ccsid...
+ d pr 10i 0 extproc('curl_getdate_ccsid') time_t
+ d p * value options(*string) const char *
+ d unused 10i 0 const options(*omit) time_t
+ d ccsid 10u 0 value
+ *
+ d curl_version_info_ccsid...
+ d pr * extproc('curl_version_info_ccsid') c_i_version_data *
+ d version value like(CURLversion)
+ d ccsid 10u 0 value
+ *
+ d curl_easy_strerror_ccsid...
+ d pr * extproc('curl_easy_strerror_ccsid') const char *
+ d code value like(CURLcode)
+ d ccsid 10u 0 value
+ *
+ d curl_share_strerror_ccsid...
+ d pr * extproc('curl_share_strerror_ccsid') const char *
+ d code value like(CURLSHcode)
+ d ccsid 10u 0 value
+ *
+ d curl_multi_strerror_ccsid...
+ d pr * extproc('curl_multi_strerror_ccsid') char *
+ d code value like(CURLMcode)
+ d ccsid 10u 0 value
+ *
+ d curl_easy_getinfo_ccsid...
+ d pr extproc('curl_easy_getinfo_ccsid')
+ d like(CURLcode)
+ d curl * value CURL *
+ d info value like(CURLINFO)
+ d stringarg * options(*nopass) char *
+ d ccsid 10u 0 value options(*nopass)
+ *
+ d curl_formadd_ccsid...
+ d pr extproc('curl_formadd_ccsid')
+ d like(CURLFORMcode)
+ d httppost * curl_httppost *
+ d lastpost * curl_httppost *
+ d option1 value like(CURLFORMoption) CURLFORM_ARRAY
+ d options(*nopass)
+ d object1 * value options(*string: *nopass)
+ d option2 value like(CURLFORMoption) CURLFORM_END
+ d options(*nopass)
+ *
+ d curl_formget_ccsid...
+ d pr 10i 0 extproc('curl_formget_ccsid')
+ d form * value curl_httppost *
+ d arg * value
+ d append value like(curl_formget_callback)
+ d ccsid 10u 0 value
+ *
+ d curl_form_long_value...
+ d pr * extproc('curl_form_long_value')
+ d value 10i 0 value curl_httppost *
+ *
+ d curl_easy_setopt_ccsid...
+ d pr extproc('curl_easy_setopt_ccsid')
+ d like(CURLcode)
+ d curl * value CURL *
+ d option value like(CURLoption)
+ d objectarg * value options(*string: *nopass)
+ d ccsid 10u 0 value options(*nopass)
+ *
+ /endif
diff --git a/packages/OS400/initscript.sh b/packages/OS400/initscript.sh
new file mode 100644
index 0000000..9bf93a8
--- /dev/null
+++ b/packages/OS400/initscript.sh
@@ -0,0 +1,176 @@
+#!/bin/sh
+
+
+case "${SCRIPTDIR}" in
+/*) ;;
+*) SCRIPTDIR="`pwd`/${SCRIPTDIR}"
+esac
+
+while true
+do case "${SCRIPTDIR}" in
+ */.) SCRIPTDIR="${SCRIPTDIR%/.}";;
+ *) break;;
+ esac
+done
+
+# The script directory is supposed to be in $TOPDIR/packages/os400.
+
+TOPDIR=`dirname "${SCRIPTDIR}"`
+TOPDIR=`dirname "${TOPDIR}"`
+export SCRIPTDIR TOPDIR
+
+# Extract the SONAME from the library makefile.
+
+SONAME=`sed -e '/^VERSIONINFO=/!d' -e 's/^.* \([0-9]*\):.*$/\1/' -e 'q' \
+ < "${TOPDIR}/lib/Makefile.am"`
+export SONAME
+
+
+################################################################################
+#
+# Tunable configuration parameters.
+#
+################################################################################
+
+TARGETLIB='CURL' # Target OS/400 program library
+STATBNDDIR='CURL_A' # Static binding directory.
+DYNBNDDIR='CURL' # Dynamic binding directory.
+SRVPGM="CURL.${SONAME}" # Service program.
+TGTCCSID='500' # Target CCSID of objects
+DEBUG='*ALL' # Debug level
+OPTIMIZE='10' # Optimisation level
+OUTPUT='*NONE' # Compilation output option.
+TGTRLS='V5R3M0' # Target OS release
+
+export TARGETLIB STATBNDDIR DYNBNDDIR SRVPGM TGTCCSID DEBUG OPTIMIZE OUTPUT
+export TGTRLS
+
+
+################################################################################
+
+# Need to get the version definitions.
+
+LIBCURL_VERSION=`grep '^#define *LIBCURL_VERSION ' \
+ "${TOPDIR}/include/curl/curlver.h" |
+ sed 's/.*"\(.*\)".*/\1/'`
+LIBCURL_VERSION_MAJOR=`grep '^#define *LIBCURL_VERSION_MAJOR ' \
+ "${TOPDIR}/include/curl/curlver.h" |
+ sed 's/^#define *LIBCURL_VERSION_MAJOR *\([^ ]*\).*/\1/'`
+LIBCURL_VERSION_MINOR=`grep '^#define *LIBCURL_VERSION_MINOR ' \
+ "${TOPDIR}/include/curl/curlver.h" |
+ sed 's/^#define *LIBCURL_VERSION_MINOR *\([^ ]*\).*/\1/'`
+LIBCURL_VERSION_PATCH=`grep '^#define *LIBCURL_VERSION_PATCH ' \
+ "${TOPDIR}/include/curl/curlver.h" |
+ sed 's/^#define *LIBCURL_VERSION_PATCH *\([^ ]*\).*/\1/'`
+LIBCURL_VERSION_NUM=`grep '^#define *LIBCURL_VERSION_NUM ' \
+ "${TOPDIR}/include/curl/curlver.h" |
+ sed 's/^#define *LIBCURL_VERSION_NUM *0x\([^ ]*\).*/\1/'`
+LIBCURL_TIMESTAMP=`grep '^#define *LIBCURL_TIMESTAMP ' \
+ "${TOPDIR}/include/curl/curlver.h" |
+ sed 's/.*"\(.*\)".*/\1/'`
+export LIBCURL_VERSION
+export LIBCURL_VERSION_MAJOR LIBCURL_VERSION_MINOR LIBCURL_VERSION_PATCH
+export LIBCURL_VERSION_NUM LIBCURL_TIMESTAMP
+
+################################################################################
+#
+# OS/400 specific definitions.
+#
+################################################################################
+
+LIBIFSNAME="/QSYS.LIB/${TARGETLIB}.LIB"
+
+
+################################################################################
+#
+# Procedures.
+#
+################################################################################
+
+# action_needed dest [src]
+#
+# dest is an object to build
+# if specified, src is an object on which dest depends.
+#
+# exit 0 (succeeds) if some action has to be taken, else 1.
+
+action_needed()
+
+{
+ [ ! -e "${1}" ] && return 0
+ [ "${2}" ] || return 1
+ [ "${1}" -ot "${2}" ] && return 0
+ return 1
+}
+
+
+# make_module module_name source_name [additional_definitions]
+#
+# Compile source name into ASCII module if needed.
+# As side effect, append the module name to variable MODULES.
+# Set LINK to "YES" if the module has been compiled.
+
+make_module()
+
+{
+ MODULES="${MODULES} ${1}"
+ MODIFSNAME="${LIBIFSNAME}/${1}.MODULE"
+ action_needed "${MODIFSNAME}" "${2}" || return 0;
+
+ # #pragma convert has to be in the source file itself, i.e.
+ # putting it in an include file makes it only active
+ # for that include file.
+ # Thus we build a temporary file with the pragma prepended to
+ # the source file and we compile that themporary file.
+
+ echo "#line 1 \"${2}\"" > __tmpsrcf.c
+ echo "#pragma convert(819)" >> __tmpsrcf.c
+ echo "#line 1" >> __tmpsrcf.c
+ cat "${2}" >> __tmpsrcf.c
+ CMD="CRTCMOD MODULE(${TARGETLIB}/${1}) SRCSTMF('__tmpsrcf.c')"
+# CMD="${CMD} SYSIFCOPT(*IFS64IO) OPTION(*INCDIRFIRST *SHOWINC *SHOWSYS)"
+ CMD="${CMD} SYSIFCOPT(*IFS64IO) OPTION(*INCDIRFIRST)"
+ CMD="${CMD} LOCALETYPE(*LOCALE)"
+ CMD="${CMD} INCDIR('/qibm/proddata/qadrt/include'"
+ CMD="${CMD} '${TOPDIR}/include/curl' '${TOPDIR}/include'"
+ CMD="${CMD} '${TOPDIR}/packages/OS400' ${INCLUDES})"
+ CMD="${CMD} TGTCCSID(${TGTCCSID}) TGTRLS(${TGTRLS})"
+ CMD="${CMD} OUTPUT(${OUTPUT})"
+ CMD="${CMD} OPTIMIZE(${OPTIMIZE})"
+ CMD="${CMD} DBGVIEW(${DEBUG})"
+
+ if [ "${3}" ]
+ then CMD="${CMD} DEFINE(${3})"
+ fi
+
+ system "${CMD}"
+ rm -f __tmpsrcf.c
+ LINK=YES
+}
+
+
+# Determine DB2 object name from IFS name.
+
+db2_name()
+
+{
+ basename "${1}" |
+ tr '[a-z-]' '[A-Z_]' |
+ sed -e 's/\..*//' \
+ -e 's/^\(..........\).*/\1/'
+}
+
+
+# Copy IFS file replacing version info.
+
+versioned_copy()
+
+{
+ sed -e "s/@LIBCURL_VERSION@/${LIBCURL_VERSION}/g" \
+ -e "s/@LIBCURL_VERSION_MAJOR@/${LIBCURL_VERSION_MAJOR}/g" \
+ -e "s/@LIBCURL_VERSION_MINOR@/${LIBCURL_VERSION_MINOR}/g" \
+ -e "s/@LIBCURL_VERSION_PATCH@/${LIBCURL_VERSION_PATCH}/g" \
+ -e "s/@LIBCURL_VERSION_NUM@/${LIBCURL_VERSION_NUM}/g" \
+ -e "s/@LIBCURL_TIMESTAMP@/${LIBCURL_TIMESTAMP}/g" \
+ < "${1}" > "${2}"
+}
diff --git a/packages/OS400/make-include.sh b/packages/OS400/make-include.sh
new file mode 100644
index 0000000..834ee2f
--- /dev/null
+++ b/packages/OS400/make-include.sh
@@ -0,0 +1,72 @@
+#!/bin/sh
+#
+# Installation of the include files in the OS/400 library.
+#
+
+SCRIPTDIR=`dirname "${0}"`
+. "${SCRIPTDIR}/initscript.sh"
+cd "${TOPDIR}/include"
+
+
+# Produce the curlbuild.h include file if not yet in distribution (CVS).
+
+if action_needed curl/curlbuild.h
+then if action_needed curl/curlbuild.h curl/curlbuild.h.dist
+ then cp -p curl/curlbuild.h.dist curl/curlbuild.h
+ fi
+fi
+
+
+# Create the OS/400 source program file for the include files.
+
+SRCPF="${LIBIFSNAME}/H.FILE"
+
+if action_needed "${SRCPF}"
+then CMD="CRTSRCPF FILE(${TARGETLIB}/H) RCDLEN(112)"
+ CMD="${CMD} CCSID(${TGTCCSID}) TEXT('curl: Header files')"
+ system "${CMD}"
+fi
+
+
+# Enumeration values are used as va_arg tagfields, so they MUST be
+# integers.
+
+copy_hfile()
+
+{
+ destfile="${1}"
+ srcfile="${2}"
+ shift
+ shift
+ sed -e '1i\
+#pragma enum(int)\
+' "${@}" -e '$a\
+#pragma enum(pop)\
+' < "${srcfile}" > "${destfile}"
+}
+
+# Copy the header files.
+
+for HFILE in curl/*.h ${SCRIPTDIR}/ccsidcurl.h
+do DEST="${SRCPF}/`db2_name \"${HFILE}\"`.MBR"
+ if action_needed "${DEST}" "${HFILE}"
+ then copy_hfile "${DEST}" "${HFILE}"
+ fi
+done
+
+
+# Copy the ILE/RPG include file, setting-up version number.
+
+ versioned_copy "${SCRIPTDIR}/curl.inc.in" "${SRCPF}/CURL.INC.MBR"
+
+
+# Duplicate file H as CURL to support more include path forms.
+
+if action_needed "${LIBIFSNAME}/CURL.FILE"
+then :
+else system "DLTF FILE(${TARGETLIB}/CURL)"
+fi
+
+CMD="CRTDUPOBJ OBJ(H) FROMLIB(${TARGETLIB}) OBJTYPE(*FILE) TOLIB(*FROMLIB)"
+CMD="${CMD} NEWOBJ(CURL) DATA(*YES)"
+system "${CMD}"
diff --git a/packages/OS400/make-lib.sh b/packages/OS400/make-lib.sh
new file mode 100644
index 0000000..b7f951b
--- /dev/null
+++ b/packages/OS400/make-lib.sh
@@ -0,0 +1,192 @@
+#!/bin/sh
+#
+# libcurl compilation script for the OS/400.
+#
+
+SCRIPTDIR=`dirname "${0}"`
+. "${SCRIPTDIR}/initscript.sh"
+cd "${TOPDIR}/lib"
+
+
+# Create and compile the identification source file.
+
+echo '#pragma comment(user, "libcurl version '"${LIBCURL_VERSION}"'")' > os400.c
+echo '#pragma comment(date)' >> os400.c
+echo '#pragma comment(copyright, "Copyright (C) 1998-2010 Daniel Stenberg et al. OS/400 version by P. Monnerat")' >> os400.c
+make_module OS400 os400.c
+LINK= # No need to rebuild service program yet.
+MODULES=
+
+
+# Get source list.
+
+CSOURCES()
+
+{
+ shift # Drop the equal sign.
+ CSOURCES="$*" # Get the file names.
+}
+
+HHEADERS()
+
+{
+ shift # Drop the equal sign.
+ HHEADERS="$*" # Get the file names.
+}
+
+. Makefile.inc
+
+
+# Compile the sources into modules.
+
+INCLUDES="'`pwd`'"
+
+make_module OS400SYS "${SCRIPTDIR}/os400sys.c"
+make_module CCSIDCURL "${SCRIPTDIR}/ccsidcurl.c"
+
+for SRC in ${CSOURCES}
+do MODULE=`basename "${SRC}" .c |
+ tr '[a-z]' '[A-Z]' |
+ sed -e 's/^\(..........\).*/\1/'`
+ make_module "${MODULE}" "${SRC}"
+done
+
+
+# If needed, (re)create the static binding directory.
+
+if action_needed "${LIBIFSNAME}/${STATBNDDIR}.BNDDIR"
+then LINK=YES
+fi
+
+if [ "${LINK}" ]
+then rm -rf "${LIBIFSNAME}/${STATBNDDIR}.BNDDIR"
+ CMD="CRTBNDDIR BNDDIR(${TARGETLIB}/${STATBNDDIR})"
+ CMD="${CMD} TEXT('LibCurl API static binding directory')"
+ system "${CMD}"
+
+ for MODULE in ${MODULES}
+ do CMD="ADDBNDDIRE BNDDIR(${TARGETLIB}/${STATBNDDIR})"
+ CMD="${CMD} OBJ((${TARGETLIB}/${MODULE} *MODULE))"
+ system "${CMD}"
+ done
+fi
+
+
+# The exportation file for service program creation must be in a DB2
+# source file, so make sure it exists.
+
+if action_needed "${LIBIFSNAME}/TOOLS.FILE"
+then CMD="CRTSRCPF FILE(${TARGETLIB}/TOOLS) RCDLEN(112)"
+ CMD="${CMD} TEXT('curl: build tools')"
+ system "${CMD}"
+fi
+
+
+# Gather the list of symbols to export.
+
+EXPORTS=`grep '^CURL_EXTERN[ ]' \
+ "${TOPDIR}"/include/curl/*.h \
+ "${SCRIPTDIR}/ccsidcurl.h" |
+ sed -e 's/^.*CURL_EXTERN[ ]\(.*\)(.*$/\1/' \
+ -e 's/[ ]*$//' \
+ -e 's/^.*[ ][ ]*//' \
+ -e 's/^\*//' \
+ -e 's/(\(.*\))/\1/'`
+
+# Create the service program exportation file in DB2 member if needed.
+
+BSF="${LIBIFSNAME}/TOOLS.FILE/BNDSRC.MBR"
+
+if action_needed "${BSF}" Makefile.am
+then LINK=YES
+fi
+
+if [ "${LINK}" ]
+then echo " STRPGMEXP PGMLVL(*CURRENT) SIGNATURE('LIBCURL_${SONAME}')" \
+ > "${BSF}"
+ for EXPORT in ${EXPORTS}
+ do echo ' EXPORT SYMBOL("'"${EXPORT}"'")' >> "${BSF}"
+ done
+
+ echo ' ENDPGMEXP' >> "${BSF}"
+fi
+
+
+# Build the service program if needed.
+
+if action_needed "${LIBIFSNAME}/${SRVPGM}.SRVPGM"
+then LINK=YES
+fi
+
+if [ "${LINK}" ]
+then CMD="CRTSRVPGM SRVPGM(${TARGETLIB}/${SRVPGM})"
+ CMD="${CMD} SRCFILE(${TARGETLIB}/TOOLS) SRCMBR(BNDSRC)"
+ CMD="${CMD} MODULE(${TARGETLIB}/OS400)"
+ CMD="${CMD} BNDDIR(${TARGETLIB}/${STATBNDDIR})"
+ CMD="${CMD} BNDSRVPGM(QADRTTS QGLDCLNT QGLDBRDR)"
+ CMD="${CMD} TEXT('curl API library')"
+ CMD="${CMD} TGTRLS(${TGTRLS})"
+ system "${CMD}"
+ LINK=YES
+fi
+
+
+# If needed, (re)create the dynamic binding directory.
+
+if action_needed "${LIBIFSNAME}/${DYNBNDDIR}.BNDDIR"
+then LINK=YES
+fi
+
+if [ "${LINK}" ]
+then rm -rf "${LIBIFSNAME}/${DYNBNDDIR}.BNDDIR"
+ CMD="CRTBNDDIR BNDDIR(${TARGETLIB}/${DYNBNDDIR})"
+ CMD="${CMD} TEXT('LibCurl API dynamic binding directory')"
+ system "${CMD}"
+ CMD="ADDBNDDIRE BNDDIR(${TARGETLIB}/${DYNBNDDIR})"
+ CMD="${CMD} OBJ((*LIBL/${SRVPGM} *SRVPGM))"
+ system "${CMD}"
+fi
+
+
+# Rebuild the formdata test if needed.
+
+if [ "${TEST_FORMDATA}" ]
+then MODULES=
+ make_module TFORMDATA formdata.c "'_FORM_DEBUG' 'CURLDEBUG'"
+ make_module TSTREQUAL strequal.c "'_FORM_DEBUG' 'CURLDEBUG'"
+ make_module TMEMDEBUG memdebug.c "'_FORM_DEBUG' 'CURLDEBUG'"
+ make_module TMPRINTF mprintf.c "'_FORM_DEBUG' 'CURLDEBUG'"
+ make_module TSTRERROR strerror.c "'_FORM_DEBUG' 'CURLDEBUG'"
+ # The following modules should not be needed (see comment in
+ # formdata.c. However, there are some unsatisfied
+ # external references leading in the following
+ # modules to be (recursively) needed.
+ MODULES="${MODULES} EASY STRDUP SSLGEN QSSL HOSTIP HOSTIP4 HOSTIP6"
+ MODULES="${MODULES} URL HASH TRANSFER GETINFO COOKIE SENDF SELECT"
+ MODULES="${MODULES} INET_NTOP SHARE HOSTTHRE MULTI LLIST FTP HTTP"
+ MODULES="${MODULES} HTTP_DIGES HTTP_CHUNK HTTP_NEGOT TIMEVAL HOSTSYN"
+ MODULES="${MODULES} CONNECT SOCKS PROGRESS ESCAPE INET_PTON GETENV"
+ MODULES="${MODULES} DICT LDAP TELNET FILE TFTP NETRC PARSEDATE"
+ MODULES="${MODULES} SPEEDCHECK SPLAY BASE64 SECURITY IF2IP MD5"
+ MODULES="${MODULES} KRB5 OS400SYS"
+
+ PGMIFSNAME="${LIBIFSNAME}/TFORMDATA.PGM"
+
+ if action_needed "${PGMIFSNAME}"
+ then LINK=YES
+ fi
+
+ if [ "${LINK}" ]
+ then CMD="CRTPGM PGM(${TARGETLIB}/TFORMDATA)"
+ CMD="${CMD} ENTMOD(QADRT/QADRTMAIN2)"
+ CMD="${CMD} MODULE("
+
+ for MODULE in ${MODULES}
+ do CMD="${CMD} ${TARGETLIB}/${MODULE}"
+ done
+
+ CMD="${CMD} ) BNDSRVPGM(QADRTTS)"
+ CMD="${CMD} TGTRLS(${TGTRLS})"
+ system "${CMD}"
+ fi
+fi
diff --git a/packages/OS400/make-src.sh b/packages/OS400/make-src.sh
new file mode 100644
index 0000000..090ae12
--- /dev/null
+++ b/packages/OS400/make-src.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+#
+#
+# Not implemented yet on OS/400.
diff --git a/packages/OS400/make-tests.sh b/packages/OS400/make-tests.sh
new file mode 100644
index 0000000..cee3ed9
--- /dev/null
+++ b/packages/OS400/make-tests.sh
@@ -0,0 +1,114 @@
+#!/bin/sh
+#
+# tests compilation script for the OS/400.
+#
+
+
+SCRIPTDIR=`dirname "${0}"`
+. "${SCRIPTDIR}/initscript.sh"
+cd "${TOPDIR}/tests"
+
+
+# tests directory not implemented yet.
+
+
+# Process the libtest subdirectory.
+
+cd libtest
+
+# Get definitions from the Makefile.inc file.
+# The `sed' statement works as follows:
+# _ Join \nl-separated lines.
+# _ Retain only lines that begins with "identifier =".
+# _ Turn these lines into shell variable assignments.
+
+eval "`sed -e ': begin' \
+ -e '/\\\\$/{' \
+ -e 'N' \
+ -e 's/\\\\\\n/ /' \
+ -e 'b begin' \
+ -e '}' \
+ -e '/^[A-Za-z_][A-Za-z0-9_]*[ ]*[=]/b keep' \
+ -e 'd' \
+ -e ': keep' \
+ -e 's/[ ]*=[ ]*/=/' \
+ -e 's/=\\(.*[^ ]\\)[ ]*$/=\\"\\1\\"/' \
+ -e 's/\\$(\\([^)]*\\))/${\\1}/g' \
+ < Makefile.inc`"
+
+# Special case: redefine chkhostname compilation parameters.
+
+chkhostname_SOURCES=chkhostname.c
+chkhostname_LDADD=curl_gethostname.o
+
+# Compile all programs.
+# The list is found in variable "noinst_PROGRAMS"
+
+INCLUDES="'${TOPDIR}/tests/libtest' '${TOPDIR}/lib'"
+
+for PGM in ${noinst_PROGRAMS}
+do DB2PGM=`db2_name "${PGM}"`
+ PGMIFSNAME="${LIBIFSNAME}/${DB2PGM}.PGM"
+
+ # Extract preprocessor symbol definitions from compilation
+ # options for the program.
+
+ PGMCFLAGS="`eval echo \"\\${${PGM}_CFLAGS}\"`"
+ PGMDEFINES=
+
+ for FLAG in ${PGMCFLAGS}
+ do case "${FLAG}" in
+ -D?*) DEFINE="`echo \"${FLAG}\" | sed 's/^..//'`"
+ PGMDEFINES="${PGMDEFINES} '${DEFINE}'"
+ ;;
+ esac
+ done
+
+ # Compile all C sources for the program into modules.
+
+ PGMSOURCES="`eval echo \"\\${${PGM}_SOURCES}\"`"
+ LINK=
+ MODULES=
+
+ for SOURCE in ${PGMSOURCES}
+ do case "${SOURCE}" in
+ *.c) # Special processing for libxxx.c files: their
+ # module name is determined by the target
+ # PROGRAM name.
+
+ case "${SOURCE}" in
+ lib*.c) MODULE="${DB2PGM}"
+ ;;
+ *) MODULE=`db2_name "${SOURCE}"`
+ ;;
+ esac
+
+ make_module "${MODULE}" "${SOURCE}" "${PGMDEFINES}"
+ if action_needed "${PGMIFSNAME}" "${MODIFSNAME}"
+ then LINK=yes
+ fi
+ ;;
+ esac
+ done
+
+ # Link program if needed.
+
+ if [ "${LINK}" ]
+ then PGMLDADD="`eval echo \"\\${${PGM}_LDADD}\"`"
+ for LDARG in ${PGMLDADD}
+ do case "${LDARG}" in
+ -*) ;; # Ignore non-module.
+ *) MODULES="${MODULES} "`db2_name "${LDARG}"`
+ ;;
+ esac
+ done
+ MODULES="`echo \"${MODULES}\" |
+ sed \"s/[^ ][^ ]*/${TARGETLIB}\/&/g\"`"
+ CMD="CRTPGM PGM(${TARGETLIB}/${DB2PGM})"
+ CMD="${CMD} ENTMOD(QADRT/QADRTMAIN2)"
+ CMD="${CMD} MODULE(${MODULES})"
+ CMD="${CMD} BNDSRVPGM(${TARGETLIB}/${SRVPGM} QADRTTS)"
+ CMD="${CMD} TGTRLS(${TGTRLS})"
+ system "${CMD}"
+ fi
+done
diff --git a/packages/OS400/makefile.sh b/packages/OS400/makefile.sh
new file mode 100644
index 0000000..1e67290
--- /dev/null
+++ b/packages/OS400/makefile.sh
@@ -0,0 +1,52 @@
+#!/bin/sh
+#
+# curl compilation script for the OS/400.
+#
+#
+# This is a shell script since make is not a standard component of OS/400.
+
+SCRIPTDIR=`dirname "${0}"`
+. "${SCRIPTDIR}/initscript.sh"
+cd "${TOPDIR}"
+
+
+# Create the OS/400 library if it does not exist.
+
+if action_needed "${LIBIFSNAME}"
+then CMD="CRTLIB LIB(${TARGETLIB}) TEXT('curl: multiprotocol support API')"
+ system "${CMD}"
+fi
+
+
+# Create the DOCS source file if it does not exist.
+
+if action_needed "${LIBIFSNAME}/DOCS.FILE"
+then CMD="CRTSRCPF FILE(${TARGETLIB}/DOCS) RCDLEN(112)"
+ CMD="${CMD} CCSID(${TGTCCSID}) TEXT('Documentation texts')"
+ system "${CMD}"
+fi
+
+
+# Copy some documentation files if needed.
+
+for TEXT in "${TOPDIR}/COPYING" "${SCRIPTDIR}/README.OS400" \
+ "${TOPDIR}/CHANGES" "${TOPDIR}/docs/THANKS" "${TOPDIR}/docs/FAQ" \
+ "${TOPDIR}/docs/FEATURES" "${TOPDIR}/docs/SSLCERTS" \
+ "${TOPDIR}/docs/RESOURCES" "${TOPDIR}/docs/VERSIONS" \
+ "${TOPDIR}/docs/HISTORY"
+do MEMBER="`basename \"${TEXT}\" .OS400`"
+ MEMBER="${LIBIFSNAME}/DOCS.FILE/`db2_name \"${MEMBER}\"`.MBR"
+
+ if action_needed "${MEMBER}" "${TEXT}"
+ then CMD="CPY OBJ('${TEXT}') TOOBJ('${MEMBER}') TOCCSID(${TGTCCSID})"
+ CMD="${CMD} DTAFMT(*TEXT) REPLACE(*YES)"
+ system "${CMD}"
+ fi
+done
+
+
+# Build in each directory.
+
+for SUBDIR in include lib src tests
+do "${SCRIPTDIR}/make-${SUBDIR}.sh"
+done
diff --git a/packages/OS400/os400sys.c b/packages/OS400/os400sys.c
new file mode 100644
index 0000000..071fa48
--- /dev/null
+++ b/packages/OS400/os400sys.c
@@ -0,0 +1,1080 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at http://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ *
+ ***************************************************************************/
+
+/* OS/400 additional support. */
+
+#include "curlbuild.h"
+#include "config-os400.h" /* Not setup.h: we only need some defines. */
+
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/un.h>
+
+#include <stdlib.h>
+#include <stddef.h>
+#include <string.h>
+#include <pthread.h>
+#include <netdb.h>
+#include <qadrt.h>
+#include <errno.h>
+
+#ifdef USE_QSOSSL
+#include <qsossl.h>
+#endif
+
+#ifdef HAVE_GSSAPI
+#include <gssapi.h>
+#endif
+
+#ifndef CURL_DISABLE_LDAP
+#include <ldap.h>
+#endif
+
+#include <netinet/in.h>
+#include <arpa/inet.h>
+
+#include "os400sys.h"
+
+
+/**
+*** QADRT OS/400 ASCII runtime defines only the most used procedures, but
+*** but a lot of them are not supported. This module implements
+*** ASCII wrappers for those that are used by libcurl, but not
+*** defined by QADRT.
+**/
+
+#pragma convert(0) /* Restore EBCDIC. */
+
+
+#define MIN_BYTE_GAIN 1024 /* Minimum gain when shortening a buffer. */
+
+typedef struct {
+ unsigned long size; /* Buffer size. */
+ char * buf; /* Buffer address. */
+} buffer_t;
+
+
+static char * buffer_undef(localkey_t key, long size);
+static char * buffer_threaded(localkey_t key, long size);
+static char * buffer_unthreaded(localkey_t key, long size);
+
+static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
+static pthread_key_t thdkey;
+static buffer_t * locbufs;
+
+char * (* Curl_thread_buffer)(localkey_t key, long size) = buffer_undef;
+
+
+static void
+thdbufdestroy(void * private)
+
+{
+ localkey_t i;
+ buffer_t * p;
+
+ if (private) {
+ p = (buffer_t *) private;
+
+ for (i = (localkey_t) 0; i < LK_LAST; i++) {
+ if (p->buf)
+ free(p->buf);
+
+ p++;
+ }
+
+ free(private);
+ }
+}
+
+
+static void
+terminate(void)
+
+{
+ if (Curl_thread_buffer == buffer_threaded) {
+ locbufs = pthread_getspecific(thdkey);
+ pthread_setspecific(thdkey, (void *) NULL);
+ pthread_key_delete(thdkey);
+ }
+
+ if (Curl_thread_buffer != buffer_undef) {
+ thdbufdestroy((void *) locbufs);
+ locbufs = (buffer_t *) NULL;
+ }
+
+ Curl_thread_buffer = buffer_undef;
+}
+
+
+static char *
+get_buffer(buffer_t * buf, long size)
+
+{
+ char * cp;
+
+ /* If `size' >= 0, make sure buffer at `buf' is at least `size'-byte long.
+ Return the buffer address. */
+
+ if (size < 0)
+ return buf->buf;
+
+ if (!buf->buf) {
+ if ((buf->buf = malloc(size)))
+ buf->size = size;
+
+ return buf->buf;
+ }
+
+ if ((unsigned long) size <= buf->size) {
+ /* Shorten the buffer only if it frees a significant byte count. This
+ avoids some realloc() overhead. */
+
+ if (buf->size - size < MIN_BYTE_GAIN)
+ return buf->buf;
+ }
+
+ /* Resize the buffer. */
+
+ if ((cp = realloc(buf->buf, size))) {
+ buf->buf = cp;
+ buf->size = size;
+ }
+ else if (size <= buf->size)
+ cp = buf->buf;
+
+ return cp;
+}
+
+
+static char *
+buffer_unthreaded(localkey_t key, long size)
+
+{
+ return get_buffer(locbufs + key, size);
+}
+
+
+static char *
+buffer_threaded(localkey_t key, long size)
+
+{
+ buffer_t * bufs;
+
+ /* Get the buffer for the given local key in the current thread, and
+ make sure it is at least `size'-byte long. Set `size' to < 0 to get
+ its address only. */
+
+ bufs = (buffer_t *) pthread_getspecific(thdkey);
+
+ if (!bufs) {
+ if (size < 0)
+ return (char *) NULL; /* No buffer yet. */
+
+ /* Allocate buffer descriptors for the current thread. */
+
+ if (!(bufs = calloc((size_t) LK_LAST, sizeof *bufs)))
+ return (char *) NULL;
+
+ if (pthread_setspecific(thdkey, (void *) bufs)) {
+ free(bufs);
+ return (char *) NULL;
+ }
+ }
+
+ return get_buffer(bufs + key, size);
+}
+
+
+static char *
+buffer_undef(localkey_t key, long size)
+
+{
+ /* Define the buffer system, get the buffer for the given local key in
+ the current thread, and make sure it is at least `size'-byte long.
+ Set `size' to < 0 to get its address only. */
+
+ pthread_mutex_lock(&mutex);
+
+ /* Determine if we can use pthread-specific data. */
+
+ if (Curl_thread_buffer == buffer_undef) { /* If unchanged during lock. */
+ if (!pthread_key_create(&thdkey, thdbufdestroy))
+ Curl_thread_buffer = buffer_threaded;
+ else if (!(locbufs = calloc((size_t) LK_LAST,
+ sizeof *locbufs))) {
+ pthread_mutex_unlock(&mutex);
+ return (char *) NULL;
+ }
+ else
+ Curl_thread_buffer = buffer_unthreaded;
+
+ atexit(terminate);
+ }
+
+ pthread_mutex_unlock(&mutex);
+ return Curl_thread_buffer(key, size);
+}
+
+
+int
+Curl_getnameinfo_a(const struct sockaddr * sa, curl_socklen_t salen,
+ char * nodename, curl_socklen_t nodenamelen,
+ char * servname, curl_socklen_t servnamelen,
+ int flags)
+
+{
+ char * enodename;
+ char * eservname;
+ int status;
+ int i;
+
+ enodename = (char *) NULL;
+ eservname = (char *) NULL;
+
+ if (nodename && nodenamelen)
+ if (!(enodename = malloc(nodenamelen)))
+ return EAI_MEMORY;
+
+ if (servname && servnamelen)
+ if (!(eservname = malloc(servnamelen))) {
+ if (enodename)
+ free(enodename);
+
+ return EAI_MEMORY;
+ }
+
+ status = getnameinfo(sa, salen, enodename, nodenamelen,
+ eservname, servnamelen, flags);
+
+ if (!status) {
+ if (enodename) {
+ i = QadrtConvertE2A(nodename, enodename,
+ nodenamelen - 1, strlen(enodename));
+ nodename[i] = '\0';
+ }
+
+ if (eservname) {
+ i = QadrtConvertE2A(servname, eservname,
+ servnamelen - 1, strlen(eservname));
+ servname[i] = '\0';
+ }
+ }
+
+ if (enodename)
+ free(enodename);
+
+ if (eservname)
+ free(eservname);
+
+ return status;
+}
+
+
+int
+Curl_getaddrinfo_a(const char * nodename, const char * servname,
+ const struct addrinfo * hints,
+ struct addrinfo * * res)
+
+{
+ char * enodename;
+ char * eservname;
+ int status;
+ int i;
+
+ enodename = (char *) NULL;
+ eservname = (char *) NULL;
+
+ if (nodename) {
+ i = strlen(nodename);
+
+ if (!(enodename = malloc(i + 1)))
+ return EAI_MEMORY;
+
+ i = QadrtConvertA2E(enodename, nodename, i, i);
+ enodename[i] = '\0';
+ }
+
+ if (servname) {
+ i = strlen(servname);
+
+ if (!(eservname = malloc(i + 1))) {
+ if (enodename)
+ free(enodename);
+
+ return EAI_MEMORY;
+ }
+
+ QadrtConvertA2E(eservname, servname, i, i);
+ eservname[i] = '\0';
+ }
+
+ status = getaddrinfo(enodename, eservname, hints, res);
+
+ if (enodename)
+ free(enodename);
+
+ if (eservname)
+ free(eservname);
+
+ return status;
+}
+
+
+#ifdef USE_QSOSSL
+
+/* ASCII wrappers for the SSL procedures. */
+
+int
+Curl_SSL_Init_Application_a(SSLInitApp * init_app)
+
+{
+ int rc;
+ unsigned int i;
+ SSLInitApp ia;
+
+ if (!init_app || !init_app->applicationID || !init_app->applicationIDLen)
+ return SSL_Init_Application(init_app);
+
+ memcpy((char *) &ia, (char *) init_app, sizeof ia);
+ i = ia.applicationIDLen;
+
+ if (!(ia.applicationID = malloc(i + 1))) {
+ errno = ENOMEM;
+ return SSL_ERROR_IO;
+ }
+
+ QadrtConvertA2E(ia.applicationID, init_app->applicationID, i, i);
+ ia.applicationID[i] = '\0';
+ rc = SSL_Init_Application(&ia);
+ free(ia.applicationID);
+ init_app->localCertificateLen = ia.localCertificateLen;
+ init_app->sessionType = ia.sessionType;
+ return rc;
+}
+
+
+int
+Curl_SSL_Init_a(SSLInit * init)
+
+{
+ int rc;
+ unsigned int i;
+ SSLInit ia;
+
+ if (!init || (!init->keyringFileName && !init->keyringPassword))
+ return SSL_Init(init);
+
+ memcpy((char *) &ia, (char *) init, sizeof ia);
+
+ if (ia.keyringFileName) {
+ i = strlen(ia.keyringFileName);
+
+ if (!(ia.keyringFileName = malloc(i + 1))) {
+ errno = ENOMEM;
+ return SSL_ERROR_IO;
+ }
+
+ QadrtConvertA2E(ia.keyringFileName, init->keyringFileName, i, i);
+ ia.keyringFileName[i] = '\0';
+ }
+
+ if (ia.keyringPassword) {
+ i = strlen(ia.keyringPassword);
+
+ if (!(ia.keyringPassword = malloc(i + 1))) {
+ if (ia.keyringFileName)
+ free(ia.keyringFileName);
+
+ errno = ENOMEM;
+ return SSL_ERROR_IO;
+ }
+
+ QadrtConvertA2E(ia.keyringPassword, init->keyringPassword, i, i);
+ ia.keyringPassword[i] = '\0';
+ }
+
+ rc = SSL_Init(&ia);
+
+ if (ia.keyringFileName)
+ free(ia.keyringFileName);
+
+ if (ia.keyringPassword)
+ free(ia.keyringPassword);
+
+ return rc;
+}
+
+
+char *
+Curl_SSL_Strerror_a(int sslreturnvalue, SSLErrorMsg * serrmsgp)
+
+{
+ int i;
+ char * cp;
+ char * cp2;
+
+ cp = SSL_Strerror(sslreturnvalue, serrmsgp);
+
+ if (!cp)
+ return cp;
+
+ i = strlen(cp);
+
+ if (!(cp2 = Curl_thread_buffer(LK_SSL_ERROR, MAX_CONV_EXPANSION * i + 1)))
+ return cp2;
+
+ i = QadrtConvertE2A(cp2, cp, MAX_CONV_EXPANSION * i, i);
+ cp2[i] = '\0';
+ return cp2;
+}
+
+#endif /* USE_QSOSSL */
+
+
+#ifdef HAVE_GSSAPI
+
+/* ASCII wrappers for the GSSAPI procedures. */
+
+static int
+Curl_gss_convert_in_place(OM_uint32 * minor_status, gss_buffer_t buf)
+
+{
+ unsigned int i;
+ char * t;
+
+ /* Convert `buf' in place, from EBCDIC to ASCII.
+ If error, release the buffer and return -1. Else return 0. */
+
+ i = buf->length;
+
+ if (i) {
+ if (!(t = malloc(i))) {
+ gss_release_buffer(minor_status, buf);
+
+ if (minor_status)
+ *minor_status = ENOMEM;
+
+ return -1;
+ }
+
+ QadrtConvertE2A(t, buf->value, i, i);
+ memcpy(buf->value, t, i);
+ free(t);
+ }
+
+ return 0;
+}
+
+
+OM_uint32
+Curl_gss_import_name_a(OM_uint32 * minor_status, gss_buffer_t in_name,
+ gss_OID in_name_type, gss_name_t * out_name)
+
+{
+ int rc;
+ unsigned int i;
+ gss_buffer_desc in;
+
+ if (!in_name || !in_name->value || !in_name->length)
+ return gss_import_name(minor_status, in_name, in_name_type, out_name);
+
+ memcpy((char *) &in, (char *) in_name, sizeof in);
+ i = in.length;
+
+ if (!(in.value = malloc(i + 1))) {
+ if (minor_status)
+ *minor_status = ENOMEM;
+
+ return GSS_S_FAILURE;
+ }
+
+ QadrtConvertA2E(in.value, in_name->value, i, i);
+ ((char *) in.value)[i] = '\0';
+ rc = gss_import_name(minor_status, &in, in_name_type, out_name);
+ free(in.value);
+ return rc;
+}
+
+
+OM_uint32
+Curl_gss_display_status_a(OM_uint32 * minor_status, OM_uint32 status_value,
+ int status_type, gss_OID mech_type,
+ gss_msg_ctx_t * message_context, gss_buffer_t status_string)
+
+{
+ int rc;
+
+ rc = gss_display_status(minor_status, status_value, status_type,
+ mech_type, message_context, status_string);
+
+ if (rc != GSS_S_COMPLETE || !status_string ||
+ !status_string->length || !status_string->value)
+ return rc;
+
+ /* No way to allocate a buffer here, because it will be released by
+ gss_release_buffer(). The solution is to overwrite the EBCDIC buffer
+ with ASCII to return it. */
+
+ if (Curl_gss_convert_in_place(minor_status, status_string))
+ return GSS_S_FAILURE;
+
+ return rc;
+}
+
+
+OM_uint32
+Curl_gss_init_sec_context_a(OM_uint32 * minor_status, gss_cred_id_t cred_handle,
+ gss_ctx_id_t * context_handle,
+ gss_name_t target_name, gss_OID mech_type,
+ gss_flags_t req_flags, OM_uint32 time_req,
+ gss_channel_bindings_t input_chan_bindings,
+ gss_buffer_t input_token,
+ gss_OID * actual_mech_type,
+ gss_buffer_t output_token, gss_flags_t * ret_flags,
+ OM_uint32 * time_rec)
+
+{
+ int rc;
+ unsigned int i;
+ gss_buffer_desc in;
+ gss_buffer_t inp;
+
+ in.value = NULL;
+
+ if ((inp = input_token))
+ if (inp->length && inp->value) {
+ i = inp->length;
+
+ if (!(in.value = malloc(i + 1))) {
+ if (minor_status)
+ *minor_status = ENOMEM;
+
+ return GSS_S_FAILURE;
+ }
+
+ QadrtConvertA2E(in.value, input_token->value, i, i);
+ ((char *) in.value)[i] = '\0';
+ in.length = i;
+ inp = &in;
+ }
+
+ rc = gss_init_sec_context(minor_status, cred_handle, context_handle,
+ target_name, mech_type, req_flags, time_req,
+ input_chan_bindings, inp, actual_mech_type,
+ output_token, ret_flags, time_rec);
+
+ if (in.value)
+ free(in.value);
+
+ if (rc != GSS_S_COMPLETE || !output_token ||
+ !output_token->length || !output_token->value)
+ return rc;
+
+ /* No way to allocate a buffer here, because it will be released by
+ gss_release_buffer(). The solution is to overwrite the EBCDIC buffer
+ with ASCII to return it. */
+
+ if (Curl_gss_convert_in_place(minor_status, output_token))
+ return GSS_S_FAILURE;
+
+ return rc;
+}
+
+
+OM_uint32
+Curl_gss_delete_sec_context_a(OM_uint32 * minor_status,
+ gss_ctx_id_t * context_handle,
+ gss_buffer_t output_token)
+
+{
+ int rc;
+
+ rc = gss_delete_sec_context(minor_status, context_handle, output_token);
+
+ if (rc != GSS_S_COMPLETE || !output_token ||
+ !output_token->length || !output_token->value)
+ return rc;
+
+ /* No way to allocate a buffer here, because it will be released by
+ gss_release_buffer(). The solution is to overwrite the EBCDIC buffer
+ with ASCII to return it. */
+
+ if (Curl_gss_convert_in_place(minor_status, output_token))
+ return GSS_S_FAILURE;
+
+ return rc;
+}
+
+#endif /* HAVE_GSSAPI */
+
+
+#ifndef CURL_DISABLE_LDAP
+
+/* ASCII wrappers for the LDAP procedures. */
+
+void *
+Curl_ldap_init_a(char * host, int port)
+
+{
+ unsigned int i;
+ char * ehost;
+ void * result;
+
+ if (!host)
+ return (void *) ldap_init(host, port);
+
+ i = strlen(host);
+
+ if (!(ehost = malloc(i + 1)))
+ return (void *) NULL;
+
+ QadrtConvertA2E(ehost, host, i, i);
+ ehost[i] = '\0';
+ result = (void *) ldap_init(ehost, port);
+ free(ehost);
+ return result;
+}
+
+
+int
+Curl_ldap_simple_bind_s_a(void * ld, char * dn, char * passwd)
+
+{
+ int i;
+ char * edn;
+ char * epasswd;
+
+ edn = (char *) NULL;
+ epasswd = (char *) NULL;
+
+ if (dn) {
+ i = strlen(dn);
+
+ if (!(edn = malloc(i + 1)))
+ return LDAP_NO_MEMORY;
+
+ QadrtConvertA2E(edn, dn, i, i);
+ edn[i] = '\0';
+ }
+
+ if (passwd) {
+ i = strlen(passwd);
+
+ if (!(epasswd = malloc(i + 1))) {
+ if (edn)
+ free(edn);
+
+ return LDAP_NO_MEMORY;
+ }
+
+ QadrtConvertA2E(epasswd, passwd, i, i);
+ epasswd[i] = '\0';
+ }
+
+ i = ldap_simple_bind_s(ld, edn, epasswd);
+
+ if (epasswd)
+ free(epasswd);
+
+ if (edn)
+ free(edn);
+
+ return i;
+}
+
+
+int
+Curl_ldap_search_s_a(void * ld, char * base, int scope, char * filter,
+ char * * attrs, int attrsonly, LDAPMessage * * res)
+
+{
+ int i;
+ int j;
+ char * ebase;
+ char * efilter;
+ char * * eattrs;
+ int status;
+
+ ebase = (char *) NULL;
+ efilter = (char *) NULL;
+ eattrs = (char * *) NULL;
+ status = LDAP_SUCCESS;
+
+ if (base) {
+ i = strlen(base);
+
+ if (!(ebase = malloc(i + 1)))
+ status = LDAP_NO_MEMORY;
+ else {
+ QadrtConvertA2E(ebase, base, i, i);
+ ebase[i] = '\0';
+ }
+ }
+
+ if (filter && status == LDAP_SUCCESS) {
+ i = strlen(filter);
+
+ if (!(efilter = malloc(i + 1)))
+ status = LDAP_NO_MEMORY;
+ else {
+ QadrtConvertA2E(efilter, filter, i, i);
+ efilter[i] = '\0';
+ }
+ }
+
+ if (attrs && status == LDAP_SUCCESS) {
+ for (i = 0; attrs[i++];)
+ ;
+
+ if (!(eattrs = calloc(i, sizeof *eattrs)))
+ status = LDAP_NO_MEMORY;
+ else {
+ for (j = 0; attrs[j]; j++) {
+ i = strlen(attrs[j]);
+
+ if (!(eattrs[j] = malloc(i + 1))) {
+ status = LDAP_NO_MEMORY;
+ break;
+ }
+
+ QadrtConvertA2E(eattrs[j], attrs[j], i, i);
+ eattrs[j][i] = '\0';
+ }
+ }
+ }
+
+ if (status == LDAP_SUCCESS)
+ status = ldap_search_s(ld, ebase? ebase: "", scope,
+ efilter? efilter: "(objectclass=*)",
+ eattrs, attrsonly, res);
+
+ if (eattrs) {
+ for (j = 0; eattrs[j]; j++)
+ free(eattrs[j]);
+
+ free(eattrs);
+ }
+
+ if (efilter)
+ free(efilter);
+
+ if (ebase)
+ free(ebase);
+
+ return status;
+}
+
+
+struct berval * *
+Curl_ldap_get_values_len_a(void * ld, LDAPMessage * entry, const char * attr)
+
+{
+ int i;
+ char * cp;
+ struct berval * * result;
+
+ cp = (char *) NULL;
+
+ if (attr) {
+ i = strlen(attr);
+
+ if (!(cp = malloc(i + 1))) {
+ ldap_set_lderrno(ld, LDAP_NO_MEMORY, NULL,
+ ldap_err2string(LDAP_NO_MEMORY));
+ return (struct berval * *) NULL;
+ }
+
+ QadrtConvertA2E(cp, attr, i, i);
+ cp[i] = '\0';
+ }
+
+ result = ldap_get_values_len(ld, entry, cp);
+
+ if (cp)
+ free(cp);
+
+ /* Result data are binary in nature, so they haven't been converted to EBCDIC.
+ Therefore do not convert. */
+
+ return result;
+}
+
+
+char *
+Curl_ldap_err2string_a(int error)
+
+{
+ int i;
+ char * cp;
+ char * cp2;
+
+ cp = ldap_err2string(error);
+
+ if (!cp)
+ return cp;
+
+ i = strlen(cp);
+
+ if (!(cp2 = Curl_thread_buffer(LK_LDAP_ERROR, MAX_CONV_EXPANSION * i + 1)))
+ return cp2;
+
+ i = QadrtConvertE2A(cp2, cp, MAX_CONV_EXPANSION * i, i);
+ cp2[i] = '\0';
+ return cp2;
+}
+
+
+char *
+Curl_ldap_get_dn_a(void * ld, LDAPMessage * entry)
+
+{
+ int i;
+ char * cp;
+ char * cp2;
+
+ cp = ldap_get_dn(ld, entry);
+
+ if (!cp)
+ return cp;
+
+ i = strlen(cp);
+
+ if (!(cp2 = malloc(i + 1)))
+ return cp2;
+
+ QadrtConvertE2A(cp2, cp, i, i);
+
+ /* No way to allocate a buffer here, because it will be released by
+ ldap_memfree() and ldap_memalloc() does not exist. The solution is to
+ overwrite the EBCDIC buffer with ASCII to return it. */
+
+ strcpy(cp, cp2);
+ free(cp2);
+ return cp;
+}
+
+
+char *
+Curl_ldap_first_attribute_a(void * ld,
+ LDAPMessage * entry, BerElement * * berptr)
+
+{
+ int i;
+ char * cp;
+ char * cp2;
+
+ cp = ldap_first_attribute(ld, entry, berptr);
+
+ if (!cp)
+ return cp;
+
+ i = strlen(cp);
+
+ if (!(cp2 = malloc(i + 1)))
+ return cp2;
+
+ QadrtConvertE2A(cp2, cp, i, i);
+
+ /* No way to allocate a buffer here, because it will be released by
+ ldap_memfree() and ldap_memalloc() does not exist. The solution is to
+ overwrite the EBCDIC buffer with ASCII to return it. */
+
+ strcpy(cp, cp2);
+ free(cp2);
+ return cp;
+}
+
+
+char *
+Curl_ldap_next_attribute_a(void * ld,
+ LDAPMessage * entry, BerElement * berptr)
+
+{
+ int i;
+ char * cp;
+ char * cp2;
+
+ cp = ldap_next_attribute(ld, entry, berptr);
+
+ if (!cp)
+ return cp;
+
+ i = strlen(cp);
+
+ if (!(cp2 = malloc(i + 1)))
+ return cp2;
+
+ QadrtConvertE2A(cp2, cp, i, i);
+
+ /* No way to allocate a buffer here, because it will be released by
+ ldap_memfree() and ldap_memalloc() does not exist. The solution is to
+ overwrite the EBCDIC buffer with ASCII to return it. */
+
+ strcpy(cp, cp2);
+ free(cp2);
+ return cp;
+}
+
+#endif /* CURL_DISABLE_LDAP */
+
+
+static int
+convert_sockaddr(struct sockaddr_storage * dstaddr,
+ const struct sockaddr * srcaddr, int srclen)
+
+{
+ const struct sockaddr_un * srcu;
+ struct sockaddr_un * dstu;
+ unsigned int i;
+ unsigned int dstsize;
+
+ /* Convert a socket address into job CCSID, if needed. */
+
+ if (!srcaddr || srclen < offsetof(struct sockaddr, sa_family) +
+ sizeof srcaddr->sa_family || srclen > sizeof *dstaddr) {
+ errno = EINVAL;
+ return -1;
+ }
+
+ memcpy((char *) dstaddr, (char *) srcaddr, srclen);
+
+ switch (srcaddr->sa_family) {
+
+ case AF_UNIX:
+ srcu = (const struct sockaddr_un *) srcaddr;
+ dstu = (struct sockaddr_un *) dstaddr;
+ dstsize = sizeof *dstaddr - offsetof(struct sockaddr_un, sun_path);
+ srclen -= offsetof(struct sockaddr_un, sun_path);
+ i = QadrtConvertA2E(dstu->sun_path, srcu->sun_path, dstsize - 1, srclen);
+ dstu->sun_path[i] = '\0';
+ i += offsetof(struct sockaddr_un, sun_path);
+ srclen = i;
+ }
+
+ return srclen;
+}
+
+
+int
+Curl_os400_connect(int sd, struct sockaddr * destaddr, int addrlen)
+
+{
+ int i;
+ struct sockaddr_storage laddr;
+
+ i = convert_sockaddr(&laddr, destaddr, addrlen);
+
+ if (i < 0)
+ return -1;
+
+ return connect(sd, (struct sockaddr *) &laddr, i);
+}
+
+
+int
+Curl_os400_bind(int sd, struct sockaddr * localaddr, int addrlen)
+
+{
+ int i;
+ struct sockaddr_storage laddr;
+
+ i = convert_sockaddr(&laddr, localaddr, addrlen);
+
+ if (i < 0)
+ return -1;
+
+ return bind(sd, (struct sockaddr *) &laddr, i);
+}
+
+
+int
+Curl_os400_sendto(int sd, char * buffer, int buflen, int flags,
+ struct sockaddr * dstaddr, int addrlen)
+
+{
+ int i;
+ struct sockaddr_storage laddr;
+
+ i = convert_sockaddr(&laddr, dstaddr, addrlen);
+
+ if (i < 0)
+ return -1;
+
+ return sendto(sd, buffer, buflen, flags, (struct sockaddr *) &laddr, i);
+}
+
+
+int
+Curl_os400_recvfrom(int sd, char * buffer, int buflen, int flags,
+ struct sockaddr * fromaddr, int * addrlen)
+
+{
+ int i;
+ int rcvlen;
+ int laddrlen;
+ const struct sockaddr_un * srcu;
+ struct sockaddr_un * dstu;
+ struct sockaddr_storage laddr;
+
+ if (!fromaddr || !addrlen || *addrlen <= 0)
+ return recvfrom(sd, buffer, buflen, flags, fromaddr, addrlen);
+
+ laddrlen = sizeof laddr;
+ laddr.ss_family = AF_UNSPEC; /* To detect if unused. */
+ rcvlen = recvfrom(sd, buffer, buflen, flags,
+ (struct sockaddr *) &laddr, &laddrlen);
+
+ if (rcvlen < 0)
+ return rcvlen;
+
+ switch (laddr.ss_family) {
+
+ case AF_UNIX:
+ srcu = (const struct sockaddr_un *) &laddr;
+ dstu = (struct sockaddr_un *) fromaddr;
+ i = *addrlen - offsetof(struct sockaddr_un, sun_path);
+ laddrlen -= offsetof(struct sockaddr_un, sun_path);
+ i = QadrtConvertE2A(dstu->sun_path, srcu->sun_path, i, laddrlen);
+ laddrlen = i + offsetof(struct sockaddr_un, sun_path);
+
+ if (laddrlen < *addrlen)
+ dstu->sun_path[i] = '\0';
+
+ break;
+
+ case AF_UNSPEC:
+ break;
+
+ default:
+ if (laddrlen > *addrlen)
+ laddrlen = *addrlen;
+
+ if (laddrlen)
+ memcpy((char *) fromaddr, (char *) &laddr, laddrlen);
+
+ break;
+ }
+
+ *addrlen = laddrlen;
+ return rcvlen;
+}
diff --git a/packages/OS400/os400sys.h b/packages/OS400/os400sys.h
new file mode 100644
index 0000000..e708365
--- /dev/null
+++ b/packages/OS400/os400sys.h
@@ -0,0 +1,52 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2008, Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at http://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ *
+ ***************************************************************************/
+
+/* OS/400 additional definitions. */
+
+#ifndef __OS400_SYS_
+#define __OS400_SYS_
+
+
+/* Per-thread item identifiers. */
+
+typedef enum {
+ LK_SSL_ERROR,
+ LK_LDAP_ERROR,
+ LK_CURL_VERSION,
+ LK_VERSION_INFO,
+ LK_VERSION_INFO_DATA,
+ LK_EASY_STRERROR,
+ LK_SHARE_STRERROR,
+ LK_MULTI_STRERROR,
+ LK_LAST
+} localkey_t;
+
+
+extern char * (* Curl_thread_buffer)(localkey_t key, long size);
+
+
+/* Maximum string expansion factor due to character code conversion. */
+
+#define MAX_CONV_EXPANSION 4 /* Can deal with UTF-8. */
+
+#endif
diff --git a/packages/README b/packages/README
new file mode 100644
index 0000000..2487d95
--- /dev/null
+++ b/packages/README
@@ -0,0 +1,27 @@
+ _ _ ____ _
+ ___| | | | _ \| |
+ / __| | | | |_) | |
+ | (__| |_| | _ <| |___
+ \___|\___/|_| \_\_____|
+
+PACKAGES
+
+ This directory and all its subdirectories are for special package
+information, template, scripts and docs. The files herein should be of use for
+those of you who want to package curl in a binary or source format using one
+of those custom formats.
+
+ The hierarchy for these directories is something like this:
+
+ packages/[OS]/[FORMAT]/
+
+ Currently, we have Win32 and Linux for [OS]. There might be different formats
+for the same OS so for Linux we have RPM as format.
+
+ We might need to add some differentiation for CPU as well, as there is
+Linux-RPMs for several CPUs. However, it might not be necessary since the
+packaging should be pretty much the same no matter what CPU that is used.
+
+ For each unique OS-FORMAT pair, there's a directory to "fill"! I'd like to
+see a single README with as much details as possible, and then I'd like some
+template files for the package process.
diff --git a/packages/Solaris/Makefile.am b/packages/Solaris/Makefile.am
new file mode 100644
index 0000000..d012947
--- /dev/null
+++ b/packages/Solaris/Makefile.am
@@ -0,0 +1,38 @@
+#
+#
+
+PKGADD_PKG="@PKGADD_PKG@"
+PKGADD_NAME="@PACKAGE@-@VERSION@ - @PKGADD_NAME@"
+PKGADD_VENDOR="@PKGADD_VENDOR@"
+PKGADD_ARCH="@host_cpu@"
+PKGADD_DESC="@PACKAGE@-@VERSION@ - @PKGADD_NAME@"
+PKGADD_CLASSES=none
+PKGADD_BASEDIR=/
+
+PKGADD_FILE=${PKGADD_PKG}-@PACKAGE@-@VERSION@-@host@.pkg
+
+package:
+ if [ ! -f release ]; then echo 0 > release; fi
+ if [ `find root -newer release -print|wc -l` -gt 0 ]; then expr `cat release` + 1 > release; fi
+ echo PKG=${PKGADD_PKG} > pkginfo
+ echo NAME=${PKGADD_NAME} >> pkginfo
+ echo VENDOR=${PKGADD_VENDOR} >> pkginfo
+ echo ARCH=${PKGADD_ARCH} >> pkginfo
+ echo DESC=${PKGADD_DESC} >> pkginfo
+ echo CLASSES=${PKGADD_CLASSES} >> pkginfo
+ echo BASEDIR=${PKGADD_BASEDIR} >> pkginfo
+ echo CATEGORY=application >> pkginfo
+ echo VERSION=`cat ./release` >> pkginfo
+ echo > prototype
+ for subdir in opt var etc usr; \
+ do if [ -d root/$$subdir ]; then \
+ pkgproto root/$$subdir=$$subdir >> prototype;\
+ fi; done
+ for file in pkginfo preinstall postinstall copyright; \
+ do if [ -f $$file ]; then \
+ echo "i $$file=$$file" >> prototype; \
+ fi; done
+ rm -rf ./tmp
+ mkdir ./tmp
+ pkgmk -o -d ./tmp
+ pkgtrans -so ./tmp ${top_srcdir}/../${PKGADD_FILE} ${PKGADD_PKG}
diff --git a/packages/Solaris/Makefile.in b/packages/Solaris/Makefile.in
new file mode 100644
index 0000000..56809ca
--- /dev/null
+++ b/packages/Solaris/Makefile.in
@@ -0,0 +1,438 @@
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005 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.
+
+@SET_MAKE@
+
+#
+#
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = packages/Solaris
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
+ $(top_srcdir)/m4/curl-confopts.m4 \
+ $(top_srcdir)/m4/curl-functions.m4 \
+ $(top_srcdir)/m4/curl-override.m4 \
+ $(top_srcdir)/m4/curl-reentrant.m4 \
+ $(top_srcdir)/m4/curl-system.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/lib/curl_config.h \
+ $(top_builddir)/src/curl_config.h \
+ $(top_builddir)/include/curl/curlbuild.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_LIBHOSTNAME_FALSE = @BUILD_LIBHOSTNAME_FALSE@
+BUILD_LIBHOSTNAME_TRUE = @BUILD_LIBHOSTNAME_TRUE@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_OPTIONS = @CONFIGURE_OPTIONS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CROSSCOMPILING_FALSE = @CROSSCOMPILING_FALSE@
+CROSSCOMPILING_TRUE = @CROSSCOMPILING_TRUE@
+CURLDEBUG_FALSE = @CURLDEBUG_FALSE@
+CURLDEBUG_TRUE = @CURLDEBUG_TRUE@
+CURL_CA_BUNDLE = @CURL_CA_BUNDLE@
+CURL_CFLAG_EXTRAS = @CURL_CFLAG_EXTRAS@
+CURL_DISABLE_DICT = @CURL_DISABLE_DICT@
+CURL_DISABLE_FILE = @CURL_DISABLE_FILE@
+CURL_DISABLE_FTP = @CURL_DISABLE_FTP@
+CURL_DISABLE_GOPHER = @CURL_DISABLE_GOPHER@
+CURL_DISABLE_HTTP = @CURL_DISABLE_HTTP@
+CURL_DISABLE_IMAP = @CURL_DISABLE_IMAP@
+CURL_DISABLE_LDAP = @CURL_DISABLE_LDAP@
+CURL_DISABLE_LDAPS = @CURL_DISABLE_LDAPS@
+CURL_DISABLE_POP3 = @CURL_DISABLE_POP3@
+CURL_DISABLE_PROXY = @CURL_DISABLE_PROXY@
+CURL_DISABLE_RTSP = @CURL_DISABLE_RTSP@
+CURL_DISABLE_SMTP = @CURL_DISABLE_SMTP@
+CURL_DISABLE_TELNET = @CURL_DISABLE_TELNET@
+CURL_DISABLE_TFTP = @CURL_DISABLE_TFTP@
+CURL_LIBS = @CURL_LIBS@
+CURL_NETWORK_LIBS = @CURL_NETWORK_LIBS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_SHARED = @ENABLE_SHARED@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_LDAP_SSL = @HAVE_LDAP_SSL@
+HAVE_LIBZ = @HAVE_LIBZ@
+HAVE_LIBZ_FALSE = @HAVE_LIBZ_FALSE@
+HAVE_LIBZ_TRUE = @HAVE_LIBZ_TRUE@
+HAVE_PK11_CREATEGENERICOBJECT = @HAVE_PK11_CREATEGENERICOBJECT@
+IDN_ENABLED = @IDN_ENABLED@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+IPV6_ENABLED = @IPV6_ENABLED@
+KRB4_ENABLED = @KRB4_ENABLED@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBCURL_LIBS = @LIBCURL_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+MANOPT = @MANOPT@
+MIMPURE_FALSE = @MIMPURE_FALSE@
+MIMPURE_TRUE = @MIMPURE_TRUE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NO_UNDEFINED_FALSE = @NO_UNDEFINED_FALSE@
+NO_UNDEFINED_TRUE = @NO_UNDEFINED_TRUE@
+NROFF = @NROFF@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH = @PATH@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+PKGADD_NAME = "@PACKAGE@-@VERSION@ - @PKGADD_NAME@"
+PKGADD_PKG = "@PKGADD_PKG@"
+PKGADD_VENDOR = "@PKGADD_VENDOR@"
+PKGCONFIG = @PKGCONFIG@
+RANDOM_FILE = @RANDOM_FILE@
+RANLIB = @RANLIB@
+REQUIRE_LIB_DEPS = @REQUIRE_LIB_DEPS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SONAME_BUMP_FALSE = @SONAME_BUMP_FALSE@
+SONAME_BUMP_TRUE = @SONAME_BUMP_TRUE@
+SSL_ENABLED = @SSL_ENABLED@
+STATICLIB_FALSE = @STATICLIB_FALSE@
+STATICLIB_TRUE = @STATICLIB_TRUE@
+STRIP = @STRIP@
+SUPPORT_FEATURES = @SUPPORT_FEATURES@
+SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
+TEST_SERVER_LIBS = @TEST_SERVER_LIBS@
+USE_ARES = @USE_ARES@
+USE_EMBEDDED_ARES_FALSE = @USE_EMBEDDED_ARES_FALSE@
+USE_EMBEDDED_ARES_TRUE = @USE_EMBEDDED_ARES_TRUE@
+USE_GNUTLS = @USE_GNUTLS@
+USE_LIBRTMP = @USE_LIBRTMP@
+USE_LIBSSH2 = @USE_LIBSSH2@
+USE_MANUAL_FALSE = @USE_MANUAL_FALSE@
+USE_MANUAL_TRUE = @USE_MANUAL_TRUE@
+USE_NSS = @USE_NSS@
+USE_OPENLDAP = @USE_OPENLDAP@
+USE_POLARSSL = @USE_POLARSSL@
+USE_SSLEAY = @USE_SSLEAY@
+USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
+VERSION = @VERSION@
+VERSIONNUM = @VERSIONNUM@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+libext = @libext@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+PKGADD_ARCH = "@host_cpu@"
+PKGADD_DESC = "@PACKAGE@-@VERSION@ - @PKGADD_NAME@"
+PKGADD_CLASSES = none
+PKGADD_BASEDIR = /
+PKGADD_FILE = ${PKGADD_PKG}-@PACKAGE@-@VERSION@-@host@.pkg
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign packages/Solaris/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --foreign packages/Solaris/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+ -rm -f libtool
+uninstall-info-am:
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ list='$(DISTFILES)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkdir_p) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-libtool
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ distclean distclean-generic distclean-libtool distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-exec install-exec-am \
+ install-info install-info-am install-man install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+ uninstall-info-am
+
+
+package:
+ if [ ! -f release ]; then echo 0 > release; fi
+ if [ `find root -newer release -print|wc -l` -gt 0 ]; then expr `cat release` + 1 > release; fi
+ echo PKG=${PKGADD_PKG} > pkginfo
+ echo NAME=${PKGADD_NAME} >> pkginfo
+ echo VENDOR=${PKGADD_VENDOR} >> pkginfo
+ echo ARCH=${PKGADD_ARCH} >> pkginfo
+ echo DESC=${PKGADD_DESC} >> pkginfo
+ echo CLASSES=${PKGADD_CLASSES} >> pkginfo
+ echo BASEDIR=${PKGADD_BASEDIR} >> pkginfo
+ echo CATEGORY=application >> pkginfo
+ echo VERSION=`cat ./release` >> pkginfo
+ echo > prototype
+ for subdir in opt var etc usr; \
+ do if [ -d root/$$subdir ]; then \
+ pkgproto root/$$subdir=$$subdir >> prototype;\
+ fi; done
+ for file in pkginfo preinstall postinstall copyright; \
+ do if [ -f $$file ]; then \
+ echo "i $$file=$$file" >> prototype; \
+ fi; done
+ rm -rf ./tmp
+ mkdir ./tmp
+ pkgmk -o -d ./tmp
+ pkgtrans -so ./tmp ${top_srcdir}/../${PKGADD_FILE} ${PKGADD_PKG}
+# 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/packages/Symbian/bwins/libcurlu.def b/packages/Symbian/bwins/libcurlu.def
new file mode 100644
index 0000000..4d693a9
--- /dev/null
+++ b/packages/Symbian/bwins/libcurlu.def
@@ -0,0 +1,60 @@
+EXPORTS
+ curl_easy_cleanup @ 1 NONAME
+ curl_easy_duphandle @ 2 NONAME
+ curl_easy_escape @ 3 NONAME
+ curl_easy_getinfo @ 4 NONAME
+ curl_easy_init @ 5 NONAME
+ curl_easy_pause @ 6 NONAME
+ curl_easy_perform @ 7 NONAME
+ curl_easy_reset @ 8 NONAME
+ curl_easy_setopt @ 9 NONAME
+ curl_easy_strerror @ 10 NONAME
+ curl_easy_unescape @ 11 NONAME
+ curl_escape @ 12 NONAME
+ curl_formadd @ 13 NONAME
+ curl_formfree @ 14 NONAME
+ curl_formget @ 15 NONAME
+ curl_free @ 16 NONAME
+ curl_getdate @ 17 NONAME
+ curl_getenv @ 18 NONAME
+ curl_global_cleanup @ 19 NONAME
+ curl_global_init @ 20 NONAME
+ curl_global_init_mem @ 21 NONAME
+ curl_maprintf @ 22 NONAME
+ curl_mfprintf @ 23 NONAME
+ curl_mprintf @ 24 NONAME
+ curl_msnprintf @ 25 NONAME
+ curl_msprintf @ 26 NONAME
+ curl_multi_add_handle @ 27 NONAME
+ curl_multi_assign @ 28 NONAME
+ curl_multi_cleanup @ 29 NONAME
+ curl_multi_fdset @ 30 NONAME
+ curl_multi_info_read @ 31 NONAME
+ curl_multi_init @ 32 NONAME
+ curl_multi_perform @ 33 NONAME
+ curl_multi_remove_handle @ 34 NONAME
+ curl_multi_setopt @ 35 NONAME
+ curl_multi_socket @ 36 NONAME
+ curl_multi_socket_action @ 37 NONAME
+ curl_multi_socket_all @ 38 NONAME
+ curl_multi_strerror @ 39 NONAME
+ curl_multi_timeout @ 40 NONAME
+ curl_mvaprintf @ 41 NONAME
+ curl_mvfprintf @ 42 NONAME
+ curl_mvprintf @ 43 NONAME
+ curl_mvsnprintf @ 44 NONAME
+ curl_mvsprintf @ 45 NONAME
+ curl_share_cleanup @ 46 NONAME
+ curl_share_init @ 47 NONAME
+ curl_share_setopt @ 48 NONAME
+ curl_share_strerror @ 49 NONAME
+ curl_slist_append @ 50 NONAME
+ curl_slist_free_all @ 51 NONAME
+ curl_strequal @ 52 NONAME
+ curl_strnequal @ 53 NONAME
+ curl_unescape @ 54 NONAME
+ curl_version @ 55 NONAME
+ curl_version_info @ 56 NONAME
+ curl_easy_recv @ 57 NONAME
+ curl_easy_send @ 58 NONAME
+
diff --git a/packages/Symbian/eabi/libcurlu.def b/packages/Symbian/eabi/libcurlu.def
new file mode 100644
index 0000000..4d693a9
--- /dev/null
+++ b/packages/Symbian/eabi/libcurlu.def
@@ -0,0 +1,60 @@
+EXPORTS
+ curl_easy_cleanup @ 1 NONAME
+ curl_easy_duphandle @ 2 NONAME
+ curl_easy_escape @ 3 NONAME
+ curl_easy_getinfo @ 4 NONAME
+ curl_easy_init @ 5 NONAME
+ curl_easy_pause @ 6 NONAME
+ curl_easy_perform @ 7 NONAME
+ curl_easy_reset @ 8 NONAME
+ curl_easy_setopt @ 9 NONAME
+ curl_easy_strerror @ 10 NONAME
+ curl_easy_unescape @ 11 NONAME
+ curl_escape @ 12 NONAME
+ curl_formadd @ 13 NONAME
+ curl_formfree @ 14 NONAME
+ curl_formget @ 15 NONAME
+ curl_free @ 16 NONAME
+ curl_getdate @ 17 NONAME
+ curl_getenv @ 18 NONAME
+ curl_global_cleanup @ 19 NONAME
+ curl_global_init @ 20 NONAME
+ curl_global_init_mem @ 21 NONAME
+ curl_maprintf @ 22 NONAME
+ curl_mfprintf @ 23 NONAME
+ curl_mprintf @ 24 NONAME
+ curl_msnprintf @ 25 NONAME
+ curl_msprintf @ 26 NONAME
+ curl_multi_add_handle @ 27 NONAME
+ curl_multi_assign @ 28 NONAME
+ curl_multi_cleanup @ 29 NONAME
+ curl_multi_fdset @ 30 NONAME
+ curl_multi_info_read @ 31 NONAME
+ curl_multi_init @ 32 NONAME
+ curl_multi_perform @ 33 NONAME
+ curl_multi_remove_handle @ 34 NONAME
+ curl_multi_setopt @ 35 NONAME
+ curl_multi_socket @ 36 NONAME
+ curl_multi_socket_action @ 37 NONAME
+ curl_multi_socket_all @ 38 NONAME
+ curl_multi_strerror @ 39 NONAME
+ curl_multi_timeout @ 40 NONAME
+ curl_mvaprintf @ 41 NONAME
+ curl_mvfprintf @ 42 NONAME
+ curl_mvprintf @ 43 NONAME
+ curl_mvsnprintf @ 44 NONAME
+ curl_mvsprintf @ 45 NONAME
+ curl_share_cleanup @ 46 NONAME
+ curl_share_init @ 47 NONAME
+ curl_share_setopt @ 48 NONAME
+ curl_share_strerror @ 49 NONAME
+ curl_slist_append @ 50 NONAME
+ curl_slist_free_all @ 51 NONAME
+ curl_strequal @ 52 NONAME
+ curl_strnequal @ 53 NONAME
+ curl_unescape @ 54 NONAME
+ curl_version @ 55 NONAME
+ curl_version_info @ 56 NONAME
+ curl_easy_recv @ 57 NONAME
+ curl_easy_send @ 58 NONAME
+
diff --git a/packages/Symbian/group/bld.inf b/packages/Symbian/group/bld.inf
new file mode 100644
index 0000000..354a843
--- /dev/null
+++ b/packages/Symbian/group/bld.inf
@@ -0,0 +1,10 @@
+//
+// libcurl and curl bld.inf file for Symbian OS
+//
+PRJ_EXPORTS
+ libcurl.iby /epoc32/rom/include/libcurl.iby
+ curl.iby /epoc32/rom/include/curl.iby
+
+PRJ_MMPFILES
+ libcurl.mmp
+ curl.mmp
diff --git a/packages/Symbian/group/curl.iby b/packages/Symbian/group/curl.iby
new file mode 100644
index 0000000..7921aaa
--- /dev/null
+++ b/packages/Symbian/group/curl.iby
@@ -0,0 +1,15 @@
+//
+// curl file transfer utility command-line utility
+//
+// Use this file with buildrom to add curl to a device ROM
+//
+
+#ifndef CURL_IBY
+#define CURL_IBY
+
+#include <openenv.iby>
+#include <libcurl.iby>
+
+file=ABI_DIR\BUILD_DIR\curl.exe \sys\bin\curl.exe
+
+#endif // CURL_IBY
diff --git a/packages/Symbian/group/curl.mmp b/packages/Symbian/group/curl.mmp
new file mode 100644
index 0000000..b25013c
--- /dev/null
+++ b/packages/Symbian/group/curl.mmp
@@ -0,0 +1,28 @@
+//
+// cURL network retrieval client
+//
+
+TARGET curl.exe
+TARGETTYPE exe
+UID 0x00000000 0xF0206442
+
+SOURCEPATH ../../../src
+SOURCE \
+ main.c hugehelp.c urlglob.c writeout.c writeenv.c \
+ getpass.c homedir.c curlutil.c
+
+SOURCEPATH ../../../lib
+SOURCE \
+ rawstr.c nonblock.c
+
+USERINCLUDE ../../../src ../../../lib ../../../include/curl
+
+SYSTEMINCLUDE ../../../include /epoc32/include /epoc32/include/stdapis
+
+LIBRARY euser.lib libc.lib libcurl.lib
+STATICLIBRARY libcrt0.lib
+
+CAPABILITY NetworkServices
+
+EPOCSTACKSIZE 0x8000
+
diff --git a/packages/Symbian/group/curl.pkg b/packages/Symbian/group/curl.pkg
new file mode 100644
index 0000000..dfc994f
--- /dev/null
+++ b/packages/Symbian/group/curl.pkg
@@ -0,0 +1,26 @@
+; curl package defintion file
+; Use with makesis to create a Symbian .sis package
+
+;Language - standard language definitions
+&EN
+
+;Header - standard sis file header including version number
+;Version scheme: curl's major, curl's minor, curl's subminor*100 + build number
+; e.g. The third Symbian package of curl ver. 7.20.1 would have a SIS package
+; version of 7, 20, 103
+#{"curl"}, (0xF0206442), 7, 20, <please_update_version>, TYPE=SA
+
+; Vendor name
+%{"curl project"}
+:"curl project"
+
+; Embedded component
+@"libcurl.sis",(0xF0206D00)
+
+; A dependency on P.I.P.S. and the stdio server are probably good to have here
+;(0x20009A80), *, *, *, {"Open C Standard Libraries"}
+;(0x20009A81), *, *, *, {"P.I.P.S. for UIQ 3"}
+;(0x20009AA2), *, *, *, {"Symbian OS STDIOSERVER"}
+
+;Files - standard file specifications
+"\epoc32\release\armv5\urel\curl.exe" - "$:\sys\bin\curl.exe"
diff --git a/packages/Symbian/group/libcurl.iby b/packages/Symbian/group/libcurl.iby
new file mode 100644
index 0000000..373f5b3
--- /dev/null
+++ b/packages/Symbian/group/libcurl.iby
@@ -0,0 +1,14 @@
+//
+// libcurl file transfer DLL
+//
+// Use this file with buildrom to add libcurl to a device ROM
+//
+
+#ifndef LIBCURL_IBY
+#define LIBCURL_IBY
+
+#include <openenv.iby>
+
+file=ABI_DIR\BUILD_DIR\libcurl.dll \sys\bin\libcurl.dll
+
+#endif // LIBCURL_IBY
diff --git a/packages/Symbian/group/libcurl.mmp b/packages/Symbian/group/libcurl.mmp
new file mode 100644
index 0000000..c060024
--- /dev/null
+++ b/packages/Symbian/group/libcurl.mmp
@@ -0,0 +1,59 @@
+//
+// libcurl.dll cURL network retrieval client library
+//
+
+// Build-time options (uncomment these to enable)
+#define ENABLE_ZLIB // Enable gzip/deflate decompression
+//#define ENABLE_SSL // Enable SSL for HTTPS/FTPS (requires S60 Open C SDK)
+
+TARGET libcurl.dll
+TARGETTYPE dll
+UID 0x1000008d 0xF0206D00
+
+MACRO BUILDING_LIBCURL
+
+#ifdef ENABLE_ZLIB
+MACRO HAVE_LIBZ
+#endif
+#ifdef ENABLE_SSL
+MACRO USE_SSLEAY
+#endif
+
+SOURCEPATH ../../../lib
+SOURCE \
+ file.c timeval.c base64.c hostip.c progress.c formdata.c \
+ cookie.c http.c sendf.c ftp.c url.c dict.c if2ip.c speedcheck.c \
+ ldap.c ssluse.c version.c getenv.c escape.c mprintf.c telnet.c \
+ netrc.c getinfo.c transfer.c strequal.c easy.c security.c krb4.c \
+ curl_fnmatch.c fileinfo.c ftplistparser.c wildcard.c krb5.c \
+ memdebug.c http_chunks.c strtok.c connect.c llist.c hash.c multi.c \
+ content_encoding.c share.c http_digest.c md4.c md5.c curl_rand.c \
+ http_negotiate.c http_ntlm.c inet_pton.c strtoofft.c strerror.c \
+ hostares.c hostasyn.c hostip4.c hostip6.c hostsyn.c hostthre.c \
+ inet_ntop.c parsedate.c select.c gtls.c sslgen.c tftp.c splay.c \
+ strdup.c socks.c ssh.c nss.c qssl.c rawstr.c curl_addrinfo.c \
+ socks_gssapi.c socks_sspi.c curl_sspi.c slist.c nonblock.c \
+ curl_memrchr.c imap.c pop3.c smtp.c pingpong.c rtsp.c curl_threads.c \
+ warnless.c hmac.c polarssl.c curl_rtmp.c openldap.c curl_gethostname.c\
+ gopher.c
+
+USERINCLUDE ../../../lib ../../../include/curl
+#ifdef ENABLE_SSL
+SYSTEMINCLUDE /epoc32/include/osextensions/stdapis
+// Older versions of the SDK need this instead:
+//USERINCLUDE /epoc32/include/stdapis/openssl
+#endif
+
+SYSTEMINCLUDE ../../../include /epoc32/include/stdapis /epoc32/include
+
+LIBRARY euser.lib libc.lib
+#ifdef ENABLE_ZLIB
+LIBRARY ezlib.lib
+#endif
+#ifdef ENABLE_SSL
+LIBRARY libssl.lib libcrypto.lib
+#endif
+
+CAPABILITY NetworkServices
+
+EPOCALLOWDLLDATA
diff --git a/packages/Symbian/group/libcurl.pkg b/packages/Symbian/group/libcurl.pkg
new file mode 100644
index 0000000..1460a59
--- /dev/null
+++ b/packages/Symbian/group/libcurl.pkg
@@ -0,0 +1,22 @@
+; libcurl package defintion file
+; Use with makesis to create a Symbian .sis package
+
+;Language - standard language definitions
+&EN
+
+;Header - standard sis file header including version number
+;Version scheme: curl's major, curl's minor, curl's subminor*100 + build number
+; e.g. The third Symbian package of curl ver. 7.20.1 would have a SIS package
+; version of 7, 20, 103
+#{"libcurl"}, (0xF0206D00), 7, 20, <please_update_version>, TYPE=SA
+
+; Vendor name
+%{"curl project"}
+:"curl project"
+
+; A dependency on P.I.P.S. is probably a good idea to add here
+;(0x20009A80), *, *, *, {"Open C Standard Libraries"}
+;(0x20009A81), *, *, *, {"P.I.P.S. for UIQ 3"}
+
+;Files - standard file specifications
+"\epoc32\release\armv5\urel\libcurl.dll" - "$:\sys\bin\libcurl.dll"
diff --git a/packages/Symbian/readme.txt b/packages/Symbian/readme.txt
new file mode 100644
index 0000000..57b899f
--- /dev/null
+++ b/packages/Symbian/readme.txt
@@ -0,0 +1,93 @@
+Curl on Symbian OS
+==================
+This is a basic port of curl and libcurl to Symbian OS. The port is
+a straightforward one using Symbian's P.I.P.S. POSIX compatibility
+layer, which was first available for OS version 9.1. A more complete
+port would involve writing a Symbian C++ binding, or wrapping libcurl
+as a Symbian application server with a C++ API to handle requests
+from client applications as well as creating a GUI application to allow
+file transfers. The author has no current plans to do so.
+
+This means that integration with standard Symbian OS programs can be
+tricky, since libcurl isn't designed with Symbian's native asynchronous
+message passing idioms in mind. However, it may be possible to use libcurl
+in an active object-based application through libcurl's multi interface.
+The port is most easily used when porting POSIX applications to Symbian
+OS using P.I.P.S. (a.k.a. Open C).
+
+libcurl is built as a standard Symbian ordinal-linked DLL, and curl is
+built as a text mode EXE application. They have not been Symbian
+Signed, which is required in order to install them on most phones.
+
+Following are some things to keep in mind when using this port.
+
+
+curl notes
+----------
+When starting curl in the Windows emulator from the Windows command-line,
+place a double-dash -- before the first curl command-line option.
+e.g. \epoc32\release\winscw\udeb\curl -- -v http://localhost/
+Failure to do so may mean that some of your options won't be correctly
+processed.
+
+Symbian's ESHELL allows for redirecting stdin and stdout to files, but
+stderr goes to the epocwind.out file (on the emulator). The standard
+curl options -o, --stderr and --trace-ascii can be used to
+redirect output to a file (or stdout) instead.
+
+P.I.P.S. doesn't inherit the current working directory at startup from
+the shell, so relative path names are always relative to
+C:\Private\f0206442\.
+
+P.I.P.S. provides no way to disable echoing of characters as they are
+entered, so passwords typed in on the console will be visible. It also
+line buffers keyboard input so interactive telnet sessions are not very
+feasible.
+
+All screen output disappears after curl exits, so after a command completes,
+curl waits by default for Enter to be pressed before exiting. This behaviour
+is suppressed when the -s option is given.
+
+curl's "home directory" in Symbian is C:\Private\f0206442\. The .curlrc file
+is read from this directory on startup.
+
+
+libcurl notes
+-------------
+libcurl uses writable static data, so the EPOCALLOWDLLDATA option is
+used in its MMP file, with the corresponding additional memory usage
+and limitations on the Windows emulator.
+
+curl_global_init() *must* be called (either explicitly or implicitly through
+calling certain other libcurl functions) before any libcurl functions
+that could allocate memory (like curl_getenv()).
+
+P.I.P.S. doesn't support signals or the alarm() call, so some timeouts
+(such as the connect timeout) are not honoured. This should not be
+an issue once support for CURLRES_THREADED is added for Symbian.
+
+P.I.P.S. causes a USER:87 panic if certain timeouts much longer than
+half an hour are selected.
+
+LDAP, SCP or SFTP methods are not supported due to lack of support for
+the dependent libaries on Symbian.
+
+gzip and deflate decompression is supported when the appropriate macro
+is uncommented in the libcurl.mmp file.
+
+SSL/TLS encryption is not enabled by default, but it is possible to add
+when the OpenSSL libraries included in the S60 Open C SDK are available.
+The appropriate macro in the libcurl.mmp file must be uncommented to
+enable support.
+
+NTLM authentication may not work on some servers due to the lack of
+MD4 support in the OpenSSL libraries included with Open C.
+
+Debug builds are not supported (i.e. --enable-debug) because they cause
+additional symbol exports in the library which are not frozen in the .def
+files.
+
+
+Dan Fandrich
+dan@coneharvesters.com
+March 2010
diff --git a/packages/TPF/curl.mak b/packages/TPF/curl.mak
new file mode 100644
index 0000000..6e93404
--- /dev/null
+++ b/packages/TPF/curl.mak
@@ -0,0 +1,61 @@
+#######################################################################
+# #
+# MAKEFILE NAME..... curl.mak #
+# #
+# DESCRIPTION..... This is the makefile for libcurl. #
+# #
+#######################################################################
+
+APP := CURL
+
+TPF_RUN_TPFSOCHK := NO
+
+#######################################################################
+# Define any additional libs needed to link
+#######################################################################
+
+LIBS := CRYP CSSL
+
+#######################################################################
+# Define the envs needed to build this module
+#######################################################################
+
+maketpf_env := curllib
+maketpf_env += openssl
+maketpf_env += base_rt
+maketpf_env += system
+
+#######################################################################
+# Segments to be compiled with gcc compiler
+#######################################################################
+#
+### lib directory:
+include $(word 1,$(wildcard $(foreach d,$(TPF_ROOT),$d/opensource/curl/lib/Makefile.inc)) Makefile.inc_not_found)
+C_SRC := $(CSOURCES)
+
+#######################################################################
+# Additions and overrides for gcc compiler flags
+#######################################################################
+
+# suppress expected warnings in the ported code:
+CFLAGS_CURL += -w
+
+# use SSL
+# (overrides Curl's lib/config-tpf.h file)
+CFLAGS_CURL += -DUSE_OPENSSL
+CFLAGS_CURL += -DUSE_SSLEAY
+
+# disable all protocols except FTP and HTTP
+# (overrides Curl's lib/config-tpf.h file)
+CFLAGS_CURL += -DCURL_DISABLE_DICT
+CFLAGS_CURL += -DCURL_DISABLE_FILE
+CFLAGS_CURL += -DCURL_DISABLE_LDAP
+CFLAGS_CURL += -DCURL_DISABLE_TELNET
+CFLAGS_CURL += -DCURL_DISABLE_TFTP
+
+#######################################################################
+# Include the maketpf.rules
+#######################################################################
+
+include maketpf.rules
+
diff --git a/packages/TPF/maketpf.env_curl b/packages/TPF/maketpf.env_curl
new file mode 100644
index 0000000..91a2573
--- /dev/null
+++ b/packages/TPF/maketpf.env_curl
@@ -0,0 +1,25 @@
+################################################################################
+################################################################################
+#env TPF CURL Includes
+################################################################################
+################################################################################
+
+################################################################################
+# Define the directories where the shared objects reside
+################################################################################
+
+ROOTLIBDIRS := $(foreach d,$(TPF_ROOT),$d/opensource/curl/output/lib)
+
+################################################################################
+# Set the include/header file directories
+################################################################################
+
+ROOTINCDIRS := $(foreach d,$(TPF_ROOT_LM),$d/opensource/curl/include)
+ROOTINCDIRS += $(foreach d,$(TPF_ROOT_LM),$d/opensource/curl/include/curl)
+
+################################################################################
+# Define "TPF" to enable TPF-specific code in Curl files.
+################################################################################
+
+CFLAGS_$(APP) += -D TPF
+
diff --git a/packages/TPF/maketpf.env_curllib b/packages/TPF/maketpf.env_curllib
new file mode 100644
index 0000000..f6ad5ba
--- /dev/null
+++ b/packages/TPF/maketpf.env_curllib
@@ -0,0 +1,57 @@
+################################################################################
+################################################################################
+#env TPF CURL Library Source and Output
+################################################################################
+################################################################################
+
+################################################################################
+# Define the directories where the shared objects reside
+################################################################################
+
+ROOTLIBDIRS := $(foreach d,$(TPF_ROOT),$d/opensource/curl/output/lib)
+
+################################################################################
+# Define the directories where the loadables (XXXXVV) are to be written
+################################################################################
+
+ROOTLOADDIRS := $(foreach d,$(TPF_ROOT),$d/opensource/curl/output/load)
+
+################################################################################
+# Define the location of the export files used by the LD postprocessor
+# - currently expected that .exp files will also live in lib dir
+################################################################################
+
+ROOTEXPDIRS := $(foreach d,$(TPF_ROOT_LM),$d/opensource/curl/output/exp)
+
+################################################################################
+# Define the object file directory name
+################################################################################
+
+ROOTOBJDIRS := $(foreach d,$(TPF_ROOT),$d/opensource/curl/output/obj)
+
+################################################################################
+# Define the listing files directory name
+################################################################################
+
+ROOTLSTDIRS := $(foreach d,$(TPF_ROOT),$d/opensource/curl/output/lst)
+
+################################################################################
+# Set the include/header file directories
+################################################################################
+
+ROOTINCDIRS := $(foreach d,$(TPF_ROOT_LM),$d/opensource/curl/lib)
+ROOTINCDIRS += $(foreach d,$(TPF_ROOT_LM),$d/opensource/curl/include)
+ROOTINCDIRS += $(foreach d,$(TPF_ROOT_LM),$d/opensource/curl/include/curl)
+
+################################################################################
+# Set the C file directories
+################################################################################
+
+ROOTCDIRS := $(foreach d,$(TPF_ROOT_LM),$d/opensource/curl/lib)
+
+################################################################################
+# Define "TPF" to enable TPF-specific code in Curl files.
+################################################################################
+
+CFLAGS_$(APP) += -D TPF
+
diff --git a/packages/Win32/Makefile.am b/packages/Win32/Makefile.am
new file mode 100644
index 0000000..93350ea
--- /dev/null
+++ b/packages/Win32/Makefile.am
@@ -0,0 +1,3 @@
+SUBDIRS = cygwin
+
+EXTRA_DIST = README
diff --git a/packages/Win32/Makefile.in b/packages/Win32/Makefile.in
new file mode 100644
index 0000000..eab258a
--- /dev/null
+++ b/packages/Win32/Makefile.in
@@ -0,0 +1,563 @@
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005 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.
+
+@SET_MAKE@
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = packages/Win32
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
+ $(top_srcdir)/m4/curl-confopts.m4 \
+ $(top_srcdir)/m4/curl-functions.m4 \
+ $(top_srcdir)/m4/curl-override.m4 \
+ $(top_srcdir)/m4/curl-reentrant.m4 \
+ $(top_srcdir)/m4/curl-system.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/lib/curl_config.h \
+ $(top_builddir)/src/curl_config.h \
+ $(top_builddir)/include/curl/curlbuild.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-recursive \
+ install-exec-recursive install-info-recursive \
+ install-recursive installcheck-recursive installdirs-recursive \
+ pdf-recursive ps-recursive uninstall-info-recursive \
+ uninstall-recursive
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_LIBHOSTNAME_FALSE = @BUILD_LIBHOSTNAME_FALSE@
+BUILD_LIBHOSTNAME_TRUE = @BUILD_LIBHOSTNAME_TRUE@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_OPTIONS = @CONFIGURE_OPTIONS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CROSSCOMPILING_FALSE = @CROSSCOMPILING_FALSE@
+CROSSCOMPILING_TRUE = @CROSSCOMPILING_TRUE@
+CURLDEBUG_FALSE = @CURLDEBUG_FALSE@
+CURLDEBUG_TRUE = @CURLDEBUG_TRUE@
+CURL_CA_BUNDLE = @CURL_CA_BUNDLE@
+CURL_CFLAG_EXTRAS = @CURL_CFLAG_EXTRAS@
+CURL_DISABLE_DICT = @CURL_DISABLE_DICT@
+CURL_DISABLE_FILE = @CURL_DISABLE_FILE@
+CURL_DISABLE_FTP = @CURL_DISABLE_FTP@
+CURL_DISABLE_GOPHER = @CURL_DISABLE_GOPHER@
+CURL_DISABLE_HTTP = @CURL_DISABLE_HTTP@
+CURL_DISABLE_IMAP = @CURL_DISABLE_IMAP@
+CURL_DISABLE_LDAP = @CURL_DISABLE_LDAP@
+CURL_DISABLE_LDAPS = @CURL_DISABLE_LDAPS@
+CURL_DISABLE_POP3 = @CURL_DISABLE_POP3@
+CURL_DISABLE_PROXY = @CURL_DISABLE_PROXY@
+CURL_DISABLE_RTSP = @CURL_DISABLE_RTSP@
+CURL_DISABLE_SMTP = @CURL_DISABLE_SMTP@
+CURL_DISABLE_TELNET = @CURL_DISABLE_TELNET@
+CURL_DISABLE_TFTP = @CURL_DISABLE_TFTP@
+CURL_LIBS = @CURL_LIBS@
+CURL_NETWORK_LIBS = @CURL_NETWORK_LIBS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_SHARED = @ENABLE_SHARED@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_LDAP_SSL = @HAVE_LDAP_SSL@
+HAVE_LIBZ = @HAVE_LIBZ@
+HAVE_LIBZ_FALSE = @HAVE_LIBZ_FALSE@
+HAVE_LIBZ_TRUE = @HAVE_LIBZ_TRUE@
+HAVE_PK11_CREATEGENERICOBJECT = @HAVE_PK11_CREATEGENERICOBJECT@
+IDN_ENABLED = @IDN_ENABLED@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+IPV6_ENABLED = @IPV6_ENABLED@
+KRB4_ENABLED = @KRB4_ENABLED@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBCURL_LIBS = @LIBCURL_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+MANOPT = @MANOPT@
+MIMPURE_FALSE = @MIMPURE_FALSE@
+MIMPURE_TRUE = @MIMPURE_TRUE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NO_UNDEFINED_FALSE = @NO_UNDEFINED_FALSE@
+NO_UNDEFINED_TRUE = @NO_UNDEFINED_TRUE@
+NROFF = @NROFF@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH = @PATH@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+PKGADD_NAME = @PKGADD_NAME@
+PKGADD_PKG = @PKGADD_PKG@
+PKGADD_VENDOR = @PKGADD_VENDOR@
+PKGCONFIG = @PKGCONFIG@
+RANDOM_FILE = @RANDOM_FILE@
+RANLIB = @RANLIB@
+REQUIRE_LIB_DEPS = @REQUIRE_LIB_DEPS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SONAME_BUMP_FALSE = @SONAME_BUMP_FALSE@
+SONAME_BUMP_TRUE = @SONAME_BUMP_TRUE@
+SSL_ENABLED = @SSL_ENABLED@
+STATICLIB_FALSE = @STATICLIB_FALSE@
+STATICLIB_TRUE = @STATICLIB_TRUE@
+STRIP = @STRIP@
+SUPPORT_FEATURES = @SUPPORT_FEATURES@
+SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
+TEST_SERVER_LIBS = @TEST_SERVER_LIBS@
+USE_ARES = @USE_ARES@
+USE_EMBEDDED_ARES_FALSE = @USE_EMBEDDED_ARES_FALSE@
+USE_EMBEDDED_ARES_TRUE = @USE_EMBEDDED_ARES_TRUE@
+USE_GNUTLS = @USE_GNUTLS@
+USE_LIBRTMP = @USE_LIBRTMP@
+USE_LIBSSH2 = @USE_LIBSSH2@
+USE_MANUAL_FALSE = @USE_MANUAL_FALSE@
+USE_MANUAL_TRUE = @USE_MANUAL_TRUE@
+USE_NSS = @USE_NSS@
+USE_OPENLDAP = @USE_OPENLDAP@
+USE_POLARSSL = @USE_POLARSSL@
+USE_SSLEAY = @USE_SSLEAY@
+USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
+VERSION = @VERSION@
+VERSIONNUM = @VERSIONNUM@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+libext = @libext@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+SUBDIRS = cygwin
+EXTRA_DIST = README
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign packages/Win32/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --foreign packages/Win32/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+ -rm -f libtool
+uninstall-info-am:
+
+# 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.
+$(RECURSIVE_TARGETS):
+ @failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ 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) \
+ || eval $$failcom; \
+ 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:
+ @failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ rev=''; for subdir in $$list; do \
+ if test "$$subdir" = "."; then :; else \
+ rev="$$subdir $$rev"; \
+ fi; \
+ done; \
+ 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) \
+ || eval $$failcom; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique; \
+ fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ list='$(DISTFILES)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkdir_p) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+ list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -d "$(distdir)/$$subdir" \
+ || $(mkdir_p) "$(distdir)/$$subdir" \
+ || exit 1; \
+ distdir=`$(am__cd) $(distdir) && pwd`; \
+ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
+ (cd $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$top_distdir" \
+ distdir="$$distdir/$$subdir" \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-libtool \
+ distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-recursive
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-info-am
+
+uninstall-info: uninstall-info-recursive
+
+.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \
+ clean clean-generic clean-libtool clean-recursive ctags \
+ ctags-recursive distclean distclean-generic distclean-libtool \
+ distclean-recursive distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-exec install-exec-am install-info \
+ install-info-am install-man install-strip installcheck \
+ installcheck-am installdirs installdirs-am maintainer-clean \
+ maintainer-clean-generic maintainer-clean-recursive \
+ mostlyclean mostlyclean-generic mostlyclean-libtool \
+ mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \
+ uninstall uninstall-am uninstall-info-am
+
+# 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/packages/Win32/README b/packages/Win32/README
new file mode 100644
index 0000000..266e4ea
--- /dev/null
+++ b/packages/Win32/README
@@ -0,0 +1,53 @@
+Author: Jörn Hartroth
+
+DESCRIPTION
+
+(If you're only looking for precompiled win32 binaries, go visit
+http://curl.haxx.se/download.html)
+
+Packaging of the curl binaries for Win32 should at this point in time be based
+on the InfoZip (zip/unzip) archiver family as the de-facto standard for
+Windows archives. A package should contain the main binary curl.exe along with
+the appropriate documentation and license information files. For development
+releases, you should also include the header directory and probably the
+compiled binaries of libcurl and the appropriate Makefiles/project definition
+files for the compiler used.
+
+A simple packaging mechanism can be based on a set of batch files which call
+zip.exe with the appropriate files from the curl distribution - see the
+samples included below (Long lines have been split with "\" as the split
+marker, you'll want to rejoin the pieces to be all on one line in the batch
+file). Call any of these batch files - after compiling the curl binaries -
+with a single parameter specifying the name of the archive file to be created.
+
+It is implicitely assumed that all of the binary files (curl.exe, libcurl.a,
+etc) have previously been copied to the main directory of the curl source
+package (the directory where the main README resides), because that is where
+they should end up in the zip archive. The archive should *not* be built with
+absolute path information because the user will want to locally extract the
+archive contents and shift the binaries to his executable directory.
+
+SCRIPT_TEMPLATES
+
+curlpkg.bat:
+ zip -9 %1 curl.exe CHANGES LEGAL MPL-1.0.txt README \
+ docs/FAQ docs/FEATURES docs/README.curl docs/README.win32 docs/TODO
+
+curldevpkg.bat:
+ zip -9 %1 curl.exe include\README include\curl\*.h CHANGES docs\* \
+ curl.spec curl-ssl.spec LEGAL lib/Makefile.m32 src/Makefile.m32 \
+ libcurl.a libcurl.dll libcurldll.a MPL-1.0.txt README
+
+PROCEDURE_EXAMPLE
+
+A standard packaging routine (for MingW32) using the above batch files could
+go like this:
+(No SSL) (With SSL)
+cd <curl-sourcedir>\lib cd <curl-sourcedir>\lib
+make -f Makefile.m32 make -f Makefile.m32 SSL=1
+cd ..\src cd ..\src
+make -f Makefile.m32 make -f Makefile.m32 SSL=1
+cd .. cd ..
+copy lib\libcurl.a . copy lib\libcurl.a .
+copy src\curl.exe . copy src\curl.exe .
+curlpkg curl-win32-nossl.zip curlpkg curl-win32-ssl.zip
diff --git a/packages/Win32/cygwin/Makefile.am b/packages/Win32/cygwin/Makefile.am
new file mode 100644
index 0000000..b56148d
--- /dev/null
+++ b/packages/Win32/cygwin/Makefile.am
@@ -0,0 +1,62 @@
+EXTRA_DIST = README
+
+#
+# Build a Cygwin binary tar ball
+#
+# Read the README file for details on using this Makefile
+#
+# NOTE: As I'm not particularly familiar with Makefiles, this was the
+# best I could come up with. It should probably be enhanced someday
+# to actually use the correct target and pre-requisite names, etc...
+# If anyone else wants to volunteer, feel free ;-)
+#
+
+# Cygwin build number (default to "1")
+CYGBUILD = 1
+
+# Cygwin tarball build dir (fully-qualified name, gets deleted when done)
+cygwintmp = $(CURDIR)/tmp_binbuild
+
+cygwinbin:
+ rm -rf $(cygwintmp)
+ rm -rf $(cygwintmp)-dev
+ $(MAKE) -C $(top_builddir) DESTDIR=$(cygwintmp) install-strip
+# $(STRIP) $(cygwintmp)/usr/bin/cygcurl-?.dll
+ $(mkinstalldirs) \
+ $(cygwintmp)$(datadir)/doc/Cygwin \
+ $(cygwintmp)$(datadir)/doc/$(PACKAGE)-$(VERSION) \
+ $(cygwintmp)-dev$(datadir)/doc/$(PACKAGE)-$(VERSION)/libcurl \
+ $(cygwintmp)-dev$(datadir)/doc/$(PACKAGE)-$(VERSION)/examples \
+ $(cygwintmp)-dev$(mandir)
+#
+# copy some files into the binary install dir
+ cp $(srcdir)/README \
+ $(cygwintmp)$(datadir)/doc/Cygwin/$(PACKAGE)-$(VERSION)-$(CYGBUILD).README
+ cd $(top_srcdir) ; cp CHANGES COPYING README RELEASE-NOTES docs/* \
+ $(cygwintmp)$(datadir)/doc/$(PACKAGE)-$(VERSION) ; pwd
+ cd $(cygwintmp)$(datadir)/doc/$(PACKAGE)-$(VERSION) ; rm *.1 Makefile*
+#
+# copy some files into the -dev install dir, remove some from binary
+ cp $(top_srcdir)/docs/libcurl/*.html \
+ $(cygwintmp)-dev$(datadir)/doc/$(PACKAGE)-$(VERSION)/libcurl
+ cp $(top_srcdir)/docs/examples/* \
+ $(cygwintmp)-dev$(datadir)/doc/$(PACKAGE)-$(VERSION)/examples
+ rm $(cygwintmp)-dev$(datadir)/doc/$(PACKAGE)-$(VERSION)/examples/Makefile*
+ cp $(top_srcdir)/docs/examples/Makefile.example \
+ $(cygwintmp)-dev$(datadir)/doc/$(PACKAGE)-$(VERSION)/examples
+ mv $(cygwintmp)$(datadir)/doc/$(PACKAGE)-$(VERSION)/BINDINGS \
+ $(cygwintmp)-dev$(datadir)/doc/$(PACKAGE)-$(VERSION)
+ mv $(cygwintmp)$(datadir)/doc/$(PACKAGE)-$(VERSION)/INTERNALS \
+ $(cygwintmp)-dev$(datadir)/doc/$(PACKAGE)-$(VERSION)
+ mv $(cygwintmp)/usr/include $(cygwintmp)-dev/usr
+ mv $(cygwintmp)/usr/lib $(cygwintmp)-dev/usr
+ mv $(cygwintmp)$(mandir)/man3 $(cygwintmp)-dev$(mandir)
+#
+# create both tar files, and delete tmp folders
+ cd $(cygwintmp) ; tar cjf \
+ $(PACKAGE)-$(VERSION)-$(CYGBUILD).tar.bz2 usr
+ mv $(cygwintmp)/*.tar.bz2 . && rm -rf $(cygwintmp)
+#
+ cd $(cygwintmp)-dev ; tar cjf \
+ $(PACKAGE)-devel-$(VERSION)-$(CYGBUILD).tar.bz2 usr
+ mv $(cygwintmp)-dev/*.tar.bz2 . && rm -rf $(cygwintmp)-dev
diff --git a/packages/Win32/cygwin/Makefile.in b/packages/Win32/cygwin/Makefile.in
new file mode 100644
index 0000000..6a9f166
--- /dev/null
+++ b/packages/Win32/cygwin/Makefile.in
@@ -0,0 +1,466 @@
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005 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.
+
+@SET_MAKE@
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = packages/Win32/cygwin
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
+ $(top_srcdir)/m4/curl-confopts.m4 \
+ $(top_srcdir)/m4/curl-functions.m4 \
+ $(top_srcdir)/m4/curl-override.m4 \
+ $(top_srcdir)/m4/curl-reentrant.m4 \
+ $(top_srcdir)/m4/curl-system.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/lib/curl_config.h \
+ $(top_builddir)/src/curl_config.h \
+ $(top_builddir)/include/curl/curlbuild.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_LIBHOSTNAME_FALSE = @BUILD_LIBHOSTNAME_FALSE@
+BUILD_LIBHOSTNAME_TRUE = @BUILD_LIBHOSTNAME_TRUE@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_OPTIONS = @CONFIGURE_OPTIONS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CROSSCOMPILING_FALSE = @CROSSCOMPILING_FALSE@
+CROSSCOMPILING_TRUE = @CROSSCOMPILING_TRUE@
+CURLDEBUG_FALSE = @CURLDEBUG_FALSE@
+CURLDEBUG_TRUE = @CURLDEBUG_TRUE@
+CURL_CA_BUNDLE = @CURL_CA_BUNDLE@
+CURL_CFLAG_EXTRAS = @CURL_CFLAG_EXTRAS@
+CURL_DISABLE_DICT = @CURL_DISABLE_DICT@
+CURL_DISABLE_FILE = @CURL_DISABLE_FILE@
+CURL_DISABLE_FTP = @CURL_DISABLE_FTP@
+CURL_DISABLE_GOPHER = @CURL_DISABLE_GOPHER@
+CURL_DISABLE_HTTP = @CURL_DISABLE_HTTP@
+CURL_DISABLE_IMAP = @CURL_DISABLE_IMAP@
+CURL_DISABLE_LDAP = @CURL_DISABLE_LDAP@
+CURL_DISABLE_LDAPS = @CURL_DISABLE_LDAPS@
+CURL_DISABLE_POP3 = @CURL_DISABLE_POP3@
+CURL_DISABLE_PROXY = @CURL_DISABLE_PROXY@
+CURL_DISABLE_RTSP = @CURL_DISABLE_RTSP@
+CURL_DISABLE_SMTP = @CURL_DISABLE_SMTP@
+CURL_DISABLE_TELNET = @CURL_DISABLE_TELNET@
+CURL_DISABLE_TFTP = @CURL_DISABLE_TFTP@
+CURL_LIBS = @CURL_LIBS@
+CURL_NETWORK_LIBS = @CURL_NETWORK_LIBS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_SHARED = @ENABLE_SHARED@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_LDAP_SSL = @HAVE_LDAP_SSL@
+HAVE_LIBZ = @HAVE_LIBZ@
+HAVE_LIBZ_FALSE = @HAVE_LIBZ_FALSE@
+HAVE_LIBZ_TRUE = @HAVE_LIBZ_TRUE@
+HAVE_PK11_CREATEGENERICOBJECT = @HAVE_PK11_CREATEGENERICOBJECT@
+IDN_ENABLED = @IDN_ENABLED@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+IPV6_ENABLED = @IPV6_ENABLED@
+KRB4_ENABLED = @KRB4_ENABLED@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBCURL_LIBS = @LIBCURL_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+MANOPT = @MANOPT@
+MIMPURE_FALSE = @MIMPURE_FALSE@
+MIMPURE_TRUE = @MIMPURE_TRUE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NO_UNDEFINED_FALSE = @NO_UNDEFINED_FALSE@
+NO_UNDEFINED_TRUE = @NO_UNDEFINED_TRUE@
+NROFF = @NROFF@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH = @PATH@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+PKGADD_NAME = @PKGADD_NAME@
+PKGADD_PKG = @PKGADD_PKG@
+PKGADD_VENDOR = @PKGADD_VENDOR@
+PKGCONFIG = @PKGCONFIG@
+RANDOM_FILE = @RANDOM_FILE@
+RANLIB = @RANLIB@
+REQUIRE_LIB_DEPS = @REQUIRE_LIB_DEPS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SONAME_BUMP_FALSE = @SONAME_BUMP_FALSE@
+SONAME_BUMP_TRUE = @SONAME_BUMP_TRUE@
+SSL_ENABLED = @SSL_ENABLED@
+STATICLIB_FALSE = @STATICLIB_FALSE@
+STATICLIB_TRUE = @STATICLIB_TRUE@
+STRIP = @STRIP@
+SUPPORT_FEATURES = @SUPPORT_FEATURES@
+SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
+TEST_SERVER_LIBS = @TEST_SERVER_LIBS@
+USE_ARES = @USE_ARES@
+USE_EMBEDDED_ARES_FALSE = @USE_EMBEDDED_ARES_FALSE@
+USE_EMBEDDED_ARES_TRUE = @USE_EMBEDDED_ARES_TRUE@
+USE_GNUTLS = @USE_GNUTLS@
+USE_LIBRTMP = @USE_LIBRTMP@
+USE_LIBSSH2 = @USE_LIBSSH2@
+USE_MANUAL_FALSE = @USE_MANUAL_FALSE@
+USE_MANUAL_TRUE = @USE_MANUAL_TRUE@
+USE_NSS = @USE_NSS@
+USE_OPENLDAP = @USE_OPENLDAP@
+USE_POLARSSL = @USE_POLARSSL@
+USE_SSLEAY = @USE_SSLEAY@
+USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
+VERSION = @VERSION@
+VERSIONNUM = @VERSIONNUM@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+libext = @libext@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+EXTRA_DIST = README
+
+#
+# Build a Cygwin binary tar ball
+#
+# Read the README file for details on using this Makefile
+#
+# NOTE: As I'm not particularly familiar with Makefiles, this was the
+# best I could come up with. It should probably be enhanced someday
+# to actually use the correct target and pre-requisite names, etc...
+# If anyone else wants to volunteer, feel free ;-)
+#
+
+# Cygwin build number (default to "1")
+CYGBUILD = 1
+
+# Cygwin tarball build dir (fully-qualified name, gets deleted when done)
+cygwintmp = $(CURDIR)/tmp_binbuild
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign packages/Win32/cygwin/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --foreign packages/Win32/cygwin/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+ -rm -f libtool
+uninstall-info-am:
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ list='$(DISTFILES)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkdir_p) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-libtool
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ distclean distclean-generic distclean-libtool distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-exec install-exec-am \
+ install-info install-info-am install-man install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+ uninstall-info-am
+
+
+cygwinbin:
+ rm -rf $(cygwintmp)
+ rm -rf $(cygwintmp)-dev
+ $(MAKE) -C $(top_builddir) DESTDIR=$(cygwintmp) install-strip
+# $(STRIP) $(cygwintmp)/usr/bin/cygcurl-?.dll
+ $(mkinstalldirs) \
+ $(cygwintmp)$(datadir)/doc/Cygwin \
+ $(cygwintmp)$(datadir)/doc/$(PACKAGE)-$(VERSION) \
+ $(cygwintmp)-dev$(datadir)/doc/$(PACKAGE)-$(VERSION)/libcurl \
+ $(cygwintmp)-dev$(datadir)/doc/$(PACKAGE)-$(VERSION)/examples \
+ $(cygwintmp)-dev$(mandir)
+#
+# copy some files into the binary install dir
+ cp $(srcdir)/README \
+ $(cygwintmp)$(datadir)/doc/Cygwin/$(PACKAGE)-$(VERSION)-$(CYGBUILD).README
+ cd $(top_srcdir) ; cp CHANGES COPYING README RELEASE-NOTES docs/* \
+ $(cygwintmp)$(datadir)/doc/$(PACKAGE)-$(VERSION) ; pwd
+ cd $(cygwintmp)$(datadir)/doc/$(PACKAGE)-$(VERSION) ; rm *.1 Makefile*
+#
+# copy some files into the -dev install dir, remove some from binary
+ cp $(top_srcdir)/docs/libcurl/*.html \
+ $(cygwintmp)-dev$(datadir)/doc/$(PACKAGE)-$(VERSION)/libcurl
+ cp $(top_srcdir)/docs/examples/* \
+ $(cygwintmp)-dev$(datadir)/doc/$(PACKAGE)-$(VERSION)/examples
+ rm $(cygwintmp)-dev$(datadir)/doc/$(PACKAGE)-$(VERSION)/examples/Makefile*
+ cp $(top_srcdir)/docs/examples/Makefile.example \
+ $(cygwintmp)-dev$(datadir)/doc/$(PACKAGE)-$(VERSION)/examples
+ mv $(cygwintmp)$(datadir)/doc/$(PACKAGE)-$(VERSION)/BINDINGS \
+ $(cygwintmp)-dev$(datadir)/doc/$(PACKAGE)-$(VERSION)
+ mv $(cygwintmp)$(datadir)/doc/$(PACKAGE)-$(VERSION)/INTERNALS \
+ $(cygwintmp)-dev$(datadir)/doc/$(PACKAGE)-$(VERSION)
+ mv $(cygwintmp)/usr/include $(cygwintmp)-dev/usr
+ mv $(cygwintmp)/usr/lib $(cygwintmp)-dev/usr
+ mv $(cygwintmp)$(mandir)/man3 $(cygwintmp)-dev$(mandir)
+#
+# create both tar files, and delete tmp folders
+ cd $(cygwintmp) ; tar cjf \
+ $(PACKAGE)-$(VERSION)-$(CYGBUILD).tar.bz2 usr
+ mv $(cygwintmp)/*.tar.bz2 . && rm -rf $(cygwintmp)
+#
+ cd $(cygwintmp)-dev ; tar cjf \
+ $(PACKAGE)-devel-$(VERSION)-$(CYGBUILD).tar.bz2 usr
+ mv $(cygwintmp)-dev/*.tar.bz2 . && rm -rf $(cygwintmp)-dev
+# 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/packages/Win32/cygwin/README b/packages/Win32/cygwin/README
new file mode 100644
index 0000000..7457f73
--- /dev/null
+++ b/packages/Win32/cygwin/README
@@ -0,0 +1,114 @@
+Curl is a tool for transferring files with URL syntax, supporting
+ FTP, FTPS, HTTP, HTTPS, TELNET, DICT, FILE and LDAP.
+ Curl supports HTTPS certificates, HTTP POST, HTTP PUT,
+ FTP uploading, kerberos, HTTP form based upload, proxies,
+ cookies, user+password authentication, file transfer resume,
+ http proxy tunneling and a busload of other useful tricks.
+
+See /usr/doc/curl-$(VERSION)/FEATURES for more info.
+
+
+Dependencies:
+ - Cygwin
+ - OpenSSL 0.9.6b-2+ (*)
+
+ (*) cURL can be built without SSL support, see below for details
+
+
+Canonical Homepage and Downloads:
+ http://curl.haxx.se/
+ http://curl.haxx.se/download.html
+
+
+Cygwin specific source files (a .README template and a Makefile
+ for building binary tarballs) are maintained in the upstream
+ CVS at: <srctop>/packages/Win32/cygwin/
+
+
+Build Instructions (to recompile from the cygwin source tarball):
+ ---STANDARD (with SSL) RELEASE---
+ Download the source (either the official release or the cygwin version),
+ unpack it (done for you if using setup.exe), then:
+
+ $ ./configure --prefix=/usr --mandir=/usr/share/man # (*)
+ $ make
+ $ make test # optional
+ $ make install # (**)
+
+ (*) The Cygwin project now (as of sometime in 2003) prefers man pages
+ within /usr/share/man, as opposed to the default /usr/man.
+
+ (**) LibTool 1.4.2 had a bug related to cygwin's use of ".exe" extensions,
+ such that "make install" blew up at curl.exe. See this URL for details:
+ http://mail.gnu.org/pipermail/libtool/2001-September/005549.html
+ The copy of ltmain.sh that is distributed with cURL includes this patch.
+
+ As of curl 7.9.1, the official source compiles (under Cygwin) and tests
+ 100% cleanly OOTB (Out Of The Box)
+
+ ---NO SSL RELEASE---
+ Same as standard, except for the configure step, which changes to:
+
+ $ ./configure --prefix=/usr --mandir=/usr/share/man --without-ssl
+
+ NOTE: the standard release is what is available via Cygwin's setup.exe;
+ the no-ssl release is only available from the curl website
+
+
+Packaging Instructions:
+ ---BINARY---
+ Compile cleanly as described above, then:
+
+ $ make cygwinbin CYGBUILD=n
+
+ where n is the cygwin release number (e.g. the "1" in curl-7.9-1),
+ and "CYGBUILD=n" is optional (n defaults to 1 if not specified)
+
+ Assuming everything worked, you'll find your binary tarballs in
+ $(buildtop)/packages/Win32/cygwin/
+
+ ---SOURCE---
+ 1. download & unpack the pristine source
+ 2. rename the source dir to add the "-$(REL)" suffix, e.g.:
+ $ mv curl-7.9 curl-7.9-1
+ 3. unpack the pristine source once more, so you'll end up
+ with 2 directories: "curl-7.9" and "curl-7.9-1" in this example
+ 3. add a CYGWIN-PATCHES directory, and add this readme to it
+ $ cd curl-7.9-1; mkdir CYGWIN-PATCHES
+ $ cp packages/Win32/cygwin/README CYGWIN-PATCHES/curl-7.9-1.README
+ 4. if applicable, document any changes in the README file
+ 5. create a patch which, when applied
+ (using `patch -p1 < curl-7.9-$(REL).patch`)
+ will remove any changes you've made to the pristine source:
+ $ cd ..
+ $ diff -Nrup curl-7.9-1 curl-7.9 > curl-7.9-1.patch
+ and then move it into the CYGWIN-PATCHES directory
+ $ mv curl-7.9-1.patch curl-7.9-1/CYGWIN-PATCHES
+ 6. pack the new source dir into a tar.bz2 file:
+ $ tar cfj curl-7.9-1-src.tar.bz2 curl-7.9-1
+
+ ---SETUP.HINT---
+ @ curl
+ sdesc: "a client that groks URLs"
+ ldesc: "Curl is a tool for transferring files with URL syntax,
+ supporting FTP, FTPS, HTTP, HTTPS, TELNET, DICT, FILE
+ and LDAP. Curl supports HTTPS certificates, HTTP POST, HTTP PUT,
+ FTP uploading, kerberos, HTTP form based upload, proxies,
+ cookies, user+password authentication, file transfer resume,
+ http proxy tunneling and a busload of other useful tricks."
+ category: Web Libs
+ requires: cygwin openssl
+
+ @ curl-devel
+ sdesc: "(lib)cURL headers, static libraries, developer docs and samples"
+ ldesc: "curl-devel is the developer-oriented (non-run-time) parts
+ of the cURL package. It includes header files, static libraries,
+ example source code snippets, and the libcurl man pages."
+ category: Web Libs Devel
+ requires: cygwin openssl curl
+
+
+Cygwin port maintained by:
+ Kevin Roth <kproth @ users . sourceforge . net>
+ Questions about cURL should be directed to curl-users@cool.haxx.se.
+ Questions about this cygwin package go to cygwin@cygwin.com.
diff --git a/packages/vms/Makefile.am b/packages/vms/Makefile.am
new file mode 100644
index 0000000..b6f0939
--- /dev/null
+++ b/packages/vms/Makefile.am
@@ -0,0 +1,17 @@
+EXTRA_DIST = build_vms.com \
+ config-vms.h \
+ curlmsg.h \
+ curlmsg.msg \
+ curlmsg.sdl \
+ curlmsg_vms.h \
+ hpssl_alpha.opt \
+ hpssl_ia64.opt \
+ hpssl_vax.opt \
+ ldap.opt \
+ openssl_alpha.opt \
+ openssl_ia64.opt \
+ openssl_vax.opt \
+ openssl_ssl_alpha.opt \
+ openssl_ssl_ia64.opt \
+ openssl_ssl_vax.opt \
+ readme
diff --git a/packages/vms/Makefile.in b/packages/vms/Makefile.in
new file mode 100644
index 0000000..3e83ae5
--- /dev/null
+++ b/packages/vms/Makefile.in
@@ -0,0 +1,422 @@
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005 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.
+
+@SET_MAKE@
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = packages/vms
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
+ $(top_srcdir)/m4/curl-confopts.m4 \
+ $(top_srcdir)/m4/curl-functions.m4 \
+ $(top_srcdir)/m4/curl-override.m4 \
+ $(top_srcdir)/m4/curl-reentrant.m4 \
+ $(top_srcdir)/m4/curl-system.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/lib/curl_config.h \
+ $(top_builddir)/src/curl_config.h \
+ $(top_builddir)/include/curl/curlbuild.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_LIBHOSTNAME_FALSE = @BUILD_LIBHOSTNAME_FALSE@
+BUILD_LIBHOSTNAME_TRUE = @BUILD_LIBHOSTNAME_TRUE@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_OPTIONS = @CONFIGURE_OPTIONS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CROSSCOMPILING_FALSE = @CROSSCOMPILING_FALSE@
+CROSSCOMPILING_TRUE = @CROSSCOMPILING_TRUE@
+CURLDEBUG_FALSE = @CURLDEBUG_FALSE@
+CURLDEBUG_TRUE = @CURLDEBUG_TRUE@
+CURL_CA_BUNDLE = @CURL_CA_BUNDLE@
+CURL_CFLAG_EXTRAS = @CURL_CFLAG_EXTRAS@
+CURL_DISABLE_DICT = @CURL_DISABLE_DICT@
+CURL_DISABLE_FILE = @CURL_DISABLE_FILE@
+CURL_DISABLE_FTP = @CURL_DISABLE_FTP@
+CURL_DISABLE_GOPHER = @CURL_DISABLE_GOPHER@
+CURL_DISABLE_HTTP = @CURL_DISABLE_HTTP@
+CURL_DISABLE_IMAP = @CURL_DISABLE_IMAP@
+CURL_DISABLE_LDAP = @CURL_DISABLE_LDAP@
+CURL_DISABLE_LDAPS = @CURL_DISABLE_LDAPS@
+CURL_DISABLE_POP3 = @CURL_DISABLE_POP3@
+CURL_DISABLE_PROXY = @CURL_DISABLE_PROXY@
+CURL_DISABLE_RTSP = @CURL_DISABLE_RTSP@
+CURL_DISABLE_SMTP = @CURL_DISABLE_SMTP@
+CURL_DISABLE_TELNET = @CURL_DISABLE_TELNET@
+CURL_DISABLE_TFTP = @CURL_DISABLE_TFTP@
+CURL_LIBS = @CURL_LIBS@
+CURL_NETWORK_LIBS = @CURL_NETWORK_LIBS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_SHARED = @ENABLE_SHARED@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_LDAP_SSL = @HAVE_LDAP_SSL@
+HAVE_LIBZ = @HAVE_LIBZ@
+HAVE_LIBZ_FALSE = @HAVE_LIBZ_FALSE@
+HAVE_LIBZ_TRUE = @HAVE_LIBZ_TRUE@
+HAVE_PK11_CREATEGENERICOBJECT = @HAVE_PK11_CREATEGENERICOBJECT@
+IDN_ENABLED = @IDN_ENABLED@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+IPV6_ENABLED = @IPV6_ENABLED@
+KRB4_ENABLED = @KRB4_ENABLED@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBCURL_LIBS = @LIBCURL_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+MANOPT = @MANOPT@
+MIMPURE_FALSE = @MIMPURE_FALSE@
+MIMPURE_TRUE = @MIMPURE_TRUE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NO_UNDEFINED_FALSE = @NO_UNDEFINED_FALSE@
+NO_UNDEFINED_TRUE = @NO_UNDEFINED_TRUE@
+NROFF = @NROFF@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH = @PATH@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+PKGADD_NAME = @PKGADD_NAME@
+PKGADD_PKG = @PKGADD_PKG@
+PKGADD_VENDOR = @PKGADD_VENDOR@
+PKGCONFIG = @PKGCONFIG@
+RANDOM_FILE = @RANDOM_FILE@
+RANLIB = @RANLIB@
+REQUIRE_LIB_DEPS = @REQUIRE_LIB_DEPS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SONAME_BUMP_FALSE = @SONAME_BUMP_FALSE@
+SONAME_BUMP_TRUE = @SONAME_BUMP_TRUE@
+SSL_ENABLED = @SSL_ENABLED@
+STATICLIB_FALSE = @STATICLIB_FALSE@
+STATICLIB_TRUE = @STATICLIB_TRUE@
+STRIP = @STRIP@
+SUPPORT_FEATURES = @SUPPORT_FEATURES@
+SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
+TEST_SERVER_LIBS = @TEST_SERVER_LIBS@
+USE_ARES = @USE_ARES@
+USE_EMBEDDED_ARES_FALSE = @USE_EMBEDDED_ARES_FALSE@
+USE_EMBEDDED_ARES_TRUE = @USE_EMBEDDED_ARES_TRUE@
+USE_GNUTLS = @USE_GNUTLS@
+USE_LIBRTMP = @USE_LIBRTMP@
+USE_LIBSSH2 = @USE_LIBSSH2@
+USE_MANUAL_FALSE = @USE_MANUAL_FALSE@
+USE_MANUAL_TRUE = @USE_MANUAL_TRUE@
+USE_NSS = @USE_NSS@
+USE_OPENLDAP = @USE_OPENLDAP@
+USE_POLARSSL = @USE_POLARSSL@
+USE_SSLEAY = @USE_SSLEAY@
+USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
+VERSION = @VERSION@
+VERSIONNUM = @VERSIONNUM@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+libext = @libext@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+EXTRA_DIST = build_vms.com \
+ config-vms.h \
+ curlmsg.h \
+ curlmsg.msg \
+ curlmsg.sdl \
+ curlmsg_vms.h \
+ hpssl_alpha.opt \
+ hpssl_ia64.opt \
+ hpssl_vax.opt \
+ ldap.opt \
+ openssl_alpha.opt \
+ openssl_ia64.opt \
+ openssl_vax.opt \
+ openssl_ssl_alpha.opt \
+ openssl_ssl_ia64.opt \
+ openssl_ssl_vax.opt \
+ readme
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign packages/vms/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --foreign packages/vms/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+ -rm -f libtool
+uninstall-info-am:
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ list='$(DISTFILES)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkdir_p) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-libtool
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ distclean distclean-generic distclean-libtool distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-exec install-exec-am \
+ install-info install-info-am install-man install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+ uninstall-info-am
+
+# 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/packages/vms/build_vms.com b/packages/vms/build_vms.com
new file mode 100644
index 0000000..68d9f00
--- /dev/null
+++ b/packages/vms/build_vms.com
@@ -0,0 +1,583 @@
+$! BUILD_VMS.COM
+$!
+$! I've taken the original build_vms.com, supplied by Nico Baggus, if
+$! memory serves me correctly, and made some modifications.
+$!
+$! SSL support is controlled by logical names. If SSL$INCLUDE is
+$! defined, then it is assumed that HP's SSL product has been installed.
+$! If OPENSSL is defined, but SSL$INCLUDE is not, then OpenSSL will be
+$! used. If neither logical name is defined, then SSL support will not
+$! be compiled/linked in. Command-line options NOHPSSL and NOSSL can be
+$! specified to override the automatic SSL selection.
+$!
+$! Command-line Options:
+$!
+$! CLEAN Delete product files for this host architecture. (No
+$! build done.)
+$! CLEAN_ALL Delete product files for all host architectures. (No
+$! build done.)
+$!
+$! 64 Compile with 64-bit pointers.
+$! CCQUAL=x Add "x" to the C compiler qualifiers.
+$! DEBUG Compile and link with debug.
+$! IEEE Use IEEE floating point. (Alpha.)
+$! LARGE Enable large-file support. (Non-VAX, VMS >= V7.2.)
+$! LDAP Enable LDAP support.
+$! LIST Create C compiler listings and linker maps.
+$! NOHPSSL Don't use HP SSL, even if available.
+$! NOSSL Don't use any SSL, even if available.
+$! OSSLOLB Use OpenSSL object libraries (.OLB), even if shared
+$! images (.EXE) are available.
+$!
+$! DCL Symbols:
+$!
+$! CURL_CCDEFS="c_macro_1=value1 [, c_macro_2=value2 [...]]"
+$! Compile with these additional C macros defined.
+$!
+$! Revisions:
+$!
+$! 2-DEC-2003, MSK, the "original" version.
+$! It works for me. Your mileage may vary.
+$! 13-JAN-2004, MSK, moved this procedure to the [.packages.vms] directory
+$! and updated it to do hardware dependent builds.
+$! 29-JAN-2004, MSK, moved logical defines into defines.com
+$! 6-FEB-2004, MSK, put in various SSL support bits
+$! 9-MAR-2004, MSK, the config-vms.h* files are now copied to the lib and
+$! src directories as curl_config.h.
+$! 15-MAR-2004, MSK, All of the curlmsg*.* files have also been moved to
+$! this build directory. They will be copied to the src
+$! directory before build. The .msg file will be compiled
+$! to get the .obj for messages, but the .h and .sdl files
+$! are not automatically created since they partly rely on
+$! the freeware SDL tool.
+$! 8-FEB-2005, MSK, merged the two config-vms.h* files into one that uses
+$! USE_SSLEAY to define if the target has SSL support built
+$! in. Changed the cc/define parameter accordingly.
+$! 11-FEB-2005, MSK, If [--.LIB]AMIGAOS.C and NWLIB.C are there, rename them
+$! 23-MAR-2005, MSK, relocated cc_qual define so that DEBUG option would work
+$! 25-APR-2007, STL, allow compilation in 64-bit mode.
+$! 13-DEC-2009. SMS, Changed to skip unwanted source files without
+$! renaming the original files.
+$! Eliminated needless, persistent logical names.
+$! Added CURL_CCDEFS DCL symbol for user-specified C
+$! macro definitions.
+$! Added CLEAN and CLEAN_ALL options.
+$! Added CCQUAL option for user-specified C compiler
+$! qualifiers.
+$! Added IEEE option for IEEE floating point (Alpha).
+$! Added LARGE option for large-file support.
+$! Added OSSLOLB option, and support for OpenSSL
+$! shared images.
+$! Changed to put listing and map files into lisdir:.
+$! Changed to avoid case confusion on ODS5 disks.
+$! Added more default dev:[dir] save+restore.
+$! Moved remaining "defines.com" code (back) into
+$! here, eliminating the hard-coded OpenSSL nonsense.
+$! Changed to use F$GETSYI( "ARCH_NAME") (or
+$! equivalent) to name architecture-specific product
+$! file destination directory, and to create the
+$! directory if needed (obviating inclusion of these
+$! directories and dummy files in the distribution
+$! kit).
+$! Changed the "compile" subroutine to break the CC
+$! command across multiple lines to avoid DCL
+$! line-too-long problems.
+$! Changed "vo_c" messages to show the CC qualifiers
+$! once, not with every compile command.
+$!
+$!
+$! Save the original default dev:[dir], and arrange for its restoration
+$! at exit.
+$!
+$ curl = ""
+$ orig_def = f$environment( "DEFAULT")
+$ on error then goto Common_Exit
+$ on control_y then goto Common_Exit
+$!
+$ ctrl_y = 1556
+$ proc = f$environment( "PROCEDURE")
+$ proc_dev_dir = -
+ f$parse( proc, , , "DEVICE")+ f$parse( proc, , , "DIRECTORY")
+$!
+$! Verbose output message stuff. Define symbol to "write sys$output" or "!".
+$! vo_c - verbose output for compile
+$! vo_l - link
+$! vo_o - object check
+$!
+$ vo_c = "write sys$output"
+$ vo_l = "write sys$output"
+$ vo_o = "!"
+$!
+$! Determine the main distribution directory ("[--]") in an
+$! ODS5-tolerant (case-insensitive) way. (We do assume that the only
+$! "]" is the one at the end.)
+$!
+$ set default 'proc_dev_dir'
+$ set default [--]
+$ top_dev_dir = f$environment( "DEFAULT")- "]"
+$!
+$! Define the architecture-specific product file destination directory
+$! name(s).
+$!
+$ if (f$getsyi( "HW_MODEL") .lt. 1024)
+$ then
+$ arch_name = "VAX"
+$ else
+$ arch_name = ""
+$ arch_name = arch_name+ f$edit( f$getsyi( "ARCH_NAME"), "UPCASE")
+$ if (arch_name .eqs. "") then arch_name = "UNK"
+$ endif
+$!
+$ exedir = proc_dev_dir- "]"+ ".''arch_name']"
+$ lisdir = exedir
+$ objdir = exedir
+$!
+$! Interpret command-line options.
+$!
+$ hpssl = 0
+$ ldap = 0
+$ list = 0
+$ nohpssl = 0
+$ nossl = 0
+$ openssl = 0
+$ osslolb = 0
+$ cc_qual1 = ""
+$ cc_qual2 = ""
+$ cc_defs = "HAVE_CONFIG_H=1"
+$ if (f$type( CURL_CCDEFS) .nes. "")
+$ then
+$ CURL_CCDEFS = f$edit( CURL_CCDEFS, "TRIM")
+$ cc_defs = cc_defs+ ", "+ CURL_CCDEFS
+$ endif
+$ link_qual = ""
+$ msg_qual = "/object = ''objdir'"
+$ ssl_opt = ""
+$!
+$ arg = 1
+$arg_loop:
+$ p = "p''arg'"
+$ arg_val = 'p'
+$ if (arg_val .eqs. "") then goto arg_loop_out
+$ arg_val = f$edit( arg_val, "upcase")
+$!
+$ if (arg_val .eqs. "CLEAN")
+$ then
+$ prods = "''exedir'*.*;*"
+$ if (f$search( prods) .nes. "") then delete /log 'prods'
+$ prods = proc_dev_dir+ arch_name+ ".DIR;1"
+$ if (f$search( prods) .nes. "") then delete /log 'prods'
+$ goto Common_Exit
+$ endif
+$!
+$ if (arg_val .eqs. "CLEAN_ALL")
+$ then
+$ prods = proc_dev_dir- "]"+ ".ALPHA]*.*;*"
+$ if (f$search( prods) .nes. "") then delete /log 'prods'
+$ prods = proc_dev_dir+ "ALPHA"+ ".DIR;1"
+$ if (f$search( prods) .nes. "") then delete /log 'prods'
+$ prods = proc_dev_dir- "]"+ ".IA64]*.*;*"
+$ if (f$search( prods) .nes. "") then delete /log 'prods'
+$ prods = proc_dev_dir+ "IA64"+ ".DIR;1"
+$ if (f$search( prods) .nes. "") then delete /log 'prods'
+$ prods = proc_dev_dir- "]"+ ".VAX]*.*;*"
+$ if (f$search( prods) .nes. "") then delete /log 'prods'
+$ prods = proc_dev_dir+ "VAX"+ ".DIR;1"
+$ if (f$search( prods) .nes. "") then delete /log 'prods'
+$ goto Common_Exit
+$ endif
+$!
+$ if (arg_val .eqs. "64")
+$ then
+$ cc_qual1 = cc_qual1+ " /POINTER = 64"
+$ goto arg_loop_end
+$ endif
+$!
+$ if (f$extract( 0, 6, arg_val) .eqs. "CCQUAL")
+$ then
+$ opts = f$edit( arg_val, "COLLAPSE")
+$ eq = f$locate( "=", opts)
+$ cc_qual2 = f$extract( (eq+ 1), 1000, opts)
+$ goto arg_loop_end
+$ endif
+$!
+$ if (arg_val .eqs. "DEBUG")
+$ then
+$ cc_qual1 = cc_qual1+ " /debug /nooptimize"
+$ link_qual = link_qual+ " /debug"
+$ goto arg_loop_end
+$ endif
+$!
+$ if (arg_val .eqs. "IEEE")
+$ then
+$ cc_qual1 = cc_qual1+ " /FLOAT = IEEE_FLOAT"
+$ goto arg_loop_end
+$ endif
+$!
+$ if (arg_val .eqs. "LARGE")
+$ then
+$ if (arch_name .eqs. "VAX")
+$ then
+$ write sys$output """LARGE"" is ignored on VAX."
+$ else
+$ cc_defs = cc_defs+ ", _LARGEFILE=1"
+$ endif
+$ goto arg_loop_end
+$ endif
+$!
+$ if (arg_val .eqs. "LDAP")
+$ then
+$ ldap = 1
+$ goto arg_loop_end
+$ endif
+$!
+$ if (f$extract( 0, 4, arg_val) .eqs. "LIST")
+$ then
+$ list = 1
+$ cc_qual1 = cc_qual1+ " /list = ''lisdir' /show = (all, nomessages)"
+$ link_qual = link_qual+ " /map = ''lisdir'"
+$ msg_qual = msg_qual+ " /list = ''lisdir'"
+$ goto arg_loop_end
+$ endif
+$!
+$ if (arg_val .eqs. "NOHPSSL")
+$ then
+$ nohpssl = 1
+$ goto arg_loop_end
+$ endif
+$!
+$ if (arg_val .eqs. "NOSSL")
+$ then
+$ nossl = 1
+$ goto arg_loop_end
+$ endif
+$!
+$ if (arg_val .eqs. "OSSLOLB")
+$ then
+$ osslolb = 1
+$ goto arg_loop_end
+$ endif
+$!
+$ write sys$output "Unrecognized command-line option: ''arg_val'"
+$ goto Common_Exit
+$!
+$arg_loop_end:
+$ arg = arg+ 1
+$ goto arg_loop
+$arg_loop_out:
+$!
+$! CC /LIST, LINK /MAP, and MESSAGE /LIST are defaults in batch mode,
+$! so be explicit when they're not desired.
+$!
+$ if (list .eq. 0)
+$ then
+$ cc_qual1 = cc_qual1+ " /nolist"
+$ link_qual = link_qual+ " /nomap"
+$ msg_qual = msg_qual+ " /nolist"
+$ endif
+$!
+$! Create product directory, if needed.
+$!
+$ if (f$search( proc_dev_dir+ arch_name+ ".DIR;1") .eqs. "")
+$ then
+$ create /directory 'exedir'
+$ endif
+$!
+$! Detect available (but not prohibited) SSL software.
+$!
+$ if (.not. nossl)
+$ then
+$ if (f$trnlnm( "OPENSSL") .nes. "")
+$ then
+$ cc_defs = cc_defs+ ", USE_SSLEAY=1"
+$ if ((f$trnlnm( "SSL$INCLUDE") .nes. "") .and. (.not. nohpssl))
+$ then
+$! Use HP SSL.
+$ hpssl = 1
+$ ssl_opt = ", ''proc_dev_dir'hpssl_"+ -
+ f$getsyi("ARCH_NAME")+ ".opt /options"
+$ else
+$! Use OpenSSL. Assume object libraries, unless shared images
+$! are found (and not prohibited).
+$ openssl = 1
+$ ssl_opt = ", ssllib:libssl.olb /library"+ -
+ ", ssllib:libcrypto.olb /library"
+$ if (osslolb .eq. 0)
+$ then
+ if ((f$search( "ssllib:ssl_libcrypto.exe") .nes. "") .and. -
+ (f$search( "ssllib:ssl_libssl.exe") .nes. ""))
+$ then
+$! OpenSSL shared images with "SSL_xxx.EXE names.
+$ openssl = 2
+$ ssl_opt = ", ''proc_dev_dir'openssl_ssl_"+ -
+ f$getsyi("ARCH_NAME")+ ".opt /options"
+$ else
+$ if ((f$search( "ssllib:libcrypto.exe") .nes. "") .and. -
+ (f$search( "ssllib:libssl.exe") .nes. ""))
+$ then
+$! OpenSSL shared images with "xxx.EXE names.
+$ openssl = 3
+$ ssl_opt = ", ''proc_dev_dir'openssl_"+ -
+ f$getsyi("ARCH_NAME")+ ".opt /options"
+$ endif
+$ endif
+$ endif
+$ endif
+$ endif
+$ endif
+$!
+$! LDAP.
+$!
+$ if (ldap .eq. 0)
+$ then
+$ cc_defs = cc_defs+ ", CURL_DISABLE_LDAP=1"
+$ endif
+$!
+$! Form CC qualifiers.
+$!
+$ cc_defs = "/define = (''cc_defs')"
+$ cc_qual2 = cc_qual2+ " /object = ''objdir'"+ -
+ " /include = ([-.lib], [-.src],"+ -
+ " [-.packages.vms], [-.packages.vms.''arch_name'])"
+$!
+$ 'vo_c' "CC opts:", -
+ " ''cc_defs'", -
+ " ''cc_qual1'", -
+ " ''cc_qual2'"
+$!
+$! Inform the victim of our plans.
+$!
+$ if (hpssl)
+$ then
+$ 'vo_c' "%CURL-I-BLDHPSSL, building with HP SSL support"
+$ else
+$ if (openssl .ne. 0)
+$ then
+$ if (openssl .eq. 1)
+$ then
+$ 'vo_c' -
+ "%CURL-I-BLDOSSL_OLB, building with OpenSSL (object library) support"
+$ else
+$ 'vo_c' -
+ "%CURL-I-BLDOSSL_EXE, building with OpenSSL (shared image) support"
+$ endif
+$ else
+$ 'vo_c' "%CURL-I-BLDNOSSL, building with NO SSL support"
+$ endif
+$ endif
+$!
+$! Announce destination and SSL directories.
+$!
+$ 'vo_c' " OBJDIR = ''objdir'"
+$ 'vo_c' " EXEDIR = ''exedir'"
+$!
+$ if (openssl .ne. 0)
+$ then
+$ ssllib = f$trnlnm( "ssllib")
+$ if (ssllib .eqs. "")
+$ then
+$ ssllib = "(undefined)"
+$ endif
+$ 'vo_c' " SSLLIB = ''ssllib'"
+$!
+$ if (openssl .eq. 1)
+$ then
+$ ossl_lib1 = f$trnlnm( "ssllib")+ "LIBSSL.OLB"
+$ ossl_lib2 = f$trnlnm( "ssllib")+ "LIBCRYPTO.OLB"
+$ msg = "object libraries"
+$ else
+$ if (openssl .eq. 2)
+$ then
+$ ossl_lib1 = f$trnlnm( "ssllib")+ "SSL_LIBSSL.EXE"
+$ ossl_lib2 = f$trnlnm( "ssllib")+ "SSL_LIBCRYPTO.EXE"
+$ else
+$ ossl_lib1 = f$trnlnm( "ssllib")+ "LIBSSL.EXE"
+$ ossl_lib2 = f$trnlnm( "ssllib")+ "LIBCRYPTO.EXE"
+$ endif
+$ msg = "shared images"
+$ endif
+$ if ((f$search( ossl_lib1) .eqs. "") .or. -
+ (f$search( ossl_lib2) .eqs. ""))
+$ then
+$ write sys$output "Can't find OpenSSL ''msg':"
+$ write sys$output " ''ossl_lib1'"
+$ write sys$output " ''ossl_lib2'"
+$ goto Common_Exit
+$ endif
+$ endif
+$!
+$! Define the "curl" (process) logical name for "#include <curl/xxx.h>".
+$!
+$ curl = f$trnlnm( "curl", "LNM$PROCESS")
+$ if (curl .nes. "")
+$ then
+$ write sys$output ""
+$ write sys$output -
+ "Process logical name ""curl"" is already defined, but this procedure"
+$ write sys$output -
+ "would override that definition. Use a command like"
+$ write sys$output -
+ " deassign /process curl"
+$ write sys$output -
+ "to cancel that logical name definition, and then and re-run this procedure."
+$ write sys$output ""
+$ goto Common_Exit
+$ endif
+$ define curl 'top_dev_dir'.include.curl]
+$!
+$! Copy the VMS-specific config file into the product directory.
+$!
+$ call MoveIfDiff 'proc_dev_dir'config-vms.h 'objdir'curl_config.h
+$!
+$ on control_y then goto Common_Exit
+$!
+$ set default 'proc_dev_dir'
+$ call build "[--.lib]" "*.c" "''objdir'CURLLIB.OLB" "amigaos, nwlib, nwos"
+$ if ($status .eq. ctrl_y) then goto Common_Exit
+$ call build "[--.src]" "*.c" "''objdir'CURLSRC.OLB"
+$ if ($status .eq. ctrl_y) then goto Common_Exit
+$ call build "[]" "*.msg" "''objdir'CURLSRC.OLB"
+$ if ($status .eq. ctrl_y) then goto Common_Exit
+$!
+$ ldap_opt = ""
+$ if (ldap .ne. 0) then ldap_opt = ", ''proc_dev_dir'ldap.opt /options"
+$!
+$ if (openssl .ne. 0)
+$ then
+$ if (openssl .eq. 1)
+$ then
+$ 'vo_l' "%CURL-I-LINK_OSSL, linking with OpenSSL (object library)"
+$ else
+$ 'vo_l' "%CURL-I-LINK_HPSSL, linking with OpenSSL (shared image)"
+$ endif
+$ else
+$ if (hpssl)
+$ then
+$ 'vo_l' "%CURL-I-LINK_HPSSL, linking with HP SSL"
+$ else
+$ 'vo_l' "%CURL-I-LINK_NOSSL, linking with NO SSL support"
+$ endif
+$ endif
+$!
+$ link 'link_qual' /executable = 'exedir'CURL.EXE -
+ 'objdir'curlsrc.olb /library /include = (main, curlmsg), -
+ 'objdir'curllib.olb /library -
+ 'ssl_opt' -
+ 'ldap_opt'
+$!
+$ goto Common_Exit
+$!
+$! Subroutine to build everything with a filetype passed in via P2 in
+$! the directory passed in via P1 and put it in the object library named
+$! via P3. Exclude items in P4.
+$!
+$build: subroutine
+$ build_def = f$environment( "default")
+$ on control_y then goto EndLoop ! SS$_CONTROLY
+$ sts = 1 ! SS$_NORMAL.
+$! set noon
+$ set default 'p1'
+$ search = p2
+$ reset = f$search("reset")
+$ if f$search( p3) .eqs. ""
+$ then
+$ librarian /create /object 'p3'
+$ endif
+$ reject_list__ = ","+ f$edit( p4, "COLLAPSE, UPCASE")+ ","
+$ reject_list___len = f$length( reject_list__)
+$ reset = f$search( "reset", 1)
+$Loop:
+$ file = f$search( search, 1)
+$ if file .eqs. "" then goto EndLoop
+$! Skip a name if it's in the P4 exclusion list.
+$ if (p4 .nes. "")
+$ then
+$ name__ = ","+ -
+ f$edit( f$parse( file, , , "NAME", "SYNTAX_ONLY"), "UPCASE")+ -
+ ","
+$ if (f$locate( name__, reject_list__) .lt. reject_list___len)
+$ then
+$ goto Loop
+$ endif
+$ endif
+$ objfile = f$parse( "''objdir'.OBJ;", file)
+$ obj = f$search( objfile, 2)
+$ if (obj .nes. "")
+$ then
+$ if (f$cvtime(f$file(file,"rdt")) .gts. f$cvtime(f$file(obj,"rdt")))
+$ then
+$ call compile 'file'
+$ sts = $status
+$ if .not. sts
+$ then
+$ goto EndLoop
+$ endif
+$ librarian /object 'p3' 'objfile'
+$ else
+$ 'vo_o' "%CURL-I-OBJUTD, ", objfile, " is up to date"
+$ endif
+$ else
+$ 'vo_o' "%CURL-I-OBJDNE, ", file, " does not exist"
+$ call compile 'file'
+$ sts = $status
+$ if .not. sts
+$ then
+$ goto EndLoop
+$ endif
+$ librarian /object 'p3' 'objfile'
+$ endif
+$ goto Loop
+$EndLoop:
+$!!! purge
+$ set default 'build_def'
+$ exit 'sts'
+$ endsubroutine ! Build
+$!
+$! Based on the file TYPE, do the right compile command.
+$! Only C and MSG supported.
+$!
+$compile: subroutine
+$ on control_y then return ctrl_y ! SS$_CONTROLY
+$! set noon
+$ file = p1
+$ qual = p2+ p3+ p4+ p5+ p6+ p7+ p8
+$ typ = f$edit( f$parse( file, , , "TYPE"), "UPCASE") - "."
+$ if (typ .eqs. "C")
+$ then
+$ 'vo_c' "CC (opts) ", file
+$ CC 'cc_defs' -
+ 'cc_qual1' -
+ 'cc_qual2' -
+ 'file'
+$ else
+$ cmd_msg = "MESSAGE "+ msg_qual
+$ x = cmd_'typ'
+$ 'vo_c' x," ",file
+$ 'x' 'file'
+$ endif
+$ ENDSUBROUTINE ! Compile
+$!
+$! Do a diff of the file specified in P1 with that in P2. If different
+$! copy P1 to P2. This also covers if P2 doesn't exist, but not if P2
+$! is an invalid filespec.
+$!
+$MoveIfDiff: subroutine
+$ set NoOn
+$ define /user_mode sys$error nl:
+$ define /user_mode sys$output nl:
+$ differences 'p1' 'p2'
+$ status = $status
+$ if ( status .ne. %X006C8009) ! if status is not "no diff"
+$ then
+$ copy 'p1' 'p2'
+$ purge /nolog 'p2'
+$ endif
+$ on control_y then return ctrl_y ! SS$_CONTROLY
+$ ENDSUBROUTINE ! MoveIfDiff
+$!
+$Common_Exit:
+$ set default 'orig_def'
+$ if ((curl .eqs. "") .and. (f$trnlnm( "curl", "LNM$PROCESS") .nes. ""))
+$ then
+$ deassign curl
+$ endif
+$ exit
diff --git a/packages/vms/config-vms.h b/packages/vms/config-vms.h
new file mode 100644
index 0000000..461001c
--- /dev/null
+++ b/packages/vms/config-vms.h
@@ -0,0 +1,371 @@
+#ifndef HEADER_CONFIG_VMS_H
+#define HEADER_CONFIG_VMS_H
+
+/* */
+/* MSK, 02/05/04, Hand edited for trail build on Alpha V7.3, DEC C 6.5-003 */
+/* MSK, 03/09/04, Seems to work for all platforms I've built on so far. */
+/* Added HAVE_SYS_IOCTL_H define */
+/* TES, 10/06/04, Added MAX_INITIAL_POST_SIZE, HAVE_BASENAME */
+/* MSK, 02/02/05, Changed HAVE_TERMIOS_H to an undef since the change in */
+/* getpass.c no longer undef'd it during compile. */
+/* MSK, 02/08/05, turned two config-vms files into one by using USE_SSLEAY */
+/* MPZ, 12/28/05, changed HAVE_STRTOK_R define to use CRTL_VER */
+/* MSK, 01/27/07, needed to add HAVE_STRUCT_TIMEVAL define */
+
+/* Define cpu-machine-OS */
+#if defined(__alpha)
+# define OS "ALPHA-HP-VMS"
+#elif defined(__vax)
+# define OS "VAX-HP-VMS"
+#elif defined(__ia64)
+# define OS "IA64-HP-VMS"
+#else
+# define OS "UNKNOWN-HP-VMS"
+#endif
+
+/* Define if you have the ANSI C header files. */
+#define STDC_HEADERS 1
+
+/* Define if you can safely include both <sys/time.h> and <time.h>. */
+#define TIME_WITH_SYS_TIME 1
+
+/* The size of `int', as computed by sizeof. */
+#define SIZEOF_INT 4
+
+/* The size of `long double', as computed by sizeof. */
+#define SIZEOF_LONG_DOUBLE 8
+
+/* The size of `long long', as computed by sizeof. */
+#define SIZEOF_LONG_LONG 8
+
+/* The size of `short', as computed by sizeof. */
+#define SIZEOF_SHORT 2
+
+/* Define if you have the alarm function. */
+#define HAVE_ALARM 1
+
+/* Define if you have the geteuid function. */
+#define HAVE_GETEUID 1
+
+/* Define if you have the basename function. */
+#define HAVE_BASENAME 1
+
+/* 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 getpwuid function. */
+#define HAVE_GETPWUID 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 ioctl function. */
+#define HAVE_IOCTL 1
+
+/* Define if you have a working ioctl FIONBIO function. */
+#define HAVE_IOCTL_FIONBIO 1
+
+/* Define if you have a working ioctl SIOCGIFADDR function. */
+#define HAVE_IOCTL_SIOCGIFADDR 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 setvbuf function. */
+#define HAVE_SETVBUF 1
+
+/* Define if you have the sigaction function. */
+#define HAVE_SIGACTION 1
+
+/* Define if you have the signal function. */
+#define HAVE_SIGNAL 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 strcmpi function. */
+/* #define HAVE_STRCMPI 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 stricmp function. */
+/* #define HAVE_STRICMP 1 */
+
+/* Define if you have the strstr function. */
+#define HAVE_STRSTR 1
+
+/* Define if you have the ftruncate function. */
+#define HAVE_FTRUNCATE 1
+
+/* Define if you have the uname function. */
+#define HAVE_UNAME 1
+
+/* Define if you have the <err.h> header file. */
+#define HAVE_ERR_H 1
+
+/* Define if you have the <fcntl.h> header file. */
+#define HAVE_FCNTL_H 1
+
+/* Define if you have the <getopt.h> header file. */
+#define HAVE_GETOPT_H 1
+
+/* Define if you have the <malloc.h> header file. */
+#define HAVE_MALLOC_H 1
+
+/* Define if you need the malloc.h header header file even with stdlib.h */
+/* #define NEED_MALLOC_H 1 */
+
+/* Define if you have the <net/if.h> header file. */
+#define HAVE_NET_IF_H 1
+
+/* Define if you have the <netdb.h> header file. */
+#define HAVE_NETDB_H 1
+
+/* Define if you have the <netinet/if_ether.h> header file. */
+#define HAVE_NETINET_IF_ETHER_H 1
+
+/* Define if you have the <netinet/in.h> header file. */
+#define HAVE_NETINET_IN_H 1
+
+/* OpenSSL section starts here */
+
+/* Define if you have a working OpenSSL installation */
+#ifdef USE_SSLEAY
+
+/* if OpenSSL is in use */
+#define USE_OPENSSL 1
+
+/* Define if you have the crypto library (-lcrypto). */
+#define HAVE_LIBCRYPTO 1
+
+/* Define if you have the ssl library (-lssl). */
+#define HAVE_LIBSSL 1
+
+/* Define if you have the <openssl/crypto.h> header file. */
+#define HAVE_OPENSSL_CRYPTO_H 1
+
+/* Define if you have the <openssl/err.h> header file. */
+#define HAVE_OPENSSL_ERR_H 1
+
+/* Define if you have the <openssl/pem.h> header file. */
+#define HAVE_OPENSSL_PEM_H 1
+
+/* Define if you have the <openssl/rsa.h> header file. */
+#define HAVE_OPENSSL_RSA_H 1
+
+/* Define if you have the <openssl/ssl.h> header file. */
+#define HAVE_OPENSSL_SSL_H 1
+
+/* Define if you have the <openssl/x509.h> header file. */
+#define HAVE_OPENSSL_X509_H 1
+
+/*
+ * This needs to be defined for OpenSSL 0.9.7 and other versions that have the
+ * ENGINE stuff supported. If an include of "openssl/engine.h" fails, then
+ * undefine the define below.
+*/
+#define HAVE_OPENSSL_ENGINE_H 1
+
+#endif /* USE_SSLEAY */
+/* OpenSSL section ends here */
+
+/* Define if you have the <pwd.h> header file. */
+#define HAVE_PWD_H 1
+
+/* Define if you have the <sgtty.h> header file. */
+#define HAVE_SGTTY_H 1
+
+/* Define if you have the <stdlib.h> header file. */
+#define HAVE_STDLIB_H 1
+
+/* Define if you have the <sys/socket.h> header file. */
+#define HAVE_SYS_SOCKET_H 1
+
+/* Define if you have the <sys/stat.h> header file. */
+#define HAVE_SYS_STAT_H 1
+
+/* Define if you have the <sys/time.h> header file. */
+#define HAVE_SYS_TIME_H 1
+
+/* Define if you have the <sys/types.h> header file. */
+#define HAVE_SYS_TYPES_H 1
+
+/* Define if you have the <termios.h> header file. */
+#undef HAVE_TERMIOS_H
+
+/* Define if you have the <time.h> header file. */
+#define HAVE_TIME_H 1
+
+/* Define if you have the <unistd.h> header file. */
+#define HAVE_UNISTD_H 1
+
+/* Define if you have the resolv library (-lresolv). */
+#define HAVE_LIBRESOLV 1
+
+/* Define if you have the socket library (-lsocket). */
+#define HAVE_LIBSOCKET 1
+
+/* Define if getaddrinfo exists and works */
+#define HAVE_GETADDRINFO 1
+
+/* Define if you have the <timeval.h> header file. */
+#define HAVE_TIMEVAL_H 1
+
+/* Define if you have the timeval struct. */
+#define HAVE_STRUCT_TIMEVAL 1
+
+/* Name of this package! */
+#define PACKAGE "not-used"
+
+/* Version number of this archive. */
+#define VERSION "not-used"
+
+/* Define if you have the getpass function. */
+#undef HAVE_GETPASS
+
+/* Define if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define if you have the <strings.h> header file. */
+#define HAVE_STRINGS_H 1
+
+/* Define if you have the <string.h> header file. */
+#define HAVE_STRING_H 1
+
+/* Define if you have the `strtok_r' function. */
+/* Condition lifted from <string.h> */
+#if __CRTL_VER >= 70301000
+# define HAVE_STRTOK_R 1
+#endif
+
+/* Define if you have the `strtoll' function. */
+#define HAVE_STRTOLL 1
+
+/* Define if you have the <memory.h> header file. */
+#define HAVE_MEMORY_H 1
+
+/* Define to 1 if you need the memory.h header file even with stdlib.h */
+#define NEED_MEMORY_H 1
+
+/* Define if you have the `sigsetjmp' function. */
+#define HAVE_SIGSETJMP 1
+
+/* Define to 1 if you have the <setjmp.h> header file. */
+#define HAVE_SETJMP_H 1
+
+/* Define to 1 if you have the <limits.h> header file. */
+#define HAVE_LIMITS_H 1
+
+/* Define to 1 if you have the <sys/ioctl.h> header file. */
+#define HAVE_SYS_IOCTL_H 1
+
+/* Define to 1 if you have the <stropts.h> header file. */
+#define HAVE_STROPTS_H 1
+
+/* Define if you have the getnameinfo function. */
+#define HAVE_GETNAMEINFO 1
+
+/* Define to the type qualifier of arg 1 for getnameinfo. */
+#define GETNAMEINFO_QUAL_ARG1 const
+
+/* Define to the type of arg 1 for getnameinfo. */
+#define GETNAMEINFO_TYPE_ARG1 struct sockaddr *
+
+/* Define to the type of arg 2 for getnameinfo. */
+#define GETNAMEINFO_TYPE_ARG2 size_t
+
+/* Define to the type of args 4 and 6 for getnameinfo. */
+#define GETNAMEINFO_TYPE_ARG46 size_t
+
+/* Define to the type of arg 7 for getnameinfo. */
+#define GETNAMEINFO_TYPE_ARG7 int
+
+/* Define if you have the recv function. */
+#define HAVE_RECV 1
+
+/* Define to the type of arg 1 for recv. */
+#define RECV_TYPE_ARG1 int
+
+/* Define to the type of arg 2 for recv. */
+#define RECV_TYPE_ARG2 void *
+
+/* Define to the type of arg 3 for recv. */
+#define RECV_TYPE_ARG3 int
+
+/* Define to the type of arg 4 for recv. */
+#define RECV_TYPE_ARG4 int
+
+/* Define to the function return type for recv. */
+#define RECV_TYPE_RETV int
+
+/* Define if you have the recvfrom function. */
+#define HAVE_RECVFROM 1
+
+/* Define to the type of arg 1 for recvfrom. */
+#define RECVFROM_TYPE_ARG1 int
+
+/* Define to the type pointed by arg 2 for recvfrom. */
+#define RECVFROM_TYPE_ARG2 void
+
+/* Define if the type pointed by arg 2 for recvfrom is void. */
+#define RECVFROM_TYPE_ARG2_IS_VOID 1
+
+/* Define to the type of arg 3 for recvfrom. */
+#define RECVFROM_TYPE_ARG3 int
+
+/* Define to the type of arg 4 for recvfrom. */
+#define RECVFROM_TYPE_ARG4 int
+
+/* Define to the type pointed by arg 5 for recvfrom. */
+#define RECVFROM_TYPE_ARG5 struct sockaddr
+
+/* Define to the type pointed by arg 6 for recvfrom. */
+#define RECVFROM_TYPE_ARG6 int
+
+/* Define to the function return type for recvfrom. */
+#define RECVFROM_TYPE_RETV int
+
+/* Define if you have the send function. */
+#define HAVE_SEND 1
+
+/* Define to the type of arg 1 for send. */
+#define SEND_TYPE_ARG1 int
+
+/* Define to the type qualifier of arg 2 for send. */
+#define SEND_QUAL_ARG2 const
+
+/* Define to the type of arg 2 for send. */
+#define SEND_TYPE_ARG2 void *
+
+/* Define to the type of arg 3 for send. */
+#define SEND_TYPE_ARG3 int
+
+/* Define to the type of arg 4 for send. */
+#define SEND_TYPE_ARG4 int
+
+/* Define to the function return type for send. */
+#define SEND_TYPE_RETV int
+
+/* Define to hide dollar sign from compilers in strict ansi mode. */
+#define decc_translate_vms(__s) decc$translate_vms(__s)
+
+#endif /* HEADER_CONFIG_VMS_H */
diff --git a/packages/vms/curlmsg.h b/packages/vms/curlmsg.h
new file mode 100644
index 0000000..32f335f
--- /dev/null
+++ b/packages/vms/curlmsg.h
@@ -0,0 +1,119 @@
+#ifndef HEADER_CURLMSG_H
+#define HEADER_CURLMSG_H
+
+#pragma __member_alignment __save
+#pragma __nomember_alignment
+
+/* */
+/* CURLMSG.H */
+/* */
+/* SDL File Generated by VAX-11 Message V04-00 on 3-SEP-2008 13:33:54.09 */
+/* */
+/* THESE VMS ERROR CODES ARE GENERATED BY TAKING APART THE CURL.H */
+/* FILE AND PUTTING ALL THE CURLE_* ENUM STUFF INTO THIS FILE, */
+/* CURLMSG.MSG. AN .SDL FILE IS CREATED FROM THIS FILE WITH */
+/* MESSAGE/SDL. THE .H FILE IS CREATED USING THE FREEWARE SDL TOOL */
+/* AGAINST THE .SDL FILE WITH SDL/ALPHA/LANG=CC COMMAND. */
+/* */
+/* WITH THE EXCEPTION OF CURLE_OK, ALL OF THE MESSAGES ARE AT */
+/* THE ERROR SEVERITY LEVEL. WITH THE EXCEPTION OF */
+/* PEER_FAILED_VERIF, WHICH IS A SHORTENED FORM OF */
+/* PEER_FAILED_VERIFICATION, THESE ARE THE SAME NAMES AS THE */
+/* CURLE_ ONES IN INCLUDE/CURL.H. THE MESSAGE UTILITY MANUAL STATES */
+/* "THE COMBINED LENGTH OF THE PREFIX AND THE MESSAGE SYMBOL NAME CANNOT */
+/* EXCEED 31 CHARACTERS." WITH A PREFIX OF FIVE THAT LEAVES US WITH 26 */
+/* FOR THE MESSAGE NAME. */
+/* */
+/* IF YOU UPDATE THIS FILE, UPDATE CURLMSG_VMS.H SO THAT THEY ARE IN SYNC */
+/* */
+
+#define CURL_FACILITY 3841
+#define CURL_OK 251756553
+#define CURL_UNSUPPORTED_PROTOCOL 251756562
+#define CURL_FAILED_INIT 251756570
+#define CURL_URL_MALFORMAT 251756578
+#define CURL_OBSOLETE4 251756586
+#define CURL_COULDNT_RESOLVE_PROXY 251756594
+#define CURL_COULDNT_RESOLVE_HOST 251756602
+#define CURL_COULDNT_CONNECT 251756610
+#define CURL_FTP_WEIRD_SERVER_REPLY 251756618
+#define CURL_FTP_ACCESS_DENIED 251756626
+#define CURL_OBSOLETE10 251756634
+#define CURL_FTP_WEIRD_PASS_REPLY 251756642
+#define CURL_OBSOLETE12 251756650
+#define CURL_FTP_WEIRD_PASV_REPLY 251756658
+#define CURL_FTP_WEIRD_227_FORMAT 251756666
+#define CURL_FTP_CANT_GET_HOST 251756674
+#define CURL_OBSOLETE16 251756682
+#define CURL_FTP_COULDNT_SET_TYPE 251756690
+#define CURL_PARTIAL_FILE 251756698
+#define CURL_FTP_COULDNT_RETR_FILE 251756706
+#define CURL_OBSOLETE20 251756714
+#define CURL_QUOTE_ERROR 251756722
+#define CURL_HTTP_RETURNED_ERROR 251756730
+#define CURL_WRITE_ERROR 251756738
+#define CURL_OBSOLETE24 251756746
+#define CURL_UPLOAD_FAILED 251756754
+#define CURL_READ_ERROR 251756762
+#define CURL_OUT_OF_MEMORY 251756770
+#define CURL_OPERATION_TIMEOUTED 251756778
+#define CURL_OBSOLETE29 251756786
+#define CURL_FTP_PORT_FAILED 251756794
+#define CURL_FTP_COULDNT_USE_REST 251756802
+#define CURL_OBSOLETE32 251756810
+#define CURL_RANGE_ERROR 251756818
+#define CURL_HTTP_POST_ERROR 251756826
+#define CURL_SSL_CONNECT_ERROR 251756834
+#define CURL_BAD_DOWNLOAD_RESUME 251756842
+#define CURL_FILE_COULDNT_READ_FILE 251756850
+#define CURL_LDAP_CANNOT_BIND 251756858
+#define CURL_LDAP_SEARCH_FAILED 251756866
+#define CURL_OBSOLETE40 251756874
+#define CURL_FUNCTION_NOT_FOUND 251756882
+#define CURL_ABORTED_BY_CALLBACK 251756890
+#define CURL_BAD_FUNCTION_ARGUMENT 251756898
+#define CURL_OBSOLETE44 251756906
+#define CURL_INTERFACE_FAILED 251756914
+#define CURL_OBSOLETE46 251756922
+#define CURL_TOO_MANY_REDIRECTS 251756930
+#define CURL_UNKNOWN_TELNET_OPTION 251756938
+#define CURL_TELNET_OPTION_SYNTAX 251756946
+#define CURL_OBSOLETE50 251756954
+#define CURL_PEER_FAILED_VERIF 251756962
+#define CURL_GOT_NOTHING 251756970
+#define CURL_SSL_ENGINE_NOTFOUND 251756978
+#define CURL_SSL_ENGINE_SETFAILED 251756986
+#define CURL_SEND_ERROR 251756994
+#define CURL_RECV_ERROR 251757002
+#define CURL_OBSOLETE57 251757010
+#define CURL_SSL_CERTPROBLEM 251757018
+#define CURL_SSL_CIPHER 251757026
+#define CURL_SSL_CACERT 251757034
+#define CURL_BAD_CONTENT_ENCODING 251757042
+#define CURL_LDAP_INVALID_URL 251757050
+#define CURL_FILESIZE_EXCEEDED 251757058
+#define CURL_USE_SSL_FAILED 251757066
+#define CURL_SEND_FAIL_REWIND 251757074
+#define CURL_SSL_ENGINE_INITFAILED 251757082
+#define CURL_LOGIN_DENIED 251757090
+#define CURL_TFTP_NOTFOUND 251757098
+#define CURL_TFTP_PERM 251757106
+#define CURL_REMOTE_DISK_FULL 251757114
+#define CURL_TFTP_ILLEGAL 251757122
+#define CURL_TFTP_UNKNOWNID 251757130
+#define CURL_REMOTE_FILE_EXISTS 251757138
+#define CURL_TFTP_NOSUCHUSER 251757146
+#define CURL_CONV_FAILED 251757154
+#define CURL_CONV_REQD 251757162
+#define CURL_SSL_CACERT_BADFILE 251757170
+#define CURL_REMOTE_FILE_NOT_FOUND 251757178
+#define CURL_SSH 251757186
+#define CURL_SSL_SHUTDOWN_FAILED 251757194
+#define CURL_AGAIN 251757202
+#define CURL_SSL_CRL_BADFILE 251757210
+#define CURL_SSL_ISSUER_ERROR 251757218
+#define CURL_CURL_LAST 251757226
+
+#pragma __member_alignment __restore
+
+#endif /* HEADER_CURLMSG_H */
diff --git a/packages/vms/curlmsg.msg b/packages/vms/curlmsg.msg
new file mode 100644
index 0000000..7fd4483
--- /dev/null
+++ b/packages/vms/curlmsg.msg
@@ -0,0 +1,111 @@
+!
+! These VMS error codes are generated by taking apart the curl.h
+! file and putting all the CURLE_* enum stuff into this file,
+! CURLMSG.MSG. An .SDL file is created from this file with
+! MESSAGE/SDL. The .H file is created using the freeware SDL tool
+! against the .SDL file with SDL/ALPHA/LANG=CC command.
+!
+! With the exception of CURLE_OK, all of the messages are at
+! the error severity level. With the exception of
+! PEER_FAILED_VERIF, which is a shortened form of
+! PEER_FAILED_VERIFICATION, these are the same names as the
+! CURLE_ ones in include/curl.h. The Message Utility manual states
+! "The combined length of the prefix and the message symbol name cannot
+! exceed 31 characters." With a prefix of five that leaves us with 26
+! for the message name.
+!
+! If you update this file also update curlmsg_vms.h so that they are in sync
+!
+.TITLE CURLMSG Message files
+.FACILITY CURL,1793 /PREFIX=CURL_
+.BASE 1
+.SEVERITY SUCCESS
+OK <normal successful completion>
+
+.SEVERITY ERROR
+UNSUPPORTED_PROTOCOL <unsupported protocol>
+FAILED_INIT <failed init>
+URL_MALFORMAT <URL malformat>
+OBSOLETE4 <obsolete error code>
+COULDNT_RESOLVE_PROXY <could not resolve proxy>
+COULDNT_RESOLVE_HOST <could not resolve host>
+COULDNT_CONNECT <could not connect>
+FTP_WEIRD_SERVER_REPLY <FTP weird server reply>
+FTP_ACCESS_DENIED <FTP access denied>
+OBSOLETE10 <obsolete error code>
+FTP_WEIRD_PASS_REPLY <FTP weird PASS reply>
+OBSOLETE12 <obsolete error code>
+FTP_WEIRD_PASV_REPLY <FTP weird PASV reply>
+FTP_WEIRD_227_FORMAT <FTP weird 227 format>
+FTP_CANT_GET_HOST <FTP can not get host>
+OBSOLETE16 <obsolete error code>
+FTP_COULDNT_SET_TYPE <FTP could not set type>
+PARTIAL_FILE <partial file>
+FTP_COULDNT_RETR_FILE <FTP could not RETR file>
+OBSOLETE20 <obsolete error code>
+QUOTE_ERROR <quote command error>
+HTTP_RETURNED_ERROR <HTTP returned error>
+WRITE_ERROR <write error>
+OBSOLETE24 <obsolete error code>
+UPLOAD_FAILED <failed upload command>
+READ_ERROR <read error, could not open/read file>
+OUT_OF_MEMORY <out of memory>
+OPERATION_TIMEOUTED <operation timed out, timeout time was reached>
+OBSOLETE29 <obsolete error code>
+FTP_PORT_FAILED <FTP PORT operation failed>
+FTP_COULDNT_USE_REST <FTP REST command failed>
+OBSOLETE32 <obsolete error code>
+RANGE_ERROR <RANGE command error>
+HTTP_POST_ERROR <HTTP POST error>
+SSL_CONNECT_ERROR <SSL connect error>
+BAD_DOWNLOAD_RESUME <bad download resume>
+FILE_COULDNT_READ_FILE <FILE could not read file>
+LDAP_CANNOT_BIND <LDAP cannot bind>
+LDAP_SEARCH_FAILED <LDAP search failed>
+OBSOLETE40 <obsolete error code>
+FUNCTION_NOT_FOUND <function not found>
+ABORTED_BY_CALLBACK <aborted by callback>
+BAD_FUNCTION_ARGUMENT <bad function argument>
+OBSOLETE44 <obsolete error code>
+INTERFACE_FAILED <CURLOPT_INTERFACE failed>
+OBSOLETE46 <obsolete error code>
+TOO_MANY_REDIRECTS <too many redirects>
+UNKNOWN_TELNET_OPTION <unknown TELNET option>
+TELNET_OPTION_SYNTAX <malformed TELNET option syntax>
+OBSOLETE50 <obsolete error code>
+PEER_FAILED_VERIF <peer certificate or fingerprint failed>
+GOT_NOTHING <got nothing>
+SSL_ENGINE_NOTFOUND <SSL crypto engine not found>
+SSL_ENGINE_SETFAILED <SSL can not set SSL crypto engine as default>
+SEND_ERROR <SEND error, failure sending network data>
+RECV_ERROR <RECV error, failure receiving network data>
+OBSOLETE57 <obsolete error code>
+SSL_CERTPROBLEM <SSL problem with the local certificate>
+SSL_CIPHER <SSL CIPHER, could not use specified cipher>
+SSL_CACERT <SSL CACERT, problem with the CA cert (path?)>
+BAD_CONTENT_ENCODING <unrecognized transfer encoding>
+LDAP_INVALID_URL <LDAP invalid url>
+FILESIZE_EXCEEDED <maximum file size exceeded>
+USE_SSL_FAILED <requested FTP SSL level failed>
+SEND_FAIL_REWIND <sending data requires a rewind that failed>
+SSL_ENGINE_INITFAILED <failed to initialise ENGINE>
+LOGIN_DENIED <user or password not accepted. failed to login>
+TFTP_NOTFOUND <file not found on server>
+TFTP_PERM <permission problem on server>
+REMOTE_DISK_FULL <out of disk space on server>
+TFTP_ILLEGAL <illegal TFTP operation>
+TFTP_UNKNOWNID <unknown transfer ID>
+REMOTE_FILE_EXISTS <file already exists>
+TFTP_NOSUCHUSER <no such user>
+CONV_FAILED <conversion failed>
+CONV_REQD <caller must register conversion callbacks>
+SSL_CACERT_BADFILE <could not load CACERT file>
+REMOTE_FILE_NOT_FOUND <remote file not found>
+SSH <unspecified error from the SSH layer>
+SSL_SHUTDOWN_FAILED <failed to shut down the SSL connection>
+AGAIN <socket not ready, wait and try again>
+SSL_CRL_BADFILE <could not load CRL file, missing or wrong format>
+SSL_ISSUER_ERROR <issuer check failed>
+CURL_LAST <CURLMSG.MSG is out of sync with the source code>
+
+.END
diff --git a/packages/vms/curlmsg.sdl b/packages/vms/curlmsg.sdl
new file mode 100644
index 0000000..e192c07
--- /dev/null
+++ b/packages/vms/curlmsg.sdl
@@ -0,0 +1,115 @@
+
+
+ MODULE $CURDEF;
+
+/*
+/* This SDL File Generated by VAX-11 Message V04-00 on 3-SEP-2008 13:33:54.09
+/*
+/* $ID: CURLMSG.MSG,V 1.7 2008-05-30 23:51:09 CURLVMS EXP $
+/*
+/* THESE VMS ERROR CODES ARE GENERATED BY TAKING APART THE CURL.H
+/* FILE AND PUTTING ALL THE CURLE_* ENUM STUFF INTO THIS FILE,
+/* CURLMSG.MSG. AN .SDL FILE IS CREATED FROM THIS FILE WITH
+/* MESSAGE/SDL. THE .H FILE IS CREATED USING THE FREEWARE SDL TOOL
+/* AGAINST THE .SDL FILE WITH SDL/ALPHA/LANG=CC COMMAND.
+/*
+/* WITH THE EXCEPTION OF CURLE_OK, ALL OF THE MESSAGES ARE AT
+/* THE ERROR SEVERITY LEVEL. WITH THE EXCEPTION OF
+/* PEER_FAILED_VERIF, WHICH IS A SHORTENED FORM OF
+/* PEER_FAILED_VERIFICATION, THESE ARE THE SAME NAMES AS THE
+/* CURLE_ ONES IN INCLUDE/CURL.H. THE MESSAGE UTILITY MANUAL STATES
+/* "THE COMBINED LENGTH OF THE PREFIX AND THE MESSAGE SYMBOL NAME CANNOT
+/* EXCEED 31 CHARACTERS." WITH A PREFIX OF FIVE THAT LEAVES US WITH 26
+/* FOR THE MESSAGE NAME.
+/*
+/* IF YOU UPDATE THIS FILE ALSO UPDATE CURLMSG_VMS.H SO THAT THEY ARE IN SYNC
+/*
+ CONSTANT
+ "FACILITY" EQUALS 3841 PREFIX "CURL" TAG ""
+ ,"OK" EQUALS %X0F018009 PREFIX "CURL" TAG ""
+ ,"UNSUPPORTED_PROTOCOL" EQUALS %X0F018012 PREFIX "CURL" TAG ""
+ ,"FAILED_INIT" EQUALS %X0F01801A PREFIX "CURL" TAG ""
+ ,"URL_MALFORMAT" EQUALS %X0F018022 PREFIX "CURL" TAG ""
+ ,"OBSOLETE4" EQUALS %X0F01802A PREFIX "CURL" TAG ""
+ ,"COULDNT_RESOLVE_PROXY" EQUALS %X0F018032 PREFIX "CURL" TAG ""
+ ,"COULDNT_RESOLVE_HOST" EQUALS %X0F01803A PREFIX "CURL" TAG ""
+ ,"COULDNT_CONNECT" EQUALS %X0F018042 PREFIX "CURL" TAG ""
+ ,"FTP_WEIRD_SERVER_REPLY" EQUALS %X0F01804A PREFIX "CURL" TAG ""
+ ,"FTP_ACCESS_DENIED" EQUALS %X0F018052 PREFIX "CURL" TAG ""
+ ,"OBSOLETE10" EQUALS %X0F01805A PREFIX "CURL" TAG ""
+ ,"FTP_WEIRD_PASS_REPLY" EQUALS %X0F018062 PREFIX "CURL" TAG ""
+ ,"OBSOLETE12" EQUALS %X0F01806A PREFIX "CURL" TAG ""
+ ,"FTP_WEIRD_PASV_REPLY" EQUALS %X0F018072 PREFIX "CURL" TAG ""
+ ,"FTP_WEIRD_227_FORMAT" EQUALS %X0F01807A PREFIX "CURL" TAG ""
+ ,"FTP_CANT_GET_HOST" EQUALS %X0F018082 PREFIX "CURL" TAG ""
+ ,"OBSOLETE16" EQUALS %X0F01808A PREFIX "CURL" TAG ""
+ ,"FTP_COULDNT_SET_TYPE" EQUALS %X0F018092 PREFIX "CURL" TAG ""
+ ,"PARTIAL_FILE" EQUALS %X0F01809A PREFIX "CURL" TAG ""
+ ,"FTP_COULDNT_RETR_FILE" EQUALS %X0F0180A2 PREFIX "CURL" TAG ""
+ ,"OBSOLETE20" EQUALS %X0F0180AA PREFIX "CURL" TAG ""
+ ,"QUOTE_ERROR" EQUALS %X0F0180B2 PREFIX "CURL" TAG ""
+ ,"HTTP_RETURNED_ERROR" EQUALS %X0F0180BA PREFIX "CURL" TAG ""
+ ,"WRITE_ERROR" EQUALS %X0F0180C2 PREFIX "CURL" TAG ""
+ ,"OBSOLETE24" EQUALS %X0F0180CA PREFIX "CURL" TAG ""
+ ,"UPLOAD_FAILED" EQUALS %X0F0180D2 PREFIX "CURL" TAG ""
+ ,"READ_ERROR" EQUALS %X0F0180DA PREFIX "CURL" TAG ""
+ ,"OUT_OF_MEMORY" EQUALS %X0F0180E2 PREFIX "CURL" TAG ""
+ ,"OPERATION_TIMEOUTED" EQUALS %X0F0180EA PREFIX "CURL" TAG ""
+ ,"OBSOLETE29" EQUALS %X0F0180F2 PREFIX "CURL" TAG ""
+ ,"FTP_PORT_FAILED" EQUALS %X0F0180FA PREFIX "CURL" TAG ""
+ ,"FTP_COULDNT_USE_REST" EQUALS %X0F018102 PREFIX "CURL" TAG ""
+ ,"OBSOLETE32" EQUALS %X0F01810A PREFIX "CURL" TAG ""
+ ,"RANGE_ERROR" EQUALS %X0F018112 PREFIX "CURL" TAG ""
+ ,"HTTP_POST_ERROR" EQUALS %X0F01811A PREFIX "CURL" TAG ""
+ ,"SSL_CONNECT_ERROR" EQUALS %X0F018122 PREFIX "CURL" TAG ""
+ ,"BAD_DOWNLOAD_RESUME" EQUALS %X0F01812A PREFIX "CURL" TAG ""
+ ,"FILE_COULDNT_READ_FILE" EQUALS %X0F018132 PREFIX "CURL" TAG ""
+ ,"LDAP_CANNOT_BIND" EQUALS %X0F01813A PREFIX "CURL" TAG ""
+ ,"LDAP_SEARCH_FAILED" EQUALS %X0F018142 PREFIX "CURL" TAG ""
+ ,"OBSOLETE40" EQUALS %X0F01814A PREFIX "CURL" TAG ""
+ ,"FUNCTION_NOT_FOUND" EQUALS %X0F018152 PREFIX "CURL" TAG ""
+ ,"ABORTED_BY_CALLBACK" EQUALS %X0F01815A PREFIX "CURL" TAG ""
+ ,"BAD_FUNCTION_ARGUMENT" EQUALS %X0F018162 PREFIX "CURL" TAG ""
+ ,"OBSOLETE44" EQUALS %X0F01816A PREFIX "CURL" TAG ""
+ ,"INTERFACE_FAILED" EQUALS %X0F018172 PREFIX "CURL" TAG ""
+ ,"OBSOLETE46" EQUALS %X0F01817A PREFIX "CURL" TAG ""
+ ,"TOO_MANY_REDIRECTS" EQUALS %X0F018182 PREFIX "CURL" TAG ""
+ ,"UNKNOWN_TELNET_OPTION" EQUALS %X0F01818A PREFIX "CURL" TAG ""
+ ,"TELNET_OPTION_SYNTAX" EQUALS %X0F018192 PREFIX "CURL" TAG ""
+ ,"OBSOLETE50" EQUALS %X0F01819A PREFIX "CURL" TAG ""
+ ,"PEER_FAILED_VERIF" EQUALS %X0F0181A2 PREFIX "CURL" TAG ""
+ ,"GOT_NOTHING" EQUALS %X0F0181AA PREFIX "CURL" TAG ""
+ ,"SSL_ENGINE_NOTFOUND" EQUALS %X0F0181B2 PREFIX "CURL" TAG ""
+ ,"SSL_ENGINE_SETFAILED" EQUALS %X0F0181BA PREFIX "CURL" TAG ""
+ ,"SEND_ERROR" EQUALS %X0F0181C2 PREFIX "CURL" TAG ""
+ ,"RECV_ERROR" EQUALS %X0F0181CA PREFIX "CURL" TAG ""
+ ,"OBSOLETE57" EQUALS %X0F0181D2 PREFIX "CURL" TAG ""
+ ,"SSL_CERTPROBLEM" EQUALS %X0F0181DA PREFIX "CURL" TAG ""
+ ,"SSL_CIPHER" EQUALS %X0F0181E2 PREFIX "CURL" TAG ""
+ ,"SSL_CACERT" EQUALS %X0F0181EA PREFIX "CURL" TAG ""
+ ,"BAD_CONTENT_ENCODING" EQUALS %X0F0181F2 PREFIX "CURL" TAG ""
+ ,"LDAP_INVALID_URL" EQUALS %X0F0181FA PREFIX "CURL" TAG ""
+ ,"FILESIZE_EXCEEDED" EQUALS %X0F018202 PREFIX "CURL" TAG ""
+ ,"USE_SSL_FAILED" EQUALS %X0F01820A PREFIX "CURL" TAG ""
+ ,"SEND_FAIL_REWIND" EQUALS %X0F018212 PREFIX "CURL" TAG ""
+ ,"SSL_ENGINE_INITFAILED" EQUALS %X0F01821A PREFIX "CURL" TAG ""
+ ,"LOGIN_DENIED" EQUALS %X0F018222 PREFIX "CURL" TAG ""
+ ,"TFTP_NOTFOUND" EQUALS %X0F01822A PREFIX "CURL" TAG ""
+ ,"TFTP_PERM" EQUALS %X0F018232 PREFIX "CURL" TAG ""
+ ,"REMOTE_DISK_FULL" EQUALS %X0F01823A PREFIX "CURL" TAG ""
+ ,"TFTP_ILLEGAL" EQUALS %X0F018242 PREFIX "CURL" TAG ""
+ ,"TFTP_UNKNOWNID" EQUALS %X0F01824A PREFIX "CURL" TAG ""
+ ,"REMOTE_FILE_EXISTS" EQUALS %X0F018252 PREFIX "CURL" TAG ""
+ ,"TFTP_NOSUCHUSER" EQUALS %X0F01825A PREFIX "CURL" TAG ""
+ ,"CONV_FAILED" EQUALS %X0F018262 PREFIX "CURL" TAG ""
+ ,"CONV_REQD" EQUALS %X0F01826A PREFIX "CURL" TAG ""
+ ,"SSL_CACERT_BADFILE" EQUALS %X0F018272 PREFIX "CURL" TAG ""
+ ,"REMOTE_FILE_NOT_FOUND" EQUALS %X0F01827A PREFIX "CURL" TAG ""
+ ,"SSH" EQUALS %X0F018282 PREFIX "CURL" TAG ""
+ ,"SSL_SHUTDOWN_FAILED" EQUALS %X0F01828A PREFIX "CURL" TAG ""
+ ,"AGAIN" EQUALS %X0F018292 PREFIX "CURL" TAG ""
+ ,"SSL_CRL_BADFILE" EQUALS %X0F01829A PREFIX "CURL" TAG ""
+ ,"SSL_ISSUER_ERROR" EQUALS %X0F0182A2 PREFIX "CURL" TAG ""
+ ,"CURL_LAST" EQUALS %X0F0182AA PREFIX "CURL" TAG ""
+ ;
+ END_MODULE;
diff --git a/packages/vms/curlmsg_vms.h b/packages/vms/curlmsg_vms.h
new file mode 100644
index 0000000..e99e88c
--- /dev/null
+++ b/packages/vms/curlmsg_vms.h
@@ -0,0 +1,120 @@
+#ifndef HEADER_CURLMSG_VMS_H
+#define HEADER_CURLMSG_VMS_H
+
+/* */
+/* CURLMSG_VMS.H */
+/* */
+/* This defines the necessary bits to change CURLE_* error codes to VMS */
+/* style error codes. CURLMSG.H is built from CURLMSG.SDL which is built */
+/* from CURLMSG.MSG. The vms_cond array is used to return VMS errors by */
+/* putting the VMS error codes into the array offset based on CURLE_* code. */
+/* */
+/* If you update CURLMSG.MSG make sure to update this file to match. */
+/* */
+
+#include "curlmsg.h"
+
+/*
+#define FAC_CURL 0xC01
+#define FAC_SYSTEM 0
+#define MSG_NORMAL 0
+*/
+
+/*
+#define SEV_WARNING 0
+#define SEV_SUCCESS 1
+#define SEV_ERROR 2
+#define SEV_INFO 3
+#define SEV_FATAL 4
+*/
+
+static const long vms_cond[] =
+ {
+ CURL_OK,
+ CURL_UNSUPPORTED_PROTOCOL,
+ CURL_FAILED_INIT,
+ CURL_URL_MALFORMAT,
+ CURL_OBSOLETE4,
+ CURL_COULDNT_RESOLVE_PROXY,
+ CURL_COULDNT_RESOLVE_HOST,
+ CURL_COULDNT_CONNECT,
+ CURL_FTP_WEIRD_SERVER_REPLY,
+ CURL_FTP_ACCESS_DENIED,
+ CURL_OBSOLETE10,
+ CURL_FTP_WEIRD_PASS_REPLY,
+ CURL_OBSOLETE12,
+ CURL_FTP_WEIRD_PASV_REPLY,
+ CURL_FTP_WEIRD_227_FORMAT,
+ CURL_FTP_CANT_GET_HOST,
+ CURL_OBSOLETE16,
+ CURL_FTP_COULDNT_SET_TYPE,
+ CURL_PARTIAL_FILE,
+ CURL_FTP_COULDNT_RETR_FILE,
+ CURL_OBSOLETE20,
+ CURL_QUOTE_ERROR,
+ CURL_HTTP_RETURNED_ERROR,
+ CURL_WRITE_ERROR,
+ CURL_OBSOLETE24,
+ CURL_UPLOAD_FAILED,
+ CURL_READ_ERROR,
+ CURL_OUT_OF_MEMORY,
+ CURL_OPERATION_TIMEOUTED,
+ CURL_OBSOLETE29,
+ CURL_FTP_PORT_FAILED,
+ CURL_FTP_COULDNT_USE_REST,
+ CURL_OBSOLETE32,
+ CURL_RANGE_ERROR,
+ CURL_HTTP_POST_ERROR,
+ CURL_SSL_CONNECT_ERROR,
+ CURL_BAD_DOWNLOAD_RESUME,
+ CURL_FILE_COULDNT_READ_FILE,
+ CURL_LDAP_CANNOT_BIND,
+ CURL_LDAP_SEARCH_FAILED,
+ CURL_OBSOLETE40,
+ CURL_FUNCTION_NOT_FOUND,
+ CURL_ABORTED_BY_CALLBACK,
+ CURL_BAD_FUNCTION_ARGUMENT,
+ CURL_OBSOLETE44,
+ CURL_INTERFACE_FAILED,
+ CURL_OBSOLETE46,
+ CURL_TOO_MANY_REDIRECTS,
+ CURL_UNKNOWN_TELNET_OPTION,
+ CURL_TELNET_OPTION_SYNTAX,
+ CURL_OBSOLETE50,
+ CURL_PEER_FAILED_VERIF,
+ CURL_GOT_NOTHING,
+ CURL_SSL_ENGINE_NOTFOUND,
+ CURL_SSL_ENGINE_SETFAILED,
+ CURL_SEND_ERROR,
+ CURL_RECV_ERROR,
+ CURL_OBSOLETE57,
+ CURL_SSL_CERTPROBLEM,
+ CURL_SSL_CIPHER,
+ CURL_SSL_CACERT,
+ CURL_BAD_CONTENT_ENCODING,
+ CURL_LDAP_INVALID_URL,
+ CURL_FILESIZE_EXCEEDED,
+ CURL_USE_SSL_FAILED,
+ CURL_SEND_FAIL_REWIND,
+ CURL_SSL_ENGINE_INITFAILED,
+ CURL_LOGIN_DENIED,
+ CURL_TFTP_NOTFOUND,
+ CURL_TFTP_PERM,
+ CURL_REMOTE_DISK_FULL,
+ CURL_TFTP_ILLEGAL,
+ CURL_TFTP_UNKNOWNID,
+ CURL_REMOTE_FILE_EXISTS,
+ CURL_TFTP_NOSUCHUSER,
+ CURL_CONV_FAILED,
+ CURL_CONV_REQD,
+ CURL_SSL_CACERT_BADFILE,
+ CURL_REMOTE_FILE_NOT_FOUND,
+ CURL_SSH,
+ CURL_SSL_SHUTDOWN_FAILED,
+ CURL_AGAIN,
+ CURLE_SSL_CRL_BADFILE,
+ CURLE_SSL_ISSUER_ERROR,
+ CURL_CURL_LAST
+ };
+
+#endif /* HEADER_CURLMSG_VMS_H */
diff --git a/packages/vms/hpssl_alpha.opt b/packages/vms/hpssl_alpha.opt
new file mode 100644
index 0000000..3ad9fbd
--- /dev/null
+++ b/packages/vms/hpssl_alpha.opt
@@ -0,0 +1,2 @@
+SYS$LIBRARY:SSL$LIBCRYPTO_SHR32.EXE/SHARE
+SYS$LIBRARY:SSL$LIBSSL_SHR32.EXE/SHARE
diff --git a/packages/vms/hpssl_ia64.opt b/packages/vms/hpssl_ia64.opt
new file mode 100644
index 0000000..9b22014
--- /dev/null
+++ b/packages/vms/hpssl_ia64.opt
@@ -0,0 +1,2 @@
+SYS$LIBRARY:SSL$LIBCRYPTO_SHR.EXE/SHARE
+SYS$LIBRARY:SSL$LIBSSL_SHR.EXE/SHARE
diff --git a/packages/vms/hpssl_vax.opt b/packages/vms/hpssl_vax.opt
new file mode 100644
index 0000000..3ad9fbd
--- /dev/null
+++ b/packages/vms/hpssl_vax.opt
@@ -0,0 +1,2 @@
+SYS$LIBRARY:SSL$LIBCRYPTO_SHR32.EXE/SHARE
+SYS$LIBRARY:SSL$LIBSSL_SHR32.EXE/SHARE
diff --git a/packages/vms/ldap.opt b/packages/vms/ldap.opt
new file mode 100644
index 0000000..23f1ee4
--- /dev/null
+++ b/packages/vms/ldap.opt
@@ -0,0 +1 @@
+SYS$SHARE:LDAP$SHR.EXE /SHARE
diff --git a/packages/vms/openssl_alpha.opt b/packages/vms/openssl_alpha.opt
new file mode 100644
index 0000000..b445119
--- /dev/null
+++ b/packages/vms/openssl_alpha.opt
@@ -0,0 +1,2 @@
+SSLLIB:LIBCRYPTO.EXE /SHARE
+SSLLIB:LIBSSL.EXE /SHARE
diff --git a/packages/vms/openssl_ia64.opt b/packages/vms/openssl_ia64.opt
new file mode 100644
index 0000000..b445119
--- /dev/null
+++ b/packages/vms/openssl_ia64.opt
@@ -0,0 +1,2 @@
+SSLLIB:LIBCRYPTO.EXE /SHARE
+SSLLIB:LIBSSL.EXE /SHARE
diff --git a/packages/vms/openssl_ssl_alpha.opt b/packages/vms/openssl_ssl_alpha.opt
new file mode 100644
index 0000000..c726c2f
--- /dev/null
+++ b/packages/vms/openssl_ssl_alpha.opt
@@ -0,0 +1,2 @@
+SSLLIB:SSL_LIBCRYPTO.EXE /SHARE
+SSLLIB:SSL_LIBSSL.EXE /SHARE
diff --git a/packages/vms/openssl_ssl_ia64.opt b/packages/vms/openssl_ssl_ia64.opt
new file mode 100644
index 0000000..c726c2f
--- /dev/null
+++ b/packages/vms/openssl_ssl_ia64.opt
@@ -0,0 +1,2 @@
+SSLLIB:SSL_LIBCRYPTO.EXE /SHARE
+SSLLIB:SSL_LIBSSL.EXE /SHARE
diff --git a/packages/vms/openssl_ssl_vax.opt b/packages/vms/openssl_ssl_vax.opt
new file mode 100644
index 0000000..c726c2f
--- /dev/null
+++ b/packages/vms/openssl_ssl_vax.opt
@@ -0,0 +1,2 @@
+SSLLIB:SSL_LIBCRYPTO.EXE /SHARE
+SSLLIB:SSL_LIBSSL.EXE /SHARE
diff --git a/packages/vms/openssl_vax.opt b/packages/vms/openssl_vax.opt
new file mode 100644
index 0000000..b445119
--- /dev/null
+++ b/packages/vms/openssl_vax.opt
@@ -0,0 +1,2 @@
+SSLLIB:LIBCRYPTO.EXE /SHARE
+SSLLIB:LIBSSL.EXE /SHARE
diff --git a/packages/vms/readme b/packages/vms/readme
new file mode 100644
index 0000000..22fde88
--- /dev/null
+++ b/packages/vms/readme
@@ -0,0 +1,70 @@
+ _ _ ____ _
+ ___| | | | _ \| |
+ / __| | | | |_) | |
+ ( (__| |_| | _ <| |___
+ \___|\___/|_| \_\_____|
+ for OpenVMS
+
+History:
+
+ 9-MAR-2004, Created this readme. file. Marty Kuhrt (MSK).
+15-MAR-2004, MSK, Updated to reflect the new files in this directory.
+14-FEB-2005, MSK, removed config-vms.h_with* file comments
+10-FEB-2010, SMS. General update.
+
+Prerequisites:
+
+OpenVMS V7.0 or later (any platform)
+DECC V6.5 or later
+OpenSSL or hp SSL, if you want SSL support
+
+What is Here:
+
+This directory contains the following files:
+
+build_vms.com Build procedure.
+config-vms.h VMS-specific config.h.
+curlmsg.h C header defining cURL status code macros.
+curlmsg.msg Error message source for curlmsg.h and curlmsg.sdl.
+curlmsg.sdl SDL source defining cURL status code constants.
+curlmsg_vms.h Mapping of cURL status codes to VMS-form codes.
+hpssl_alpha.opt LINK options file for HP SSL on Alpha.
+hpssl_ia64.opt LINK options file for HP SSL on IA64.
+hpssl_vax.opt LINK options file for HP SSL on VAX.
+ldap.opt LINK options file for LDAP.
+Makefile.am cURL kit file list for this directory.
+Makefile.in cURL kit makefile source for this directory.
+openssl_alpha.opt LINK options file for OpenSSL on Alpha.
+openssl_ia64.opt LINK options file for OpenSSL on IA64.
+openssl_ssl_alpha.opt LINK options file for OpenSSL (SSL_ prefix) on Alpha.
+openssl_ssl_ia64.opt LINK options file for OpenSSL (SSL_ prefix) on IA64.
+openssl_ssl_vax.opt LINK options file for OpenSSL (SSL_ prefix) on VAX.
+openssl_vax.opt LINK options file for OpenSSL on VAX.
+readme. This file.
+
+
+How to Build:
+
+The (brute-force) builder is [.packages.vms]build_vms.com. Comments in
+this procedure describe various optional parameters which enable or
+disable optional program features, or which control the build in other
+ways. Product files (.EXE, .H, .LIS, .MAP, .OBJ, .OLB, ...) should be
+produced in an architecture-specific subdirectory under this directory
+([.ALPHA], [.IA64], [.VAX]).
+
+ Example build commands:
+
+ @ [.packages.vms]build_vms.com CLEAN
+ @ [.packages.vms]build_vms.com LARGE LDAP
+ submit /noprint [.packages.vms]build_vms.com /param = (LARGE, LDAP)
+
+
+Other Notes:
+
+The test suites are not supported as of 7.11.0.
+
+The curlmsg.sdl and curlmsg.h files are generated from curlmsg.msg.
+This is not done automatically, since the .MSG file is a hand edit
+of the relevant stuff from the curl.h file. If you want to do this
+yourself you'll need the SDL package from the freeware collection.
+
diff --git a/sample.emacs b/sample.emacs
new file mode 100644
index 0000000..e4470fe
--- /dev/null
+++ b/sample.emacs
@@ -0,0 +1,45 @@
+
+;; This file was contributed by Mats Lidell
+
+;; Here's a sample .emacs file that might help you along the way.
+
+;; First comes a setup that is ideal when you are only working with curl. Just
+;; select the next few lines, paste it into your .emacs and change the path to
+;; the tools folder. (If you are using more than one style. Look further down
+;; this file.)
+
+(load-file "<YOUR-PATH-TO-CURL>/curl-style.el")
+(add-hook 'c-mode-common-hook 'curl-c-mode-common-hook)
+
+;; If you are using more than one style in maybe more than one project the
+;; example below might help out. It uses a predicate hook pair to select the
+;; right hook to use.
+
+(defvar my-style-selective-mode-hook nil
+ "Holds a list of predicate and hooks pairs. (list (PREDICATE . HOOK)
+...) It is used by my-mode-selective-mood-hook-function for choosing
+the right hook to run.")
+
+(defun my-style-selective-mode-hook-function ()
+ "Run each PREDICATE in `my-style-selective-mode-hook' to see if the
+HOOK in the pair should be executed. If the PREDICATE evaluate to non
+nil HOOK is executed and the rest of the hooks are ignored."
+ (let ((h my-style-selective-mode-hook))
+ (while (not (eval (caar h)))
+ (setq h (cdr h)))
+ (funcall (cdar h))))
+
+;;; Example configuration.
+;; Add the selective hook to the c-mode-common-hook
+(add-hook 'c-mode-common-hook 'my-style-selective-mode-hook-function)
+
+;; Add your own hooks and predicates. The predicate should evaluate to
+;; non nil if the hook in the pair is supposed to be evaluated. In the
+;; example a part of the path is used to select what style to
+;; use. Choose what is appropriate for you.
+(add-hook 'my-style-selective-mode-hook
+ '((string-match "curl" (buffer-file-name)) . curl-c-mode-common-hook))
+(add-hook 'my-style-selective-mode-hook
+ '((string-match "other" (buffer-file-name)) . other-c-mode-common-hook))
+;; Make sure the default style is appended.
+(add-hook 'my-style-selective-mode-hook '(t . my-c-mode-common-hook) t)
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
new file mode 100644
index 0000000..faea096
--- /dev/null
+++ b/src/CMakeLists.txt
@@ -0,0 +1,56 @@
+set(EXE_NAME curl)
+
+# First try to locate hugehelp.c to see if it has already been created
+# TODO Find the file WITHOUT adding a cache entry!!! Or else the user can delete the file after the script was first run, and the script won't notice it has gone.
+find_file(HUGEHELP_C_FILE hugehelp.c PATHS . NO_DEFAULT_PATH)
+if (NOT HUGEHELP_C_FILE)
+ message(STATUS "Warning: hugehelp.c file was not generated before. Generating an 'empty' file...")
+ file(WRITE hugehelp.c "/* built-in manual is disabled, blank function */\n#include \"hugehelp.h\"\nvoid hugehelp(void) {}\n\n")
+endif()
+
+transform_makefile_inc("Makefile.inc" "${CMAKE_CURRENT_BINARY_DIR}/Makefile.inc.cmake")
+include(${CMAKE_CURRENT_BINARY_DIR}/Makefile.inc.cmake)
+
+if(MSVC)
+ list(APPEND CURL_SOURCE curl.rc)
+endif()
+
+add_executable(
+ ${EXE_NAME}
+ ${curl_SOURCES}
+ )
+
+source_group("cURLX source files" FILES ${CURLX_ONES})
+source_group("cURL source files" FILES ${CURL_CFILES})
+source_group("cURL header files" FILES ${CURL_HFILES})
+
+include_directories(
+ ${CURL_SOURCE_DIR}/lib # To be able to reach "setup_once.h"
+ ${CURL_BINARY_DIR}/lib # To be able to reach "curl_config.h"
+ ${CURL_BINARY_DIR}/include # To be able to reach "curl/curlbuild.h"
+ )
+
+
+# Setup dependencies
+setup_curl_dependencies(${EXE_NAME})
+target_link_libraries( ${EXE_NAME} libcurl )
+
+
+################################################################################
+
+#SET_TARGET_PROPERTIES(${EXE_NAME} ARCHIVE_OUTPUT_DIRECTORY "blah blah blah")
+#SET_TARGET_PROPERTIES(${EXE_NAME} RUNTIME_OUTPUT_DIRECTORY "blah blah blah")
+#SET_TARGET_PROPERTIES(${EXE_NAME} LIBRARY_OUTPUT_DIRECTORY "blah blah blah")
+
+# Add the postfix to the executable since it is not added automatically as for modules and shared libraries
+set_target_properties(${EXE_NAME} PROPERTIES
+ DEBUG_POSTFIX "${CMAKE_DEBUG_POSTFIX}")
+
+if(MSVC)
+ if(NOT BUILD_RELEASE_DEBUG_DIRS)
+ # Ugly workaround to remove the "/debug" or "/release" in each output
+ set_target_properties(${EXE_NAME} PROPERTIES PREFIX "../")
+ endif()
+endif()
+
+#INCLUDE(ModuleInstall OPTIONAL)
diff --git a/src/Makefile.Watcom b/src/Makefile.Watcom
new file mode 100644
index 0000000..3d42303
--- /dev/null
+++ b/src/Makefile.Watcom
@@ -0,0 +1,190 @@
+#
+# Watcom / OpenWatcom / Win32 makefile for cURL.
+# G. Vanem <gvanem@broadpark.no>
+#
+
+!ifndef %watcom
+!error WATCOM environment variable not set!
+!else
+SYS_INCL = -I$(%watcom)\h\nt -I$(%watcom)\h
+SYS_LIBS = $(%watcom)\lib386\nt;$(%watcom)\lib386
+!endif
+
+!ifdef %libname
+LIBNAME = $(%libname)
+!else
+LIBNAME = libcurl
+!endif
+TARGETS = $(LIBNAME).dll $(LIBNAME)_imp.lib $(LIBNAME).lib
+
+CC = wcc386
+LD = wlink
+AR = wlib
+RC = wrc
+
+!ifdef __LOADDLL__
+! loaddll wcc386 wccd386
+! loaddll wpp386 wppd386
+! loaddll wlib wlibd
+! if $(__VERSION__) > 1270
+! loaddll wlink wlinkd
+! else
+! loaddll wlink wlink
+! endif
+!endif
+
+!if $(__VERSION__) < 1250
+RM = del /q /f 2>NUL
+!else
+RM = rm -f
+!endif
+MD = mkdir
+RD = rmdir /q /s 2>NUL
+CP = copy
+
+CFLAGS = -3r -mf -hc -zff -zgf -zq -zm -s -fr=con -w2 -fpi -oilrtfm &
+ -wcd=201 -bt=nt -bc -d+ -dWIN32 -dHAVE_STRTOLL &
+ -I..\include -I..\lib $(SYS_INCL)
+
+!ifdef %debug
+DEBUG = -dDEBUG=1 -dDEBUGBUILD
+CFLAGS += -d3 $(DEBUG)
+!else
+CFLAGS += -d0
+!endif
+
+!ifdef %use_ipv6
+CFLAGS += -d_WIN32_WINNT=0x0501 -dENABLE_IPV6
+!endif
+
+#
+# Change to suite.
+#
+!ifdef %zlib_root
+ZLIB_ROOT = $(%zlib_root)
+!else
+ZLIB_ROOT = ..\..\zlib-1.2.5
+!endif
+
+!ifdef %libssh2_root
+LIBSSH2_ROOT = $(%libssh2_root)
+!else
+LIBSSH2_ROOT = ..\..\libssh2-1.2.7
+!endif
+
+!ifdef %librtmp_root
+LIBRTMP_ROOT = $(%librtmp_root)
+!else
+LIBRTMP_ROOT = ..\..\librtmp-2.3
+!endif
+
+!ifdef %openssl_root
+OPENSSL_ROOT = $(%openssl_root)
+!else
+OPENSSL_ROOT = ..\..\openssl-0.9.8o
+!endif
+
+!ifdef %ares_root
+ARES_ROOT = $(%ares_root)
+!else
+ARES_ROOT = ..\ares
+!endif
+
+!ifdef %use_ssl
+CFLAGS += -wcd=138 -dUSE_OPENSSL -dUSE_SSLEAY -I$(OPENSSL_ROOT)\inc32
+!endif
+
+OBJ_DIR = WC_Win32.obj
+LINK_ARG = $(OBJ_DIR)\wlink.arg
+
+# In order to process Makefile.inc wmake must be called with -u switch!
+!ifndef %MAKEFLAGS
+!error You MUST call wmake with the -u switch!
+!else
+!include Makefile.inc
+!endif
+# For now we still define the CURLX_ONES sources here unless we know how
+# to split off the prefixed path.
+CURLX_SOURCES = rawstr.c nonblock.c
+
+OBJS = $(CURL_CFILES:.c=.obj)
+!ifdef %curl_static
+CFLAGS += -DCURL_STATICLIB
+!else
+CFLAGS += -br
+OBJS += $(CURLX_SOURCES:.c=.obj)
+!endif
+OBJS = $OBJ_DIR\$(OBJS: = $OBJ_DIR\)
+
+RESOURCE = $(OBJ_DIR)\curl.res
+
+all: hugehelp.c $(OBJ_DIR) curl.exe .SYMBOLIC
+ @echo Welcome to cURL
+
+clean: .SYMBOLIC
+ -$(RM) $(OBJS)
+ -$(RM) $(RESOURCE) $(LINK_ARG)
+
+vclean distclean: clean .SYMBOLIC
+ -$(RD) $(OBJ_DIR)
+ -$(RM) curl.exe curl.map curl.sym hugehelp.c
+
+hugehelp.c: hugehelp.c.cvs
+ $(CP) $[@ $^@
+
+hugehelp.c.cvs: .EXISTSONLY
+ $(CP) hugehelp.c $^@
+
+$(OBJ_DIR):
+ -$(MD) $^@
+
+curl.exe: $(OBJS) $(RESOURCE) $(LINK_ARG)
+ $(LD) name $^@ @$]@
+
+$(RESOURCE): curl.rc
+ $(RC) $(DEBUG) -q -r -zm -I..\include $(SYS_INCL) $[@ -fo=$^@
+
+# suffix search path - vpath-like hack
+.c: ..\lib
+
+.ERASE
+.c{$(OBJ_DIR)}.obj:
+ $(CC) $(CFLAGS) $[@ -fo=$^@
+
+$(LINK_ARG): $(__MAKEFILES__)
+ %create $^@
+ @%append $^@ system nt
+ @%append $^@ file { $(OBJS) }
+!ifdef %debug
+ @%append $^@ debug all
+ @%append $^@ option symfile
+!endif
+ @%append $^@ option quiet, map, caseexact, eliminate,
+ @%append $^@ res=$(RESOURCE) libpath $(SYS_LIBS)
+!ifdef %curl_static
+ @%append $^@ library wldap32.lib
+ @%append $^@ library ..\lib\$(LIBNAME).lib
+!ifdef %use_zlib
+ @%append $^@ library $(ZLIB_ROOT)\zlib.lib
+!endif
+!ifdef %use_rtmp
+ @%append $^@ library $(LIBRTMP_ROOT)\librtmp\librtmp.lib, winmm.lib
+!endif
+!ifdef %use_ssh2
+ @%append $^@ library $(LIBSSH2_ROOT)\win32\libssh2.lib
+!endif
+!ifdef %use_ssl
+ @%append $^@ library $(OPENSSL_ROOT)\out32\libeay32.lib, $(OPENSSL_ROOT)\out32\ssleay32.lib
+!endif
+!ifdef %use_ares
+ @%append $^@ library $(ARES_ROOT)\cares.lib
+!endif
+!else
+ @%append $^@ library ..\lib\$(LIBNAME)_imp.lib
+!endif
+!ifeq USE_WATT32 1
+ @%append $^@ library $(%watt_root)\lib\wattcpw_imp.lib
+!else
+ @%append $^@ library ws2_32.lib
+!endif
+
diff --git a/src/Makefile.am b/src/Makefile.am
new file mode 100644
index 0000000..f2b4c8c
--- /dev/null
+++ b/src/Makefile.am
@@ -0,0 +1,97 @@
+#***************************************************************************
+# _ _ ____ _
+# Project ___| | | | _ \| |
+# / __| | | | |_) | |
+# | (__| |_| | _ <| |___
+# \___|\___/|_| \_\_____|
+#
+# Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al.
+#
+# This software is licensed as described in the file COPYING, which
+# you should have received as part of this distribution. The terms
+# are also available at http://curl.haxx.se/docs/copyright.html.
+#
+# You may opt to use, copy, modify, merge, publish, distribute and/or sell
+# copies of the Software, and permit persons to whom the Software is
+# furnished to do so, under the terms of the COPYING file.
+#
+# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+# KIND, either express or implied.
+#
+###########################################################################
+AUTOMAKE_OPTIONS = foreign nostdinc
+
+# Specify our include paths here, and do it relative to $(top_srcdir) and
+# $(top_builddir), to ensure that these paths which belong to the library
+# being currently built and tested are searched before the library which
+# might possibly already be installed in the system.
+#
+# $(top_builddir)/include/curl for generated curlbuild.h included from curl.h
+# $(top_builddir)/include for generated curlbuild.h included from lib/setup.h
+# $(top_srcdir)/include is for libcurl's external include files
+# $(top_builddir)/lib is for libcurl's generated lib/curl_config.h file
+# $(top_builddir)/src is for curl's generated src/curl_config.h file
+# $(top_srcdir)/lib is for libcurl's lib/setup.h and other "borrowed" files
+# $(top_srcdir)/src is for curl's src/setup.h and "curl-private" files
+
+INCLUDES = -I$(top_builddir)/include/curl \
+ -I$(top_builddir)/include \
+ -I$(top_srcdir)/include \
+ -I$(top_builddir)/lib \
+ -I$(top_builddir)/src \
+ -I$(top_srcdir)/lib \
+ -I$(top_srcdir)/src
+
+bin_PROGRAMS = curl
+
+include Makefile.inc
+
+# This might hold -Werror
+CFLAGS += @CURL_CFLAG_EXTRAS@
+
+curl_LDADD = $(top_builddir)/lib/libcurl.la @CURL_LIBS@
+curl_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+BUILT_SOURCES = hugehelp.c
+CLEANFILES = hugehelp.c
+# Use the C locale to ensure that only ASCII characters appear in the
+# embedded text.
+NROFF=env LC_ALL=C @NROFF@ @MANOPT@ # figured out by the configure script
+
+EXTRA_DIST = mkhelp.pl makefile.dj Makefile.vc6 Makefile.b32 Makefile.m32 \
+ Makefile.riscos curl_config.h.in macos/curl.mcp.xml.sit.hqx \
+ macos/MACINSTALL.TXT macos/src/curl_GUSIConfig.cpp vc6curlsrc.dsp \
+ macos/src/macos_main.cpp config-amigaos.h makefile.amiga curl.rc \
+ Makefile.netware Makefile.inc Makefile.Watcom vc6curlsrc.dsw \
+ CMakeLists.txt
+
+MANPAGE=$(top_srcdir)/docs/curl.1
+README=$(top_srcdir)/docs/MANUAL
+MKHELP=$(top_srcdir)/src/mkhelp.pl
+HUGE=hugehelp.c
+
+if USE_MANUAL
+# Here are the stuff to create a built-in manual
+
+if HAVE_LIBZ
+# This generates the hugehelp.c file in both uncompressed and compressed formats
+$(HUGE): $(README) $(MANPAGE) mkhelp.pl
+ echo '#include "setup.h"' > $(HUGE)
+ echo '#ifndef HAVE_LIBZ' >> $(HUGE)
+ $(NROFF) $(MANPAGE) | $(PERL) $(MKHELP) $(README) >> $(HUGE)
+ echo '#else' >> $(HUGE)
+ $(NROFF) $(MANPAGE) | $(PERL) $(MKHELP) -c $(README) >> $(HUGE)
+ echo '#endif /* HAVE_LIBZ */' >> $(HUGE)
+else # HAVE_LIBZ
+# This generates the hugehelp.c file uncompressed only
+$(HUGE): $(README) $(MANPAGE) mkhelp.pl
+ echo '#include "setup.h"' > $(HUGE)
+ $(NROFF) $(MANPAGE) | $(PERL) $(MKHELP) $(README) >> $(HUGE)
+endif
+
+else # USE_MANUAL
+# built-in manual has been disabled, make a blank file
+$(HUGE):
+ echo "/* built-in manual is disabled, blank function */" > $(HUGE)
+ echo '#include "hugehelp.h"' >> $(HUGE)
+ echo "void hugehelp(void) {}" >>$(HUGE)
+endif
diff --git a/src/Makefile.b32 b/src/Makefile.b32
new file mode 100644
index 0000000..7408dd2
--- /dev/null
+++ b/src/Makefile.b32
@@ -0,0 +1,89 @@
+############################################################
+#
+# Makefile.b32 - Borland's C++ Compiler 5.X
+#
+# 'src' directory
+#
+# 'BCCDIR' has to be set up to point to the base directory
+# of the compiler, i.e. SET BCCDIR = c:\Borland\BCC55
+# where c:\Borland\BCC55 is the compiler is installed
+#
+# Written by Jaepil Kim, pit@paradise.net.nz
+############################################################
+
+# Edit the path below to point to the base of your Zlib sources.
+!ifndef ZLIB_PATH
+ZLIB_PATH = ../../zlib-1.2.1
+!endif
+
+# Edit the path below to point to the base of your OpenSSL package.
+!ifndef OPENSSL_PATH
+OPENSSL_PATH = ../../openssl-0.9.7d
+!endif
+
+# Set program's name
+PROGNAME = curl.exe
+
+# Setup environment
+CXX = bcc32
+LD = bcc32
+CP = copy
+RM = del
+LIB = tlib
+
+CXXFLAGS = -q -5 -O2 -w-aus -w-ccc -w-csu -w-par -w-pia -w-rch -w-inl -w-ngu -w-pro -tWM
+LDFLAGS = -q -lq -lap
+
+INCDIRS = -I.;../include;../lib
+LINKLIB = $(BCCDIR)/lib/cw32mt.lib
+
+# If you build with SSL support, set WITH_SSL=1
+DEFINES = -DNDEBUG -DWIN32
+
+!ifdef DYNAMIC
+LIBCURL_LIB = ../lib/libcurl_imp.lib
+!else
+LIBCURL_LIB = ../lib/libcurl.lib
+DEFINES = $(DEFINES) -DCURL_STATICLIB
+!endif
+
+!ifdef WITH_ZLIB
+DEFINES = $(DEFINES) -DHAVE_LIBZ -DHAVE_ZLIB_H
+INCDIRS = $(INCDIRS);$(ZLIB_PATH)
+LINKLIB = $(LINKLIB) $(ZLIB_PATH)/zlib.lib
+!endif
+
+!ifdef WITH_SSL
+DEFINES = $(DEFINES) -DUSE_SSLEAY
+INCDIRS = $(INCDIRS);$(OPENSSL_PATH)/inc32;$(OPENSSL_PATH)/inc32/openssl
+LINKLIB = $(LINKLIB) $(OPENSSL_PATH)/out32/ssleay32.lib $(OPENSSL_PATH)/out32/libeay32.lib
+!endif
+
+.autodepend
+
+# Makefile.inc provides the CSOURCES and HHEADERS defines
+top_srcdir = ..
+!include Makefile.inc
+
+CSOURCES = $(CURL_CFILES) $(CURLX_ONES)
+OBJECTS = $(CSOURCES:.c=.obj)
+
+.c.obj:
+ $(CXX) -c $(INCDIRS) $(CXXFLAGS) $(DEFINES) $<
+
+all: $(PROGNAME)
+
+clean:
+ -$(RM) $(PROGNAME)
+ -$(RM) *.obj
+ -$(RM) hugehelp.c
+
+$(PROGNAME): $(OBJECTS) $(LIBCURL_LIB) $(LINKLIB)
+ @-$(RM) $@
+ $(LD) $(LDFLAGS) -e$@ $**
+
+hugehelp.c: hugehelp.c.cvs
+ @echo Creating $@
+ @$(CP) $** $@
+
+
diff --git a/src/Makefile.in b/src/Makefile.in
index 48dd835..962ac87 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -15,6 +15,13 @@
@SET_MAKE@
# ./src/Makefile.inc
+# Using the backslash as line continuation character might be problematic
+# with some make flavours, as Watcom's wmake showed us already. If we
+# ever want to change this in a portable manner then we should consider
+# this idea (posted to the libcurl list by Adam Kellas):
+# CSRC1 = file1.c file2.c file3.c
+# CSRC2 = file4.c file5.c file6.c
+# CSOURCES = $(CSRC1) $(CSRC2)
srcdir = @srcdir@
top_srcdir = @top_srcdir@
@@ -95,9 +102,13 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BUILD_LIBHOSTNAME_FALSE = @BUILD_LIBHOSTNAME_FALSE@
+BUILD_LIBHOSTNAME_TRUE = @BUILD_LIBHOSTNAME_TRUE@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
+
+# This might hold -Werror
+CFLAGS = @CFLAGS@ @CURL_CFLAG_EXTRAS@
CONFIGURE_OPTIONS = @CONFIGURE_OPTIONS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
@@ -106,9 +117,11 @@ CROSSCOMPILING_TRUE = @CROSSCOMPILING_TRUE@
CURLDEBUG_FALSE = @CURLDEBUG_FALSE@
CURLDEBUG_TRUE = @CURLDEBUG_TRUE@
CURL_CA_BUNDLE = @CURL_CA_BUNDLE@
+CURL_CFLAG_EXTRAS = @CURL_CFLAG_EXTRAS@
CURL_DISABLE_DICT = @CURL_DISABLE_DICT@
CURL_DISABLE_FILE = @CURL_DISABLE_FILE@
CURL_DISABLE_FTP = @CURL_DISABLE_FTP@
+CURL_DISABLE_GOPHER = @CURL_DISABLE_GOPHER@
CURL_DISABLE_HTTP = @CURL_DISABLE_HTTP@
CURL_DISABLE_IMAP = @CURL_DISABLE_IMAP@
CURL_DISABLE_LDAP = @CURL_DISABLE_LDAP@
@@ -120,6 +133,7 @@ CURL_DISABLE_SMTP = @CURL_DISABLE_SMTP@
CURL_DISABLE_TELNET = @CURL_DISABLE_TELNET@
CURL_DISABLE_TFTP = @CURL_DISABLE_TFTP@
CURL_LIBS = @CURL_LIBS@
+CURL_NETWORK_LIBS = @CURL_NETWORK_LIBS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
@@ -130,9 +144,11 @@ ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
+ENABLE_SHARED = @ENABLE_SHARED@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
GREP = @GREP@
+HAVE_LDAP_SSL = @HAVE_LDAP_SSL@
HAVE_LIBZ = @HAVE_LIBZ@
HAVE_LIBZ_FALSE = @HAVE_LIBZ_FALSE@
HAVE_LIBZ_TRUE = @HAVE_LIBZ_TRUE@
@@ -204,10 +220,13 @@ USE_ARES = @USE_ARES@
USE_EMBEDDED_ARES_FALSE = @USE_EMBEDDED_ARES_FALSE@
USE_EMBEDDED_ARES_TRUE = @USE_EMBEDDED_ARES_TRUE@
USE_GNUTLS = @USE_GNUTLS@
+USE_LIBRTMP = @USE_LIBRTMP@
USE_LIBSSH2 = @USE_LIBSSH2@
USE_MANUAL_FALSE = @USE_MANUAL_FALSE@
USE_MANUAL_TRUE = @USE_MANUAL_TRUE@
USE_NSS = @USE_NSS@
+USE_OPENLDAP = @USE_OPENLDAP@
+USE_POLARSSL = @USE_POLARSSL@
USE_SSLEAY = @USE_SSLEAY@
USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
VERSION = @VERSION@
@@ -311,14 +330,14 @@ CURLX_ONES = $(top_srcdir)/lib/strtoofft.c \
$(top_srcdir)/lib/rawstr.c \
$(top_srcdir)/lib/nonblock.c
-CURL_SOURCES = main.c hugehelp.c urlglob.c writeout.c writeenv.c \
+CURL_CFILES = main.c hugehelp.c urlglob.c writeout.c writeenv.c \
getpass.c homedir.c curlutil.c os-specific.c
CURL_HFILES = hugehelp.h setup.h config-win32.h config-mac.h \
config-riscos.h urlglob.h version.h os-specific.h \
writeout.h writeenv.h getpass.h homedir.h curlutil.h
-curl_SOURCES = $(CURL_SOURCES) $(CURLX_ONES) $(CURL_HFILES)
+curl_SOURCES = $(CURL_CFILES) $(CURLX_ONES) $(CURL_HFILES)
curl_LDADD = $(top_builddir)/lib/libcurl.la @CURL_LIBS@
curl_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
BUILT_SOURCES = hugehelp.c
diff --git a/src/Makefile.inc b/src/Makefile.inc
index 9faf89d..34dfd45 100644
--- a/src/Makefile.inc
+++ b/src/Makefile.inc
@@ -1,19 +1,25 @@
# ./src/Makefile.inc
+# Using the backslash as line continuation character might be problematic
+# with some make flavours, as Watcom's wmake showed us already. If we
+# ever want to change this in a portable manner then we should consider
+# this idea (posted to the libcurl list by Adam Kellas):
+# CSRC1 = file1.c file2.c file3.c
+# CSRC2 = file4.c file5.c file6.c
+# CSOURCES = $(CSRC1) $(CSRC2)
# libcurl has sources that provide functions named curlx_* that aren't part of
# the official API, but we re-use the code here to avoid duplication.
-CURLX_ONES = $(top_srcdir)/lib/strtoofft.c \
+CURLX_ONES = $(top_srcdir)/lib/strtoofft.c \
$(top_srcdir)/lib/strdup.c \
$(top_srcdir)/lib/rawstr.c \
$(top_srcdir)/lib/nonblock.c
-CURL_SOURCES = main.c hugehelp.c urlglob.c writeout.c writeenv.c \
+CURL_CFILES = main.c hugehelp.c urlglob.c writeout.c writeenv.c \
getpass.c homedir.c curlutil.c os-specific.c
CURL_HFILES = hugehelp.h setup.h config-win32.h config-mac.h \
config-riscos.h urlglob.h version.h os-specific.h \
writeout.h writeenv.h getpass.h homedir.h curlutil.h
-curl_SOURCES = $(CURL_SOURCES) $(CURLX_ONES) $(CURL_HFILES)
-
+curl_SOURCES = $(CURL_CFILES) $(CURLX_ONES) $(CURL_HFILES)
diff --git a/src/Makefile.m32 b/src/Makefile.m32
new file mode 100644
index 0000000..dfe8092
--- /dev/null
+++ b/src/Makefile.m32
@@ -0,0 +1,172 @@
+#########################################################################
+#
+## Makefile for building curl.exe with MingW32 (GCC-3.2 or later)
+## and optionally OpenSSL (0.9.8), libssh2 (1.2), zlib (1.2.5)
+##
+## Usage:
+## mingw32-make -f Makefile.m32 [SSL=1] [SSH2=1] [ZLIB=1] [IDN=1] [SSPI=1] [IPV6=1] [LDAPS=1] [RTMP=1] [DYN=1]
+##
+## Hint: you can also set environment vars to control the build, f.e.:
+## set ZLIB_PATH=c:/zlib-1.2.5
+## set ZLIB=1
+##
+## Comments to: Troy Engel <tengel@sonic.net> or
+## Joern Hartroth <hartroth@acm.org>
+#########################################################################
+
+# Edit the path below to point to the base of your Zlib sources.
+ifndef ZLIB_PATH
+ZLIB_PATH = ../../zlib-1.2.5
+endif
+# Edit the path below to point to the base of your OpenSSL package.
+ifndef OPENSSL_PATH
+OPENSSL_PATH = ../../openssl-0.9.8o
+endif
+# Edit the path below to point to the base of your LibSSH2 package.
+ifndef LIBSSH2_PATH
+LIBSSH2_PATH = ../../libssh2-1.2.7
+endif
+# Edit the path below to point to the base of your libidn package.
+ifndef LIBIDN_PATH
+LIBIDN_PATH = ../../libidn-1.18
+endif
+# Edit the path below to point to the base of your librtmp package.
+ifndef LIBRTMP_PATH
+LIBRTMP_PATH = ../../librtmp-2.3
+endif
+# Edit the path below to point to the base of your Novell LDAP NDK.
+ifndef LDAP_SDK
+LDAP_SDK = c:/novell/ndk/cldapsdk/win32
+endif
+
+# Edit the path below to point to the base of your c-ares package.
+ifndef LIBCARES_PATH
+LIBCARES_PATH = ../ares
+endif
+
+CC = gcc
+CFLAGS = -g -O2
+# comment LDFLAGS below to keep debug info
+LDFLAGS = -s
+RC = windres
+RCFLAGS = --include-dir=../include -O COFF -i
+RM = del /q /f 2>NUL
+CP = copy
+
+# We may need these someday
+# PERL = perl
+# NROFF = nroff
+
+########################################################
+## Nothing more to do below this line!
+
+INCLUDES = -I. -I.. -I../include -I../lib
+LINK = $(CC) $(LDFLAGS) -o $@
+
+curl_PROGRAMS = curl.exe
+ifdef DYN
+ curl_DEPENDENCIES = ../lib/libcurldll.a ../lib/libcurl.dll
+ curl_LDADD = -L../lib -lcurldll
+else
+ curl_DEPENDENCIES = ../lib/libcurl.a
+ curl_LDADD = -L../lib -lcurl
+ CFLAGS += -DCURL_STATICLIB
+endif
+ifdef ARES
+ ifndef DYN
+ curl_DEPENDENCIES += $(LIBCARES_PATH)/libcares.a
+ endif
+ CFLAGS += -DUSE_ARES
+ curl_LDADD += -L$(LIBCARES_PATH) -lcares
+endif
+ifdef RTMP
+ CFLAGS += -DUSE_LIBRTMP
+ curl_LDADD += -L"$(LIBRTMP_PATH)/librtmp" -lrtmp -lwinmm
+endif
+ifdef SSH2
+ CFLAGS += -DUSE_LIBSSH2 -DHAVE_LIBSSH2_H
+ curl_LDADD += -L$(LIBSSH2_PATH)/win32 -lssh2
+endif
+ifdef SSL
+ CFLAGS += -DUSE_SSLEAY -DHAVE_OPENSSL_ENGINE_H
+ curl_LDADD += -L$(OPENSSL_PATH)/out -leay32 -lssl32
+endif
+ifdef ZLIB
+ INCLUDES += -I"$(ZLIB_PATH)"
+ CFLAGS += -DHAVE_LIBZ -DHAVE_ZLIB_H
+ curl_LDADD += -L$(ZLIB_PATH) -lz
+endif
+ifdef IDN
+ INCLUDES += -I"$(LIBIDN_PATH)/include"
+ CFLAGS += -DUSE_LIBIDN
+ curl_LDADD += -L$(LIBIDN_PATH)/lib -lidn
+endif
+ifdef SSPI
+ CFLAGS += -DUSE_WINDOWS_SSPI
+endif
+ifdef IPV6
+ CFLAGS += -DENABLE_IPV6
+endif
+ifdef LDAPS
+ CFLAGS += -DHAVE_LDAP_SSL
+endif
+ifdef USE_LDAP_NOVELL
+ CFLAGS += -DCURL_HAS_NOVELL_LDAPSDK
+ curl_LDADD += -L"$(LDAP_SDK)/lib/mscvc" -lldapsdk -lldapssl -lldapx
+endif
+ifdef USE_LDAP_OPENLDAP
+ CFLAGS += -DCURL_HAS_OPENLDAP_LDAPSDK
+ curl_LDADD += -L"$(LDAP_SDK)/lib" -lldap -llber
+endif
+ifndef USE_LDAP_NOVELL
+ifndef USE_LDAP_OPENLDAP
+curl_LDADD += -lwldap32
+endif
+endif
+curl_LDADD += -lws2_32
+COMPILE = $(CC) $(INCLUDES) $(CFLAGS)
+
+# Makefile.inc provides the CSOURCES and HHEADERS defines
+include Makefile.inc
+
+curl_OBJECTS := $(patsubst %.c,%.o,$(strip $(CURL_CFILES)))
+ifdef DYN
+curlx_OBJECTS := $(patsubst %.c,%.o,$(notdir $(strip $(CURLX_ONES))))
+curl_OBJECTS += $(curlx_OBJECTS)
+vpath %.c ../lib
+endif
+
+RESOURCE = curl.res
+
+.SUFFIXES: .rc .res
+
+all: curl.exe
+
+curl.exe: $(RESOURCE) $(curl_OBJECTS) $(curl_DEPENDENCIES)
+ -$(RM) $@
+ $(LINK) $< $(curl_OBJECTS) $(curl_LDADD)
+
+# We don't have nroff normally under win32
+# hugehelp.c: ../README.curl ../curl.1 mkhelp.pl
+# -$(RM) hugehelp.c
+# $(NROFF) -man ../curl.1 | $(PERL) mkhelp.pl ../README.curl > hugehelp.c
+
+hugehelp.c:
+ @echo Creating $@
+ @$(CP) hugehelp.c.cvs $@
+
+.c.o:
+ $(COMPILE) -c $<
+
+.rc.res:
+ $(RC) $(RCFLAGS) $< -o $@
+
+clean:
+ifeq "$(wildcard hugehelp.c.cvs)" "hugehelp.c.cvs"
+ -$(RM) hugehelp.c
+endif
+ -$(RM) $(curl_OBJECTS) $(RESOURCE)
+
+distclean vclean: clean
+ -$(RM) $(curl_PROGRAMS)
+
diff --git a/src/Makefile.netware b/src/Makefile.netware
new file mode 100644
index 0000000..3f5802c
--- /dev/null
+++ b/src/Makefile.netware
@@ -0,0 +1,588 @@
+#################################################################
+#
+## Makefile for building curl.nlm (NetWare version - gnu make)
+## Use: make -f Makefile.netware
+##
+## Comments to: Guenter Knauf http://www.gknw.net/phpbb
+#
+#################################################################
+
+# Edit the path below to point to the base of your Novell NDK.
+ifndef NDKBASE
+NDKBASE = c:/novell
+endif
+
+# Edit the path below to point to the base of your Zlib sources.
+ifndef ZLIB_PATH
+ZLIB_PATH = ../../zlib-1.2.5
+endif
+
+# Edit the path below to point to the base of your OpenSSL package.
+ifndef OPENSSL_PATH
+OPENSSL_PATH = ../../openssl-0.9.8o
+endif
+
+# Edit the path below to point to the base of your LibSSH2 package.
+ifndef LIBSSH2_PATH
+LIBSSH2_PATH = ../../libssh2-1.2.7
+endif
+
+# Edit the path below to point to the base of your libidn package.
+ifndef LIBIDN_PATH
+LIBIDN_PATH = ../../libidn-1.18
+endif
+
+# Edit the path below to point to the base of your librtmp package.
+ifndef LIBRTMP_PATH
+LIBRTMP_PATH = ../../librtmp-2.3
+endif
+
+# Edit the path below to point to the base of your c-ares package.
+ifndef LIBCARES_PATH
+LIBCARES_PATH = ../ares
+endif
+
+ifndef INSTDIR
+INSTDIR = ..$(DS)curl-$(LIBCURL_VERSION_STR)-bin-nw
+endif
+
+# Edit the vars below to change NLM target settings.
+TARGET = curl
+VERSION = $(LIBCURL_VERSION)
+COPYR = Copyright (C) $(LIBCURL_COPYRIGHT_STR)
+DESCR = cURL $(LIBCURL_VERSION_STR) ($(LIBARCH)) - http://curl.haxx.se
+MTSAFE = YES
+STACK = 64000
+SCREEN = $(TARGET) commandline utility
+# Comment the line below if you dont want to load protected automatically.
+# LDRING = 3
+
+# Uncomment the next line to enable linking with POSIX semantics.
+# POSIXFL = 1
+
+# Edit the var below to point to your lib architecture.
+ifndef LIBARCH
+LIBARCH = LIBC
+endif
+
+# must be equal to NDEBUG or DEBUG, CURLDEBUG
+ifndef DB
+DB = NDEBUG
+endif
+# Optimization: -O<n> or debugging: -g
+ifeq ($(DB),NDEBUG)
+ OPT = -O2
+ OBJDIR = release
+else
+ OPT = -g
+ OBJDIR = debug
+endif
+
+# The following lines defines your compiler.
+ifdef CWFolder
+ METROWERKS = $(CWFolder)
+endif
+ifdef METROWERKS
+ # MWCW_PATH = $(subst \,/,$(METROWERKS))/Novell Support
+ MWCW_PATH = $(subst \,/,$(METROWERKS))/Novell Support/Metrowerks Support
+ CC = mwccnlm
+else
+ CC = gcc
+endif
+PERL = perl
+# Here you can find a native Win32 binary of the original awk:
+# http://www.gknw.net/development/prgtools/awk-20070501.zip
+AWK = awk
+CP = cp -afv
+MKDIR = mkdir
+# RM = rm -f
+# If you want to mark the target as MTSAFE you will need a tool for
+# generating the xdc data for the linker; here's a minimal tool:
+# http://www.gknw.net/development/prgtools/mkxdc.zip
+MPKXDC = mkxdc
+
+# LIBARCH_U = $(shell $(AWK) 'BEGIN {print toupper(ARGV[1])}' $(LIBARCH))
+LIBARCH_L = $(shell $(AWK) 'BEGIN {print tolower(ARGV[1])}' $(LIBARCH))
+
+# Include the version info retrieved from curlver.h
+-include $(OBJDIR)/version.inc
+
+# Global flags for all compilers
+CFLAGS += $(OPT) -D$(DB) -DNETWARE -DHAVE_CONFIG_H -nostdinc
+
+ifeq ($(CC),mwccnlm)
+LD = mwldnlm
+LDFLAGS = -nostdlib $(OBJS) $(PRELUDE) $(LDLIBS) -o $@ -commandfile
+LIBEXT = lib
+CFLAGS += -gccinc -inline off -opt nointrinsics -proc 586
+CFLAGS += -relax_pointers
+#CFLAGS += -w on
+ifeq ($(LIBARCH),LIBC)
+ifeq ($(POSIXFL),1)
+ PRELUDE = $(NDK_LIBC)/imports/posixpre.o
+else
+ PRELUDE = $(NDK_LIBC)/imports/libcpre.o
+endif
+ CFLAGS += -align 4
+else
+ # PRELUDE = $(NDK_CLIB)/imports/clibpre.o
+ # to avoid the __init_* / __deinit_* whoes dont use prelude from NDK
+ PRELUDE = "$(MWCW_PATH)/libraries/runtime/prelude.obj"
+ # CFLAGS += -include "$(MWCW_PATH)/headers/nlm_clib_prefix.h"
+ CFLAGS += -align 1
+endif
+else
+LD = nlmconv
+LDFLAGS = -T
+LIBEXT = a
+CFLAGS += -fno-builtin -fpcc-struct-return -fno-strict-aliasing
+CFLAGS += -Wall # -pedantic
+ifeq ($(LIBARCH),LIBC)
+ifeq ($(POSIXFL),1)
+ PRELUDE = $(NDK_LIBC)/imports/posixpre.gcc.o
+else
+ PRELUDE = $(NDK_LIBC)/imports/libcpre.gcc.o
+endif
+else
+ # PRELUDE = $(NDK_CLIB)/imports/clibpre.gcc.o
+ # to avoid the __init_* / __deinit_* whoes dont use prelude from NDK
+ # http://www.gknw.net/development/mk_nlm/gcc_pre.zip
+ PRELUDE = $(NDK_ROOT)/pre/prelude.o
+ CFLAGS += -include $(NDKBASE)/nlmconv/genlm.h
+endif
+endif
+
+NDK_ROOT = $(NDKBASE)/ndk
+ifndef NDK_CLIB
+NDK_CLIB = $(NDK_ROOT)/nwsdk
+endif
+ifndef NDK_LIBC
+NDK_LIBC = $(NDK_ROOT)/libc
+endif
+ifndef NDK_LDAP
+NDK_LDAP = $(NDK_ROOT)/cldapsdk/netware
+endif
+CURL_INC = ../include
+CURL_LIB = ../lib
+
+INCLUDES = -I$(CURL_INC) -I$(CURL_LIB)
+
+ifdef LINK_STATIC
+ LDLIBS = $(CURL_LIB)/libcurl.$(LIBEXT)
+ifdef WITH_ARES
+ LDLIBS += $(LIBCARES_PATH)/libcares.$(LIBEXT)
+endif
+else
+ MODULES = libcurl.nlm
+ IMPORTS = @$(CURL_LIB)/libcurl.imp
+endif
+ifdef WITH_SSH2
+ INCLUDES += -I$(LIBSSH2_PATH)/include
+ifdef LINK_STATIC
+ LDLIBS += $(LIBSSH2_PATH)/nw/libssh2.$(LIBEXT)
+else
+ MODULES += libssh2.nlm
+ IMPORTS += @$(LIBSSH2_PATH)/nw/libssh2.imp
+endif
+endif
+ifdef WITH_RTMP
+ # INCLUDES += -I$(LIBRTMP_PATH)
+ifdef LINK_STATIC
+ LDLIBS += $(LIBRTMP_PATH)/librtmp/librtmp.$(LIBEXT)
+endif
+endif
+ifdef WITH_SSL
+ INCLUDES += -I$(OPENSSL_PATH)/outinc_nw_$(LIBARCH_L)
+ LDLIBS += $(OPENSSL_PATH)/out_nw_$(LIBARCH_L)/ssl.$(LIBEXT)
+ LDLIBS += $(OPENSSL_PATH)/out_nw_$(LIBARCH_L)/crypto.$(LIBEXT)
+ IMPORTS += GetProcessSwitchCount RunningProcess
+endif
+ifdef WITH_ZLIB
+ INCLUDES += -I$(ZLIB_PATH)
+ifdef LINK_STATIC
+ LDLIBS += $(ZLIB_PATH)/nw/$(LIBARCH)/libz.$(LIBEXT)
+else
+ MODULES += libz.nlm
+ IMPORTS += @$(ZLIB_PATH)/nw/$(LIBARCH)/libz.imp
+endif
+endif
+ifdef WITH_IDN
+ # INCLUDES += -I$(LIBIDN_PATH)/include
+ LDLIBS += $(LIBIDN_PATH)/lib/libidn.$(LIBEXT)
+endif
+
+ifeq ($(LIBARCH),LIBC)
+ INCLUDES += -I$(NDK_LIBC)/include
+ # INCLUDES += -I$(NDK_LIBC)/include/nks
+ # INCLUDES += -I$(NDK_LIBC)/include/winsock
+ CFLAGS += -D_POSIX_SOURCE
+else
+ INCLUDES += -I$(NDK_CLIB)/include/nlm
+ # INCLUDES += -I$(NDK_CLIB)/include
+endif
+ifndef DISABLE_LDAP
+ # INCLUDES += -I$(NDK_LDAP)/$(LIBARCH_L)/inc
+endif
+CFLAGS += $(INCLUDES)
+
+ifeq ($(MTSAFE),YES)
+ XDCOPT = -n
+endif
+ifeq ($(MTSAFE),NO)
+ XDCOPT = -u
+endif
+ifdef XDCOPT
+ XDCDATA = $(OBJDIR)/$(TARGET).xdc
+endif
+
+ifeq ($(findstring /sh,$(SHELL)),/sh)
+DL = '
+DS = /
+PCT = %
+#-include $(NDKBASE)/nlmconv/ncpfs.inc
+else
+DS = \\
+PCT = %%
+endif
+
+# Makefile.inc provides the CSOURCES and HHEADERS defines
+include Makefile.inc
+
+OBJX := $(patsubst %.c,$(OBJDIR)/%.o,$(notdir $(strip $(CURLX_ONES))))
+OBJS := $(patsubst %.c,$(OBJDIR)/%.o,$(strip $(CURL_CFILES)))
+ifndef LINK_STATIC
+OBJS += $(OBJX)
+endif
+
+vpath %.c $(CURL_LIB)
+
+all: prebuild $(TARGET).nlm
+
+prebuild: $(OBJDIR) $(OBJDIR)/version.inc curl_config.h
+
+$(OBJDIR)/%.o: %.c
+# @echo Compiling $<
+ $(CC) $(CFLAGS) -c $< -o $@
+
+$(OBJDIR)/version.inc: $(CURL_INC)/curl/curlver.h $(OBJDIR)
+ @echo Creating $@
+ @$(AWK) -f ../packages/NetWare/get_ver.awk $< > $@
+
+install: $(INSTDIR) all
+ @-$(CP) ../docs/$(TARGET).pdf $(INSTDIR)
+ @-$(CP) ../docs/$(TARGET).html $(INSTDIR)
+ @$(CP) $(TARGET).nlm $(INSTDIR)
+
+clean:
+ifeq "$(wildcard hugehelp.c.cvs)" "hugehelp.c.cvs"
+ -$(RM) hugehelp.c
+endif
+ -$(RM) curl_config.h
+ -$(RM) -r $(OBJDIR)
+
+distclean vclean: clean
+ -$(RM) $(TARGET).nlm
+
+$(OBJDIR) $(INSTDIR):
+ @$(MKDIR) $@
+
+$(TARGET).nlm: $(OBJS) $(OBJDIR)/$(TARGET).def $(XDCDATA)
+ @echo Linking $@
+ @-$(RM) $@
+ @$(LD) $(LDFLAGS) $(OBJDIR)/$(TARGET).def
+
+$(OBJDIR)/%.xdc: Makefile.netware
+ @echo Creating $@
+ @$(MPKXDC) $(XDCOPT) $@
+
+$(OBJDIR)/%.def: Makefile.netware
+ @echo $(DL)# DEF file for linking with $(LD)$(DL) > $@
+ @echo $(DL)# Do not edit this file - it is created by make!$(DL) >> $@
+ @echo $(DL)# All your changes will be lost!!$(DL) >> $@
+ @echo $(DL)#$(DL) >> $@
+ @echo $(DL)copyright "$(COPYR)"$(DL) >> $@
+ @echo $(DL)description "$(DESCR)"$(DL) >> $@
+ @echo $(DL)version $(VERSION)$(DL) >> $@
+ifdef NLMTYPE
+ @echo $(DL)type $(NLMTYPE)$(DL) >> $@
+endif
+ifdef STACK
+ @echo $(DL)stack $(STACK)$(DL) >> $@
+endif
+ifdef SCREEN
+ @echo $(DL)screenname "$(SCREEN)"$(DL) >> $@
+else
+ @echo $(DL)screenname "DEFAULT"$(DL) >> $@
+endif
+ifneq ($(DB),NDEBUG)
+ @echo $(DL)debug$(DL) >> $@
+endif
+ @echo $(DL)threadname "$(TARGET)"$(DL) >> $@
+ifdef XDCDATA
+ @echo $(DL)xdcdata $(XDCDATA)$(DL) >> $@
+endif
+ifeq ($(LDRING),0)
+ @echo $(DL)flag_on 16$(DL) >> $@
+endif
+ifeq ($(LDRING),3)
+ @echo $(DL)flag_on 512$(DL) >> $@
+endif
+ifeq ($(LIBARCH),CLIB)
+ @echo $(DL)start _Prelude$(DL) >> $@
+ @echo $(DL)exit _Stop$(DL) >> $@
+ @echo $(DL)import @$(NDK_CLIB)/imports/clib.imp$(DL) >> $@
+ @echo $(DL)import @$(NDK_CLIB)/imports/threads.imp$(DL) >> $@
+ @echo $(DL)import @$(NDK_CLIB)/imports/nlmlib.imp$(DL) >> $@
+ @echo $(DL)import @$(NDK_CLIB)/imports/socklib.imp$(DL) >> $@
+ @echo $(DL)module clib$(DL) >> $@
+ifndef DISABLE_LDAP
+ @echo $(DL)import @$(NDK_LDAP)/clib/imports/ldapsdk.imp$(DL) >> $@
+ @echo $(DL)import @$(NDK_LDAP)/clib/imports/ldapssl.imp$(DL) >> $@
+# @echo $(DL)import @$(NDK_LDAP)/clib/imports/ldapx.imp$(DL) >> $@
+ @echo $(DL)module ldapsdk ldapssl$(DL) >> $@
+endif
+else
+ifeq ($(POSIXFL),1)
+ @echo $(DL)flag_on 4194304$(DL) >> $@
+endif
+ @echo $(DL)flag_on 64$(DL) >> $@
+ @echo $(DL)pseudopreemption$(DL) >> $@
+ifeq ($(findstring posixpre,$(PRELUDE)),posixpre)
+ @echo $(DL)start POSIX_Start$(DL) >> $@
+ @echo $(DL)exit POSIX_Stop$(DL) >> $@
+ @echo $(DL)check POSIX_CheckUnload$(DL) >> $@
+else
+ @echo $(DL)start _LibCPrelude$(DL) >> $@
+ @echo $(DL)exit _LibCPostlude$(DL) >> $@
+ @echo $(DL)check _LibCCheckUnload$(DL) >> $@
+endif
+ @echo $(DL)import @$(NDK_LIBC)/imports/libc.imp$(DL) >> $@
+ @echo $(DL)import @$(NDK_LIBC)/imports/netware.imp$(DL) >> $@
+ @echo $(DL)module libc$(DL) >> $@
+ifndef DISABLE_LDAP
+ @echo $(DL)import @$(NDK_LDAP)/libc/imports/lldapsdk.imp$(DL) >> $@
+ @echo $(DL)import @$(NDK_LDAP)/libc/imports/lldapssl.imp$(DL) >> $@
+# @echo $(DL)import @$(NDK_LDAP)/libc/imports/lldapx.imp$(DL) >> $@
+ @echo $(DL)module lldapsdk lldapssl$(DL) >> $@
+endif
+endif
+ifdef MODULES
+ @echo $(DL)module $(MODULES)$(DL) >> $@
+endif
+ifdef EXPORTS
+ @echo $(DL)export $(EXPORTS)$(DL) >> $@
+endif
+ifdef IMPORTS
+ @echo $(DL)import $(IMPORTS)$(DL) >> $@
+endif
+ifeq ($(findstring nlmconv,$(LD)),nlmconv)
+ @echo $(DL)input $(PRELUDE)$(DL) >> $@
+ @echo $(DL)input $(OBJS)$(DL) >> $@
+ifdef LDLIBS
+ @echo $(DL)input $(LDLIBS)$(DL) >> $@
+endif
+ @echo $(DL)output $(TARGET).nlm$(DL) >> $@
+endif
+
+curl_config.h: Makefile.netware
+ @echo Creating $@
+ @echo $(DL)/* $@ for NetWare target.$(DL) > $@
+ @echo $(DL)** Do not edit this file - it is created by make!$(DL) >> $@
+ @echo $(DL)** All your changes will be lost!!$(DL) >> $@
+ @echo $(DL)*/$(DL) >> $@
+ @echo $(DL)#ifndef NETWARE$(DL) >> $@
+ @echo $(DL)#error This $(notdir $@) is created for NetWare platform!$(DL) >> $@
+ @echo $(DL)#endif$(DL) >> $@
+ @echo $(DL)#define VERSION "$(LIBCURL_VERSION_STR)"$(DL) >> $@
+ @echo $(DL)#define PACKAGE_BUGREPORT "a suitable curl mailing list => http://curl.haxx.se/mail/"$(DL) >> $@
+ifeq ($(LIBARCH),CLIB)
+ @echo $(DL)#define OS "i586-pc-clib-NetWare"$(DL) >> $@
+ @echo $(DL)#define NETDB_USE_INTERNET 1$(DL) >> $@
+ @echo $(DL)#define HAVE_STRICMP 1$(DL) >> $@
+ @echo $(DL)#define HAVE_STRNICMP 1$(DL) >> $@
+ @echo $(DL)#define RECV_TYPE_ARG1 int$(DL) >> $@
+ @echo $(DL)#define RECV_TYPE_ARG2 char *$(DL) >> $@
+ @echo $(DL)#define RECV_TYPE_ARG3 int$(DL) >> $@
+ @echo $(DL)#define RECV_TYPE_ARG4 int$(DL) >> $@
+ @echo $(DL)#define RECV_TYPE_RETV int$(DL) >> $@
+ @echo $(DL)#define RECVFROM_TYPE_ARG1 int$(DL) >> $@
+ @echo $(DL)#define RECVFROM_TYPE_ARG2 char$(DL) >> $@
+ @echo $(DL)#define RECVFROM_TYPE_ARG3 int$(DL) >> $@
+ @echo $(DL)#define RECVFROM_TYPE_ARG4 int$(DL) >> $@
+ @echo $(DL)#define RECVFROM_TYPE_ARG5 struct sockaddr$(DL) >> $@
+ @echo $(DL)#define RECVFROM_TYPE_ARG6 int$(DL) >> $@
+ @echo $(DL)#define RECVFROM_TYPE_RETV int$(DL) >> $@
+ @echo $(DL)#define SEND_QUAL_ARG2$(DL) >> $@
+ @echo $(DL)#define SEND_TYPE_ARG1 int$(DL) >> $@
+ @echo $(DL)#define SEND_TYPE_ARG2 char *$(DL) >> $@
+ @echo $(DL)#define SEND_TYPE_ARG3 int$(DL) >> $@
+ @echo $(DL)#define SEND_TYPE_ARG4 int$(DL) >> $@
+ @echo $(DL)#define SEND_TYPE_RETV int$(DL) >> $@
+ @echo $(DL)#define pressanykey PressAnyKeyToContinue$(DL) >> $@
+else
+ @echo $(DL)#define OS "i586-pc-libc-NetWare"$(DL) >> $@
+ @echo $(DL)#define HAVE_FTRUNCATE 1$(DL) >> $@
+ @echo $(DL)#define HAVE_GETTIMEOFDAY 1$(DL) >> $@
+ @echo $(DL)#define HAVE_INTTYPES_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_LONGLONG 1$(DL) >> $@
+ @echo $(DL)#define HAVE_STDINT_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_STRCASECMP 1$(DL) >> $@
+ @echo $(DL)#define HAVE_STRLCAT 1$(DL) >> $@
+ @echo $(DL)#define HAVE_STRLCPY 1$(DL) >> $@
+ @echo $(DL)#define HAVE_STRTOLL 1$(DL) >> $@
+ @echo $(DL)#define HAVE_SYS_PARAM_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_SYS_SELECT_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_TERMIOS_H 1$(DL) >> $@
+ @echo $(DL)#define RECV_TYPE_ARG1 int$(DL) >> $@
+ @echo $(DL)#define RECV_TYPE_ARG2 void *$(DL) >> $@
+ @echo $(DL)#define RECV_TYPE_ARG3 size_t$(DL) >> $@
+ @echo $(DL)#define RECV_TYPE_ARG4 int$(DL) >> $@
+ @echo $(DL)#define RECV_TYPE_RETV ssize_t$(DL) >> $@
+ @echo $(DL)#define RECVFROM_TYPE_ARG1 int$(DL) >> $@
+ @echo $(DL)#define RECVFROM_TYPE_ARG2 void$(DL) >> $@
+ @echo $(DL)#define RECVFROM_TYPE_ARG3 size_t$(DL) >> $@
+ @echo $(DL)#define RECVFROM_TYPE_ARG4 int$(DL) >> $@
+ @echo $(DL)#define RECVFROM_TYPE_ARG5 struct sockaddr$(DL) >> $@
+ @echo $(DL)#define RECVFROM_TYPE_ARG6 size_t$(DL) >> $@
+ @echo $(DL)#define RECVFROM_TYPE_RETV ssize_t$(DL) >> $@
+ @echo $(DL)#define RECVFROM_TYPE_ARG2_IS_VOID 1$(DL) >> $@
+ @echo $(DL)#define SEND_QUAL_ARG2$(DL) >> $@
+ @echo $(DL)#define SEND_TYPE_ARG1 int$(DL) >> $@
+ @echo $(DL)#define SEND_TYPE_ARG2 void *$(DL) >> $@
+ @echo $(DL)#define SEND_TYPE_ARG3 size_t$(DL) >> $@
+ @echo $(DL)#define SEND_TYPE_ARG4 int$(DL) >> $@
+ @echo $(DL)#define SEND_TYPE_RETV ssize_t$(DL) >> $@
+ @echo $(DL)#define SIZEOF_OFF_T 8$(DL) >> $@
+ @echo $(DL)#define _LARGEFILE 1$(DL) >> $@
+ifdef ENABLE_IPV6
+ @echo $(DL)#define ENABLE_IPV6 1$(DL) >> $@
+ @echo $(DL)#define HAVE_AF_INET6 1$(DL) >> $@
+ @echo $(DL)#define HAVE_PF_INET6 1$(DL) >> $@
+ @echo $(DL)#define HAVE_FREEADDRINFO 1$(DL) >> $@
+ @echo $(DL)#define HAVE_GETADDRINFO 1$(DL) >> $@
+ @echo $(DL)#define HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID 1$(DL) >> $@
+ @echo $(DL)#define HAVE_STRUCT_ADDRINFO 1$(DL) >> $@
+ @echo $(DL)#define HAVE_STRUCT_IN6_ADDR 1$(DL) >> $@
+ @echo $(DL)#define HAVE_STRUCT_SOCKADDR_IN6 1$(DL) >> $@
+ @echo $(DL)#define SIZEOF_STRUCT_IN6_ADDR 16$(DL) >> $@
+endif
+endif
+ @echo $(DL)#define USE_MANUAL 1$(DL) >> $@
+ @echo $(DL)#define HAVE_ARPA_INET_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_ASSERT_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_ERR_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_FCNTL_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_GETHOSTBYADDR 1$(DL) >> $@
+ @echo $(DL)#define HAVE_GETHOSTBYNAME 1$(DL) >> $@
+ @echo $(DL)#define HAVE_GETPROTOBYNAME 1$(DL) >> $@
+ @echo $(DL)#define HAVE_GMTIME_R 1$(DL) >> $@
+ @echo $(DL)#define HAVE_INET_ADDR 1$(DL) >> $@
+ @echo $(DL)#define HAVE_IOCTL 1$(DL) >> $@
+ @echo $(DL)#define HAVE_IOCTL_FIONBIO 1$(DL) >> $@
+ @echo $(DL)#define HAVE_LIMITS_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_LL 1$(DL) >> $@
+ @echo $(DL)#define HAVE_LOCALE_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_LOCALTIME_R 1$(DL) >> $@
+ @echo $(DL)#define HAVE_MALLOC_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_NETINET_IN_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_RECV 1$(DL) >> $@
+ @echo $(DL)#define HAVE_RECVFROM 1$(DL) >> $@
+ @echo $(DL)#define HAVE_SELECT 1$(DL) >> $@
+ @echo $(DL)#define HAVE_SEND 1$(DL) >> $@
+ @echo $(DL)#define HAVE_SETJMP_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_SETLOCALE 1$(DL) >> $@
+ @echo $(DL)#define HAVE_SIGNAL 1$(DL) >> $@
+ @echo $(DL)#define HAVE_SIGNAL_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_SIG_ATOMIC_T 1$(DL) >> $@
+ @echo $(DL)#define HAVE_SOCKET 1$(DL) >> $@
+ @echo $(DL)#define HAVE_STDLIB_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_STRDUP 1$(DL) >> $@
+ @echo $(DL)#define HAVE_STRFTIME 1$(DL) >> $@
+ @echo $(DL)#define HAVE_STRING_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_STRSTR 1$(DL) >> $@
+ @echo $(DL)#define HAVE_STRUCT_TIMEVAL 1$(DL) >> $@
+ @echo $(DL)#define HAVE_SYS_IOCTL_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_SYS_STAT_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_SYS_TIME_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_TIME_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_UNAME 1$(DL) >> $@
+ @echo $(DL)#define HAVE_UNISTD_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_UTIME 1$(DL) >> $@
+ @echo $(DL)#define HAVE_UTIME_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_WRITEV 1$(DL) >> $@
+ @echo $(DL)#define RETSIGTYPE void$(DL) >> $@
+ @echo $(DL)#define SIZEOF_INT 4$(DL) >> $@
+ @echo $(DL)#define SIZEOF_SHORT 2$(DL) >> $@
+ @echo $(DL)#define SIZEOF_STRUCT_IN_ADDR 4$(DL) >> $@
+ @echo $(DL)#define STDC_HEADERS 1$(DL) >> $@
+ @echo $(DL)#define TIME_WITH_SYS_TIME 1$(DL) >> $@
+ifdef DISABLE_LDAP
+ @echo $(DL)#define CURL_DISABLE_LDAP 1$(DL) >> $@
+else
+ @echo $(DL)#define CURL_HAS_NOVELL_LDAPSDK 1$(DL) >> $@
+ifndef DISABLE_LDAPS
+ @echo $(DL)#define HAVE_LDAP_SSL 1$(DL) >> $@
+endif
+ @echo $(DL)#define HAVE_LDAP_SSL_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_LDAP_URL_PARSE 1$(DL) >> $@
+endif
+ifdef NW_WINSOCK
+ @echo $(DL)#define HAVE_CLOSESOCKET 1$(DL) >> $@
+else
+ @echo $(DL)#define USE_BSD_SOCKETS 1$(DL) >> $@
+ @echo $(DL)#define HAVE_SYS_TYPES_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_SYS_SOCKET_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_SYS_SOCKIO_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_NETDB_H 1$(DL) >> $@
+endif
+ifdef WITH_ARES
+ @echo $(DL)#define USE_ARES 1$(DL) >> $@
+endif
+ifdef WITH_ZLIB
+ @echo $(DL)#define HAVE_ZLIB_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_LIBZ 1$(DL) >> $@
+endif
+ifdef WITH_SSL
+ @echo $(DL)#define USE_SSLEAY 1$(DL) >> $@
+ @echo $(DL)#define USE_OPENSSL 1$(DL) >> $@
+ @echo $(DL)#define HAVE_OPENSSL_X509_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_OPENSSL_SSL_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_OPENSSL_RSA_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_OPENSSL_PEM_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_OPENSSL_ERR_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_OPENSSL_CRYPTO_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_OPENSSL_ENGINE_H 1$(DL) >> $@
+ @echo $(DL)#define HAVE_LIBSSL 1$(DL) >> $@
+ @echo $(DL)#define HAVE_LIBCRYPTO 1$(DL) >> $@
+ @echo $(DL)#define OPENSSL_NO_KRB5 1$(DL) >> $@
+endif
+ifdef WITH_SSH2
+ @echo $(DL)#define USE_LIBSSH2 1$(DL) >> $@
+ @echo $(DL)#define HAVE_LIBSSH2_H 1$(DL) >> $@
+endif
+ifdef WITH_IDN
+ @echo $(DL)#define HAVE_LIBIDN 1$(DL) >> $@
+ @echo $(DL)#define HAVE_TLD_H 1$(DL) >> $@
+endif
+ifdef WITH_RTMP
+ @echo $(DL)#define USE_LIBRTMP 1$(DL) >> $@
+endif
+ @echo $(DL)#ifdef __GNUC__$(DL) >> $@
+ @echo $(DL)#define HAVE_VARIADIC_MACROS_GCC 1$(DL) >> $@
+ @echo $(DL)#else$(DL) >> $@
+ @echo $(DL)#define HAVE_VARIADIC_MACROS_C99 1$(DL) >> $@
+ @echo $(DL)#endif$(DL) >> $@
+ifdef CABUNDLE
+ @echo $(DL)#define CURL_CA_BUNDLE "$(CABUNDLE)"$(DL) >> $@
+else
+ @echo $(DL)#define CURL_CA_BUNDLE getenv("CURL_CA_BUNDLE")$(DL) >> $@
+endif
+
+hugehelp.c:
+ @echo Creating $@
+ @$(CP) hugehelp.c.cvs $@
+
+$(LIBCARES_PATH)/libcares.$(LIBEXT):
+ $(MAKE) -C $(LIBCARES_PATH) -f Makefile.netware lib
+
+
diff --git a/src/Makefile.riscos b/src/Makefile.riscos
new file mode 100644
index 0000000..35a194f
--- /dev/null
+++ b/src/Makefile.riscos
@@ -0,0 +1,64 @@
+# Makefile for project cURL
+# Generated on Sun,13 Jan 2002.17:11:10 by EasyGCC (0.1.3 [beta 2] (3 Jan 2002))
+# Manually updated
+# Contact: easygcc@melotech.co.uk
+
+# Project objects:
+objs = o.hugehelp o.main o.urlglob o.writeout o.writeenv o.rawstr o.nonblock
+
+
+# Compile options:
+linkopts = ../lib/libcurl openldap:libraries/libldap/libldap -o curl
+compileropts = -mpoke-function-name -IUtilLib: -mthrowback
+
+# Project target:
+curl: $(objs)
+ gcc $(linkopts) $(objs)
+
+# Static dependancies:
+o.hugehelp: c.hugehelp
+ gcc $(compileropts) -c -o hugehelp.o c.hugehelp
+
+o.main: c.main
+ gcc $(compileropts) -c -o main.o c.main
+
+o.os-specific: c.os-specific
+ gcc $(compileropts) -c -o os-specific.o c.os-specific
+
+o.urlglob: c.urlglob
+ gcc $(compileropts) -c -o urlglob.o c.urlglob
+
+o.writeout: c.writeout
+ gcc $(compileropts) -c -o writeout.o c.writeout
+
+o.writeenv: c.writeenv
+ gcc $(compileropts) -c -o writeenv.o c.writeenv
+
+o.rawstr: ../lib/c.rawstr
+ gcc $(compileropts) -c -o rawstr.o ../lib/c.rawstr
+
+o.nonblock: ../lib/c.nonblock
+ gcc $(compileropts) -c -o nonblock.o ../lib/c.nonblock
+
+# Dynamic dependancies:
+o.hugehelp: c.hugehelp
+
+o.main: c.main
+o.main: h.setup
+o.main: h.os-specific
+o.main: h.urlglob
+o.main: h.writeout
+o.main: h.version
+
+o.os-specific: c.os-specific
+o.os-specific: h.setup
+o.os-specific: h.os-specific
+
+o.urlglob: c.urlglob
+o.urlglob: h.setup
+o.urlglob: h.os-specific
+o.urlglob: h.urlglob
+
+o.writeout: c.writeout
+o.writeout: h.writeout
+
diff --git a/src/Makefile.vc10 b/src/Makefile.vc10
new file mode 100644
index 0000000..24d1b93
--- /dev/null
+++ b/src/Makefile.vc10
@@ -0,0 +1,299 @@
+#############################################################
+#
+## Makefile for building curl.exe with MSVC10
+## Use: nmake -f makefile.vc10 [release | debug] [CFG=release-ssl]
+## (default is release)
+## "nmake -f makefile.vc10 CFG=release-ssl" statically links OpenSSL
+## into curl.exe producing a standalone SSL-enabled executable.
+##
+## Comments to: Troy Engel <tengel@sonic.net>
+## Updated by: Craig Davison <cd@securityfocus.com>
+## release-ssl added by Miklos Nemeth <mnemeth@kfkisystems.com>
+#
+#############################################################
+
+PROGRAM_NAME = curl.exe
+
+!IFNDEF OPENSSL_PATH
+OPENSSL_PATH = ../../openssl-0.9.8o
+!ENDIF
+
+!IFNDEF ZLIB_PATH
+ZLIB_PATH = ../../zlib-1.2.5
+!ENDIF
+
+!IFNDEF MACHINE
+MACHINE = X86
+!ENDIF
+
+# USE_WINDOWS_SSPI uses windows libraries to allow NTLM authentication
+# without an openssl installation and offers the ability to authenticate
+# using the "current logged in user". Since at least with MSVC10 the sspi.h
+# header is broken it is either required to install the Windows SDK,
+# or to fix sspi.h with adding this define at the beginning of sspi.h:
+# #define FreeCredentialHandle FreeCredentialsHandle
+#
+# If, for some reason the Windows SDK is installed but not installed
+# in the default location, you can specify WINDOWS_SDK_PATH.
+# It can be downloaded from:
+# http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
+
+# WINDOWS_SSPI = 1
+
+!IFDEF WINDOWS_SSPI
+!IFNDEF WINDOWS_SDK_PATH
+WINDOWS_SDK_PATH = "C:\Program Files\Microsoft SDK"
+!ENDIF
+!ENDIF
+
+########################################################
+## Nothing more to do below this line!
+ZLIB_CFLAGS = /DHAVE_ZLIB_H /DHAVE_ZLIB /DHAVE_LIBZ /I "$(ZLIB_PATH)"
+ZLIB_LFLAGS = "/LIBPATH:$(ZLIB_PATH)"
+ZLIB_LIBS = zlib.lib
+ZLIB_IMP_LIBS = zdll.lib
+
+SSL_CFLAGS = /DUSE_SSLEAY
+SSL_LFLAGS = /LIBPATH:"$(OPENSSL_PATH)/out32"
+SSL_IMP_LFLAGS = /LIBPATH:"$(OPENSSL_PATH)/out32dll"
+SSL_LIBS = libeay32.lib ssleay32.lib gdi32.lib user32.lib advapi32.lib
+
+# Runtime library configuration
+RTLIB = /MD
+RTLIBD = /MDd
+
+!IF "$(RTLIBCFG)" == "static"
+RTLIB = /MT
+RTLIBD = /MTd
+!ENDIF
+
+## Release
+CCR = cl.exe $(RTLIB) /O2 /DNDEBUG
+LINKR = link.exe /incremental:no /libpath:"../lib"
+RCR = rc.exe /dDEBUGBUILD=0
+
+## Debug
+CCD = cl.exe $(RTLIBD) /Gm /ZI /Od /D_DEBUG /RTC1
+LINKD = link.exe /incremental:yes /debug /libpath:"../lib"
+RCD = rc.exe /dDEBUGBUILD=1
+
+CFLAGS = /I../lib /I../include /nologo /W3 /EHsc /DWIN32 /FD /c
+LFLAGS = /nologo /out:$(PROGRAM_NAME) /subsystem:console /machine:$(MACHINE)
+RESFLAGS = /i../include
+
+# This manifest thing is for VC8, enabled by the maketgz script that
+# builds the VC8 version of this makefile. Left commented out in the VC10
+# version!
+#MANIFESTTOOL = mt -manifest $(PROGRAM_NAME).manifest -outputresource:$(PROGRAM_NAME);1
+
+!IFDEF WINDOWS_SSPI
+CFLAGS = $(CFLAGS) /DUSE_WINDOWS_SSPI /I$(WINDOWS_SDK_PATH)\include
+!ENDIF
+
+RELEASE_OBJS= \
+ hugehelpr.obj \
+ writeoutr.obj \
+ urlglobr.obj \
+ getpassr.obj \
+ homedirr.obj \
+ curlutilr.obj \
+ os-specificr.obj \
+ nonblockr.obj \
+ rawstrr.obj \
+ strtoofftr.obj \
+ mainr.obj \
+ curlr.res
+
+DEBUG_OBJS= \
+ hugehelpd.obj \
+ writeoutd.obj \
+ urlglobd.obj \
+ getpassd.obj \
+ homedird.obj \
+ curlutild.obj \
+ os-specificd.obj \
+ nonblockd.obj \
+ rawstrd.obj \
+ strtoofftd.obj \
+ maind.obj \
+ curld.res
+
+#################################################
+# If CFG not specified, use static libs
+
+CFLAGS = $(CFLAGS) /DCURL_STATICLIB
+LINKLIBS = libcurl.lib
+LINKLIBS_DEBUG = libcurld.lib
+
+#################################################
+# release dynamic library
+
+!IF "$(CFG)" == "release-dll"
+LINKLIBS = libcurl_imp.lib
+LINKLIBS_DEBUG = libcurld_imp.lib
+!ENDIF
+
+#################################################
+# release static library with zlib
+
+!IF "$(CFG)" == "release-zlib"
+CFLAGS = $(CFLAGS) $(ZLIB_CFLAGS) /DCURL_STATICLIB
+LINKLIBS = libcurl.lib $(ZLIB_LIBS)
+LINKLIBS_DEBUG = libcurld.lib $(ZLIB_LIBS)
+LFLAGS = $(LFLAGS) $(ZLIB_LFLAGS)
+!ENDIF
+
+#################################################
+# release static library with ssl
+
+!IF "$(CFG)" == "release-ssl"
+CFLAGS = $(CFLAGS) $(SSL_CFLAGS) /DCURL_STATICLIB
+LINKLIBS = libcurl.lib $(SSL_LIBS)
+LINKLIBS_DEBUG = libcurld.lib $(SSL_LIBS)
+LFLAGS = $(LFLAGS) $(SSL_LFLAGS)
+!ENDIF
+
+#################################################
+# release dynamic library with dynamic ssl
+
+!IF "$(CFG)" == "release-dll-ssl-dll"
+CFLAGS = $(CFLAGS) $(SSL_CFLAGS)
+LINKLIBS = libcurl_imp.lib $(SSL_LIBS)
+LINKLIBS_DEBUG = libcurld_imp.lib $(SSL_LIBS)
+LFLAGS = $(LFLAGS) $(SSL_IMP_LFLAGS)
+!ENDIF
+
+#################################################
+# release static library with ssl and zlib
+
+!IF "$(CFG)" == "release-ssl-zlib"
+CFLAGS = $(CFLAGS) $(SSL_CFLAGS) $(ZLIB_CFLAGS) /DCURL_STATICLIB
+LINKLIBS = libcurl.lib $(SSL_LIBS) $(ZLIB_LIBS)
+LINKLIBS_DEBUG = libcurld.lib $(SSL_LIBS) $(ZLIB_LIBS)
+LFLAGS = $(LFLAGS) $(SSL_LFLAGS) $(ZLIB_LFLAGS)
+!ENDIF
+
+#################################################
+# release static library with dynamic ssl
+
+!IF "$(CFG)" == "release-ssl-dll"
+CFLAGS = $(CFLAGS) $(SSL_CFLAGS) /DCURL_STATICLIB
+LINKLIBS = libcurl.lib $(SSL_LIBS)
+LINKLIBS_DEBUG = libcurld.lib $(SSL_LIBS)
+LFLAGS = $(LFLAGS) $(SSL_IMP_LFLAGS)
+!ENDIF
+
+#################################################
+# release static library with dynamic zlib
+
+!IF "$(CFG)" == "release-zlib-dll"
+CFLAGS = $(CFLAGS) $(ZLIB_CFLAGS) /DCURL_STATICLIB
+LINKLIBS = libcurl.lib $(ZLIB_IMP_LIBS)
+LINKLIBS_DEBUG = libcurld.lib $(ZLIB_IMP_LIBS)
+LFLAGS = $(LFLAGS) $(ZLIB_LFLAGS)
+!ENDIF
+
+#################################################
+# release dynamic library with dynamic zlib
+
+!IF "$(CFG)" == "release-dll-zlib-dll"
+CFLAGS = $(CFLAGS) $(ZLIB_CFLAGS)
+LINKLIBS = libcurl_imp.lib $(ZLIB_IMP_LIBS)
+LINKLIBS_DEBUG = libcurld_imp.lib $(ZLIB_IMP_LIBS)
+LFLAGS = $(LFLAGS) $(ZLIB_LFLAGS)
+!ENDIF
+
+#################################################
+# release static library with dynamic ssl and dynamic zlib
+
+!IF "$(CFG)" == "release-ssl-dll-zlib-dll"
+CFLAGS = $(CFLAGS) $(SSL_CFLAGS) $(ZLIB_CFLAGS) /DCURL_STATICLIB
+LINKLIBS = libcurl.lib $(SSL_LIBS) $(ZLIB_IMP_LIBS)
+LINKLIBS_DEBUG = libcurld.lib $(SSL_LIBS) $(ZLIB_IMP_LIBS)
+LFLAGS = $(LFLAGS) $(SSL_IMP_LFLAGS) $(ZLIB_LFLAGS)
+!ENDIF
+
+#################################################
+# release dynamic library with dynamic ssl and dynamic zlib
+
+!IF "$(CFG)" == "release-dll-ssl-dll-zlib-dll"
+CFLAGS = $(CFLAGS) $(SSL_CFLAGS) $(ZLIB_CFLAGS)
+LINKLIBS = libcurl_imp.lib $(SSL_LIBS) $(ZLIB_IMP_LIBS)
+LINKLIBS_DEBUG = libcurld_imp.lib $(SSL_LIBS) $(ZLIB_IMP_LIBS)
+LFLAGS = $(LFLAGS) $(SSL_IMP_LFLAGS) $(ZLIB_LFLAGS)
+!ENDIF
+
+
+LINKLIBS = $(LINKLIBS) ws2_32.lib wldap32.lib
+LINKLIBS_DEBUG = $(LINKLIBS_DEBUG) ws2_32.lib wldap32.lib
+
+all : release
+
+release: $(RELEASE_OBJS)
+ $(LINKR) $(LFLAGS) $(LINKLIBS) $(RELEASE_OBJS)
+ $(MANIFESTTOOL)
+
+debug: $(DEBUG_OBJS)
+ $(LINKD) $(LFLAGS) $(LINKLIBS_DEBUG) $(DEBUG_OBJS)
+ $(MANIFESTTOOL)
+
+## Release
+hugehelpr.obj: hugehelp.c
+ $(CCR) $(CFLAGS) /Zm200 /Fo"$@" hugehelp.c
+writeoutr.obj: writeout.c
+ $(CCR) $(CFLAGS) /Fo"$@" writeout.c
+urlglobr.obj: urlglob.c
+ $(CCR) $(CFLAGS) /Fo"$@" urlglob.c
+getpassr.obj: getpass.c
+ $(CCR) $(CFLAGS) /Fo"$@" getpass.c
+homedirr.obj: homedir.c
+ $(CCR) $(CFLAGS) /Fo"$@" homedir.c
+curlutilr.obj: curlutil.c
+ $(CCR) $(CFLAGS) /Fo"$@" curlutil.c
+os-specificr.obj: os-specific.c
+ $(CCR) $(CFLAGS) /Fo"$@" os-specific.c
+nonblockr.obj: ../lib/nonblock.c
+ $(CCR) $(CFLAGS) /Fo"$@" ../lib/nonblock.c
+rawstrr.obj: ../lib/rawstr.c
+ $(CCR) $(CFLAGS) /Fo"$@" ../lib/rawstr.c
+strtoofftr.obj: ../lib/strtoofft.c
+ $(CCR) $(CFLAGS) /Fo"$@" ../lib/strtoofft.c
+mainr.obj: main.c
+ $(CCR) $(CFLAGS) /Fo"$@" main.c
+curlr.res : curl.rc
+ $(RCR) $(RESFLAGS) /Fo"$@" curl.rc
+
+## Debug
+hugehelpd.obj: hugehelp.c
+ $(CCD) $(CFLAGS) /Zm200 /Fo"$@" hugehelp.c
+writeoutd.obj: writeout.c
+ $(CCD) $(CFLAGS) /Fo"$@" writeout.c
+urlglobd.obj: urlglob.c
+ $(CCD) $(CFLAGS) /Fo"$@" urlglob.c
+getpassd.obj: getpass.c
+ $(CCD) $(CFLAGS) /Fo"$@" getpass.c
+homedird.obj: homedir.c
+ $(CCD) $(CFLAGS) /Fo"$@" homedir.c
+curlutild.obj: curlutil.c
+ $(CCD) $(CFLAGS) /Fo"$@" curlutil.c
+os-specificd.obj: os-specific.c
+ $(CCD) $(CFLAGS) /Fo"$@" os-specific.c
+nonblockd.obj: ../lib/nonblock.c
+ $(CCD) $(CFLAGS) /Fo"$@" ../lib/nonblock.c
+rawstrd.obj: ../lib/rawstr.c
+ $(CCD) $(CFLAGS) /Fo"$@" ../lib/rawstr.c
+strtoofftd.obj: ../lib/strtoofft.c
+ $(CCD) $(CFLAGS) /Fo"$@" ../lib/strtoofft.c
+maind.obj: main.c
+ $(CCD) $(CFLAGS) /Fo"$@" main.c
+curld.res : curl.rc
+ $(RCD) $(RESFLAGS) /Fo"$@" curl.rc
+
+clean:
+ @-erase $(PROGRAM_NAME) 2> NUL
+ @-erase $(RELEASE_OBJS) 2> NUL
+ @-erase $(DEBUG_OBJS) 2> NUL
+ @-erase *.idb 2> NUL
+ @-erase *.pdb 2> NUL
+ @-erase *.pch 2> NUL
+ @-erase *.ilk 2> NUL
diff --git a/src/Makefile.vc6 b/src/Makefile.vc6
new file mode 100644
index 0000000..4a3480d
--- /dev/null
+++ b/src/Makefile.vc6
@@ -0,0 +1,299 @@
+#############################################################
+#
+## Makefile for building curl.exe with MSVC6
+## Use: nmake -f makefile.vc6 [release | debug] [CFG=release-ssl]
+## (default is release)
+## "nmake -f makefile.vc6 CFG=release-ssl" statically links OpenSSL
+## into curl.exe producing a standalone SSL-enabled executable.
+##
+## Comments to: Troy Engel <tengel@sonic.net>
+## Updated by: Craig Davison <cd@securityfocus.com>
+## release-ssl added by Miklos Nemeth <mnemeth@kfkisystems.com>
+#
+#############################################################
+
+PROGRAM_NAME = curl.exe
+
+!IFNDEF OPENSSL_PATH
+OPENSSL_PATH = ../../openssl-0.9.8o
+!ENDIF
+
+!IFNDEF ZLIB_PATH
+ZLIB_PATH = ../../zlib-1.2.5
+!ENDIF
+
+!IFNDEF MACHINE
+MACHINE = X86
+!ENDIF
+
+# USE_WINDOWS_SSPI uses windows libraries to allow NTLM authentication
+# without an openssl installation and offers the ability to authenticate
+# using the "current logged in user". Since at least with MSVC6 the sspi.h
+# header is broken it is either required to install the Windows SDK,
+# or to fix sspi.h with adding this define at the beginning of sspi.h:
+# #define FreeCredentialHandle FreeCredentialsHandle
+#
+# If, for some reason the Windows SDK is installed but not installed
+# in the default location, you can specify WINDOWS_SDK_PATH.
+# It can be downloaded from:
+# http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
+
+# WINDOWS_SSPI = 1
+
+!IFDEF WINDOWS_SSPI
+!IFNDEF WINDOWS_SDK_PATH
+WINDOWS_SDK_PATH = "C:\Program Files\Microsoft SDK"
+!ENDIF
+!ENDIF
+
+########################################################
+## Nothing more to do below this line!
+ZLIB_CFLAGS = /DHAVE_ZLIB_H /DHAVE_ZLIB /DHAVE_LIBZ /I "$(ZLIB_PATH)"
+ZLIB_LFLAGS = "/LIBPATH:$(ZLIB_PATH)"
+ZLIB_LIBS = zlib.lib
+ZLIB_IMP_LIBS = zdll.lib
+
+SSL_CFLAGS = /DUSE_SSLEAY
+SSL_LFLAGS = /LIBPATH:"$(OPENSSL_PATH)/out32"
+SSL_IMP_LFLAGS = /LIBPATH:"$(OPENSSL_PATH)/out32dll"
+SSL_LIBS = libeay32.lib ssleay32.lib gdi32.lib user32.lib advapi32.lib
+
+# Runtime library configuration
+RTLIB = /MD
+RTLIBD = /MDd
+
+!IF "$(RTLIBCFG)" == "static"
+RTLIB = /MT
+RTLIBD = /MTd
+!ENDIF
+
+## Release
+CCR = cl.exe $(RTLIB) /O2 /DNDEBUG
+LINKR = link.exe /incremental:no /libpath:"../lib"
+RCR = rc.exe /dDEBUGBUILD=0
+
+## Debug
+CCD = cl.exe $(RTLIBD) /Gm /ZI /Od /D_DEBUG /GZ
+LINKD = link.exe /incremental:yes /debug /libpath:"../lib"
+RCD = rc.exe /dDEBUGBUILD=1
+
+CFLAGS = /I../lib /I../include /nologo /W3 /GX /DWIN32 /YX /FD /c
+LFLAGS = /nologo /out:$(PROGRAM_NAME) /subsystem:console /machine:$(MACHINE)
+RESFLAGS = /i../include
+
+# This manifest thing is for VC8, enabled by the maketgz script that
+# builds the VC8 version of this makefile. Left commented out in the VC6
+# version!
+#MANIFESTTOOL = mt -manifest $(PROGRAM_NAME).manifest -outputresource:$(PROGRAM_NAME);1
+
+!IFDEF WINDOWS_SSPI
+CFLAGS = $(CFLAGS) /DUSE_WINDOWS_SSPI /I$(WINDOWS_SDK_PATH)\include
+!ENDIF
+
+RELEASE_OBJS= \
+ hugehelpr.obj \
+ writeoutr.obj \
+ urlglobr.obj \
+ getpassr.obj \
+ homedirr.obj \
+ curlutilr.obj \
+ os-specificr.obj \
+ nonblockr.obj \
+ rawstrr.obj \
+ strtoofftr.obj \
+ mainr.obj \
+ curlr.res
+
+DEBUG_OBJS= \
+ hugehelpd.obj \
+ writeoutd.obj \
+ urlglobd.obj \
+ getpassd.obj \
+ homedird.obj \
+ curlutild.obj \
+ os-specificd.obj \
+ nonblockd.obj \
+ rawstrd.obj \
+ strtoofftd.obj \
+ maind.obj \
+ curld.res
+
+#################################################
+# If CFG not specified, use static libs
+
+CFLAGS = $(CFLAGS) /DCURL_STATICLIB
+LINKLIBS = libcurl.lib
+LINKLIBS_DEBUG = libcurld.lib
+
+#################################################
+# release dynamic library
+
+!IF "$(CFG)" == "release-dll"
+LINKLIBS = libcurl_imp.lib
+LINKLIBS_DEBUG = libcurld_imp.lib
+!ENDIF
+
+#################################################
+# release static library with zlib
+
+!IF "$(CFG)" == "release-zlib"
+CFLAGS = $(CFLAGS) $(ZLIB_CFLAGS) /DCURL_STATICLIB
+LINKLIBS = libcurl.lib $(ZLIB_LIBS)
+LINKLIBS_DEBUG = libcurld.lib $(ZLIB_LIBS)
+LFLAGS = $(LFLAGS) $(ZLIB_LFLAGS)
+!ENDIF
+
+#################################################
+# release static library with ssl
+
+!IF "$(CFG)" == "release-ssl"
+CFLAGS = $(CFLAGS) $(SSL_CFLAGS) /DCURL_STATICLIB
+LINKLIBS = libcurl.lib $(SSL_LIBS)
+LINKLIBS_DEBUG = libcurld.lib $(SSL_LIBS)
+LFLAGS = $(LFLAGS) $(SSL_LFLAGS)
+!ENDIF
+
+#################################################
+# release dynamic library with dynamic ssl
+
+!IF "$(CFG)" == "release-dll-ssl-dll"
+CFLAGS = $(CFLAGS) $(SSL_CFLAGS)
+LINKLIBS = libcurl_imp.lib $(SSL_LIBS)
+LINKLIBS_DEBUG = libcurld_imp.lib $(SSL_LIBS)
+LFLAGS = $(LFLAGS) $(SSL_IMP_LFLAGS)
+!ENDIF
+
+#################################################
+# release static library with ssl and zlib
+
+!IF "$(CFG)" == "release-ssl-zlib"
+CFLAGS = $(CFLAGS) $(SSL_CFLAGS) $(ZLIB_CFLAGS) /DCURL_STATICLIB
+LINKLIBS = libcurl.lib $(SSL_LIBS) $(ZLIB_LIBS)
+LINKLIBS_DEBUG = libcurld.lib $(SSL_LIBS) $(ZLIB_LIBS)
+LFLAGS = $(LFLAGS) $(SSL_LFLAGS) $(ZLIB_LFLAGS)
+!ENDIF
+
+#################################################
+# release static library with dynamic ssl
+
+!IF "$(CFG)" == "release-ssl-dll"
+CFLAGS = $(CFLAGS) $(SSL_CFLAGS) /DCURL_STATICLIB
+LINKLIBS = libcurl.lib $(SSL_LIBS)
+LINKLIBS_DEBUG = libcurld.lib $(SSL_LIBS)
+LFLAGS = $(LFLAGS) $(SSL_IMP_LFLAGS)
+!ENDIF
+
+#################################################
+# release static library with dynamic zlib
+
+!IF "$(CFG)" == "release-zlib-dll"
+CFLAGS = $(CFLAGS) $(ZLIB_CFLAGS) /DCURL_STATICLIB
+LINKLIBS = libcurl.lib $(ZLIB_IMP_LIBS)
+LINKLIBS_DEBUG = libcurld.lib $(ZLIB_IMP_LIBS)
+LFLAGS = $(LFLAGS) $(ZLIB_LFLAGS)
+!ENDIF
+
+#################################################
+# release dynamic library with dynamic zlib
+
+!IF "$(CFG)" == "release-dll-zlib-dll"
+CFLAGS = $(CFLAGS) $(ZLIB_CFLAGS)
+LINKLIBS = libcurl_imp.lib $(ZLIB_IMP_LIBS)
+LINKLIBS_DEBUG = libcurld_imp.lib $(ZLIB_IMP_LIBS)
+LFLAGS = $(LFLAGS) $(ZLIB_LFLAGS)
+!ENDIF
+
+#################################################
+# release static library with dynamic ssl and dynamic zlib
+
+!IF "$(CFG)" == "release-ssl-dll-zlib-dll"
+CFLAGS = $(CFLAGS) $(SSL_CFLAGS) $(ZLIB_CFLAGS) /DCURL_STATICLIB
+LINKLIBS = libcurl.lib $(SSL_LIBS) $(ZLIB_IMP_LIBS)
+LINKLIBS_DEBUG = libcurld.lib $(SSL_LIBS) $(ZLIB_IMP_LIBS)
+LFLAGS = $(LFLAGS) $(SSL_IMP_LFLAGS) $(ZLIB_LFLAGS)
+!ENDIF
+
+#################################################
+# release dynamic library with dynamic ssl and dynamic zlib
+
+!IF "$(CFG)" == "release-dll-ssl-dll-zlib-dll"
+CFLAGS = $(CFLAGS) $(SSL_CFLAGS) $(ZLIB_CFLAGS)
+LINKLIBS = libcurl_imp.lib $(SSL_LIBS) $(ZLIB_IMP_LIBS)
+LINKLIBS_DEBUG = libcurld_imp.lib $(SSL_LIBS) $(ZLIB_IMP_LIBS)
+LFLAGS = $(LFLAGS) $(SSL_IMP_LFLAGS) $(ZLIB_LFLAGS)
+!ENDIF
+
+
+LINKLIBS = $(LINKLIBS) ws2_32.lib wldap32.lib
+LINKLIBS_DEBUG = $(LINKLIBS_DEBUG) ws2_32.lib wldap32.lib
+
+all : release
+
+release: $(RELEASE_OBJS)
+ $(LINKR) $(LFLAGS) $(LINKLIBS) $(RELEASE_OBJS)
+ $(MANIFESTTOOL)
+
+debug: $(DEBUG_OBJS)
+ $(LINKD) $(LFLAGS) $(LINKLIBS_DEBUG) $(DEBUG_OBJS)
+ $(MANIFESTTOOL)
+
+## Release
+hugehelpr.obj: hugehelp.c
+ $(CCR) $(CFLAGS) /Zm200 /Fo"$@" hugehelp.c
+writeoutr.obj: writeout.c
+ $(CCR) $(CFLAGS) /Fo"$@" writeout.c
+urlglobr.obj: urlglob.c
+ $(CCR) $(CFLAGS) /Fo"$@" urlglob.c
+getpassr.obj: getpass.c
+ $(CCR) $(CFLAGS) /Fo"$@" getpass.c
+homedirr.obj: homedir.c
+ $(CCR) $(CFLAGS) /Fo"$@" homedir.c
+curlutilr.obj: curlutil.c
+ $(CCR) $(CFLAGS) /Fo"$@" curlutil.c
+os-specificr.obj: os-specific.c
+ $(CCR) $(CFLAGS) /Fo"$@" os-specific.c
+nonblockr.obj: ../lib/nonblock.c
+ $(CCR) $(CFLAGS) /Fo"$@" ../lib/nonblock.c
+rawstrr.obj: ../lib/rawstr.c
+ $(CCR) $(CFLAGS) /Fo"$@" ../lib/rawstr.c
+strtoofftr.obj: ../lib/strtoofft.c
+ $(CCR) $(CFLAGS) /Fo"$@" ../lib/strtoofft.c
+mainr.obj: main.c
+ $(CCR) $(CFLAGS) /Fo"$@" main.c
+curlr.res : curl.rc
+ $(RCR) $(RESFLAGS) /Fo"$@" curl.rc
+
+## Debug
+hugehelpd.obj: hugehelp.c
+ $(CCD) $(CFLAGS) /Zm200 /Fo"$@" hugehelp.c
+writeoutd.obj: writeout.c
+ $(CCD) $(CFLAGS) /Fo"$@" writeout.c
+urlglobd.obj: urlglob.c
+ $(CCD) $(CFLAGS) /Fo"$@" urlglob.c
+getpassd.obj: getpass.c
+ $(CCD) $(CFLAGS) /Fo"$@" getpass.c
+homedird.obj: homedir.c
+ $(CCD) $(CFLAGS) /Fo"$@" homedir.c
+curlutild.obj: curlutil.c
+ $(CCD) $(CFLAGS) /Fo"$@" curlutil.c
+os-specificd.obj: os-specific.c
+ $(CCD) $(CFLAGS) /Fo"$@" os-specific.c
+nonblockd.obj: ../lib/nonblock.c
+ $(CCD) $(CFLAGS) /Fo"$@" ../lib/nonblock.c
+rawstrd.obj: ../lib/rawstr.c
+ $(CCD) $(CFLAGS) /Fo"$@" ../lib/rawstr.c
+strtoofftd.obj: ../lib/strtoofft.c
+ $(CCD) $(CFLAGS) /Fo"$@" ../lib/strtoofft.c
+maind.obj: main.c
+ $(CCD) $(CFLAGS) /Fo"$@" main.c
+curld.res : curl.rc
+ $(RCD) $(RESFLAGS) /Fo"$@" curl.rc
+
+clean:
+ @-erase $(PROGRAM_NAME) 2> NUL
+ @-erase $(RELEASE_OBJS) 2> NUL
+ @-erase $(DEBUG_OBJS) 2> NUL
+ @-erase *.idb 2> NUL
+ @-erase *.pdb 2> NUL
+ @-erase *.pch 2> NUL
+ @-erase *.ilk 2> NUL
diff --git a/src/Makefile.vc8 b/src/Makefile.vc8
new file mode 100644
index 0000000..ffcb05f
--- /dev/null
+++ b/src/Makefile.vc8
@@ -0,0 +1,299 @@
+#############################################################
+#
+## Makefile for building curl.exe with MSVC8
+## Use: nmake -f makefile.vc6 [release | debug] [CFG=release-ssl]
+## (default is release)
+## "nmake -f makefile.vc6 CFG=release-ssl" statically links OpenSSL
+## into curl.exe producing a standalone SSL-enabled executable.
+##
+## Comments to: Troy Engel <tengel@sonic.net>
+## Updated by: Craig Davison <cd@securityfocus.com>
+## release-ssl added by Miklos Nemeth <mnemeth@kfkisystems.com>
+#
+#############################################################
+
+PROGRAM_NAME = curl.exe
+
+!IFNDEF OPENSSL_PATH
+OPENSSL_PATH = ../../openssl-0.9.8o
+!ENDIF
+
+!IFNDEF ZLIB_PATH
+ZLIB_PATH = ../../zlib-1.2.5
+!ENDIF
+
+!IFNDEF MACHINE
+MACHINE = X86
+!ENDIF
+
+# USE_WINDOWS_SSPI uses windows libraries to allow NTLM authentication
+# without an openssl installation and offers the ability to authenticate
+# using the "current logged in user". Since at least with MSVC8 the sspi.h
+# header is broken it is either required to install the Windows SDK,
+# or to fix sspi.h with adding this define at the beginning of sspi.h:
+# #define FreeCredentialHandle FreeCredentialsHandle
+#
+# If, for some reason the Windows SDK is installed but not installed
+# in the default location, you can specify WINDOWS_SDK_PATH.
+# It can be downloaded from:
+# http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
+
+# WINDOWS_SSPI = 1
+
+!IFDEF WINDOWS_SSPI
+!IFNDEF WINDOWS_SDK_PATH
+WINDOWS_SDK_PATH = "C:\Program Files\Microsoft SDK"
+!ENDIF
+!ENDIF
+
+########################################################
+## Nothing more to do below this line!
+ZLIB_CFLAGS = /DHAVE_ZLIB_H /DHAVE_ZLIB /DHAVE_LIBZ /I "$(ZLIB_PATH)"
+ZLIB_LFLAGS = "/LIBPATH:$(ZLIB_PATH)"
+ZLIB_LIBS = zlib.lib
+ZLIB_IMP_LIBS = zdll.lib
+
+SSL_CFLAGS = /DUSE_SSLEAY
+SSL_LFLAGS = /LIBPATH:"$(OPENSSL_PATH)/out32"
+SSL_IMP_LFLAGS = /LIBPATH:"$(OPENSSL_PATH)/out32dll"
+SSL_LIBS = libeay32.lib ssleay32.lib gdi32.lib user32.lib advapi32.lib
+
+# Runtime library configuration
+RTLIB = /MD
+RTLIBD = /MDd
+
+!IF "$(RTLIBCFG)" == "static"
+RTLIB = /MT
+RTLIBD = /MTd
+!ENDIF
+
+## Release
+CCR = cl.exe $(RTLIB) /O2 /DNDEBUG
+LINKR = link.exe /incremental:no /libpath:"../lib"
+RCR = rc.exe /dDEBUGBUILD=0
+
+## Debug
+CCD = cl.exe $(RTLIBD) /Gm /ZI /Od /D_DEBUG /RTC1
+LINKD = link.exe /incremental:yes /debug /libpath:"../lib"
+RCD = rc.exe /dDEBUGBUILD=1
+
+CFLAGS = /I../lib /I../include /nologo /W3 /EHsc /DWIN32 /FD /c
+LFLAGS = /nologo /out:$(PROGRAM_NAME) /subsystem:console /machine:$(MACHINE)
+RESFLAGS = /i../include
+
+# This manifest thing is for VC8, enabled by the maketgz script that
+# builds the VC8 version of this makefile. Left commented out in the VC8
+# version!
+#MANIFESTTOOL = mt -manifest $(PROGRAM_NAME).manifest -outputresource:$(PROGRAM_NAME);1
+
+!IFDEF WINDOWS_SSPI
+CFLAGS = $(CFLAGS) /DUSE_WINDOWS_SSPI /I$(WINDOWS_SDK_PATH)\include
+!ENDIF
+
+RELEASE_OBJS= \
+ hugehelpr.obj \
+ writeoutr.obj \
+ urlglobr.obj \
+ getpassr.obj \
+ homedirr.obj \
+ curlutilr.obj \
+ os-specificr.obj \
+ nonblockr.obj \
+ rawstrr.obj \
+ strtoofftr.obj \
+ mainr.obj \
+ curlr.res
+
+DEBUG_OBJS= \
+ hugehelpd.obj \
+ writeoutd.obj \
+ urlglobd.obj \
+ getpassd.obj \
+ homedird.obj \
+ curlutild.obj \
+ os-specificd.obj \
+ nonblockd.obj \
+ rawstrd.obj \
+ strtoofftd.obj \
+ maind.obj \
+ curld.res
+
+#################################################
+# If CFG not specified, use static libs
+
+CFLAGS = $(CFLAGS) /DCURL_STATICLIB
+LINKLIBS = libcurl.lib
+LINKLIBS_DEBUG = libcurld.lib
+
+#################################################
+# release dynamic library
+
+!IF "$(CFG)" == "release-dll"
+LINKLIBS = libcurl_imp.lib
+LINKLIBS_DEBUG = libcurld_imp.lib
+!ENDIF
+
+#################################################
+# release static library with zlib
+
+!IF "$(CFG)" == "release-zlib"
+CFLAGS = $(CFLAGS) $(ZLIB_CFLAGS) /DCURL_STATICLIB
+LINKLIBS = libcurl.lib $(ZLIB_LIBS)
+LINKLIBS_DEBUG = libcurld.lib $(ZLIB_LIBS)
+LFLAGS = $(LFLAGS) $(ZLIB_LFLAGS)
+!ENDIF
+
+#################################################
+# release static library with ssl
+
+!IF "$(CFG)" == "release-ssl"
+CFLAGS = $(CFLAGS) $(SSL_CFLAGS) /DCURL_STATICLIB
+LINKLIBS = libcurl.lib $(SSL_LIBS)
+LINKLIBS_DEBUG = libcurld.lib $(SSL_LIBS)
+LFLAGS = $(LFLAGS) $(SSL_LFLAGS)
+!ENDIF
+
+#################################################
+# release dynamic library with dynamic ssl
+
+!IF "$(CFG)" == "release-dll-ssl-dll"
+CFLAGS = $(CFLAGS) $(SSL_CFLAGS)
+LINKLIBS = libcurl_imp.lib $(SSL_LIBS)
+LINKLIBS_DEBUG = libcurld_imp.lib $(SSL_LIBS)
+LFLAGS = $(LFLAGS) $(SSL_IMP_LFLAGS)
+!ENDIF
+
+#################################################
+# release static library with ssl and zlib
+
+!IF "$(CFG)" == "release-ssl-zlib"
+CFLAGS = $(CFLAGS) $(SSL_CFLAGS) $(ZLIB_CFLAGS) /DCURL_STATICLIB
+LINKLIBS = libcurl.lib $(SSL_LIBS) $(ZLIB_LIBS)
+LINKLIBS_DEBUG = libcurld.lib $(SSL_LIBS) $(ZLIB_LIBS)
+LFLAGS = $(LFLAGS) $(SSL_LFLAGS) $(ZLIB_LFLAGS)
+!ENDIF
+
+#################################################
+# release static library with dynamic ssl
+
+!IF "$(CFG)" == "release-ssl-dll"
+CFLAGS = $(CFLAGS) $(SSL_CFLAGS) /DCURL_STATICLIB
+LINKLIBS = libcurl.lib $(SSL_LIBS)
+LINKLIBS_DEBUG = libcurld.lib $(SSL_LIBS)
+LFLAGS = $(LFLAGS) $(SSL_IMP_LFLAGS)
+!ENDIF
+
+#################################################
+# release static library with dynamic zlib
+
+!IF "$(CFG)" == "release-zlib-dll"
+CFLAGS = $(CFLAGS) $(ZLIB_CFLAGS) /DCURL_STATICLIB
+LINKLIBS = libcurl.lib $(ZLIB_IMP_LIBS)
+LINKLIBS_DEBUG = libcurld.lib $(ZLIB_IMP_LIBS)
+LFLAGS = $(LFLAGS) $(ZLIB_LFLAGS)
+!ENDIF
+
+#################################################
+# release dynamic library with dynamic zlib
+
+!IF "$(CFG)" == "release-dll-zlib-dll"
+CFLAGS = $(CFLAGS) $(ZLIB_CFLAGS)
+LINKLIBS = libcurl_imp.lib $(ZLIB_IMP_LIBS)
+LINKLIBS_DEBUG = libcurld_imp.lib $(ZLIB_IMP_LIBS)
+LFLAGS = $(LFLAGS) $(ZLIB_LFLAGS)
+!ENDIF
+
+#################################################
+# release static library with dynamic ssl and dynamic zlib
+
+!IF "$(CFG)" == "release-ssl-dll-zlib-dll"
+CFLAGS = $(CFLAGS) $(SSL_CFLAGS) $(ZLIB_CFLAGS) /DCURL_STATICLIB
+LINKLIBS = libcurl.lib $(SSL_LIBS) $(ZLIB_IMP_LIBS)
+LINKLIBS_DEBUG = libcurld.lib $(SSL_LIBS) $(ZLIB_IMP_LIBS)
+LFLAGS = $(LFLAGS) $(SSL_IMP_LFLAGS) $(ZLIB_LFLAGS)
+!ENDIF
+
+#################################################
+# release dynamic library with dynamic ssl and dynamic zlib
+
+!IF "$(CFG)" == "release-dll-ssl-dll-zlib-dll"
+CFLAGS = $(CFLAGS) $(SSL_CFLAGS) $(ZLIB_CFLAGS)
+LINKLIBS = libcurl_imp.lib $(SSL_LIBS) $(ZLIB_IMP_LIBS)
+LINKLIBS_DEBUG = libcurld_imp.lib $(SSL_LIBS) $(ZLIB_IMP_LIBS)
+LFLAGS = $(LFLAGS) $(SSL_IMP_LFLAGS) $(ZLIB_LFLAGS)
+!ENDIF
+
+
+LINKLIBS = $(LINKLIBS) ws2_32.lib bufferoverflowu.lib wldap32.lib
+LINKLIBS_DEBUG = $(LINKLIBS_DEBUG) ws2_32.lib bufferoverflowu.lib wldap32.lib
+
+all : release
+
+release: $(RELEASE_OBJS)
+ $(LINKR) $(LFLAGS) $(LINKLIBS) $(RELEASE_OBJS)
+ $(MANIFESTTOOL)
+
+debug: $(DEBUG_OBJS)
+ $(LINKD) $(LFLAGS) $(LINKLIBS_DEBUG) $(DEBUG_OBJS)
+ $(MANIFESTTOOL)
+
+## Release
+hugehelpr.obj: hugehelp.c
+ $(CCR) $(CFLAGS) /Zm200 /Fo"$@" hugehelp.c
+writeoutr.obj: writeout.c
+ $(CCR) $(CFLAGS) /Fo"$@" writeout.c
+urlglobr.obj: urlglob.c
+ $(CCR) $(CFLAGS) /Fo"$@" urlglob.c
+getpassr.obj: getpass.c
+ $(CCR) $(CFLAGS) /Fo"$@" getpass.c
+homedirr.obj: homedir.c
+ $(CCR) $(CFLAGS) /Fo"$@" homedir.c
+curlutilr.obj: curlutil.c
+ $(CCR) $(CFLAGS) /Fo"$@" curlutil.c
+os-specificr.obj: os-specific.c
+ $(CCR) $(CFLAGS) /Fo"$@" os-specific.c
+nonblockr.obj: ../lib/nonblock.c
+ $(CCR) $(CFLAGS) /Fo"$@" ../lib/nonblock.c
+rawstrr.obj: ../lib/rawstr.c
+ $(CCR) $(CFLAGS) /Fo"$@" ../lib/rawstr.c
+strtoofftr.obj: ../lib/strtoofft.c
+ $(CCR) $(CFLAGS) /Fo"$@" ../lib/strtoofft.c
+mainr.obj: main.c
+ $(CCR) $(CFLAGS) /Fo"$@" main.c
+curlr.res : curl.rc
+ $(RCR) $(RESFLAGS) /Fo"$@" curl.rc
+
+## Debug
+hugehelpd.obj: hugehelp.c
+ $(CCD) $(CFLAGS) /Zm200 /Fo"$@" hugehelp.c
+writeoutd.obj: writeout.c
+ $(CCD) $(CFLAGS) /Fo"$@" writeout.c
+urlglobd.obj: urlglob.c
+ $(CCD) $(CFLAGS) /Fo"$@" urlglob.c
+getpassd.obj: getpass.c
+ $(CCD) $(CFLAGS) /Fo"$@" getpass.c
+homedird.obj: homedir.c
+ $(CCD) $(CFLAGS) /Fo"$@" homedir.c
+curlutild.obj: curlutil.c
+ $(CCD) $(CFLAGS) /Fo"$@" curlutil.c
+os-specificd.obj: os-specific.c
+ $(CCD) $(CFLAGS) /Fo"$@" os-specific.c
+nonblockd.obj: ../lib/nonblock.c
+ $(CCD) $(CFLAGS) /Fo"$@" ../lib/nonblock.c
+rawstrd.obj: ../lib/rawstr.c
+ $(CCD) $(CFLAGS) /Fo"$@" ../lib/rawstr.c
+strtoofftd.obj: ../lib/strtoofft.c
+ $(CCD) $(CFLAGS) /Fo"$@" ../lib/strtoofft.c
+maind.obj: main.c
+ $(CCD) $(CFLAGS) /Fo"$@" main.c
+curld.res : curl.rc
+ $(RCD) $(RESFLAGS) /Fo"$@" curl.rc
+
+clean:
+ @-erase $(PROGRAM_NAME) 2> NUL
+ @-erase $(RELEASE_OBJS) 2> NUL
+ @-erase $(DEBUG_OBJS) 2> NUL
+ @-erase *.idb 2> NUL
+ @-erase *.pdb 2> NUL
+ @-erase *.pch 2> NUL
+ @-erase *.ilk 2> NUL
diff --git a/src/Makefile.vc9 b/src/Makefile.vc9
new file mode 100644
index 0000000..5dd44f8
--- /dev/null
+++ b/src/Makefile.vc9
@@ -0,0 +1,299 @@
+#############################################################
+#
+## Makefile for building curl.exe with MSVC9
+## Use: nmake -f makefile.vc9 [release | debug] [CFG=release-ssl]
+## (default is release)
+## "nmake -f makefile.vc9 CFG=release-ssl" statically links OpenSSL
+## into curl.exe producing a standalone SSL-enabled executable.
+##
+## Comments to: Troy Engel <tengel@sonic.net>
+## Updated by: Craig Davison <cd@securityfocus.com>
+## release-ssl added by Miklos Nemeth <mnemeth@kfkisystems.com>
+#
+#############################################################
+
+PROGRAM_NAME = curl.exe
+
+!IFNDEF OPENSSL_PATH
+OPENSSL_PATH = ../../openssl-0.9.8o
+!ENDIF
+
+!IFNDEF ZLIB_PATH
+ZLIB_PATH = ../../zlib-1.2.5
+!ENDIF
+
+!IFNDEF MACHINE
+MACHINE = X86
+!ENDIF
+
+# USE_WINDOWS_SSPI uses windows libraries to allow NTLM authentication
+# without an openssl installation and offers the ability to authenticate
+# using the "current logged in user". Since at least with MSVC9 the sspi.h
+# header is broken it is either required to install the Windows SDK,
+# or to fix sspi.h with adding this define at the beginning of sspi.h:
+# #define FreeCredentialHandle FreeCredentialsHandle
+#
+# If, for some reason the Windows SDK is installed but not installed
+# in the default location, you can specify WINDOWS_SDK_PATH.
+# It can be downloaded from:
+# http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
+
+# WINDOWS_SSPI = 1
+
+!IFDEF WINDOWS_SSPI
+!IFNDEF WINDOWS_SDK_PATH
+WINDOWS_SDK_PATH = "C:\Program Files\Microsoft SDK"
+!ENDIF
+!ENDIF
+
+########################################################
+## Nothing more to do below this line!
+ZLIB_CFLAGS = /DHAVE_ZLIB_H /DHAVE_ZLIB /DHAVE_LIBZ /I "$(ZLIB_PATH)"
+ZLIB_LFLAGS = "/LIBPATH:$(ZLIB_PATH)"
+ZLIB_LIBS = zlib.lib
+ZLIB_IMP_LIBS = zdll.lib
+
+SSL_CFLAGS = /DUSE_SSLEAY
+SSL_LFLAGS = /LIBPATH:"$(OPENSSL_PATH)/out32"
+SSL_IMP_LFLAGS = /LIBPATH:"$(OPENSSL_PATH)/out32dll"
+SSL_LIBS = libeay32.lib ssleay32.lib gdi32.lib user32.lib advapi32.lib
+
+# Runtime library configuration
+RTLIB = /MD
+RTLIBD = /MDd
+
+!IF "$(RTLIBCFG)" == "static"
+RTLIB = /MT
+RTLIBD = /MTd
+!ENDIF
+
+## Release
+CCR = cl.exe $(RTLIB) /O2 /DNDEBUG
+LINKR = link.exe /incremental:no /libpath:"../lib"
+RCR = rc.exe /dDEBUGBUILD=0
+
+## Debug
+CCD = cl.exe $(RTLIBD) /Gm /ZI /Od /D_DEBUG /RTC1
+LINKD = link.exe /incremental:yes /debug /libpath:"../lib"
+RCD = rc.exe /dDEBUGBUILD=1
+
+CFLAGS = /I../lib /I../include /nologo /W3 /EHsc /DWIN32 /FD /c
+LFLAGS = /nologo /out:$(PROGRAM_NAME) /subsystem:console /machine:$(MACHINE)
+RESFLAGS = /i../include
+
+# This manifest thing is for VC8, enabled by the maketgz script that
+# builds the VC8 version of this makefile. Left commented out in the VC9
+# version!
+#MANIFESTTOOL = mt -manifest $(PROGRAM_NAME).manifest -outputresource:$(PROGRAM_NAME);1
+
+!IFDEF WINDOWS_SSPI
+CFLAGS = $(CFLAGS) /DUSE_WINDOWS_SSPI /I$(WINDOWS_SDK_PATH)\include
+!ENDIF
+
+RELEASE_OBJS= \
+ hugehelpr.obj \
+ writeoutr.obj \
+ urlglobr.obj \
+ getpassr.obj \
+ homedirr.obj \
+ curlutilr.obj \
+ os-specificr.obj \
+ nonblockr.obj \
+ rawstrr.obj \
+ strtoofftr.obj \
+ mainr.obj \
+ curlr.res
+
+DEBUG_OBJS= \
+ hugehelpd.obj \
+ writeoutd.obj \
+ urlglobd.obj \
+ getpassd.obj \
+ homedird.obj \
+ curlutild.obj \
+ os-specificd.obj \
+ nonblockd.obj \
+ rawstrd.obj \
+ strtoofftd.obj \
+ maind.obj \
+ curld.res
+
+#################################################
+# If CFG not specified, use static libs
+
+CFLAGS = $(CFLAGS) /DCURL_STATICLIB
+LINKLIBS = libcurl.lib
+LINKLIBS_DEBUG = libcurld.lib
+
+#################################################
+# release dynamic library
+
+!IF "$(CFG)" == "release-dll"
+LINKLIBS = libcurl_imp.lib
+LINKLIBS_DEBUG = libcurld_imp.lib
+!ENDIF
+
+#################################################
+# release static library with zlib
+
+!IF "$(CFG)" == "release-zlib"
+CFLAGS = $(CFLAGS) $(ZLIB_CFLAGS) /DCURL_STATICLIB
+LINKLIBS = libcurl.lib $(ZLIB_LIBS)
+LINKLIBS_DEBUG = libcurld.lib $(ZLIB_LIBS)
+LFLAGS = $(LFLAGS) $(ZLIB_LFLAGS)
+!ENDIF
+
+#################################################
+# release static library with ssl
+
+!IF "$(CFG)" == "release-ssl"
+CFLAGS = $(CFLAGS) $(SSL_CFLAGS) /DCURL_STATICLIB
+LINKLIBS = libcurl.lib $(SSL_LIBS)
+LINKLIBS_DEBUG = libcurld.lib $(SSL_LIBS)
+LFLAGS = $(LFLAGS) $(SSL_LFLAGS)
+!ENDIF
+
+#################################################
+# release dynamic library with dynamic ssl
+
+!IF "$(CFG)" == "release-dll-ssl-dll"
+CFLAGS = $(CFLAGS) $(SSL_CFLAGS)
+LINKLIBS = libcurl_imp.lib $(SSL_LIBS)
+LINKLIBS_DEBUG = libcurld_imp.lib $(SSL_LIBS)
+LFLAGS = $(LFLAGS) $(SSL_IMP_LFLAGS)
+!ENDIF
+
+#################################################
+# release static library with ssl and zlib
+
+!IF "$(CFG)" == "release-ssl-zlib"
+CFLAGS = $(CFLAGS) $(SSL_CFLAGS) $(ZLIB_CFLAGS) /DCURL_STATICLIB
+LINKLIBS = libcurl.lib $(SSL_LIBS) $(ZLIB_LIBS)
+LINKLIBS_DEBUG = libcurld.lib $(SSL_LIBS) $(ZLIB_LIBS)
+LFLAGS = $(LFLAGS) $(SSL_LFLAGS) $(ZLIB_LFLAGS)
+!ENDIF
+
+#################################################
+# release static library with dynamic ssl
+
+!IF "$(CFG)" == "release-ssl-dll"
+CFLAGS = $(CFLAGS) $(SSL_CFLAGS) /DCURL_STATICLIB
+LINKLIBS = libcurl.lib $(SSL_LIBS)
+LINKLIBS_DEBUG = libcurld.lib $(SSL_LIBS)
+LFLAGS = $(LFLAGS) $(SSL_IMP_LFLAGS)
+!ENDIF
+
+#################################################
+# release static library with dynamic zlib
+
+!IF "$(CFG)" == "release-zlib-dll"
+CFLAGS = $(CFLAGS) $(ZLIB_CFLAGS) /DCURL_STATICLIB
+LINKLIBS = libcurl.lib $(ZLIB_IMP_LIBS)
+LINKLIBS_DEBUG = libcurld.lib $(ZLIB_IMP_LIBS)
+LFLAGS = $(LFLAGS) $(ZLIB_LFLAGS)
+!ENDIF
+
+#################################################
+# release dynamic library with dynamic zlib
+
+!IF "$(CFG)" == "release-dll-zlib-dll"
+CFLAGS = $(CFLAGS) $(ZLIB_CFLAGS)
+LINKLIBS = libcurl_imp.lib $(ZLIB_IMP_LIBS)
+LINKLIBS_DEBUG = libcurld_imp.lib $(ZLIB_IMP_LIBS)
+LFLAGS = $(LFLAGS) $(ZLIB_LFLAGS)
+!ENDIF
+
+#################################################
+# release static library with dynamic ssl and dynamic zlib
+
+!IF "$(CFG)" == "release-ssl-dll-zlib-dll"
+CFLAGS = $(CFLAGS) $(SSL_CFLAGS) $(ZLIB_CFLAGS) /DCURL_STATICLIB
+LINKLIBS = libcurl.lib $(SSL_LIBS) $(ZLIB_IMP_LIBS)
+LINKLIBS_DEBUG = libcurld.lib $(SSL_LIBS) $(ZLIB_IMP_LIBS)
+LFLAGS = $(LFLAGS) $(SSL_IMP_LFLAGS) $(ZLIB_LFLAGS)
+!ENDIF
+
+#################################################
+# release dynamic library with dynamic ssl and dynamic zlib
+
+!IF "$(CFG)" == "release-dll-ssl-dll-zlib-dll"
+CFLAGS = $(CFLAGS) $(SSL_CFLAGS) $(ZLIB_CFLAGS)
+LINKLIBS = libcurl_imp.lib $(SSL_LIBS) $(ZLIB_IMP_LIBS)
+LINKLIBS_DEBUG = libcurld_imp.lib $(SSL_LIBS) $(ZLIB_IMP_LIBS)
+LFLAGS = $(LFLAGS) $(SSL_IMP_LFLAGS) $(ZLIB_LFLAGS)
+!ENDIF
+
+
+LINKLIBS = $(LINKLIBS) ws2_32.lib wldap32.lib
+LINKLIBS_DEBUG = $(LINKLIBS_DEBUG) ws2_32.lib wldap32.lib
+
+all : release
+
+release: $(RELEASE_OBJS)
+ $(LINKR) $(LFLAGS) $(LINKLIBS) $(RELEASE_OBJS)
+ $(MANIFESTTOOL)
+
+debug: $(DEBUG_OBJS)
+ $(LINKD) $(LFLAGS) $(LINKLIBS_DEBUG) $(DEBUG_OBJS)
+ $(MANIFESTTOOL)
+
+## Release
+hugehelpr.obj: hugehelp.c
+ $(CCR) $(CFLAGS) /Zm200 /Fo"$@" hugehelp.c
+writeoutr.obj: writeout.c
+ $(CCR) $(CFLAGS) /Fo"$@" writeout.c
+urlglobr.obj: urlglob.c
+ $(CCR) $(CFLAGS) /Fo"$@" urlglob.c
+getpassr.obj: getpass.c
+ $(CCR) $(CFLAGS) /Fo"$@" getpass.c
+homedirr.obj: homedir.c
+ $(CCR) $(CFLAGS) /Fo"$@" homedir.c
+curlutilr.obj: curlutil.c
+ $(CCR) $(CFLAGS) /Fo"$@" curlutil.c
+os-specificr.obj: os-specific.c
+ $(CCR) $(CFLAGS) /Fo"$@" os-specific.c
+nonblockr.obj: ../lib/nonblock.c
+ $(CCR) $(CFLAGS) /Fo"$@" ../lib/nonblock.c
+rawstrr.obj: ../lib/rawstr.c
+ $(CCR) $(CFLAGS) /Fo"$@" ../lib/rawstr.c
+strtoofftr.obj: ../lib/strtoofft.c
+ $(CCR) $(CFLAGS) /Fo"$@" ../lib/strtoofft.c
+mainr.obj: main.c
+ $(CCR) $(CFLAGS) /Fo"$@" main.c
+curlr.res : curl.rc
+ $(RCR) $(RESFLAGS) /Fo"$@" curl.rc
+
+## Debug
+hugehelpd.obj: hugehelp.c
+ $(CCD) $(CFLAGS) /Zm200 /Fo"$@" hugehelp.c
+writeoutd.obj: writeout.c
+ $(CCD) $(CFLAGS) /Fo"$@" writeout.c
+urlglobd.obj: urlglob.c
+ $(CCD) $(CFLAGS) /Fo"$@" urlglob.c
+getpassd.obj: getpass.c
+ $(CCD) $(CFLAGS) /Fo"$@" getpass.c
+homedird.obj: homedir.c
+ $(CCD) $(CFLAGS) /Fo"$@" homedir.c
+curlutild.obj: curlutil.c
+ $(CCD) $(CFLAGS) /Fo"$@" curlutil.c
+os-specificd.obj: os-specific.c
+ $(CCD) $(CFLAGS) /Fo"$@" os-specific.c
+nonblockd.obj: ../lib/nonblock.c
+ $(CCD) $(CFLAGS) /Fo"$@" ../lib/nonblock.c
+rawstrd.obj: ../lib/rawstr.c
+ $(CCD) $(CFLAGS) /Fo"$@" ../lib/rawstr.c
+strtoofftd.obj: ../lib/strtoofft.c
+ $(CCD) $(CFLAGS) /Fo"$@" ../lib/strtoofft.c
+maind.obj: main.c
+ $(CCD) $(CFLAGS) /Fo"$@" main.c
+curld.res : curl.rc
+ $(RCD) $(RESFLAGS) /Fo"$@" curl.rc
+
+clean:
+ @-erase $(PROGRAM_NAME) 2> NUL
+ @-erase $(RELEASE_OBJS) 2> NUL
+ @-erase $(DEBUG_OBJS) 2> NUL
+ @-erase *.idb 2> NUL
+ @-erase *.pdb 2> NUL
+ @-erase *.pch 2> NUL
+ @-erase *.ilk 2> NUL
diff --git a/src/NOTICE b/src/NOTICE
deleted file mode 100644
index 163b299..0000000
--- a/src/NOTICE
+++ /dev/null
@@ -1,21 +0,0 @@
-COPYRIGHT AND PERMISSION NOTICE
-
-Copyright (c) 1996 - 2010, Daniel Stenberg, <daniel@haxx.se>.
-
-All rights reserved.
-
-Permission to use, copy, modify, and distribute this software for any purpose
-with or without fee is hereby granted, provided that the above copyright
-notice and this permission notice appear in all copies.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN
-NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
-OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of a copyright holder shall not
-be used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization of the copyright holder.
diff --git a/src/config-amigaos.h b/src/config-amigaos.h
new file mode 100644
index 0000000..fba875d
--- /dev/null
+++ b/src/config-amigaos.h
@@ -0,0 +1,69 @@
+#ifndef CURL_CONFIG_AMIGAOS_H
+#define CURL_CONFIG_AMIGAOS_H
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2007, Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at http://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ***************************************************************************/
+
+#ifdef __AMIGA__ /* Any AmigaOS flavour */
+
+/* Define to 1 if you want the built-in manual */
+#define USE_MANUAL 1
+
+#define OS "AmigaOS"
+
+#define HAVE_CLOSESOCKET_CAMEL 1
+#define HAVE_UNISTD_H 1
+#define HAVE_STRDUP 1
+#define HAVE_UTIME 1
+#define HAVE_UTIME_H 1
+#define HAVE_SYS_TYPES_H 1
+#define HAVE_SYS_SOCKET_H 1
+#define HAVE_WRITABLE_ARGV 1
+#define HAVE_SYS_TIME_H 1
+#define HAVE_TIME_H 1
+#define TIME_WITH_SYS_TIME 1
+#define HAVE_STRUCT_TIMEVAL 1
+
+#if 0
+# define HAVE_TERMIOS_H 1
+# define HAVE_FTRUNCATE 1
+#endif
+
+#define HAVE_PWD_H 1
+
+#ifndef F_OK
+# define F_OK 0
+#endif
+#ifndef O_RDONLY
+# define O_RDONLY 0x0000 /* open for reading only */
+#endif
+#ifndef LONG_MAX
+# define LONG_MAX 0x7fffffffL /* max value for a long */
+#endif
+#ifndef LONG_MIN
+# define LONG_MIN (-0x7fffffffL-1) /* min value for a long */
+#endif
+
+#define SIZEOF_INT 4
+#define SIZEOF_SHORT 2
+
+#endif /* __AMIGA__ */
+#endif /* CURL_CONFIG_AMIGAOS_H */
diff --git a/src/config-mac.h b/src/config-mac.h
new file mode 100644
index 0000000..dc7f767
--- /dev/null
+++ b/src/config-mac.h
@@ -0,0 +1,35 @@
+#ifndef __SRC_CONFIG_MAC_H
+#define __SRC_CONFIG_MAC_H
+
+/* =================================================================== */
+/* src/config-mac.h - Hand crafted config file for Mac OS 9 */
+/* =================================================================== */
+/* On Mac OS X you must run configure to generate curl_config.h file */
+/* =================================================================== */
+
+/* Define to 1 if you want the built-in manual */
+#define USE_MANUAL 1
+
+#define HAVE_UNISTD_H 1
+#define HAVE_FCNTL_H 1
+#define HAVE_UTIME_H 1
+#define HAVE_SYS_UTIME_H 1
+
+#define HAVE_SETVBUF 1
+#define HAVE_UTIME 1
+#define HAVE_FTRUNCATE 1
+
+#define HAVE_TIME_H 1
+#define HAVE_SYS_TIME_H 1
+#define TIME_WITH_SYS_TIME 1
+#define HAVE_STRUCT_TIMEVAL 1
+
+#define SIZEOF_INT 4
+#define SIZEOF_SHORT 2
+
+#define main(x,y) curl_main(x,y)
+
+/* we provide our own strdup prototype */
+char *strdup(char *s1);
+
+#endif /* __SRC_CONFIG_MAC_H */
diff --git a/src/config-riscos.h b/src/config-riscos.h
new file mode 100644
index 0000000..ba95f13
--- /dev/null
+++ b/src/config-riscos.h
@@ -0,0 +1,379 @@
+/* curl_config.h.in. Generated automatically from configure.in by autoheader. */
+/* 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 */
+#define OS "ARM-RISC OS"
+
+/* Define to 1 if you want the built-in manual */
+#define USE_MANUAL 1
+
+/* Define if you have the gethostbyaddr_r() function with 5 arguments */
+#undef HAVE_GETHOSTBYADDR_R_5
+
+/* Define if you have the gethostbyaddr_r() function with 7 arguments */
+#undef HAVE_GETHOSTBYADDR_R_7
+
+/* Define if you have the gethostbyaddr_r() function with 8 arguments */
+#undef HAVE_GETHOSTBYADDR_R_8
+
+/* Define if you have the gethostbyname_r() function with 3 arguments */
+#undef HAVE_GETHOSTBYNAME_R_3
+
+/* Define if you have the gethostbyname_r() function with 5 arguments */
+#undef HAVE_GETHOSTBYNAME_R_5
+
+/* Define if you have the gethostbyname_r() function with 6 arguments */
+#undef HAVE_GETHOSTBYNAME_R_6
+
+/* Define if you need the _REENTRANT define for some functions */
+#undef NEED_REENTRANT
+
+/* Define if you have the Kerberos4 libraries (including -ldes) */
+#undef HAVE_KRB4
+
+/* Define if you want to enable IPv6 support */
+#undef ENABLE_IPV6
+
+/* Define if struct sockaddr_in6 has the sin6_scope_id member */
+#define HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID 1
+
+/* Define this to 'int' if ssize_t is not an available typedefed type */
+#undef ssize_t
+
+/* Define this as a suitable file to read random data from */
+#undef RANDOM_FILE
+
+/* Define this to your Entropy Gathering Daemon socket pathname */
+#undef EGD_SOCKET
+
+/* Define if you want to enable IPv6 support */
+#undef ENABLE_IPV6
+
+/* Define if you have the <alloca.h> header file. */
+#define HAVE_ALLOCA_H
+
+/* Define if you have the <arpa/inet.h> header file. */
+#define HAVE_ARPA_INET_H
+
+/* Define if you have the `closesocket' function. */
+#undef HAVE_CLOSESOCKET
+
+/* Define if you have the <crypto.h> header file. */
+#undef HAVE_CRYPTO_H
+
+/* Define if you have the <des.h> header file. */
+#undef HAVE_DES_H
+
+/* Define if you have the <err.h> header file. */
+#undef HAVE_ERR_H
+
+/* Define if you have the <fcntl.h> header file. */
+#define HAVE_FCNTL_H
+
+/* Define if you have the `ftruncate' function. */
+#define HAVE_FTRUNCATE
+
+/* Define if getaddrinfo exists and works */
+#define HAVE_GETADDRINFO
+
+/* Define if you have the `geteuid' function. */
+#undef HAVE_GETEUID
+
+/* Define if you have the `gethostbyaddr' function. */
+#define HAVE_GETHOSTBYADDR
+
+/* Define if you have the `gethostbyaddr_r' function. */
+#undef HAVE_GETHOSTBYADDR_R
+
+/* Define if you have the `gethostbyname_r' function. */
+#undef HAVE_GETHOSTBYNAME_R
+
+/* Define if you have the `gethostname' function. */
+#define HAVE_GETHOSTNAME
+
+/* Define if you have the <getopt.h> header file. */
+#define HAVE_GETOPT_H
+
+/* Define if you have the `getpass_r' function. */
+#undef HAVE_GETPASS_R
+
+/* Define if you have the `getpwuid' function. */
+#undef HAVE_GETPWUID
+
+/* Define if you have the `getservbyname' function. */
+#undef HAVE_GETSERVBYNAME
+
+/* Define if you have the `gettimeofday' function. */
+#define HAVE_GETTIMEOFDAY
+
+/* Define if you have the `timeval' struct. */
+#define HAVE_STRUCT_TIMEVAL
+
+/* Define if you have the `inet_addr' function. */
+#undef HAVE_INET_ADDR
+
+/* Define if you have the <inttypes.h> header file. */
+#define HAVE_INTTYPES_H
+
+/* Define if you have the <io.h> header file. */
+#undef HAVE_IO_H
+
+/* Define if you have the `krb_get_our_ip_for_realm' function. */
+#undef HAVE_KRB_GET_OUR_IP_FOR_REALM
+
+/* Define if you have the <krb.h> header file. */
+#undef HAVE_KRB_H
+
+/* Define if you have the `crypto' library (-lcrypto). */
+#undef HAVE_LIBCRYPTO
+
+/* Define if you have the `nsl' library (-lnsl). */
+#undef HAVE_LIBNSL
+
+/* Define if you have the `resolv' library (-lresolv). */
+#undef HAVE_LIBRESOLV
+
+/* 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
+
+/* Define if you have the `localtime_r' function. */
+#undef HAVE_LOCALTIME_R
+
+/* Define if you have the <malloc.h> header file. */
+#define HAVE_MALLOC_H
+
+/* Define to 1 if you need the malloc.h header file even with stdlib.h */
+/* #define NEED_MALLOC_H 1 */
+
+/* Define if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define if you have the <netdb.h> header file. */
+#define HAVE_NETDB_H
+
+/* Define if you have the <netinet/if_ether.h> header file. */
+#undef HAVE_NETINET_IF_ETHER_H
+
+/* Define if you have the <netinet/in.h> header file. */
+#define HAVE_NETINET_IN_H
+
+/* Define if you have the <net/if.h> header file. */
+#define HAVE_NET_IF_H
+
+/* Define if you have the <openssl/crypto.h> header file. */
+#undef HAVE_OPENSSL_CRYPTO_H
+
+/* Define if you have the <openssl/err.h> header file. */
+#undef HAVE_OPENSSL_ERR_H
+
+/* Define if you have the <openssl/pem.h> header file. */
+#undef HAVE_OPENSSL_PEM_H
+
+/* Define if you have the <openssl/rsa.h> header file. */
+#undef HAVE_OPENSSL_RSA_H
+
+/* Define if you have the <openssl/ssl.h> header file. */
+#undef HAVE_OPENSSL_SSL_H
+
+/* Define if you have the <openssl/x509.h> header file. */
+#undef HAVE_OPENSSL_X509_H
+
+/* Define if you have the <pem.h> header file. */
+#undef HAVE_PEM_H
+
+/* Define if you have the `perror' function. */
+#undef HAVE_PERROR
+
+/* Define if you have the <pwd.h> header file. */
+#undef HAVE_PWD_H
+
+/* Define if you have the `RAND_egd' function. */
+#undef HAVE_RAND_EGD
+
+/* Define if you have the `RAND_screen' function. */
+#undef HAVE_RAND_SCREEN
+
+/* Define if you have the `RAND_status' function. */
+#undef HAVE_RAND_STATUS
+
+/* Define if you have the <rsa.h> header file. */
+#undef HAVE_RSA_H
+
+/* Define if you have the `select' function. */
+#define HAVE_SELECT
+
+/* Define if you have the `setvbuf' function. */
+#undef HAVE_SETVBUF
+
+/* Define if you have the <sgtty.h> header file. */
+#define HAVE_SGTTY_H
+
+/* Define if you have the `sigaction' function. */
+#undef HAVE_SIGACTION
+
+/* Define if you have the `signal' function. */
+#define HAVE_SIGNAL
+
+/* Define if you have the `socket' function. */
+#define HAVE_SOCKET
+
+/* Define if you have the <ssl.h> header file. */
+#undef HAVE_SSL_H
+
+/* Define if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define if you have the <stdlib.h> header file. */
+#define HAVE_STDLIB_H
+
+/* Define if you have the `strcasecmp' function. */
+#undef HAVE_STRCASECMP
+
+/* Define if you have the `strcmpi' function. */
+#undef HAVE_STRCMPI
+
+/* Define if you have the `strdup' function. */
+#define HAVE_STRDUP
+
+/* Define if you have the `strftime' function. */
+#define HAVE_STRFTIME
+
+/* Define if you have the `stricmp' function. */
+#define HAVE_STRICMP
+
+/* Define if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define if you have the <string.h> header file. */
+#define HAVE_STRING_H
+
+/* Define if you have the `strlcat' function. */
+#undef HAVE_STRLCAT
+
+/* Define if you have the `strlcpy' function. */
+#undef HAVE_STRLCPY
+
+/* Define if you have the `strstr' function. */
+#define HAVE_STRSTR
+
+/* Define if you have the `strtok_r' function. */
+#undef HAVE_STRTOK_R
+
+/* Define if you have the <sys/param.h> header file. */
+#undef HAVE_SYS_PARAM_H
+
+/* Define if you have the <sys/select.h> header file. */
+#undef HAVE_SYS_SELECT_H
+
+/* Define if you have the <sys/socket.h> header file. */
+#define HAVE_SYS_SOCKET_H
+
+/* Define if you have the <sys/sockio.h> header file. */
+#undef HAVE_SYS_SOCKIO_H
+
+/* Define if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
+
+/* Define if you have the <sys/time.h> header file. */
+#define HAVE_SYS_TIME_H
+
+/* Define if you have the <sys/types.h> header file. */
+#define HAVE_SYS_TYPES_H
+
+/* Define if you have the `tcgetattr' function. */
+#define HAVE_TCGETATTR
+
+/* Define if you have the `tcsetattr' function. */
+#define HAVE_TCSETATTR
+
+/* Define if you have the <termios.h> header file. */
+#define HAVE_TERMIOS_H
+
+/* Define if you have the <termio.h> header file. */
+#undef HAVE_TERMIO_H
+
+/* Define if you have the <time.h> header file. */
+#undef HAVE_TIME_H
+
+/* Define if you have the `uname' function. */
+#define HAVE_UNAME
+
+/* Define if you have the <unistd.h> header file. */
+#define HAVE_UNISTD_H
+
+/* Define if you have the <winsock.h> header file. */
+#undef HAVE_WINSOCK_H
+
+/* Define if you have the <x509.h> header file. */
+#undef HAVE_X509_H
+
+/* Name of package */
+#undef PACKAGE
+
+/* Define as the return type of signal handlers (`int' or `void'). */
+#define RETSIGTYPE void
+
+/* The size of `int', as computed by sizeof. */
+#define SIZEOF_INT 4
+
+/* The size of `long double', as computed by sizeof. */
+#undef SIZEOF_LONG_DOUBLE
+
+/* The size of `long long', as computed by sizeof. */
+#undef SIZEOF_LONG_LONG
+
+/* The size of `short', as computed by sizeof. */
+#define SIZEOF_SHORT 2
+
+/* Define if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* Define if you can safely include both <sys/time.h> and <time.h>. */
+#undef TIME_WITH_SYS_TIME
+
+/* Version number of package */
+#undef VERSION
+
+/* 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
+
+/* Number of bits in a file offset, on hosts where this is settable. */
+#undef _FILE_OFFSET_BITS
+
+/* Define for large files, on AIX-style hosts. */
+#undef _LARGE_FILES
+
+/* Define to empty if `const' does not conform to ANSI C. */
+#undef const
+
+/* Define to `unsigned' if <sys/types.h> does not define. */
+#undef size_t
+
+/* Define to `int' if <sys/types.h> does not define. */
+#undef ssize_t
+
+/* Define if you have the ioctl function. */
+#define HAVE_IOCTL
+
+/* Define if you have a working ioctl FIONBIO function. */
+#define HAVE_IOCTL_FIONBIO
diff --git a/src/config-win32.h b/src/config-win32.h
new file mode 100644
index 0000000..10a5eaf
--- /dev/null
+++ b/src/config-win32.h
@@ -0,0 +1,416 @@
+#ifndef __SRC_CONFIG_WIN32_H
+#define __SRC_CONFIG_WIN32_H
+
+/* ================================================================ */
+/* src/config-win32.h - Hand crafted config file for windows */
+/* ================================================================ */
+
+/* ---------------------------------------------------------------- */
+/* HEADER FILES */
+/* ---------------------------------------------------------------- */
+
+/* Define if you have the <fcntl.h> header file. */
+#define HAVE_FCNTL_H 1
+
+/* Define if you have the <io.h> header file. */
+#define HAVE_IO_H 1
+
+/* Define if you have the <limits.h> header file. */
+#define HAVE_LIMITS_H 1
+
+/* Define if you have the <locale.h> header file. */
+#define HAVE_LOCALE_H 1
+
+/* Define if you need the malloc.h header file even with stdlib.h */
+#if !defined(__SALFORDC__) && !defined(__POCC__)
+#define NEED_MALLOC_H 1
+#endif
+
+/* Define if you have the <signal.h> header file. */
+#define HAVE_SIGNAL_H 1
+
+/* Define if you have the <stdlib.h> header file. */
+#define HAVE_STDLIB_H 1
+
+/* Define if you have the <sys/time.h> header file */
+/* #define HAVE_SYS_TIME_H 1 */
+
+/* Define if you have the <sys/types.h> header file. */
+#define HAVE_SYS_TYPES_H 1
+
+/* Define if you have the <sys/utime.h> header file. */
+#ifndef __BORLANDC__
+#define HAVE_SYS_UTIME_H 1
+#endif
+
+/* Define if you have the <time.h> header file. */
+#define HAVE_TIME_H 1
+
+/* Define if you have the <unistd.h> header file. */
+#if defined(__MINGW32__) || defined(__WATCOMC__) || defined(__LCC__) || \
+ defined(__POCC__)
+#define HAVE_UNISTD_H 1
+#endif
+
+/* Define if you have the <windows.h> header file. */
+#define HAVE_WINDOWS_H 1
+
+/* Define if you have the <winsock.h> header file. */
+#define HAVE_WINSOCK_H 1
+
+/* Define if you have the <winsock2.h> header file. */
+#ifndef __SALFORDC__
+#define HAVE_WINSOCK2_H 1
+#endif
+
+/* Define if you have the <ws2tcpip.h> header file. */
+#ifndef __SALFORDC__
+#define HAVE_WS2TCPIP_H 1
+#endif
+
+/* ---------------------------------------------------------------- */
+/* OTHER HEADER INFO */
+/* ---------------------------------------------------------------- */
+
+/* Define if sig_atomic_t is an available typedef. */
+#define HAVE_SIG_ATOMIC_T 1
+
+/* Define if you have the ANSI C header files. */
+#define STDC_HEADERS 1
+
+/* Define if you can safely include both <sys/time.h> and <time.h>. */
+/* #define TIME_WITH_SYS_TIME 1 */
+
+/* ---------------------------------------------------------------- */
+/* FUNCTIONS */
+/* ---------------------------------------------------------------- */
+
+/* Define if you have the ftruncate function. */
+#define HAVE_FTRUNCATE 1
+
+/* Define if you have the ioctlsocket function. */
+#define HAVE_IOCTLSOCKET 1
+
+/* Define if you have a working ioctlsocket FIONBIO function. */
+#define HAVE_IOCTLSOCKET_FIONBIO 1
+
+/* Define if you have the setlocale function. */
+#define HAVE_SETLOCALE 1
+
+/* Define if you have the setmode function. */
+#define HAVE_SETMODE 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 stricmp function. */
+#define HAVE_STRICMP 1
+
+/* Define if you have the strncasecmp function. */
+/* #define HAVE_STRNCASECMP 1 */
+
+/* Define if you have the strnicmp function. */
+#define HAVE_STRNICMP 1
+
+/* Define if you have the utime function */
+#ifndef __BORLANDC__
+#define HAVE_UTIME 1
+#endif
+
+/* Define if you have the recv function. */
+#define HAVE_RECV 1
+
+/* Define to the type of arg 1 for recv. */
+#define RECV_TYPE_ARG1 SOCKET
+
+/* Define to the type of arg 2 for recv. */
+#define RECV_TYPE_ARG2 char *
+
+/* Define to the type of arg 3 for recv. */
+#define RECV_TYPE_ARG3 int
+
+/* Define to the type of arg 4 for recv. */
+#define RECV_TYPE_ARG4 int
+
+/* Define to the function return type for recv. */
+#define RECV_TYPE_RETV int
+
+/* Define if you have the recvfrom function. */
+#define HAVE_RECVFROM 1
+
+/* Define to the type of arg 1 for recvfrom. */
+#define RECVFROM_TYPE_ARG1 SOCKET
+
+/* Define to the type pointed by arg 2 for recvfrom. */
+#define RECVFROM_TYPE_ARG2 char
+
+/* Define to the type of arg 3 for recvfrom. */
+#define RECVFROM_TYPE_ARG3 int
+
+/* Define to the type of arg 4 for recvfrom. */
+#define RECVFROM_TYPE_ARG4 int
+
+/* Define to the type pointed by arg 5 for recvfrom. */
+#define RECVFROM_TYPE_ARG5 struct sockaddr
+
+/* Define to the type pointed by arg 6 for recvfrom. */
+#define RECVFROM_TYPE_ARG6 int
+
+/* Define to the function return type for recvfrom. */
+#define RECVFROM_TYPE_RETV int
+
+/* Define if you have the send function. */
+#define HAVE_SEND 1
+
+/* Define to the type of arg 1 for send. */
+#define SEND_TYPE_ARG1 SOCKET
+
+/* Define to the type qualifier of arg 2 for send. */
+#define SEND_QUAL_ARG2 const
+
+/* Define to the type of arg 2 for send. */
+#define SEND_TYPE_ARG2 char *
+
+/* Define to the type of arg 3 for send. */
+#define SEND_TYPE_ARG3 int
+
+/* Define to the type of arg 4 for send. */
+#define SEND_TYPE_ARG4 int
+
+/* Define to the function return type for send. */
+#define SEND_TYPE_RETV int
+
+/* ---------------------------------------------------------------- */
+/* TYPEDEF REPLACEMENTS */
+/* ---------------------------------------------------------------- */
+
+/* Define this if in_addr_t is not an available 'typedefed' type */
+#define in_addr_t unsigned long
+
+/* Define as the return type of signal handlers (int or void). */
+#define RETSIGTYPE void
+
+/* Define ssize_t if it is not an available 'typedefed' type */
+#ifndef _SSIZE_T_DEFINED
+# if (defined(__WATCOMC__) && (__WATCOMC__ >= 1240)) || \
+ defined(__POCC__) || \
+ defined(__MINGW32__)
+# elif defined(_WIN64)
+# define _SSIZE_T_DEFINED
+# define ssize_t __int64
+# else
+# define _SSIZE_T_DEFINED
+# define ssize_t int
+# endif
+#endif
+
+/* ---------------------------------------------------------------- */
+/* TYPE SIZES */
+/* ---------------------------------------------------------------- */
+
+/* The size of `int', as computed by sizeof. */
+#define SIZEOF_INT 4
+
+/* The size of `long double', as computed by sizeof. */
+#define SIZEOF_LONG_DOUBLE 16
+
+/* The size of `long long', as computed by sizeof. */
+/* #define SIZEOF_LONG_LONG 8 */
+
+/* The size of `short', as computed by sizeof. */
+#define SIZEOF_SHORT 2
+
+/* ---------------------------------------------------------------- */
+/* STRUCT RELATED */
+/* ---------------------------------------------------------------- */
+
+/* Define this if you have struct sockaddr_storage */
+#ifndef __SALFORDC__
+#define HAVE_STRUCT_SOCKADDR_STORAGE 1
+#endif
+
+/* Define this if you have struct timeval */
+#define HAVE_STRUCT_TIMEVAL 1
+
+/* Define this if struct sockaddr_in6 has the sin6_scope_id member */
+#define HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID 1
+
+/* ---------------------------------------------------------------- */
+/* Watt-32 tcp/ip SPECIFIC */
+/* ---------------------------------------------------------------- */
+
+#ifdef USE_WATT32
+ #include <tcp.h>
+ #undef byte
+ #undef word
+ #undef USE_WINSOCK
+ #undef HAVE_WINSOCK_H
+ #undef HAVE_WINSOCK2_H
+ #undef HAVE_WS2TCPIP_H
+ #define HAVE_GETADDRINFO
+ #define HAVE_GETNAMEINFO
+ #define HAVE_SYS_IOCTL_H
+ #define HAVE_SYS_SOCKET_H
+ #define HAVE_NETINET_IN_H
+ #define HAVE_NETDB_H
+ #define HAVE_ARPA_INET_H
+ #define HAVE_FREEADDRINFO
+ #define SOCKET int
+#endif
+
+
+/* ---------------------------------------------------------------- */
+/* COMPILER SPECIFIC */
+/* ---------------------------------------------------------------- */
+
+/* Undef keyword 'const' if it does not work. */
+/* #undef const */
+
+/* Windows should not have HAVE_GMTIME_R defined */
+/* #undef HAVE_GMTIME_R */
+
+/* Define if the compiler supports C99 variadic macro style. */
+#if defined(_MSC_VER) && (_MSC_VER >= 1400)
+#define HAVE_VARIADIC_MACROS_C99 1
+#endif
+
+/* Define if the compiler supports the 'long long' data type. */
+#if defined(__MINGW32__) || defined(__WATCOMC__)
+#define HAVE_LONGLONG 1
+#endif
+
+/* Define to avoid VS2005 complaining about portable C functions */
+#if defined(_MSC_VER) && (_MSC_VER >= 1400)
+#define _CRT_SECURE_NO_DEPRECATE 1
+#define _CRT_NONSTDC_NO_DEPRECATE 1
+#endif
+
+/* VS2005 and later dafault size for time_t is 64-bit, unless */
+/* _USE_32BIT_TIME_T has been defined to get a 32-bit time_t. */
+#if defined(_MSC_VER) && (_MSC_VER >= 1400)
+# ifndef _USE_32BIT_TIME_T
+# define SIZEOF_TIME_T 8
+# else
+# define SIZEOF_TIME_T 4
+# endif
+#endif
+
+/* Officially, Microsoft's Windows SDK versions 6.X do not support Windows
+ 2000 as a supported build target. VS2008 default installations provide an
+ embedded Windows SDK v6.0A along with the claim that Windows 2000 is a
+ valid build target for VS2008. Popular belief is that binaries built using
+ Windows SDK versions 6.X and Windows 2000 as a build target are functional */
+#if defined(_MSC_VER) && (_MSC_VER >= 1500)
+# define VS2008_MINIMUM_TARGET 0x0500
+#endif
+
+/* When no build target is specified VS2008 default build target is Windows
+ Vista, which leaves out even Winsows XP. If no build target has been given
+ for VS2008 we will target the minimum Officially supported build target,
+ which happens to be Windows XP. */
+#if defined(_MSC_VER) && (_MSC_VER >= 1500)
+# define VS2008_DEFAULT_TARGET 0x0501
+#endif
+
+/* VS2008 default target settings and minimum build target check */
+#if defined(_MSC_VER) && (_MSC_VER >= 1500)
+# ifndef _WIN32_WINNT
+# define _WIN32_WINNT VS2008_DEFAULT_TARGET
+# endif
+# ifndef WINVER
+# define WINVER VS2008_DEFAULT_TARGET
+# endif
+# if (_WIN32_WINNT < VS2008_MINIMUM_TARGET) || (WINVER < VS2008_MINIMUM_TARGET)
+# error VS2008 does not support Windows build targets prior to Windows 2000
+# endif
+#endif
+
+/* When no build target is specified Pelles C 5.00 and later default build
+ target is Windows Vista. We override default target to be Windows 2000. */
+#if defined(__POCC__) && (__POCC__ >= 500)
+# ifndef _WIN32_WINNT
+# define _WIN32_WINNT 0x0500
+# endif
+# ifndef WINVER
+# define WINVER 0x0500
+# endif
+#endif
+
+/* Availability of freeaddrinfo, getaddrinfo and getnameinfo functions is
+ quite convoluted, compiler dependent and even build target dependent. */
+#if defined(HAVE_WS2TCPIP_H)
+# if defined(__POCC__)
+# define HAVE_FREEADDRINFO 1
+# define HAVE_GETADDRINFO 1
+# define HAVE_GETADDRINFO_THREADSAFE 1
+# define HAVE_GETNAMEINFO 1
+# elif defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0501)
+# define HAVE_FREEADDRINFO 1
+# define HAVE_GETADDRINFO 1
+# define HAVE_GETADDRINFO_THREADSAFE 1
+# define HAVE_GETNAMEINFO 1
+# elif defined(_MSC_VER) && (_MSC_VER >= 1200)
+# define HAVE_FREEADDRINFO 1
+# define HAVE_GETADDRINFO 1
+# define HAVE_GETADDRINFO_THREADSAFE 1
+# define HAVE_GETNAMEINFO 1
+# endif
+#endif
+
+#if defined(__POCC__)
+# ifndef _MSC_VER
+# error Microsoft extensions /Ze compiler option is required
+# endif
+# ifndef __POCC__OLDNAMES
+# error Compatibility names /Go compiler option is required
+# endif
+#endif
+
+/* ---------------------------------------------------------------- */
+/* LARGE FILE SUPPORT */
+/* ---------------------------------------------------------------- */
+
+#if defined(_MSC_VER) && !defined(_WIN32_WCE)
+# if (_MSC_VER >= 900) && (_INTEGRAL_MAX_BITS >= 64)
+# define USE_WIN32_LARGE_FILES
+# else
+# define USE_WIN32_SMALL_FILES
+# endif
+#endif
+
+#if defined(__MINGW32__) && !defined(USE_WIN32_LARGE_FILES)
+# define USE_WIN32_LARGE_FILES
+#endif
+
+#if defined(__WATCOMC__) && !defined(USE_WIN32_LARGE_FILES)
+# define USE_WIN32_LARGE_FILES
+#endif
+
+#if defined(__POCC__)
+# undef USE_WIN32_LARGE_FILES
+#endif
+
+#if !defined(USE_WIN32_LARGE_FILES) && !defined(USE_WIN32_SMALL_FILES)
+# define USE_WIN32_SMALL_FILES
+#endif
+
+/* ---------------------------------------------------------------- */
+/* ADDITIONAL DEFINITIONS */
+/* ---------------------------------------------------------------- */
+
+/* Define cpu-machine-OS */
+#ifndef OS
+#define OS "i386-pc-win32"
+#endif
+
+/* Define to 1 if you want the built-in manual */
+#define USE_MANUAL 1
+
+#if defined(__POCC__)
+# define ENABLE_IPV6 1
+#endif
+
+#endif /* __SRC_CONFIG_WIN32_H */
diff --git a/src/curl_config.h.in b/src/curl_config.h.in
index 846fb27..15ea387 100644
--- a/src/curl_config.h.in
+++ b/src/curl_config.h.in
@@ -24,6 +24,9 @@
/* to disable FTP */
#undef CURL_DISABLE_FTP
+/* to disable Gopher */
+#undef CURL_DISABLE_GOPHER
+
/* to disable HTTP */
#undef CURL_DISABLE_HTTP
@@ -63,10 +66,7 @@
/* to enable hidden symbols */
#undef CURL_HIDDEN_SYMBOLS
-/* W$ LDAP with non-W$ compiler */
-#undef CURL_LDAP_HYBRID
-
-/* Use W$ LDAP implementation */
+/* Use Windows LDAP implementation */
#undef CURL_LDAP_WIN
/* when not building a shared library */
@@ -352,6 +352,9 @@
/* Define to 1 if you have the ldap.h header file. */
#undef HAVE_LDAP_H
+/* Define to 1 if you have the `ldap_init_fd' function. */
+#undef HAVE_LDAP_INIT_FD
+
/* Use LDAPS implementation */
#undef HAVE_LDAP_SSL
@@ -361,6 +364,9 @@
/* Define to 1 if you have the `ldap_url_parse' function. */
#undef HAVE_LDAP_URL_PARSE
+/* Define to 1 if you have the `gcrypt' library (-lgcrypt). */
+#undef HAVE_LIBGCRYPT
+
/* Define to 1 if you have the <libgen.h> header file. */
#undef HAVE_LIBGEN_H
@@ -373,12 +379,24 @@
/* Define to 1 if you have the `resolve' library (-lresolve). */
#undef HAVE_LIBRESOLVE
+/* Define to 1 if you have the <librtmp/rtmp.h> header file. */
+#undef HAVE_LIBRTMP_RTMP_H
+
/* Define to 1 if you have the `ssh2' library (-lssh2). */
#undef HAVE_LIBSSH2
+/* Define to 1 if you have the `libssh2_exit' function. */
+#undef HAVE_LIBSSH2_EXIT
+
/* Define to 1 if you have the <libssh2.h> header file. */
#undef HAVE_LIBSSH2_H
+/* Define to 1 if you have the `libssh2_init' function. */
+#undef HAVE_LIBSSH2_INIT
+
+/* Define to 1 if you have the `libssh2_scp_send64' function. */
+#undef HAVE_LIBSSH2_SCP_SEND64
+
/* Define to 1 if you have the `libssh2_version' function. */
#undef HAVE_LIBSSH2_VERSION
@@ -482,6 +500,9 @@
/* Define to 1 if you have a working POSIX-style strerror_r function. */
#undef HAVE_POSIX_STRERROR_R
+/* if you have <pthread.h> */
+#undef HAVE_PTHREAD_H
+
/* Define to 1 if you have the <pwd.h> header file. */
#undef HAVE_PWD_H
@@ -912,6 +933,9 @@
/* if GnuTLS is enabled */
#undef USE_GNUTLS
+/* if librtmp is in use */
+#undef USE_LIBRTMP
+
/* if libSSH2 is in use */
#undef USE_LIBSSH2
@@ -921,12 +945,21 @@
/* if NSS is enabled */
#undef USE_NSS
+/* Use OpenLDAP-specific code */
+#undef USE_OPENLDAP
+
/* if OpenSSL is in use */
#undef USE_OPENSSL
+/* if PolarSSL is enabled */
+#undef USE_POLARSSL
+
/* if SSL is enabled */
#undef USE_SSLEAY
+/* if you want POSIX threaded DNS lookup */
+#undef USE_THREADS_POSIX
+
/* Define to 1 if you are building a Windows target without large file
support. */
#undef USE_WIN32_LARGE_FILES
diff --git a/src/curlsrc.vcproj b/src/curlsrc.vcproj
new file mode 100755
index 0000000..c453c60
--- /dev/null
+++ b/src/curlsrc.vcproj
@@ -0,0 +1,553 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="curlsrc"
+ ProjectGUID="{01F90008-9A5F-42AD-9ADB-1E2EADE41CFD}"
+ RootNamespace="curlsrc"
+ TargetFrameworkVersion="0"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ EnableManagedIncrementalBuild="0"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="..\lib;..\include;.;&quot;..\..\openssl-0.9.8h\Win32\include&quot;;&quot;..\..\zlib-1.2.3&quot;"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;HAVE_ZLIB_H"
+ StringPooling="true"
+ RuntimeLibrary="0"
+ EnableFunctionLevelLinking="true"
+ EnableEnhancedInstructionSet="1"
+ PrecompiledHeaderFile=""
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"
+ AdditionalIncludeDirectories="..\include"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="ws2_32.lib ..\..\openssl-0.9.8h\Win32\static\libeay32.lib ..\..\openssl-0.9.8h\Win32\static\ssleay32.lib"
+ OutputFile="$(OutDir)\curl.exe"
+ LinkIncremental="1"
+ SuppressStartupBanner="true"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ EnableManagedIncrementalBuild="0"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\lib;..\include;.;&quot;..\..\openssl-0.9.8h\Win32\include&quot;;&quot;..\..\zlib-1.2.3&quot;"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;HAVE_ZLIB_H"
+ MinimalRebuild="true"
+ RuntimeLibrary="1"
+ EnableEnhancedInstructionSet="1"
+ PrecompiledHeaderFile=""
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"
+ AdditionalIncludeDirectories="..\include"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="ws2_32.lib ..\..\openssl-0.9.8h\Win32\static\libeay32.lib ..\..\openssl-0.9.8h\Win32\static\ssleay32.lib"
+ OutputFile="$(OutDir)\curl.exe"
+ LinkIncremental="1"
+ SuppressStartupBanner="true"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ >
+ <File
+ RelativePath="curlutil.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="getpass.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="homedir.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="hugehelp.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="main.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\lib\nonblock.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="os-specific.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\lib\rawstr.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\lib\strtoofft.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="urlglob.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="writeenv.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="writeout.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ >
+ <File
+ RelativePath="config-win32.h"
+ >
+ </File>
+ <File
+ RelativePath="curlutil.h"
+ >
+ </File>
+ <File
+ RelativePath="getpass.h"
+ >
+ </File>
+ <File
+ RelativePath="homedir.h"
+ >
+ </File>
+ <File
+ RelativePath="hugehelp.h"
+ >
+ </File>
+ <File
+ RelativePath="..\lib\nonblock.h"
+ >
+ </File>
+ <File
+ RelativePath="os-specific.h"
+ >
+ </File>
+ <File
+ RelativePath="..\lib\rawstr.h"
+ >
+ </File>
+ <File
+ RelativePath="setup.h"
+ >
+ </File>
+ <File
+ RelativePath="..\lib\strtoofft.h"
+ >
+ </File>
+ <File
+ RelativePath="urlglob.h"
+ >
+ </File>
+ <File
+ RelativePath="version.h"
+ >
+ </File>
+ <File
+ RelativePath="writeenv.h"
+ >
+ </File>
+ <File
+ RelativePath="writeout.h"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ >
+ <File
+ RelativePath="curl.rc"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions=""
+ AdditionalIncludeDirectories=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions=""
+ AdditionalIncludeDirectories=""
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/src/hugehelp.c b/src/hugehelp.c
index d3e5761..0c1728a 100644
--- a/src/hugehelp.c
+++ b/src/hugehelp.c
@@ -2,7 +2,7 @@
#ifndef HAVE_LIBZ
/*
* NEVER EVER edit this manually, fix the mkhelp.pl script instead!
- * Generation time: Sun Mar 28 23:35:15 2010
+ * Generation time: Wed Oct 6 19:13:33 2010
*/
#include "setup.h"
#ifdef USE_MANUAL
@@ -25,27 +25,28 @@ void hugehelp(void)
"\n"
"DESCRIPTION\n"
" curl is a tool to transfer data from or to a server, using one of the\n"
-" supported protocols (HTTP, HTTPS, FTP, FTPS, SCP, SFTP, TFTP, DICT,\n"
+" supported protocols (DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP,\n"
, stdout);
fputs(
-" TELNET, LDAP or FILE). The command is designed to work without user\n"
-" interaction.\n"
+" IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS,\n"
+" TELNET and TFTP). The command is designed to work without user inter-\n"
+" action.\n"
"\n"
" curl offers a busload of useful tricks like proxy support, user authen-\n"
-" tication, FTP upload, HTTP post, SSL connections, cookies, file trans-\n"
+" tication, FTP upload, HTTP post, SSL connections, cookies, file trans-\n"
" fer resume and more. As you will see below, the number of features will\n"
" make your head spin!\n"
"\n"
-" curl is powered by libcurl for all transfer-related features. See\n"
+, stdout);
+ fputs(
+" curl is powered by libcurl for all transfer-related features. See\n"
" libcurl(3) for details.\n"
"\n"
"URL\n"
-, stdout);
- fputs(
-" The URL syntax is protocol-dependent. You'll find a detailed descrip-\n"
+" The URL syntax is protocol-dependent. You'll find a detailed descrip-\n"
" tion in RFC 3986.\n"
"\n"
-" You can specify multiple URLs or parts of URLs by writing part sets\n"
+" You can specify multiple URLs or parts of URLs by writing part sets\n"
" within braces as in:\n"
"\n"
" http://site.{one,two,three}.com\n"
@@ -53,172 +54,172 @@ void hugehelp(void)
" or you can get sequences of alphanumeric series by using [] as in:\n"
"\n"
" ftp://ftp.numericals.com/file[1-100].txt\n"
+, stdout);
+ fputs(
" ftp://ftp.numericals.com/file[001-100].txt (with leading zeros)\n"
" ftp://ftp.letters.com/file[a-z].txt\n"
"\n"
-, stdout);
- fputs(
-" No nesting of the sequences is supported at the moment, but you can use\n"
-" several ones next to each other:\n"
+" Nested sequences are not supported, but you can use several ones next\n"
+" to each other:\n"
"\n"
" http://any.org/archive[1996-1999]/vol[1-4]/part{a,b,c}.html\n"
"\n"
-" You can specify any amount of URLs on the command line. They will be\n"
+" You can specify any amount of URLs on the command line. They will be\n"
" fetched in a sequential manner in the specified order.\n"
"\n"
-" Since curl 7.15.1 you can also specify a step counter for the ranges,\n"
-" so that you can get every Nth number or letter:\n"
-"\n"
, stdout);
fputs(
+" You can specify a step counter for the ranges to get every Nth number\n"
+" or letter:\n"
+"\n"
" http://www.numericals.com/file[1-100:10].txt\n"
" http://www.letters.com/file[a-z:2].txt\n"
"\n"
-" If you specify URL without protocol:// prefix, curl will attempt to\n"
-" guess what protocol you might want. It will then default to HTTP but\n"
-" try other protocols based on often-used host name prefixes. For exam-\n"
-" ple, for host names starting with \"ftp.\" curl will assume you want to\n"
-" speak FTP.\n"
-"\n"
+" If you specify URL without protocol:// prefix, curl will attempt to\n"
+" guess what protocol you might want. It will then default to HTTP but\n"
+" try other protocols based on often-used host name prefixes. For exam-\n"
, stdout);
fputs(
-" curl will do its best to use what you pass to it as a URL. It is not\n"
-" trying to validate it as a syntactically correct URL by any means but\n"
+" ple, for host names starting with \"ftp.\" curl will assume you want to\n"
+" speak FTP.\n"
+"\n"
+" curl will do its best to use what you pass to it as a URL. It is not\n"
+" trying to validate it as a syntactically correct URL by any means but\n"
" is instead very liberal with what it accepts.\n"
"\n"
" Curl will attempt to re-use connections for multiple file transfers, so\n"
-" that getting many files from the same server will not do multiple con-\n"
-" nects / handshakes. This improves speed. Of course this is only done on\n"
+" that getting many files from the same server will not do multiple con-\n"
, stdout);
fputs(
-" files specified on a single command line and cannot be used between\n"
+" nects / handshakes. This improves speed. Of course this is only done on\n"
+" files specified on a single command line and cannot be used between\n"
" separate curl invokes.\n"
"\n"
"PROGRESS METER\n"
-" curl normally displays a progress meter during operations, indicating\n"
-" the amount of transferred data, transfer speeds and estimated time\n"
+" curl normally displays a progress meter during operations, indicating\n"
+" the amount of transferred data, transfer speeds and estimated time\n"
" left, etc.\n"
"\n"
-" However, since curl displays this data to the terminal by default, if\n"
-" you invoke curl to do an operation and it is about to write data to the\n"
+" curl displays this data to the terminal by default, so if you invoke\n"
, stdout);
fputs(
-" terminal, it disables the progress meter as otherwise it would mess up\n"
-" the output mixing progress meter and response data.\n"
+" curl to do an operation and it is about to write data to the terminal,\n"
+" it disables the progress meter as otherwise it would mess up the output\n"
+" mixing progress meter and response data.\n"
"\n"
" If you want a progress meter for HTTP POST or PUT requests, you need to\n"
-" redirect the response output to a file, using shell redirect (>), -o\n"
+" redirect the response output to a file, using shell redirect (>), -o\n"
" [file] or similar.\n"
"\n"
-" It is not the same case for FTP upload as that operation does not spit\n"
-" out any response data to the terminal.\n"
-"\n"
+" It is not the same case for FTP upload as that operation does not spit\n"
, stdout);
fputs(
+" out any response data to the terminal.\n"
+"\n"
" If you prefer a progress \"bar\" instead of the regular meter, -# is your\n"
" friend.\n"
"OPTIONS\n"
" In general, all boolean options are enabled with --option and yet again\n"
-" disabled with --no-option. That is, you use the exact same option name\n"
+" disabled with --no-option. That is, you use the exact same option name\n"
" but prefix it with \"no-\". However, in this list we mostly only list and\n"
-" show the --option version of them. (This concept with --no options was\n"
-" added in 7.19.0. Previously most options were toggled on/off on\n"
+" show the --option version of them. (This concept with --no options was\n"
, stdout);
fputs(
+" added in 7.19.0. Previously most options were toggled on/off on\n"
" repeated use of the same command line option.)\n"
"\n"
" -a/--append\n"
" (FTP/SFTP) When used in an upload, this will tell curl to append\n"
-" to the target file instead of overwriting it. If the file\n"
-" doesn't exist, it will be created. Note that this flag is\n"
+" to the target file instead of overwriting it. If the file\n"
+" doesn't exist, it will be created. Note that this flag is\n"
" ignored by some SSH servers (including OpenSSH).\n"
"\n"
" -A/--user-agent <agent string>\n"
-" (HTTP) Specify the User-Agent string to send to the HTTP server.\n"
, stdout);
fputs(
-" Some badly done CGIs fail if this field isn't set to\n"
-" \"Mozilla/4.0\". To encode blanks in the string, surround the\n"
-" string with single quote marks. This can also be set with the\n"
+" (HTTP) Specify the User-Agent string to send to the HTTP server.\n"
+" Some badly done CGIs fail if this field isn't set to\n"
+" \"Mozilla/4.0\". To encode blanks in the string, surround the\n"
+" string with single quote marks. This can also be set with the\n"
" -H/--header option of course.\n"
"\n"
-" If this option is set more than once, the last one will be the\n"
+" If this option is set more than once, the last one will be the\n"
" one that's used.\n"
"\n"
" --anyauth\n"
-" (HTTP) Tells curl to figure out authentication method by itself,\n"
, stdout);
fputs(
-" and use the most secure one the remote site claims to support.\n"
+" (HTTP) Tells curl to figure out authentication method by itself,\n"
+" and use the most secure one the remote site claims to support.\n"
" This is done by first doing a request and checking the response-\n"
-" headers, thus possibly inducing an extra network round-trip.\n"
-" This is used instead of setting a specific authentication\n"
-" method, which you can do with --basic, --digest, --ntlm, and\n"
-" --negotiate.\n"
-"\n"
+" headers, thus possibly inducing an extra network round-trip.\n"
+" This is used instead of setting a specific authentication\n"
+" method, which you can do with --basic, --digest, --ntlm, and\n"
, stdout);
fputs(
-" Note that using --anyauth is not recommended if you do uploads\n"
-" from stdin, since it may require data to be sent twice and then\n"
+" --negotiate.\n"
+"\n"
+" Note that using --anyauth is not recommended if you do uploads\n"
+" from stdin, since it may require data to be sent twice and then\n"
" the client must be able to rewind. If the need should arise when\n"
" uploading from stdin, the upload operation will fail.\n"
"\n"
" -b/--cookie <name=data>\n"
-" (HTTP) Pass the data to the HTTP server as a cookie. It is sup-\n"
-" posedly the data previously received from the server in a \"Set-\n"
+" (HTTP) Pass the data to the HTTP server as a cookie. It is sup-\n"
, stdout);
fputs(
-" Cookie:\" line. The data should be in the format \"NAME1=VALUE1;\n"
+" posedly the data previously received from the server in a \"Set-\n"
+" Cookie:\" line. The data should be in the format \"NAME1=VALUE1;\n"
" NAME2=VALUE2\".\n"
"\n"
-" If no '=' symbol is used in the line, it is treated as a file-\n"
-" name to use to read previously stored cookie lines from, which\n"
-" should be used in this session if they match. Using this method\n"
-" also activates the \"cookie parser\" which will make curl record\n"
+" If no '=' symbol is used in the line, it is treated as a file-\n"
+" name to use to read previously stored cookie lines from, which\n"
+" should be used in this session if they match. Using this method\n"
, stdout);
fputs(
+" also activates the \"cookie parser\" which will make curl record\n"
" incoming cookies too, which may be handy if you're using this in\n"
-" combination with the -L/--location option. The file format of\n"
-" the file to read cookies from should be plain HTTP headers or\n"
+" combination with the -L/--location option. The file format of\n"
+" the file to read cookies from should be plain HTTP headers or\n"
" the Netscape/Mozilla cookie file format.\n"
"\n"
-" NOTE that the file specified with -b/--cookie is only used as\n"
-" input. No cookies will be stored in the file. To store cookies,\n"
+" NOTE that the file specified with -b/--cookie is only used as\n"
, stdout);
fputs(
-" use the -c/--cookie-jar option or you could even save the HTTP\n"
+" input. No cookies will be stored in the file. To store cookies,\n"
+" use the -c/--cookie-jar option or you could even save the HTTP\n"
" headers to a file using -D/--dump-header!\n"
"\n"
-" If this option is set more than once, the last one will be the\n"
+" If this option is set more than once, the last one will be the\n"
" one that's used.\n"
"\n"
" -B/--use-ascii\n"
-" Enable ASCII transfer when using FTP or LDAP. For FTP, this can\n"
-" also be enforced by using an URL that ends with \";type=A\". This\n"
+" Enable ASCII transfer when using FTP or LDAP. For FTP, this can\n"
, stdout);
fputs(
-" option causes data sent to stdout to be in text mode for win32\n"
+" also be enforced by using an URL that ends with \";type=A\". This\n"
+" option causes data sent to stdout to be in text mode for win32\n"
" systems.\n"
"\n"
" --basic\n"
-" (HTTP) Tells curl to use HTTP Basic authentication. This is the\n"
-" default and this option is usually pointless, unless you use it\n"
-" to override a previously set option that sets a different\n"
-" authentication method (such as --ntlm, --digest, or --negoti-\n"
+" (HTTP) Tells curl to use HTTP Basic authentication. This is the\n"
+" default and this option is usually pointless, unless you use it\n"
+" to override a previously set option that sets a different\n"
+, stdout);
+ fputs(
+" authentication method (such as --ntlm, --digest, or --negoti-\n"
" ate).\n"
"\n"
" --ciphers <list of ciphers>\n"
-, stdout);
- fputs(
" (SSL) Specifies which ciphers to use in the connection. The list\n"
-" of ciphers must specify valid ciphers. Read up on SSL cipher\n"
-" list details on this URL:\n"
+" of ciphers must specify valid ciphers. Read up on SSL cipher\n"
+" list details on this URL:\n"
" http://www.openssl.org/docs/apps/ciphers.html\n"
"\n"
-" NSS ciphers are done differently than OpenSSL and GnuTLS. The\n"
-" full list of NSS ciphers is in the NSSCipherSuite entry at this\n"
, stdout);
fputs(
+" NSS ciphers are done differently than OpenSSL and GnuTLS. The\n"
+" full list of NSS ciphers is in the NSSCipherSuite entry at this\n"
" URL: http://directory.fedora.redhat.com/docs/mod_nss.html#Direc-\n"
" tives\n"
"\n"
@@ -227,77 +228,77 @@ void hugehelp(void)
"\n"
" --compressed\n"
" (HTTP) Request a compressed response using one of the algorithms\n"
-" libcurl supports, and return the uncompressed document. If this\n"
-" option is used and the server sends an unsupported encoding,\n"
, stdout);
fputs(
+" libcurl supports, and return the uncompressed document. If this\n"
+" option is used and the server sends an unsupported encoding,\n"
" curl will report an error.\n"
"\n"
" --connect-timeout <seconds>\n"
-" Maximum time in seconds that you allow the connection to the\n"
-" server to take. This only limits the connection phase, once\n"
-" curl has connected this option is of no more use. See also the\n"
+" Maximum time in seconds that you allow the connection to the\n"
+" server to take. This only limits the connection phase, once\n"
+" curl has connected this option is of no more use. See also the\n"
+, stdout);
+ fputs(
" -m/--max-time option.\n"
"\n"
" If this option is used several times, the last one will be used.\n"
"\n"
" -c/--cookie-jar <file name>\n"
-, stdout);
- fputs(
" Specify to which file you want curl to write all cookies after a\n"
-" completed operation. Curl writes all cookies previously read\n"
-" from a specified file as well as all cookies received from\n"
+" completed operation. Curl writes all cookies previously read\n"
+" from a specified file as well as all cookies received from\n"
" remote server(s). If no cookies are known, no file will be writ-\n"
-" ten. The file will be written using the Netscape cookie file\n"
-" format. If you set the file name to a single dash, \"-\", the\n"
, stdout);
fputs(
+" ten. The file will be written using the Netscape cookie file\n"
+" format. If you set the file name to a single dash, \"-\", the\n"
" cookies will be written to stdout.\n"
"\n"
" NOTE If the cookie jar can't be created or written to, the whole\n"
" curl operation won't fail or even report an error clearly. Using\n"
-" -v will get a warning displayed, but that is the only visible\n"
+" -v will get a warning displayed, but that is the only visible\n"
+, stdout);
+ fputs(
" feedback you get about this possibly lethal situation.\n"
"\n"
-" If this option is used several times, the last specified file\n"
+" If this option is used several times, the last specified file\n"
" name will be used.\n"
"\n"
+" -C/--continue-at <offset>\n"
+" Continue/Resume a previous file transfer at the given offset.\n"
+" The given offset is the exact number of bytes that will be\n"
+" skipped, counting from the beginning of the source file before\n"
, stdout);
fputs(
-" -C/--continue-at <offset>\n"
-" Continue/Resume a previous file transfer at the given offset.\n"
-" The given offset is the exact number of bytes that will be\n"
-" skipped, counting from the beginning of the source file before\n"
" it is transferred to the destination. If used with uploads, the\n"
" FTP server command SIZE will not be used by curl.\n"
"\n"
-" Use \"-C -\" to tell curl to automatically find out where/how to\n"
-, stdout);
- fputs(
-" resume the transfer. It then uses the given output/input files\n"
+" Use \"-C -\" to tell curl to automatically find out where/how to\n"
+" resume the transfer. It then uses the given output/input files\n"
" to figure that out.\n"
"\n"
" If this option is used several times, the last one will be used.\n"
"\n"
" --create-dirs\n"
-" When used in conjunction with the -o option, curl will create\n"
-" the necessary local directory hierarchy as needed. This option\n"
-" creates the dirs mentioned with the -o option, nothing else. If\n"
, stdout);
fputs(
-" the -o file name uses no dir or if the dirs it mentions already\n"
+" When used in conjunction with the -o option, curl will create\n"
+" the necessary local directory hierarchy as needed. This option\n"
+" creates the dirs mentioned with the -o option, nothing else. If\n"
+" the -o file name uses no dir or if the dirs it mentions already\n"
" exist, no dir will be created.\n"
"\n"
-" To create remote directories when using FTP or SFTP, try --ftp-\n"
+" To create remote directories when using FTP or SFTP, try --ftp-\n"
" create-dirs.\n"
"\n"
+, stdout);
+ fputs(
" --crlf (FTP) Convert LF to CRLF in upload. Useful for MVS (OS/390).\n"
"\n"
" --crlfile <file>\n"
-" (HTTPS/FTPS) Provide a file using PEM format with a Certificate\n"
-" Revocation List that may specify peer certificates that are to\n"
-, stdout);
- fputs(
+" (HTTPS/FTPS) Provide a file using PEM format with a Certificate\n"
+" Revocation List that may specify peer certificates that are to\n"
" be considered revoked.\n"
"\n"
" If this option is used several times, the last one will be used.\n"
@@ -305,435 +306,435 @@ void hugehelp(void)
" (Added in 7.19.7)\n"
"\n"
" -d/--data <data>\n"
-" (HTTP) Sends the specified data in a POST request to the HTTP\n"
-" server, in the same way that a browser does when a user has\n"
-" filled in an HTML form and presses the submit button. This will\n"
-" cause curl to pass the data to the server using the content-type\n"
, stdout);
fputs(
+" (HTTP) Sends the specified data in a POST request to the HTTP\n"
+" server, in the same way that a browser does when a user has\n"
+" filled in an HTML form and presses the submit button. This will\n"
+" cause curl to pass the data to the server using the content-type\n"
" application/x-www-form-urlencoded. Compare to -F/--form.\n"
"\n"
-" -d/--data is the same as --data-ascii. To post data purely\n"
+" -d/--data is the same as --data-ascii. To post data purely\n"
+, stdout);
+ fputs(
" binary, you should instead use the --data-binary option. To URL-\n"
" encode the value of a form field you may use --data-urlencode.\n"
"\n"
-" If any of these options is used more than once on the same com-\n"
-" mand line, the data pieces specified will be merged together\n"
+" If any of these options is used more than once on the same com-\n"
+" mand line, the data pieces specified will be merged together\n"
+" with a separating &-symbol. Thus, using '-d name=daniel -d\n"
+" skill=lousy' would generate a post chunk that looks like\n"
, stdout);
fputs(
-" with a separating &-symbol. Thus, using '-d name=daniel -d\n"
-" skill=lousy' would generate a post chunk that looks like\n"
" 'name=daniel&skill=lousy'.\n"
"\n"
-" If you start the data with the letter @, the rest should be a\n"
-" file name to read the data from, or - if you want curl to read\n"
-" the data from stdin. The contents of the file must already be\n"
-, stdout);
- fputs(
-" URL-encoded. Multiple files can also be specified. Posting data\n"
-" from a file named 'foobar' would thus be done with --data @foo-\n"
+" If you start the data with the letter @, the rest should be a\n"
+" file name to read the data from, or - if you want curl to read\n"
+" the data from stdin. The contents of the file must already be\n"
+" URL-encoded. Multiple files can also be specified. Posting data\n"
+" from a file named 'foobar' would thus be done with --data @foo-\n"
" bar.\n"
"\n"
" --data-binary <data>\n"
-" (HTTP) This posts data exactly as specified with no extra pro-\n"
-" cessing whatsoever.\n"
-"\n"
-" If you start the data with the letter @, the rest should be a\n"
-" filename. Data is posted in a similar manner as --data-ascii\n"
, stdout);
fputs(
-" does, except that newlines are preserved and conversions are\n"
+" (HTTP) This posts data exactly as specified with no extra pro-\n"
+" cessing whatsoever.\n"
+"\n"
+" If you start the data with the letter @, the rest should be a\n"
+" filename. Data is posted in a similar manner as --data-ascii\n"
+" does, except that newlines are preserved and conversions are\n"
" never done.\n"
"\n"
-" If this option is used several times, the ones following the\n"
+" If this option is used several times, the ones following the\n"
+, stdout);
+ fputs(
" first will append data as described in -d/--data.\n"
"\n"
" --data-urlencode <data>\n"
" (HTTP) This posts data, similar to the other --data options with\n"
" the exception that this performs URL-encoding. (Added in 7.18.0)\n"
-, stdout);
- fputs(
-" To be CGI-compliant, the <data> part should begin with a name\n"
-" followed by a separator and a content specification. The <data>\n"
+" To be CGI-compliant, the <data> part should begin with a name\n"
+" followed by a separator and a content specification. The <data>\n"
" part can be passed to curl using one of the following syntaxes:\n"
"\n"
-" content\n"
-" This will make curl URL-encode the content and pass that\n"
-" on. Just be careful so that the content doesn't contain\n"
-" any = or @ symbols, as that will then make the syntax\n"
, stdout);
fputs(
+" content\n"
+" This will make curl URL-encode the content and pass that\n"
+" on. Just be careful so that the content doesn't contain\n"
+" any = or @ symbols, as that will then make the syntax\n"
" match one of the other cases below!\n"
"\n"
" =content\n"
-" This will make curl URL-encode the content and pass that\n"
+" This will make curl URL-encode the content and pass that\n"
" on. The preceding = symbol is not included in the data.\n"
"\n"
+, stdout);
+ fputs(
" name=content\n"
-" This will make curl URL-encode the content part and pass\n"
-" that on. Note that the name part is expected to be URL-\n"
+" This will make curl URL-encode the content part and pass\n"
+" that on. Note that the name part is expected to be URL-\n"
" encoded already.\n"
"\n"
" @filename\n"
-, stdout);
- fputs(
-" This will make curl load data from the given file\n"
-" (including any newlines), URL-encode that data and pass\n"
+" This will make curl load data from the given file\n"
+" (including any newlines), URL-encode that data and pass\n"
" it on in the POST.\n"
"\n"
" name@filename\n"
-" This will make curl load data from the given file\n"
-" (including any newlines), URL-encode that data and pass\n"
-" it on in the POST. The name part gets an equal sign\n"
, stdout);
fputs(
+" This will make curl load data from the given file\n"
+" (including any newlines), URL-encode that data and pass\n"
+" it on in the POST. The name part gets an equal sign\n"
" appended, resulting in name=urlencoded-file-content. Note\n"
" that the name is expected to be URL-encoded already.\n"
"\n"
" --digest\n"
" (HTTP) Enables HTTP Digest authentication. This is a authentica-\n"
-" tion that prevents the password from being sent over the wire in\n"
-" clear text. Use this in combination with the normal -u/--user\n"
-" option to set user name and password. See also --ntlm, --negoti-\n"
, stdout);
fputs(
+" tion that prevents the password from being sent over the wire in\n"
+" clear text. Use this in combination with the normal -u/--user\n"
+" option to set user name and password. See also --ntlm, --negoti-\n"
" ate and --anyauth for related options.\n"
"\n"
-" If this option is used several times, the following occurrences\n"
+" If this option is used several times, the following occurrences\n"
" make no difference.\n"
"\n"
" --disable-eprt\n"
+, stdout);
+ fputs(
" (FTP) Tell curl to disable the use of the EPRT and LPRT commands\n"
" when doing active FTP transfers. Curl will normally always first\n"
-" attempt to use EPRT, then LPRT before using PORT, but with this\n"
+" attempt to use EPRT, then LPRT before using PORT, but with this\n"
+" option, it will use PORT right away. EPRT and LPRT are exten-\n"
+" sions to the original FTP protocol, and may not work on all\n"
+" servers, but they enable more functionality in a better way than\n"
, stdout);
fputs(
-" option, it will use PORT right away. EPRT and LPRT are exten-\n"
-" sions to the original FTP protocol, and may not work on all\n"
-" servers, but they enable more functionality in a better way than\n"
" the traditional PORT command.\n"
"\n"
-" Since curl 7.19.0, --eprt can be used to explicitly enable EPRT\n"
-" again and --no-eprt is an alias for --disable-eprt.\n"
+" --eprt can be used to explicitly enable EPRT again and --no-eprt\n"
+" is an alias for --disable-eprt.\n"
"\n"
-, stdout);
- fputs(
-" Disabling EPRT only changes the active behavior. If you want to\n"
-" switch to passive mode you need to not use -P/--ftp-port or\n"
+" Disabling EPRT only changes the active behavior. If you want to\n"
+" switch to passive mode you need to not use -P/--ftp-port or\n"
" force it with --ftp-pasv.\n"
"\n"
" --disable-epsv\n"
-" (FTP) Tell curl to disable the use of the EPSV command when\n"
-" doing passive FTP transfers. Curl will normally always first\n"
-" attempt to use EPSV before PASV, but with this option, it will\n"
-" not try using EPSV.\n"
-"\n"
+" (FTP) Tell curl to disable the use of the EPSV command when\n"
, stdout);
fputs(
-" Since curl 7.19.0, --epsv can be used to explicitly enable EPRT\n"
-" again and --no-epsv is an alias for --disable-epsv.\n"
+" doing passive FTP transfers. Curl will normally always first\n"
+" attempt to use EPSV before PASV, but with this option, it will\n"
+" not try using EPSV.\n"
+"\n"
+" --epsv can be used to explicitly enable EPRT again and --no-epsv\n"
+" is an alias for --disable-epsv.\n"
"\n"
" Disabling EPSV only changes the passive behavior. If you want to\n"
" switch to active mode you need to use -P/--ftp-port.\n"
"\n"
" -D/--dump-header <file>\n"
-" Write the protocol headers to the specified file.\n"
-"\n"
-" This option is handy to use when you want to store the headers\n"
, stdout);
fputs(
-" that a HTTP site sends to you. Cookies from the headers could\n"
-" then be read in a second curl invocation by using the\n"
+" Write the protocol headers to the specified file.\n"
+"\n"
+" This option is handy to use when you want to store the headers\n"
+" that a HTTP site sends to you. Cookies from the headers could\n"
+" then be read in a second curl invocation by using the\n"
" -b/--cookie option! The -c/--cookie-jar option is however a bet-\n"
" ter way to store cookies.\n"
"\n"
-" When used in FTP, the FTP server response lines are considered\n"
+, stdout);
+ fputs(
+" When used in FTP, the FTP server response lines are considered\n"
" being \"headers\" and thus are saved there.\n"
"\n"
" If this option is used several times, the last one will be used.\n"
"\n"
+" -e/--referer <URL>\n"
+" (HTTP) Sends the \"Referer Page\" information to the HTTP server.\n"
+" This can also be set with the -H/--header flag of course. When\n"
+" used with -L/--location you can append \";auto\" to the --referer\n"
, stdout);
fputs(
-" -e/--referer <URL>\n"
-" (HTTP) Sends the \"Referer Page\" information to the HTTP server.\n"
-" This can also be set with the -H/--header flag of course. When\n"
-" used with -L/--location you can append \";auto\" to the --referer\n"
" URL to make curl automatically set the previous URL when it fol-\n"
-" lows a Location: header. The \";auto\" string can be used alone,\n"
+" lows a Location: header. The \";auto\" string can be used alone,\n"
" even if you don't set an initial --referer.\n"
"\n"
-, stdout);
- fputs(
" If this option is used several times, the last one will be used.\n"
"\n"
" --engine <name>\n"
-" Select the OpenSSL crypto engine to use for cipher operations.\n"
-" Use --engine list to print a list of build-time supported\n"
-" engines. Note that not all (or none) of the engines may be\n"
+" Select the OpenSSL crypto engine to use for cipher operations.\n"
+" Use --engine list to print a list of build-time supported\n"
+, stdout);
+ fputs(
+" engines. Note that not all (or none) of the engines may be\n"
" available at run-time.\n"
"\n"
" --environment\n"
-" (RISC OS ONLY) Sets a range of environment variables, using the\n"
-, stdout);
- fputs(
+" (RISC OS ONLY) Sets a range of environment variables, using the\n"
" names the -w option supports, to allow easier extraction of use-\n"
" ful information after having run curl.\n"
"\n"
" --egd-file <file>\n"
-" (SSL) Specify the path name to the Entropy Gathering Daemon\n"
-" socket. The socket is used to seed the random engine for SSL\n"
+" (SSL) Specify the path name to the Entropy Gathering Daemon\n"
+, stdout);
+ fputs(
+" socket. The socket is used to seed the random engine for SSL\n"
" connections. See also the --random-file option.\n"
"\n"
" -E/--cert <certificate[:password]>\n"
" (SSL) Tells curl to use the specified certificate file when get-\n"
+" ting a file with HTTPS or FTPS. The certificate must be in PEM\n"
+" format. If the optional password isn't specified, it will be\n"
+" queried for on the terminal. Note that this option assumes a\n"
, stdout);
fputs(
-" ting a file with HTTPS or FTPS. The certificate must be in PEM\n"
-" format. If the optional password isn't specified, it will be\n"
-" queried for on the terminal. Note that this option assumes a\n"
-" \"certificate\" file that is the private key and the private cer-\n"
-" tificate concatenated! See --cert and --key to specify them\n"
+" \"certificate\" file that is the private key and the private cer-\n"
+" tificate concatenated! See --cert and --key to specify them\n"
" independently.\n"
"\n"
+" If curl is built against the NSS SSL library then this option\n"
+" tells curl the nickname of the certificate to use within the NSS\n"
+" database defined by the environment variable SSL_DIR (or by\n"
, stdout);
fputs(
-" If curl is built against the NSS SSL library then this option\n"
-" tells curl the nickname of the certificate to use within the NSS\n"
-" database defined by the environment variable SSL_DIR (or by\n"
-" default /etc/pki/nssdb). If the NSS PEM PKCS#11 module (lib-\n"
+" default /etc/pki/nssdb). If the NSS PEM PKCS#11 module (lib-\n"
" nsspem.so) is available then PEM files may be loaded.\n"
"\n"
" If this option is used several times, the last one will be used.\n"
"\n"
" --cert-type <type>\n"
-, stdout);
- fputs(
-" (SSL) Tells curl what certificate type the provided certificate\n"
+" (SSL) Tells curl what certificate type the provided certificate\n"
" is in. PEM, DER and ENG are recognized types. If not specified,\n"
" PEM is assumed.\n"
"\n"
+, stdout);
+ fputs(
" If this option is used several times, the last one will be used.\n"
"\n"
" --cacert <CA certificate>\n"
" (SSL) Tells curl to use the specified certificate file to verify\n"
-" the peer. The file may contain multiple CA certificates. The\n"
-, stdout);
- fputs(
-" certificate(s) must be in PEM format. Normally curl is built to\n"
+" the peer. The file may contain multiple CA certificates. The\n"
+" certificate(s) must be in PEM format. Normally curl is built to\n"
" use a default file for this, so this option is typically used to\n"
" alter that default file.\n"
"\n"
-" curl recognizes the environment variable named 'CURL_CA_BUNDLE'\n"
-" if it is set, and uses the given path as a path to a CA cert\n"
-" bundle. This option overrides that variable.\n"
-"\n"
-" The windows version of curl will automatically look for a CA\n"
, stdout);
fputs(
+" curl recognizes the environment variable named 'CURL_CA_BUNDLE'\n"
+" if it is set, and uses the given path as a path to a CA cert\n"
+" bundle. This option overrides that variable.\n"
+"\n"
+" The windows version of curl will automatically look for a CA\n"
" certs file named 'curl-ca-bundle.crt', either in the same direc-\n"
" tory as curl.exe, or in the Current Working Directory, or in any\n"
" folder along your PATH.\n"
"\n"
-" If curl is built against the NSS SSL library then this option\n"
-" tells curl the nickname of the CA certificate to use within the\n"
-" NSS database defined by the environment variable SSL_DIR (or by\n"
, stdout);
fputs(
-" default /etc/pki/nssdb). If the NSS PEM PKCS#11 module (lib-\n"
+" If curl is built against the NSS SSL library then this option\n"
+" tells curl the nickname of the CA certificate to use within the\n"
+" NSS database defined by the environment variable SSL_DIR (or by\n"
+" default /etc/pki/nssdb). If the NSS PEM PKCS#11 module (lib-\n"
" nsspem.so) is available then PEM files may be loaded.\n"
"\n"
" If this option is used several times, the last one will be used.\n"
"\n"
-" --capath <CA certificate directory>\n"
-" (SSL) Tells curl to use the specified certificate directory to\n"
-" verify the peer. The certificates must be in PEM format, and the\n"
, stdout);
fputs(
-" directory must have been processed using the c_rehash utility\n"
-" supplied with openssl. Using --capath can allow curl to make\n"
+" --capath <CA certificate directory>\n"
+" (SSL) Tells curl to use the specified certificate directory to\n"
+" verify the peer. The certificates must be in PEM format, and the\n"
+" directory must have been processed using the c_rehash utility\n"
+" supplied with openssl. Using --capath can allow curl to make\n"
" SSL-connections much more efficiently than using --cacert if the\n"
" --cacert file contains many CA certificates.\n"
"\n"
+, stdout);
+ fputs(
" If this option is used several times, the last one will be used.\n"
"\n"
" -f/--fail\n"
-" (HTTP) Fail silently (no output at all) on server errors. This\n"
+" (HTTP) Fail silently (no output at all) on server errors. This\n"
+" is mostly done to better enable scripts etc to better deal with\n"
+" failed attempts. In normal cases when a HTTP server fails to\n"
+" deliver a document, it returns an HTML document stating so\n"
+" (which often also describes why and more). This flag will pre-\n"
, stdout);
fputs(
-" is mostly done to better enable scripts etc to better deal with\n"
-" failed attempts. In normal cases when a HTTP server fails to\n"
-" deliver a document, it returns an HTML document stating so\n"
-" (which often also describes why and more). This flag will pre-\n"
" vent curl from outputting that and return error 22.\n"
"\n"
-" This method is not fail-safe and there are occasions where non-\n"
-, stdout);
- fputs(
-" successful response codes will slip through, especially when\n"
+" This method is not fail-safe and there are occasions where non-\n"
+" successful response codes will slip through, especially when\n"
" authentication is involved (response codes 401 and 407).\n"
"\n"
" --ftp-account [data]\n"
" (FTP) When an FTP server asks for \"account data\" after user name\n"
-" and password has been provided, this data is sent off using the\n"
+" and password has been provided, this data is sent off using the\n"
+, stdout);
+ fputs(
" ACCT command. (Added in 7.13.0)\n"
"\n"
-" If this option is used twice, the second will override the pre-\n"
+" If this option is used twice, the second will override the pre-\n"
" vious use.\n"
"\n"
-, stdout);
- fputs(
" --ftp-create-dirs\n"
-" (FTP/SFTP) When an FTP or SFTP URL/operation uses a path that\n"
-" doesn't currently exist on the server, the standard behavior of\n"
+" (FTP/SFTP) When an FTP or SFTP URL/operation uses a path that\n"
+" doesn't currently exist on the server, the standard behavior of\n"
" curl is to fail. Using this option, curl will instead attempt to\n"
" create missing directories.\n"
"\n"
" --ftp-method [method]\n"
-" (FTP) Control what method curl should use to reach a file on a\n"
-" FTP(S) server. The method argument should be one of the follow-\n"
, stdout);
fputs(
+" (FTP) Control what method curl should use to reach a file on a\n"
+" FTP(S) server. The method argument should be one of the follow-\n"
" ing alternatives:\n"
"\n"
" multicwd\n"
-" curl does a single CWD operation for each path part in\n"
-" the given URL. For deep hierarchies this means very many\n"
-" commands. This is how RFC1738 says it should be done.\n"
-" This is the default but the slowest behavior.\n"
-"\n"
-" nocwd curl does no CWD at all. curl will do SIZE, RETR, STOR\n"
+" curl does a single CWD operation for each path part in\n"
+" the given URL. For deep hierarchies this means very many\n"
+" commands. This is how RFC1738 says it should be done.\n"
, stdout);
fputs(
+" This is the default but the slowest behavior.\n"
+"\n"
+" nocwd curl does no CWD at all. curl will do SIZE, RETR, STOR\n"
" etc and give a full path to the server for all these com-\n"
" mands. This is the fastest behavior.\n"
"\n"
" singlecwd\n"
" curl does one CWD with the full target directory and then\n"
-" operates on the file \"normally\" (like in the multicwd\n"
-" case). This is somewhat more standards compliant than\n"
+" operates on the file \"normally\" (like in the multicwd\n"
+, stdout);
+ fputs(
+" case). This is somewhat more standards compliant than\n"
" 'nocwd' but without the full penalty of 'multicwd'.\n"
" (Added in 7.15.1)\n"
"\n"
-, stdout);
- fputs(
" --ftp-pasv\n"
-" (FTP) Use passive mode for the data conection. Passive is the\n"
-" internal default behavior, but using this option can be used to\n"
+" (FTP) Use passive mode for the data conection. Passive is the\n"
+" internal default behavior, but using this option can be used to\n"
" override a previous -P/-ftp-port option. (Added in 7.11.0)\n"
"\n"
-" If this option is used several times, the following occurrences\n"
-" make no difference. Undoing an enforced passive really isn't\n"
-" doable but you must then instead enforce the correct -P/--ftp-\n"
, stdout);
fputs(
+" If this option is used several times, the following occurrences\n"
+" make no difference. Undoing an enforced passive really isn't\n"
+" doable but you must then instead enforce the correct -P/--ftp-\n"
" port again.\n"
"\n"
" Passive mode means that curl will try the EPSV command first and\n"
" then PASV, unless --disable-epsv is used.\n"
"\n"
" --ftp-alternative-to-user <command>\n"
-" (FTP) If authenticating with the USER and PASS commands fails,\n"
-" send this command. When connecting to Tumbleweed's Secure\n"
-" Transport server over FTPS using a client certificate, using\n"
, stdout);
fputs(
-" \"SITE AUTH\" will tell the server to retrieve the username from\n"
+" (FTP) If authenticating with the USER and PASS commands fails,\n"
+" send this command. When connecting to Tumbleweed's Secure\n"
+" Transport server over FTPS using a client certificate, using\n"
+" \"SITE AUTH\" will tell the server to retrieve the username from\n"
" the certificate. (Added in 7.15.5)\n"
"\n"
" --ftp-skip-pasv-ip\n"
" (FTP) Tell curl to not use the IP address the server suggests in\n"
-" its response to curl's PASV command when curl connects the data\n"
-" connection. Instead curl will re-use the same IP address it\n"
-" already uses for the control connection. (Added in 7.14.2)\n"
-"\n"
, stdout);
fputs(
-" This option has no effect if PORT, EPRT or EPSV is used instead\n"
+" its response to curl's PASV command when curl connects the data\n"
+" connection. Instead curl will re-use the same IP address it\n"
+" already uses for the control connection. (Added in 7.14.2)\n"
+"\n"
+" This option has no effect if PORT, EPRT or EPSV is used instead\n"
" of PASV.\n"
"\n"
" --ftp-pret\n"
-" (FTP) Tell curl to send a PRET command before PASV (and EPSV).\n"
-" Certain FTP servers, mainly drftpd, require this non-standard\n"
-" command for directory listings as well as up and downloads in\n"
+" (FTP) Tell curl to send a PRET command before PASV (and EPSV).\n"
+, stdout);
+ fputs(
+" Certain FTP servers, mainly drftpd, require this non-standard\n"
+" command for directory listings as well as up and downloads in\n"
" PASV mode. (Added in 7.20.x)\n"
"\n"
-" --ssl (FTP, POP3, IMAP, SMTP) Try to use SSL/TLS for the connection.\n"
+" --ssl (FTP, POP3, IMAP, SMTP) Try to use SSL/TLS for the connection.\n"
+" Reverts to a non-secure connection if the server doesn't support\n"
+" SSL/TLS. See also --ftp-ssl-control and --ssl-reqd for differ-\n"
, stdout);
fputs(
-" Reverts to a non-secure connection if the server doesn't support\n"
-" SSL/TLS. See also --ftp-ssl-control and --ssl-reqd for differ-\n"
" ent levels of encryption required. (Added in 7.20.0)\n"
"\n"
-" This option was formerly known as --ftp-ssl (Added in 7.11.0)\n"
-" and that can still be used but will be removed in a future ver-\n"
+" This option was formerly known as --ftp-ssl (Added in 7.11.0)\n"
+" and that can still be used but will be removed in a future ver-\n"
" sion.\n"
"\n"
" --ftp-ssl-control\n"
+" (FTP) Require SSL/TLS for the FTP login, clear for transfer.\n"
+" Allows secure authentication, but non-encrypted data transfers\n"
, stdout);
fputs(
-" (FTP) Require SSL/TLS for the FTP login, clear for transfer.\n"
-" Allows secure authentication, but non-encrypted data transfers\n"
-" for efficiency. Fails the transfer if the server doesn't sup-\n"
+" for efficiency. Fails the transfer if the server doesn't sup-\n"
" port SSL/TLS. (Added in 7.16.0)\n"
"\n"
" --ssl-reqd\n"
-" (FTP, POP3, IMAP, SMTP) Require SSL/TLS for the connection.\n"
+" (FTP, POP3, IMAP, SMTP) Require SSL/TLS for the connection.\n"
" Terminates the connection if the server doesn't support SSL/TLS.\n"
" (Added in 7.20.0)\n"
"\n"
+" This option was formerly known as --ftp-ssl-reqd (added in\n"
+" 7.15.5) and that can still be used but will be removed in a\n"
, stdout);
fputs(
-" This option was formerly known as --ftp-ssl-reqd (added in\n"
-" 7.15.5) and that can still be used but will be removed in a\n"
" future version.\n"
"\n"
" --ftp-ssl-ccc\n"
-" (FTP) Use CCC (Clear Command Channel) Shuts down the SSL/TLS\n"
+" (FTP) Use CCC (Clear Command Channel) Shuts down the SSL/TLS\n"
" layer after authenticating. The rest of the control channel com-\n"
-" munication will be unencrypted. This allows NAT routers to fol-\n"
-, stdout);
- fputs(
+" munication will be unencrypted. This allows NAT routers to fol-\n"
" low the FTP transaction. The default mode is passive. See --ftp-\n"
" ssl-ccc-mode for other modes. (Added in 7.16.1)\n"
"\n"
" --ftp-ssl-ccc-mode [active/passive]\n"
-" (FTP) Use CCC (Clear Command Channel) Sets the CCC mode. The\n"
-" passive mode will not initiate the shutdown, but instead wait\n"
-" for the server to do it, and will not reply to the shutdown from\n"
, stdout);
fputs(
+" (FTP) Use CCC (Clear Command Channel) Sets the CCC mode. The\n"
+" passive mode will not initiate the shutdown, but instead wait\n"
+" for the server to do it, and will not reply to the shutdown from\n"
" the server. The active mode initiates the shutdown and waits for\n"
" a reply from the server. (Added in 7.16.2)\n"
"\n"
" -F/--form <name=content>\n"
-" (HTTP) This lets curl emulate a filled-in form in which a user\n"
-" has pressed the submit button. This causes curl to POST data\n"
-" using the Content-Type multipart/form-data according to RFC2388.\n"
-" This enables uploading of binary files etc. To force the 'con-\n"
+" (HTTP) This lets curl emulate a filled-in form in which a user\n"
, stdout);
fputs(
+" has pressed the submit button. This causes curl to POST data\n"
+" using the Content-Type multipart/form-data according to RFC2388.\n"
+" This enables uploading of binary files etc. To force the 'con-\n"
" tent' part to be a file, prefix the file name with an @ sign. To\n"
" just get the content part from a file, prefix the file name with\n"
-" the symbol <. The difference between @ and < is then that @\n"
-" makes a file get attached in the post as a file upload, while\n"
+" the symbol <. The difference between @ and < is then that @\n"
+, stdout);
+ fputs(
+" makes a file get attached in the post as a file upload, while\n"
" the < makes a text field and just get the contents for that text\n"
" field from a file.\n"
"\n"
-, stdout);
- fputs(
-" Example, to send your password file to the server, where 'pass-\n"
+" Example, to send your password file to the server, where 'pass-\n"
" word' is the name of the form-field to which /etc/passwd will be\n"
" the input:\n"
"\n"
" curl -F password=@/etc/passwd www.mypasswords.com\n"
"\n"
-" To read the file's content from stdin instead of a file, use -\n"
-" where the file name should've been. This goes for both @ and <\n"
-" constructs.\n"
-"\n"
, stdout);
fputs(
-" You can also tell curl what Content-Type to use by using\n"
+" To read the file's content from stdin instead of a file, use -\n"
+" where the file name should've been. This goes for both @ and <\n"
+" constructs.\n"
+"\n"
+" You can also tell curl what Content-Type to use by using\n"
" 'type=', in a manner similar to:\n"
"\n"
" curl -F \"web=@index.html;type=text/html\" url.com\n"
@@ -742,107 +743,109 @@ void hugehelp(void)
"\n"
" curl -F \"name=daniel;type=text/foo\" url.com\n"
"\n"
-" You can also explicitly change the name field of an file upload\n"
+, stdout);
+ fputs(
+" You can also explicitly change the name field of an file upload\n"
" part by setting filename=, like this:\n"
"\n"
" curl -F \"file=@localfile;filename=nameinpost\" url.com\n"
"\n"
-, stdout);
- fputs(
" See further examples and details in the MANUAL.\n"
"\n"
" This option can be used multiple times.\n"
"\n"
" --form-string <name=string>\n"
-" (HTTP) Similar to --form except that the value string for the\n"
-" named parameter is used literally. Leading '@' and '<' charac-\n"
-" ters, and the ';type=' string in the value have no special mean-\n"
-" ing. Use this in preference to --form if there's any possibility\n"
+" (HTTP) Similar to --form except that the value string for the\n"
, stdout);
fputs(
-" that the string value may accidentally trigger the '@' or '<'\n"
+" named parameter is used literally. Leading '@' and '<' charac-\n"
+" ters, and the ';type=' string in the value have no special mean-\n"
+" ing. Use this in preference to --form if there's any possibility\n"
+" that the string value may accidentally trigger the '@' or '<'\n"
" features of --form.\n"
"\n"
" -g/--globoff\n"
" This option switches off the \"URL globbing parser\". When you set\n"
-" this option, you can specify URLs that contain the letters {}[]\n"
-" without having them being interpreted by curl itself. Note that\n"
-" these letters are not normal legal URL contents but they should\n"
, stdout);
fputs(
+" this option, you can specify URLs that contain the letters {}[]\n"
+" without having them being interpreted by curl itself. Note that\n"
+" these letters are not normal legal URL contents but they should\n"
" be encoded according to the URI standard.\n"
"\n"
" -G/--get\n"
-" When used, this option will make all data specified with\n"
-" -d/--data or --data-binary to be used in a HTTP GET request\n"
-" instead of the POST request that otherwise would be used. The\n"
-" data will be appended to the URL with a '?' separator.\n"
-"\n"
-" If used in combination with -I, the POST data will instead be\n"
+" When used, this option will make all data specified with\n"
+" -d/--data or --data-binary to be used in a HTTP GET request\n"
, stdout);
fputs(
+" instead of the POST request that otherwise would be used. The\n"
+" data will be appended to the URL with a '?' separator.\n"
+"\n"
+" If used in combination with -I, the POST data will instead be\n"
" appended to the URL with a HEAD request.\n"
"\n"
-" If this option is used several times, the following occurrences\n"
-" make no difference. This is because undoing a GET doesn't make\n"
-" sense, but you should then instead enforce the alternative\n"
+" If this option is used several times, the following occurrences\n"
+" make no difference. This is because undoing a GET doesn't make\n"
+, stdout);
+ fputs(
+" sense, but you should then instead enforce the alternative\n"
" method you prefer.\n"
"\n"
" -h/--help\n"
" Usage help.\n"
"\n"
" -H/--header <header>\n"
-" (HTTP) Extra header to use when getting a web page. You may\n"
-, stdout);
- fputs(
+" (HTTP) Extra header to use when getting a web page. You may\n"
" specify any number of extra headers. Note that if you should add\n"
-" a custom header that has the same name as one of the internal\n"
-" ones curl would use, your externally set header will be used\n"
-" instead of the internal one. This allows you to make even trick-\n"
-" ier stuff than curl would normally do. You should not replace\n"
-" internally set headers without knowing perfectly well what\n"
+" a custom header that has the same name as one of the internal\n"
, stdout);
fputs(
-" you're doing. Remove an internal header by giving a replacement\n"
-" without content on the right side of the colon, as in: -H\n"
+" ones curl would use, your externally set header will be used\n"
+" instead of the internal one. This allows you to make even trick-\n"
+" ier stuff than curl would normally do. You should not replace\n"
+" internally set headers without knowing perfectly well what\n"
+" you're doing. Remove an internal header by giving a replacement\n"
+" without content on the right side of the colon, as in: -H\n"
" \"Host:\".\n"
"\n"
-" curl will make sure that each header you add/replace is sent\n"
+, stdout);
+ fputs(
+" curl will make sure that each header you add/replace is sent\n"
" with the proper end-of-line marker, you should thus not add that\n"
" as a part of the header content: do not add newlines or carriage\n"
" returns, they will only mess things up for you.\n"
"\n"
-, stdout);
- fputs(
" See also the -A/--user-agent and -e/--referer options.\n"
"\n"
-" This option can be used multiple times to add/replace/remove\n"
+" This option can be used multiple times to add/replace/remove\n"
" multiple headers.\n"
"\n"
-" --hostpubmd5 <md5>\n"
-" Pass a string containing 32 hexadecimal digits. The string\n"
-" should be the 128 bit MD5 checksum of the remote host's public\n"
-" key, curl will refuse the connection with the host unless the\n"
, stdout);
fputs(
-" md5sums match. This option is only for SCP and SFTP transfers.\n"
+" --hostpubmd5 <md5>\n"
+" Pass a string containing 32 hexadecimal digits. The string\n"
+" should be the 128 bit MD5 checksum of the remote host's public\n"
+" key, curl will refuse the connection with the host unless the\n"
+" md5sums match. This option is only for SCP and SFTP transfers.\n"
" (Added in 7.17.1)\n"
"\n"
" --ignore-content-length\n"
-" (HTTP) Ignore the Content-Length header. This is particularly\n"
-" useful for servers running Apache 1.x, which will report incor-\n"
+" (HTTP) Ignore the Content-Length header. This is particularly\n"
+, stdout);
+ fputs(
+" useful for servers running Apache 1.x, which will report incor-\n"
" rect Content-Length for files larger than 2 gigabytes.\n"
"\n"
" -i/--include\n"
-" (HTTP) Include the HTTP-header in the output. The HTTP-header\n"
-, stdout);
- fputs(
-" includes things like server-name, date of the document, HTTP-\n"
+" (HTTP) Include the HTTP-header in the output. The HTTP-header\n"
+" includes things like server-name, date of the document, HTTP-\n"
" version and more...\n"
"\n"
" --interface <name>\n"
-" Perform an operation using a specified interface. You can enter\n"
-" interface name, IP address or host name. An example could look\n"
+" Perform an operation using a specified interface. You can enter\n"
+, stdout);
+ fputs(
+" interface name, IP address or host name. An example could look\n"
" like:\n"
"\n"
" curl --interface eth0:1 http://www.netscape.com/\n"
@@ -850,139 +853,139 @@ void hugehelp(void)
" If this option is used several times, the last one will be used.\n"
"\n"
" -I/--head\n"
+" (HTTP/FTP/FILE) Fetch the HTTP-header only! HTTP-servers feature\n"
+" the command HEAD which this uses to get nothing but the header\n"
+" of a document. When used on a FTP or FILE file, curl displays\n"
, stdout);
fputs(
-" (HTTP/FTP/FILE) Fetch the HTTP-header only! HTTP-servers feature\n"
-" the command HEAD which this uses to get nothing but the header\n"
-" of a document. When used on a FTP or FILE file, curl displays\n"
" the file size and last modification time only.\n"
"\n"
" -j/--junk-session-cookies\n"
" (HTTP) When curl is told to read cookies from a given file, this\n"
-" option will make it discard all \"session cookies\". This will\n"
-, stdout);
- fputs(
-" basically have the same effect as if a new session is started.\n"
-" Typical browsers always discard session cookies when they're\n"
+" option will make it discard all \"session cookies\". This will\n"
+" basically have the same effect as if a new session is started.\n"
+" Typical browsers always discard session cookies when they're\n"
" closed down.\n"
"\n"
" -J/--remote-header-name\n"
-" (HTTP) This option tells the -O/--remote-name option to use the\n"
+, stdout);
+ fputs(
+" (HTTP) This option tells the -O/--remote-name option to use the\n"
" server-specified Content-Disposition filename instead of\n"
" extracting a filename from the URL.\n"
"\n"
" -k/--insecure\n"
+" (SSL) This option explicitly allows curl to perform \"insecure\"\n"
+" SSL connections and transfers. All SSL connections are attempted\n"
+" to be made secure by using the CA certificate bundle installed\n"
, stdout);
fputs(
-" (SSL) This option explicitly allows curl to perform \"insecure\"\n"
-" SSL connections and transfers. All SSL connections are attempted\n"
-" to be made secure by using the CA certificate bundle installed\n"
-" by default. This makes all connections considered \"insecure\"\n"
+" by default. This makes all connections considered \"insecure\"\n"
" fail unless -k/--insecure is used.\n"
"\n"
-" See this online resource for further details:\n"
+" See this online resource for further details:\n"
" http://curl.haxx.se/docs/sslcerts.html\n"
-, stdout);
- fputs(
"\n"
" --keepalive-time <seconds>\n"
-" This option sets the time a connection needs to remain idle\n"
-" before sending keepalive probes and the time between individual\n"
+" This option sets the time a connection needs to remain idle\n"
+" before sending keepalive probes and the time between individual\n"
+, stdout);
+ fputs(
" keepalive probes. It is currently effective on operating systems\n"
" offering the TCP_KEEPIDLE and TCP_KEEPINTVL socket options\n"
-" (meaning Linux, recent AIX, HP-UX and more). This option has no\n"
+" (meaning Linux, recent AIX, HP-UX and more). This option has no\n"
" effect if --no-keepalive is used. (Added in 7.18.0)\n"
"\n"
-, stdout);
- fputs(
-" If this option is used multiple times, the last occurrence sets\n"
+" If this option is used multiple times, the last occurrence sets\n"
" the amount.\n"
" --key <key>\n"
+, stdout);
+ fputs(
" (SSL/SSH) Private key file name. Allows you to provide your pri-\n"
" vate key in this separate file.\n"
"\n"
" If this option is used several times, the last one will be used.\n"
"\n"
" --key-type <type>\n"
-" (SSL) Private key file type. Specify which type your --key pro-\n"
-, stdout);
- fputs(
-" vided private key is. DER, PEM, and ENG are supported. If not\n"
+" (SSL) Private key file type. Specify which type your --key pro-\n"
+" vided private key is. DER, PEM, and ENG are supported. If not\n"
" specified, PEM is assumed.\n"
"\n"
+, stdout);
+ fputs(
" If this option is used several times, the last one will be used.\n"
"\n"
" --krb <level>\n"
-" (FTP) Enable Kerberos authentication and use. The level must be\n"
+" (FTP) Enable Kerberos authentication and use. The level must be\n"
" entered and should be one of 'clear', 'safe', 'confidential', or\n"
-" 'private'. Should you use a level that is not one of these,\n"
-, stdout);
- fputs(
+" 'private'. Should you use a level that is not one of these,\n"
" 'private' will instead be used.\n"
"\n"
-" This option requires a library built with kerberos4 or GSSAPI\n"
-" (GSS-Negotiate) support. This is not very common. Use -V/--ver-\n"
+" This option requires a library built with kerberos4 or GSSAPI\n"
+, stdout);
+ fputs(
+" (GSS-Negotiate) support. This is not very common. Use -V/--ver-\n"
" sion to see if your curl supports it.\n"
"\n"
" If this option is used several times, the last one will be used.\n"
"\n"
" -K/--config <config file>\n"
-" Specify which config file to read curl arguments from. The con-\n"
+" Specify which config file to read curl arguments from. The con-\n"
+" fig file is a text file in which command line arguments can be\n"
+" written which then will be used as if they were written on the\n"
, stdout);
fputs(
-" fig file is a text file in which command line arguments can be\n"
-" written which then will be used as if they were written on the\n"
" actual command line. Options and their parameters must be speci-\n"
-" fied on the same config file line, separated by whitespace,\n"
-" colon, the equals sign or any combination thereof (however, the\n"
-" preferred separator is the equals sign). If the parameter is to\n"
-, stdout);
- fputs(
+" fied on the same config file line, separated by whitespace,\n"
+" colon, the equals sign or any combination thereof (however, the\n"
+" preferred separator is the equals sign). If the parameter is to\n"
" contain whitespace, the parameter must be enclosed within\n"
" quotes. Within double quotes, the following escape sequences are\n"
-" available: \\\\, \\\", \\t, \\n, \\r and \\v. A backslash preceding any\n"
+, stdout);
+ fputs(
+" available: \\\\, \\\", \\t, \\n, \\r and \\v. A backslash preceding any\n"
" other letter is ignored. If the first column of a config line is\n"
-" a '#' character, the rest of the line will be treated as a com-\n"
-" ment. Only write one option per physical line in the config\n"
+" a '#' character, the rest of the line will be treated as a com-\n"
+" ment. Only write one option per physical line in the config\n"
" file.\n"
"\n"
-, stdout);
- fputs(
" Specify the filename to -K/--config as '-' to make curl read the\n"
" file from stdin.\n"
"\n"
-" Note that to be able to specify a URL in the config file, you\n"
-" need to specify it using the --url option, and not by simply\n"
-" writing the URL on its own line. So, it could look similar to\n"
+, stdout);
+ fputs(
+" Note that to be able to specify a URL in the config file, you\n"
+" need to specify it using the --url option, and not by simply\n"
+" writing the URL on its own line. So, it could look similar to\n"
" this:\n"
"\n"
" url = \"http://curl.haxx.se/docs/\"\n"
"\n"
-" Long option names can optionally be given in the config file\n"
-, stdout);
- fputs(
+" Long option names can optionally be given in the config file\n"
" without the initial double dashes.\n"
"\n"
+, stdout);
+ fputs(
" When curl is invoked, it always (unless -q is used) checks for a\n"
-" default config file and uses it if found. The default config\n"
+" default config file and uses it if found. The default config\n"
" file is checked for in the following places in this order:\n"
"\n"
-" 1) curl tries to find the \"home dir\": It first checks for the\n"
+" 1) curl tries to find the \"home dir\": It first checks for the\n"
" CURL_HOME and then the HOME environment variables. Failing that,\n"
+" it uses getpwuid() on UNIX-like systems (which returns the home\n"
, stdout);
fputs(
-" it uses getpwuid() on UNIX-like systems (which returns the home\n"
-" dir given the current user in your system). On Windows, it then\n"
+" dir given the current user in your system). On Windows, it then\n"
" checks for the APPDATA variable, or as a last resort the '%USER-\n"
" PROFILE%\\Application Data'.\n"
"\n"
-" 2) On windows, if there is no _curlrc file in the home dir, it\n"
+" 2) On windows, if there is no _curlrc file in the home dir, it\n"
" checks for one in the same dir the curl executable is placed. On\n"
-, stdout);
- fputs(
-" UNIX-like systems, it will simply try to load .curlrc from the\n"
+" UNIX-like systems, it will simply try to load .curlrc from the\n"
" determined home dir.\n"
"\n"
+, stdout);
+ fputs(
" # --- Example file ---\n"
" # this is a comment\n"
" url = \"curl.haxx.se\"\n"
@@ -993,137 +996,135 @@ void hugehelp(void)
" url = \"curl.haxx.se/docs/manpage.html\"\n"
" -O\n"
" referer = \"http://nowhereatall.com/\"\n"
-, stdout);
- fputs(
" # --- End of example file ---\n"
"\n"
-" This option can be used multiple times to load multiple config\n"
+" This option can be used multiple times to load multiple config\n"
" files.\n"
"\n"
+, stdout);
+ fputs(
" --libcurl <file>\n"
-" Append this option to any ordinary curl command line, and you\n"
-" will get a libcurl-using source code written to the file that\n"
+" Append this option to any ordinary curl command line, and you\n"
+" will get a libcurl-using source code written to the file that\n"
" does the equivalent of what your command-line operation does!\n"
"\n"
-" NOTE: this does not properly support -F and the sending of mul-\n"
-, stdout);
- fputs(
-" tipart formposts, so in those cases the output program will be\n"
+" NOTE: this does not properly support -F and the sending of mul-\n"
+" tipart formposts, so in those cases the output program will be\n"
" missing necessary calls to curl_formadd(3), and possibly more.\n"
"\n"
-" If this option is used several times, the last given file name\n"
+, stdout);
+ fputs(
+" If this option is used several times, the last given file name\n"
" will be used. (Added in 7.16.1)\n"
"\n"
" --limit-rate <speed>\n"
-" Specify the maximum transfer rate you want curl to use. This\n"
+" Specify the maximum transfer rate you want curl to use. This\n"
" feature is useful if you have a limited pipe and you'd like your\n"
-, stdout);
- fputs(
" transfer not to use your entire bandwidth.\n"
"\n"
-" The given speed is measured in bytes/second, unless a suffix is\n"
-" appended. Appending 'k' or 'K' will count the number as kilo-\n"
-" bytes, 'm' or M' makes it megabytes, while 'g' or 'G' makes it\n"
-" gigabytes. Examples: 200K, 3m and 1G.\n"
-"\n"
-" The given rate is the average speed counted during the entire\n"
+" The given speed is measured in bytes/second, unless a suffix is\n"
, stdout);
fputs(
+" appended. Appending 'k' or 'K' will count the number as kilo-\n"
+" bytes, 'm' or M' makes it megabytes, while 'g' or 'G' makes it\n"
+" gigabytes. Examples: 200K, 3m and 1G.\n"
+"\n"
+" The given rate is the average speed counted during the entire\n"
" transfer. It means that curl might use higher transfer speeds in\n"
" short bursts, but over time it uses no more than the given rate.\n"
-" If you also use the -Y/--speed-limit option, that option will\n"
+, stdout);
+ fputs(
+" If you also use the -Y/--speed-limit option, that option will\n"
" take precedence and might cripple the rate-limiting slightly, to\n"
" help keeping the speed-limit logic working.\n"
"\n"
" If this option is used several times, the last one will be used.\n"
"\n"
" -l/--list-only\n"
+" (FTP) When listing an FTP directory, this switch forces a name-\n"
+" only view. Especially useful if you want to machine-parse the\n"
, stdout);
fputs(
-" (FTP) When listing an FTP directory, this switch forces a name-\n"
-" only view. Especially useful if you want to machine-parse the\n"
-" contents of an FTP directory since the normal directory view\n"
+" contents of an FTP directory since the normal directory view\n"
" doesn't use a standard look or format.\n"
"\n"
-" This option causes an FTP NLST command to be sent. Some FTP\n"
-" servers list only files in their response to NLST; they do not\n"
-, stdout);
- fputs(
+" This option causes an FTP NLST command to be sent. Some FTP\n"
+" servers list only files in their response to NLST; they do not\n"
" include subdirectories and symbolic links.\n"
"\n"
" --local-port <num>[-num]\n"
" Set a preferred number or range of local port numbers to use for\n"
-" the connection(s). Note that port numbers by nature are a\n"
+, stdout);
+ fputs(
+" the connection(s). Note that port numbers by nature are a\n"
" scarce resource that will be busy at times so setting this range\n"
" to something too narrow might cause unnecessary connection setup\n"
" failures. (Added in 7.15.2)\n"
"\n"
" -L/--location\n"
+" (HTTP/HTTPS) If the server reports that the requested page has\n"
+" moved to a different location (indicated with a Location: header\n"
, stdout);
fputs(
-" (HTTP/HTTPS) If the server reports that the requested page has\n"
-" moved to a different location (indicated with a Location: header\n"
-" and a 3XX response code), this option will make curl redo the\n"
-" request on the new place. If used together with -i/--include or\n"
-" -I/--head, headers from all requested pages will be shown. When\n"
-" authentication is used, curl only sends its credentials to the\n"
+" and a 3XX response code), this option will make curl redo the\n"
+" request on the new place. If used together with -i/--include or\n"
+" -I/--head, headers from all requested pages will be shown. When\n"
+" authentication is used, curl only sends its credentials to the\n"
+" initial host. If a redirect takes curl to a different host, it\n"
+" won't be able to intercept the user+password. See also --loca-\n"
, stdout);
fputs(
-" initial host. If a redirect takes curl to a different host, it\n"
-" won't be able to intercept the user+password. See also --loca-\n"
-" tion-trusted on how to change this. You can limit the amount of\n"
+" tion-trusted on how to change this. You can limit the amount of\n"
" redirects to follow by using the --max-redirs option.\n"
"\n"
-" When curl follows a redirect and the request is not a plain GET\n"
+" When curl follows a redirect and the request is not a plain GET\n"
" (for example POST or PUT), it will do the following request with\n"
+" a GET if the HTTP response was 301, 302, or 303. If the response\n"
+" code was any other 3xx code, curl will re-send the following\n"
, stdout);
fputs(
-" a GET if the HTTP response was 301, 302, or 303. If the response\n"
-" code was any other 3xx code, curl will re-send the following\n"
" request using the same unmodified method.\n"
"\n"
" --location-trusted\n"
" (HTTP/HTTPS) Like -L/--location, but will allow sending the name\n"
-" + password to all hosts that the site may redirect to. This may\n"
+" + password to all hosts that the site may redirect to. This may\n"
" or may not introduce a security breach if the site redirects you\n"
-, stdout);
- fputs(
-" to a site to which you'll send your authentication info (which\n"
+" to a site to which you'll send your authentication info (which\n"
" is plaintext in the case of HTTP Basic authentication).\n"
"\n"
" --mail-rcpt <address>\n"
-" (SMTP) Specify a single address that the given mail should get\n"
-" sent to. This option can be used multiple times to specify many\n"
+, stdout);
+ fputs(
+" (SMTP) Specify a single address that the given mail should get\n"
+" sent to. This option can be used multiple times to specify many\n"
" recipients.\n"
"\n"
" (Added in 7.20.0)\n"
"\n"
" --mail-from <address>\n"
-, stdout);
- fputs(
-" (SMTP) Specify a single address that the given mail should get\n"
+" (SMTP) Specify a single address that the given mail should get\n"
" sent from.\n"
"\n"
" (Added in 7.20.0)\n"
"\n"
" --max-filesize <bytes>\n"
-" Specify the maximum size (in bytes) of a file to download. If\n"
-" the file requested is larger than this value, the transfer will\n"
-" not start and curl will return with exit code 63.\n"
-"\n"
-" NOTE: The file size is not always known prior to download, and\n"
+" Specify the maximum size (in bytes) of a file to download. If\n"
, stdout);
fputs(
+" the file requested is larger than this value, the transfer will\n"
+" not start and curl will return with exit code 63.\n"
+"\n"
+" NOTE: The file size is not always known prior to download, and\n"
" for such files this option has no effect even if the file trans-\n"
-" fer ends up being larger than this given limit. This concerns\n"
+" fer ends up being larger than this given limit. This concerns\n"
" both FTP and HTTP transfers.\n"
"\n"
" -m/--max-time <seconds>\n"
-" Maximum time in seconds that you allow the whole operation to\n"
-" take. This is useful for preventing your batch jobs from hang-\n"
-" ing for hours due to slow networks or links going down. See\n"
, stdout);
fputs(
+" Maximum time in seconds that you allow the whole operation to\n"
+" take. This is useful for preventing your batch jobs from hang-\n"
+" ing for hours due to slow networks or links going down. See\n"
" also the --connect-timeout option.\n"
"\n"
" If this option is used several times, the last one will be used.\n"
@@ -1132,205 +1133,258 @@ void hugehelp(void)
" Manual. Display the huge help text.\n"
"\n"
" -n/--netrc\n"
-" Makes curl scan the .netrc (_netrc on Windows) file in the\n"
+, stdout);
+ fputs(
+" Makes curl scan the .netrc (_netrc on Windows) file in the\n"
" user's home directory for login name and password. This is typi-\n"
-" cally used for FTP on UNIX. If used with HTTP, curl will enable\n"
+" cally used for FTP on UNIX. If used with HTTP, curl will enable\n"
+" user authentication. See netrc(4) or ftp(1) for details on the\n"
+" file format. Curl will not complain if that file doesn't have\n"
+" the right permissions (it should not be either world- or group-\n"
, stdout);
fputs(
-" user authentication. See netrc(4) or ftp(1) for details on the\n"
-" file format. Curl will not complain if that file doesn't have\n"
-" the right permissions (it should not be either world- or group-\n"
-" readable). The environment variable \"HOME\" is used to find the\n"
+" readable). The environment variable \"HOME\" is used to find the\n"
" home directory.\n"
"\n"
-" A quick and very simple example of how to setup a .netrc to\n"
-, stdout);
- fputs(
-" allow curl to FTP to the machine host.domain.com with user name\n"
+" A quick and very simple example of how to setup a .netrc to\n"
+" allow curl to FTP to the machine host.domain.com with user name\n"
" 'myself' and password 'secret' should look similar to:\n"
"\n"
" machine host.domain.com login myself password secret\n"
"\n"
" --netrc-optional\n"
-" Very similar to --netrc, but this option makes the .netrc usage\n"
+, stdout);
+ fputs(
+" Very similar to --netrc, but this option makes the .netrc usage\n"
" optional and not mandatory as the --netrc option does.\n"
"\n"
" --negotiate\n"
-" (HTTP) Enables GSS-Negotiate authentication. The GSS-Negotiate\n"
-, stdout);
- fputs(
+" (HTTP) Enables GSS-Negotiate authentication. The GSS-Negotiate\n"
" method was designed by Microsoft and is used in their web appli-\n"
-" cations. It is primarily meant as a support for Kerberos5\n"
+" cations. It is primarily meant as a support for Kerberos5\n"
" authentication but may be also used along with another authenti-\n"
+, stdout);
+ fputs(
" cation method. For more information see IETF draft draft-brezak-\n"
" spnego-http-04.txt.\n"
"\n"
-" If you want to enable Negotiate for your proxy authentication,\n"
+" If you want to enable Negotiate for your proxy authentication,\n"
" then use --proxy-negotiate.\n"
"\n"
-, stdout);
- fputs(
-" This option requires a library built with GSSAPI support. This\n"
+" This option requires a library built with GSSAPI support. This\n"
" is not very common. Use -V/--version to see if your version sup-\n"
" ports GSS-Negotiate.\n"
"\n"
-" When using this option, you must also provide a fake -u/--user\n"
-" option to activate the authentication code properly. Sending a\n"
-" '-u :' is enough as the user name and password from the -u\n"
-" option aren't actually used.\n"
-"\n"
, stdout);
fputs(
-" If this option is used several times, the following occurrences\n"
+" When using this option, you must also provide a fake -u/--user\n"
+" option to activate the authentication code properly. Sending a\n"
+" '-u :' is enough as the user name and password from the -u\n"
+" option aren't actually used.\n"
+"\n"
+" If this option is used several times, the following occurrences\n"
" make no difference.\n"
"\n"
" -N/--no-buffer\n"
" Disables the buffering of the output stream. In normal work sit-\n"
-" uations, curl will use a standard buffered output stream that\n"
+, stdout);
+ fputs(
+" uations, curl will use a standard buffered output stream that\n"
" will have the effect that it will output the data in chunks, not\n"
-" necessarily exactly when the data arrives. Using this option\n"
+" necessarily exactly when the data arrives. Using this option\n"
" will disable that buffering.\n"
"\n"
-, stdout);
- fputs(
-" Note that this is the negated option name documented. You can\n"
+" Note that this is the negated option name documented. You can\n"
" thus use --buffer to enforce the buffering.\n"
"\n"
" --no-keepalive\n"
+, stdout);
+ fputs(
" Disables the use of keepalive messages on the TCP connection, as\n"
" by default curl enables them.\n"
"\n"
-" Note that this is the negated option name documented. You can\n"
+" Note that this is the negated option name documented. You can\n"
" thus use --keepalive to enforce keepalive.\n"
"\n"
" --no-sessionid\n"
+" (SSL) Disable curl's use of SSL session-ID caching. By default\n"
+" all transfers are done using the cache. Note that while nothing\n"
, stdout);
fputs(
-" (SSL) Disable curl's use of SSL session-ID caching. By default\n"
-" all transfers are done using the cache. Note that while nothing\n"
-" should ever get hurt by attempting to reuse SSL session-IDs,\n"
+" should ever get hurt by attempting to reuse SSL session-IDs,\n"
" there seem to be broken SSL implementations in the wild that may\n"
-" require you to disable this in order for you to succeed. (Added\n"
+" require you to disable this in order for you to succeed. (Added\n"
" in 7.16.0)\n"
"\n"
-" Note that this is the negated option name documented. You can\n"
-, stdout);
- fputs(
+" Note that this is the negated option name documented. You can\n"
" thus use --sessionid to enforce session-ID caching.\n"
"\n"
" --noproxy <no-proxy-list>\n"
-" Comma-separated list of hosts which do not use a proxy, if one\n"
-" is specified. The only wildcard is a single * character, which\n"
+, stdout);
+ fputs(
+" Comma-separated list of hosts which do not use a proxy, if one\n"
+" is specified. The only wildcard is a single * character, which\n"
" matches all hosts, and effectively disables the proxy. Each name\n"
-" in this list is matched as either a domain which contains the\n"
-" hostname, or the hostname itself. For example, local.com would\n"
+" in this list is matched as either a domain which contains the\n"
+" hostname, or the hostname itself. For example, local.com would\n"
+" match local.com, local.com:80, and www.local.com, but not\n"
, stdout);
fputs(
-" match local.com, local.com:80, and www.local.com, but not\n"
" www.notlocal.com. (Added in 7.19.4).\n"
"\n"
-" --ntlm (HTTP) Enables NTLM authentication. The NTLM authentication\n"
+" --ntlm (HTTP) Enables NTLM authentication. The NTLM authentication\n"
" method was designed by Microsoft and is used by IIS web servers.\n"
-" It is a proprietary protocol, reverse-engineered by clever peo-\n"
+" It is a proprietary protocol, reverse-engineered by clever peo-\n"
" ple and implemented in curl based on their efforts. This kind of\n"
+" behavior should not be endorsed, you should encourage everyone\n"
, stdout);
fputs(
-" behavior should not be endorsed, you should encourage everyone\n"
-" who uses NTLM to switch to a public and documented authentica-\n"
+" who uses NTLM to switch to a public and documented authentica-\n"
" tion method instead, such as Digest.\n"
"\n"
-" If you want to enable NTLM for your proxy authentication, then\n"
+" If you want to enable NTLM for your proxy authentication, then\n"
" use --proxy-ntlm.\n"
"\n"
-" This option requires a library built with SSL support. Use\n"
+" This option requires a library built with SSL support. Use\n"
" -V/--version to see if your curl supports NTLM.\n"
"\n"
-, stdout);
- fputs(
-" If this option is used several times, the following occurrences\n"
+" If this option is used several times, the following occurrences\n"
" make no difference.\n"
"\n"
+, stdout);
+ fputs(
" -o/--output <file>\n"
" Write output to <file> instead of stdout. If you are using {} or\n"
-" [] to fetch multiple documents, you can use '#' followed by a\n"
-" number in the <file> specifier. That variable will be replaced\n"
+" [] to fetch multiple documents, you can use '#' followed by a\n"
+" number in the <file> specifier. That variable will be replaced\n"
" with the current string for the URL being fetched. Like in:\n"
"\n"
-, stdout);
- fputs(
" curl http://{one,two}.site.com -o \"file_#1.txt\"\n"
"\n"
" or use several variables like:\n"
"\n"
+, stdout);
+ fputs(
" curl http://{site,host}.host[1-5].com -o \"#1_#2\"\n"
"\n"
-" You may use this option as many times as the number of URLs you\n"
+" You may use this option as many times as the number of URLs you\n"
" have.\n"
"\n"
-" See also the --create-dirs option to create the local directo-\n"
-" ries dynamically. Specifying the output as '-' (a single dash)\n"
+" See also the --create-dirs option to create the local directo-\n"
+" ries dynamically. Specifying the output as '-' (a single dash)\n"
" will force the output to be done to stdout.\n"
"\n"
+" -O/--remote-name\n"
+" Write output to a local file named like the remote file we get.\n"
, stdout);
fputs(
-" -O/--remote-name\n"
-" Write output to a local file named like the remote file we get.\n"
-" (Only the file part of the remote file is used, the path is cut\n"
+" (Only the file part of the remote file is used, the path is cut\n"
" off.)\n"
"\n"
-" The remote file name to use for saving is extracted from the\n"
+" The remote file name to use for saving is extracted from the\n"
" given URL, nothing else.\n"
"\n"
-" You may use this option as many times as the number of URLs you\n"
+" You may use this option as many times as the number of URLs you\n"
" have.\n"
"\n"
" --remote-name-all\n"
+" This option changes the default action for all given URLs to be\n"
, stdout);
fputs(
-" This option changes the default action for all given URLs to be\n"
-" dealt with as if -O/--remote-name were used for each one. So if\n"
+" dealt with as if -O/--remote-name were used for each one. So if\n"
" you want to disable that for a specific URL after --remote-name-\n"
-" all has been used, you must use \"-o -\" or --no-remote-name.\n"
+" all has been used, you must use \"-o -\" or --no-remote-name.\n"
" (Added in 7.19.0)\n"
"\n"
" --pass <phrase>\n"
" (SSL/SSH) Passphrase for the private key\n"
"\n"
-, stdout);
- fputs(
" If this option is used several times, the last one will be used.\n"
"\n"
" --post301\n"
-" Tells curl to respect RFC 2616/10.3.2 and not convert POST\n"
-" requests into GET requests when following a 301 redirection. The\n"
-" non-RFC behaviour is ubiquitous in web browsers, so curl does\n"
-" the conversion by default to maintain consistency. However, a\n"
-" server may require a POST to remain a POST after such a redi-\n"
, stdout);
fputs(
+" Tells curl to respect RFC 2616/10.3.2 and not convert POST\n"
+" requests into GET requests when following a 301 redirection. The\n"
+" non-RFC behaviour is ubiquitous in web browsers, so curl does\n"
+" the conversion by default to maintain consistency. However, a\n"
+" server may require a POST to remain a POST after such a redi-\n"
" rection. This option is meaningful only when using -L/--location\n"
+, stdout);
+ fputs(
" (Added in 7.17.1)\n"
"\n"
" --post302\n"
-" Tells curl to respect RFC 2616/10.3.2 and not convert POST\n"
+" Tells curl to respect RFC 2616/10.3.2 and not convert POST\n"
" requests into GET requests when following a 302 redirection. The\n"
-" non-RFC behaviour is ubiquitous in web browsers, so curl does\n"
-" the conversion by default to maintain consistency. However, a\n"
+" non-RFC behaviour is ubiquitous in web browsers, so curl does\n"
+" the conversion by default to maintain consistency. However, a\n"
+" server may require a POST to remain a POST after such a redi-\n"
, stdout);
fputs(
-" server may require a POST to remain a POST after such a redi-\n"
" rection. This option is meaningful only when using -L/--location\n"
" (Added in 7.19.1)\n"
"\n"
+" --proto <protocols>\n"
+" Tells curl to use the listed protocols for its initial\n"
+" retrieval. Protocols are evaluated left to right, are comma sep-\n"
+" arated, and are each a protocol name or 'all', optionally pre-\n"
+" fixed by zero or more modifiers. Available modifiers are:\n"
+"\n"
+, stdout);
+ fputs(
+" + Permit this protocol in addition to protocols already permit-\n"
+" ted (this is the default if no modifier is used).\n"
+"\n"
+" - Deny this protocol, removing it from the list of protocols\n"
+" already permitted.\n"
+"\n"
+" = Permit only this protocol (ignoring the list already permit-\n"
+" ted), though subject to later modification by subsequent\n"
+" entries in the comma separated list.\n"
+"\n"
+, stdout);
+ fputs(
+" For example:\n"
+"\n"
+" --proto -ftps uses the default protocols, but disables ftps\n"
+"\n"
+" --proto -all,https,+http\n"
+" only enables http and https\n"
+"\n"
+" --proto =http,https\n"
+" also only enables http and https\n"
+"\n"
+" Unknown protocols produce a warning. This allows scripts to\n"
+" safely rely on being able to disable potentially dangerous pro-\n"
+, stdout);
+ fputs(
+" tocols, without relying upon support for that protocol being\n"
+" built into curl to avoid an error.\n"
+"\n"
+" This option can be used multiple times, in which case the effect\n"
+" is the same as concatenating the protocols into one instance of\n"
+" the option.\n"
+"\n"
+" (Added in 7.20.2)\n"
+"\n"
+" --proto-redir <protocols>\n"
+" Tells curl to use the listed protocols after a redirect. See\n"
+, stdout);
+ fputs(
+" --proto for how protocols are represented.\n"
+"\n"
+" (Added in 7.20.2)\n"
+"\n"
" --proxy-anyauth\n"
" Tells curl to pick a suitable authentication method when commu-\n"
" nicating with the given proxy. This might cause an extra\n"
" request/response round-trip. (Added in 7.13.2)\n"
"\n"
" --proxy-basic\n"
+" Tells curl to use HTTP Basic authentication when communicating\n"
, stdout);
fputs(
-" Tells curl to use HTTP Basic authentication when communicating\n"
" with the given proxy. Use --basic for enabling HTTP Basic with a\n"
" remote host. Basic is the default authentication method curl\n"
" uses with proxies.\n"
@@ -1340,9 +1394,9 @@ void hugehelp(void)
" with the given proxy. Use --digest for enabling HTTP Digest with\n"
" a remote host.\n"
"\n"
+" --proxy-negotiate\n"
, stdout);
fputs(
-" --proxy-negotiate\n"
" Tells curl to use HTTP Negotiate authentication when communicat-\n"
" ing with the given proxy. Use --negotiate for enabling HTTP\n"
" Negotiate with a remote host. (Added in 7.17.1)\n"
@@ -3543,7 +3597,7 @@ void hugehelp(void)
#else
/*
* NEVER EVER edit this manually, fix the mkhelp.pl script instead!
- * Generation time: Sun Mar 28 23:35:15 2010
+ * Generation time: Wed Oct 6 19:13:33 2010
*/
#include "setup.h"
#ifdef USE_MANUAL
@@ -3553,3366 +3607,3415 @@ void hugehelp(void)
#include <zlib.h>
static const unsigned char hugehelpgz[] = {
/* This mumbo-jumbo is the huge help text compressed with gzip.
- Thanks to this operation, the size of this data shrunk from 130818
- to 40275 bytes. You can disable the use of compressed help
+ Thanks to this operation, the size of this data shrunk from 132605
+ to 40864 bytes. You can disable the use of compressed help
texts by NOT passing -c to the mkhelp.pl tool. */
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0xed, 0xbd,
- 0x7b, 0x5b, 0x23, 0xd7, 0xb1, 0x2e, 0xfe, 0x3f, 0x9f, 0xa2, 0x23, 0xff,
- 0x12, 0x41, 0x22, 0x89, 0xcb, 0x5c, 0xec, 0x21, 0x33, 0xde, 0xc6, 0xc0,
- 0xd8, 0x6c, 0x33, 0x03, 0x07, 0x31, 0xbe, 0x1c, 0xc7, 0xcf, 0x3c, 0x2d,
- 0xa9, 0x81, 0x0e, 0x92, 0x5a, 0xe9, 0x6e, 0x01, 0x72, 0x76, 0xf6, 0x67,
- 0x3f, 0x55, 0x6f, 0x55, 0xad, 0xb5, 0xfa, 0x22, 0x66, 0x9c, 0xd8, 0x39,
- 0xbf, 0x73, 0x9e, 0x93, 0xbd, 0x3d, 0x80, 0xd4, 0xbd, 0xae, 0xb5, 0x6a,
- 0xd5, 0xf5, 0xad, 0x28, 0xfa, 0xd0, 0xff, 0xde, 0xe3, 0xbf, 0xf7, 0xf4,
- 0x3f, 0xfa, 0xb9, 0x11, 0x45, 0xe7, 0x79, 0xf6, 0xd7, 0x64, 0x5c, 0xb6,
- 0x3f, 0xfb, 0xfe, 0xfd, 0x7f, 0x45, 0xf2, 0x7f, 0xf4, 0xce, 0x5f, 0xe8,
- 0xe7, 0xc6, 0xa3, 0x6d, 0x6f, 0x47, 0xfe, 0x85, 0xff, 0x7a, 0xbf, 0x15,
- 0x7d, 0xe8, 0x85, 0xff, 0x8a, 0x36, 0xf1, 0xc2, 0x7b, 0xed, 0xe1, 0x25,
- 0xff, 0xfe, 0xfe, 0xfd, 0xe3, 0x9d, 0xfc, 0x85, 0x47, 0xc5, 0xff, 0x6c,
- 0xf3, 0x7b, 0x7f, 0x79, 0xcf, 0xbf, 0xd2, 0x27, 0x1b, 0x1b, 0x6f, 0x0f,
- 0xde, 0x1c, 0xdb, 0xab, 0xe3, 0x65, 0x3e, 0x8d, 0xfa, 0x51, 0x99, 0xc7,
- 0xf3, 0xe2, 0x2a, 0xc9, 0xa3, 0x38, 0x7a, 0x77, 0x71, 0xba, 0xb1, 0x31,
- 0xfc, 0xe1, 0xed, 0xd9, 0xf9, 0xf0, 0x64, 0x58, 0x79, 0xec, 0xc7, 0x6c,
- 0x51, 0xa6, 0xd9, 0xbc, 0xf8, 0x29, 0xfa, 0x91, 0x1e, 0x1a, 0x0c, 0x06,
- 0x3f, 0x6d, 0x6c, 0x1c, 0x1d, 0x0f, 0x0f, 0x2f, 0x4e, 0xce, 0x2f, 0x4f,
- 0xce, 0xde, 0x56, 0x9e, 0x8d, 0xd2, 0x22, 0xa2, 0xc6, 0xca, 0x2c, 0x9b,
- 0xd2, 0x3f, 0xbe, 0xfd, 0x49, 0x5c, 0xc6, 0xd1, 0x55, 0x9e, 0xcd, 0xa2,
- 0x2c, 0xe7, 0x2f, 0xe2, 0xa8, 0x48, 0xf2, 0xbb, 0x24, 0xef, 0x45, 0xcb,
- 0x22, 0x9d, 0x5f, 0x47, 0xd9, 0x3c, 0x89, 0xb2, 0xab, 0xa8, 0xbc, 0x49,
- 0xac, 0xb9, 0x62, 0xb9, 0x58, 0x64, 0x79, 0x99, 0x4c, 0xa2, 0x45, 0x9e,
- 0x95, 0xd9, 0x38, 0x9b, 0x16, 0xd1, 0xe6, 0xd7, 0x97, 0x97, 0xe7, 0xbd,
- 0x88, 0xff, 0x1d, 0xf6, 0xa2, 0xd7, 0xfc, 0xfb, 0x6b, 0xfc, 0x1a, 0x0d,
- 0x0f, 0xcf, 0xf9, 0x5f, 0x7c, 0x14, 0x5d, 0xca, 0x8f, 0xa3, 0x93, 0xc3,
- 0xcb, 0x9e, 0x35, 0x77, 0x79, 0x7c, 0xfa, 0xf6, 0xf8, 0x92, 0x3e, 0x3d,
- 0x3d, 0x3a, 0x38, 0x8f, 0x78, 0x14, 0xd1, 0xeb, 0x93, 0xd3, 0xe3, 0xad,
- 0x01, 0x7d, 0x75, 0x93, 0x44, 0xe3, 0x6c, 0x36, 0x8b, 0xe7, 0x13, 0x1e,
- 0xfe, 0x24, 0x29, 0xd2, 0xeb, 0x39, 0xf5, 0x4b, 0xc3, 0xbc, 0xcf, 0xf2,
- 0xdb, 0xe8, 0x3e, 0x2d, 0x6f, 0xb2, 0x65, 0x49, 0x23, 0x4d, 0x72, 0x6b,
- 0x2e, 0x9d, 0x97, 0x49, 0x1e, 0x8f, 0x79, 0x5d, 0x06, 0x1b, 0x95, 0x15,
- 0xc8, 0xae, 0x68, 0xbe, 0x05, 0x4d, 0x70, 0xb4, 0x2c, 0xa6, 0x59, 0x3c,
- 0xe1, 0x69, 0xd1, 0x9b, 0x57, 0x4b, 0x5a, 0x90, 0x3c, 0x1d, 0xdf, 0x16,
- 0xd1, 0x34, 0xbd, 0x4d, 0x78, 0x52, 0x0f, 0x2b, 0x9b, 0x64, 0x0f, 0x6d,
- 0x47, 0xf1, 0x92, 0xe6, 0x3f, 0xef, 0x5b, 0x73, 0x65, 0x3a, 0x8e, 0xb9,
- 0x03, 0x1a, 0x34, 0x4d, 0x28, 0x5a, 0x2e, 0xb8, 0x39, 0x99, 0x7d, 0xb4,
- 0xc8, 0x0a, 0x7a, 0x6b, 0x38, 0x3c, 0xa5, 0x91, 0xcf, 0xe7, 0x09, 0x06,
- 0x52, 0xf4, 0xe8, 0x8f, 0xec, 0x36, 0x4d, 0xe8, 0x97, 0xab, 0x74, 0x9a,
- 0xc8, 0xea, 0xbb, 0xe6, 0x78, 0x1b, 0xf2, 0xa4, 0x58, 0xce, 0x92, 0x88,
- 0x67, 0x3a, 0xcb, 0xf2, 0x64, 0x10, 0x1d, 0x14, 0xd1, 0x2a, 0x5b, 0xd2,
- 0x14, 0xa7, 0x53, 0xda, 0x91, 0x24, 0x1a, 0x25, 0xd3, 0xec, 0xbe, 0xc7,
- 0xfb, 0x10, 0xcd, 0x97, 0xb3, 0x11, 0xbd, 0x42, 0xc3, 0xbf, 0x4a, 0xe2,
- 0x72, 0x49, 0xaf, 0xe2, 0x31, 0x6b, 0x6e, 0x16, 0xd3, 0x2c, 0xe8, 0xdd,
- 0x3c, 0xba, 0x49, 0x68, 0x96, 0xc5, 0x22, 0x9d, 0xff, 0x6e, 0xa3, 0x49,
- 0x0b, 0x8b, 0xec, 0x3e, 0xc9, 0x69, 0x31, 0xa3, 0xd1, 0x2a, 0xa2, 0x99,
- 0x8f, 0xe4, 0x9b, 0x2b, 0x5e, 0xff, 0x78, 0x3a, 0x75, 0x04, 0xd2, 0xcf,
- 0x93, 0x69, 0xcc, 0x9b, 0x6d, 0x7d, 0x0d, 0xa2, 0x61, 0xe2, 0x68, 0x41,
- 0xdf, 0xdb, 0x7c, 0xb2, 0x85, 0x37, 0x27, 0x49, 0x19, 0xa7, 0xd3, 0x82,
- 0x16, 0x9e, 0x89, 0xd6, 0x36, 0x98, 0x86, 0x4c, 0x7f, 0x46, 0xc5, 0x6a,
- 0x5e, 0xc6, 0x0f, 0xdc, 0xb7, 0xd1, 0x4d, 0x7f, 0x92, 0x2c, 0x92, 0xf9,
- 0x24, 0x99, 0x97, 0x83, 0xe8, 0x87, 0x6c, 0xd9, 0xa5, 0x6e, 0xaf, 0x52,
- 0x5a, 0x81, 0x38, 0xd2, 0x96, 0x78, 0x78, 0xb4, 0xeb, 0xe3, 0x3c, 0x5d,
- 0x04, 0x8b, 0x9f, 0xcd, 0x69, 0x97, 0xa3, 0x8b, 0xd7, 0x87, 0xd1, 0x93,
- 0x17, 0x9f, 0x3d, 0xf7, 0xbb, 0x4c, 0x4d, 0xd0, 0x04, 0xe3, 0x39, 0x91,
- 0xe8, 0x22, 0x19, 0xa7, 0x57, 0x34, 0xaf, 0xd9, 0x72, 0x5a, 0xa6, 0x0b,
- 0x5a, 0x71, 0x1e, 0x41, 0xc1, 0xc4, 0xb5, 0x88, 0xf3, 0xb2, 0xe0, 0xb5,
- 0xc3, 0x07, 0x34, 0xf7, 0xfb, 0x3c, 0x2d, 0x99, 0xd0, 0xf9, 0x0b, 0x5a,
- 0xe9, 0xb2, 0xb0, 0xe6, 0x98, 0xba, 0xa8, 0x9f, 0x11, 0x51, 0x13, 0xad,
- 0x70, 0x5c, 0x50, 0xa7, 0xfb, 0xae, 0xaf, 0xe8, 0xa6, 0x2c, 0x17, 0xfb,
- 0xdb, 0xdb, 0x45, 0x5a, 0x26, 0x83, 0xbf, 0xd3, 0x21, 0xe9, 0x95, 0xf7,
- 0x59, 0xaf, 0xbc, 0xc9, 0x93, 0xe4, 0x1f, 0x03, 0xa2, 0x59, 0xf7, 0x20,
- 0x75, 0xc9, 0xfb, 0xc8, 0xc3, 0xba, 0x4e, 0xb8, 0x83, 0xbf, 0x2d, 0x93,
- 0x39, 0x37, 0x48, 0x43, 0x88, 0xa7, 0x8b, 0x9b, 0x98, 0x76, 0x33, 0x21,
- 0xf2, 0xe3, 0x63, 0x47, 0x04, 0xc2, 0x23, 0x92, 0x83, 0xf7, 0xe3, 0x4f,
- 0x8d, 0x3e, 0xaf, 0xd0, 0x25, 0xfd, 0x3b, 0xd0, 0x97, 0x62, 0x5a, 0x6b,
- 0xea, 0x6c, 0x9b, 0x89, 0xea, 0xc7, 0xdd, 0xfe, 0xee, 0xce, 0xce, 0x4f,
- 0x83, 0xf2, 0xa1, 0xfc, 0xc8, 0x17, 0x76, 0x76, 0xfc, 0x2b, 0xfc, 0xf4,
- 0x26, 0xcf, 0x38, 0x9a, 0x12, 0xd1, 0x70, 0xff, 0x3f, 0x27, 0x79, 0x56,
- 0x6c, 0xb5, 0x34, 0x35, 0x4d, 0x4a, 0x3a, 0x62, 0x41, 0x3b, 0x71, 0xff,
- 0x67, 0xe9, 0xd6, 0x1e, 0x7e, 0x9b, 0x45, 0xf3, 0xa4, 0xc0, 0xaa, 0x0a,
- 0xeb, 0x08, 0xa6, 0x4d, 0xdb, 0xef, 0x19, 0x48, 0x5c, 0xe2, 0xdb, 0x59,
- 0x36, 0x23, 0x1a, 0xe8, 0xd1, 0xc1, 0x2c, 0xdd, 0x62, 0xd1, 0xb9, 0x73,
- 0x0c, 0x27, 0x21, 0x7e, 0x14, 0x4f, 0x99, 0x15, 0x15, 0xd4, 0x30, 0x0d,
- 0x96, 0x18, 0x40, 0x12, 0x8f, 0x6f, 0xa2, 0x8c, 0xde, 0xce, 0x9b, 0x9b,
- 0x12, 0xcf, 0x57, 0x83, 0x2c, 0xbf, 0xde, 0x8e, 0xf3, 0xf1, 0x4d, 0x7a,
- 0x47, 0x2b, 0xf3, 0xe2, 0xc5, 0xf3, 0x3e, 0xfd, 0xf3, 0xe2, 0xa7, 0xed,
- 0xbb, 0x6c, 0x4a, 0x0b, 0xf5, 0xf4, 0xa7, 0x6d, 0xde, 0xee, 0xbf, 0xc7,
- 0xbd, 0x51, 0x6f, 0xfc, 0x8f, 0xc1, 0x4d, 0x39, 0x9b, 0x3e, 0x46, 0x45,
- 0xd4, 0x5e, 0x14, 0xcf, 0xb2, 0xe5, 0xbc, 0x74, 0x84, 0x43, 0x34, 0x58,
- 0x06, 0xdc, 0x69, 0x9a, 0xce, 0xe9, 0xcc, 0x12, 0xa5, 0xaf, 0xe4, 0xc4,
- 0x8e, 0x12, 0x7f, 0xb8, 0xcb, 0xf1, 0x0d, 0x4d, 0x95, 0x28, 0x29, 0xd6,
- 0x65, 0x28, 0x53, 0x9a, 0x0c, 0xbd, 0x36, 0xa7, 0x43, 0x9c, 0x4a, 0x3b,
- 0xd2, 0x55, 0x4a, 0xcf, 0x65, 0xf9, 0x24, 0xc9, 0x3d, 0x4d, 0x0f, 0x53,
- 0x5a, 0x35, 0x39, 0xb5, 0x9f, 0x0e, 0x76, 0x9f, 0x0d, 0x76, 0xdd, 0x02,
- 0xd1, 0x56, 0x66, 0x6e, 0x88, 0xd4, 0x74, 0x99, 0x2c, 0x68, 0x38, 0x4b,
- 0x66, 0x7f, 0x72, 0x8a, 0xb9, 0xdd, 0x88, 0x4e, 0xf1, 0x35, 0xb1, 0x1d,
- 0xb7, 0x94, 0xc4, 0xf9, 0x6f, 0xe2, 0xb2, 0x42, 0x92, 0xbc, 0xba, 0xab,
- 0xe8, 0x2d, 0x6d, 0xbd, 0x31, 0x96, 0x3c, 0x92, 0x3d, 0x6e, 0xae, 0xec,
- 0xfd, 0xfd, 0xfd, 0x7a, 0xda, 0xdb, 0xdf, 0xad, 0x91, 0x5f, 0xf0, 0x52,
- 0x1b, 0xd1, 0xec, 0xef, 0x55, 0xc9, 0xe6, 0xe4, 0x2a, 0xc2, 0xc0, 0xfc,
- 0xc2, 0x33, 0xdb, 0x70, 0x5c, 0xde, 0xb8, 0x06, 0xb5, 0x48, 0xbf, 0x27,
- 0x57, 0xe9, 0x43, 0x4f, 0x16, 0x06, 0x2b, 0x1e, 0x53, 0xfb, 0xb3, 0x05,
- 0x93, 0x86, 0x35, 0x77, 0xbd, 0x4c, 0x0a, 0xe2, 0x8c, 0x3c, 0x5d, 0x7b,
- 0x15, 0xcd, 0xcf, 0xd2, 0xeb, 0x9b, 0x32, 0xba, 0x8f, 0x99, 0xeb, 0x9c,
- 0x94, 0xf2, 0x36, 0xb3, 0x77, 0xe2, 0x34, 0x57, 0x31, 0xf1, 0x8b, 0x88,
- 0xc9, 0x4b, 0x98, 0x39, 0x53, 0xa4, 0xe3, 0x3b, 0xb4, 0x48, 0x42, 0x70,
- 0x51, 0x70, 0xf1, 0x8d, 0xe2, 0x82, 0x37, 0x6d, 0x4e, 0x84, 0x51, 0xd2,
- 0x0d, 0xb1, 0xe4, 0xbf, 0x6e, 0xe8, 0x0a, 0x88, 0xe6, 0xf1, 0x2c, 0xd1,
- 0x61, 0x32, 0xcf, 0x7c, 0x4d, 0x8b, 0x9a, 0x3c, 0xc4, 0x33, 0xc7, 0xc6,
- 0x88, 0x29, 0xf5, 0xb0, 0x4f, 0xee, 0x69, 0x3a, 0x18, 0x25, 0x11, 0x25,
- 0x9f, 0x1a, 0x1c, 0xc4, 0x0e, 0x1f, 0xb6, 0x4e, 0x38, 0xc5, 0x02, 0x77,
- 0x04, 0x96, 0x88, 0x87, 0x1f, 0x05, 0x93, 0xa5, 0x25, 0x8b, 0x6f, 0xf9,
- 0x36, 0xaa, 0x5d, 0x7a, 0xf2, 0x66, 0x34, 0xa1, 0x19, 0xa5, 0xc4, 0xf7,
- 0x46, 0x74, 0x2c, 0x79, 0x7a, 0x34, 0x4e, 0x59, 0x19, 0x6e, 0x6c, 0x41,
- 0x0d, 0xf3, 0x87, 0x69, 0xc9, 0x1c, 0x07, 0x02, 0x07, 0x56, 0x86, 0x8e,
- 0xea, 0x3c, 0x0b, 0xe7, 0xcf, 0x43, 0xa3, 0xe7, 0xee, 0xe2, 0x69, 0x4a,
- 0x62, 0x43, 0xe2, 0x5e, 0x00, 0x67, 0x1f, 0xf3, 0xad, 0x38, 0x9d, 0xae,
- 0x88, 0x08, 0xf3, 0x9c, 0xe5, 0x32, 0xde, 0x3c, 0xe2, 0x66, 0x7c, 0x78,
- 0xa2, 0x59, 0x42, 0xb7, 0x49, 0x65, 0x39, 0x53, 0xe6, 0x6d, 0x44, 0xb4,
- 0x74, 0x43, 0x81, 0xfe, 0xe8, 0x26, 0xc1, 0x21, 0xc7, 0xd4, 0x31, 0x34,
- 0x6e, 0x7d, 0x3c, 0x4e, 0x16, 0x65, 0xe1, 0xe7, 0x74, 0xd8, 0xb2, 0xdf,
- 0x74, 0x77, 0xf2, 0xba, 0x87, 0xf7, 0x2d, 0x16, 0xd6, 0xf1, 0x7e, 0x7f,
- 0xe5, 0xb2, 0x00, 0xd0, 0xa3, 0x43, 0xe0, 0xe6, 0xc4, 0xfd, 0xd0, 0x19,
- 0xc0, 0xa2, 0xcf, 0x78, 0xa4, 0xfc, 0x6c, 0x21, 0xf2, 0x10, 0xce, 0x25,
- 0xef, 0xa2, 0x08, 0x44, 0xd2, 0x2d, 0x2d, 0x08, 0x2f, 0xa6, 0xbf, 0x57,
- 0xa8, 0x57, 0xb7, 0xa7, 0xdc, 0x7d, 0x41, 0xb2, 0x24, 0x31, 0xf5, 0x49,
- 0x71, 0x43, 0xd7, 0x70, 0xc1, 0x3c, 0x81, 0x67, 0x3a, 0x23, 0x8a, 0xb9,
- 0xe3, 0x1d, 0x5e, 0x24, 0xc9, 0x64, 0x10, 0x9d, 0x5d, 0xf1, 0x51, 0xcd,
- 0x69, 0xd0, 0x25, 0xbe, 0x66, 0x7e, 0x42, 0x2b, 0x37, 0x81, 0xb0, 0x35,
- 0x77, 0xac, 0x03, 0x63, 0x09, 0x58, 0x03, 0x58, 0x08, 0x0d, 0x75, 0x5a,
- 0x65, 0x3c, 0x90, 0x1a, 0xf8, 0x38, 0xf3, 0xe0, 0x68, 0x8b, 0xa3, 0x08,
- 0x64, 0x48, 0xbf, 0x95, 0xf7, 0x49, 0x32, 0xf7, 0x6c, 0x94, 0x78, 0x1e,
- 0x6f, 0x1b, 0x08, 0x23, 0x9d, 0xdf, 0x65, 0x3c, 0xc0, 0x8d, 0x8d, 0xf3,
- 0x8b, 0xb3, 0xaf, 0x2e, 0x8e, 0x87, 0xc3, 0xe8, 0xcd, 0xf1, 0xe5, 0xf1,
- 0x45, 0x95, 0x7a, 0xe6, 0x59, 0x3e, 0xc3, 0xa6, 0x46, 0x93, 0xb4, 0x58,
- 0x4c, 0xe3, 0x15, 0x6f, 0x37, 0xcd, 0xe5, 0x3a, 0xe7, 0xb3, 0x35, 0x4b,
- 0x98, 0xd9, 0x4c, 0x96, 0x39, 0x38, 0xfd, 0x82, 0xf6, 0x4f, 0xa5, 0x1d,
- 0xba, 0xc4, 0x21, 0x22, 0xcd, 0xaf, 0xfd, 0x4a, 0x27, 0x01, 0x0b, 0xb5,
- 0xcd, 0x60, 0xf9, 0x83, 0x05, 0xd0, 0x5e, 0xe4, 0x05, 0x52, 0x59, 0x23,
- 0x16, 0x56, 0x79, 0x56, 0x7c, 0x8d, 0xcc, 0x20, 0x7f, 0xd0, 0xc5, 0x3f,
- 0xf3, 0x72, 0x47, 0x72, 0x45, 0xf7, 0x05, 0xb1, 0x56, 0x4f, 0x1a, 0x5f,
- 0x93, 0x3c, 0x03, 0xb9, 0x95, 0x97, 0x68, 0x9c, 0xe8, 0x0c, 0xdc, 0xb0,
- 0xb1, 0xd0, 0x10, 0x76, 0x59, 0xfa, 0xa5, 0xd1, 0xd0, 0xd0, 0x67, 0xe9,
- 0x9c, 0x28, 0x8e, 0x68, 0x54, 0x4f, 0x3e, 0x0d, 0xfc, 0xca, 0x9a, 0xe3,
- 0x83, 0x21, 0x6b, 0x24, 0x0d, 0xd1, 0x5b, 0xb4, 0xef, 0xc4, 0x32, 0xdd,
- 0x3c, 0x31, 0xc0, 0x14, 0xc7, 0x24, 0x1e, 0x31, 0x83, 0x62, 0xb1, 0x94,
- 0x84, 0x89, 0x24, 0xec, 0xc6, 0xcd, 0x5f, 0x7b, 0xeb, 0xf1, 0x39, 0xe4,
- 0x51, 0xc5, 0x23, 0xde, 0x5c, 0x1e, 0x48, 0x6d, 0x39, 0xe9, 0x44, 0x81,
- 0xcb, 0xdc, 0xa7, 0x05, 0x4e, 0xd8, 0x7d, 0xb6, 0x9c, 0x92, 0x50, 0xc8,
- 0x0f, 0x2c, 0x17, 0xe1, 0x72, 0x52, 0x97, 0x0b, 0xea, 0x75, 0x96, 0x3e,
- 0x40, 0x7c, 0xa9, 0xb5, 0x42, 0x63, 0xa3, 0x3f, 0x17, 0xb4, 0x1d, 0x32,
- 0x9e, 0x41, 0xc8, 0x66, 0x21, 0x59, 0x32, 0x07, 0x69, 0x6c, 0x26, 0x1f,
- 0x1c, 0xb0, 0xbe, 0xf3, 0xb3, 0xe1, 0x25, 0xdf, 0x04, 0xe7, 0xef, 0x2e,
- 0xa9, 0x21, 0xba, 0xb6, 0x8a, 0x92, 0x36, 0x96, 0x5f, 0x9c, 0x27, 0x10,
- 0xc1, 0xad, 0x39, 0xda, 0xc3, 0x14, 0xe7, 0x5d, 0x2f, 0x1c, 0xeb, 0xd4,
- 0xc6, 0x07, 0x9d, 0x82, 0x49, 0xd9, 0x34, 0x8a, 0xe2, 0x26, 0xa1, 0x83,
- 0xe4, 0x5e, 0xdb, 0xfc, 0x7c, 0xab, 0x17, 0xf5, 0x5d, 0x73, 0x3f, 0xf2,
- 0xa3, 0x3f, 0x71, 0xcf, 0x45, 0x3a, 0x4b, 0xa7, 0x71, 0x70, 0x17, 0x3a,
- 0x96, 0xe4, 0x8f, 0xe6, 0x98, 0xd8, 0x2f, 0xc6, 0xec, 0xe5, 0x70, 0x5e,
- 0x40, 0x9c, 0x6b, 0xbf, 0x51, 0x93, 0x2c, 0x91, 0xf7, 0x58, 0x18, 0x76,
- 0x1c, 0x88, 0xb7, 0x8c, 0x8f, 0x7c, 0x65, 0x99, 0xea, 0xd4, 0xd1, 0x58,
- 0x36, 0x66, 0xe9, 0x50, 0xcb, 0xdc, 0xc2, 0x75, 0x46, 0x71, 0xde, 0x71,
- 0xcc, 0x4c, 0x05, 0x9e, 0x3c, 0xb9, 0x5e, 0xd2, 0xe0, 0x65, 0x55, 0x69,
- 0x7e, 0x9f, 0xf0, 0xd0, 0x59, 0x28, 0x77, 0x87, 0x9b, 0xa4, 0xbd, 0xf9,
- 0x64, 0xb0, 0x71, 0x06, 0x55, 0xcd, 0xe9, 0x75, 0x27, 0x7c, 0x27, 0xcf,
- 0x99, 0x13, 0xf6, 0x20, 0x86, 0x8f, 0x48, 0x5f, 0x4b, 0x40, 0x75, 0xc2,
- 0xd8, 0xe2, 0x3c, 0x89, 0x92, 0x39, 0x13, 0xcf, 0x44, 0x58, 0x65, 0xbf,
- 0x2f, 0x5f, 0x61, 0xc7, 0x57, 0x74, 0x9d, 0xc7, 0xd7, 0x71, 0xea, 0xce,
- 0xbc, 0x12, 0xda, 0x24, 0xb2, 0x87, 0xe7, 0x99, 0x3e, 0xcf, 0x9c, 0x89,
- 0x99, 0xac, 0x6e, 0xea, 0x12, 0xbc, 0x28, 0xe1, 0x3b, 0x8a, 0xf6, 0x04,
- 0x6b, 0xab, 0xed, 0xf2, 0xd5, 0x64, 0xcd, 0x8d, 0x70, 0x0d, 0xf3, 0x9d,
- 0x06, 0xca, 0xc4, 0x2d, 0x45, 0x2d, 0x76, 0x06, 0xfe, 0xf4, 0x41, 0xa0,
- 0x49, 0x59, 0x97, 0xa2, 0x9b, 0xe6, 0x9e, 0x65, 0xbb, 0xa2, 0x24, 0xfe,
- 0x01, 0xfe, 0x86, 0xcf, 0x68, 0x9c, 0x8e, 0x23, 0xdd, 0x64, 0xf7, 0x42,
- 0x36, 0x6e, 0x16, 0xd4, 0x46, 0x91, 0xe2, 0x3a, 0xe5, 0xcf, 0x67, 0x83,
- 0x68, 0x13, 0x0c, 0x94, 0xb8, 0x2c, 0xdf, 0x04, 0x7e, 0x16, 0x6e, 0x41,
- 0xee, 0x63, 0x27, 0xb0, 0xc7, 0x93, 0x89, 0x08, 0x5a, 0x2c, 0x2a, 0xbd,
- 0x18, 0xec, 0x0c, 0xd8, 0x46, 0x90, 0xdc, 0xa5, 0x19, 0xe9, 0x7b, 0x7c,
- 0x07, 0xf1, 0x45, 0xeb, 0xde, 0x8b, 0x58, 0xfb, 0xe1, 0x1b, 0xf4, 0xfa,
- 0x1a, 0xeb, 0x93, 0xcd, 0xb7, 0x49, 0x41, 0x8c, 0x02, 0xf6, 0x9b, 0x93,
- 0x72, 0x02, 0xce, 0xc3, 0x6b, 0x63, 0x72, 0x2c, 0x88, 0x2e, 0xe4, 0xbd,
- 0xba, 0x9a, 0x5b, 0x8e, 0x4e, 0xfa, 0xf1, 0x76, 0xbf, 0x1f, 0x2f, 0x58,
- 0xb1, 0xa9, 0x99, 0x03, 0x36, 0x89, 0x48, 0xb7, 0x59, 0x13, 0xde, 0x8a,
- 0xbe, 0x63, 0x79, 0x03, 0x5c, 0x9a, 0xe5, 0xc2, 0xb9, 0x53, 0x21, 0xb1,
- 0x74, 0x22, 0x91, 0xf0, 0x21, 0x31, 0xce, 0xd3, 0xda, 0x9c, 0x51, 0x6a,
- 0x9c, 0xb3, 0x14, 0x87, 0x4b, 0xce, 0x51, 0x21, 0x8f, 0x37, 0xa2, 0x1b,
- 0x27, 0x37, 0xed, 0x86, 0xf6, 0x6b, 0x20, 0x12, 0x16, 0x4e, 0x29, 0x3f,
- 0x5d, 0x6b, 0x8e, 0x0f, 0xc9, 0xbc, 0x4b, 0x2b, 0x94, 0x3c, 0xa4, 0xac,
- 0xc2, 0xf2, 0x0e, 0xab, 0xf4, 0xc0, 0x57, 0xca, 0x38, 0xc7, 0x62, 0x0c,
- 0x20, 0xde, 0x97, 0x89, 0x1c, 0x31, 0x0c, 0xf7, 0x6a, 0x1a, 0x5f, 0x13,
- 0x1d, 0xd5, 0x9a, 0x23, 0x4d, 0x3d, 0x63, 0xf6, 0x4e, 0xdc, 0xb5, 0x20,
- 0xf1, 0x9e, 0x34, 0xe2, 0xaf, 0xf5, 0x22, 0x2d, 0xa2, 0x4d, 0x62, 0xd0,
- 0xd3, 0x25, 0xb4, 0x8c, 0x33, 0x9a, 0x18, 0x7d, 0xb5, 0xe5, 0xcf, 0x59,
- 0xff, 0x80, 0xd6, 0x8f, 0xb5, 0xee, 0x7e, 0x4c, 0x27, 0xa1, 0x8c, 0x5e,
- 0xca, 0x8f, 0xa2, 0xe4, 0x5b, 0xe6, 0xf3, 0xfa, 0x92, 0x32, 0xaf, 0xda,
- 0x8a, 0x86, 0x2a, 0x30, 0xf2, 0xdc, 0xde, 0xf1, 0xab, 0x07, 0xc1, 0x3b,
- 0xbc, 0x50, 0x05, 0x2d, 0x9f, 0x2d, 0x18, 0xd8, 0x9b, 0x0c, 0x65, 0x50,
- 0x6b, 0x6e, 0xc8, 0x23, 0xa5, 0xf9, 0xc6, 0x13, 0x26, 0x18, 0xb9, 0x8f,
- 0xa3, 0xc3, 0xaf, 0x4e, 0x88, 0x5c, 0xae, 0x48, 0x1d, 0xa5, 0x59, 0x61,
- 0x01, 0x59, 0x7d, 0xa6, 0x1b, 0x99, 0xd8, 0x32, 0xcd, 0x1b, 0x6b, 0x46,
- 0x7a, 0x63, 0x28, 0x8d, 0xe9, 0xff, 0x3a, 0x6f, 0xb2, 0x9f, 0x69, 0x01,
- 0xe3, 0xed, 0xa7, 0x83, 0x1d, 0x3a, 0x23, 0x97, 0xa4, 0xb5, 0xcc, 0xc7,
- 0xd9, 0x84, 0x94, 0xf9, 0x69, 0x3c, 0xbf, 0x2d, 0x22, 0xd0, 0x2a, 0xf6,
- 0x43, 0x46, 0xca, 0x77, 0xd7, 0x32, 0xcf, 0xe9, 0x96, 0x9c, 0x44, 0xe1,
- 0xe5, 0x61, 0xc7, 0x45, 0xa6, 0x23, 0x87, 0xc0, 0x04, 0x81, 0xe8, 0x6f,
- 0x4b, 0xde, 0x8e, 0x59, 0x9c, 0xdf, 0x9a, 0xb4, 0xe1, 0xb4, 0x83, 0x51,
- 0x82, 0x81, 0xe1, 0xf9, 0x66, 0x73, 0xfd, 0xaf, 0x69, 0xa1, 0xd9, 0x44,
- 0xc0, 0x22, 0xbf, 0x9c, 0xbe, 0xcc, 0xe4, 0x12, 0xbf, 0x1d, 0x9e, 0xfb,
- 0x61, 0xde, 0xfa, 0x20, 0x6b, 0x71, 0xd4, 0x32, 0x9b, 0x2a, 0x98, 0x12,
- 0xe8, 0x4d, 0x3a, 0x9f, 0x62, 0x9d, 0x98, 0xc6, 0x74, 0xcc, 0x78, 0xe1,
- 0x3c, 0xed, 0x34, 0xfb, 0xe6, 0xef, 0x99, 0x82, 0xba, 0x05, 0x4e, 0x41,
- 0xb0, 0xfb, 0x7d, 0x62, 0xc9, 0x6c, 0x6e, 0x69, 0xdf, 0xe8, 0x4b, 0x3a,
- 0x15, 0x85, 0x3b, 0x16, 0x57, 0xe9, 0xf5, 0x32, 0x4f, 0x84, 0x91, 0xc3,
- 0x42, 0x63, 0x86, 0x19, 0x66, 0xbb, 0x37, 0x19, 0x88, 0x8f, 0xa4, 0xde,
- 0x64, 0x7a, 0xd5, 0xab, 0x35, 0xc7, 0xc7, 0xd7, 0x58, 0x1e, 0xf8, 0x42,
- 0x91, 0x8c, 0xd1, 0xd4, 0x3c, 0x51, 0xf6, 0x3d, 0xe3, 0x55, 0x65, 0xed,
- 0x3e, 0x1a, 0x4f, 0xe3, 0x74, 0x56, 0x88, 0x56, 0xa0, 0xaa, 0x6b, 0x9d,
- 0x6e, 0x2e, 0x55, 0x8a, 0x03, 0xc1, 0x8c, 0x58, 0x8a, 0xcc, 0x0b, 0x96,
- 0x13, 0x79, 0xbb, 0x62, 0xbb, 0x3e, 0xd1, 0x29, 0xe9, 0x82, 0xe3, 0x5b,
- 0x10, 0x25, 0x7a, 0x91, 0x9b, 0xa7, 0x5f, 0x6b, 0x4e, 0x36, 0xa5, 0xe0,
- 0xf5, 0x5c, 0x16, 0x6c, 0x51, 0x2a, 0xd2, 0x11, 0x11, 0x24, 0x49, 0x55,
- 0xcb, 0x31, 0x28, 0x80, 0xb5, 0x53, 0xd2, 0x83, 0xf3, 0x98, 0x65, 0xce,
- 0x12, 0xb6, 0xb0, 0x08, 0x64, 0xd3, 0x27, 0x12, 0x59, 0xb4, 0x8e, 0x0e,
- 0x36, 0x1f, 0x91, 0x0b, 0x2b, 0x4c, 0xa2, 0x50, 0xe9, 0x97, 0x8d, 0x2e,
- 0x2a, 0x6a, 0x8e, 0x6b, 0xab, 0x59, 0x6b, 0x4e, 0xd6, 0xb6, 0x47, 0x42,
- 0x7a, 0x4a, 0x2a, 0xb8, 0x69, 0x92, 0x24, 0x1c, 0x09, 0x5d, 0xf6, 0xfb,
- 0xa4, 0x13, 0xa5, 0xe3, 0x1e, 0xff, 0x36, 0x49, 0x49, 0xf9, 0x2c, 0xf1,
- 0xeb, 0xbc, 0x9c, 0xce, 0x7a, 0x51, 0xc8, 0xfd, 0xdd, 0x8e, 0xcf, 0x93,
- 0xeb, 0x8c, 0x74, 0xe2, 0xb2, 0x49, 0x75, 0xe0, 0x34, 0xc2, 0x6a, 0x54,
- 0x78, 0x70, 0xf4, 0x61, 0xa2, 0x00, 0xc9, 0x10, 0xc4, 0x8e, 0xd9, 0x8a,
- 0x34, 0xe1, 0xd3, 0xc9, 0xc3, 0xa1, 0xa1, 0x08, 0x3f, 0xad, 0xf3, 0x24,
- 0x88, 0xf5, 0x45, 0x49, 0x8c, 0xa7, 0xa7, 0x42, 0x22, 0xf1, 0xb8, 0x59,
- 0xbc, 0xc2, 0x0e, 0x91, 0x34, 0xe2, 0x24, 0x00, 0x1c, 0x1c, 0x62, 0x20,
- 0xe5, 0x7d, 0x3a, 0x56, 0xf1, 0x9a, 0x17, 0xa4, 0xce, 0x80, 0xd9, 0x00,
- 0x30, 0x4d, 0xf9, 0xc1, 0xd9, 0x92, 0xf6, 0x97, 0xde, 0xe2, 0xcb, 0x56,
- 0x54, 0x92, 0x7b, 0xda, 0xad, 0x81, 0x1c, 0x9b, 0x44, 0x44, 0x26, 0xba,
- 0xed, 0x58, 0x92, 0x8b, 0xf3, 0x14, 0xca, 0x57, 0xa3, 0x39, 0x19, 0x33,
- 0x4f, 0x32, 0x1c, 0x27, 0xbf, 0xae, 0x82, 0x8d, 0x17, 0x68, 0x70, 0xb4,
- 0x98, 0x23, 0x05, 0x07, 0x67, 0x44, 0xa7, 0x59, 0xac, 0x8c, 0xd1, 0x4b,
- 0xbe, 0xb3, 0x5f, 0xf1, 0x64, 0xd6, 0xf0, 0xcb, 0x73, 0x68, 0x7c, 0x37,
- 0x55, 0x91, 0x27, 0xe0, 0x8b, 0xa2, 0xd6, 0x49, 0x6b, 0xa6, 0x0a, 0x32,
- 0xed, 0xd7, 0x09, 0x95, 0x48, 0x33, 0x01, 0xab, 0x74, 0x6d, 0x2d, 0xfc,
- 0x85, 0x4b, 0x3b, 0x93, 0xa4, 0x77, 0x6c, 0x39, 0x74, 0xda, 0x94, 0x34,
- 0x0e, 0x53, 0x48, 0x67, 0x98, 0x94, 0xf5, 0xe6, 0x0e, 0xd1, 0xe1, 0x7e,
- 0x47, 0xcd, 0x29, 0xb0, 0x1c, 0xa2, 0x55, 0x5d, 0x3a, 0x5a, 0x60, 0xb5,
- 0x97, 0x5c, 0xb1, 0x5e, 0x42, 0x44, 0xd1, 0x61, 0xd3, 0xf9, 0xee, 0xab,
- 0x6f, 0x0f, 0x4e, 0xdf, 0x1d, 0xef, 0xfe, 0xb9, 0x4e, 0x3d, 0xf4, 0xdd,
- 0x9e, 0x7c, 0xb7, 0xd7, 0x69, 0xe3, 0x68, 0x44, 0x40, 0x51, 0xd4, 0x7d,
- 0xd5, 0x25, 0x05, 0x76, 0x36, 0xca, 0xa6, 0x3c, 0x4b, 0xbb, 0x93, 0xc1,
- 0xc9, 0x68, 0x14, 0x3d, 0x95, 0xf0, 0x4b, 0xb9, 0xfe, 0x64, 0x61, 0xf8,
- 0xf6, 0xac, 0x8f, 0x1d, 0xfa, 0xbe, 0x6a, 0xd6, 0x20, 0x80, 0x78, 0x12,
- 0x2e, 0x46, 0x51, 0xe2, 0x36, 0xd4, 0x0d, 0xe2, 0x96, 0x0b, 0xa1, 0x47,
- 0x3a, 0x13, 0x38, 0x48, 0x75, 0x5e, 0x2f, 0x33, 0xe6, 0x29, 0xfb, 0x21,
- 0x81, 0xeb, 0x16, 0x90, 0x8f, 0x52, 0x10, 0xd6, 0x8a, 0xa8, 0xb7, 0x1c,
- 0xdf, 0x0c, 0xe8, 0xd2, 0x13, 0x9e, 0x92, 0x16, 0x7a, 0x3c, 0xeb, 0xfc,
- 0x8e, 0xaf, 0x03, 0x56, 0xd1, 0xef, 0x68, 0x16, 0xb2, 0xf5, 0x1d, 0x1d,
- 0x0b, 0x29, 0x85, 0xb4, 0x2f, 0x1d, 0x3d, 0xce, 0xa0, 0x2c, 0x58, 0x90,
- 0x55, 0x03, 0xe4, 0xf3, 0x95, 0xd7, 0x9b, 0xa3, 0xb3, 0x93, 0xcd, 0xb8,
- 0x47, 0x35, 0x6b, 0xb3, 0x5b, 0xc1, 0x18, 0x02, 0x9f, 0x27, 0x1a, 0x35,
- 0xeb, 0xc0, 0x2b, 0x3d, 0x91, 0xdd, 0x3c, 0xd1, 0xe3, 0x2b, 0xea, 0x6e,
- 0x9d, 0xf2, 0xa9, 0xb1, 0x11, 0x09, 0xdb, 0x4a, 0xda, 0x72, 0x59, 0x45,
- 0xfd, 0x53, 0x22, 0xe8, 0x69, 0xa6, 0x0c, 0xdd, 0x0b, 0xad, 0x2a, 0xbd,
- 0x44, 0x8e, 0x06, 0xb2, 0xab, 0x96, 0x73, 0xa9, 0xcf, 0x30, 0xcf, 0xc6,
- 0x56, 0xd8, 0x40, 0xe5, 0x68, 0x39, 0x72, 0x22, 0xdd, 0x90, 0x56, 0x16,
- 0x94, 0xaf, 0x4c, 0x97, 0x34, 0x8f, 0x96, 0xe6, 0xde, 0x26, 0x65, 0x31,
- 0x8e, 0x17, 0xc9, 0xb6, 0xde, 0xe8, 0xb6, 0x91, 0xe8, 0x45, 0x06, 0xd2,
- 0x64, 0x5e, 0x67, 0x97, 0xc7, 0x26, 0x26, 0xe9, 0x93, 0x5e, 0x97, 0x17,
- 0x41, 0x36, 0x38, 0xb3, 0x7c, 0xc2, 0x20, 0x24, 0x2b, 0x93, 0x8e, 0x1b,
- 0x02, 0xd5, 0x9c, 0xb4, 0xa9, 0x01, 0x8c, 0xab, 0x36, 0x19, 0x35, 0x35,
- 0x1a, 0x71, 0xd9, 0xd9, 0xa0, 0x9e, 0x20, 0x6c, 0xe0, 0x63, 0xe7, 0x79,
- 0xa8, 0x73, 0x1b, 0xbd, 0xfd, 0xfa, 0x63, 0x37, 0x86, 0xfe, 0x5f, 0x63,
- 0x2f, 0x09, 0xa8, 0xd9, 0x1a, 0x0b, 0x45, 0x92, 0xfd, 0x9c, 0x44, 0xdf,
- 0xbb, 0x44, 0xd7, 0x96, 0xd7, 0xab, 0xfd, 0xca, 0xf2, 0xda, 0x9e, 0xf1,
- 0xeb, 0x23, 0x6a, 0x7e, 0xb2, 0x9c, 0x2d, 0x54, 0xd2, 0xf8, 0x5d, 0xdb,
- 0x31, 0x14, 0x89, 0xea, 0x97, 0x8a, 0x16, 0xa3, 0xe4, 0x17, 0x09, 0x16,
- 0x5f, 0x8a, 0x58, 0xd9, 0x8f, 0x8b, 0x71, 0x9a, 0xd6, 0xde, 0x3a, 0x86,
- 0x46, 0x15, 0x1d, 0x0c, 0x0f, 0x4f, 0x4e, 0xbc, 0x25, 0xe2, 0x5e, 0x84,
- 0x74, 0x9e, 0x06, 0xab, 0x97, 0xb4, 0x24, 0xec, 0xa2, 0x12, 0x5b, 0x1e,
- 0x1c, 0x59, 0x32, 0x6e, 0xba, 0xfd, 0xda, 0x4e, 0x1b, 0x8f, 0x2f, 0x99,
- 0x13, 0x6d, 0x8c, 0x45, 0x0a, 0x96, 0x86, 0x68, 0x3e, 0x6c, 0x17, 0x03,
- 0x59, 0xd0, 0xa5, 0x55, 0xa8, 0x12, 0xf5, 0xe7, 0x72, 0xb5, 0x48, 0x5e,
- 0x1d, 0x74, 0x44, 0x82, 0xab, 0xcf, 0x49, 0x16, 0x66, 0x1c, 0xd3, 0xf0,
- 0xd5, 0x86, 0x21, 0xb7, 0x13, 0x6f, 0xf1, 0x44, 0x2d, 0x0f, 0xca, 0x1b,
- 0xd9, 0x3a, 0x3e, 0x63, 0x11, 0x53, 0x6c, 0xc0, 0x74, 0x0b, 0x3d, 0xd9,
- 0xab, 0xb3, 0x96, 0x15, 0x5d, 0xff, 0xb3, 0x22, 0x94, 0xb9, 0x70, 0x63,
- 0xb7, 0x5f, 0x15, 0x35, 0x91, 0x8b, 0xc9, 0x06, 0xc7, 0xe5, 0x4b, 0x7e,
- 0xa5, 0x26, 0x28, 0x0c, 0x9c, 0x20, 0xd4, 0xdc, 0x18, 0x33, 0xae, 0xf2,
- 0x65, 0x5a, 0x93, 0x24, 0x97, 0xc5, 0x12, 0x36, 0xa6, 0x05, 0xc9, 0x4b,
- 0xe5, 0x94, 0x18, 0x5c, 0x2f, 0x5a, 0xce, 0xf9, 0xa7, 0xd3, 0x4c, 0x23,
- 0xaf, 0xb5, 0x7b, 0xe5, 0x07, 0xfa, 0x4d, 0x9e, 0xf2, 0x5c, 0xe3, 0x28,
- 0xe4, 0xb5, 0x22, 0x8d, 0x6b, 0xfb, 0x2a, 0x3d, 0xb0, 0x63, 0x87, 0x1e,
- 0x9b, 0xa4, 0xec, 0x04, 0xa4, 0x11, 0xd7, 0x77, 0xac, 0x55, 0x7c, 0xdc,
- 0x2c, 0x96, 0xc4, 0xd0, 0x88, 0xe5, 0x3b, 0xf1, 0x25, 0x10, 0x69, 0x78,
- 0x79, 0x4d, 0x76, 0xa9, 0x5f, 0x06, 0xc4, 0x64, 0x43, 0x8d, 0xa6, 0x3f,
- 0x4e, 0x17, 0x37, 0x7c, 0x3a, 0x5e, 0x42, 0x03, 0x66, 0x29, 0x5b, 0x3e,
- 0x68, 0x5c, 0xcf, 0xc3, 0xe1, 0xa9, 0x69, 0x33, 0x38, 0xe0, 0xe0, 0xa8,
- 0xf6, 0xb6, 0x2e, 0x7f, 0x6a, 0xae, 0x07, 0x33, 0x77, 0x0a, 0x57, 0xe4,
- 0xa6, 0xeb, 0x84, 0xe3, 0x3a, 0x12, 0x01, 0xc5, 0xec, 0xea, 0x30, 0xe0,
- 0xda, 0x57, 0x83, 0xe8, 0x02, 0xc2, 0xe0, 0x72, 0xc1, 0xa7, 0x27, 0x82,
- 0xeb, 0x52, 0xbf, 0xab, 0x35, 0x87, 0xc1, 0x87, 0x3b, 0x0a, 0x67, 0x5f,
- 0xe5, 0xf0, 0x55, 0xd8, 0x66, 0x1a, 0x7c, 0x47, 0x44, 0xbf, 0x5f, 0x67,
- 0x19, 0xde, 0x3b, 0x40, 0x92, 0xcd, 0xbc, 0x28, 0xa6, 0x70, 0xda, 0x4c,
- 0xb2, 0x71, 0xb1, 0x4d, 0x0a, 0x6f, 0xb1, 0x6d, 0x03, 0xac, 0xb8, 0x67,
- 0x8c, 0xb9, 0x0e, 0x87, 0x6e, 0x6e, 0x6c, 0x13, 0x81, 0xe4, 0xed, 0x76,
- 0x77, 0xba, 0x12, 0xd6, 0x21, 0xda, 0xe5, 0xa9, 0xda, 0x12, 0xbf, 0x9a,
- 0x2f, 0x2f, 0x4f, 0x87, 0x22, 0x57, 0xd4, 0x25, 0xc3, 0x25, 0xeb, 0x2a,
- 0xb6, 0x3b, 0x61, 0xe3, 0xb8, 0xaf, 0xe4, 0x0e, 0x18, 0x0e, 0x0f, 0xf1,
- 0xe1, 0x70, 0xc9, 0x6a, 0x01, 0x75, 0x93, 0xaf, 0x22, 0x55, 0x82, 0x6b,
- 0xcd, 0xf1, 0x6c, 0x6d, 0x7e, 0x62, 0xe6, 0xca, 0xf2, 0xd5, 0xe0, 0x2a,
- 0x99, 0x64, 0x79, 0x3c, 0x20, 0x56, 0x4d, 0x24, 0x09, 0x4f, 0x08, 0xe6,
- 0x4a, 0xc7, 0xf5, 0x3d, 0xcd, 0x1e, 0xd3, 0xfc, 0xe4, 0x88, 0x9f, 0xae,
- 0x93, 0x13, 0x5d, 0xdb, 0x49, 0xf1, 0x61, 0x8d, 0x0c, 0x17, 0x87, 0x39,
- 0xcb, 0xd8, 0x5a, 0x5a, 0xb4, 0xb1, 0x4d, 0x3b, 0x35, 0x2d, 0xb7, 0x1c,
- 0xec, 0x8e, 0x15, 0xc6, 0x40, 0x83, 0x5c, 0xb0, 0x91, 0x2b, 0x99, 0xb4,
- 0x73, 0x87, 0x0b, 0x53, 0x6d, 0x22, 0xff, 0xa4, 0x37, 0xa8, 0xd5, 0x23,
- 0x08, 0x88, 0x31, 0x5e, 0x67, 0x39, 0x31, 0xbc, 0x59, 0xd1, 0x20, 0x2d,
- 0xf1, 0x3f, 0xab, 0x7e, 0x45, 0x03, 0x17, 0x03, 0x66, 0xb9, 0xcc, 0x65,
- 0xf1, 0x97, 0xf3, 0xa0, 0x03, 0x5a, 0xb6, 0xe5, 0x0c, 0x5e, 0x63, 0x5b,
- 0x85, 0x76, 0x8e, 0x69, 0x6b, 0x22, 0x3c, 0xc7, 0xc9, 0x9f, 0xb0, 0x06,
- 0x14, 0xa2, 0x45, 0x2d, 0xe7, 0xde, 0x1b, 0x29, 0xda, 0x39, 0xeb, 0xe1,
- 0x75, 0xf9, 0xc4, 0x79, 0x1d, 0xf2, 0x84, 0x9f, 0xe5, 0x37, 0x69, 0x11,
- 0xb3, 0xbc, 0xba, 0x54, 0x38, 0x8f, 0x7d, 0x5e, 0x78, 0xe6, 0xc9, 0x2f,
- 0x49, 0xa5, 0xcc, 0xa8, 0x9f, 0xfa, 0x19, 0x7f, 0x13, 0x3f, 0xa4, 0xb3,
- 0xe5, 0x4c, 0xec, 0xd9, 0x62, 0x02, 0xd0, 0x27, 0x23, 0xef, 0x9b, 0x23,
- 0x7e, 0x98, 0xdd, 0xd7, 0x8e, 0x79, 0xcd, 0xa2, 0xec, 0xac, 0xfa, 0x98,
- 0x13, 0x7f, 0x47, 0x52, 0xdb, 0x40, 0xb5, 0x3d, 0x35, 0xb7, 0xcd, 0xd8,
- 0xe7, 0x23, 0x77, 0x76, 0xd0, 0x4e, 0xb4, 0xb8, 0x89, 0x8b, 0x84, 0x59,
- 0x18, 0xdd, 0xac, 0x6d, 0x53, 0x25, 0xe1, 0xad, 0x70, 0x6f, 0x24, 0x0d,
- 0x7e, 0x4d, 0x9b, 0x49, 0x82, 0x33, 0x2e, 0x68, 0x5a, 0x5e, 0xc4, 0x03,
- 0xc8, 0x95, 0xd7, 0x62, 0x63, 0x98, 0xd1, 0xad, 0x3b, 0x8b, 0x1f, 0xb0,
- 0x2a, 0x26, 0xc4, 0xfd, 0x5a, 0x94, 0xac, 0xb2, 0x71, 0xb0, 0x09, 0x35,
- 0x59, 0xe6, 0x25, 0x04, 0x11, 0x96, 0xcc, 0xeb, 0x9b, 0xe0, 0x0c, 0x46,
- 0x99, 0xf2, 0x58, 0x3c, 0xe9, 0xcc, 0xe2, 0x76, 0xdb, 0x89, 0x39, 0x9f,
- 0xed, 0xb0, 0x26, 0x72, 0xc5, 0x57, 0xb0, 0xae, 0x37, 0x05, 0xd8, 0xc5,
- 0x34, 0x01, 0x0d, 0x39, 0x25, 0x6d, 0xa0, 0xde, 0x2a, 0x69, 0xa4, 0x88,
- 0x2a, 0xcd, 0x54, 0xd4, 0xa4, 0x78, 0xd2, 0xa6, 0xa7, 0xc6, 0x81, 0xb4,
- 0x88, 0xd1, 0xc5, 0x30, 0x5a, 0x32, 0x9f, 0x8a, 0xb5, 0x35, 0xd7, 0x9c,
- 0xd7, 0xb5, 0xf0, 0x6e, 0xad, 0x39, 0x33, 0x66, 0x80, 0x52, 0x36, 0x8b,
- 0x2d, 0xa8, 0xa5, 0x73, 0x2f, 0x46, 0x32, 0xff, 0xbc, 0x9d, 0x67, 0xf7,
- 0xa4, 0x6d, 0xce, 0x33, 0xe9, 0xcb, 0xd6, 0x97, 0xc7, 0xde, 0xe0, 0x46,
- 0x89, 0xde, 0x38, 0x8d, 0x27, 0x4b, 0x27, 0x2f, 0x09, 0xcd, 0x99, 0xd4,
- 0x6c, 0x03, 0x6d, 0xb5, 0x3b, 0xaa, 0xf4, 0x1c, 0xba, 0x7f, 0x93, 0x32,
- 0x14, 0xe2, 0x4d, 0xb3, 0x72, 0xbe, 0xaf, 0x49, 0x5c, 0xdc, 0xf4, 0xa2,
- 0x4e, 0xbf, 0xd3, 0x6b, 0xa1, 0xb8, 0xba, 0x6c, 0x6c, 0xe3, 0x72, 0xc2,
- 0x52, 0xbb, 0x9c, 0xae, 0x8a, 0xba, 0x8e, 0x93, 0x89, 0x87, 0xc4, 0xba,
- 0x2e, 0x74, 0x7a, 0xb5, 0x7c, 0xf2, 0x85, 0xef, 0x1b, 0x13, 0x7a, 0xbc,
- 0xbf, 0xc9, 0xa6, 0xad, 0x27, 0x28, 0x50, 0xd5, 0x33, 0x6e, 0x06, 0xd6,
- 0x43, 0x76, 0x01, 0xb3, 0x24, 0x5d, 0x63, 0x22, 0xd1, 0x78, 0x9a, 0xc4,
- 0xf9, 0x74, 0xa5, 0x5a, 0x5c, 0xfd, 0x04, 0xdd, 0xc9, 0x54, 0xd8, 0xc6,
- 0x1b, 0x13, 0x75, 0xe6, 0x73, 0x5e, 0x5f, 0x75, 0x6b, 0x25, 0x13, 0x09,
- 0x9a, 0x28, 0xc5, 0x94, 0xaf, 0xab, 0x26, 0x6a, 0xc4, 0x5d, 0xca, 0x56,
- 0xa3, 0xc6, 0x6a, 0x27, 0xc9, 0x64, 0x14, 0x8f, 0x6f, 0xb1, 0xd2, 0x68,
- 0x53, 0x5c, 0x57, 0x7c, 0xfe, 0x9c, 0xa1, 0x89, 0x48, 0xf9, 0x86, 0x0e,
- 0x5e, 0x91, 0x96, 0xcb, 0x78, 0xdd, 0x89, 0xad, 0x0a, 0xed, 0x1f, 0x3c,
- 0xb4, 0x55, 0x5a, 0x6e, 0xd3, 0x9d, 0xd7, 0x1c, 0xe9, 0x43, 0x1c, 0x69,
- 0x12, 0xcd, 0xe6, 0x4b, 0x92, 0xdd, 0x89, 0xad, 0x66, 0x57, 0x57, 0x44,
- 0x20, 0x9f, 0x37, 0x4c, 0x07, 0xf2, 0xc8, 0xf6, 0x85, 0x06, 0x52, 0xb9,
- 0x23, 0x56, 0x75, 0xff, 0xf2, 0x85, 0x2d, 0xab, 0x74, 0x9d, 0xf2, 0x5e,
- 0x44, 0xd2, 0x5c, 0xd3, 0x64, 0x56, 0x7f, 0x22, 0xf2, 0xeb, 0x2b, 0x3e,
- 0x92, 0x20, 0x0c, 0x6b, 0xb4, 0x12, 0xa5, 0x3a, 0x2e, 0xeb, 0xd1, 0x1f,
- 0xc6, 0xa4, 0x6f, 0xd3, 0xc5, 0x82, 0x37, 0x0b, 0x01, 0x1a, 0xce, 0xc4,
- 0xc3, 0xad, 0x8d, 0x92, 0xeb, 0x74, 0x3e, 0x0f, 0x43, 0x65, 0xb2, 0x65,
- 0x3e, 0x76, 0x0a, 0xec, 0x28, 0xa1, 0xf3, 0x51, 0x6f, 0xce, 0x4c, 0x12,
- 0xde, 0x89, 0xaa, 0x26, 0x9c, 0x09, 0xa2, 0x6e, 0x8c, 0xfd, 0x9c, 0x5c,
- 0xc9, 0x9e, 0x40, 0xc5, 0x50, 0x8b, 0x58, 0xdb, 0x91, 0x79, 0xed, 0xed,
- 0x3e, 0xe6, 0xda, 0x18, 0x9e, 0xfc, 0xcf, 0x63, 0xef, 0xf0, 0x36, 0x23,
- 0x04, 0x69, 0x31, 0x4c, 0xdd, 0x0d, 0x72, 0x78, 0x47, 0x77, 0x7d, 0xa7,
- 0x7f, 0x18, 0xf5, 0x3b, 0x18, 0x48, 0xc5, 0x73, 0xb1, 0x2c, 0x33, 0x3a,
- 0xde, 0x1a, 0x1a, 0x80, 0xe8, 0x2e, 0xa6, 0x37, 0xd6, 0xad, 0xf2, 0x64,
- 0x5b, 0xfc, 0x3f, 0x59, 0x83, 0x5f, 0x61, 0x0b, 0x65, 0xb1, 0x6d, 0x96,
- 0x30, 0x43, 0x95, 0xea, 0x36, 0x11, 0x0b, 0x86, 0xec, 0x8f, 0xb8, 0x19,
- 0xb7, 0xa1, 0x1e, 0x8b, 0xcb, 0xbc, 0xa9, 0x2a, 0xa8, 0xa1, 0x58, 0xdc,
- 0x82, 0x2d, 0x2c, 0xe0, 0xd7, 0xbb, 0x81, 0xfa, 0xc2, 0x2d, 0x48, 0x4d,
- 0xc8, 0xeb, 0xe3, 0xa8, 0xf8, 0x7c, 0x88, 0xa4, 0xff, 0x4a, 0x32, 0x4d,
- 0xcd, 0xe4, 0x61, 0x6e, 0xad, 0x5e, 0x35, 0x7a, 0x43, 0xda, 0x6c, 0xb3,
- 0x72, 0xd0, 0x05, 0x4d, 0x22, 0x51, 0xcc, 0xa1, 0x29, 0x6c, 0x2a, 0x61,
- 0x7f, 0xb7, 0x4a, 0x9b, 0xd1, 0x4d, 0x4a, 0x63, 0xcf, 0xc7, 0x37, 0x2b,
- 0xbe, 0x2e, 0xd8, 0x00, 0xc9, 0xce, 0x9b, 0x4b, 0x3f, 0xcb, 0x3a, 0xdb,
- 0x42, 0x1f, 0x6a, 0x15, 0x4c, 0x59, 0x63, 0x60, 0x7d, 0x28, 0x9b, 0x1b,
- 0xfd, 0xd4, 0xc6, 0x47, 0x64, 0x71, 0xc3, 0x44, 0x9b, 0x4c, 0x59, 0x02,
- 0xa0, 0x05, 0x6c, 0x1b, 0x5d, 0x3f, 0x0b, 0x38, 0x38, 0xb6, 0x8d, 0xee,
- 0x17, 0x6a, 0x9c, 0x39, 0xa1, 0x18, 0xb0, 0xa4, 0x2b, 0xb6, 0xc2, 0x4a,
- 0x6f, 0x74, 0x19, 0x4d, 0xf9, 0x42, 0x5c, 0xd5, 0x9a, 0x53, 0x9f, 0x94,
- 0xbe, 0x6e, 0x6b, 0x6f, 0x3e, 0xa9, 0xfa, 0x76, 0x5e, 0x66, 0xfa, 0x95,
- 0x5d, 0x7d, 0xb6, 0x2a, 0xa2, 0x53, 0xd5, 0xb5, 0x7a, 0x09, 0x4e, 0x45,
- 0x7c, 0x4f, 0xbf, 0x7f, 0x55, 0x36, 0xac, 0x9c, 0xc1, 0x96, 0x56, 0x77,
- 0x7a, 0x7a, 0x05, 0x9f, 0xde, 0x16, 0x73, 0x1f, 0xa2, 0x94, 0x32, 0x3a,
- 0x7d, 0xcd, 0xd4, 0x76, 0x78, 0x41, 0x3f, 0x53, 0x73, 0xea, 0x31, 0x5b,
- 0x47, 0x90, 0x29, 0x2b, 0xe4, 0x6f, 0xbe, 0x1d, 0x46, 0x9b, 0x67, 0xc3,
- 0xed, 0x27, 0x2f, 0x76, 0xb6, 0xea, 0x6d, 0xf1, 0x4a, 0x41, 0x62, 0x69,
- 0x35, 0xda, 0x0e, 0xb7, 0x39, 0xa0, 0x76, 0x0b, 0x61, 0xcf, 0x77, 0xac,
- 0xf4, 0x56, 0xcc, 0x2c, 0xe7, 0xc7, 0x6f, 0xcc, 0x1e, 0x86, 0xdd, 0x8a,
- 0xa3, 0x43, 0x1a, 0x0f, 0xdb, 0xf2, 0x9b, 0x84, 0x73, 0x91, 0xdc, 0x99,
- 0x55, 0xed, 0x94, 0x15, 0x1e, 0x9c, 0x0a, 0xb6, 0xda, 0x99, 0x7a, 0xb8,
- 0x48, 0x98, 0x13, 0xf8, 0xf7, 0x95, 0xb5, 0x41, 0x4e, 0x68, 0x9e, 0xd6,
- 0x11, 0x64, 0xd4, 0x82, 0x86, 0x94, 0x43, 0xf6, 0xe7, 0x90, 0x89, 0xc9,
- 0x6f, 0x77, 0xc2, 0x6c, 0x4d, 0x0e, 0xcc, 0xd9, 0x0b, 0x5f, 0xef, 0xa7,
- 0x81, 0xff, 0x75, 0xc2, 0x16, 0x27, 0x36, 0x92, 0xbc, 0x7c, 0xc4, 0x02,
- 0x4e, 0x42, 0xab, 0x4a, 0xdc, 0x49, 0x14, 0x5c, 0x4e, 0x78, 0x0f, 0xf6,
- 0x69, 0xc4, 0x3f, 0x98, 0xe7, 0x26, 0xb0, 0x90, 0xb7, 0x8a, 0xdf, 0x3d,
- 0x17, 0xc7, 0x87, 0x9b, 0x2c, 0x5e, 0xc9, 0x8a, 0xc5, 0xd1, 0x28, 0xcf,
- 0xee, 0x39, 0x80, 0x58, 0x42, 0x10, 0x84, 0xf6, 0xd8, 0x5a, 0x81, 0xa8,
- 0x62, 0x16, 0xb3, 0xeb, 0xd7, 0x33, 0xcd, 0x59, 0x5c, 0x34, 0x2c, 0x1e,
- 0x7c, 0x7d, 0xf9, 0xe6, 0x14, 0xdb, 0x0a, 0x0d, 0x46, 0xb4, 0x1f, 0x39,
- 0xa1, 0xc5, 0x72, 0x44, 0xb2, 0x3d, 0xdf, 0xfd, 0xa5, 0x33, 0xbb, 0x84,
- 0x31, 0xc0, 0x46, 0xb9, 0x31, 0x02, 0xa3, 0x94, 0x17, 0x2f, 0xda, 0xac,
- 0xfe, 0xca, 0xf8, 0xcd, 0x3c, 0x8b, 0xcd, 0x24, 0x11, 0x87, 0xf4, 0x98,
- 0xd5, 0xa2, 0x4e, 0x39, 0xa4, 0x95, 0x4f, 0xd5, 0x44, 0xb2, 0xfd, 0xd0,
- 0x27, 0xc5, 0xbd, 0xcf, 0x83, 0xeb, 0x53, 0xf3, 0xe2, 0xd7, 0x64, 0xef,
- 0xf0, 0x21, 0x89, 0xc2, 0x4c, 0x28, 0xd4, 0x7c, 0xff, 0x35, 0xed, 0x04,
- 0x3f, 0xd1, 0xd8, 0x3d, 0xbf, 0x47, 0xfe, 0x56, 0xc5, 0xd2, 0x41, 0xb4,
- 0x95, 0xaf, 0xc4, 0x50, 0x37, 0xc0, 0x69, 0xe6, 0xa0, 0x6a, 0xf5, 0x2f,
- 0x10, 0x1f, 0x9f, 0xd6, 0xb9, 0x03, 0x1b, 0x8f, 0xf3, 0x95, 0x04, 0x32,
- 0xa8, 0x6d, 0xd7, 0x7c, 0x5c, 0xce, 0xcc, 0x29, 0x6d, 0xca, 0x93, 0xde,
- 0x9a, 0x9c, 0xb1, 0xaa, 0x5e, 0x3f, 0xef, 0xea, 0xa4, 0xe5, 0xd7, 0xee,
- 0xe2, 0xe9, 0x12, 0xda, 0x6b, 0x2c, 0xfb, 0x20, 0x5e, 0x5f, 0x44, 0x11,
- 0xc6, 0x2b, 0x34, 0xae, 0x0d, 0xbb, 0x35, 0x68, 0x95, 0x95, 0x38, 0xcc,
- 0x44, 0xae, 0xf7, 0x22, 0x71, 0x11, 0x08, 0x76, 0x06, 0xaa, 0x96, 0x4e,
- 0x8b, 0x2c, 0xb5, 0x48, 0x83, 0xfa, 0xe0, 0x5c, 0xe4, 0x41, 0x2f, 0x70,
- 0xba, 0xa4, 0x7c, 0x0d, 0x04, 0x64, 0x1c, 0xf8, 0x5e, 0x67, 0x49, 0x7e,
- 0x8d, 0xe8, 0xa9, 0x8c, 0xa4, 0xbd, 0xa6, 0x4d, 0x47, 0x7c, 0x76, 0xb1,
- 0x8b, 0x0e, 0x83, 0xf0, 0xfe, 0x87, 0xbe, 0x38, 0x44, 0xa0, 0x4d, 0x2e,
- 0xe9, 0x5c, 0x9a, 0x54, 0xdf, 0xed, 0x4f, 0x22, 0xf5, 0x2d, 0xcd, 0x69,
- 0x25, 0x68, 0x1f, 0x9b, 0x82, 0xce, 0x74, 0xfa, 0x6a, 0x4a, 0x62, 0xd7,
- 0xaa, 0x1b, 0x69, 0xe8, 0x92, 0x06, 0xb4, 0x94, 0x6a, 0xa7, 0x43, 0x14,
- 0xc6, 0xf8, 0x66, 0x39, 0xbf, 0x35, 0xdb, 0xdc, 0x94, 0x84, 0xee, 0x22,
- 0x42, 0xf4, 0x7d, 0xad, 0xb9, 0x6e, 0xd0, 0xd9, 0x1f, 0xc2, 0xb6, 0x5b,
- 0x57, 0x59, 0x94, 0x07, 0x8e, 0xa1, 0x0c, 0x1c, 0x52, 0xee, 0xf2, 0x92,
- 0x08, 0xd4, 0xe8, 0x8b, 0x9e, 0xb9, 0x5e, 0xcb, 0xc0, 0x0f, 0x10, 0x37,
- 0xcf, 0xa1, 0x57, 0x3c, 0xe0, 0x40, 0x70, 0x0d, 0x8a, 0xd3, 0x86, 0x78,
- 0x79, 0xdf, 0xfc, 0x8d, 0x5e, 0x65, 0x74, 0xfe, 0x86, 0xb6, 0xdb, 0x50,
- 0xe8, 0xdd, 0xfb, 0xf6, 0x5c, 0x82, 0x03, 0xce, 0x5b, 0x61, 0xf2, 0x1f,
- 0xba, 0x86, 0xb9, 0x4e, 0xaf, 0xc2, 0xa6, 0x38, 0xc9, 0x34, 0xeb, 0x4e,
- 0xdc, 0x9b, 0x30, 0xcc, 0xb1, 0xe6, 0xfc, 0x37, 0x82, 0x18, 0x44, 0xe7,
- 0x99, 0xc4, 0x63, 0x63, 0x14, 0x6d, 0xea, 0xa6, 0xdd, 0x27, 0x3c, 0xe9,
- 0x49, 0xd4, 0xbd, 0xca, 0xb2, 0x51, 0x9c, 0x77, 0x75, 0x0b, 0xe1, 0x87,
- 0x1e, 0xa9, 0x95, 0x4d, 0x63, 0x70, 0x30, 0x9d, 0x2f, 0xe8, 0xb9, 0x3a,
- 0x85, 0x8e, 0xe2, 0x8a, 0x5d, 0x24, 0x3c, 0x77, 0x8f, 0x71, 0xe4, 0x4b,
- 0x55, 0x41, 0x4a, 0x35, 0x71, 0x43, 0xca, 0x9e, 0x42, 0x7a, 0xa9, 0xb9,
- 0x4d, 0xd8, 0x6b, 0xa7, 0xde, 0xef, 0x45, 0xde, 0xe8, 0x9e, 0x05, 0x22,
- 0xc4, 0xd0, 0x12, 0x6d, 0x15, 0x59, 0x72, 0x17, 0x46, 0x53, 0xff, 0x76,
- 0xc4, 0xc2, 0xcb, 0x46, 0x1b, 0x7a, 0x84, 0xfb, 0x43, 0xe6, 0xe1, 0x82,
- 0xbe, 0x25, 0x8e, 0x2d, 0xb2, 0x90, 0xef, 0x06, 0x8f, 0x6b, 0x09, 0xc4,
- 0xe9, 0xf1, 0x0c, 0x11, 0xf1, 0xa4, 0x67, 0x64, 0x9e, 0xdc, 0xab, 0xd3,
- 0x90, 0x99, 0x2b, 0x5f, 0x05, 0xcc, 0xb7, 0xc5, 0xb4, 0x35, 0x86, 0xf4,
- 0x51, 0x58, 0x7c, 0x58, 0x5d, 0xb9, 0xe2, 0x25, 0xc0, 0xce, 0xfd, 0x93,
- 0x97, 0xb2, 0x29, 0x95, 0xf0, 0x58, 0x66, 0x6c, 0x98, 0x32, 0x0d, 0xbf,
- 0xb1, 0x0e, 0x1c, 0xf5, 0x20, 0xd1, 0xb9, 0x08, 0x58, 0x92, 0x45, 0x8d,
- 0x0b, 0xcd, 0xe1, 0x18, 0xc9, 0x8a, 0x38, 0xe6, 0xdf, 0xa0, 0x12, 0xc7,
- 0x44, 0x7f, 0x09, 0xa1, 0xf4, 0xdc, 0x02, 0xeb, 0x8d, 0x26, 0x31, 0xda,
- 0x4a, 0xa0, 0x2e, 0x4c, 0x2c, 0x6d, 0x84, 0x94, 0x48, 0xb8, 0x1b, 0x2f,
- 0x32, 0x8c, 0x6b, 0x2e, 0x9e, 0x89, 0x54, 0x77, 0xe6, 0xf5, 0x85, 0x3f,
- 0x66, 0x34, 0xdf, 0x41, 0x55, 0xe2, 0xf8, 0x6c, 0xb0, 0xb3, 0xd5, 0x14,
- 0x3a, 0x89, 0x36, 0x0e, 0xbf, 0x3a, 0x81, 0xd1, 0x74, 0x9a, 0xc6, 0x9c,
- 0xd1, 0xc0, 0x7d, 0xc8, 0x5c, 0x34, 0xbf, 0xc4, 0x88, 0xe8, 0x9a, 0xed,
- 0x7e, 0x8e, 0xf9, 0x86, 0x31, 0x76, 0xce, 0x2c, 0xc2, 0x2b, 0xad, 0xf9,
- 0x39, 0xb1, 0xb1, 0xe7, 0x4c, 0x22, 0x3b, 0x63, 0xe3, 0x1a, 0x2e, 0x64,
- 0x23, 0xf6, 0x8e, 0x80, 0xd6, 0xb5, 0x43, 0xef, 0xcc, 0x1b, 0xd8, 0xe9,
- 0x19, 0xc3, 0x8a, 0x4a, 0xcb, 0x05, 0xa6, 0xd5, 0xb0, 0xd2, 0xfa, 0x4d,
- 0x96, 0x94, 0x9d, 0xa4, 0xd8, 0xdf, 0x68, 0x58, 0x59, 0xd0, 0x7d, 0x7b,
- 0xbe, 0x9b, 0x93, 0x46, 0xc4, 0x91, 0x8c, 0x4e, 0x3c, 0xcb, 0x0a, 0x85,
- 0x0c, 0x91, 0x6b, 0x58, 0x2c, 0xc1, 0xfa, 0xb7, 0x37, 0x07, 0x5d, 0xf6,
- 0x3f, 0x99, 0x21, 0x42, 0xd6, 0x24, 0x0a, 0x67, 0x69, 0xda, 0x32, 0x19,
- 0xc2, 0xd6, 0x2c, 0x84, 0x8d, 0xff, 0x8e, 0x1b, 0x5e, 0x66, 0x17, 0xfa,
- 0xb3, 0x8a, 0x5e, 0x31, 0xff, 0xfe, 0x42, 0xdd, 0xfe, 0x6c, 0x6c, 0x0e,
- 0xb5, 0x77, 0xd1, 0x32, 0xd5, 0x09, 0x2e, 0xa2, 0x09, 0x96, 0xa1, 0xbd,
- 0x39, 0x38, 0xe0, 0xc3, 0xd5, 0x13, 0xf2, 0xe3, 0xc0, 0xd4, 0x42, 0x92,
- 0xb6, 0x1a, 0x2e, 0xcf, 0x57, 0x1f, 0x5e, 0xbd, 0x5f, 0xba, 0x7c, 0x8f,
- 0xaf, 0xde, 0x25, 0xa2, 0x8c, 0x49, 0x46, 0x40, 0x74, 0xc9, 0xab, 0x20,
- 0xdc, 0x81, 0xb5, 0x7b, 0x09, 0xc6, 0xf3, 0xfe, 0xe3, 0xea, 0xd1, 0x0c,
- 0x4c, 0x34, 0xaf, 0x7e, 0xad, 0x5d, 0x07, 0x31, 0xc2, 0x25, 0xc3, 0x83,
- 0x6f, 0x6f, 0x4e, 0xd8, 0x1e, 0xf6, 0x3e, 0x8c, 0x37, 0xd4, 0x5b, 0x19,
- 0x2d, 0x50, 0x7f, 0xc9, 0xc3, 0x42, 0x4d, 0xd4, 0x38, 0x7d, 0x2d, 0xc2,
- 0x5c, 0x45, 0xa6, 0x9b, 0xd8, 0x9d, 0xda, 0x98, 0xdf, 0x17, 0xc6, 0xc4,
- 0x3f, 0x34, 0xb9, 0x4a, 0x70, 0x04, 0xc2, 0x72, 0xc2, 0x8b, 0xbd, 0x62,
- 0x5a, 0x6a, 0xb1, 0x74, 0x19, 0x27, 0xf3, 0x01, 0x90, 0x92, 0x1f, 0x61,
- 0xec, 0x7d, 0xab, 0x57, 0x5d, 0xb3, 0x58, 0xc5, 0x5e, 0xdb, 0xe8, 0xf6,
- 0xe6, 0x52, 0x56, 0x98, 0x6c, 0xfb, 0x58, 0x71, 0x69, 0xdd, 0xbe, 0xff,
- 0xcb, 0xa6, 0x28, 0x36, 0x3a, 0x50, 0x83, 0x90, 0x03, 0x9b, 0x33, 0xd5,
- 0xab, 0x43, 0x6a, 0x1b, 0xdd, 0x5f, 0x11, 0xa7, 0x8b, 0xae, 0x61, 0x02,
- 0xb8, 0x9f, 0xd8, 0x22, 0xc7, 0xc6, 0xa6, 0x29, 0x44, 0xa3, 0x54, 0x62,
- 0x9d, 0x5f, 0x79, 0x75, 0xa6, 0x8f, 0x40, 0x1f, 0xa5, 0xda, 0x01, 0xe8,
- 0xf0, 0x11, 0x62, 0x75, 0xc4, 0xd9, 0x4e, 0x97, 0x6b, 0x29, 0xd0, 0x7c,
- 0xca, 0xed, 0xb7, 0x9d, 0x84, 0x26, 0x14, 0xe2, 0x74, 0x3f, 0xc2, 0x83,
- 0x6b, 0xbd, 0xee, 0x71, 0xf0, 0x4d, 0xd3, 0x87, 0x68, 0x97, 0x1c, 0x1b,
- 0x46, 0x21, 0x70, 0x22, 0xf9, 0x80, 0x56, 0xfc, 0x3e, 0xcb, 0x35, 0x48,
- 0x6b, 0x94, 0x80, 0xeb, 0xf3, 0x19, 0xcd, 0xe0, 0x55, 0x62, 0x1b, 0x37,
- 0x07, 0xc6, 0x35, 0x43, 0x76, 0xd8, 0x66, 0x8d, 0x70, 0x03, 0xd8, 0x37,
- 0x2c, 0xb0, 0xa7, 0x19, 0xca, 0xa3, 0x76, 0x2a, 0xe4, 0x91, 0xd0, 0x5c,
- 0x97, 0x1a, 0xdc, 0xdb, 0xee, 0xb0, 0x43, 0xa4, 0xae, 0xe4, 0xf3, 0xca,
- 0x52, 0x1a, 0x51, 0xf0, 0x10, 0x03, 0x47, 0x93, 0xf9, 0xe3, 0x1f, 0xf1,
- 0xbf, 0xe3, 0x55, 0x1f, 0x2d, 0xc8, 0xc6, 0x17, 0xcb, 0x64, 0x55, 0x99,
- 0xe0, 0x5f, 0xb0, 0x51, 0x04, 0x62, 0x50, 0x36, 0xa6, 0x73, 0x92, 0x23,
- 0xb7, 0xb1, 0xa1, 0xa9, 0xd1, 0x29, 0x82, 0xc5, 0x4a, 0xbc, 0xd2, 0xe3,
- 0xa4, 0xba, 0xe7, 0x88, 0xcc, 0xef, 0x27, 0x8b, 0xbc, 0x6c, 0x89, 0x13,
- 0x97, 0x50, 0x57, 0x9f, 0x7a, 0x22, 0x4f, 0x8b, 0x2b, 0xd4, 0x87, 0xa3,
- 0x1f, 0x9f, 0x5f, 0x5c, 0x62, 0xa2, 0xa7, 0xfc, 0x8b, 0x1a, 0x6f, 0xeb,
- 0xe3, 0x80, 0xd1, 0x41, 0x63, 0x51, 0x39, 0x02, 0x2c, 0x81, 0xdd, 0xcb,
- 0xe5, 0x43, 0x0d, 0x82, 0xa4, 0x2a, 0x97, 0xee, 0x13, 0x4f, 0xef, 0x39,
- 0x69, 0x06, 0x12, 0x5d, 0x63, 0x6d, 0x25, 0xf1, 0xca, 0xc2, 0x11, 0x78,
- 0x0c, 0x3d, 0xb9, 0x33, 0x31, 0x0a, 0xb1, 0x58, 0x9b, 0x5d, 0xea, 0x8c,
- 0xbf, 0x64, 0x17, 0x85, 0x8a, 0xd6, 0x6b, 0x5c, 0xb5, 0x3d, 0xc9, 0x27,
- 0x98, 0x4e, 0xd1, 0x24, 0xbf, 0x15, 0xe5, 0x48, 0xd3, 0x8b, 0x69, 0x1c,
- 0x03, 0x3f, 0x4f, 0xe9, 0x42, 0x2c, 0x51, 0x44, 0x7b, 0x41, 0x4e, 0xb6,
- 0x29, 0xa0, 0x12, 0xdc, 0xcf, 0x7a, 0x98, 0x88, 0xad, 0xd4, 0x0c, 0xb2,
- 0x7c, 0x30, 0x69, 0x97, 0xb8, 0x27, 0xfe, 0x65, 0xd6, 0xe1, 0xf9, 0x06,
- 0x44, 0x00, 0x2d, 0xa7, 0x50, 0x34, 0x0c, 0x28, 0x1a, 0xb1, 0x6e, 0x5e,
- 0x96, 0x64, 0xa5, 0xc9, 0x17, 0xa2, 0xb4, 0x5f, 0xa9, 0x05, 0x37, 0x9e,
- 0xa6, 0xe5, 0x4a, 0x84, 0xfd, 0x91, 0x28, 0x0e, 0x6a, 0x02, 0x6a, 0x8b,
- 0x18, 0xa5, 0x85, 0x9f, 0xa4, 0xf2, 0x96, 0x4c, 0x54, 0xb7, 0xad, 0x41,
- 0x8e, 0xc3, 0x20, 0x8d, 0x49, 0x12, 0x1a, 0x98, 0xe0, 0x99, 0x5e, 0x4c,
- 0x90, 0x5b, 0xaa, 0x18, 0x47, 0xdc, 0x66, 0x9a, 0x8e, 0x53, 0xd6, 0x96,
- 0x74, 0x78, 0xbc, 0x60, 0xf5, 0x7d, 0xe3, 0xbc, 0x10, 0x3d, 0x15, 0xf3,
- 0x4c, 0xda, 0x61, 0x9e, 0xc1, 0xd3, 0x4e, 0x63, 0x49, 0x99, 0xab, 0x92,
- 0x65, 0x63, 0x44, 0x47, 0xf8, 0x92, 0xf7, 0x15, 0x1b, 0x02, 0x3f, 0xd3,
- 0xf8, 0x06, 0x19, 0xa6, 0xe2, 0xde, 0x17, 0xf2, 0x1a, 0x25, 0x37, 0xf1,
- 0x5d, 0x9a, 0xe5, 0x83, 0x4a, 0xaa, 0x51, 0xd3, 0x72, 0x58, 0x10, 0x4d,
- 0x8c, 0x6f, 0x64, 0xb3, 0xf8, 0x90, 0xf3, 0xbb, 0x1a, 0xbc, 0x04, 0xed,
- 0x4c, 0x13, 0x8d, 0xb0, 0x45, 0x30, 0xb5, 0x9c, 0x6f, 0x8b, 0x7d, 0x16,
- 0xee, 0xb3, 0x46, 0x9c, 0x1e, 0x42, 0xad, 0x5c, 0x5e, 0x8a, 0x3e, 0x19,
- 0x17, 0x77, 0xed, 0xa7, 0xae, 0xb8, 0xfb, 0xe5, 0xa7, 0x0e, 0x01, 0xd3,
- 0x20, 0xab, 0xe3, 0xf3, 0xe1, 0xb7, 0x91, 0xf3, 0x96, 0xb4, 0x45, 0xf3,
- 0xca, 0x81, 0xf3, 0xf3, 0x02, 0xf9, 0x05, 0x87, 0xee, 0x9f, 0x3c, 0x75,
- 0xee, 0xd0, 0x51, 0xff, 0x7a, 0xd2, 0xce, 0x0f, 0x86, 0xdf, 0xd6, 0xce,
- 0x98, 0x77, 0x23, 0x58, 0x12, 0x47, 0x5d, 0x1e, 0xe0, 0x24, 0xaa, 0xdc,
- 0x82, 0xd2, 0xb8, 0xb5, 0x8f, 0x26, 0xbf, 0xe2, 0xee, 0xd7, 0x21, 0x3f,
- 0x6a, 0xe7, 0x31, 0xf2, 0x0b, 0xf7, 0xad, 0x85, 0xfc, 0x68, 0xfa, 0x0d,
- 0xf2, 0xb3, 0xb5, 0x6e, 0xa7, 0xbf, 0x75, 0xe4, 0x57, 0x66, 0x46, 0xb7,
- 0x20, 0xbd, 0x20, 0xc3, 0xad, 0x49, 0x74, 0x01, 0x29, 0xd5, 0xe2, 0x1a,
- 0xdb, 0x2d, 0xf7, 0xdf, 0x21, 0x7e, 0x40, 0x93, 0xfc, 0x24, 0x03, 0x39,
- 0x08, 0x94, 0xac, 0x26, 0x7e, 0x23, 0x6c, 0x73, 0xa3, 0x35, 0x74, 0x3f,
- 0x70, 0xb2, 0x4a, 0x58, 0xad, 0xcb, 0xe0, 0x25, 0xa6, 0x1b, 0x4c, 0x50,
- 0x23, 0x3e, 0xb9, 0x5d, 0xed, 0x66, 0xa3, 0x45, 0x4e, 0x89, 0x35, 0xd2,
- 0x3b, 0x45, 0x4c, 0x00, 0x5b, 0xc1, 0xe9, 0x4d, 0x6a, 0x65, 0xa0, 0xf1,
- 0xd7, 0x45, 0x28, 0xe7, 0xd9, 0x70, 0x25, 0x12, 0xb4, 0xc9, 0xce, 0xe6,
- 0xe2, 0x01, 0x10, 0x1b, 0x19, 0x82, 0x59, 0x62, 0x8b, 0x67, 0x71, 0x60,
- 0x13, 0x73, 0xe7, 0x6f, 0x00, 0xd6, 0x84, 0x8f, 0x10, 0xa8, 0x5b, 0x85,
- 0x83, 0x70, 0x58, 0x99, 0xf2, 0xef, 0x20, 0xe4, 0xad, 0x09, 0x51, 0xe5,
- 0xd5, 0x90, 0xac, 0x33, 0xe1, 0xbb, 0xcd, 0x38, 0x05, 0xe5, 0xc3, 0xb5,
- 0x48, 0xd8, 0xc6, 0x22, 0xc3, 0x31, 0xe7, 0x72, 0x23, 0x2c, 0xb4, 0x33,
- 0x09, 0xfd, 0xa2, 0x2e, 0xa4, 0x49, 0x8c, 0x30, 0x71, 0x1e, 0x3a, 0x3d,
- 0x1a, 0x0e, 0x11, 0x9e, 0x5f, 0x47, 0x57, 0xae, 0xa3, 0xd1, 0x47, 0x4b,
- 0x79, 0x8b, 0xa3, 0x68, 0x61, 0x4c, 0xcc, 0x93, 0xdf, 0xd0, 0x0b, 0x99,
- 0xd0, 0x82, 0x21, 0x4f, 0x91, 0x09, 0x93, 0x84, 0xcf, 0x75, 0x69, 0x53,
- 0xb2, 0xfb, 0x1c, 0x0c, 0x7e, 0xa1, 0x4f, 0x9f, 0xc7, 0xd7, 0x09, 0x27,
- 0x33, 0x8a, 0x33, 0xc9, 0x47, 0x1d, 0x69, 0x3e, 0x7c, 0x7b, 0xda, 0xd4,
- 0xa5, 0xc5, 0xc1, 0xb6, 0xa6, 0x1d, 0x55, 0x12, 0x8d, 0x90, 0x2c, 0xe6,
- 0xd3, 0x8c, 0x64, 0xf1, 0x9b, 0xa1, 0xc9, 0x16, 0x20, 0x5d, 0x89, 0x01,
- 0x77, 0xc8, 0x07, 0x62, 0x5c, 0xea, 0xfc, 0x99, 0x9d, 0xcb, 0x1d, 0x1b,
- 0x60, 0xe4, 0xa6, 0xdc, 0xb4, 0x96, 0xf2, 0x33, 0x5e, 0x2b, 0xad, 0xfa,
- 0xa4, 0x79, 0xa8, 0x72, 0x42, 0x35, 0x5e, 0x80, 0x9f, 0xc7, 0xc9, 0x22,
- 0xde, 0x49, 0x82, 0x5e, 0x9d, 0xac, 0x48, 0xf0, 0x63, 0x49, 0xfb, 0x54,
- 0x47, 0xb5, 0xaf, 0x47, 0x44, 0xf4, 0x11, 0x1b, 0x93, 0xa6, 0x6a, 0x29,
- 0xa3, 0xb4, 0x90, 0xee, 0x29, 0xe3, 0x84, 0xd4, 0x9d, 0x0d, 0xac, 0x47,
- 0xb9, 0xc4, 0x15, 0xb6, 0x5e, 0xf0, 0x80, 0x62, 0xd6, 0x75, 0x52, 0x00,
- 0x45, 0xb8, 0x69, 0xfd, 0x96, 0x5e, 0xeb, 0x64, 0x7e, 0xcd, 0xc9, 0x8c,
- 0x2f, 0x5b, 0x63, 0xa5, 0x92, 0xa9, 0x4f, 0xef, 0xb5, 0x88, 0xca, 0x71,
- 0xbe, 0x5a, 0x30, 0xeb, 0x97, 0xf7, 0x94, 0x1f, 0x31, 0x0f, 0x97, 0xb8,
- 0xc9, 0x20, 0x1b, 0x7c, 0xd0, 0x12, 0x2c, 0xe0, 0x3a, 0x94, 0x90, 0x52,
- 0x08, 0x00, 0xb4, 0x60, 0x25, 0xb8, 0x87, 0x7c, 0xc6, 0x57, 0xed, 0x68,
- 0x99, 0x4e, 0x27, 0x12, 0x3a, 0xe6, 0x41, 0x43, 0x1a, 0xce, 0x1a, 0x6e,
- 0xa8, 0x18, 0x54, 0x93, 0x85, 0x90, 0xec, 0x8b, 0x10, 0xa9, 0x4d, 0x8e,
- 0xd3, 0x9d, 0xd3, 0xdc, 0xb7, 0x4c, 0x68, 0xd6, 0x37, 0x34, 0x51, 0xa1,
- 0x7e, 0x4d, 0xdd, 0xc5, 0xe9, 0x14, 0x77, 0x18, 0x35, 0x93, 0x2f, 0xe7,
- 0xe8, 0xbd, 0xba, 0x52, 0x77, 0x69, 0x9e, 0xcd, 0x67, 0x4d, 0x3b, 0xc8,
- 0xe6, 0xc5, 0xc9, 0xf0, 0x30, 0x3a, 0x1b, 0x46, 0x67, 0x6f, 0x4f, 0x7f,
- 0xe0, 0xc3, 0x85, 0x88, 0x63, 0x00, 0x70, 0x70, 0xd7, 0xc1, 0x8b, 0xd1,
- 0x5d, 0x9c, 0xa7, 0x50, 0xeb, 0x7a, 0xeb, 0xb9, 0xa1, 0x40, 0x42, 0xe0,
- 0xfc, 0xdc, 0xdb, 0x16, 0xfb, 0xf0, 0x48, 0xbe, 0xb5, 0x10, 0x23, 0x98,
- 0xc4, 0x45, 0x9a, 0xe4, 0x62, 0x0f, 0x1f, 0x5b, 0x12, 0xdf, 0xb2, 0x99,
- 0x53, 0xc6, 0x36, 0xb3, 0xf0, 0x58, 0x4b, 0x20, 0x1b, 0x5f, 0x94, 0xd4,
- 0x3d, 0x4d, 0xb4, 0x16, 0xd9, 0x41, 0x13, 0xbd, 0x16, 0xfd, 0x77, 0x8d,
- 0x4f, 0x3a, 0x88, 0x54, 0x5e, 0xe9, 0xed, 0xcb, 0xa6, 0x79, 0xa8, 0xe3,
- 0x4e, 0xfa, 0x3e, 0x9e, 0x97, 0x79, 0xb6, 0x20, 0x9e, 0xff, 0x55, 0xcc,
- 0x2c, 0x0f, 0x33, 0x3d, 0x8a, 0x93, 0x59, 0x23, 0xfa, 0xa0, 0xc8, 0xc6,
- 0xb7, 0x49, 0xa9, 0x1e, 0x11, 0xfd, 0x2b, 0x48, 0x59, 0x83, 0x5e, 0x28,
- 0x7c, 0x93, 0x17, 0x74, 0x42, 0xd7, 0x93, 0x12, 0x10, 0x93, 0x1c, 0x0d,
- 0xa5, 0x69, 0x9e, 0x34, 0x28, 0x88, 0x6a, 0x78, 0x22, 0x9f, 0x26, 0xbc,
- 0x2f, 0x53, 0xab, 0x07, 0x24, 0xf6, 0x8f, 0xf9, 0xa6, 0x61, 0x4f, 0xfe,
- 0xcb, 0xc0, 0xff, 0xfd, 0xe3, 0xbe, 0xa9, 0xa0, 0x3f, 0xb5, 0x2f, 0x43,
- 0x33, 0x44, 0xbe, 0x7a, 0xb5, 0x07, 0x6d, 0x69, 0xd0, 0x1c, 0xb3, 0x97,
- 0xeb, 0x96, 0x2b, 0xcb, 0x32, 0xf1, 0x34, 0xb4, 0x8e, 0x56, 0x14, 0xbe,
- 0xff, 0x48, 0x32, 0x0e, 0x86, 0xc2, 0x64, 0xc2, 0xe6, 0x2c, 0xf1, 0x8c,
- 0xee, 0xad, 0xf3, 0xe3, 0x37, 0x8f, 0x84, 0xd6, 0xc1, 0x34, 0xb9, 0x50,
- 0xbd, 0xc3, 0x69, 0xfd, 0x92, 0xbe, 0xea, 0x46, 0x5a, 0xcb, 0xfa, 0xad,
- 0x35, 0xf7, 0xb7, 0x25, 0x43, 0x14, 0x4d, 0x34, 0xb5, 0x20, 0xb3, 0xdc,
- 0x55, 0x97, 0x2a, 0x5f, 0x4f, 0x0c, 0xb6, 0xc4, 0x74, 0xc0, 0x96, 0x14,
- 0x0d, 0xb7, 0x49, 0x27, 0x98, 0x47, 0x47, 0xa3, 0xb4, 0x34, 0x8e, 0x4d,
- 0xf8, 0x31, 0x92, 0x95, 0xa2, 0xdb, 0x64, 0xe5, 0x02, 0x78, 0xed, 0x33,
- 0x5e, 0x82, 0xe6, 0xda, 0xe9, 0x92, 0x20, 0x59, 0x9c, 0x7e, 0x99, 0xb3,
- 0xb2, 0xff, 0xbb, 0x08, 0xfb, 0x1f, 0xe9, 0xb6, 0x8a, 0x12, 0xd9, 0xef,
- 0x73, 0xa3, 0xa5, 0x87, 0xcf, 0xe1, 0x54, 0xf3, 0x46, 0xba, 0x8d, 0x03,
- 0xa7, 0x9a, 0xae, 0xda, 0x58, 0xaf, 0xa0, 0x68, 0x14, 0x60, 0x52, 0x9a,
- 0x75, 0x5f, 0x94, 0x16, 0x28, 0x8e, 0x28, 0xfa, 0x69, 0x3a, 0xca, 0x11,
- 0x9a, 0x23, 0x72, 0x52, 0x18, 0x30, 0xd7, 0x10, 0x55, 0x3c, 0x01, 0xb1,
- 0x15, 0x29, 0x1d, 0xdf, 0xe2, 0x24, 0x29, 0xc7, 0x0a, 0x37, 0xdc, 0x44,
- 0x3f, 0x01, 0xa7, 0xd2, 0xee, 0xea, 0xba, 0x47, 0x5c, 0xc6, 0x0c, 0x4c,
- 0xc3, 0x49, 0x17, 0xe9, 0x5c, 0x02, 0xb7, 0x24, 0x72, 0x2d, 0xe0, 0x41,
- 0x8e, 0x09, 0x21, 0xe4, 0xff, 0xfd, 0xd1, 0xc9, 0x85, 0x32, 0xcb, 0xd1,
- 0x6a, 0x4d, 0xea, 0x46, 0xb4, 0x9d, 0x94, 0xe3, 0xed, 0xc5, 0x6d, 0xba,
- 0x3d, 0x2f, 0x8a, 0xc9, 0x68, 0x2b, 0x4c, 0x28, 0xe7, 0x39, 0x73, 0x10,
- 0xca, 0xf9, 0x37, 0x87, 0xc3, 0x4f, 0x76, 0x77, 0x59, 0x96, 0x5e, 0x52,
- 0xd3, 0x9b, 0xb4, 0x06, 0x8d, 0x4c, 0xb9, 0x82, 0x96, 0x7d, 0x36, 0x28,
- 0xb2, 0x2d, 0x28, 0x00, 0x8e, 0xe1, 0x62, 0x95, 0x10, 0xc8, 0x02, 0x47,
- 0xa6, 0xe6, 0x91, 0xb1, 0xfd, 0xf1, 0xb7, 0x8c, 0x27, 0x11, 0xc2, 0x40,
- 0xb4, 0x43, 0xf4, 0x92, 0xff, 0xfd, 0xe0, 0x11, 0x07, 0x38, 0x4d, 0x65,
- 0x4b, 0xf8, 0x5d, 0x15, 0xf2, 0x39, 0x34, 0x67, 0x12, 0x85, 0x5f, 0xd7,
- 0xe9, 0x8a, 0xcd, 0x64, 0x03, 0x9e, 0x67, 0x2f, 0x3a, 0x3a, 0xbe, 0x00,
- 0x41, 0x1e, 0xbf, 0xfd, 0x0a, 0xc2, 0x21, 0xe7, 0xda, 0x5d, 0xcf, 0xd3,
- 0x9f, 0x99, 0xd3, 0x51, 0x9b, 0x85, 0x2c, 0x30, 0xdf, 0x65, 0xfe, 0x84,
- 0xd6, 0x9a, 0xe3, 0xf5, 0xe2, 0x55, 0xc4, 0x19, 0xfb, 0x6d, 0x97, 0x29,
- 0x16, 0xc6, 0x78, 0x78, 0x10, 0xce, 0xee, 0x57, 0x62, 0x88, 0x8c, 0x2a,
- 0x44, 0xcc, 0xe5, 0x6a, 0xd5, 0xe6, 0x38, 0xe7, 0x78, 0x24, 0xbb, 0x1a,
- 0x24, 0x2a, 0x92, 0x69, 0x43, 0x9d, 0x3c, 0x1e, 0x8a, 0xa7, 0x3a, 0x30,
- 0x24, 0xc3, 0x37, 0x62, 0x73, 0xfd, 0xf7, 0x9b, 0xc5, 0x56, 0x8d, 0x79,
- 0x3a, 0x76, 0xf9, 0xd6, 0xf4, 0xf1, 0xea, 0x11, 0x6f, 0x6a, 0x90, 0x3c,
- 0xb1, 0xd8, 0x1d, 0x0f, 0xcb, 0x05, 0xc4, 0x8a, 0xf7, 0xc4, 0x41, 0x55,
- 0x59, 0x7a, 0xda, 0x53, 0x95, 0x39, 0xf5, 0x52, 0x6b, 0xa4, 0x8d, 0x95,
- 0xb0, 0xb9, 0xb2, 0x45, 0x3c, 0x68, 0xb3, 0xb1, 0xa9, 0x18, 0x96, 0xa3,
- 0x95, 0x42, 0x85, 0x9a, 0xa6, 0x74, 0xa1, 0xbe, 0xfc, 0xa8, 0x7b, 0x48,
- 0x22, 0xed, 0xfb, 0xc3, 0x83, 0xf7, 0x5f, 0xbe, 0x7b, 0x7b, 0x74, 0x7a,
- 0xdc, 0xad, 0x53, 0xe4, 0x95, 0x70, 0x7d, 0xe4, 0xf8, 0x26, 0x65, 0xcf,
- 0x65, 0xc7, 0x87, 0x51, 0x96, 0xb8, 0xdd, 0x91, 0xfc, 0x8a, 0xdf, 0x10,
- 0x8e, 0xad, 0x0b, 0x5e, 0x57, 0x7f, 0x96, 0xf3, 0x09, 0x12, 0x10, 0x83,
- 0xc9, 0x5b, 0xce, 0x89, 0xba, 0xd9, 0x6c, 0x80, 0x2d, 0xea, 0x2e, 0xd3,
- 0x1f, 0xdd, 0xcf, 0x24, 0x62, 0x07, 0x48, 0x20, 0x01, 0x04, 0x56, 0x45,
- 0x74, 0x47, 0xe4, 0x88, 0x61, 0x16, 0x46, 0x34, 0x9e, 0x96, 0xed, 0x2e,
- 0x2a, 0x61, 0x0d, 0xdc, 0x12, 0x51, 0x72, 0x5f, 0x07, 0x39, 0xce, 0xcb,
- 0x6e, 0x2f, 0x4a, 0x52, 0xb8, 0xec, 0xc2, 0x10, 0xae, 0x49, 0x6b, 0x1a,
- 0x0e, 0x87, 0x55, 0xc6, 0x42, 0xd7, 0x83, 0xe4, 0x21, 0x41, 0x14, 0x88,
- 0xbe, 0x75, 0x08, 0x23, 0x70, 0x19, 0x7d, 0x97, 0xe5, 0x48, 0xef, 0x3f,
- 0xb2, 0x38, 0x4c, 0x7b, 0x28, 0x9e, 0xaf, 0x9a, 0x1e, 0x5e, 0xd6, 0x88,
- 0x58, 0x2b, 0xb8, 0x16, 0xbc, 0xc6, 0xf3, 0x83, 0xcb, 0xaf, 0x5b, 0x83,
- 0x15, 0x3c, 0x6a, 0xe3, 0x87, 0x6f, 0x1b, 0xb0, 0xd1, 0x72, 0x6d, 0x9c,
- 0xe7, 0x07, 0xae, 0x9a, 0xea, 0x21, 0xaa, 0xdd, 0x36, 0x2d, 0x52, 0x2a,
- 0xf7, 0xbe, 0xf6, 0xbe, 0x69, 0x25, 0x4a, 0xbb, 0x6c, 0xf8, 0xae, 0x59,
- 0x7b, 0xd5, 0xb4, 0xde, 0x34, 0x36, 0x5b, 0x3e, 0xab, 0xee, 0xa2, 0xb1,
- 0x9b, 0xe6, 0xff, 0x8c, 0xab, 0x26, 0xc6, 0xe9, 0xa9, 0xf1, 0x50, 0x1f,
- 0xb4, 0xdb, 0xce, 0x4d, 0x95, 0x9d, 0x7e, 0x24, 0x3f, 0xf5, 0x11, 0xc0,
- 0x0d, 0x06, 0x23, 0x2c, 0x56, 0xae, 0xaa, 0xc4, 0x54, 0xd6, 0x4a, 0xa0,
- 0x67, 0x2b, 0x47, 0xec, 0x99, 0xfc, 0x55, 0xdf, 0x2c, 0xd7, 0x93, 0xbc,
- 0xc7, 0xda, 0x04, 0x42, 0xd6, 0x99, 0x5f, 0xe4, 0xd9, 0x58, 0x92, 0xb5,
- 0x82, 0xc8, 0xc2, 0xf7, 0x79, 0x72, 0x13, 0x17, 0x37, 0xd1, 0xb2, 0x4c,
- 0xd9, 0x62, 0x5e, 0xd7, 0x01, 0x96, 0x1c, 0x5e, 0x68, 0xaa, 0xbf, 0xa5,
- 0x04, 0x6a, 0x6a, 0xbb, 0x5b, 0x3b, 0x20, 0x33, 0x8a, 0xea, 0x13, 0xc4,
- 0x5c, 0xb1, 0x72, 0x5f, 0x57, 0x5b, 0x87, 0xa7, 0xfd, 0x10, 0x12, 0x6e,
- 0xc6, 0xb9, 0x9c, 0x30, 0xdb, 0x27, 0x57, 0x34, 0xdd, 0x34, 0x48, 0x13,
- 0x5c, 0xba, 0x2e, 0x70, 0xc5, 0xa5, 0x57, 0x6d, 0xc6, 0x29, 0xfb, 0x16,
- 0xec, 0x44, 0x2f, 0x9f, 0x42, 0x40, 0xe3, 0xea, 0x37, 0xcf, 0x6f, 0x47,
- 0x41, 0x57, 0x6c, 0x8c, 0x24, 0x2a, 0x6e, 0xb7, 0xe7, 0xbc, 0xe6, 0x2c,
- 0x93, 0x82, 0xbd, 0xbc, 0x3c, 0xb5, 0x4d, 0x46, 0x49, 0x12, 0x0c, 0x2e,
- 0xb6, 0xfa, 0x4d, 0xa7, 0x5b, 0x2c, 0xb3, 0x5b, 0x0e, 0x1c, 0x52, 0x4f,
- 0x0a, 0xcd, 0x17, 0x6b, 0xca, 0x28, 0x86, 0xdb, 0x84, 0x88, 0x2f, 0x38,
- 0x31, 0xe1, 0xd7, 0x50, 0xfb, 0x2e, 0x10, 0x59, 0x89, 0xb5, 0xd2, 0x29,
- 0x0d, 0xbe, 0x9c, 0x24, 0x8a, 0xdf, 0x57, 0x67, 0x74, 0x82, 0xe4, 0xaa,
- 0x26, 0x6c, 0xea, 0xf3, 0x64, 0x6e, 0x0e, 0x41, 0x09, 0x93, 0x80, 0x3a,
- 0x14, 0x47, 0x15, 0x1b, 0x93, 0xbc, 0x56, 0xb4, 0xdc, 0xba, 0x93, 0x64,
- 0x9a, 0xe2, 0x01, 0x86, 0x89, 0xd5, 0x4c, 0x40, 0x55, 0x5c, 0x24, 0x61,
- 0x50, 0x9d, 0xc0, 0x88, 0x9e, 0xb5, 0x07, 0x38, 0xd4, 0x0b, 0xda, 0x55,
- 0x51, 0x6f, 0x6e, 0x53, 0x12, 0xc0, 0x80, 0xdf, 0x28, 0x7a, 0xa2, 0x45,
- 0x2b, 0xf1, 0xc0, 0x56, 0x0e, 0x92, 0x77, 0x4b, 0xaf, 0x34, 0x58, 0xb0,
- 0x54, 0x45, 0x5a, 0xe4, 0x0d, 0x3d, 0x9b, 0x5d, 0xab, 0x42, 0x98, 0x02,
- 0xaa, 0x8c, 0x0d, 0x28, 0xe5, 0x08, 0xc4, 0x65, 0x98, 0xd6, 0x28, 0xc9,
- 0x3f, 0x7b, 0x7b, 0x6b, 0x8c, 0xbe, 0x9a, 0x83, 0xac, 0x41, 0x1a, 0xbc,
- 0x18, 0xfd, 0x22, 0xbe, 0x4a, 0xec, 0x2c, 0x12, 0x1d, 0xb3, 0xc8, 0x98,
- 0x8d, 0x69, 0x09, 0x25, 0xc2, 0x09, 0x9f, 0xcd, 0xb3, 0xa6, 0x4b, 0x6c,
- 0x39, 0xe6, 0xa3, 0xc8, 0x06, 0x00, 0x67, 0xc6, 0x64, 0x57, 0xb4, 0x79,
- 0xfb, 0x8b, 0x69, 0xba, 0x60, 0xd6, 0x9e, 0x67, 0xcb, 0xeb, 0x1b, 0x0e,
- 0x3c, 0x03, 0x5f, 0x91, 0x0b, 0xb6, 0xc5, 0xb1, 0x51, 0x4b, 0x95, 0x86,
- 0x3c, 0x7b, 0x97, 0x4d, 0xd9, 0xac, 0xb9, 0x59, 0x6b, 0xff, 0xe9, 0xce,
- 0x2e, 0x86, 0xfb, 0x74, 0xe7, 0xd3, 0x4a, 0xb4, 0x3b, 0x9b, 0xd3, 0xe3,
- 0x31, 0x72, 0x61, 0xa2, 0x1f, 0xf9, 0xf2, 0xf8, 0xa9, 0xd5, 0x17, 0x03,
- 0xbb, 0x6c, 0x3c, 0x0f, 0xed, 0xb0, 0x71, 0x71, 0x2b, 0xae, 0x82, 0x8e,
- 0xbd, 0xcf, 0xaf, 0x77, 0xd4, 0x9a, 0xe1, 0xfc, 0xc6, 0x2d, 0x68, 0x3f,
- 0x4e, 0xe5, 0xe5, 0xdc, 0x46, 0x63, 0x51, 0x90, 0xd6, 0x7b, 0x01, 0x36,
- 0x20, 0xc0, 0x07, 0x80, 0x51, 0x78, 0xb5, 0xde, 0x32, 0x73, 0x70, 0x78,
- 0xe8, 0xbd, 0x76, 0xd5, 0xb8, 0xb0, 0x27, 0x1c, 0x17, 0xb6, 0x2e, 0x59,
- 0xaa, 0x76, 0xfc, 0x01, 0x2e, 0xd3, 0xd3, 0x20, 0x6c, 0x18, 0xcc, 0x2b,
- 0xf9, 0xb9, 0x66, 0x94, 0x6c, 0x10, 0x18, 0x8c, 0x94, 0xcb, 0x22, 0xa9,
- 0xaf, 0xe8, 0xfa, 0xcc, 0x93, 0x3a, 0xf0, 0x98, 0xae, 0xa9, 0xa6, 0x3e,
- 0xb0, 0xc1, 0x73, 0xdb, 0x27, 0xac, 0x41, 0xf0, 0x43, 0xa4, 0x6e, 0x2c,
- 0xee, 0xfb, 0x46, 0x64, 0x91, 0x43, 0x0a, 0x13, 0xcf, 0x37, 0xfc, 0x3e,
- 0x0f, 0x48, 0x9d, 0x9e, 0x07, 0x21, 0xe5, 0x3a, 0xb3, 0x92, 0x16, 0x29,
- 0xce, 0x27, 0xce, 0x29, 0xd3, 0x84, 0xeb, 0x30, 0x29, 0x9b, 0xf3, 0x74,
- 0x18, 0xd2, 0x26, 0x04, 0x33, 0x31, 0x3f, 0x96, 0x97, 0x00, 0x2d, 0xb0,
- 0xbb, 0x89, 0xf7, 0x5a, 0xc9, 0xd6, 0x88, 0x66, 0xa9, 0x84, 0x81, 0x06,
- 0xa9, 0x1f, 0xf5, 0x05, 0xd3, 0x13, 0xf6, 0xa3, 0xfc, 0x6c, 0xa7, 0x41,
- 0x24, 0x96, 0xe5, 0x19, 0xa7, 0xe2, 0x20, 0x4d, 0x42, 0x5e, 0x91, 0x5c,
- 0x65, 0x89, 0xe5, 0xf3, 0x80, 0x2f, 0x8c, 0x15, 0x20, 0xd7, 0x03, 0x5b,
- 0x3d, 0x9a, 0x49, 0x56, 0x9b, 0xc3, 0x2d, 0x33, 0xa0, 0xe3, 0xe6, 0xd5,
- 0xc6, 0xe2, 0xfc, 0x5a, 0x59, 0x94, 0x8b, 0x30, 0x0d, 0xc2, 0xc9, 0x34,
- 0xd6, 0xa0, 0xdf, 0x30, 0x4f, 0x5c, 0x8b, 0xbe, 0xc0, 0xb1, 0x16, 0x77,
- 0x2d, 0x11, 0x7a, 0x50, 0x8b, 0xc6, 0xf7, 0x93, 0xf6, 0x80, 0x15, 0xb9,
- 0x39, 0x25, 0x29, 0x21, 0x76, 0x58, 0x62, 0x87, 0xdf, 0x1d, 0x05, 0x99,
- 0x8b, 0x7c, 0xcc, 0x30, 0x29, 0x10, 0x82, 0x44, 0x5c, 0xcd, 0xd7, 0xc5,
- 0xbf, 0x98, 0x9e, 0x00, 0xec, 0xd8, 0xd7, 0x80, 0x02, 0x4f, 0x16, 0x2e,
- 0x07, 0x09, 0x10, 0x31, 0x02, 0x4e, 0xc3, 0x38, 0xb0, 0x00, 0x7c, 0xc5,
- 0xd5, 0xb9, 0x66, 0x74, 0x1a, 0xc8, 0x30, 0x08, 0xb1, 0xab, 0x90, 0x2b,
- 0x76, 0xf1, 0xfa, 0x70, 0xf7, 0xd3, 0x27, 0x9f, 0x91, 0x90, 0xbe, 0x42,
- 0xda, 0x90, 0x5f, 0x32, 0x09, 0x70, 0x5d, 0x1f, 0xd9, 0xa4, 0x56, 0x25,
- 0x13, 0x30, 0xd5, 0x9f, 0x4f, 0xcc, 0x2f, 0xbb, 0x4f, 0x20, 0xf3, 0xa8,
- 0xcf, 0xb0, 0x11, 0x39, 0x95, 0xd1, 0x22, 0x1a, 0x98, 0xa8, 0xe0, 0x48,
- 0x62, 0x9d, 0xe4, 0x4a, 0x1d, 0x04, 0x94, 0xc9, 0x18, 0xbb, 0x9c, 0x37,
- 0x47, 0x2c, 0xf4, 0xe2, 0xf8, 0xf2, 0x82, 0x51, 0xef, 0x2f, 0xcf, 0x2e,
- 0xd6, 0x84, 0xa3, 0xd1, 0xc5, 0xc9, 0x5c, 0x89, 0x17, 0x8d, 0x89, 0x86,
- 0xe1, 0x07, 0x4c, 0xb1, 0x0a, 0xb2, 0x32, 0x78, 0x0b, 0x62, 0x81, 0x27,
- 0x2e, 0x5a, 0xb3, 0x01, 0x82, 0xa4, 0x80, 0xa2, 0x82, 0xbe, 0x41, 0x47,
- 0x89, 0xce, 0xc9, 0x63, 0x13, 0x93, 0x3d, 0x7f, 0x9c, 0x42, 0x30, 0x61,
- 0x26, 0x46, 0x9e, 0xb1, 0xf3, 0xe7, 0x60, 0xb4, 0x0a, 0x3b, 0xe8, 0x65,
- 0x40, 0xbd, 0x97, 0xd6, 0x50, 0x88, 0x90, 0x55, 0x52, 0x04, 0x76, 0x43,
- 0x51, 0xe5, 0x3b, 0xe6, 0xfd, 0xee, 0xb0, 0x04, 0x7f, 0xeb, 0xe0, 0x2d,
- 0x3e, 0x40, 0xbf, 0x24, 0x37, 0x6c, 0xf9, 0x09, 0x33, 0xc2, 0x20, 0xce,
- 0xa7, 0x08, 0x78, 0x8e, 0xeb, 0x14, 0x9a, 0x9a, 0x9d, 0x4a, 0x00, 0x42,
- 0x33, 0x20, 0xc3, 0xe5, 0x19, 0xf0, 0x2e, 0x77, 0x9d, 0x13, 0x3d, 0x53,
- 0xea, 0x90, 0x7d, 0x21, 0xa1, 0x67, 0x5a, 0x22, 0x81, 0xa3, 0x6b, 0xa3,
- 0xea, 0x3a, 0x52, 0xab, 0xb0, 0xff, 0x67, 0x83, 0xdd, 0xad, 0x1a, 0x93,
- 0xe1, 0x08, 0x84, 0x76, 0xce, 0xc2, 0x8e, 0x90, 0x5a, 0xdc, 0x83, 0x58,
- 0x0f, 0x34, 0x18, 0x9d, 0xae, 0x04, 0xc3, 0xf7, 0x38, 0xd7, 0xa7, 0x5a,
- 0x91, 0x55, 0x50, 0xf1, 0x80, 0xad, 0xba, 0x8e, 0xb6, 0x75, 0xcb, 0x25,
- 0x28, 0x60, 0x59, 0xe7, 0xa6, 0x15, 0xf7, 0x7d, 0x93, 0x7f, 0xba, 0xfb,
- 0x27, 0x48, 0xa1, 0x65, 0x27, 0xb8, 0x0f, 0xbc, 0xd0, 0xe4, 0x99, 0xca,
- 0xcc, 0x77, 0x7f, 0xc1, 0xc5, 0xf7, 0x68, 0x40, 0xd5, 0x2f, 0x8a, 0xa7,
- 0x8a, 0xde, 0xcd, 0x35, 0xb0, 0x89, 0x83, 0xfe, 0x0c, 0x6c, 0xc7, 0x2f,
- 0x2a, 0x31, 0x65, 0x88, 0x31, 0x30, 0x73, 0x37, 0x6e, 0x31, 0x31, 0x7e,
- 0xf2, 0x1a, 0x49, 0x46, 0xcf, 0xb2, 0xd0, 0x0c, 0x53, 0xbb, 0x63, 0xb4,
- 0x45, 0x8d, 0x5d, 0x15, 0x54, 0x6b, 0x17, 0x0f, 0xd0, 0x80, 0x42, 0xcb,
- 0x55, 0x2f, 0x6f, 0x9c, 0x34, 0xdb, 0x3d, 0x6c, 0xb1, 0x70, 0x40, 0xc8,
- 0x82, 0x9e, 0x75, 0x94, 0xa2, 0xb7, 0x4b, 0x5c, 0x83, 0x45, 0x95, 0x48,
- 0x38, 0x7d, 0x13, 0x30, 0x4f, 0x94, 0x57, 0x04, 0x7d, 0x28, 0x4c, 0x4e,
- 0x35, 0x6e, 0xc2, 0xd6, 0xb9, 0x21, 0x71, 0xf9, 0xeb, 0xa2, 0x5f, 0x66,
- 0x88, 0xc2, 0x8b, 0x5e, 0x6a, 0x67, 0x9f, 0xb7, 0x93, 0x28, 0x72, 0x97,
- 0x02, 0x79, 0xcf, 0xa0, 0xc9, 0x81, 0xb3, 0x39, 0x54, 0xeb, 0x25, 0x0d,
- 0x65, 0xe8, 0x58, 0xb6, 0x48, 0xed, 0xbd, 0x46, 0x18, 0x95, 0xa1, 0xfe,
- 0x78, 0xb9, 0xc9, 0xfc, 0xee, 0xa6, 0xa3, 0x41, 0xd6, 0x22, 0x16, 0x7a,
- 0xb9, 0x9c, 0xd1, 0x4c, 0xee, 0x93, 0x64, 0xd2, 0x2d, 0xd8, 0x78, 0xcf,
- 0xb8, 0x8c, 0x75, 0x01, 0x99, 0xc3, 0x68, 0xb0, 0xe0, 0x4e, 0x59, 0x40,
- 0xb8, 0x22, 0x7c, 0x24, 0x16, 0x60, 0x10, 0x1b, 0x36, 0x5f, 0xa0, 0x9a,
- 0xa9, 0xbb, 0xad, 0xee, 0x88, 0x18, 0x9e, 0x5c, 0x1e, 0x47, 0x07, 0xef,
- 0x2e, 0xbf, 0xee, 0x04, 0xd8, 0xab, 0x01, 0x1b, 0xc6, 0xf5, 0x5e, 0x92,
- 0x08, 0x71, 0x27, 0xb4, 0x00, 0x41, 0x53, 0x5c, 0x5d, 0x2d, 0x70, 0x0b,
- 0x35, 0x8b, 0xfd, 0xa0, 0xce, 0x22, 0x9e, 0xd5, 0x59, 0x04, 0x67, 0x87,
- 0x83, 0x4f, 0xf4, 0xd3, 0xc5, 0x87, 0x83, 0x92, 0x2c, 0x1a, 0x8a, 0xbb,
- 0x39, 0x39, 0x67, 0xd0, 0x5b, 0xa0, 0x10, 0x07, 0xc3, 0x2d, 0x96, 0xd7,
- 0x1c, 0x26, 0xda, 0x02, 0xb4, 0xc6, 0x70, 0x20, 0x4e, 0x46, 0xd7, 0xf8,
- 0x7f, 0x5a, 0x65, 0x26, 0x26, 0x47, 0x76, 0x50, 0xc6, 0xd0, 0x99, 0xee,
- 0x4c, 0xe1, 0xd3, 0x97, 0xd6, 0xba, 0xd9, 0xd8, 0x40, 0x63, 0xa8, 0x92,
- 0x61, 0xe6, 0xb2, 0x42, 0xb3, 0x7b, 0xc3, 0x5a, 0x30, 0xe2, 0x06, 0xa6,
- 0x93, 0xe5, 0x3b, 0x41, 0x02, 0x35, 0x56, 0x38, 0x56, 0xf9, 0x2b, 0xec,
- 0xab, 0xb2, 0xa0, 0x4f, 0x07, 0x7b, 0x5b, 0xad, 0x1a, 0x94, 0x72, 0x1d,
- 0x96, 0xf7, 0x89, 0x6b, 0x90, 0xd2, 0xcf, 0xc7, 0x97, 0x74, 0x7b, 0x89,
- 0x49, 0x94, 0x08, 0xb6, 0x5c, 0x8e, 0x9c, 0x71, 0x26, 0x3b, 0xf9, 0x4d,
- 0x1c, 0x25, 0x5e, 0xa2, 0xfa, 0x81, 0x22, 0xf6, 0xd8, 0x1e, 0xba, 0x29,
- 0x1b, 0xe6, 0x76, 0x0c, 0xd4, 0x1f, 0x47, 0xe7, 0x24, 0x15, 0xb8, 0x55,
- 0x0e, 0x62, 0xb7, 0xa2, 0x4d, 0xf8, 0x00, 0x68, 0x1c, 0x5b, 0x75, 0x01,
- 0x86, 0x93, 0x78, 0xe3, 0x34, 0xd4, 0x80, 0x88, 0x5f, 0xce, 0xe8, 0x13,
- 0xd6, 0xcc, 0x73, 0x1a, 0x03, 0x7b, 0xec, 0x0c, 0xbc, 0x52, 0x0f, 0x18,
- 0x6b, 0x80, 0x76, 0xff, 0x6d, 0xb4, 0xca, 0x55, 0x6a, 0x31, 0x0d, 0xcc,
- 0x37, 0xec, 0x72, 0xa7, 0x73, 0x81, 0x2a, 0x27, 0x80, 0x18, 0x89, 0x19,
- 0x6c, 0x1c, 0xa7, 0x7b, 0x92, 0xdd, 0xcf, 0x81, 0x1c, 0xd0, 0xa4, 0x26,
- 0x0c, 0x9e, 0x99, 0xda, 0xa0, 0x7a, 0x0d, 0xee, 0xed, 0x0c, 0x1e, 0x42,
- 0x1a, 0x2f, 0x8a, 0xa9, 0xac, 0x4c, 0x8f, 0xd6, 0xfe, 0xfc, 0x49, 0x2f,
- 0x3a, 0x79, 0x73, 0x40, 0xbf, 0x0f, 0xdf, 0x80, 0xb6, 0x73, 0x17, 0xce,
- 0x34, 0x1c, 0x9e, 0x6e, 0x5f, 0x9e, 0x0e, 0x83, 0xea, 0x15, 0xc1, 0xa6,
- 0x37, 0x93, 0x98, 0x61, 0xdc, 0x85, 0x21, 0x1a, 0x53, 0x16, 0x00, 0xd7,
- 0x00, 0xe6, 0x26, 0xbd, 0x0a, 0x0f, 0x85, 0x29, 0x2d, 0xea, 0x42, 0x6f,
- 0x1a, 0x8b, 0xb6, 0x05, 0x1b, 0x2a, 0x88, 0x31, 0xc6, 0xd9, 0x2c, 0xa6,
- 0x7d, 0x23, 0x41, 0x09, 0x5e, 0xe3, 0x4f, 0x68, 0xc9, 0x27, 0xb6, 0x88,
- 0x7c, 0x19, 0x35, 0x33, 0x48, 0xcb, 0x68, 0x4a, 0x23, 0x9c, 0x16, 0xe2,
- 0xf9, 0x47, 0xb4, 0x04, 0x8f, 0x49, 0xf7, 0xaa, 0xa6, 0x36, 0xd2, 0x82,
- 0xed, 0x6c, 0x3d, 0x1e, 0xfa, 0x75, 0x1f, 0x17, 0xe2, 0xcf, 0x4d, 0x72,
- 0xda, 0x7b, 0xa0, 0xb5, 0x08, 0x30, 0x99, 0x0e, 0xb2, 0xe5, 0x36, 0x6e,
- 0xea, 0xc0, 0x72, 0xeb, 0xd0, 0x5d, 0x49, 0xbb, 0xed, 0xcd, 0x4b, 0x2a,
- 0xf5, 0xc8, 0x07, 0x9c, 0x30, 0x7f, 0x67, 0x99, 0x6b, 0x57, 0x4b, 0xae,
- 0xf8, 0x03, 0xbb, 0x61, 0x5b, 0x9c, 0x6d, 0xfd, 0x3c, 0x04, 0x6b, 0xd5,
- 0x7e, 0x2c, 0x2e, 0x8c, 0x52, 0x6d, 0xa7, 0xfd, 0x56, 0x33, 0x85, 0x4f,
- 0xb3, 0x6b, 0x46, 0x3c, 0x95, 0xd0, 0x72, 0x9c, 0x7f, 0xc3, 0x7e, 0xa8,
- 0x2b, 0xe0, 0x53, 0x04, 0xe1, 0xe8, 0x96, 0x57, 0x0d, 0x12, 0x22, 0xf4,
- 0x30, 0x45, 0xe8, 0xb2, 0x27, 0x2e, 0x7d, 0xc1, 0x45, 0x5f, 0x36, 0xdd,
- 0xe4, 0x91, 0x33, 0x0a, 0x8e, 0x57, 0x7c, 0x35, 0xbd, 0x86, 0xed, 0x49,
- 0xc3, 0x75, 0x05, 0x38, 0x64, 0x2d, 0x39, 0xb5, 0x4a, 0x02, 0x9e, 0xa0,
- 0x2a, 0x1b, 0xf3, 0x3c, 0xdc, 0x68, 0x4f, 0x4b, 0x2d, 0xcb, 0xd5, 0x76,
- 0x56, 0x1e, 0x5b, 0xc0, 0x47, 0xce, 0xca, 0xa5, 0x38, 0xe8, 0x0d, 0xdd,
- 0xe1, 0x63, 0x8f, 0x88, 0x9b, 0xc3, 0x23, 0xa9, 0xf7, 0xeb, 0x29, 0x57,
- 0x09, 0xb7, 0x4a, 0xb7, 0x4a, 0xb8, 0x9a, 0x01, 0x69, 0x34, 0x83, 0xd3,
- 0x44, 0x5c, 0x10, 0xcd, 0x36, 0xd9, 0x8c, 0x5e, 0x9a, 0x91, 0xe1, 0xf0,
- 0xb2, 0x98, 0x2f, 0xf5, 0x79, 0x4a, 0xcb, 0x72, 0x7e, 0x94, 0x8c, 0x1b,
- 0x81, 0x30, 0x20, 0x6a, 0x75, 0x2f, 0xb5, 0xd2, 0xf0, 0x78, 0xdc, 0x4a,
- 0xbf, 0x2c, 0xb0, 0x1f, 0x1e, 0x1e, 0x46, 0x9b, 0x87, 0xa0, 0xd0, 0x43,
- 0xe5, 0xa6, 0x87, 0x37, 0x9c, 0xd7, 0x39, 0x65, 0x4c, 0x81, 0x9b, 0x25,
- 0x67, 0xa0, 0x4c, 0x30, 0x47, 0x6c, 0x8a, 0x2e, 0x61, 0x3d, 0x84, 0x2c,
- 0x5e, 0xb1, 0x2d, 0x4b, 0xa0, 0xa4, 0x2a, 0xe2, 0x95, 0x18, 0x06, 0x90,
- 0x6f, 0x6a, 0xbe, 0x7f, 0xbb, 0xff, 0xa4, 0x97, 0xd6, 0x94, 0xf0, 0xe5,
- 0xdc, 0xac, 0x71, 0xce, 0x6c, 0x3c, 0x77, 0xd4, 0xaf, 0x5a, 0x52, 0x2c,
- 0x67, 0xe6, 0xed, 0xc1, 0x25, 0x23, 0x45, 0x97, 0x1a, 0x82, 0xba, 0x26,
- 0xc0, 0xcd, 0x1d, 0x49, 0x50, 0x7f, 0x1c, 0xa0, 0x0c, 0x9a, 0x8e, 0x01,
- 0x59, 0x96, 0x93, 0x25, 0x45, 0xb6, 0x95, 0x28, 0x9b, 0x56, 0xc1, 0x58,
- 0x57, 0xb4, 0xef, 0x14, 0x1c, 0x49, 0x90, 0xe3, 0x3f, 0x8b, 0xe6, 0xf1,
- 0x68, 0xe8, 0x4f, 0x95, 0xd7, 0x7f, 0x94, 0x48, 0xdd, 0x6d, 0xed, 0xf5,
- 0xa7, 0x7f, 0x6a, 0x9b, 0x10, 0x98, 0x25, 0xdb, 0xc3, 0x8f, 0xd9, 0x0d,
- 0xd6, 0xf4, 0x16, 0xd7, 0x62, 0xd2, 0x45, 0xa2, 0x91, 0x8c, 0xb9, 0x14,
- 0x78, 0xd5, 0x72, 0x78, 0x68, 0xd3, 0x27, 0x00, 0xcf, 0x62, 0x02, 0x34,
- 0xd5, 0xe1, 0x3e, 0x6e, 0x88, 0x37, 0x26, 0xd1, 0x78, 0xa1, 0x72, 0xc2,
- 0x35, 0x77, 0xc4, 0xbb, 0xe2, 0xb0, 0x76, 0xf2, 0x64, 0x31, 0x5d, 0x39,
- 0x33, 0x80, 0xb6, 0xbd, 0x4e, 0xcc, 0x0c, 0xad, 0x49, 0x61, 0x10, 0xb3,
- 0x0d, 0xb0, 0xa8, 0xb6, 0x82, 0x8e, 0x62, 0x16, 0x02, 0xaf, 0x1a, 0xd1,
- 0xf3, 0xb1, 0xf6, 0x5c, 0x03, 0x6b, 0x6e, 0xee, 0x50, 0x20, 0x6d, 0x39,
- 0x80, 0x07, 0x45, 0x9c, 0xd6, 0x4c, 0xa9, 0xc7, 0xf2, 0x76, 0xa7, 0xbc,
- 0xf8, 0x10, 0x8c, 0x12, 0xd2, 0xa5, 0x91, 0xa7, 0xa3, 0xa0, 0x17, 0xfd,
- 0x74, 0x2e, 0x18, 0x0b, 0xf4, 0x53, 0x4c, 0xf2, 0x06, 0x94, 0x51, 0xc7,
- 0x8d, 0x64, 0xee, 0x61, 0x50, 0x80, 0x9a, 0xa0, 0x29, 0x70, 0x18, 0x55,
- 0x3c, 0x0c, 0xc5, 0x4b, 0x35, 0x29, 0x0c, 0x80, 0x1e, 0x2d, 0x42, 0xac,
- 0xf7, 0x4f, 0x1d, 0x2a, 0xf2, 0xc5, 0x25, 0xc7, 0x73, 0x48, 0x58, 0x41,
- 0x9c, 0x97, 0xdb, 0xc0, 0xb8, 0x90, 0x14, 0xb5, 0x31, 0x63, 0x21, 0x6b,
- 0x49, 0x81, 0x8b, 0xd7, 0x87, 0x7b, 0x4f, 0x3e, 0xfb, 0xac, 0x3d, 0x16,
- 0x36, 0xd1, 0xac, 0xad, 0x00, 0xd4, 0x9b, 0x71, 0xa2, 0x24, 0x0b, 0x5e,
- 0x9c, 0x8e, 0x5c, 0xbc, 0x86, 0x93, 0x86, 0xbd, 0x8a, 0xd9, 0x1d, 0x37,
- 0x8d, 0xf7, 0x3c, 0xa0, 0xae, 0x18, 0xdf, 0x24, 0x95, 0xcc, 0x6a, 0xa9,
- 0x68, 0x19, 0x0e, 0x87, 0x18, 0xa0, 0x18, 0x5a, 0xec, 0xa5, 0x9f, 0x73,
- 0x6a, 0x6b, 0x7a, 0x0d, 0x7c, 0x8b, 0x5a, 0x73, 0x7f, 0x65, 0x1d, 0xf7,
- 0x3a, 0x29, 0x9b, 0xe9, 0x98, 0x8a, 0x39, 0xf7, 0x81, 0xc6, 0xdb, 0x68,
- 0x50, 0x92, 0x49, 0x5f, 0x2a, 0x7f, 0x70, 0xca, 0xb9, 0x95, 0x1f, 0xa2,
- 0xc1, 0x80, 0x71, 0xbf, 0x74, 0x58, 0x1f, 0x0e, 0x94, 0xf5, 0x8b, 0x16,
- 0x0d, 0xbf, 0xf0, 0xf1, 0x6f, 0x82, 0x4f, 0x56, 0x96, 0xb1, 0x15, 0x50,
- 0x83, 0x45, 0x9c, 0xf1, 0x23, 0x1c, 0x0a, 0xb7, 0x2b, 0x9c, 0x41, 0x14,
- 0x33, 0x6d, 0x43, 0x48, 0x7a, 0xa9, 0x8d, 0xc6, 0x02, 0x8d, 0x2b, 0xf8,
- 0x1d, 0x3c, 0x9e, 0xb6, 0x95, 0x30, 0xad, 0x83, 0x03, 0xd8, 0x92, 0x87,
- 0xc6, 0xf9, 0xc5, 0xbb, 0xc1, 0x3a, 0x35, 0x14, 0xfd, 0xe3, 0x87, 0x78,
- 0x86, 0xba, 0x5e, 0x4e, 0xea, 0x87, 0x5b, 0xdf, 0xe7, 0xd8, 0x69, 0xa8,
- 0x4b, 0x68, 0x24, 0x17, 0xb7, 0x4d, 0x97, 0x9f, 0xa9, 0xef, 0x3d, 0xbf,
- 0xd3, 0x35, 0x7b, 0x5e, 0xe8, 0xa4, 0x07, 0x45, 0xca, 0x70, 0x1c, 0x80,
- 0xa1, 0x78, 0xcc, 0xb9, 0xa7, 0xc9, 0x1a, 0x10, 0x32, 0x7e, 0x13, 0x28,
- 0x59, 0xfb, 0xad, 0x01, 0x25, 0xfd, 0xd7, 0x6e, 0xa0, 0xaf, 0xbe, 0xa8,
- 0xb4, 0x76, 0x7f, 0x3f, 0x98, 0xad, 0xec, 0xbb, 0xa2, 0x52, 0xdd, 0xd0,
- 0xe7, 0xbe, 0x6b, 0x06, 0x80, 0x91, 0x4c, 0xb7, 0x70, 0xe4, 0xe5, 0x11,
- 0x2f, 0xc2, 0x22, 0x39, 0xbe, 0x26, 0x10, 0xdd, 0x1b, 0xcd, 0x8c, 0x35,
- 0x4d, 0x63, 0xf0, 0xd4, 0x27, 0x96, 0xde, 0x2e, 0xd2, 0x3b, 0x12, 0x3b,
- 0xe2, 0xd7, 0x99, 0x6a, 0x8a, 0x23, 0xba, 0x54, 0x88, 0xd0, 0x94, 0xd2,
- 0x9a, 0x6a, 0x6a, 0x51, 0xe6, 0xcb, 0x71, 0xd9, 0xf4, 0xcc, 0xfa, 0x62,
- 0x7f, 0x82, 0xd9, 0x5c, 0x7a, 0xc5, 0x4d, 0x0c, 0xfe, 0x55, 0xa6, 0x80,
- 0x2b, 0x93, 0x47, 0x6c, 0x78, 0xce, 0x75, 0xbc, 0x12, 0xc0, 0x38, 0x77,
- 0x7b, 0x22, 0x3e, 0x2b, 0xde, 0x83, 0x87, 0x27, 0x58, 0xbb, 0xf0, 0x9d,
- 0xfb, 0x64, 0xf4, 0xea, 0x0b, 0x0e, 0x39, 0x7c, 0x00, 0x0c, 0xac, 0xc0,
- 0x41, 0x33, 0x0d, 0x6e, 0xf3, 0x9f, 0x9d, 0x88, 0x23, 0x4e, 0x5a, 0xd6,
- 0x9d, 0xb8, 0xf8, 0xba, 0x16, 0x03, 0xe4, 0x94, 0xa0, 0xb5, 0xab, 0x2c,
- 0x5b, 0xdb, 0xd8, 0x0f, 0x61, 0x61, 0xc1, 0x20, 0xa7, 0x47, 0x52, 0x6c,
- 0x3c, 0x11, 0x0a, 0xe1, 0xf1, 0x16, 0xce, 0xf5, 0x9c, 0xca, 0x21, 0x6c,
- 0x43, 0x1c, 0x18, 0xad, 0x5c, 0x81, 0x09, 0xcb, 0x3e, 0x7e, 0xd5, 0x93,
- 0x3a, 0xab, 0xac, 0xad, 0xae, 0x5f, 0x10, 0x7e, 0xfa, 0xd5, 0x17, 0xc0,
- 0x34, 0xe3, 0x5f, 0xff, 0xec, 0xde, 0xe6, 0x7f, 0x88, 0x8a, 0x89, 0x0b,
- 0xac, 0x9d, 0x08, 0x8b, 0x22, 0x57, 0xcb, 0x1c, 0x62, 0x46, 0x22, 0x47,
- 0xb2, 0x10, 0x5d, 0x56, 0x11, 0x8b, 0x95, 0x95, 0xbc, 0x39, 0x78, 0xfb,
- 0xee, 0xe0, 0x74, 0xf0, 0x98, 0xf8, 0x1a, 0x9a, 0x4a, 0x5d, 0xa0, 0x19,
- 0xec, 0x96, 0x15, 0xc1, 0x91, 0xcf, 0xa3, 0x86, 0xfc, 0xcb, 0x4d, 0xf8,
- 0x68, 0xb5, 0x9a, 0x68, 0x68, 0x88, 0x20, 0x4c, 0x4e, 0x7a, 0x83, 0x2a,
- 0xdc, 0x87, 0xcb, 0x24, 0x16, 0xe4, 0x21, 0x6d, 0x54, 0x45, 0x87, 0x96,
- 0x08, 0x71, 0x76, 0x6c, 0xe6, 0xb1, 0xd4, 0xee, 0x32, 0x2b, 0xc6, 0x34,
- 0xe5, 0x12, 0xb8, 0x53, 0x46, 0x94, 0x3c, 0xd5, 0x62, 0x9e, 0xdd, 0x2f,
- 0xba, 0x72, 0x36, 0xba, 0x2f, 0xbb, 0x8c, 0xbe, 0x43, 0xef, 0x8c, 0x5b,
- 0xf2, 0x65, 0x0a, 0x17, 0xea, 0x11, 0x75, 0x85, 0x6a, 0xba, 0x36, 0x04,
- 0x5d, 0x33, 0x19, 0x16, 0x02, 0x3d, 0xe6, 0x1a, 0x3f, 0xcb, 0xc5, 0x2c,
- 0x93, 0x78, 0xde, 0xe2, 0xa1, 0xaa, 0xa6, 0x06, 0x4b, 0xe5, 0x2c, 0x5c,
- 0x0d, 0x65, 0x66, 0xd3, 0x16, 0x0d, 0x24, 0x67, 0x7e, 0xc1, 0x91, 0x14,
- 0x02, 0x41, 0xd9, 0x16, 0x1d, 0x22, 0x37, 0x46, 0x50, 0x2c, 0x27, 0xd2,
- 0xb1, 0x70, 0xf0, 0x0e, 0x5d, 0xcc, 0x29, 0x47, 0xea, 0xc2, 0xda, 0x4b,
- 0xdf, 0x5e, 0x5f, 0x6b, 0xf2, 0x32, 0xcf, 0x9b, 0xd6, 0x8e, 0x66, 0xdd,
- 0xc0, 0xc1, 0xd4, 0xca, 0xb9, 0x44, 0xc7, 0x75, 0x90, 0xaa, 0xfe, 0x35,
- 0x89, 0x35, 0xd7, 0xd3, 0x6c, 0x94, 0x5d, 0x5d, 0x3d, 0x42, 0x1b, 0x92,
- 0x3f, 0x86, 0x26, 0x84, 0x2d, 0x77, 0x38, 0x73, 0x84, 0xdf, 0x1b, 0x69,
- 0x3d, 0x59, 0xae, 0xab, 0x30, 0x10, 0x33, 0x27, 0xa0, 0xa9, 0x1a, 0xe6,
- 0xa2, 0x30, 0x24, 0xb8, 0xe7, 0xf2, 0x5b, 0x2c, 0x2a, 0x19, 0x85, 0x46,
- 0x45, 0x67, 0xd7, 0x58, 0x47, 0x0f, 0x4d, 0x53, 0x44, 0x7f, 0xff, 0xc7,
- 0x8f, 0x3f, 0xb5, 0x80, 0x39, 0xb1, 0xeb, 0x42, 0xa3, 0xfa, 0x39, 0xaa,
- 0x59, 0xb3, 0x91, 0xe0, 0x23, 0x60, 0x7b, 0x95, 0x47, 0x71, 0xd4, 0xca,
- 0x38, 0x83, 0x20, 0x6f, 0xa2, 0x79, 0x61, 0xb0, 0xed, 0xce, 0x3a, 0x8c,
- 0x11, 0x5e, 0x50, 0x5a, 0xe8, 0xc6, 0x34, 0xb9, 0x8e, 0x81, 0xf0, 0xe0,
- 0x6f, 0x4f, 0x97, 0x24, 0x2b, 0xcc, 0xba, 0x09, 0x14, 0xe7, 0x72, 0xe0,
- 0x43, 0x41, 0x0a, 0xc6, 0xe4, 0x8b, 0x13, 0xe7, 0xb4, 0x09, 0x36, 0xe2,
- 0x2b, 0xde, 0x88, 0xc6, 0xaa, 0x39, 0x20, 0xc5, 0x5e, 0x1d, 0x85, 0x34,
- 0x84, 0x2f, 0x40, 0xf6, 0x87, 0x28, 0xfe, 0x15, 0x60, 0xac, 0x86, 0x10,
- 0x13, 0x80, 0x91, 0x09, 0xa6, 0x7b, 0x88, 0x58, 0x84, 0x23, 0xea, 0x52,
- 0x78, 0xc0, 0xd6, 0x11, 0xa5, 0xf2, 0xd5, 0xb1, 0x43, 0x87, 0x6b, 0xd0,
- 0x7d, 0xa5, 0x10, 0x5c, 0x15, 0x47, 0x0e, 0x00, 0x94, 0xae, 0xba, 0xdf,
- 0xbd, 0xab, 0xf1, 0x21, 0x06, 0xfb, 0x36, 0x25, 0x44, 0x71, 0x89, 0x44,
- 0xad, 0x33, 0xd8, 0x02, 0xbf, 0x6c, 0xa7, 0x86, 0xf7, 0xd7, 0xfd, 0x8f,
- 0xae, 0x07, 0x89, 0x69, 0x0d, 0x22, 0x74, 0x09, 0x6e, 0xcd, 0x24, 0xfd,
- 0xfe, 0x49, 0xcf, 0x0f, 0xd6, 0xf7, 0x68, 0x53, 0x19, 0xb5, 0x00, 0xc1,
- 0xad, 0x1b, 0xc7, 0xd7, 0xc7, 0x07, 0x47, 0x36, 0xdf, 0x7f, 0x4b, 0x86,
- 0x3d, 0xe0, 0xa0, 0x42, 0x9f, 0x90, 0x39, 0x05, 0x47, 0x89, 0xc0, 0xdf,
- 0x2d, 0xcd, 0x47, 0x84, 0x4d, 0x33, 0x23, 0x47, 0x4b, 0xc4, 0x18, 0x49,
- 0x6c, 0x0c, 0x8b, 0x6d, 0x55, 0x88, 0x5d, 0x0d, 0x16, 0x11, 0x59, 0x5d,
- 0xd5, 0x24, 0xf3, 0x0a, 0x09, 0x33, 0x0a, 0xbc, 0x2a, 0xad, 0x75, 0x92,
- 0x82, 0xa2, 0x81, 0x01, 0x61, 0xdf, 0x20, 0x23, 0x6e, 0xba, 0x68, 0xe4,
- 0x46, 0xc5, 0xd7, 0x9c, 0xbb, 0x39, 0x5d, 0x04, 0xcf, 0x06, 0xd9, 0x73,
- 0x2f, 0xe5, 0xe7, 0xba, 0x7b, 0xe5, 0x58, 0x40, 0xb1, 0xf4, 0x61, 0x27,
- 0xac, 0xb8, 0x74, 0x93, 0x52, 0x96, 0x81, 0x84, 0x0d, 0xe2, 0x4e, 0xd7,
- 0x09, 0x8a, 0x6e, 0x33, 0xff, 0xac, 0xaf, 0x83, 0x15, 0x15, 0x26, 0x86,
- 0xec, 0x41, 0x6e, 0x05, 0x71, 0x4b, 0xb3, 0x1a, 0xc3, 0x5c, 0x0f, 0x4d,
- 0x5e, 0xb3, 0xf2, 0x46, 0x93, 0x46, 0xed, 0x19, 0xbe, 0xd6, 0x8b, 0x92,
- 0x53, 0x4a, 0xdd, 0xc8, 0xf8, 0xbd, 0x9b, 0xb8, 0xf0, 0x7e, 0x01, 0x41,
- 0x7b, 0x28, 0xc2, 0xc8, 0x07, 0xf3, 0x6b, 0x36, 0x2b, 0x7c, 0x58, 0x20,
- 0xbe, 0xc5, 0x5f, 0xf4, 0x44, 0xce, 0x66, 0x40, 0x00, 0x7e, 0x41, 0x93,
- 0xfa, 0x5c, 0x6f, 0x1e, 0x0c, 0x6f, 0xd9, 0x04, 0xb2, 0xaf, 0x1d, 0x57,
- 0xe7, 0x4c, 0xcd, 0xe6, 0x49, 0xd5, 0x72, 0xc2, 0x73, 0xb4, 0x34, 0x42,
- 0x24, 0xed, 0xa1, 0x68, 0x7c, 0xe3, 0xd6, 0x63, 0x81, 0xaf, 0x5c, 0xe2,
- 0x46, 0x88, 0xe7, 0xe1, 0x38, 0x5d, 0x96, 0xf7, 0x24, 0x93, 0x85, 0x77,
- 0xf4, 0x85, 0x64, 0x35, 0xd6, 0xbe, 0xe3, 0xf1, 0x3a, 0xdf, 0xae, 0xab,
- 0x6a, 0xe1, 0xf2, 0x71, 0x8d, 0xd7, 0xc3, 0xa4, 0x26, 0xa9, 0xe6, 0x49,
- 0xce, 0x2e, 0x0e, 0x84, 0x6d, 0xb1, 0x18, 0x7b, 0xdf, 0xe4, 0xe8, 0x5a,
- 0x8b, 0x07, 0xe7, 0x81, 0xeb, 0x3e, 0xb0, 0x91, 0x4c, 0x72, 0x0d, 0x75,
- 0xd6, 0xba, 0x64, 0x74, 0x45, 0x5c, 0xa7, 0x77, 0x42, 0x2d, 0x36, 0xb2,
- 0x96, 0x8c, 0x37, 0x37, 0x06, 0x13, 0xf5, 0xbd, 0x73, 0x5f, 0xd0, 0x1b,
- 0xa2, 0x02, 0xe5, 0x39, 0x2c, 0x6d, 0x7e, 0x9c, 0x4d, 0xf9, 0x9e, 0x93,
- 0xb2, 0xe6, 0x44, 0xd8, 0x75, 0x3f, 0xdc, 0xd7, 0x24, 0xd5, 0xed, 0x77,
- 0xda, 0xe3, 0xdd, 0x3d, 0xb2, 0x50, 0xe1, 0xa0, 0x7c, 0x11, 0x9d, 0x62,
- 0xbb, 0x8c, 0x23, 0x4b, 0xd4, 0xb7, 0xad, 0xe3, 0xb5, 0x80, 0xf6, 0xd6,
- 0x51, 0x5b, 0xba, 0xc6, 0x02, 0x31, 0x8d, 0x93, 0x7e, 0x76, 0xd5, 0x47,
- 0x35, 0x47, 0x2e, 0xa3, 0xc7, 0x5a, 0x59, 0x40, 0xd0, 0x48, 0xdd, 0xe5,
- 0x2d, 0xa2, 0xb6, 0xdb, 0x6e, 0x49, 0x0d, 0x8a, 0xcf, 0x9d, 0xc5, 0x4e,
- 0x07, 0xa4, 0x6b, 0xb2, 0xcf, 0x56, 0x1e, 0x7b, 0xdd, 0xa1, 0xb8, 0x71,
- 0xa2, 0x64, 0x9c, 0xe7, 0x29, 0x9d, 0xc2, 0x06, 0xf8, 0x31, 0x42, 0x18,
- 0x7b, 0x72, 0x91, 0x4a, 0x44, 0x18, 0xbb, 0x7b, 0x66, 0xe2, 0xe4, 0x83,
- 0x97, 0x66, 0xb9, 0x80, 0x44, 0xc8, 0x39, 0xdb, 0x6d, 0xb2, 0xaf, 0x4f,
- 0x76, 0xab, 0x95, 0x52, 0x84, 0x03, 0x23, 0xcc, 0x0d, 0x5e, 0x87, 0x84,
- 0x52, 0xf5, 0x3d, 0x40, 0x3f, 0x72, 0x77, 0x60, 0x55, 0x0c, 0x86, 0x03,
- 0xc6, 0x2f, 0xfa, 0xb6, 0x18, 0x5e, 0xdb, 0x62, 0x91, 0xf8, 0x15, 0xe3,
- 0x1e, 0x81, 0xec, 0xcc, 0xe5, 0xaf, 0x17, 0xcb, 0xd1, 0x6c, 0xf2, 0x2c,
- 0x7a, 0x49, 0xff, 0x7c, 0xde, 0xe2, 0x3b, 0x47, 0x75, 0x73, 0x11, 0xf9,
- 0x54, 0x10, 0xc2, 0xef, 0x4f, 0xf6, 0xf8, 0x38, 0x3c, 0x50, 0x8b, 0xe3,
- 0x14, 0xe0, 0x32, 0x93, 0xf4, 0x3a, 0x2d, 0x0b, 0x97, 0x44, 0x88, 0x57,
- 0xd6, 0x97, 0xd5, 0xc2, 0x0a, 0xed, 0xee, 0x7d, 0x16, 0x8d, 0xd2, 0x32,
- 0x7a, 0x73, 0xf4, 0x4c, 0x4a, 0xf3, 0x15, 0xcb, 0x99, 0x2f, 0xe1, 0x0a,
- 0xec, 0x60, 0x1e, 0x20, 0x49, 0xa7, 0x34, 0xc6, 0x69, 0xa3, 0x46, 0xce,
- 0x6d, 0xb2, 0xea, 0x55, 0xaa, 0x43, 0x5c, 0x99, 0x67, 0x36, 0x30, 0xb2,
- 0x3b, 0x7a, 0x93, 0x52, 0xdf, 0xe6, 0xb4, 0x6f, 0x11, 0xe8, 0x69, 0xfe,
- 0xd4, 0x7f, 0x11, 0x59, 0x55, 0xaf, 0x8a, 0xb8, 0x69, 0x55, 0x1d, 0x90,
- 0xf1, 0x78, 0x78, 0x8e, 0xcd, 0x1c, 0x56, 0x91, 0x5c, 0x1e, 0xc3, 0xc8,
- 0xfd, 0xb4, 0x6a, 0x5a, 0x95, 0xf2, 0x9c, 0x86, 0x6d, 0xd4, 0x27, 0xe5,
- 0xea, 0x7a, 0x5d, 0xcd, 0xc5, 0x13, 0x3c, 0x5a, 0xb1, 0x90, 0x9d, 0xe2,
- 0x71, 0x97, 0xf9, 0x1c, 0x44, 0x69, 0xf1, 0x41, 0x48, 0xc7, 0x5c, 0xfa,
- 0xb6, 0x81, 0xd2, 0xba, 0x14, 0x18, 0x64, 0x4c, 0xc0, 0x2a, 0x81, 0xe6,
- 0x4b, 0xc1, 0x3e, 0x3f, 0x58, 0xb0, 0x91, 0x27, 0xda, 0x1d, 0x3c, 0xf4,
- 0xc2, 0x42, 0x64, 0x8a, 0x94, 0xcf, 0xe5, 0xc6, 0x1a, 0x1e, 0x28, 0x44,
- 0x63, 0xd4, 0x06, 0xc4, 0x4d, 0x8b, 0x75, 0x6d, 0xca, 0xe1, 0x49, 0xb9,
- 0x30, 0xe1, 0x3d, 0x62, 0x66, 0xd7, 0x31, 0x40, 0xda, 0x03, 0xca, 0x4b,
- 0xe9, 0x1c, 0x28, 0xf4, 0xd9, 0x9a, 0x79, 0xcb, 0x97, 0x2e, 0xfb, 0xdd,
- 0x2e, 0x61, 0x95, 0xc3, 0x35, 0xb4, 0xd7, 0xc8, 0x2d, 0x78, 0xa2, 0x59,
- 0x2c, 0x8d, 0xdb, 0xc1, 0x8e, 0xe3, 0xf8, 0x8a, 0xfe, 0xab, 0x6b, 0xd0,
- 0xe7, 0x9b, 0xaf, 0x17, 0xa1, 0x9e, 0xba, 0x12, 0x9e, 0x0f, 0x6a, 0x46,
- 0xa3, 0xcd, 0x20, 0xfe, 0xc2, 0xea, 0xfd, 0x72, 0xb4, 0xd3, 0x60, 0x10,
- 0x1e, 0x27, 0x70, 0xf2, 0x2b, 0x66, 0x7f, 0xad, 0xb9, 0xdc, 0xe7, 0x82,
- 0x6d, 0x58, 0xad, 0x63, 0x6d, 0xf1, 0x12, 0x5e, 0x4c, 0x76, 0xad, 0x0c,
- 0x9c, 0x55, 0x80, 0x7d, 0x9a, 0x2d, 0x53, 0xb3, 0xde, 0x22, 0x99, 0x46,
- 0xe8, 0xdf, 0x0f, 0x6b, 0xdb, 0x0f, 0xa2, 0x83, 0xb9, 0xe9, 0xe2, 0x5a,
- 0x54, 0x8c, 0x73, 0x77, 0x1a, 0x55, 0x60, 0x6e, 0x93, 0x86, 0x49, 0x40,
- 0x6d, 0x02, 0xc1, 0xcc, 0x48, 0xae, 0xda, 0xd9, 0xdf, 0x0d, 0xeb, 0x07,
- 0xcd, 0xb5, 0xd0, 0x04, 0x8a, 0xea, 0xfc, 0x76, 0xd1, 0xf7, 0x27, 0x2a,
- 0x89, 0xb5, 0xd1, 0x0b, 0xc3, 0x73, 0x6f, 0xbf, 0x3e, 0x39, 0x3d, 0xde,
- 0x8a, 0x5e, 0x27, 0xc0, 0x15, 0xa9, 0x91, 0x0d, 0x1f, 0xde, 0xdf, 0xc9,
- 0x27, 0x46, 0xfd, 0xaa, 0x84, 0xb6, 0xe5, 0xbc, 0x39, 0x57, 0x3d, 0xe4,
- 0x69, 0x39, 0x12, 0x98, 0x85, 0xe4, 0x65, 0x65, 0x30, 0x5d, 0x1a, 0x08,
- 0xbb, 0x05, 0x33, 0xb6, 0x92, 0x1f, 0x6c, 0x6d, 0xbe, 0x62, 0x8e, 0x47,
- 0xa1, 0x47, 0x39, 0x79, 0x8d, 0x03, 0xe6, 0x81, 0x47, 0x6a, 0x91, 0xb3,
- 0xe0, 0x50, 0xad, 0x9c, 0xde, 0x32, 0x3a, 0xa9, 0x65, 0x97, 0xfe, 0x2c,
- 0xc1, 0xe8, 0x58, 0xb5, 0x59, 0x36, 0x71, 0x30, 0x94, 0x52, 0xd9, 0x86,
- 0xe7, 0x1b, 0xac, 0xdd, 0x5f, 0x69, 0xed, 0xfe, 0xba, 0x9c, 0xdf, 0xf6,
- 0xb5, 0x82, 0xa1, 0x02, 0x7a, 0x14, 0xed, 0x67, 0xef, 0x3b, 0x17, 0x84,
- 0x82, 0xc0, 0x60, 0x31, 0x74, 0x36, 0x0b, 0xf9, 0xc5, 0x1a, 0x75, 0x2a,
- 0x03, 0x5f, 0x5f, 0x08, 0xc8, 0x0b, 0x0f, 0x52, 0x7c, 0x7d, 0xcc, 0x11,
- 0xc9, 0x50, 0x10, 0x3b, 0x56, 0x50, 0xd1, 0x1a, 0xee, 0x0c, 0x42, 0x08,
- 0xc6, 0x06, 0xb4, 0x6d, 0x61, 0xa9, 0x67, 0x37, 0xae, 0x1c, 0x1e, 0xe4,
- 0x57, 0x0d, 0x2f, 0x61, 0xd1, 0x86, 0xd7, 0x9b, 0x2e, 0x7a, 0x5f, 0xaa,
- 0xb1, 0x10, 0x9c, 0x59, 0x26, 0xa5, 0xda, 0x35, 0x2b, 0x09, 0x81, 0x86,
- 0x12, 0x5e, 0x18, 0x00, 0x90, 0x8d, 0x30, 0xaa, 0x0f, 0xce, 0x10, 0xc4,
- 0x59, 0x36, 0xe8, 0x36, 0x08, 0x67, 0x3c, 0xcd, 0xa4, 0x3a, 0xd2, 0x7d,
- 0xe8, 0xd6, 0xfc, 0x4f, 0xdc, 0xf7, 0x7c, 0x95, 0x29, 0x25, 0xf6, 0x5b,
- 0x22, 0xe4, 0x5d, 0xb1, 0xb7, 0xe0, 0xa0, 0x48, 0xa6, 0x18, 0xe4, 0x88,
- 0x33, 0xdf, 0xc6, 0x3c, 0x28, 0x0d, 0xee, 0x73, 0x91, 0x5a, 0x61, 0xb3,
- 0xfa, 0x81, 0xde, 0xed, 0x38, 0xf5, 0x11, 0x91, 0x55, 0x56, 0xa4, 0x22,
- 0x59, 0x38, 0xa3, 0x60, 0x20, 0x88, 0xb7, 0x14, 0x74, 0x34, 0x70, 0x03,
- 0x70, 0x29, 0xf7, 0x8a, 0xf3, 0x54, 0x71, 0xcc, 0xb1, 0x9f, 0xef, 0x2d,
- 0xf8, 0x7a, 0xd1, 0x16, 0x37, 0x66, 0xe9, 0x54, 0xa1, 0x74, 0x13, 0x18,
- 0x3a, 0x55, 0xd0, 0x77, 0x70, 0xe9, 0xca, 0x2b, 0x3b, 0xd6, 0x5a, 0xa7,
- 0x19, 0x34, 0x12, 0x22, 0x0d, 0x88, 0xe9, 0xcc, 0x23, 0x3c, 0x1d, 0x10,
- 0x7d, 0x35, 0x1e, 0xe1, 0x78, 0x05, 0x89, 0x5c, 0x4f, 0x5a, 0xea, 0x79,
- 0x0b, 0x62, 0x37, 0x6d, 0x92, 0xc5, 0x36, 0xb8, 0xba, 0x81, 0x2d, 0xb9,
- 0x79, 0x92, 0xc3, 0x88, 0x75, 0x8b, 0xd9, 0x81, 0x56, 0xa7, 0xd5, 0x95,
- 0x39, 0x6b, 0x55, 0x8f, 0x31, 0xef, 0x8a, 0x14, 0x0e, 0xf2, 0x63, 0x0a,
- 0xe1, 0xfb, 0xd7, 0x4f, 0x16, 0x15, 0x6c, 0x2c, 0xde, 0x30, 0x5c, 0xe3,
- 0x66, 0xb8, 0x61, 0x20, 0x8a, 0x7a, 0x23, 0x17, 0xca, 0xd2, 0xb0, 0x88,
- 0x8d, 0xab, 0xdb, 0x8a, 0x9c, 0x68, 0x00, 0x43, 0xe4, 0xec, 0xb5, 0x91,
- 0xab, 0x2b, 0xb7, 0xa6, 0x5c, 0x1c, 0x92, 0x2f, 0x6f, 0xe2, 0x87, 0x87,
- 0x41, 0x91, 0x48, 0xfd, 0xb4, 0xa2, 0x98, 0x22, 0xd1, 0xb3, 0x5a, 0x27,
- 0x8e, 0x73, 0xfc, 0x93, 0x45, 0x3c, 0x45, 0xb4, 0x23, 0xf3, 0xa3, 0x75,
- 0xf5, 0xb8, 0x2a, 0x26, 0xbd, 0x44, 0xa3, 0xdd, 0xf0, 0x46, 0x5c, 0xad,
- 0x9a, 0xc5, 0xa8, 0x50, 0x85, 0x41, 0x7c, 0x73, 0x10, 0x16, 0xd1, 0xec,
- 0xa4, 0xe1, 0x74, 0xd2, 0xc0, 0x2e, 0xb8, 0x7f, 0x78, 0xe3, 0xdc, 0x28,
- 0x58, 0xdd, 0x18, 0xa9, 0x21, 0xda, 0x75, 0x61, 0x3e, 0xb2, 0x94, 0x1e,
- 0xbe, 0x4b, 0x27, 0xcb, 0x86, 0xb6, 0x5b, 0x7f, 0xdd, 0xaa, 0xf1, 0x06,
- 0xa9, 0x17, 0xe0, 0x3c, 0xfc, 0x44, 0xe6, 0x2e, 0x75, 0x40, 0xf7, 0xa2,
- 0xca, 0x63, 0xe3, 0x32, 0xb8, 0x52, 0x18, 0x0e, 0xdc, 0x32, 0x97, 0x87,
- 0xe7, 0xef, 0xbf, 0x39, 0x3e, 0x3e, 0x3f, 0x39, 0x62, 0xf6, 0x8f, 0xfb,
- 0xc6, 0x7d, 0xf4, 0xf6, 0xf2, 0xdb, 0x53, 0x0f, 0xc5, 0xa1, 0x9a, 0x42,
- 0xfd, 0x40, 0xb1, 0xe1, 0x97, 0x9b, 0x3b, 0x4d, 0xe7, 0xcb, 0x87, 0x1e,
- 0xca, 0x50, 0x91, 0x9e, 0x71, 0x70, 0xf2, 0x3d, 0xc9, 0x2e, 0xe7, 0xfd,
- 0x77, 0xdf, 0x37, 0xb2, 0xa7, 0x82, 0xa0, 0x3c, 0xba, 0xbe, 0xea, 0xe7,
- 0xdc, 0xc5, 0xe8, 0x01, 0x23, 0xcc, 0xcf, 0xdd, 0x48, 0xac, 0x05, 0x84,
- 0xf9, 0x23, 0x63, 0x8e, 0xab, 0x5a, 0x4b, 0x78, 0xdd, 0x3b, 0xeb, 0x12,
- 0x76, 0xbf, 0xe5, 0xb6, 0x8b, 0x67, 0x9c, 0x68, 0x34, 0x08, 0x09, 0x6b,
- 0x15, 0xbd, 0xa4, 0x7f, 0xda, 0xb2, 0x35, 0xb7, 0xb9, 0x98, 0x7d, 0x74,
- 0x1e, 0x60, 0x57, 0x38, 0x17, 0xd6, 0xc0, 0xe2, 0x96, 0xd4, 0x92, 0xa0,
- 0xf9, 0x47, 0xea, 0x23, 0xcc, 0x1b, 0x20, 0x96, 0xae, 0x05, 0x5f, 0xfb,
- 0x17, 0xe6, 0xbd, 0xa4, 0xdd, 0xf9, 0xf8, 0x2b, 0xa6, 0xa9, 0x52, 0xa7,
- 0x1f, 0x04, 0x44, 0x68, 0xce, 0x91, 0x9f, 0x1d, 0x38, 0x48, 0x18, 0x15,
- 0x59, 0xb8, 0x15, 0x4c, 0x50, 0x96, 0xad, 0x05, 0xaf, 0x5d, 0x10, 0x13,
- 0x42, 0xb4, 0x8f, 0x94, 0xa8, 0xfc, 0xe8, 0xf8, 0xa2, 0x27, 0x20, 0x09,
- 0x21, 0x40, 0x82, 0x47, 0x01, 0x1a, 0x58, 0x01, 0xe7, 0xb2, 0xd5, 0x78,
- 0x05, 0x2c, 0x93, 0x7f, 0x1f, 0x36, 0xc2, 0x6d, 0x3e, 0x8a, 0x5e, 0x22,
- 0xe0, 0x6f, 0x4d, 0x20, 0xb5, 0x16, 0x98, 0xfd, 0x26, 0xc9, 0x47, 0x49,
- 0x9e, 0x15, 0xf5, 0x24, 0x3a, 0x4d, 0xb8, 0xd7, 0x42, 0x9e, 0xdc, 0x8e,
- 0x65, 0xe2, 0x36, 0x03, 0x0b, 0xc1, 0xa7, 0xf9, 0x85, 0x46, 0xba, 0x50,
- 0x17, 0x91, 0x73, 0xdd, 0x5e, 0xd4, 0xe5, 0x44, 0x41, 0xfe, 0x49, 0xec,
- 0xeb, 0x0a, 0x8e, 0x91, 0x34, 0x9e, 0x76, 0x7b, 0x4d, 0xc8, 0xc4, 0xae,
- 0x2e, 0x7b, 0x97, 0x03, 0x1f, 0x55, 0x35, 0x86, 0x1d, 0x05, 0x66, 0x43,
- 0xc6, 0x62, 0xc2, 0x58, 0x0c, 0x96, 0x85, 0xcd, 0x18, 0xde, 0x40, 0x57,
- 0x34, 0xb0, 0xac, 0x5c, 0x73, 0x75, 0xf3, 0x71, 0xfb, 0x05, 0x11, 0x32,
- 0x04, 0x0d, 0x8c, 0x64, 0x5d, 0xdf, 0x12, 0xd9, 0x25, 0xd5, 0x5d, 0x40,
- 0x64, 0x6f, 0x75, 0xe1, 0x9e, 0x8a, 0x8d, 0xfe, 0xab, 0xe1, 0xf0, 0xe0,
- 0xfc, 0xa4, 0xbe, 0xd4, 0xf4, 0x69, 0xff, 0xad, 0xd5, 0x92, 0xdf, 0x72,
- 0xc4, 0xe2, 0x2d, 0xc2, 0x3c, 0x7e, 0xe4, 0x1e, 0xb1, 0x74, 0xcd, 0x71,
- 0x22, 0xc0, 0xa2, 0xfa, 0x96, 0x2e, 0xb3, 0x35, 0x11, 0x8e, 0x0a, 0x3c,
- 0xa4, 0x26, 0xce, 0x3c, 0xaa, 0xd4, 0xa8, 0x24, 0x59, 0xf2, 0x37, 0xa4,
- 0xa9, 0x6f, 0xa4, 0xee, 0xd9, 0x55, 0x7a, 0xcd, 0x41, 0xfa, 0xf8, 0xd9,
- 0x86, 0xc3, 0x54, 0x3d, 0x6e, 0xc1, 0x83, 0x5e, 0x60, 0x06, 0xe4, 0x99,
- 0xe6, 0x98, 0x89, 0xdc, 0xac, 0xd8, 0xc9, 0x2d, 0xe1, 0x26, 0xfc, 0xb6,
- 0x3a, 0x75, 0xd3, 0x20, 0x68, 0x02, 0x62, 0x86, 0xeb, 0x63, 0xe6, 0x6a,
- 0x90, 0x04, 0xed, 0x8a, 0xa7, 0xb4, 0x6e, 0x6a, 0xd3, 0x7a, 0x79, 0xa6,
- 0xbf, 0x24, 0xf3, 0xca, 0x74, 0x55, 0x5c, 0x16, 0x4b, 0x17, 0xbb, 0xfc,
- 0xed, 0x79, 0xb3, 0x23, 0xd6, 0x4d, 0x6d, 0xe3, 0x92, 0x71, 0x9d, 0xc3,
- 0x11, 0x0c, 0xa2, 0xb3, 0x45, 0x20, 0x7d, 0xdd, 0x24, 0x69, 0xee, 0x3d,
- 0xa2, 0x3e, 0x9f, 0x1d, 0x5c, 0xa1, 0x39, 0x59, 0xd1, 0x82, 0x82, 0x72,
- 0x2b, 0xf3, 0x60, 0x01, 0xa4, 0xc8, 0x8a, 0xe3, 0xba, 0x82, 0xc4, 0xcf,
- 0x53, 0x29, 0x93, 0x62, 0x41, 0x7a, 0x68, 0xa3, 0x4a, 0xa8, 0x58, 0x37,
- 0x05, 0xf9, 0x80, 0x01, 0xa8, 0x0b, 0x44, 0xe1, 0x44, 0xc0, 0xec, 0x5f,
- 0x55, 0x9c, 0x2e, 0x70, 0x79, 0xd2, 0x29, 0xda, 0x54, 0x00, 0xc3, 0xb6,
- 0xaa, 0x6c, 0xe2, 0x33, 0xc8, 0x41, 0x3d, 0x86, 0xfd, 0xaf, 0xb1, 0x20,
- 0x41, 0xeb, 0x52, 0xcc, 0x51, 0xf0, 0xb7, 0x02, 0x3f, 0x70, 0x4b, 0x5a,
- 0xa4, 0xba, 0x10, 0xc3, 0x09, 0x18, 0xbe, 0x8a, 0x7b, 0x53, 0xf3, 0xf8,
- 0x47, 0x80, 0x0a, 0x52, 0x75, 0x42, 0xc1, 0x1f, 0x1a, 0x58, 0x50, 0x19,
- 0x30, 0x56, 0xbe, 0x13, 0x64, 0x88, 0x49, 0xb6, 0x64, 0xfe, 0x26, 0x9f,
- 0xd6, 0x3d, 0x38, 0x89, 0x14, 0x81, 0x2c, 0xd8, 0x29, 0xc4, 0x5e, 0x9c,
- 0x96, 0x22, 0x15, 0x0e, 0x9a, 0x61, 0x3f, 0x8a, 0xfe, 0xf2, 0x97, 0x5e,
- 0xf4, 0x97, 0x0e, 0xfd, 0x57, 0xd2, 0x7f, 0xb4, 0xa0, 0x7f, 0x91, 0x9a,
- 0x07, 0x7f, 0xb9, 0xa3, 0x0b, 0x34, 0xe2, 0xda, 0x85, 0xc5, 0x94, 0x41,
- 0x04, 0x3c, 0xa0, 0x7d, 0x33, 0x8f, 0x50, 0x42, 0x0c, 0xb5, 0x88, 0x07,
- 0x9f, 0x7d, 0x98, 0xb0, 0x26, 0x6e, 0xad, 0x24, 0xb5, 0x86, 0x36, 0x6c,
- 0x39, 0x9b, 0x8b, 0x82, 0xac, 0x5b, 0x0f, 0xa2, 0x6e, 0x68, 0x91, 0xc4,
- 0x08, 0xbb, 0x9f, 0x74, 0xd5, 0x6d, 0x5e, 0x5a, 0x6a, 0x6b, 0x18, 0xa5,
- 0x89, 0xf7, 0x5c, 0x55, 0x72, 0x2d, 0x18, 0x09, 0xcb, 0x70, 0x5b, 0xbc,
- 0x26, 0x14, 0xf1, 0x33, 0x36, 0xe6, 0x49, 0x81, 0x51, 0xf0, 0x54, 0xe1,
- 0x18, 0x6c, 0x90, 0x8e, 0x16, 0x37, 0x2b, 0xe8, 0x99, 0x42, 0x83, 0xe2,
- 0xb3, 0xb3, 0x18, 0x5f, 0x1a, 0x65, 0x4b, 0xf9, 0x91, 0xa6, 0xf0, 0x1d,
- 0x20, 0xb3, 0x39, 0x8d, 0x89, 0xdd, 0xee, 0x01, 0x5f, 0xa1, 0xf1, 0x75,
- 0xfb, 0xdd, 0x2a, 0x36, 0xa2, 0xd5, 0xba, 0x69, 0xab, 0x87, 0x13, 0x94,
- 0xae, 0x69, 0xd4, 0xd0, 0xf4, 0xc8, 0x5f, 0x12, 0xa5, 0x36, 0x12, 0x0e,
- 0xe4, 0x5c, 0x49, 0x70, 0x11, 0x9a, 0xe5, 0x2c, 0x3c, 0x67, 0x3d, 0xdc,
- 0x38, 0x8d, 0x9a, 0x25, 0x92, 0x9a, 0xe6, 0x7d, 0x51, 0x48, 0xef, 0xf7,
- 0xaa, 0x50, 0xbf, 0x2f, 0x55, 0x36, 0xc5, 0x71, 0xce, 0xe4, 0x81, 0x3a,
- 0x85, 0x2b, 0x0e, 0xb6, 0x59, 0x34, 0x2c, 0x8f, 0xbc, 0xca, 0xf6, 0x26,
- 0x8f, 0x83, 0x39, 0x33, 0x17, 0xdc, 0xb9, 0x9f, 0x2b, 0x0f, 0x19, 0x66,
- 0x00, 0xa0, 0x16, 0xc3, 0x94, 0xa2, 0xca, 0x14, 0x3e, 0x48, 0xa3, 0xc5,
- 0x6b, 0xdf, 0x30, 0x53, 0xf1, 0x78, 0x5e, 0x45, 0x9d, 0xb5, 0x5a, 0x4a,
- 0xa7, 0xfe, 0xc2, 0x69, 0x06, 0xe7, 0xa6, 0xda, 0xd8, 0x05, 0xed, 0x4f,
- 0x2c, 0x6d, 0x06, 0xd3, 0x36, 0x05, 0x2a, 0x89, 0x58, 0x38, 0x7c, 0xd1,
- 0x6f, 0x63, 0xf0, 0x6b, 0x7c, 0x31, 0xe2, 0xc4, 0x12, 0xe8, 0x48, 0x3d,
- 0x95, 0x5c, 0x2f, 0x75, 0x1d, 0xec, 0xa9, 0xd9, 0x58, 0x38, 0x87, 0xff,
- 0x96, 0x85, 0xa6, 0xb4, 0x34, 0x2b, 0xc4, 0xa6, 0x69, 0x7b, 0x7f, 0xb3,
- 0x7b, 0x6c, 0x4b, 0x6d, 0xe4, 0x92, 0x97, 0xba, 0x0e, 0x25, 0xac, 0xca,
- 0x45, 0xa1, 0x54, 0xc0, 0x68, 0x95, 0x42, 0xb2, 0xbf, 0x22, 0x61, 0x7a,
- 0x52, 0x8d, 0x25, 0x5e, 0x4b, 0xd5, 0x50, 0x74, 0xb8, 0xc7, 0x44, 0xb2,
- 0x2d, 0x74, 0x11, 0x3c, 0x67, 0x81, 0xcf, 0xa1, 0x70, 0x02, 0x72, 0x96,
- 0x93, 0x16, 0xdb, 0xd8, 0x99, 0xdd, 0x2d, 0x55, 0xe9, 0x51, 0xfe, 0x0f,
- 0xd5, 0x20, 0x55, 0x05, 0xeb, 0xdc, 0x64, 0x82, 0xf5, 0xd3, 0xd9, 0x67,
- 0xb5, 0x4a, 0xb8, 0x82, 0xcd, 0xd1, 0x85, 0xd6, 0xd7, 0x73, 0x72, 0x18,
- 0x4c, 0xe9, 0xeb, 0xb3, 0x37, 0xc7, 0x2e, 0xe3, 0x55, 0x4c, 0x7d, 0xfc,
- 0x49, 0x2b, 0xc6, 0xe3, 0x00, 0xd9, 0x04, 0x86, 0x00, 0xd1, 0x6b, 0xd6,
- 0xf2, 0xc4, 0xea, 0x5c, 0x27, 0xe5, 0xe2, 0x7e, 0x99, 0x4e, 0x36, 0x81,
- 0xd2, 0xf1, 0xee, 0xed, 0xc9, 0xf7, 0x7d, 0x98, 0x89, 0x55, 0x8f, 0x33,
- 0x98, 0x0a, 0x43, 0xb8, 0x50, 0x7f, 0xc2, 0xac, 0x05, 0x93, 0xc5, 0x8a,
- 0x33, 0x80, 0x5e, 0x14, 0x96, 0x08, 0xc9, 0x7e, 0xe9, 0x5c, 0xa4, 0x18,
- 0x69, 0x72, 0x8b, 0x59, 0x10, 0xf1, 0x6f, 0xa0, 0x2d, 0x61, 0xdf, 0x5b,
- 0xb2, 0x77, 0x83, 0xfd, 0xe6, 0xe6, 0x0e, 0xce, 0xcf, 0x8f, 0x0e, 0x2e,
- 0x0f, 0xdc, 0xdc, 0x00, 0x6e, 0x04, 0x36, 0x07, 0x71, 0x86, 0xf5, 0xfa,
- 0x5c, 0x48, 0xb0, 0xfb, 0x7b, 0xce, 0x0f, 0xac, 0x73, 0xbe, 0xf3, 0x8b,
- 0x33, 0xb6, 0x34, 0xfe, 0xfe, 0x2f, 0x07, 0xbe, 0x92, 0x1c, 0x6a, 0x26,
- 0x35, 0x0b, 0x7a, 0xed, 0x91, 0x00, 0x77, 0x86, 0x90, 0x0e, 0x1b, 0xa0,
- 0x46, 0x0a, 0x89, 0x20, 0x17, 0xbd, 0xe7, 0x3d, 0xcd, 0xc7, 0x4e, 0x38,
- 0x81, 0xfd, 0x53, 0xb7, 0xb3, 0xd7, 0xcc, 0x2d, 0x0b, 0x26, 0xc2, 0xdc,
- 0xb6, 0x86, 0xf5, 0x64, 0x6b, 0x35, 0x8d, 0x92, 0x87, 0x64, 0xbc, 0x2c,
- 0xc1, 0xbe, 0x38, 0xba, 0x9d, 0xe9, 0x6b, 0xc2, 0x0b, 0x55, 0x77, 0xd4,
- 0xbb, 0xfd, 0xb1, 0x0d, 0x12, 0x04, 0x12, 0x5c, 0x01, 0xc2, 0x83, 0x24,
- 0xa9, 0x33, 0x93, 0x02, 0x1a, 0x03, 0x1b, 0xad, 0xda, 0xac, 0x1a, 0x67,
- 0x47, 0x40, 0x14, 0x89, 0xce, 0x6d, 0x0e, 0x8d, 0x05, 0xf9, 0x84, 0x98,
- 0x5e, 0xdf, 0x42, 0x4c, 0x65, 0xda, 0xf4, 0x41, 0xe3, 0xa1, 0xd2, 0xd5,
- 0x82, 0x60, 0x31, 0xa9, 0xe9, 0xfd, 0x54, 0x3e, 0x15, 0x32, 0xa8, 0xba,
- 0xa9, 0x47, 0x41, 0x63, 0xf4, 0x29, 0x40, 0x15, 0x23, 0x0a, 0xb1, 0xe9,
- 0xcf, 0x31, 0xc7, 0x22, 0x3d, 0x4a, 0x52, 0x31, 0x89, 0xb8, 0xfc, 0xd7,
- 0xf6, 0xee, 0x60, 0xa7, 0xd3, 0x1c, 0x3d, 0x52, 0x5a, 0x61, 0x19, 0x8f,
- 0xe7, 0x72, 0x3f, 0x0b, 0x30, 0x6f, 0xf6, 0xe1, 0x01, 0x0a, 0x07, 0x25,
- 0x99, 0x0f, 0x51, 0x0b, 0x6d, 0x63, 0xe9, 0x9f, 0x35, 0xbc, 0x43, 0xe2,
- 0xe1, 0xf4, 0x2c, 0x79, 0x9e, 0x21, 0xac, 0x34, 0x66, 0x63, 0x19, 0xfc,
- 0x04, 0x9d, 0xf6, 0x05, 0x9e, 0x4f, 0x24, 0xda, 0xa1, 0xb6, 0xce, 0xff,
- 0x54, 0x90, 0xa0, 0xdb, 0x7f, 0xff, 0xf9, 0x7a, 0x6e, 0x57, 0x71, 0x8b,
- 0x92, 0x12, 0x04, 0x7a, 0x6c, 0x05, 0x5f, 0x3d, 0x10, 0x00, 0xe4, 0x5a,
- 0xf0, 0x13, 0x7b, 0x62, 0xb9, 0xce, 0x20, 0x07, 0x56, 0xb1, 0xfe, 0xa4,
- 0x39, 0x9c, 0xb3, 0xa0, 0x62, 0x60, 0x2c, 0x21, 0xc9, 0x8d, 0xab, 0xc3,
- 0xd5, 0x97, 0xd6, 0x6e, 0xfb, 0x72, 0xd3, 0xaa, 0x95, 0x0e, 0x85, 0x5a,
- 0x82, 0x3a, 0xda, 0x61, 0xfa, 0xfe, 0x1a, 0x78, 0x10, 0x13, 0x53, 0x49,
- 0x1d, 0x9c, 0x0a, 0x9e, 0x8a, 0x84, 0xd3, 0x8a, 0x16, 0x25, 0x63, 0x12,
- 0x8f, 0xbb, 0x77, 0x43, 0xf1, 0x7b, 0xbf, 0x6b, 0x2b, 0xce, 0xbd, 0xaf,
- 0x33, 0x55, 0xf8, 0x85, 0x52, 0x1d, 0xf7, 0x1c, 0xe6, 0xa1, 0x99, 0x4a,
- 0xfd, 0xd7, 0xce, 0xac, 0x66, 0x76, 0x37, 0xea, 0x91, 0xd6, 0xbc, 0x09,
- 0x12, 0x2a, 0xc1, 0xee, 0x59, 0x3e, 0x43, 0x05, 0x31, 0xc0, 0xf4, 0x81,
- 0x19, 0x64, 0x0c, 0xb0, 0x10, 0x1b, 0xe8, 0x9d, 0x1e, 0x01, 0xea, 0xe8,
- 0x9a, 0x64, 0xe3, 0xb5, 0x88, 0xa8, 0x06, 0x32, 0xe2, 0xcb, 0xf0, 0xb2,
- 0x77, 0xa0, 0xb0, 0xd4, 0xda, 0xf7, 0xc0, 0xcf, 0x9a, 0x4c, 0x36, 0x9f,
- 0x6c, 0xc9, 0xda, 0xbb, 0x0a, 0xdb, 0x70, 0xdc, 0x7d, 0xb0, 0xaa, 0xf6,
- 0x87, 0xd4, 0x47, 0xef, 0xfc, 0x68, 0x43, 0xbd, 0xa9, 0x28, 0x96, 0x8f,
- 0xe6, 0xd9, 0x4c, 0x49, 0xd4, 0x29, 0xfb, 0x30, 0x2d, 0xbd, 0x24, 0x81,
- 0x2b, 0x99, 0x7c, 0xfe, 0x88, 0x34, 0x39, 0x8b, 0x1f, 0xd2, 0xd9, 0x72,
- 0xe6, 0x13, 0xe3, 0xf0, 0x9e, 0x2f, 0xf3, 0xe0, 0x41, 0xb9, 0x60, 0xd1,
- 0x68, 0xc3, 0x97, 0x52, 0xbf, 0x97, 0xce, 0x0f, 0xc8, 0xc4, 0x12, 0x43,
- 0x04, 0xa7, 0x0a, 0x53, 0x21, 0x8d, 0x87, 0x8d, 0x42, 0xe9, 0x22, 0x31,
- 0x9a, 0xed, 0x4e, 0xc4, 0x6d, 0xca, 0x14, 0x54, 0xdf, 0x54, 0x1b, 0x09,
- 0xaa, 0x1a, 0x88, 0x4f, 0x42, 0x02, 0x82, 0xe6, 0x25, 0x67, 0xcb, 0x8d,
- 0xa8, 0x89, 0xfb, 0x74, 0x52, 0xde, 0xb4, 0xe2, 0x0d, 0xca, 0x22, 0x62,
- 0xda, 0x91, 0x20, 0x94, 0x70, 0x80, 0x09, 0x56, 0x0a, 0x2e, 0xe3, 0x6d,
- 0xb1, 0x1b, 0xbb, 0x64, 0xfb, 0x98, 0xa8, 0xee, 0x8a, 0xb3, 0x23, 0x5a,
- 0xf4, 0x04, 0x0d, 0x8b, 0x1b, 0xb8, 0x33, 0x2a, 0x55, 0x33, 0x6f, 0x25,
- 0x08, 0xf5, 0x1b, 0xb5, 0x8b, 0x08, 0x70, 0x11, 0xe2, 0xa9, 0x25, 0xba,
- 0x8a, 0x6e, 0xd0, 0xdb, 0x74, 0xda, 0x2c, 0xa4, 0xb8, 0x82, 0x32, 0xd5,
- 0x9d, 0xe1, 0xf5, 0x37, 0x5d, 0xb5, 0xe0, 0xa3, 0x5a, 0xb2, 0xfa, 0xb3,
- 0x35, 0xf1, 0x21, 0xea, 0x5e, 0x4b, 0x17, 0x5f, 0x75, 0x5d, 0x16, 0x45,
- 0xe3, 0x0a, 0xf4, 0x4e, 0x70, 0xbb, 0x45, 0x8a, 0xfd, 0x68, 0x6f, 0x67,
- 0xe7, 0x9b, 0x5e, 0xf4, 0x44, 0x2a, 0xcc, 0xee, 0x7e, 0xd5, 0xba, 0x42,
- 0x56, 0xec, 0x49, 0x6a, 0x78, 0xaa, 0x0e, 0x1a, 0xdf, 0x81, 0xdd, 0xeb,
- 0xc2, 0x61, 0x4a, 0xec, 0x7b, 0x5a, 0xe6, 0x26, 0x68, 0xcb, 0xe2, 0xaf,
- 0xd9, 0x2a, 0x98, 0xb1, 0xeb, 0x50, 0x08, 0x33, 0xc4, 0x0c, 0xf1, 0xee,
- 0xdd, 0xd0, 0x6f, 0x89, 0xcf, 0xff, 0x94, 0x4e, 0x5a, 0x32, 0x90, 0x8b,
- 0x1b, 0x3e, 0xfd, 0xa3, 0x65, 0x8e, 0xa3, 0xcc, 0x6e, 0x50, 0x29, 0x5b,
- 0xc4, 0xa6, 0x75, 0x13, 0xac, 0x48, 0x56, 0xf0, 0x15, 0x56, 0x3d, 0x50,
- 0x0d, 0x4f, 0x66, 0xb0, 0xae, 0x2e, 0xa4, 0x24, 0x03, 0xb8, 0xda, 0xb1,
- 0x3f, 0x90, 0xce, 0x84, 0x21, 0xc8, 0x49, 0x71, 0x7a, 0x87, 0x84, 0x73,
- 0x7a, 0x17, 0x63, 0x7d, 0xb2, 0xac, 0x55, 0x89, 0x9a, 0x0a, 0xfb, 0x32,
- 0x6c, 0xe1, 0x98, 0x23, 0xc3, 0xa7, 0x2d, 0xb4, 0xb0, 0x08, 0x0f, 0x44,
- 0xda, 0x05, 0xcb, 0x9d, 0xf2, 0x03, 0xd3, 0x55, 0xaf, 0xa9, 0x76, 0x70,
- 0x58, 0x20, 0xfc, 0x01, 0xb6, 0xc2, 0xe1, 0x90, 0x38, 0x77, 0x76, 0x8c,
- 0x42, 0x36, 0x1c, 0xda, 0xf5, 0xdb, 0x99, 0xa5, 0xa6, 0x0c, 0xc8, 0x9f,
- 0x16, 0x65, 0x9f, 0xdd, 0xbb, 0xed, 0xb6, 0x4e, 0xe8, 0x15, 0x9a, 0x51,
- 0x6e, 0x50, 0x53, 0x13, 0x0f, 0x87, 0x29, 0xa6, 0x6c, 0xa9, 0xbd, 0x81,
- 0x40, 0x4a, 0x3e, 0x52, 0xcc, 0xbe, 0xfa, 0x8d, 0x40, 0x3f, 0x62, 0x94,
- 0x77, 0x69, 0x72, 0x4f, 0xc7, 0xe9, 0xd8, 0x63, 0x92, 0x55, 0x39, 0x86,
- 0x55, 0xbe, 0x20, 0xaa, 0x1f, 0xdf, 0xd0, 0x7d, 0xd2, 0x47, 0xd8, 0x75,
- 0x9b, 0xdc, 0xee, 0xa2, 0x94, 0x11, 0x8e, 0xc6, 0x7a, 0x16, 0x4a, 0xb2,
- 0xf8, 0x2c, 0xf8, 0x02, 0x05, 0x4f, 0x70, 0x2c, 0x25, 0xc2, 0xd9, 0x7f,
- 0xc5, 0xa3, 0x58, 0x03, 0x82, 0x25, 0x18, 0xb0, 0x0e, 0xe6, 0x0a, 0xba,
- 0x63, 0x96, 0x1b, 0x96, 0xec, 0xe3, 0x62, 0x03, 0xe8, 0x53, 0x57, 0xe8,
- 0xed, 0xe9, 0xd0, 0xa3, 0x03, 0x98, 0x2b, 0xb0, 0x80, 0xa5, 0x80, 0xf8,
- 0x2f, 0x0b, 0x85, 0xfc, 0x58, 0x7b, 0x79, 0x22, 0x87, 0x99, 0x8f, 0xf8,
- 0x20, 0xc4, 0xbf, 0x88, 0x80, 0x9b, 0xe6, 0x15, 0xb8, 0x07, 0xee, 0xe3,
- 0xcf, 0x62, 0x6e, 0x93, 0xa0, 0xb4, 0xf6, 0x48, 0x15, 0x4e, 0xa7, 0x0b,
- 0x2b, 0xa6, 0xc3, 0xd8, 0x8c, 0x2c, 0x2f, 0x22, 0x31, 0xba, 0xb4, 0x6f,
- 0xab, 0x92, 0x0a, 0xe7, 0x68, 0x08, 0x32, 0xcc, 0x4b, 0xe2, 0x67, 0x9f,
- 0xff, 0xd8, 0xa7, 0x7f, 0x7f, 0x6a, 0xf8, 0x02, 0x4b, 0xc1, 0x93, 0x51,
- 0x93, 0x96, 0x85, 0x95, 0xe6, 0x1e, 0x1f, 0x5f, 0xea, 0xd7, 0xa3, 0x1d,
- 0xf9, 0xb6, 0x08, 0xca, 0x0a, 0xb4, 0x87, 0x48, 0x98, 0x6f, 0x6e, 0xb3,
- 0x60, 0x84, 0xd0, 0x4a, 0x01, 0x00, 0x41, 0x07, 0xb1, 0x86, 0xd8, 0x32,
- 0x30, 0x97, 0x3b, 0x07, 0x1e, 0xd8, 0xfa, 0x32, 0x8e, 0x63, 0x96, 0x73,
- 0x9c, 0x5b, 0xd2, 0xd7, 0x82, 0x1c, 0xb1, 0x9b, 0xb5, 0x58, 0x31, 0xda,
- 0x93, 0x08, 0x74, 0x45, 0xe6, 0x12, 0x5a, 0x40, 0xc8, 0x18, 0x7e, 0xd3,
- 0x91, 0xcb, 0x80, 0x44, 0x12, 0x9b, 0x41, 0x02, 0x2e, 0x75, 0x9d, 0xe7,
- 0xd9, 0xbd, 0x9d, 0x7d, 0x0d, 0x4a, 0x0e, 0x64, 0x06, 0xef, 0x64, 0xa4,
- 0xb6, 0x97, 0x8b, 0x16, 0xcf, 0x2b, 0xa7, 0x2a, 0x34, 0x80, 0x44, 0xc2,
- 0x4c, 0xcc, 0xb0, 0x50, 0x46, 0x6b, 0x78, 0x0a, 0x70, 0xe4, 0xb7, 0xcc,
- 0x00, 0xe6, 0xca, 0x9a, 0x88, 0x25, 0xdb, 0x65, 0x9d, 0x68, 0xe0, 0xb6,
- 0x80, 0xe8, 0x5c, 0x27, 0x6d, 0x25, 0xca, 0x25, 0xb1, 0x1a, 0xb8, 0x0b,
- 0x16, 0x75, 0x5d, 0x46, 0xae, 0x46, 0xc7, 0x26, 0x7b, 0x32, 0xc7, 0x30,
- 0x7f, 0x69, 0x40, 0x78, 0xbd, 0x50, 0x46, 0x0b, 0x2e, 0x41, 0x1c, 0x3d,
- 0xf9, 0xfe, 0xfb, 0x2a, 0x38, 0xe1, 0x56, 0xaf, 0xc2, 0xb1, 0x7c, 0x00,
- 0x87, 0xca, 0x17, 0x44, 0x44, 0x59, 0xdb, 0x29, 0xb7, 0x48, 0x7b, 0xb3,
- 0xeb, 0x72, 0x20, 0x06, 0xb4, 0x38, 0xd8, 0xfe, 0x14, 0x77, 0x59, 0x2a,
- 0x61, 0x6b, 0xe8, 0x7b, 0x10, 0x07, 0xd6, 0x74, 0x90, 0xb8, 0x90, 0x9f,
- 0x9e, 0x8b, 0xbc, 0x95, 0xc0, 0x13, 0x04, 0xa7, 0xd9, 0x5a, 0xf1, 0x52,
- 0x15, 0x8e, 0x60, 0xe8, 0x52, 0xba, 0x9f, 0xb7, 0x57, 0x36, 0xa9, 0xb9,
- 0x7d, 0x5c, 0x81, 0x03, 0x0d, 0x22, 0xc4, 0xf9, 0x95, 0x92, 0x3c, 0x6c,
- 0x9f, 0x1a, 0xe7, 0x89, 0xfa, 0x6e, 0xac, 0x5c, 0x50, 0xe3, 0xbc, 0x8a,
- 0x9d, 0x87, 0xc3, 0xac, 0x30, 0x3f, 0x4e, 0xe2, 0x95, 0x93, 0x8b, 0xcb,
- 0xc7, 0xc7, 0x32, 0x84, 0x7b, 0x85, 0xc7, 0x7b, 0x2d, 0x02, 0xc2, 0x3d,
- 0xca, 0x8f, 0x80, 0xf1, 0x98, 0xfd, 0x0e, 0x41, 0x57, 0x9a, 0x98, 0x84,
- 0xbb, 0x20, 0xff, 0x53, 0x6b, 0x39, 0x3e, 0xde, 0xff, 0xb6, 0x8a, 0x83,
- 0xfd, 0x32, 0x5f, 0x62, 0x89, 0xd8, 0xe7, 0xcb, 0x79, 0xe5, 0x99, 0x4f,
- 0x27, 0x63, 0x37, 0x9f, 0x45, 0x97, 0xc9, 0x25, 0xe6, 0xbd, 0xad, 0x2d,
- 0x41, 0x20, 0x36, 0x33, 0x31, 0xe1, 0xc0, 0x04, 0x54, 0x0d, 0x8f, 0xe8,
- 0xf7, 0x49, 0x34, 0xed, 0xe3, 0xb1, 0xa2, 0x51, 0xd9, 0x21, 0xb4, 0x79,
- 0x29, 0x3c, 0x67, 0x36, 0xd5, 0x52, 0x2e, 0x6e, 0xcd, 0x4c, 0x87, 0x30,
- 0x22, 0x52, 0x97, 0x51, 0xcc, 0x14, 0x44, 0x87, 0xee, 0xab, 0xe3, 0x7a,
- 0x51, 0xab, 0x4d, 0x60, 0xe4, 0xa9, 0xaa, 0x88, 0xe4, 0x09, 0xfa, 0xfb,
- 0xfc, 0xdd, 0xe5, 0x96, 0xaf, 0x67, 0x37, 0xc9, 0x6a, 0x36, 0x2b, 0x6b,
- 0xbc, 0x25, 0x13, 0x45, 0x32, 0x14, 0x14, 0x94, 0x01, 0x69, 0x26, 0xee,
- 0x4c, 0x30, 0x8e, 0xc2, 0x93, 0x9d, 0x5d, 0x12, 0xd5, 0x76, 0xf6, 0x60,
- 0x75, 0x79, 0xb2, 0xf3, 0xc4, 0x99, 0xb3, 0xed, 0xa9, 0xc6, 0x8d, 0x37,
- 0x91, 0x17, 0xa1, 0x16, 0x82, 0xe4, 0x9f, 0x3c, 0x3c, 0xe0, 0xe3, 0x5e,
- 0x1d, 0xa5, 0xa7, 0x50, 0x85, 0x32, 0x09, 0x6a, 0x3c, 0xaf, 0x39, 0x5a,
- 0x7e, 0xc5, 0x61, 0x3e, 0x59, 0xce, 0x25, 0xf6, 0x8b, 0x95, 0x5f, 0x64,
- 0x3c, 0xd4, 0x2f, 0x87, 0x90, 0x0e, 0x1e, 0x63, 0x4d, 0xa7, 0x2c, 0xde,
- 0x57, 0x18, 0x59, 0xcf, 0x63, 0x3a, 0x08, 0xe2, 0xaf, 0x29, 0x77, 0x96,
- 0x8b, 0x58, 0x6b, 0xee, 0x4f, 0x3e, 0xd5, 0x56, 0xea, 0xa3, 0x80, 0xd4,
- 0x03, 0xf6, 0x86, 0x9a, 0x57, 0x9c, 0x30, 0xe6, 0x8f, 0x49, 0x36, 0x30,
- 0xbc, 0xd5, 0x46, 0x1e, 0x04, 0xad, 0xb2, 0x55, 0x08, 0x4c, 0x19, 0x84,
- 0x61, 0xb2, 0x1c, 0xe3, 0xae, 0xe7, 0xb0, 0x17, 0x2e, 0xf8, 0x37, 0x12,
- 0xcc, 0x47, 0x03, 0xd1, 0xe0, 0xb6, 0x3d, 0x91, 0x36, 0xd5, 0x6c, 0x1c,
- 0x43, 0x3c, 0xe5, 0x92, 0x76, 0x59, 0xaf, 0x61, 0x83, 0x91, 0x4b, 0x15,
- 0x6e, 0x30, 0x88, 0xf9, 0x55, 0x66, 0x10, 0xb5, 0x4d, 0x90, 0x5e, 0x90,
- 0x25, 0x5c, 0x74, 0x66, 0x1e, 0x8e, 0xa5, 0x36, 0x24, 0x68, 0xe7, 0x4b,
- 0x0e, 0x56, 0xab, 0xb5, 0x58, 0x81, 0x61, 0x9d, 0x31, 0xa6, 0x6c, 0x3e,
- 0xa6, 0xc3, 0xfd, 0x52, 0x63, 0x36, 0x9b, 0xae, 0x7e, 0xc1, 0x1d, 0x31,
- 0xfd, 0x0f, 0x13, 0x00, 0x54, 0xa4, 0x87, 0x9d, 0xd2, 0xa5, 0x15, 0xa9,
- 0x7a, 0x06, 0x04, 0x62, 0xf1, 0x24, 0x37, 0x13, 0xb7, 0x00, 0xad, 0xea,
- 0x56, 0xfc, 0xa3, 0xac, 0x27, 0xce, 0xfe, 0xdf, 0x82, 0x16, 0x49, 0x0b,
- 0x9d, 0x2e, 0x18, 0xe2, 0xab, 0x69, 0xdb, 0x5e, 0x8f, 0x51, 0xa2, 0xd3,
- 0x06, 0x17, 0xff, 0x77, 0x4e, 0x1b, 0x7e, 0xd7, 0x5f, 0x36, 0xcc, 0x07,
- 0x14, 0xa9, 0x41, 0x9c, 0xe5, 0x4b, 0x28, 0x6e, 0x1f, 0xa3, 0x96, 0xe3,
- 0xf1, 0x4d, 0x53, 0x5e, 0xb7, 0x7c, 0xaa, 0xb5, 0xe8, 0xe4, 0x06, 0xe7,
- 0x84, 0xf8, 0x89, 0x36, 0xa9, 0x0a, 0x8f, 0xfa, 0xab, 0x2d, 0xad, 0x86,
- 0x52, 0xe3, 0x4e, 0x46, 0xde, 0x65, 0xaf, 0x8a, 0x8e, 0xb3, 0xa6, 0xc6,
- 0x20, 0x02, 0x1f, 0xa5, 0x48, 0x7d, 0x10, 0x25, 0x0f, 0xf8, 0x63, 0xdc,
- 0xbe, 0xc9, 0x03, 0xdc, 0x2e, 0xc4, 0xa7, 0x9e, 0x3f, 0x19, 0xb4, 0xdb,
- 0x7e, 0x2e, 0x2b, 0x01, 0xa7, 0xc6, 0x92, 0xc5, 0x45, 0x21, 0x70, 0x32,
- 0x8b, 0x9c, 0x71, 0x65, 0xc3, 0xd9, 0x49, 0x0d, 0x83, 0x16, 0xfc, 0x8d,
- 0x82, 0x41, 0xc0, 0x45, 0x42, 0x2e, 0xd7, 0x62, 0x84, 0x59, 0x49, 0x2e,
- 0x17, 0xea, 0x8a, 0x59, 0x36, 0xbc, 0xc7, 0x92, 0x3a, 0x82, 0x6c, 0x0c,
- 0x49, 0xb2, 0x6c, 0x2c, 0x94, 0xea, 0xcd, 0xb8, 0xdc, 0x5c, 0x58, 0x29,
- 0x57, 0xa7, 0x49, 0xf2, 0x46, 0x28, 0x15, 0x32, 0xd8, 0x59, 0x11, 0xe0,
- 0xc5, 0xc2, 0xf9, 0x0d, 0xe2, 0xfa, 0x1d, 0x55, 0xcc, 0xb6, 0x85, 0x30,
- 0x1e, 0x8d, 0x68, 0x7b, 0xa3, 0xa4, 0x20, 0x7a, 0x30, 0xbc, 0x87, 0xfa,
- 0xa4, 0xd0, 0x2d, 0xeb, 0x4d, 0xc2, 0x4f, 0x51, 0xdf, 0xf7, 0x26, 0x9b,
- 0x86, 0x66, 0xb8, 0xa6, 0xbb, 0x8b, 0x24, 0x89, 0x81, 0x47, 0x51, 0x55,
- 0xfd, 0x8b, 0x57, 0x53, 0x2b, 0x09, 0xa7, 0x56, 0xbf, 0x60, 0x84, 0x5a,
- 0xe8, 0x7f, 0xcd, 0x46, 0x56, 0x42, 0x90, 0xaf, 0xfa, 0x36, 0xe4, 0x5a,
- 0xf1, 0xad, 0xdc, 0x70, 0x0d, 0x38, 0xda, 0xb4, 0xa5, 0xd0, 0x26, 0x43,
- 0xb1, 0x92, 0xbc, 0x56, 0xb2, 0x12, 0x8b, 0xe8, 0x71, 0xa8, 0x1a, 0xd1,
- 0x35, 0x92, 0xf7, 0x26, 0x22, 0x53, 0x91, 0xc8, 0xd1, 0x00, 0x8d, 0x73,
- 0x95, 0x9d, 0x54, 0x8e, 0xc6, 0xe2, 0xb0, 0x2b, 0x6c, 0x8d, 0x0c, 0xf0,
- 0xeb, 0x29, 0xc3, 0x6f, 0xb0, 0x1b, 0xf3, 0x66, 0xd4, 0xde, 0x1b, 0x7c,
- 0x38, 0xe0, 0x8a, 0x95, 0x1c, 0x43, 0x2d, 0xce, 0x89, 0xa5, 0xa6, 0xf6,
- 0x49, 0xd5, 0x64, 0xdf, 0xca, 0x7c, 0x9b, 0xcb, 0x18, 0x97, 0xf9, 0xb8,
- 0xd1, 0x88, 0x93, 0xe0, 0x8a, 0xb1, 0xda, 0x2e, 0x06, 0x78, 0x90, 0x18,
- 0xc7, 0x7b, 0xfd, 0x85, 0x2f, 0x09, 0xf5, 0xe1, 0x6c, 0xb9, 0xc8, 0x8d,
- 0xd6, 0xe0, 0x09, 0x16, 0xde, 0xba, 0x85, 0xf3, 0x2f, 0xa8, 0x66, 0xcb,
- 0x1b, 0x01, 0xdc, 0xad, 0xb6, 0x7a, 0xcb, 0x0e, 0x4f, 0x76, 0xb5, 0x68,
- 0x04, 0x4f, 0x04, 0x85, 0x4c, 0xae, 0xa4, 0x3a, 0x95, 0xf9, 0xad, 0xbc,
- 0xa4, 0xed, 0x0a, 0x58, 0x85, 0x49, 0x32, 0x8a, 0x8d, 0xd2, 0x32, 0xba,
- 0xa8, 0x51, 0xd8, 0x1a, 0x22, 0x26, 0x66, 0xba, 0xf9, 0x74, 0x0b, 0x6a,
- 0x75, 0xb9, 0xd8, 0xdc, 0xdd, 0x42, 0x8f, 0x96, 0xcc, 0x2f, 0x82, 0x7e,
- 0xab, 0xbf, 0x5a, 0xeb, 0xb9, 0x84, 0x95, 0x56, 0x4b, 0x01, 0x84, 0x65,
- 0x71, 0x0e, 0x27, 0x9c, 0x75, 0x45, 0x59, 0x35, 0x87, 0x6a, 0xcd, 0x46,
- 0xc8, 0x36, 0xce, 0x28, 0x29, 0x6d, 0x0b, 0x76, 0xd4, 0x14, 0x02, 0xb9,
- 0xbe, 0xe9, 0x11, 0x88, 0xe1, 0x7e, 0x4e, 0xac, 0x94, 0x08, 0x2d, 0xdf,
- 0x74, 0xd2, 0xe7, 0x01, 0x5f, 0xe7, 0x59, 0x13, 0x21, 0x8c, 0x9d, 0xec,
- 0xbc, 0x06, 0x5b, 0xe2, 0x07, 0x6d, 0x2d, 0x93, 0xd1, 0x61, 0x87, 0x62,
- 0xc7, 0x83, 0x85, 0x33, 0x56, 0x53, 0xaa, 0x32, 0x5a, 0xdd, 0x30, 0x54,
- 0xd9, 0xd2, 0x06, 0xbd, 0x1f, 0x70, 0xb4, 0x46, 0x3a, 0xbe, 0x55, 0x5f,
- 0xac, 0x80, 0x2f, 0xc3, 0x47, 0x85, 0x22, 0xca, 0x22, 0xbc, 0xd2, 0x35,
- 0xa1, 0xf2, 0x39, 0x54, 0x50, 0xba, 0x33, 0x94, 0xd4, 0x5a, 0xaa, 0xd4,
- 0xf0, 0x39, 0x35, 0xc5, 0x02, 0x09, 0x48, 0x99, 0xde, 0x40, 0xb0, 0xc0,
- 0x88, 0x36, 0x32, 0xc9, 0x38, 0x42, 0x96, 0xfd, 0x2c, 0x42, 0x05, 0xb2,
- 0xbf, 0x2d, 0x32, 0x5b, 0x77, 0xb6, 0xe2, 0x34, 0xf4, 0x6e, 0x15, 0xa4,
- 0xbd, 0x4b, 0x0c, 0x8b, 0xee, 0x89, 0xae, 0x2d, 0x2f, 0xcc, 0x2a, 0x8f,
- 0x00, 0x69, 0xac, 0xeb, 0x5b, 0x48, 0x5b, 0xba, 0xf0, 0xad, 0x4b, 0xe3,
- 0xc1, 0x5d, 0x8b, 0xa9, 0xf6, 0xcd, 0xef, 0x5e, 0x6b, 0xfb, 0x5b, 0x5b,
- 0x30, 0xed, 0xdc, 0x9e, 0xb7, 0xa2, 0xd0, 0x9e, 0x95, 0x88, 0xe5, 0x35,
- 0x38, 0xa7, 0xcb, 0xa2, 0x99, 0xe0, 0xe7, 0x8a, 0xb0, 0x59, 0xd4, 0x02,
- 0x5b, 0x7c, 0x62, 0xab, 0x2d, 0x23, 0x9c, 0x4c, 0xde, 0xd6, 0x56, 0x99,
- 0x30, 0x07, 0x95, 0xc1, 0x6a, 0x88, 0xdb, 0xe3, 0x05, 0xe3, 0x2b, 0xd1,
- 0x70, 0xcd, 0x93, 0x05, 0xc3, 0x6e, 0xe5, 0x99, 0xf6, 0xf4, 0x65, 0xd6,
- 0x1f, 0x26, 0x09, 0x87, 0x1a, 0x09, 0x74, 0xc0, 0x9b, 0x74, 0x9c, 0x67,
- 0x45, 0x76, 0x25, 0xb7, 0xba, 0x91, 0xa7, 0x33, 0x37, 0x71, 0x6e, 0x71,
- 0xcc, 0xce, 0xdd, 0x26, 0xbf, 0xd0, 0x72, 0x7c, 0x12, 0xbf, 0xcc, 0x97,
- 0xf6, 0x8c, 0x68, 0x9d, 0x53, 0x29, 0xd8, 0x0e, 0x5c, 0x0a, 0x28, 0x5c,
- 0xec, 0xa2, 0xf6, 0xf4, 0x8e, 0xb0, 0x88, 0xc9, 0x67, 0x8f, 0x6b, 0xd2,
- 0xbc, 0x13, 0x5a, 0xc5, 0x05, 0x17, 0x82, 0x44, 0x97, 0xa1, 0xb2, 0x8e,
- 0x62, 0x22, 0x89, 0xfe, 0x63, 0xaf, 0xb5, 0x8f, 0xce, 0x14, 0x18, 0x00,
- 0x98, 0xc3, 0x68, 0x1c, 0x56, 0x4c, 0xe4, 0x40, 0xc0, 0x93, 0xe3, 0xcb,
- 0xd7, 0xd1, 0x24, 0x8f, 0x69, 0xfa, 0xf8, 0xb7, 0x4f, 0x3a, 0xc0, 0xcf,
- 0x71, 0x23, 0x0b, 0xb8, 0x58, 0xf0, 0x26, 0xf5, 0xd9, 0xf3, 0xd8, 0xdf,
- 0x79, 0x3a, 0x28, 0x1f, 0x5a, 0x23, 0x05, 0xc5, 0xd6, 0x6c, 0x16, 0x4c,
- 0x2d, 0xad, 0xe1, 0xb7, 0x4c, 0x53, 0x3c, 0xf9, 0x9a, 0xcd, 0x1e, 0x56,
- 0x75, 0x98, 0xc3, 0x36, 0x50, 0x60, 0x60, 0xe9, 0xf4, 0xf1, 0xb8, 0xa7,
- 0x92, 0x7f, 0x21, 0xec, 0x52, 0xc2, 0x2c, 0x83, 0x40, 0xca, 0x35, 0xc5,
- 0x42, 0x1e, 0x8d, 0xab, 0x6c, 0x8b, 0xa3, 0xb4, 0x8f, 0xd7, 0xa0, 0x27,
- 0xd6, 0x88, 0xb7, 0x5d, 0x8b, 0x5f, 0x36, 0xab, 0x04, 0x38, 0x14, 0x67,
- 0xd0, 0x80, 0xc5, 0x57, 0x33, 0x9c, 0x14, 0x2c, 0x47, 0xfd, 0xa5, 0xa6,
- 0xc3, 0xb6, 0x27, 0x09, 0x81, 0xc7, 0x02, 0x45, 0xcd, 0xa0, 0xdd, 0x6a,
- 0x44, 0x06, 0x39, 0xd5, 0x7c, 0x8f, 0x03, 0x54, 0xcf, 0x85, 0x89, 0xbb,
- 0xce, 0xd1, 0xfa, 0xcb, 0x68, 0x1f, 0xb8, 0x4d, 0xc9, 0x9c, 0x4b, 0x6a,
- 0xd8, 0xb1, 0xf6, 0x2c, 0x50, 0x39, 0xb1, 0xe3, 0x47, 0x61, 0xc1, 0xe5,
- 0xfe, 0xb2, 0x7d, 0x74, 0x71, 0x9e, 0xf0, 0xed, 0x24, 0x21, 0x90, 0x7a,
- 0xf3, 0x0e, 0xfe, 0xfd, 0x88, 0xdb, 0x9e, 0x0f, 0xbd, 0xdd, 0x46, 0x90,
- 0xfe, 0x68, 0xc9, 0xdf, 0xb5, 0x56, 0xea, 0x56, 0x5e, 0x28, 0x4f, 0xa8,
- 0x4f, 0x36, 0x70, 0xae, 0x16, 0x1c, 0x27, 0x37, 0x0b, 0xab, 0xc1, 0xb0,
- 0xe4, 0xc7, 0x1a, 0x72, 0x9d, 0x26, 0x96, 0xc2, 0x3b, 0x7a, 0x55, 0x6c,
- 0xe1, 0x9a, 0xe5, 0x5d, 0xba, 0x61, 0x53, 0x53, 0xd8, 0x7c, 0x9b, 0x83,
- 0x1a, 0xaf, 0xc3, 0xd5, 0x08, 0x3f, 0x95, 0x08, 0xfd, 0x12, 0xe3, 0xac,
- 0xd6, 0x06, 0x6d, 0xc2, 0x41, 0xb1, 0x13, 0x7b, 0x1b, 0xdf, 0x2c, 0x49,
- 0x1a, 0xed, 0xb5, 0x58, 0xcd, 0xcd, 0x90, 0x0b, 0x5e, 0x46, 0xf7, 0xa9,
- 0xa6, 0xe0, 0x5b, 0xa2, 0x96, 0xb4, 0xc0, 0xc9, 0xde, 0x77, 0x00, 0x3c,
- 0x6c, 0x54, 0xb7, 0x68, 0x1b, 0x9d, 0xaf, 0x3c, 0x1f, 0x97, 0x7e, 0x01,
- 0x1f, 0x0b, 0xbb, 0x0b, 0xa0, 0xff, 0xe9, 0xe8, 0xc3, 0x00, 0xab, 0x44,
- 0x20, 0x14, 0x67, 0x19, 0x80, 0xf0, 0x4e, 0x1a, 0xec, 0x55, 0x83, 0x89,
- 0x48, 0x65, 0x11, 0x62, 0x22, 0xd2, 0xa7, 0xf0, 0x25, 0x8f, 0x50, 0xd7,
- 0x32, 0x92, 0x6a, 0xa6, 0xc6, 0x63, 0x74, 0xb0, 0x14, 0xdb, 0x84, 0xcf,
- 0xea, 0xe0, 0x94, 0x76, 0x58, 0x4e, 0xd5, 0x56, 0x7b, 0x79, 0x78, 0x1e,
- 0xd8, 0xc2, 0x19, 0x27, 0x60, 0x6d, 0x4a, 0x93, 0x06, 0xeb, 0xcc, 0x5d,
- 0xeb, 0xb3, 0x7f, 0xe3, 0xda, 0xf8, 0x19, 0x04, 0xcb, 0xe3, 0x3e, 0xac,
- 0x2d, 0x8d, 0xa6, 0xf0, 0xa5, 0x93, 0xf6, 0x2c, 0x0a, 0x5d, 0x21, 0x43,
- 0xe2, 0xd6, 0x35, 0xe2, 0xb4, 0x31, 0xcb, 0x93, 0x3c, 0x39, 0xa2, 0xd1,
- 0xb0, 0x74, 0x73, 0x4d, 0x83, 0xfb, 0xd2, 0xad, 0x40, 0x53, 0x2a, 0xf3,
- 0x0a, 0x23, 0x9c, 0x1c, 0xa8, 0xdc, 0x14, 0x14, 0xdf, 0xe2, 0x04, 0xeb,
- 0x10, 0xb6, 0x43, 0x1c, 0xc7, 0x96, 0x43, 0xba, 0x26, 0x4f, 0x1e, 0xd5,
- 0xd5, 0x11, 0x1b, 0x42, 0xfa, 0x0b, 0x5f, 0xca, 0xa3, 0x95, 0xe5, 0xaf,
- 0x29, 0x7a, 0x4f, 0x9e, 0x28, 0x74, 0x73, 0x30, 0xe0, 0xa2, 0xe5, 0x76,
- 0xe2, 0xda, 0xe7, 0x49, 0x32, 0xd3, 0xf8, 0xd0, 0x51, 0x9e, 0xdd, 0xd2,
- 0xf9, 0xe0, 0xd7, 0x20, 0x88, 0xf2, 0xea, 0xcb, 0x21, 0x37, 0x53, 0x16,
- 0x1d, 0x03, 0x05, 0x2c, 0x6e, 0x1a, 0xe6, 0x1c, 0xe2, 0xb5, 0x66, 0xd2,
- 0xf8, 0xd3, 0x22, 0x48, 0x53, 0x88, 0x03, 0xb4, 0xfb, 0x13, 0x77, 0x0f,
- 0x97, 0x40, 0xf2, 0x51, 0x10, 0x0d, 0x8d, 0xb4, 0x01, 0xcd, 0xfb, 0x9b,
- 0xd3, 0x90, 0x23, 0x8b, 0x90, 0x86, 0x5a, 0xb6, 0xbc, 0x42, 0x4c, 0x22,
- 0x08, 0xbc, 0x24, 0xaa, 0x92, 0x3b, 0x9e, 0xbd, 0x7e, 0x75, 0xe5, 0x1f,
- 0x70, 0xa7, 0xfd, 0x20, 0x68, 0xdd, 0x95, 0xd3, 0x16, 0x5b, 0xa8, 0x18,
- 0x1e, 0x27, 0x1e, 0x47, 0x3e, 0x16, 0xf9, 0x02, 0x01, 0x76, 0x44, 0x32,
- 0xcd, 0xdb, 0xdd, 0x65, 0xd4, 0xa8, 0xd4, 0x08, 0x2f, 0x05, 0x6f, 0x0f,
- 0x72, 0x54, 0x11, 0x6a, 0xa6, 0xd6, 0xb1, 0x3f, 0x86, 0x21, 0xd2, 0x51,
- 0x9b, 0xd1, 0x12, 0xc0, 0x06, 0x49, 0xe1, 0x6d, 0xb3, 0x12, 0x17, 0xe3,
- 0x72, 0xd8, 0x18, 0x1e, 0x25, 0xe4, 0x19, 0x18, 0xda, 0x20, 0x3a, 0x66,
- 0x3b, 0x6b, 0x8b, 0xf2, 0x60, 0x81, 0x9f, 0x98, 0x23, 0x52, 0x1c, 0x4b,
- 0x60, 0x45, 0xd2, 0x8d, 0xab, 0x9a, 0x18, 0xa7, 0x3e, 0xcf, 0x2c, 0xee,
- 0x9d, 0x31, 0x45, 0x5d, 0xe5, 0xb6, 0x56, 0x45, 0xaa, 0x28, 0x35, 0x8f,
- 0xdd, 0x60, 0x95, 0xed, 0x23, 0x87, 0x96, 0xf5, 0xda, 0x5b, 0xfc, 0x7b,
- 0xe2, 0xb3, 0x14, 0x25, 0xa7, 0x05, 0xf0, 0x0a, 0xa3, 0x89, 0xfc, 0x43,
- 0xbd, 0xe0, 0xf7, 0xfd, 0xcf, 0x76, 0xb4, 0xd0, 0x26, 0xf0, 0x15, 0xc3,
- 0x67, 0x50, 0x90, 0xa2, 0xe5, 0x9e, 0x41, 0xa2, 0x7b, 0x56, 0xba, 0x47,
- 0xeb, 0xd0, 0xac, 0x2f, 0x06, 0x4f, 0x2b, 0xe6, 0xdd, 0x79, 0x39, 0x9d,
- 0x79, 0x68, 0x20, 0x03, 0x24, 0x7d, 0x7b, 0x79, 0xfa, 0x26, 0x5a, 0xa3,
- 0x0e, 0xe0, 0xbb, 0xea, 0x57, 0xff, 0x8a, 0x52, 0x40, 0x5f, 0x9c, 0x9c,
- 0x0c, 0xa1, 0x12, 0xa8, 0xa3, 0xba, 0x11, 0x70, 0x51, 0x6a, 0x9e, 0x09,
- 0x4b, 0x55, 0x79, 0x4a, 0x1a, 0x7d, 0x8e, 0x1c, 0xb1, 0x32, 0x1b, 0x67,
- 0x53, 0x4e, 0x27, 0xe4, 0x97, 0x12, 0x2d, 0x16, 0x8f, 0xcb, 0x9d, 0xc1,
- 0xcb, 0xa6, 0xe0, 0x4a, 0x8b, 0xa4, 0x11, 0x30, 0xc3, 0x8a, 0x2c, 0x06,
- 0x60, 0x2c, 0x45, 0xd6, 0x06, 0x77, 0x05, 0xd7, 0xa7, 0xb4, 0x6c, 0x0f,
- 0xd2, 0x53, 0x88, 0xe2, 0x58, 0xd0, 0x54, 0x1b, 0xc7, 0x6d, 0x8a, 0xa8,
- 0xbf, 0x46, 0x2a, 0xa7, 0x96, 0xac, 0xaa, 0x20, 0xf5, 0x00, 0xc6, 0x6c,
- 0x92, 0xe5, 0x70, 0xdb, 0x05, 0x38, 0x31, 0x8c, 0x6d, 0xb6, 0x44, 0x48,
- 0x0c, 0x0f, 0x6f, 0xd5, 0x3c, 0x4a, 0xf7, 0x37, 0x99, 0x44, 0xa4, 0x60,
- 0x99, 0x99, 0x2b, 0x49, 0x10, 0x04, 0xfc, 0x02, 0x02, 0x2f, 0x22, 0x04,
- 0xe1, 0x59, 0x49, 0xb8, 0x51, 0x6d, 0xee, 0x35, 0x57, 0x24, 0x4e, 0x32,
- 0xad, 0x7a, 0x62, 0xdf, 0xa4, 0xcd, 0x39, 0x4a, 0xaf, 0xd7, 0xe0, 0x6f,
- 0xb5, 0x2b, 0x1d, 0x3c, 0xa2, 0xc7, 0xf5, 0x8d, 0xb6, 0xe8, 0xe0, 0x8a,
- 0xbe, 0x41, 0xd4, 0xf6, 0xb1, 0xaa, 0x86, 0xaf, 0x8c, 0xad, 0x95, 0x75,
- 0x25, 0xc9, 0x8b, 0x6f, 0x83, 0x40, 0xd7, 0x78, 0xd7, 0x70, 0x68, 0x3d,
- 0xa6, 0x52, 0x54, 0x53, 0xb3, 0x78, 0x42, 0xff, 0x5b, 0xa5, 0xe3, 0x8c,
- 0x46, 0xaa, 0x52, 0x64, 0x6b, 0x08, 0xe7, 0x77, 0x92, 0xf8, 0xa1, 0x72,
- 0x66, 0xa6, 0x0f, 0x85, 0x68, 0x54, 0x45, 0x39, 0xc9, 0x96, 0xe2, 0xd6,
- 0x85, 0xc1, 0x36, 0xb7, 0xdb, 0xfc, 0xef, 0xff, 0x68, 0xfa, 0xa9, 0x7f,
- 0xfc, 0x49, 0xd4, 0x17, 0x09, 0xb0, 0xf5, 0x7e, 0x14, 0x23, 0xa5, 0xc2,
- 0xa3, 0x0b, 0xf2, 0xa6, 0x71, 0x36, 0x8b, 0x4c, 0x51, 0x8e, 0x54, 0x5d,
- 0x85, 0xd1, 0xf0, 0x0c, 0xbd, 0x8a, 0x75, 0x6c, 0x76, 0x0f, 0x00, 0x6f,
- 0x3a, 0xa8, 0xe2, 0x1b, 0xe0, 0x6b, 0x29, 0x0a, 0xd0, 0x64, 0x1d, 0xe2,
- 0x92, 0x85, 0xa3, 0x57, 0x61, 0x2d, 0x11, 0x08, 0x2c, 0x26, 0x74, 0x8c,
- 0x9f, 0x6f, 0x9a, 0x53, 0x29, 0x05, 0xd5, 0x44, 0x03, 0x91, 0x8d, 0xd6,
- 0x98, 0xde, 0xbf, 0xd3, 0x29, 0xeb, 0x95, 0xf7, 0xd9, 0x3f, 0x06, 0xec,
- 0x57, 0x03, 0x23, 0xee, 0x67, 0x02, 0x1e, 0xfa, 0xfe, 0x93, 0x5d, 0xd6,
- 0xbb, 0x3b, 0x4d, 0xc8, 0x54, 0xac, 0x80, 0xed, 0xb9, 0x8b, 0xd2, 0x5f,
- 0x03, 0x3e, 0x52, 0xed, 0x8e, 0x7b, 0xe9, 0xf1, 0x95, 0xf0, 0x8f, 0x01,
- 0xff, 0xfb, 0xe3, 0x6e, 0xff, 0xd9, 0x4f, 0xae, 0xd7, 0x4f, 0x76, 0xdf,
- 0x7f, 0xb2, 0xd7, 0x69, 0x45, 0x98, 0x65, 0xd3, 0xc4, 0xd2, 0xa0, 0x30,
- 0x4d, 0xa1, 0xd3, 0xe2, 0xa1, 0xe2, 0xea, 0x52, 0x1d, 0xd1, 0xc3, 0xad,
- 0x01, 0xfc, 0xb1, 0xe9, 0x44, 0x64, 0xb5, 0xe5, 0x03, 0xa0, 0x4f, 0x61,
- 0x21, 0xc0, 0x00, 0xa9, 0x41, 0xeb, 0xe2, 0x41, 0xc9, 0x94, 0x58, 0x1b,
- 0xb3, 0x19, 0x36, 0xcc, 0x93, 0x40, 0x9a, 0x98, 0xac, 0xe8, 0xde, 0x13,
- 0xb4, 0x8b, 0x81, 0x73, 0x35, 0x99, 0x34, 0x69, 0x75, 0x45, 0x25, 0x83,
- 0x68, 0xd3, 0x49, 0x00, 0x9c, 0x6a, 0xb2, 0xd5, 0xa6, 0xd0, 0x78, 0x1d,
- 0xc2, 0xd3, 0xbc, 0x56, 0x6d, 0xc3, 0x49, 0x16, 0x62, 0xf7, 0xe7, 0xa7,
- 0x86, 0x38, 0xf1, 0x81, 0xd3, 0x13, 0xeb, 0x8c, 0x82, 0x52, 0xcf, 0x8a,
- 0x31, 0xeb, 0x60, 0x9c, 0xf0, 0xd5, 0xbd, 0x80, 0x4a, 0x37, 0x80, 0x92,
- 0x90, 0x8b, 0xe5, 0xfd, 0x3d, 0x21, 0x9a, 0x57, 0xf8, 0xba, 0x32, 0x8c,
- 0x9e, 0xe6, 0xdb, 0x11, 0x51, 0x23, 0x13, 0xbf, 0x6c, 0x26, 0xd9, 0x0f,
- 0xb6, 0xda, 0x02, 0x29, 0xc3, 0xb6, 0x2c, 0x21, 0x4b, 0x03, 0x9c, 0xa2,
- 0x42, 0x30, 0x3b, 0x61, 0x1b, 0x53, 0xbc, 0x8b, 0x24, 0xb4, 0x0c, 0x34,
- 0x82, 0x39, 0xb5, 0xda, 0x5e, 0xcf, 0xa1, 0xc0, 0x24, 0xd3, 0x22, 0x19,
- 0xfc, 0x5b, 0xc9, 0xaf, 0xb2, 0x45, 0xfd, 0xb8, 0xe1, 0x01, 0xac, 0xb8,
- 0x79, 0x11, 0xf6, 0x51, 0x2d, 0xc2, 0x27, 0x85, 0x05, 0x5c, 0x95, 0x3b,
- 0x37, 0xa7, 0x42, 0x03, 0xe0, 0x1a, 0x59, 0x12, 0xb1, 0xbb, 0x2c, 0x24,
- 0x73, 0xb4, 0x01, 0x4c, 0x82, 0x2c, 0x52, 0xe7, 0x94, 0x80, 0x7b, 0x3e,
- 0x93, 0x04, 0x2f, 0x7a, 0xbc, 0x09, 0x86, 0xe7, 0xee, 0xc1, 0x8a, 0xbe,
- 0x8d, 0xf1, 0x18, 0xbb, 0x1b, 0x83, 0x3b, 0x49, 0xad, 0x86, 0xea, 0x7c,
- 0x5b, 0x34, 0x30, 0xc1, 0x35, 0x40, 0x75, 0x51, 0x03, 0x28, 0xc5, 0x75,
- 0x0b, 0xa3, 0x14, 0xef, 0x40, 0x87, 0x18, 0x45, 0xbf, 0xc3, 0x4c, 0x08,
- 0xca, 0x61, 0xd0, 0xdc, 0xa3, 0xe0, 0x5d, 0x2f, 0xaa, 0xae, 0x61, 0x36,
- 0x1c, 0x45, 0x2f, 0x17, 0x37, 0x39, 0xc9, 0x34, 0x8f, 0x80, 0x10, 0xd0,
- 0x53, 0xf2, 0x8c, 0x63, 0xb4, 0x41, 0x96, 0xfd, 0x6f, 0x98, 0x0d, 0xcf,
- 0x91, 0xf5, 0x4f, 0x76, 0x76, 0x1b, 0x55, 0x48, 0x7c, 0xe1, 0xf1, 0x0c,
- 0x21, 0x2b, 0x6c, 0x76, 0x61, 0x18, 0xfd, 0x28, 0xda, 0x7b, 0xbe, 0xfb,
- 0x7c, 0x7b, 0x77, 0x67, 0xf0, 0x64, 0xb0, 0xa7, 0x42, 0x31, 0x30, 0x11,
- 0x49, 0x56, 0xe7, 0x2a, 0x3f, 0x11, 0x42, 0x6b, 0xda, 0xa3, 0x51, 0x58,
- 0xdf, 0xa3, 0xe6, 0x02, 0x38, 0x56, 0x2d, 0x27, 0xec, 0x6f, 0xf0, 0x98,
- 0x03, 0x67, 0x5c, 0x64, 0x86, 0x55, 0xb2, 0x68, 0x38, 0xab, 0xe7, 0x7d,
- 0x1e, 0x8a, 0xca, 0x7c, 0x4b, 0x41, 0x53, 0x1e, 0xa5, 0x24, 0xb3, 0x94,
- 0x5c, 0x01, 0x8f, 0xd3, 0x9f, 0x49, 0x8e, 0x35, 0xa4, 0x1e, 0xce, 0x0b,
- 0xce, 0xc2, 0x32, 0x9a, 0x6b, 0x02, 0x14, 0x4d, 0x58, 0x41, 0xea, 0xb0,
- 0x91, 0x3d, 0x12, 0x2e, 0x53, 0x49, 0xc7, 0x05, 0xf6, 0x0a, 0xdd, 0xf9,
- 0xa8, 0x3b, 0xf3, 0xb5, 0x65, 0x03, 0xc7, 0xad, 0x71, 0x9e, 0x1a, 0xb9,
- 0x22, 0xba, 0x6f, 0x2c, 0xf1, 0x46, 0x58, 0x4a, 0x28, 0x38, 0xfa, 0x81,
- 0x50, 0xaa, 0x08, 0x82, 0x82, 0xde, 0x38, 0x49, 0xdb, 0xa0, 0xd3, 0x52,
- 0x57, 0x27, 0xc1, 0xef, 0xb8, 0xa2, 0x79, 0xb0, 0x7b, 0x57, 0x94, 0x3c,
- 0x6f, 0x67, 0x7d, 0x34, 0xc0, 0xf0, 0x11, 0x9c, 0x39, 0xa1, 0x85, 0xbd,
- 0xff, 0x3f, 0xd1, 0xc2, 0xde, 0xff, 0xa3, 0x85, 0x7f, 0x13, 0x2d, 0xbc,
- 0xa8, 0xd1, 0x02, 0x14, 0x05, 0xba, 0x74, 0x58, 0xb5, 0x78, 0x94, 0x22,
- 0x16, 0xec, 0xae, 0xe4, 0x44, 0x8b, 0x54, 0x52, 0xf1, 0x6a, 0x86, 0x78,
- 0xd3, 0x42, 0xb5, 0x7e, 0xe0, 0x6c, 0xb6, 0xac, 0xcf, 0x6a, 0x6e, 0xe5,
- 0x0a, 0x55, 0xb5, 0x28, 0x83, 0x34, 0x06, 0xb5, 0x29, 0x58, 0xd8, 0x97,
- 0x00, 0x95, 0x4a, 0x54, 0x2e, 0x07, 0x63, 0xe3, 0xf2, 0x6d, 0x27, 0xb0,
- 0x6d, 0x17, 0x8e, 0x97, 0x73, 0x16, 0x6b, 0x9f, 0xa4, 0xd8, 0x45, 0xa3,
- 0x00, 0xf4, 0x5e, 0x73, 0xca, 0x80, 0x0d, 0x7b, 0x74, 0xc2, 0xdc, 0xf9,
- 0xda, 0xa0, 0xad, 0x28, 0x9c, 0xa9, 0xcd, 0x6c, 0x9d, 0x88, 0x2d, 0x93,
- 0xd4, 0x39, 0xbe, 0x13, 0x5b, 0x2e, 0xda, 0xc4, 0x85, 0xc8, 0xea, 0x1e,
- 0x2f, 0x4b, 0xd0, 0x97, 0x5c, 0xa7, 0x8d, 0x09, 0x3b, 0xec, 0xcb, 0x81,
- 0x3e, 0x97, 0x5a, 0x1d, 0x40, 0xcb, 0xf3, 0xad, 0x0f, 0x52, 0x77, 0x05,
- 0x73, 0x6a, 0x2a, 0x8a, 0x85, 0x74, 0xc4, 0x03, 0xab, 0x95, 0x62, 0x96,
- 0x35, 0x9a, 0x40, 0x63, 0x6d, 0x5d, 0xa4, 0xe6, 0x2a, 0x89, 0x7a, 0x5b,
- 0x1f, 0x81, 0x54, 0x2e, 0xfc, 0x27, 0x17, 0x49, 0xfa, 0x6f, 0x59, 0x25,
- 0xed, 0xab, 0x35, 0x5c, 0x33, 0x5c, 0xa6, 0xc6, 0x8c, 0xd6, 0xf9, 0x69,
- 0xd7, 0xec, 0xfc, 0x3a, 0x5f, 0x6d, 0x7d, 0x5a, 0x6d, 0xf1, 0x34, 0xed,
- 0x13, 0x93, 0x0a, 0xb3, 0x81, 0xc3, 0xd8, 0x4a, 0x9d, 0xd9, 0xfc, 0xd0,
- 0x71, 0xdd, 0xe4, 0xe9, 0x1e, 0xd6, 0xf8, 0xed, 0x0a, 0x29, 0x3c, 0xca,
- 0xea, 0x9d, 0x1d, 0xe0, 0x91, 0x5d, 0x74, 0xa0, 0xd4, 0x32, 0xe7, 0xa6,
- 0xc1, 0xe9, 0x5f, 0xdb, 0x45, 0xd8, 0xbc, 0x2a, 0x7b, 0x88, 0x2e, 0x2a,
- 0x53, 0x69, 0x31, 0xfa, 0x35, 0x36, 0x6f, 0x77, 0xb0, 0x43, 0x02, 0x16,
- 0xff, 0x06, 0x3d, 0x6f, 0x9f, 0xad, 0x0a, 0x3f, 0x7d, 0xde, 0x40, 0xeb,
- 0x36, 0x10, 0xf0, 0x00, 0xe8, 0x0e, 0xf3, 0x8a, 0xf8, 0x7d, 0x1b, 0x99,
- 0xe1, 0x73, 0xf8, 0xcc, 0x06, 0xf5, 0x99, 0xae, 0x47, 0x2e, 0x4a, 0xcb,
- 0x00, 0xb8, 0x88, 0x93, 0x0f, 0xf0, 0xf2, 0xee, 0xce, 0x67, 0x3b, 0xad,
- 0x09, 0x5a, 0x60, 0xd0, 0x2d, 0x95, 0x77, 0x34, 0x9b, 0x30, 0x76, 0xa1,
- 0xbd, 0x32, 0x38, 0xb1, 0xef, 0xb4, 0x7b, 0x9f, 0x36, 0xfb, 0x0f, 0xdb,
- 0xba, 0x06, 0x5b, 0x3d, 0x4d, 0xf6, 0x8a, 0x4b, 0xb3, 0xf9, 0xbb, 0x94,
- 0x8c, 0xc3, 0xb3, 0xb7, 0x6f, 0x8f, 0x0f, 0xe9, 0xca, 0xb9, 0xc9, 0xe1,
- 0xe2, 0x74, 0xb6, 0xda, 0x36, 0xdd, 0xcf, 0xe3, 0x89, 0xcb, 0x00, 0x78,
- 0x71, 0xcc, 0xc8, 0x17, 0x5a, 0x3c, 0x6a, 0xfc, 0xa5, 0x85, 0x38, 0x77,
- 0x07, 0xbb, 0xc1, 0x56, 0x2d, 0x6c, 0xa4, 0x25, 0x67, 0x53, 0x4c, 0x5b,
- 0x43, 0xbd, 0xad, 0x4f, 0x99, 0xb3, 0x49, 0xb5, 0xd5, 0x59, 0x36, 0x12,
- 0x0d, 0x70, 0x19, 0xb4, 0x08, 0x05, 0xd6, 0x12, 0x46, 0xae, 0x50, 0x70,
- 0x56, 0x87, 0x5e, 0x12, 0x63, 0x31, 0x90, 0xc8, 0x2d, 0x8b, 0xe2, 0xab,
- 0xb4, 0x2c, 0x8c, 0x43, 0x3b, 0xe4, 0x3c, 0x55, 0xda, 0xb6, 0xa9, 0x45,
- 0xb2, 0xa7, 0xa5, 0x56, 0x06, 0x03, 0x52, 0x28, 0xb4, 0x58, 0x17, 0x9b,
- 0x57, 0x48, 0xbc, 0x10, 0xf5, 0xd2, 0xb8, 0xef, 0xa8, 0xd7, 0x78, 0x41,
- 0x1d, 0x21, 0x20, 0xb9, 0x10, 0x0c, 0x41, 0x77, 0x50, 0x2a, 0xdb, 0x6e,
- 0x5b, 0xe7, 0x53, 0x25, 0x9a, 0xa1, 0x92, 0xce, 0x56, 0xe7, 0xe2, 0x5c,
- 0xd5, 0x26, 0x28, 0x21, 0xf3, 0x1a, 0x3b, 0xad, 0xbe, 0x3a, 0x8b, 0xff,
- 0x51, 0x46, 0xd1, 0x52, 0x5d, 0x53, 0xa9, 0x5e, 0x62, 0xc0, 0xe2, 0xb9,
- 0x90, 0x91, 0xae, 0x95, 0xa3, 0xa0, 0xac, 0x72, 0x08, 0x97, 0xa3, 0x47,
- 0x50, 0xd6, 0x58, 0xb9, 0x11, 0x7b, 0xe9, 0xa3, 0x00, 0x6b, 0x2e, 0x02,
- 0x40, 0x2c, 0x84, 0x6b, 0x21, 0x9c, 0xff, 0xed, 0x00, 0x6b, 0x56, 0x42,
- 0x5a, 0x92, 0xa6, 0xd6, 0x05, 0x21, 0x5b, 0xcd, 0x4c, 0xd8, 0xc0, 0x8b,
- 0xda, 0xe9, 0xd0, 0x0a, 0x6f, 0x59, 0xbe, 0x3d, 0x85, 0xc8, 0xc8, 0xc9,
- 0x3c, 0x19, 0x9b, 0xb1, 0x94, 0x7d, 0xb6, 0x50, 0xc8, 0xd8, 0xd7, 0x6f,
- 0xa6, 0xa6, 0x55, 0xe0, 0x53, 0x1b, 0xf4, 0xcc, 0xc7, 0x1a, 0x2a, 0xf6,
- 0x97, 0x40, 0x0a, 0x5a, 0x71, 0xbc, 0x93, 0x79, 0x03, 0x9d, 0x88, 0x9f,
- 0x18, 0x7b, 0xb8, 0x58, 0xad, 0xeb, 0x25, 0xac, 0x5e, 0x98, 0xa2, 0xab,
- 0x73, 0x67, 0x84, 0xc2, 0xe0, 0x3d, 0xed, 0x99, 0x2c, 0x52, 0xaa, 0xb9,
- 0x1b, 0x38, 0x9b, 0x5c, 0xa8, 0xb5, 0xe4, 0x4d, 0xe7, 0xa5, 0xa5, 0xba,
- 0x2e, 0xc2, 0x6a, 0xda, 0x71, 0x71, 0x5b, 0xac, 0xc5, 0x1f, 0x55, 0x04,
- 0x19, 0xc4, 0xb3, 0x21, 0xe1, 0x2f, 0x00, 0x27, 0xb6, 0x56, 0x05, 0x57,
- 0xa4, 0x0c, 0x47, 0xc9, 0x94, 0x58, 0x6d, 0xce, 0x6d, 0x51, 0x03, 0x73,
- 0xad, 0x61, 0x30, 0x74, 0x28, 0xc5, 0xed, 0x85, 0xe6, 0xd3, 0x41, 0x12,
- 0x75, 0x18, 0xbf, 0xb8, 0x13, 0x06, 0xb7, 0x8b, 0x6b, 0xca, 0xbd, 0xca,
- 0x75, 0xaf, 0x69, 0xa8, 0x6e, 0xac, 0x2d, 0x76, 0x18, 0x63, 0xaf, 0x6a,
- 0xbe, 0xe0, 0x2d, 0xdb, 0x7c, 0x37, 0x4f, 0x1f, 0x70, 0x15, 0x34, 0x41,
- 0x11, 0xdd, 0xbc, 0x1f, 0x19, 0xd5, 0xee, 0x8b, 0xbd, 0xc1, 0xee, 0xf3,
- 0xcf, 0x06, 0xa4, 0x7a, 0xed, 0x56, 0x46, 0x87, 0x20, 0x09, 0x0e, 0x6b,
- 0x08, 0xdb, 0x69, 0xb9, 0x44, 0xdb, 0x1c, 0x74, 0x61, 0x07, 0xb3, 0xd5,
- 0x20, 0x08, 0xcf, 0x6b, 0x74, 0xa1, 0x21, 0x7c, 0xf5, 0x96, 0xfb, 0x81,
- 0xb1, 0x5d, 0x49, 0x0d, 0xda, 0x41, 0x5b, 0x45, 0x69, 0xc3, 0xa9, 0x0b,
- 0x0a, 0x49, 0x4f, 0xda, 0x07, 0xb4, 0xbe, 0xba, 0xb4, 0xeb, 0xff, 0x5f,
- 0x38, 0xee, 0x56, 0xcd, 0xe5, 0x28, 0xf5, 0x51, 0xe3, 0x52, 0x6c, 0xde,
- 0xaa, 0x87, 0x4b, 0x4d, 0xe9, 0xb3, 0x8b, 0x4b, 0x4d, 0x42, 0x13, 0x76,
- 0x10, 0x17, 0x77, 0x03, 0x17, 0x11, 0x80, 0x00, 0x24, 0xbd, 0x5c, 0x9a,
- 0x40, 0xbb, 0x28, 0x5f, 0x6d, 0xe9, 0xa2, 0xc1, 0x1d, 0x8a, 0x36, 0x5d,
- 0x5a, 0x54, 0x58, 0x18, 0x1e, 0x3e, 0x15, 0xbc, 0x06, 0x1b, 0x23, 0xad,
- 0xd0, 0xd4, 0x67, 0xf0, 0xf2, 0x6b, 0x7f, 0xfa, 0x93, 0x67, 0x51, 0x43,
- 0x8e, 0xdb, 0xd7, 0xb2, 0x4f, 0x50, 0xe4, 0x9e, 0x79, 0x07, 0x82, 0x64,
- 0xb9, 0x47, 0x9d, 0xfd, 0x1f, 0x11, 0xdd, 0xff, 0x53, 0xff, 0x47, 0xfa,
- 0xf3, 0xa7, 0x8e, 0xbb, 0x06, 0xa0, 0x50, 0x89, 0xf5, 0xd4, 0x4d, 0x5e,
- 0x36, 0xa8, 0x87, 0x67, 0x5c, 0x31, 0x73, 0x20, 0x42, 0x70, 0xd0, 0x07,
- 0x0e, 0xa2, 0x24, 0x82, 0xca, 0x4c, 0xd5, 0xc3, 0x20, 0x09, 0xe2, 0x52,
- 0x8b, 0x85, 0x28, 0xc5, 0xad, 0xa5, 0xe6, 0x64, 0x68, 0x92, 0x27, 0x5e,
- 0xec, 0x99, 0xa9, 0x94, 0x4d, 0xc1, 0xf7, 0xc2, 0x76, 0x62, 0xcb, 0x23,
- 0x97, 0xfb, 0x87, 0xe1, 0xc3, 0xd4, 0x4c, 0x2d, 0x1f, 0x6c, 0xb8, 0xbc,
- 0x37, 0x0e, 0x38, 0xd7, 0xd2, 0xd7, 0x12, 0xd5, 0x29, 0xfe, 0xf1, 0xc4,
- 0x45, 0x05, 0xa5, 0x73, 0x36, 0x9f, 0x1b, 0x3a, 0x44, 0x9e, 0x16, 0xb7,
- 0x3c, 0x43, 0xcd, 0xcc, 0x8c, 0x24, 0x75, 0x78, 0x23, 0xd0, 0xf7, 0x31,
- 0x32, 0x4b, 0x1e, 0xe2, 0xa0, 0x44, 0xc3, 0x37, 0x0b, 0x6e, 0x81, 0xbf,
- 0x39, 0xa7, 0x94, 0x54, 0xe6, 0x51, 0x1b, 0xac, 0xa0, 0x10, 0x79, 0x4c,
- 0xb6, 0xcc, 0x90, 0x9f, 0x42, 0x20, 0x0f, 0xc3, 0xab, 0x69, 0x04, 0x8d,
- 0x87, 0x08, 0x80, 0x2e, 0xe4, 0x19, 0x05, 0x71, 0xe3, 0x89, 0xc1, 0x4c,
- 0x6a, 0xea, 0x9e, 0x84, 0x9b, 0x05, 0x78, 0x60, 0x2d, 0x89, 0xb6, 0xd5,
- 0x20, 0xeb, 0x1a, 0x62, 0x93, 0xa6, 0x65, 0x24, 0x71, 0x4e, 0xdc, 0x8b,
- 0xcd, 0xe1, 0xc1, 0xe4, 0xfe, 0x07, 0x35, 0x0b, 0x34, 0x38, 0x46, 0x2f,
- 0xc4, 0xc8, 0xdb, 0xee, 0xb7, 0xed, 0xa1, 0x5c, 0x72, 0x43, 0x64, 0x9f,
- 0x31, 0x6d, 0xe5, 0xa3, 0xb4, 0xcc, 0x63, 0x0d, 0x25, 0xd4, 0x54, 0xe8,
- 0x40, 0xb8, 0x50, 0xb8, 0xf2, 0xe1, 0xba, 0x54, 0xe8, 0x41, 0xf4, 0x3f,
- 0xd0, 0xa9, 0xbe, 0x2d, 0x91, 0x30, 0xc8, 0xbf, 0xf9, 0xf2, 0xf8, 0xf5,
- 0xd9, 0xc5, 0x71, 0x35, 0x69, 0x45, 0x72, 0x24, 0xa3, 0xb6, 0xc2, 0x2b,
- 0x9b, 0xa8, 0x0f, 0x69, 0x16, 0x14, 0x2c, 0x95, 0x65, 0x5b, 0x9e, 0x7f,
- 0x77, 0x14, 0x9c, 0x3c, 0xcb, 0xdf, 0xb6, 0x46, 0x7b, 0xe2, 0xd9, 0x68,
- 0x20, 0x58, 0x13, 0xff, 0xdc, 0x42, 0xbd, 0x4f, 0xc1, 0x5a, 0xb3, 0xf1,
- 0x09, 0x46, 0x00, 0xea, 0x95, 0x68, 0x3d, 0x60, 0x09, 0x56, 0x29, 0x0a,
- 0xb6, 0xbc, 0xb8, 0x46, 0x5b, 0xb0, 0x01, 0x19, 0x81, 0x02, 0x15, 0xbe,
- 0xd4, 0xc4, 0x11, 0x47, 0xf0, 0xbe, 0xb0, 0x43, 0x66, 0x10, 0x35, 0x3b,
- 0x1a, 0xe9, 0x3a, 0xa0, 0x97, 0x06, 0xee, 0xbe, 0x80, 0xcd, 0xb0, 0xf5,
- 0x5a, 0xec, 0xf4, 0xa6, 0x30, 0x28, 0xa0, 0x40, 0x14, 0x26, 0xf0, 0x4b,
- 0xe9, 0x4c, 0x07, 0x74, 0xdc, 0xbc, 0x7d, 0xdd, 0xfa, 0x6a, 0xe7, 0x9b,
- 0xc5, 0x56, 0xa5, 0xa4, 0xa8, 0x2d, 0x9e, 0x55, 0xae, 0xfa, 0x53, 0x37,
- 0xda, 0xb4, 0xf8, 0x9a, 0x16, 0x58, 0x01, 0x87, 0xf9, 0x6a, 0x89, 0x06,
- 0x5b, 0xae, 0x70, 0xd1, 0x9a, 0x52, 0x45, 0x6e, 0xd6, 0x6b, 0xb3, 0x9c,
- 0x4c, 0x40, 0x30, 0x38, 0x2d, 0x3b, 0xc9, 0x86, 0x0f, 0xe5, 0x8a, 0x2f,
- 0x4b, 0x3b, 0xbd, 0xf5, 0x88, 0x16, 0x3e, 0x71, 0xc6, 0x15, 0xe9, 0x1a,
- 0x29, 0x42, 0xed, 0x0f, 0x16, 0x8e, 0x2a, 0xc9, 0x95, 0xc5, 0x6a, 0x5e,
- 0x42, 0x68, 0x12, 0x00, 0xf9, 0x71, 0x96, 0xf3, 0x92, 0xd6, 0x9a, 0x03,
- 0x26, 0x81, 0xdb, 0x34, 0xc4, 0x44, 0x5f, 0xbc, 0x3e, 0x7c, 0xf1, 0xec,
- 0x05, 0x44, 0x3f, 0xd4, 0x8e, 0xd1, 0xa8, 0x7b, 0x0d, 0xa9, 0x40, 0x32,
- 0xa8, 0x1f, 0x72, 0x83, 0x1d, 0x68, 0x4b, 0x90, 0x12, 0x59, 0x70, 0x99,
- 0x4a, 0x94, 0xff, 0x30, 0x68, 0x62, 0xd0, 0x0a, 0x67, 0xd4, 0x76, 0x7b,
- 0xae, 0x2b, 0x81, 0x68, 0xb7, 0x06, 0x46, 0x9f, 0x4a, 0x1c, 0xb7, 0x16,
- 0x50, 0x33, 0x75, 0x89, 0x34, 0xf4, 0x39, 0xb4, 0x19, 0xdd, 0xc4, 0x9e,
- 0xa3, 0x3a, 0x57, 0x9b, 0xae, 0x68, 0x6b, 0xee, 0x6f, 0xd5, 0xf3, 0xac,
- 0x54, 0x17, 0x24, 0x82, 0xce, 0xaa, 0x15, 0x55, 0x51, 0xbd, 0x1d, 0xf6,
- 0xde, 0x36, 0x43, 0x89, 0x1a, 0xb1, 0x10, 0x2f, 0xc4, 0x99, 0x71, 0xd3,
- 0x69, 0x40, 0x5e, 0x2d, 0xfd, 0x35, 0x0b, 0x54, 0xde, 0x5c, 0xe7, 0x0b,
- 0xc9, 0xea, 0x68, 0x43, 0xe1, 0x0b, 0x51, 0x53, 0xe4, 0x51, 0x23, 0x76,
- 0x07, 0x2d, 0x2e, 0xef, 0x9e, 0x1c, 0xb9, 0x62, 0xae, 0xde, 0x67, 0x39,
- 0x5a, 0xb5, 0x37, 0xe7, 0x1e, 0x03, 0xb1, 0x79, 0xa6, 0xe8, 0x9a, 0xf2,
- 0x52, 0xf3, 0x68, 0x65, 0xc6, 0x4e, 0xfe, 0xae, 0xbd, 0x39, 0x6d, 0x45,
- 0x94, 0x49, 0x69, 0xc3, 0x1a, 0x46, 0x30, 0x8e, 0x15, 0xd4, 0xe1, 0x8d,
- 0xe1, 0x84, 0x36, 0xeb, 0xa6, 0x59, 0x98, 0xe9, 0x86, 0x84, 0x70, 0x11,
- 0xc4, 0x3f, 0xb8, 0x16, 0x33, 0x98, 0x06, 0xad, 0xaa, 0x85, 0xa6, 0x0c,
- 0x17, 0x61, 0xd2, 0x21, 0xda, 0x19, 0x01, 0x98, 0xb1, 0x8d, 0x94, 0xeb,
- 0x56, 0x12, 0x51, 0xd2, 0xd0, 0x3c, 0xde, 0x0c, 0xa7, 0x30, 0x8f, 0xb2,
- 0x71, 0x19, 0xcc, 0x80, 0x1f, 0x68, 0x6f, 0x4e, 0x45, 0x83, 0xe6, 0xcc,
- 0x38, 0xb1, 0x10, 0x11, 0xdb, 0x8f, 0xcf, 0x4c, 0x1e, 0x6c, 0x6c, 0x32,
- 0x7d, 0x28, 0xac, 0xa8, 0xb1, 0xc3, 0xeb, 0x67, 0xd6, 0xb6, 0xc3, 0x18,
- 0x41, 0x7d, 0x83, 0x4d, 0x88, 0xcc, 0x65, 0x2b, 0xfb, 0xed, 0xcd, 0xb9,
- 0x1d, 0xc6, 0x93, 0x8f, 0x6e, 0xb0, 0xf6, 0xd2, 0x58, 0x85, 0xe9, 0x5c,
- 0x21, 0xc0, 0xde, 0x4b, 0x1a, 0x24, 0xe7, 0x37, 0x96, 0xef, 0x1f, 0x5f,
- 0x90, 0xe9, 0xdc, 0xf0, 0x42, 0x38, 0x7d, 0xcf, 0x1f, 0x5c, 0x0d, 0x3f,
- 0x88, 0xab, 0x48, 0x22, 0x91, 0x98, 0x17, 0xd6, 0x90, 0xbd, 0xef, 0xcf,
- 0x03, 0x4c, 0x2c, 0xb2, 0x74, 0x6e, 0xb1, 0xa7, 0xca, 0xcb, 0x83, 0x21,
- 0x46, 0x6d, 0x40, 0x04, 0x41, 0xc0, 0x54, 0x63, 0x8a, 0xb3, 0x5b, 0x86,
- 0xff, 0x73, 0xb7, 0xdb, 0xfb, 0xf5, 0x3a, 0x0c, 0xe8, 0x58, 0x1e, 0xf7,
- 0x74, 0x2c, 0xb3, 0x72, 0xca, 0xb9, 0x4b, 0xab, 0xfb, 0xf0, 0x6e, 0x57,
- 0xbb, 0x74, 0x67, 0xb2, 0x3e, 0xbe, 0xc5, 0xfd, 0xc4, 0x3a, 0xe7, 0x5f,
- 0xad, 0xe3, 0x10, 0x06, 0x32, 0x1e, 0x15, 0xd9, 0x74, 0x59, 0x4a, 0x44,
- 0x42, 0x58, 0x26, 0x9a, 0xb8, 0xeb, 0x9a, 0xa5, 0x40, 0x10, 0x8e, 0xdd,
- 0xed, 0xeb, 0x33, 0xc7, 0x72, 0x81, 0x8d, 0x35, 0x54, 0x14, 0x6c, 0xc7,
- 0xfa, 0xc5, 0xd1, 0xa7, 0xfd, 0x10, 0x05, 0xd3, 0xd4, 0x33, 0xaf, 0xbc,
- 0x65, 0x81, 0xd6, 0x33, 0x3c, 0xed, 0xb5, 0x76, 0x20, 0x26, 0x09, 0xe3,
- 0x0a, 0x29, 0x29, 0x70, 0x04, 0x86, 0x34, 0x64, 0x7c, 0xef, 0x31, 0x42,
- 0x5a, 0xbb, 0xc6, 0xf9, 0xec, 0x03, 0x87, 0x9c, 0x1e, 0xf0, 0xb3, 0x62,
- 0xfc, 0x93, 0x60, 0x56, 0x8d, 0x93, 0xa9, 0xc7, 0x78, 0xcd, 0xca, 0xaf,
- 0x1b, 0x41, 0x85, 0x0a, 0x1f, 0x1b, 0x09, 0x3f, 0xd8, 0x36, 0x18, 0xbf,
- 0xb4, 0x2c, 0xa7, 0x20, 0x63, 0xcd, 0x46, 0xd6, 0xde, 0x9c, 0x0e, 0xd7,
- 0xbf, 0xa7, 0xcb, 0xd3, 0x33, 0xb3, 0xd9, 0x44, 0xcd, 0xd0, 0xac, 0x81,
- 0x36, 0x69, 0xc3, 0x0e, 0xf8, 0x2f, 0x62, 0x10, 0xac, 0x76, 0x4c, 0xe7,
- 0x95, 0x00, 0x12, 0xea, 0x31, 0x9b, 0x21, 0xd1, 0xbd, 0x3d, 0x50, 0x4e,
- 0xe2, 0xe4, 0xc3, 0x4c, 0x77, 0xb7, 0xed, 0x82, 0xe5, 0x3a, 0x4d, 0xc2,
- 0xaa, 0x70, 0xf7, 0x21, 0x74, 0x4f, 0x8b, 0x19, 0xcc, 0x0a, 0x9d, 0xc4,
- 0x80, 0xee, 0xa1, 0xae, 0x91, 0x9e, 0xa1, 0x78, 0xb4, 0x48, 0xf5, 0x28,
- 0x4c, 0x1f, 0x13, 0xe3, 0x91, 0x13, 0x85, 0xe5, 0xf1, 0x06, 0x1e, 0x3f,
- 0x47, 0xa6, 0x4a, 0x4d, 0xb6, 0x6a, 0xa9, 0x97, 0x41, 0x23, 0x2c, 0x2b,
- 0xb9, 0x9e, 0xf4, 0x95, 0x38, 0xaa, 0xac, 0xa8, 0x9f, 0x6f, 0x63, 0x21,
- 0x48, 0xfd, 0x7d, 0x89, 0x1f, 0x9f, 0xaf, 0x2d, 0x30, 0x35, 0xf4, 0x55,
- 0xa6, 0xa2, 0x8b, 0x84, 0x11, 0x6d, 0x01, 0x98, 0xc7, 0xb9, 0xfe, 0xaa,
- 0x40, 0x6f, 0xb2, 0xad, 0x45, 0x0a, 0x12, 0x0a, 0x04, 0xf0, 0x78, 0xd9,
- 0x86, 0x3f, 0xbd, 0x65, 0x05, 0x94, 0xd0, 0xf4, 0xee, 0x60, 0xb7, 0x67,
- 0xba, 0x95, 0x4a, 0x71, 0x26, 0x21, 0xf3, 0x27, 0xb1, 0x8b, 0x18, 0xe3,
- 0xae, 0xeb, 0xd6, 0xb1, 0x0b, 0x09, 0xec, 0x51, 0xb1, 0x31, 0x2c, 0x22,
- 0xc6, 0xc0, 0x5e, 0x4e, 0x28, 0xe7, 0x84, 0xfd, 0x06, 0x15, 0xed, 0xf4,
- 0x9f, 0xbe, 0x78, 0x51, 0xb9, 0xd7, 0x43, 0x25, 0xf8, 0xd9, 0xce, 0x8e,
- 0xc0, 0x18, 0xd4, 0x5f, 0xa3, 0x2f, 0xfa, 0x2f, 0xf0, 0x62, 0xf5, 0x35,
- 0x49, 0x73, 0x5f, 0xff, 0x5e, 0x9f, 0xbf, 0x69, 0xe9, 0x0e, 0x16, 0x9c,
- 0xb5, 0x6f, 0xbd, 0xe0, 0xee, 0x5a, 0xde, 0xc2, 0xc3, 0xb2, 0x8e, 0xd9,
- 0xd5, 0x15, 0x97, 0xe7, 0xe4, 0x27, 0x05, 0xe8, 0x34, 0xcb, 0xef, 0xe3,
- 0x7c, 0xd2, 0x9c, 0xee, 0x4e, 0xaf, 0xbf, 0xbb, 0x6e, 0xba, 0xae, 0x98,
- 0x16, 0xb6, 0x93, 0x35, 0xa1, 0xcd, 0x3f, 0x6e, 0x6d, 0x7e, 0xbd, 0xd5,
- 0x36, 0xfb, 0x4f, 0x77, 0x76, 0x7a, 0xcf, 0xf9, 0xe7, 0x8b, 0x17, 0xed,
- 0x47, 0xad, 0xd2, 0xc7, 0x13, 0x9b, 0x5a, 0x65, 0xb4, 0xd4, 0x4e, 0x4b,
- 0xeb, 0xbb, 0xd4, 0xea, 0xee, 0x8b, 0x17, 0x3d, 0xee, 0xe5, 0xd9, 0x47,
- 0xb5, 0x5e, 0xde, 0x67, 0xde, 0x74, 0xce, 0xaf, 0x7b, 0x72, 0x2c, 0x6a,
- 0x33, 0xa0, 0x3f, 0xa3, 0xe8, 0x95, 0x40, 0x3b, 0x44, 0x41, 0x66, 0x85,
- 0x77, 0xbb, 0x84, 0xf0, 0x54, 0x08, 0x68, 0x58, 0x20, 0xdb, 0x00, 0x9a,
- 0xa2, 0xa8, 0x1f, 0xb1, 0xf7, 0x2f, 0x98, 0x3f, 0xde, 0xc3, 0x86, 0x9e,
- 0x89, 0x2b, 0xec, 0x9a, 0x61, 0x25, 0x2c, 0x17, 0xa1, 0x88, 0x36, 0x89,
- 0x5c, 0xb6, 0x60, 0x0b, 0xb8, 0x8b, 0xa7, 0xa9, 0xa5, 0xab, 0x46, 0x5d,
- 0x18, 0xb0, 0x24, 0xf5, 0x98, 0x7e, 0xcf, 0x16, 0xdd, 0x48, 0xaa, 0xdb,
- 0x3b, 0x4d, 0xc4, 0xbc, 0x52, 0xf2, 0x64, 0x5f, 0x9e, 0x91, 0x83, 0x06,
- 0x75, 0xee, 0x41, 0x61, 0x97, 0xd8, 0x3b, 0x54, 0xeb, 0x35, 0x72, 0x00,
- 0x10, 0x1e, 0xb6, 0x50, 0xf0, 0xfe, 0x60, 0xae, 0xf2, 0xd3, 0xec, 0x16,
- 0x01, 0xcc, 0x8f, 0x39, 0x0c, 0xe6, 0x81, 0x37, 0x70, 0x92, 0x18, 0x94,
- 0x64, 0xad, 0x2c, 0x82, 0x7b, 0x5f, 0xec, 0x31, 0x4b, 0x51, 0x44, 0xfd,
- 0x21, 0xab, 0x54, 0x99, 0x15, 0x4c, 0x43, 0xd6, 0x4f, 0xef, 0x63, 0x2b,
- 0xa0, 0x8a, 0x08, 0x40, 0xe3, 0x00, 0x0e, 0x4d, 0x4e, 0x93, 0x43, 0x34,
- 0x43, 0xce, 0x27, 0x7c, 0x1a, 0x6c, 0xa7, 0x04, 0x8d, 0x4f, 0x80, 0x9d,
- 0xaa, 0xa9, 0x44, 0x6c, 0xfb, 0x17, 0xe4, 0xc4, 0xd0, 0x1d, 0x86, 0xbc,
- 0xa1, 0xd8, 0x5b, 0xe8, 0x04, 0xee, 0x66, 0xa3, 0xe6, 0x02, 0xe3, 0xa7,
- 0x3c, 0x10, 0x85, 0xab, 0x54, 0xe7, 0x66, 0x01, 0x76, 0xe4, 0xaa, 0x5d,
- 0xca, 0xe2, 0x1b, 0xd0, 0x87, 0xd6, 0xc4, 0xb4, 0x9c, 0x61, 0xc1, 0xe1,
- 0x41, 0x42, 0x7b, 0x65, 0xc7, 0x68, 0xaf, 0x1c, 0x13, 0xa4, 0x4d, 0x8b,
- 0x36, 0x03, 0x88, 0x75, 0xd0, 0x56, 0xa0, 0xf3, 0x1b, 0x66, 0x5c, 0x36,
- 0x63, 0xc0, 0xdb, 0xc9, 0xd6, 0x40, 0x06, 0x00, 0xa3, 0xad, 0xec, 0x04,
- 0x43, 0x08, 0x56, 0xb6, 0x94, 0x0b, 0x0f, 0xa3, 0x1c, 0x36, 0x3f, 0x69,
- 0x97, 0xf3, 0xf0, 0xe4, 0x7f, 0x1e, 0x0f, 0x7e, 0x0d, 0x6b, 0x72, 0x3d,
- 0xbc, 0x2e, 0x8f, 0xef, 0xcd, 0xbb, 0x29, 0x31, 0x86, 0x52, 0xd3, 0x4e,
- 0xa2, 0x98, 0xe3, 0xe9, 0xd4, 0x57, 0xf3, 0x85, 0xdf, 0x8f, 0x84, 0xfd,
- 0xcc, 0x10, 0x71, 0xad, 0x4e, 0x6f, 0xb6, 0x16, 0x42, 0x15, 0x15, 0xda,
- 0x51, 0xa5, 0x32, 0x34, 0x2c, 0xbb, 0xc4, 0xf6, 0x19, 0xdc, 0x2f, 0x7c,
- 0x27, 0x32, 0x29, 0x2e, 0xe7, 0xa8, 0x7e, 0x4d, 0x63, 0xa8, 0xcb, 0x33,
- 0xf1, 0x7d, 0x03, 0x71, 0x36, 0x8c, 0x8b, 0xb9, 0xf0, 0x61, 0x9b, 0x3c,
- 0xf3, 0x56, 0xcf, 0x6d, 0xa5, 0xc0, 0x7b, 0x58, 0xd8, 0xdd, 0xec, 0x06,
- 0x81, 0x71, 0x1c, 0xc4, 0x8f, 0x80, 0xe0, 0x36, 0x73, 0x14, 0xaf, 0x6d,
- 0x19, 0xcf, 0x16, 0x2d, 0x21, 0xbd, 0x92, 0x7e, 0x64, 0x48, 0x10, 0xac,
- 0x1c, 0x99, 0xa1, 0x56, 0x3b, 0x6b, 0x36, 0x17, 0x44, 0x1a, 0x0b, 0xe5,
- 0xd2, 0x8b, 0x70, 0x44, 0xb8, 0x7e, 0xaa, 0x01, 0xb2, 0x2c, 0x8b, 0x01,
- 0x18, 0xb1, 0x25, 0x1b, 0x21, 0xd6, 0x95, 0x4f, 0x81, 0xcb, 0x96, 0xe4,
- 0xb9, 0xd4, 0xf8, 0x10, 0xe9, 0x3e, 0xd1, 0x08, 0xa7, 0x2a, 0x78, 0xbd,
- 0x55, 0xa5, 0x8b, 0xd7, 0xec, 0xa0, 0x47, 0x1e, 0x93, 0xae, 0xb1, 0x7e,
- 0xfe, 0x16, 0x96, 0x70, 0x5f, 0xb3, 0xdd, 0x69, 0x91, 0xe7, 0x68, 0xb9,
- 0x18, 0x34, 0x01, 0x1b, 0x4b, 0x5f, 0x27, 0x4c, 0xdf, 0xa7, 0xee, 0x77,
- 0x42, 0x57, 0x21, 0x18, 0x05, 0xfa, 0xe1, 0xc1, 0x29, 0x42, 0x7d, 0x5a,
- 0xb4, 0x02, 0x9c, 0xc3, 0x70, 0xcc, 0x16, 0x50, 0x37, 0x5f, 0x99, 0xae,
- 0xd8, 0xf8, 0x25, 0x5b, 0x6b, 0x9f, 0x2b, 0xce, 0x08, 0x78, 0x4b, 0x2f,
- 0x80, 0xe8, 0x7c, 0xfa, 0xf0, 0xd0, 0x50, 0x4c, 0x02, 0xa8, 0x40, 0x29,
- 0xb0, 0x22, 0xc4, 0xfe, 0xec, 0xe1, 0xa1, 0xfa, 0xe5, 0x63, 0x08, 0x70,
- 0xd8, 0xef, 0x51, 0x26, 0x21, 0xe4, 0xb2, 0x5a, 0x71, 0xcb, 0x3a, 0xca,
- 0xe5, 0x7c, 0x1f, 0xa7, 0x65, 0x4b, 0x7e, 0x9c, 0x4a, 0x1c, 0xae, 0x14,
- 0x80, 0xc5, 0x32, 0x73, 0x76, 0xd1, 0x0d, 0xb1, 0x02, 0x41, 0x7c, 0x93,
- 0x05, 0xb2, 0x06, 0xad, 0x2e, 0x43, 0xcb, 0x3a, 0x71, 0x2f, 0xb2, 0xec,
- 0x29, 0xa0, 0xd5, 0xca, 0x74, 0xca, 0xaf, 0x01, 0x68, 0x8c, 0x5a, 0xd8,
- 0xa5, 0xe5, 0x4f, 0xe7, 0xcb, 0x32, 0x29, 0xda, 0x4a, 0xea, 0xb4, 0x2d,
- 0xfb, 0x14, 0xa0, 0x08, 0x12, 0x0e, 0x52, 0x2f, 0x5a, 0xa2, 0xe3, 0x92,
- 0xb4, 0x52, 0xf5, 0x18, 0x19, 0xc9, 0xf6, 0xf1, 0x6a, 0x4b, 0xc4, 0x74,
- 0xe4, 0x62, 0xa5, 0xf5, 0x68, 0x26, 0x0f, 0xb4, 0xda, 0x02, 0x53, 0x18,
- 0xc1, 0xc3, 0x4b, 0xd2, 0x05, 0xdf, 0x36, 0xd7, 0x59, 0x4e, 0x9b, 0x3a,
- 0x53, 0x39, 0x18, 0xd7, 0x4f, 0x5d, 0x1a, 0xd3, 0xae, 0x1c, 0xa0, 0x11,
- 0xa3, 0xa5, 0x3b, 0x20, 0xc0, 0x32, 0x2b, 0x95, 0x31, 0x2a, 0xe6, 0x08,
- 0xc2, 0xe1, 0x33, 0x31, 0xda, 0x62, 0xdc, 0x8f, 0x85, 0x1e, 0xee, 0x0d,
- 0x9e, 0x6c, 0x7d, 0x10, 0x5f, 0x3b, 0x10, 0xf6, 0x3d, 0x3e, 0xfb, 0xfa,
- 0x02, 0x71, 0x8d, 0xc5, 0x1d, 0xa7, 0x5a, 0x1e, 0xd8, 0x4a, 0xc4, 0xd5,
- 0xce, 0xbd, 0x2c, 0xe2, 0x23, 0x38, 0x4d, 0x56, 0x75, 0xa5, 0x98, 0x26,
- 0xc9, 0x42, 0xc6, 0xa6, 0xf8, 0x87, 0x7a, 0x54, 0xdd, 0x49, 0x45, 0x28,
- 0xbb, 0x12, 0xa9, 0xde, 0xb7, 0xeb, 0x38, 0x80, 0x46, 0xa1, 0xb3, 0x49,
- 0xdb, 0xca, 0xf7, 0xb4, 0x73, 0x9a, 0x4d, 0x11, 0x57, 0x2c, 0x2c, 0x7f,
- 0x4d, 0x3d, 0x0f, 0xdb, 0x52, 0x29, 0x89, 0x68, 0xdb, 0xea, 0x88, 0x4a,
- 0x37, 0xa3, 0x56, 0xdf, 0xaf, 0x89, 0x8d, 0x8d, 0x7b, 0x5a, 0xae, 0xa6,
- 0x44, 0xa0, 0x81, 0x51, 0xe6, 0x4f, 0x66, 0x04, 0x9f, 0xad, 0xc2, 0x76,
- 0x0c, 0x1c, 0xef, 0x11, 0xd0, 0x77, 0x2c, 0x61, 0x03, 0x85, 0xe6, 0xe7,
- 0x24, 0xcf, 0x02, 0x54, 0x50, 0xac, 0xa2, 0x49, 0x8f, 0x2e, 0x82, 0xc8,
- 0x51, 0x23, 0x8f, 0x7d, 0xe0, 0x49, 0xa4, 0x09, 0x24, 0xfd, 0xef, 0xa2,
- 0x18, 0x2d, 0xf3, 0x50, 0x3c, 0x4a, 0x35, 0x1f, 0x04, 0xf8, 0xba, 0xd4,
- 0xc3, 0x2b, 0xd9, 0x1b, 0x7a, 0x65, 0xb0, 0x44, 0x1f, 0x3a, 0x65, 0x22,
- 0xab, 0x67, 0xe2, 0xe9, 0x42, 0x6f, 0xcc, 0x86, 0x02, 0xa7, 0xfc, 0xc9,
- 0xf8, 0x08, 0x92, 0x72, 0x62, 0x96, 0x50, 0xb8, 0xda, 0xd6, 0x26, 0x67,
- 0xd9, 0xe9, 0xd0, 0xb6, 0xf8, 0x63, 0xa0, 0xaa, 0xc4, 0xbe, 0x4e, 0x66,
- 0xde, 0xc8, 0x11, 0x01, 0x8e, 0x92, 0xf0, 0xac, 0x49, 0x88, 0x84, 0xa6,
- 0x40, 0x68, 0x6f, 0x33, 0x8e, 0x1c, 0xd1, 0x2b, 0xf7, 0xca, 0xb7, 0xa3,
- 0x6f, 0x36, 0xc1, 0x92, 0xd0, 0x8e, 0x66, 0x2e, 0x71, 0x13, 0xbd, 0x0a,
- 0x4a, 0xa7, 0x0d, 0x1b, 0x31, 0x4f, 0xf0, 0x2b, 0x49, 0x9c, 0x88, 0x5c,
- 0x94, 0x2d, 0x5e, 0x00, 0xb0, 0x76, 0xf6, 0x1e, 0xc1, 0xf9, 0xc6, 0xd3,
- 0x69, 0x41, 0x6d, 0xc3, 0x06, 0x50, 0x1b, 0x29, 0xe3, 0xc1, 0x5c, 0x1a,
- 0x63, 0x6a, 0x46, 0x63, 0x8b, 0x43, 0xd9, 0x06, 0xd3, 0x05, 0x90, 0x64,
- 0x00, 0xbf, 0xd6, 0x53, 0xc9, 0xb1, 0x82, 0xdc, 0x36, 0x10, 0x40, 0xe4,
- 0xf5, 0xf5, 0x8a, 0x89, 0x11, 0x82, 0xc0, 0x4b, 0x91, 0xc4, 0x0d, 0xd0,
- 0xcc, 0x31, 0xec, 0x8f, 0x61, 0x75, 0x35, 0x71, 0x73, 0x1d, 0xd5, 0xea,
- 0xb2, 0xc6, 0x48, 0x12, 0xff, 0x67, 0x09, 0xb7, 0x60, 0x80, 0x74, 0xae,
- 0x32, 0x55, 0xdf, 0xbc, 0x21, 0x3e, 0x14, 0x2b, 0xc2, 0xdf, 0x96, 0x29,
- 0x93, 0xa8, 0x44, 0x14, 0x1d, 0x01, 0x6b, 0x96, 0xa1, 0x72, 0xa5, 0xc8,
- 0x02, 0x87, 0x6f, 0xa8, 0xbf, 0x3b, 0x77, 0x92, 0x41, 0x03, 0x73, 0x0f,
- 0x70, 0x11, 0x03, 0x83, 0x46, 0x03, 0xae, 0xd7, 0x6c, 0x19, 0x02, 0xc4,
- 0xf4, 0x87, 0x3c, 0x12, 0x6a, 0xb5, 0x8f, 0x36, 0xda, 0x71, 0x63, 0x0c,
- 0x99, 0xac, 0x2f, 0x58, 0xfa, 0x01, 0xcc, 0x1a, 0x0f, 0x07, 0x72, 0x87,
- 0x8c, 0xc0, 0x10, 0x2a, 0x38, 0xe2, 0xa0, 0x05, 0x2f, 0x97, 0x39, 0x6c,
- 0x25, 0x92, 0x99, 0x8b, 0xa5, 0x16, 0x4f, 0xa3, 0x97, 0x1f, 0x88, 0x19,
- 0x55, 0xec, 0x76, 0x35, 0x93, 0x0c, 0xcf, 0x0e, 0xbf, 0x19, 0x3e, 0xfd,
- 0x60, 0xb0, 0xe8, 0xfa, 0x12, 0x76, 0x8f, 0x86, 0x8b, 0x3e, 0x82, 0x19,
- 0xdd, 0x92, 0xa4, 0xc5, 0xe8, 0xf9, 0x79, 0x3a, 0x49, 0x04, 0x32, 0x96,
- 0xe1, 0xfd, 0xd2, 0x6c, 0xe9, 0x50, 0x29, 0x22, 0x1f, 0x35, 0xd9, 0x13,
- 0xd7, 0x24, 0x43, 0x89, 0xd7, 0x83, 0xa2, 0x89, 0xfd, 0xd0, 0x9e, 0x08,
- 0x48, 0x4d, 0xf2, 0x30, 0x9e, 0x2e, 0x8b, 0xf4, 0xee, 0x37, 0xad, 0x56,
- 0x2a, 0xab, 0x1e, 0xff, 0x53, 0xcb, 0x1e, 0x7f, 0xdc, 0xba, 0x37, 0x98,
- 0xc8, 0x2f, 0x5c, 0xf7, 0xb6, 0x4a, 0xb5, 0xff, 0x77, 0xac, 0xfb, 0xb3,
- 0xbe, 0x43, 0x48, 0x78, 0xf9, 0x4b, 0x43, 0xa5, 0xb1, 0x05, 0xcf, 0x34,
- 0xb4, 0x74, 0x13, 0xd6, 0xaf, 0x24, 0x8c, 0x36, 0x65, 0x3c, 0xf6, 0xe9,
- 0x5d, 0xb2, 0x06, 0xa8, 0x01, 0x26, 0xe0, 0xad, 0x0f, 0x9e, 0x18, 0xb7,
- 0x53, 0xe2, 0x97, 0x96, 0xbd, 0xaa, 0xaf, 0xdd, 0x3f, 0xb1, 0x73, 0x4e,
- 0x22, 0xf0, 0x7b, 0xd7, 0xba, 0x79, 0xe1, 0xde, 0xc9, 0xa5, 0xf9, 0xbf,
- 0x6b, 0xe7, 0x6a, 0xd2, 0x72, 0x75, 0x16, 0x8c, 0xe8, 0xe0, 0xc6, 0x0e,
- 0xfc, 0xa2, 0x9c, 0xee, 0x45, 0xfe, 0xa5, 0x82, 0x46, 0xa0, 0x01, 0x44,
- 0x4d, 0x68, 0x1e, 0x25, 0x87, 0x4a, 0x19, 0x3a, 0xab, 0x6e, 0x62, 0x55,
- 0x51, 0xb6, 0x1a, 0xc4, 0xf3, 0xcf, 0x9c, 0x59, 0x23, 0x18, 0x8e, 0x0c,
- 0x04, 0x54, 0x86, 0x91, 0x89, 0xd5, 0x44, 0xe3, 0x9b, 0xac, 0xc5, 0x8d,
- 0x07, 0xbd, 0x1d, 0xb9, 0xcc, 0x27, 0x57, 0xd1, 0xc7, 0x91, 0x4c, 0xe5,
- 0x70, 0xb7, 0xe0, 0x94, 0xad, 0x8b, 0xc8, 0xff, 0x3f, 0xf2, 0x60, 0xb7,
- 0x91, 0x87, 0x05, 0xc5, 0x7f, 0x34, 0x71, 0xb8, 0x50, 0xb6, 0x7f, 0x89,
- 0x3c, 0xda, 0xce, 0xd9, 0xa6, 0xc6, 0xe7, 0xf1, 0x32, 0x19, 0xcf, 0xdf,
- 0xf2, 0x25, 0xa1, 0x00, 0x1d, 0x86, 0x5b, 0xfd, 0xe4, 0xfc, 0xdb, 0xe7,
- 0x70, 0x66, 0x0c, 0x9b, 0x99, 0xff, 0xa7, 0x47, 0x07, 0xe7, 0x2d, 0x2c,
- 0xec, 0x9a, 0x6e, 0xf9, 0x45, 0xda, 0x67, 0xfb, 0x27, 0x0b, 0xa6, 0x2f,
- 0xf5, 0x17, 0x26, 0xa2, 0x36, 0xd1, 0xdb, 0xf4, 0x0b, 0x7b, 0x1e, 0xdc,
- 0x4f, 0x93, 0x86, 0x31, 0x4b, 0x35, 0x5f, 0xb3, 0x58, 0x3e, 0x9e, 0x4d,
- 0xb6, 0xe5, 0xcf, 0xfe, 0xd5, 0xdf, 0x26, 0xf3, 0xc1, 0x23, 0xb4, 0x12,
- 0x57, 0x82, 0xd7, 0x15, 0x26, 0xbf, 0xa5, 0xc6, 0xb0, 0x2b, 0xde, 0x53,
- 0x37, 0xcd, 0xbb, 0x53, 0x15, 0x69, 0x2a, 0x0e, 0x80, 0x89, 0xd6, 0xcd,
- 0x92, 0x3f, 0x9d, 0x20, 0xfa, 0x91, 0xcd, 0xc3, 0xcd, 0x84, 0x07, 0x7c,
- 0xbf, 0xed, 0x5b, 0xfa, 0xd7, 0x7a, 0xb3, 0xf6, 0x38, 0xec, 0xb4, 0xad,
- 0x39, 0x19, 0x85, 0xc8, 0xca, 0xb5, 0x27, 0x45, 0xeb, 0x97, 0xda, 0x5c,
- 0x28, 0xe1, 0xe6, 0xaf, 0x08, 0xf9, 0xbe, 0x25, 0xe7, 0x52, 0x70, 0x35,
- 0xcb, 0xb1, 0x65, 0xa6, 0xa4, 0xf3, 0xf1, 0x82, 0x4e, 0x41, 0x5b, 0xa2,
- 0xf5, 0xe3, 0x20, 0x3a, 0xd5, 0xd9, 0xcc, 0x93, 0x7a, 0xbc, 0xe5, 0x41,
- 0x51, 0x41, 0x0b, 0x90, 0xe7, 0x22, 0xcb, 0xb8, 0xc2, 0xb6, 0x22, 0x04,
- 0x4a, 0xeb, 0x7b, 0x20, 0x52, 0x05, 0x37, 0x91, 0x3c, 0xd2, 0x48, 0x22,
- 0x2f, 0x1d, 0xcc, 0x52, 0x94, 0x5f, 0x8d, 0x77, 0x5f, 0x3c, 0xdf, 0x65,
- 0xa9, 0x77, 0x55, 0x38, 0x18, 0x67, 0x34, 0xf3, 0x74, 0xf0, 0x64, 0xfb,
- 0xe9, 0xe0, 0x69, 0xe4, 0xf1, 0x67, 0x47, 0x49, 0x5b, 0x6d, 0x75, 0xee,
- 0x96, 0x79, 0xd9, 0x48, 0x8f, 0xdc, 0xdb, 0xe3, 0x43, 0x2b, 0x8d, 0xc7,
- 0x79, 0x42, 0x35, 0xec, 0x2d, 0x2d, 0xdd, 0xc6, 0x8b, 0x37, 0x10, 0x52,
- 0x5f, 0x03, 0x94, 0xd8, 0xb2, 0x2c, 0x91, 0x91, 0xaf, 0x84, 0xad, 0xcc,
- 0x75, 0xce, 0xb4, 0xae, 0xc4, 0xb2, 0x6e, 0xb4, 0xc6, 0x4b, 0x4b, 0x24,
- 0x5e, 0x7d, 0x6d, 0x82, 0x95, 0x1b, 0x7c, 0x60, 0x67, 0xca, 0x09, 0xf1,
- 0xd6, 0x76, 0xa7, 0xf1, 0x85, 0xab, 0xe8, 0x40, 0x0c, 0x03, 0x35, 0x76,
- 0x0b, 0x45, 0x99, 0xe0, 0x57, 0x2c, 0x5e, 0xac, 0x12, 0x49, 0x64, 0xb6,
- 0xee, 0xc7, 0x81, 0xd1, 0xe5, 0xac, 0x0b, 0x64, 0x11, 0x40, 0x84, 0xbb,
- 0xfd, 0xae, 0x5d, 0x15, 0x66, 0x2c, 0x0f, 0x2a, 0xe5, 0x19, 0xac, 0xc5,
- 0xfa, 0x43, 0xaf, 0xc8, 0xe3, 0x88, 0x6a, 0x11, 0xbb, 0x0e, 0x3b, 0x49,
- 0x1c, 0xd6, 0x0b, 0x71, 0x94, 0x1b, 0x66, 0x7a, 0x6a, 0xc5, 0x99, 0x24,
- 0xe3, 0xa6, 0x8e, 0xe5, 0xb2, 0x99, 0xe9, 0xf9, 0x71, 0xbc, 0x88, 0x47,
- 0xe9, 0x34, 0x2d, 0xd3, 0x96, 0xf0, 0xbc, 0x5f, 0x51, 0xf6, 0x2b, 0xc7,
- 0x8b, 0xfe, 0x3c, 0x6b, 0xb3, 0x11, 0x5e, 0x32, 0xb6, 0x7b, 0x80, 0xe8,
- 0xf7, 0xfe, 0xed, 0xd9, 0xd1, 0xf1, 0xe9, 0xc1, 0x0f, 0xe6, 0xf5, 0x76,
- 0xa1, 0xc7, 0x28, 0x90, 0x97, 0xc4, 0xc5, 0xea, 0x7d, 0x91, 0x94, 0xf4,
- 0xe5, 0xe6, 0x93, 0x2d, 0xf6, 0x47, 0xd5, 0xaf, 0x59, 0x56, 0xbf, 0x42,
- 0xb8, 0x67, 0x35, 0xd8, 0xfa, 0x79, 0xd4, 0xc8, 0x64, 0xb7, 0xe2, 0x68,
- 0x28, 0xe9, 0x7e, 0x2d, 0x93, 0xe9, 0x3c, 0x29, 0x15, 0xdd, 0x37, 0x7a,
- 0x79, 0x76, 0x7e, 0xf9, 0xea, 0x2e, 0x9e, 0xd6, 0x49, 0x86, 0xd1, 0x12,
- 0xb4, 0x45, 0xab, 0xb6, 0x12, 0xc9, 0x9b, 0x41, 0x08, 0xe3, 0xd0, 0xc5,
- 0x0a, 0xda, 0x93, 0x74, 0x3b, 0x37, 0x62, 0x04, 0x2f, 0x2f, 0x7f, 0x38,
- 0x3f, 0x7e, 0xf5, 0x92, 0x55, 0xe6, 0xcf, 0x59, 0xd1, 0x57, 0x53, 0x09,
- 0x34, 0x68, 0x5e, 0xe7, 0xd5, 0xa2, 0x79, 0x7d, 0x7f, 0x7f, 0x74, 0x32,
- 0x3c, 0x3f, 0x3d, 0x3b, 0x7c, 0xf5, 0xf2, 0x7b, 0x36, 0xb0, 0x32, 0x6a,
- 0x78, 0xf0, 0xae, 0xfb, 0xcc, 0xc5, 0x41, 0x35, 0xe1, 0x0e, 0x8f, 0xbf,
- 0x7b, 0x7f, 0xfc, 0xf6, 0xdb, 0x57, 0x2f, 0xef, 0xe2, 0xbc, 0xc7, 0xf3,
- 0x93, 0xb7, 0x39, 0xa1, 0xb9, 0x05, 0x5e, 0xba, 0xb2, 0x97, 0x9c, 0x7b,
- 0x30, 0x9a, 0xde, 0x4a, 0xa1, 0x01, 0x80, 0xfb, 0x37, 0x02, 0x10, 0x2e,
- 0x11, 0xa7, 0xcd, 0x46, 0x0b, 0xfe, 0x2d, 0xfa, 0xf2, 0xf4, 0x1b, 0x76,
- 0x6f, 0xb9, 0xbb, 0xd9, 0xca, 0xac, 0x7f, 0xfe, 0x6c, 0x77, 0x6f, 0x2b,
- 0xc0, 0x0d, 0x67, 0x27, 0x39, 0x8d, 0xf8, 0xb6, 0x61, 0x34, 0xf9, 0xd9,
- 0x0a, 0x35, 0x79, 0x5c, 0x70, 0x2d, 0x97, 0xca, 0x37, 0x00, 0xce, 0x01,
- 0x9b, 0xad, 0xb8, 0x5a, 0x14, 0x42, 0x94, 0x38, 0x32, 0x83, 0xbe, 0x64,
- 0x04, 0xf0, 0xbc, 0x11, 0x84, 0x11, 0xcb, 0xa0, 0x2c, 0xfe, 0xd3, 0x63,
- 0x24, 0x46, 0x34, 0x1c, 0xf5, 0x7b, 0xb7, 0x13, 0xf2, 0xaf, 0x7d, 0x30,
- 0x5a, 0x6e, 0x94, 0x5a, 0x59, 0x87, 0x4b, 0x86, 0xa0, 0x5d, 0xb0, 0xeb,
- 0xf2, 0x91, 0x98, 0x17, 0xac, 0x9f, 0x47, 0x73, 0xac, 0x32, 0xab, 0xc0,
- 0xff, 0xa4, 0x64, 0x6a, 0x0e, 0x2d, 0x46, 0x2a, 0x59, 0xc3, 0xbe, 0x5c,
- 0xd9, 0x5c, 0x8f, 0x6f, 0x63, 0x25, 0x70, 0x5d, 0xc3, 0x00, 0x93, 0xf1,
- 0x58, 0xe9, 0x9a, 0xe6, 0xf1, 0xa8, 0x03, 0x4c, 0xb2, 0xee, 0xe0, 0xcc,
- 0x77, 0x95, 0x05, 0x1c, 0xd6, 0x09, 0x7c, 0x29, 0x52, 0xf8, 0x78, 0xdb,
- 0x18, 0x02, 0xaf, 0xdf, 0xc6, 0x9a, 0x40, 0xb8, 0x48, 0xdc, 0x30, 0x90,
- 0x73, 0x39, 0x04, 0x09, 0xf3, 0xc3, 0x78, 0x2c, 0x0b, 0xb1, 0x3a, 0x0b,
- 0x09, 0x75, 0xab, 0xdb, 0x78, 0x02, 0x82, 0xba, 0xe1, 0xf8, 0xa4, 0xd2,
- 0x95, 0x1d, 0xc5, 0xde, 0x55, 0x23, 0xd0, 0x8c, 0x48, 0x03, 0x8f, 0x60,
- 0x5d, 0x90, 0xf0, 0x30, 0x3d, 0x9a, 0x94, 0x22, 0x46, 0x67, 0xd6, 0x32,
- 0x38, 0x9c, 0x79, 0xba, 0x0a, 0xc2, 0x16, 0x64, 0x63, 0x1f, 0xab, 0xa5,
- 0xc0, 0x26, 0xa3, 0x81, 0xa3, 0x37, 0x23, 0x34, 0x48, 0x09, 0xec, 0xbf,
- 0xda, 0x1c, 0x6e, 0x29, 0x19, 0x0b, 0xb9, 0x9d, 0xbf, 0xf3, 0x49, 0x3e,
- 0x6d, 0x25, 0x36, 0xd6, 0x11, 0xa0, 0x53, 0xb7, 0xfd, 0x42, 0x75, 0xfa,
- 0x9d, 0x3a, 0x4e, 0x93, 0x1d, 0x37, 0x94, 0x74, 0x0f, 0x93, 0x88, 0xe2,
- 0x56, 0xb0, 0x21, 0x89, 0xb7, 0x8d, 0x0e, 0xa6, 0xf0, 0x2e, 0x13, 0x6f,
- 0x5c, 0xf5, 0xea, 0x7d, 0x0c, 0x3a, 0x11, 0x77, 0xe2, 0xac, 0xa2, 0x62,
- 0x3f, 0xdd, 0x6a, 0x00, 0xa7, 0xad, 0xb4, 0xbc, 0x9d, 0xb7, 0x05, 0x84,
- 0xf9, 0xb0, 0x3c, 0xd4, 0xda, 0xd0, 0x10, 0x60, 0x01, 0x56, 0xd2, 0xcc,
- 0x07, 0x87, 0xdc, 0x80, 0x54, 0x5c, 0x20, 0xd3, 0x23, 0xd5, 0x05, 0xae,
- 0x2c, 0x17, 0xc2, 0x24, 0x38, 0x51, 0x86, 0x78, 0x2a, 0x6d, 0x42, 0x08,
- 0x03, 0xe8, 0x58, 0x1d, 0xab, 0x00, 0x9b, 0xd8, 0xb2, 0xa8, 0x56, 0xab,
- 0xca, 0x72, 0x0e, 0x98, 0x0d, 0xf4, 0x2f, 0x3d, 0xd0, 0x90, 0x56, 0x96,
- 0xaf, 0x27, 0xeb, 0x28, 0x7a, 0x65, 0xff, 0xb2, 0x51, 0xac, 0x88, 0x5f,
- 0x58, 0xc4, 0x69, 0x1e, 0x84, 0xd2, 0x20, 0x7c, 0x8d, 0xe7, 0x2e, 0x94,
- 0xa4, 0x81, 0x8f, 0x90, 0x7a, 0x07, 0x42, 0xda, 0xf0, 0x93, 0xac, 0xc5,
- 0xcd, 0xee, 0x5c, 0x4f, 0xb3, 0xd1, 0x88, 0x26, 0xd5, 0x31, 0x89, 0x94,
- 0x46, 0x18, 0xe7, 0xd7, 0x50, 0xd2, 0x7a, 0x06, 0xea, 0xe1, 0x0f, 0x2b,
- 0x00, 0xe1, 0xd0, 0xd7, 0xba, 0x48, 0x7f, 0x2d, 0x96, 0x92, 0x79, 0x94,
- 0x4f, 0xa0, 0xb5, 0x85, 0x85, 0xb7, 0xc4, 0xfd, 0x8d, 0xcf, 0x23, 0xeb,
- 0xbf, 0xce, 0xf1, 0xcb, 0x15, 0xc7, 0x4a, 0xba, 0xeb, 0x53, 0x99, 0x0f,
- 0x58, 0x8e, 0x22, 0x75, 0xa5, 0x2d, 0xc1, 0xf6, 0x3c, 0x61, 0x9a, 0x40,
- 0xe7, 0xef, 0x3c, 0x8a, 0xdd, 0x1e, 0xff, 0xbb, 0xf7, 0x8f, 0x8e, 0xc1,
- 0xb1, 0x31, 0x20, 0xa6, 0x0c, 0xbe, 0x64, 0x08, 0xac, 0xc2, 0x30, 0xe0,
- 0x5a, 0x20, 0xdf, 0xb8, 0x4e, 0xc9, 0xda, 0xd6, 0xd3, 0xd9, 0xf5, 0x8f,
- 0xbb, 0xfd, 0xdd, 0x9d, 0x9d, 0x9d, 0x9f, 0x06, 0x0b, 0x5e, 0xba, 0x2b,
- 0x34, 0x4f, 0xff, 0x0e, 0x16, 0xe9, 0x98, 0x43, 0x5e, 0x68, 0x33, 0xd3,
- 0x18, 0x45, 0xa3, 0xa5, 0xbf, 0xed, 0xf0, 0xfa, 0xcc, 0x39, 0x79, 0xa7,
- 0x95, 0x8f, 0x3b, 0xd0, 0x4d, 0x86, 0x20, 0x5f, 0xb2, 0x18, 0x27, 0x0f,
- 0x47, 0x93, 0xa5, 0x44, 0x23, 0x48, 0xb4, 0x86, 0xba, 0x89, 0x79, 0xb3,
- 0x89, 0x54, 0xb5, 0xde, 0x09, 0xdd, 0x78, 0xbd, 0xd6, 0xf2, 0x8c, 0xf8,
- 0x36, 0x29, 0xb8, 0x84, 0x28, 0x52, 0x74, 0x03, 0x88, 0xfa, 0x9e, 0x4b,
- 0x0c, 0xc0, 0x81, 0x55, 0xba, 0x97, 0x73, 0xdb, 0x44, 0x53, 0xe4, 0x63,
- 0x46, 0xd2, 0x27, 0x7f, 0x6d, 0x5c, 0xce, 0x81, 0x62, 0x1b, 0x86, 0xb6,
- 0x14, 0x6c, 0x6a, 0xc0, 0xb3, 0xb5, 0x29, 0xe8, 0xde, 0xd4, 0x11, 0x9a,
- 0x39, 0x10, 0xcc, 0xdf, 0xbf, 0x13, 0xdc, 0xc6, 0x11, 0x17, 0x59, 0x06,
- 0xf6, 0x15, 0xd6, 0xa1, 0xa1, 0xfc, 0x14, 0xe3, 0x34, 0xfd, 0x4d, 0xa5,
- 0x56, 0xf4, 0x8a, 0x6e, 0x1e, 0xdf, 0xb0, 0x58, 0xb6, 0x4b, 0x76, 0x2b,
- 0xdc, 0x2c, 0xbf, 0x5b, 0x62, 0xee, 0x70, 0xfb, 0xf5, 0x7f, 0xd0, 0x86,
- 0x71, 0x05, 0xa7, 0x04, 0xf5, 0x4e, 0x83, 0x8a, 0x16, 0x98, 0xaa, 0x28,
- 0x8a, 0xd3, 0x24, 0xe6, 0xa0, 0x62, 0x33, 0xd3, 0xdc, 0x24, 0x0f, 0x22,
- 0x30, 0x34, 0x61, 0x02, 0xc4, 0xa7, 0xcb, 0x5e, 0x13, 0xd5, 0xfb, 0x0e,
- 0x86, 0x87, 0x27, 0x27, 0x15, 0x85, 0x98, 0x17, 0x4f, 0x8a, 0xfd, 0xc2,
- 0xcd, 0x52, 0xcc, 0x68, 0x15, 0xd9, 0xc9, 0x83, 0xe1, 0x36, 0xe4, 0x14,
- 0x0e, 0x49, 0x43, 0xfa, 0x28, 0x83, 0xac, 0xc6, 0x45, 0x6a, 0x31, 0x80,
- 0xb1, 0xe4, 0x7e, 0x2d, 0xe7, 0x2c, 0x51, 0x70, 0x60, 0xcc, 0xcd, 0x92,
- 0x8e, 0x64, 0xf1, 0x91, 0xa6, 0xb7, 0x8f, 0xa5, 0xc7, 0xdf, 0x9e, 0xf4,
- 0x5a, 0x82, 0x9d, 0xce, 0x73, 0x8d, 0x29, 0x93, 0xd0, 0x97, 0x48, 0x22,
- 0x95, 0x18, 0x9a, 0x95, 0x6f, 0x0d, 0xa1, 0xc0, 0x0c, 0x15, 0x13, 0x30,
- 0x5a, 0x5c, 0x29, 0x56, 0xe4, 0xb4, 0x05, 0x69, 0x47, 0xf5, 0x84, 0xa2,
- 0x0e, 0x0e, 0xfc, 0xb4, 0x22, 0x85, 0x5a, 0x21, 0x84, 0xe8, 0x25, 0xff,
- 0xbb, 0x6f, 0x85, 0x08, 0x1e, 0xab, 0x2f, 0x86, 0xc7, 0x1b, 0x35, 0x82,
- 0x2a, 0x08, 0x86, 0x72, 0xdd, 0x3e, 0x8e, 0x58, 0x3b, 0x88, 0xce, 0xdc,
- 0xbe, 0xf8, 0xca, 0x47, 0x68, 0xb3, 0x5e, 0x86, 0xa5, 0x6d, 0x3b, 0xf8,
- 0xce, 0x42, 0xfa, 0xe1, 0x75, 0xaa, 0x84, 0xef, 0xc7, 0xb5, 0x69, 0xc6,
- 0x45, 0xb6, 0x47, 0xe6, 0xa2, 0x3d, 0xd3, 0x4d, 0x3c, 0xcd, 0xe6, 0x5b,
- 0xad, 0x4b, 0x85, 0xad, 0x22, 0x41, 0x93, 0x63, 0xc8, 0xc4, 0x7a, 0xe7,
- 0x2a, 0x1f, 0xad, 0xc5, 0xcd, 0x85, 0x5c, 0xcb, 0xb8, 0xe5, 0xe7, 0x27,
- 0x7d, 0x0d, 0x83, 0x54, 0x78, 0x61, 0xc9, 0x76, 0xe3, 0x79, 0x4c, 0xb2,
- 0x3a, 0xae, 0x4d, 0xdb, 0x42, 0xf8, 0x7c, 0x6a, 0x81, 0xc6, 0xac, 0x40,
- 0x5f, 0x2d, 0x17, 0xb5, 0xb9, 0x55, 0x0b, 0x46, 0xd4, 0x85, 0x4a, 0x24,
- 0x3e, 0x0b, 0xc6, 0x45, 0xa8, 0xec, 0x8d, 0x56, 0x12, 0x0c, 0xe9, 0xd2,
- 0x24, 0xd5, 0xa2, 0x20, 0xd7, 0x38, 0x56, 0xa6, 0x0d, 0xd6, 0x28, 0x20,
- 0xf9, 0x7d, 0xe2, 0x39, 0xcb, 0x68, 0xbf, 0xf3, 0x1b, 0x9e, 0x8c, 0x77,
- 0x66, 0x01, 0xff, 0xf5, 0x09, 0x52, 0xfd, 0x04, 0x1f, 0x20, 0xc8, 0xff,
- 0xb7, 0xd7, 0x7e, 0xaf, 0xdf, 0xfd, 0xb6, 0x7b, 0xdd, 0xe7, 0x79, 0xbf,
- 0x24, 0xa1, 0x6f, 0xdd, 0xbe, 0xc6, 0x10, 0x22, 0x39, 0xa0, 0x93, 0x71,
- 0x80, 0x1b, 0x98, 0x74, 0x50, 0xbb, 0xf8, 0xca, 0xb9, 0xa1, 0x25, 0x72,
- 0x71, 0x50, 0x4d, 0x74, 0x0c, 0x83, 0xc5, 0x30, 0x49, 0x9d, 0x1a, 0xdd,
- 0x2c, 0xb6, 0x24, 0x21, 0x21, 0x48, 0x5d, 0x7f, 0x5c, 0x9e, 0x71, 0x6a,
- 0x8a, 0x38, 0xbc, 0x2a, 0x09, 0xc6, 0x92, 0xfe, 0xca, 0x61, 0x21, 0x06,
- 0x20, 0x01, 0x11, 0xbd, 0x6d, 0x71, 0x79, 0x42, 0x1c, 0xe0, 0x2e, 0x46,
- 0xc1, 0x9e, 0x2f, 0x2a, 0x1f, 0x20, 0x44, 0x2b, 0x18, 0xc5, 0x07, 0x40,
- 0x6f, 0xd5, 0xe4, 0x14, 0xac, 0x67, 0x70, 0x8d, 0xb5, 0xd6, 0x8e, 0x53,
- 0xc3, 0x25, 0xaf, 0x25, 0x64, 0x14, 0x94, 0x34, 0xb2, 0xab, 0x64, 0xbb,
- 0x8c, 0xa7, 0xb7, 0x31, 0x4b, 0x24, 0x83, 0xe8, 0x8d, 0xac, 0xab, 0x2f,
- 0xed, 0xd7, 0x88, 0xff, 0x18, 0x2d, 0xaf, 0xaf, 0x51, 0x82, 0xe2, 0x40,
- 0x6e, 0xa0, 0xc2, 0x00, 0x22, 0x60, 0x98, 0xec, 0x7e, 0xde, 0xd5, 0x40,
- 0xce, 0x8e, 0x94, 0x49, 0x86, 0x38, 0xd4, 0x11, 0x71, 0xa4, 0x99, 0xe5,
- 0xc5, 0xf4, 0xdf, 0x8b, 0xba, 0x2f, 0xdb, 0x5f, 0x22, 0x05, 0x3d, 0x49,
- 0xef, 0x14, 0xeb, 0xdd, 0xa9, 0xff, 0xb4, 0x86, 0x37, 0x29, 0x5d, 0x68,
- 0xf3, 0x66, 0xf0, 0x96, 0x56, 0x8f, 0x81, 0x87, 0xa0, 0xa7, 0x05, 0xa5,
- 0xdb, 0x06, 0xf9, 0x47, 0xeb, 0x2f, 0x9e, 0x4c, 0x52, 0x2d, 0xc2, 0xc5,
- 0xc2, 0x58, 0x23, 0xb9, 0x5e, 0xd3, 0x9f, 0xb4, 0xff, 0xf6, 0xca, 0x22,
- 0x7a, 0x05, 0xa7, 0xc6, 0x2d, 0x44, 0x16, 0x02, 0xe5, 0x29, 0xde, 0x92,
- 0x15, 0x8c, 0xb6, 0x7a, 0x7c, 0xa6, 0x88, 0xd6, 0xa5, 0xc4, 0x4a, 0x05,
- 0x6a, 0x27, 0xfe, 0x40, 0xa8, 0x13, 0x4a, 0x54, 0x8b, 0x30, 0xd7, 0x40,
- 0x53, 0xd4, 0xec, 0x75, 0x57, 0xa3, 0x99, 0x3c, 0xfc, 0xa9, 0x29, 0x4a,
- 0x29, 0x42, 0x2c, 0xb5, 0xed, 0x70, 0x6b, 0xf2, 0x83, 0x5a, 0x99, 0xc8,
- 0xac, 0xaa, 0xbd, 0x26, 0x8a, 0x04, 0x12, 0xa5, 0x1c, 0x8c, 0x88, 0x93,
- 0x43, 0xaa, 0x42, 0xb4, 0xd9, 0xcc, 0xff, 0x59, 0x39, 0xac, 0xd2, 0xd8,
- 0x23, 0x82, 0x18, 0xc0, 0xdd, 0x86, 0x2e, 0xc8, 0x48, 0x50, 0x33, 0x2d,
- 0xec, 0x0f, 0x71, 0x45, 0xc1, 0xa9, 0x08, 0x40, 0xe2, 0x9b, 0xe5, 0x68,
- 0x20, 0x1c, 0x55, 0xca, 0x7a, 0x89, 0x41, 0x59, 0x74, 0x6b, 0xad, 0xff,
- 0x6c, 0x11, 0xe6, 0x86, 0xd8, 0x99, 0xc2, 0xa0, 0x55, 0x0c, 0x5a, 0x7c,
- 0x81, 0x16, 0x64, 0x27, 0x62, 0x99, 0xee, 0xa2, 0x26, 0xf5, 0xb0, 0x0a,
- 0x61, 0x4d, 0x70, 0xf0, 0x3d, 0xa8, 0xde, 0x45, 0xaf, 0x37, 0xa5, 0x69,
- 0xa9, 0xd0, 0x9c, 0x4f, 0x20, 0x40, 0xaf, 0x14, 0x24, 0x3f, 0x05, 0x34,
- 0xf9, 0xfc, 0xd6, 0x82, 0x96, 0x24, 0xdf, 0x20, 0x19, 0x2f, 0xcb, 0xaa,
- 0x1d, 0x37, 0x18, 0x93, 0xc6, 0x24, 0x63, 0x48, 0x9b, 0x38, 0x03, 0x0a,
- 0xbe, 0xd8, 0x39, 0x37, 0xec, 0xb2, 0xfd, 0xce, 0x96, 0xc9, 0xed, 0x50,
- 0x6b, 0x1c, 0xa8, 0x59, 0x9b, 0x48, 0x6e, 0x43, 0x76, 0xd5, 0xe2, 0x33,
- 0x87, 0xd2, 0xdf, 0xd6, 0x3d, 0x91, 0x5f, 0xde, 0xda, 0xfb, 0x6b, 0xc9,
- 0x1f, 0x09, 0x3a, 0x77, 0x18, 0xcb, 0x9a, 0x5a, 0x52, 0xac, 0x01, 0xa6,
- 0x08, 0x7a, 0xce, 0x18, 0xe5, 0x8e, 0xd8, 0x90, 0x8b, 0xd3, 0xb7, 0x57,
- 0x6d, 0xf1, 0xf7, 0x9b, 0xe8, 0x47, 0x77, 0xcf, 0x03, 0xf3, 0x0d, 0x33,
- 0x60, 0x7c, 0xa4, 0xcb, 0x99, 0x36, 0xd5, 0x88, 0xdb, 0x7c, 0xf4, 0x94,
- 0x7e, 0x7c, 0xc3, 0x3f, 0xac, 0xb8, 0x25, 0x63, 0x65, 0x99, 0xf9, 0xa2,
- 0x09, 0x7c, 0xc0, 0x95, 0x0b, 0xe4, 0xdc, 0x0f, 0x41, 0x45, 0xaf, 0xf1,
- 0x4b, 0x9e, 0x3c, 0xf2, 0x0e, 0xcd, 0xed, 0x67, 0x76, 0x20, 0x2e, 0xcb,
- 0x8c, 0x29, 0x71, 0x8c, 0x44, 0x8d, 0xd9, 0x22, 0x97, 0x1a, 0x30, 0x92,
- 0xad, 0x21, 0x7f, 0xaa, 0x87, 0xaa, 0xc0, 0x51, 0x52, 0xe6, 0x92, 0xae,
- 0x81, 0x72, 0x5a, 0xdf, 0x9f, 0x14, 0xfe, 0x68, 0x85, 0x5c, 0x7c, 0x74,
- 0x6e, 0x8f, 0xd5, 0x08, 0x6c, 0x60, 0x46, 0xd6, 0x1a, 0xe6, 0xa5, 0xa0,
- 0xc5, 0x7c, 0xf6, 0x71, 0xab, 0x78, 0xc4, 0xb7, 0x8c, 0x2b, 0x93, 0x6b,
- 0x58, 0x64, 0x5a, 0x9b, 0x4e, 0x24, 0x2f, 0x5f, 0x9b, 0x0e, 0x0f, 0xab,
- 0x84, 0xa0, 0x75, 0xa0, 0xda, 0x07, 0x87, 0x4b, 0x0f, 0xf1, 0x7c, 0x60,
- 0x2e, 0xb7, 0x66, 0x6a, 0x99, 0xd1, 0x45, 0x9b, 0xaf, 0xfc, 0xd5, 0x16,
- 0xd1, 0x35, 0x39, 0x88, 0x50, 0xdf, 0x05, 0x9d, 0xaf, 0x49, 0xe0, 0x9d,
- 0x90, 0xd8, 0x33, 0x65, 0x0b, 0xaf, 0xa4, 0x1e, 0xfd, 0xae, 0x51, 0x6d,
- 0xb3, 0x58, 0xcd, 0xc7, 0x37, 0x47, 0x6f, 0x87, 0xeb, 0x92, 0x78, 0xd3,
- 0xc2, 0x45, 0x2b, 0x73, 0x78, 0x09, 0x3f, 0x4d, 0x42, 0x1c, 0xb3, 0x45,
- 0x48, 0x7f, 0x1a, 0xcd, 0xd2, 0x02, 0xae, 0x71, 0xfe, 0xf6, 0xf8, 0xab,
- 0x33, 0xfb, 0xb1, 0x76, 0xc9, 0x1f, 0x5d, 0xe1, 0x53, 0x4e, 0xd0, 0x7d,
- 0x2c, 0xd7, 0xd9, 0x06, 0xe7, 0x0a, 0x69, 0x78, 0x2f, 0x04, 0x11, 0x24,
- 0x0a, 0x1c, 0x0b, 0x2d, 0xf6, 0x94, 0x24, 0xa5, 0xe6, 0xf1, 0xba, 0x2c,
- 0x6e, 0x3a, 0x6e, 0x7b, 0x5f, 0x7d, 0xd9, 0xbc, 0xad, 0x8e, 0xde, 0xae,
- 0xe9, 0x8e, 0xbf, 0xe9, 0x5b, 0x02, 0x93, 0x5e, 0xd1, 0x5a, 0xc0, 0x07,
- 0xd9, 0xe4, 0x2d, 0x27, 0x8f, 0x0b, 0x14, 0xca, 0x8f, 0xca, 0xd4, 0xed,
- 0x4a, 0xe4, 0xe3, 0x2e, 0x34, 0x2f, 0xf8, 0x0c, 0x80, 0x26, 0x99, 0xc6,
- 0x74, 0x4d, 0x46, 0x2d, 0xa5, 0x00, 0x03, 0xab, 0x7f, 0xb5, 0xda, 0x5c,
- 0xb0, 0xca, 0x0a, 0xac, 0x68, 0x55, 0x47, 0x90, 0x4b, 0x0f, 0xe9, 0xbd,
- 0xc9, 0xd2, 0x9d, 0x13, 0xb3, 0xae, 0x57, 0xf6, 0xef, 0xe9, 0x92, 0x82,
- 0x63, 0x9a, 0x65, 0xc0, 0xe8, 0xa5, 0x5c, 0x47, 0x9f, 0x37, 0x0e, 0x84,
- 0x20, 0xbe, 0x98, 0x55, 0xd8, 0x9c, 0x80, 0xb8, 0xd7, 0xd9, 0xc0, 0xe3,
- 0x30, 0x83, 0x50, 0xd4, 0x36, 0x29, 0x13, 0x31, 0x19, 0x2b, 0x82, 0x50,
- 0x23, 0x58, 0x94, 0x64, 0x3b, 0xef, 0x9c, 0xb0, 0x30, 0x03, 0xe9, 0x5a,
- 0xeb, 0xf0, 0x68, 0x61, 0x0e, 0xab, 0xbb, 0x65, 0x99, 0xd5, 0xe2, 0xec,
- 0x6e, 0x04, 0x17, 0x3c, 0xb0, 0xb9, 0xe6, 0xc1, 0x6e, 0xa6, 0xaa, 0x88,
- 0xec, 0x0a, 0x6b, 0x48, 0x6e, 0xb5, 0x36, 0x1c, 0x24, 0x09, 0xb7, 0xc6,
- 0x54, 0x22, 0x0a, 0xaa, 0x23, 0x0f, 0x77, 0x60, 0x1d, 0xe3, 0x1c, 0x2b,
- 0x31, 0x00, 0x49, 0xbe, 0x32, 0x12, 0x9b, 0xc7, 0x4b, 0x36, 0x5c, 0xc1,
- 0xf1, 0x80, 0x0a, 0x3c, 0xad, 0xcd, 0xad, 0xf8, 0xde, 0xee, 0x7c, 0x61,
- 0xe6, 0xb2, 0x8e, 0x59, 0xd3, 0x3d, 0x00, 0x19, 0xbc, 0x06, 0x68, 0x5c,
- 0x25, 0x65, 0x5d, 0x8a, 0x16, 0x1f, 0xa3, 0x38, 0x0d, 0x50, 0x32, 0x00,
- 0xb5, 0x27, 0x3a, 0x5f, 0xf4, 0x3b, 0xad, 0xb7, 0x5f, 0x50, 0x51, 0x84,
- 0x05, 0x1e, 0x48, 0xc0, 0x6a, 0xed, 0x36, 0xf3, 0x9e, 0xf4, 0x62, 0x3a,
- 0x52, 0xb1, 0x1c, 0x91, 0x90, 0x56, 0x2e, 0xcb, 0x46, 0x58, 0xa2, 0x66,
- 0xe8, 0xc3, 0x23, 0x0b, 0x1d, 0x81, 0x17, 0xdc, 0x7b, 0x4d, 0x21, 0xec,
- 0xb1, 0x39, 0xb0, 0x44, 0x64, 0xa1, 0xda, 0x18, 0x47, 0x40, 0x43, 0x60,
- 0x98, 0x9f, 0xba, 0xb8, 0x72, 0xc0, 0x17, 0xbd, 0x1f, 0x1d, 0x6e, 0x27,
- 0x8f, 0xb6, 0x58, 0x44, 0xbf, 0xff, 0xbb, 0x7d, 0x09, 0x48, 0x8a, 0x7f,
- 0xd8, 0x7a, 0x59, 0xad, 0x8f, 0x76, 0xa9, 0xfb, 0xf7, 0xde, 0x26, 0x23,
- 0x2b, 0x83, 0x2c, 0x41, 0x6e, 0xee, 0xf7, 0x03, 0x77, 0xe7, 0x5a, 0x13,
- 0xd1, 0x3c, 0xb9, 0x17, 0x49, 0xa9, 0xa1, 0x13, 0x88, 0xa4, 0xf9, 0x17,
- 0x2e, 0xfb, 0x47, 0xaf, 0x90, 0xc4, 0xc8, 0x8e, 0xff, 0xb0, 0x54, 0xfc,
- 0x5f, 0x72, 0x15, 0xed, 0x49, 0xf0, 0xa1, 0x81, 0xb3, 0x3c, 0x2a, 0x9f,
- 0x97, 0x8f, 0x14, 0x8e, 0xff, 0x7d, 0x5f, 0xe0, 0x46, 0x94, 0xba, 0x79,
- 0xba, 0x34, 0x66, 0xfb, 0xcc, 0x2a, 0xcd, 0xcd, 0x9f, 0xec, 0xf5, 0x03,
- 0x65, 0xba, 0xd7, 0x28, 0xdc, 0xc4, 0x9e, 0x47, 0x96, 0x93, 0x82, 0x62,
- 0x40, 0x4c, 0xe3, 0xbf, 0xd7, 0xca, 0x0e, 0x70, 0x66, 0x49, 0x52, 0xd7,
- 0xc4, 0xb4, 0x52, 0x4d, 0xa7, 0x5a, 0x1b, 0xe3, 0xdf, 0x4a, 0x3c, 0xc1,
- 0xee, 0x38, 0xf9, 0xc6, 0x52, 0xa4, 0x25, 0x44, 0xa4, 0x2d, 0xde, 0x00,
- 0x81, 0x14, 0x56, 0x41, 0x4d, 0x1a, 0x82, 0x1a, 0x0d, 0x6f, 0x25, 0x1b,
- 0x8c, 0xa5, 0xa8, 0x0e, 0xd4, 0x73, 0xef, 0x9c, 0x87, 0x0b, 0x93, 0xf5,
- 0xa1, 0xfe, 0xda, 0x14, 0x6f, 0x4b, 0x98, 0x60, 0xc6, 0x21, 0x75, 0x96,
- 0xba, 0xf0, 0xca, 0x4e, 0x27, 0xc1, 0xf9, 0x11, 0x70, 0xfd, 0xc8, 0x45,
- 0x26, 0xec, 0x3f, 0xde, 0x9c, 0x6a, 0x45, 0x8d, 0xe9, 0xb3, 0x4f, 0xe7,
- 0x3d, 0xd2, 0xf9, 0xdc, 0x6a, 0x10, 0x33, 0x49, 0x72, 0x86, 0xcb, 0xaa,
- 0xe5, 0xfb, 0xf9, 0x89, 0x31, 0x0a, 0xbb, 0x6e, 0xe3, 0xe3, 0xbd, 0xc2,
- 0x32, 0x91, 0x2b, 0x60, 0xc2, 0xc4, 0xf9, 0x5a, 0x91, 0x97, 0x40, 0x72,
- 0x09, 0x5b, 0x07, 0xdc, 0x55, 0xd7, 0x06, 0x77, 0x1a, 0x35, 0xd2, 0x85,
- 0x3e, 0xe3, 0xf2, 0x04, 0x48, 0x86, 0x98, 0xa6, 0xb1, 0xcf, 0xe0, 0x96,
- 0x29, 0xf0, 0xe0, 0x62, 0x58, 0x5f, 0x59, 0x56, 0x26, 0x51, 0xf7, 0xf1,
- 0xe6, 0x1c, 0x96, 0x25, 0xeb, 0x25, 0xeb, 0x56, 0x46, 0xc0, 0x49, 0xeb,
- 0x2b, 0x53, 0x5d, 0x10, 0x5d, 0x11, 0xaf, 0x71, 0xb6, 0xf8, 0xdb, 0xa3,
- 0x35, 0xa9, 0x94, 0x51, 0xb4, 0x69, 0x08, 0x8a, 0x62, 0x39, 0xdb, 0x52,
- 0x80, 0x63, 0xbb, 0x07, 0x15, 0x38, 0xf8, 0x43, 0xcd, 0x21, 0x0f, 0xa6,
- 0x91, 0xa2, 0xf2, 0xb4, 0x11, 0xdd, 0xc9, 0x36, 0x94, 0xf7, 0x92, 0xe4,
- 0xe7, 0x34, 0x07, 0x97, 0xf2, 0xd7, 0xe3, 0x17, 0x35, 0xfb, 0xa9, 0xe7,
- 0x51, 0x88, 0xc5, 0x89, 0x86, 0x2b, 0xec, 0x03, 0x54, 0x0b, 0x59, 0x88,
- 0x67, 0x9f, 0x28, 0x0a, 0x12, 0x8c, 0xeb, 0x2e, 0xc3, 0x49, 0x2e, 0x52,
- 0xbb, 0xb9, 0x66, 0xe9, 0xf4, 0x03, 0xcd, 0x4d, 0x53, 0x55, 0xaa, 0x20,
- 0x9e, 0x2d, 0x5b, 0x0f, 0x30, 0x26, 0xc4, 0x9c, 0x93, 0x15, 0xf5, 0x75,
- 0xd8, 0x5b, 0x15, 0x45, 0xa9, 0x31, 0x51, 0xc4, 0xa9, 0x97, 0x5c, 0xeb,
- 0x3c, 0x2c, 0x09, 0x0c, 0x25, 0xea, 0xf1, 0xe6, 0x24, 0x53, 0x14, 0x51,
- 0xb5, 0x5e, 0x88, 0x84, 0xe5, 0x83, 0x21, 0xfd, 0x4c, 0x38, 0x68, 0x1f,
- 0x72, 0x95, 0xb4, 0x2c, 0x6b, 0x49, 0xc3, 0x0d, 0xeb, 0xe3, 0xc2, 0xb0,
- 0x40, 0xaf, 0xbf, 0x64, 0x50, 0x41, 0x65, 0xd7, 0xc8, 0x03, 0x37, 0x59,
- 0xd8, 0x8a, 0x84, 0x6c, 0x6f, 0x66, 0xf9, 0xe3, 0xcd, 0x29, 0x51, 0x7e,
- 0xc4, 0x8c, 0xe2, 0xc5, 0x42, 0x7b, 0xfb, 0xf0, 0x26, 0xfc, 0x26, 0xf3,
- 0xd5, 0x1a, 0x3c, 0xdb, 0xc4, 0x78, 0x23, 0x9b, 0xf8, 0x36, 0x1b, 0x2d,
- 0x8b, 0x1b, 0xc9, 0x2a, 0xcf, 0xa2, 0x0f, 0xf3, 0xac, 0x00, 0x78, 0xbf,
- 0x36, 0xe9, 0x47, 0x8a, 0x03, 0x85, 0xcb, 0xc0, 0x98, 0x7a, 0xca, 0xd3,
- 0xfe, 0x37, 0xad, 0x83, 0x44, 0x29, 0x59, 0xfe, 0x21, 0x4f, 0x02, 0x82,
- 0x82, 0x4b, 0xba, 0xa6, 0xb3, 0x48, 0xaa, 0xd7, 0xe0, 0x43, 0xa3, 0x4b,
- 0x0b, 0x6f, 0x59, 0x89, 0xe1, 0xb4, 0x49, 0xfa, 0x75, 0x90, 0x49, 0x01,
- 0x2c, 0x40, 0xd9, 0xf5, 0x0f, 0x71, 0x06, 0x2d, 0x34, 0x2b, 0xc0, 0xf6,
- 0x5e, 0x0a, 0x1a, 0x9b, 0x33, 0x36, 0x10, 0x31, 0x5b, 0x62, 0x6a, 0xeb,
- 0xcd, 0xb1, 0xd9, 0x44, 0xac, 0xcb, 0x77, 0xac, 0xb8, 0xad, 0x21, 0x49,
- 0x0b, 0xd2, 0x5c, 0x77, 0xf2, 0x01, 0x41, 0xcd, 0xeb, 0xac, 0xf9, 0xe3,
- 0x41, 0x89, 0x9a, 0xc7, 0xfb, 0x27, 0x0e, 0xb7, 0x70, 0xcb, 0x23, 0xa7,
- 0x5f, 0xf8, 0x4f, 0xcf, 0x51, 0x5e, 0x0f, 0x92, 0xe8, 0xc7, 0x91, 0x82,
- 0xd4, 0x0a, 0x70, 0x19, 0xa3, 0xb5, 0x7c, 0x52, 0x84, 0x2f, 0xf2, 0x97,
- 0x5a, 0xb9, 0xeb, 0x3e, 0x2e, 0x3e, 0x34, 0xba, 0x58, 0xb4, 0xb1, 0xea,
- 0x22, 0x88, 0xf5, 0x47, 0x23, 0x65, 0x40, 0xd4, 0x91, 0x18, 0xb5, 0x3e,
- 0x86, 0xab, 0x6b, 0x4e, 0x38, 0x52, 0xc1, 0x5d, 0x98, 0x4a, 0xb0, 0x5e,
- 0x61, 0x7e, 0xe4, 0x07, 0xaf, 0xf1, 0xb6, 0xe4, 0x49, 0x8c, 0x15, 0x23,
- 0xff, 0xf8, 0xe3, 0xf3, 0xab, 0xf3, 0xf2, 0x00, 0x17, 0x08, 0x70, 0x3a,
- 0xcd, 0xc3, 0x33, 0xd2, 0xa3, 0xf5, 0x81, 0x35, 0xe3, 0x18, 0x4a, 0xb9,
- 0x04, 0xc3, 0x63, 0x54, 0x67, 0x10, 0xba, 0xf3, 0x2d, 0x59, 0xfa, 0x2d,
- 0xb2, 0x8a, 0xee, 0x40, 0x05, 0x49, 0x75, 0x9e, 0x24, 0x13, 0x43, 0xcd,
- 0x22, 0xc1, 0x84, 0x8f, 0x4f, 0x99, 0x7c, 0x0c, 0x93, 0x2b, 0x68, 0x0b,
- 0x9b, 0xe8, 0x62, 0xe9, 0xcf, 0xc9, 0x7b, 0x03, 0x79, 0x09, 0x85, 0x03,
- 0x9f, 0x1e, 0x2f, 0x71, 0x9d, 0x22, 0xfa, 0x24, 0xb9, 0x87, 0x84, 0x69,
- 0x39, 0x81, 0x68, 0x4d, 0x43, 0xaa, 0xa2, 0x8f, 0x6b, 0x6d, 0x6d, 0x14,
- 0x18, 0xda, 0x52, 0x7f, 0xc5, 0xa3, 0x6d, 0x59, 0x00, 0x84, 0x1b, 0x16,
- 0x44, 0xdf, 0x0f, 0x6c, 0x56, 0x9b, 0x64, 0x8c, 0x1e, 0x5d, 0xb1, 0x06,
- 0x65, 0xd6, 0x22, 0x37, 0xad, 0x1f, 0x7f, 0xa0, 0x77, 0x3e, 0xde, 0x23,
- 0xcc, 0x89, 0x26, 0xb5, 0x6d, 0x34, 0x4b, 0x92, 0x24, 0x13, 0xbf, 0x0f,
- 0xdc, 0x75, 0xcc, 0x5e, 0xbf, 0x00, 0x81, 0x47, 0x9e, 0x09, 0xd4, 0x52,
- 0x52, 0x29, 0x8a, 0x65, 0x2e, 0x68, 0xbd, 0x1f, 0x26, 0x25, 0x77, 0xfe,
- 0xad, 0x3d, 0x8e, 0xdf, 0xe5, 0xa9, 0x90, 0x8c, 0xa7, 0x67, 0x69, 0xcd,
- 0xa8, 0xdc, 0x7e, 0x62, 0x41, 0x6c, 0x58, 0x16, 0x39, 0xf7, 0x2b, 0x8d,
- 0x4a, 0x5a, 0xfb, 0x88, 0x31, 0x29, 0xb2, 0xce, 0x7b, 0x0e, 0xee, 0xd6,
- 0x31, 0x1d, 0xca, 0x47, 0xfd, 0x4b, 0xfe, 0x48, 0xa9, 0xc1, 0x56, 0x3a,
- 0x09, 0xca, 0xfc, 0x32, 0xab, 0xb8, 0xfa, 0xe0, 0x98, 0x72, 0xd5, 0x2a,
- 0xe6, 0x4d, 0x28, 0x3e, 0xd2, 0x06, 0x4c, 0x88, 0x2b, 0x58, 0xfb, 0x15,
- 0x1b, 0x0c, 0x77, 0x49, 0xea, 0x76, 0xe4, 0xbe, 0x41, 0x7e, 0x7c, 0x6a,
- 0x30, 0x20, 0x63, 0xf8, 0x51, 0x3e, 0x8e, 0x7f, 0x7c, 0x44, 0xc2, 0x39,
- 0x8f, 0xc1, 0x78, 0x70, 0xe1, 0xc6, 0x40, 0x43, 0xf0, 0x1f, 0x8a, 0xc3,
- 0x0c, 0xd4, 0xe9, 0x8b, 0xcf, 0x9a, 0xaa, 0xf2, 0xcf, 0x69, 0x15, 0xcd,
- 0x71, 0x58, 0x77, 0xef, 0xa1, 0xb2, 0x48, 0xc6, 0x77, 0x5c, 0x21, 0x72,
- 0x2c, 0xa3, 0xab, 0x8f, 0xc2, 0xbc, 0xb4, 0x2f, 0x2e, 0x67, 0x0c, 0xe9,
- 0x43, 0xe3, 0xd0, 0xc9, 0x68, 0xd1, 0x98, 0x6a, 0x09, 0x5c, 0xa4, 0x8f,
- 0x43, 0x25, 0x1c, 0x73, 0xba, 0x1e, 0x2b, 0xe1, 0x1f, 0xb8, 0x6c, 0x5d,
- 0x83, 0x9a, 0xff, 0x04, 0x40, 0x02, 0x49, 0x00, 0x6b, 0xe4, 0xa1, 0x36,
- 0x33, 0xb7, 0xaf, 0x48, 0x2f, 0x04, 0xd6, 0xe3, 0x7b, 0x40, 0x22, 0x32,
- 0xcd, 0x19, 0x46, 0x39, 0x3e, 0x30, 0xab, 0xb9, 0x60, 0x53, 0x2d, 0x17,
- 0x28, 0x5c, 0xc7, 0x0b, 0x32, 0xcd, 0x60, 0xf1, 0x7e, 0x7c, 0x70, 0x02,
- 0x43, 0x50, 0xc3, 0x5e, 0xb7, 0x18, 0xfb, 0x5a, 0x56, 0x79, 0x53, 0xbb,
+ 0x69, 0x7b, 0x23, 0xc7, 0x91, 0x2e, 0xfa, 0x9d, 0xbf, 0xa2, 0x0c, 0x5d,
+ 0x1b, 0xa4, 0x0d, 0x80, 0x4b, 0x2f, 0x52, 0xd3, 0xdd, 0x1a, 0x51, 0x24,
+ 0x5b, 0xe2, 0x88, 0xdd, 0xe4, 0x21, 0xd8, 0x5a, 0x8e, 0xac, 0xa7, 0x9f,
+ 0x02, 0x50, 0x24, 0xcb, 0x04, 0x50, 0x70, 0x55, 0x81, 0x24, 0xe4, 0xf1,
+ 0xfc, 0xf6, 0x1b, 0xf1, 0x46, 0x44, 0x66, 0xd6, 0x02, 0x76, 0xcb, 0x96,
+ 0x3c, 0xf7, 0x9c, 0xe7, 0x7a, 0x46, 0x4d, 0x12, 0xa8, 0xca, 0x35, 0x32,
+ 0x32, 0xd6, 0x37, 0xa2, 0xe8, 0x43, 0xff, 0x7b, 0x8f, 0xff, 0xde, 0xd3,
+ 0xff, 0xe8, 0xe7, 0x46, 0x14, 0x9d, 0xe7, 0xd9, 0x5f, 0x93, 0x71, 0xd9,
+ 0xfe, 0xec, 0xfb, 0xf7, 0xff, 0x15, 0xc9, 0xff, 0xd1, 0x3b, 0x7f, 0xa1,
+ 0x9f, 0x1b, 0x8f, 0xb6, 0xbd, 0x1d, 0xf9, 0x17, 0xfe, 0xeb, 0xfd, 0x56,
+ 0xf4, 0xa1, 0x17, 0xfe, 0x2b, 0xda, 0xc4, 0x0b, 0xef, 0xb5, 0x87, 0x97,
+ 0xfc, 0xfb, 0xfb, 0xf7, 0x8f, 0x77, 0xf2, 0x17, 0x1e, 0x15, 0xff, 0xb3,
+ 0xcd, 0xef, 0xfd, 0xe5, 0x3d, 0xff, 0x4a, 0x9f, 0x6c, 0x6c, 0xbc, 0x3d,
+ 0x78, 0x73, 0x6c, 0xaf, 0x8e, 0x97, 0xf9, 0x34, 0xea, 0x47, 0x65, 0x1e,
+ 0xcf, 0x8b, 0xab, 0x24, 0x8f, 0xe2, 0xe8, 0xdd, 0xc5, 0xe9, 0xc6, 0xc6,
+ 0xf0, 0x87, 0xb7, 0x67, 0xe7, 0xc3, 0x93, 0x61, 0xe5, 0xb1, 0x1f, 0xb3,
+ 0x45, 0x99, 0x66, 0xf3, 0xe2, 0xa7, 0xe8, 0x47, 0x7a, 0x68, 0x30, 0x18,
+ 0xfc, 0xb4, 0xb1, 0x71, 0x74, 0x3c, 0x3c, 0xbc, 0x38, 0x39, 0xbf, 0x3c,
+ 0x39, 0x7b, 0x5b, 0x79, 0x36, 0x4a, 0x8b, 0x88, 0x1a, 0x2b, 0xb3, 0x6c,
+ 0x4a, 0xff, 0xf8, 0xf6, 0x27, 0x71, 0x19, 0x47, 0x57, 0x79, 0x36, 0x8b,
+ 0xb2, 0x9c, 0xbf, 0x88, 0xa3, 0x22, 0xc9, 0xef, 0x92, 0xbc, 0x17, 0x2d,
+ 0x8b, 0x74, 0x7e, 0x1d, 0x65, 0xf3, 0x24, 0xca, 0xae, 0xa2, 0xf2, 0x26,
+ 0xb1, 0xe6, 0x8a, 0xe5, 0x62, 0x91, 0xe5, 0x65, 0x32, 0x89, 0x16, 0x79,
+ 0x56, 0x66, 0xe3, 0x6c, 0x5a, 0x44, 0x9b, 0x47, 0x27, 0x87, 0x97, 0xbd,
+ 0xe8, 0xf5, 0xc9, 0xe9, 0x31, 0xfd, 0x7b, 0x79, 0x8e, 0x7f, 0x86, 0xbd,
+ 0xe8, 0xab, 0xb3, 0xf3, 0xaf, 0x8f, 0x2f, 0x7a, 0xd1, 0xd7, 0x97, 0xfc,
+ 0x19, 0xff, 0x4b, 0x1f, 0x46, 0x27, 0x6f, 0x0e, 0xce, 0x7b, 0xd6, 0x1c,
+ 0xff, 0xc1, 0x1f, 0x9e, 0x1e, 0xd1, 0x87, 0xf2, 0x83, 0xff, 0x3c, 0x3f,
+ 0x3b, 0x7f, 0xd2, 0xc3, 0xbf, 0xf4, 0xd7, 0xc5, 0xe5, 0x9b, 0x73, 0xfe,
+ 0x77, 0x48, 0xff, 0x0e, 0x0f, 0xf9, 0x1f, 0xf4, 0x31, 0x7c, 0x63, 0xff,
+ 0x0e, 0x5d, 0x73, 0x97, 0xc7, 0xa7, 0x6f, 0x8f, 0x2f, 0xa3, 0x78, 0x3e,
+ 0x89, 0x2e, 0xe9, 0xa1, 0xad, 0x01, 0x7d, 0x74, 0x93, 0x44, 0xe3, 0x6c,
+ 0x36, 0xe3, 0xcf, 0x68, 0x15, 0x26, 0x49, 0x91, 0x5e, 0xcf, 0x69, 0xf8,
+ 0x34, 0xdb, 0xfb, 0x2c, 0xbf, 0x8d, 0xee, 0xd3, 0xf2, 0x26, 0x5b, 0x96,
+ 0x34, 0x61, 0x5a, 0x8f, 0x28, 0x9d, 0x97, 0x49, 0xde, 0xb7, 0xe6, 0xe2,
+ 0x31, 0xaf, 0xf0, 0x60, 0xa3, 0xb2, 0x96, 0xd9, 0x15, 0xad, 0x5c, 0x41,
+ 0x4b, 0x35, 0x5a, 0x16, 0xd3, 0x2c, 0x9e, 0xf0, 0x02, 0xd1, 0xcb, 0x57,
+ 0x4b, 0x5a, 0xda, 0x3c, 0x1d, 0xdf, 0x16, 0xd1, 0x34, 0xbd, 0x4d, 0x78,
+ 0x79, 0x1e, 0x56, 0xb6, 0x5c, 0x3d, 0x69, 0x3e, 0x5e, 0xd2, 0x4a, 0xce,
+ 0x5d, 0xf3, 0x65, 0x3a, 0x8e, 0xb9, 0x03, 0xac, 0x57, 0xb4, 0x5c, 0x70,
+ 0x6b, 0xb2, 0x4e, 0xd1, 0x22, 0x2b, 0xe8, 0xa5, 0xe1, 0xf0, 0x94, 0xc6,
+ 0x3e, 0x9f, 0x27, 0x18, 0x47, 0xd1, 0xa3, 0x3f, 0xb2, 0xdb, 0x34, 0xa1,
+ 0x5f, 0xae, 0xd2, 0x69, 0x12, 0xc9, 0x3e, 0xba, 0xe6, 0x78, 0x43, 0xf3,
+ 0xa4, 0x58, 0xce, 0x12, 0x2c, 0xc0, 0x2c, 0xcb, 0x93, 0x41, 0x74, 0x50,
+ 0x44, 0xab, 0x6c, 0x49, 0xb3, 0x9c, 0x4e, 0x69, 0x6f, 0x93, 0x68, 0x94,
+ 0x4c, 0xb3, 0xfb, 0x1e, 0xef, 0x68, 0x34, 0x5f, 0xce, 0x46, 0xf4, 0x0a,
+ 0x0d, 0xff, 0x2a, 0x89, 0xcb, 0x25, 0xbd, 0x8a, 0xc7, 0xac, 0xb9, 0x59,
+ 0x4c, 0xb3, 0xa0, 0x77, 0xf3, 0xe8, 0x26, 0xa1, 0x59, 0x16, 0x8b, 0x74,
+ 0xfe, 0xbb, 0xea, 0x4a, 0xd0, 0x72, 0x2e, 0xb2, 0xfb, 0x24, 0xa7, 0xd5,
+ 0x1c, 0xad, 0x22, 0x9a, 0xf6, 0x48, 0x88, 0xed, 0x8a, 0x88, 0x29, 0x8a,
+ 0xa9, 0x43, 0x47, 0x68, 0xfd, 0x3c, 0x99, 0xc6, 0x4c, 0x34, 0xae, 0x2b,
+ 0xda, 0x99, 0x61, 0xe2, 0xa8, 0x4a, 0x5f, 0xdd, 0x7c, 0xb2, 0x85, 0x97,
+ 0x27, 0x49, 0x19, 0xa7, 0xd3, 0x82, 0x16, 0x9e, 0xc9, 0xdf, 0xf6, 0x96,
+ 0x86, 0xcc, 0xc7, 0x81, 0x68, 0x70, 0x35, 0x2f, 0xe3, 0x07, 0x74, 0xaf,
+ 0x34, 0xd8, 0x9f, 0x24, 0x8b, 0x64, 0x3e, 0x49, 0xe6, 0xe5, 0x20, 0xfa,
+ 0x21, 0x5b, 0x76, 0xa9, 0xef, 0xab, 0x94, 0xd6, 0x20, 0xd6, 0xa6, 0xa8,
+ 0x67, 0xda, 0xf8, 0x71, 0x9e, 0x2e, 0x82, 0xc5, 0xcf, 0xe6, 0xb4, 0xdd,
+ 0xd1, 0xc5, 0xeb, 0xc3, 0xe8, 0xc9, 0x8b, 0xcf, 0x9e, 0xfb, 0x5d, 0xa6,
+ 0x06, 0xa2, 0x71, 0x3c, 0xa7, 0x19, 0x27, 0xe3, 0xf4, 0x6a, 0x15, 0xcd,
+ 0x96, 0xd3, 0x32, 0x5d, 0xd0, 0x7a, 0x53, 0xe7, 0x05, 0x1f, 0x94, 0x45,
+ 0x9c, 0x97, 0x05, 0xaf, 0x1b, 0x3e, 0xc0, 0xdc, 0xef, 0xf3, 0xb4, 0xe4,
+ 0x03, 0x83, 0xef, 0x68, 0x84, 0x49, 0x59, 0x58, 0x73, 0x4c, 0x60, 0xd4,
+ 0xcf, 0x28, 0x8f, 0xc7, 0xb4, 0xc2, 0x71, 0x41, 0x9d, 0xee, 0xbb, 0xbe,
+ 0xa2, 0x9b, 0xb2, 0x5c, 0xec, 0x6f, 0x6f, 0x17, 0x69, 0x99, 0x0c, 0xfe,
+ 0x4e, 0xc7, 0xad, 0x57, 0xde, 0x67, 0xbd, 0xf2, 0x26, 0x4f, 0x92, 0x7f,
+ 0x0c, 0x88, 0x6c, 0xdd, 0x83, 0xd4, 0xed, 0x4a, 0xc7, 0x75, 0x9d, 0x94,
+ 0xd4, 0xc1, 0xdf, 0x96, 0xc9, 0x9c, 0x1b, 0xa4, 0x61, 0xc4, 0xd3, 0xc5,
+ 0x4d, 0x4c, 0xbb, 0x99, 0x10, 0xf9, 0xf1, 0x01, 0x26, 0x0a, 0xe1, 0x41,
+ 0xc9, 0x11, 0xfe, 0xf1, 0xa7, 0x46, 0x9f, 0x57, 0xe8, 0x92, 0xfe, 0x1d,
+ 0xe8, 0x4b, 0x31, 0xad, 0x35, 0x75, 0xb6, 0xcd, 0x54, 0xf5, 0xe3, 0x6e,
+ 0x7f, 0x77, 0x67, 0xe7, 0xa7, 0x41, 0xf9, 0x50, 0x7e, 0xe4, 0x0b, 0x3b,
+ 0x3b, 0xfe, 0x15, 0x7e, 0x7a, 0x93, 0x67, 0x1c, 0x4d, 0x89, 0x68, 0xb8,
+ 0xff, 0x9f, 0x93, 0x3c, 0x2b, 0xb6, 0x5a, 0x9a, 0x9a, 0x26, 0x25, 0x9d,
+ 0xb5, 0xa0, 0x9d, 0xb8, 0xff, 0xb3, 0x74, 0x6b, 0x0f, 0xbf, 0x4d, 0x0a,
+ 0xd0, 0x8c, 0x9f, 0x6c, 0x14, 0xe7, 0x44, 0xb7, 0x59, 0xe9, 0xd9, 0x50,
+ 0x8f, 0x8e, 0x61, 0xe9, 0x96, 0x86, 0x4e, 0x19, 0x3d, 0x4d, 0x0c, 0x2c,
+ 0x9e, 0x32, 0xef, 0x2a, 0xa2, 0x79, 0xe2, 0xa7, 0x41, 0x27, 0x3e, 0x89,
+ 0xc7, 0x37, 0x51, 0x46, 0xc4, 0x9f, 0x37, 0xb7, 0x20, 0x9e, 0xaf, 0x06,
+ 0x59, 0x7e, 0xbd, 0x1d, 0xe7, 0xe3, 0x9b, 0xf4, 0x8e, 0xd6, 0xe1, 0xc5,
+ 0x8b, 0xe7, 0x7d, 0xfa, 0xe7, 0xc5, 0x4f, 0xdb, 0x77, 0xd9, 0x94, 0x96,
+ 0xe5, 0xe9, 0x4f, 0xdb, 0xbc, 0xbb, 0x7f, 0x8f, 0x7b, 0xa3, 0xde, 0xf8,
+ 0x1f, 0x83, 0x9b, 0x72, 0x36, 0x5d, 0x4b, 0x33, 0xd4, 0x58, 0x14, 0xcf,
+ 0xb2, 0xe5, 0xbc, 0x74, 0x74, 0x42, 0xe4, 0x56, 0x06, 0xbc, 0x68, 0x9a,
+ 0xce, 0x13, 0x61, 0x4f, 0x4c, 0x3e, 0x7c, 0x3c, 0xe9, 0x6c, 0xfa, 0xa3,
+ 0x5c, 0x8e, 0x6f, 0x68, 0xea, 0x44, 0x37, 0xb1, 0x4e, 0xbf, 0x4c, 0x69,
+ 0x4e, 0xf4, 0xe6, 0x9c, 0x8e, 0x6c, 0x2a, 0x4d, 0x49, 0x67, 0x29, 0x3d,
+ 0x97, 0xe5, 0x93, 0x24, 0xaf, 0x52, 0x30, 0x86, 0xe3, 0xc7, 0x13, 0xd1,
+ 0x52, 0x2e, 0xa8, 0xf3, 0x25, 0x33, 0x38, 0x1c, 0x32, 0x6e, 0x81, 0x8e,
+ 0xe7, 0x35, 0xad, 0x12, 0xad, 0x0c, 0x13, 0x15, 0x2f, 0xdc, 0x2a, 0x7a,
+ 0x4b, 0x9b, 0x27, 0xac, 0x21, 0xa0, 0x3d, 0xd9, 0xac, 0xe6, 0xa2, 0xdd,
+ 0xdf, 0xdf, 0xaf, 0x27, 0xa2, 0xfd, 0xdd, 0x1a, 0x1d, 0x05, 0x2f, 0xb5,
+ 0xed, 0xfe, 0xfe, 0x5e, 0x75, 0xff, 0x4f, 0xae, 0xb0, 0xb1, 0x36, 0x07,
+ 0x3e, 0xfb, 0xc6, 0xad, 0xed, 0xe0, 0x53, 0x6b, 0xf4, 0x7b, 0x72, 0x95,
+ 0x3e, 0xf4, 0xec, 0xaa, 0x93, 0xb5, 0x8c, 0xa9, 0xf9, 0xd9, 0xa2, 0xe4,
+ 0x5d, 0xb7, 0xe6, 0xae, 0x97, 0x49, 0x41, 0x24, 0x74, 0x7f, 0x13, 0xd3,
+ 0xc7, 0xd6, 0x40, 0x84, 0x2e, 0x66, 0xe9, 0xf5, 0x4d, 0x19, 0xdd, 0xc7,
+ 0xcc, 0x3f, 0x4e, 0x4a, 0x69, 0x82, 0x59, 0x35, 0x71, 0x8d, 0xab, 0x98,
+ 0x8e, 0x3f, 0xaf, 0x10, 0xf8, 0x32, 0x11, 0x9b, 0x23, 0x27, 0x5a, 0x2b,
+ 0x90, 0x52, 0x70, 0x13, 0x8e, 0xe2, 0x82, 0x77, 0x63, 0x4e, 0x9b, 0x5e,
+ 0x12, 0xa3, 0x5f, 0xf2, 0x5f, 0x37, 0xc4, 0xca, 0xa3, 0x79, 0x3c, 0x4b,
+ 0x74, 0xa0, 0xe0, 0x7d, 0xaf, 0x99, 0x45, 0x26, 0x0f, 0xf1, 0xcc, 0xf1,
+ 0x23, 0x62, 0x30, 0x3d, 0x65, 0x9d, 0xee, 0x8d, 0x82, 0x76, 0x8d, 0x28,
+ 0x8e, 0x8f, 0x11, 0xce, 0x54, 0x87, 0xcf, 0x4d, 0x47, 0xe6, 0x89, 0x31,
+ 0xc6, 0x05, 0xd8, 0x3d, 0x38, 0x3c, 0x0d, 0x3e, 0x98, 0x2c, 0x2d, 0x5a,
+ 0x7c, 0xcb, 0xf7, 0x4a, 0xed, 0xf6, 0xc2, 0x6b, 0x93, 0x2c, 0x4a, 0x89,
+ 0x83, 0x8d, 0xe8, 0x7c, 0xf1, 0xcc, 0xf8, 0xd4, 0x60, 0x55, 0xb8, 0x9d,
+ 0x05, 0xb5, 0xc9, 0x1f, 0xa6, 0x25, 0xf3, 0x0d, 0x08, 0x20, 0x34, 0x5e,
+ 0x5a, 0x14, 0xc8, 0x10, 0x74, 0xf6, 0x82, 0xf9, 0x83, 0xe3, 0xd1, 0xb3,
+ 0xd1, 0x5d, 0x3c, 0x4d, 0x49, 0x96, 0x48, 0xdc, 0x5b, 0x60, 0xd1, 0x63,
+ 0xbe, 0xe0, 0xa6, 0xd3, 0x15, 0x91, 0x5d, 0x9e, 0xb3, 0xb0, 0xc6, 0x3b,
+ 0x38, 0x92, 0xc3, 0x31, 0x4b, 0xe8, 0x66, 0x08, 0x97, 0x33, 0x65, 0x26,
+ 0x45, 0x44, 0x4a, 0x57, 0x0d, 0xc8, 0x90, 0xae, 0x04, 0x1c, 0x63, 0x4c,
+ 0x1c, 0xa3, 0xe3, 0xb6, 0xc7, 0xe3, 0x64, 0x51, 0x16, 0x7e, 0x4e, 0x87,
+ 0x7e, 0x29, 0x74, 0xc3, 0x69, 0x38, 0x79, 0xc2, 0x2b, 0x1f, 0xde, 0x9c,
+ 0x58, 0x57, 0xc7, 0xc7, 0x71, 0x79, 0xda, 0xd5, 0x44, 0x97, 0x69, 0xe1,
+ 0x56, 0xad, 0x04, 0x6d, 0xd0, 0x59, 0xc0, 0x9a, 0xcf, 0x78, 0xa0, 0xfc,
+ 0x70, 0x21, 0x32, 0x12, 0xce, 0x1c, 0x6f, 0xa4, 0x08, 0x49, 0xd2, 0x2f,
+ 0x73, 0x23, 0x5a, 0x4f, 0xd7, 0x38, 0xf5, 0xea, 0xf6, 0x94, 0xbb, 0x2f,
+ 0x48, 0xbc, 0x24, 0xee, 0x3c, 0x29, 0x6e, 0xe8, 0x3e, 0xa5, 0xad, 0xbf,
+ 0xbc, 0xe1, 0x99, 0xce, 0x88, 0x66, 0xee, 0x78, 0x7f, 0x17, 0x49, 0x32,
+ 0x19, 0x44, 0x67, 0x57, 0x7c, 0x34, 0x73, 0x1a, 0x74, 0x89, 0xaf, 0x99,
+ 0x5b, 0xd0, 0xba, 0x4d, 0x20, 0x7f, 0xcd, 0x1d, 0x57, 0xc0, 0x50, 0x82,
+ 0x63, 0xcf, 0x94, 0x46, 0x8b, 0x1d, 0x31, 0xa3, 0x9f, 0x56, 0x59, 0x0b,
+ 0x44, 0x00, 0x62, 0x01, 0x3c, 0xbc, 0x51, 0x12, 0x81, 0x12, 0x47, 0x49,
+ 0x79, 0x9f, 0x24, 0xae, 0xb9, 0x22, 0x21, 0x76, 0xc6, 0x9b, 0x26, 0x97,
+ 0xf9, 0xfc, 0x2e, 0xe3, 0x01, 0x6e, 0x6c, 0x9c, 0x5f, 0x9c, 0x7d, 0x75,
+ 0x71, 0x3c, 0x1c, 0x46, 0x6f, 0x8e, 0x2f, 0x8f, 0x2f, 0x2a, 0xd4, 0x33,
+ 0xcf, 0xf2, 0x19, 0x76, 0x74, 0x92, 0x16, 0x8b, 0x69, 0xbc, 0xe2, 0xad,
+ 0xa6, 0x99, 0x5c, 0xe7, 0x7c, 0xb2, 0x66, 0x09, 0xb3, 0x96, 0xc9, 0x32,
+ 0x07, 0x59, 0x64, 0x0b, 0xda, 0x3e, 0x15, 0x5b, 0xa8, 0xf1, 0x09, 0x64,
+ 0x9d, 0xf9, 0xb5, 0x5f, 0x69, 0xba, 0xcd, 0x95, 0x43, 0x32, 0x8b, 0x74,
+ 0xfb, 0xc1, 0xd2, 0x04, 0xe4, 0xd2, 0x9e, 0xff, 0x4c, 0x96, 0xa9, 0xc0,
+ 0x9c, 0x88, 0x66, 0xd3, 0x19, 0x64, 0x09, 0xfa, 0xe9, 0x05, 0x88, 0xe4,
+ 0x8a, 0xe4, 0x25, 0xe2, 0x9a, 0x35, 0x72, 0x77, 0xe3, 0xc4, 0xba, 0x42,
+ 0xdc, 0x65, 0xf9, 0x97, 0x3a, 0xa7, 0xb1, 0xce, 0xd2, 0x39, 0x11, 0x18,
+ 0x11, 0xa4, 0x9e, 0x72, 0xa6, 0x04, 0x1a, 0xeb, 0x95, 0xf0, 0x04, 0x5d,
+ 0x91, 0xaa, 0x1c, 0x4d, 0x2f, 0xd3, 0x66, 0x13, 0x67, 0x75, 0xd3, 0xc3,
+ 0xa0, 0x88, 0x34, 0xa9, 0xf9, 0x78, 0xc4, 0xac, 0x89, 0x05, 0x4b, 0x92,
+ 0x06, 0x92, 0xd6, 0xde, 0x9c, 0xa4, 0x4a, 0x6f, 0xd0, 0xd8, 0xe2, 0x11,
+ 0xef, 0x28, 0x3f, 0x50, 0x5b, 0x45, 0x3a, 0x44, 0xe0, 0x2d, 0xf7, 0x69,
+ 0x81, 0x43, 0x75, 0x9f, 0x2d, 0xa7, 0x24, 0xd2, 0xf1, 0x03, 0xcb, 0x05,
+ 0x5e, 0xa0, 0xae, 0x16, 0xfe, 0xf4, 0xcc, 0xd2, 0x07, 0x5e, 0xf5, 0x7a,
+ 0x2b, 0x34, 0x34, 0xfa, 0x73, 0x41, 0x9b, 0x20, 0xc3, 0x19, 0xd4, 0x79,
+ 0x2b, 0xb8, 0x46, 0x63, 0x0f, 0xf9, 0xb4, 0x80, 0xdd, 0x9d, 0x9f, 0x0d,
+ 0x2f, 0x99, 0xfd, 0x9f, 0xbf, 0xbb, 0xa4, 0x86, 0xe8, 0x1a, 0x2a, 0x4a,
+ 0xda, 0x4e, 0x7e, 0x71, 0x9e, 0x40, 0x86, 0xb6, 0xe6, 0x68, 0xd7, 0x52,
+ 0x1c, 0x71, 0xdc, 0x2a, 0xd6, 0xa5, 0x8c, 0x51, 0x14, 0x0b, 0x26, 0x5e,
+ 0x53, 0x2b, 0x8a, 0x9b, 0x84, 0x79, 0xb4, 0x7b, 0x29, 0xda, 0xfc, 0x7c,
+ 0x8b, 0xb6, 0xbb, 0xef, 0x9a, 0xfb, 0x91, 0x9f, 0xfe, 0x89, 0x7b, 0x2e,
+ 0xd2, 0x59, 0x3a, 0x8d, 0x83, 0xbb, 0x4d, 0x39, 0x11, 0xd3, 0xb5, 0x3b,
+ 0x8f, 0x63, 0x62, 0xbb, 0x18, 0xb4, 0x97, 0xa3, 0x79, 0x05, 0x71, 0x9a,
+ 0xfd, 0x46, 0x4d, 0xb2, 0x44, 0xde, 0x23, 0x51, 0xd6, 0x2d, 0x1c, 0xef,
+ 0x18, 0x1f, 0xf3, 0xca, 0x32, 0xd5, 0x77, 0xad, 0xb1, 0x6c, 0xcc, 0xc9,
+ 0xa1, 0x9e, 0xb9, 0x85, 0xeb, 0x8c, 0xe2, 0xbc, 0xe3, 0x38, 0x98, 0xe8,
+ 0x4c, 0xd4, 0xe8, 0xf5, 0x92, 0x06, 0x2f, 0xab, 0xda, 0x8b, 0xfa, 0x9f,
+ 0xf0, 0xc8, 0x59, 0xa4, 0x76, 0x27, 0x9a, 0x64, 0xb5, 0xf9, 0x64, 0xb0,
+ 0x71, 0x06, 0x95, 0xcd, 0xe9, 0x77, 0x27, 0x2c, 0xe4, 0xcd, 0x99, 0xfd,
+ 0xf5, 0x20, 0x47, 0x8f, 0x48, 0x6f, 0x4b, 0x40, 0x74, 0xc2, 0xcd, 0x58,
+ 0x0a, 0x4a, 0xe6, 0x4c, 0x3c, 0x13, 0xe1, 0x8f, 0xfd, 0xbe, 0x7c, 0x85,
+ 0x1d, 0x5f, 0xd1, 0x55, 0x1e, 0x5f, 0xc7, 0xa9, 0x3b, 0xe8, 0x4a, 0x68,
+ 0xee, 0xd9, 0x79, 0xa6, 0x8f, 0x33, 0x37, 0x62, 0xc6, 0xaa, 0x7b, 0xba,
+ 0x04, 0xff, 0x49, 0xf8, 0x5e, 0xa2, 0x4d, 0xc1, 0xca, 0x6a, 0xb3, 0xb8,
+ 0x8d, 0xac, 0xb9, 0x11, 0xee, 0x5f, 0xbe, 0xca, 0x40, 0x99, 0xb8, 0x98,
+ 0xa8, 0xc9, 0xce, 0x20, 0xfa, 0x9a, 0xb4, 0x01, 0x68, 0x8f, 0x10, 0x50,
+ 0x52, 0xd6, 0x84, 0xe8, 0x86, 0xb9, 0x4f, 0x48, 0x17, 0x29, 0x4a, 0xe2,
+ 0x1a, 0x60, 0x6a, 0xf8, 0x8c, 0xc6, 0xe9, 0xd8, 0xd0, 0x4d, 0x76, 0x8f,
+ 0x6e, 0xdd, 0x24, 0xa8, 0x89, 0x22, 0xc5, 0x25, 0xca, 0x9f, 0xcf, 0x06,
+ 0xd1, 0x26, 0x98, 0x26, 0x71, 0x56, 0xe6, 0xfe, 0x7e, 0x16, 0x6e, 0x3d,
+ 0x88, 0x8c, 0x9d, 0xb8, 0x1d, 0x4f, 0x26, 0xcc, 0x41, 0x68, 0x04, 0xd1,
+ 0xa7, 0x83, 0xdd, 0x17, 0x83, 0x9d, 0x01, 0x1b, 0x0b, 0x92, 0xbb, 0x34,
+ 0x23, 0x75, 0x8d, 0x44, 0x2d, 0x1e, 0x4a, 0x14, 0xbc, 0x49, 0xea, 0x0b,
+ 0x1f, 0xeb, 0xeb, 0xeb, 0xa9, 0x30, 0xd4, 0x6d, 0xd2, 0xef, 0x02, 0x9e,
+ 0x9b, 0x93, 0x62, 0x01, 0x6e, 0xc3, 0x8b, 0xa3, 0xdb, 0x2a, 0x34, 0x17,
+ 0x32, 0x5b, 0x5d, 0xce, 0x2d, 0x47, 0x27, 0xfd, 0x78, 0xbb, 0xdf, 0x8f,
+ 0x17, 0xac, 0x94, 0xd4, 0xcc, 0x02, 0x9b, 0x44, 0xa3, 0xdb, 0xac, 0xc1,
+ 0x6e, 0x45, 0xdf, 0xb1, 0x84, 0x01, 0xce, 0xcc, 0x72, 0xde, 0xdc, 0x69,
+ 0x80, 0x58, 0x3a, 0x91, 0x41, 0xf8, 0x9c, 0x80, 0xf3, 0xf0, 0x19, 0x6a,
+ 0x6b, 0x8e, 0x6f, 0x5f, 0xf0, 0x52, 0x12, 0x14, 0x58, 0x86, 0x53, 0xcd,
+ 0xd0, 0x08, 0x11, 0xac, 0x95, 0x6e, 0x9a, 0xdc, 0x29, 0x28, 0x29, 0x8b,
+ 0x38, 0x32, 0x0f, 0x7e, 0xb4, 0xd6, 0x1c, 0x9f, 0x91, 0x79, 0x97, 0x44,
+ 0xc1, 0x87, 0x94, 0x15, 0xd0, 0x54, 0x65, 0x21, 0xba, 0x41, 0xa2, 0x71,
+ 0x8e, 0x85, 0x18, 0xb0, 0x60, 0x9e, 0x95, 0x89, 0x5d, 0x96, 0x18, 0x6c,
+ 0x74, 0x35, 0x8d, 0xb9, 0xed, 0xa2, 0xd6, 0x1c, 0xa9, 0xda, 0x99, 0xaa,
+ 0x87, 0x45, 0x46, 0x8b, 0x36, 0x1c, 0x7e, 0xad, 0x97, 0x67, 0x11, 0x6d,
+ 0xa6, 0xf3, 0xf1, 0x74, 0x09, 0x1d, 0xe1, 0x8c, 0x26, 0x46, 0x5f, 0x6d,
+ 0xf9, 0x73, 0xd6, 0x3f, 0xa0, 0xf5, 0x63, 0x9d, 0xb9, 0x1f, 0xd3, 0x49,
+ 0x28, 0xa3, 0x97, 0xf2, 0xa3, 0x28, 0xf9, 0x72, 0xf9, 0xbc, 0xbe, 0xa4,
+ 0xcc, 0xab, 0xb6, 0xa2, 0xa1, 0xca, 0x89, 0x3c, 0xb5, 0x77, 0xfc, 0xea,
+ 0x41, 0xf0, 0x0e, 0x2f, 0x54, 0x41, 0xcb, 0x67, 0x47, 0x1b, 0xec, 0x4d,
+ 0x86, 0x32, 0xa8, 0x35, 0x37, 0xe4, 0x91, 0x92, 0x28, 0x37, 0x61, 0x72,
+ 0xc1, 0x15, 0x1c, 0x1d, 0x7e, 0x75, 0xc2, 0x93, 0x24, 0x4d, 0x52, 0xee,
+ 0x07, 0x9d, 0x74, 0x9a, 0x4c, 0x99, 0xd4, 0xb0, 0x62, 0x50, 0xfa, 0xa2,
+ 0x50, 0xde, 0xd4, 0xff, 0x75, 0xde, 0x64, 0x3f, 0xd3, 0x1a, 0xc6, 0xdb,
+ 0x4f, 0x07, 0x3b, 0x1d, 0x96, 0xf8, 0x69, 0xc7, 0x48, 0x9b, 0xc9, 0x26,
+ 0xdc, 0xc9, 0x34, 0x9e, 0xdf, 0x16, 0x42, 0xad, 0xa0, 0x2c, 0x8c, 0x95,
+ 0xee, 0xa1, 0x65, 0x9e, 0xd3, 0xd5, 0x38, 0x09, 0x2d, 0x2f, 0x76, 0x5c,
+ 0x64, 0x3a, 0x38, 0x04, 0x7a, 0xef, 0xff, 0x6d, 0xc9, 0xfb, 0x31, 0x8b,
+ 0xf3, 0x5b, 0x93, 0x2f, 0x58, 0xf6, 0x27, 0x79, 0x3c, 0xc3, 0xc6, 0x61,
+ 0x5c, 0x78, 0xbe, 0xa5, 0xb9, 0xfe, 0xd7, 0xb4, 0xd0, 0xac, 0xe0, 0xb3,
+ 0x25, 0x40, 0x8e, 0x5f, 0x66, 0xc2, 0x88, 0xdf, 0x0e, 0xcf, 0xfd, 0x74,
+ 0xea, 0xfa, 0x28, 0xfd, 0xca, 0xad, 0xb3, 0xa9, 0x81, 0xc9, 0x81, 0xde,
+ 0xa5, 0x23, 0x2a, 0xd6, 0x85, 0x69, 0x4c, 0xe7, 0x8c, 0x17, 0xcf, 0x08,
+ 0xa8, 0xd9, 0x37, 0x7f, 0xcb, 0x44, 0xd4, 0x2d, 0x70, 0x0a, 0x82, 0xdd,
+ 0xef, 0x13, 0x4b, 0x66, 0x63, 0x49, 0xfb, 0x46, 0x5f, 0xd2, 0xa9, 0x28,
+ 0xdc, 0xb1, 0xb8, 0x4a, 0xaf, 0x97, 0x79, 0x22, 0x8c, 0x1c, 0xf6, 0x15,
+ 0x33, 0xab, 0x30, 0xdb, 0xbd, 0xc9, 0x40, 0x7c, 0x24, 0xed, 0x26, 0xd3,
+ 0xab, 0x5e, 0xad, 0x39, 0x3e, 0xbe, 0x38, 0xd7, 0x18, 0x30, 0x18, 0x43,
+ 0x91, 0x8c, 0xd1, 0xd8, 0x3c, 0x51, 0x06, 0x3e, 0xe3, 0xa5, 0x65, 0xed,
+ 0x3c, 0x1a, 0x4f, 0xe3, 0x74, 0x06, 0xd1, 0x58, 0x95, 0xcf, 0x3a, 0xdd,
+ 0x5c, 0xaa, 0xe8, 0x06, 0x92, 0x19, 0xb1, 0xe4, 0x98, 0x17, 0x2c, 0x1b,
+ 0xf2, 0x76, 0xc5, 0x76, 0x7d, 0x8a, 0x5c, 0x76, 0x93, 0x8c, 0x6f, 0x41,
+ 0x94, 0xc1, 0x6d, 0xd9, 0xaf, 0x35, 0x27, 0x9b, 0xc2, 0xd2, 0x53, 0x79,
+ 0xb3, 0xa4, 0x25, 0x5f, 0x64, 0x45, 0x91, 0x8e, 0x98, 0x26, 0x49, 0x9a,
+ 0x5a, 0x8e, 0x71, 0x98, 0x69, 0xc5, 0x49, 0xc1, 0xcd, 0x63, 0xba, 0x8e,
+ 0x4b, 0x58, 0xb3, 0x40, 0x35, 0x7d, 0x22, 0x91, 0xc5, 0xba, 0xd1, 0x09,
+ 0xc3, 0xa9, 0x32, 0x88, 0x42, 0x05, 0x5e, 0xc8, 0x92, 0x22, 0x5d, 0x8e,
+ 0xa3, 0xda, 0x6a, 0xd6, 0x9a, 0x93, 0xb5, 0xed, 0xb1, 0x3a, 0x95, 0x92,
+ 0x4e, 0x2d, 0x12, 0x13, 0x54, 0x4e, 0x92, 0x8f, 0x94, 0x43, 0x93, 0x36,
+ 0x94, 0x8e, 0xe9, 0xda, 0xeb, 0x4f, 0x52, 0xd2, 0x32, 0x4b, 0xfe, 0x6d,
+ 0x5e, 0x4e, 0x67, 0xbd, 0x90, 0xfb, 0xbb, 0x1d, 0x9f, 0x27, 0xd7, 0x19,
+ 0xe9, 0xb8, 0x65, 0x93, 0xea, 0xc0, 0x6d, 0xc0, 0x6c, 0x44, 0x7a, 0x70,
+ 0xd4, 0x61, 0x72, 0x00, 0xc9, 0x10, 0xc4, 0x8c, 0xd9, 0xfe, 0x33, 0xe1,
+ 0xd3, 0x89, 0xa1, 0xd0, 0x28, 0x94, 0x9f, 0xd6, 0x79, 0x12, 0x44, 0x79,
+ 0x3a, 0x46, 0xc4, 0x79, 0x7a, 0x7c, 0x82, 0xc6, 0x10, 0xb0, 0x66, 0xf1,
+ 0x0a, 0x5b, 0x44, 0x02, 0x89, 0x13, 0x01, 0x46, 0x2c, 0xe9, 0xb3, 0x56,
+ 0x75, 0x9f, 0x8e, 0x45, 0xa0, 0xe6, 0x05, 0xa9, 0x33, 0x60, 0xd6, 0xe9,
+ 0xa7, 0x29, 0x3f, 0x37, 0x5b, 0x16, 0x10, 0xb6, 0xf9, 0xb2, 0x15, 0x3d,
+ 0xe4, 0x9e, 0xb6, 0xca, 0xb1, 0x5b, 0x88, 0x4c, 0x74, 0xdb, 0xb1, 0x24,
+ 0x17, 0xe7, 0x29, 0x94, 0xae, 0x46, 0x73, 0x32, 0x66, 0x9e, 0x26, 0xc6,
+ 0xa9, 0xc3, 0xe4, 0xd7, 0x55, 0xae, 0xf1, 0xf2, 0x0c, 0x0e, 0x16, 0xf3,
+ 0xa4, 0xe0, 0xe0, 0x8c, 0xe8, 0x34, 0x8b, 0x91, 0x30, 0x7a, 0xc9, 0x77,
+ 0xf6, 0x2b, 0x9e, 0xcb, 0x1a, 0x7e, 0x19, 0x9d, 0x43, 0xd5, 0xbb, 0xa9,
+ 0xca, 0x3c, 0x01, 0x63, 0x14, 0x55, 0x4e, 0x9a, 0x83, 0x5e, 0xcc, 0xc7,
+ 0x7d, 0xb9, 0xa8, 0x13, 0x2a, 0x11, 0x66, 0xc2, 0xbc, 0xd2, 0xb5, 0xb4,
+ 0xf0, 0xd7, 0x2d, 0x6d, 0x4d, 0x92, 0xde, 0xd1, 0xbc, 0xbd, 0x02, 0x25,
+ 0x4d, 0xc3, 0xb2, 0x11, 0x75, 0x86, 0x49, 0x59, 0x6f, 0xee, 0x10, 0xfd,
+ 0xed, 0x77, 0xa2, 0xc0, 0x44, 0x22, 0xed, 0xea, 0xda, 0xd1, 0x0a, 0xab,
+ 0x01, 0xe4, 0x8a, 0xd5, 0x91, 0x32, 0xea, 0xb0, 0x09, 0x7d, 0xf7, 0xd5,
+ 0xb7, 0x07, 0xa7, 0xef, 0x8e, 0x77, 0xff, 0x5c, 0xa7, 0x1e, 0xfa, 0x6e,
+ 0x4f, 0xbe, 0xdb, 0xeb, 0xb4, 0x71, 0x34, 0x92, 0x23, 0xba, 0xaf, 0xba,
+ 0xa4, 0xb1, 0xce, 0x46, 0x19, 0x6c, 0x9a, 0x76, 0x23, 0x83, 0x8b, 0xd1,
+ 0x10, 0x7a, 0x2a, 0xde, 0x97, 0x72, 0x01, 0xf2, 0xaa, 0xf0, 0xd8, 0xf9,
+ 0xf6, 0xac, 0x8f, 0x1d, 0x6a, 0x3e, 0xee, 0x64, 0xc8, 0x52, 0x4c, 0x02,
+ 0xf1, 0x24, 0x5c, 0x8f, 0xa2, 0xc4, 0x7d, 0xa8, 0x5b, 0xc4, 0xad, 0x8b,
+ 0x6e, 0xd9, 0x93, 0x73, 0x54, 0xe7, 0xf5, 0x6e, 0xc2, 0x7e, 0x4c, 0x60,
+ 0xb9, 0x05, 0xe4, 0xa3, 0x14, 0x74, 0x45, 0xba, 0x74, 0x5c, 0x8e, 0x6f,
+ 0x06, 0x74, 0xe7, 0x09, 0x4b, 0xe1, 0x43, 0x2e, 0xc7, 0xb3, 0xce, 0xef,
+ 0xf8, 0x46, 0x80, 0x51, 0xfb, 0x8e, 0x26, 0x52, 0x08, 0xed, 0x76, 0x74,
+ 0x2c, 0xa4, 0x0b, 0xd2, 0xd6, 0x74, 0xf4, 0x3c, 0x83, 0xb6, 0x60, 0x01,
+ 0x06, 0x9b, 0xe5, 0x13, 0x96, 0xd7, 0x9b, 0xa3, 0xa3, 0x93, 0xcd, 0xb8,
+ 0x4b, 0xb5, 0x4a, 0xb3, 0x7b, 0x41, 0xe7, 0x81, 0xe3, 0x44, 0xc3, 0x66,
+ 0xc5, 0x77, 0xa5, 0x67, 0xb2, 0x9b, 0x27, 0x7a, 0x80, 0x45, 0xc7, 0xad,
+ 0x53, 0x3e, 0x35, 0x36, 0x22, 0x61, 0x5b, 0xe4, 0x4d, 0x77, 0x5d, 0x11,
+ 0x4d, 0x9f, 0x12, 0x4d, 0x4f, 0x33, 0xe5, 0xe9, 0x5e, 0x70, 0x55, 0x3d,
+ 0x5e, 0x69, 0x20, 0xbb, 0x6a, 0x39, 0x97, 0xa2, 0xe8, 0xeb, 0x2e, 0xd8,
+ 0x28, 0xe5, 0x5c, 0xb9, 0x95, 0x25, 0xf5, 0x90, 0x6f, 0x5f, 0x90, 0xbd,
+ 0xf1, 0x5c, 0x36, 0x79, 0xb5, 0x34, 0xf7, 0x36, 0x29, 0x8b, 0x71, 0xbc,
+ 0x48, 0xb6, 0xf5, 0x46, 0xb7, 0x6d, 0x0c, 0xc6, 0xd1, 0x64, 0x5e, 0x67,
+ 0x97, 0xc7, 0x5e, 0x54, 0x4a, 0x54, 0x3e, 0xf3, 0x2a, 0xbc, 0xb0, 0xca,
+ 0xe0, 0xd8, 0x9a, 0xee, 0x8f, 0x1d, 0x8f, 0x1b, 0x02, 0xd5, 0x9c, 0x14,
+ 0xaa, 0x01, 0xb1, 0x44, 0x37, 0x1d, 0xbb, 0x5e, 0x95, 0xb2, 0xec, 0x64,
+ 0x50, 0x2f, 0x03, 0x16, 0x35, 0xf0, 0x71, 0xe4, 0x1c, 0x07, 0x75, 0x6e,
+ 0x63, 0x97, 0x5f, 0xd4, 0x1f, 0xbb, 0x21, 0xf4, 0xff, 0x1a, 0x7b, 0x59,
+ 0x40, 0xcd, 0xce, 0x58, 0x2d, 0x92, 0xed, 0xe7, 0x24, 0xfc, 0xde, 0x25,
+ 0x8e, 0x51, 0xb4, 0x5f, 0x59, 0x5e, 0xe1, 0x33, 0x8e, 0x7d, 0x44, 0x8d,
+ 0x4f, 0x96, 0xb3, 0x85, 0x4a, 0x1a, 0xbf, 0x6b, 0x39, 0x86, 0x20, 0x8a,
+ 0x5f, 0x2a, 0x56, 0x40, 0xbe, 0xf9, 0x25, 0x82, 0xc5, 0x97, 0x22, 0x56,
+ 0xf6, 0xe3, 0x62, 0x9c, 0xa6, 0xb5, 0xb7, 0x8e, 0xa1, 0x51, 0x45, 0xd1,
+ 0xc1, 0xf0, 0xf0, 0xe4, 0xc4, 0xdb, 0x1e, 0xee, 0x45, 0x4a, 0xe7, 0x79,
+ 0xb0, 0x7a, 0x49, 0x2b, 0xc2, 0x5e, 0xaa, 0x01, 0x4c, 0x78, 0x70, 0x44,
+ 0x95, 0x2a, 0x71, 0xb5, 0x9d, 0xb6, 0x11, 0x2b, 0x6a, 0x44, 0x1a, 0x63,
+ 0x11, 0x82, 0xa5, 0x19, 0x9a, 0x10, 0x5b, 0xc2, 0x40, 0x14, 0x74, 0x6b,
+ 0x15, 0xaa, 0x43, 0xfd, 0xb9, 0x5c, 0x2d, 0x92, 0x57, 0x07, 0x90, 0x11,
+ 0x6f, 0x1a, 0xa2, 0xb4, 0x69, 0x62, 0xe3, 0x98, 0xc6, 0x5f, 0x44, 0xca,
+ 0x11, 0x71, 0x3d, 0xf1, 0x2e, 0x4f, 0xd4, 0xf4, 0xa0, 0xcc, 0x91, 0xa4,
+ 0x02, 0x5a, 0xbe, 0x89, 0x68, 0xc5, 0x74, 0x0b, 0x3d, 0xd9, 0xab, 0xb3,
+ 0x96, 0x15, 0xdd, 0xff, 0xb3, 0x22, 0x94, 0xb9, 0x70, 0x5d, 0x7f, 0x8c,
+ 0xc4, 0xc5, 0x54, 0x83, 0xf3, 0xf2, 0x25, 0xbf, 0x51, 0x93, 0x13, 0x06,
+ 0x5e, 0xd2, 0x68, 0x6e, 0x8c, 0x99, 0x53, 0xf5, 0x32, 0xad, 0xec, 0xf8,
+ 0xb2, 0x58, 0xc2, 0xb4, 0xb4, 0x20, 0x81, 0xa9, 0x9c, 0x12, 0x8b, 0xeb,
+ 0x45, 0xcb, 0x39, 0xff, 0x74, 0xba, 0xa9, 0xd7, 0xda, 0xbd, 0xf2, 0xc3,
+ 0xba, 0x4d, 0x9e, 0xd2, 0x44, 0xe3, 0x28, 0xe4, 0xb3, 0x22, 0xf4, 0xda,
+ 0x9a, 0xc9, 0xf1, 0x63, 0xa7, 0x0c, 0x38, 0xf7, 0x24, 0x65, 0x17, 0x1e,
+ 0x0d, 0xb9, 0xbe, 0x63, 0x55, 0xf1, 0xd1, 0xe4, 0xc7, 0x68, 0xb3, 0x58,
+ 0xb2, 0x88, 0x43, 0x7c, 0xdf, 0x04, 0x18, 0x2f, 0xd2, 0xd0, 0xf2, 0x9a,
+ 0xec, 0x52, 0xbf, 0x0c, 0x88, 0xc7, 0x86, 0x1a, 0x4d, 0x7f, 0x9c, 0x2e,
+ 0x6e, 0xf8, 0x74, 0xbc, 0x84, 0x06, 0xcc, 0x52, 0xb6, 0x7c, 0xd0, 0xb8,
+ 0x9e, 0x87, 0xc3, 0x53, 0xd3, 0x66, 0x70, 0xc2, 0xc1, 0x51, 0xed, 0x6d,
+ 0x5d, 0xff, 0xd4, 0xbc, 0x09, 0x66, 0xe3, 0x14, 0x96, 0xc8, 0x4d, 0xd7,
+ 0x09, 0x87, 0x04, 0x3c, 0x7b, 0x59, 0x44, 0x14, 0x67, 0x51, 0x17, 0xbb,
+ 0xad, 0x7d, 0x3b, 0x88, 0x2e, 0x98, 0x4f, 0x2e, 0x17, 0x6c, 0x56, 0x84,
+ 0xeb, 0x11, 0x9f, 0xd7, 0x9a, 0xc3, 0xe0, 0x83, 0x0d, 0x85, 0xa7, 0xae,
+ 0x72, 0xf6, 0x2a, 0x5c, 0x33, 0x0d, 0xbf, 0x23, 0xaa, 0xdf, 0xaf, 0xb3,
+ 0x0c, 0xef, 0x12, 0x20, 0xc9, 0x66, 0x5e, 0x14, 0x53, 0x38, 0x61, 0x26,
+ 0xd9, 0xb8, 0xd8, 0x26, 0x85, 0xb7, 0xd8, 0xb6, 0xc1, 0x55, 0xdc, 0x2d,
+ 0xc6, 0x5c, 0x87, 0xc3, 0x60, 0x6e, 0x6c, 0x15, 0x11, 0xe1, 0xdb, 0x6d,
+ 0x30, 0xa4, 0x12, 0x3a, 0x6e, 0xa2, 0x60, 0x9e, 0x82, 0xec, 0xbe, 0x9a,
+ 0x2f, 0x2f, 0x4f, 0x87, 0x58, 0xae, 0xba, 0x64, 0xb8, 0x24, 0x96, 0x62,
+ 0x9b, 0xc3, 0x6d, 0x5b, 0xd3, 0xb8, 0xae, 0xe4, 0x0a, 0x18, 0x0e, 0x0f,
+ 0xf1, 0xe1, 0x70, 0xc9, 0x3a, 0x01, 0x75, 0x91, 0xaf, 0x22, 0x53, 0x83,
+ 0x6b, 0xcd, 0xf1, 0x6c, 0x6d, 0x7e, 0x62, 0xe8, 0xca, 0xf2, 0xd5, 0xe0,
+ 0x2a, 0x99, 0x64, 0x79, 0x3c, 0x20, 0x5e, 0x4d, 0x44, 0x09, 0xf7, 0x07,
+ 0xe6, 0x4a, 0x87, 0xf5, 0x3d, 0xcd, 0x1e, 0xd3, 0xfc, 0xe4, 0x88, 0x9f,
+ 0xae, 0x93, 0x13, 0xdd, 0xda, 0x49, 0xf1, 0x61, 0xc6, 0x89, 0x7b, 0xc3,
+ 0x7c, 0x60, 0x6c, 0x22, 0x2d, 0xda, 0x18, 0xa7, 0x1d, 0x9b, 0x96, 0x5b,
+ 0x0e, 0x76, 0xc7, 0x0a, 0x63, 0xa0, 0x41, 0x2e, 0xd8, 0xc8, 0x95, 0x4c,
+ 0xda, 0xb9, 0xc3, 0x85, 0xa9, 0x36, 0x91, 0x7f, 0xd2, 0x1b, 0xd4, 0xea,
+ 0x91, 0x04, 0xc4, 0x18, 0xaf, 0xb3, 0x9c, 0x38, 0xde, 0xac, 0x68, 0x90,
+ 0x96, 0x38, 0x90, 0x55, 0xbf, 0x2a, 0x7a, 0x6a, 0xc0, 0x2c, 0x97, 0xb9,
+ 0xac, 0xfe, 0x72, 0x1e, 0x74, 0x40, 0xcb, 0xb6, 0x9c, 0xc1, 0xe3, 0x6b,
+ 0xab, 0xb0, 0x86, 0x63, 0x7a, 0xa5, 0x07, 0x0a, 0x5f, 0x20, 0x84, 0x16,
+ 0xe0, 0xbe, 0x6c, 0x79, 0x99, 0xfb, 0xb8, 0x06, 0xe8, 0xe6, 0xac, 0x85,
+ 0xd7, 0xe5, 0x13, 0xe7, 0x6a, 0xc8, 0x13, 0x7e, 0x14, 0xca, 0x17, 0xa9,
+ 0xe9, 0x79, 0x75, 0xa9, 0x70, 0x1e, 0xfb, 0xbc, 0xf0, 0xcc, 0x91, 0x5f,
+ 0x92, 0x42, 0x99, 0x51, 0x27, 0xf5, 0x33, 0xfe, 0x26, 0x7e, 0x48, 0x67,
+ 0xcb, 0x19, 0x36, 0x88, 0x69, 0x4b, 0x1f, 0x13, 0x4e, 0xc5, 0xfc, 0x8e,
+ 0x58, 0x61, 0x76, 0xaf, 0x77, 0xb3, 0x3f, 0xe4, 0xce, 0xde, 0x53, 0xe7,
+ 0xe6, 0x32, 0x1f, 0xf9, 0x96, 0xa4, 0xb6, 0x81, 0x29, 0x7c, 0x66, 0x72,
+ 0x9b, 0xb1, 0xbf, 0xa7, 0xca, 0x30, 0xa2, 0xc5, 0x4d, 0x5c, 0xd0, 0xad,
+ 0xca, 0x77, 0x6b, 0xdb, 0x54, 0xe9, 0x5b, 0x7b, 0x3a, 0x69, 0x30, 0xeb,
+ 0x0c, 0x72, 0x33, 0x2e, 0x68, 0x5a, 0xda, 0x01, 0xfb, 0xf2, 0x4d, 0xbe,
+ 0x6c, 0xb1, 0x31, 0xcc, 0xe8, 0xd6, 0x9d, 0xc5, 0x0f, 0x58, 0x15, 0x93,
+ 0xe0, 0x7e, 0x2d, 0x4a, 0x56, 0xe1, 0x38, 0xd8, 0x84, 0x9a, 0x24, 0xf3,
+ 0x12, 0x82, 0x08, 0x4b, 0xe6, 0xf5, 0x4d, 0x70, 0x06, 0xa3, 0x4c, 0x79,
+ 0x2c, 0x9e, 0x74, 0x66, 0x71, 0xbb, 0xee, 0xc4, 0x9a, 0xcf, 0x76, 0x58,
+ 0x93, 0xb9, 0xe2, 0x2b, 0x58, 0xd7, 0x9b, 0x02, 0xec, 0x62, 0x9a, 0xf0,
+ 0x62, 0x39, 0x1d, 0x6d, 0xa0, 0x0e, 0x2a, 0x6e, 0xa1, 0xd0, 0x98, 0x08,
+ 0x6b, 0xa4, 0x72, 0x5d, 0xb1, 0x84, 0xda, 0xaa, 0xa7, 0xc6, 0x15, 0x7f,
+ 0x8f, 0x18, 0xf7, 0x62, 0xd8, 0x2d, 0xe1, 0xe5, 0x2c, 0x2a, 0xe3, 0xaa,
+ 0x68, 0x5b, 0xb5, 0xe6, 0xcc, 0x94, 0x01, 0x4a, 0xd9, 0x2c, 0xb6, 0x06,
+ 0xaa, 0xfb, 0xb8, 0x39, 0xd1, 0x56, 0xde, 0xce, 0xb3, 0x7b, 0xd2, 0x36,
+ 0xe7, 0x99, 0x74, 0x64, 0xeb, 0xcb, 0xc3, 0x6f, 0x70, 0xa3, 0x64, 0xae,
+ 0xaa, 0x99, 0x0e, 0xca, 0xc9, 0x63, 0xfc, 0x74, 0xe9, 0x44, 0xa6, 0x50,
+ 0x6e, 0x0e, 0xe5, 0xe5, 0xfa, 0x64, 0x45, 0x7a, 0x76, 0x2e, 0xdf, 0xa4,
+ 0xf4, 0x02, 0x3c, 0x94, 0x2a, 0xa6, 0x6c, 0xef, 0xe9, 0x22, 0xe9, 0xa7,
+ 0xb8, 0xe9, 0x91, 0xfe, 0xd8, 0xef, 0xf4, 0xda, 0x28, 0xae, 0x2e, 0x1c,
+ 0xdb, 0x98, 0x9c, 0xa8, 0xd4, 0x2e, 0xa7, 0xab, 0xa2, 0xae, 0xc3, 0x64,
+ 0xe2, 0x21, 0xb1, 0xae, 0x0b, 0x9d, 0x5e, 0xad, 0x9f, 0x7c, 0xdf, 0xfb,
+ 0xc6, 0x84, 0x1e, 0xef, 0x6f, 0xb2, 0x69, 0xeb, 0x09, 0x0a, 0x54, 0xf5,
+ 0x8c, 0x9b, 0x81, 0xfd, 0x90, 0x1a, 0x80, 0x1c, 0x5d, 0x63, 0x22, 0xd1,
+ 0x78, 0x9a, 0xc4, 0xf9, 0x74, 0xa5, 0x6a, 0x5c, 0xfd, 0x04, 0xdd, 0xd9,
+ 0x02, 0xc3, 0xc6, 0x1b, 0x13, 0x81, 0xe6, 0x73, 0x5e, 0x5e, 0xf5, 0x6f,
+ 0x59, 0x1c, 0x44, 0x29, 0xe6, 0x7c, 0xe1, 0xe3, 0x7c, 0xf2, 0xef, 0x52,
+ 0xb6, 0x19, 0x35, 0x56, 0x3b, 0x49, 0x26, 0xa3, 0x78, 0x7c, 0x8b, 0xb5,
+ 0xe6, 0x16, 0xd5, 0x73, 0x75, 0x83, 0x88, 0x1e, 0x35, 0x33, 0x11, 0x29,
+ 0xdf, 0xd0, 0xc1, 0x2b, 0xd2, 0x72, 0x19, 0xff, 0x8b, 0x27, 0x56, 0x8e,
+ 0x6c, 0x9d, 0x90, 0xdb, 0x74, 0xe7, 0x35, 0x47, 0xfa, 0x10, 0x47, 0x9a,
+ 0x44, 0xb3, 0xf9, 0x92, 0x64, 0x77, 0x62, 0xab, 0xd9, 0xd5, 0x15, 0xd1,
+ 0xc8, 0xe7, 0x0d, 0xd3, 0x81, 0x3c, 0xb2, 0x7d, 0x21, 0x61, 0x50, 0xa1,
+ 0x50, 0x18, 0x55, 0xdd, 0xbe, 0x7c, 0x69, 0xf3, 0xd0, 0xae, 0x53, 0xde,
+ 0x0c, 0x69, 0xae, 0x69, 0x32, 0xab, 0x7e, 0x6f, 0x2b, 0x2b, 0xfe, 0x11,
+ 0x8b, 0x9f, 0x82, 0x80, 0x35, 0x5a, 0xa9, 0x42, 0x1d, 0x97, 0xcd, 0x68,
+ 0x0e, 0x63, 0xd2, 0xb7, 0xe9, 0x62, 0xc1, 0x3b, 0x25, 0x61, 0x18, 0x30,
+ 0xb8, 0x39, 0xb3, 0xc8, 0x28, 0xb9, 0x4e, 0xe7, 0xd8, 0x52, 0x73, 0x32,
+ 0x64, 0x4b, 0xd2, 0x1a, 0x64, 0xd0, 0xa3, 0x84, 0xce, 0x47, 0xbd, 0x39,
+ 0x33, 0x4a, 0x78, 0xb7, 0xa9, 0x5a, 0x70, 0x26, 0xec, 0x22, 0x9d, 0x2b,
+ 0xff, 0xe1, 0x5d, 0xc2, 0xb6, 0x40, 0xc7, 0x50, 0x8b, 0x58, 0xaf, 0xe5,
+ 0xc8, 0xbc, 0xf6, 0x66, 0x1f, 0x73, 0x6d, 0x0c, 0x4f, 0xfe, 0xf7, 0xb1,
+ 0x77, 0x72, 0x3b, 0x2f, 0xf2, 0x0a, 0xd4, 0xdd, 0x20, 0x87, 0x77, 0xac,
+ 0x4b, 0x76, 0xfa, 0x87, 0xb4, 0x5d, 0x1d, 0x0c, 0xa5, 0xe2, 0xbb, 0x58,
+ 0x96, 0x19, 0x1d, 0x70, 0x8d, 0x07, 0x40, 0x6c, 0x16, 0x53, 0x1c, 0xe9,
+ 0x56, 0x79, 0xb2, 0x0d, 0x07, 0x50, 0xd6, 0xe0, 0x57, 0xd8, 0x42, 0xb8,
+ 0xe1, 0x74, 0x8e, 0xb0, 0x41, 0x95, 0xea, 0x34, 0x29, 0x82, 0xed, 0x53,
+ 0x47, 0xe3, 0x36, 0xb4, 0x63, 0xf5, 0x93, 0x37, 0x55, 0x05, 0x35, 0x14,
+ 0x8b, 0x57, 0xb0, 0x85, 0x05, 0xfc, 0x7a, 0x37, 0x50, 0x5f, 0xb8, 0x05,
+ 0x29, 0x09, 0x79, 0x7d, 0x1c, 0xf0, 0xf9, 0x38, 0x1b, 0x2c, 0xee, 0xf6,
+ 0xbf, 0x92, 0x58, 0xa3, 0x06, 0x3d, 0xda, 0x22, 0x78, 0xc2, 0xcc, 0xb5,
+ 0xd5, 0x0b, 0xa4, 0x0e, 0x69, 0xb3, 0x45, 0x60, 0xa3, 0x1b, 0x9a, 0x24,
+ 0xa2, 0x98, 0x63, 0x26, 0x32, 0x5a, 0xdf, 0xc8, 0xc9, 0x9a, 0xd1, 0x4d,
+ 0x4a, 0x23, 0xcf, 0xc7, 0x37, 0x2b, 0xbe, 0x28, 0xd8, 0xfc, 0x08, 0xf7,
+ 0xcd, 0x65, 0x60, 0xc1, 0xaf, 0xb3, 0x2d, 0xf4, 0xa1, 0x96, 0x21, 0x1e,
+ 0x7d, 0xc4, 0x12, 0x16, 0x3d, 0x67, 0x04, 0x54, 0x1b, 0x1d, 0xd1, 0xc5,
+ 0x0d, 0xd3, 0x6c, 0x32, 0x65, 0x21, 0xe0, 0xa4, 0xcd, 0x06, 0xd3, 0xcf,
+ 0x02, 0x2e, 0x8e, 0x7d, 0xa3, 0xeb, 0x85, 0x9a, 0x66, 0x46, 0x28, 0x06,
+ 0x2c, 0xe9, 0x88, 0x6d, 0xb0, 0xd2, 0x17, 0x2e, 0x4a, 0xbe, 0x10, 0x57,
+ 0xb5, 0xe6, 0xd4, 0x29, 0xa5, 0xef, 0xdb, 0xda, 0x9b, 0x5f, 0xaa, 0xbe,
+ 0x9d, 0xec, 0x67, 0x91, 0xef, 0xec, 0xee, 0xb3, 0x85, 0x11, 0xa5, 0xaa,
+ 0xae, 0xd5, 0x4b, 0x54, 0x29, 0xcb, 0xf3, 0xfd, 0xfe, 0x55, 0xd9, 0xb0,
+ 0x72, 0x06, 0x5b, 0x5a, 0xdd, 0xe9, 0xe9, 0x15, 0x7c, 0x7a, 0x5b, 0xcc,
+ 0x7d, 0x88, 0x52, 0xca, 0xe8, 0xf4, 0x35, 0x53, 0xdb, 0xe1, 0x05, 0xfd,
+ 0x4c, 0xcd, 0xa9, 0xc7, 0x6c, 0x1d, 0x21, 0xa2, 0xac, 0x8f, 0xbf, 0xf9,
+ 0x76, 0x18, 0x6d, 0x9e, 0x0d, 0xb7, 0x9f, 0xbc, 0xd8, 0xd9, 0xaa, 0xb7,
+ 0xc5, 0x4b, 0x05, 0x89, 0xa5, 0xd5, 0x68, 0x3b, 0xdc, 0xe6, 0xc8, 0xda,
+ 0x2d, 0x8e, 0x7e, 0xbe, 0x13, 0xa5, 0x37, 0xb0, 0xb2, 0x9c, 0x1f, 0xbf,
+ 0x31, 0x6b, 0x18, 0xf6, 0x8a, 0x98, 0xdf, 0x21, 0x8d, 0x87, 0x8d, 0xf9,
+ 0x4d, 0xc2, 0xb9, 0x48, 0xee, 0xcc, 0xa4, 0x16, 0x9d, 0x42, 0xa5, 0xc3,
+ 0xb9, 0x60, 0xbb, 0x9d, 0x69, 0x87, 0x8b, 0x84, 0x79, 0x81, 0x6f, 0x41,
+ 0xa5, 0x53, 0x16, 0x14, 0x1a, 0xa7, 0x75, 0x04, 0xc9, 0xb2, 0xa0, 0x31,
+ 0xe5, 0x90, 0xfd, 0x39, 0x72, 0x62, 0xf2, 0xdb, 0x9d, 0x30, 0x5b, 0x93,
+ 0x03, 0x38, 0x7b, 0x69, 0x95, 0xe1, 0xea, 0xfd, 0x34, 0xf0, 0xbf, 0x4e,
+ 0xd8, 0xe2, 0xc4, 0x26, 0x92, 0x97, 0x8f, 0x58, 0xc0, 0x87, 0x89, 0xc8,
+ 0xdc, 0xa1, 0x41, 0x0e, 0x2f, 0xc1, 0x3a, 0x8d, 0xe0, 0x07, 0x73, 0xdb,
+ 0x78, 0x47, 0x6b, 0x8b, 0xdd, 0xcb, 0x82, 0xa6, 0x9d, 0x1f, 0x4f, 0x5c,
+ 0xc4, 0x74, 0x4b, 0xaf, 0x74, 0x5d, 0xe3, 0x68, 0x94, 0x67, 0xf7, 0x1c,
+ 0x03, 0x8c, 0x28, 0x04, 0x50, 0x5f, 0x2c, 0x41, 0xc1, 0x37, 0x0d, 0x23,
+ 0x1f, 0xed, 0xe9, 0xd4, 0x39, 0x85, 0xbf, 0xbe, 0x7c, 0x73, 0x8a, 0x6d,
+ 0x85, 0xf6, 0x22, 0xca, 0x8f, 0x8e, 0x79, 0x39, 0x22, 0xb1, 0x9e, 0xef,
+ 0xfd, 0xd2, 0x99, 0x5d, 0x2a, 0x11, 0xbc, 0x46, 0xb9, 0x31, 0xa2, 0xa1,
+ 0x94, 0x13, 0x2f, 0xda, 0x8c, 0xfe, 0xca, 0xf8, 0xbd, 0xc8, 0xc6, 0x97,
+ 0x2d, 0x9d, 0xc6, 0x3e, 0x9b, 0xa4, 0xea, 0x66, 0x8d, 0xc5, 0x62, 0xaa,
+ 0x26, 0x92, 0xed, 0x87, 0x3e, 0x29, 0xee, 0x7d, 0x1e, 0x5d, 0x9f, 0x9a,
+ 0x17, 0xaf, 0x26, 0xb3, 0x98, 0x43, 0x12, 0x85, 0x85, 0x4e, 0xa2, 0xfe,
+ 0x6b, 0xda, 0x09, 0x7e, 0xa2, 0xb1, 0x7b, 0x7e, 0x8f, 0xf4, 0x5e, 0x95,
+ 0x45, 0x63, 0xe9, 0x56, 0x3e, 0x17, 0x2b, 0x9d, 0xba, 0x4c, 0x17, 0xf0,
+ 0xdb, 0xe3, 0xf1, 0x68, 0x41, 0x7c, 0x7c, 0x5a, 0xe7, 0x0e, 0x6c, 0x3c,
+ 0xce, 0x57, 0x12, 0xc9, 0xa0, 0xe6, 0x5d, 0x73, 0x72, 0x59, 0x60, 0x83,
+ 0x36, 0x2b, 0x4f, 0x7a, 0x53, 0x72, 0xc6, 0xaa, 0x7a, 0xfd, 0xbc, 0xab,
+ 0x8b, 0x96, 0x5f, 0xbb, 0x8b, 0xa7, 0x4b, 0x68, 0xaf, 0xb1, 0x6c, 0x84,
+ 0xf8, 0x7d, 0x11, 0x37, 0x18, 0xc3, 0x50, 0x6b, 0x0d, 0xbb, 0x35, 0x68,
+ 0xa3, 0x7c, 0x8e, 0x32, 0x91, 0xbb, 0xbd, 0x48, 0x5c, 0xfc, 0x81, 0x1d,
+ 0x81, 0xaa, 0xa9, 0xd3, 0x62, 0x45, 0x65, 0x41, 0xe8, 0x3a, 0xae, 0x0f,
+ 0x0e, 0xd7, 0xb3, 0x3a, 0x27, 0x84, 0xe0, 0x74, 0x61, 0x52, 0xbe, 0x0b,
+ 0x2a, 0xe6, 0x65, 0x39, 0x3e, 0xb3, 0x24, 0xbf, 0x86, 0x84, 0x40, 0xd2,
+ 0x5e, 0xd3, 0xa6, 0xa3, 0xec, 0x42, 0x03, 0xc2, 0x20, 0x98, 0xfc, 0xa1,
+ 0x2f, 0x0e, 0x11, 0xdc, 0x17, 0x4b, 0xf6, 0x42, 0x0a, 0x71, 0x44, 0xdd,
+ 0xfe, 0x44, 0x64, 0xb5, 0x57, 0x93, 0x78, 0x4e, 0x0b, 0xc1, 0xfb, 0xd8,
+ 0x14, 0x74, 0xa6, 0xd3, 0x57, 0x53, 0x12, 0xba, 0x56, 0xdd, 0x48, 0x43,
+ 0x97, 0x34, 0xa0, 0xa5, 0x54, 0xa1, 0x0c, 0x9b, 0x39, 0xbe, 0x59, 0xce,
+ 0x6f, 0x4d, 0x68, 0x9a, 0x92, 0xd0, 0x5d, 0x44, 0x88, 0x9d, 0xaf, 0x35,
+ 0xd7, 0x0d, 0x7a, 0xfb, 0x43, 0xd8, 0x76, 0xdb, 0x2a, 0x63, 0xf7, 0x39,
+ 0x68, 0xd2, 0xd3, 0xb8, 0xbb, 0xb8, 0x24, 0xe6, 0x34, 0xfa, 0xa2, 0x67,
+ 0x7e, 0xd7, 0xd2, 0xb9, 0x58, 0x60, 0x48, 0x8e, 0x9b, 0xe7, 0x30, 0x09,
+ 0x7c, 0x3a, 0xf0, 0x22, 0xb8, 0x56, 0xc5, 0x6b, 0xc3, 0xe6, 0x3f, 0xf3,
+ 0x39, 0x56, 0x94, 0xc6, 0x16, 0x85, 0xae, 0xf2, 0xaa, 0x78, 0xf6, 0x5c,
+ 0x7e, 0x02, 0x4e, 0x5b, 0x61, 0xb2, 0x1f, 0x3a, 0x16, 0x53, 0x9d, 0xde,
+ 0x84, 0x2d, 0xe2, 0x24, 0xd3, 0xac, 0x3f, 0x71, 0x6f, 0xc2, 0xe0, 0xc6,
+ 0x6a, 0x00, 0x80, 0xa3, 0x86, 0x41, 0x74, 0x9e, 0x15, 0xd8, 0x5e, 0x1e,
+ 0x46, 0x9b, 0xba, 0x19, 0xfb, 0xbb, 0x7a, 0x12, 0x75, 0xaf, 0xb2, 0x6c,
+ 0x14, 0xe7, 0x5d, 0xdd, 0x41, 0x78, 0xa1, 0xa9, 0xb9, 0x89, 0xb0, 0x65,
+ 0x78, 0x78, 0x85, 0xea, 0xbe, 0xa0, 0x07, 0xeb, 0x14, 0x3a, 0x8a, 0x2b,
+ 0x76, 0x91, 0xf0, 0xdc, 0x3d, 0xc6, 0x91, 0x95, 0x8b, 0x31, 0x7d, 0x68,
+ 0xb8, 0x1e, 0x84, 0xed, 0x29, 0x24, 0x98, 0x9a, 0xd7, 0x84, 0xe4, 0x00,
+ 0x71, 0x7e, 0x2f, 0xf2, 0x46, 0xf7, 0x2c, 0x11, 0x21, 0x4c, 0x82, 0x68,
+ 0xab, 0xc8, 0x92, 0xbb, 0x30, 0x3a, 0xfa, 0xb7, 0x23, 0x16, 0x5e, 0x37,
+ 0x36, 0xbd, 0x1c, 0x61, 0x59, 0x6c, 0x22, 0x2e, 0x8e, 0x5b, 0x42, 0xd9,
+ 0x2c, 0x88, 0x1b, 0xe6, 0x64, 0xcf, 0xe6, 0x5a, 0x02, 0x71, 0x7a, 0x34,
+ 0x3f, 0x44, 0x3c, 0xe1, 0x84, 0xcc, 0x93, 0x7b, 0xf1, 0x17, 0xc2, 0xce,
+ 0xc9, 0x17, 0x01, 0x33, 0x6d, 0xb3, 0x6a, 0x8d, 0x21, 0x7c, 0x14, 0x2a,
+ 0x3e, 0x35, 0x94, 0x85, 0x39, 0x2f, 0x01, 0xb6, 0xee, 0xc3, 0x41, 0x1d,
+ 0xde, 0x60, 0xd6, 0x72, 0x31, 0x23, 0xaa, 0xfe, 0x2a, 0x63, 0xeb, 0x94,
+ 0xde, 0x15, 0x8d, 0x75, 0xe0, 0xa8, 0x07, 0x09, 0xc9, 0x45, 0xc0, 0x92,
+ 0xac, 0x6b, 0x5c, 0x68, 0x06, 0xc6, 0x48, 0x96, 0xc3, 0x31, 0xff, 0x06,
+ 0x95, 0x38, 0x26, 0xfa, 0x28, 0xa1, 0x5c, 0xaa, 0xae, 0xaa, 0x64, 0xd2,
+ 0x73, 0xab, 0xab, 0x37, 0x9a, 0x44, 0x66, 0x2b, 0x85, 0x1a, 0xb7, 0xe5,
+ 0xcd, 0x6d, 0x39, 0x94, 0xb2, 0xca, 0x29, 0x98, 0x6e, 0x6c, 0x6a, 0x70,
+ 0x92, 0x33, 0xaf, 0x2f, 0xfc, 0x31, 0xa3, 0xe9, 0x0e, 0xaa, 0x12, 0xc7,
+ 0x67, 0x83, 0x9d, 0xad, 0x16, 0xa1, 0x73, 0x24, 0x01, 0x43, 0x30, 0x9b,
+ 0x4e, 0x53, 0x62, 0x0a, 0xca, 0xa3, 0x65, 0x3a, 0x92, 0x21, 0xe2, 0xfc,
+ 0x8f, 0xa4, 0xf5, 0x19, 0xfb, 0x0d, 0x63, 0xec, 0x9c, 0x59, 0x84, 0x17,
+ 0x5a, 0x94, 0x2e, 0xc7, 0x9f, 0x33, 0x09, 0xec, 0x8c, 0x8d, 0x6d, 0xb8,
+ 0x90, 0x8d, 0xd8, 0xfb, 0x01, 0xda, 0xd7, 0x0e, 0x5d, 0x33, 0x6b, 0x60,
+ 0xbf, 0x67, 0x0c, 0x2b, 0x2a, 0x2d, 0x17, 0x58, 0x56, 0xc3, 0x4a, 0xeb,
+ 0xf7, 0x58, 0xd2, 0x6d, 0x92, 0x62, 0x7f, 0xa3, 0x61, 0x65, 0x41, 0xff,
+ 0xed, 0x79, 0x6f, 0x5e, 0x1c, 0x09, 0xfc, 0xc8, 0x9e, 0x67, 0x85, 0x52,
+ 0x86, 0x48, 0x36, 0x22, 0x97, 0xc4, 0x6b, 0x9a, 0xe3, 0x89, 0xfd, 0xa7,
+ 0xc6, 0x57, 0x8c, 0x89, 0xbe, 0x59, 0x96, 0x2e, 0x32, 0xdb, 0x30, 0xdf,
+ 0x94, 0x8b, 0x60, 0xc3, 0x27, 0x71, 0xc3, 0xcb, 0xec, 0x42, 0x7f, 0x88,
+ 0xa5, 0xbe, 0x42, 0x6a, 0x43, 0xf4, 0x45, 0xa4, 0xce, 0x7f, 0x36, 0x38,
+ 0xab, 0x90, 0xeb, 0x33, 0x00, 0x30, 0x78, 0x5c, 0xc6, 0x58, 0x86, 0xf6,
+ 0xe6, 0xe0, 0x81, 0x0f, 0x57, 0x4f, 0xc8, 0x8f, 0xe3, 0x52, 0x0b, 0x49,
+ 0xb9, 0x6a, 0xb8, 0x3c, 0x5f, 0x7d, 0x78, 0xf5, 0x7e, 0xe1, 0xe2, 0x7d,
+ 0x60, 0xf5, 0x2e, 0x11, 0x65, 0x4c, 0xf2, 0x01, 0xa2, 0x4b, 0x5e, 0x05,
+ 0x01, 0x0f, 0xac, 0xdd, 0x4b, 0x30, 0x9e, 0x77, 0x20, 0x57, 0x8f, 0x66,
+ 0x60, 0xa2, 0x79, 0xf5, 0xab, 0xed, 0x3a, 0xa8, 0xd1, 0x46, 0xdf, 0xde,
+ 0x9c, 0xe8, 0xea, 0xf3, 0x41, 0x10, 0x03, 0x04, 0x8d, 0x17, 0xd9, 0x14,
+ 0xfc, 0x3a, 0xf5, 0x96, 0x3c, 0x2c, 0xd4, 0x44, 0xad, 0x67, 0xaf, 0x45,
+ 0x98, 0xab, 0xc8, 0x74, 0x13, 0xbb, 0x54, 0x1b, 0xf3, 0xfb, 0xc2, 0x98,
+ 0xf8, 0x07, 0x27, 0x27, 0xb3, 0xd3, 0xa0, 0x70, 0xc4, 0xe5, 0xa8, 0x04,
+ 0x26, 0x56, 0x5b, 0x88, 0x64, 0x62, 0x9b, 0x68, 0xb1, 0x74, 0x19, 0x27,
+ 0xf3, 0x01, 0x90, 0x4c, 0x8e, 0xc6, 0xdf, 0xb7, 0x7a, 0xd5, 0x05, 0xa3,
+ 0x39, 0x4b, 0xd3, 0xe0, 0xf3, 0xeb, 0xd7, 0x2a, 0xe5, 0x95, 0xb2, 0xed,
+ 0x63, 0xdd, 0xa5, 0x75, 0xfb, 0xfe, 0x4f, 0x9f, 0x22, 0xfc, 0x8b, 0x4e,
+ 0xcd, 0xc2, 0x34, 0xd5, 0x0c, 0xed, 0x89, 0xe2, 0x9a, 0x1d, 0xbd, 0x6c,
+ 0x58, 0xfd, 0xdb, 0x12, 0x06, 0xcc, 0xeb, 0x75, 0x4c, 0x00, 0xf7, 0x13,
+ 0x5b, 0xe4, 0xd8, 0xd8, 0x34, 0x85, 0x64, 0x44, 0x4d, 0x83, 0xca, 0xbd,
+ 0x3a, 0xd3, 0x47, 0xa0, 0x8f, 0x12, 0xad, 0x50, 0xe2, 0x23, 0xc4, 0xea,
+ 0xc8, 0xb3, 0x46, 0x99, 0xa3, 0x24, 0x14, 0xd8, 0x9a, 0x14, 0x68, 0x1e,
+ 0xe5, 0xf6, 0xdb, 0x4e, 0x42, 0x13, 0x0a, 0xf1, 0xba, 0x1f, 0xe1, 0xc1,
+ 0xb5, 0x6e, 0xf7, 0x38, 0xf8, 0xa6, 0xe9, 0x43, 0xb4, 0x4b, 0x8e, 0xcd,
+ 0xa2, 0x10, 0x39, 0x91, 0x7c, 0x40, 0x2b, 0x7e, 0x9f, 0xe5, 0x1a, 0xa5,
+ 0x35, 0x4a, 0xc0, 0xf5, 0xf9, 0x88, 0xb2, 0x9b, 0x50, 0x6c, 0xdc, 0x1c,
+ 0x17, 0xd7, 0x0c, 0xd9, 0x61, 0x9b, 0x75, 0x84, 0x68, 0x83, 0x81, 0x1a,
+ 0x00, 0x35, 0xb6, 0xa7, 0x12, 0xcd, 0xe3, 0x64, 0x2a, 0x49, 0x1f, 0x89,
+ 0xfa, 0x4b, 0x0d, 0xee, 0x6d, 0x77, 0xd8, 0x21, 0x52, 0x57, 0x13, 0x72,
+ 0xb1, 0x94, 0xc6, 0x23, 0x78, 0x88, 0xe2, 0x6a, 0x82, 0x68, 0xeb, 0x9d,
+ 0xf1, 0x6b, 0xfd, 0xef, 0x78, 0xd5, 0xc7, 0x0b, 0xb2, 0xf1, 0xc5, 0x32,
+ 0x51, 0x55, 0x26, 0x58, 0x2f, 0x0e, 0x7d, 0xd8, 0x48, 0xe1, 0xaf, 0xc8,
+ 0x6c, 0x4c, 0xc7, 0x24, 0x47, 0x8e, 0x62, 0x43, 0x53, 0xbb, 0x4d, 0xc4,
+ 0x62, 0x25, 0x2e, 0xe9, 0x71, 0x52, 0xdd, 0x73, 0x44, 0xe6, 0xf7, 0x93,
+ 0x45, 0x5e, 0xb6, 0xc4, 0x89, 0x4b, 0xe0, 0x85, 0xd3, 0x29, 0xf4, 0x69,
+ 0x71, 0x85, 0xfa, 0x70, 0xf4, 0xe3, 0xf3, 0x0b, 0x49, 0x79, 0x3e, 0xe5,
+ 0x5f, 0xd4, 0x78, 0x5b, 0x1f, 0x07, 0x2c, 0x0e, 0x1a, 0x8b, 0xca, 0x01,
+ 0x60, 0x09, 0xcc, 0x5e, 0x2e, 0x09, 0x6a, 0x10, 0x64, 0x52, 0xb9, 0x24,
+ 0x9f, 0x78, 0x7a, 0xcf, 0xa9, 0x33, 0x90, 0xe8, 0x1a, 0x6b, 0xeb, 0xb2,
+ 0xad, 0x78, 0x24, 0x3c, 0x84, 0x9e, 0xdc, 0x97, 0x18, 0x84, 0x18, 0xac,
+ 0xcd, 0x2e, 0x75, 0xc6, 0x5f, 0xb2, 0x7b, 0xc2, 0xa2, 0xba, 0xd6, 0xb8,
+ 0x6a, 0x7b, 0x72, 0xc2, 0x85, 0xfb, 0x70, 0xb3, 0xfc, 0x66, 0x94, 0x23,
+ 0x37, 0x2f, 0xa6, 0xa1, 0x0c, 0x6a, 0x53, 0x45, 0x1a, 0xc4, 0x43, 0x19,
+ 0x64, 0x54, 0x9b, 0x02, 0x0a, 0x69, 0xcf, 0x24, 0x41, 0x6a, 0x00, 0x89,
+ 0x3e, 0x3c, 0x61, 0x4b, 0xd5, 0x13, 0xd7, 0x32, 0xf4, 0x77, 0x5c, 0x7f,
+ 0x92, 0x0b, 0x2e, 0xf9, 0x54, 0x0d, 0x03, 0x8a, 0x46, 0xac, 0x9b, 0x8b,
+ 0x25, 0x59, 0x69, 0xf2, 0x85, 0x68, 0xed, 0x57, 0x6a, 0xbe, 0x8d, 0xa7,
+ 0x69, 0xb9, 0x12, 0x49, 0x7f, 0x24, 0xba, 0x03, 0x9b, 0x7f, 0x58, 0xa7,
+ 0x6f, 0x11, 0x39, 0x69, 0xe1, 0x27, 0xa9, 0xbc, 0x25, 0xb3, 0xd4, 0x6d,
+ 0x6b, 0x1a, 0x49, 0x40, 0x1b, 0x26, 0xb4, 0x2d, 0x55, 0x64, 0x23, 0xce,
+ 0x32, 0x4d, 0xc7, 0x29, 0xeb, 0x45, 0x3a, 0x14, 0x59, 0x19, 0xce, 0xfa,
+ 0x50, 0x9a, 0x9f, 0x67, 0x6d, 0x54, 0x95, 0x82, 0x31, 0xd2, 0x50, 0x63,
+ 0xc9, 0x89, 0xab, 0x92, 0x60, 0xa3, 0xf7, 0x23, 0x7c, 0x09, 0xbd, 0x1f,
+ 0x1d, 0xc0, 0xa7, 0x34, 0xbe, 0xd1, 0xac, 0x51, 0xf6, 0xe5, 0x0b, 0x2d,
+ 0x8d, 0x92, 0x9b, 0xf8, 0x2e, 0xcd, 0xf2, 0x41, 0x25, 0xaf, 0xa8, 0x61,
+ 0x25, 0x2c, 0x88, 0x00, 0x48, 0x4e, 0x52, 0x2b, 0x14, 0xbf, 0x88, 0x18,
+ 0x25, 0x97, 0x4f, 0x84, 0x2b, 0x1c, 0xdb, 0x81, 0xc0, 0xb4, 0xfe, 0xf9,
+ 0xb6, 0x98, 0x62, 0xe1, 0x29, 0x6b, 0xc6, 0xe4, 0x21, 0xae, 0xca, 0xe5,
+ 0xa0, 0xe8, 0xa3, 0x71, 0x71, 0xd7, 0x7e, 0xc2, 0x8a, 0xbb, 0xd6, 0x13,
+ 0x26, 0x47, 0xcc, 0xa7, 0x77, 0xb9, 0x53, 0xd6, 0x3c, 0x66, 0xc3, 0x6f,
+ 0x9d, 0x6b, 0xa4, 0x25, 0x72, 0x57, 0x0e, 0x97, 0x4d, 0xac, 0xed, 0x74,
+ 0x29, 0x65, 0xbb, 0xf3, 0x65, 0x07, 0xec, 0xd1, 0x13, 0xe6, 0xa2, 0x49,
+ 0xd1, 0xbf, 0x1e, 0xac, 0xf3, 0x83, 0xe1, 0xb7, 0xc1, 0x91, 0x0a, 0xf8,
+ 0x95, 0xcb, 0xd9, 0xa8, 0xdf, 0xfd, 0x9c, 0x2f, 0x95, 0x5b, 0x04, 0x1a,
+ 0xb7, 0xd5, 0x4a, 0x6a, 0xc5, 0xdd, 0x3f, 0x4b, 0x6a, 0x8d, 0xe5, 0x7d,
+ 0x8c, 0xd4, 0xc2, 0x3d, 0x6a, 0x90, 0x1a, 0x26, 0xda, 0xa0, 0x34, 0x5b,
+ 0xd8, 0x5f, 0x4c, 0x6a, 0x4a, 0xa2, 0x55, 0x4a, 0x53, 0xbe, 0x55, 0xa1,
+ 0xb0, 0x80, 0x6c, 0x6a, 0xf1, 0x8a, 0xed, 0x16, 0xf9, 0xef, 0x10, 0x17,
+ 0xa0, 0xc9, 0x7b, 0x92, 0x4c, 0x1c, 0x04, 0x40, 0x56, 0xad, 0xca, 0x88,
+ 0xc7, 0xdc, 0x68, 0x0b, 0xc9, 0xf7, 0xd7, 0x8c, 0x04, 0xcb, 0xba, 0x7c,
+ 0x5c, 0xe2, 0xa5, 0xc1, 0xf4, 0x2c, 0x90, 0x13, 0x62, 0x8f, 0x76, 0xb3,
+ 0xd1, 0x22, 0x7f, 0xb0, 0x75, 0x4d, 0x62, 0x59, 0x91, 0xb4, 0x20, 0x11,
+ 0x2e, 0xf4, 0x3a, 0x35, 0x35, 0xd0, 0xd0, 0xea, 0x20, 0x9b, 0xd5, 0xc6,
+ 0x8b, 0xf8, 0xce, 0x26, 0x9b, 0x9a, 0x8b, 0x40, 0x0d, 0xc3, 0x17, 0x84,
+ 0x2e, 0xf6, 0xc0, 0x23, 0x52, 0xc5, 0xe1, 0x8a, 0xcc, 0xbd, 0x1b, 0x81,
+ 0x71, 0x10, 0xd4, 0x48, 0xd8, 0x16, 0x04, 0x12, 0xc4, 0xb8, 0xca, 0x9c,
+ 0x7f, 0x07, 0xb9, 0x6d, 0x4d, 0xe0, 0x29, 0xaf, 0x87, 0x64, 0x93, 0x09,
+ 0x3f, 0x6d, 0xc6, 0x1f, 0x28, 0x7f, 0xb5, 0x95, 0x51, 0x97, 0x7f, 0x63,
+ 0x91, 0x2b, 0x49, 0x56, 0x1a, 0xaf, 0x99, 0x84, 0xde, 0x4e, 0x17, 0xa8,
+ 0x24, 0xd6, 0x15, 0x31, 0xaf, 0x78, 0x67, 0x46, 0xc3, 0xd1, 0xc1, 0x13,
+ 0xec, 0xe8, 0xc2, 0x75, 0x34, 0x90, 0x71, 0x29, 0x56, 0x19, 0x8e, 0x8d,
+ 0x85, 0x89, 0x30, 0x4f, 0x7e, 0x43, 0xef, 0x62, 0x42, 0x0b, 0x86, 0xfc,
+ 0x43, 0x26, 0x4c, 0x12, 0x2a, 0xd7, 0x99, 0xd2, 0xbc, 0x77, 0xa3, 0x73,
+ 0xa1, 0x8f, 0x9f, 0xc7, 0xd7, 0x09, 0x67, 0x29, 0x8a, 0x9b, 0x48, 0x85,
+ 0xad, 0x0f, 0xa4, 0x43, 0x35, 0x12, 0x8a, 0x58, 0x38, 0xf3, 0xce, 0xc0,
+ 0x20, 0x7f, 0x08, 0x49, 0x60, 0x3e, 0x7b, 0x48, 0x17, 0xbf, 0x19, 0x72,
+ 0x3c, 0x51, 0x8b, 0x73, 0x35, 0xb2, 0xdb, 0x30, 0x1c, 0xd4, 0x6a, 0xd4,
+ 0xf9, 0x33, 0xfb, 0x8c, 0x3b, 0x36, 0x40, 0x37, 0xe5, 0xa6, 0x15, 0x94,
+ 0x1f, 0xf1, 0xca, 0x66, 0xd5, 0xd3, 0x6c, 0x81, 0x24, 0x2e, 0x0a, 0x00,
+ 0x20, 0x02, 0x4c, 0x12, 0xc4, 0x26, 0x49, 0x7e, 0xab, 0x93, 0x15, 0xc9,
+ 0x73, 0x12, 0x23, 0x7a, 0xaa, 0xc3, 0xda, 0xd7, 0x33, 0x22, 0xfa, 0xb3,
+ 0x0d, 0x4a, 0x93, 0xb0, 0x42, 0x56, 0x19, 0x4f, 0x19, 0xbd, 0xa3, 0xee,
+ 0x44, 0x60, 0xf5, 0x48, 0xcd, 0xc3, 0x13, 0xc4, 0x80, 0xf0, 0x80, 0x62,
+ 0x56, 0xd3, 0x52, 0x00, 0x3a, 0xb8, 0x69, 0xfd, 0x96, 0xde, 0xe8, 0x64,
+ 0x7e, 0xcd, 0x49, 0x8a, 0x2f, 0x5b, 0x63, 0xa0, 0x92, 0xa9, 0xa5, 0xed,
+ 0x5a, 0x90, 0xe4, 0x38, 0x5f, 0x2d, 0x98, 0xf1, 0xcb, 0x5b, 0xca, 0x8f,
+ 0x00, 0x4c, 0x20, 0xf1, 0x90, 0x61, 0x6e, 0xf7, 0xa0, 0x2d, 0x08, 0xc0,
+ 0xf5, 0xa8, 0xc1, 0xa2, 0x7c, 0x83, 0x2d, 0x68, 0xc1, 0x84, 0x3b, 0xc9,
+ 0x67, 0x44, 0x26, 0xa3, 0x65, 0x3a, 0x9d, 0x48, 0x4c, 0x98, 0x8b, 0xbe,
+ 0x6b, 0x38, 0x61, 0xb8, 0x9d, 0x22, 0xd4, 0xff, 0xf9, 0x22, 0xe3, 0x98,
+ 0xa7, 0x4d, 0x1e, 0xd0, 0x9c, 0xa6, 0xbd, 0xa5, 0xf9, 0xe3, 0xcc, 0x18,
+ 0xf5, 0x79, 0x15, 0xec, 0x1a, 0x26, 0xf3, 0xf8, 0x2e, 0x4e, 0xa7, 0xb8,
+ 0xc3, 0xa8, 0xa1, 0x7c, 0x39, 0x47, 0xe7, 0xd5, 0x95, 0xba, 0x4b, 0xf3,
+ 0x6c, 0x3e, 0x6b, 0xda, 0x37, 0x36, 0x2f, 0x4e, 0x86, 0x87, 0x51, 0x74,
+ 0x36, 0x8c, 0xce, 0xde, 0x9e, 0xfe, 0xc0, 0xae, 0x43, 0xd6, 0x31, 0x05,
+ 0x40, 0x83, 0xfb, 0x0f, 0xde, 0x8c, 0xee, 0xe2, 0x3c, 0x85, 0xbe, 0xd6,
+ 0xf3, 0x1e, 0xb5, 0x16, 0x55, 0x5c, 0xce, 0x66, 0xff, 0xde, 0xb6, 0xd8,
+ 0x87, 0x3d, 0xf2, 0xad, 0x85, 0xf8, 0xbf, 0x24, 0x2e, 0x52, 0x5a, 0x70,
+ 0x98, 0xb9, 0xc7, 0x96, 0x9c, 0xb7, 0x6c, 0xe6, 0x8a, 0xb1, 0x35, 0x2c,
+ 0x3c, 0xd5, 0x12, 0xa0, 0xc6, 0x17, 0x25, 0xf5, 0x4e, 0x13, 0xad, 0x45,
+ 0x6c, 0xd0, 0x44, 0xaf, 0x45, 0xaf, 0x5d, 0xe3, 0x6b, 0x46, 0x04, 0xb2,
+ 0x8b, 0x8f, 0x93, 0xb5, 0x5d, 0xc4, 0x2c, 0xbc, 0x3b, 0x6f, 0x08, 0x44,
+ 0xa2, 0x79, 0x99, 0x67, 0x8b, 0x55, 0xf4, 0x55, 0xcc, 0x3c, 0x8f, 0xfb,
+ 0x3a, 0x8a, 0x93, 0x59, 0x23, 0xaa, 0xa0, 0xc8, 0xc6, 0xb7, 0x49, 0x29,
+ 0x27, 0x48, 0x7e, 0x77, 0xe4, 0x0c, 0x5d, 0x4f, 0x78, 0x66, 0xc4, 0x8b,
+ 0x39, 0x61, 0xd3, 0x82, 0x51, 0x0f, 0x68, 0x8e, 0x86, 0xd2, 0x34, 0x3b,
+ 0x1a, 0xae, 0x43, 0xa0, 0x0d, 0x2a, 0x93, 0x40, 0x13, 0x32, 0xb5, 0x7a,
+ 0xa0, 0x61, 0xff, 0x98, 0x6f, 0x1a, 0xf6, 0xd0, 0xbf, 0x0c, 0xbc, 0xda,
+ 0x3f, 0xee, 0x9b, 0x6a, 0xf9, 0x53, 0xfb, 0x32, 0x34, 0x63, 0xdf, 0xab,
+ 0x57, 0x7b, 0xd0, 0x96, 0x86, 0xcd, 0x31, 0x7b, 0xb9, 0x6e, 0xb9, 0xb2,
+ 0x24, 0x11, 0x50, 0x43, 0xeb, 0x68, 0x31, 0xe1, 0xd1, 0x8f, 0x24, 0x8d,
+ 0x40, 0x02, 0x92, 0x2b, 0x8d, 0x59, 0x3a, 0x19, 0x6e, 0xde, 0xf3, 0xe3,
+ 0x37, 0x6b, 0x42, 0xe6, 0x4c, 0x65, 0x4d, 0x4c, 0x8d, 0x22, 0xee, 0xe0,
+ 0x14, 0x7a, 0xc9, 0x4d, 0x75, 0x83, 0x0d, 0x33, 0x7a, 0x6b, 0xcd, 0xfd,
+ 0x6d, 0xc9, 0xc0, 0x41, 0x13, 0x2c, 0xba, 0xba, 0x1f, 0x5d, 0xfa, 0x7b,
+ 0x70, 0xfc, 0x6a, 0xae, 0x02, 0x01, 0x20, 0x29, 0x9a, 0xee, 0x90, 0x4e,
+ 0x30, 0x93, 0x8e, 0xc5, 0x5e, 0x05, 0xd1, 0x69, 0xc4, 0x0f, 0x38, 0x09,
+ 0x29, 0xba, 0x4d, 0x56, 0x96, 0x59, 0xe7, 0x3e, 0x1b, 0x07, 0x10, 0x5c,
+ 0x6e, 0xed, 0x74, 0x51, 0x38, 0x09, 0x9c, 0x7e, 0xce, 0x59, 0x87, 0xff,
+ 0x1d, 0x76, 0x5f, 0xf7, 0x54, 0x14, 0xba, 0x7e, 0x9f, 0x1b, 0x04, 0xc7,
+ 0x29, 0x02, 0xea, 0x9d, 0x35, 0xd2, 0x68, 0x1c, 0x60, 0xd4, 0x74, 0xd5,
+ 0x6a, 0x02, 0xf0, 0xb0, 0x69, 0xcc, 0xa6, 0x34, 0xa1, 0xbe, 0x28, 0x2d,
+ 0x08, 0x1c, 0xf1, 0xf1, 0xd3, 0x74, 0x94, 0xb3, 0x43, 0x0b, 0x92, 0x52,
+ 0xc0, 0xac, 0x1b, 0xa2, 0x8a, 0x27, 0x20, 0x36, 0x82, 0xa4, 0xe3, 0x5b,
+ 0x9c, 0x22, 0xd5, 0x2b, 0xc2, 0x2d, 0x37, 0xe1, 0x4f, 0x20, 0xa3, 0xb4,
+ 0xaf, 0xba, 0x9e, 0x11, 0x97, 0x31, 0xe3, 0xcc, 0x20, 0x9b, 0x22, 0xe5,
+ 0xc8, 0x1c, 0x48, 0x5e, 0xca, 0xff, 0x3c, 0x17, 0x72, 0x6c, 0x88, 0xc7,
+ 0xfa, 0xfe, 0xe8, 0xe4, 0x02, 0x2c, 0x73, 0xb4, 0x5a, 0x93, 0x92, 0xb1,
+ 0x9d, 0x94, 0xe3, 0xed, 0xc5, 0x6d, 0xba, 0x3d, 0x2f, 0x8a, 0xc9, 0x68,
+ 0xcb, 0x65, 0x2d, 0x22, 0xc6, 0x9e, 0x43, 0x4b, 0xa2, 0xf3, 0x6f, 0x0e,
+ 0x87, 0x9f, 0xec, 0xee, 0x72, 0x0a, 0xfd, 0x64, 0xc9, 0x0a, 0xd2, 0x26,
+ 0x2d, 0x40, 0x23, 0x03, 0xae, 0xa0, 0x75, 0x9f, 0x0d, 0x8a, 0x6c, 0x0b,
+ 0x0a, 0x80, 0x63, 0xb8, 0x58, 0x23, 0x44, 0xa8, 0xc0, 0x3f, 0xa9, 0xf9,
+ 0x61, 0x6c, 0x56, 0xfc, 0x2d, 0xe3, 0x44, 0x84, 0x36, 0x10, 0xc5, 0x10,
+ 0xbd, 0xe4, 0x7f, 0xd7, 0x70, 0xba, 0xe0, 0x8c, 0x03, 0x6a, 0xa6, 0xb2,
+ 0x27, 0xfc, 0xb2, 0x4a, 0xf9, 0x1c, 0x74, 0x53, 0x39, 0xf1, 0x4d, 0x9d,
+ 0x87, 0x9d, 0xba, 0x34, 0xcf, 0x5e, 0x74, 0x74, 0x7c, 0x01, 0x9a, 0x3c,
+ 0x7e, 0xfb, 0x15, 0x84, 0x43, 0xce, 0xa1, 0xbb, 0x9e, 0xa7, 0x3f, 0x33,
+ 0xb7, 0xa3, 0x26, 0x8b, 0x81, 0x66, 0x1f, 0x86, 0xc7, 0xb3, 0xd6, 0x1c,
+ 0xaf, 0x17, 0xaf, 0x22, 0x0e, 0xd9, 0x6f, 0xbb, 0x4c, 0xb1, 0x30, 0xc6,
+ 0xc3, 0x83, 0x70, 0x76, 0xbf, 0x12, 0x43, 0xa4, 0xa7, 0x68, 0x44, 0x74,
+ 0x16, 0x5b, 0x0c, 0x21, 0x1c, 0x64, 0x14, 0x64, 0xf3, 0x31, 0x5d, 0xa8,
+ 0xe3, 0x26, 0xf2, 0x98, 0x3a, 0x11, 0x0d, 0xab, 0x12, 0x89, 0x24, 0x36,
+ 0xdf, 0x86, 0xcf, 0xd7, 0x3d, 0xb0, 0x59, 0x6c, 0x45, 0x8e, 0x7f, 0xa6,
+ 0xf3, 0x20, 0x34, 0x8a, 0x79, 0x99, 0xaa, 0xdf, 0x86, 0x61, 0x27, 0x07,
+ 0xbc, 0xa1, 0x41, 0xf2, 0xc4, 0x62, 0x77, 0x3c, 0x2c, 0xc7, 0x0f, 0x2b,
+ 0xde, 0x13, 0xd7, 0x53, 0x65, 0xe9, 0x69, 0x4f, 0x55, 0xe6, 0xd4, 0x8b,
+ 0xad, 0x91, 0x0e, 0x56, 0xc2, 0x96, 0xca, 0xb6, 0xee, 0xa0, 0xcd, 0xc6,
+ 0xa6, 0x0a, 0xe3, 0x71, 0xc4, 0xa2, 0x11, 0xa7, 0x2d, 0xd2, 0x85, 0x79,
+ 0xe9, 0x0f, 0x49, 0xa4, 0x7d, 0x7f, 0x78, 0xf0, 0xfe, 0xcb, 0x77, 0x6f,
+ 0x8f, 0x4e, 0x8f, 0xbb, 0x75, 0x8a, 0xbc, 0xd2, 0x40, 0x51, 0x12, 0x3c,
+ 0xc5, 0xe8, 0x55, 0x8b, 0x9d, 0xc4, 0xb5, 0x8e, 0x44, 0x5f, 0xb9, 0xe0,
+ 0x35, 0xd0, 0xda, 0x56, 0xbc, 0xae, 0xfe, 0x2c, 0xe7, 0x13, 0x64, 0x16,
+ 0x06, 0x93, 0xb7, 0x5c, 0x12, 0x75, 0x9d, 0xd9, 0xf8, 0x5a, 0xd4, 0x5d,
+ 0x84, 0x89, 0xd3, 0x05, 0xcd, 0x32, 0xb6, 0x81, 0x7c, 0x48, 0x7e, 0x92,
+ 0x87, 0x71, 0xaa, 0x88, 0xef, 0x1c, 0x14, 0x82, 0x55, 0x8f, 0x69, 0x40,
+ 0x2d, 0xdb, 0x5d, 0x54, 0xe2, 0x15, 0xb8, 0x15, 0xa2, 0xe4, 0xbe, 0x0e,
+ 0x72, 0x9c, 0x97, 0xdd, 0x5e, 0x94, 0xa4, 0x70, 0xc5, 0xa5, 0x41, 0x44,
+ 0xcd, 0xa4, 0x35, 0xbd, 0x86, 0x03, 0x26, 0x63, 0xa1, 0xeb, 0x41, 0xf2,
+ 0x90, 0x20, 0xb6, 0x43, 0xdf, 0x3a, 0x84, 0x71, 0xb7, 0x8c, 0xbe, 0xcb,
+ 0x72, 0xa4, 0xed, 0x1f, 0x59, 0x84, 0xa5, 0x3d, 0x14, 0xcf, 0x57, 0x4d,
+ 0xcf, 0x2d, 0xab, 0x44, 0xac, 0x15, 0x5c, 0x0b, 0x8a, 0xe2, 0xf9, 0xc1,
+ 0xe5, 0xd7, 0x6d, 0x47, 0xb8, 0x4a, 0x86, 0x8f, 0xdd, 0x33, 0xaa, 0x92,
+ 0x97, 0xeb, 0xe3, 0x37, 0xe5, 0xaa, 0x59, 0x7f, 0xd7, 0x54, 0x8f, 0x77,
+ 0xf3, 0xba, 0x69, 0xc9, 0xaf, 0x72, 0xd7, 0x8d, 0xdd, 0x36, 0xa3, 0xd5,
+ 0x7a, 0x92, 0x0c, 0x6f, 0x9a, 0xf5, 0x57, 0x4d, 0xf3, 0xae, 0xf1, 0x32,
+ 0x0c, 0x77, 0xc9, 0xa7, 0xd5, 0x2e, 0x1b, 0xbd, 0x6b, 0xfe, 0x8f, 0xb8,
+ 0x6a, 0x62, 0x9c, 0xa0, 0x1a, 0x0f, 0xf5, 0xe1, 0xb8, 0xff, 0x3a, 0x37,
+ 0x0d, 0x42, 0x7b, 0x9b, 0x0c, 0x46, 0x58, 0x6c, 0x8d, 0xa9, 0x56, 0xc2,
+ 0x37, 0x5b, 0x19, 0x62, 0xcf, 0xc4, 0xaf, 0xfa, 0x66, 0xb9, 0xae, 0xf0,
+ 0xda, 0x4d, 0x0c, 0xdb, 0x1b, 0x33, 0x8c, 0x3c, 0x1b, 0x4b, 0x06, 0x96,
+ 0x1a, 0x7b, 0x24, 0x47, 0xe9, 0x7d, 0x9e, 0xdc, 0xc4, 0x05, 0x31, 0x90,
+ 0x65, 0x99, 0xb2, 0x25, 0xbc, 0xae, 0x03, 0x2c, 0x39, 0x6c, 0xd0, 0xa9,
+ 0xfe, 0x91, 0x25, 0xfb, 0x45, 0x9a, 0xb6, 0xee, 0xd7, 0x4f, 0x4c, 0x0d,
+ 0xac, 0xfd, 0xd8, 0xa2, 0xb0, 0x72, 0x5f, 0x57, 0x5b, 0x87, 0xa7, 0xfd,
+ 0x10, 0xdf, 0x6d, 0xc6, 0x19, 0x9a, 0x30, 0xc7, 0x27, 0x57, 0x34, 0xdd,
+ 0x34, 0xc8, 0xfd, 0x33, 0xd0, 0x08, 0xbd, 0xe2, 0xd2, 0xab, 0x36, 0xe3,
+ 0x94, 0x7d, 0x0b, 0x76, 0xa2, 0x17, 0x50, 0x21, 0x00, 0x70, 0xd5, 0xed,
+ 0x2c, 0x7e, 0x43, 0x0a, 0xba, 0x62, 0x63, 0x24, 0x51, 0xf1, 0x1a, 0x7b,
+ 0xce, 0x6b, 0xc0, 0xcf, 0x14, 0xec, 0xbf, 0xe5, 0xc9, 0x6d, 0x32, 0x00,
+ 0x92, 0x00, 0x6c, 0xc5, 0x50, 0x89, 0xb7, 0x58, 0x6e, 0x57, 0xa3, 0x16,
+ 0x72, 0x4a, 0x14, 0x0d, 0xa6, 0x29, 0xa3, 0x28, 0x1c, 0x13, 0x22, 0xb9,
+ 0xe0, 0x9b, 0x84, 0xbb, 0x42, 0xcd, 0xbb, 0x80, 0x49, 0x25, 0xce, 0x4a,
+ 0x67, 0x34, 0xf8, 0x72, 0x92, 0xc4, 0xd3, 0xa8, 0x2d, 0x80, 0xe6, 0x4a,
+ 0xe0, 0x55, 0xcd, 0x5e, 0x0d, 0xb1, 0x66, 0x6e, 0x46, 0xee, 0x48, 0x43,
+ 0x20, 0x34, 0xde, 0x35, 0xc4, 0x96, 0xb8, 0x42, 0xde, 0x68, 0x83, 0x8a,
+ 0x27, 0xc9, 0x34, 0x15, 0xa3, 0x9f, 0xe5, 0xf7, 0x41, 0x67, 0xd1, 0x2c,
+ 0xc0, 0x02, 0x90, 0x27, 0x12, 0x13, 0xeb, 0x1e, 0x60, 0x30, 0x0f, 0x8d,
+ 0x5a, 0x2c, 0xea, 0xcd, 0x6d, 0x2a, 0x3c, 0x09, 0xf0, 0x18, 0x35, 0x43,
+ 0xcd, 0xe2, 0x90, 0x78, 0x58, 0x2b, 0x07, 0x95, 0xbb, 0xa5, 0x97, 0x1a,
+ 0x8c, 0x58, 0xd8, 0xa0, 0x45, 0xde, 0xd0, 0xb3, 0xd9, 0x65, 0x2a, 0x64,
+ 0x29, 0xa0, 0xc9, 0x58, 0xfe, 0x52, 0x54, 0xfc, 0xb8, 0x0c, 0xd3, 0x15,
+ 0x25, 0xa9, 0x67, 0x6f, 0xaf, 0xdd, 0xe8, 0xab, 0x99, 0xc5, 0x1a, 0x7b,
+ 0xc1, 0x4b, 0xd1, 0x2f, 0xe2, 0x2b, 0x87, 0x31, 0x42, 0x64, 0xcc, 0x12,
+ 0x63, 0x36, 0xa6, 0xd5, 0x93, 0xc0, 0x25, 0x7c, 0xc6, 0xe6, 0x8e, 0x86,
+ 0xab, 0x6b, 0x39, 0xe6, 0xd3, 0xc8, 0x06, 0x00, 0x6f, 0xc9, 0x8c, 0xd8,
+ 0xc9, 0xec, 0xfc, 0xf8, 0xc5, 0x34, 0x65, 0xc8, 0xb8, 0x3c, 0x5b, 0x5e,
+ 0xdf, 0xd0, 0x7d, 0x08, 0xd6, 0x82, 0xdb, 0xb5, 0xc5, 0x89, 0x51, 0x4b,
+ 0x81, 0x86, 0x3c, 0x7b, 0x97, 0x4d, 0xd9, 0xac, 0xb9, 0xe9, 0x9a, 0x97,
+ 0xd6, 0x9f, 0xee, 0xec, 0x62, 0xbc, 0x4f, 0x77, 0x3e, 0xad, 0x44, 0xb1,
+ 0xb3, 0x39, 0x3d, 0x1e, 0x23, 0xc5, 0x25, 0xfa, 0x91, 0x6f, 0x8f, 0x9f,
+ 0x5a, 0xfd, 0x2e, 0xb0, 0xcb, 0xc6, 0xf3, 0xd0, 0x12, 0x1b, 0x17, 0xb7,
+ 0xe2, 0x2a, 0xe8, 0xd8, 0xfb, 0xfc, 0x7a, 0x47, 0xad, 0x19, 0xce, 0x1f,
+ 0xdc, 0x86, 0xe2, 0xe3, 0x14, 0x5e, 0xce, 0x5a, 0x34, 0x36, 0x05, 0x69,
+ 0xbd, 0x17, 0x40, 0xff, 0x41, 0x0c, 0x02, 0x24, 0xeb, 0xd5, 0x5a, 0xcb,
+ 0xcc, 0xc1, 0xe1, 0xa1, 0xf7, 0xc6, 0x55, 0xe3, 0xbd, 0x9e, 0x70, 0xbc,
+ 0xd7, 0xc7, 0x9d, 0x7e, 0x40, 0xc6, 0xf4, 0x34, 0xb6, 0x1a, 0x06, 0xf3,
+ 0x4a, 0xda, 0xad, 0x5a, 0x54, 0x5a, 0x08, 0x0c, 0x46, 0xca, 0x65, 0x91,
+ 0xd4, 0x57, 0x74, 0x7d, 0x46, 0x49, 0x00, 0x28, 0xa6, 0xd9, 0x25, 0x7c,
+ 0x44, 0x82, 0xa4, 0x06, 0xb6, 0x79, 0x6e, 0xfb, 0x5c, 0x34, 0xc8, 0x7f,
+ 0x2a, 0xed, 0xb5, 0x44, 0x0c, 0x59, 0xfc, 0x94, 0x38, 0xb4, 0xe1, 0xf6,
+ 0x79, 0x40, 0x4a, 0xf4, 0x3c, 0x88, 0x14, 0xd7, 0x99, 0x95, 0xb4, 0x46,
+ 0x71, 0x3e, 0x71, 0x3e, 0x99, 0xa8, 0x09, 0xc3, 0x61, 0xd2, 0x0d, 0xe7,
+ 0xdf, 0x30, 0x54, 0x4d, 0x88, 0x52, 0xd2, 0xcc, 0x71, 0xb1, 0x80, 0x6d,
+ 0xef, 0x5e, 0x6e, 0xcd, 0xc2, 0x88, 0x66, 0xa9, 0x84, 0x77, 0x06, 0x19,
+ 0x1d, 0xf5, 0x05, 0xd3, 0x23, 0xf6, 0xa3, 0xfc, 0x6c, 0xa7, 0x41, 0xce,
+ 0x17, 0xcb, 0x33, 0xd5, 0xf9, 0xf4, 0x05, 0xc9, 0x40, 0x96, 0xf0, 0x3c,
+ 0x0f, 0xe2, 0x32, 0xbe, 0x31, 0xcb, 0x8d, 0xf8, 0x88, 0x9b, 0xc9, 0x53,
+ 0x9b, 0xc3, 0x2d, 0xf3, 0x14, 0xcb, 0xd5, 0xab, 0xed, 0xc5, 0xf9, 0xb5,
+ 0x70, 0x29, 0x0f, 0x39, 0xd2, 0x88, 0xb2, 0xeb, 0x37, 0xcc, 0x13, 0xd7,
+ 0xa2, 0x2f, 0x70, 0x00, 0xc5, 0x5d, 0x4b, 0xe4, 0x1d, 0x34, 0xa3, 0xf1,
+ 0xfd, 0xa4, 0x3d, 0x10, 0x45, 0x90, 0x2f, 0x33, 0x6c, 0xb3, 0x26, 0x4c,
+ 0x1e, 0x7e, 0x77, 0x14, 0xa4, 0x23, 0xf2, 0x19, 0xc3, 0x9c, 0x54, 0xe6,
+ 0x17, 0xd0, 0xea, 0x75, 0xb1, 0x72, 0x41, 0xa4, 0x0f, 0xc0, 0x60, 0x5f,
+ 0x03, 0xa1, 0x3b, 0x59, 0xb8, 0xf4, 0x22, 0x60, 0xbf, 0x08, 0x5b, 0x63,
+ 0x50, 0x57, 0xc0, 0xb7, 0xce, 0x9a, 0x22, 0xb1, 0x4f, 0x93, 0x45, 0x80,
+ 0x82, 0x8f, 0x58, 0xe1, 0xfc, 0xaf, 0x8b, 0xd7, 0x87, 0xbb, 0x9f, 0x3e,
+ 0xf9, 0x8c, 0x04, 0x74, 0x76, 0x88, 0xa6, 0xb5, 0x60, 0x5b, 0x09, 0x5c,
+ 0x5d, 0x1f, 0xb1, 0xa4, 0x46, 0x25, 0x13, 0x30, 0xd5, 0x4f, 0x4f, 0x9c,
+ 0x2f, 0xbb, 0x4f, 0x20, 0xf3, 0xa8, 0xcf, 0xb0, 0x11, 0x11, 0x95, 0xd1,
+ 0x22, 0x9a, 0xce, 0x85, 0x15, 0xe3, 0x58, 0x0d, 0xac, 0x96, 0xdc, 0xa9,
+ 0x83, 0x2a, 0x6a, 0x2e, 0x67, 0xc4, 0xf5, 0xa2, 0x8b, 0xe3, 0xcb, 0x8b,
+ 0x5e, 0x34, 0xbc, 0x3c, 0xbb, 0x58, 0x13, 0x66, 0x46, 0x37, 0x27, 0x73,
+ 0x25, 0x5e, 0x33, 0x26, 0x1b, 0x86, 0x15, 0x90, 0xe3, 0x56, 0xc9, 0xb6,
+ 0x80, 0x5e, 0x23, 0x61, 0x86, 0x60, 0xaa, 0xb3, 0xfe, 0xba, 0xe0, 0xc2,
+ 0xca, 0x6a, 0x81, 0x6c, 0x48, 0x92, 0x78, 0x74, 0x62, 0xb2, 0xed, 0x1f,
+ 0x41, 0x21, 0x4c, 0x8b, 0x3c, 0x5d, 0xe7, 0xd0, 0xc1, 0x68, 0x15, 0x4c,
+ 0xd0, 0xcb, 0x80, 0x6b, 0xc0, 0xaf, 0x5c, 0xf8, 0x06, 0x42, 0xfb, 0x1d,
+ 0xc6, 0x35, 0x0e, 0x4a, 0xc7, 0xfc, 0xdc, 0x1d, 0x58, 0x8a, 0x6e, 0x93,
+ 0x20, 0x6e, 0xeb, 0x03, 0xf4, 0x4b, 0x32, 0xc3, 0x96, 0x4b, 0x54, 0xe3,
+ 0xff, 0x18, 0x3c, 0x50, 0x70, 0x9b, 0x21, 0xe3, 0x19, 0xe3, 0x29, 0x22,
+ 0x17, 0x63, 0xdb, 0x16, 0x68, 0xe1, 0xf2, 0x07, 0x78, 0x97, 0xbb, 0xce,
+ 0x5d, 0x9e, 0x29, 0x75, 0xc8, 0xbe, 0x90, 0xd4, 0x33, 0x2d, 0x91, 0x99,
+ 0xd1, 0xb5, 0x51, 0x75, 0x1d, 0xa9, 0x55, 0xd8, 0xff, 0xb3, 0xc1, 0xee,
+ 0x56, 0x8d, 0xc9, 0x70, 0xb4, 0x41, 0x2b, 0x67, 0x61, 0x3f, 0x48, 0x25,
+ 0xc6, 0xc1, 0x10, 0xb7, 0x71, 0x0f, 0xd1, 0x85, 0x60, 0xa0, 0x1d, 0x00,
+ 0xe1, 0xe2, 0xa7, 0xd6, 0x20, 0xa6, 0xa0, 0x20, 0x01, 0x9b, 0x74, 0x3d,
+ 0x71, 0xeb, 0x9e, 0x8b, 0xff, 0x7f, 0x59, 0x67, 0xa7, 0x35, 0xff, 0x7d,
+ 0x3d, 0xd0, 0xc6, 0xc3, 0xa5, 0x38, 0x97, 0x18, 0x3b, 0xc1, 0x5d, 0x94,
+ 0x85, 0x25, 0xc5, 0x54, 0x66, 0xbe, 0xfb, 0xf1, 0x17, 0xdf, 0xa3, 0x61,
+ 0x52, 0x1f, 0x8a, 0x93, 0xc2, 0xe1, 0x0b, 0x22, 0xa5, 0x48, 0x39, 0x98,
+ 0x4b, 0x58, 0x05, 0xc2, 0xf9, 0x0c, 0x48, 0xc7, 0x16, 0x96, 0xf8, 0x32,
+ 0x8b, 0x31, 0xb0, 0x71, 0x37, 0x6e, 0x31, 0xc8, 0xb2, 0x86, 0x0d, 0x0f,
+ 0x15, 0x06, 0x7a, 0xa1, 0xdd, 0x30, 0xda, 0x98, 0x01, 0x2c, 0x08, 0x3e,
+ 0xb5, 0x8f, 0x07, 0x68, 0x40, 0x9c, 0xe5, 0xaa, 0x9a, 0x37, 0x4e, 0xda,
+ 0x79, 0xb8, 0xcb, 0xc2, 0x00, 0x21, 0x0b, 0x7a, 0xbe, 0x51, 0x8a, 0x89,
+ 0xb8, 0x1a, 0x40, 0x22, 0x61, 0xf2, 0x4d, 0x20, 0x3c, 0x51, 0x5e, 0x11,
+ 0xde, 0xa1, 0xe8, 0x37, 0xd5, 0xb8, 0x09, 0x5b, 0xe8, 0x86, 0xc4, 0xe5,
+ 0xaf, 0x8b, 0x7e, 0x99, 0x21, 0xba, 0x2e, 0x7a, 0xa9, 0x9d, 0x7d, 0xde,
+ 0x4a, 0xa2, 0x9c, 0x92, 0x14, 0x48, 0x7b, 0x86, 0x29, 0x09, 0xf4, 0xcc,
+ 0xa1, 0xda, 0x2e, 0x69, 0x20, 0x43, 0xcf, 0xb1, 0x45, 0xd8, 0x6f, 0x80,
+ 0x48, 0x01, 0x56, 0x53, 0xad, 0x12, 0x4e, 0x70, 0x32, 0x59, 0xc4, 0x94,
+ 0x34, 0x43, 0x0a, 0xbf, 0x5c, 0xce, 0x68, 0x2a, 0xf7, 0x49, 0x32, 0xe9,
+ 0x16, 0xd1, 0x10, 0x68, 0x8b, 0x75, 0x01, 0x99, 0xa3, 0x66, 0xb0, 0xe0,
+ 0xca, 0x27, 0x11, 0x84, 0xc8, 0x2e, 0x12, 0x53, 0x38, 0xe3, 0xc8, 0x10,
+ 0xf7, 0x42, 0xcd, 0xcc, 0x52, 0x94, 0xea, 0x8e, 0x88, 0xe1, 0x09, 0x23,
+ 0x70, 0x1d, 0xbc, 0xbb, 0xfc, 0xba, 0x13, 0x05, 0xa8, 0xaa, 0x01, 0x23,
+ 0xc6, 0x15, 0x5f, 0x92, 0x10, 0x71, 0xe7, 0x62, 0xeb, 0x72, 0x58, 0x4d,
+ 0x5a, 0x60, 0x14, 0x6a, 0x16, 0xfb, 0x41, 0x9d, 0x45, 0x3c, 0xab, 0xb3,
+ 0x08, 0xce, 0xfa, 0x06, 0x9f, 0xe8, 0xa7, 0x8b, 0x0f, 0x87, 0xf8, 0xb1,
+ 0x3a, 0x60, 0x36, 0x80, 0x93, 0x73, 0x06, 0xb3, 0x05, 0xba, 0x70, 0x88,
+ 0x59, 0xb2, 0xbc, 0xe6, 0xf0, 0xcf, 0x16, 0x00, 0x35, 0x86, 0xf8, 0xf0,
+ 0x3a, 0x80, 0x06, 0xf6, 0xd3, 0x2a, 0x33, 0x35, 0x55, 0x02, 0x97, 0xa4,
+ 0x37, 0xdd, 0x19, 0x9f, 0x0c, 0xb8, 0xd6, 0xcd, 0x36, 0x20, 0x8d, 0x4e,
+ 0x4e, 0x4d, 0x88, 0x81, 0xd2, 0xf7, 0xe0, 0x61, 0x92, 0xa7, 0x46, 0xe3,
+ 0x75, 0x03, 0x6e, 0x62, 0x35, 0x59, 0x22, 0x13, 0xc4, 0x4f, 0xe3, 0x86,
+ 0x63, 0x15, 0xc0, 0xc2, 0xbe, 0x2a, 0x0b, 0xfa, 0x74, 0xb0, 0xb7, 0xd5,
+ 0xaa, 0x41, 0x19, 0xdf, 0x61, 0x79, 0x9f, 0x13, 0x81, 0x88, 0x67, 0x8c,
+ 0xa1, 0xdc, 0x4b, 0xb4, 0xa1, 0x44, 0xab, 0xe5, 0x72, 0xe6, 0x3c, 0xa6,
+ 0x1f, 0x66, 0xd1, 0xc4, 0x47, 0xe2, 0x15, 0xaa, 0x1f, 0x28, 0x62, 0x8f,
+ 0x1f, 0x11, 0x92, 0x09, 0xda, 0x8f, 0xa3, 0x73, 0x12, 0x09, 0xdc, 0x12,
+ 0x07, 0x31, 0x5a, 0xf4, 0x0e, 0xd4, 0x13, 0x1e, 0xc6, 0x56, 0x5d, 0x80,
+ 0xe1, 0xe4, 0x5c, 0xd8, 0xb9, 0x5f, 0x23, 0x5c, 0xc7, 0x82, 0x0c, 0x89,
+ 0x15, 0xa6, 0x00, 0x7f, 0xcf, 0x69, 0x18, 0x88, 0x4d, 0x16, 0x54, 0x4a,
+ 0x1c, 0x30, 0xd6, 0x00, 0xed, 0xf6, 0xdb, 0x68, 0x95, 0xab, 0xa4, 0x80,
+ 0x8a, 0xbb, 0xb8, 0xd9, 0xdb, 0x4e, 0x87, 0x02, 0x85, 0x47, 0x80, 0x19,
+ 0x12, 0x03, 0x41, 0x5c, 0xb4, 0xa6, 0x49, 0x76, 0x3f, 0x07, 0x20, 0x40,
+ 0x8b, 0xf0, 0x87, 0xe1, 0x33, 0x53, 0x1b, 0x54, 0xaf, 0xc1, 0xbd, 0x9d,
+ 0xc1, 0x43, 0x48, 0xe3, 0x45, 0x31, 0x95, 0x95, 0x71, 0x65, 0x7b, 0xa4,
+ 0xc2, 0x0f, 0x2a, 0xf3, 0xd0, 0x6a, 0xe5, 0x2e, 0xa4, 0x69, 0x38, 0x3c,
+ 0xdd, 0xbe, 0x3c, 0x1d, 0x86, 0x9b, 0x6f, 0x9b, 0xde, 0x4c, 0x4e, 0x86,
+ 0x71, 0x17, 0x38, 0x72, 0x98, 0xb2, 0xc0, 0xb2, 0x06, 0xe0, 0x35, 0x9a,
+ 0x3a, 0xae, 0x87, 0xc2, 0x94, 0x16, 0x75, 0xa1, 0x37, 0x8d, 0x45, 0xdb,
+ 0x80, 0x7c, 0x8a, 0xc2, 0xe0, 0x61, 0x1c, 0xce, 0x62, 0xda, 0x37, 0x1a,
+ 0x94, 0x58, 0x36, 0xfe, 0x84, 0x56, 0xdc, 0x96, 0x91, 0xaf, 0xa2, 0x66,
+ 0x66, 0x68, 0x19, 0x4d, 0x69, 0x84, 0xd3, 0x42, 0x1c, 0xff, 0x88, 0x97,
+ 0xe0, 0x31, 0xe9, 0x4e, 0xd5, 0xd4, 0x46, 0x5a, 0xb0, 0x9d, 0xad, 0xc7,
+ 0x42, 0xbf, 0xee, 0x25, 0x40, 0x6e, 0x96, 0xe4, 0xb4, 0xeb, 0x80, 0x60,
+ 0x91, 0xdc, 0x30, 0x1d, 0xa0, 0x5b, 0x7e, 0xc3, 0xb4, 0xde, 0x6d, 0xa6,
+ 0x1d, 0x29, 0xb0, 0x51, 0x2c, 0x81, 0xa2, 0xb4, 0xe3, 0xde, 0xbe, 0xa4,
+ 0x62, 0x8f, 0x7c, 0xc0, 0x89, 0xf0, 0x77, 0x96, 0x8f, 0x76, 0xb5, 0xe4,
+ 0x4a, 0x3c, 0x2c, 0xae, 0xb7, 0xc5, 0xcf, 0xd6, 0xcf, 0x43, 0xb0, 0x54,
+ 0xad, 0xc7, 0xe2, 0x42, 0xc9, 0xb4, 0xbe, 0xcb, 0x20, 0xee, 0x69, 0x76,
+ 0xcd, 0x30, 0xa6, 0x16, 0x30, 0x0e, 0xc7, 0xbe, 0x43, 0x75, 0xa8, 0x2b,
+ 0xe0, 0x53, 0x09, 0xc2, 0xd1, 0x3d, 0xaf, 0x99, 0x24, 0x44, 0xea, 0x61,
+ 0x9a, 0xd0, 0x85, 0xb7, 0x94, 0x6d, 0x17, 0x6c, 0xd9, 0x74, 0x93, 0x3b,
+ 0x9b, 0xe0, 0x78, 0x35, 0x10, 0x33, 0x5a, 0x51, 0xc1, 0x95, 0xa8, 0x11,
+ 0x93, 0x4f, 0x21, 0x6a, 0x05, 0x3b, 0xa5, 0x8b, 0xc9, 0x13, 0x54, 0x85,
+ 0x59, 0x3d, 0x0f, 0x37, 0xda, 0x93, 0x52, 0xcb, 0x72, 0xd5, 0xcf, 0x8a,
+ 0x1e, 0x16, 0xb7, 0x88, 0xbf, 0xe0, 0xac, 0x5c, 0x8a, 0x93, 0xbe, 0x4c,
+ 0x1a, 0xf8, 0x4e, 0x8f, 0x1e, 0x11, 0x37, 0x87, 0x47, 0x52, 0xea, 0xd7,
+ 0x53, 0xae, 0xf3, 0xff, 0x33, 0xed, 0x7a, 0xe2, 0x55, 0xea, 0xd5, 0x14,
+ 0x6e, 0xa3, 0x1a, 0x1c, 0xa7, 0xcd, 0x58, 0xdb, 0xad, 0x35, 0xa7, 0x97,
+ 0xa6, 0x2a, 0x18, 0x6b, 0x09, 0x38, 0x80, 0x7b, 0x34, 0x1a, 0x96, 0x80,
+ 0xc4, 0x46, 0x20, 0x8c, 0xd1, 0xf4, 0x5a, 0x1a, 0x1e, 0x8f, 0xdb, 0xe3,
+ 0x80, 0x11, 0xba, 0x74, 0x78, 0x78, 0x48, 0x1f, 0x1c, 0x0a, 0x99, 0x1e,
+ 0x2a, 0x47, 0x3d, 0xbc, 0xe1, 0x8c, 0xcd, 0xe9, 0x56, 0x34, 0xbc, 0x59,
+ 0x72, 0xbe, 0x21, 0xcf, 0x91, 0x57, 0x56, 0x97, 0xb0, 0x1e, 0x42, 0x16,
+ 0xaf, 0xd8, 0x96, 0x25, 0x10, 0x51, 0x15, 0x01, 0x4b, 0xec, 0x02, 0x48,
+ 0x25, 0x35, 0xdf, 0xbf, 0xdd, 0x7f, 0xd2, 0x43, 0x6b, 0xaa, 0xf7, 0x72,
+ 0xee, 0x00, 0x09, 0x9d, 0xdd, 0x78, 0xee, 0x88, 0x5f, 0xf5, 0xc2, 0x58,
+ 0x0e, 0xcd, 0xdb, 0x83, 0x4b, 0x86, 0x80, 0x2e, 0x35, 0x06, 0xb5, 0x3d,
+ 0xc0, 0xcd, 0x1d, 0x4b, 0xd0, 0x7f, 0x1c, 0xa0, 0x07, 0x9a, 0x8a, 0x01,
+ 0x59, 0x96, 0x93, 0x20, 0x45, 0xb6, 0x1d, 0x68, 0x9c, 0x45, 0x8b, 0x60,
+ 0xac, 0x2b, 0xda, 0x77, 0x3a, 0x8e, 0x24, 0xbe, 0xf1, 0x9f, 0x45, 0xf3,
+ 0x78, 0x34, 0xf4, 0xa7, 0xca, 0xeb, 0x3f, 0x4a, 0xa4, 0xee, 0xb6, 0xf6,
+ 0xfa, 0xd3, 0x3f, 0xbf, 0x4d, 0x89, 0x4a, 0x35, 0xfc, 0x98, 0x5c, 0x61,
+ 0x4d, 0x6f, 0x71, 0x45, 0x3b, 0x73, 0x20, 0x37, 0x12, 0x97, 0xa7, 0x61,
+ 0xbd, 0x05, 0x6d, 0xf7, 0x04, 0x88, 0x58, 0x42, 0x83, 0x0e, 0x33, 0xfb,
+ 0x3e, 0x6e, 0x88, 0x37, 0x76, 0x50, 0xbd, 0x48, 0x89, 0x22, 0x3b, 0xe2,
+ 0x5d, 0x71, 0xcd, 0xe7, 0xc9, 0x62, 0xba, 0x72, 0x66, 0x00, 0x6d, 0x7e,
+ 0x9d, 0x98, 0x19, 0x1a, 0x93, 0xc2, 0x20, 0x66, 0x1b, 0x63, 0x51, 0x6d,
+ 0x05, 0x1d, 0xc5, 0x2c, 0x04, 0x5e, 0x35, 0x22, 0xe5, 0x63, 0xed, 0xb9,
+ 0x86, 0xc2, 0xdc, 0xdc, 0xa1, 0x40, 0xda, 0x72, 0xc0, 0x0d, 0x8a, 0x24,
+ 0xad, 0x19, 0x50, 0x8f, 0x27, 0x6e, 0x4f, 0x79, 0xe9, 0x21, 0x1c, 0x25,
+ 0xa4, 0x4d, 0x23, 0x03, 0x47, 0xe1, 0x2c, 0xfa, 0xe9, 0x5c, 0xd0, 0x13,
+ 0x38, 0xe1, 0x15, 0x46, 0x79, 0xc1, 0xbf, 0xa8, 0xe3, 0x41, 0xc6, 0x45,
+ 0x64, 0x08, 0x7f, 0xeb, 0x40, 0x2e, 0x0c, 0x02, 0xd5, 0xc7, 0xec, 0x03,
+ 0xaa, 0xa3, 0x4d, 0x88, 0xf5, 0x88, 0x16, 0x87, 0x8a, 0x68, 0x71, 0xc9,
+ 0xe1, 0x1c, 0x12, 0x59, 0x10, 0xe7, 0xe5, 0x36, 0xb0, 0x2b, 0x24, 0x43,
+ 0x79, 0xcc, 0x18, 0xc7, 0x5a, 0x2a, 0xe0, 0xe2, 0xf5, 0xe1, 0xde, 0x93,
+ 0xcf, 0x3e, 0x6b, 0x8d, 0x85, 0x4d, 0x34, 0x19, 0xcb, 0x43, 0x75, 0x73,
+ 0x30, 0xa3, 0xe4, 0xb6, 0x8b, 0xcb, 0x91, 0xeb, 0xd0, 0x70, 0x2a, 0xb0,
+ 0xa8, 0x98, 0x22, 0x23, 0x77, 0xc7, 0x4d, 0xe3, 0x3d, 0x0f, 0xa8, 0x2b,
+ 0xd6, 0x37, 0x49, 0x11, 0xb3, 0x32, 0x29, 0x5a, 0x5e, 0xa3, 0x0a, 0x81,
+ 0x26, 0x69, 0xc2, 0xf3, 0xe8, 0x0b, 0xa4, 0xb4, 0x71, 0x07, 0xb5, 0xe6,
+ 0xfe, 0xca, 0x5a, 0xee, 0x75, 0x52, 0x36, 0xb3, 0x2c, 0x83, 0xe4, 0xfe,
+ 0x47, 0x1a, 0x6f, 0xa1, 0x41, 0xcb, 0x12, 0x8d, 0x5e, 0x5a, 0x9a, 0x9d,
+ 0x57, 0xcf, 0x23, 0x2b, 0x28, 0x44, 0x23, 0x62, 0xe2, 0x7b, 0xa9, 0xd6,
+ 0x29, 0xcd, 0x30, 0xfb, 0xa2, 0x45, 0xc3, 0x2f, 0xcc, 0x8a, 0x0a, 0xd0,
+ 0xb1, 0xb2, 0x8c, 0xad, 0xca, 0x19, 0xbc, 0x96, 0x0c, 0x0a, 0x81, 0x48,
+ 0x04, 0xb5, 0xb4, 0x5a, 0x3d, 0x0c, 0xa6, 0x97, 0x69, 0x1b, 0xf2, 0xd1,
+ 0x4b, 0xd7, 0x28, 0x00, 0x6f, 0x05, 0x97, 0x83, 0x87, 0xd2, 0xb6, 0x12,
+ 0xa6, 0x75, 0x70, 0x92, 0x5e, 0x50, 0x15, 0xce, 0xa5, 0xad, 0xf3, 0xbb,
+ 0xc1, 0x3a, 0x35, 0x14, 0xfd, 0xe3, 0x87, 0x78, 0x86, 0x22, 0x5d, 0x26,
+ 0xf6, 0xc3, 0xab, 0xef, 0x53, 0xe7, 0x34, 0xd2, 0x25, 0x34, 0x92, 0xab,
+ 0xdb, 0xa6, 0xcb, 0x0f, 0xd5, 0xf7, 0x9e, 0x5f, 0xea, 0x9a, 0x3d, 0x2f,
+ 0xf4, 0xd1, 0x83, 0x22, 0x65, 0x38, 0x0e, 0x98, 0x50, 0x1c, 0xe6, 0xdc,
+ 0xd5, 0x64, 0x4d, 0xf8, 0x1e, 0xbf, 0x09, 0xf8, 0xab, 0xfd, 0xd6, 0x80,
+ 0x92, 0xfe, 0x6b, 0x37, 0xd2, 0x57, 0x5f, 0x54, 0x5a, 0xbb, 0xbf, 0x1f,
+ 0xcc, 0x56, 0xf6, 0x5d, 0x51, 0xa9, 0x39, 0xe8, 0x73, 0xda, 0x1d, 0xf4,
+ 0x05, 0xcf, 0xb2, 0x5b, 0x38, 0xe2, 0xf2, 0x48, 0x16, 0x61, 0xe9, 0x1b,
+ 0x23, 0x34, 0xcd, 0xe2, 0x69, 0x66, 0xa2, 0xb9, 0x44, 0x06, 0x4f, 0x7f,
+ 0x62, 0xed, 0xed, 0xaa, 0x93, 0x59, 0x0f, 0xfa, 0x75, 0xa6, 0xba, 0xe2,
+ 0x88, 0xae, 0x15, 0xa3, 0xb2, 0xa6, 0x9a, 0x5a, 0x94, 0xf9, 0x72, 0x5c,
+ 0x36, 0x3d, 0xb3, 0x56, 0x94, 0x4f, 0x71, 0x29, 0x83, 0x3c, 0x1f, 0xb1,
+ 0x25, 0x56, 0x58, 0x82, 0xcb, 0xb3, 0xf1, 0x79, 0x0c, 0x75, 0x1c, 0x12,
+ 0xe0, 0x33, 0x77, 0x7b, 0x22, 0x3d, 0x2b, 0x8a, 0x83, 0x87, 0x1d, 0x58,
+ 0xbb, 0xf0, 0x9d, 0xfb, 0x64, 0xf4, 0xea, 0x0b, 0x0e, 0x39, 0x7c, 0x00,
+ 0xbc, 0xab, 0xe0, 0x3c, 0x33, 0x0d, 0x6e, 0xf3, 0x9f, 0x9d, 0x88, 0x23,
+ 0x4e, 0x5a, 0xd6, 0x9d, 0xb8, 0xf8, 0xba, 0x16, 0x03, 0x44, 0x94, 0xa0,
+ 0xb5, 0xab, 0x2c, 0x5b, 0xdb, 0x98, 0x2b, 0x09, 0x88, 0xc5, 0x08, 0x92,
+ 0x7a, 0x24, 0xc7, 0xc6, 0x53, 0xa1, 0x50, 0x1e, 0xef, 0xe2, 0x5c, 0xc1,
+ 0xa5, 0x70, 0x0a, 0xdb, 0x90, 0x04, 0x46, 0x2b, 0x57, 0x39, 0xc2, 0xb2,
+ 0x8a, 0x5f, 0xf5, 0xa4, 0xfa, 0x29, 0x2b, 0xab, 0xeb, 0x17, 0x84, 0x9f,
+ 0x7e, 0xf5, 0x05, 0xd0, 0xca, 0xf8, 0xd7, 0x3f, 0xbb, 0xb7, 0xf9, 0x1f,
+ 0xa2, 0x62, 0x62, 0x04, 0x6b, 0x27, 0xc2, 0xa2, 0xc8, 0xd5, 0x32, 0x87,
+ 0x98, 0x91, 0xc8, 0x91, 0x94, 0xc2, 0x60, 0x06, 0x45, 0xac, 0xdc, 0xe4,
+ 0xcd, 0xc1, 0xdb, 0x77, 0x07, 0xa7, 0x8f, 0xe6, 0xdc, 0x84, 0x96, 0x52,
+ 0x17, 0x6b, 0x06, 0xc3, 0x65, 0x45, 0x70, 0xe4, 0xf3, 0xa8, 0x01, 0xff,
+ 0x72, 0x13, 0x3e, 0x5e, 0x85, 0xc6, 0xe3, 0x50, 0xe8, 0xf5, 0x19, 0x82,
+ 0x78, 0x78, 0x38, 0x21, 0xcb, 0x21, 0x50, 0x65, 0xa8, 0x35, 0x42, 0x1c,
+ 0x8e, 0xcd, 0x3c, 0x96, 0xa2, 0x5c, 0xce, 0x8c, 0x31, 0x4d, 0x4b, 0x36,
+ 0xb1, 0x32, 0x56, 0xe4, 0xa9, 0x16, 0xd9, 0xec, 0x7e, 0xd1, 0xc5, 0x1a,
+ 0x74, 0x5f, 0x76, 0x79, 0x43, 0xf3, 0x78, 0xdc, 0x92, 0x2f, 0x53, 0xb8,
+ 0x50, 0x8f, 0xa8, 0x2b, 0x54, 0xd3, 0xb5, 0x41, 0xe8, 0x9a, 0xc9, 0xc8,
+ 0x10, 0xea, 0x31, 0xcf, 0x22, 0x75, 0x14, 0xc3, 0xa8, 0xd9, 0xe2, 0xa1,
+ 0x02, 0xa4, 0x99, 0xcb, 0xf7, 0x95, 0x8a, 0x58, 0xb8, 0x16, 0xfc, 0xcc,
+ 0x45, 0x03, 0xc9, 0x99, 0x63, 0x70, 0x24, 0x85, 0x40, 0x4b, 0xb6, 0x45,
+ 0x87, 0xb8, 0xb5, 0xd1, 0xf1, 0xc8, 0x40, 0x38, 0x72, 0x87, 0x6e, 0xe5,
+ 0x94, 0xc3, 0x74, 0x61, 0xe9, 0xa5, 0x2f, 0xaf, 0xaf, 0x35, 0x23, 0x19,
+ 0x73, 0x06, 0x7e, 0x03, 0x4d, 0xba, 0x81, 0x6f, 0xa9, 0xf5, 0x6c, 0x89,
+ 0x8c, 0xeb, 0xe0, 0x53, 0xfd, 0x6b, 0x12, 0x6b, 0xae, 0xa7, 0xd9, 0x28,
+ 0xbb, 0xba, 0x7a, 0x84, 0x36, 0x24, 0x7f, 0x0c, 0x4d, 0x08, 0x5b, 0xee,
+ 0x70, 0xe6, 0x08, 0xbf, 0x37, 0x92, 0x34, 0x3f, 0x54, 0x4b, 0x18, 0x88,
+ 0x95, 0x53, 0x21, 0x4b, 0x1b, 0x93, 0x0a, 0x7c, 0x9c, 0xab, 0x5a, 0x81,
+ 0x50, 0x94, 0x04, 0x15, 0x85, 0x47, 0xc3, 0x1d, 0x3d, 0xe8, 0x0c, 0x89,
+ 0x36, 0x7f, 0xff, 0xc7, 0x8f, 0x3f, 0xb5, 0x80, 0x34, 0xb1, 0xeb, 0xc2,
+ 0xc2, 0xfa, 0x39, 0xac, 0x59, 0xd3, 0x91, 0xe0, 0x24, 0x60, 0x83, 0x95,
+ 0x87, 0x67, 0xd4, 0x92, 0x37, 0x41, 0xe8, 0x76, 0xf3, 0xc2, 0x28, 0x7c,
+ 0x87, 0x56, 0x57, 0x55, 0xc3, 0x36, 0xa6, 0xc9, 0x75, 0x0c, 0xdc, 0x06,
+ 0x7f, 0x79, 0xba, 0xdc, 0x57, 0x65, 0xd5, 0x4d, 0x00, 0x38, 0x97, 0xdb,
+ 0x1e, 0x0a, 0x52, 0x30, 0x27, 0x5f, 0x9c, 0x38, 0x97, 0x4d, 0xb0, 0x11,
+ 0x5f, 0xf1, 0x46, 0x34, 0x56, 0xcd, 0x03, 0x24, 0xf6, 0xea, 0xc1, 0xe6,
+ 0x21, 0x2c, 0x01, 0xa0, 0x74, 0x05, 0x34, 0xa0, 0x0a, 0x0b, 0xb4, 0x16,
+ 0x64, 0x2c, 0xcb, 0x6b, 0x38, 0x44, 0x22, 0x72, 0x79, 0x28, 0x46, 0x97,
+ 0x39, 0xf7, 0xd5, 0xf1, 0x65, 0x64, 0xc0, 0x6f, 0x0d, 0xba, 0x0f, 0xca,
+ 0xe6, 0x38, 0x08, 0x02, 0x87, 0x12, 0x27, 0x78, 0x15, 0xae, 0x70, 0xdf,
+ 0x7d, 0x58, 0xbe, 0xa3, 0x4d, 0x09, 0x51, 0xc8, 0x21, 0xd1, 0xea, 0x0c,
+ 0x8e, 0xc0, 0x2f, 0xdb, 0xa9, 0x41, 0xc3, 0x74, 0xff, 0xa3, 0xeb, 0xd1,
+ 0x5f, 0xda, 0x22, 0x90, 0x2c, 0xc1, 0xad, 0x91, 0x76, 0xdf, 0x3f, 0xe9,
+ 0x39, 0x40, 0x08, 0x5d, 0x2f, 0x59, 0x46, 0x37, 0x93, 0x51, 0x0b, 0xc0,
+ 0xdb, 0xba, 0x71, 0x7c, 0x7d, 0x7c, 0x70, 0x64, 0x93, 0xfd, 0x1f, 0xc8,
+ 0x9c, 0x77, 0x3e, 0xd0, 0x51, 0x22, 0xa0, 0x76, 0xcb, 0xb9, 0x95, 0x57,
+ 0xc2, 0x9e, 0x39, 0xc3, 0x4d, 0x4b, 0xc4, 0x18, 0x89, 0x6c, 0x8c, 0x76,
+ 0x2d, 0x9a, 0x1c, 0x4a, 0x04, 0x99, 0x83, 0x59, 0xa2, 0x2a, 0xdd, 0x7a,
+ 0x84, 0x9e, 0xa1, 0xc0, 0xab, 0xd2, 0x5a, 0xff, 0x28, 0x28, 0x06, 0x18,
+ 0x10, 0xf6, 0x0d, 0x52, 0xe2, 0xa6, 0x8b, 0x46, 0x6e, 0x54, 0x7c, 0xcd,
+ 0x29, 0x97, 0xd3, 0x45, 0xf0, 0x6c, 0x90, 0x3e, 0xf7, 0x52, 0x7e, 0xae,
+ 0xb9, 0x57, 0x8e, 0x01, 0x75, 0xa5, 0x8f, 0x86, 0x49, 0xa2, 0xd7, 0x41,
+ 0xf1, 0x26, 0x92, 0x34, 0xf8, 0xca, 0xb8, 0x66, 0xa3, 0x2d, 0x6e, 0x7c,
+ 0x62, 0xa1, 0xf5, 0x75, 0x08, 0x2a, 0x14, 0xfb, 0x0a, 0xe0, 0x49, 0xd0,
+ 0x7a, 0x25, 0xdd, 0x4a, 0x93, 0xd7, 0xac, 0x6c, 0xd1, 0xa4, 0x51, 0x53,
+ 0x86, 0xb8, 0x4d, 0x51, 0x92, 0x14, 0x68, 0x23, 0xe3, 0x97, 0x6e, 0xe2,
+ 0x00, 0xd0, 0x4f, 0x20, 0x1c, 0xc4, 0xd3, 0xec, 0x8f, 0x8d, 0xf9, 0x35,
+ 0x9b, 0x95, 0x3b, 0x9c, 0x62, 0xa7, 0xc0, 0x71, 0x4b, 0x6c, 0x1b, 0x84,
+ 0x6d, 0x4e, 0xf6, 0xe7, 0x97, 0x34, 0xb1, 0x4f, 0xbb, 0x0c, 0xa3, 0xe9,
+ 0xd6, 0x1c, 0x57, 0x15, 0xad, 0x9d, 0x33, 0x95, 0xc3, 0x09, 0x2a, 0x86,
+ 0x13, 0x9e, 0xa3, 0xa5, 0x11, 0x22, 0x69, 0x0f, 0xa5, 0xdc, 0x1b, 0xb7,
+ 0x1e, 0x5f, 0xc3, 0x45, 0xb9, 0xbc, 0xc2, 0x2c, 0x38, 0xcc, 0x46, 0x1c,
+ 0x22, 0x18, 0xa8, 0xaf, 0x8d, 0x9a, 0xa1, 0x08, 0xb9, 0xad, 0x99, 0xe9,
+ 0xfd, 0xf1, 0x78, 0x9d, 0x6f, 0x57, 0xa7, 0xe3, 0xab, 0xcf, 0x38, 0x56,
+ 0xcf, 0xf6, 0x34, 0x29, 0x2b, 0x9e, 0xe4, 0xec, 0xe0, 0x60, 0x1b, 0x9b,
+ 0x20, 0x7f, 0xdf, 0x37, 0x39, 0xba, 0xd6, 0xd8, 0x91, 0x44, 0x74, 0x2e,
+ 0xe6, 0xc0, 0x76, 0x32, 0x49, 0x36, 0xd4, 0x69, 0xeb, 0x82, 0xd1, 0x15,
+ 0x71, 0x9d, 0xde, 0x59, 0x59, 0x32, 0x8c, 0xac, 0x25, 0xe3, 0xcd, 0x06,
+ 0x61, 0xb2, 0xbe, 0xfa, 0xf6, 0x05, 0x8e, 0x21, 0xe2, 0xec, 0xd8, 0x60,
+ 0x3b, 0xc7, 0xd9, 0x14, 0xf8, 0x0d, 0x31, 0x5c, 0x09, 0xfb, 0x4c, 0xd8,
+ 0x75, 0x3f, 0xdc, 0xd7, 0x24, 0xd5, 0xed, 0x77, 0xd6, 0xc4, 0xbb, 0x87,
+ 0xac, 0xbd, 0x58, 0xe6, 0x56, 0x5d, 0x10, 0x41, 0x2a, 0x3a, 0x6a, 0xa0,
+ 0xe2, 0x4f, 0x26, 0xdb, 0x3a, 0x62, 0x0b, 0xe6, 0x6a, 0x83, 0x32, 0xd4,
+ 0x6c, 0x8d, 0x05, 0x82, 0x1a, 0x27, 0xfd, 0xec, 0xaa, 0x8f, 0x2a, 0x8d,
+ 0x5c, 0x21, 0x8f, 0xd5, 0xb2, 0x80, 0xa0, 0x91, 0xba, 0x8b, 0x94, 0xc2,
+ 0xc9, 0xa4, 0xed, 0x96, 0xd4, 0xc0, 0xf8, 0xdc, 0x59, 0xec, 0x74, 0x30,
+ 0xba, 0x28, 0xfb, 0x6c, 0xe5, 0xb1, 0xd7, 0x1d, 0x40, 0x1b, 0xa3, 0x79,
+ 0xc7, 0x79, 0x9e, 0xd2, 0x39, 0x6c, 0x80, 0x1a, 0x23, 0x8a, 0xb1, 0x27,
+ 0x37, 0xa9, 0x84, 0x84, 0xb1, 0xaf, 0x67, 0x26, 0x4e, 0x3e, 0x38, 0x6a,
+ 0x96, 0x0b, 0x88, 0x84, 0x9c, 0xb0, 0xdd, 0x26, 0xfb, 0xfa, 0x64, 0xb7,
+ 0x5a, 0x89, 0x44, 0xf8, 0x2f, 0xc2, 0xdc, 0xe0, 0x75, 0x08, 0x27, 0xeb,
+ 0x44, 0xe0, 0x20, 0xdf, 0x02, 0xac, 0x5a, 0x73, 0x01, 0xfc, 0x92, 0x6f,
+ 0x8b, 0xe9, 0xb5, 0x2d, 0x16, 0x89, 0xdf, 0x32, 0xee, 0x11, 0xc8, 0xce,
+ 0x5c, 0xc9, 0x7a, 0xb1, 0x1c, 0xcd, 0x26, 0xcf, 0xa2, 0x97, 0xf4, 0xcf,
+ 0xe7, 0x2d, 0xbe, 0x73, 0x49, 0x2a, 0x57, 0x59, 0x58, 0x65, 0x21, 0xfc,
+ 0xfe, 0x64, 0x8f, 0x4f, 0xc4, 0x03, 0xb5, 0x39, 0x4e, 0x11, 0x4a, 0x3a,
+ 0x49, 0xaf, 0xd3, 0xb2, 0xd0, 0x34, 0x42, 0xbc, 0xb0, 0xb6, 0x5c, 0x16,
+ 0xaf, 0xcf, 0xee, 0xde, 0x67, 0xd1, 0x28, 0x2d, 0xa3, 0x37, 0x47, 0xcf,
+ 0xa4, 0xe0, 0x5e, 0xb1, 0x9c, 0xf9, 0xc2, 0xac, 0x00, 0x04, 0x46, 0xa5,
+ 0xed, 0x2e, 0xc3, 0xf4, 0x2d, 0x47, 0xd3, 0x46, 0xed, 0x9b, 0xdb, 0x64,
+ 0x55, 0x2b, 0x2a, 0xce, 0xb0, 0x63, 0x45, 0x52, 0xb7, 0xb3, 0x3b, 0x92,
+ 0x43, 0xdd, 0x6e, 0xf5, 0xda, 0x37, 0x05, 0x7a, 0x9a, 0x3f, 0x8d, 0xa0,
+ 0xb0, 0x6a, 0x5d, 0xb5, 0xe4, 0x7f, 0x90, 0x01, 0xef, 0xfb, 0xf0, 0xf0,
+ 0x5c, 0xdc, 0x39, 0x08, 0xdd, 0x0b, 0x30, 0x24, 0x1e, 0xc3, 0xbe, 0xfd,
+ 0xb4, 0x6a, 0x5a, 0x95, 0xb2, 0x9b, 0x86, 0x59, 0xd4, 0x27, 0xe5, 0xea,
+ 0x7a, 0x5d, 0x2d, 0xc5, 0xe8, 0x04, 0xcf, 0xea, 0x31, 0x36, 0x8d, 0xf8,
+ 0x14, 0x6f, 0x04, 0xa9, 0xcf, 0x72, 0xed, 0xf2, 0x41, 0x48, 0xc7, 0x5c,
+ 0xd2, 0xb6, 0x81, 0xbe, 0xba, 0xf4, 0xf0, 0xc6, 0x56, 0xe0, 0x33, 0x5f,
+ 0x0a, 0xa0, 0xf9, 0xc1, 0x82, 0xcd, 0x3c, 0xd1, 0xee, 0xe0, 0xa1, 0x17,
+ 0x56, 0x17, 0x53, 0x00, 0x7c, 0x94, 0x11, 0x6b, 0x78, 0xa0, 0x10, 0x8e,
+ 0x51, 0x1b, 0x0d, 0xb7, 0x2d, 0xf6, 0xb5, 0x29, 0x87, 0x27, 0xe5, 0xc2,
+ 0x82, 0xf7, 0x88, 0x97, 0x5d, 0xc7, 0xc0, 0x5f, 0x0f, 0x28, 0x2f, 0xa5,
+ 0x73, 0xa0, 0x90, 0x66, 0xeb, 0xe6, 0x2d, 0xdf, 0x06, 0xa0, 0xbe, 0x76,
+ 0x0f, 0xab, 0x2c, 0x2e, 0xc1, 0xbd, 0x42, 0x6e, 0xc1, 0xd7, 0xcd, 0x22,
+ 0x68, 0xdc, 0x8c, 0x3b, 0xbd, 0xd0, 0x7e, 0x65, 0x05, 0xfa, 0x7c, 0xf3,
+ 0xf5, 0x22, 0xd4, 0x45, 0x77, 0x8c, 0xd2, 0x47, 0x35, 0x4b, 0xa3, 0xcd,
+ 0x20, 0xfe, 0xc2, 0xea, 0xf8, 0x72, 0xa8, 0xd3, 0x60, 0x10, 0x1e, 0x27,
+ 0x30, 0xf2, 0x2b, 0x66, 0x7e, 0xad, 0xb9, 0xdc, 0xe7, 0x82, 0x59, 0x18,
+ 0x55, 0xeb, 0x53, 0x6b, 0xcd, 0xa9, 0x40, 0x4c, 0x76, 0xcd, 0x0c, 0x9c,
+ 0x89, 0x24, 0xe1, 0x8f, 0xda, 0xae, 0x27, 0xf4, 0x26, 0x13, 0x09, 0xe2,
+ 0x11, 0x68, 0x27, 0x5c, 0x91, 0xfa, 0x41, 0x74, 0x30, 0x37, 0x4d, 0x3c,
+ 0xd2, 0x4a, 0x61, 0x48, 0xdc, 0x69, 0x54, 0x77, 0xb9, 0x4d, 0x1a, 0x26,
+ 0x01, 0xb5, 0x09, 0x04, 0x33, 0x23, 0xb9, 0x6a, 0x67, 0x7f, 0x37, 0xac,
+ 0x0b, 0x34, 0xd7, 0xf2, 0x11, 0x28, 0x96, 0xf3, 0xdb, 0x45, 0xdf, 0x9f,
+ 0xa8, 0x24, 0xd6, 0x46, 0x2f, 0x0c, 0xbb, 0xbd, 0xfd, 0xfa, 0xe4, 0xf4,
+ 0x78, 0x2b, 0x7a, 0x9d, 0x00, 0x57, 0xa4, 0x4a, 0x14, 0x38, 0xbe, 0xbf,
+ 0x93, 0x4f, 0x8c, 0xfc, 0x55, 0x09, 0x6d, 0x8b, 0x1f, 0x51, 0x87, 0x05,
+ 0xa4, 0x69, 0x39, 0x11, 0x98, 0x83, 0x64, 0x66, 0x65, 0x30, 0x5c, 0x1a,
+ 0xb2, 0x3a, 0xc4, 0xd5, 0x00, 0xf4, 0xa3, 0xa5, 0xb8, 0x53, 0x1c, 0x85,
+ 0xb5, 0x70, 0x3c, 0xde, 0x05, 0x93, 0x91, 0xc5, 0x01, 0xf3, 0xd8, 0xd5,
+ 0x2a, 0x57, 0xa9, 0x8b, 0xbe, 0xae, 0x68, 0x5e, 0x91, 0xfe, 0x2c, 0xd1,
+ 0xe8, 0x58, 0xb5, 0x59, 0x36, 0x71, 0xf8, 0x92, 0x52, 0xb2, 0x86, 0xe7,
+ 0x1b, 0xac, 0xdd, 0x5f, 0x69, 0xed, 0xfe, 0xba, 0x9c, 0xdf, 0xf6, 0xb5,
+ 0x34, 0xa1, 0x02, 0x7a, 0x14, 0xed, 0x67, 0xef, 0x3b, 0x17, 0x83, 0x82,
+ 0xc0, 0x60, 0x31, 0x74, 0x36, 0x6b, 0xf4, 0xc5, 0x01, 0xbc, 0x5c, 0xef,
+ 0xb1, 0x02, 0x3f, 0xa1, 0xf0, 0xc0, 0x91, 0xa3, 0x34, 0xb9, 0x31, 0x87,
+ 0x25, 0xb3, 0x8e, 0xd8, 0xb1, 0x62, 0x89, 0xda, 0x74, 0x67, 0xe0, 0xb1,
+ 0x15, 0x1b, 0x90, 0xb5, 0x85, 0xa6, 0x9d, 0xdd, 0x58, 0x8d, 0x3b, 0x08,
+ 0xb0, 0x1a, 0x5b, 0x42, 0xa2, 0x40, 0xca, 0xb6, 0x4d, 0xba, 0xe6, 0x5d,
+ 0x05, 0x46, 0x09, 0x4e, 0x64, 0x04, 0x59, 0x26, 0xa5, 0xda, 0x35, 0x2b,
+ 0x09, 0x81, 0x91, 0x21, 0x7f, 0x17, 0x1e, 0xef, 0xc7, 0x06, 0x18, 0xd5,
+ 0x06, 0x27, 0x02, 0x3d, 0xcb, 0x06, 0xdd, 0x06, 0xe1, 0x8c, 0xa7, 0x99,
+ 0x54, 0x3d, 0xba, 0x0f, 0xdd, 0x9a, 0xff, 0x89, 0xfb, 0x9e, 0x2f, 0x33,
+ 0xa5, 0xc4, 0x7e, 0x4b, 0x84, 0x7c, 0x08, 0x99, 0x6a, 0x18, 0x6b, 0xc8,
+ 0x3a, 0x82, 0x18, 0x71, 0xe6, 0x9b, 0x98, 0x07, 0x25, 0xbf, 0x55, 0xc5,
+ 0x58, 0x5b, 0x6c, 0xa8, 0x1f, 0x54, 0xf3, 0x70, 0x9c, 0xfa, 0x88, 0xc8,
+ 0x2a, 0x2b, 0x52, 0xd9, 0x16, 0x67, 0x14, 0x0c, 0xf5, 0xe6, 0x66, 0x84,
+ 0xb8, 0x81, 0x1b, 0xb8, 0xe4, 0x78, 0x17, 0x7a, 0x65, 0xda, 0x67, 0x30,
+ 0xdf, 0x5b, 0xf0, 0xf5, 0xa2, 0x2d, 0x6e, 0x4c, 0xd3, 0xa9, 0x82, 0x49,
+ 0x06, 0x56, 0x4e, 0x15, 0xf3, 0x2d, 0x6c, 0xc7, 0xe0, 0x5d, 0x49, 0x2c,
+ 0xb5, 0xd6, 0x3a, 0xcd, 0xa0, 0x91, 0x10, 0x69, 0x40, 0x4c, 0x67, 0x1e,
+ 0xd0, 0xe9, 0x80, 0x68, 0xab, 0xf1, 0x08, 0xe7, 0x6d, 0x48, 0xe4, 0x7a,
+ 0xd2, 0x52, 0xa7, 0x9b, 0x61, 0xb8, 0x69, 0x8b, 0x2c, 0xb0, 0xc1, 0x95,
+ 0x03, 0x6c, 0x49, 0xcc, 0xd3, 0x3c, 0x4b, 0x59, 0xb7, 0x98, 0xdd, 0x67,
+ 0x75, 0x5a, 0x5d, 0xb9, 0x80, 0x50, 0x17, 0x28, 0x2b, 0xbe, 0x10, 0x2d,
+ 0x08, 0xe4, 0x47, 0x15, 0xe0, 0xf2, 0xaf, 0x9d, 0x2c, 0x2a, 0xd3, 0x58,
+ 0xbc, 0x61, 0xb8, 0xc6, 0xcd, 0x70, 0xc3, 0x40, 0x14, 0x8d, 0x7c, 0x81,
+ 0x37, 0xe2, 0x07, 0x80, 0x6c, 0x40, 0x00, 0x9a, 0x54, 0x2e, 0x51, 0xa7,
+ 0x28, 0x9c, 0xf2, 0x62, 0xae, 0x95, 0xfc, 0x1e, 0x58, 0x69, 0xd7, 0x94,
+ 0x81, 0x43, 0xf2, 0xe5, 0x4d, 0xfc, 0xf0, 0x30, 0x28, 0x12, 0xa9, 0x8b,
+ 0x56, 0x14, 0x53, 0x24, 0x7a, 0x56, 0xeb, 0xbf, 0x71, 0x9a, 0x7f, 0xb2,
+ 0x88, 0xa7, 0x88, 0x76, 0x64, 0x7e, 0xb4, 0xae, 0xce, 0x56, 0x35, 0x5a,
+ 0x41, 0x2a, 0x00, 0x4a, 0xb9, 0xf4, 0x54, 0xea, 0xc3, 0x04, 0x72, 0x1c,
+ 0x03, 0x43, 0x15, 0xc2, 0x8a, 0x38, 0x04, 0x2b, 0x4a, 0x27, 0x0d, 0xa7,
+ 0x93, 0x86, 0x76, 0xb1, 0xfb, 0x87, 0x77, 0xce, 0x0d, 0x82, 0xb5, 0x8d,
+ 0x91, 0xda, 0xa1, 0x11, 0x59, 0xc2, 0xad, 0x9b, 0x77, 0x8c, 0xd1, 0x06,
+ 0x48, 0xdd, 0x9a, 0x2c, 0x1b, 0xda, 0x6e, 0xfd, 0x7d, 0x2b, 0xb2, 0x1b,
+ 0xe4, 0x5e, 0x80, 0xf7, 0xf0, 0x13, 0x99, 0xbb, 0xd3, 0x01, 0xc9, 0x8b,
+ 0xea, 0x8d, 0x8d, 0xcb, 0xe0, 0x4a, 0x50, 0x38, 0x64, 0x8a, 0x97, 0x87,
+ 0xe7, 0xef, 0xbf, 0x39, 0x3e, 0x3e, 0x3f, 0x39, 0x22, 0xde, 0x2f, 0x32,
+ 0xa5, 0xfb, 0xe8, 0xed, 0xe5, 0xb7, 0xa7, 0x06, 0xcc, 0x61, 0xeb, 0xd3,
+ 0xe0, 0xd6, 0x6c, 0xf8, 0x45, 0x73, 0xa7, 0xe9, 0x7c, 0xf9, 0xd0, 0x43,
+ 0x79, 0x29, 0x52, 0x34, 0x0e, 0x4e, 0xbe, 0xef, 0x45, 0x5f, 0x9f, 0xf7,
+ 0xdf, 0x7d, 0xdf, 0x48, 0x9e, 0xaa, 0x04, 0xe5, 0xd5, 0xcf, 0xb9, 0x0b,
+ 0xd1, 0x03, 0x62, 0x98, 0x9f, 0xbb, 0x91, 0x58, 0x0b, 0xb8, 0xf2, 0xc7,
+ 0x5d, 0xf6, 0x55, 0xdb, 0x7d, 0x78, 0xdb, 0x3b, 0xe3, 0x92, 0xec, 0x7d,
+ 0xcb, 0x6d, 0x17, 0xcf, 0x38, 0xd1, 0x68, 0x10, 0x12, 0xd6, 0x2a, 0x7a,
+ 0x49, 0xff, 0xb4, 0x65, 0x6b, 0x6e, 0x73, 0x91, 0xfa, 0xe8, 0x3c, 0x80,
+ 0xae, 0x70, 0x0e, 0xac, 0x81, 0xc5, 0x2d, 0xa9, 0x25, 0x41, 0xd3, 0x8f,
+ 0xd4, 0x49, 0x98, 0x37, 0xc0, 0x29, 0x5d, 0x0b, 0xbe, 0xa8, 0x2f, 0xcc,
+ 0x7b, 0x49, 0xbb, 0xf3, 0xf1, 0x57, 0x4c, 0x53, 0xa5, 0x4e, 0x3f, 0x08,
+ 0x88, 0xd0, 0x98, 0x22, 0x3f, 0x3a, 0x70, 0x80, 0x30, 0x2a, 0xb3, 0x70,
+ 0x23, 0x98, 0x9f, 0xa2, 0x6e, 0xb4, 0xe0, 0xb0, 0x0b, 0x60, 0x82, 0x43,
+ 0xf6, 0x40, 0x83, 0x34, 0xfa, 0x01, 0xa3, 0x23, 0xf4, 0x04, 0x27, 0x21,
+ 0xc4, 0x48, 0x70, 0x38, 0x40, 0x5a, 0x9d, 0xac, 0x6c, 0x35, 0x5e, 0x01,
+ 0xc8, 0xe4, 0xdf, 0x87, 0x8d, 0x70, 0x9b, 0x8f, 0xa2, 0x97, 0x08, 0xf8,
+ 0x6b, 0x0f, 0xa4, 0xd6, 0xba, 0xb1, 0xdf, 0x24, 0xf9, 0x28, 0xc9, 0xb3,
+ 0xa2, 0x9e, 0x43, 0xa7, 0x39, 0xf7, 0x5a, 0x9f, 0x93, 0x9b, 0x51, 0x68,
+ 0xff, 0x86, 0xe1, 0x15, 0x42, 0x78, 0x22, 0x1e, 0xec, 0x46, 0xb6, 0x50,
+ 0x17, 0xb1, 0x73, 0xdd, 0x5e, 0xd4, 0xe5, 0x4c, 0x41, 0xfe, 0x49, 0xac,
+ 0xeb, 0x0a, 0xbe, 0x91, 0x34, 0x9e, 0x76, 0x7b, 0x4d, 0x78, 0xc4, 0xae,
+ 0xae, 0x7a, 0x97, 0x36, 0x4e, 0x5a, 0xb3, 0x42, 0xaa, 0xb1, 0x8e, 0x43,
+ 0x10, 0x5d, 0xd2, 0x42, 0x41, 0x17, 0x43, 0x0b, 0x5d, 0xd1, 0xc0, 0xb2,
+ 0x72, 0xcd, 0x55, 0x53, 0xb5, 0xd6, 0xd5, 0x66, 0xa9, 0x72, 0x5e, 0x0d,
+ 0x8d, 0x84, 0xb6, 0x6f, 0xe9, 0xec, 0x92, 0xf0, 0x0e, 0xed, 0xf9, 0x56,
+ 0xd7, 0xee, 0x29, 0xcb, 0xaa, 0x5f, 0x0d, 0x87, 0x07, 0xe7, 0x27, 0xf5,
+ 0xa5, 0xa6, 0x4f, 0xfb, 0x6f, 0xad, 0x46, 0xfc, 0x96, 0x51, 0x8a, 0xd7,
+ 0x4d, 0x79, 0x06, 0xc8, 0x3c, 0x62, 0xe9, 0x9a, 0x43, 0x45, 0x04, 0x8a,
+ 0xea, 0x5b, 0xba, 0xcc, 0xd6, 0x44, 0x38, 0x2a, 0xf8, 0x90, 0x9a, 0x38,
+ 0xf3, 0xa8, 0x52, 0x7b, 0x92, 0x04, 0xc9, 0xdf, 0x90, 0xa6, 0xbe, 0x91,
+ 0x7a, 0x66, 0x57, 0xe9, 0x35, 0x07, 0xe9, 0xe3, 0x67, 0x1b, 0x0e, 0x93,
+ 0x03, 0x60, 0xd2, 0x12, 0xb0, 0xfe, 0x49, 0x2f, 0x31, 0x03, 0xf3, 0x4c,
+ 0x73, 0xcc, 0x44, 0x70, 0x1e, 0x58, 0x4d, 0x89, 0x06, 0x4a, 0x94, 0xbd,
+ 0x9c, 0x06, 0x21, 0x13, 0xd3, 0xc4, 0x47, 0xe4, 0x98, 0x62, 0x82, 0xbb,
+ 0xdc, 0x37, 0x0a, 0x0d, 0xb1, 0x49, 0xae, 0x56, 0x07, 0x4f, 0x5f, 0x16,
+ 0x3b, 0x7a, 0x38, 0x61, 0x15, 0x99, 0xc5, 0xd6, 0xc5, 0x4e, 0x7f, 0x7b,
+ 0x23, 0x6b, 0x03, 0x1b, 0x20, 0x19, 0x90, 0xe1, 0x9a, 0xc3, 0x31, 0x0c,
+ 0xa2, 0xb3, 0x45, 0x20, 0x7d, 0xdd, 0x24, 0x69, 0xee, 0x1d, 0xa2, 0x3e,
+ 0x9f, 0x1d, 0x5c, 0xa1, 0x39, 0x59, 0x66, 0x3c, 0x59, 0xb5, 0x20, 0x8f,
+ 0xae, 0xa0, 0x4c, 0x5b, 0xca, 0xa7, 0x18, 0xdf, 0x85, 0xe7, 0x8c, 0x66,
+ 0x52, 0x26, 0xc5, 0x82, 0xf4, 0xd0, 0x46, 0xf5, 0x4f, 0x31, 0x70, 0x02,
+ 0xf9, 0x80, 0x61, 0xa5, 0x0b, 0x04, 0xe1, 0x44, 0xc0, 0xe2, 0x5f, 0x55,
+ 0xdc, 0x2e, 0xf0, 0x78, 0xd2, 0x29, 0xda, 0x54, 0xfc, 0xc2, 0xd6, 0x02,
+ 0x85, 0xe2, 0x33, 0xe0, 0xc3, 0x1e, 0xa0, 0xfa, 0x5b, 0x79, 0x39, 0xdf,
+ 0xbe, 0x87, 0xe1, 0xf1, 0x7e, 0xe0, 0xb4, 0x25, 0x6b, 0xda, 0x41, 0xa6,
+ 0x04, 0x13, 0x70, 0xb0, 0x5d, 0xce, 0x81, 0x6c, 0x6c, 0x07, 0x40, 0xe8,
+ 0xa2, 0x4e, 0x28, 0xf6, 0x43, 0x03, 0x0b, 0x2a, 0x03, 0xc8, 0xca, 0x77,
+ 0x02, 0x0c, 0x31, 0xc9, 0x96, 0xcc, 0xe0, 0xe4, 0xd3, 0xba, 0x03, 0x27,
+ 0x91, 0xd2, 0x8e, 0x05, 0x3b, 0x85, 0xd8, 0x8b, 0xd3, 0x52, 0x7c, 0xc2,
+ 0x41, 0x33, 0xec, 0x47, 0x7f, 0xf9, 0x4b, 0x2f, 0xfa, 0x4b, 0x87, 0xfe,
+ 0x2b, 0xe9, 0x3f, 0x5a, 0xcf, 0xbf, 0x48, 0x2d, 0x83, 0xbf, 0xdc, 0xd1,
+ 0xfd, 0x19, 0x71, 0x49, 0xc2, 0x62, 0xca, 0x20, 0x02, 0x1e, 0xa7, 0xbe,
+ 0x05, 0x5a, 0x43, 0x42, 0x0c, 0xb5, 0x3e, 0x07, 0x1f, 0x7e, 0x58, 0xb0,
+ 0x26, 0x6e, 0xa9, 0x24, 0xb5, 0x86, 0x36, 0x6c, 0x39, 0x9b, 0x4b, 0x38,
+ 0x8a, 0x6e, 0x3b, 0xc8, 0xba, 0xa1, 0x45, 0xc6, 0x51, 0xf7, 0x13, 0xf3,
+ 0x9a, 0x97, 0x96, 0xda, 0x1a, 0x06, 0x69, 0xe2, 0x35, 0xa3, 0xeb, 0x52,
+ 0xeb, 0x40, 0x4a, 0x9c, 0x52, 0x5b, 0xbc, 0xa6, 0xa8, 0xe1, 0x67, 0x73,
+ 0xd8, 0xea, 0x01, 0x11, 0xaa, 0x8c, 0x55, 0x59, 0x21, 0x5b, 0xa5, 0x17,
+ 0x37, 0x2b, 0xe8, 0x9a, 0x3a, 0x24, 0x57, 0xcb, 0x99, 0x46, 0xd9, 0x52,
+ 0x56, 0xa4, 0x29, 0x7c, 0x5b, 0xe1, 0x52, 0x55, 0xd7, 0xad, 0x42, 0x66,
+ 0xc8, 0x57, 0x68, 0x80, 0xdd, 0x7e, 0xb7, 0x8a, 0x8d, 0x68, 0x61, 0x3c,
+ 0x6d, 0x75, 0x6e, 0x82, 0xa2, 0x34, 0x8d, 0xda, 0x98, 0xb0, 0x95, 0x2a,
+ 0xfc, 0x97, 0x80, 0xec, 0x0b, 0xd0, 0x46, 0xe6, 0xbd, 0x49, 0xf0, 0x12,
+ 0x56, 0x26, 0xa2, 0x7a, 0x3b, 0xb1, 0xd6, 0x46, 0x2d, 0x12, 0x05, 0x7e,
+ 0xd3, 0x77, 0xd3, 0x32, 0x50, 0x84, 0xfa, 0x7d, 0xa9, 0x9c, 0xa9, 0x78,
+ 0xd0, 0x90, 0x5a, 0x71, 0x39, 0xb1, 0xc6, 0x53, 0xa4, 0xb3, 0x45, 0xc3,
+ 0xf2, 0xc8, 0x6b, 0xec, 0x85, 0x5e, 0x1e, 0x06, 0x70, 0xf0, 0xb9, 0x9a,
+ 0xce, 0xfd, 0x5c, 0xd9, 0xc8, 0x30, 0x03, 0x8a, 0x80, 0x18, 0xa7, 0x00,
+ 0x2a, 0xe3, 0xe3, 0x76, 0x5a, 0xbc, 0xf6, 0x0d, 0x33, 0x15, 0x8f, 0xe9,
+ 0x55, 0xd4, 0x59, 0xab, 0xa5, 0x74, 0xea, 0x2f, 0x9c, 0x32, 0xec, 0x8b,
+ 0xee, 0xb8, 0x60, 0xfd, 0x8d, 0x61, 0x94, 0x13, 0x7c, 0xb6, 0x29, 0x10,
+ 0x49, 0xb4, 0x76, 0xa1, 0x4b, 0x8a, 0x0c, 0x99, 0xd3, 0x1a, 0x5f, 0x8c,
+ 0x38, 0xb1, 0x04, 0x3a, 0x52, 0x4f, 0x25, 0x57, 0x42, 0x5d, 0x07, 0x7b,
+ 0x6a, 0x36, 0x16, 0xce, 0xe1, 0xbf, 0x55, 0xf4, 0x37, 0xb5, 0x41, 0x6c,
+ 0x9a, 0xb6, 0xf7, 0x37, 0xbb, 0xc7, 0xb6, 0xd4, 0x4a, 0x2e, 0x79, 0xa9,
+ 0x6b, 0xa0, 0x5b, 0xc2, 0x2b, 0xc8, 0x81, 0x09, 0xa5, 0x90, 0xea, 0xe9,
+ 0xbd, 0xe5, 0x7c, 0xe2, 0xc2, 0x04, 0x0d, 0xeb, 0x65, 0x2d, 0x55, 0x43,
+ 0xd1, 0xe1, 0x1e, 0x15, 0x74, 0x4e, 0x89, 0xc7, 0x73, 0x16, 0xf8, 0x1c,
+ 0x0a, 0x27, 0x20, 0x67, 0x39, 0x29, 0xb1, 0x8d, 0x9d, 0xd9, 0xdd, 0x72,
+ 0x71, 0xa0, 0xa8, 0xeb, 0x27, 0x85, 0x1e, 0x55, 0x0d, 0xeb, 0xdc, 0x64,
+ 0x02, 0xf7, 0xd3, 0xd9, 0x67, 0xcd, 0x4a, 0x19, 0x83, 0x9f, 0x65, 0xf3,
+ 0x28, 0x00, 0x4c, 0xe9, 0xeb, 0xb3, 0x37, 0xc7, 0x2e, 0xe3, 0x55, 0x4c,
+ 0x7d, 0xfc, 0x49, 0x2b, 0xc4, 0xe3, 0x00, 0xf9, 0x04, 0x86, 0x00, 0xd1,
+ 0x6b, 0xd6, 0xe8, 0x94, 0x25, 0xba, 0x4e, 0xca, 0xc5, 0xfd, 0x32, 0x9d,
+ 0x6c, 0x02, 0xa4, 0xe3, 0xdd, 0xdb, 0x93, 0xef, 0xfb, 0x62, 0x29, 0x16,
+ 0x45, 0xce, 0x70, 0x2a, 0x0c, 0xe5, 0x42, 0xbc, 0x09, 0xb3, 0x16, 0x4c,
+ 0x16, 0xa5, 0x1a, 0x1c, 0x33, 0x45, 0x25, 0x42, 0xae, 0x5f, 0x3a, 0x17,
+ 0x21, 0x46, 0x1a, 0xa4, 0x7b, 0xe3, 0x6c, 0x4e, 0xec, 0x1b, 0x58, 0x4b,
+ 0x02, 0xa0, 0xd1, 0x92, 0xbd, 0x5b, 0x5d, 0x89, 0xe8, 0xe0, 0xfc, 0xfc,
+ 0xe8, 0xe0, 0xf2, 0xc0, 0xcd, 0x0d, 0xe0, 0x46, 0xe0, 0x73, 0x10, 0x67,
+ 0x58, 0xb1, 0xd7, 0x4a, 0x49, 0xdd, 0xdf, 0x73, 0x86, 0x60, 0x9d, 0xf3,
+ 0x9d, 0x5f, 0x9c, 0xb1, 0x99, 0xf1, 0xf7, 0x7f, 0x39, 0xf0, 0x15, 0xe2,
+ 0x50, 0x0a, 0xa9, 0x59, 0xa8, 0x6b, 0x6f, 0x8b, 0xc7, 0x77, 0xef, 0xc6,
+ 0xa7, 0x71, 0x42, 0x22, 0xc7, 0x45, 0xef, 0x79, 0x43, 0xf3, 0xb1, 0x13,
+ 0x4e, 0x6c, 0x35, 0xb0, 0x00, 0xbd, 0x96, 0xdc, 0xb2, 0x60, 0x22, 0x99,
+ 0xe7, 0xa7, 0x86, 0xf5, 0x64, 0x8b, 0x35, 0x8d, 0x92, 0x87, 0x64, 0xbc,
+ 0x2c, 0xc1, 0xbb, 0xd8, 0x9b, 0xc1, 0xf4, 0x35, 0xe1, 0x95, 0xaa, 0x3b,
+ 0xea, 0xeb, 0xdb, 0xe3, 0x61, 0x13, 0x85, 0x03, 0x49, 0x4a, 0x67, 0x26,
+ 0x55, 0x31, 0x06, 0x3a, 0x5a, 0x5f, 0x17, 0xa3, 0x71, 0x76, 0x04, 0x48,
+ 0x91, 0xe8, 0xdc, 0xe8, 0xb1, 0xb1, 0x20, 0x9f, 0x10, 0xe3, 0xeb, 0x5b,
+ 0x88, 0xa9, 0x4c, 0x9c, 0x3e, 0x68, 0x3c, 0x54, 0xba, 0x1a, 0x0f, 0x2c,
+ 0x26, 0x35, 0xbd, 0x9f, 0xca, 0xa7, 0x42, 0x06, 0x55, 0x37, 0xf5, 0x28,
+ 0x64, 0x8c, 0x3e, 0x05, 0xa8, 0x62, 0x44, 0x21, 0x36, 0xfd, 0x39, 0xe6,
+ 0x58, 0xa4, 0x47, 0x49, 0x2a, 0x26, 0x11, 0x97, 0xff, 0xda, 0xde, 0x1d,
+ 0xec, 0x74, 0x9a, 0xa3, 0x47, 0xe2, 0x19, 0x2c, 0xe3, 0xf1, 0x5c, 0xee,
+ 0x67, 0x01, 0xe6, 0xcd, 0x3e, 0x3c, 0x40, 0xe1, 0xa0, 0x24, 0xf3, 0x21,
+ 0x6e, 0xa1, 0x6d, 0x2c, 0xfd, 0xb3, 0x86, 0x77, 0x48, 0x3c, 0x9c, 0x9e,
+ 0x25, 0xcf, 0x33, 0x84, 0x95, 0xc6, 0x6c, 0x2c, 0x83, 0x9f, 0xa0, 0xd3,
+ 0xbe, 0xc0, 0xf3, 0x89, 0x44, 0x3b, 0xd4, 0xd6, 0xf9, 0x51, 0xdd, 0x65,
+ 0x7d, 0x98, 0xa0, 0xa3, 0x01, 0xf7, 0xf1, 0x5a, 0x6e, 0x57, 0x71, 0x8b,
+ 0x5a, 0xa1, 0xfb, 0x56, 0xf0, 0xd5, 0x03, 0xc1, 0x3f, 0x0e, 0x35, 0x0d,
+ 0xce, 0x83, 0xe3, 0xea, 0x81, 0x1c, 0x55, 0xc5, 0x9a, 0x93, 0xe6, 0x6f,
+ 0xce, 0x2a, 0x65, 0x00, 0xf1, 0x7b, 0xf3, 0xb6, 0xad, 0x94, 0x8d, 0x8e,
+ 0xb4, 0xe7, 0xbe, 0x5c, 0xb8, 0x6a, 0xa9, 0x43, 0x15, 0x96, 0xa0, 0x44,
+ 0xb6, 0xf3, 0x02, 0xac, 0x81, 0x07, 0x31, 0x29, 0x95, 0xd4, 0xc1, 0xa9,
+ 0xc0, 0xa9, 0x48, 0x40, 0xad, 0x68, 0x51, 0x32, 0x2c, 0xf1, 0xb8, 0x7b,
+ 0x2f, 0x14, 0xbf, 0xf7, 0xbb, 0xb6, 0xa2, 0xdb, 0xfb, 0x8a, 0xcf, 0x92,
+ 0x25, 0xa2, 0xc3, 0x89, 0xdf, 0x9e, 0x43, 0x22, 0x34, 0x51, 0xa9, 0xff,
+ 0xda, 0x99, 0xd5, 0xcc, 0xee, 0xc6, 0x3a, 0x2a, 0x2d, 0x79, 0x13, 0x24,
+ 0x54, 0x80, 0x2c, 0xd8, 0xb2, 0x8b, 0xd2, 0x60, 0x3d, 0x36, 0x71, 0x09,
+ 0x3b, 0xc8, 0x18, 0x62, 0x21, 0x36, 0xe8, 0x3b, 0x3d, 0x04, 0xd4, 0xd7,
+ 0x35, 0x49, 0xc7, 0x6b, 0x42, 0xaa, 0x0d, 0x64, 0xc4, 0xd7, 0xd7, 0x65,
+ 0xef, 0x40, 0x61, 0x99, 0xb5, 0xef, 0x81, 0x9f, 0x35, 0x99, 0x6c, 0x3e,
+ 0xd9, 0x12, 0x23, 0x86, 0xab, 0x9c, 0x0d, 0xc7, 0xdd, 0xbf, 0xa8, 0x3c,
+ 0xaa, 0x70, 0xe0, 0x4b, 0x10, 0xb6, 0x6d, 0xab, 0x8b, 0x2c, 0x7b, 0x2c,
+ 0xcf, 0x66, 0x4a, 0x92, 0x4e, 0xd9, 0x87, 0x69, 0xe9, 0x25, 0x89, 0x5c,
+ 0xc9, 0x64, 0xad, 0x96, 0x29, 0xd0, 0x0c, 0xf1, 0x43, 0x3a, 0x5b, 0xce,
+ 0xbc, 0xe7, 0x99, 0x71, 0x79, 0xcb, 0xa4, 0x59, 0xe1, 0x50, 0x6d, 0x1a,
+ 0x0d, 0x79, 0x5a, 0xfd, 0x5e, 0x3a, 0x43, 0x20, 0x13, 0x4b, 0x0c, 0x11,
+ 0xbc, 0x2a, 0xac, 0xfe, 0xd3, 0x78, 0x38, 0x8b, 0x3f, 0x5d, 0x88, 0x0c,
+ 0xc1, 0x71, 0x2b, 0x13, 0x71, 0x9c, 0x32, 0x05, 0xd5, 0x37, 0xd5, 0x86,
+ 0x81, 0x0a, 0x06, 0xe2, 0x94, 0x90, 0x60, 0xa0, 0x79, 0xc9, 0xa9, 0x72,
+ 0x23, 0x6a, 0xe2, 0x3e, 0x9d, 0x94, 0x37, 0xed, 0x78, 0x83, 0xb2, 0x8e,
+ 0x98, 0x77, 0x24, 0x08, 0x25, 0x1c, 0x5e, 0x82, 0xa5, 0x82, 0xcf, 0x78,
+ 0x5b, 0x0c, 0xc7, 0x2e, 0xdb, 0x3e, 0x26, 0xba, 0xbb, 0xe2, 0xf4, 0x88,
+ 0xa6, 0x9e, 0xa0, 0x61, 0x71, 0x03, 0x3b, 0xa2, 0x08, 0xbc, 0xbd, 0xed,
+ 0xf2, 0x2d, 0xd9, 0xfd, 0x46, 0xad, 0x22, 0x02, 0x5b, 0x84, 0x60, 0x6a,
+ 0xad, 0x0e, 0xce, 0x11, 0x31, 0xb7, 0xe9, 0xb4, 0x59, 0x20, 0x71, 0x05,
+ 0x65, 0x2a, 0xea, 0xce, 0x24, 0x8c, 0xf5, 0x4d, 0x57, 0x0d, 0xf8, 0x28,
+ 0x84, 0xac, 0x1e, 0xed, 0x9e, 0xa4, 0x3e, 0x44, 0xdd, 0x6b, 0xe9, 0xe6,
+ 0x2b, 0xff, 0x50, 0xad, 0x39, 0xef, 0x04, 0xb7, 0x5b, 0xa4, 0xd8, 0x8f,
+ 0xf6, 0x76, 0x76, 0xbe, 0xe9, 0x45, 0x4f, 0xa4, 0x74, 0xec, 0xee, 0x57,
+ 0xad, 0x2b, 0x24, 0x0b, 0x84, 0x2d, 0x56, 0xfd, 0x33, 0xbe, 0x03, 0xaf,
+ 0xd7, 0x45, 0xc3, 0x8c, 0x58, 0x53, 0x9c, 0x2c, 0x03, 0xdb, 0xb2, 0x2c,
+ 0xfe, 0x9a, 0xad, 0x82, 0x19, 0xbb, 0x0e, 0x85, 0x30, 0x43, 0xdc, 0x10,
+ 0xef, 0xde, 0x0d, 0xfd, 0xc6, 0xde, 0x7b, 0xdb, 0x58, 0xf4, 0xd3, 0x92,
+ 0xcf, 0x5e, 0xdc, 0xf0, 0xf1, 0x1f, 0x2d, 0x73, 0x9c, 0x64, 0x76, 0x84,
+ 0x4a, 0x39, 0x22, 0xb6, 0xad, 0x43, 0x67, 0x90, 0x5a, 0xd2, 0xbe, 0x74,
+ 0x6a, 0x59, 0x99, 0xce, 0xa0, 0xbd, 0xde, 0x23, 0xe2, 0x67, 0x5c, 0x41,
+ 0xd8, 0x1f, 0x48, 0x61, 0x42, 0xff, 0x72, 0x4c, 0xbc, 0xe2, 0x21, 0xda,
+ 0x4e, 0xe8, 0x61, 0xac, 0x4f, 0x96, 0xb5, 0x2a, 0xd1, 0x53, 0x61, 0x60,
+ 0x86, 0x29, 0x1c, 0x73, 0x64, 0xfc, 0xb4, 0x85, 0x96, 0xe9, 0xe1, 0x81,
+ 0x48, 0xd3, 0xe0, 0xb7, 0x53, 0x7e, 0x60, 0xba, 0xea, 0x35, 0xd5, 0x0e,
+ 0x0e, 0x0b, 0x84, 0x3f, 0xc0, 0x14, 0xa1, 0x70, 0x54, 0x9c, 0x3e, 0x3b,
+ 0x46, 0x89, 0x1a, 0x8e, 0xec, 0xfa, 0xed, 0xcc, 0x52, 0x53, 0xc6, 0xe3,
+ 0x4f, 0x8b, 0xb2, 0xcf, 0xee, 0xdd, 0xf5, 0xa8, 0x5d, 0x9a, 0x53, 0x6e,
+ 0xe8, 0x5d, 0x13, 0x8f, 0x86, 0x29, 0x96, 0x6c, 0x29, 0xbd, 0x81, 0x28,
+ 0x4a, 0x68, 0xc9, 0xcc, 0xbe, 0xfa, 0x8d, 0x40, 0x3f, 0xd6, 0x8f, 0xef,
+ 0xd2, 0xe4, 0x9e, 0xd3, 0xb2, 0x8f, 0x3d, 0x28, 0x59, 0x95, 0x67, 0x58,
+ 0xf5, 0x8b, 0x59, 0x3c, 0xbe, 0xa1, 0x0b, 0xa5, 0x8f, 0xb8, 0xeb, 0x16,
+ 0x19, 0x2b, 0xac, 0xa0, 0x5a, 0x1f, 0x16, 0x83, 0xe1, 0xb8, 0x34, 0x2c,
+ 0xc3, 0xa5, 0x0b, 0x90, 0x14, 0x79, 0x10, 0x6b, 0x40, 0xb0, 0xc4, 0x58,
+ 0xea, 0x70, 0xae, 0xa0, 0x39, 0x66, 0xb9, 0x41, 0xc9, 0x7e, 0x48, 0x6c,
+ 0x90, 0x2c, 0x35, 0x43, 0xe3, 0x7a, 0x7b, 0x3a, 0xf4, 0x18, 0x01, 0xa5,
+ 0x56, 0x52, 0x80, 0xad, 0x60, 0xc8, 0x52, 0xe1, 0xeb, 0x35, 0x55, 0xa5,
+ 0x0b, 0x01, 0xcc, 0x97, 0xf8, 0x20, 0x44, 0xbf, 0x88, 0x78, 0x9b, 0xe6,
+ 0x15, 0xac, 0x07, 0x6e, 0xfd, 0xcf, 0x1a, 0xa0, 0x3d, 0x91, 0x2a, 0x3a,
+ 0xed, 0x91, 0x2a, 0x9c, 0x51, 0x17, 0x16, 0x42, 0x87, 0xb1, 0x19, 0x49,
+ 0x5e, 0x44, 0x62, 0x74, 0x69, 0xdf, 0x56, 0x25, 0x15, 0xce, 0xd1, 0x10,
+ 0x64, 0x98, 0x97, 0xc4, 0xd1, 0x3e, 0xff, 0xb1, 0x4f, 0xff, 0xfe, 0xd4,
+ 0xf0, 0x05, 0x96, 0x82, 0x27, 0xa3, 0x26, 0x2d, 0x0b, 0x2b, 0xcd, 0x3d,
+ 0x3c, 0xbe, 0x54, 0xa6, 0x47, 0x3b, 0xf2, 0x6d, 0x11, 0x14, 0x16, 0x68,
+ 0x0d, 0x91, 0x30, 0xb7, 0xdc, 0x66, 0xc1, 0x50, 0x40, 0x01, 0x00, 0xb9,
+ 0x44, 0x0d, 0x59, 0x2b, 0xb0, 0x0b, 0xcc, 0xe5, 0xc6, 0x91, 0xd2, 0x1d,
+ 0x75, 0xd5, 0x95, 0x5d, 0xed, 0xe3, 0xc4, 0xfb, 0x25, 0x7d, 0x7d, 0xc7,
+ 0x11, 0x03, 0xc4, 0x14, 0x2b, 0x86, 0x7a, 0x12, 0x71, 0xae, 0xc8, 0x5c,
+ 0x42, 0x0b, 0x28, 0x19, 0xc3, 0x6f, 0x3a, 0x72, 0x19, 0x8d, 0x48, 0xa2,
+ 0x33, 0x48, 0xc0, 0xa5, 0xce, 0xf3, 0x3c, 0xbb, 0xb7, 0xb3, 0xaf, 0x61,
+ 0xc9, 0x81, 0xcc, 0xe0, 0x1d, 0x8c, 0xd4, 0xf6, 0x72, 0xd1, 0xe2, 0x79,
+ 0xe5, 0x54, 0x85, 0x06, 0x90, 0x48, 0x98, 0x89, 0x19, 0xd6, 0xc9, 0x68,
+ 0x0d, 0x4f, 0x01, 0x92, 0xfc, 0x96, 0x47, 0x51, 0x75, 0xa5, 0x4d, 0xc4,
+ 0x96, 0xed, 0xd2, 0x2b, 0x34, 0x74, 0x1b, 0x18, 0x3a, 0x1c, 0x8b, 0xdc,
+ 0x28, 0x3d, 0x2e, 0xa9, 0xd5, 0xc0, 0x5d, 0xb0, 0xb8, 0xeb, 0x32, 0x72,
+ 0x25, 0x3a, 0x36, 0xd9, 0x93, 0x39, 0x86, 0xfd, 0x4b, 0x03, 0xc2, 0xeb,
+ 0x65, 0x32, 0xda, 0x70, 0x09, 0x88, 0x03, 0x3c, 0xf9, 0xfe, 0xfb, 0x00,
+ 0x9a, 0x84, 0xe5, 0xcd, 0xad, 0x5e, 0x85, 0x69, 0xd5, 0x2a, 0x46, 0x12,
+ 0x15, 0x65, 0x2d, 0xa7, 0xdc, 0xc2, 0xec, 0x35, 0x14, 0x95, 0x23, 0x31,
+ 0xa0, 0xc4, 0x0d, 0x5c, 0x08, 0xbc, 0x15, 0xb8, 0xd6, 0xe0, 0xf7, 0x20,
+ 0x0c, 0xac, 0xa5, 0x7e, 0x94, 0x0b, 0xf9, 0xe9, 0xf9, 0xd8, 0x5b, 0x89,
+ 0x3c, 0x41, 0x78, 0x5a, 0xb8, 0x54, 0x85, 0xa3, 0x18, 0xba, 0x95, 0xee,
+ 0xe7, 0x83, 0xb6, 0xca, 0x26, 0x4d, 0xec, 0x44, 0xc9, 0x62, 0xc0, 0x8c,
+ 0x70, 0x7e, 0xa5, 0x1a, 0x0f, 0x9b, 0xa6, 0xc6, 0x79, 0xa2, 0x9e, 0x9b,
+ 0xc2, 0x95, 0x96, 0x6f, 0x9c, 0x57, 0xb1, 0xf3, 0x20, 0xd2, 0x4a, 0xc0,
+ 0xc2, 0x39, 0x5c, 0x57, 0xce, 0x2e, 0xae, 0x1f, 0x1f, 0xcf, 0x10, 0xee,
+ 0x16, 0x3f, 0xde, 0x6b, 0x0a, 0x08, 0xf7, 0x28, 0x3f, 0x12, 0x98, 0xee,
+ 0x10, 0x72, 0xa5, 0x99, 0x49, 0x82, 0x79, 0xf3, 0xa7, 0x6a, 0x91, 0x3d,
+ 0xcd, 0x9b, 0x13, 0xd2, 0x6b, 0xab, 0x24, 0xd8, 0x2f, 0xf3, 0x25, 0x56,
+ 0x88, 0x37, 0x84, 0x41, 0xdc, 0x58, 0x32, 0xb6, 0x74, 0x32, 0x76, 0xf2,
+ 0x59, 0x74, 0x99, 0xdc, 0x62, 0xde, 0xdd, 0xda, 0x0c, 0x02, 0xb1, 0x79,
+ 0x59, 0xda, 0x3a, 0xa7, 0xa9, 0x57, 0x02, 0x24, 0xfa, 0x7d, 0x12, 0x4c,
+ 0xfb, 0x78, 0xac, 0x68, 0x54, 0x76, 0x68, 0xd8, 0xbc, 0xa4, 0x85, 0x22,
+ 0x5c, 0x30, 0xd3, 0x21, 0x8c, 0x86, 0xd4, 0x65, 0x14, 0x33, 0x05, 0xb1,
+ 0x09, 0xee, 0xab, 0xe3, 0xcb, 0xfa, 0xd1, 0x02, 0x74, 0x84, 0xaa, 0x8a,
+ 0xc8, 0x9f, 0xa0, 0xbf, 0xcf, 0xdf, 0x5d, 0x6e, 0x79, 0x73, 0xc0, 0x24,
+ 0xab, 0xd9, 0xac, 0xac, 0xf5, 0x96, 0x4c, 0x14, 0xc9, 0x51, 0x50, 0x50,
+ 0x06, 0x24, 0x9a, 0xb8, 0x03, 0xc1, 0x28, 0x0a, 0x4f, 0x76, 0x76, 0x49,
+ 0x54, 0xdb, 0xd9, 0x83, 0xd5, 0xe5, 0xc9, 0xce, 0x13, 0x67, 0xce, 0xb6,
+ 0xa7, 0x1a, 0x37, 0x1e, 0xd3, 0x34, 0xf0, 0x17, 0x50, 0xcc, 0x56, 0xb4,
+ 0xee, 0xe8, 0xc9, 0xc3, 0x03, 0xbe, 0xea, 0x55, 0xb1, 0x7a, 0x8a, 0x44,
+ 0xa7, 0xef, 0x86, 0xba, 0xe6, 0x68, 0xf9, 0x15, 0x87, 0xf9, 0x64, 0x39,
+ 0x97, 0xd8, 0x2f, 0x56, 0x7d, 0x91, 0xf1, 0x50, 0xbf, 0x1c, 0x42, 0x3a,
+ 0x78, 0x8c, 0x35, 0x9d, 0xb2, 0x78, 0x5f, 0x61, 0x64, 0x3d, 0x8f, 0x4c,
+ 0x22, 0x70, 0xbf, 0xa6, 0xdd, 0x59, 0x2a, 0x62, 0xad, 0xb9, 0x3f, 0x05,
+ 0x28, 0x9f, 0x52, 0x20, 0x05, 0xa4, 0x1e, 0x70, 0x37, 0x54, 0xbc, 0xe2,
+ 0xa4, 0x31, 0x7f, 0x4a, 0x32, 0x75, 0x10, 0x36, 0xf3, 0x20, 0xb2, 0x1c,
+ 0x8f, 0x4a, 0xd2, 0x7f, 0x99, 0x67, 0x93, 0xe5, 0x18, 0x77, 0x3d, 0x87,
+ 0xbd, 0x70, 0x21, 0xbf, 0x91, 0xa0, 0x3e, 0x1a, 0x88, 0x06, 0x37, 0xed,
+ 0x89, 0xb4, 0xa9, 0x66, 0x2b, 0x6c, 0x3a, 0x9e, 0x73, 0x69, 0xbb, 0xac,
+ 0xd9, 0xb0, 0xd1, 0xc8, 0x65, 0x0b, 0xd7, 0x59, 0xc4, 0xfc, 0x2a, 0x53,
+ 0xd3, 0x5f, 0x13, 0xa4, 0x17, 0x74, 0x09, 0x27, 0x9d, 0x99, 0xd5, 0x63,
+ 0x29, 0x46, 0x07, 0xda, 0xf9, 0x92, 0x83, 0xd5, 0x6a, 0xed, 0x55, 0x60,
+ 0x58, 0x67, 0x0c, 0x2a, 0x9b, 0x8f, 0xe9, 0x78, 0xbf, 0xd4, 0xa8, 0xcd,
+ 0xa6, 0xab, 0x1f, 0xa0, 0x23, 0x43, 0x67, 0xc2, 0x57, 0xac, 0x48, 0x0f,
+ 0x3a, 0xa5, 0xeb, 0x2a, 0x32, 0xf5, 0x4c, 0xe0, 0x87, 0x35, 0x69, 0xa6,
+ 0x99, 0xb8, 0x05, 0x64, 0x55, 0xbf, 0xe2, 0x1f, 0xcc, 0xb1, 0x0c, 0x5d,
+ 0x00, 0x2d, 0x68, 0x91, 0xb4, 0xd0, 0xe9, 0x82, 0x41, 0xbe, 0x9a, 0xb6,
+ 0xed, 0xf5, 0x18, 0x25, 0x3a, 0x6d, 0x30, 0xf1, 0x7f, 0xe7, 0xb4, 0xe1,
+ 0x76, 0xfd, 0x65, 0xc3, 0x7c, 0x40, 0x91, 0x1a, 0xc4, 0x59, 0xbe, 0x84,
+ 0xe2, 0xf6, 0x91, 0x6a, 0x39, 0xde, 0xd8, 0x34, 0xf5, 0x75, 0xcb, 0xe7,
+ 0x5b, 0x0b, 0xe6, 0x84, 0x00, 0x3a, 0x31, 0xf3, 0x58, 0x17, 0xda, 0xe9,
+ 0x2f, 0xb6, 0xb4, 0x1a, 0x49, 0x8d, 0xfb, 0x18, 0x99, 0x97, 0xbd, 0x2a,
+ 0x3c, 0xce, 0xba, 0x7a, 0x82, 0x08, 0x7c, 0x04, 0x63, 0x0d, 0x79, 0x0d,
+ 0xe0, 0x8f, 0x71, 0xfd, 0x26, 0x0f, 0xf0, 0xb9, 0x10, 0x9f, 0x7a, 0xfe,
+ 0x64, 0xd0, 0x6e, 0xfb, 0x11, 0x25, 0xdd, 0x87, 0x9c, 0x1a, 0x57, 0x16,
+ 0x27, 0x85, 0xc0, 0xc9, 0x2c, 0x72, 0x86, 0x96, 0x0d, 0x66, 0xd7, 0x6b,
+ 0xc1, 0xcd, 0x43, 0xe0, 0x39, 0x83, 0x80, 0x8b, 0x8c, 0x5c, 0x36, 0xa2,
+ 0x91, 0x2c, 0xfe, 0xc8, 0x4a, 0x72, 0x79, 0x23, 0x17, 0x4f, 0xb3, 0xe1,
+ 0x3d, 0xe6, 0x69, 0xe3, 0xb6, 0x06, 0x5a, 0x96, 0xa4, 0x59, 0x36, 0x16,
+ 0x4b, 0x28, 0x04, 0xb7, 0x9b, 0x41, 0x53, 0x64, 0xa4, 0x6a, 0xe4, 0x8d,
+ 0x50, 0x2a, 0xe4, 0xaf, 0xb3, 0x12, 0x80, 0xb0, 0xdf, 0xcb, 0x4a, 0x6d,
+ 0x48, 0x4f, 0x15, 0xb3, 0x6d, 0x21, 0x8c, 0x47, 0x23, 0xda, 0xde, 0x28,
+ 0x21, 0x88, 0x1a, 0x3c, 0x57, 0x78, 0x61, 0x25, 0x5b, 0x51, 0x70, 0x0d,
+ 0xe3, 0x85, 0xb8, 0x50, 0x06, 0xc4, 0x5a, 0x67, 0x85, 0x6b, 0x71, 0x77,
+ 0x91, 0x1c, 0x31, 0x08, 0x60, 0x54, 0x83, 0x38, 0x7e, 0x2d, 0x11, 0x9c,
+ 0x5a, 0x01, 0x83, 0x11, 0x8a, 0x9c, 0xff, 0x35, 0x1b, 0xa9, 0x94, 0xc4,
+ 0x37, 0x7d, 0x1b, 0x72, 0xed, 0x15, 0xa2, 0xc3, 0x49, 0x6d, 0x8f, 0x26,
+ 0x4b, 0x71, 0x12, 0xf2, 0x80, 0xe6, 0x49, 0xc9, 0x0a, 0x2c, 0x62, 0xc7,
+ 0x45, 0xcf, 0xa0, 0xd3, 0x24, 0xd8, 0x8e, 0x88, 0x69, 0x95, 0x98, 0xc2,
+ 0x06, 0x68, 0x9c, 0xab, 0xec, 0xa4, 0x72, 0x34, 0x16, 0x87, 0x5d, 0x61,
+ 0x6b, 0x64, 0x80, 0x5f, 0x4f, 0x19, 0x7e, 0x83, 0xdd, 0x98, 0x37, 0xa3,
+ 0xf6, 0xde, 0xe0, 0xc3, 0x01, 0x57, 0xac, 0xe4, 0x18, 0x6a, 0x71, 0x4f,
+ 0x2c, 0x35, 0xb5, 0x4f, 0x8a, 0x21, 0xfb, 0x56, 0xe6, 0xdb, 0x5c, 0x9e,
+ 0xb8, 0xcc, 0xc7, 0x8d, 0x46, 0x6e, 0x7d, 0xa6, 0x5b, 0x81, 0x00, 0x0b,
+ 0x6c, 0xd9, 0x00, 0x0f, 0x13, 0xf3, 0x78, 0xaf, 0xbf, 0x64, 0xce, 0x8f,
+ 0xb3, 0x15, 0x3a, 0x44, 0x5a, 0xcc, 0xf5, 0xdd, 0xc2, 0xf9, 0x17, 0x54,
+ 0xb5, 0xe5, 0x9d, 0x00, 0xf4, 0x56, 0x5b, 0x1d, 0x65, 0x87, 0x27, 0xbb,
+ 0x5a, 0x34, 0x82, 0x27, 0x24, 0x0c, 0x5a, 0x96, 0xee, 0x4a, 0x0a, 0x54,
+ 0x99, 0xdf, 0xca, 0xcb, 0xda, 0xae, 0x86, 0x55, 0x28, 0x6b, 0x08, 0x38,
+ 0x4a, 0xcb, 0xe8, 0x1a, 0xf5, 0xaa, 0x59, 0xc4, 0xc4, 0x1c, 0x37, 0x9f,
+ 0x6e, 0x41, 0xa9, 0x2e, 0x17, 0x9b, 0xbb, 0x5b, 0x82, 0xbb, 0xa6, 0xa9,
+ 0xfc, 0x16, 0xbe, 0xd1, 0xe6, 0x3d, 0xf4, 0xf5, 0xaf, 0x82, 0xda, 0xaa,
+ 0xcc, 0x3b, 0x00, 0x09, 0x8b, 0xf8, 0xcd, 0x2b, 0x39, 0x14, 0x78, 0xdc,
+ 0x34, 0x7a, 0x36, 0x42, 0xb6, 0x70, 0x46, 0xc9, 0x6a, 0x5b, 0xb0, 0x9f,
+ 0xa6, 0x10, 0xc8, 0xf5, 0xcd, 0xb4, 0x0c, 0x33, 0xf8, 0x38, 0xbf, 0x59,
+ 0x2a, 0x89, 0xd0, 0xea, 0x4d, 0x27, 0x7d, 0x90, 0xf1, 0x75, 0x9e, 0x35,
+ 0x11, 0xc2, 0xd8, 0xc9, 0xce, 0x6b, 0xb0, 0x65, 0xae, 0xd0, 0xd6, 0x4a,
+ 0x19, 0x1d, 0x76, 0x29, 0x76, 0xc2, 0x3a, 0x68, 0xe6, 0xb5, 0xac, 0x1b,
+ 0x86, 0x2a, 0x5b, 0xda, 0xa0, 0xf7, 0x83, 0xe8, 0x6f, 0xcb, 0x74, 0x7c,
+ 0x8b, 0xbd, 0x45, 0xf8, 0x13, 0x3c, 0x54, 0x89, 0x93, 0x5b, 0xe9, 0x7a,
+ 0x60, 0xc9, 0x5c, 0x2a, 0x62, 0xb1, 0xfe, 0x09, 0x31, 0xc5, 0xa8, 0xac,
+ 0xa5, 0x4a, 0x0d, 0x9f, 0x55, 0xa7, 0x57, 0x00, 0x25, 0x4a, 0x4e, 0xa0,
+ 0x5a, 0x60, 0x44, 0x1b, 0x99, 0x64, 0x1c, 0x21, 0xcb, 0x8e, 0x16, 0xa1,
+ 0x82, 0x75, 0xd8, 0xec, 0xdd, 0xd9, 0x8a, 0xb3, 0xd0, 0xbb, 0x15, 0xd2,
+ 0x8b, 0xba, 0xc4, 0xb3, 0xe8, 0x9e, 0xe8, 0xda, 0xfa, 0xd6, 0x1c, 0xf2,
+ 0x4d, 0xb4, 0xeb, 0x35, 0x5d, 0x0b, 0x69, 0x4b, 0x17, 0xbe, 0x75, 0x69,
+ 0x3c, 0xb8, 0x6b, 0x31, 0xd7, 0xbe, 0xf9, 0xde, 0x6b, 0x6d, 0x7f, 0xab,
+ 0x6b, 0xe6, 0x31, 0x1b, 0xf0, 0xb8, 0xd5, 0x7a, 0xf6, 0x9c, 0x44, 0xec,
+ 0xae, 0xbc, 0x12, 0xb6, 0x78, 0xcb, 0xa2, 0x99, 0xe0, 0xe7, 0x2a, 0xb0,
+ 0xf1, 0x84, 0x99, 0x6e, 0xd8, 0xda, 0x13, 0x5b, 0x6d, 0x19, 0xe1, 0x64,
+ 0xf2, 0xba, 0x36, 0xcb, 0x74, 0x39, 0xa8, 0x0c, 0x56, 0x43, 0xdc, 0xd6,
+ 0xa4, 0x2d, 0x59, 0x25, 0xf8, 0xa8, 0x12, 0x0f, 0xd7, 0x52, 0x0c, 0x3e,
+ 0xa9, 0x3e, 0xd1, 0x9e, 0xbe, 0xcc, 0xea, 0xc3, 0x24, 0xe1, 0x48, 0x23,
+ 0x89, 0x7f, 0x7a, 0x93, 0x8e, 0xf3, 0xac, 0xc8, 0xae, 0xe4, 0x56, 0xf7,
+ 0xb8, 0x99, 0x6a, 0x70, 0xe2, 0xf4, 0xe2, 0x98, 0x9d, 0xbb, 0x4d, 0x7e,
+ 0xa1, 0xe5, 0xf8, 0xd8, 0xf2, 0x8b, 0x80, 0x42, 0xba, 0xb4, 0x67, 0x44,
+ 0xeb, 0xcc, 0x45, 0xd8, 0x12, 0x5c, 0x8a, 0x21, 0x3c, 0x8e, 0x9c, 0x5b,
+ 0x87, 0xcf, 0xb9, 0x85, 0x4c, 0x3e, 0x7b, 0x5c, 0x93, 0xe6, 0xad, 0xd0,
+ 0x2a, 0x2e, 0x66, 0xbd, 0x9d, 0x68, 0x65, 0x1d, 0xc5, 0x44, 0x12, 0xe5,
+ 0xc7, 0x5e, 0x6b, 0x1f, 0x9d, 0x29, 0x30, 0xc0, 0x2f, 0x87, 0xd1, 0x38,
+ 0xac, 0x98, 0xc8, 0x81, 0x80, 0x27, 0xc7, 0x97, 0xaf, 0xa3, 0x49, 0x1e,
+ 0xd3, 0xf4, 0xf1, 0x6f, 0x9f, 0x74, 0x80, 0x9f, 0xe3, 0x46, 0x16, 0x70,
+ 0xb1, 0xe0, 0x4d, 0xea, 0xb3, 0xe7, 0xb1, 0xbf, 0xf3, 0x74, 0x50, 0x3e,
+ 0xb4, 0x46, 0x0a, 0x86, 0xd6, 0x4b, 0xad, 0xac, 0xe1, 0xb7, 0x4b, 0x13,
+ 0x3c, 0x73, 0xc4, 0xcc, 0x3e, 0xac, 0x1a, 0x20, 0x87, 0x6d, 0xa0, 0xc0,
+ 0xa8, 0x57, 0xdc, 0xc7, 0xf3, 0x9e, 0x4a, 0x3e, 0x36, 0xec, 0xb2, 0x35,
+ 0xea, 0x52, 0x02, 0x2d, 0xab, 0xa1, 0x94, 0x4d, 0x3d, 0xa4, 0x35, 0xb0,
+ 0xd2, 0xe2, 0x2a, 0xdb, 0xe2, 0x28, 0xed, 0xe3, 0x35, 0xe8, 0x89, 0x45,
+ 0x95, 0x30, 0xdb, 0xb5, 0x78, 0x5f, 0x5b, 0xa6, 0x86, 0xa1, 0x81, 0x18,
+ 0x36, 0x50, 0x81, 0x45, 0x58, 0x93, 0xf4, 0xcb, 0x76, 0xa3, 0xfe, 0x52,
+ 0xd3, 0x61, 0xdb, 0x93, 0x84, 0xac, 0x10, 0xb4, 0x61, 0xbb, 0xd5, 0x48,
+ 0x0c, 0x52, 0xaa, 0xb9, 0x1e, 0x07, 0x52, 0x3b, 0x57, 0xc2, 0xcf, 0xea,
+ 0x1c, 0xad, 0xbf, 0x8c, 0xa2, 0xfd, 0xae, 0x10, 0x79, 0x32, 0xe7, 0x9a,
+ 0x1a, 0x42, 0xda, 0xb8, 0xbd, 0x1d, 0x1f, 0xac, 0x32, 0x3c, 0x97, 0xcc,
+ 0xd2, 0x5f, 0xb6, 0x8f, 0x2e, 0xce, 0x13, 0xbe, 0x9c, 0x24, 0x04, 0x52,
+ 0x4b, 0x88, 0x0d, 0xfe, 0x1d, 0x88, 0xdb, 0x55, 0x7c, 0x05, 0xcf, 0x87,
+ 0xde, 0x6e, 0x23, 0x48, 0x7f, 0xb4, 0xe4, 0xef, 0x5a, 0x2b, 0x75, 0x2b,
+ 0x33, 0x94, 0x27, 0xd4, 0x29, 0x1b, 0xb8, 0x56, 0x0b, 0x0e, 0x94, 0x9b,
+ 0x31, 0x72, 0xb0, 0x99, 0xdc, 0x59, 0xfa, 0x63, 0xfd, 0xb8, 0x4e, 0x13,
+ 0x4b, 0xe1, 0x1d, 0xa1, 0x10, 0x51, 0x33, 0xbb, 0x4b, 0x1f, 0xb0, 0x33,
+ 0x49, 0xe3, 0xda, 0x7a, 0xd4, 0xe6, 0xa0, 0x46, 0x03, 0x2e, 0x81, 0x4b,
+ 0x85, 0x7e, 0x81, 0x32, 0x50, 0x6b, 0x83, 0x36, 0xe2, 0xd0, 0xd8, 0x19,
+ 0x36, 0xe3, 0x66, 0x49, 0x02, 0x69, 0xaf, 0xc5, 0x6a, 0x6e, 0x86, 0xdc,
+ 0x14, 0x85, 0x30, 0x62, 0xa4, 0xe0, 0x5b, 0x96, 0x96, 0xbc, 0xce, 0x99,
+ 0xde, 0x77, 0x40, 0x3b, 0xb4, 0x52, 0x46, 0x8f, 0x14, 0xe8, 0x12, 0xab,
+ 0x91, 0x56, 0x98, 0xc7, 0xa8, 0xdc, 0x02, 0x3e, 0x1e, 0x76, 0x67, 0x50,
+ 0xf8, 0x62, 0xf7, 0xbc, 0x86, 0x0d, 0x36, 0x88, 0x2f, 0x73, 0x19, 0x80,
+ 0xec, 0x9f, 0x54, 0xb3, 0x5b, 0x83, 0x89, 0x48, 0x65, 0x11, 0x62, 0x22,
+ 0xd2, 0xa7, 0x70, 0x26, 0x0f, 0x76, 0xd1, 0x32, 0x92, 0x6a, 0xa6, 0xc6,
+ 0x63, 0x74, 0xb0, 0x14, 0xdb, 0x84, 0xcf, 0xea, 0xe0, 0x94, 0x76, 0x18,
+ 0x4e, 0xd5, 0x58, 0x7b, 0x79, 0x78, 0x1e, 0xd8, 0xc2, 0x49, 0x85, 0x2b,
+ 0x9a, 0x29, 0x4d, 0x2e, 0xca, 0x0c, 0xc1, 0x3a, 0x73, 0xd7, 0xfa, 0xec,
+ 0xdf, 0xb8, 0x36, 0x7e, 0x06, 0xc1, 0xf2, 0xb8, 0x0f, 0x6b, 0x4b, 0xa3,
+ 0xf9, 0x7b, 0xe9, 0xa4, 0x35, 0x8b, 0x42, 0x17, 0xc8, 0x70, 0xb8, 0x75,
+ 0x89, 0x38, 0x6b, 0xcc, 0xd2, 0x24, 0x4f, 0x8e, 0x68, 0x30, 0x2c, 0xdc,
+ 0x5c, 0x13, 0xf9, 0x7c, 0xe9, 0x73, 0xba, 0x9a, 0x52, 0x59, 0x90, 0x09,
+ 0x0e, 0x37, 0x07, 0x6a, 0x37, 0x79, 0x63, 0x1d, 0xb7, 0x92, 0x84, 0xb8,
+ 0x1d, 0xe2, 0x37, 0xd6, 0x2c, 0xd2, 0xf6, 0x3c, 0x79, 0x14, 0x57, 0xe7,
+ 0xc0, 0x90, 0x9b, 0xa5, 0x80, 0x79, 0x69, 0xee, 0x9a, 0xc3, 0x6a, 0xcf,
+ 0x13, 0x64, 0x00, 0xf2, 0x80, 0x83, 0x11, 0x17, 0x2d, 0xb7, 0x13, 0x72,
+ 0xa2, 0x92, 0x99, 0xba, 0xb5, 0x46, 0x79, 0x76, 0x4b, 0x27, 0x84, 0xdf,
+ 0x83, 0x30, 0xca, 0x6b, 0x2f, 0x87, 0xdc, 0x4c, 0x59, 0x74, 0x0c, 0x14,
+ 0xee, 0xb5, 0x69, 0x98, 0x33, 0xbc, 0x6b, 0x4d, 0xa4, 0xf1, 0x87, 0x45,
+ 0x80, 0xa6, 0x10, 0x06, 0x68, 0x17, 0x28, 0xae, 0x1e, 0xae, 0x80, 0x04,
+ 0xb7, 0xbc, 0x18, 0x5c, 0x1a, 0x1a, 0x69, 0x03, 0x9a, 0xf7, 0x37, 0xa7,
+ 0x21, 0x47, 0x16, 0x21, 0x0d, 0xb5, 0xec, 0x79, 0x85, 0x98, 0x44, 0x12,
+ 0x78, 0x49, 0x54, 0x25, 0x77, 0x3c, 0xbb, 0xfd, 0xea, 0xca, 0x3f, 0xa0,
+ 0x4e, 0xfb, 0x3e, 0x64, 0x5d, 0x5c, 0x83, 0x57, 0x6a, 0x08, 0x15, 0xa3,
+ 0xe3, 0xc4, 0xa3, 0xc8, 0xc7, 0x22, 0x5e, 0xf4, 0x50, 0x06, 0x92, 0x75,
+ 0xdd, 0xe6, 0xed, 0xee, 0x53, 0x6a, 0x54, 0x5d, 0x81, 0xa3, 0x82, 0xf7,
+ 0x07, 0x19, 0xaa, 0x69, 0x50, 0x43, 0xe6, 0x8f, 0x61, 0x90, 0x74, 0x9b,
+ 0xd1, 0x12, 0xc8, 0x06, 0x49, 0xe1, 0x4d, 0xb3, 0x12, 0x17, 0xe3, 0x72,
+ 0xd8, 0x18, 0x1b, 0x25, 0xe4, 0x19, 0x18, 0xdc, 0x20, 0x3a, 0x66, 0x3b,
+ 0x6b, 0x8b, 0xf2, 0x90, 0xba, 0x5a, 0x87, 0x52, 0x32, 0x3c, 0x55, 0xec,
+ 0x04, 0x89, 0xbe, 0x56, 0x6d, 0x8c, 0xeb, 0x84, 0x21, 0x5b, 0xcf, 0xa5,
+ 0x48, 0x48, 0xe9, 0xb6, 0x36, 0x45, 0xaa, 0x28, 0x25, 0x91, 0x5d, 0xe3,
+ 0x1d, 0xed, 0x03, 0x07, 0x95, 0xf5, 0xda, 0xdb, 0xfb, 0x7b, 0x91, 0xb8,
+ 0x2c, 0xa1, 0x67, 0x08, 0xc0, 0x4b, 0xdb, 0x64, 0xa3, 0xe0, 0xb1, 0xf0,
+ 0x95, 0xfd, 0xcf, 0x76, 0x2c, 0x22, 0x8b, 0x33, 0xd8, 0xc3, 0x67, 0x90,
+ 0xd0, 0xdd, 0xbc, 0x67, 0x90, 0xe8, 0x9e, 0x95, 0xee, 0xc9, 0x3a, 0x34,
+ 0xeb, 0x8b, 0xc1, 0xd3, 0x8a, 0x79, 0x77, 0x5e, 0x4e, 0x67, 0x0e, 0x1a,
+ 0xc8, 0x74, 0x82, 0xb7, 0x97, 0xa7, 0x6f, 0xa2, 0x86, 0x2e, 0x20, 0x5a,
+ 0x68, 0xdb, 0x77, 0xff, 0x8a, 0x52, 0x40, 0x5f, 0x9c, 0x9c, 0x0c, 0xa1,
+ 0x12, 0xa8, 0xa3, 0xba, 0x11, 0x70, 0x51, 0x0a, 0xf9, 0xb0, 0x58, 0x95,
+ 0xa7, 0xa4, 0xd2, 0x93, 0x0c, 0x49, 0xbf, 0x97, 0xd9, 0x38, 0x9b, 0x72,
+ 0x32, 0x21, 0xbf, 0x93, 0x68, 0xa9, 0x78, 0x5c, 0xef, 0x0c, 0x5d, 0x36,
+ 0x05, 0x57, 0x22, 0x4d, 0xbc, 0x11, 0x30, 0xb3, 0xd0, 0x90, 0x63, 0xc7,
+ 0x52, 0x14, 0xf1, 0x8a, 0xef, 0x0a, 0x2e, 0x50, 0x39, 0xd1, 0x9b, 0x26,
+ 0x05, 0xde, 0x37, 0x0b, 0x9a, 0x6a, 0xe3, 0xb8, 0x4d, 0x11, 0xf5, 0xd7,
+ 0x48, 0xe5, 0xd4, 0x9a, 0x55, 0x35, 0x25, 0x7f, 0x3e, 0xc9, 0x72, 0xb8,
+ 0xed, 0x02, 0x94, 0x18, 0x40, 0x9b, 0x2d, 0x11, 0x14, 0x03, 0xae, 0xb9,
+ 0x6a, 0x1e, 0xa5, 0xfb, 0x9b, 0x4c, 0x43, 0x7d, 0x65, 0xa5, 0x99, 0x31,
+ 0x49, 0x1c, 0x04, 0xdc, 0x73, 0x02, 0x30, 0x22, 0x38, 0x85, 0x8e, 0x93,
+ 0x04, 0xbb, 0xd1, 0xe6, 0x5e, 0x73, 0x55, 0xe2, 0x24, 0xd3, 0xaa, 0x27,
+ 0xf6, 0x4d, 0xda, 0x9c, 0xa3, 0xf4, 0x7a, 0x0d, 0xfe, 0x56, 0x9b, 0xd2,
+ 0xc1, 0xa3, 0x71, 0xfa, 0x46, 0xbb, 0xba, 0xd1, 0x1a, 0x1d, 0x5c, 0xd1,
+ 0x37, 0x88, 0xda, 0x7e, 0x41, 0x86, 0x97, 0xaf, 0x58, 0x2a, 0xda, 0x86,
+ 0xa8, 0x1b, 0xb8, 0xf8, 0x4c, 0xd7, 0x78, 0xd7, 0x70, 0x68, 0x3d, 0xa6,
+ 0x52, 0x54, 0x53, 0xb3, 0x78, 0x4a, 0xff, 0xa3, 0xd2, 0x71, 0x46, 0x23,
+ 0x55, 0x29, 0xb2, 0x35, 0x84, 0xf3, 0x3b, 0xa4, 0x7d, 0x98, 0x9c, 0x99,
+ 0xe9, 0x43, 0x21, 0x1a, 0x55, 0x51, 0x4e, 0x32, 0x06, 0x17, 0xb1, 0xa0,
+ 0xa4, 0xdc, 0x2e, 0xf3, 0xbf, 0xff, 0xa3, 0xe9, 0xa7, 0xfe, 0xf1, 0x27,
+ 0xd8, 0x87, 0x10, 0x5e, 0xeb, 0x7c, 0x28, 0x46, 0x46, 0x85, 0xc7, 0x16,
+ 0xe4, 0x1d, 0xe3, 0x5c, 0x16, 0x9d, 0xa1, 0x55, 0x06, 0xaf, 0xab, 0x30,
+ 0x16, 0x99, 0x66, 0x89, 0x07, 0x3a, 0x3a, 0xbb, 0x08, 0x80, 0xf7, 0x12,
+ 0xd4, 0xf1, 0x0d, 0x8a, 0x07, 0x48, 0xc4, 0xf4, 0x3a, 0xc4, 0x25, 0x8b,
+ 0x47, 0x57, 0x30, 0x1f, 0x0b, 0x2b, 0xe7, 0x40, 0x60, 0xb1, 0x9f, 0x63,
+ 0x06, 0x7c, 0xd1, 0xc0, 0x19, 0x98, 0xce, 0x9b, 0x68, 0x20, 0xb2, 0xd1,
+ 0x1a, 0xd3, 0xfb, 0x77, 0x3a, 0x65, 0xbd, 0xf2, 0x3e, 0xfb, 0xc7, 0x80,
+ 0xbd, 0x6a, 0xe0, 0xc4, 0xfd, 0x4c, 0xc0, 0x43, 0xdf, 0x7f, 0xb2, 0xcb,
+ 0x7a, 0x77, 0xa7, 0x09, 0x99, 0x8a, 0x45, 0xb0, 0x4d, 0x77, 0x51, 0xfa,
+ 0x6b, 0xc0, 0x47, 0xaa, 0xdd, 0x71, 0x2f, 0x3d, 0xbe, 0x14, 0xfe, 0x31,
+ 0xe0, 0x7f, 0x7f, 0xdc, 0xed, 0x3f, 0xfb, 0xc9, 0xf5, 0xfa, 0xc9, 0xee,
+ 0xfb, 0x4f, 0xf6, 0x3a, 0x6d, 0xa8, 0xaa, 0x6c, 0x99, 0x58, 0x1a, 0x12,
+ 0xa6, 0xe9, 0x73, 0x5a, 0x3b, 0x54, 0x1c, 0x5d, 0x6a, 0xf9, 0xf1, 0x68,
+ 0x6b, 0x00, 0x7f, 0x6c, 0x71, 0x22, 0xb2, 0xda, 0xd2, 0x9e, 0x69, 0xaf,
+ 0x10, 0xb6, 0x62, 0x09, 0xf7, 0xa5, 0x00, 0x03, 0xed, 0x56, 0x2b, 0xe3,
+ 0xc1, 0xb2, 0x8d, 0x60, 0x1b, 0xb5, 0x19, 0x36, 0xcc, 0x93, 0x1c, 0xf4,
+ 0x33, 0x59, 0xd1, 0xc5, 0x27, 0x60, 0x17, 0x2e, 0xab, 0xd7, 0x44, 0x49,
+ 0xab, 0x29, 0x2a, 0xf9, 0x43, 0x9b, 0xb1, 0x15, 0x13, 0x8b, 0x90, 0x6a,
+ 0xb2, 0xd5, 0xa6, 0xd0, 0x78, 0x1d, 0xc2, 0xd3, 0xfc, 0x28, 0x71, 0xf5,
+ 0x45, 0x95, 0xd8, 0xfd, 0xf9, 0xa9, 0x41, 0x4e, 0xb4, 0x9e, 0x9e, 0xa0,
+ 0xa9, 0x58, 0x67, 0x14, 0xd4, 0x7a, 0x56, 0x90, 0x59, 0x87, 0xe4, 0x84,
+ 0xaf, 0xee, 0x81, 0x2b, 0xdd, 0x00, 0x4a, 0x42, 0x2a, 0x96, 0x73, 0xf7,
+ 0x84, 0x60, 0x5e, 0xe1, 0xcb, 0x2e, 0x5c, 0x43, 0xb2, 0xed, 0x88, 0xa6,
+ 0x51, 0xcf, 0x68, 0x59, 0x36, 0x93, 0xec, 0x07, 0x5b, 0xad, 0xa1, 0xa6,
+ 0x06, 0x2a, 0xe5, 0x63, 0x76, 0xa3, 0x20, 0xc8, 0x29, 0x2a, 0x04, 0xb6,
+ 0x93, 0x01, 0xc4, 0x05, 0xf1, 0x22, 0xf1, 0x86, 0x81, 0x46, 0x30, 0xa7,
+ 0x16, 0xdb, 0xeb, 0x39, 0x1c, 0x98, 0x64, 0x5a, 0x24, 0x83, 0x7f, 0x2b,
+ 0xf9, 0x55, 0xb6, 0xa8, 0x1f, 0x37, 0x3c, 0x80, 0x15, 0xf6, 0x2f, 0x61,
+ 0x1f, 0xd5, 0x2a, 0x7c, 0x52, 0x59, 0xc0, 0x95, 0xb9, 0x73, 0x93, 0x2a,
+ 0x84, 0x3c, 0x1a, 0x59, 0x12, 0xb1, 0xd9, 0xa5, 0x24, 0x6d, 0xb4, 0x01,
+ 0x4c, 0x82, 0x14, 0x52, 0xe7, 0x92, 0x80, 0x77, 0x3e, 0x93, 0xe4, 0x2e,
+ 0x96, 0x6f, 0x9b, 0x60, 0x78, 0xee, 0x26, 0xac, 0xe8, 0xdb, 0x52, 0x4d,
+ 0x5c, 0x99, 0xdd, 0x18, 0xdc, 0x49, 0x6a, 0x35, 0x54, 0xe7, 0xdb, 0xa2,
+ 0x81, 0xb9, 0xd2, 0xa2, 0x4b, 0x27, 0x1f, 0x48, 0x46, 0x25, 0xb4, 0xa4,
+ 0x4e, 0x9f, 0x63, 0x65, 0x3a, 0x02, 0x49, 0x0b, 0xe5, 0x30, 0x68, 0xee,
+ 0x51, 0xf0, 0xae, 0x17, 0x55, 0xd7, 0x30, 0x5b, 0x8d, 0xa2, 0x97, 0x8b,
+ 0x9b, 0x9c, 0x64, 0x9a, 0x47, 0x40, 0x08, 0xe8, 0x29, 0x79, 0xc6, 0x31,
+ 0xda, 0x85, 0x4f, 0xda, 0xff, 0x0d, 0xb3, 0xe1, 0x39, 0xb0, 0xfe, 0xc9,
+ 0xce, 0x6e, 0xa3, 0x0a, 0x89, 0x2f, 0x3c, 0xae, 0xba, 0x23, 0x2f, 0x31,
+ 0x2d, 0xce, 0xc5, 0xeb, 0xc3, 0x28, 0xda, 0x7b, 0xbe, 0xfb, 0x7c, 0x7b,
+ 0x77, 0x67, 0xf0, 0x64, 0xb0, 0x17, 0x39, 0xd3, 0x38, 0xc9, 0xea, 0x5c,
+ 0xe6, 0x07, 0xa1, 0x35, 0xed, 0xd1, 0x28, 0xac, 0xf0, 0x51, 0x63, 0x1c,
+ 0x37, 0xe3, 0x3e, 0x81, 0xf1, 0xc5, 0x5f, 0xe1, 0x31, 0x07, 0xce, 0xb8,
+ 0xc8, 0x0c, 0xb3, 0x7d, 0x37, 0x9c, 0xd5, 0xf3, 0x3e, 0xc6, 0xa1, 0x42,
+ 0xdf, 0x52, 0xd0, 0x94, 0xa3, 0xe5, 0x28, 0x25, 0xa1, 0xa5, 0xe4, 0x22,
+ 0x78, 0xac, 0x41, 0x90, 0x28, 0x6b, 0x58, 0x3d, 0x3d, 0x8e, 0x05, 0x74,
+ 0x55, 0x12, 0xdb, 0x03, 0x14, 0x4d, 0x56, 0x09, 0x0c, 0x17, 0x88, 0x54,
+ 0x4d, 0x35, 0x17, 0x17, 0xc0, 0x2b, 0x74, 0xe3, 0x4b, 0xd9, 0x99, 0xaf,
+ 0x5d, 0x36, 0x70, 0xdc, 0x1a, 0xe7, 0x09, 0xac, 0x4e, 0xaf, 0xfd, 0x72,
+ 0x51, 0x29, 0x0e, 0x39, 0xf2, 0x70, 0x24, 0xfa, 0x81, 0x10, 0xab, 0x88,
+ 0x82, 0x98, 0x77, 0x1b, 0x74, 0x5a, 0xea, 0x6a, 0x25, 0xf8, 0x1d, 0x57,
+ 0x34, 0x0f, 0xf6, 0xee, 0x8a, 0x8e, 0x27, 0x46, 0x65, 0x14, 0xc7, 0x7e,
+ 0x2c, 0xc0, 0xf0, 0x11, 0x9c, 0x39, 0xa1, 0x85, 0xbd, 0xff, 0x2f, 0xd1,
+ 0xc2, 0xde, 0xff, 0x4f, 0x0b, 0xff, 0x26, 0x5a, 0x78, 0x51, 0xa3, 0x05,
+ 0xd6, 0xec, 0x88, 0x6f, 0xa9, 0x82, 0xd7, 0x44, 0xe2, 0x11, 0xaa, 0x08,
+ 0xc8, 0xc2, 0xd7, 0x8f, 0x63, 0xfd, 0x5e, 0x60, 0x42, 0xf4, 0x65, 0x85,
+ 0x0e, 0x42, 0x45, 0x3b, 0x8d, 0x83, 0x6c, 0x22, 0x69, 0x72, 0xc1, 0x3e,
+ 0xf6, 0xc3, 0x9f, 0xbb, 0xb7, 0x58, 0x8c, 0xe6, 0xcf, 0x96, 0x62, 0x1c,
+ 0x49, 0xae, 0xb0, 0x0b, 0xf0, 0xed, 0xf6, 0xf0, 0x25, 0xc2, 0xaf, 0x39,
+ 0xe3, 0xbe, 0xc1, 0xdf, 0x61, 0x4f, 0x31, 0x9d, 0x1d, 0xed, 0x48, 0xcd,
+ 0x5f, 0x1b, 0x92, 0x96, 0x68, 0xc8, 0xa3, 0x2e, 0x5d, 0x05, 0x8c, 0xb6,
+ 0xe1, 0x53, 0x79, 0x5b, 0xca, 0x38, 0x5f, 0xa5, 0x0f, 0xa2, 0xcf, 0xfe,
+ 0x9c, 0xe4, 0x59, 0x64, 0xfe, 0x26, 0x0d, 0xa5, 0x03, 0x7c, 0x94, 0xa5,
+ 0xc4, 0xfb, 0x0f, 0xb9, 0xd7, 0x86, 0x88, 0xfa, 0x27, 0xa0, 0xfa, 0x49,
+ 0xf4, 0x24, 0xc7, 0x84, 0xd9, 0x68, 0x98, 0x06, 0x26, 0x93, 0xd4, 0x84,
+ 0x3f, 0xbf, 0x70, 0x56, 0x66, 0x0f, 0xae, 0xec, 0xb2, 0xa5, 0xa2, 0x2c,
+ 0xaf, 0xcc, 0x66, 0xd9, 0x52, 0x34, 0x37, 0xbd, 0x92, 0x6c, 0x0a, 0x19,
+ 0x8e, 0xcb, 0x0a, 0x6e, 0x08, 0x1d, 0xfd, 0x28, 0x3a, 0x4a, 0xe6, 0x2b,
+ 0xb3, 0xcd, 0x78, 0x8d, 0x5e, 0x2a, 0x33, 0x41, 0xc6, 0x29, 0xbd, 0xcb,
+ 0xc3, 0x4c, 0x54, 0x6e, 0x88, 0xcd, 0x21, 0x55, 0xc7, 0x5c, 0xb6, 0xb8,
+ 0x3e, 0x5e, 0xb9, 0x65, 0xc8, 0x44, 0x98, 0x0b, 0xd7, 0x62, 0x13, 0x00,
+ 0x00, 0x26, 0xbe, 0xa2, 0x3f, 0x6b, 0xf1, 0xd1, 0x65, 0xd8, 0x82, 0xde,
+ 0x2b, 0x1e, 0x9c, 0x62, 0x39, 0xfa, 0x2b, 0x58, 0x14, 0x13, 0x26, 0xd7,
+ 0xad, 0xe1, 0x33, 0x18, 0xa2, 0xde, 0x71, 0xad, 0x83, 0xe5, 0x48, 0x50,
+ 0x0e, 0xca, 0x66, 0x73, 0xf4, 0x21, 0x04, 0x6b, 0x97, 0x01, 0xaf, 0x74,
+ 0x16, 0xd8, 0xe9, 0x1a, 0x93, 0x0a, 0xcc, 0x4d, 0x8d, 0x7d, 0xb7, 0xf3,
+ 0xc4, 0x55, 0x92, 0x0a, 0x35, 0x2c, 0x84, 0x9b, 0xe5, 0x56, 0x53, 0x1c,
+ 0xd5, 0xce, 0xac, 0xc6, 0x8f, 0xaf, 0x6d, 0x8b, 0xa8, 0xb5, 0xc7, 0xca,
+ 0x4e, 0xd1, 0xfb, 0x13, 0xff, 0x68, 0xaf, 0x96, 0x5b, 0x49, 0xd0, 0x30,
+ 0x1b, 0x3c, 0x3f, 0x8e, 0xa3, 0x81, 0xd7, 0xd7, 0x75, 0xf0, 0x8a, 0xbf,
+ 0x95, 0x1e, 0x1e, 0x6f, 0x1b, 0xda, 0xcc, 0x2f, 0xe8, 0xe0, 0xdd, 0xdc,
+ 0x22, 0xc1, 0x8c, 0xcc, 0x17, 0x2e, 0x60, 0x93, 0xa4, 0xbc, 0x7c, 0x2e,
+ 0x06, 0x74, 0x91, 0x48, 0x63, 0xab, 0x1f, 0xc7, 0x79, 0x38, 0xc0, 0xfb,
+ 0xaa, 0x07, 0x39, 0x30, 0x80, 0xce, 0x14, 0xfc, 0x95, 0xfe, 0xe5, 0xbd,
+ 0x85, 0x76, 0x6a, 0x71, 0xd1, 0x26, 0x2d, 0x2e, 0xb2, 0x52, 0x22, 0xb4,
+ 0xd9, 0x6c, 0xc9, 0xd2, 0x6d, 0xce, 0x77, 0x43, 0x0b, 0xc6, 0x91, 0x6d,
+ 0x84, 0x25, 0xe9, 0x73, 0xb3, 0xdc, 0xe0, 0x72, 0x21, 0x4e, 0x50, 0x49,
+ 0x58, 0xd0, 0x32, 0x0f, 0xc8, 0x60, 0x30, 0xca, 0x95, 0x9e, 0xeb, 0x86,
+ 0x29, 0x98, 0x4c, 0x70, 0xd9, 0xb9, 0xf0, 0xee, 0xbb, 0x2c, 0x9d, 0xa0,
+ 0x04, 0x6e, 0x9e, 0xb7, 0xe0, 0xbf, 0x7f, 0x5c, 0xbc, 0x65, 0x2f, 0xc0,
+ 0x79, 0x89, 0x8b, 0xd0, 0x3d, 0xd6, 0xb4, 0x0a, 0xbb, 0xf8, 0xdf, 0x58,
+ 0x42, 0xda, 0x88, 0x88, 0xe7, 0x71, 0x69, 0x47, 0xcc, 0x6f, 0x03, 0x46,
+ 0x29, 0x29, 0xd7, 0xec, 0xad, 0x1b, 0x27, 0x2d, 0xf8, 0x7e, 0x50, 0x0b,
+ 0xdb, 0x83, 0xb5, 0x6a, 0x11, 0x92, 0x7b, 0x8d, 0xfb, 0x44, 0x02, 0xbe,
+ 0x3f, 0x7c, 0xab, 0xb4, 0x5c, 0x2a, 0x7a, 0xa7, 0x04, 0x9c, 0x51, 0x2a,
+ 0xb2, 0x39, 0xf9, 0x60, 0xd0, 0x12, 0x6f, 0x66, 0x94, 0x2c, 0x21, 0x6c,
+ 0xf7, 0xe1, 0xdb, 0x39, 0x0c, 0x20, 0x24, 0xca, 0x88, 0x13, 0xe0, 0x17,
+ 0x4e, 0xe5, 0x61, 0xd5, 0x27, 0x85, 0x8c, 0xcd, 0x6e, 0xad, 0x13, 0xb0,
+ 0x8d, 0x5e, 0x20, 0x94, 0x87, 0x88, 0x26, 0x95, 0x2c, 0xf5, 0x9a, 0x97,
+ 0xda, 0x0c, 0xb4, 0x5a, 0x59, 0x77, 0x36, 0x5b, 0xd6, 0x69, 0x71, 0x6e,
+ 0xb5, 0x7c, 0x45, 0x93, 0x0a, 0x6b, 0xb7, 0x9b, 0xb9, 0xdd, 0xd0, 0x02,
+ 0x05, 0xc7, 0x5b, 0x12, 0x56, 0x40, 0x5b, 0xac, 0x95, 0xb6, 0xcb, 0x5e,
+ 0xdb, 0x2e, 0x52, 0x3d, 0x67, 0x8c, 0x87, 0x3e, 0xf1, 0xba, 0x45, 0x2d,
+ 0x61, 0xe5, 0x49, 0xdb, 0x94, 0x81, 0xa8, 0xf9, 0xe8, 0x84, 0xb9, 0xf3,
+ 0xb5, 0xf1, 0xcc, 0x51, 0x38, 0x53, 0x9b, 0xd9, 0x3a, 0xeb, 0x93, 0x4c,
+ 0x52, 0xe7, 0xf8, 0x4e, 0xdc, 0x9c, 0x68, 0x13, 0xca, 0x22, 0xb3, 0x19,
+ 0x5e, 0x96, 0xa0, 0x2f, 0x51, 0x35, 0x1b, 0x13, 0x86, 0x0e, 0x2f, 0x29,
+ 0x17, 0xf2, 0x9c, 0x1e, 0x07, 0x8f, 0x68, 0x51, 0x1f, 0xa4, 0xee, 0x0a,
+ 0xe6, 0xd4, 0xb4, 0xa1, 0x16, 0xd2, 0x11, 0x0f, 0x2c, 0xad, 0x86, 0xfa,
+ 0xc8, 0x1a, 0x4d, 0x60, 0xcc, 0x7d, 0x84, 0xac, 0xc3, 0x55, 0x12, 0xcb,
+ 0x6f, 0x7d, 0x04, 0x52, 0xd3, 0xf7, 0x9f, 0x5c, 0x24, 0xe9, 0xbf, 0x65,
+ 0x95, 0xb4, 0xaf, 0xd6, 0x4c, 0x86, 0x70, 0x99, 0x1a, 0x33, 0x5a, 0x17,
+ 0xc2, 0xb4, 0x66, 0xe7, 0xd7, 0x05, 0x31, 0xd5, 0xa7, 0xd5, 0x16, 0x6a,
+ 0xda, 0x3e, 0x31, 0x85, 0xfe, 0xf2, 0x03, 0x51, 0xee, 0xeb, 0xe6, 0x87,
+ 0x8e, 0xeb, 0xde, 0x40, 0xf7, 0xb0, 0xa6, 0x36, 0x55, 0x48, 0xe1, 0x51,
+ 0x2d, 0xc8, 0x99, 0xc8, 0x3f, 0x86, 0x39, 0xc9, 0x9c, 0xd9, 0x28, 0xff,
+ 0x6b, 0xee, 0x22, 0xdc, 0x41, 0x95, 0x3d, 0x44, 0x17, 0x95, 0xa9, 0xb4,
+ 0xf8, 0xc3, 0x1a, 0x9b, 0xb7, 0x3b, 0xd8, 0x01, 0xb7, 0x7d, 0x58, 0xc1,
+ 0x04, 0xba, 0xcf, 0x77, 0xd7, 0x4f, 0x9f, 0x37, 0x0a, 0x59, 0xb8, 0xc2,
+ 0xcf, 0x1e, 0x03, 0x56, 0x4a, 0xa7, 0xf0, 0xfb, 0x36, 0x32, 0x43, 0xae,
+ 0xf2, 0x49, 0x7f, 0x1a, 0x4e, 0xb4, 0x1e, 0xd4, 0x2f, 0x2d, 0x03, 0x4c,
+ 0x3f, 0xce, 0xcb, 0xc3, 0xcb, 0xbb, 0x3b, 0x9f, 0xed, 0xb4, 0xe6, 0x2e,
+ 0x43, 0x84, 0x08, 0x0a, 0xd2, 0x39, 0xc4, 0x4d, 0x11, 0x4d, 0xb5, 0x2a,
+ 0x6e, 0x62, 0x83, 0x53, 0xe7, 0x47, 0x6b, 0x60, 0xc6, 0x66, 0xff, 0x61,
+ 0x5b, 0xd7, 0x80, 0xe5, 0xc2, 0x54, 0x03, 0xaa, 0xd5, 0x25, 0xee, 0xb2,
+ 0x15, 0x0f, 0xcf, 0xde, 0xbe, 0x3d, 0x3e, 0x24, 0x55, 0xec, 0x26, 0x87,
+ 0xe0, 0xe8, 0xdc, 0x98, 0x6d, 0x66, 0x51, 0x5f, 0x6a, 0x43, 0x06, 0xc0,
+ 0x8b, 0x13, 0x48, 0xf0, 0xce, 0x19, 0x50, 0xe3, 0x2f, 0x2d, 0xc4, 0xb9,
+ 0x3b, 0xd8, 0x0d, 0xb6, 0x6a, 0x61, 0x23, 0x2d, 0x39, 0xd1, 0x70, 0xda,
+ 0x1a, 0x3f, 0x65, 0x7d, 0xca, 0x9c, 0xcd, 0xe0, 0x53, 0x9d, 0x65, 0x23,
+ 0x01, 0x0f, 0x97, 0x41, 0x8b, 0xbe, 0x6c, 0x2d, 0x99, 0x72, 0x86, 0x64,
+ 0x17, 0x59, 0x19, 0xcd, 0x5e, 0xc3, 0x40, 0x22, 0xb7, 0x2c, 0x0a, 0x3d,
+ 0xd6, 0xb2, 0x30, 0x61, 0x01, 0x9d, 0x59, 0x02, 0x09, 0x4c, 0xf4, 0xce,
+ 0xb4, 0xd4, 0xa2, 0x99, 0x00, 0xd1, 0x86, 0x7d, 0xd7, 0xc5, 0xad, 0x2b,
+ 0xe8, 0x3f, 0xf5, 0xd2, 0xb8, 0xef, 0xa8, 0xd7, 0x78, 0x41, 0x1d, 0x21,
+ 0x57, 0xa7, 0x10, 0x80, 0x5d, 0x77, 0x50, 0x2a, 0xdb, 0x6e, 0x5b, 0xe7,
+ 0x52, 0x9d, 0x5a, 0xb2, 0x08, 0x9c, 0x13, 0xcb, 0x25, 0x81, 0xc8, 0xcb,
+ 0x2a, 0x53, 0x6a, 0x56, 0x91, 0x86, 0xb1, 0x58, 0x64, 0xac, 0x32, 0x8a,
+ 0x96, 0xc2, 0xd3, 0x4a, 0xf5, 0x12, 0xd8, 0x14, 0xcf, 0x85, 0x8c, 0x74,
+ 0xad, 0x1c, 0x05, 0x65, 0x95, 0x43, 0xb8, 0x1c, 0x3d, 0x02, 0x40, 0xca,
+ 0x76, 0x3f, 0x71, 0x24, 0x3e, 0x8a, 0x3d, 0xea, 0x42, 0xe3, 0x2c, 0xc6,
+ 0x70, 0x4d, 0x75, 0x83, 0x7f, 0x3b, 0xf6, 0xe8, 0xf9, 0xb6, 0xd6, 0x56,
+ 0x47, 0x3e, 0xf1, 0xba, 0xfc, 0x9c, 0xd7, 0x5a, 0x0a, 0x19, 0xfe, 0xe1,
+ 0xa2, 0x76, 0x3a, 0xb4, 0xf8, 0x69, 0x96, 0x6f, 0x43, 0xc0, 0xe3, 0x12,
+ 0x7c, 0x79, 0x36, 0x35, 0xe8, 0xec, 0x16, 0xd0, 0x43, 0x04, 0x1c, 0xd9,
+ 0x55, 0x41, 0x4d, 0xab, 0x2d, 0x44, 0x9d, 0xb3, 0x33, 0x9f, 0x46, 0x29,
+ 0xa2, 0xa3, 0x16, 0x5a, 0xb5, 0xca, 0xe7, 0x27, 0xf3, 0x06, 0x70, 0x1f,
+ 0x3f, 0x01, 0x78, 0x3d, 0xe5, 0xeb, 0x38, 0x6e, 0x82, 0xa7, 0xad, 0x4c,
+ 0xd1, 0x95, 0x80, 0x35, 0x42, 0x61, 0x60, 0x3b, 0xa5, 0x96, 0x06, 0xaa,
+ 0x37, 0xa7, 0x38, 0x75, 0x8b, 0x80, 0x93, 0x5a, 0x1e, 0x92, 0x40, 0x8a,
+ 0xe4, 0xa5, 0x61, 0x40, 0x54, 0x0a, 0xd6, 0xc6, 0xc5, 0x6d, 0xb1, 0x16,
+ 0x9a, 0xbb, 0x1a, 0xed, 0x4d, 0xa3, 0x0b, 0x90, 0xfb, 0xad, 0x55, 0x81,
+ 0xdc, 0x2a, 0xc3, 0x51, 0x32, 0x25, 0x56, 0x9b, 0x73, 0x5b, 0xd4, 0x80,
+ 0x23, 0x6d, 0x28, 0xac, 0x0e, 0xc0, 0xbf, 0x5d, 0xf3, 0x4b, 0x07, 0x49,
+ 0xd4, 0x61, 0x68, 0xff, 0x4e, 0x98, 0xf6, 0x25, 0xda, 0x88, 0x7b, 0x95,
+ 0x2b, 0x71, 0xd0, 0x50, 0xdd, 0x58, 0x5b, 0x5c, 0x14, 0xc6, 0x5e, 0xd5,
+ 0xb2, 0xcf, 0x5b, 0xb6, 0xf9, 0x6e, 0x9e, 0x3e, 0xe0, 0x2a, 0x68, 0xe2,
+ 0x05, 0xbb, 0x79, 0x3f, 0x32, 0xaa, 0xdd, 0x17, 0x7b, 0x83, 0xdd, 0xe7,
+ 0x9f, 0x0d, 0x76, 0x77, 0x06, 0xbb, 0x95, 0xd1, 0x41, 0x41, 0xe2, 0x90,
+ 0xbf, 0xb0, 0x9d, 0x96, 0x4b, 0xb4, 0x2d, 0x76, 0x25, 0xec, 0x60, 0xb6,
+ 0x1a, 0x04, 0x91, 0xeb, 0x8d, 0x2e, 0x34, 0xba, 0xbd, 0xc5, 0xcc, 0xe2,
+ 0xfc, 0xd0, 0x4a, 0x6a, 0xd0, 0x0e, 0x9c, 0x6a, 0x16, 0x6c, 0xaa, 0x84,
+ 0x37, 0x7a, 0xe3, 0x4f, 0x4b, 0x25, 0xa4, 0x20, 0x4d, 0xaa, 0x52, 0x78,
+ 0xda, 0x45, 0xe4, 0xb9, 0xfe, 0xff, 0x85, 0xe3, 0xae, 0x68, 0x34, 0x1c,
+ 0xf8, 0xe6, 0x8e, 0x21, 0xf4, 0x18, 0x17, 0x1d, 0x0b, 0xbe, 0x7f, 0x7e,
+ 0x76, 0x71, 0xa9, 0x09, 0xda, 0xc2, 0x0e, 0xe2, 0xe2, 0x6e, 0xe0, 0xa2,
+ 0xe5, 0x10, 0x9d, 0xab, 0x97, 0x4b, 0xe9, 0xa0, 0x3a, 0xac, 0xb9, 0xe3,
+ 0xf3, 0x0b, 0x8f, 0xa2, 0x10, 0xdc, 0xa1, 0x68, 0xd3, 0x65, 0x0c, 0xb3,
+ 0x58, 0x8b, 0xd6, 0xfa, 0xa4, 0xb2, 0x71, 0x8e, 0x08, 0x5e, 0x83, 0x9d,
+ 0x97, 0x56, 0x68, 0xea, 0xc1, 0x2d, 0xf8, 0xb5, 0x3f, 0xfd, 0xc9, 0xb3,
+ 0xa8, 0x21, 0xa7, 0xb4, 0x69, 0x45, 0x44, 0xd8, 0x38, 0x9f, 0x79, 0xf7,
+ 0xba, 0x00, 0xc0, 0x44, 0x9d, 0xfd, 0x1f, 0x91, 0xf8, 0xf6, 0x53, 0xff,
+ 0x47, 0xfa, 0xf3, 0xa7, 0x8e, 0xbb, 0x06, 0xa0, 0x50, 0x89, 0x67, 0xd1,
+ 0x4d, 0x5e, 0x36, 0x08, 0x35, 0x63, 0x51, 0x7f, 0x54, 0xae, 0x02, 0xde,
+ 0x2e, 0x8e, 0x87, 0xc4, 0x41, 0x14, 0x8c, 0x04, 0x0f, 0xa8, 0x13, 0x1b,
+ 0x76, 0x8a, 0x14, 0x29, 0x23, 0x4a, 0x71, 0x6b, 0x89, 0x74, 0xc0, 0xd8,
+ 0x20, 0x10, 0xf0, 0x62, 0xcf, 0x70, 0xc7, 0xd8, 0x49, 0x7a, 0x2f, 0x6c,
+ 0x27, 0x36, 0x88, 0x15, 0xb9, 0x7f, 0x18, 0x5a, 0x53, 0x5d, 0xb8, 0xf2,
+ 0xc1, 0x86, 0x4b, 0x09, 0xe7, 0x7c, 0x2c, 0x52, 0xf1, 0xb9, 0xa4, 0x94,
+ 0x1a, 0x92, 0x10, 0x3c, 0x96, 0xb8, 0x80, 0xd9, 0x74, 0xce, 0x7e, 0x65,
+ 0xb3, 0x3e, 0xe5, 0x69, 0x71, 0xcb, 0x33, 0x54, 0xd0, 0x82, 0x48, 0x90,
+ 0x35, 0x36, 0x02, 0x45, 0x1f, 0x23, 0xb3, 0xbc, 0x5a, 0x8e, 0xd7, 0x37,
+ 0x3b, 0x67, 0x70, 0x0b, 0xfc, 0xcd, 0xc8, 0x4c, 0xcb, 0x0e, 0xa9, 0x7f,
+ 0x52, 0xd0, 0xf9, 0x3c, 0x5c, 0x69, 0x36, 0xaf, 0x14, 0xcb, 0x10, 0x94,
+ 0x2b, 0x83, 0x72, 0x6b, 0xe4, 0x53, 0x85, 0xc0, 0x84, 0x2e, 0x15, 0x08,
+ 0x41, 0x0b, 0xf1, 0xc4, 0x90, 0x0a, 0x35, 0xaf, 0x1d, 0xb4, 0x18, 0x42,
+ 0x65, 0xb6, 0x60, 0x50, 0x58, 0x06, 0x92, 0x0e, 0xa2, 0x0d, 0xfe, 0xb0,
+ 0x48, 0xe2, 0x9c, 0xb8, 0x17, 0xbb, 0x8a, 0x83, 0xc9, 0xfd, 0x2f, 0x6a,
+ 0x16, 0x40, 0xa9, 0x0c, 0xec, 0x8b, 0x91, 0xb7, 0xdd, 0x6f, 0xdb, 0x43,
+ 0xb9, 0xe4, 0x38, 0xcc, 0x1c, 0x2c, 0x3a, 0xce, 0x47, 0x69, 0x99, 0xc7,
+ 0x1a, 0x65, 0xaf, 0x08, 0x21, 0x81, 0x70, 0xa1, 0x65, 0x3c, 0x86, 0xeb,
+ 0x50, 0x42, 0x06, 0xd1, 0xff, 0x42, 0xa7, 0xfa, 0xb6, 0xd8, 0x2b, 0x90,
+ 0x9a, 0xfa, 0xe5, 0xf1, 0xeb, 0xb3, 0x8b, 0xe3, 0x6a, 0x42, 0xa7, 0x80,
+ 0x07, 0x44, 0x6d, 0x35, 0xc9, 0x36, 0x51, 0x3a, 0x59, 0x8d, 0x25, 0x56,
+ 0xaa, 0x4d, 0x80, 0x08, 0xce, 0xbf, 0x3b, 0x0a, 0x4e, 0x9e, 0xc1, 0xac,
+ 0x58, 0xa3, 0xbd, 0x56, 0xaf, 0x2e, 0xf8, 0xe7, 0x16, 0x8a, 0x61, 0x0b,
+ 0xba, 0x83, 0x8d, 0x4f, 0xe0, 0x73, 0x50, 0xc8, 0xcb, 0x0c, 0x33, 0x08,
+ 0xe4, 0x2c, 0x0a, 0x76, 0x4a, 0xb8, 0x46, 0x5b, 0x60, 0x73, 0x89, 0xd9,
+ 0x4b, 0xed, 0x4b, 0x35, 0x71, 0xc4, 0x12, 0x98, 0xc0, 0xd1, 0x0a, 0x83,
+ 0xa8, 0xd9, 0x91, 0xc2, 0xac, 0x48, 0x2f, 0x8d, 0x92, 0x34, 0x82, 0xc3,
+ 0xc6, 0x9e, 0x5d, 0xf1, 0x60, 0x9b, 0xc2, 0xa0, 0x58, 0x3b, 0x51, 0x08,
+ 0x6e, 0x23, 0x55, 0xa5, 0xad, 0x06, 0x40, 0xcb, 0xed, 0xeb, 0xd6, 0x57,
+ 0x3b, 0xdf, 0x2c, 0xb6, 0x2a, 0xd5, 0xb6, 0x6d, 0xf1, 0xac, 0xa8, 0xe3,
+ 0x9f, 0xba, 0xde, 0x12, 0xdf, 0x82, 0xb8, 0xe3, 0xc0, 0xd0, 0x2d, 0x05,
+ 0x6f, 0x6b, 0xe0, 0x3c, 0xfe, 0xed, 0x55, 0xfc, 0xdc, 0xac, 0x01, 0x17,
+ 0xd1, 0x5a, 0xce, 0x5b, 0x05, 0x04, 0x03, 0x9a, 0xb4, 0x93, 0x6c, 0xd0,
+ 0x89, 0x1a, 0x18, 0x61, 0xed, 0x28, 0xe0, 0x71, 0x1b, 0xd8, 0x93, 0x4f,
+ 0x2a, 0x75, 0xf5, 0x2b, 0x47, 0x0a, 0xdd, 0xfe, 0x83, 0x79, 0xc6, 0x91,
+ 0xf8, 0x1e, 0x15, 0xab, 0x79, 0x09, 0xa1, 0x49, 0x92, 0x0a, 0xc7, 0x59,
+ 0x9e, 0x37, 0x8d, 0x8e, 0x28, 0x76, 0xe5, 0x36, 0x0d, 0x19, 0x15, 0x17,
+ 0xaf, 0x0f, 0x5f, 0x3c, 0x7b, 0x01, 0xd1, 0x0f, 0x65, 0xd5, 0x34, 0x1f,
+ 0x4d, 0xa3, 0x0d, 0x11, 0xc6, 0xe9, 0x87, 0xdc, 0x60, 0x07, 0xda, 0x92,
+ 0x9a, 0x01, 0x47, 0xc9, 0x54, 0xf0, 0x29, 0x86, 0x41, 0x13, 0x83, 0x56,
+ 0xd3, 0x69, 0xdb, 0xed, 0xb9, 0xae, 0x3a, 0xb0, 0xdd, 0x1a, 0x18, 0x7d,
+ 0x2a, 0xb1, 0x6f, 0x5a, 0x5d, 0xd4, 0xd4, 0x25, 0xd2, 0xd0, 0xe7, 0xd0,
+ 0x66, 0x74, 0x13, 0x7b, 0x8e, 0xea, 0x5c, 0xd5, 0xd6, 0xa2, 0xad, 0xb9,
+ 0xbf, 0x55, 0xcf, 0x73, 0xad, 0xf2, 0x04, 0x0e, 0x40, 0xa5, 0xda, 0xf8,
+ 0x00, 0x1e, 0x05, 0xd6, 0x03, 0xda, 0x0c, 0x25, 0x6a, 0xc4, 0x32, 0x67,
+ 0x0c, 0x87, 0x33, 0x78, 0xf2, 0x6a, 0xe9, 0xaf, 0x59, 0xbb, 0xf9, 0xe6,
+ 0x3a, 0x5f, 0x48, 0xc2, 0x63, 0x1b, 0x40, 0x6d, 0x18, 0x07, 0x23, 0x8f,
+ 0x1a, 0xb1, 0xa3, 0xe6, 0x06, 0xac, 0x16, 0x78, 0xf7, 0xe4, 0xc8, 0xd5,
+ 0x39, 0xf7, 0xd1, 0x3c, 0xa3, 0x55, 0x7b, 0x73, 0xee, 0x31, 0x10, 0x9b,
+ 0x67, 0x8a, 0xae, 0x29, 0x2f, 0x35, 0x8f, 0x2c, 0x51, 0x1e, 0xdf, 0xb5,
+ 0x37, 0xa7, 0xad, 0x88, 0x32, 0x29, 0x6d, 0x58, 0xc3, 0x08, 0x54, 0xb5,
+ 0x4a, 0x73, 0xbc, 0x31, 0x9c, 0xe8, 0x6d, 0xdd, 0x34, 0x6b, 0x16, 0xde,
+ 0x90, 0x10, 0x2e, 0x82, 0xf8, 0x07, 0xd7, 0x62, 0x06, 0xd3, 0xa0, 0x61,
+ 0x35, 0xaa, 0x7b, 0xad, 0x08, 0xeb, 0x9f, 0xa3, 0x9d, 0x51, 0x2a, 0xe0,
+ 0x55, 0x4d, 0x52, 0xae, 0x5b, 0x49, 0x44, 0x49, 0x43, 0xf3, 0x78, 0x33,
+ 0x9c, 0xc2, 0x3c, 0xca, 0xc6, 0x65, 0x30, 0x03, 0x7e, 0xa0, 0xbd, 0x39,
+ 0x15, 0x0d, 0x9a, 0x33, 0x63, 0x3f, 0x0b, 0xd2, 0x98, 0x1e, 0x9f, 0x99,
+ 0x3c, 0xd8, 0xd8, 0x64, 0xfa, 0x50, 0x58, 0x51, 0x63, 0x87, 0xd7, 0xcf,
+ 0xac, 0x6d, 0x87, 0x31, 0x82, 0xfa, 0x06, 0xfb, 0x14, 0x2b, 0x3c, 0xde,
+ 0x6f, 0x6f, 0xce, 0xed, 0x30, 0x9e, 0x7c, 0x74, 0x83, 0xb5, 0x97, 0xc6,
+ 0x2a, 0x4c, 0xe7, 0x0a, 0x8d, 0xf9, 0x5e, 0x10, 0x02, 0x38, 0xef, 0xbf,
+ 0x7c, 0xff, 0xf8, 0x82, 0x4c, 0xe7, 0x06, 0xa5, 0xc5, 0xc9, 0xed, 0xfe,
+ 0xe0, 0x6a, 0x5c, 0x5e, 0x5c, 0x05, 0xd9, 0x8a, 0xc4, 0xbc, 0xb0, 0x86,
+ 0xec, 0x7d, 0x7f, 0x1e, 0x7b, 0x69, 0x91, 0xa5, 0x92, 0x8b, 0xaf, 0x68,
+ 0x41, 0x51, 0x65, 0x88, 0x51, 0x1b, 0x46, 0x4f, 0x10, 0x4b, 0xdc, 0x98,
+ 0xe2, 0xec, 0x96, 0x1d, 0x2b, 0xee, 0x76, 0x7b, 0xbf, 0x5e, 0x87, 0x01,
+ 0x1d, 0xcb, 0xe3, 0x9e, 0x8e, 0x65, 0x56, 0x4e, 0x39, 0x77, 0x19, 0xe7,
+ 0x1f, 0xde, 0xed, 0x6a, 0x97, 0xee, 0x4c, 0xd6, 0xc7, 0xb7, 0xb8, 0x9f,
+ 0x58, 0xe7, 0xfc, 0xab, 0x75, 0x1c, 0x02, 0x24, 0xc7, 0xa3, 0x22, 0x9b,
+ 0x2e, 0x4b, 0x89, 0xd6, 0x93, 0xc6, 0xae, 0x4c, 0x40, 0x5c, 0xb3, 0x14,
+ 0x88, 0x4f, 0xb5, 0xbb, 0x7d, 0x7d, 0x52, 0x75, 0x2e, 0x88, 0xea, 0x06,
+ 0x18, 0x86, 0xed, 0x58, 0xbf, 0x38, 0xfa, 0xb4, 0x1f, 0xa2, 0x00, 0x7e,
+ 0x7b, 0xe6, 0x95, 0xb7, 0x2c, 0xd0, 0x7a, 0x86, 0xa7, 0xbd, 0xd6, 0x0e,
+ 0xc4, 0x24, 0x61, 0xcc, 0x3d, 0x25, 0x05, 0x8e, 0x4e, 0xd4, 0xfa, 0xf0,
+ 0xca, 0xf7, 0x1e, 0x23, 0xa4, 0xb5, 0x6b, 0x9c, 0xcf, 0x3e, 0x70, 0xc8,
+ 0xe9, 0x01, 0x3f, 0x2b, 0x86, 0x06, 0x0b, 0x66, 0xd5, 0x38, 0x99, 0x7a,
+ 0x8c, 0xd7, 0xac, 0xfc, 0xba, 0x11, 0x54, 0xa8, 0xf0, 0xb1, 0x91, 0xf0,
+ 0x83, 0x6d, 0x83, 0x09, 0x80, 0xfc, 0xd8, 0x09, 0xbf, 0x0a, 0x38, 0x65,
+ 0x7b, 0x73, 0x3a, 0x5c, 0xff, 0x9e, 0x2e, 0x4f, 0xcf, 0xcc, 0x66, 0x13,
+ 0x35, 0x43, 0xb3, 0x06, 0xda, 0xa4, 0x0d, 0x3b, 0xe0, 0xbf, 0x88, 0x41,
+ 0xb0, 0xda, 0x31, 0x9d, 0x57, 0x62, 0x2b, 0xa9, 0xc7, 0x6c, 0x06, 0x0c,
+ 0x98, 0xf6, 0x18, 0x72, 0x49, 0x21, 0x0b, 0x91, 0xfe, 0xdd, 0xb6, 0x0b,
+ 0x5a, 0x80, 0xa0, 0x0d, 0x5b, 0xb9, 0xd4, 0xfb, 0x10, 0xd5, 0xae, 0xc5,
+ 0x0c, 0x66, 0x25, 0xc0, 0x62, 0xa0, 0xda, 0x51, 0xd7, 0x48, 0x5e, 0x14,
+ 0x46, 0x29, 0x59, 0x90, 0x85, 0xe9, 0x63, 0x62, 0x3c, 0x72, 0xa2, 0xb0,
+ 0x3c, 0xde, 0x28, 0x55, 0xc3, 0x59, 0x1b, 0x52, 0xb0, 0xb4, 0x5a, 0x05,
+ 0x6d, 0x50, 0x2f, 0x53, 0xdb, 0x4f, 0xae, 0x27, 0x7d, 0x25, 0x8e, 0x2a,
+ 0x2b, 0xea, 0xe7, 0xdb, 0x58, 0x08, 0x52, 0x7f, 0x5f, 0xe2, 0xc7, 0xe7,
+ 0x6b, 0x6b, 0x2f, 0x0e, 0x7d, 0x01, 0xc6, 0xe8, 0x42, 0x42, 0x7f, 0x98,
+ 0xa7, 0x32, 0x06, 0x8e, 0x2a, 0xd0, 0x9b, 0x6c, 0x6b, 0x91, 0x5a, 0xbd,
+ 0x82, 0x8e, 0x3f, 0x5e, 0xb6, 0x95, 0x66, 0xd8, 0xb2, 0xda, 0x82, 0x68,
+ 0x7a, 0x77, 0xb0, 0xdb, 0x33, 0xdd, 0x4a, 0xa5, 0x38, 0x93, 0x90, 0xf9,
+ 0x93, 0x58, 0x53, 0x7a, 0x22, 0xd4, 0x4f, 0xac, 0x5b, 0xc7, 0x2e, 0x24,
+ 0xe4, 0x55, 0xc5, 0xc6, 0xb0, 0xbc, 0x26, 0x57, 0x09, 0x74, 0x42, 0x39,
+ 0x23, 0xd9, 0x34, 0xa8, 0x68, 0xa7, 0xff, 0xf4, 0xc5, 0x8b, 0xca, 0xbd,
+ 0x1e, 0x2a, 0xc1, 0xcf, 0x76, 0x76, 0x04, 0xde, 0xa7, 0xfe, 0x1a, 0x7d,
+ 0xd1, 0x7f, 0x81, 0x17, 0xab, 0xaf, 0x09, 0x08, 0xcc, 0xfa, 0xf7, 0xfa,
+ 0xfc, 0x4d, 0x4b, 0x77, 0xb0, 0xe0, 0xac, 0x7d, 0xeb, 0x05, 0x77, 0xd7,
+ 0xf2, 0x16, 0x1e, 0x96, 0x75, 0xcc, 0xae, 0xae, 0xb8, 0x74, 0x35, 0x3f,
+ 0x29, 0x18, 0xe0, 0x59, 0x7e, 0x1f, 0xe7, 0x93, 0xe6, 0x74, 0x77, 0x7a,
+ 0xfd, 0xdd, 0x75, 0xd3, 0x75, 0x75, 0x26, 0xb1, 0x9d, 0xac, 0x09, 0x6d,
+ 0xfe, 0x71, 0x6b, 0xf3, 0xeb, 0xad, 0xb6, 0xd9, 0x7f, 0xba, 0xb3, 0xd3,
+ 0x7b, 0xce, 0x3f, 0x5f, 0xbc, 0x58, 0x1b, 0x63, 0xe2, 0xfb, 0x78, 0x62,
+ 0x53, 0xab, 0x8c, 0x96, 0xda, 0x69, 0x69, 0x7d, 0x97, 0x5a, 0xdd, 0x7d,
+ 0xf1, 0xa2, 0xc7, 0xbd, 0x3c, 0xfb, 0xa8, 0xd6, 0xcb, 0xfb, 0xcc, 0x9b,
+ 0xce, 0xf9, 0x75, 0x4f, 0x8e, 0x45, 0x6d, 0x06, 0xf4, 0x27, 0xa2, 0x98,
+ 0x18, 0xf5, 0x28, 0x32, 0xef, 0x82, 0x96, 0xa1, 0x54, 0x1f, 0x7c, 0x80,
+ 0xdb, 0x88, 0x40, 0xbf, 0x05, 0xf2, 0xf0, 0xa0, 0x29, 0x8a, 0xfa, 0x11,
+ 0x7b, 0xff, 0x82, 0xf9, 0xe3, 0x3d, 0xa2, 0xf6, 0x99, 0xb8, 0xc2, 0xae,
+ 0x19, 0x71, 0xc9, 0xb2, 0xf4, 0x8a, 0x68, 0x93, 0xc8, 0x65, 0x0b, 0xb6,
+ 0x80, 0xbb, 0x78, 0x9a, 0x1a, 0x92, 0x43, 0xd4, 0x85, 0x01, 0x4b, 0x50,
+ 0x39, 0xe8, 0xf7, 0x6c, 0xd1, 0x45, 0xbd, 0x9c, 0xe9, 0xc4, 0x69, 0x22,
+ 0xe6, 0x95, 0x92, 0x27, 0xfb, 0xf2, 0x8c, 0x1c, 0x34, 0xa8, 0x73, 0x0f,
+ 0x03, 0xc1, 0x23, 0x64, 0xef, 0x50, 0xad, 0xd7, 0xc8, 0x01, 0x23, 0x79,
+ 0x44, 0x5f, 0x81, 0xc2, 0x85, 0xb9, 0xca, 0x4f, 0xb3, 0x5b, 0x04, 0x08,
+ 0x78, 0xe6, 0x30, 0x98, 0x07, 0xde, 0xc0, 0x49, 0x62, 0x30, 0xcb, 0x35,
+ 0x1c, 0x18, 0xf7, 0xbe, 0xd8, 0x63, 0x96, 0xa2, 0x88, 0xfa, 0x43, 0xf6,
+ 0x03, 0x2c, 0x67, 0x9a, 0xbb, 0x25, 0xa9, 0x13, 0xac, 0x9f, 0xde, 0xc7,
+ 0x79, 0x62, 0x59, 0xa7, 0xa4, 0x37, 0x1b, 0x07, 0x70, 0x40, 0xab, 0x9a,
+ 0x39, 0xa9, 0xc9, 0xe3, 0x1e, 0x0b, 0xc1, 0x10, 0xad, 0x25, 0x58, 0x69,
+ 0x82, 0x78, 0x50, 0x4d, 0xb2, 0x65, 0xdb, 0x3f, 0xec, 0x74, 0x15, 0x77,
+ 0x98, 0xa1, 0xad, 0x9b, 0x85, 0x4e, 0x70, 0xe0, 0x36, 0x6a, 0x2e, 0x30,
+ 0x7e, 0x0a, 0xc9, 0xb0, 0x40, 0x69, 0x72, 0x25, 0x5c, 0xdd, 0x2c, 0xc0,
+ 0x8e, 0x78, 0x8b, 0xc0, 0x98, 0x64, 0xf1, 0x0d, 0x02, 0x4b, 0x0b, 0x46,
+ 0x5b, 0x74, 0x91, 0x40, 0xd4, 0x01, 0xf0, 0xa5, 0xb2, 0x63, 0xb4, 0x57,
+ 0x8e, 0x09, 0xd2, 0xa6, 0x45, 0x9b, 0x41, 0xd8, 0x22, 0x68, 0x2b, 0xd0,
+ 0xf9, 0x0d, 0x51, 0x35, 0x93, 0x18, 0xbc, 0xad, 0x81, 0x0c, 0x00, 0x46,
+ 0x5b, 0xd9, 0x09, 0x00, 0xf2, 0x84, 0x5b, 0x9a, 0x3c, 0x94, 0x80, 0xc4,
+ 0xc6, 0x93, 0x76, 0x39, 0x0f, 0x4f, 0xfe, 0xf7, 0xf1, 0xe0, 0xd7, 0xb0,
+ 0x26, 0xd7, 0x23, 0xcf, 0xf3, 0xf8, 0xde, 0xa3, 0x43, 0xa8, 0xb7, 0xd8,
+ 0x05, 0xbe, 0xc5, 0xd3, 0xa9, 0xaf, 0x73, 0x0f, 0xbf, 0x1f, 0x09, 0xfb,
+ 0x99, 0xa1, 0xc5, 0xbb, 0x1a, 0xf6, 0x6b, 0xd1, 0xc5, 0x39, 0xc3, 0x6f,
+ 0x82, 0x0a, 0xce, 0xa1, 0x61, 0xd9, 0x81, 0xbe, 0xcc, 0xe0, 0x7e, 0xb1,
+ 0x8a, 0x52, 0x4b, 0xea, 0x04, 0xa5, 0xda, 0xea, 0xf6, 0x29, 0x1a, 0x62,
+ 0x03, 0x8c, 0x3d, 0x8c, 0x8b, 0xb9, 0xf0, 0x29, 0x0d, 0x3c, 0xf3, 0x35,
+ 0xc8, 0x17, 0x08, 0x44, 0x15, 0x17, 0x76, 0x58, 0xda, 0xd6, 0xec, 0x06,
+ 0x81, 0x71, 0x1c, 0xc4, 0x8f, 0xac, 0x9b, 0x36, 0x73, 0x14, 0xaf, 0x6d,
+ 0x19, 0xcf, 0x16, 0x2d, 0xe9, 0x2e, 0x92, 0x99, 0x6b, 0x08, 0x49, 0xac,
+ 0x1c, 0xf9, 0x80, 0x54, 0x74, 0xd6, 0x6c, 0x2e, 0xc8, 0xc1, 0x11, 0xca,
+ 0xa5, 0x17, 0xe1, 0x88, 0x70, 0xfd, 0x54, 0x73, 0x47, 0x58, 0x16, 0x03,
+ 0x66, 0x70, 0xd3, 0x9d, 0xc8, 0x67, 0x03, 0x2b, 0x9f, 0x02, 0x33, 0x10,
+ 0x51, 0x6d, 0x3c, 0x08, 0x91, 0xee, 0x13, 0x8d, 0x70, 0x92, 0x48, 0x11,
+ 0x84, 0x55, 0x72, 0x68, 0x94, 0x56, 0x6c, 0x8d, 0xd7, 0xec, 0xa0, 0x07,
+ 0xe5, 0x94, 0xae, 0xb1, 0x7e, 0xfe, 0x16, 0x96, 0x54, 0x18, 0xb3, 0xdd,
+ 0x11, 0x7f, 0x82, 0x75, 0x6f, 0xb9, 0x18, 0x34, 0xb1, 0x8c, 0x83, 0x6a,
+ 0x42, 0xfa, 0x3e, 0x75, 0xbf, 0x13, 0xba, 0x0a, 0xc1, 0x28, 0x34, 0x04,
+ 0xd9, 0xd5, 0x6e, 0x49, 0x8b, 0xd6, 0xda, 0x1f, 0x30, 0x1c, 0xb3, 0x05,
+ 0xd4, 0xcd, 0x57, 0xa6, 0x2b, 0x36, 0x7e, 0xc9, 0x62, 0xde, 0xe7, 0x72,
+ 0x6c, 0x82, 0x6b, 0xd6, 0xf3, 0x80, 0xd1, 0xd1, 0xd3, 0x87, 0x87, 0x86,
+ 0x62, 0x12, 0x40, 0xe8, 0x4a, 0xf1, 0x31, 0x21, 0xf6, 0x67, 0x0f, 0x0f,
+ 0xd5, 0x2f, 0xd7, 0xc0, 0xaa, 0x88, 0x23, 0x89, 0xf7, 0x7b, 0x94, 0x49,
+ 0x72, 0x95, 0xac, 0x56, 0xdc, 0xb2, 0x8e, 0x72, 0x39, 0xdf, 0xc7, 0x88,
+ 0xba, 0x6d, 0x7a, 0x1a, 0x21, 0x71, 0xb8, 0x2a, 0x39, 0x96, 0xe5, 0xc3,
+ 0x89, 0xb7, 0x37, 0xc4, 0x0a, 0x04, 0x0c, 0x55, 0x83, 0x62, 0xb5, 0x41,
+ 0x2b, 0x59, 0xd4, 0xb2, 0x4e, 0xdc, 0x8b, 0x2c, 0x7b, 0x0a, 0xd4, 0xd1,
+ 0x32, 0x9d, 0xf2, 0x6b, 0xc0, 0xe0, 0xa4, 0x16, 0x76, 0x69, 0xf9, 0xd3,
+ 0xf9, 0xb2, 0x4c, 0x0a, 0x57, 0x2f, 0x3b, 0xa8, 0x35, 0xd7, 0xb6, 0xec,
+ 0x53, 0xe0, 0x05, 0x49, 0x38, 0x48, 0xbd, 0xa0, 0x97, 0x8e, 0x4b, 0x21,
+ 0x17, 0x14, 0x69, 0x46, 0x49, 0xb6, 0x8f, 0x57, 0x5b, 0x92, 0x89, 0x22,
+ 0x17, 0x18, 0xaa, 0x47, 0x33, 0x79, 0xa0, 0xd5, 0x96, 0x08, 0xd1, 0x08,
+ 0x1e, 0x5e, 0x92, 0x2e, 0xf8, 0xb6, 0xb9, 0xce, 0x72, 0xda, 0xd4, 0xd9,
+ 0x20, 0xc8, 0xdc, 0x6b, 0x44, 0x19, 0x4a, 0x57, 0x0e, 0xeb, 0x8f, 0xcb,
+ 0x88, 0x38, 0x88, 0xdc, 0x32, 0x2b, 0x95, 0x31, 0x6a, 0x2c, 0x2b, 0x73,
+ 0x1d, 0xc4, 0x2f, 0xd9, 0xb8, 0x1f, 0x8b, 0xca, 0xdf, 0x1b, 0x3c, 0x69,
+ 0x2b, 0x9b, 0x5a, 0xc1, 0x24, 0x89, 0x02, 0x61, 0xdf, 0x59, 0x36, 0x1f,
+ 0x29, 0x9e, 0xda, 0x58, 0xdc, 0x31, 0x07, 0x17, 0x84, 0xd5, 0x53, 0x6b,
+ 0xe7, 0x5e, 0x16, 0xf1, 0x11, 0x08, 0x43, 0xc3, 0x79, 0x2e, 0xa6, 0x49,
+ 0xb2, 0x90, 0xb1, 0x39, 0x64, 0x60, 0x2b, 0x9e, 0x2b, 0x27, 0x15, 0x61,
+ 0xf8, 0x4a, 0xa4, 0x7a, 0xdf, 0xae, 0xe3, 0x00, 0x11, 0xec, 0xf8, 0x30,
+ 0x69, 0x5b, 0x65, 0xbb, 0x76, 0x4e, 0xb3, 0x29, 0xe2, 0x8a, 0x25, 0xac,
+ 0xad, 0x29, 0x75, 0x65, 0x5b, 0x8a, 0xe1, 0xb8, 0x6d, 0x75, 0x44, 0xa5,
+ 0x9b, 0x51, 0xab, 0x7c, 0xdb, 0x2c, 0x1b, 0x21, 0x40, 0xf7, 0xb8, 0x9a,
+ 0x12, 0x81, 0xcd, 0x47, 0x05, 0x5c, 0x99, 0x11, 0x7c, 0xb6, 0x8a, 0x68,
+ 0x35, 0x70, 0xbc, 0x47, 0x0a, 0xa2, 0x60, 0x09, 0x1b, 0xb1, 0xcb, 0x48,
+ 0x28, 0xa8, 0xa1, 0x65, 0x9b, 0xf4, 0xe8, 0x22, 0x88, 0x1c, 0x35, 0xf2,
+ 0xd8, 0x07, 0x9e, 0x44, 0x9a, 0x35, 0x16, 0xfe, 0x5d, 0x14, 0xa3, 0x15,
+ 0x90, 0x8a, 0x47, 0xa9, 0xe6, 0x83, 0xd8, 0x97, 0x97, 0x7a, 0x78, 0x25,
+ 0xb3, 0x51, 0xaf, 0x0c, 0x96, 0xe8, 0x43, 0xa7, 0x4c, 0xa4, 0x8c, 0x2b,
+ 0xa0, 0x0b, 0xbd, 0x31, 0x1b, 0x0a, 0x9c, 0xf2, 0x27, 0xe3, 0x23, 0xc8,
+ 0x57, 0x8d, 0x59, 0x42, 0xe1, 0x42, 0x94, 0x9b, 0x9c, 0x80, 0xae, 0x43,
+ 0xdb, 0xe2, 0x8f, 0x01, 0x38, 0xa6, 0xce, 0x4a, 0xf4, 0xdf, 0x48, 0x9f,
+ 0x04, 0xc2, 0xa0, 0xf0, 0xac, 0x49, 0x0b, 0x42, 0xe8, 0xdb, 0x8c, 0x23,
+ 0x47, 0xf4, 0xca, 0xbd, 0xf2, 0xed, 0xe8, 0x9b, 0x4d, 0x1c, 0x41, 0xb4,
+ 0x63, 0x29, 0x32, 0xd4, 0x44, 0xaf, 0x82, 0x60, 0x6d, 0xc3, 0x46, 0xcc,
+ 0x13, 0xfc, 0x4a, 0x12, 0x27, 0x22, 0x17, 0x65, 0x8b, 0x17, 0x00, 0xac,
+ 0x9d, 0xbd, 0x47, 0x70, 0xbe, 0xf1, 0x74, 0x5a, 0xd0, 0x4c, 0xb1, 0x01,
+ 0xd4, 0x46, 0xca, 0x50, 0x69, 0x97, 0xc6, 0x98, 0x9a, 0x89, 0x4a, 0x9a,
+ 0x13, 0xac, 0x83, 0xe9, 0x16, 0x61, 0xe5, 0x98, 0x94, 0x51, 0x36, 0x44,
+ 0x72, 0xac, 0x80, 0x9a, 0x0e, 0xa4, 0x56, 0x40, 0xd9, 0xc4, 0x19, 0xf3,
+ 0x79, 0xcc, 0x20, 0xf0, 0x52, 0x24, 0x71, 0xc3, 0xfa, 0x74, 0x0c, 0xfb,
+ 0x63, 0x58, 0x5d, 0x4d, 0xdc, 0x5c, 0x47, 0xb5, 0xba, 0xac, 0x4c, 0xb7,
+ 0xff, 0x3c, 0xe1, 0x16, 0x5c, 0x3e, 0x84, 0x0b, 0x30, 0xd6, 0x37, 0x6f,
+ 0x88, 0x0f, 0xc5, 0x8a, 0xf0, 0xb7, 0x65, 0xca, 0x24, 0x2a, 0x11, 0x45,
+ 0x47, 0x80, 0x61, 0x2f, 0x34, 0xb8, 0xfc, 0x1a, 0xe1, 0x1b, 0xea, 0xef,
+ 0xce, 0x9d, 0x64, 0xd0, 0x80, 0xa3, 0x05, 0x92, 0xd2, 0xc0, 0x50, 0x43,
+ 0x01, 0x78, 0x39, 0x5b, 0x86, 0xd8, 0x69, 0xfd, 0x21, 0x8f, 0x84, 0x5a,
+ 0xed, 0xa3, 0x8d, 0xb6, 0xbb, 0xdf, 0x63, 0x76, 0xf6, 0xa5, 0xc8, 0x8c,
+ 0x97, 0x67, 0x30, 0x1c, 0xc8, 0x1d, 0x32, 0x02, 0x03, 0x6f, 0x12, 0xdc,
+ 0x98, 0x06, 0x94, 0x3c, 0x73, 0xd8, 0x4a, 0x24, 0x33, 0xd7, 0x11, 0x2f,
+ 0x9e, 0x46, 0x2f, 0x3f, 0x10, 0x33, 0xaa, 0x65, 0x4d, 0xd4, 0x4c, 0x32,
+ 0x3c, 0x3b, 0xfc, 0x66, 0xf8, 0xf4, 0x83, 0xc1, 0xa2, 0xeb, 0xab, 0xbb,
+ 0x3e, 0x1a, 0x2e, 0xfa, 0x48, 0x39, 0x85, 0x96, 0xac, 0x09, 0x2e, 0x2c,
+ 0x93, 0xd3, 0xa5, 0x56, 0xc0, 0xa1, 0xca, 0xc0, 0xb7, 0x69, 0xb6, 0x74,
+ 0x88, 0x4d, 0x91, 0x8f, 0x9a, 0xec, 0x39, 0xb0, 0xb7, 0x55, 0x23, 0x83,
+ 0x2c, 0xe1, 0x3d, 0x11, 0xfc, 0xb6, 0xe4, 0x61, 0x3c, 0x5d, 0x16, 0xe9,
+ 0xdd, 0x6f, 0x5a, 0xc8, 0x5b, 0x56, 0x3d, 0xfe, 0xa7, 0x96, 0x3d, 0xfe,
+ 0xb8, 0x75, 0x6f, 0x30, 0x91, 0x5f, 0xb8, 0xee, 0x6d, 0x45, 0xdc, 0xff,
+ 0xef, 0x58, 0xf7, 0x67, 0x7d, 0x07, 0x1f, 0xf4, 0xf2, 0x97, 0x86, 0x4a,
+ 0x63, 0x0b, 0x9e, 0x69, 0x68, 0xe9, 0x26, 0xac, 0x5f, 0x49, 0x18, 0x6d,
+ 0xca, 0xa5, 0x4a, 0xa6, 0x77, 0xc9, 0x1a, 0x0c, 0x23, 0x98, 0x80, 0xb7,
+ 0x3e, 0x78, 0x62, 0xdc, 0x4e, 0x89, 0x5f, 0x5a, 0xf6, 0xaa, 0xbe, 0x76,
+ 0xff, 0xc4, 0xce, 0x39, 0x89, 0xc0, 0xef, 0x5d, 0xeb, 0xe6, 0x85, 0x7b,
+ 0x27, 0x97, 0xe6, 0xff, 0xd4, 0xce, 0xd5, 0xa4, 0xe5, 0xea, 0x2c, 0x50,
+ 0x40, 0xc1, 0xc6, 0x2e, 0x25, 0x7b, 0xe9, 0x5e, 0x9c, 0xa2, 0x8a, 0x8e,
+ 0xc3, 0xe9, 0x71, 0x01, 0x44, 0x4d, 0xd4, 0x3a, 0x25, 0x87, 0x4a, 0x85,
+ 0x56, 0xdd, 0x0d, 0x57, 0x30, 0x6c, 0xab, 0x41, 0x3c, 0xff, 0xcc, 0x99,
+ 0x35, 0x82, 0xe1, 0xc8, 0x40, 0x80, 0x48, 0x19, 0x99, 0x08, 0x7d, 0x81,
+ 0x34, 0xda, 0x42, 0x11, 0xa1, 0xb7, 0x03, 0xd4, 0xd2, 0xaa, 0xc3, 0x7c,
+ 0x90, 0x64, 0x2a, 0x87, 0xbb, 0x05, 0xc2, 0x73, 0x5d, 0x44, 0xfe, 0xff,
+ 0x91, 0x07, 0xbb, 0x8d, 0x3c, 0x2c, 0x28, 0xfe, 0xa3, 0x89, 0xc3, 0x85,
+ 0xb2, 0xfd, 0x4b, 0xe4, 0xd1, 0x76, 0xce, 0x36, 0x35, 0x3e, 0x8f, 0x97,
+ 0xc9, 0x78, 0xfe, 0x96, 0x2f, 0x97, 0x08, 0x54, 0x4d, 0xdc, 0xea, 0x27,
+ 0xe7, 0xdf, 0x3e, 0x87, 0x33, 0x63, 0xd8, 0x04, 0xc5, 0x39, 0x3d, 0x3a,
+ 0x38, 0x6f, 0x61, 0x61, 0xd7, 0x74, 0xcb, 0x2f, 0xd2, 0x3e, 0xdb, 0x3f,
+ 0x59, 0x30, 0x7d, 0xa9, 0xbf, 0x30, 0x11, 0xb5, 0x89, 0xde, 0xa6, 0x5f,
+ 0xd8, 0xf3, 0xe0, 0x7e, 0x8a, 0xa7, 0x81, 0x59, 0xaa, 0xf9, 0x9a, 0xc5,
+ 0xf2, 0xf1, 0x6c, 0xb2, 0x2d, 0x7f, 0xf6, 0xaf, 0xfe, 0x36, 0x99, 0x0f,
+ 0x1e, 0xa1, 0x95, 0xb8, 0x12, 0xbc, 0xae, 0x05, 0x64, 0xd2, 0x66, 0xbe,
+ 0xac, 0xab, 0x6b, 0x57, 0x37, 0xcd, 0xbb, 0x53, 0x15, 0x69, 0x2a, 0x0e,
+ 0xa0, 0x57, 0xd6, 0xcd, 0x92, 0x3f, 0x9d, 0x44, 0x0a, 0xea, 0x16, 0x35,
+ 0x13, 0x1e, 0xf0, 0xfd, 0xb6, 0x6f, 0xe9, 0x5f, 0xeb, 0xcd, 0xda, 0xe3,
+ 0xb0, 0xd3, 0xb6, 0xe6, 0x64, 0x14, 0x22, 0x2b, 0xd7, 0x9e, 0x14, 0xad,
+ 0x5f, 0x8a, 0x56, 0xa2, 0xba, 0xa9, 0xbf, 0x22, 0xfa, 0x8a, 0x49, 0xd8,
+ 0x80, 0x23, 0x10, 0xc8, 0xe9, 0x72, 0x6c, 0x99, 0x29, 0xe9, 0x7c, 0xbc,
+ 0x88, 0x25, 0x79, 0xbd, 0xbe, 0x05, 0x8f, 0xe3, 0xcb, 0x55, 0x67, 0x33,
+ 0x4f, 0xea, 0xf1, 0x96, 0x07, 0x45, 0x05, 0x49, 0x47, 0x9e, 0x8b, 0x2c,
+ 0xe3, 0x0a, 0xdb, 0x8a, 0x10, 0x28, 0x2d, 0x7d, 0x85, 0x48, 0x15, 0xdc,
+ 0x44, 0xf2, 0x48, 0x23, 0xff, 0xbe, 0x74, 0x00, 0x84, 0x51, 0x7e, 0x35,
+ 0xde, 0x7d, 0xf1, 0x7c, 0x97, 0xa5, 0xde, 0x55, 0x21, 0x30, 0x55, 0x85,
+ 0x36, 0xf3, 0x74, 0xf0, 0x64, 0xfb, 0xe9, 0xe0, 0x69, 0xe4, 0xb1, 0xd9,
+ 0x47, 0x49, 0x6b, 0x4a, 0x6e, 0x32, 0x46, 0x3a, 0xff, 0x48, 0x8f, 0xdc,
+ 0xdb, 0xe3, 0x43, 0xab, 0x1a, 0x8b, 0x24, 0xd5, 0x2a, 0x2c, 0xa5, 0x56,
+ 0x35, 0xe5, 0xc5, 0x93, 0x52, 0x08, 0xed, 0xa8, 0xde, 0xad, 0xcb, 0xe2,
+ 0xf3, 0x8d, 0x11, 0xb6, 0x32, 0xd7, 0x39, 0xd3, 0xba, 0x12, 0xcb, 0xba,
+ 0xd1, 0xf2, 0x67, 0x2d, 0x91, 0x78, 0xf5, 0xb5, 0x09, 0x56, 0x6e, 0xf0,
+ 0x81, 0x9d, 0x29, 0x27, 0xc4, 0x5b, 0xdb, 0x9d, 0xc6, 0x17, 0xae, 0xda,
+ 0x11, 0x31, 0x0c, 0x14, 0x9f, 0x2f, 0x14, 0x80, 0x89, 0x5f, 0xb1, 0x78,
+ 0xb1, 0x4a, 0x24, 0x91, 0xd9, 0xba, 0xd7, 0x86, 0x0c, 0x06, 0x70, 0x46,
+ 0x02, 0xe7, 0x07, 0x70, 0xfd, 0x6e, 0xbf, 0x6b, 0x57, 0x85, 0x19, 0xcb,
+ 0x83, 0x0a, 0xb2, 0x86, 0xf8, 0xb4, 0xfe, 0xd0, 0x6b, 0x51, 0x0e, 0x44,
+ 0xb5, 0x88, 0x5d, 0x87, 0x9d, 0x24, 0x0e, 0x06, 0x8d, 0x38, 0xca, 0x0d,
+ 0x33, 0x3d, 0xb5, 0xe2, 0x4c, 0x92, 0x71, 0x53, 0xc7, 0x72, 0x40, 0x1f,
+ 0xf4, 0xfc, 0x38, 0x5e, 0xc4, 0xa3, 0x74, 0x9a, 0x96, 0x69, 0x4b, 0x78,
+ 0xde, 0xaf, 0x28, 0xfb, 0x95, 0xe3, 0x45, 0x7f, 0x9e, 0xb5, 0xd9, 0x08,
+ 0x2f, 0xb9, 0xec, 0x49, 0x00, 0x76, 0xfb, 0xfe, 0xed, 0xd9, 0xd1, 0xf1,
+ 0xe9, 0xc1, 0x0f, 0xe6, 0xf5, 0x76, 0xa1, 0xc7, 0xa8, 0x1d, 0x9b, 0xc4,
+ 0xc5, 0xea, 0x7d, 0x91, 0x94, 0xf4, 0xe5, 0xe6, 0x93, 0x2d, 0xf6, 0x47,
+ 0xd5, 0xaf, 0x59, 0x56, 0xbf, 0xc2, 0x5a, 0x08, 0x6a, 0xb0, 0xf5, 0xf3,
+ 0xa8, 0x91, 0xc9, 0x6e, 0xc5, 0xd1, 0x50, 0xd2, 0xfd, 0x5a, 0x26, 0xd3,
+ 0x79, 0x52, 0x2a, 0xf0, 0x7d, 0xf4, 0xf2, 0xec, 0xfc, 0xf2, 0xd5, 0x5d,
+ 0x3c, 0xad, 0x93, 0x0c, 0x03, 0x09, 0x69, 0x8b, 0x85, 0x51, 0x88, 0xbc,
+ 0x19, 0x84, 0x30, 0x0e, 0x5d, 0xac, 0xa0, 0x3d, 0xd9, 0x06, 0x56, 0x71,
+ 0x79, 0xf9, 0xc3, 0xf9, 0xf1, 0xab, 0x97, 0xac, 0x32, 0x7f, 0xce, 0x8a,
+ 0xbe, 0x9a, 0x4a, 0xa0, 0x41, 0xf3, 0x3a, 0xaf, 0x16, 0xcd, 0xeb, 0xfb,
+ 0xfb, 0xa3, 0x93, 0xe1, 0xf9, 0xe9, 0xd9, 0xe1, 0xab, 0x97, 0xdf, 0xb3,
+ 0x81, 0x95, 0x0b, 0x6a, 0x04, 0xef, 0xba, 0xcf, 0x5c, 0x1c, 0x54, 0x13,
+ 0x09, 0xf8, 0xf8, 0xbb, 0xf7, 0xc7, 0x6f, 0xbf, 0x7d, 0xf5, 0xf2, 0x2e,
+ 0xce, 0x7b, 0x3c, 0x3f, 0x79, 0x9b, 0x13, 0x9a, 0x5b, 0xea, 0x2e, 0x54,
+ 0xf6, 0x92, 0x73, 0x0f, 0x46, 0xd3, 0x5b, 0xa9, 0xc1, 0x83, 0xc2, 0x37,
+ 0x8d, 0x00, 0x84, 0x4b, 0xc4, 0x69, 0xb3, 0xd1, 0x82, 0x7f, 0x8b, 0xbe,
+ 0x3c, 0xfd, 0x86, 0xdd, 0x5b, 0xee, 0x6e, 0x46, 0x94, 0x2b, 0x91, 0xc9,
+ 0xe7, 0xcf, 0x76, 0xf7, 0xb6, 0x82, 0x92, 0x1a, 0xec, 0x24, 0xa7, 0x11,
+ 0xdf, 0x36, 0x8c, 0x26, 0x3f, 0x1b, 0xe2, 0xac, 0x07, 0xbb, 0xd6, 0x5a,
+ 0xe2, 0x7c, 0x03, 0x08, 0xb0, 0x74, 0x1e, 0xcf, 0xb9, 0x90, 0x22, 0x42,
+ 0x94, 0x38, 0x32, 0xa3, 0x04, 0x82, 0x08, 0x3b, 0xb0, 0x1b, 0x79, 0xb8,
+ 0x97, 0x3e, 0x9a, 0x75, 0xc0, 0xc6, 0x6c, 0xbb, 0xa1, 0x69, 0x38, 0xea,
+ 0xf7, 0x6e, 0x27, 0xe4, 0x5f, 0xfb, 0x60, 0xb4, 0x27, 0xc1, 0x87, 0xb0,
+ 0x56, 0x97, 0x8c, 0xce, 0xbe, 0x60, 0xd7, 0xe5, 0x23, 0x31, 0x2f, 0x58,
+ 0x3f, 0x8f, 0x73, 0x5c, 0x65, 0x56, 0x81, 0xff, 0x49, 0xc9, 0xd4, 0x21,
+ 0xae, 0xbd, 0xbb, 0x38, 0x5d, 0xc3, 0xbe, 0x5c, 0x4d, 0x79, 0x8f, 0xfd,
+ 0x66, 0xd5, 0xe1, 0x5d, 0xc3, 0xc0, 0x59, 0x3b, 0x74, 0xfb, 0x11, 0x5b,
+ 0xfd, 0xed, 0x47, 0x1c, 0x60, 0x92, 0x75, 0x07, 0x67, 0xbe, 0xab, 0xbb,
+ 0x03, 0x5a, 0x10, 0xd4, 0x5d, 0x9a, 0x42, 0x8a, 0x24, 0xdc, 0x6d, 0x63,
+ 0x08, 0xbc, 0x7e, 0x1b, 0x6b, 0x02, 0xe1, 0x22, 0x71, 0xc3, 0x28, 0x96,
+ 0x4c, 0x26, 0xc8, 0xd3, 0x18, 0x8f, 0x65, 0x21, 0x56, 0x67, 0xa1, 0x48,
+ 0x34, 0x1b, 0x2d, 0x50, 0x86, 0x42, 0x50, 0x37, 0x1c, 0x9f, 0x54, 0xba,
+ 0x8a, 0xdc, 0xd8, 0xbb, 0x6a, 0x04, 0x9a, 0x11, 0x69, 0xe0, 0x11, 0xac,
+ 0x0b, 0x12, 0x1a, 0x67, 0xe4, 0x93, 0x52, 0xc4, 0xe8, 0xcc, 0x5a, 0x06,
+ 0x87, 0x33, 0x4f, 0x57, 0x41, 0xd8, 0x82, 0x6c, 0x6c, 0x10, 0x12, 0xde,
+ 0x30, 0x5b, 0xb3, 0xc9, 0x68, 0xe0, 0xe8, 0xcd, 0x08, 0x0d, 0x52, 0x02,
+ 0xfb, 0xaf, 0x36, 0x87, 0x5b, 0x4a, 0xc6, 0x42, 0x6e, 0xe7, 0xef, 0x7c,
+ 0x92, 0x4f, 0x5b, 0xf5, 0xa9, 0x75, 0x04, 0xe8, 0xd4, 0x6d, 0xbf, 0x50,
+ 0x9d, 0x7e, 0x87, 0x41, 0x0c, 0xd5, 0x5e, 0x09, 0x08, 0x43, 0x3b, 0x6e,
+ 0x74, 0x4b, 0x71, 0x99, 0x18, 0x9f, 0x44, 0x14, 0xb7, 0xe2, 0xf0, 0x49,
+ 0xbc, 0x6d, 0x74, 0x30, 0x85, 0x77, 0x99, 0x78, 0xe3, 0xaa, 0x57, 0xef,
+ 0x63, 0xd0, 0x89, 0x2a, 0x48, 0x89, 0x62, 0x3f, 0xdd, 0x6a, 0x60, 0x8a,
+ 0xae, 0x30, 0xf4, 0xd0, 0x16, 0x10, 0xe6, 0xc3, 0xf2, 0x50, 0x6b, 0x43,
+ 0x43, 0x80, 0x05, 0x58, 0x49, 0x33, 0x1f, 0x1c, 0x72, 0x03, 0x52, 0x71,
+ 0xa5, 0x68, 0x0b, 0xa7, 0xba, 0xc0, 0x95, 0xe5, 0x42, 0x98, 0x14, 0x2d,
+ 0x5f, 0xec, 0xc2, 0xda, 0x26, 0x84, 0xb0, 0x36, 0xdc, 0x11, 0xd9, 0xc4,
+ 0x96, 0x45, 0xb5, 0x2a, 0x8e, 0x96, 0x73, 0xc0, 0x6c, 0xa0, 0x7f, 0xe9,
+ 0x41, 0xf8, 0x18, 0x42, 0xaf, 0x25, 0x59, 0x47, 0x81, 0x9d, 0xfb, 0x97,
+ 0x0d, 0x48, 0x23, 0x7e, 0x61, 0x11, 0xa7, 0x79, 0x10, 0x4a, 0x83, 0xf0,
+ 0x35, 0x9e, 0xbb, 0x50, 0x92, 0x06, 0x3e, 0x42, 0xea, 0x1d, 0x08, 0x69,
+ 0xc3, 0x4f, 0xb2, 0xb6, 0xa4, 0x44, 0xe7, 0x7a, 0x9a, 0x8d, 0x46, 0x34,
+ 0xa9, 0x8e, 0x49, 0xa4, 0x34, 0xc2, 0x38, 0xbf, 0x86, 0x92, 0xd6, 0x33,
+ 0xbc, 0x2b, 0x7f, 0x58, 0x01, 0x97, 0x8a, 0xbe, 0xd6, 0x45, 0xfa, 0x6b,
+ 0x1d, 0xb1, 0xcc, 0xe3, 0x5f, 0x03, 0xc8, 0x34, 0xac, 0x49, 0x29, 0xee,
+ 0x6f, 0x7c, 0x1e, 0x59, 0xff, 0x75, 0x8e, 0x5f, 0xae, 0x38, 0x56, 0xd2,
+ 0x5d, 0x9f, 0xca, 0x7c, 0xc0, 0x72, 0x14, 0xc3, 0x32, 0x6d, 0x09, 0xb6,
+ 0xe7, 0x09, 0xd3, 0x04, 0x3a, 0x7f, 0xe7, 0x51, 0xec, 0xf6, 0xf8, 0xdf,
+ 0xbd, 0x7f, 0x74, 0x0c, 0xa9, 0x94, 0xb1, 0xa2, 0x65, 0xf0, 0x25, 0xa3,
+ 0x43, 0x16, 0x06, 0x8f, 0xda, 0x82, 0x86, 0xca, 0x15, 0xbc, 0xd6, 0xb6,
+ 0x9e, 0xce, 0xae, 0x7f, 0xdc, 0xed, 0xef, 0xee, 0xec, 0xec, 0xfc, 0x34,
+ 0x58, 0xf0, 0xd2, 0x5d, 0xa1, 0x79, 0xfa, 0x77, 0xb0, 0x48, 0xc7, 0x1c,
+ 0xf2, 0x42, 0x9b, 0x99, 0xc6, 0xdc, 0xf4, 0xb6, 0xf4, 0xb7, 0x1d, 0x5e,
+ 0x9f, 0x39, 0x27, 0xef, 0xb4, 0xf2, 0x71, 0x07, 0x48, 0x4d, 0x47, 0xe2,
+ 0x6a, 0xa9, 0xe0, 0xf5, 0x2c, 0x77, 0x4f, 0x96, 0x12, 0x8d, 0x20, 0xd1,
+ 0x1a, 0xea, 0x26, 0xe6, 0xcd, 0x26, 0x52, 0x95, 0x62, 0x60, 0x7c, 0xe3,
+ 0xf5, 0x5a, 0x2b, 0x17, 0xe3, 0xdb, 0x44, 0x50, 0x7d, 0x38, 0x0f, 0x36,
+ 0xa8, 0xde, 0xd2, 0x73, 0x89, 0x01, 0x38, 0xb0, 0x4a, 0xf7, 0x72, 0x6e,
+ 0x9b, 0x40, 0xc3, 0x7c, 0xcc, 0x48, 0xfa, 0xe4, 0xaf, 0x8d, 0xcb, 0xb9,
+ 0x7a, 0x11, 0x56, 0xbd, 0x22, 0x91, 0xfc, 0xd2, 0x3a, 0x72, 0x69, 0x9b,
+ 0x82, 0xee, 0x4d, 0x1d, 0xa1, 0x99, 0x03, 0xc1, 0xfc, 0xfd, 0x3b, 0x81,
+ 0x34, 0x1e, 0x65, 0x05, 0xbc, 0xf5, 0xba, 0x68, 0x0d, 0xe5, 0xa7, 0x18,
+ 0xa7, 0xe9, 0x6f, 0x2a, 0xb5, 0xa2, 0x57, 0x74, 0xf3, 0xf8, 0x86, 0xc5,
+ 0xb2, 0x5d, 0xb2, 0x5b, 0xe1, 0x66, 0xf9, 0xdd, 0x12, 0x73, 0x87, 0xdb,
+ 0xaf, 0xff, 0x83, 0x36, 0x8c, 0xab, 0x1b, 0x36, 0xaa, 0x3d, 0x61, 0xaa,
+ 0xa2, 0x28, 0x4e, 0x93, 0x98, 0x83, 0x8a, 0xcd, 0x4c, 0x73, 0x93, 0x3c,
+ 0x88, 0xc0, 0xd0, 0x84, 0x09, 0x10, 0x9f, 0x2e, 0x7b, 0x4d, 0x54, 0xef,
+ 0x3b, 0x18, 0x1e, 0x9e, 0x9c, 0x54, 0x14, 0x62, 0x5e, 0xbc, 0x01, 0x43,
+ 0xa0, 0x8b, 0x9b, 0xa5, 0x98, 0xd1, 0x2a, 0xb2, 0x93, 0x07, 0xc3, 0x6d,
+ 0xc8, 0x29, 0x1c, 0x92, 0x86, 0xf4, 0x51, 0x46, 0x20, 0x8f, 0x8b, 0xd4,
+ 0x62, 0x00, 0x63, 0xc9, 0xfd, 0x5a, 0xce, 0x59, 0xa2, 0xe0, 0xc0, 0x98,
+ 0x9b, 0x25, 0x1d, 0xc9, 0xe2, 0x23, 0x4d, 0x6f, 0x1f, 0x4b, 0x8f, 0xbf,
+ 0x3d, 0xe9, 0xb5, 0x04, 0x3b, 0x9d, 0xe7, 0x1a, 0x53, 0x26, 0xa1, 0x2f,
+ 0x91, 0x44, 0x2a, 0x31, 0x6e, 0x39, 0xdf, 0x1a, 0x42, 0x81, 0x19, 0x8a,
+ 0x09, 0x61, 0xb4, 0xb8, 0x52, 0x0c, 0x40, 0xab, 0x05, 0x69, 0x47, 0xf5,
+ 0x84, 0xa2, 0x8e, 0x9b, 0xff, 0xb4, 0x22, 0x85, 0x5a, 0x8d, 0xa0, 0xe8,
+ 0x25, 0xff, 0xbb, 0x6f, 0x05, 0x7a, 0xd6, 0x95, 0xde, 0x74, 0x99, 0x28,
+ 0xcd, 0x92, 0x3e, 0x21, 0xb0, 0xaf, 0x5c, 0xb7, 0x8f, 0x83, 0xb9, 0x0f,
+ 0xa2, 0x33, 0xb7, 0x2f, 0xbe, 0x28, 0x20, 0xda, 0xac, 0x57, 0x28, 0x5b,
+ 0x07, 0xec, 0x8e, 0xf4, 0xc3, 0xeb, 0x54, 0x09, 0xdf, 0x8f, 0x6b, 0xd3,
+ 0x8c, 0x8b, 0x6c, 0x8f, 0xcc, 0x45, 0x7b, 0xa6, 0x9b, 0x78, 0x9a, 0xcd,
+ 0xb7, 0x5a, 0x97, 0x0a, 0x5b, 0x45, 0x82, 0x26, 0xc7, 0x90, 0x89, 0xf5,
+ 0xce, 0x15, 0x05, 0x6c, 0x8b, 0x03, 0x40, 0xf0, 0x0b, 0xe4, 0x5a, 0x2e,
+ 0xe9, 0x71, 0x7e, 0xd2, 0xd7, 0x30, 0x48, 0x45, 0xde, 0x97, 0x6c, 0x37,
+ 0x01, 0xb6, 0xaf, 0xe3, 0xda, 0xb4, 0x2d, 0x84, 0xcf, 0xa7, 0x16, 0xd4,
+ 0xe8, 0x0a, 0xf4, 0xd5, 0x72, 0x51, 0x9b, 0x9b, 0x70, 0x1b, 0x1b, 0x5f,
+ 0x5d, 0xa8, 0x44, 0xe2, 0xb3, 0x60, 0x5c, 0x84, 0xca, 0xde, 0x48, 0xab,
+ 0xe0, 0xb9, 0x34, 0x49, 0xb5, 0x28, 0xc8, 0x35, 0x8e, 0x95, 0x69, 0x83,
+ 0x35, 0x0a, 0x48, 0x7e, 0x9f, 0x78, 0xce, 0x32, 0xda, 0xef, 0xfc, 0x86,
+ 0x27, 0xe3, 0x9d, 0x59, 0xc0, 0x7f, 0x7d, 0x82, 0x6c, 0x80, 0xfc, 0xb7,
+ 0x12, 0xe4, 0xff, 0xbf, 0xd7, 0x7e, 0xaf, 0xdf, 0xfd, 0xb6, 0x7b, 0xdd,
+ 0xe7, 0x79, 0xbf, 0x24, 0xa1, 0x6f, 0xdd, 0xbe, 0xc6, 0x10, 0x22, 0x0d,
+ 0xe4, 0xbf, 0x01, 0xd7, 0x0a, 0xb5, 0x8b, 0xaf, 0x9c, 0x1b, 0x5a, 0x22,
+ 0x17, 0x07, 0xd5, 0x44, 0xc7, 0x30, 0x58, 0x0c, 0x93, 0xd4, 0xa9, 0xd1,
+ 0xcd, 0x62, 0x4b, 0x12, 0x12, 0x82, 0xd4, 0xf5, 0x0f, 0x54, 0x72, 0x30,
+ 0x35, 0x45, 0x1c, 0x5e, 0x95, 0x04, 0x63, 0x49, 0x7f, 0xe5, 0xb0, 0x10,
+ 0x03, 0x90, 0x80, 0x88, 0xde, 0xb6, 0xb8, 0x3c, 0x21, 0x0e, 0x70, 0x17,
+ 0xa3, 0x60, 0xcf, 0x05, 0x29, 0x85, 0xc5, 0x13, 0x14, 0x8c, 0xe2, 0x03,
+ 0x78, 0xf0, 0x6a, 0x72, 0x0a, 0xd6, 0x33, 0xb8, 0xc6, 0xda, 0xcb, 0xaa,
+ 0x8a, 0xe1, 0x92, 0xd7, 0x12, 0x32, 0x0a, 0xd0, 0x57, 0xed, 0x2a, 0xd9,
+ 0x2e, 0xe3, 0xe9, 0x6d, 0xcc, 0x12, 0xc9, 0x20, 0x7a, 0x23, 0xeb, 0xea,
+ 0x8b, 0xde, 0x36, 0xe2, 0x3f, 0x46, 0xcb, 0xeb, 0x6b, 0xa0, 0x4b, 0x1e,
+ 0xc8, 0x0d, 0x54, 0x18, 0x40, 0x04, 0x0c, 0x93, 0xdd, 0xcf, 0xbb, 0x1a,
+ 0xc8, 0xd9, 0xb9, 0xa1, 0xcb, 0x9a, 0x16, 0x89, 0xc5, 0xa1, 0x8e, 0xd6,
+ 0xc2, 0x6e, 0x64, 0x79, 0x31, 0xfd, 0xf7, 0xa2, 0xee, 0xcb, 0xf6, 0x97,
+ 0x48, 0x41, 0x4f, 0x68, 0x54, 0x52, 0x07, 0xc5, 0xa9, 0xff, 0xb4, 0x86,
+ 0x37, 0x29, 0x5d, 0x68, 0xf3, 0x66, 0xf0, 0x96, 0x16, 0x56, 0x83, 0x87,
+ 0x40, 0x02, 0x7a, 0xe3, 0xd6, 0x41, 0xfe, 0xd1, 0xfa, 0x33, 0xc8, 0x58,
+ 0xa4, 0x40, 0x5e, 0x65, 0x8d, 0xe4, 0x7a, 0x4d, 0x7f, 0xd2, 0xfe, 0x1f,
+ 0x2d, 0xba, 0x95, 0x1a, 0xb7, 0x10, 0x59, 0x08, 0x94, 0xa7, 0x78, 0x4b,
+ 0x32, 0xa9, 0xc2, 0x17, 0x98, 0x50, 0xa9, 0xa7, 0x2e, 0x25, 0xf6, 0x53,
+ 0xda, 0x46, 0x11, 0x15, 0x13, 0x2f, 0xfe, 0x78, 0xb8, 0x48, 0xb3, 0x08,
+ 0x73, 0x79, 0x50, 0x2d, 0x28, 0xb1, 0xee, 0x6a, 0x34, 0x93, 0x87, 0x3f,
+ 0x35, 0x45, 0x89, 0x4a, 0x6b, 0x5a, 0xf5, 0x15, 0xb7, 0x26, 0x3f, 0x68,
+ 0x15, 0xfb, 0xd4, 0xaa, 0xda, 0x6b, 0xa2, 0x48, 0x20, 0x51, 0xca, 0xc1,
+ 0x88, 0x38, 0x39, 0xa4, 0x2a, 0x44, 0x9b, 0xcd, 0xfc, 0x9f, 0x95, 0xc3,
+ 0x2a, 0x8d, 0x3d, 0x22, 0x88, 0x01, 0xdc, 0x6d, 0xe8, 0x82, 0x8c, 0x04,
+ 0x53, 0xda, 0xc2, 0xfe, 0x10, 0x57, 0x14, 0x9c, 0x8a, 0xa0, 0x7e, 0x4a,
+ 0xb3, 0x52, 0x1b, 0x84, 0xa3, 0x4a, 0xc5, 0x4b, 0x31, 0x28, 0x8b, 0x6e,
+ 0x2d, 0xf6, 0x2e, 0x17, 0x61, 0x6e, 0x68, 0xd6, 0x29, 0x0c, 0x5a, 0xc5,
+ 0xa0, 0xad, 0xda, 0x81, 0x06, 0xd9, 0x89, 0x58, 0xa6, 0xbb, 0xa8, 0x49,
+ 0x3d, 0xac, 0x42, 0x58, 0x13, 0x1c, 0x7c, 0x0f, 0xaa, 0x77, 0xd1, 0xeb,
+ 0x4d, 0x69, 0x1a, 0x85, 0x9c, 0x9e, 0xe4, 0x13, 0x08, 0xd0, 0x2b, 0x2d,
+ 0x1e, 0x93, 0xa2, 0x6a, 0xc7, 0xfc, 0xd6, 0x82, 0x96, 0x24, 0xdf, 0x20,
+ 0x19, 0x2f, 0xcb, 0xaa, 0x1d, 0x37, 0x18, 0x93, 0xc6, 0x24, 0x63, 0x48,
+ 0x9b, 0x38, 0x03, 0x0a, 0xbe, 0xd8, 0x71, 0x10, 0xd1, 0xfb, 0x9d, 0x2d,
+ 0x93, 0xdb, 0xa1, 0xd6, 0xac, 0x43, 0x25, 0x06, 0x91, 0xdb, 0x90, 0x49,
+ 0x52, 0x85, 0x91, 0x01, 0xc5, 0xc6, 0xa4, 0x7e, 0x4d, 0x5b, 0xf7, 0x44,
+ 0x7e, 0x79, 0x6b, 0xef, 0xaf, 0x25, 0x7f, 0x24, 0xe8, 0xdc, 0x95, 0x1f,
+ 0xd0, 0xd4, 0x92, 0x62, 0x0d, 0x30, 0x45, 0xd0, 0x73, 0xc6, 0x28, 0x77,
+ 0x21, 0x70, 0xb4, 0xbd, 0x6a, 0x8b, 0xbf, 0xdf, 0x44, 0x3f, 0xba, 0x7b,
+ 0x1e, 0x98, 0x6f, 0x98, 0x01, 0xe3, 0x23, 0x5d, 0xce, 0xb4, 0xa9, 0x46,
+ 0xdc, 0xe6, 0xa3, 0xa7, 0xf4, 0xe3, 0x1b, 0xfe, 0x61, 0x65, 0x9f, 0x19,
+ 0x2b, 0xcb, 0xcc, 0x17, 0x4d, 0xe0, 0x03, 0x2e, 0x0d, 0x27, 0xe7, 0x7e,
+ 0x08, 0x2a, 0x7a, 0x8d, 0x5f, 0xf2, 0xe4, 0x91, 0x77, 0x68, 0x6e, 0x3f,
+ 0xb3, 0x03, 0x71, 0x59, 0x66, 0x4c, 0x89, 0x63, 0x24, 0x6a, 0xcc, 0x18,
+ 0x59, 0xd5, 0x11, 0x8c, 0xfe, 0xa9, 0x1e, 0xaa, 0x02, 0x47, 0x49, 0x99,
+ 0x4b, 0xba, 0x06, 0xca, 0x69, 0x7d, 0x7f, 0x52, 0xf8, 0xaa, 0x15, 0x72,
+ 0xf1, 0xd1, 0xb9, 0x3d, 0x56, 0x3e, 0xb7, 0x81, 0x19, 0x59, 0x6b, 0x98,
+ 0x97, 0x82, 0x16, 0xf3, 0xd9, 0xc7, 0xad, 0xe2, 0x11, 0xdf, 0x32, 0x76,
+ 0x0b, 0x3b, 0x2c, 0x32, 0x2d, 0xda, 0x2a, 0x92, 0x97, 0x2f, 0xda, 0x8a,
+ 0x87, 0x55, 0x42, 0x50, 0xf4, 0xe4, 0xf6, 0xc1, 0xe1, 0xd2, 0x43, 0x3c,
+ 0x1f, 0x98, 0xcb, 0xad, 0x99, 0x5a, 0x66, 0x74, 0xd1, 0xe6, 0x2b, 0x7f,
+ 0xb5, 0x45, 0x74, 0x4d, 0x0e, 0x04, 0x8d, 0x1a, 0x9d, 0xaf, 0x49, 0xe0,
+ 0x9d, 0x90, 0xd8, 0x33, 0x65, 0x0b, 0xaf, 0xa4, 0x1e, 0xfd, 0xae, 0x51,
+ 0x88, 0xba, 0x58, 0xcd, 0xc7, 0x37, 0x47, 0x6f, 0x87, 0xeb, 0x92, 0x78,
+ 0xd3, 0xc2, 0x45, 0x2b, 0x73, 0x78, 0x09, 0x3f, 0x4d, 0x42, 0x1c, 0xb3,
+ 0x45, 0x48, 0x7f, 0x1a, 0xcd, 0xd2, 0x02, 0xae, 0x71, 0xfe, 0xf6, 0xf8,
+ 0xab, 0x33, 0xfb, 0xb1, 0x76, 0xc9, 0x1f, 0x5d, 0xe1, 0x53, 0x4e, 0xd0,
+ 0x7d, 0x2c, 0xd7, 0xd9, 0x06, 0xe7, 0x6a, 0x4c, 0x79, 0x2f, 0x04, 0x11,
+ 0xe4, 0x94, 0x5f, 0x17, 0x5a, 0xec, 0x29, 0x49, 0xe2, 0xa3, 0x7c, 0x5d,
+ 0x16, 0x37, 0x1d, 0xb7, 0xbd, 0xaf, 0xbe, 0x6c, 0xde, 0x56, 0x47, 0x6f,
+ 0xd7, 0x74, 0xc7, 0xdf, 0xf4, 0x2d, 0x81, 0x49, 0xaf, 0x68, 0x2d, 0x6c,
+ 0x87, 0x6c, 0xf2, 0x96, 0x93, 0x77, 0x7e, 0x62, 0x3f, 0x2a, 0x53, 0xb7,
+ 0x2b, 0x91, 0x8f, 0xbb, 0xd0, 0xbc, 0xe0, 0x33, 0x00, 0x9a, 0x64, 0x1a,
+ 0xd3, 0x35, 0x19, 0xb5, 0x54, 0xc9, 0x0d, 0xac, 0xfe, 0x0e, 0xd9, 0x4e,
+ 0xbc, 0x21, 0x7e, 0x95, 0x15, 0x58, 0xd1, 0x0a, 0x72, 0x21, 0x97, 0x5e,
+ 0x2a, 0xbb, 0xcf, 0xd7, 0xa4, 0x5a, 0x37, 0xf5, 0xca, 0xfe, 0x3d, 0x5d,
+ 0x52, 0x70, 0x4c, 0xb3, 0x0c, 0x18, 0xbd, 0x94, 0xeb, 0xe8, 0xf3, 0xc6,
+ 0x81, 0x10, 0xc4, 0x17, 0xb3, 0x0a, 0x9b, 0x13, 0x10, 0xf7, 0x3a, 0x1b,
+ 0x78, 0x1c, 0x66, 0x10, 0x8a, 0xbd, 0x27, 0xa8, 0xa5, 0xc6, 0xd3, 0x14,
+ 0x04, 0xa1, 0x46, 0xb0, 0x28, 0xc9, 0x76, 0xde, 0x39, 0x61, 0x61, 0x06,
+ 0xd2, 0x75, 0xa4, 0x25, 0x0e, 0xcb, 0xdc, 0xd9, 0x87, 0x59, 0xfe, 0xd5,
+ 0xcc, 0x6a, 0x71, 0x76, 0x37, 0x82, 0x0b, 0x1e, 0xd8, 0x5c, 0xf3, 0x60,
+ 0x37, 0x53, 0x55, 0x44, 0x76, 0x35, 0xa7, 0x24, 0xb7, 0x5a, 0x1b, 0x0e,
+ 0x92, 0x84, 0x5b, 0x63, 0x2a, 0x11, 0x05, 0xd5, 0x91, 0x87, 0x3b, 0xb0,
+ 0x8e, 0x71, 0x8e, 0x95, 0x18, 0x80, 0x24, 0x5f, 0x19, 0x89, 0xcd, 0xe3,
+ 0x25, 0x1b, 0xae, 0xe0, 0x78, 0x40, 0x79, 0xba, 0xd6, 0xe6, 0x56, 0x7c,
+ 0x6f, 0x77, 0xbe, 0x30, 0x73, 0x59, 0xc7, 0xac, 0xe9, 0x1e, 0x80, 0x4c,
+ 0xab, 0x72, 0xc4, 0x16, 0x5c, 0x6e, 0x4b, 0xd1, 0xe2, 0x63, 0x14, 0xa7,
+ 0x01, 0xaa, 0xe9, 0xa0, 0x2c, 0x53, 0xe7, 0x8b, 0x7e, 0xa7, 0xf5, 0xf6,
+ 0x0b, 0x8a, 0x6d, 0x45, 0x0a, 0x93, 0x6d, 0xd6, 0x6e, 0x33, 0xef, 0x49,
+ 0x2f, 0xa6, 0x23, 0x31, 0x9c, 0x7e, 0x99, 0x96, 0xcb, 0xb2, 0x11, 0x96,
+ 0xa8, 0x19, 0xfa, 0xf0, 0xc8, 0x42, 0x47, 0xe0, 0x05, 0xf7, 0x5e, 0x53,
+ 0x08, 0x7b, 0x6c, 0x0e, 0x2c, 0x11, 0x59, 0xa8, 0x36, 0xc6, 0x11, 0xd0,
+ 0x10, 0x18, 0xe6, 0xa7, 0x2e, 0xae, 0x1c, 0xf0, 0x45, 0xef, 0x47, 0x87,
+ 0xdb, 0xc9, 0xa3, 0x2d, 0x16, 0xd1, 0xef, 0xff, 0x6e, 0x5f, 0x02, 0x92,
+ 0xe2, 0x1f, 0xb6, 0x5e, 0x56, 0x08, 0xab, 0x5d, 0xea, 0xfe, 0xbd, 0xb7,
+ 0xc9, 0xc8, 0xca, 0x20, 0x4b, 0x90, 0x9b, 0xfb, 0xbd, 0xab, 0x10, 0xea,
+ 0x9a, 0x88, 0xe6, 0xc9, 0xbd, 0x48, 0x4a, 0x0d, 0x9d, 0x40, 0x24, 0xcd,
+ 0xbf, 0x70, 0x45, 0x5c, 0x7a, 0x85, 0x24, 0x46, 0x76, 0xfc, 0x4b, 0x22,
+ 0x9c, 0x90, 0xd7, 0x5f, 0x72, 0x15, 0xed, 0x49, 0xf0, 0xa1, 0x81, 0xb3,
+ 0x3c, 0x2a, 0x9f, 0x37, 0xa5, 0x10, 0x76, 0x48, 0xee, 0x63, 0x37, 0x7e,
+ 0xdf, 0x17, 0xb8, 0x11, 0xa5, 0x6e, 0x9e, 0x2e, 0x8d, 0xd9, 0x3e, 0xb3,
+ 0x22, 0xac, 0xf3, 0x27, 0x7b, 0xfd, 0x40, 0x99, 0xee, 0x35, 0x6a, 0x1a,
+ 0xb2, 0xe7, 0x91, 0xe5, 0xa4, 0xa0, 0x4e, 0x1e, 0xd3, 0xf8, 0xef, 0x23,
+ 0xad, 0x7c, 0xc4, 0xce, 0x2c, 0x49, 0xea, 0x9a, 0x98, 0x56, 0x1a, 0x14,
+ 0xee, 0x6e, 0xd5, 0xe3, 0x5a, 0x89, 0x27, 0xd8, 0x1d, 0x27, 0xdf, 0x58,
+ 0x8a, 0xb4, 0x84, 0x88, 0xb4, 0xc5, 0x1b, 0x20, 0x90, 0xc2, 0x8a, 0x8b,
+ 0x4a, 0x43, 0x50, 0xa3, 0xe1, 0xad, 0x64, 0x83, 0xb1, 0xd4, 0x9b, 0x83,
+ 0x7a, 0xee, 0x9d, 0xf3, 0x70, 0x61, 0xb2, 0x3e, 0xd4, 0x7f, 0xbc, 0x48,
+ 0x81, 0xd6, 0x47, 0x91, 0x12, 0x84, 0x5d, 0x78, 0x65, 0xa7, 0x93, 0xe0,
+ 0xfc, 0x48, 0xdd, 0x99, 0xc8, 0x45, 0x26, 0xec, 0x3f, 0xde, 0x9c, 0x6a,
+ 0x45, 0x8d, 0xe9, 0xb3, 0x4f, 0xe7, 0x3d, 0xd2, 0xf9, 0xdc, 0x6a, 0x10,
+ 0x33, 0x49, 0x72, 0x86, 0xcb, 0xaa, 0xe5, 0xfb, 0xf9, 0x89, 0x31, 0x0a,
+ 0xbb, 0x6e, 0xe3, 0xe3, 0xbd, 0xc2, 0x32, 0xa1, 0xb5, 0x52, 0x68, 0x25,
+ 0xcc, 0xd7, 0x8a, 0xbc, 0x04, 0x92, 0x4b, 0xd8, 0x3a, 0xe0, 0xae, 0xba,
+ 0x36, 0xb8, 0xd3, 0xa8, 0x91, 0x2e, 0xf4, 0x19, 0x97, 0xed, 0x41, 0x32,
+ 0xc4, 0x34, 0x8d, 0x7d, 0x06, 0xb7, 0x4c, 0x81, 0x07, 0x17, 0xc3, 0xfa,
+ 0xca, 0xb2, 0x32, 0x89, 0xba, 0x8f, 0x37, 0xe7, 0xb0, 0x2c, 0x59, 0x2f,
+ 0x59, 0xb7, 0x32, 0x02, 0x4e, 0x5a, 0x5f, 0x99, 0xea, 0x82, 0xe8, 0x8a,
+ 0x78, 0x8d, 0xb3, 0xc5, 0xdf, 0x1e, 0xad, 0x49, 0xa5, 0x8c, 0xa2, 0x4d,
+ 0x43, 0x50, 0x14, 0xcb, 0xd9, 0x96, 0x02, 0x1c, 0xdb, 0x3d, 0xa8, 0xc0,
+ 0xc1, 0x1f, 0x6a, 0x0e, 0x79, 0x30, 0x8d, 0x14, 0x95, 0xa7, 0x8d, 0xe8,
+ 0x4e, 0xb6, 0xa1, 0xbc, 0x97, 0x24, 0x3f, 0xa7, 0x39, 0xb8, 0x94, 0x3f,
+ 0x14, 0x69, 0xd0, 0xec, 0xa7, 0x9e, 0x47, 0x21, 0x16, 0x27, 0x1a, 0xae,
+ 0xb0, 0x0f, 0x50, 0x2d, 0x64, 0x21, 0x9e, 0x7d, 0xa2, 0x28, 0x48, 0x30,
+ 0xae, 0xbb, 0x0c, 0x27, 0xb9, 0x48, 0xed, 0xe6, 0x9a, 0xa5, 0xd3, 0x0f,
+ 0x34, 0x37, 0x4d, 0x55, 0xa9, 0x82, 0x78, 0xb6, 0x6c, 0x3d, 0xc0, 0x98,
+ 0x10, 0x73, 0x4e, 0x56, 0xd4, 0x97, 0x1f, 0x28, 0x2b, 0x62, 0x43, 0xaa,
+ 0x4e, 0x14, 0x71, 0xea, 0x25, 0xbd, 0x6e, 0x86, 0x3e, 0x71, 0xaf, 0x96,
+ 0x71, 0xfe, 0x81, 0x5d, 0x94, 0x4c, 0x51, 0x44, 0xd5, 0x7a, 0x21, 0x12,
+ 0x96, 0x0f, 0x54, 0xae, 0x50, 0xe1, 0xa0, 0x7d, 0xc8, 0x55, 0xd2, 0xb2,
+ 0xac, 0x25, 0x0d, 0x37, 0xac, 0x8f, 0xcb, 0xd5, 0xb3, 0xf9, 0x45, 0x83,
+ 0x0a, 0x8a, 0x9e, 0x47, 0x1e, 0xb8, 0xc9, 0xc2, 0x56, 0x24, 0x64, 0x7b,
+ 0x33, 0xcb, 0x1f, 0x6f, 0x4e, 0x89, 0xf2, 0x23, 0x66, 0x14, 0x2f, 0x16,
+ 0xda, 0xdb, 0x87, 0x37, 0xe1, 0x37, 0x99, 0xaf, 0x96, 0xa7, 0xdb, 0x26,
+ 0xc6, 0x1b, 0xd9, 0xc4, 0xb7, 0xd9, 0x68, 0x59, 0xdc, 0x48, 0x56, 0x79,
+ 0x16, 0x7d, 0x98, 0x67, 0x05, 0xc0, 0xfb, 0xb5, 0x49, 0x3f, 0x52, 0x37,
+ 0x2f, 0x5c, 0x06, 0xc6, 0xd4, 0x53, 0x9e, 0xf6, 0x3f, 0xb4, 0x0e, 0x12,
+ 0xa5, 0x64, 0xf9, 0x87, 0x3c, 0x09, 0x08, 0x0a, 0x2e, 0xe9, 0x9a, 0xce,
+ 0x22, 0xa9, 0x5e, 0x83, 0x0f, 0x8d, 0x2e, 0x2d, 0xbc, 0x65, 0x25, 0x86,
+ 0xd3, 0x26, 0xe9, 0xd7, 0x41, 0x26, 0x05, 0xb0, 0x80, 0xc3, 0x47, 0x3f,
+ 0xc8, 0x19, 0xb4, 0x06, 0xbb, 0x00, 0xdb, 0x7b, 0x29, 0x68, 0x6c, 0xce,
+ 0xd8, 0x40, 0xc4, 0x6c, 0x89, 0xa9, 0xad, 0x37, 0xc7, 0x66, 0x13, 0xb1,
+ 0x2e, 0xdf, 0xb1, 0xe2, 0xb6, 0x86, 0x24, 0x2d, 0x48, 0x73, 0xdd, 0xc9,
+ 0x07, 0x04, 0x35, 0xaf, 0xb3, 0xe6, 0x8f, 0x07, 0xd5, 0xdb, 0x1e, 0xef,
+ 0x9f, 0x38, 0xdc, 0xc2, 0x2d, 0x8f, 0x9c, 0x7e, 0xe1, 0x3f, 0x3d, 0x47,
+ 0x79, 0x3d, 0x48, 0xa2, 0x1f, 0x47, 0x0a, 0x52, 0x2b, 0xc0, 0x65, 0x8c,
+ 0xd6, 0xf2, 0x49, 0x11, 0xbe, 0xc8, 0x5f, 0x6a, 0x4d, 0xcb, 0xfb, 0xb8,
+ 0xf8, 0xd0, 0xe8, 0x62, 0xd1, 0xc6, 0xaa, 0x8b, 0x20, 0xd6, 0x1f, 0x8d,
+ 0x94, 0x01, 0x51, 0x47, 0x62, 0xd4, 0xfa, 0x18, 0xae, 0xae, 0x39, 0xe1,
+ 0x48, 0x05, 0x77, 0x61, 0x2a, 0xc1, 0x7a, 0x85, 0xf9, 0x91, 0x1f, 0xbc,
+ 0xc6, 0xdb, 0x92, 0x27, 0x31, 0x56, 0x8c, 0xfc, 0xe3, 0x8f, 0xcf, 0xaf,
+ 0xce, 0xcb, 0x03, 0x5c, 0x20, 0xc0, 0xe9, 0x34, 0x0f, 0xcf, 0x48, 0x8f,
+ 0xd6, 0x07, 0xd6, 0x8c, 0x63, 0x28, 0xe5, 0x12, 0x0c, 0x8f, 0x51, 0x9d,
+ 0x41, 0x58, 0xc5, 0xb7, 0x66, 0x96, 0x7e, 0x8b, 0xac, 0xa2, 0x3b, 0x50,
+ 0x41, 0x52, 0x9d, 0x27, 0xc9, 0xc4, 0x50, 0xb3, 0x48, 0x30, 0xe1, 0xe3,
+ 0x53, 0x26, 0x1f, 0xc3, 0xe4, 0x0a, 0xda, 0xc2, 0x26, 0xba, 0x58, 0xfa,
+ 0x73, 0xf2, 0xde, 0x40, 0x5e, 0x42, 0xe1, 0xc0, 0xa7, 0xc7, 0x4b, 0x5c,
+ 0xa7, 0x88, 0x3e, 0x2c, 0x9f, 0xdb, 0xd3, 0x2d, 0x27, 0x10, 0xad, 0x69,
+ 0x48, 0x55, 0xf4, 0x71, 0xad, 0xad, 0x8d, 0x02, 0x43, 0x5b, 0xea, 0xaf,
+ 0x78, 0xb4, 0x2d, 0x0b, 0x80, 0x70, 0xc3, 0x82, 0xe8, 0xfb, 0x81, 0xcd,
+ 0x6a, 0x93, 0x8c, 0xd1, 0xa3, 0x2b, 0xd6, 0xa0, 0xcc, 0x5a, 0xe4, 0xa6,
+ 0xf5, 0xe3, 0x0f, 0xf4, 0xce, 0xc7, 0x7b, 0x84, 0x39, 0xd1, 0xa4, 0xb6,
+ 0x8d, 0x66, 0x49, 0x92, 0x64, 0xe2, 0xf7, 0x81, 0xbb, 0x8e, 0xd9, 0xeb,
+ 0x17, 0x20, 0xf0, 0xc8, 0x33, 0x81, 0x5a, 0x4a, 0x2a, 0x45, 0xb1, 0xcc,
+ 0x05, 0xad, 0xf7, 0xc3, 0xa4, 0xe4, 0xce, 0xbf, 0xb5, 0xc7, 0xf1, 0xbb,
+ 0x3c, 0x95, 0x05, 0x57, 0x74, 0xc4, 0x59, 0x5a, 0x33, 0x2a, 0xb7, 0x9f,
+ 0x58, 0x10, 0x1b, 0x96, 0x45, 0xce, 0xfd, 0x4a, 0xa3, 0x92, 0xd6, 0x3e,
+ 0x62, 0x4c, 0x8a, 0xac, 0xf3, 0x9e, 0x83, 0xbb, 0x75, 0x4c, 0x87, 0xf2,
+ 0x51, 0xff, 0x92, 0x3f, 0x52, 0x6a, 0xb0, 0x95, 0xe6, 0x93, 0x62, 0xb9,
+ 0x53, 0xbd, 0x96, 0xb2, 0xbd, 0x51, 0x5b, 0x04, 0x2f, 0xb4, 0x8a, 0x79,
+ 0x13, 0x8a, 0x8f, 0xb4, 0x01, 0x13, 0xe2, 0xb8, 0xb2, 0xe4, 0x5b, 0xad,
+ 0x6b, 0x4e, 0x5d, 0x92, 0xba, 0x1d, 0xb9, 0x6f, 0x90, 0x1f, 0x9f, 0x1a,
+ 0x0c, 0xc8, 0x18, 0x7e, 0x94, 0x8f, 0xe3, 0x1f, 0x1f, 0x91, 0x70, 0xce,
+ 0x63, 0x30, 0x1e, 0x5c, 0xb8, 0x31, 0xd0, 0x10, 0xfc, 0x87, 0xe2, 0x30,
+ 0x03, 0x75, 0x06, 0x95, 0xd9, 0xd3, 0xf9, 0x47, 0x89, 0x42, 0xed, 0x5a,
+ 0x45, 0x73, 0x1c, 0xd6, 0xdd, 0x7b, 0xa8, 0x2c, 0x92, 0xf1, 0x1d, 0x57,
+ 0x88, 0x1c, 0xcb, 0xe8, 0xea, 0xa3, 0x30, 0x2f, 0xed, 0x8b, 0xcb, 0x19,
+ 0x43, 0xfa, 0xd0, 0x38, 0x74, 0x32, 0x5a, 0x34, 0xa6, 0x5a, 0x1b, 0x1e,
+ 0xe9, 0xe3, 0x50, 0x09, 0xc7, 0x9c, 0xae, 0xc7, 0x4a, 0xf8, 0x07, 0x2e,
+ 0x5b, 0xd7, 0xa0, 0xe6, 0x3f, 0x01, 0x90, 0x40, 0x12, 0xc0, 0x1a, 0x79,
+ 0xa8, 0xcd, 0xcc, 0xed, 0x2b, 0xd2, 0x0b, 0x81, 0xf5, 0xf8, 0x1e, 0x90,
+ 0x88, 0x4c, 0x73, 0x86, 0x51, 0x8e, 0x0f, 0xcc, 0x6a, 0x2e, 0xd8, 0x54,
+ 0xcb, 0x85, 0x14, 0xbe, 0x63, 0x1c, 0x86, 0x0c, 0x16, 0xef, 0x0f, 0x15,
+ 0x3e, 0x6c, 0xc1, 0x5e, 0xb7, 0x18, 0xfb, 0x5a, 0x56, 0x79, 0x53, 0xbb,
0x2b, 0x8a, 0xe9, 0x7b, 0x7a, 0x32, 0xbd, 0x5a, 0xbd, 0x17, 0x16, 0xff,
0xe1, 0x2b, 0x54, 0x9e, 0xb3, 0x93, 0xc2, 0x2e, 0x15, 0x3a, 0xc3, 0x24,
0xdf, 0x25, 0x24, 0x8d, 0x5d, 0x89, 0xe1, 0x35, 0x42, 0x93, 0xe9, 0xf8,
0xa3, 0xb4, 0x3f, 0xa7, 0x15, 0xbb, 0x33, 0x37, 0x60, 0xf8, 0x22, 0x78,
0x80, 0x61, 0x57, 0xd3, 0xb6, 0x3e, 0x2c, 0x63, 0x71, 0x23, 0x1e, 0x95,
0xfd, 0x31, 0xf1, 0xfb, 0xd7, 0x8b, 0x95, 0x70, 0x99, 0xa1, 0x1f, 0x57,
- 0x87, 0xaa, 0x1a, 0xca, 0xef, 0x4b, 0x1e, 0xad, 0xcb, 0x8f, 0x96, 0xa2,
- 0x8a, 0xff, 0x1c, 0xa6, 0xc0, 0x47, 0xe7, 0x43, 0x27, 0x0f, 0xa9, 0x40,
- 0xbd, 0xb4, 0xa5, 0xa0, 0x28, 0x43, 0x28, 0x92, 0xb2, 0x3d, 0x2d, 0xec,
- 0x61, 0xe5, 0xe2, 0xee, 0x65, 0x0a, 0x39, 0x17, 0x46, 0x59, 0x93, 0xcf,
- 0x82, 0x32, 0x2f, 0x82, 0x9c, 0x14, 0x6f, 0xb4, 0xa8, 0x8d, 0x3e, 0x02,
- 0xa7, 0x90, 0x84, 0x1e, 0x69, 0xbd, 0x83, 0x40, 0x73, 0x1b, 0x71, 0x5b,
- 0xb2, 0x65, 0xe8, 0xeb, 0x8f, 0xa7, 0xa1, 0xfd, 0x3c, 0x50, 0x20, 0x14,
- 0x6a, 0x84, 0x23, 0xf9, 0x11, 0x01, 0x17, 0xac, 0x7f, 0x5b, 0xcc, 0x19,
- 0xb8, 0x2e, 0x29, 0x19, 0x34, 0x81, 0xe9, 0x4a, 0x71, 0x4a, 0xb9, 0xb6,
- 0xa5, 0x98, 0x8b, 0xf8, 0x5d, 0x89, 0x98, 0x04, 0xa5, 0x5a, 0xa8, 0x1f,
- 0x7d, 0xdf, 0x34, 0xc1, 0xbb, 0x2a, 0x5a, 0x4e, 0x85, 0x09, 0x86, 0x27,
- 0xa1, 0x04, 0x8d, 0x02, 0x14, 0xce, 0x00, 0xd8, 0xac, 0x40, 0x86, 0xab,
- 0x8f, 0xeb, 0xc5, 0x8a, 0xb1, 0x0f, 0xeb, 0x55, 0x2f, 0xd3, 0x64, 0x9b,
- 0x03, 0x9b, 0x33, 0x90, 0x62, 0x7c, 0x89, 0xc5, 0x7a, 0x60, 0x43, 0xad,
- 0x40, 0xd7, 0x3a, 0xcb, 0xa7, 0x2b, 0x36, 0x22, 0x2d, 0x21, 0x5a, 0x71,
- 0xb7, 0x17, 0xd0, 0x01, 0x54, 0xe0, 0x06, 0xbe, 0xa8, 0xab, 0x4b, 0xd3,
- 0x00, 0x09, 0x61, 0x4b, 0x4f, 0xbc, 0x32, 0x8c, 0x1a, 0x69, 0xa3, 0x95,
- 0x04, 0x7b, 0x41, 0x88, 0xae, 0x95, 0xea, 0x6a, 0x04, 0x70, 0x61, 0x81,
- 0xb5, 0x7c, 0xc1, 0xa6, 0x86, 0x9e, 0x6f, 0xb9, 0x58, 0x81, 0x84, 0x4e,
- 0x14, 0xb8, 0x01, 0x5c, 0x40, 0x7f, 0x7a, 0x34, 0x86, 0xf0, 0x57, 0x62,
- 0x0d, 0xdf, 0x23, 0x4c, 0x48, 0x2e, 0xb3, 0xb5, 0xd5, 0x35, 0x98, 0x8c,
- 0x0c, 0x37, 0x37, 0x85, 0x13, 0x75, 0x4c, 0xda, 0x03, 0xe9, 0x21, 0xf6,
- 0xa6, 0x96, 0x6b, 0x0c, 0x53, 0xae, 0x3e, 0xb2, 0xc8, 0x20, 0xa8, 0xdb,
- 0xa1, 0xed, 0x5f, 0x56, 0x38, 0x8f, 0x93, 0x53, 0x7d, 0x51, 0xf8, 0x96,
- 0x3a, 0x02, 0x61, 0xb6, 0x87, 0x2c, 0xbc, 0x8e, 0x06, 0x31, 0x10, 0xf7,
- 0x69, 0xa1, 0x51, 0x57, 0x0a, 0x29, 0xa7, 0xe9, 0x5c, 0xf0, 0xff, 0x7f,
- 0x75, 0x7c, 0xb9, 0xd5, 0x04, 0x30, 0x8a, 0x27, 0x7e, 0x64, 0x80, 0xb2,
- 0xd4, 0xf3, 0x10, 0xbb, 0x02, 0xd3, 0x2e, 0x81, 0x50, 0x14, 0x9d, 0xe4,
- 0x61, 0x31, 0x8d, 0xe7, 0x5a, 0x55, 0xad, 0xd6, 0xdc, 0x21, 0x2d, 0x03,
- 0x73, 0xb2, 0x20, 0x4c, 0x48, 0xbd, 0xee, 0xae, 0xac, 0xac, 0x53, 0xb8,
- 0x91, 0xa2, 0xc3, 0x2d, 0x1e, 0x1d, 0x9f, 0x1e, 0x5f, 0x1e, 0x23, 0x82,
- 0xba, 0x21, 0x92, 0xb0, 0x2a, 0x34, 0xe1, 0x64, 0xdc, 0x9b, 0x79, 0x46,
- 0x77, 0x6f, 0xaa, 0xd5, 0xe6, 0xa3, 0xef, 0x92, 0xd1, 0xd1, 0xc1, 0xb7,
- 0x12, 0xd2, 0x50, 0x44, 0xe7, 0x17, 0x67, 0xe7, 0xaf, 0x4f, 0xde, 0x1e,
- 0xf5, 0xa2, 0xc3, 0xb3, 0xf3, 0x1f, 0x7a, 0xd1, 0x9b, 0xb3, 0x6f, 0x8f,
- 0x5b, 0x7c, 0x8a, 0xec, 0xcf, 0x6e, 0x66, 0x9c, 0xbd, 0x5e, 0xb3, 0xdb,
- 0x21, 0x22, 0xa5, 0x6e, 0x75, 0x90, 0xe8, 0x73, 0x7a, 0x32, 0xbc, 0xc4,
- 0xd6, 0xd7, 0xe3, 0xbd, 0x10, 0xd3, 0x2e, 0xc0, 0xeb, 0x69, 0x61, 0x01,
- 0x1c, 0x5c, 0x35, 0xec, 0xb7, 0xa3, 0xea, 0x15, 0x87, 0xf7, 0xb0, 0xd4,
- 0xae, 0xd8, 0x57, 0xfc, 0x6f, 0x0b, 0x66, 0x62, 0xec, 0x35, 0x0f, 0xf6,
- 0xf7, 0x6a, 0xb1, 0x9f, 0x1b, 0xc9, 0xcb, 0xa1, 0x97, 0x05, 0xa7, 0x69,
- 0x54, 0x93, 0xd7, 0xa3, 0xc9, 0x32, 0x6f, 0x4a, 0x3c, 0x71, 0x14, 0x74,
- 0x28, 0xb9, 0x4a, 0xbd, 0x8a, 0xd2, 0xc6, 0xde, 0xc7, 0xc2, 0x17, 0xf4,
- 0xa0, 0xee, 0x83, 0x17, 0x1a, 0x8e, 0x1d, 0x5f, 0x1b, 0xde, 0x21, 0x04,
- 0x04, 0x43, 0xb2, 0x69, 0xef, 0x92, 0x82, 0x3f, 0x65, 0xb8, 0x23, 0xbe,
- 0x89, 0x04, 0x87, 0xe8, 0x87, 0x47, 0x03, 0xa8, 0x34, 0xc4, 0x30, 0xf4,
- 0xc5, 0x0b, 0xf3, 0x59, 0x3a, 0x60, 0x4c, 0x5c, 0xe6, 0x31, 0x5c, 0x40,
- 0x11, 0xd6, 0xa4, 0xa9, 0x9d, 0xa8, 0x76, 0x20, 0x41, 0x0e, 0x41, 0x02,
- 0x1a, 0x22, 0x22, 0xe9, 0x76, 0x91, 0x53, 0x42, 0x5c, 0xbf, 0x27, 0x99,
- 0x98, 0x80, 0xac, 0xd6, 0xf7, 0xfa, 0x2d, 0x06, 0x12, 0x16, 0x9c, 0xd7,
- 0xf0, 0xf3, 0x5f, 0x8f, 0x26, 0x7e, 0x70, 0x34, 0x21, 0x6b, 0xf8, 0x12,
- 0x7f, 0xfc, 0x22, 0xaa, 0x08, 0x20, 0xbd, 0x44, 0x27, 0xdc, 0x24, 0xb1,
- 0xad, 0x42, 0x1e, 0xfd, 0x46, 0x56, 0xc3, 0x64, 0x4b, 0xcd, 0x4b, 0xc1,
- 0x6e, 0xab, 0x5d, 0x87, 0xe5, 0xa2, 0x2a, 0x51, 0x54, 0x28, 0xa2, 0x45,
- 0x9c, 0x91, 0x2d, 0x96, 0x70, 0xe1, 0x94, 0xa1, 0x98, 0xf9, 0x76, 0x05,
- 0xd6, 0x48, 0x52, 0xfe, 0x86, 0x4b, 0xf7, 0x33, 0x67, 0x3e, 0xd3, 0xe3,
- 0x7d, 0x90, 0xff, 0xcb, 0x09, 0x8b, 0xcf, 0xc4, 0xf4, 0x34, 0xbc, 0x68,
- 0x2d, 0xc2, 0xf8, 0x16, 0x31, 0x53, 0xe1, 0xe0, 0xb1, 0x5a, 0x6f, 0x59,
- 0xfc, 0xe0, 0x2c, 0x75, 0x54, 0xb5, 0xd7, 0xba, 0x1d, 0xec, 0x4b, 0x2c,
- 0x6d, 0x85, 0x5b, 0x6e, 0x7e, 0xad, 0xb4, 0xac, 0xe0, 0x8d, 0x7c, 0xfc,
- 0xe8, 0x71, 0x57, 0xa9, 0x66, 0x4d, 0x93, 0x6a, 0x6b, 0xe4, 0x6f, 0x5b,
- 0xe8, 0xcd, 0x41, 0xb4, 0x87, 0xd3, 0x30, 0xa1, 0x00, 0x75, 0x5c, 0x10,
- 0x40, 0x42, 0x4c, 0x0d, 0xcf, 0x48, 0x08, 0x41, 0xc1, 0x5d, 0x36, 0x94,
- 0x6b, 0x36, 0xcc, 0x59, 0x44, 0xa4, 0xa2, 0x44, 0x20, 0x78, 0xc1, 0x03,
- 0xe7, 0xd2, 0x28, 0xd5, 0x26, 0x6b, 0xb0, 0xab, 0x06, 0x52, 0xdc, 0x92,
- 0xc1, 0xa1, 0x81, 0x09, 0x3e, 0x49, 0x52, 0xc3, 0xb8, 0x95, 0xcf, 0xfe,
- 0x4e, 0x01, 0x30, 0xa5, 0x0c, 0x38, 0xfb, 0x6a, 0xa9, 0x2d, 0x1e, 0x23,
- 0x27, 0xbc, 0xaf, 0xc9, 0x78, 0x2f, 0x24, 0xe5, 0xbd, 0x36, 0x59, 0xbd,
- 0xc1, 0xda, 0xe5, 0x27, 0xe1, 0x3b, 0xb5, 0x37, 0x14, 0x37, 0x1b, 0x75,
- 0xa1, 0x36, 0xfb, 0x5b, 0x2e, 0x6e, 0x12, 0x90, 0xa2, 0xb2, 0xcd, 0x4d,
- 0x7b, 0x48, 0xec, 0x2c, 0x13, 0x2e, 0xf2, 0x36, 0x9b, 0x4e, 0xfc, 0x79,
- 0xb2, 0x6c, 0x25, 0xee, 0x6c, 0x5b, 0xec, 0x9e, 0xae, 0x2a, 0x65, 0xd1,
- 0x94, 0xbf, 0x1b, 0x8d, 0xcd, 0x93, 0xfb, 0xb0, 0x31, 0x2f, 0x3b, 0xb8,
- 0x06, 0x7f, 0xcb, 0x10, 0x74, 0xc6, 0xe0, 0x83, 0xd6, 0x5d, 0xb4, 0xa2,
- 0xf2, 0x72, 0x8a, 0x7b, 0x00, 0xe1, 0x67, 0x1a, 0x13, 0x04, 0x95, 0xc0,
- 0xc6, 0xdc, 0x77, 0x25, 0xe5, 0x0b, 0x87, 0x4e, 0xda, 0x96, 0x7a, 0x5d,
- 0x29, 0x95, 0x6e, 0xe3, 0xae, 0x56, 0x9c, 0x55, 0x12, 0xc6, 0x84, 0xa4,
- 0x68, 0x29, 0x27, 0x2b, 0xb6, 0x67, 0xf7, 0x80, 0xd4, 0x7c, 0x35, 0xfb,
- 0xd0, 0xe8, 0x1d, 0x75, 0x38, 0xbc, 0x7d, 0x54, 0x2c, 0xf3, 0xc9, 0x72,
- 0xd6, 0x09, 0xb3, 0xe0, 0x75, 0x61, 0x98, 0x81, 0xd6, 0x0f, 0x82, 0x5c,
- 0x42, 0xd4, 0xeb, 0xb3, 0x9d, 0x9a, 0x05, 0xdd, 0xf0, 0x09, 0x03, 0x44,
- 0xc2, 0xfe, 0x6e, 0x48, 0x3f, 0xd4, 0x5e, 0x43, 0x48, 0x2c, 0xf9, 0x5e,
- 0xfb, 0x0d, 0x37, 0x6f, 0x87, 0x16, 0x93, 0x05, 0xf0, 0xdd, 0xc1, 0x4e,
- 0xbb, 0xb8, 0xcb, 0xd1, 0x7b, 0xe3, 0xc4, 0x17, 0xd7, 0x4e, 0x49, 0x7d,
- 0xe5, 0xd1, 0x16, 0x5e, 0x72, 0x93, 0xb8, 0x0c, 0x57, 0x87, 0x58, 0x0f,
- 0x69, 0xfd, 0x0a, 0xb8, 0x72, 0xd5, 0x78, 0x0b, 0xc7, 0x15, 0x90, 0x96,
- 0x9e, 0x88, 0x39, 0x7d, 0xdf, 0x89, 0x9a, 0xc1, 0xf0, 0x76, 0x99, 0xe5,
- 0x4e, 0x8b, 0xbb, 0xdd, 0xd6, 0x12, 0x16, 0xb5, 0xa1, 0xb1, 0x24, 0x76,
- 0x79, 0x3a, 0x74, 0x01, 0xc2, 0xbb, 0x22, 0x82, 0x3b, 0xfc, 0x13, 0x5f,
- 0xbb, 0x7e, 0x4d, 0x6d, 0x76, 0x7e, 0x59, 0x85, 0x70, 0x3f, 0x84, 0x3d,
- 0xbe, 0x30, 0x8b, 0xe9, 0xdd, 0x5e, 0xeb, 0x10, 0x6c, 0x0c, 0x95, 0x41,
- 0xb0, 0xa1, 0xc5, 0x06, 0xb1, 0xd7, 0x1c, 0xc4, 0x63, 0xe5, 0xe1, 0xf9,
- 0xd5, 0xc6, 0x10, 0x9e, 0xe8, 0x10, 0x9e, 0x7c, 0xec, 0x2a, 0x84, 0x03,
- 0x78, 0xf2, 0x4b, 0x57, 0xa1, 0x75, 0x08, 0x4f, 0x39, 0xa0, 0x7e, 0x71,
- 0xf7, 0xb4, 0x25, 0xb3, 0xc7, 0x6c, 0x62, 0x60, 0x55, 0x40, 0x4b, 0x99,
- 0x4a, 0x31, 0x4e, 0xef, 0x32, 0xe7, 0x32, 0x84, 0x56, 0x50, 0x34, 0xf3,
- 0x1e, 0xa6, 0x93, 0x7a, 0xc5, 0x41, 0x1d, 0xb3, 0x07, 0xbe, 0x16, 0x14,
- 0x98, 0x2b, 0xfd, 0x85, 0x63, 0x8c, 0xfb, 0xda, 0x43, 0xad, 0xc8, 0xb4,
- 0x94, 0xc9, 0x5d, 0x13, 0xeb, 0x8c, 0x84, 0x47, 0x41, 0x34, 0xd3, 0x02,
- 0x3a, 0x19, 0xb7, 0xf5, 0xd4, 0x06, 0x95, 0x48, 0xe0, 0x69, 0x30, 0xdd,
- 0xe7, 0x32, 0xdd, 0xe7, 0xff, 0x37, 0x4d, 0xf7, 0xf9, 0xfa, 0xe9, 0x7e,
- 0x22, 0x56, 0x05, 0x60, 0x86, 0xf6, 0x47, 0x71, 0xbe, 0x16, 0x55, 0xd9,
- 0xc2, 0x25, 0x1d, 0xc0, 0x68, 0x25, 0xec, 0xbf, 0x10, 0x64, 0x26, 0xf9,
- 0x86, 0x9a, 0x59, 0xcf, 0x0a, 0x2a, 0x12, 0x3d, 0x43, 0x25, 0x15, 0x65,
- 0x3a, 0x66, 0x3e, 0xc7, 0xd5, 0x50, 0x5c, 0x9c, 0xef, 0x7f, 0x6f, 0x0f,
- 0x5a, 0x2b, 0x72, 0x1e, 0x35, 0x6b, 0x66, 0xf6, 0x22, 0x60, 0xea, 0x06,
- 0xa5, 0x37, 0x03, 0x84, 0x1b, 0x6a, 0xf7, 0xf8, 0xed, 0xb7, 0x27, 0x17,
- 0x67, 0x6f, 0xdf, 0x1c, 0xbf, 0x75, 0xd1, 0x36, 0x97, 0xa8, 0x3f, 0xd8,
- 0x66, 0x45, 0x6b, 0xab, 0xbb, 0x22, 0xf2, 0x2f, 0x4c, 0x39, 0x9c, 0x36,
- 0xbb, 0x58, 0xe8, 0x5f, 0x83, 0xb0, 0xb9, 0xe0, 0x21, 0x3b, 0x7e, 0x2c,
- 0x94, 0x2d, 0xd8, 0x37, 0x30, 0xe1, 0x18, 0xb7, 0x81, 0x84, 0x1e, 0xb9,
- 0xd2, 0xe9, 0x6c, 0x7b, 0x7b, 0x18, 0x27, 0x0b, 0x5b, 0x3f, 0x7f, 0x9f,
- 0x68, 0xe1, 0xc6, 0x20, 0x6a, 0xad, 0x32, 0x08, 0xbf, 0x79, 0x41, 0x83,
- 0x3f, 0x9a, 0xf1, 0x6a, 0x7f, 0x7b, 0xfb, 0x27, 0xe0, 0x00, 0x7e, 0xae,
- 0xf6, 0xcd, 0xe6, 0x95, 0x1c, 0x1a, 0x72, 0x7c, 0x6d, 0x10, 0xcb, 0xf3,
- 0x83, 0xc5, 0x6c, 0x23, 0xf0, 0x67, 0x0d, 0xdf, 0x93, 0x2e, 0xfd, 0xfd,
- 0x0f, 0xbf, 0x72, 0x17, 0xc3, 0x4a, 0x49, 0x8a, 0x5f, 0xbd, 0x8b, 0x8a,
- 0x76, 0x7d, 0x70, 0x7a, 0xfa, 0xab, 0x76, 0x00, 0x95, 0xc3, 0xdb, 0x0b,
- 0xfb, 0xce, 0x5e, 0x68, 0x49, 0x92, 0x0d, 0x65, 0xb6, 0xa2, 0x9d, 0xbc,
- 0x3d, 0xd3, 0xd1, 0x88, 0xb9, 0xa9, 0x6f, 0xd5, 0x5e, 0x26, 0xae, 0x92,
- 0x22, 0x0f, 0xac, 0x81, 0x53, 0x8d, 0x2f, 0x21, 0x3a, 0x39, 0xc0, 0x4e,
- 0xb3, 0xfa, 0x02, 0xb5, 0x0c, 0x29, 0x49, 0x99, 0xb3, 0x2d, 0x0a, 0x44,
- 0xa2, 0x19, 0xad, 0x5b, 0x0c, 0xc3, 0x0c, 0x42, 0xc1, 0x21, 0x5d, 0xa8,
- 0xbf, 0xcb, 0xe9, 0x5c, 0x4c, 0x74, 0x8a, 0xe6, 0x5c, 0x02, 0x20, 0x9f,
- 0x15, 0x01, 0x0c, 0x85, 0x4f, 0xd1, 0xf7, 0x27, 0x97, 0xd1, 0xe1, 0xd9,
- 0x91, 0x3f, 0xa2, 0x97, 0x12, 0xc8, 0x99, 0xa3, 0x64, 0xd2, 0x72, 0x4e,
- 0x4c, 0x8c, 0xd5, 0x85, 0xf4, 0x0a, 0x78, 0x68, 0x0e, 0x16, 0x1d, 0x31,
- 0x75, 0x66, 0x27, 0xa2, 0x05, 0x95, 0x82, 0x6f, 0xb9, 0x04, 0xca, 0x4d,
- 0x02, 0x2b, 0x42, 0x15, 0x24, 0xd8, 0x99, 0x6a, 0x39, 0x6e, 0x9a, 0xc1,
- 0x73, 0x88, 0xa5, 0x88, 0xd5, 0x81, 0xb8, 0x0b, 0x57, 0x6e, 0x9b, 0x8b,
- 0x35, 0x89, 0x84, 0xab, 0x03, 0xaf, 0x4b, 0x04, 0xa8, 0x68, 0x52, 0x08,
- 0x27, 0x47, 0x01, 0x00, 0x2d, 0x38, 0xfa, 0xc0, 0x08, 0xed, 0x18, 0x4d,
- 0x25, 0xee, 0x73, 0x57, 0xed, 0xfe, 0x73, 0x0f, 0xa8, 0xe1, 0x31, 0xaa,
- 0x60, 0x3a, 0xe0, 0x44, 0x89, 0x89, 0x25, 0x1d, 0x19, 0xc8, 0x98, 0x55,
- 0x49, 0x91, 0xe2, 0xd7, 0x8d, 0x1d, 0x77, 0x4d, 0xb8, 0x7e, 0xf6, 0x94,
- 0xda, 0x05, 0x49, 0x9e, 0xe5, 0x29, 0x71, 0x2f, 0xa5, 0x3f, 0x07, 0x47,
- 0xfa, 0x89, 0x0e, 0xe6, 0xe2, 0x94, 0x66, 0x3e, 0x15, 0x3b, 0xb8, 0xc6,
- 0x7c, 0xa3, 0x42, 0x0e, 0xbc, 0x27, 0xac, 0xef, 0x6a, 0xc1, 0x53, 0xff,
- 0xe6, 0x33, 0x33, 0xb7, 0x29, 0x29, 0x78, 0x24, 0x4f, 0xa5, 0x02, 0x71,
- 0xed, 0xaa, 0x32, 0xa9, 0x84, 0x2a, 0xc1, 0x62, 0x63, 0xb8, 0xcb, 0xc4,
- 0xb6, 0xdd, 0xac, 0x0d, 0x51, 0x8b, 0xc3, 0x79, 0x5e, 0xeb, 0xc7, 0xba,
- 0x41, 0x35, 0x72, 0x29, 0x82, 0x89, 0x2e, 0xea, 0x01, 0x57, 0xdc, 0x7c,
- 0xb3, 0xb5, 0x4f, 0xeb, 0x8b, 0xe2, 0xeb, 0xc6, 0x4b, 0x8b, 0xee, 0xc9,
- 0xcf, 0x1c, 0xb3, 0x88, 0xee, 0x13, 0xce, 0x89, 0xd2, 0x33, 0x89, 0x9a,
- 0x46, 0x36, 0x3b, 0x8b, 0x9f, 0x90, 0x54, 0x49, 0x00, 0x5d, 0x69, 0xbc,
- 0xe5, 0x58, 0xc7, 0xdb, 0xd0, 0x0f, 0xf3, 0x90, 0xa3, 0xbe, 0xf0, 0x9d,
- 0x44, 0x31, 0x5c, 0x54, 0x6c, 0xea, 0x9c, 0xa7, 0x6e, 0x13, 0xa4, 0x7d,
- 0xf9, 0x88, 0x3d, 0x7f, 0xc4, 0x99, 0x33, 0xf7, 0xb7, 0xbe, 0xd1, 0xc0,
- 0x29, 0xaa, 0x85, 0x41, 0xf1, 0x2a, 0x48, 0x35, 0xbe, 0xb0, 0x86, 0x1f,
- 0xa2, 0xe1, 0xe3, 0xb9, 0xfa, 0x2d, 0x04, 0xa8, 0x9d, 0xc1, 0xb9, 0xb3,
- 0x46, 0xcc, 0x69, 0x76, 0x55, 0xba, 0x0a, 0x41, 0xac, 0x52, 0x4f, 0x02,
- 0x84, 0x4b, 0x9c, 0x6a, 0xdf, 0x28, 0xce, 0x90, 0x69, 0xe7, 0x70, 0x20,
- 0x45, 0x0d, 0xf7, 0x5c, 0x50, 0xed, 0xd5, 0x9f, 0x89, 0xdd, 0xda, 0x62,
- 0x9f, 0x1f, 0x0c, 0x87, 0xb6, 0xd4, 0x40, 0x91, 0xb2, 0xf5, 0x94, 0x15,
- 0x54, 0xcf, 0x26, 0x32, 0xa6, 0x35, 0xa5, 0xb0, 0xc5, 0x90, 0xa1, 0x8d,
- 0xd4, 0xa2, 0x23, 0x76, 0x9f, 0xf8, 0x35, 0x77, 0x9d, 0x7d, 0x2b, 0xad,
- 0xf5, 0x3e, 0xb2, 0xb3, 0xd6, 0xbe, 0xbe, 0x6d, 0xe9, 0xeb, 0x69, 0x6d,
- 0x5e, 0x7b, 0x7b, 0x9f, 0x6a, 0x0a, 0x01, 0xad, 0xf5, 0x61, 0x85, 0x52,
- 0x94, 0x38, 0xd4, 0xd6, 0x40, 0x0f, 0xf6, 0x0d, 0x2d, 0x22, 0x69, 0xad,
- 0x96, 0x8d, 0xc1, 0x04, 0x5d, 0x3d, 0xf3, 0xd3, 0x22, 0xa9, 0x82, 0xdb,
- 0x63, 0xb3, 0x87, 0x1c, 0x93, 0xc6, 0xe9, 0x01, 0x36, 0x08, 0x1f, 0x95,
- 0x13, 0x1e, 0x19, 0xf1, 0xf1, 0x35, 0xf1, 0x26, 0x36, 0x8c, 0xa0, 0x9f,
- 0x4f, 0x5d, 0x3f, 0x6e, 0xe4, 0xac, 0x87, 0x4a, 0x5e, 0xfd, 0x20, 0xe4,
- 0x08, 0x4a, 0x23, 0x41, 0x44, 0x9a, 0x3a, 0x0a, 0x9a, 0x24, 0xab, 0x6f,
- 0xfb, 0x5e, 0xe4, 0xf8, 0x9d, 0x6b, 0x21, 0x3c, 0x01, 0x55, 0x41, 0x79,
- 0xb0, 0xb8, 0x82, 0x50, 0x22, 0xa5, 0xd2, 0x63, 0x6f, 0x5e, 0xcd, 0xc3,
- 0xd3, 0xbe, 0xfb, 0x22, 0x58, 0x13, 0x1b, 0x96, 0xd9, 0x1a, 0xb7, 0xed,
- 0xf8, 0x38, 0x16, 0x22, 0xd2, 0x1d, 0xff, 0x7d, 0x71, 0x7c, 0x79, 0xc1,
- 0x31, 0xad, 0x80, 0x59, 0xa9, 0x6b, 0xca, 0x74, 0xa6, 0xb6, 0x9c, 0x59,
- 0x5e, 0x0a, 0x75, 0x04, 0x5c, 0xd7, 0x53, 0xb2, 0x14, 0x23, 0xc6, 0x3d,
- 0xc3, 0x99, 0xd7, 0x95, 0xda, 0xc4, 0xbe, 0x4a, 0x90, 0xdc, 0x43, 0x3e,
- 0x42, 0x53, 0x4f, 0x86, 0x5b, 0x7f, 0x1f, 0xe7, 0x03, 0x34, 0x45, 0x61,
- 0x6b, 0x1a, 0x0a, 0x3f, 0x50, 0xd7, 0xbb, 0x8b, 0x4a, 0x91, 0x94, 0xa7,
- 0xd8, 0x3c, 0xc4, 0x1a, 0x50, 0xde, 0x30, 0x12, 0xb9, 0xce, 0xe9, 0x9a,
- 0x94, 0xc4, 0x55, 0xbb, 0x0e, 0x9d, 0x37, 0x50, 0xba, 0x94, 0x4f, 0x11,
- 0xa6, 0x0e, 0xb4, 0xad, 0xe8, 0xe9, 0xce, 0x4e, 0xb3, 0xb9, 0x78, 0x94,
- 0xdd, 0x99, 0x6b, 0x52, 0x93, 0x3e, 0xa4, 0xb4, 0x0f, 0xf6, 0x0b, 0x97,
- 0x29, 0x74, 0x8d, 0xfe, 0x15, 0xc9, 0xcc, 0xbc, 0x60, 0x66, 0x46, 0x08,
- 0x96, 0x4d, 0x0e, 0xe5, 0x77, 0x48, 0x42, 0xd1, 0x25, 0xab, 0x1e, 0x45,
- 0xc9, 0x4f, 0x31, 0x2c, 0xc1, 0xd8, 0x6a, 0x1a, 0x22, 0x91, 0x6d, 0x45,
- 0xb3, 0x9f, 0xb5, 0xcc, 0x53, 0x41, 0x72, 0x82, 0x6e, 0x9e, 0xb5, 0x10,
- 0x44, 0x34, 0xbc, 0x3c, 0xbb, 0x88, 0x82, 0x8a, 0xc4, 0x55, 0xae, 0x8b,
- 0x78, 0x06, 0x7e, 0xc2, 0x79, 0x67, 0x7b, 0x2d, 0xae, 0x03, 0x97, 0x24,
- 0x29, 0x41, 0x47, 0x9c, 0x6d, 0xef, 0x7b, 0x7d, 0xee, 0x1d, 0x5d, 0x3a,
- 0xb7, 0x6f, 0x49, 0x03, 0xe0, 0xac, 0x41, 0x83, 0x3b, 0xa3, 0xfb, 0x91,
- 0x04, 0xef, 0x59, 0x60, 0x7f, 0xd9, 0x93, 0x73, 0x76, 0xb6, 0x04, 0xad,
- 0x4b, 0xbe, 0x23, 0x93, 0x91, 0x66, 0x3e, 0xb2, 0xd9, 0x4a, 0x0d, 0x53,
- 0xce, 0x18, 0x58, 0x27, 0x45, 0x39, 0x43, 0x67, 0x1e, 0xd0, 0x4e, 0x2c,
- 0xff, 0x83, 0x9a, 0xd7, 0x0f, 0x9f, 0x23, 0x93, 0x4d, 0xdd, 0x28, 0x4a,
- 0x42, 0x5a, 0xbb, 0xa3, 0xbe, 0xd9, 0x63, 0x12, 0x05, 0x26, 0x5a, 0xc3,
- 0x57, 0xc2, 0xad, 0x9c, 0x6c, 0xe4, 0xc5, 0x8a, 0x1d, 0xbf, 0xce, 0xe7,
- 0x67, 0x17, 0x97, 0x56, 0xd0, 0x46, 0xef, 0x4d, 0x7c, 0x54, 0x3b, 0x41,
- 0xec, 0xac, 0x87, 0x04, 0x18, 0xd4, 0x36, 0x6f, 0xaf, 0x25, 0x2f, 0xe0,
- 0x7a, 0x68, 0x55, 0xdb, 0xe0, 0x42, 0x18, 0xf9, 0xca, 0x3c, 0x5f, 0xae,
- 0x5c, 0x0e, 0x58, 0x8e, 0xa6, 0xf2, 0x30, 0x7f, 0x6e, 0xf7, 0x63, 0xfa,
- 0x24, 0xd0, 0x27, 0xbb, 0x2d, 0xd4, 0xc1, 0x02, 0xf8, 0xc5, 0xf1, 0xf0,
- 0x52, 0x56, 0x8d, 0x7f, 0x6b, 0x8c, 0x5c, 0x52, 0x21, 0xf5, 0xc3, 0x56,
- 0xc7, 0x12, 0xa8, 0x83, 0x43, 0x64, 0x66, 0x5a, 0x67, 0xce, 0x79, 0x83,
- 0x82, 0x35, 0x7b, 0x12, 0x84, 0xf4, 0x81, 0x71, 0x2a, 0xad, 0x5c, 0x5a,
- 0xdd, 0xc1, 0xa8, 0xa3, 0x9d, 0x74, 0xe8, 0xca, 0x95, 0x43, 0x91, 0xe5,
- 0xb7, 0x41, 0x0b, 0x4f, 0x03, 0x66, 0xc1, 0xcc, 0x5d, 0x1b, 0x38, 0x31,
- 0xcb, 0x38, 0x7f, 0xe8, 0x9c, 0xcf, 0xd7, 0xc9, 0xdc, 0x08, 0x43, 0x9e,
- 0xf3, 0xed, 0x3c, 0x73, 0x79, 0xd1, 0x26, 0x1e, 0x05, 0x43, 0xe1, 0x8f,
- 0x2d, 0x1a, 0x1e, 0x8e, 0xc6, 0x1a, 0xd9, 0x3d, 0x79, 0xee, 0x56, 0x91,
- 0x45, 0x67, 0xe7, 0xda, 0x91, 0xe9, 0x07, 0x77, 0x11, 0xbb, 0xc6, 0xd2,
- 0xf9, 0x32, 0xd1, 0xa2, 0x1d, 0x71, 0x3e, 0x4d, 0x11, 0xca, 0x2a, 0xbe,
- 0x99, 0x86, 0x21, 0x5a, 0x23, 0x0c, 0x7d, 0x3f, 0x7a, 0x11, 0x91, 0x1a,
- 0xef, 0x77, 0x4b, 0x92, 0x0d, 0x71, 0x92, 0xbd, 0x8c, 0x47, 0x07, 0x77,
- 0xee, 0x6e, 0x8b, 0x41, 0x74, 0xce, 0x58, 0xae, 0x30, 0xb1, 0x17, 0xff,
- 0xe1, 0x5b, 0x93, 0xc3, 0xc2, 0x18, 0xe3, 0x7c, 0x7d, 0x42, 0x38, 0x4d,
- 0xb9, 0x08, 0x37, 0x3e, 0xe1, 0x5f, 0x03, 0x64, 0xc8, 0xc6, 0x94, 0x5f,
- 0xf8, 0x97, 0x0b, 0x9a, 0x08, 0xe9, 0x26, 0xf5, 0x47, 0x9e, 0x2a, 0x6d,
- 0x91, 0xe2, 0x82, 0x26, 0xb8, 0x03, 0xb0, 0x67, 0x3e, 0xd3, 0xbc, 0x25,
- 0x29, 0xc7, 0x37, 0xa2, 0x85, 0x2b, 0x7b, 0xc6, 0xc4, 0x58, 0x79, 0xce,
- 0x37, 0x25, 0x77, 0xc2, 0x81, 0xac, 0x13, 0x80, 0x2e, 0xe8, 0xdc, 0x70,
- 0xb9, 0x24, 0x6a, 0x6b, 0xce, 0x0c, 0x77, 0x6a, 0xbe, 0x73, 0x9f, 0xed,
- 0xc5, 0x3c, 0x73, 0x64, 0x87, 0xa7, 0xad, 0xf0, 0x78, 0x0d, 0x98, 0xf6,
- 0xa9, 0x50, 0xa3, 0x23, 0x1d, 0x77, 0x8d, 0x55, 0x46, 0xc7, 0x1d, 0xbb,
- 0x0c, 0x52, 0x6c, 0x37, 0xab, 0x96, 0x28, 0x05, 0x13, 0x34, 0xf5, 0xcc,
- 0x37, 0x75, 0xc5, 0x99, 0x7f, 0xae, 0x2d, 0xcf, 0x83, 0x3c, 0x14, 0x5b,
- 0xea, 0x1e, 0x53, 0x3d, 0x41, 0xae, 0xb2, 0x86, 0xa6, 0x50, 0xbd, 0x3f,
- 0x9e, 0x0a, 0x31, 0x5c, 0x66, 0x99, 0x94, 0xc5, 0x74, 0xb1, 0x7e, 0x03,
- 0x89, 0x22, 0x6c, 0x9a, 0xdd, 0x8b, 0x9e, 0xaa, 0x57, 0x5a, 0xb1, 0x8c,
- 0xbd, 0x06, 0x8d, 0x5a, 0xbb, 0xcb, 0x59, 0xa3, 0x5c, 0xce, 0xd3, 0xcf,
- 0x54, 0x7d, 0xbb, 0x9d, 0x73, 0xf1, 0xf8, 0xcb, 0xe3, 0xd3, 0xb7, 0xc7,
- 0x97, 0x0e, 0xb0, 0xc3, 0x26, 0x14, 0x3c, 0xff, 0x42, 0x0d, 0x5b, 0xaa,
- 0x5d, 0x19, 0x2e, 0x71, 0xdd, 0xfd, 0xfa, 0x6c, 0xd7, 0xd9, 0x76, 0x38,
- 0x72, 0xae, 0x5b, 0xc8, 0xf9, 0x0b, 0xe2, 0xe7, 0x50, 0xa6, 0xf8, 0xeb,
- 0xe8, 0xcd, 0xd1, 0x33, 0x0e, 0xe6, 0xbf, 0x4e, 0x72, 0x46, 0x46, 0xf7,
- 0xca, 0x4e, 0x16, 0x70, 0x82, 0x67, 0x7b, 0x01, 0x9e, 0x84, 0x5c, 0x66,
- 0xa9, 0x9e, 0x0f, 0x16, 0x63, 0x69, 0x85, 0x38, 0xff, 0x94, 0x14, 0x55,
- 0xb1, 0x06, 0x42, 0xb3, 0x16, 0x2b, 0xa3, 0x62, 0x87, 0x88, 0x6c, 0x50,
- 0xaf, 0x97, 0x5c, 0x65, 0x13, 0xcf, 0x9e, 0x78, 0x36, 0x91, 0xaf, 0x16,
- 0x8c, 0x7a, 0x26, 0x05, 0x95, 0x5b, 0x68, 0xf6, 0x99, 0xb0, 0xa6, 0x43,
- 0x39, 0x59, 0x2c, 0x2f, 0x36, 0x5f, 0xe3, 0x90, 0x24, 0x31, 0xb7, 0x05,
- 0xef, 0x3d, 0x0b, 0xf5, 0xb5, 0x42, 0x2b, 0xa9, 0xd2, 0xfa, 0xa1, 0x64,
- 0x00, 0xaa, 0x3f, 0xfb, 0x67, 0x9f, 0xbb, 0x67, 0xb9, 0x9e, 0x64, 0x3a,
- 0x57, 0x30, 0x9a, 0x47, 0xde, 0x50, 0x29, 0x53, 0x2e, 0x5f, 0x1f, 0x23,
- 0x23, 0xb2, 0x45, 0xb0, 0xf6, 0xc1, 0x2b, 0x2f, 0xaa, 0xea, 0x28, 0x70,
- 0x4e, 0x7d, 0x8d, 0x0b, 0x9e, 0x54, 0xba, 0xb8, 0x09, 0xc9, 0xff, 0xb9,
- 0xdc, 0x85, 0xe7, 0x1c, 0x0e, 0x59, 0xd9, 0x4f, 0x63, 0x33, 0x15, 0x14,
- 0x00, 0x3b, 0x4d, 0x42, 0x5d, 0x87, 0x07, 0xf6, 0x46, 0x9d, 0x34, 0xf9,
- 0xd1, 0xe0, 0xf2, 0x78, 0xbe, 0xab, 0x54, 0x49, 0x53, 0xce, 0xae, 0xe7,
- 0xa4, 0xe3, 0x4f, 0x9a, 0x65, 0x41, 0x83, 0xc7, 0xf7, 0xf4, 0x48, 0x4a,
- 0x45, 0x5d, 0xb0, 0x1d, 0xc6, 0x1f, 0xf6, 0x0f, 0x3c, 0x51, 0xaa, 0x15,
- 0x57, 0x9a, 0x14, 0x4b, 0x67, 0xe0, 0x67, 0xb6, 0x21, 0x26, 0x95, 0xd0,
- 0xfa, 0xe7, 0x4f, 0x55, 0xba, 0x31, 0x29, 0x94, 0x39, 0x3f, 0x2f, 0xc4,
- 0x94, 0xc1, 0x16, 0x1a, 0x8c, 0xf0, 0xb9, 0x5e, 0x2e, 0xba, 0x95, 0xa5,
- 0x95, 0xee, 0x56, 0x1e, 0x58, 0x20, 0xae, 0xf6, 0x3e, 0x9d, 0x6b, 0xfc,
- 0x77, 0xe3, 0xf5, 0xe7, 0x6b, 0xac, 0x1a, 0xea, 0x8b, 0x38, 0x06, 0x2d,
- 0x05, 0xcf, 0x7f, 0xea, 0x4e, 0x82, 0x03, 0xe9, 0xea, 0xb9, 0x38, 0x2f,
- 0x78, 0xb5, 0x0d, 0x4a, 0xd1, 0x0e, 0x12, 0xf4, 0xea, 0x85, 0xaf, 0x8a,
- 0xd1, 0xe6, 0xca, 0x73, 0xdd, 0x93, 0x4e, 0x1e, 0xa5, 0xc1, 0x31, 0x7e,
- 0x2e, 0x24, 0xf5, 0x1a, 0x9e, 0x64, 0x3b, 0x07, 0x1c, 0x8e, 0x1b, 0xa2,
- 0x5c, 0xfb, 0xa7, 0x5f, 0x28, 0x6d, 0xd8, 0x8d, 0x64, 0x82, 0xe0, 0xda,
- 0x37, 0x3e, 0xdd, 0x09, 0xc5, 0xc2, 0x09, 0xdb, 0xd2, 0x24, 0x9d, 0x7a,
- 0xed, 0x0b, 0x42, 0x19, 0x27, 0xc4, 0xa8, 0xaf, 0x89, 0xa8, 0xf1, 0x8c,
- 0x87, 0x11, 0xf0, 0x8f, 0xed, 0x55, 0xd9, 0x5a, 0x28, 0xa4, 0x44, 0x27,
- 0x47, 0xc1, 0x83, 0x4f, 0xfc, 0x04, 0xe3, 0x29, 0xdf, 0xb7, 0x2b, 0xd1,
- 0xf4, 0x0b, 0x05, 0x1a, 0x0f, 0x1e, 0x7d, 0xaa, 0x51, 0x98, 0x1c, 0x7f,
- 0x7b, 0x23, 0xeb, 0xdf, 0x78, 0x46, 0xc8, 0xe1, 0xd0, 0x15, 0x5e, 0x96,
- 0x70, 0xca, 0xa2, 0xed, 0x9a, 0xfd, 0xf4, 0xf9, 0x23, 0xcf, 0xea, 0xb5,
- 0x54, 0xb8, 0xcb, 0x34, 0x78, 0xef, 0xd3, 0xe6, 0x31, 0x37, 0xc1, 0xdb,
- 0xa2, 0x95, 0xf5, 0xa4, 0x45, 0x9b, 0x1c, 0x7c, 0xfd, 0x1f, 0x66, 0x5a,
- 0xc9, 0x39, 0x0a, 0xb3, 0xf8, 0x8f, 0x70, 0xbc, 0x9f, 0x85, 0x21, 0xcf,
- 0x62, 0x57, 0x71, 0x35, 0x19, 0x42, 0x68, 0x5c, 0x5f, 0xdd, 0x04, 0xab,
- 0x13, 0xb4, 0x20, 0x7b, 0x4e, 0x37, 0x75, 0x50, 0x27, 0x5a, 0x35, 0x2d,
- 0x4d, 0x51, 0xb7, 0x88, 0x27, 0x1d, 0xdd, 0xd7, 0xb4, 0xa9, 0xa0, 0x8e,
- 0xc0, 0x3a, 0xb5, 0x53, 0x3b, 0x06, 0xc5, 0xcd, 0x52, 0x54, 0x5b, 0x37,
- 0x23, 0x5f, 0xce, 0x3e, 0x78, 0x6d, 0xcf, 0x73, 0x2f, 0xbd, 0x58, 0x25,
- 0x0f, 0xe3, 0x90, 0xe1, 0x7f, 0x45, 0xff, 0x8d, 0x40, 0x8a, 0x7c, 0x15,
- 0xd3, 0x80, 0x50, 0x2b, 0xc6, 0x40, 0x0f, 0x36, 0xe3, 0xf6, 0xc4, 0x2c,
- 0x8d, 0xa3, 0x0e, 0xba, 0x51, 0xe1, 0x81, 0x1d, 0xb8, 0xb4, 0x4b, 0x37,
- 0xc9, 0xf8, 0xd6, 0x8e, 0x8c, 0x6b, 0xa3, 0xf9, 0xd6, 0xf7, 0xdf, 0x0b,
- 0xcf, 0x71, 0x90, 0x2f, 0x6a, 0x3d, 0x75, 0x80, 0xe6, 0x74, 0x46, 0x05,
- 0x46, 0x9c, 0xb7, 0x1b, 0xc5, 0xac, 0xf3, 0x64, 0x9a, 0x30, 0x70, 0x98,
- 0x48, 0xa6, 0x58, 0xe8, 0xb6, 0xe0, 0x47, 0x8e, 0x08, 0x91, 0x52, 0x3c,
- 0x89, 0x82, 0xcb, 0xcd, 0xd9, 0x7f, 0xad, 0x06, 0x0a, 0x1a, 0xc1, 0xc1,
- 0xbb, 0xcb, 0xaf, 0xcf, 0x2e, 0x86, 0xd1, 0x36, 0xe7, 0x49, 0x5f, 0x5e,
- 0x9c, 0x7c, 0xf9, 0x8e, 0x14, 0x3e, 0x67, 0x79, 0x3e, 0x8a, 0x49, 0x11,
- 0x9c, 0x72, 0xa8, 0x46, 0x32, 0x1f, 0x25, 0xf9, 0xb5, 0x01, 0x8f, 0x03,
- 0xd9, 0x84, 0x79, 0x77, 0x96, 0xfb, 0x2a, 0x1d, 0x52, 0x08, 0xdb, 0x2c,
- 0xeb, 0x08, 0xff, 0x4a, 0xe9, 0xbb, 0xcc, 0x6b, 0x33, 0x69, 0x35, 0xf7,
- 0xdd, 0x57, 0x5f, 0xbf, 0xfc, 0xfa, 0xe0, 0xed, 0x37, 0x43, 0x43, 0xb7,
- 0xfb, 0xee, 0xbb, 0xef, 0x42, 0xc7, 0xcb, 0xfe, 0xf6, 0x36, 0xf0, 0xcc,
- 0x6e, 0xe2, 0x87, 0x87, 0x41, 0x91, 0x6c, 0x6c, 0xd0, 0x39, 0xda, 0xf0,
- 0xb9, 0x04, 0x0a, 0x79, 0x5c, 0x2c, 0xe9, 0xa6, 0xa3, 0xaf, 0xb7, 0x17,
- 0xcb, 0x11, 0x43, 0x2c, 0x6f, 0x2f, 0x4b, 0x2d, 0x28, 0x81, 0xb7, 0xb7,
- 0x37, 0x36, 0x86, 0xc7, 0xc7, 0xd1, 0xc1, 0xe9, 0xf0, 0x2c, 0x78, 0x77,
- 0x73, 0x77, 0x8b, 0x24, 0x81, 0xeb, 0xa4, 0xa4, 0x5f, 0x36, 0x36, 0x4e,
- 0x0f, 0x2e, 0x59, 0xc9, 0xf9, 0xf6, 0xf8, 0x62, 0x78, 0x72, 0xf6, 0x96,
- 0x77, 0x87, 0x81, 0x20, 0xe2, 0xe9, 0x3d, 0x63, 0x6f, 0x5d, 0xa5, 0xc8,
- 0xd3, 0xbc, 0xb7, 0x52, 0x0e, 0x0c, 0x6e, 0x42, 0xa2, 0x8a, 0xc8, 0x6e,
- 0xe2, 0x58, 0xb2, 0x3a, 0x3f, 0x12, 0x13, 0x50, 0xb2, 0xaa, 0x61, 0xde,
- 0xc7, 0x8d, 0xc8, 0x1b, 0x3a, 0x04, 0xea, 0x3d, 0x19, 0x49, 0xc8, 0x4c,
- 0x4f, 0x10, 0x08, 0x10, 0xac, 0x1e, 0x40, 0x24, 0xb4, 0x4e, 0x7c, 0x78,
- 0xf2, 0xe6, 0x9c, 0x64, 0xfe, 0x77, 0xc3, 0x83, 0xaf, 0x8e, 0xf9, 0xd1,
- 0xaf, 0x92, 0xd2, 0x6f, 0x87, 0x94, 0x9c, 0xe0, 0x4e, 0xde, 0x26, 0x65,
- 0x31, 0x8e, 0x17, 0x1c, 0x77, 0x4e, 0xdd, 0xf4, 0x85, 0x2f, 0x06, 0x6d,
- 0x8b, 0xf4, 0xe7, 0xc1, 0xa8, 0xe7, 0xfa, 0x3c, 0x90, 0xa2, 0xc3, 0x76,
- 0x2f, 0x8e, 0x0f, 0x8e, 0xde, 0x1c, 0x5b, 0x40, 0x95, 0xdc, 0x23, 0xd4,
- 0xe8, 0x4d, 0xc6, 0xd5, 0x6b, 0x9c, 0xe9, 0x93, 0xef, 0x2a, 0x5e, 0x7c,
- 0xfa, 0x86, 0x4b, 0x32, 0xb4, 0x77, 0xe7, 0x37, 0x0a, 0xcf, 0x0e, 0xae,
- 0xd2, 0x6d, 0x69, 0xdd, 0xfa, 0x8b, 0xdd, 0x92, 0x58, 0x64, 0x92, 0xca,
- 0x6f, 0xa2, 0xc6, 0x42, 0xfd, 0xfd, 0x6c, 0x67, 0x67, 0xe7, 0x91, 0x79,
- 0xc0, 0xd0, 0xa8, 0xb7, 0x00, 0x4d, 0x65, 0x9f, 0x1f, 0xdf, 0xf6, 0xed,
- 0x1b, 0x65, 0x86, 0x66, 0x5b, 0xfe, 0x73, 0x2e, 0x8a, 0x77, 0x5a, 0x26,
- 0xed, 0x83, 0x1e, 0x67, 0x99, 0xdb, 0x83, 0xca, 0xf2, 0x4c, 0x18, 0xe7,
- 0x26, 0x2d, 0x03, 0x9c, 0x34, 0x1b, 0xfa, 0x24, 0x05, 0xfb, 0x89, 0xf3,
- 0x55, 0xbd, 0x49, 0xfe, 0x86, 0xda, 0xe4, 0x1f, 0x83, 0x2c, 0xbf, 0xde,
- 0x9e, 0xed, 0xe3, 0x92, 0xa5, 0x87, 0x5e, 0x27, 0xa8, 0xfb, 0x73, 0x9f,
- 0xb9, 0xd0, 0xa3, 0x82, 0x97, 0x96, 0xa3, 0x1c, 0x3f, 0x62, 0x5c, 0xbf,
- 0x60, 0x1d, 0xb0, 0x9d, 0x5c, 0x5f, 0x56, 0x66, 0x6e, 0xe1, 0x18, 0x2d,
- 0x9d, 0x14, 0xbc, 0x65, 0x6c, 0x66, 0x1a, 0x10, 0x0b, 0xa1, 0x5e, 0xe8,
- 0x73, 0x21, 0x12, 0xfa, 0x35, 0x27, 0xa2, 0x19, 0x94, 0x0f, 0x25, 0xbf,
- 0xc5, 0xce, 0x5a, 0xb5, 0x16, 0x03, 0xb6, 0x8a, 0x58, 0x56, 0x9e, 0x91,
- 0x8c, 0x1e, 0x4b, 0xfa, 0xcd, 0x10, 0x61, 0xed, 0x41, 0x34, 0x1a, 0x42,
- 0xdd, 0xb9, 0xe1, 0x7a, 0x9f, 0xfd, 0x3e, 0x28, 0xa8, 0x70, 0xf4, 0xf2,
- 0x11, 0x9d, 0x07, 0x93, 0x92, 0xd5, 0x9f, 0xeb, 0xc5, 0x11, 0x50, 0xcf,
- 0x90, 0x46, 0xd1, 0xe8, 0x0b, 0x20, 0x4b, 0x39, 0x82, 0xde, 0x0a, 0xe9,
- 0x0e, 0x45, 0x6b, 0x06, 0x89, 0x14, 0xaa, 0x42, 0x5f, 0xb4, 0x27, 0xdb,
- 0x88, 0xc6, 0xf9, 0xe8, 0x9e, 0x0e, 0xcf, 0x5d, 0x0d, 0x1c, 0x5a, 0x81,
- 0x3b, 0x5e, 0x82, 0xdb, 0x04, 0xb3, 0x0f, 0x65, 0xdd, 0x47, 0x06, 0xb3,
- 0x4f, 0xab, 0xc0, 0x6f, 0xfc, 0xf7, 0xf6, 0xa0, 0x28, 0x6e, 0xb6, 0xd3,
- 0xc9, 0xfb, 0x49, 0x11, 0xd3, 0x67, 0xc4, 0xd7, 0x1a, 0x1f, 0x0f, 0xe8,
- 0xc3, 0xe8, 0x2f, 0x15, 0xbe, 0x5f, 0x8c, 0xdb, 0x67, 0xf2, 0xdf, 0xdb,
- 0x0c, 0xfe, 0x05, 0x80, 0xe2, 0x60, 0xe1, 0x5a, 0xb8, 0x07, 0xcd, 0x4a,
- 0x70, 0xe6, 0xe8, 0x38, 0xb6, 0x53, 0x46, 0xff, 0x3a, 0xea, 0x28, 0xb9,
- 0xfd, 0xb8, 0xb7, 0xb3, 0xb3, 0xbb, 0xbf, 0xfb, 0xd9, 0x8b, 0x9d, 0xfd,
- 0xdd, 0xdd, 0xdd, 0xbd, 0xfd, 0xdd, 0xfd, 0xfd, 0xbd, 0x9d, 0x9f, 0xb6,
- 0x3b, 0x1b, 0x1b, 0x47, 0x67, 0xdf, 0xbd, 0x3d, 0x3d, 0x3b, 0x38, 0x8a,
- 0x2e, 0xcf, 0x48, 0xdf, 0x65, 0x5b, 0x45, 0xcb, 0x49, 0x07, 0xea, 0x53,
- 0x99, 0xc9, 0xcd, 0x16, 0x07, 0x25, 0x3a, 0x1a, 0x5d, 0x66, 0x10, 0x8a,
- 0xf9, 0xa5, 0xc1, 0x4d, 0x39, 0xfb, 0x30, 0xfb, 0xfa, 0x98, 0x4e, 0x7a,
- 0x12, 0x15, 0xe6, 0xf5, 0x1e, 0x6c, 0xad, 0x11, 0xa9, 0x42, 0x99, 0xba,
- 0xa2, 0xe3, 0x70, 0xb2, 0xb9, 0xa8, 0xc0, 0x4d, 0x71, 0x4d, 0xfb, 0xb8,
- 0x49, 0x29, 0x4e, 0x52, 0x54, 0x03, 0x1a, 0x5c, 0xb1, 0x00, 0xf5, 0x5b,
- 0x4a, 0x61, 0x76, 0x92, 0x07, 0xb6, 0x1a, 0x13, 0x3c, 0x5b, 0x3b, 0x25,
- 0xba, 0x78, 0x92, 0x07, 0xcc, 0xba, 0xca, 0x26, 0x04, 0xc9, 0xcc, 0xcf,
- 0x0e, 0x08, 0x46, 0xa6, 0xc9, 0xa5, 0xb9, 0x0d, 0x19, 0xee, 0xeb, 0x96,
- 0xee, 0xb8, 0x1f, 0xe3, 0x1e, 0xbe, 0x0b, 0xfe, 0x26, 0xbc, 0x74, 0xb6,
- 0x9d, 0xf9, 0x49, 0x06, 0xf0, 0x6e, 0x78, 0xf2, 0xf6, 0x2b, 0xf8, 0x97,
- 0xbe, 0x3b, 0xbb, 0x38, 0x1a, 0x52, 0xb3, 0x7c, 0x1b, 0x6f, 0xc0, 0x02,
- 0xc1, 0x87, 0x56, 0x47, 0x25, 0x47, 0x80, 0xbb, 0xfe, 0x13, 0x34, 0x8e,
- 0x49, 0xcf, 0xa5, 0x1e, 0x60, 0x98, 0x81, 0xb4, 0xc8, 0x29, 0x05, 0xed,
- 0x0c, 0x0e, 0xa7, 0x41, 0x5e, 0xff, 0x62, 0x16, 0x33, 0x18, 0x6c, 0x32,
- 0x10, 0x54, 0x35, 0x44, 0x12, 0x6c, 0x33, 0xac, 0xca, 0x36, 0x4b, 0xad,
- 0xdb, 0x65, 0x06, 0x56, 0x81, 0x56, 0xb2, 0xdc, 0x01, 0xe8, 0x56, 0x56,
- 0x84, 0xcf, 0xd8, 0xd5, 0x34, 0xbe, 0x46, 0x87, 0xcd, 0xe3, 0x17, 0x74,
- 0xa6, 0xdd, 0x7f, 0x6c, 0x97, 0xa8, 0xd9, 0xc7, 0xed, 0x9d, 0x80, 0x00,
- 0x90, 0xed, 0x8e, 0x3c, 0x09, 0x35, 0x8c, 0x8b, 0x84, 0x84, 0x1a, 0x33,
- 0xec, 0x62, 0xe7, 0x42, 0x18, 0x75, 0xa4, 0x5f, 0x2d, 0x50, 0xb9, 0x21,
- 0x46, 0x85, 0x7e, 0x90, 0x16, 0x25, 0x92, 0x3d, 0x2a, 0xc9, 0x79, 0x05,
- 0xba, 0x40, 0x3c, 0x3c, 0xfa, 0x44, 0xa2, 0x17, 0xf4, 0x45, 0x59, 0x72,
- 0x1e, 0x0c, 0x8d, 0x3d, 0x92, 0x88, 0x18, 0xce, 0xfd, 0x51, 0x91, 0xad,
- 0xc3, 0x30, 0xcb, 0xe9, 0x38, 0x2d, 0x3b, 0x96, 0x64, 0xe4, 0x81, 0xb7,
- 0xbc, 0x03, 0xac, 0x28, 0x69, 0x28, 0x31, 0xdd, 0x1e, 0x5a, 0x75, 0x44,
- 0x93, 0x6e, 0xb3, 0xd9, 0x4c, 0xb2, 0x31, 0x3b, 0x9c, 0x80, 0xe2, 0x5b,
- 0x49, 0x35, 0x97, 0xca, 0xd5, 0xd5, 0x60, 0x3e, 0xcb, 0xbd, 0x4b, 0xfa,
- 0x87, 0x44, 0xe3, 0x1b, 0x4b, 0xf7, 0x76, 0x1f, 0x66, 0xc7, 0x24, 0x71,
- 0x12, 0xaf, 0x14, 0xca, 0xd1, 0x98, 0xfe, 0x00, 0xd9, 0xbf, 0xb2, 0x6c,
- 0x61, 0xf5, 0x92, 0x06, 0x57, 0xad, 0xa6, 0x86, 0x6c, 0x20, 0x10, 0xd8,
- 0x25, 0x33, 0x05, 0xcb, 0xa3, 0x05, 0xf5, 0xdc, 0xab, 0xbc, 0x17, 0x69,
- 0x59, 0x24, 0xd3, 0x2b, 0x2d, 0x42, 0xa7, 0x75, 0xdf, 0x46, 0xab, 0xa0,
- 0x01, 0x99, 0x84, 0xc4, 0xff, 0x2e, 0xe7, 0x2e, 0x23, 0x26, 0x53, 0x9e,
- 0x71, 0x0d, 0xc6, 0xa9, 0x08, 0xde, 0x55, 0x46, 0x21, 0x9e, 0x99, 0x81,
- 0x41, 0xdc, 0x6e, 0x44, 0x0e, 0xa0, 0xb7, 0x36, 0x05, 0x87, 0x06, 0x07,
- 0x48, 0x2e, 0x50, 0x47, 0xf0, 0xe0, 0x72, 0x44, 0xab, 0xed, 0x9e, 0xe3,
- 0xb5, 0x63, 0x1b, 0x37, 0x56, 0xed, 0x30, 0x2c, 0xab, 0x22, 0x30, 0x84,
- 0x06, 0xe7, 0xe7, 0x07, 0x45, 0x03, 0x84, 0x51, 0x9c, 0x0e, 0x1a, 0x82,
- 0x55, 0x97, 0x85, 0x5b, 0x51, 0xa0, 0x78, 0xc7, 0xae, 0x78, 0x50, 0xdb,
- 0x31, 0x54, 0x8e, 0xb4, 0xfe, 0x1c, 0x7e, 0xf8, 0x08, 0x36, 0x87, 0x64,
- 0x42, 0xff, 0x74, 0x25, 0xa7, 0x24, 0x9d, 0x3f, 0x7e, 0x18, 0x75, 0x10,
- 0x1f, 0xd5, 0x31, 0xe6, 0xaa, 0x79, 0x49, 0xb0, 0x86, 0xfa, 0x28, 0x19,
- 0x71, 0xc0, 0x22, 0xd2, 0xbe, 0x05, 0xed, 0xb3, 0x02, 0xe7, 0x88, 0x83,
- 0x20, 0x61, 0xbe, 0xfb, 0xd1, 0x97, 0x71, 0x91, 0x8e, 0x7b, 0xd1, 0x51,
- 0x4a, 0xb2, 0x7a, 0xd9, 0xf3, 0x98, 0x8c, 0x0e, 0xc9, 0x72, 0x10, 0x7d,
- 0x67, 0xd5, 0x41, 0xe9, 0xce, 0x45, 0xec, 0x29, 0x4c, 0x8b, 0x2e, 0x51,
- 0x6d, 0x43, 0x6c, 0xb6, 0x6a, 0x75, 0x0d, 0x93, 0xc2, 0xd0, 0xb6, 0x87,
- 0x9b, 0xc3, 0x66, 0xc6, 0xc5, 0x6d, 0x15, 0x68, 0x5d, 0xa4, 0xaa, 0x82,
- 0x6d, 0x87, 0x2c, 0x02, 0x61, 0x7d, 0xe7, 0x5a, 0xe8, 0x42, 0x69, 0x2e,
- 0x9b, 0x5b, 0x80, 0x92, 0x77, 0xa4, 0xaa, 0x2d, 0xa7, 0xd0, 0xb0, 0x19,
- 0xf3, 0xf4, 0xe2, 0x36, 0xb2, 0xe3, 0xba, 0x81, 0xd0, 0x72, 0x5a, 0x27,
- 0x5e, 0x11, 0xe5, 0x27, 0x67, 0x97, 0xc7, 0xbf, 0x8b, 0x86, 0x29, 0xd7,
- 0x59, 0x74, 0x94, 0xc3, 0x87, 0x9c, 0x9d, 0xdd, 0xea, 0x85, 0x6a, 0xec,
- 0xa9, 0x4b, 0x53, 0x55, 0xb3, 0xa0, 0xe5, 0x42, 0x48, 0xf9, 0x9c, 0x7b,
- 0x29, 0x5f, 0xce, 0x2b, 0x03, 0x9a, 0xbd, 0x4b, 0xe3, 0xc8, 0x15, 0xb0,
- 0xe6, 0xb9, 0xbf, 0x67, 0xd2, 0x7f, 0xef, 0x21, 0xc6, 0x97, 0xfa, 0x22,
- 0x00, 0xe0, 0xb8, 0x1d, 0xb5, 0x09, 0xc0, 0x96, 0x32, 0x4e, 0x73, 0xba,
- 0x82, 0x99, 0x4f, 0x8d, 0xc5, 0x0c, 0x88, 0x18, 0x37, 0x8c, 0x9d, 0xcd,
- 0x1c, 0xf1, 0x88, 0xe8, 0x0a, 0xcb, 0x35, 0x46, 0x3a, 0x9c, 0xc0, 0x83,
- 0xab, 0x69, 0xd1, 0xce, 0x5d, 0xc8, 0x4a, 0x91, 0x10, 0x8a, 0xb4, 0x3a,
- 0x54, 0xe8, 0x50, 0x08, 0xc2, 0x0d, 0xc4, 0x8d, 0x51, 0xab, 0x90, 0x25,
- 0xe6, 0xee, 0x66, 0x0b, 0x64, 0x3b, 0x0e, 0xeb, 0x61, 0x3a, 0x9d, 0x44,
- 0xb3, 0x95, 0xa6, 0x3c, 0x2b, 0x1f, 0xe6, 0x1c, 0x1d, 0xa8, 0x2b, 0x9f,
- 0x7d, 0xd6, 0xb8, 0x77, 0x1f, 0xdc, 0xd3, 0xfb, 0xf4, 0x75, 0xa0, 0x16,
- 0x4d, 0xd9, 0xe7, 0x68, 0xa5, 0x80, 0xbc, 0x6e, 0xd4, 0x90, 0x39, 0xc3,
- 0x34, 0x46, 0xe9, 0xd0, 0xd9, 0x0f, 0x5b, 0xf6, 0xc5, 0x55, 0x3b, 0xda,
- 0x10, 0xa1, 0x5b, 0xc6, 0x19, 0x17, 0xe2, 0xb9, 0x5e, 0x23, 0x85, 0xda,
- 0xc9, 0xab, 0x0f, 0x36, 0x10, 0x50, 0x48, 0x48, 0x1a, 0xb0, 0x4c, 0xc3,
- 0xf2, 0xd6, 0x30, 0xd3, 0x86, 0x39, 0xe7, 0x44, 0x07, 0xe3, 0x30, 0x0b,
- 0xab, 0x67, 0x6d, 0xe0, 0x20, 0xf3, 0xdd, 0x8d, 0xd1, 0x7f, 0xb7, 0x7e,
- 0x38, 0xef, 0xfe, 0x99, 0xe1, 0x1c, 0x44, 0x8f, 0x06, 0xfb, 0x69, 0xfd,
- 0x03, 0x66, 0x22, 0x85, 0x9e, 0xd4, 0x49, 0x06, 0x83, 0x90, 0xd1, 0x9f,
- 0xac, 0xd1, 0x98, 0x9d, 0x00, 0xa3, 0x2a, 0xd6, 0x64, 0x53, 0x5d, 0x99,
- 0x67, 0xf2, 0x34, 0xe4, 0x47, 0x6e, 0xbf, 0x67, 0x43, 0xf9, 0xd8, 0xe1,
- 0x5a, 0x9e, 0xbb, 0x45, 0xab, 0xfa, 0xfe, 0x24, 0x03, 0x4b, 0x5a, 0x08,
- 0x62, 0xfe, 0x05, 0x81, 0x5c, 0x9e, 0x67, 0xec, 0xf1, 0x07, 0x04, 0x6e,
- 0xd0, 0x60, 0x7d, 0x09, 0x39, 0x9e, 0x09, 0x32, 0xa3, 0x6a, 0xaf, 0xe9,
- 0x67, 0xbb, 0x02, 0xd7, 0x44, 0xec, 0x51, 0xb1, 0xf1, 0x48, 0xcf, 0xa4,
- 0xcb, 0x6a, 0x81, 0xf0, 0xc3, 0x6a, 0xb9, 0x2e, 0xb9, 0x57, 0xa4, 0xe8,
- 0x3c, 0x56, 0x2e, 0xa8, 0x65, 0x8d, 0xc2, 0x5f, 0x32, 0x46, 0xa9, 0x6b,
- 0xac, 0xe5, 0x50, 0xa4, 0xc8, 0x2a, 0xee, 0xf9, 0x24, 0x91, 0x96, 0xca,
- 0xb5, 0x61, 0xc0, 0x87, 0x01, 0xe3, 0x15, 0x72, 0x06, 0xfb, 0x8e, 0xae,
- 0x96, 0x39, 0xc2, 0x33, 0x34, 0x1b, 0x5d, 0x93, 0x09, 0xa9, 0xd1, 0x8b,
- 0x83, 0xb7, 0x5f, 0x1d, 0xe3, 0xbc, 0x33, 0xdb, 0xf5, 0xa9, 0xb3, 0x9c,
- 0x1b, 0xd7, 0x87, 0xb3, 0xb8, 0x10, 0xb0, 0x8e, 0x94, 0xdf, 0x98, 0x2c,
- 0xc7, 0xec, 0xa7, 0x7e, 0xa7, 0xc7, 0x20, 0x2d, 0x80, 0xd3, 0x39, 0x4d,
- 0x79, 0x10, 0xcc, 0x72, 0xd5, 0x25, 0xbc, 0x11, 0x99, 0x7a, 0x0a, 0x8e,
- 0xc1, 0x22, 0x0d, 0xad, 0x10, 0x74, 0xd9, 0x62, 0x39, 0x5a, 0xc4, 0x9a,
- 0xa2, 0x15, 0x87, 0x59, 0x3f, 0xaa, 0x09, 0x0c, 0x2a, 0x53, 0xe0, 0xbb,
- 0x43, 0x02, 0x22, 0x9d, 0xd4, 0x99, 0x43, 0xea, 0x1c, 0x84, 0x1a, 0x97,
- 0xe0, 0x23, 0xed, 0xee, 0xec, 0x78, 0xcc, 0x1d, 0x9f, 0xbd, 0xd4, 0x20,
- 0xb2, 0x3c, 0xda, 0xe9, 0xbf, 0x78, 0xb1, 0x8e, 0x7e, 0x5c, 0xa3, 0xc8,
- 0x42, 0x79, 0xf6, 0xd1, 0x6d, 0xf6, 0xf9, 0xd1, 0x75, 0x6d, 0xb6, 0xc8,
- 0x16, 0x28, 0xd3, 0xa1, 0xee, 0xf8, 0xc2, 0xc5, 0x7c, 0xa8, 0x0e, 0x22,
- 0xb6, 0x2f, 0xd8, 0x22, 0xe7, 0x4e, 0xc0, 0xe0, 0xa5, 0xdc, 0x88, 0x9c,
- 0x24, 0x00, 0x08, 0x29, 0x53, 0x57, 0x16, 0xec, 0x91, 0x4f, 0x9d, 0x89,
- 0xf6, 0xa3, 0x16, 0x26, 0x10, 0x31, 0xd7, 0x2c, 0xd1, 0x55, 0x73, 0x36,
- 0xc6, 0x48, 0xdf, 0x9d, 0xb3, 0x32, 0x4a, 0xba, 0x8b, 0x08, 0xec, 0x24,
- 0x7d, 0xc2, 0x30, 0xb1, 0x5d, 0x93, 0x45, 0xdf, 0x69, 0x01, 0x3b, 0x2e,
- 0x3e, 0xc0, 0xbe, 0x19, 0x81, 0x2c, 0x4e, 0xe7, 0x5a, 0x49, 0xce, 0xed,
- 0xfe, 0x1a, 0xc5, 0xf8, 0x32, 0xea, 0x07, 0x2c, 0x5d, 0x51, 0x78, 0x98,
- 0x9f, 0xcf, 0x56, 0x26, 0xa3, 0x68, 0x0f, 0x68, 0xdd, 0x0c, 0x5d, 0x95,
- 0x8a, 0xbe, 0x3d, 0x15, 0x2c, 0x41, 0x41, 0x0d, 0x96, 0xde, 0xd2, 0xa5,
- 0x74, 0x83, 0x2b, 0xa2, 0xc6, 0xc0, 0x3f, 0x6e, 0x28, 0x71, 0x4b, 0x6d,
- 0x4e, 0x93, 0x62, 0x53, 0xce, 0x7f, 0x54, 0xed, 0xa4, 0xae, 0x28, 0x2b,
- 0x64, 0x23, 0x3f, 0x88, 0xf3, 0x93, 0xfd, 0xeb, 0x63, 0x7b, 0x64, 0x54,
- 0x7c, 0x38, 0xad, 0xe6, 0x7a, 0x6d, 0x94, 0xad, 0x06, 0x83, 0x4b, 0x79,
- 0x5f, 0xba, 0x8e, 0xdb, 0xbb, 0x93, 0xf7, 0x6d, 0x39, 0x5a, 0x88, 0x9e,
- 0xaf, 0x7d, 0x45, 0x66, 0x72, 0xd1, 0xde, 0x86, 0x23, 0xc1, 0xda, 0x09,
- 0xb8, 0x45, 0x5a, 0xe5, 0xe0, 0x1b, 0x91, 0xe6, 0x4c, 0x00, 0xb7, 0x89,
- 0xe9, 0x06, 0x40, 0xb3, 0xe0, 0x6d, 0xb7, 0x88, 0xa6, 0xb8, 0x52, 0x74,
- 0x0a, 0x14, 0x26, 0x39, 0x41, 0x26, 0x0a, 0xbb, 0x4c, 0x3c, 0xd8, 0x47,
- 0xbe, 0x9c, 0xcb, 0x2c, 0xe0, 0x70, 0xa0, 0xc1, 0xc7, 0xc5, 0x0d, 0x9c,
- 0xec, 0x4e, 0x41, 0x6a, 0xde, 0x44, 0x21, 0x60, 0x05, 0x5d, 0x3d, 0x72,
- 0xef, 0x80, 0xab, 0x56, 0x96, 0xa2, 0xba, 0x02, 0x81, 0x3e, 0xf1, 0xb1,
- 0x94, 0xcf, 0x2c, 0xa3, 0xd5, 0x58, 0x0a, 0xe2, 0x6f, 0x94, 0x38, 0xac,
- 0x91, 0x5c, 0x55, 0x1f, 0x93, 0xb6, 0x44, 0x94, 0x81, 0xfa, 0x83, 0xba,
- 0x70, 0x48, 0xaf, 0xad, 0x2d, 0x21, 0x64, 0x59, 0x80, 0x16, 0x48, 0xba,
- 0xad, 0xb1, 0x59, 0xcd, 0x22, 0x81, 0x12, 0xea, 0xa1, 0x6e, 0x34, 0xef,
- 0x86, 0x31, 0xf1, 0x25, 0xc8, 0x0f, 0x16, 0x7c, 0x46, 0x22, 0xcf, 0xa4,
- 0x4f, 0xcc, 0x50, 0x06, 0x28, 0x49, 0x2d, 0x12, 0x58, 0x35, 0xbc, 0x74,
- 0xa5, 0xca, 0x4d, 0x0e, 0xfc, 0xf6, 0xf8, 0xe2, 0xcb, 0xb3, 0xe1, 0x31,
- 0x71, 0x88, 0xa3, 0xe3, 0x2f, 0xdf, 0x31, 0xf7, 0xe0, 0x1d, 0x13, 0x23,
- 0x05, 0x70, 0x19, 0x04, 0x65, 0x19, 0xc9, 0x44, 0x4e, 0x46, 0x96, 0x9c,
- 0xc8, 0x9e, 0x51, 0x86, 0xc6, 0x74, 0xa9, 0x14, 0x3d, 0x4d, 0x44, 0xab,
- 0x4d, 0x11, 0x4d, 0xe7, 0x21, 0x4b, 0x58, 0x76, 0x9e, 0x33, 0xc6, 0x70,
- 0x69, 0x18, 0x1d, 0x86, 0x71, 0x5b, 0xec, 0x7b, 0xd9, 0xf8, 0x4e, 0x6c,
- 0x18, 0x7a, 0x20, 0x7c, 0x15, 0x1d, 0xab, 0x96, 0x33, 0x08, 0x4a, 0xe1,
- 0x2a, 0x7c, 0xf5, 0x34, 0x93, 0xdb, 0x8b, 0xd3, 0x88, 0x70, 0x96, 0x81,
- 0xcb, 0x9e, 0xa2, 0xea, 0x9e, 0xe2, 0x4f, 0x6a, 0xed, 0x9a, 0x42, 0x08,
- 0x8e, 0xd8, 0x8c, 0xa4, 0x60, 0x4c, 0x95, 0x2d, 0x83, 0x0b, 0x15, 0x89,
- 0x24, 0x2c, 0xcb, 0xed, 0xa9, 0x66, 0x7e, 0x09, 0x5a, 0x51, 0x58, 0xc5,
- 0x4d, 0x3e, 0x12, 0x0c, 0x19, 0x20, 0xda, 0x82, 0xe0, 0x07, 0x4b, 0x7d,
- 0x17, 0x07, 0x2e, 0xc5, 0x2b, 0x1f, 0x78, 0xbe, 0x94, 0x74, 0xee, 0xd6,
- 0xb3, 0x83, 0x4b, 0x99, 0x29, 0x27, 0x97, 0xca, 0x85, 0xec, 0x2a, 0x6a,
- 0xc3, 0x8f, 0xe4, 0x33, 0xa3, 0x38, 0x30, 0xc7, 0xe1, 0xa6, 0xc9, 0x79,
- 0xe2, 0xd0, 0xb8, 0x40, 0x02, 0x5e, 0x5f, 0x10, 0xc6, 0xec, 0x2c, 0x1a,
- 0xce, 0x53, 0xcf, 0x89, 0x56, 0x6f, 0x37, 0x6f, 0x29, 0x8c, 0x47, 0x51,
- 0xbd, 0xee, 0xa7, 0x9e, 0x41, 0x69, 0x5d, 0x6a, 0xc1, 0x94, 0x0f, 0x65,
- 0x68, 0x62, 0xdb, 0xd8, 0xd8, 0x38, 0x3a, 0xbe, 0x3c, 0x38, 0x39, 0x3d,
- 0x3e, 0x8a, 0x4e, 0xde, 0xbe, 0x3e, 0xbb, 0x78, 0x73, 0x70, 0xa9, 0x4e,
- 0xa6, 0x23, 0xa7, 0xa3, 0xba, 0x72, 0x26, 0xce, 0x04, 0xe0, 0xf5, 0x57,
- 0x90, 0x30, 0xed, 0xe2, 0xb5, 0x02, 0x06, 0xc9, 0x32, 0x24, 0x95, 0x35,
- 0xd8, 0x88, 0xd4, 0x39, 0xe5, 0x0b, 0x94, 0xf0, 0xfd, 0xbc, 0xed, 0x1c,
- 0x0a, 0x03, 0x5b, 0x4e, 0xd3, 0x30, 0x81, 0xfd, 0xf5, 0x68, 0x53, 0xae,
- 0x18, 0x97, 0xdc, 0x4d, 0xc0, 0xad, 0x47, 0x16, 0x0c, 0x68, 0xb2, 0x7f,
- 0xc2, 0xb9, 0xad, 0x10, 0x2f, 0xb5, 0xaa, 0xf9, 0x49, 0xe9, 0x8a, 0xf9,
- 0x31, 0xb9, 0x70, 0x3b, 0x41, 0x76, 0x15, 0x51, 0x20, 0xaa, 0x06, 0x07,
- 0x6d, 0xba, 0x44, 0x25, 0xab, 0x40, 0x22, 0x2e, 0x4d, 0x7c, 0x12, 0xee,
- 0x2f, 0x67, 0x72, 0x6d, 0xb0, 0xd7, 0xb6, 0xd4, 0xda, 0x18, 0x0f, 0x65,
- 0x32, 0x2f, 0xb8, 0x0e, 0x94, 0x9d, 0x75, 0x7e, 0xc5, 0x33, 0x51, 0xb3,
- 0xe3, 0x2a, 0xe8, 0x61, 0xd8, 0xd4, 0xa6, 0x73, 0x42, 0x90, 0xe4, 0xd2,
- 0x3f, 0x51, 0x14, 0x33, 0x5e, 0x0b, 0xae, 0xf9, 0xcb, 0x3f, 0xe7, 0x3e,
- 0xad, 0x5f, 0xa3, 0x34, 0xbc, 0xc2, 0x12, 0xd4, 0x3d, 0xd2, 0xd3, 0xe6,
- 0xcf, 0x6d, 0x61, 0x94, 0x76, 0x44, 0x0f, 0x71, 0x11, 0xc9, 0xbe, 0x76,
- 0xaf, 0x61, 0x52, 0xd0, 0x85, 0x6d, 0x0b, 0x45, 0x78, 0x82, 0x10, 0x30,
- 0xca, 0x04, 0xa8, 0x04, 0x6b, 0x20, 0xf3, 0x00, 0x7d, 0x97, 0x66, 0x34,
- 0x66, 0x11, 0xdf, 0xdb, 0x79, 0x5d, 0x91, 0xa6, 0x46, 0x35, 0x6c, 0x57,
- 0x20, 0x6c, 0xe8, 0x9e, 0xc5, 0x4a, 0x06, 0x2f, 0xc4, 0xde, 0xef, 0x8a,
- 0xf5, 0xdf, 0x34, 0x6c, 0x73, 0x26, 0x59, 0x6d, 0x50, 0x3d, 0x07, 0x4d,
- 0x33, 0x75, 0x65, 0x52, 0xe1, 0x8b, 0x55, 0x4f, 0x65, 0xc8, 0xe9, 0xad,
- 0x6b, 0x8c, 0x7e, 0xd2, 0x36, 0x02, 0xe5, 0xe2, 0x28, 0xef, 0xa9, 0xc5,
- 0xbc, 0x62, 0x78, 0xec, 0x18, 0xad, 0x61, 0x43, 0x01, 0x19, 0x94, 0x53,
- 0xc2, 0x74, 0x1a, 0xe6, 0xe1, 0x8e, 0xb9, 0xbe, 0x14, 0xd7, 0xe8, 0xd4,
- 0x7a, 0x72, 0x41, 0x2c, 0xb9, 0x78, 0xd4, 0x15, 0x79, 0x14, 0x4c, 0x6f,
- 0xbe, 0x61, 0x48, 0x89, 0xf6, 0x92, 0xc5, 0x09, 0x80, 0xfb, 0x4b, 0x3e,
- 0x36, 0x98, 0x3c, 0xbb, 0x33, 0x93, 0xb8, 0x80, 0x8d, 0x11, 0x21, 0xa5,
- 0x72, 0x67, 0x80, 0x04, 0x30, 0x57, 0x67, 0xb6, 0xc4, 0xe5, 0xe3, 0xcb,
- 0x0a, 0xf7, 0x05, 0xb6, 0x22, 0xe6, 0xac, 0x32, 0x3b, 0x14, 0x12, 0xdc,
- 0xe6, 0x5a, 0xb1, 0xba, 0xf3, 0xd4, 0x0c, 0x22, 0x94, 0x34, 0x64, 0xe3,
- 0x3c, 0x2b, 0xe4, 0xbc, 0x41, 0xd2, 0xee, 0xf8, 0xea, 0x0f, 0x9d, 0xc5,
- 0x0d, 0xf5, 0xd1, 0x89, 0xae, 0x59, 0x57, 0x19, 0x65, 0x61, 0xbc, 0x9b,
- 0x6e, 0xcb, 0x44, 0x1e, 0x7f, 0x75, 0x11, 0x5f, 0xc5, 0xc9, 0xf4, 0xf7,
- 0x7b, 0x3b, 0xc3, 0xf8, 0x7a, 0x39, 0x8d, 0xff, 0x80, 0x17, 0x5f, 0x3d,
- 0x79, 0xb2, 0xb7, 0xf3, 0xe9, 0x67, 0x3b, 0x9d, 0x9a, 0xab, 0x28, 0xf0,
- 0x33, 0xc3, 0x6d, 0x88, 0x72, 0xcd, 0xcc, 0x77, 0xd1, 0xcf, 0x60, 0x7c,
- 0x9d, 0x72, 0x37, 0x5f, 0xb3, 0xf0, 0xa2, 0x6b, 0x10, 0x23, 0x20, 0x42,
- 0xd8, 0xa4, 0xd6, 0x85, 0xa2, 0x1b, 0x97, 0xe8, 0xfa, 0x93, 0xdd, 0x7d,
- 0x61, 0x65, 0xd7, 0xb0, 0x4b, 0xc5, 0x42, 0xb1, 0xd1, 0xcb, 0x74, 0x4e,
- 0x37, 0xd0, 0xe7, 0x51, 0x19, 0x5f, 0x3b, 0x5a, 0x45, 0x0b, 0xae, 0x92,
- 0xb3, 0x59, 0xc2, 0xaf, 0x52, 0xd4, 0x14, 0x1e, 0x44, 0x9b, 0x97, 0x02,
- 0x99, 0x06, 0xc1, 0x67, 0x91, 0xe4, 0x53, 0xc9, 0x76, 0x8d, 0x67, 0x16,
- 0x72, 0xc9, 0xef, 0xb3, 0x33, 0x7e, 0xb0, 0x98, 0xba, 0xba, 0xd5, 0xd0,
- 0xc0, 0x52, 0x4f, 0x70, 0xd3, 0x45, 0xe1, 0xeb, 0x24, 0xc9, 0x75, 0x13,
- 0x82, 0xb1, 0xd1, 0x62, 0xa1, 0x0a, 0x44, 0x07, 0xb3, 0xea, 0xb9, 0x82,
- 0x2b, 0xfd, 0x89, 0xcd, 0x74, 0x80, 0xdf, 0x51, 0x8d, 0x4e, 0x8b, 0xea,
- 0x76, 0x16, 0x92, 0x1f, 0xe4, 0x8a, 0x7c, 0x68, 0x3a, 0x71, 0x65, 0x5e,
- 0x71, 0xe9, 0x37, 0xe6, 0xa5, 0x29, 0xb9, 0xbb, 0x9f, 0xbf, 0x02, 0x41,
- 0xec, 0x7e, 0xfe, 0x07, 0xf7, 0xd9, 0x9e, 0x7e, 0xb6, 0xf7, 0xf9, 0x1f,
- 0x06, 0x03, 0x8c, 0x8f, 0x29, 0xa4, 0x6b, 0x5f, 0x77, 0x35, 0xe9, 0x30,
- 0xd6, 0x23, 0x2c, 0x7f, 0x39, 0xe4, 0x1d, 0xd9, 0xeb, 0x8e, 0xf5, 0x1c,
- 0xae, 0x72, 0x4f, 0x6d, 0xef, 0x8e, 0x6f, 0xa5, 0x06, 0x58, 0x0c, 0x54,
- 0xcf, 0xa2, 0x6d, 0xd1, 0x9d, 0x89, 0x10, 0xed, 0x14, 0x0e, 0xb2, 0x24,
- 0x8e, 0xfe, 0xc8, 0x94, 0xfa, 0xc7, 0x8d, 0x48, 0x4d, 0xe4, 0xbc, 0x1d,
- 0x28, 0x4b, 0x18, 0x19, 0xd9, 0x4a, 0x6d, 0x79, 0x81, 0x7c, 0xe3, 0x96,
- 0x39, 0xca, 0x92, 0xef, 0xc0, 0xa0, 0xd0, 0xc5, 0x9f, 0x14, 0xf6, 0x47,
- 0x36, 0x9c, 0xf9, 0x19, 0xf2, 0x19, 0x24, 0x2b, 0x88, 0x24, 0x8c, 0x92,
- 0x79, 0x03, 0x9e, 0xfc, 0xfd, 0xf7, 0xdf, 0xab, 0x38, 0x45, 0xbf, 0xe8,
- 0xb8, 0x6f, 0x88, 0x13, 0x4d, 0x88, 0xb9, 0xcd, 0x50, 0x4e, 0x41, 0x2b,
- 0x93, 0xe8, 0x85, 0x7f, 0xa5, 0xf3, 0x94, 0x46, 0x68, 0x63, 0xa5, 0x8e,
- 0x2f, 0x8f, 0x0c, 0x4b, 0x7a, 0x2c, 0x4c, 0x0c, 0x94, 0xb9, 0x09, 0x57,
- 0xa0, 0x0f, 0xb5, 0x08, 0x09, 0x9f, 0x77, 0x0e, 0x9b, 0x0e, 0xda, 0xa7,
- 0xc6, 0x4c, 0x0d, 0xd6, 0x8d, 0x04, 0xc5, 0x8a, 0x8c, 0xf3, 0xaa, 0x23,
- 0x0f, 0x5e, 0xa7, 0x1d, 0x35, 0xf0, 0xca, 0x27, 0x1d, 0x9f, 0x43, 0x2a,
- 0xbb, 0x81, 0x2d, 0x7b, 0x25, 0x82, 0x53, 0xfa, 0x73, 0xf2, 0x6a, 0x77,
- 0xa7, 0xfd, 0x09, 0xd6, 0x86, 0x22, 0x46, 0x5f, 0x7d, 0xe5, 0x0d, 0xe4,
- 0x8f, 0x3d, 0x9f, 0x4e, 0xe4, 0x69, 0x2d, 0x2a, 0x88, 0x22, 0x2b, 0xaf,
- 0x3a, 0x23, 0xbe, 0x5f, 0xf9, 0xff, 0xd7, 0x8c, 0x03, 0x01, 0x5f, 0xfa,
- 0x6c, 0xb1, 0x1c, 0xcd, 0xd2, 0xca, 0x80, 0xb7, 0x79, 0x82, 0x9f, 0xc3,
- 0xa4, 0x92, 0x38, 0xda, 0x40, 0x35, 0x5a, 0x91, 0xfc, 0xba, 0x57, 0x59,
- 0x36, 0x8a, 0xf3, 0xae, 0x1a, 0x51, 0x6d, 0x9c, 0xdd, 0xdd, 0xbd, 0x27,
- 0x4f, 0x9f, 0x75, 0x07, 0x2a, 0xa5, 0x81, 0x41, 0x40, 0x31, 0x4b, 0x55,
- 0x95, 0x91, 0x26, 0x62, 0x39, 0x9e, 0x61, 0x6d, 0xf9, 0x56, 0x67, 0x03,
- 0xf3, 0x30, 0xee, 0xee, 0x95, 0xf4, 0xf6, 0x07, 0xee, 0xe7, 0x15, 0xba,
- 0xf8, 0x43, 0x3a, 0x79, 0xe5, 0x66, 0xf8, 0x07, 0x9e, 0xcb, 0x2b, 0x9d,
- 0x04, 0xed, 0xab, 0xc5, 0xd2, 0x17, 0x5b, 0x1b, 0xad, 0x5c, 0xad, 0x75,
- 0x73, 0x6d, 0x13, 0x37, 0x30, 0x69, 0x78, 0xba, 0xfa, 0x13, 0xb1, 0xdc,
- 0x42, 0x56, 0xf5, 0x81, 0xe4, 0xdb, 0x0f, 0x7d, 0x6a, 0xa5, 0xcf, 0xad,
- 0xf4, 0x3d, 0xbb, 0x8e, 0x66, 0x9c, 0x38, 0xc2, 0x1b, 0xd1, 0xd3, 0x6c,
- 0x82, 0x29, 0x6c, 0x1d, 0x2a, 0x08, 0x64, 0x19, 0xfc, 0x48, 0x87, 0x5f,
- 0x9d, 0x74, 0xd5, 0x41, 0x2b, 0x8a, 0x5b, 0xaf, 0xcd, 0xb8, 0xe6, 0xa2,
- 0x26, 0x14, 0x85, 0x60, 0xc3, 0xe0, 0xc1, 0x63, 0xf6, 0x37, 0x72, 0xbf,
- 0x92, 0xfa, 0x43, 0x9d, 0xe9, 0x9d, 0x33, 0x65, 0x73, 0x5d, 0x8e, 0x4f,
- 0xc2, 0x66, 0x80, 0xea, 0x22, 0x8e, 0x47, 0x58, 0xaa, 0x17, 0x2e, 0x6b,
- 0xa0, 0xff, 0xda, 0x79, 0x03, 0x5c, 0x94, 0xba, 0x3e, 0x4a, 0x5f, 0x09,
- 0x37, 0x31, 0x06, 0xd1, 0x71, 0x25, 0xa8, 0x84, 0x12, 0x42, 0xde, 0x01,
- 0x5f, 0xc6, 0x28, 0xa9, 0x14, 0x36, 0x12, 0xb1, 0x90, 0xb9, 0xe7, 0x4b,
- 0x57, 0xb3, 0xe8, 0xf3, 0x08, 0xb8, 0xff, 0xf2, 0x96, 0xc6, 0xa1, 0x57,
- 0xea, 0xbb, 0xe2, 0x25, 0x55, 0x0e, 0x9c, 0xe7, 0x23, 0xf0, 0xda, 0xaa,
- 0x58, 0x20, 0x2d, 0xc8, 0x44, 0x47, 0x2b, 0x55, 0xff, 0xb9, 0x85, 0xee,
- 0x9f, 0x71, 0x08, 0x5e, 0xf2, 0x36, 0xe0, 0xeb, 0xcf, 0xbb, 0x62, 0xc2,
- 0x73, 0xef, 0xf2, 0x30, 0x6a, 0x9e, 0x15, 0x21, 0xd0, 0x70, 0x3e, 0xd9,
- 0x95, 0x83, 0x73, 0x11, 0x59, 0x8c, 0x93, 0x4c, 0xe7, 0x50, 0xa7, 0xd2,
- 0x64, 0x3a, 0xd1, 0xb2, 0x6a, 0x2a, 0x0b, 0xf5, 0xb4, 0xf1, 0x84, 0x33,
- 0x78, 0x59, 0x76, 0xec, 0x72, 0x00, 0x0e, 0xde, 0xeb, 0x3a, 0x74, 0x18,
- 0x16, 0xa9, 0x13, 0xb0, 0xbb, 0x3c, 0xb1, 0x92, 0x63, 0x1b, 0x9a, 0x5c,
- 0xe6, 0x65, 0xf9, 0x70, 0x62, 0x45, 0x20, 0x3a, 0xf8, 0x58, 0x7d, 0xc9,
- 0x41, 0x6e, 0x1c, 0x91, 0xd7, 0x9c, 0x08, 0xa3, 0x9d, 0xbe, 0xe2, 0xe5,
- 0xde, 0x1d, 0x5c, 0xa7, 0x57, 0xb2, 0x18, 0xc4, 0x22, 0xaf, 0x93, 0x6d,
- 0xfa, 0xb3, 0x47, 0x9f, 0xef, 0xb1, 0x4c, 0xc6, 0xbf, 0x3c, 0x81, 0xdf,
- 0x3e, 0xbc, 0xf9, 0x83, 0xb3, 0xe1, 0xce, 0x05, 0xff, 0x92, 0xba, 0x1b,
- 0x5f, 0x4d, 0xd2, 0x3a, 0x4a, 0x90, 0xb9, 0x02, 0x6f, 0x7a, 0x41, 0xb3,
- 0x17, 0x98, 0x9b, 0x01, 0xbc, 0x96, 0x41, 0x3a, 0x29, 0x7c, 0x98, 0x9b,
- 0x3a, 0x16, 0x55, 0x4c, 0x67, 0xa9, 0x3b, 0x55, 0x83, 0x09, 0x07, 0xda,
- 0xe2, 0x5e, 0x4d, 0xee, 0xb7, 0x7a, 0x61, 0xf0, 0x90, 0x55, 0xda, 0x74,
- 0xe5, 0x80, 0x91, 0x85, 0xc6, 0xdd, 0x6f, 0x6a, 0x6d, 0x2b, 0xc6, 0x72,
- 0xd0, 0x74, 0x19, 0x6c, 0x73, 0x5a, 0xdf, 0xc1, 0x6a, 0x79, 0x28, 0x09,
- 0xf8, 0x48, 0x8b, 0x72, 0x8b, 0xbb, 0x49, 0xa6, 0x05, 0x34, 0x75, 0x1e,
- 0xf4, 0x46, 0x14, 0xac, 0xbb, 0xa1, 0x64, 0xa0, 0xab, 0x2e, 0xd7, 0xab,
- 0xda, 0x86, 0x3f, 0x48, 0x78, 0xdb, 0xf1, 0x4c, 0x40, 0xe1, 0x41, 0xb6,
- 0xd3, 0xbe, 0xdc, 0x97, 0x2a, 0x04, 0xf5, 0x5f, 0x0f, 0xa2, 0x53, 0x84,
- 0xbe, 0x15, 0xb1, 0x64, 0x16, 0xdb, 0x9d, 0x6a, 0x14, 0x40, 0xe4, 0x22,
- 0x52, 0xf7, 0x86, 0x14, 0xea, 0xe2, 0x64, 0x4e, 0x23, 0x23, 0xe0, 0xd8,
- 0x79, 0x35, 0x53, 0x24, 0x0a, 0x95, 0x40, 0x7a, 0xb0, 0x42, 0xbb, 0xe7,
- 0x50, 0xb6, 0xcd, 0x95, 0x8d, 0x0e, 0x88, 0x34, 0x68, 0x44, 0x1c, 0xfa,
- 0x2a, 0x72, 0x06, 0xac, 0xdc, 0x11, 0xbe, 0xe4, 0x8c, 0x26, 0x62, 0x66,
- 0xd1, 0xd2, 0xbe, 0xe2, 0xc3, 0xa2, 0xd6, 0x40, 0x59, 0x3c, 0x77, 0x26,
- 0x9d, 0x0e, 0x34, 0xc5, 0x69, 0xe2, 0xd4, 0x69, 0x05, 0xe3, 0x15, 0x5c,
- 0xdc, 0x4c, 0xa1, 0x91, 0x44, 0xc0, 0xf0, 0xfe, 0x05, 0x1e, 0x24, 0x8f,
- 0x2b, 0xbe, 0xa3, 0x5f, 0xf8, 0x92, 0x1f, 0xe5, 0xb4, 0xd3, 0x49, 0x2e,
- 0xd7, 0x01, 0x7a, 0x05, 0x6e, 0x8a, 0x83, 0xbd, 0x7c, 0x73, 0x1a, 0x59,
- 0x86, 0xf6, 0x95, 0x17, 0x0e, 0x2d, 0x6a, 0x07, 0x53, 0x54, 0x5b, 0x88,
- 0x48, 0x40, 0xfa, 0x94, 0xdc, 0x6c, 0xb2, 0xb6, 0x9c, 0xe4, 0x15, 0xf1,
- 0xe2, 0x54, 0x8e, 0x69, 0xf0, 0x84, 0xbc, 0xca, 0xb4, 0x43, 0xa4, 0xd1,
- 0xe5, 0x25, 0xe8, 0xf6, 0xa2, 0x2e, 0x0f, 0x95, 0xbf, 0xe8, 0x62, 0x3d,
- 0xf1, 0x71, 0xb0, 0x7c, 0xdd, 0x41, 0xcb, 0xc9, 0xe3, 0x67, 0x5e, 0x7d,
- 0x51, 0x59, 0x25, 0x7c, 0x6e, 0x4d, 0xbd, 0x92, 0x68, 0xd9, 0x86, 0x94,
- 0x6d, 0xef, 0x06, 0xed, 0xbf, 0x3a, 0xa4, 0x56, 0xa4, 0x30, 0x9a, 0xec,
- 0x09, 0x04, 0x6a, 0xf7, 0x59, 0x8a, 0x54, 0x94, 0x46, 0x43, 0x1f, 0x3e,
- 0xb9, 0x97, 0xc6, 0x7e, 0x5c, 0x78, 0x90, 0x70, 0x34, 0x21, 0x01, 0xe3,
- 0xb6, 0xb4, 0x9b, 0xa9, 0x68, 0x7a, 0xf7, 0x19, 0xec, 0x0a, 0xe0, 0x33,
- 0xbb, 0x03, 0xa4, 0x26, 0x78, 0x28, 0x1d, 0xd7, 0x80, 0x53, 0xd7, 0x3b,
- 0x58, 0xd0, 0x8e, 0x99, 0x49, 0x9c, 0x12, 0x6f, 0xab, 0xdc, 0xc6, 0xaf,
- 0x16, 0xe9, 0x18, 0x75, 0x4e, 0x5f, 0x7d, 0x31, 0xc9, 0xae, 0x99, 0x5b,
- 0xf5, 0xe8, 0x62, 0xe5, 0x9f, 0x1d, 0x7e, 0x78, 0x4f, 0x3b, 0x95, 0x01,
- 0xe3, 0xac, 0x88, 0xdc, 0x6e, 0x7f, 0xaf, 0x09, 0x5f, 0xa2, 0x86, 0x27,
- 0xd9, 0x58, 0xdb, 0x76, 0x4d, 0xcb, 0x7e, 0x50, 0xfb, 0xee, 0x8b, 0xb0,
- 0x2f, 0x5b, 0x9c, 0x58, 0x5b, 0x96, 0x02, 0x75, 0xd3, 0xb4, 0x94, 0xeb,
- 0xdb, 0xe1, 0xaa, 0xc3, 0xa4, 0xc5, 0x35, 0x26, 0xe4, 0xae, 0x9a, 0x6a,
- 0xbc, 0x7c, 0xf7, 0x8b, 0xae, 0x84, 0x3a, 0x76, 0x5f, 0x76, 0xc1, 0xb5,
- 0x98, 0x17, 0x19, 0x8a, 0xae, 0x5e, 0x48, 0x5d, 0xb9, 0x09, 0xfb, 0x22,
- 0x2f, 0x68, 0xf1, 0xc0, 0x4a, 0x74, 0x0a, 0x33, 0x0c, 0x53, 0x1c, 0xc3,
- 0xc0, 0x1a, 0x18, 0x06, 0x7c, 0xd9, 0x3c, 0x46, 0xa6, 0x19, 0x95, 0xe2,
- 0x92, 0xd6, 0x8b, 0x16, 0xa2, 0x18, 0x12, 0x7d, 0x0b, 0x76, 0xb8, 0x8a,
- 0x61, 0x73, 0x39, 0x5f, 0x70, 0x5a, 0xd7, 0x18, 0x55, 0x75, 0xf5, 0x2c,
- 0x0d, 0xa2, 0x77, 0x73, 0xc1, 0xbd, 0x4b, 0x58, 0x3d, 0x0e, 0xfd, 0xe5,
- 0x3d, 0xe7, 0xf7, 0xa7, 0x85, 0xaa, 0xf8, 0x13, 0xc3, 0x01, 0x8b, 0x39,
- 0x44, 0xcc, 0xd6, 0xda, 0x2f, 0x5f, 0xad, 0x39, 0x47, 0x23, 0xa8, 0x59,
- 0x1a, 0x92, 0x80, 0x4b, 0xf8, 0x55, 0x06, 0xc4, 0xde, 0xb9, 0xe3, 0xd7,
- 0xc7, 0x17, 0x17, 0xc7, 0x17, 0xbc, 0xde, 0x07, 0x55, 0xfc, 0xfa, 0x1b,
- 0x8d, 0x8c, 0xf6, 0xc8, 0x6c, 0x16, 0x11, 0xd6, 0x2c, 0x6b, 0x2c, 0x9c,
- 0x50, 0xa1, 0x94, 0x36, 0x22, 0xf3, 0x73, 0x4b, 0x96, 0xbb, 0x18, 0x84,
- 0x61, 0x4d, 0x44, 0x3c, 0xa0, 0xb3, 0xdc, 0x4f, 0xf9, 0x5a, 0x11, 0x18,
- 0xfa, 0x50, 0x98, 0xd8, 0x88, 0xec, 0xd5, 0x5c, 0xeb, 0x8f, 0xe0, 0xaa,
- 0x36, 0xdd, 0x31, 0x90, 0x4b, 0x07, 0x1a, 0xc2, 0x95, 0xa8, 0xf7, 0xda,
- 0xd7, 0x16, 0xc7, 0x7c, 0xaf, 0xf8, 0x80, 0xb2, 0xaa, 0x84, 0x95, 0x28,
- 0xca, 0xe5, 0x22, 0x9d, 0x38, 0xe3, 0x2e, 0x7d, 0x4e, 0xf2, 0x5e, 0x24,
- 0x47, 0xbc, 0xb0, 0x11, 0xc3, 0x99, 0x68, 0xb6, 0x87, 0xd0, 0xb8, 0x26,
- 0x49, 0xe5, 0xde, 0x34, 0x86, 0x98, 0x7f, 0x29, 0x5a, 0xa9, 0x98, 0xd9,
- 0xb5, 0x8c, 0x2d, 0x25, 0xfc, 0x04, 0x46, 0x45, 0x66, 0x15, 0x16, 0x2b,
- 0x10, 0xb2, 0x05, 0x36, 0x5d, 0xcd, 0x7c, 0x20, 0xa4, 0x2f, 0x28, 0x78,
- 0x81, 0x44, 0x8d, 0x7c, 0x3f, 0xfa, 0xb1, 0x48, 0xc7, 0x3f, 0xf9, 0x9b,
- 0x03, 0x21, 0xcc, 0x3e, 0x56, 0x51, 0x62, 0x0b, 0x68, 0xf2, 0xba, 0x50,
- 0xaa, 0xfb, 0x4a, 0x82, 0xd4, 0xbb, 0xe1, 0xf1, 0x45, 0x74, 0xf0, 0x15,
- 0xa3, 0x3b, 0xfd, 0x6b, 0xbb, 0xcb, 0xcf, 0xe9, 0xcd, 0x60, 0x7b, 0xab,
- 0x29, 0xb9, 0x89, 0x19, 0xbe, 0xb5, 0x6e, 0x42, 0xb8, 0xb1, 0xa9, 0x55,
- 0x8f, 0x09, 0x72, 0x27, 0x2b, 0x5b, 0xb8, 0x11, 0x7d, 0x70, 0x13, 0x3f,
- 0x66, 0x0b, 0xf9, 0x80, 0x85, 0x9b, 0x28, 0xb9, 0xfc, 0xe2, 0x80, 0xb0,
- 0xad, 0xd1, 0xd1, 0x17, 0x0d, 0x35, 0x53, 0x36, 0xe9, 0x20, 0xea, 0xbe,
- 0xc9, 0x7e, 0x26, 0x41, 0x20, 0xde, 0x7e, 0x32, 0xd8, 0x89, 0x36, 0xbf,
- 0x4b, 0xe7, 0x2f, 0x9e, 0xfd, 0x39, 0x3a, 0xd9, 0xea, 0x56, 0x82, 0x3c,
- 0x05, 0xc6, 0x79, 0x14, 0xcf, 0x6f, 0xdd, 0x8e, 0x9d, 0xe1, 0x54, 0x4b,
- 0xe8, 0x8a, 0x81, 0x81, 0x4a, 0x65, 0xc2, 0xb5, 0x2d, 0x22, 0xd1, 0x48,
- 0xe3, 0x45, 0xa3, 0x6f, 0x1d, 0x20, 0x1d, 0xeb, 0xf4, 0xf4, 0xd4, 0x84,
- 0x97, 0xee, 0xc5, 0xb3, 0x46, 0x13, 0x4f, 0x5d, 0x1b, 0xef, 0xa4, 0x8d,
- 0x5f, 0xd8, 0xc4, 0xde, 0x60, 0x67, 0x2f, 0xda, 0x3c, 0x1b, 0x6e, 0xef,
- 0xb9, 0x16, 0x9a, 0x4d, 0xec, 0xa1, 0x09, 0x7e, 0xa8, 0xfa, 0xf2, 0x53,
- 0xee, 0xff, 0xc7, 0x64, 0xfe, 0x53, 0xb4, 0xf9, 0xfd, 0xee, 0x2e, 0x35,
- 0xf0, 0xe7, 0xe8, 0xe0, 0xe4, 0xfb, 0xe8, 0xe9, 0x80, 0x1a, 0x7b, 0x1b,
- 0xdf, 0x69, 0x73, 0x8a, 0xe1, 0x34, 0x44, 0x23, 0xf4, 0x7d, 0xa3, 0x8d,
- 0x67, 0xb5, 0x36, 0x4e, 0x49, 0x0f, 0x7c, 0xa0, 0x2b, 0x65, 0x67, 0xf0,
- 0x64, 0x2f, 0x4a, 0x9f, 0x7d, 0xf6, 0xdc, 0x1a, 0xd2, 0x36, 0xf0, 0x7d,
- 0xd5, 0x36, 0x29, 0x59, 0xbe, 0x24, 0xe6, 0x1c, 0x3f, 0x10, 0x33, 0x03,
- 0x87, 0x00, 0x74, 0xea, 0x4d, 0x9c, 0x4f, 0x94, 0xdc, 0xb8, 0xa8, 0x0a,
- 0xed, 0x94, 0xa2, 0x83, 0x25, 0x30, 0x52, 0xd2, 0xa5, 0xb9, 0xdf, 0x18,
- 0x0e, 0xeb, 0xa2, 0xf6, 0xe8, 0x9f, 0xa3, 0x37, 0xc3, 0x93, 0x63, 0x9a,
- 0xd1, 0x0e, 0x0d, 0xcd, 0xaf, 0xa1, 0x0c, 0x08, 0x5f, 0x61, 0x71, 0x69,
- 0x55, 0x37, 0x38, 0xef, 0x07, 0x6d, 0x98, 0x8c, 0x2d, 0x11, 0x5d, 0x0c,
- 0xdb, 0x98, 0x15, 0x05, 0xfa, 0x7d, 0x47, 0xb4, 0xd6, 0x3f, 0xb8, 0x66,
- 0x95, 0x41, 0xae, 0x59, 0x74, 0xfd, 0x4d, 0x36, 0xa7, 0x63, 0x92, 0x67,
- 0x39, 0x87, 0x79, 0x74, 0x2b, 0x92, 0xc2, 0x37, 0x47, 0xc7, 0x92, 0xa7,
- 0xf6, 0x26, 0x9e, 0x13, 0x8b, 0x64, 0x44, 0x87, 0xe2, 0x96, 0xbd, 0xee,
- 0xe2, 0xbc, 0x91, 0xf7, 0x4f, 0x57, 0xf3, 0x07, 0xda, 0xc7, 0x4f, 0x07,
- 0xbb, 0x8c, 0x6a, 0xc7, 0x5a, 0xee, 0xeb, 0x37, 0xf4, 0xf7, 0xee, 0xd3,
- 0x6e, 0xc4, 0x5f, 0x55, 0x35, 0x76, 0x3b, 0xaf, 0x1b, 0x87, 0x67, 0x67,
- 0xdf, 0x9c, 0x48, 0x00, 0xc6, 0xa1, 0x1a, 0x51, 0x59, 0xb0, 0x72, 0x5a,
- 0xb0, 0x30, 0x57, 0xd2, 0xd6, 0x7c, 0xfc, 0x38, 0x5c, 0x6f, 0xb7, 0x49,
- 0xb2, 0x00, 0x0c, 0x5d, 0x8d, 0x23, 0x94, 0xca, 0xa2, 0x65, 0x64, 0x2c,
- 0x48, 0xa7, 0x93, 0x2a, 0x1a, 0x45, 0xc1, 0x08, 0x61, 0x66, 0xb0, 0x1d,
- 0xad, 0x5c, 0x2e, 0x6c, 0xec, 0x8b, 0x40, 0x62, 0x88, 0x2e, 0x8a, 0xd5,
- 0x0c, 0xce, 0x52, 0x05, 0x9e, 0x5e, 0x54, 0x5d, 0xb7, 0x3b, 0x4c, 0xca,
- 0xbe, 0x0c, 0x7a, 0x5f, 0x6d, 0xb4, 0x5d, 0x35, 0x38, 0x39, 0x73, 0xd9,
- 0x42, 0x31, 0x69, 0x61, 0x28, 0x5e, 0x2d, 0xb8, 0x58, 0xe5, 0xd4, 0xd5,
- 0x13, 0x46, 0x31, 0xd6, 0x04, 0xb1, 0x44, 0x6f, 0x0f, 0xde, 0x1c, 0xbf,
- 0xfa, 0xf6, 0xe0, 0xf4, 0xdd, 0x31, 0xbd, 0xc2, 0xa8, 0xac, 0x9b, 0x3e,
- 0xde, 0x08, 0x63, 0x9c, 0xa5, 0xe3, 0x6c, 0xca, 0x3e, 0xa5, 0xee, 0x9f,
- 0xbb, 0x1b, 0x12, 0x5e, 0x19, 0x75, 0xf8, 0xad, 0x5d, 0x79, 0x8d, 0xe8,
- 0x82, 0xff, 0xda, 0x93, 0xbf, 0xf6, 0xfe, 0xdc, 0xd9, 0xaa, 0x4c, 0xba,
- 0xa1, 0x15, 0x33, 0xbd, 0xdc, 0x4b, 0x5c, 0x1d, 0xaa, 0xa4, 0x20, 0xa6,
- 0x57, 0x56, 0xa5, 0x63, 0x1e, 0x19, 0xbb, 0xda, 0xf8, 0xd9, 0xcd, 0xd1,
- 0x2a, 0xd4, 0xb9, 0x3b, 0xfc, 0xd2, 0x2b, 0x08, 0x17, 0x1d, 0xce, 0x79,
- 0x52, 0x71, 0x03, 0xce, 0x6a, 0x6e, 0xc3, 0x9a, 0x48, 0x1e, 0x16, 0x1c,
- 0xbe, 0xb5, 0xd9, 0x91, 0x5f, 0x5e, 0x1d, 0x1d, 0x5c, 0x1e, 0xf3, 0x0b,
- 0xd6, 0xbd, 0x95, 0xb5, 0xb6, 0xc8, 0x5b, 0x1e, 0xcf, 0x66, 0x47, 0x3e,
- 0x7c, 0xc5, 0x13, 0xea, 0x48, 0x8d, 0x01, 0x01, 0x58, 0xac, 0x8d, 0x2b,
- 0x9b, 0x6b, 0x10, 0x63, 0x90, 0xa2, 0x57, 0x58, 0x9c, 0xc8, 0x66, 0x47,
- 0xbe, 0xeb, 0x38, 0x7b, 0xad, 0x16, 0x6e, 0x55, 0xe7, 0xe4, 0x04, 0x71,
- 0xb9, 0x8d, 0xf4, 0x20, 0xa9, 0x95, 0xe4, 0xf7, 0x47, 0x5d, 0x13, 0x62,
- 0x61, 0x0a, 0x40, 0xe6, 0xdc, 0xc6, 0x6b, 0x46, 0x21, 0xdb, 0x94, 0xb2,
- 0x6c, 0x77, 0xef, 0xc9, 0x9f, 0xb1, 0x9e, 0xaf, 0x3a, 0xdb, 0x74, 0x37,
- 0x74, 0xfe, 0xcc, 0x5d, 0xa7, 0x65, 0x50, 0x6e, 0x45, 0xbb, 0x61, 0x5d,
- 0x4a, 0x29, 0x4a, 0x82, 0x54, 0x78, 0xd7, 0x61, 0x0b, 0x93, 0x79, 0x61,
- 0x41, 0xef, 0x25, 0x7b, 0xc0, 0x92, 0xcc, 0xcd, 0x7d, 0x8f, 0xfd, 0x42,
- 0xc9, 0xc0, 0xb9, 0x83, 0x26, 0x95, 0xee, 0xc2, 0xfb, 0xa3, 0x27, 0xef,
- 0xca, 0x1c, 0xb5, 0x08, 0x0c, 0xf7, 0x39, 0x5b, 0x59, 0x82, 0x01, 0xfa,
- 0x82, 0x3c, 0x2e, 0x7b, 0xd6, 0x90, 0x8a, 0x47, 0x6a, 0xcb, 0x31, 0x45,
- 0x04, 0x22, 0x01, 0xb1, 0x96, 0x15, 0xe4, 0x24, 0xf1, 0xf7, 0x07, 0x61,
- 0x0e, 0x76, 0x67, 0xc7, 0x23, 0xce, 0x94, 0x73, 0xd1, 0xd4, 0x81, 0x16,
- 0xee, 0x96, 0xde, 0x8e, 0x5f, 0x1a, 0x00, 0x0a, 0xf0, 0x45, 0x29, 0x6b,
- 0x59, 0x38, 0x9b, 0x11, 0x7c, 0x8b, 0xfa, 0x6c, 0x75, 0x9f, 0x6a, 0x79,
- 0x0a, 0x98, 0x86, 0xa8, 0xf0, 0xa2, 0x1b, 0x13, 0xab, 0x99, 0x27, 0xf9,
- 0xa3, 0x21, 0x0e, 0x2d, 0xae, 0x27, 0x4c, 0x31, 0x48, 0x73, 0xe1, 0x77,
- 0x06, 0x83, 0x81, 0x2f, 0x03, 0xc2, 0xdb, 0xa2, 0x1e, 0x27, 0x20, 0x8a,
- 0x07, 0xa8, 0x67, 0x58, 0xe3, 0x4d, 0x08, 0xf2, 0x10, 0xa6, 0xb7, 0x34,
- 0xdc, 0x45, 0xad, 0x11, 0xee, 0x68, 0x04, 0x36, 0x8d, 0xae, 0x76, 0xdb,
- 0xb5, 0x22, 0x03, 0xb7, 0x6d, 0x9b, 0xf0, 0xc8, 0xd8, 0xc4, 0xd6, 0x58,
- 0xc4, 0x48, 0xcd, 0x77, 0x7c, 0x2a, 0x73, 0x6b, 0xc1, 0x14, 0xcc, 0xe9,
- 0xfa, 0x52, 0x03, 0x15, 0x5b, 0x22, 0x8b, 0xa6, 0x43, 0xd1, 0x02, 0x37,
- 0xcc, 0xe4, 0xb2, 0x7b, 0x64, 0x72, 0x22, 0x5f, 0x94, 0xa3, 0x3f, 0xe6,
- 0x62, 0x1a, 0xb0, 0x1b, 0xc4, 0x61, 0xfe, 0x5a, 0x3b, 0x13, 0x31, 0xcd,
- 0xb2, 0xbe, 0x0c, 0xb9, 0x5f, 0xb3, 0x5f, 0x34, 0xc7, 0xbb, 0x88, 0x15,
- 0x1b, 0x8b, 0xc4, 0xb6, 0x6c, 0x06, 0x27, 0x97, 0x4e, 0xde, 0x9b, 0x49,
- 0x38, 0xc6, 0xab, 0x2f, 0x59, 0xd2, 0x96, 0xa0, 0x62, 0xdc, 0x43, 0xf3,
- 0x64, 0x1f, 0xf3, 0x8e, 0x8f, 0xad, 0x45, 0xe7, 0x1a, 0xaf, 0xad, 0x8d,
- 0xbf, 0x95, 0xab, 0xac, 0x8b, 0x56, 0x54, 0xac, 0xc9, 0x10, 0x94, 0x03,
- 0xbe, 0x17, 0xc5, 0xf7, 0x5c, 0x8d, 0x86, 0x68, 0x50, 0xdc, 0x64, 0x62,
- 0x91, 0x39, 0x0d, 0xec, 0x8a, 0x6e, 0x86, 0x56, 0xee, 0x39, 0xf6, 0xf5,
- 0x9e, 0x0d, 0x10, 0x56, 0x40, 0xde, 0xcc, 0x80, 0x97, 0xa2, 0x9c, 0x08,
- 0x83, 0x72, 0xa9, 0xa0, 0x6e, 0xaa, 0x39, 0x8f, 0x9c, 0x58, 0xf4, 0x50,
- 0xe9, 0x26, 0x45, 0x34, 0x20, 0xdb, 0x38, 0x24, 0x8a, 0xc2, 0x56, 0x4b,
- 0x6a, 0x7d, 0x5b, 0x27, 0xce, 0x1b, 0x0d, 0x73, 0x13, 0xcb, 0xd3, 0xf3,
- 0x6c, 0xde, 0x77, 0xf5, 0x85, 0x5c, 0xc4, 0x55, 0x9e, 0x5e, 0x5f, 0x8b,
- 0xc6, 0x16, 0xd5, 0xa7, 0xd6, 0x4e, 0x64, 0xa7, 0xbc, 0x2a, 0x1c, 0xb2,
- 0xb9, 0x5a, 0xb7, 0x9a, 0x97, 0xae, 0x8e, 0xa9, 0x5a, 0x5c, 0x2a, 0xc4,
- 0x6c, 0x1e, 0x48, 0xd9, 0xb7, 0x12, 0x75, 0x60, 0x90, 0x66, 0xc9, 0x66,
- 0xaf, 0xaa, 0xc7, 0xf8, 0xec, 0x62, 0x03, 0xe5, 0xed, 0xe7, 0x3e, 0xab,
- 0xd4, 0x36, 0x1d, 0xa0, 0x32, 0x3e, 0xde, 0x64, 0xc2, 0x76, 0xe5, 0x19,
- 0x5f, 0xc5, 0xf7, 0x2e, 0xd8, 0x49, 0x50, 0x76, 0x47, 0xb1, 0xd7, 0xb8,
- 0x36, 0xa2, 0x8a, 0x75, 0xb7, 0x40, 0xdd, 0x6a, 0xe5, 0x43, 0xd9, 0x5d,
- 0xe2, 0x91, 0x8d, 0xbc, 0x81, 0xd1, 0x83, 0xd1, 0xe9, 0xe9, 0x77, 0xcc,
- 0xa4, 0xe6, 0xce, 0x75, 0xfc, 0x0a, 0x93, 0xac, 0xad, 0xca, 0x20, 0x0a,
- 0x9a, 0x14, 0x33, 0x49, 0x16, 0xb2, 0x78, 0x19, 0x9b, 0x7a, 0xa9, 0xad,
- 0x45, 0x8d, 0xe5, 0x07, 0xda, 0x7e, 0xa0, 0x9a, 0x08, 0x8e, 0xac, 0x52,
- 0x55, 0xe1, 0x22, 0xe3, 0xbc, 0xb7, 0xd7, 0x66, 0xd9, 0x71, 0x9b, 0xd4,
- 0x41, 0xca, 0xc9, 0x48, 0x89, 0x00, 0x34, 0xc0, 0x02, 0x9d, 0x73, 0xd8,
- 0x1f, 0x4c, 0x63, 0x0e, 0x59, 0xc9, 0x24, 0x16, 0x00, 0x5b, 0x06, 0xa2,
- 0x86, 0x21, 0xad, 0xc6, 0x53, 0x1b, 0xc7, 0xcf, 0xc5, 0x66, 0x08, 0xad,
- 0x01, 0x96, 0x8e, 0x9b, 0x21, 0x2a, 0x41, 0x50, 0xee, 0xd8, 0x98, 0xfb,
- 0xe3, 0xe9, 0x97, 0xa3, 0xca, 0x19, 0xfd, 0xd0, 0x91, 0x3d, 0xbf, 0x38,
- 0xfb, 0xea, 0xe2, 0x78, 0x38, 0x8c, 0xde, 0x1c, 0x5f, 0x8a, 0xca, 0x7f,
- 0x29, 0x71, 0x70, 0x02, 0x4e, 0x0c, 0x37, 0x83, 0x21, 0x24, 0x58, 0xac,
- 0x89, 0xd9, 0x13, 0x80, 0xa6, 0x9a, 0xb1, 0x0b, 0x0d, 0xa2, 0x1c, 0xd4,
- 0xf9, 0xa9, 0x86, 0xcf, 0xdd, 0xc0, 0xd0, 0x8f, 0x60, 0x26, 0x78, 0x22,
- 0x9d, 0xdd, 0xdc, 0x5b, 0x53, 0x21, 0x23, 0x4b, 0x78, 0xd3, 0x8d, 0x71,
- 0x2e, 0x6f, 0x3d, 0xe7, 0xdb, 0x9b, 0x7e, 0x62, 0x7a, 0xbf, 0x8f, 0x2e,
- 0xad, 0x58, 0xf7, 0xef, 0x49, 0x0d, 0x56, 0xfa, 0xf8, 0x7d, 0xf4, 0x3d,
- 0xb5, 0x39, 0xa1, 0x55, 0xd7, 0x02, 0x8c, 0x43, 0x14, 0xd9, 0xf0, 0x85,
- 0x4c, 0x50, 0x02, 0x22, 0x2c, 0xae, 0xb3, 0xcc, 0xf3, 0x0f, 0x14, 0xfc,
- 0x45, 0xc2, 0xbc, 0x80, 0x0a, 0x68, 0x30, 0x9d, 0xeb, 0x99, 0xdf, 0x06,
- 0x50, 0xe6, 0x69, 0x72, 0x55, 0x42, 0x20, 0xe1, 0xee, 0xa8, 0xb9, 0x1d,
- 0x86, 0x2f, 0xdc, 0x7d, 0xc3, 0x1f, 0xed, 0x44, 0x4f, 0x3e, 0x7b, 0xbe,
- 0xf3, 0x99, 0xfc, 0x6a, 0xff, 0xbe, 0x78, 0xba, 0xa3, 0x30, 0xa0, 0xf4,
- 0xd7, 0xd3, 0xfd, 0xa7, 0xbb, 0xfb, 0x0c, 0x4f, 0xb4, 0xb3, 0xbf, 0x43,
- 0xff, 0xff, 0x54, 0x3f, 0x61, 0x0c, 0xa6, 0x17, 0x7b, 0x9f, 0x7d, 0x8a,
- 0x30, 0x18, 0xa6, 0x8f, 0x29, 0x75, 0xd2, 0x2f, 0xb3, 0x3e, 0x30, 0x1c,
- 0x20, 0x04, 0xfd, 0xbe, 0x6a, 0x90, 0x64, 0xbf, 0x3a, 0x17, 0x52, 0xe4,
- 0x89, 0xbb, 0xf2, 0xcc, 0x66, 0x5c, 0x95, 0x34, 0xfe, 0xb0, 0x84, 0xac,
- 0x9b, 0x86, 0xbe, 0x2d, 0x55, 0x3c, 0x01, 0x8a, 0x52, 0x79, 0x87, 0x44,
- 0x46, 0xc9, 0xa1, 0x0a, 0x5f, 0xfe, 0x25, 0x5d, 0x5b, 0xae, 0xe1, 0x06,
- 0x50, 0x55, 0x74, 0xab, 0xf4, 0xbd, 0xb1, 0x2c, 0x21, 0xd1, 0x48, 0x50,
- 0x9a, 0xb4, 0x56, 0x48, 0xf4, 0x97, 0xf6, 0x27, 0x06, 0x2c, 0x7e, 0x4b,
- 0xa9, 0x21, 0x6a, 0xf6, 0x66, 0x15, 0x55, 0xdb, 0xfa, 0xaa, 0x10, 0xcf,
- 0x86, 0xdf, 0x7e, 0xbf, 0x52, 0x41, 0xe5, 0x51, 0x87, 0x29, 0x22, 0xf5,
- 0x5c, 0x5a, 0xa6, 0xdc, 0x68, 0xee, 0xdd, 0x22, 0x6c, 0xef, 0x63, 0x9a,
- 0xf3, 0x33, 0x02, 0x05, 0xbb, 0x9d, 0xeb, 0x07, 0x9b, 0x93, 0x4a, 0x44,
- 0x9b, 0x2b, 0x16, 0x6a, 0xb8, 0x58, 0xae, 0xa2, 0x20, 0x5e, 0x75, 0x24,
- 0xdb, 0x97, 0x37, 0x54, 0xfc, 0x2c, 0x90, 0x19, 0x24, 0x82, 0xc2, 0x5d,
- 0x86, 0xdb, 0x5e, 0x9e, 0x37, 0xca, 0x6e, 0x74, 0xc5, 0xd4, 0x18, 0xf4,
- 0xa7, 0x7d, 0xe0, 0x3c, 0xb9, 0x43, 0xf7, 0xe8, 0xd4, 0x7c, 0x70, 0xbb,
- 0xab, 0x66, 0xb3, 0xe9, 0x82, 0xc5, 0xdb, 0x8e, 0xa4, 0x7f, 0x0e, 0xf1,
- 0xe3, 0xae, 0xb9, 0xf0, 0x22, 0x42, 0x29, 0x23, 0x45, 0x32, 0x66, 0xb8,
- 0x2d, 0x06, 0xa7, 0xdd, 0x32, 0x16, 0xd6, 0xff, 0xc4, 0xc5, 0x6b, 0xe1,
- 0x5e, 0x53, 0x40, 0xf6, 0x58, 0x28, 0x7f, 0x1a, 0xa6, 0x95, 0x55, 0xa0,
- 0xd8, 0x43, 0x10, 0xd8, 0x0d, 0xa9, 0x2d, 0x4c, 0x37, 0x2d, 0xdd, 0x1c,
- 0x41, 0xd9, 0xae, 0xdf, 0x6d, 0x6c, 0x0c, 0xcf, 0x8f, 0x8f, 0x8f, 0xa2,
- 0xd3, 0x93, 0x37, 0x27, 0x97, 0x81, 0x40, 0xee, 0x2e, 0x12, 0x33, 0xb8,
- 0x16, 0x56, 0xbb, 0xa5, 0xba, 0x1c, 0x1e, 0x75, 0x50, 0xfa, 0xb3, 0xab,
- 0x7c, 0x96, 0x68, 0x1a, 0xc3, 0xb4, 0xfe, 0x1e, 0x54, 0x6f, 0x00, 0x55,
- 0xa0, 0xbe, 0x86, 0x17, 0xe8, 0x0a, 0x12, 0x6e, 0xc6, 0xae, 0xca, 0x4f,
- 0xff, 0x07, 0x0d, 0xd0, 0xa8, 0x4a, 0x4e, 0x0a, 0x9e, 0xe6, 0x8a, 0x38,
- 0x69, 0x50, 0x6b, 0x6d, 0x54, 0xbc, 0xb6, 0xc9, 0x54, 0x0b, 0x89, 0x3a,
- 0x0b, 0x1d, 0xe2, 0xf5, 0xee, 0x13, 0x24, 0xc4, 0xce, 0x52, 0x81, 0x70,
- 0x0e, 0x83, 0x89, 0x5d, 0xd5, 0x94, 0xcb, 0x4c, 0xf8, 0x78, 0xd8, 0x63,
- 0x58, 0xd0, 0xca, 0x22, 0x69, 0xad, 0xaf, 0xb0, 0x54, 0xd2, 0x93, 0x1d,
- 0x97, 0x2f, 0xb0, 0x00, 0xcf, 0x51, 0x51, 0x9f, 0x3b, 0xdb, 0x8d, 0x48,
- 0x1e, 0x59, 0xb2, 0x54, 0x9f, 0x2f, 0xe7, 0x8d, 0xeb, 0xee, 0x07, 0x79,
- 0x97, 0xe6, 0xff, 0x7c, 0x07, 0xd7, 0xdb, 0x55, 0x9c, 0xf7, 0x49, 0xf2,
- 0x5a, 0xf5, 0xcd, 0xb8, 0x2a, 0x14, 0xa1, 0x81, 0xc6, 0x62, 0xfa, 0x49,
- 0x7c, 0x8d, 0x8f, 0x9a, 0xb4, 0xe8, 0x93, 0x3e, 0x32, 0xb8, 0x24, 0xa7,
- 0x7a, 0x00, 0x78, 0xea, 0xbd, 0x08, 0x15, 0xaa, 0x5d, 0xe8, 0xb3, 0xc8,
- 0x3a, 0x1e, 0x58, 0xcf, 0x76, 0xd1, 0xf3, 0x28, 0x54, 0x3d, 0xcd, 0xd4,
- 0x39, 0x94, 0xf2, 0x34, 0x75, 0x2e, 0x4d, 0xd1, 0x7a, 0x16, 0xed, 0x7e,
- 0xc6, 0xf3, 0xf8, 0xb8, 0xf9, 0x70, 0x2d, 0x0b, 0x8b, 0x62, 0x13, 0x75,
- 0x21, 0xf3, 0xbb, 0x29, 0x79, 0x09, 0x40, 0x2b, 0x97, 0xd5, 0xb5, 0x68,
- 0x58, 0x44, 0xeb, 0xb1, 0x7e, 0xa2, 0xae, 0x74, 0x58, 0xa6, 0xe0, 0xdb,
- 0x16, 0x09, 0x09, 0x55, 0x1b, 0x65, 0x5d, 0xd8, 0xd6, 0x2a, 0xd1, 0x7a,
- 0xdd, 0xdc, 0x67, 0xcc, 0x61, 0x19, 0xd8, 0x3a, 0x42, 0xb4, 0x76, 0x9f,
- 0x4e, 0x20, 0x55, 0x9b, 0x11, 0x00, 0xf4, 0x27, 0xc4, 0x27, 0x41, 0xd2,
- 0x70, 0x5d, 0xc2, 0xe7, 0xe9, 0x46, 0xa6, 0x02, 0x0c, 0x2f, 0x6b, 0x06,
- 0xe3, 0xc2, 0x26, 0xe4, 0x07, 0x2e, 0xc3, 0x52, 0x75, 0x0d, 0x30, 0x6b,
- 0xee, 0xf8, 0x5e, 0x38, 0x70, 0xbf, 0x2c, 0xa7, 0x66, 0x57, 0xf0, 0x75,
- 0x16, 0xaa, 0x73, 0xe6, 0x64, 0xfe, 0x60, 0xda, 0xbb, 0x3b, 0x24, 0xbf,
- 0x4e, 0xb3, 0x7a, 0x41, 0xb6, 0xa6, 0x52, 0x8a, 0x69, 0xf5, 0xb1, 0x3a,
- 0xbb, 0x3b, 0xdf, 0xac, 0x5f, 0x75, 0x80, 0xb4, 0x3e, 0xfa, 0xf2, 0xde,
- 0xd3, 0x47, 0x36, 0xed, 0x2c, 0x77, 0x15, 0x76, 0x3c, 0xd0, 0x88, 0x77,
- 0xc0, 0x34, 0xb6, 0x8d, 0x08, 0x3f, 0xb9, 0x8e, 0x51, 0x82, 0xfd, 0x91,
- 0xd1, 0x5b, 0x82, 0x46, 0x6d, 0x28, 0x6f, 0x34, 0x1c, 0x5b, 0xbe, 0x2c,
- 0xd8, 0x42, 0xb6, 0x00, 0xdc, 0x90, 0x57, 0x63, 0x5d, 0x4a, 0xa7, 0xe4,
- 0x78, 0x07, 0x6f, 0x0b, 0xe7, 0xec, 0x55, 0x99, 0x84, 0x51, 0x4f, 0x9e,
- 0x5c, 0x2f, 0x25, 0x89, 0x3a, 0x13, 0xb5, 0x9f, 0xf1, 0x18, 0xf5, 0xbc,
- 0x12, 0x6f, 0xe6, 0xc8, 0x21, 0xa1, 0x27, 0x30, 0xde, 0x71, 0x6c, 0x22,
- 0xab, 0x88, 0x1c, 0xf5, 0x8b, 0x81, 0xed, 0xb3, 0x63, 0x76, 0x86, 0x81,
- 0x1b, 0xc8, 0xf1, 0x0a, 0x4b, 0x3d, 0x49, 0x15, 0xa4, 0x01, 0x32, 0x14,
- 0x85, 0x50, 0x1c, 0xb3, 0xe7, 0xbc, 0x2e, 0x76, 0x8a, 0x95, 0xe2, 0x21,
- 0x40, 0x03, 0x3d, 0xa5, 0x5a, 0xb4, 0xe4, 0xba, 0x62, 0x8e, 0x5f, 0x58,
- 0x0a, 0xaa, 0xc0, 0xc4, 0xb2, 0xdd, 0xff, 0xf0, 0xec, 0xed, 0xeb, 0x93,
- 0xaf, 0x1c, 0xb0, 0x85, 0x30, 0xf1, 0x65, 0x99, 0xb1, 0x5d, 0x53, 0x8c,
- 0x86, 0xae, 0x08, 0x97, 0x73, 0x78, 0x6b, 0xa5, 0x0d, 0x0d, 0xbb, 0x25,
- 0xf6, 0xf4, 0x3e, 0xfc, 0x00, 0x0c, 0x64, 0xfe, 0x84, 0x6d, 0xe5, 0x92,
- 0x3d, 0x5e, 0x6c, 0x79, 0xcb, 0x43, 0x0d, 0x7a, 0x47, 0xd2, 0x33, 0xe2,
- 0xbc, 0x5c, 0x2e, 0x5c, 0xf4, 0x60, 0x50, 0xa9, 0x43, 0x01, 0x24, 0xf9,
- 0x56, 0xe0, 0x8a, 0xd1, 0xcb, 0x85, 0xb0, 0x26, 0x89, 0x7a, 0xac, 0x1a,
- 0x76, 0xe5, 0x0e, 0x60, 0xcb, 0x82, 0xa6, 0xdb, 0xeb, 0x05, 0xd0, 0x08,
- 0xc9, 0x99, 0x32, 0x1e, 0x56, 0x18, 0x28, 0x6f, 0xae, 0x1c, 0x2e, 0xd3,
- 0x25, 0x13, 0xb5, 0x22, 0x4b, 0x33, 0xd1, 0xcc, 0x78, 0xde, 0x52, 0xbb,
- 0xf5, 0x07, 0x57, 0xc5, 0x56, 0xc3, 0x7e, 0xbd, 0xab, 0xa8, 0x70, 0x25,
- 0x49, 0x5d, 0x68, 0x92, 0x0c, 0x16, 0x21, 0x84, 0x45, 0x4f, 0x5c, 0x9e,
- 0xf8, 0xe4, 0x15, 0x7b, 0x68, 0xf6, 0x07, 0x28, 0x74, 0x89, 0xf8, 0x9d,
- 0xb0, 0x06, 0x95, 0x72, 0x49, 0x0f, 0x76, 0x7a, 0x72, 0x15, 0xa4, 0x94,
- 0x49, 0x88, 0xa0, 0x11, 0x9d, 0x98, 0x8b, 0xd9, 0xd6, 0xd2, 0xfd, 0xa4,
- 0xdb, 0x2f, 0x56, 0xb3, 0x51, 0x36, 0xb5, 0x8c, 0x0b, 0x97, 0x54, 0x6d,
- 0x0f, 0x95, 0x34, 0x0d, 0xc4, 0x0c, 0x4a, 0xd1, 0x41, 0x74, 0x1d, 0x58,
- 0x28, 0x7d, 0x98, 0x94, 0x1f, 0xbf, 0xa0, 0xeb, 0xc3, 0x53, 0x64, 0xb3,
- 0x70, 0x19, 0xfe, 0xc9, 0x7c, 0x3c, 0xcd, 0x94, 0xaa, 0x39, 0x31, 0x16,
- 0x2b, 0x55, 0x9d, 0x3a, 0xfb, 0xfe, 0xb2, 0x25, 0x1b, 0x3b, 0x80, 0x9c,
- 0x4d, 0xe2, 0x0e, 0x1b, 0x87, 0xbf, 0xb3, 0x09, 0xf2, 0xdb, 0xf2, 0x85,
- 0x86, 0xe3, 0x1b, 0x34, 0x02, 0x35, 0x24, 0x50, 0xdb, 0x34, 0xd4, 0xbf,
- 0x88, 0x6d, 0x51, 0x3c, 0x80, 0x3f, 0x58, 0xe7, 0xf6, 0x68, 0x6d, 0xe9,
- 0x89, 0x9e, 0xe2, 0xfc, 0x5a, 0x31, 0x87, 0xd4, 0xa9, 0x06, 0x25, 0xd1,
- 0x01, 0xa0, 0x3b, 0x1b, 0x25, 0x0b, 0x25, 0x2e, 0x5c, 0x06, 0xe2, 0xd3,
- 0x52, 0x92, 0xfa, 0x34, 0xfd, 0x49, 0xac, 0x93, 0x8e, 0x10, 0x03, 0x8e,
- 0xf3, 0x89, 0x0b, 0x49, 0x89, 0xfd, 0x5d, 0x66, 0xc8, 0xcc, 0xde, 0x54,
- 0xab, 0x97, 0x59, 0xf0, 0x1a, 0xdb, 0xf3, 0xa0, 0x09, 0x27, 0x6a, 0x43,
- 0x91, 0xae, 0x20, 0x4b, 0x30, 0xe0, 0x16, 0xb2, 0x7e, 0x92, 0xc2, 0x37,
- 0x21, 0xdf, 0xbf, 0xd2, 0x14, 0x73, 0x3a, 0xcf, 0x0a, 0x1a, 0xa0, 0x60,
- 0x48, 0x9f, 0xed, 0xa8, 0x25, 0xae, 0xd4, 0x38, 0xd5, 0x22, 0x3a, 0xb8,
- 0x38, 0x26, 0xc9, 0xf6, 0x7a, 0x8e, 0xa4, 0x70, 0x1e, 0x61, 0xa9, 0xfb,
- 0x03, 0xc1, 0x9a, 0x57, 0x41, 0xcf, 0x07, 0x77, 0x78, 0x1f, 0xbc, 0xc9,
- 0xc4, 0xa4, 0xf1, 0x01, 0x74, 0xc8, 0x5c, 0x00, 0x1a, 0x93, 0xdc, 0xd8,
- 0xc0, 0xfa, 0xc0, 0x75, 0x38, 0xbb, 0x5b, 0x48, 0x8a, 0xbd, 0x25, 0xd4,
- 0x55, 0x66, 0x40, 0x7d, 0xe7, 0x0d, 0xb6, 0x1e, 0x22, 0xf4, 0xd9, 0x5a,
- 0xe3, 0x54, 0xfb, 0x1c, 0x84, 0xbf, 0x19, 0xce, 0x98, 0xf6, 0x55, 0xf1,
- 0x80, 0x7a, 0x72, 0xea, 0xb5, 0x5b, 0x8f, 0xfe, 0x86, 0x7b, 0x86, 0x65,
- 0x91, 0xba, 0x5c, 0x90, 0xb8, 0xd0, 0x7a, 0x31, 0x64, 0x4f, 0x02, 0xe1,
- 0x57, 0xf2, 0xf1, 0x38, 0xb8, 0x5a, 0x6c, 0xd4, 0x2c, 0xfc, 0xc4, 0x45,
- 0x62, 0x15, 0x95, 0xa0, 0x0e, 0x4c, 0xf4, 0xac, 0x32, 0x55, 0x70, 0x9c,
- 0xf0, 0x88, 0x81, 0x36, 0x6e, 0x45, 0x00, 0x08, 0xf9, 0x53, 0xab, 0x99,
- 0xf7, 0x13, 0x37, 0x5b, 0x3f, 0x06, 0xf7, 0x25, 0x7f, 0xf4, 0xca, 0xe1,
- 0x0e, 0xf1, 0x28, 0x06, 0xdc, 0x11, 0x58, 0x2a, 0xdc, 0xa7, 0xfc, 0x0b,
- 0x3e, 0x46, 0xc0, 0x9b, 0xa1, 0xb7, 0x55, 0xb0, 0x43, 0x14, 0xf2, 0x3d,
- 0x1c, 0x88, 0xf8, 0xf8, 0xc0, 0xa1, 0x47, 0xa1, 0x68, 0x1c, 0x54, 0x39,
- 0x62, 0x53, 0x0e, 0x67, 0xf0, 0xda, 0x81, 0x2f, 0x92, 0x4a, 0x55, 0x24,
- 0x97, 0x22, 0xd4, 0xe9, 0x77, 0x68, 0x2d, 0xba, 0xd3, 0xa9, 0x67, 0xf8,
- 0xf6, 0x18, 0xef, 0x2a, 0xb2, 0xe9, 0xbc, 0xc0, 0xa4, 0xbc, 0x8b, 0xf1,
- 0xa4, 0x57, 0x95, 0xdc, 0x06, 0xae, 0xc7, 0xc1, 0xa9, 0x3f, 0x0e, 0xfb,
- 0x05, 0xf9, 0x21, 0x08, 0x17, 0xb8, 0x4b, 0x0b, 0xf3, 0x43, 0x12, 0x6d,
- 0x8f, 0x35, 0x36, 0x42, 0x12, 0xa9, 0x93, 0x72, 0x1c, 0x2c, 0x65, 0x32,
- 0xbe, 0xc9, 0x24, 0x9c, 0x96, 0x16, 0x2d, 0x48, 0xbb, 0xec, 0x44, 0xff,
- 0xa5, 0x34, 0xf0, 0x8d, 0xcf, 0xd6, 0x63, 0x42, 0x18, 0x08, 0xaa, 0xd6,
- 0xc0, 0x13, 0xc4, 0xf1, 0xf7, 0x97, 0x17, 0x07, 0xd1, 0xd7, 0xc7, 0x07,
- 0x47, 0xc7, 0x17, 0xc3, 0xda, 0xa5, 0xaf, 0x51, 0x20, 0x22, 0xa1, 0xb1,
- 0x3d, 0x18, 0xa2, 0xb1, 0xe5, 0xfc, 0x6b, 0xc0, 0xbe, 0x71, 0xbd, 0x78,
- 0x85, 0x83, 0x44, 0xe7, 0x83, 0x15, 0x22, 0x71, 0x1c, 0x70, 0x54, 0x1a,
- 0x47, 0x3e, 0x67, 0x41, 0x1b, 0x5a, 0xfa, 0xd7, 0x59, 0xcf, 0xc3, 0x54,
- 0x19, 0x0f, 0xe7, 0xe4, 0x2f, 0x93, 0x49, 0x66, 0x59, 0x80, 0xd5, 0x9d,
- 0xfb, 0xda, 0x27, 0x5c, 0x07, 0x6c, 0x4b, 0x2f, 0x19, 0x35, 0x20, 0x76,
- 0xbe, 0xef, 0x53, 0xbf, 0x7d, 0x5a, 0xfc, 0x3e, 0x23, 0x6e, 0xad, 0x92,
- 0xa2, 0x53, 0xb3, 0x06, 0x56, 0xbb, 0xdf, 0x90, 0x02, 0x97, 0x8d, 0x93,
- 0xf4, 0x75, 0x6b, 0x4b, 0x7c, 0xba, 0xa6, 0x5c, 0x19, 0xa0, 0xae, 0x41,
- 0xe0, 0x52, 0x0d, 0x84, 0x64, 0x3d, 0x41, 0x8d, 0xbc, 0x16, 0x8d, 0x53,
- 0xf2, 0x6a, 0xa6, 0x86, 0x85, 0x61, 0x20, 0x3a, 0x05, 0xc8, 0x3a, 0x69,
- 0xa9, 0x97, 0x3a, 0xec, 0x22, 0x06, 0x07, 0x49, 0xc3, 0xd2, 0x87, 0xc2,
- 0xfb, 0x01, 0xbe, 0x10, 0x0d, 0xd0, 0x2f, 0x2a, 0xae, 0x52, 0xb5, 0x8b,
- 0x6a, 0x71, 0x1a, 0x6d, 0x8e, 0xc7, 0xe0, 0x68, 0xde, 0xe2, 0xfa, 0xb9,
- 0x4b, 0x03, 0xc6, 0xd6, 0x77, 0x25, 0x18, 0x8c, 0x95, 0x7a, 0x98, 0x3a,
- 0x39, 0xdc, 0x4c, 0x36, 0xde, 0xe4, 0xd5, 0x20, 0x09, 0x28, 0x24, 0x66,
- 0x14, 0xf1, 0x40, 0xe0, 0xb8, 0x7b, 0x2e, 0x89, 0xbe, 0xce, 0x0a, 0xdc,
- 0x05, 0xcd, 0xc7, 0xf9, 0x92, 0x6f, 0x5b, 0x7e, 0xbc, 0xa1, 0xae, 0x2e,
- 0x07, 0x79, 0x07, 0x8c, 0x48, 0xb0, 0xaf, 0xf3, 0x83, 0xcb, 0xaf, 0xe1,
- 0x68, 0x05, 0x09, 0x1f, 0x01, 0xe9, 0xc1, 0xdc, 0x6b, 0xcd, 0x5c, 0x2c,
- 0xa7, 0xc0, 0x89, 0xfc, 0x6b, 0xd8, 0x5d, 0x26, 0x4f, 0xc2, 0x91, 0x07,
- 0x13, 0x25, 0xa0, 0x80, 0x52, 0x35, 0x3c, 0x56, 0x4b, 0xcb, 0x20, 0xea,
- 0xdd, 0x25, 0xda, 0xb9, 0xb0, 0xcb, 0xae, 0x64, 0xa2, 0x77, 0x65, 0x4e,
- 0x20, 0x7a, 0x16, 0xe6, 0x58, 0xe3, 0x09, 0x91, 0x14, 0xf1, 0xc5, 0x95,
- 0xa6, 0xd8, 0xf6, 0x68, 0x4f, 0xdb, 0xa1, 0xb1, 0x82, 0x23, 0xfd, 0xc5,
- 0x6c, 0x35, 0x68, 0xe2, 0x86, 0x44, 0x5f, 0x2e, 0xcb, 0x2a, 0x5b, 0xa9,
- 0xe1, 0x39, 0x3a, 0xc9, 0x32, 0xcf, 0xb2, 0xb2, 0x8a, 0x88, 0x88, 0xd5,
- 0x91, 0x13, 0x2d, 0x18, 0x68, 0x32, 0x16, 0x6e, 0x6a, 0xae, 0x72, 0x77,
- 0x28, 0x18, 0xc6, 0xa3, 0x22, 0x9b, 0x2e, 0xcb, 0x20, 0xf0, 0xfa, 0x97,
- 0x8d, 0x39, 0x18, 0xf4, 0xe6, 0xc9, 0x20, 0x31, 0x82, 0xe2, 0xc8, 0xe1,
- 0x3c, 0x26, 0x4d, 0x9f, 0xab, 0xc0, 0xb2, 0xdf, 0x31, 0xcf, 0xe6, 0xd5,
- 0xea, 0x27, 0x88, 0xf1, 0xde, 0xda, 0xd8, 0x18, 0xda, 0x66, 0x33, 0xf8,
- 0x5e, 0x73, 0xd3, 0x81, 0x13, 0x01, 0x84, 0x3f, 0xf1, 0x1b, 0x8c, 0xe9,
- 0x17, 0xc3, 0x43, 0x4a, 0x64, 0x4f, 0xc1, 0xc2, 0x65, 0x8f, 0xd3, 0xa2,
- 0x3a, 0x29, 0x7c, 0xe5, 0x3c, 0x17, 0x96, 0x58, 0x76, 0x99, 0x19, 0x50,
- 0xae, 0x7a, 0xee, 0x3c, 0x41, 0x54, 0x52, 0xd3, 0x5b, 0x11, 0x33, 0xf9,
- 0x12, 0x50, 0x70, 0x2e, 0x1f, 0x95, 0xcb, 0x83, 0xdc, 0xfe, 0xef, 0xed,
- 0xa8, 0x27, 0x30, 0x37, 0x2d, 0x60, 0x23, 0xcb, 0xe8, 0xff, 0x43, 0x08,
- 0x96, 0x82, 0x15, 0x72, 0x9b, 0x35, 0x84, 0xbf, 0x01, 0xa9, 0x50, 0x37,
- 0xf9, 0xd8, 0x53, 0x3f, 0x49, 0x07, 0xc9, 0x3d, 0xeb, 0x2f, 0xa6, 0x23,
- 0xf0, 0x17, 0x96, 0x65, 0xea, 0x81, 0x63, 0x80, 0x77, 0x71, 0xe5, 0xac,
- 0x7a, 0x5c, 0x38, 0x4a, 0xca, 0x28, 0x89, 0x58, 0x8f, 0x2a, 0x02, 0xe6,
- 0x41, 0xdd, 0x88, 0x2a, 0x7a, 0x7b, 0x11, 0x15, 0x99, 0xfc, 0xb4, 0x6c,
- 0x23, 0x8d, 0xf1, 0x52, 0xf2, 0x57, 0x35, 0x4a, 0x2b, 0xb6, 0x68, 0x19,
- 0x33, 0x8b, 0x3b, 0x95, 0xb0, 0x3a, 0x73, 0x4c, 0xda, 0x18, 0x4d, 0x08,
- 0x60, 0xbf, 0x25, 0x80, 0xcf, 0x70, 0xd9, 0x14, 0xbe, 0x30, 0x2a, 0x92,
- 0xb5, 0xb9, 0xea, 0x90, 0x29, 0x32, 0x76, 0xa3, 0x5a, 0x02, 0x87, 0xdb,
- 0x28, 0x3f, 0x7a, 0xbd, 0xfa, 0x91, 0x10, 0x0f, 0x1f, 0xdd, 0x7d, 0x9c,
- 0x96, 0xa1, 0x44, 0x60, 0x33, 0x22, 0x0d, 0x4f, 0xe1, 0xea, 0x47, 0xab,
- 0x4a, 0x68, 0x8a, 0x8f, 0xdb, 0xbc, 0xe6, 0xfc, 0x0e, 0xb5, 0x48, 0x29,
- 0x96, 0x08, 0xcc, 0x5f, 0x37, 0xa9, 0x46, 0x97, 0xca, 0xa2, 0x9b, 0x39,
- 0x90, 0xed, 0x19, 0x30, 0xef, 0x71, 0x68, 0x81, 0xf7, 0xae, 0xba, 0x00,
- 0x88, 0x41, 0xf3, 0xb4, 0x0c, 0x1c, 0xea, 0x9e, 0xde, 0x20, 0x27, 0x61,
- 0x26, 0x39, 0x56, 0xc5, 0x85, 0x3b, 0x7f, 0x54, 0xd7, 0x61, 0x7f, 0x1c,
- 0xc5, 0x3a, 0x8f, 0xfc, 0x7a, 0x14, 0x72, 0x95, 0xec, 0xed, 0x42, 0x25,
- 0x95, 0xc0, 0x0d, 0x80, 0xd8, 0x59, 0x39, 0xab, 0x4a, 0xf5, 0x91, 0x60,
- 0xdd, 0x51, 0x2f, 0x13, 0x18, 0x89, 0x96, 0x64, 0xaf, 0x7e, 0x66, 0x91,
- 0x08, 0x03, 0x8f, 0x53, 0xa5, 0xec, 0x89, 0x24, 0x6e, 0x17, 0x65, 0xbe,
- 0x1c, 0x57, 0x00, 0xab, 0x40, 0x0c, 0x15, 0xff, 0xbc, 0x5b, 0xde, 0x2c,
- 0xd4, 0xea, 0x37, 0xe3, 0x4a, 0x1a, 0x8b, 0x3e, 0x19, 0x76, 0xb1, 0x25,
- 0x65, 0x40, 0xb5, 0x08, 0x32, 0xb4, 0x13, 0x1a, 0xbf, 0x23, 0xb0, 0xfe,
- 0xb9, 0x4b, 0xa2, 0xaf, 0xe0, 0x7e, 0x49, 0x4a, 0x42, 0x70, 0xeb, 0xaa,
- 0x08, 0x06, 0x91, 0x23, 0x8f, 0x14, 0x81, 0x0c, 0x02, 0x0d, 0x1b, 0x2b,
- 0x37, 0x1c, 0x4a, 0x18, 0x75, 0xd7, 0xf7, 0x75, 0x3f, 0xa9, 0xbf, 0x6d,
- 0x5a, 0x48, 0x03, 0xde, 0x77, 0x65, 0x1d, 0x0a, 0x8f, 0x34, 0x56, 0x8b,
- 0x55, 0x4d, 0xa6, 0x34, 0x65, 0x27, 0x19, 0xca, 0x49, 0x9c, 0xe9, 0xfa,
- 0x0d, 0x5c, 0x25, 0x4e, 0x2b, 0x77, 0x5a, 0x13, 0x24, 0x9a, 0xb7, 0xe2,
- 0xb9, 0xa0, 0x90, 0x34, 0x88, 0xe8, 0xc8, 0xac, 0xa9, 0x60, 0x36, 0x58,
- 0x30, 0xd6, 0x69, 0x6c, 0x93, 0x4e, 0xce, 0x5d, 0x17, 0x34, 0x04, 0x9e,
- 0x71, 0x77, 0x9a, 0xec, 0x74, 0x83, 0xba, 0x14, 0x9b, 0x12, 0xf5, 0x9f,
- 0x41, 0xef, 0x61, 0xcb, 0x21, 0x26, 0x28, 0x76, 0x0b, 0x8e, 0x70, 0xdb,
- 0x6a, 0x19, 0x0a, 0x35, 0xf1, 0x4b, 0x07, 0xb3, 0xfb, 0x62, 0x6f, 0xb0,
- 0xfb, 0xfc, 0xb3, 0xc1, 0xce, 0x60, 0x77, 0x87, 0x39, 0x0b, 0x0f, 0x25,
- 0x18, 0x9c, 0xac, 0x4b, 0x4b, 0x57, 0x95, 0xf7, 0x9a, 0x7d, 0xbe, 0x3d,
- 0xbe, 0xfc, 0xee, 0xec, 0xe2, 0x9b, 0xe8, 0xe4, 0xed, 0xe5, 0xf1, 0xc5,
- 0xeb, 0x83, 0xc3, 0x8f, 0x85, 0x1e, 0x0e, 0x0d, 0xd6, 0x41, 0x21, 0xc2,
- 0xc4, 0x2f, 0x4c, 0xd3, 0x2a, 0xe8, 0xd7, 0x2c, 0x29, 0x6f, 0x76, 0xf6,
- 0x77, 0x1f, 0xc5, 0x2b, 0x6d, 0x31, 0x0c, 0xfa, 0xf7, 0x6d, 0x52, 0xbb,
- 0x3c, 0xa9, 0xf5, 0xad, 0x38, 0x14, 0xb4, 0xa1, 0x04, 0x58, 0xb9, 0xe0,
- 0x5c, 0x30, 0x78, 0x14, 0x25, 0x48, 0x47, 0x79, 0x6c, 0x26, 0xa9, 0x91,
- 0x80, 0x26, 0x4a, 0x46, 0xad, 0xe2, 0xbb, 0x68, 0x10, 0xba, 0xb2, 0x5b,
- 0x8e, 0x51, 0x5e, 0xa6, 0xd3, 0x52, 0x0d, 0x29, 0x82, 0x81, 0x38, 0x81,
- 0x70, 0x67, 0x0c, 0xd9, 0x0a, 0xf3, 0xa2, 0x2e, 0x2f, 0x0a, 0x73, 0x49,
- 0x61, 0xde, 0x89, 0x4b, 0x14, 0x71, 0xc0, 0x03, 0x95, 0x74, 0x1b, 0x8c,
- 0xb5, 0x5a, 0xb7, 0x31, 0x8c, 0xa1, 0xad, 0x01, 0x10, 0x16, 0x16, 0xdb,
- 0x8c, 0x89, 0x55, 0x8c, 0xa2, 0x87, 0x3a, 0x10, 0x9c, 0x86, 0x60, 0x34,
- 0xd2, 0x15, 0x44, 0x29, 0x03, 0xbd, 0xad, 0xc2, 0x67, 0xca, 0xed, 0x84,
- 0xe4, 0x09, 0x91, 0xfc, 0x0c, 0x9f, 0x9b, 0x5b, 0x2f, 0x2a, 0xb0, 0x6a,
- 0x91, 0x14, 0x8a, 0x08, 0x5f, 0x17, 0x21, 0x1b, 0x21, 0x9a, 0x93, 0x3c,
- 0xbe, 0xe7, 0xfa, 0x33, 0x22, 0x36, 0xf8, 0x60, 0xc6, 0xa0, 0xd8, 0x05,
- 0x8b, 0x4c, 0x7e, 0xcd, 0xa3, 0xf3, 0xe3, 0x37, 0x7d, 0xab, 0x83, 0x47,
- 0xbf, 0x8b, 0x19, 0xca, 0x60, 0x37, 0x25, 0xb9, 0x67, 0x91, 0xcc, 0x2d,
- 0xa0, 0x06, 0x3c, 0x51, 0x23, 0x80, 0xc2, 0x09, 0xf0, 0xa1, 0x11, 0x8b,
- 0x84, 0xf0, 0x5a, 0xc5, 0x2f, 0xb3, 0x4b, 0xab, 0x05, 0x01, 0x8f, 0xf7,
- 0x53, 0xa3, 0x96, 0xa3, 0x4d, 0x17, 0xa9, 0xcb, 0xfd, 0x21, 0x1c, 0x15,
- 0xd1, 0x02, 0x2e, 0x40, 0x20, 0xb3, 0x64, 0xeb, 0xf3, 0x6f, 0x0e, 0x87,
- 0x9f, 0xec, 0xee, 0xe9, 0x70, 0xb6, 0x06, 0x1e, 0xce, 0xb2, 0x91, 0x87,
- 0x0f, 0x76, 0x1d, 0x8e, 0xd1, 0xb2, 0xaa, 0x71, 0xc0, 0xb1, 0x19, 0x9b,
- 0x2e, 0x33, 0x68, 0xab, 0x92, 0x1a, 0xb4, 0x21, 0xd5, 0x47, 0x4d, 0xb8,
- 0x74, 0x75, 0xea, 0xd8, 0x19, 0x82, 0x6a, 0x0b, 0x5a, 0xef, 0xa0, 0x74,
- 0xf1, 0x7e, 0xf1, 0xdc, 0x3e, 0x92, 0x96, 0xb5, 0x35, 0xa4, 0x8d, 0xfb,
- 0x98, 0x96, 0xfa, 0x9e, 0xf3, 0x7a, 0xfb, 0x6f, 0x19, 0x35, 0x51, 0x2f,
- 0x75, 0xc3, 0xe5, 0xf1, 0xdd, 0xe0, 0x00, 0x68, 0x08, 0xfb, 0xc4, 0x2a,
- 0xaa, 0xcc, 0x3d, 0xa0, 0x3b, 0x3f, 0x7d, 0x46, 0x1b, 0x45, 0x27, 0x4b,
- 0xa0, 0x1a, 0x98, 0x29, 0x64, 0x53, 0x56, 0x5a, 0xdc, 0x23, 0x47, 0x39,
- 0x03, 0xe7, 0x2f, 0x24, 0x98, 0xf4, 0xed, 0x20, 0xfa, 0x3a, 0x99, 0x17,
- 0x5a, 0xad, 0xd8, 0x92, 0xaf, 0x10, 0x1c, 0xc8, 0x45, 0x93, 0x50, 0xe2,
- 0xe6, 0x34, 0x89, 0x15, 0x44, 0x90, 0x78, 0x5d, 0x21, 0xba, 0xad, 0x95,
- 0x77, 0x88, 0x39, 0x44, 0x0f, 0x37, 0x91, 0x1a, 0x68, 0x51, 0xe3, 0x30,
- 0x2d, 0xb4, 0x81, 0xcd, 0x2a, 0x14, 0x20, 0xa0, 0xa9, 0xd1, 0x9c, 0x1e,
- 0x73, 0x78, 0x99, 0xd4, 0x9e, 0x7c, 0x03, 0xac, 0x55, 0xb6, 0x13, 0x8a,
- 0xae, 0xe5, 0x99, 0xca, 0x24, 0xbf, 0x61, 0xa3, 0x47, 0x41, 0xd7, 0x4d,
- 0x3c, 0x1f, 0xaf, 0x06, 0x13, 0x92, 0x62, 0xd9, 0x6c, 0x36, 0x58, 0xde,
- 0x6e, 0x07, 0xc7, 0x94, 0x59, 0xfe, 0x8d, 0xc0, 0x02, 0x54, 0x4d, 0xde,
- 0x56, 0x9f, 0xaf, 0x89, 0xda, 0x15, 0x57, 0xce, 0x04, 0x93, 0x84, 0x25,
- 0xf8, 0xcb, 0xf1, 0x5c, 0x8b, 0x6f, 0x75, 0x1c, 0x39, 0x98, 0x4f, 0x6e,
- 0x61, 0xb0, 0x48, 0x66, 0xfb, 0x2e, 0x05, 0xd9, 0xf8, 0x83, 0xa2, 0x83,
- 0x3b, 0x95, 0x22, 0x30, 0xcf, 0xce, 0x93, 0xeb, 0xa9, 0x0a, 0x14, 0xa1,
- 0xd2, 0xe2, 0x61, 0x5b, 0x9b, 0x69, 0x20, 0xa2, 0xea, 0xc0, 0x03, 0x81,
- 0xe2, 0x4b, 0xc4, 0xa9, 0x66, 0xa8, 0x8a, 0x62, 0x8c, 0x5f, 0x4b, 0xc2,
- 0xfa, 0x46, 0x14, 0x2c, 0x04, 0x88, 0xa3, 0x2c, 0x06, 0xab, 0x71, 0xc7,
- 0xc2, 0x91, 0xd4, 0xf1, 0x44, 0xdf, 0x0a, 0x85, 0x00, 0xe3, 0x57, 0x43,
- 0xa3, 0xe1, 0xf6, 0xb4, 0x22, 0x78, 0x72, 0x56, 0xe8, 0xeb, 0xbb, 0x27,
- 0x6c, 0xeb, 0xbe, 0x3c, 0x1d, 0xf6, 0x84, 0x1e, 0xe6, 0xc9, 0x7d, 0x40,
- 0x59, 0x02, 0x4b, 0xad, 0xe4, 0xc7, 0x96, 0x1f, 0x09, 0x5f, 0xb3, 0x02,
- 0xbc, 0xb9, 0x8c, 0x46, 0x38, 0x83, 0x77, 0x92, 0xf9, 0x2c, 0x08, 0x5b,
- 0x08, 0x8d, 0x27, 0xe6, 0xe1, 0x58, 0x35, 0x11, 0x11, 0x88, 0x1c, 0xc0,
- 0x0b, 0x43, 0xe7, 0x91, 0xc0, 0xf4, 0xa4, 0x17, 0xf5, 0xf7, 0x00, 0x9b,
- 0xb3, 0x5b, 0x5d, 0xc8, 0x98, 0x8b, 0x7c, 0xc4, 0x63, 0x14, 0x35, 0xda,
- 0x70, 0xc5, 0xd6, 0x8d, 0x25, 0x6c, 0x2a, 0x59, 0xdf, 0xd1, 0xfb, 0xfc,
- 0x63, 0x4f, 0x27, 0x75, 0xb7, 0x8b, 0xd0, 0x6d, 0x96, 0x47, 0xef, 0x92,
- 0xe9, 0xaa, 0x29, 0x36, 0xec, 0x3d, 0xba, 0xb3, 0x48, 0x92, 0xb8, 0x4f,
- 0x1d, 0xa4, 0xaa, 0xa0, 0x6a, 0xc3, 0x10, 0xaa, 0x40, 0x86, 0x36, 0x00,
- 0x5a, 0x46, 0x35, 0x71, 0xcf, 0xa3, 0xbb, 0x3d, 0xf3, 0x34, 0xf3, 0x37,
- 0xb6, 0x78, 0x62, 0xaa, 0xf7, 0x8c, 0xa4, 0x91, 0xbb, 0xc8, 0xe1, 0x6e,
- 0x01, 0xe5, 0x72, 0xea, 0x13, 0xd1, 0x2d, 0x71, 0x92, 0x0a, 0xa7, 0x61,
- 0x0d, 0xaa, 0x74, 0xe8, 0x43, 0xbc, 0xfd, 0x40, 0x7c, 0x25, 0x59, 0xd8,
- 0x07, 0x39, 0x21, 0x04, 0x1c, 0x67, 0x9a, 0x24, 0xd8, 0x62, 0x39, 0xd3,
- 0xea, 0x4c, 0x60, 0xc4, 0x3d, 0x5c, 0xb7, 0x65, 0x44, 0x9c, 0x38, 0x95,
- 0x90, 0xbf, 0x29, 0x84, 0x69, 0x08, 0x58, 0x6a, 0x2c, 0xf5, 0x0b, 0xc5,
- 0x16, 0x30, 0x81, 0xd3, 0x03, 0xbd, 0xdc, 0xa4, 0x62, 0xc3, 0x40, 0x84,
- 0x2a, 0x16, 0x8c, 0x58, 0x45, 0x37, 0xa2, 0xd3, 0xb7, 0xe4, 0x46, 0xcb,
- 0x0c, 0x21, 0xb0, 0x4e, 0x60, 0x90, 0x36, 0x86, 0x10, 0x3a, 0xa3, 0x6e,
- 0xc8, 0x23, 0xfb, 0x9f, 0xf3, 0x1a, 0x14, 0x5d, 0xbf, 0x68, 0x0a, 0x12,
- 0x5c, 0x5d, 0x01, 0x75, 0x8f, 0x14, 0x0a, 0x76, 0x71, 0x9e, 0x5b, 0x31,
- 0xd1, 0x6e, 0xf2, 0xc0, 0x02, 0x52, 0x57, 0x7b, 0x95, 0xaf, 0x05, 0x05,
- 0x00, 0x8b, 0x7b, 0x7e, 0xf2, 0x56, 0xea, 0x63, 0xba, 0x83, 0x94, 0x30,
- 0x64, 0xe2, 0x86, 0x94, 0x76, 0xc5, 0x78, 0x62, 0xc5, 0x99, 0x88, 0xc4,
- 0xde, 0xc4, 0xc4, 0xc6, 0x07, 0x24, 0xd5, 0xbe, 0x2e, 0x96, 0xd2, 0x7b,
- 0x97, 0x2f, 0xc9, 0xa2, 0x98, 0x76, 0x6b, 0x45, 0xdf, 0xdc, 0x66, 0xd6,
- 0x6e, 0x23, 0x67, 0xc8, 0x1a, 0x4f, 0xc2, 0x2a, 0xb6, 0xda, 0x4a, 0x85,
- 0x49, 0xf6, 0x6a, 0x79, 0x92, 0xa1, 0x05, 0xfd, 0x93, 0x68, 0xb0, 0x4d,
- 0x1d, 0x16, 0xdb, 0xf6, 0xe2, 0xe2, 0x76, 0x5c, 0xd0, 0xf5, 0xc8, 0x49,
- 0xc1, 0x3f, 0x3a, 0x24, 0x67, 0x1e, 0xf1, 0xe4, 0xa7, 0xa8, 0x3f, 0x9e,
- 0x62, 0x7e, 0x11, 0x2a, 0x4c, 0xfe, 0x48, 0x24, 0xc3, 0x4f, 0xfc, 0xb4,
- 0xc1, 0x59, 0x72, 0xc3, 0x77, 0x6f, 0x18, 0x47, 0x1d, 0x25, 0xfc, 0x2e,
- 0x2f, 0x0e, 0xde, 0x0e, 0x5f, 0x8b, 0x91, 0xf5, 0x32, 0xf3, 0xc5, 0x01,
- 0xd5, 0xb2, 0xe0, 0x3c, 0x91, 0x0e, 0x69, 0xec, 0x5e, 0xc0, 0xbd, 0x2d,
- 0x48, 0x5b, 0xcb, 0x06, 0xf6, 0xea, 0x20, 0xc6, 0x52, 0x76, 0x10, 0xbc,
- 0x9a, 0x0e, 0xd3, 0x66, 0xb1, 0xe5, 0x2e, 0xd6, 0x22, 0xac, 0x56, 0xe2,
- 0x31, 0xee, 0x0c, 0x1b, 0x55, 0x1f, 0x62, 0x42, 0x39, 0xb4, 0xc1, 0xd8,
- 0xa7, 0xc2, 0xcb, 0xd7, 0xe2, 0x4a, 0x1e, 0x92, 0xea, 0xd1, 0x57, 0x58,
- 0xfc, 0xa0, 0x36, 0x8b, 0x33, 0xcc, 0x09, 0x2f, 0x57, 0x34, 0x38, 0xd7,
- 0x78, 0x98, 0x48, 0x68, 0x4d, 0x6f, 0xfe, 0x71, 0x77, 0xab, 0xbd, 0xf9,
- 0xcb, 0x5f, 0xda, 0x7c, 0xfb, 0xd8, 0x4d, 0xd6, 0xf7, 0x79, 0x2a, 0x9b,
- 0x7f, 0xdc, 0xdb, 0x7a, 0x74, 0x46, 0x61, 0xa6, 0x9d, 0xef, 0x93, 0xde,
- 0xe0, 0xc1, 0x46, 0xaf, 0xac, 0x0e, 0xac, 0xde, 0xc1, 0x2e, 0xd6, 0xe3,
- 0xca, 0xa3, 0xdc, 0x55, 0x50, 0x1f, 0x38, 0x16, 0xd8, 0x49, 0x7e, 0xde,
- 0x85, 0xa3, 0x29, 0x0b, 0x27, 0xff, 0xf3, 0x38, 0x44, 0x07, 0x24, 0x45,
- 0x3c, 0x64, 0x77, 0x9c, 0x6e, 0x5e, 0x64, 0x03, 0xf4, 0xbd, 0xf7, 0x48,
- 0xdf, 0x7e, 0x76, 0x81, 0x9a, 0xcb, 0xfe, 0x50, 0x0e, 0xa8, 0x32, 0x3c,
- 0x58, 0xed, 0x67, 0xc3, 0x97, 0x9c, 0x5c, 0xdf, 0xdf, 0xe5, 0xc9, 0x9b,
- 0x63, 0xc6, 0x8d, 0x3d, 0x3a, 0x61, 0xfc, 0xb2, 0xa1, 0x22, 0x08, 0x9a,
- 0x46, 0xeb, 0xc0, 0x55, 0x43, 0x70, 0x7b, 0x71, 0x14, 0xba, 0xb8, 0x25,
- 0x77, 0xfa, 0xdd, 0x4e, 0x70, 0xd7, 0x1a, 0x58, 0x5b, 0x58, 0xfa, 0xde,
- 0xc9, 0x55, 0xff, 0x4d, 0x36, 0x81, 0xd6, 0xd5, 0x17, 0x38, 0x6a, 0x7a,
- 0x8b, 0x3e, 0x7c, 0x37, 0x9f, 0x55, 0x3e, 0x0e, 0x93, 0x04, 0x55, 0xa1,
- 0xde, 0x58, 0x57, 0x00, 0xe0, 0xe7, 0xed, 0x7e, 0x1f, 0x25, 0x5f, 0x25,
- 0x3e, 0x48, 0xbd, 0x04, 0x15, 0x8c, 0x07, 0x3b, 0xfb, 0xb4, 0x3e, 0xe9,
- 0x74, 0x25, 0x1e, 0xed, 0xd8, 0xc7, 0x21, 0xf9, 0x8c, 0xc0, 0x6b, 0xce,
- 0x4a, 0xf2, 0xc6, 0x22, 0x31, 0x07, 0x6d, 0x84, 0x90, 0x94, 0x90, 0xcb,
- 0x93, 0x7b, 0x1f, 0x48, 0xa3, 0xc5, 0xf5, 0xb2, 0xc5, 0x0a, 0x93, 0xbc,
- 0xaf, 0xf8, 0xe8, 0x5b, 0x1d, 0x75, 0x3f, 0xcb, 0x3b, 0x95, 0x92, 0x17,
- 0xd2, 0x43, 0x48, 0x80, 0xfa, 0x89, 0x56, 0x88, 0x38, 0xcb, 0x03, 0x06,
- 0xa6, 0xc3, 0xb6, 0xa2, 0x2f, 0x01, 0x5c, 0x65, 0x80, 0xae, 0x59, 0x1d,
- 0xa7, 0xb7, 0x5e, 0x6e, 0xf0, 0xb5, 0x36, 0x60, 0xa3, 0xb9, 0x79, 0x59,
- 0x88, 0xeb, 0x2c, 0xaa, 0xe5, 0xeb, 0x92, 0xc8, 0x92, 0x86, 0x25, 0x27,
- 0xbc, 0xdb, 0xef, 0x02, 0x51, 0x3b, 0x9d, 0xb7, 0x4c, 0xa6, 0xff, 0xcb,
- 0x67, 0xd3, 0xf0, 0xe1, 0x45, 0x9d, 0x2b, 0x06, 0x56, 0x60, 0x87, 0x48,
- 0x47, 0x06, 0x20, 0x58, 0x23, 0x42, 0x5b, 0x24, 0xcf, 0x33, 0x5b, 0x33,
- 0xbd, 0x44, 0x74, 0x34, 0x17, 0x62, 0xe9, 0xac, 0xad, 0x62, 0xe4, 0x62,
- 0x3e, 0xba, 0x5c, 0x4c, 0xe0, 0xdd, 0x97, 0xb8, 0xc6, 0xff, 0x8c, 0xe7,
- 0xcb, 0x38, 0x5f, 0x45, 0xbb, 0x7b, 0xbd, 0x68, 0x6f, 0x67, 0x77, 0xaf,
- 0x65, 0x0e, 0x9d, 0xff, 0xe4, 0xe8, 0x9a, 0x3d, 0x7c, 0xdd, 0xf9, 0xd8,
- 0x59, 0xf8, 0x18, 0x79, 0xdc, 0xaa, 0x9a, 0x4d, 0x4a, 0xbc, 0x87, 0x1d,
- 0x7d, 0x52, 0xe1, 0x96, 0x6b, 0xda, 0x01, 0x10, 0x0d, 0x32, 0x85, 0xd8,
- 0x9c, 0xac, 0xf6, 0x94, 0x2b, 0x53, 0xc2, 0x4f, 0x6c, 0x68, 0x59, 0x31,
- 0x84, 0x50, 0x38, 0xc3, 0x5b, 0x9c, 0xa3, 0xb0, 0x56, 0x75, 0x8f, 0xd2,
- 0xd2, 0xb6, 0x85, 0x63, 0x34, 0x78, 0x6f, 0x88, 0xde, 0x8f, 0x4e, 0x0e,
- 0x2f, 0x0d, 0x31, 0xef, 0x8a, 0xaf, 0xd3, 0x7c, 0xf5, 0x71, 0x35, 0x8a,
- 0x1e, 0x7d, 0x66, 0xb2, 0x7f, 0x93, 0x90, 0x44, 0x36, 0x1f, 0x2d, 0xaf,
- 0xf7, 0xff, 0x1a, 0xe7, 0xd7, 0xd9, 0xfc, 0x43, 0xcf, 0x4f, 0x90, 0xa4,
- 0xb4, 0x4f, 0x0c, 0x6a, 0xf7, 0xc5, 0xee, 0x13, 0x89, 0x80, 0x4f, 0xb9,
- 0xa4, 0x19, 0xf8, 0x43, 0x77, 0xd6, 0x15, 0xc0, 0x06, 0x84, 0xde, 0x3b,
- 0x94, 0x86, 0xf9, 0xa4, 0x2b, 0xea, 0x56, 0x1c, 0x3e, 0x3b, 0xd1, 0x67,
- 0x25, 0x9b, 0xb9, 0xbb, 0x21, 0xe5, 0x0b, 0xbb, 0x9c, 0xfa, 0xb7, 0x5c,
- 0x74, 0x07, 0x95, 0x13, 0xfe, 0x81, 0xb9, 0x72, 0x17, 0xae, 0x24, 0xd3,
- 0xa1, 0xf0, 0x64, 0x65, 0xa7, 0xa3, 0x3c, 0x89, 0x6f, 0x7d, 0x91, 0x3b,
- 0x8f, 0xe6, 0x60, 0xb6, 0xf3, 0x8b, 0xd7, 0x87, 0x82, 0x81, 0x69, 0x39,
- 0x38, 0x58, 0xea, 0xc8, 0x59, 0x3a, 0xb6, 0x78, 0x94, 0x1f, 0xe8, 0x9f,
- 0x83, 0xe4, 0xf7, 0x27, 0xa3, 0x8f, 0x78, 0x88, 0xce, 0x9d, 0xc0, 0x8d,
- 0x1d, 0x54, 0xcb, 0x19, 0xb0, 0xcc, 0x5f, 0x32, 0xa9, 0x59, 0x35, 0xbb,
- 0x4d, 0x29, 0xd0, 0x26, 0xb6, 0x6b, 0xa9, 0xa2, 0xae, 0x45, 0x77, 0xd5,
- 0x58, 0x40, 0xe3, 0xe6, 0xea, 0x67, 0x47, 0x07, 0xe7, 0x81, 0xde, 0x04,
- 0xbd, 0xc4, 0xdb, 0x88, 0xf8, 0x39, 0x96, 0x99, 0x51, 0x30, 0x53, 0x4c,
- 0x49, 0xab, 0x9e, 0x97, 0x76, 0x4b, 0xf0, 0xc9, 0xc9, 0x5d, 0x2c, 0x91,
- 0xd6, 0x99, 0x5e, 0x27, 0x30, 0x67, 0x00, 0xcf, 0x7b, 0x3a, 0x89, 0xe1,
- 0x51, 0xd3, 0x4b, 0x08, 0x42, 0x28, 0xda, 0x4a, 0x35, 0xac, 0x86, 0xf6,
- 0xe6, 0x21, 0xd2, 0x6c, 0x00, 0x4d, 0x7b, 0x90, 0xdf, 0xe5, 0x31, 0xce,
- 0x74, 0x5d, 0xd9, 0x04, 0x84, 0x3f, 0xd3, 0xe0, 0xe3, 0xe2, 0x96, 0x58,
- 0xa9, 0x78, 0x82, 0xa9, 0xf7, 0x74, 0x9c, 0x98, 0x4d, 0x75, 0x92, 0x4a,
- 0x44, 0x06, 0x5b, 0x33, 0x80, 0xa5, 0x53, 0xd9, 0x30, 0xb9, 0x81, 0x58,
- 0x79, 0x99, 0x16, 0x89, 0xe0, 0xde, 0x45, 0x97, 0xf7, 0x99, 0x08, 0x9d,
- 0x0e, 0x70, 0x40, 0x62, 0x1a, 0x8b, 0x65, 0x2a, 0xd0, 0x19, 0xb4, 0x79,
- 0xe0, 0x07, 0x41, 0x79, 0xb5, 0x8e, 0x33, 0xa4, 0x1c, 0x39, 0x07, 0xda,
- 0xf0, 0xe8, 0x9b, 0x88, 0x73, 0xb4, 0xb9, 0x8f, 0x43, 0xae, 0x49, 0xc0,
- 0xbe, 0xf0, 0x19, 0x14, 0x89, 0xaf, 0x96, 0x7c, 0xde, 0x0f, 0x6f, 0xe2,
- 0x05, 0x8b, 0xc4, 0xbb, 0x3b, 0xac, 0x7d, 0x7f, 0x67, 0xd9, 0x5e, 0x7c,
- 0x50, 0xad, 0x1c, 0x69, 0xd1, 0x09, 0x14, 0xf3, 0x09, 0x57, 0x13, 0x65,
- 0x99, 0xb8, 0x6a, 0xf3, 0xa3, 0xdb, 0xb3, 0xd8, 0x9e, 0x31, 0xc3, 0x9a,
- 0x16, 0x44, 0x1a, 0x79, 0x31, 0xb9, 0xdd, 0x1e, 0xd3, 0x3f, 0x4f, 0x76,
- 0xb6, 0x01, 0xc5, 0x58, 0xc2, 0x44, 0xc6, 0x34, 0xb9, 0xb7, 0xf7, 0xec,
- 0x59, 0x2f, 0xea, 0xb0, 0xd1, 0xca, 0x3a, 0xe0, 0x23, 0x41, 0x27, 0xab,
- 0xd3, 0x56, 0x67, 0x6e, 0x3b, 0xbf, 0x1a, 0xf3, 0x7f, 0xfc, 0x9a, 0xd5,
- 0x8a, 0xba, 0xd4, 0xf4, 0x0d, 0xac, 0xc3, 0x3c, 0xc4, 0x5a, 0x31, 0xb2,
- 0xba, 0xa7, 0x7d, 0x30, 0xb3, 0x04, 0x7b, 0x20, 0x16, 0x49, 0xb6, 0x30,
- 0x37, 0xe3, 0x4c, 0x01, 0xf2, 0xd1, 0x7d, 0xe0, 0x9c, 0x81, 0x63, 0x58,
- 0xe2, 0xaa, 0x34, 0xb1, 0xbe, 0x58, 0x8e, 0xfa, 0x9a, 0x61, 0x2a, 0x7a,
- 0x46, 0x4a, 0x27, 0x97, 0xfe, 0x9c, 0x9a, 0xf5, 0xb7, 0xc1, 0x91, 0xbf,
- 0x8c, 0x3a, 0x4a, 0x5b, 0xfc, 0x63, 0x00, 0x2f, 0x61, 0x32, 0xe6, 0x69,
- 0x64, 0xaf, 0xf4, 0x8f, 0xff, 0xf8, 0x0f, 0x6a, 0xf6, 0x3f, 0xb8, 0x95,
- 0x57, 0x7f, 0x2c, 0xca, 0x9b, 0xe0, 0x99, 0x8e, 0x12, 0xfc, 0x89, 0xf7,
- 0x91, 0x22, 0xee, 0x09, 0x40, 0xa5, 0x48, 0x84, 0x7a, 0x73, 0xaa, 0x1c,
- 0xb9, 0x17, 0xcc, 0x2f, 0x45, 0x8a, 0x9a, 0xd8, 0xdc, 0x5c, 0xd8, 0xc1,
- 0x97, 0xec, 0xbf, 0x4c, 0x38, 0xb5, 0x99, 0xa8, 0x10, 0x48, 0x74, 0x5b,
- 0x26, 0x62, 0x1c, 0xbf, 0xfd, 0xf6, 0xe4, 0xe2, 0xec, 0xed, 0x9b, 0xe3,
- 0xb7, 0x97, 0xd1, 0xb7, 0x07, 0x17, 0x27, 0x07, 0x5f, 0x9e, 0x6a, 0x06,
- 0x35, 0x4f, 0x81, 0xa3, 0x45, 0x44, 0xf4, 0xae, 0xe1, 0x88, 0x06, 0x19,
- 0x2d, 0xad, 0xe0, 0xf9, 0xb5, 0x72, 0x81, 0xef, 0x15, 0x98, 0x1a, 0xe6,
- 0xd5, 0xf7, 0x28, 0x60, 0xd1, 0x63, 0x87, 0xdf, 0x7b, 0xab, 0x65, 0xc1,
- 0x66, 0xcb, 0x55, 0x90, 0x93, 0xcb, 0x81, 0x2c, 0x4c, 0xa5, 0xc6, 0x9f,
- 0x7c, 0xdd, 0x21, 0x85, 0xf7, 0x1f, 0x44, 0x5f, 0x49, 0x5a, 0xb7, 0x86,
- 0x54, 0xb9, 0x57, 0x35, 0xc5, 0x08, 0x66, 0x1c, 0x37, 0x86, 0x83, 0xd3,
- 0x53, 0xdf, 0xd5, 0xe3, 0x55, 0x18, 0x14, 0xce, 0x47, 0xb2, 0x80, 0x6e,
- 0xac, 0xa2, 0xf0, 0x75, 0xe6, 0x51, 0xb6, 0xe7, 0xab, 0x10, 0x50, 0x9b,
- 0x3b, 0xa3, 0xed, 0xd8, 0x14, 0x2c, 0x06, 0x76, 0x37, 0xd2, 0x01, 0x4a,
- 0x8b, 0xdb, 0x5e, 0xd4, 0xfd, 0x63, 0x57, 0xb2, 0xb3, 0x12, 0xc0, 0xcd,
- 0x4a, 0x8d, 0x87, 0x2d, 0x3f, 0xa8, 0xb7, 0x67, 0x7e, 0x4c, 0xea, 0x44,
- 0x73, 0x03, 0x70, 0x2f, 0x7a, 0xff, 0x67, 0x61, 0xf2, 0x0c, 0x02, 0x0f,
- 0xfd, 0xe3, 0x8a, 0xe8, 0xef, 0x52, 0xcc, 0x95, 0x46, 0xd9, 0x4f, 0xd2,
- 0xfa, 0x2e, 0x94, 0xb6, 0x78, 0x1c, 0xa0, 0x0a, 0x8b, 0x19, 0x87, 0x95,
- 0x5f, 0xc8, 0x01, 0x52, 0xff, 0x58, 0x2e, 0x87, 0x07, 0x29, 0x9b, 0xbd,
- 0x61, 0xc5, 0x7a, 0x95, 0x83, 0x82, 0xaa, 0x1e, 0xb6, 0xad, 0xd6, 0x03,
- 0x5c, 0x56, 0x1c, 0x58, 0x9e, 0xa7, 0x13, 0xc5, 0xa9, 0x6b, 0xa5, 0x8a,
- 0x01, 0x3c, 0x1d, 0x17, 0x87, 0x00, 0xf5, 0x9e, 0x73, 0x01, 0x28, 0x57,
- 0x08, 0x41, 0x82, 0x50, 0x89, 0x8b, 0xe4, 0x9c, 0xd9, 0x35, 0x57, 0x21,
- 0x04, 0x81, 0x9d, 0x10, 0xd1, 0xe3, 0xeb, 0xcc, 0xc4, 0xef, 0xd8, 0xb9,
- 0x5f, 0x25, 0x63, 0x4b, 0x62, 0x76, 0x4c, 0x0a, 0x73, 0x40, 0x54, 0xce,
- 0x02, 0x06, 0x47, 0xad, 0xd9, 0x9b, 0x39, 0x4e, 0x09, 0xf6, 0x32, 0x8d,
- 0x63, 0x28, 0x82, 0x74, 0x5f, 0x1f, 0x06, 0xcf, 0xbc, 0x44, 0x5c, 0x94,
- 0x86, 0x0c, 0x05, 0xfc, 0x2d, 0x4b, 0x0f, 0x46, 0xc4, 0x1c, 0x86, 0xc5,
- 0x0f, 0xa2, 0x49, 0x0d, 0x7e, 0x44, 0x93, 0x66, 0x0a, 0xa5, 0xd3, 0x33,
- 0xe5, 0x4c, 0x24, 0xe3, 0x44, 0x71, 0x34, 0x4a, 0xaf, 0x23, 0xb3, 0x82,
- 0x44, 0x4c, 0x25, 0x40, 0x09, 0xcb, 0x66, 0x09, 0x6f, 0x15, 0x30, 0xc0,
- 0x20, 0xbb, 0xdf, 0x70, 0x85, 0x78, 0x0f, 0x5a, 0x65, 0x33, 0x29, 0x38,
- 0x52, 0x3f, 0xb0, 0xa2, 0xc1, 0x92, 0xbe, 0xe4, 0x75, 0xb4, 0xb0, 0x26,
- 0xc5, 0xb7, 0xd6, 0x20, 0x2f, 0x36, 0xd1, 0x02, 0x6e, 0x6f, 0x8e, 0x94,
- 0x12, 0x4b, 0xcf, 0xc5, 0x3a, 0x58, 0x00, 0x2c, 0x73, 0x0b, 0x58, 0x56,
- 0xb8, 0xda, 0xd4, 0xa6, 0x03, 0xa8, 0xe6, 0x56, 0xc6, 0x02, 0xf1, 0xc9,
- 0x44, 0x2f, 0xf1, 0xe9, 0x95, 0x6a, 0x12, 0xb6, 0x59, 0x0a, 0xc5, 0x74,
- 0x25, 0x65, 0xed, 0x69, 0x7c, 0x9b, 0x01, 0xe3, 0x99, 0x13, 0x89, 0xc8,
- 0x63, 0xa2, 0x3f, 0xea, 0x5f, 0x7d, 0xf1, 0x5e, 0xc6, 0x56, 0x78, 0xab,
- 0xd8, 0xf2, 0x1e, 0x6c, 0x91, 0x02, 0x98, 0x5a, 0xc7, 0x5a, 0xd0, 0x0a,
- 0xe3, 0xa5, 0xfd, 0x32, 0x43, 0x54, 0x68, 0xc7, 0x8a, 0x2c, 0x73, 0x63,
- 0x3a, 0x0d, 0x20, 0xaa, 0xc5, 0x1c, 0x11, 0x37, 0x84, 0x0f, 0x57, 0x9e,
- 0xfe, 0x40, 0x63, 0x48, 0x04, 0xce, 0x36, 0x98, 0x89, 0x46, 0x27, 0xb3,
- 0x78, 0x56, 0x33, 0x8f, 0x05, 0x1c, 0xcd, 0xbc, 0xad, 0xe1, 0xcd, 0xa4,
- 0x95, 0x11, 0xd2, 0x78, 0x26, 0xc2, 0xa3, 0x27, 0xbf, 0xd9, 0x4a, 0xe2,
- 0xd7, 0x36, 0x36, 0x0e, 0xdf, 0x0d, 0x2f, 0xcf, 0xde, 0x44, 0x67, 0xef,
- 0x2e, 0xcf, 0xdf, 0x5d, 0xea, 0xd5, 0x35, 0x92, 0xe8, 0x5f, 0xd1, 0x11,
- 0x45, 0x0a, 0xb0, 0xdd, 0x9c, 0xa9, 0x0b, 0x19, 0xc1, 0x0a, 0x19, 0xa0,
- 0xe9, 0x02, 0x94, 0x1a, 0x97, 0xdd, 0x03, 0xec, 0x26, 0x41, 0xbc, 0xc5,
- 0x9a, 0xdf, 0xd3, 0x9a, 0x23, 0x33, 0x13, 0xb6, 0x1d, 0x4b, 0x16, 0x82,
- 0xde, 0xd3, 0x5e, 0x75, 0xa4, 0x56, 0xc7, 0x0c, 0xce, 0xde, 0x2a, 0x28,
- 0x90, 0x8f, 0xc8, 0x31, 0xdb, 0x8e, 0x37, 0xfd, 0x84, 0xc1, 0x81, 0x08,
- 0x8b, 0x19, 0x97, 0x66, 0xcc, 0xb4, 0xf8, 0x4c, 0x04, 0xad, 0x54, 0x53,
- 0xd4, 0xc2, 0x4c, 0xb9, 0x32, 0xa3, 0x19, 0xde, 0xb8, 0xd8, 0x6a, 0x8e,
- 0x47, 0x41, 0x4c, 0x99, 0x38, 0xe4, 0x39, 0x78, 0xcb, 0x0a, 0xcc, 0xdf,
- 0xb3, 0x09, 0xbc, 0x71, 0xcd, 0xde, 0x47, 0xdd, 0xef, 0x92, 0xb0, 0xc1,
- 0xdf, 0xff, 0x9d, 0x13, 0x00, 0xdf, 0xdb, 0x27, 0xff, 0x90, 0x2e, 0xff,
- 0x32, 0xef, 0x22, 0x14, 0xab, 0xea, 0x79, 0xfd, 0xe6, 0xf8, 0xe2, 0xcb,
- 0xe3, 0x8b, 0xb3, 0x21, 0xc2, 0x4f, 0xcc, 0xdc, 0xd5, 0x24, 0xf6, 0xdb,
- 0x24, 0x1f, 0x25, 0x79, 0xa6, 0x85, 0x64, 0xec, 0xaf, 0x67, 0xdb, 0x5f,
- 0x0d, 0x87, 0x07, 0xe7, 0x27, 0xae, 0xe6, 0x88, 0x4b, 0x45, 0x12, 0x1d,
- 0x69, 0x2e, 0xc9, 0x72, 0x3c, 0x7f, 0x7b, 0x85, 0xe8, 0x62, 0x7c, 0x2b,
- 0x21, 0xaa, 0x0d, 0x1f, 0xa7, 0xd9, 0x68, 0xd9, 0xb9, 0xa9, 0x19, 0x6a,
- 0xdc, 0xb0, 0xa1, 0x0b, 0x49, 0xa2, 0xb6, 0x10, 0xf0, 0x6b, 0x36, 0x29,
- 0xf7, 0x5c, 0x18, 0xd7, 0x6d, 0x3e, 0xea, 0x13, 0xa1, 0xdf, 0x5a, 0x7d,
- 0x48, 0x09, 0xa6, 0x27, 0x36, 0x29, 0x51, 0xb6, 0xde, 0xce, 0x70, 0xcb,
- 0x55, 0x61, 0xb7, 0x6f, 0xf9, 0x68, 0x70, 0x59, 0x8c, 0xe9, 0x40, 0x38,
- 0xbb, 0x9c, 0x25, 0x0b, 0x9d, 0x64, 0xf6, 0xfa, 0x18, 0xd8, 0x01, 0xf5,
- 0xe6, 0xea, 0x55, 0x89, 0xa9, 0x8b, 0x3e, 0x79, 0xea, 0x40, 0x9f, 0xc2,
- 0x82, 0xa1, 0x57, 0x24, 0x7c, 0x2f, 0xee, 0x27, 0x7a, 0x81, 0x00, 0xe2,
- 0x78, 0x2e, 0x56, 0x6e, 0xe1, 0xdf, 0x75, 0x5f, 0x07, 0x17, 0xd8, 0x42,
- 0xd4, 0xbf, 0xc6, 0x34, 0x47, 0xa3, 0x69, 0x3c, 0xbf, 0xc5, 0x4d, 0x86,
- 0xbb, 0x89, 0xd5, 0x4d, 0xc3, 0x32, 0xe2, 0x72, 0x64, 0x70, 0x6d, 0x29,
- 0xbc, 0x00, 0x04, 0x40, 0x2b, 0x7e, 0xce, 0x96, 0x5d, 0x07, 0xd9, 0x14,
- 0x38, 0x71, 0x70, 0x92, 0xfc, 0x22, 0xb0, 0xd5, 0xe8, 0xf8, 0x94, 0x2e,
- 0x25, 0x97, 0xa9, 0x00, 0xf5, 0x3c, 0x99, 0x32, 0xf0, 0x8e, 0x05, 0x97,
- 0x48, 0x72, 0x5e, 0x0a, 0x26, 0x26, 0x8c, 0xc3, 0xd0, 0xb7, 0xe1, 0x86,
- 0x00, 0xa5, 0x20, 0x07, 0xb1, 0x70, 0x35, 0x2a, 0x94, 0x6b, 0x0b, 0x03,
- 0x03, 0xb8, 0xa4, 0x2f, 0x59, 0x11, 0x16, 0x31, 0xd1, 0x98, 0xad, 0x43,
- 0x1f, 0x5a, 0x12, 0xdb, 0x77, 0x32, 0x08, 0x2f, 0x92, 0x3a, 0x67, 0x55,
- 0x25, 0x45, 0x62, 0xed, 0x36, 0xc9, 0xeb, 0x6d, 0x06, 0x00, 0x30, 0x40,
- 0x6a, 0x40, 0xac, 0xdf, 0x0e, 0x5e, 0xc6, 0xe2, 0x5e, 0xab, 0xb1, 0xa6,
- 0x36, 0xf0, 0x81, 0x55, 0x57, 0x47, 0xf8, 0x93, 0xf8, 0x9f, 0x10, 0x27,
- 0xa9, 0xb7, 0x6f, 0x39, 0x01, 0xb7, 0xc9, 0x2b, 0x48, 0xa7, 0x61, 0x88,
- 0xa7, 0x20, 0x20, 0xc0, 0x2c, 0x28, 0x41, 0xff, 0xd0, 0x60, 0x9c, 0x6c,
- 0xdb, 0x7f, 0xcb, 0x57, 0x45, 0xd6, 0x1f, 0x2d, 0xa1, 0x93, 0x79, 0xac,
- 0x2e, 0x4d, 0x04, 0xe4, 0xa2, 0xc0, 0x00, 0xe7, 0xc2, 0xf7, 0xec, 0xd6,
- 0x40, 0x8a, 0xb5, 0x78, 0x3a, 0x90, 0x73, 0x57, 0x05, 0x6e, 0x71, 0x70,
- 0x1d, 0x12, 0xc8, 0x8e, 0x80, 0x5e, 0x8d, 0x5a, 0xd6, 0x11, 0xea, 0x26,
- 0xbb, 0x90, 0xb3, 0xb9, 0x56, 0xcd, 0x83, 0x9d, 0xbd, 0x1a, 0xb6, 0x5b,
- 0x3a, 0xb4, 0xf4, 0x4b, 0x88, 0x08, 0x89, 0x62, 0x88, 0x5b, 0x3c, 0xae,
- 0x45, 0xff, 0xdf, 0x95, 0x5c, 0x1f, 0x48, 0x90, 0x06, 0xe2, 0xa9, 0x14,
- 0x79, 0x58, 0x7b, 0x8b, 0xc8, 0x61, 0x2a, 0x2f, 0x2f, 0x7f, 0x38, 0x3f,
- 0x7e, 0x65, 0x6f, 0x3e, 0xb6, 0x67, 0x02, 0xc0, 0x85, 0xf0, 0x8b, 0x44,
- 0xc1, 0x2e, 0x83, 0x1a, 0x9c, 0x44, 0x64, 0xfd, 0xd2, 0xdc, 0xc2, 0xd2,
- 0x4d, 0x3f, 0xfa, 0xfe, 0xe8, 0x64, 0x78, 0x7e, 0x7a, 0x76, 0xf8, 0xea,
- 0xe5, 0xf7, 0xc6, 0x8d, 0x3f, 0x67, 0xc4, 0x19, 0x91, 0xd1, 0xdc, 0x67,
- 0x1e, 0x20, 0x40, 0xdf, 0x7b, 0x7b, 0xfc, 0xdd, 0x7b, 0xd2, 0x0c, 0x5e,
- 0x31, 0x28, 0x78, 0xef, 0x2e, 0x9e, 0xea, 0x4b, 0xac, 0x5e, 0xb5, 0xc8,
- 0x75, 0x41, 0x3a, 0x47, 0xdb, 0xc2, 0xb2, 0x3c, 0x11, 0x20, 0xb4, 0xae,
- 0x20, 0x41, 0x6b, 0x44, 0x56, 0x50, 0x4f, 0x28, 0xae, 0xe4, 0x66, 0xb6,
- 0x14, 0x67, 0xcc, 0xdc, 0xcd, 0xdf, 0x2d, 0x25, 0x32, 0x8f, 0xbd, 0xd1,
- 0xa1, 0x93, 0x17, 0xc1, 0x8f, 0xfa, 0x8d, 0x0f, 0x0a, 0x55, 0xf8, 0xdd,
- 0x9c, 0x63, 0x21, 0x1c, 0x96, 0xa1, 0x56, 0xc8, 0x84, 0xfb, 0x54, 0x01,
- 0x0f, 0x15, 0xc9, 0x87, 0xe3, 0x30, 0x2d, 0x24, 0xdb, 0x55, 0x61, 0x16,
- 0xf1, 0xc5, 0x8d, 0x25, 0x1e, 0x8f, 0xe9, 0x07, 0x63, 0x4c, 0x72, 0x39,
- 0x97, 0x73, 0xae, 0xca, 0x3e, 0xbc, 0x64, 0x15, 0x4a, 0xab, 0x96, 0xa9,
- 0xf9, 0xd9, 0x4a, 0xca, 0x21, 0xf1, 0xbf, 0x8a, 0x5d, 0x19, 0x96, 0x9a,
- 0xa8, 0x9c, 0x68, 0xc7, 0xe6, 0xaa, 0x99, 0x80, 0x6c, 0x45, 0x90, 0xf4,
- 0x42, 0x16, 0x42, 0x05, 0x81, 0x35, 0xbe, 0xb2, 0x03, 0x9c, 0x29, 0x69,
- 0xd4, 0x2a, 0x2e, 0xa0, 0x5a, 0x0a, 0x76, 0x67, 0x9a, 0x8e, 0xbc, 0xc1,
- 0xbc, 0xe6, 0x89, 0x64, 0x47, 0xb7, 0x22, 0x3e, 0x84, 0x47, 0xc8, 0x4c,
- 0xe1, 0x3e, 0xbd, 0xb6, 0xc8, 0xac, 0x7c, 0xa2, 0x10, 0x3f, 0x4c, 0xd5,
- 0x61, 0x12, 0xa4, 0x53, 0x52, 0xa1, 0x98, 0x98, 0x88, 0xe6, 0x3e, 0x0d,
- 0x42, 0x19, 0x15, 0x44, 0x08, 0xd8, 0xa7, 0xca, 0xb2, 0x51, 0xaf, 0x5c,
- 0xd2, 0x99, 0xd8, 0xc8, 0x42, 0x02, 0x0b, 0xd2, 0xb3, 0x11, 0x72, 0xa2,
- 0x33, 0x6b, 0x48, 0x1f, 0x2a, 0x36, 0x5e, 0x73, 0x1e, 0x14, 0x90, 0x9a,
- 0x26, 0x2c, 0x6a, 0xc1, 0xfa, 0x16, 0x76, 0x66, 0x37, 0x29, 0xaf, 0xe0,
- 0x68, 0x19, 0xd6, 0xf3, 0x72, 0xa3, 0x97, 0x92, 0x16, 0x58, 0x78, 0x04,
- 0xdb, 0xc5, 0x39, 0x90, 0x10, 0x4b, 0x45, 0x1a, 0x37, 0xa5, 0x47, 0x23,
- 0xe7, 0x06, 0x55, 0x50, 0x18, 0xa3, 0x4b, 0x2b, 0xd5, 0xf7, 0xd8, 0x8a,
- 0xba, 0xd5, 0x14, 0xf2, 0xcd, 0x13, 0x0b, 0x81, 0x11, 0x13, 0x43, 0xc1,
- 0xbe, 0x86, 0xf9, 0xd8, 0x5d, 0xc6, 0x9c, 0xb9, 0xc2, 0xa1, 0x20, 0xb9,
- 0x02, 0xee, 0x2c, 0xb9, 0x38, 0xba, 0x56, 0x10, 0x45, 0xfd, 0x4b, 0x76,
- 0xb8, 0x19, 0x18, 0x9b, 0x8f, 0x05, 0x96, 0xe5, 0x0e, 0xc8, 0x4a, 0x4c,
- 0xeb, 0x2b, 0xed, 0xd0, 0x65, 0x59, 0xdb, 0x66, 0xf5, 0x24, 0x69, 0x27,
- 0x46, 0x8e, 0x88, 0xd9, 0x74, 0x83, 0x5c, 0xc3, 0x42, 0x33, 0x38, 0x9d,
- 0xb3, 0x52, 0x18, 0x1e, 0x2a, 0x16, 0xf9, 0x9c, 0xa7, 0x8a, 0x53, 0x90,
- 0x24, 0xcb, 0x05, 0xca, 0xef, 0x8c, 0x15, 0x81, 0x1c, 0xc1, 0x9f, 0xae,
- 0x3d, 0xbb, 0x43, 0xfc, 0x5a, 0xd1, 0xa2, 0xbe, 0x79, 0x77, 0x7a, 0x79,
- 0x72, 0x1e, 0x3a, 0x1e, 0xa3, 0xef, 0x4e, 0x2e, 0xbf, 0x26, 0x79, 0x9d,
- 0x6b, 0x3b, 0x9f, 0xb2, 0x77, 0xe7, 0xcd, 0x9b, 0x83, 0xb7, 0x9c, 0xa1,
- 0xfe, 0x16, 0x31, 0x72, 0x07, 0xd0, 0x19, 0x98, 0x1b, 0xd1, 0x0a, 0x33,
- 0xe9, 0x70, 0xee, 0x72, 0xaf, 0xe9, 0x65, 0xa8, 0x9d, 0x3e, 0x30, 0x1c,
- 0x3e, 0x42, 0xe1, 0x1a, 0xf1, 0x86, 0xab, 0x4e, 0xb0, 0x62, 0x9b, 0x0e,
- 0x4e, 0x2d, 0xeb, 0x59, 0xbc, 0xce, 0x75, 0xe8, 0x71, 0xe4, 0xc9, 0x89,
- 0x6c, 0x0e, 0x9f, 0xaa, 0x5c, 0xdd, 0xde, 0x73, 0x81, 0x0d, 0x75, 0x20,
- 0xa6, 0x88, 0x59, 0x25, 0x91, 0x69, 0xae, 0x2a, 0x8d, 0x5c, 0x97, 0xd5,
- 0xb8, 0x75, 0xea, 0x11, 0x43, 0x82, 0x53, 0x39, 0xf3, 0xc6, 0x40, 0x56,
- 0x36, 0x59, 0x5f, 0xbe, 0x38, 0x0d, 0xef, 0xd3, 0x6a, 0xfd, 0x60, 0x0b,
- 0x34, 0xbb, 0xce, 0x12, 0x7f, 0x70, 0xfb, 0x67, 0xd6, 0x8c, 0x59, 0x7e,
- 0xa1, 0x81, 0xc9, 0xdd, 0xd2, 0x67, 0xb6, 0xd6, 0xa7, 0x2d, 0xd9, 0x72,
- 0x35, 0x6a, 0xd4, 0x72, 0xb6, 0x2f, 0x52, 0x65, 0xa5, 0x8a, 0x37, 0x90,
- 0x63, 0xcf, 0x5c, 0xcb, 0x1a, 0xd0, 0x80, 0xb8, 0x5e, 0x4d, 0x8d, 0xd1,
- 0x39, 0x83, 0x59, 0xda, 0x63, 0x95, 0xcc, 0xde, 0x5a, 0x29, 0x71, 0x4b,
- 0x8d, 0x42, 0x42, 0x24, 0x43, 0xb8, 0x78, 0x9f, 0x29, 0xca, 0x72, 0x65,
- 0xd9, 0x20, 0x79, 0x48, 0xd8, 0xbd, 0xc9, 0xbf, 0xfe, 0x75, 0x71, 0x1d,
- 0x66, 0x4d, 0x61, 0xae, 0x9a, 0x1e, 0xdc, 0x8e, 0x09, 0x2c, 0x52, 0x91,
- 0x16, 0x27, 0xab, 0x8c, 0x40, 0x2b, 0x8e, 0xed, 0xae, 0xeb, 0x50, 0xbf,
- 0xdf, 0x6b, 0x7e, 0xbf, 0x27, 0x16, 0x47, 0xae, 0x40, 0xef, 0xf0, 0x34,
- 0x25, 0x17, 0x38, 0x94, 0xde, 0x4c, 0x26, 0x60, 0x0a, 0x93, 0x62, 0xf5,
- 0x70, 0xab, 0x08, 0x4b, 0x14, 0xb3, 0x3f, 0xc7, 0x22, 0x2d, 0x73, 0xe4,
- 0x38, 0xe2, 0x11, 0x58, 0x88, 0x25, 0x80, 0x14, 0xe1, 0x5a, 0x60, 0x53,
- 0x7c, 0x5b, 0x51, 0x83, 0xf4, 0xfd, 0x53, 0x17, 0xd0, 0xed, 0x59, 0x1a,
- 0x0a, 0x7c, 0x69, 0x46, 0x4d, 0x3f, 0x5d, 0xdc, 0x59, 0x81, 0x4b, 0xfa,
- 0xf5, 0xb9, 0x2b, 0xee, 0x52, 0x54, 0xdc, 0x53, 0x15, 0xe0, 0x5a, 0xe3,
- 0xfd, 0x18, 0x1c, 0x02, 0xec, 0x98, 0x31, 0x38, 0xcc, 0xd7, 0x41, 0x6d,
- 0x5c, 0x49, 0x35, 0xb4, 0x37, 0x28, 0x35, 0x09, 0xdb, 0xf2, 0x14, 0xd9,
- 0x95, 0x60, 0x47, 0x01, 0x6f, 0x09, 0x71, 0xe2, 0x75, 0xd7, 0x7f, 0xdc,
- 0xdb, 0xd9, 0xd9, 0xdd, 0xdf, 0xfd, 0xec, 0xc5, 0xce, 0xfe, 0xee, 0xee,
- 0xee, 0xde, 0xfe, 0xee, 0xfe, 0xfe, 0xde, 0xce, 0x4f, 0xdb, 0x6c, 0x3a,
- 0xba, 0x4b, 0x93, 0x7b, 0x57, 0x49, 0xfe, 0x3b, 0xb9, 0xa6, 0xe1, 0x2f,
- 0x58, 0x89, 0x1b, 0x90, 0xb9, 0xa4, 0x6a, 0xb8, 0x26, 0xf8, 0x38, 0x64,
- 0x02, 0x09, 0xbe, 0x16, 0x40, 0xb2, 0x85, 0xcf, 0x56, 0xc4, 0x19, 0x0c,
- 0x00, 0x93, 0x31, 0xaa, 0xbf, 0x2d, 0x79, 0xa6, 0x23, 0x96, 0x06, 0x20,
- 0xd2, 0x14, 0x2e, 0x37, 0xec, 0x7a, 0x9a, 0x8d, 0x46, 0x08, 0x80, 0x77,
- 0xe9, 0x91, 0x83, 0x88, 0x91, 0x39, 0x6f, 0x85, 0x24, 0xd4, 0x69, 0x80,
- 0xf0, 0x34, 0x39, 0xe8, 0x7e, 0x75, 0x44, 0xee, 0xd2, 0x90, 0xdc, 0x71,
- 0xc6, 0xa8, 0xf4, 0x13, 0x66, 0x4a, 0xb4, 0x48, 0xb9, 0x4b, 0x9b, 0x88,
- 0xae, 0x92, 0xcf, 0x76, 0xf6, 0xf7, 0xb9, 0x70, 0xc4, 0xef, 0x77, 0x7b,
- 0x1a, 0x59, 0x18, 0x86, 0x4b, 0xf7, 0xdc, 0xed, 0x24, 0x6d, 0xb0, 0xf6,
- 0x11, 0xce, 0x73, 0xbe, 0x9c, 0x25, 0xb9, 0xea, 0x21, 0xb8, 0x0f, 0x05,
- 0x40, 0x86, 0x89, 0xd1, 0x86, 0xec, 0x9e, 0x45, 0x29, 0x14, 0x98, 0xe4,
- 0x25, 0xbf, 0xc1, 0x5f, 0x9e, 0x7a, 0xce, 0x71, 0x54, 0xe6, 0x52, 0x64,
- 0x92, 0x1f, 0x86, 0x40, 0x0e, 0x54, 0x8c, 0xec, 0x36, 0x94, 0x55, 0x35,
- 0xa7, 0xe3, 0xc7, 0x60, 0xf0, 0x7b, 0xcf, 0x76, 0x7f, 0x92, 0x40, 0x36,
- 0x26, 0x70, 0xbf, 0x0a, 0x5a, 0x1a, 0x6c, 0xa2, 0xf2, 0x88, 0xa4, 0x81,
- 0x29, 0x61, 0x6c, 0x26, 0x83, 0xeb, 0x81, 0x09, 0x09, 0x6a, 0x38, 0xec,
- 0x85, 0xe1, 0xc4, 0x82, 0x60, 0x2d, 0x35, 0xd9, 0xa1, 0x76, 0x99, 0x6d,
- 0xc8, 0x6c, 0xbb, 0x62, 0x97, 0xac, 0xd4, 0x78, 0xd9, 0xa0, 0x2b, 0xe3,
- 0xe0, 0xe4, 0x94, 0xe3, 0x55, 0x4e, 0x49, 0x02, 0x1b, 0x1a, 0x2b, 0x43,
- 0x48, 0x0f, 0xe2, 0x6d, 0xe6, 0x29, 0xdf, 0xa6, 0x3d, 0x07, 0x2d, 0x6f,
- 0x61, 0xf1, 0x10, 0x2b, 0xd8, 0xee, 0x2e, 0x92, 0xb9, 0xe2, 0x40, 0x91,
- 0x3c, 0x4c, 0xfc, 0xac, 0x10, 0x73, 0x0a, 0xe0, 0x16, 0x19, 0x87, 0x18,
- 0x3e, 0x0e, 0x48, 0xbc, 0xb2, 0xf0, 0xa8, 0x66, 0x91, 0x27, 0xd3, 0xe4,
- 0x4e, 0xed, 0x1e, 0x02, 0x5e, 0xf7, 0x95, 0xba, 0x17, 0xa4, 0x98, 0x5d,
- 0xe9, 0xbd, 0x24, 0x15, 0x0f, 0x06, 0xf7, 0xb9, 0x2d, 0x79, 0xff, 0x3e,
- 0x9d, 0x1b, 0xc5, 0x7f, 0x1d, 0xe0, 0xb2, 0x79, 0x73, 0xf8, 0xbd, 0x3e,
- 0x8b, 0xa0, 0x1a, 0x87, 0xf4, 0xae, 0xd0, 0x8c, 0xdd, 0x7a, 0x54, 0xa0,
- 0xa8, 0xf2, 0x56, 0x0e, 0x49, 0xcc, 0x62, 0x3d, 0xc3, 0xc4, 0x14, 0x63,
- 0x1e, 0x4b, 0x2d, 0x3d, 0x36, 0xa1, 0xa0, 0xa5, 0x2b, 0x92, 0x97, 0x18,
- 0xf9, 0xbc, 0x17, 0xf9, 0xc2, 0xf1, 0xd9, 0x94, 0xfe, 0x44, 0xa0, 0x03,
- 0xaf, 0x3a, 0x9e, 0x65, 0x4c, 0xbf, 0x20, 0xfc, 0x88, 0xfe, 0x94, 0xb0,
- 0x57, 0xfd, 0x0b, 0x4d, 0xe5, 0x4b, 0x40, 0x47, 0xf6, 0x84, 0x58, 0xd9,
- 0x1f, 0x50, 0x8e, 0x07, 0x6e, 0xf4, 0xea, 0x8e, 0x93, 0xf1, 0x1f, 0x99,
- 0xb7, 0xc8, 0xd8, 0x44, 0x96, 0xdb, 0xea, 0xca, 0x2e, 0x8c, 0xa4, 0x7a,
- 0xd5, 0x97, 0x4b, 0xb6, 0x53, 0xbb, 0xea, 0x0c, 0x3c, 0x8a, 0x19, 0x93,
- 0x56, 0x22, 0x85, 0xe2, 0x5c, 0xe3, 0x2c, 0x70, 0x2d, 0x69, 0x77, 0xa5,
- 0xf5, 0xd3, 0xec, 0x9e, 0xab, 0xdc, 0x5d, 0x5d, 0x71, 0xdd, 0xf2, 0xb3,
- 0xb9, 0x87, 0x88, 0x64, 0xae, 0x2a, 0x0f, 0xce, 0xac, 0xb4, 0x06, 0xcd,
- 0xcd, 0x0a, 0xd8, 0x5b, 0xe0, 0xe2, 0x20, 0x3a, 0xc0, 0x2a, 0x91, 0x2c,
- 0x84, 0xe6, 0xc4, 0xcd, 0x06, 0x71, 0xb0, 0x16, 0x27, 0xa7, 0x25, 0x78,
- 0xf9, 0x86, 0x9c, 0xa1, 0xdc, 0x1f, 0xc7, 0x84, 0xcd, 0xb2, 0xb9, 0x85,
- 0x3d, 0x2f, 0x0b, 0x01, 0x0c, 0xb3, 0x7a, 0xbd, 0x1b, 0x62, 0x33, 0x4c,
- 0xa7, 0x8a, 0xd0, 0xab, 0x82, 0x33, 0xde, 0x08, 0x27, 0x33, 0xe9, 0x2f,
- 0x6e, 0x16, 0xb6, 0xd3, 0xc6, 0xaf, 0x84, 0x99, 0x69, 0xa0, 0x2d, 0xae,
- 0xb7, 0xf3, 0xaf, 0xcf, 0x07, 0xd1, 0x31, 0xb7, 0x24, 0x63, 0xd2, 0x7b,
- 0x08, 0x1a, 0x14, 0x7d, 0x47, 0x93, 0xbd, 0x66, 0x06, 0x7e, 0x96, 0xf3,
- 0x5f, 0x68, 0x4d, 0xbf, 0x14, 0xa3, 0x09, 0xbe, 0xad, 0xf6, 0x4a, 0x0d,
- 0x59, 0x44, 0xdc, 0x39, 0x7e, 0xa7, 0xa3, 0x42, 0xdc, 0xd1, 0x6d, 0x93,
- 0xef, 0x21, 0xcb, 0x2b, 0xf0, 0x0a, 0xf2, 0x66, 0x44, 0x4c, 0x13, 0xac,
- 0x6f, 0xb1, 0xc2, 0xfe, 0x41, 0xe1, 0x06, 0x26, 0x87, 0x5e, 0x0f, 0xd2,
- 0x40, 0x40, 0x5a, 0x4a, 0x7e, 0x2e, 0xb0, 0x46, 0xce, 0x55, 0x2e, 0xc0,
- 0x02, 0x79, 0xa2, 0x61, 0x48, 0x99, 0x3a, 0x30, 0x44, 0xdf, 0x28, 0x92,
- 0xda, 0x71, 0x0d, 0xc4, 0x2b, 0xfb, 0x82, 0x85, 0x62, 0x1e, 0x0b, 0x31,
- 0xa1, 0x65, 0x3c, 0x1d, 0x6c, 0xfc, 0x2f, 0xc9, 0x11, 0xc2, 0x43, 0x02,
- 0xff, 0x01, 0x00,
+ 0x87, 0xaa, 0x1a, 0xca, 0xef, 0x4b, 0x1e, 0xad, 0xcb, 0x8f, 0x46, 0x86,
+ 0xdc, 0x3f, 0x89, 0x29, 0xf0, 0xd1, 0xf9, 0xd0, 0xc9, 0x43, 0x2a, 0x50,
+ 0x2f, 0x6d, 0x29, 0x28, 0xca, 0x10, 0x8a, 0xa4, 0x6c, 0x4f, 0x0b, 0x7b,
+ 0x58, 0xb9, 0xb8, 0x7b, 0x99, 0x42, 0xce, 0x85, 0x51, 0xd6, 0xe4, 0xb3,
+ 0xa0, 0xcc, 0x8b, 0x20, 0x27, 0xc5, 0x1b, 0x2d, 0x6a, 0xa3, 0x8f, 0xc0,
+ 0x29, 0x24, 0xa1, 0x47, 0x5a, 0xef, 0x20, 0xd0, 0xdc, 0x46, 0xdc, 0x96,
+ 0x6c, 0x19, 0xfa, 0xfa, 0xe3, 0x69, 0x68, 0x3f, 0x0f, 0x14, 0x08, 0x85,
+ 0x1a, 0xe1, 0x48, 0x7e, 0x44, 0xc0, 0x05, 0xeb, 0xdf, 0x16, 0x73, 0x06,
+ 0xae, 0x4b, 0x4a, 0x06, 0x4d, 0x60, 0xba, 0x52, 0x9c, 0x52, 0xae, 0xfa,
+ 0x2c, 0xe6, 0x22, 0x7e, 0x57, 0x22, 0x26, 0x41, 0xa9, 0x16, 0xea, 0x47,
+ 0xdf, 0x37, 0x4d, 0xf0, 0xae, 0x8a, 0x96, 0x53, 0x61, 0x82, 0xe1, 0x49,
+ 0x28, 0x41, 0xa3, 0x00, 0x85, 0x33, 0x00, 0x36, 0x2b, 0x90, 0xe1, 0xea,
+ 0xe3, 0x9a, 0x98, 0x62, 0xec, 0xc3, 0x7a, 0xd5, 0xcb, 0x34, 0xd9, 0xe6,
+ 0xc0, 0xe6, 0x0c, 0xa4, 0x18, 0x5f, 0x62, 0xb1, 0x1e, 0xd8, 0x50, 0x2b,
+ 0xd0, 0xb5, 0xce, 0xf2, 0xe9, 0x8a, 0x8d, 0x48, 0x4b, 0x88, 0x56, 0xdc,
+ 0xed, 0x05, 0x74, 0x00, 0x15, 0xb8, 0x81, 0x2f, 0xea, 0xea, 0xd2, 0x34,
+ 0x40, 0x42, 0xd8, 0xd2, 0x13, 0xaf, 0x0c, 0xa3, 0x46, 0xda, 0x68, 0x25,
+ 0xc1, 0x5e, 0x10, 0xa2, 0x6b, 0xa5, 0xba, 0x5a, 0xcb, 0x9a, 0x5a, 0xf9,
+ 0x82, 0x4d, 0x0d, 0x3d, 0xdf, 0x72, 0xb1, 0x02, 0x09, 0x9d, 0x28, 0x70,
+ 0x03, 0xb8, 0x80, 0xfe, 0xf4, 0x68, 0x0c, 0xe1, 0xaf, 0xc4, 0x1a, 0xbe,
+ 0x47, 0x98, 0x90, 0x5c, 0x66, 0x6b, 0xab, 0x6b, 0x30, 0x19, 0x19, 0x6e,
+ 0x6e, 0x0a, 0x27, 0xea, 0x98, 0xb4, 0x07, 0xd2, 0x43, 0xec, 0x4d, 0x2d,
+ 0xd7, 0x18, 0xa6, 0x5c, 0x7d, 0x64, 0x91, 0x41, 0x50, 0xb7, 0x43, 0xdb,
+ 0xbf, 0xac, 0x70, 0x1e, 0x27, 0xa7, 0x0a, 0xd2, 0xd9, 0x9a, 0x3a, 0x02,
+ 0x61, 0xb6, 0x87, 0x2c, 0xbc, 0x8e, 0x06, 0x31, 0x10, 0xf7, 0x69, 0xa1,
+ 0x51, 0x57, 0x0a, 0x29, 0xa7, 0xe9, 0x5c, 0xf0, 0xff, 0x7f, 0x75, 0x7c,
+ 0xb9, 0xd5, 0x04, 0x30, 0x8a, 0x27, 0x7e, 0x64, 0x80, 0xb2, 0xd4, 0xf3,
+ 0x20, 0x3e, 0x51, 0xa8, 0x8a, 0x96, 0x40, 0x28, 0x8a, 0x4e, 0xf2, 0xb0,
+ 0x98, 0xc6, 0x73, 0xad, 0xaa, 0x56, 0x6b, 0xee, 0x90, 0x96, 0x81, 0x39,
+ 0x59, 0x10, 0x26, 0xa4, 0x5e, 0x77, 0x57, 0x71, 0xdd, 0x29, 0xdc, 0x48,
+ 0xd1, 0xe1, 0x16, 0x8f, 0x8e, 0x4f, 0x8f, 0x2f, 0x8f, 0x11, 0x41, 0xdd,
+ 0x10, 0x49, 0xa6, 0x28, 0x7e, 0x5c, 0x26, 0xe3, 0x9b, 0x79, 0x46, 0x77,
+ 0xaf, 0x84, 0x74, 0xd0, 0x4d, 0xff, 0x5d, 0x32, 0x3a, 0x3a, 0xf8, 0x56,
+ 0x42, 0x1a, 0x8a, 0xe8, 0xfc, 0xe2, 0xec, 0xfc, 0xf5, 0xc9, 0xdb, 0xa3,
+ 0x5e, 0x74, 0x78, 0x76, 0xfe, 0x43, 0x2f, 0x7a, 0x73, 0xf6, 0xed, 0x71,
+ 0x8b, 0x4f, 0x91, 0xfd, 0xd9, 0xcd, 0x8c, 0xb3, 0xd7, 0x6b, 0x76, 0x3b,
+ 0x44, 0xa4, 0xd4, 0xad, 0x0e, 0x12, 0x7d, 0x4e, 0x4f, 0x86, 0x97, 0xd8,
+ 0xfa, 0x7a, 0xbc, 0x17, 0x62, 0xda, 0x05, 0x78, 0x3d, 0x2d, 0x2c, 0x80,
+ 0x83, 0xab, 0x86, 0xfd, 0x76, 0x54, 0xbd, 0xe2, 0xf0, 0x1e, 0x96, 0xda,
+ 0x15, 0xfb, 0x8a, 0xff, 0x6d, 0xc1, 0x4c, 0x8c, 0xbd, 0xe6, 0xc1, 0xfe,
+ 0x5e, 0x2d, 0xf6, 0x73, 0x23, 0x79, 0x39, 0xf4, 0xb2, 0xe0, 0x34, 0x8d,
+ 0x6a, 0xf2, 0x7a, 0x34, 0x59, 0xe6, 0x4d, 0x89, 0x27, 0x8e, 0x82, 0x0e,
+ 0x25, 0x57, 0xa9, 0x57, 0x51, 0xda, 0xd8, 0xfb, 0x58, 0xf8, 0x82, 0x1e,
+ 0xd4, 0x7d, 0xf0, 0x42, 0xc3, 0xb1, 0x23, 0x88, 0x95, 0x21, 0x02, 0x59,
+ 0x38, 0x24, 0x9b, 0xf6, 0x2e, 0x29, 0xf8, 0x53, 0x86, 0x3b, 0xe2, 0x9b,
+ 0x48, 0x70, 0x88, 0x7e, 0x78, 0xbc, 0x94, 0xb1, 0x84, 0x18, 0x86, 0xbe,
+ 0x78, 0x61, 0x3e, 0x4b, 0x07, 0x8c, 0x89, 0xcb, 0x3c, 0x86, 0x0b, 0x28,
+ 0xc2, 0x9a, 0x34, 0xb5, 0x13, 0xd5, 0x0e, 0x24, 0xc8, 0x21, 0x48, 0x40,
+ 0x43, 0x44, 0x24, 0xdd, 0x2e, 0x72, 0x4a, 0x88, 0xeb, 0xf7, 0x24, 0x13,
+ 0x13, 0x90, 0xd5, 0xfa, 0x5e, 0xbf, 0xc5, 0x40, 0xc2, 0x82, 0xf3, 0x1a,
+ 0x7e, 0xfe, 0xeb, 0xd1, 0xc4, 0x0f, 0x8e, 0x26, 0x64, 0x0d, 0x5f, 0xe2,
+ 0x8f, 0x5f, 0x44, 0x15, 0x01, 0xa4, 0x97, 0xe8, 0x84, 0x9b, 0xe9, 0xbc,
+ 0x4a, 0x1e, 0xfd, 0x46, 0x56, 0xc3, 0x64, 0x4b, 0xcd, 0x4b, 0xc1, 0x6e,
+ 0xab, 0x5d, 0x87, 0xe5, 0xa2, 0x2a, 0x51, 0x54, 0x28, 0xa2, 0x45, 0x9c,
+ 0x91, 0x2d, 0x96, 0x70, 0xe1, 0x94, 0xa1, 0x98, 0xa5, 0xc2, 0x3c, 0x24,
+ 0x9f, 0xdf, 0x70, 0xe9, 0x7e, 0xe6, 0xcc, 0x67, 0x7a, 0xbc, 0x0f, 0xf2,
+ 0x7f, 0x39, 0x61, 0xf1, 0x99, 0x98, 0x9e, 0x86, 0x17, 0xad, 0x45, 0x18,
+ 0xdf, 0x22, 0x66, 0x2a, 0x1c, 0x3c, 0x56, 0xeb, 0x2d, 0x8b, 0x1f, 0x9c,
+ 0xa5, 0x3e, 0x62, 0xb4, 0x3f, 0xad, 0xdb, 0x31, 0xd1, 0xda, 0xf0, 0x58,
+ 0xe1, 0x96, 0x9b, 0x5f, 0x2b, 0x2d, 0x2b, 0x78, 0x23, 0x1f, 0x3f, 0x7a,
+ 0xdc, 0x55, 0xaa, 0x59, 0xd3, 0xa4, 0xda, 0x1a, 0xf9, 0xdb, 0x16, 0x7a,
+ 0x73, 0x10, 0xed, 0xe1, 0x34, 0x4c, 0x28, 0x40, 0x1d, 0x17, 0x04, 0x90,
+ 0x10, 0x53, 0xc3, 0x33, 0x12, 0x42, 0x50, 0x70, 0x97, 0x0d, 0xe5, 0x9a,
+ 0x0d, 0x73, 0x16, 0x11, 0xa9, 0x28, 0x11, 0x08, 0x5e, 0xf0, 0xc0, 0xb9,
+ 0x34, 0x4a, 0xb5, 0xc9, 0x1a, 0xec, 0xaa, 0x81, 0x14, 0xb7, 0x64, 0x70,
+ 0x68, 0x60, 0x82, 0x4f, 0x92, 0xd4, 0x30, 0x6e, 0xe5, 0xb3, 0xbf, 0x53,
+ 0x00, 0x4c, 0x5c, 0x73, 0x48, 0x7a, 0xa7, 0xb6, 0x78, 0x8c, 0x9c, 0xf0,
+ 0xbe, 0x26, 0xe3, 0xbd, 0x90, 0x94, 0xf7, 0xda, 0x64, 0xf5, 0x06, 0x6b,
+ 0x97, 0x9f, 0x84, 0xef, 0xd4, 0xde, 0x50, 0xdc, 0x6c, 0xd4, 0x85, 0xda,
+ 0xec, 0x6f, 0xb9, 0xb8, 0x49, 0x40, 0x8a, 0xca, 0x36, 0x37, 0xed, 0x21,
+ 0xb1, 0xb3, 0x4c, 0xb8, 0xc8, 0xdb, 0x6c, 0x3a, 0xf1, 0xe7, 0xc9, 0xb2,
+ 0x95, 0xb8, 0xb3, 0x6d, 0xb1, 0x7b, 0xba, 0xaa, 0x94, 0x45, 0x53, 0xfe,
+ 0x6e, 0x34, 0x36, 0x4f, 0xee, 0xc3, 0xc6, 0xbc, 0xec, 0xe0, 0x1a, 0xfc,
+ 0x2d, 0x43, 0xd0, 0x19, 0x83, 0x0f, 0x5a, 0x77, 0xd1, 0x8a, 0xca, 0xcb,
+ 0x29, 0xee, 0x01, 0x84, 0x9f, 0x69, 0x4c, 0x10, 0x54, 0x02, 0x1b, 0x73,
+ 0x5f, 0xac, 0x05, 0x20, 0x31, 0x43, 0x27, 0x6d, 0x4b, 0xbd, 0xee, 0x9f,
+ 0xd2, 0x31, 0x74, 0xb5, 0x4b, 0x74, 0xdc, 0xd5, 0x8a, 0xb3, 0x61, 0xa5,
+ 0x7a, 0x29, 0x5a, 0xca, 0xc9, 0x8a, 0xed, 0xd9, 0x3d, 0x20, 0x35, 0xd7,
+ 0x75, 0xc5, 0xe8, 0x1d, 0x75, 0x38, 0xbc, 0x7d, 0x54, 0x2c, 0xf3, 0xc9,
+ 0x72, 0xd6, 0x09, 0xb3, 0xe0, 0x75, 0x61, 0x98, 0x81, 0x36, 0x2b, 0xdc,
+ 0xf3, 0x25, 0x44, 0xbd, 0x3e, 0xdb, 0xa9, 0x59, 0xd0, 0x0d, 0x9f, 0x30,
+ 0x40, 0x24, 0xec, 0xef, 0x86, 0xf4, 0x43, 0xed, 0x35, 0x84, 0xc4, 0x92,
+ 0xef, 0xb5, 0xdf, 0x70, 0xf3, 0x76, 0x68, 0x31, 0x59, 0x00, 0xdf, 0x1d,
+ 0xec, 0xb4, 0x8b, 0xbb, 0x1c, 0xbd, 0x37, 0x4e, 0x7c, 0x71, 0xed, 0x94,
+ 0xd4, 0x57, 0x1e, 0x6d, 0xe1, 0x25, 0x37, 0x89, 0xcb, 0x70, 0x75, 0x88,
+ 0xf5, 0x90, 0xd6, 0xaf, 0x80, 0x2b, 0x57, 0x8d, 0xb7, 0x70, 0x5c, 0x01,
+ 0x69, 0xe9, 0x89, 0x98, 0xd3, 0xf7, 0x9d, 0xa8, 0x19, 0x0c, 0x6f, 0x97,
+ 0x59, 0xee, 0xb4, 0xb8, 0xdb, 0x6d, 0x2d, 0x61, 0x51, 0x1b, 0x1a, 0x4b,
+ 0x62, 0x97, 0xa7, 0x43, 0x17, 0x20, 0xbc, 0x2b, 0x22, 0xb8, 0xc3, 0x3f,
+ 0xf1, 0xb5, 0xeb, 0xd7, 0xd4, 0x66, 0xe7, 0x97, 0x55, 0x08, 0xf7, 0x43,
+ 0xd8, 0xe3, 0x0b, 0xb3, 0x98, 0xde, 0xed, 0xb5, 0x0e, 0xc1, 0xc6, 0x50,
+ 0x19, 0x04, 0x1b, 0x5a, 0x6c, 0x10, 0x7b, 0xcd, 0x41, 0x3c, 0x56, 0x1e,
+ 0x9e, 0x5f, 0x6d, 0x0c, 0xe1, 0x89, 0x0e, 0xe1, 0xc9, 0xc7, 0xae, 0x42,
+ 0x38, 0x80, 0x27, 0xbf, 0x74, 0x15, 0x5a, 0x87, 0xf0, 0x94, 0x03, 0xea,
+ 0x17, 0x77, 0x4f, 0x5b, 0x32, 0x7b, 0xcc, 0x26, 0x06, 0x56, 0x05, 0xb4,
+ 0x94, 0xa9, 0x14, 0xe3, 0xf4, 0x2e, 0x73, 0x2e, 0x43, 0x68, 0x05, 0x45,
+ 0x33, 0xef, 0x61, 0x3a, 0xa9, 0x57, 0x1c, 0xd4, 0x31, 0x7b, 0xe0, 0x6b,
+ 0x41, 0x81, 0xb9, 0xd2, 0x5f, 0x38, 0xc6, 0xb8, 0xaf, 0x3d, 0xd4, 0x8a,
+ 0x4c, 0x4b, 0x99, 0xdc, 0x35, 0xb1, 0xce, 0x48, 0x78, 0x14, 0x44, 0x33,
+ 0x2d, 0xa0, 0x93, 0x71, 0x5b, 0x4f, 0x6d, 0x50, 0x89, 0x04, 0x9e, 0x06,
+ 0xd3, 0x7d, 0x2e, 0xd3, 0x7d, 0xfe, 0x7f, 0xd3, 0x74, 0x9f, 0xaf, 0x9f,
+ 0xee, 0x27, 0x62, 0x55, 0x00, 0x66, 0x68, 0x7f, 0x14, 0xe7, 0x6b, 0x51,
+ 0x95, 0x2d, 0x5c, 0xd2, 0x01, 0x8c, 0x56, 0xc2, 0xfe, 0x0b, 0x41, 0x66,
+ 0x92, 0x6f, 0xa8, 0x99, 0xf5, 0xac, 0xa0, 0x22, 0xd1, 0x33, 0x54, 0x52,
+ 0x51, 0xa6, 0x63, 0xe6, 0x73, 0x5c, 0x0d, 0xc5, 0xc5, 0xf9, 0xfe, 0xf7,
+ 0xf6, 0xa0, 0xb5, 0x22, 0xe7, 0x51, 0xb3, 0x66, 0x66, 0x2f, 0x02, 0xa6,
+ 0x6e, 0x50, 0x7a, 0x33, 0x40, 0xb8, 0xa1, 0x76, 0x8f, 0xdf, 0x7e, 0x7b,
+ 0x72, 0x71, 0xf6, 0xf6, 0xcd, 0xf1, 0x5b, 0x17, 0x6d, 0x73, 0x89, 0xfa,
+ 0x83, 0x6d, 0x56, 0xb4, 0xb6, 0xba, 0x2b, 0x22, 0xff, 0xc2, 0x94, 0xc3,
+ 0x69, 0xb3, 0x8b, 0x85, 0xfe, 0x35, 0x08, 0x9b, 0x0b, 0x1e, 0xb2, 0xe3,
+ 0xc7, 0x42, 0xd9, 0x82, 0x7d, 0x03, 0x13, 0x8e, 0x71, 0x1b, 0x48, 0xe8,
+ 0x91, 0x2b, 0x9d, 0xce, 0xb6, 0xb7, 0x87, 0x71, 0xb2, 0xb0, 0xf5, 0xf3,
+ 0xf7, 0x89, 0x16, 0x6e, 0x0c, 0xa2, 0xd6, 0x2a, 0x83, 0xf0, 0x9b, 0x17,
+ 0x34, 0xf8, 0xa3, 0x19, 0xaf, 0xf6, 0xb7, 0xb7, 0x7f, 0x02, 0x0e, 0xe0,
+ 0xe7, 0x6a, 0xdf, 0x6c, 0x5e, 0xc9, 0xa1, 0x21, 0xc7, 0xd7, 0x06, 0xb1,
+ 0x3c, 0x3f, 0x58, 0xcc, 0x36, 0x02, 0x7f, 0xd6, 0xf0, 0x3d, 0xe9, 0xd2,
+ 0xdf, 0xff, 0xf0, 0x2b, 0x77, 0x31, 0xac, 0x94, 0xa4, 0xf8, 0xd5, 0xbb,
+ 0xa8, 0x68, 0xd7, 0x07, 0xa7, 0xa7, 0xbf, 0x6a, 0x07, 0x50, 0x39, 0xbc,
+ 0xbd, 0xb0, 0xef, 0xec, 0x85, 0x96, 0x24, 0xd9, 0x50, 0x66, 0x2b, 0xda,
+ 0xc9, 0xdb, 0x33, 0x1d, 0x8d, 0x98, 0x9b, 0xfa, 0x56, 0xed, 0x65, 0xe2,
+ 0x2a, 0x29, 0xf2, 0xc0, 0x1a, 0x38, 0xd5, 0xf8, 0x12, 0xa2, 0x93, 0x03,
+ 0xec, 0x34, 0xab, 0x2f, 0x50, 0xcb, 0x90, 0x92, 0x94, 0x39, 0xdb, 0xa2,
+ 0x40, 0x24, 0x9a, 0xd1, 0xba, 0xc5, 0x30, 0xcc, 0x20, 0x14, 0x1c, 0xd2,
+ 0x85, 0xfa, 0xbb, 0x9c, 0xce, 0xc5, 0x44, 0xa7, 0x68, 0xce, 0x25, 0x00,
+ 0xf2, 0x59, 0x11, 0xc0, 0x50, 0xf8, 0x14, 0x7d, 0x7f, 0x72, 0x19, 0x1d,
+ 0x9e, 0x1d, 0xf9, 0x23, 0x7a, 0x29, 0x81, 0x9c, 0x39, 0x4a, 0x26, 0x2d,
+ 0xe7, 0xc4, 0xc4, 0x58, 0x5d, 0x48, 0xaf, 0x80, 0x87, 0xe6, 0x60, 0xd1,
+ 0x11, 0x53, 0x67, 0x76, 0x22, 0x5a, 0x50, 0x29, 0xf8, 0x96, 0x4b, 0xa0,
+ 0xdc, 0x24, 0xb0, 0x22, 0x54, 0x41, 0x82, 0x9d, 0xa9, 0x96, 0xe3, 0xa6,
+ 0x19, 0x3c, 0x87, 0x58, 0x8a, 0x58, 0x1d, 0x88, 0xbb, 0x70, 0xe5, 0xb6,
+ 0xb9, 0x58, 0x93, 0x48, 0xb8, 0x3a, 0xf0, 0xba, 0x44, 0x80, 0x8a, 0x26,
+ 0x85, 0x70, 0x72, 0x14, 0x00, 0xd0, 0x82, 0xa3, 0x0f, 0x8c, 0xd0, 0x8e,
+ 0xd1, 0x54, 0xe2, 0x3e, 0x77, 0xd5, 0xee, 0x3f, 0xf7, 0x80, 0x1a, 0x1e,
+ 0xa3, 0x0a, 0xa6, 0x03, 0x4e, 0x94, 0x98, 0x58, 0xd2, 0x91, 0x81, 0x8c,
+ 0x59, 0x95, 0x14, 0x29, 0x7e, 0xdd, 0xd8, 0x71, 0xd7, 0x84, 0xeb, 0x67,
+ 0x4f, 0xa9, 0x5d, 0x90, 0xe4, 0x59, 0x9e, 0x12, 0xf7, 0x52, 0xfa, 0x73,
+ 0x70, 0xa4, 0x9f, 0xe8, 0x60, 0x2e, 0x4e, 0x69, 0xe6, 0x53, 0xb1, 0x83,
+ 0x6b, 0xcc, 0x37, 0x2a, 0xe4, 0xc0, 0x7b, 0xc2, 0xfa, 0xae, 0x16, 0x3c,
+ 0xf5, 0x6f, 0x3e, 0x33, 0x73, 0x9b, 0x92, 0x82, 0x47, 0xf2, 0x54, 0x2a,
+ 0x10, 0xd7, 0xae, 0x2a, 0x93, 0x4a, 0xa8, 0x12, 0x2c, 0x36, 0x86, 0xbb,
+ 0x4c, 0x6c, 0xdb, 0xcd, 0xda, 0x10, 0xb5, 0x38, 0x9c, 0xe7, 0xb5, 0x7e,
+ 0xac, 0x1b, 0x54, 0x23, 0x97, 0x22, 0x98, 0xe8, 0xa2, 0x1e, 0x70, 0xc5,
+ 0xcd, 0x37, 0x5b, 0xfb, 0xb4, 0xbe, 0x28, 0xbe, 0x6e, 0xbc, 0xb4, 0xe8,
+ 0x9e, 0xfc, 0xcc, 0x31, 0x8b, 0xe8, 0x3e, 0xe1, 0x9c, 0x28, 0x3d, 0x93,
+ 0xa8, 0x69, 0x64, 0xb3, 0xb3, 0xf8, 0x09, 0x49, 0x95, 0x04, 0xd0, 0x95,
+ 0xc6, 0x5b, 0x8e, 0x75, 0xbc, 0x0d, 0xfd, 0x30, 0x0f, 0x39, 0xea, 0x0b,
+ 0xdf, 0x49, 0x14, 0xc3, 0x45, 0xc5, 0xa6, 0xce, 0x79, 0xea, 0x36, 0x41,
+ 0xda, 0x97, 0x8f, 0xd8, 0xf3, 0x47, 0x9c, 0x39, 0x73, 0x7f, 0xeb, 0x1b,
+ 0x0d, 0x9c, 0xa2, 0x5a, 0x18, 0x14, 0xaf, 0x82, 0x54, 0xe3, 0x0b, 0x6b,
+ 0xf8, 0x21, 0x1a, 0x3e, 0x9e, 0xab, 0xdf, 0x42, 0x80, 0xda, 0x19, 0x9c,
+ 0x3b, 0x6b, 0xc4, 0x9c, 0x66, 0x57, 0xa5, 0xab, 0x10, 0xc4, 0x2a, 0xf5,
+ 0x24, 0x40, 0xb8, 0xc4, 0xa9, 0xf6, 0x8d, 0xe2, 0x0c, 0x99, 0x76, 0x0e,
+ 0x07, 0x52, 0xd4, 0x70, 0xcf, 0x05, 0xd5, 0x5e, 0xfd, 0x99, 0xd8, 0xad,
+ 0x2d, 0xf6, 0xf9, 0xc1, 0x70, 0x68, 0x4b, 0x0d, 0x14, 0x29, 0x5b, 0x4f,
+ 0x59, 0x41, 0xf5, 0x6c, 0x22, 0x63, 0x5a, 0x53, 0x0a, 0x5b, 0x0c, 0x19,
+ 0xda, 0x48, 0x2d, 0x3a, 0x62, 0xf7, 0x89, 0x5f, 0x73, 0xd7, 0xd9, 0xb7,
+ 0xd2, 0x5a, 0xef, 0x23, 0x3b, 0x6b, 0xed, 0xeb, 0xdb, 0x96, 0xbe, 0x9e,
+ 0xd6, 0xe6, 0xb5, 0xb7, 0xf7, 0xa9, 0xa6, 0x10, 0xd0, 0x5a, 0x1f, 0x56,
+ 0x28, 0x45, 0x89, 0x43, 0x6d, 0x0d, 0xf4, 0x60, 0xdf, 0xd0, 0x22, 0x92,
+ 0xd6, 0x6a, 0xd9, 0x18, 0x4c, 0xd0, 0xd5, 0x33, 0x3f, 0x2d, 0x92, 0x2a,
+ 0xb8, 0x3d, 0x36, 0x7b, 0xc8, 0x31, 0x69, 0x9c, 0x1e, 0x60, 0x83, 0xf0,
+ 0x51, 0x39, 0xe1, 0x91, 0x11, 0x1f, 0x5f, 0x13, 0x6f, 0x62, 0xc3, 0x08,
+ 0xfa, 0xf9, 0xd4, 0xf5, 0xe3, 0x46, 0xce, 0x7a, 0xa8, 0xe4, 0xd5, 0x0f,
+ 0x42, 0x8e, 0xa0, 0x34, 0x12, 0x44, 0xa4, 0xa9, 0xa3, 0xa0, 0x49, 0xb2,
+ 0xfa, 0xb6, 0xef, 0x45, 0x8e, 0xdf, 0xb9, 0x16, 0xc2, 0x13, 0x50, 0x15,
+ 0x94, 0x07, 0x8b, 0x2b, 0x08, 0x25, 0x52, 0x2a, 0x3d, 0xf6, 0xe6, 0xd5,
+ 0x3c, 0x3c, 0xed, 0xbb, 0x2f, 0x82, 0x35, 0xb1, 0x61, 0x99, 0xad, 0x71,
+ 0xdb, 0x8e, 0x8f, 0x63, 0x21, 0x22, 0xdd, 0xf1, 0xdf, 0x17, 0xc7, 0x97,
+ 0x17, 0x1c, 0xd3, 0x0a, 0x98, 0x95, 0xba, 0xa6, 0x4c, 0x67, 0x6a, 0xcb,
+ 0x99, 0xe5, 0xa5, 0x50, 0x47, 0xc0, 0x75, 0x3d, 0x25, 0x4b, 0x31, 0x62,
+ 0xdc, 0x33, 0x9c, 0x79, 0x5d, 0xa9, 0x4d, 0xec, 0xab, 0x04, 0xc9, 0x3d,
+ 0xe4, 0x23, 0x34, 0xf5, 0x64, 0xb8, 0xf5, 0xf7, 0x71, 0x3e, 0x40, 0x53,
+ 0x14, 0xb6, 0xa6, 0xa1, 0xf0, 0x03, 0x75, 0xbd, 0xbb, 0xa8, 0x14, 0x49,
+ 0x79, 0x8a, 0xcd, 0x43, 0xac, 0x01, 0xe5, 0x0d, 0x23, 0x91, 0xeb, 0x9c,
+ 0xae, 0x49, 0x49, 0x5c, 0xb5, 0xeb, 0xd0, 0x79, 0x03, 0xa5, 0x4b, 0xf9,
+ 0x14, 0x61, 0xea, 0x40, 0xdb, 0x8a, 0x9e, 0xee, 0xec, 0x34, 0x9b, 0x8b,
+ 0x47, 0xd9, 0x9d, 0xb9, 0x26, 0x35, 0xe9, 0x43, 0x4a, 0xfb, 0x60, 0xbf,
+ 0x70, 0x99, 0x42, 0xd7, 0xe8, 0x5f, 0x91, 0xcc, 0xcc, 0x0b, 0x66, 0x66,
+ 0x84, 0x60, 0xd9, 0xe4, 0x50, 0x7e, 0x87, 0x24, 0x14, 0x5d, 0xb2, 0xea,
+ 0x51, 0x94, 0xfc, 0x14, 0xc3, 0x12, 0x8c, 0xad, 0xa6, 0x21, 0x12, 0xd9,
+ 0x56, 0x34, 0xfb, 0x59, 0xcb, 0x3c, 0x15, 0x24, 0x27, 0xe8, 0xe6, 0x59,
+ 0x0b, 0x41, 0x44, 0xc3, 0xcb, 0xb3, 0x8b, 0x28, 0xa8, 0x48, 0x5c, 0xe5,
+ 0xba, 0x88, 0x67, 0xe0, 0x27, 0x9c, 0x77, 0xb6, 0xd7, 0xe2, 0x3a, 0x70,
+ 0x49, 0x92, 0x12, 0x74, 0xc4, 0xd9, 0xf6, 0xbe, 0xd7, 0xe7, 0xde, 0xd1,
+ 0xa5, 0x73, 0xfb, 0x96, 0x34, 0x00, 0xce, 0x1a, 0x34, 0xb8, 0x33, 0xba,
+ 0x1f, 0x49, 0xf0, 0x9e, 0x05, 0xf6, 0x97, 0x3d, 0x39, 0x67, 0x67, 0x4b,
+ 0xd0, 0xba, 0xe4, 0x3b, 0x32, 0x19, 0x69, 0xe6, 0x23, 0x9b, 0xad, 0xd4,
+ 0x30, 0xe5, 0x8c, 0x81, 0x75, 0x52, 0x94, 0x33, 0x74, 0xe6, 0x01, 0xed,
+ 0xc4, 0xf2, 0x3f, 0xa8, 0x79, 0xfd, 0xf0, 0x39, 0x32, 0xd9, 0xd4, 0x8d,
+ 0xa2, 0x24, 0xa4, 0xb5, 0x3b, 0xea, 0x9b, 0x3d, 0x26, 0x51, 0x60, 0xa2,
+ 0x35, 0x7c, 0x25, 0xdc, 0xca, 0xc9, 0x46, 0x5e, 0xac, 0xd8, 0xf1, 0xeb,
+ 0x7c, 0x7e, 0x76, 0x71, 0x69, 0x05, 0x6d, 0xf4, 0xde, 0xc4, 0x47, 0xb5,
+ 0x13, 0xc4, 0xce, 0x7a, 0x48, 0x80, 0x41, 0x6d, 0xf3, 0xf6, 0x5a, 0xf2,
+ 0x02, 0xae, 0x87, 0x56, 0xb5, 0x0d, 0x2e, 0x84, 0x91, 0xaf, 0xcc, 0xf3,
+ 0xe5, 0xca, 0xe5, 0x80, 0xe5, 0x68, 0x2a, 0x0f, 0xf3, 0xe7, 0x76, 0x3f,
+ 0xa6, 0x4f, 0x02, 0x7d, 0xb2, 0xdb, 0x42, 0x1d, 0x2c, 0x80, 0x5f, 0x1c,
+ 0x0f, 0x2f, 0x65, 0xd5, 0xf8, 0xb7, 0xc6, 0xc8, 0x25, 0x15, 0x52, 0x3f,
+ 0x6c, 0x75, 0x2c, 0x81, 0x3a, 0x38, 0x44, 0x66, 0xa6, 0x75, 0xe6, 0x9c,
+ 0x37, 0x28, 0x58, 0xb3, 0x27, 0x41, 0x48, 0x1f, 0x18, 0xa7, 0xd2, 0xca,
+ 0xa5, 0xd5, 0x1d, 0x8c, 0x3a, 0xda, 0x49, 0x87, 0xae, 0x5c, 0x39, 0x14,
+ 0x59, 0x7e, 0x1b, 0xb4, 0xf0, 0x34, 0x60, 0x16, 0xcc, 0xdc, 0xb5, 0x81,
+ 0x13, 0xb3, 0x8c, 0xf3, 0x87, 0xce, 0xf9, 0x7c, 0x9d, 0xcc, 0x8d, 0x30,
+ 0xe4, 0x39, 0xdf, 0xce, 0x33, 0x97, 0x17, 0x6d, 0xe2, 0x51, 0x30, 0x14,
+ 0xfe, 0xd8, 0xa2, 0xe1, 0xe1, 0x68, 0xac, 0x91, 0xdd, 0x93, 0xe7, 0x6e,
+ 0x15, 0x59, 0x74, 0x76, 0xae, 0x1d, 0x99, 0x7e, 0x70, 0x17, 0xb1, 0x6b,
+ 0x2c, 0x9d, 0x2f, 0x13, 0x2d, 0xda, 0x11, 0xe7, 0xd3, 0x14, 0xa1, 0xac,
+ 0xe2, 0x9b, 0x69, 0x18, 0xa2, 0x35, 0xc2, 0xd0, 0xf7, 0xa3, 0x17, 0x11,
+ 0xa9, 0xf1, 0x7e, 0xb7, 0x24, 0xd9, 0x10, 0x27, 0xd9, 0xcb, 0x78, 0x74,
+ 0x70, 0xe7, 0xee, 0xb6, 0x18, 0x44, 0xe7, 0x8c, 0xe5, 0x0a, 0x13, 0x7b,
+ 0xf1, 0x1f, 0xbe, 0x35, 0x39, 0x2c, 0x8c, 0x31, 0xce, 0xd7, 0x27, 0x84,
+ 0xd3, 0x94, 0x8b, 0x70, 0xe3, 0x13, 0xfe, 0x35, 0x40, 0x86, 0x6c, 0x4c,
+ 0xf9, 0x85, 0x7f, 0xb9, 0xa0, 0x89, 0x90, 0x6e, 0x52, 0x7f, 0xe4, 0xa9,
+ 0xd2, 0x16, 0x29, 0x2e, 0x68, 0x82, 0x3b, 0x00, 0x7b, 0xe6, 0x33, 0xcd,
+ 0x5b, 0x92, 0x72, 0x7c, 0x23, 0x5a, 0xb8, 0xb2, 0x67, 0x4c, 0x8c, 0x95,
+ 0xe7, 0x7c, 0x53, 0x72, 0x27, 0x1c, 0xc8, 0x3a, 0x01, 0xe8, 0x82, 0xce,
+ 0x0d, 0x97, 0x4b, 0xa2, 0xb6, 0xe6, 0xcc, 0x70, 0xa7, 0xe6, 0x3b, 0xf7,
+ 0xd9, 0x5e, 0xcc, 0x33, 0x47, 0x76, 0x78, 0xda, 0x0a, 0x8f, 0xd7, 0x80,
+ 0x69, 0x9f, 0x0a, 0x35, 0x3a, 0xd2, 0x71, 0xd7, 0x58, 0x65, 0x74, 0xdc,
+ 0xb1, 0xcb, 0x20, 0xc5, 0x76, 0xb3, 0x6a, 0x89, 0x52, 0x30, 0x41, 0x53,
+ 0xcf, 0x7c, 0x53, 0x57, 0x9c, 0xf9, 0xe7, 0xda, 0xf2, 0x3c, 0xc8, 0x43,
+ 0xb1, 0xa5, 0xee, 0x31, 0xd5, 0x13, 0xe4, 0x2a, 0x6b, 0x68, 0x0a, 0xd5,
+ 0xfb, 0xe3, 0xa9, 0x10, 0xc3, 0x65, 0x96, 0x49, 0x59, 0x4c, 0x17, 0xeb,
+ 0x37, 0x90, 0x28, 0xc2, 0xa6, 0xd9, 0xbd, 0xe8, 0xa9, 0x7a, 0xa5, 0x15,
+ 0xcb, 0xd8, 0x6b, 0xd0, 0xa8, 0xb5, 0xbb, 0x9c, 0x35, 0xca, 0xe5, 0x3c,
+ 0xfd, 0x4c, 0xd5, 0xb7, 0xdb, 0x39, 0x17, 0x8f, 0xbf, 0x3c, 0x3e, 0x7d,
+ 0x7b, 0x7c, 0xe9, 0x00, 0x3b, 0x6c, 0x42, 0xc1, 0xf3, 0x2f, 0xd4, 0xb0,
+ 0xa5, 0xda, 0x95, 0xe1, 0x12, 0xd7, 0xdd, 0xaf, 0xcf, 0x76, 0x9d, 0x6d,
+ 0x87, 0x23, 0xe7, 0xba, 0x85, 0x9c, 0xbf, 0x20, 0x7e, 0x0e, 0x65, 0x8a,
+ 0xbf, 0x8e, 0xde, 0x1c, 0x3d, 0xe3, 0x60, 0xfe, 0xeb, 0x24, 0x67, 0x64,
+ 0x74, 0xaf, 0xec, 0x64, 0x01, 0x27, 0x78, 0xb6, 0x17, 0xe0, 0x49, 0xc8,
+ 0x65, 0x96, 0xea, 0xf9, 0x60, 0x31, 0x96, 0x56, 0x88, 0xf3, 0x4f, 0x49,
+ 0x51, 0x15, 0x6b, 0x20, 0x34, 0x6b, 0xb1, 0x32, 0x2a, 0x76, 0x88, 0xc8,
+ 0x06, 0xf5, 0x7a, 0xc9, 0x55, 0x36, 0xf1, 0xec, 0x89, 0x67, 0x13, 0xf9,
+ 0x6a, 0xc1, 0xa8, 0x67, 0x52, 0x50, 0xb9, 0x85, 0x66, 0x9f, 0x09, 0x6b,
+ 0x3a, 0x94, 0x93, 0xc5, 0xf2, 0x62, 0xf3, 0x35, 0x0e, 0x49, 0x12, 0x73,
+ 0x5b, 0xf0, 0xde, 0xb3, 0x50, 0x5f, 0x2b, 0xb4, 0x92, 0x2a, 0xad, 0x1f,
+ 0x4a, 0x06, 0xa0, 0xfa, 0xb3, 0x7f, 0xf6, 0xb9, 0x7b, 0x96, 0xeb, 0x49,
+ 0xa6, 0x73, 0x05, 0xa3, 0x79, 0xe4, 0x0d, 0x95, 0x32, 0xe5, 0xf2, 0xf5,
+ 0x31, 0x32, 0x22, 0x5b, 0x04, 0x6b, 0x1f, 0xbc, 0xf2, 0xa2, 0xaa, 0x8e,
+ 0x02, 0xe7, 0xd4, 0xd7, 0xb8, 0xe0, 0x49, 0xa5, 0x8b, 0x9b, 0x90, 0xfc,
+ 0x9f, 0xcb, 0x5d, 0x78, 0xce, 0xe1, 0x90, 0x95, 0xfd, 0x34, 0x36, 0x53,
+ 0x41, 0x01, 0xb0, 0xd3, 0x24, 0xd4, 0x75, 0x78, 0x60, 0x6f, 0xd4, 0x49,
+ 0x93, 0x1f, 0x0d, 0x2e, 0x8f, 0xe7, 0xbb, 0x4a, 0x95, 0x34, 0xe5, 0xec,
+ 0x7a, 0x4e, 0x3a, 0xfe, 0xa4, 0x59, 0x16, 0x34, 0x78, 0x7c, 0x4f, 0x8f,
+ 0xa4, 0x54, 0xd4, 0x05, 0xdb, 0x61, 0xfc, 0x61, 0xff, 0xc0, 0x13, 0xa5,
+ 0x5a, 0x71, 0xa5, 0x49, 0xb1, 0x74, 0x06, 0x7e, 0x66, 0x1b, 0x62, 0x52,
+ 0x09, 0xad, 0x7f, 0xfe, 0x54, 0xa5, 0x1b, 0x93, 0x42, 0x99, 0xf3, 0xf3,
+ 0x42, 0x4c, 0x19, 0x6c, 0xa1, 0xc1, 0x08, 0x9f, 0xeb, 0xe5, 0xa2, 0x5b,
+ 0x59, 0x5a, 0xe9, 0x6e, 0xe5, 0x81, 0x05, 0xe2, 0x6a, 0xef, 0xd3, 0xb9,
+ 0xc6, 0x7f, 0x37, 0x5e, 0x7f, 0xbe, 0xc6, 0xaa, 0xa1, 0xbe, 0x88, 0x63,
+ 0xd0, 0x52, 0xf0, 0xfc, 0xa7, 0xee, 0x24, 0x38, 0x90, 0xae, 0x9e, 0x8b,
+ 0xf3, 0x82, 0x57, 0xdb, 0xa0, 0x14, 0xed, 0x20, 0x41, 0xaf, 0x5e, 0xf8,
+ 0xaa, 0x18, 0x6d, 0xae, 0x3c, 0xd7, 0x3d, 0xe9, 0xe4, 0x51, 0x1a, 0x1c,
+ 0xe3, 0xe7, 0x42, 0x52, 0xaf, 0xe1, 0x49, 0xb6, 0x73, 0xc0, 0xe1, 0xb8,
+ 0x21, 0xca, 0xb5, 0x7f, 0xfa, 0x85, 0xd2, 0x86, 0xdd, 0x48, 0x26, 0x08,
+ 0xae, 0x7d, 0xe3, 0xd3, 0x9d, 0x50, 0x2c, 0x9c, 0xb0, 0x2d, 0x4d, 0xd2,
+ 0xa9, 0xd7, 0xbe, 0x20, 0x94, 0x71, 0x42, 0x8c, 0xfa, 0x9a, 0x88, 0x1a,
+ 0xcf, 0x78, 0x18, 0x01, 0xff, 0xd8, 0x5e, 0x95, 0xad, 0x85, 0x42, 0x4a,
+ 0x74, 0x72, 0x14, 0x3c, 0xf8, 0xc4, 0x4f, 0x30, 0x9e, 0xf2, 0x7d, 0xbb,
+ 0x12, 0x4d, 0xbf, 0x50, 0xa0, 0xf1, 0xe0, 0xd1, 0xa7, 0x1a, 0x85, 0xc9,
+ 0xf1, 0xb7, 0x37, 0xb2, 0xfe, 0x8d, 0x67, 0x84, 0x1c, 0x0e, 0x5d, 0xe1,
+ 0x65, 0x09, 0xa7, 0x2c, 0xda, 0xae, 0xd9, 0x4f, 0x9f, 0x3f, 0xf2, 0xac,
+ 0x5e, 0x4b, 0x85, 0xbb, 0x4c, 0x83, 0xf7, 0x3e, 0x6d, 0x1e, 0x73, 0x13,
+ 0xbc, 0x2d, 0x5a, 0x59, 0x4f, 0x5a, 0xb4, 0xc9, 0xc1, 0xd7, 0xff, 0x61,
+ 0xa6, 0x95, 0x9c, 0xa3, 0x30, 0x8b, 0xff, 0x08, 0xc7, 0xfb, 0x59, 0x18,
+ 0xf2, 0x2c, 0x76, 0x15, 0x57, 0x93, 0x21, 0x84, 0xc6, 0xf5, 0xd5, 0x4d,
+ 0xb0, 0x3a, 0x41, 0x0b, 0xb2, 0xe7, 0x74, 0x53, 0x07, 0x75, 0xa2, 0x55,
+ 0xd3, 0xd2, 0x14, 0x75, 0x8b, 0x78, 0xd2, 0xd1, 0x7d, 0x4d, 0x9b, 0x0a,
+ 0xea, 0x08, 0xac, 0x53, 0x3b, 0xb5, 0x63, 0x50, 0xdc, 0x2c, 0x45, 0xb5,
+ 0x75, 0x33, 0xf2, 0xe5, 0xec, 0x83, 0xd7, 0xf6, 0x3c, 0xf7, 0xd2, 0x8b,
+ 0x55, 0xf2, 0x30, 0x0e, 0x19, 0xfe, 0x57, 0xf4, 0xdf, 0x08, 0xa4, 0xc8,
+ 0x57, 0x31, 0x0d, 0x08, 0xb5, 0x62, 0x0c, 0xf4, 0x60, 0x33, 0x6e, 0x4f,
+ 0xcc, 0xd2, 0x38, 0xea, 0xa0, 0x1b, 0x15, 0x1e, 0xd8, 0x81, 0x4b, 0xbb,
+ 0x74, 0x93, 0x8c, 0x6f, 0xed, 0xc8, 0xb8, 0x36, 0x9a, 0x6f, 0x7d, 0xff,
+ 0xbd, 0xf0, 0x1c, 0x07, 0xf9, 0xa2, 0xd6, 0x53, 0x07, 0x68, 0x4e, 0x67,
+ 0x54, 0x60, 0xc4, 0x79, 0xbb, 0x51, 0xcc, 0x3a, 0x4f, 0xa6, 0x09, 0x03,
+ 0x87, 0x89, 0x64, 0x8a, 0x85, 0x6e, 0x0b, 0x7e, 0xe4, 0x88, 0x10, 0x29,
+ 0xc5, 0x93, 0x28, 0xb8, 0xdc, 0x9c, 0xfd, 0xd7, 0x6a, 0xa0, 0xa0, 0x11,
+ 0x1c, 0xbc, 0xbb, 0xfc, 0xfa, 0xec, 0x62, 0x18, 0x6d, 0x73, 0x9e, 0xf4,
+ 0xe5, 0xc5, 0xc9, 0x97, 0xef, 0x48, 0xe1, 0x73, 0x96, 0xe7, 0xa3, 0x98,
+ 0x14, 0xc1, 0x29, 0x87, 0x6a, 0x24, 0xf3, 0x51, 0x92, 0x5f, 0x1b, 0xf0,
+ 0x38, 0x90, 0x4d, 0x98, 0x77, 0x67, 0xb9, 0xaf, 0xd2, 0x21, 0x85, 0xb0,
+ 0xcd, 0xb2, 0x8e, 0xf0, 0xaf, 0x94, 0xbe, 0xcb, 0xbc, 0x36, 0x93, 0x56,
+ 0x73, 0xdf, 0x7d, 0xf5, 0xf5, 0xcb, 0xaf, 0x0f, 0xde, 0x7e, 0x33, 0x34,
+ 0x74, 0xbb, 0xef, 0xbe, 0xfb, 0x2e, 0x74, 0xbc, 0xec, 0x6f, 0x6f, 0x03,
+ 0xcf, 0xec, 0x26, 0x7e, 0x78, 0x18, 0x14, 0xc9, 0xc6, 0x06, 0x9d, 0xa3,
+ 0x0d, 0x9f, 0x4b, 0xa0, 0x90, 0xc7, 0xc5, 0x92, 0x6e, 0x3a, 0xfa, 0x7a,
+ 0x7b, 0xb1, 0x1c, 0x31, 0xc4, 0xf2, 0xf6, 0xb2, 0xd4, 0x82, 0x12, 0x78,
+ 0x7b, 0x7b, 0x63, 0x63, 0x78, 0x7c, 0x1c, 0x1d, 0x9c, 0x0e, 0xcf, 0x82,
+ 0x77, 0x37, 0x77, 0xb7, 0x48, 0x12, 0xb8, 0x4e, 0x4a, 0xfa, 0x65, 0x63,
+ 0xe3, 0xf4, 0xe0, 0x92, 0x95, 0x9c, 0x6f, 0x8f, 0x2f, 0x86, 0x27, 0x67,
+ 0x6f, 0x79, 0x77, 0x18, 0x08, 0x22, 0x9e, 0xde, 0x33, 0xf6, 0xd6, 0x55,
+ 0x8a, 0x3c, 0xcd, 0x7b, 0x2b, 0xe5, 0xc0, 0xe0, 0x26, 0x24, 0xaa, 0x88,
+ 0xec, 0x26, 0x8e, 0x25, 0xab, 0xf3, 0x23, 0x31, 0x01, 0x25, 0xab, 0x1a,
+ 0xe6, 0x7d, 0xdc, 0x88, 0xbc, 0xa1, 0x43, 0xa0, 0xde, 0x93, 0x91, 0x84,
+ 0xcc, 0xf4, 0x04, 0x81, 0x00, 0xc1, 0xea, 0x01, 0x44, 0x42, 0xeb, 0xc4,
+ 0x87, 0x27, 0x6f, 0xce, 0x49, 0xe6, 0x7f, 0x37, 0x3c, 0xf8, 0xea, 0x98,
+ 0x1f, 0xfd, 0x2a, 0x29, 0xfd, 0x76, 0x48, 0xc9, 0x09, 0xee, 0xe4, 0x6d,
+ 0x52, 0x16, 0xe3, 0x78, 0xc1, 0x71, 0xe7, 0xd4, 0x4d, 0x5f, 0xf8, 0x62,
+ 0xd0, 0xb6, 0x48, 0x7f, 0x1e, 0x8c, 0x7a, 0xae, 0xcf, 0x03, 0x29, 0x3a,
+ 0x6c, 0xf7, 0xe2, 0xf8, 0xe0, 0xe8, 0xcd, 0xb1, 0x05, 0x54, 0xc9, 0x3d,
+ 0x42, 0x8d, 0xde, 0x64, 0x5c, 0xbd, 0xc6, 0x99, 0x3e, 0xf9, 0xae, 0xe2,
+ 0xc5, 0xa7, 0x6f, 0xb8, 0x24, 0x43, 0x7b, 0x77, 0x7e, 0xa3, 0xf0, 0xec,
+ 0xe0, 0x2a, 0xdd, 0x96, 0xd6, 0xad, 0xbf, 0xd8, 0x2d, 0x89, 0x45, 0x26,
+ 0xa9, 0xfc, 0x26, 0x6a, 0x2c, 0xd4, 0xdf, 0xcf, 0x76, 0x76, 0x76, 0x1e,
+ 0x99, 0x07, 0x0c, 0x8d, 0x7a, 0x0b, 0xd0, 0x54, 0xf6, 0xf9, 0xf1, 0x6d,
+ 0xdf, 0xbe, 0x51, 0x66, 0x68, 0xb6, 0xe5, 0x3f, 0xe7, 0xa2, 0x78, 0xa7,
+ 0x65, 0xd2, 0x3e, 0xe8, 0x71, 0x96, 0xb9, 0x3d, 0xa8, 0x2c, 0xcf, 0x84,
+ 0x71, 0x6e, 0xd2, 0x32, 0xc0, 0x49, 0xb3, 0xa1, 0x4f, 0x52, 0xb0, 0x9f,
+ 0x38, 0x5f, 0xd5, 0x9b, 0xe4, 0x6f, 0xa8, 0x4d, 0xfe, 0x31, 0xc8, 0xf2,
+ 0xeb, 0xed, 0xd9, 0x3e, 0x2e, 0x59, 0x7a, 0xe8, 0x75, 0x82, 0xba, 0x3f,
+ 0xf7, 0x99, 0x0b, 0x3d, 0x2a, 0x78, 0x69, 0x39, 0xca, 0xf1, 0x23, 0xc6,
+ 0xf5, 0x0b, 0xd6, 0x01, 0xdb, 0xc9, 0xf5, 0x65, 0x65, 0xe6, 0x16, 0x8e,
+ 0xd1, 0xd2, 0x49, 0xc1, 0x5b, 0xc6, 0x66, 0xa6, 0x01, 0xb1, 0x10, 0xea,
+ 0x85, 0x3e, 0x17, 0x22, 0xa1, 0x5f, 0x73, 0x22, 0x9a, 0x41, 0xf9, 0x50,
+ 0xf2, 0x5b, 0xec, 0xac, 0x55, 0x6b, 0x31, 0x60, 0xab, 0x88, 0x65, 0xe5,
+ 0x19, 0xc9, 0xe8, 0xb1, 0xa4, 0xdf, 0x0c, 0x11, 0xd6, 0x1e, 0x44, 0xa3,
+ 0x21, 0xd4, 0x9d, 0x1b, 0xae, 0xf7, 0xd9, 0xef, 0x83, 0x82, 0x0a, 0x47,
+ 0x2f, 0x1f, 0xd1, 0x79, 0x30, 0x29, 0x59, 0xfd, 0xb9, 0x5e, 0x1c, 0x01,
+ 0xf5, 0x0c, 0x69, 0x14, 0x8d, 0xbe, 0x00, 0xb2, 0x94, 0x23, 0xe8, 0xad,
+ 0x90, 0xee, 0x50, 0xb4, 0x66, 0x90, 0x48, 0xa1, 0x2a, 0xf4, 0x45, 0x7b,
+ 0xb2, 0x8d, 0x68, 0x9c, 0x8f, 0xee, 0xe9, 0xf0, 0xdc, 0xd5, 0xc0, 0xa1,
+ 0x15, 0xb8, 0xe3, 0x25, 0xb8, 0x4d, 0x30, 0xfb, 0x50, 0xd6, 0x7d, 0x64,
+ 0x30, 0xfb, 0xb4, 0x0a, 0xfc, 0xc6, 0x7f, 0x6f, 0x0f, 0x8a, 0xe2, 0x66,
+ 0x3b, 0x9d, 0xbc, 0x9f, 0x14, 0x31, 0x7d, 0x46, 0x7c, 0xad, 0xf1, 0xf1,
+ 0x80, 0x3e, 0x8c, 0xfe, 0x52, 0xe1, 0xfb, 0xc5, 0xb8, 0x7d, 0x26, 0xff,
+ 0xbd, 0xcd, 0xe0, 0x5f, 0x00, 0x28, 0x0e, 0x16, 0xae, 0x85, 0x7b, 0xd0,
+ 0xac, 0x04, 0x67, 0x8e, 0x8e, 0x63, 0x3b, 0x65, 0xf4, 0xaf, 0xa3, 0x8e,
+ 0x92, 0xdb, 0x8f, 0x7b, 0x3b, 0x3b, 0xbb, 0xfb, 0xbb, 0x9f, 0xbd, 0xd8,
+ 0xd9, 0xdf, 0xdd, 0xdd, 0xdd, 0xdb, 0xdf, 0xdd, 0xdf, 0xdf, 0xdb, 0xf9,
+ 0x69, 0xbb, 0xb3, 0xb1, 0x71, 0x74, 0xf6, 0xdd, 0xdb, 0xd3, 0xb3, 0x83,
+ 0xa3, 0xe8, 0xf2, 0x8c, 0xf4, 0x5d, 0xb6, 0x55, 0xb4, 0x9c, 0x74, 0xa0,
+ 0x3e, 0x95, 0x99, 0xdc, 0x6c, 0x71, 0x50, 0xa2, 0xa3, 0xd1, 0x65, 0x06,
+ 0xa1, 0x98, 0x5f, 0x1a, 0xdc, 0x94, 0xb3, 0x0f, 0xb3, 0xaf, 0x8f, 0xe9,
+ 0xa4, 0x27, 0x51, 0x61, 0x5e, 0xef, 0xc1, 0xd6, 0x1a, 0x91, 0x2a, 0x94,
+ 0xa9, 0x2b, 0x3a, 0x0e, 0x27, 0x9b, 0x8b, 0x0a, 0xdc, 0x14, 0xd7, 0xb4,
+ 0x8f, 0x9b, 0x94, 0xe2, 0x24, 0x45, 0x35, 0xa0, 0xc1, 0x15, 0x0b, 0x50,
+ 0xbf, 0xa5, 0x14, 0x66, 0x27, 0x79, 0x60, 0xab, 0x31, 0xc1, 0xb3, 0xb5,
+ 0x53, 0xa2, 0x8b, 0x27, 0x79, 0xc0, 0xac, 0xab, 0x6c, 0x42, 0x90, 0xcc,
+ 0xfc, 0xec, 0x80, 0x60, 0x64, 0x9a, 0x5c, 0x9a, 0xdb, 0x90, 0xe1, 0xbe,
+ 0x6e, 0xe9, 0x8e, 0xfb, 0x31, 0xee, 0xe1, 0xbb, 0xe0, 0x6f, 0xc2, 0x4b,
+ 0x67, 0xdb, 0x99, 0x9f, 0x64, 0x00, 0xef, 0x86, 0x27, 0x6f, 0xbf, 0x82,
+ 0x7f, 0xe9, 0xbb, 0xb3, 0x8b, 0xa3, 0x21, 0x35, 0xcb, 0xb7, 0xf1, 0x06,
+ 0x2c, 0x10, 0x7c, 0x68, 0x75, 0x54, 0x72, 0x04, 0xb8, 0xeb, 0x3f, 0x41,
+ 0xe3, 0x98, 0xf4, 0x5c, 0xea, 0x01, 0x86, 0x19, 0x48, 0x8b, 0x9c, 0x52,
+ 0xd0, 0xce, 0xe0, 0x70, 0x1a, 0xe4, 0xf5, 0x2f, 0x66, 0x31, 0x83, 0xc1,
+ 0x26, 0x03, 0x41, 0x55, 0x43, 0x24, 0xc1, 0x36, 0xc3, 0xaa, 0x6c, 0xb3,
+ 0xd4, 0xba, 0x5d, 0x66, 0x60, 0x15, 0x68, 0x25, 0xcb, 0x1d, 0x80, 0x6e,
+ 0x65, 0x45, 0xf8, 0x8c, 0x5d, 0x4d, 0xe3, 0x6b, 0x74, 0xd8, 0x3c, 0x7e,
+ 0x41, 0x67, 0xda, 0xfd, 0xc7, 0x76, 0x89, 0x9a, 0x7d, 0xdc, 0xde, 0x09,
+ 0x08, 0x00, 0xd9, 0xee, 0xc8, 0x93, 0x50, 0xc3, 0xb8, 0x48, 0x48, 0xa8,
+ 0x31, 0xc3, 0x2e, 0x76, 0x2e, 0x84, 0x51, 0x47, 0xfa, 0xd5, 0x02, 0x95,
+ 0x1b, 0x62, 0x54, 0xe8, 0x07, 0x69, 0x51, 0x22, 0xd9, 0xa3, 0x92, 0x9c,
+ 0x57, 0xa0, 0x0b, 0xc4, 0xc3, 0xa3, 0x4f, 0x24, 0x7a, 0x41, 0x5f, 0x94,
+ 0x25, 0xe7, 0xc1, 0xd0, 0xd8, 0x23, 0x89, 0x88, 0xe1, 0xdc, 0x1f, 0x15,
+ 0xd9, 0x3a, 0x0c, 0xb3, 0x9c, 0x8e, 0xd3, 0xb2, 0x63, 0x49, 0x46, 0x1e,
+ 0x78, 0xcb, 0x3b, 0xc0, 0x8a, 0x92, 0x86, 0x12, 0xd3, 0xed, 0xa1, 0x55,
+ 0x47, 0x34, 0xe9, 0x36, 0x9b, 0xcd, 0x24, 0x1b, 0xb3, 0xc3, 0x09, 0x28,
+ 0xbe, 0x95, 0x54, 0x73, 0xa9, 0x5c, 0x5d, 0x0d, 0xe6, 0xb3, 0xdc, 0xbb,
+ 0xa4, 0x7f, 0x48, 0x34, 0xbe, 0xb1, 0x74, 0x6f, 0xf7, 0x61, 0x76, 0x4c,
+ 0x12, 0x27, 0xf1, 0x4a, 0xa1, 0x1c, 0x8d, 0xe9, 0x0f, 0x90, 0xfd, 0x2b,
+ 0xcb, 0x16, 0x56, 0x2f, 0x69, 0x70, 0xd5, 0x6a, 0x6a, 0xc8, 0x06, 0x02,
+ 0x81, 0x5d, 0x32, 0x53, 0xb0, 0x3c, 0x5a, 0x50, 0xcf, 0xbd, 0xca, 0x7b,
+ 0x91, 0x96, 0x45, 0x32, 0xbd, 0xd2, 0x22, 0x74, 0x5a, 0xf7, 0x6d, 0xb4,
+ 0x0a, 0x1a, 0x90, 0x49, 0x48, 0xfc, 0xef, 0x72, 0xee, 0x32, 0x62, 0x32,
+ 0xe5, 0x19, 0xd7, 0x60, 0x9c, 0x8a, 0xe0, 0x5d, 0x65, 0x14, 0xe2, 0x99,
+ 0x19, 0x18, 0xc4, 0xed, 0x46, 0xe4, 0x00, 0x7a, 0x6b, 0x53, 0x70, 0x68,
+ 0x70, 0x80, 0xe4, 0x02, 0x75, 0x04, 0x0f, 0x2e, 0x47, 0xb4, 0xda, 0xee,
+ 0x39, 0x5e, 0x3b, 0xb6, 0x71, 0x63, 0xd5, 0x0e, 0xc3, 0xb2, 0x2a, 0x02,
+ 0x43, 0x68, 0x70, 0x7e, 0x7e, 0x50, 0x34, 0x40, 0x18, 0xc5, 0xe9, 0xa0,
+ 0x21, 0x58, 0x75, 0x59, 0xb8, 0x15, 0x05, 0x8a, 0x77, 0xec, 0x8a, 0x07,
+ 0xb5, 0x1d, 0x43, 0xe5, 0x48, 0xeb, 0xcf, 0xe1, 0x87, 0x8f, 0x60, 0x73,
+ 0x48, 0x26, 0xf4, 0x4f, 0x57, 0x72, 0x4a, 0xd2, 0xf9, 0xe3, 0x87, 0x51,
+ 0x07, 0xf1, 0x51, 0x1d, 0x63, 0xae, 0x9a, 0x97, 0x04, 0x6b, 0xa8, 0x8f,
+ 0x92, 0x11, 0x07, 0x2c, 0x22, 0xed, 0x5b, 0xd0, 0x3e, 0x2b, 0x70, 0x8e,
+ 0x38, 0x08, 0x12, 0xe6, 0xbb, 0x1f, 0x7d, 0x19, 0x17, 0xe9, 0xb8, 0x17,
+ 0x1d, 0xa5, 0x24, 0xab, 0x97, 0x3d, 0x8f, 0xc9, 0xe8, 0x90, 0x2c, 0x07,
+ 0xd1, 0x77, 0x56, 0x1d, 0x94, 0xee, 0x5c, 0xc4, 0x9e, 0xc2, 0xb4, 0xe8,
+ 0x12, 0xd5, 0x36, 0xc4, 0x66, 0xab, 0x56, 0xd7, 0x30, 0x29, 0x0c, 0x6d,
+ 0x7b, 0xb8, 0x39, 0x6c, 0x66, 0x5c, 0xdc, 0x56, 0x81, 0xd6, 0x45, 0xaa,
+ 0x2a, 0xd8, 0x76, 0xc8, 0x22, 0x10, 0xd6, 0x77, 0xae, 0x85, 0x2e, 0x94,
+ 0xe6, 0xb2, 0xb9, 0x05, 0x28, 0x79, 0x47, 0xaa, 0xda, 0x72, 0x0a, 0x0d,
+ 0x9b, 0x31, 0x4f, 0x2f, 0x6e, 0x23, 0x3b, 0xae, 0x1b, 0x08, 0x2d, 0xa7,
+ 0x75, 0xe2, 0x15, 0x51, 0x7e, 0x72, 0x76, 0x79, 0xfc, 0xbb, 0x68, 0x98,
+ 0x72, 0x9d, 0x45, 0x47, 0x39, 0x7c, 0xc8, 0xd9, 0xd9, 0xad, 0x5e, 0xa8,
+ 0xc6, 0x9e, 0xba, 0x34, 0x55, 0x35, 0x0b, 0x5a, 0x2e, 0x84, 0x94, 0xcf,
+ 0xb9, 0x97, 0xf2, 0xe5, 0xbc, 0x32, 0xa0, 0xd9, 0xbb, 0x34, 0x8e, 0x5c,
+ 0x01, 0x6b, 0x9e, 0xfb, 0x7b, 0x26, 0xfd, 0xf7, 0x1e, 0x62, 0x7c, 0xa9,
+ 0x2f, 0x02, 0x00, 0x8e, 0xdb, 0x51, 0x9b, 0x00, 0x6c, 0x29, 0xe3, 0x34,
+ 0xa7, 0x2b, 0x98, 0xf9, 0xd4, 0x58, 0xcc, 0x80, 0x88, 0x71, 0xc3, 0xd8,
+ 0xd9, 0xcc, 0x11, 0x8f, 0x88, 0xae, 0xb0, 0x5c, 0x63, 0xa4, 0xc3, 0x09,
+ 0x3c, 0xb8, 0x9a, 0x16, 0xed, 0xdc, 0x85, 0xac, 0x14, 0x09, 0xa1, 0x48,
+ 0xab, 0x43, 0x85, 0x0e, 0x85, 0x20, 0xdc, 0x40, 0xdc, 0x18, 0xb5, 0x0a,
+ 0x59, 0x62, 0xee, 0x6e, 0xb6, 0x40, 0xb6, 0xe3, 0xb0, 0x1e, 0xa6, 0xd3,
+ 0x49, 0x34, 0x5b, 0x69, 0xca, 0xb3, 0xf2, 0x61, 0xce, 0xd1, 0x81, 0xba,
+ 0xf2, 0xd9, 0x67, 0x8d, 0x7b, 0xf7, 0xc1, 0x3d, 0xbd, 0x4f, 0x5f, 0x07,
+ 0x6a, 0xd1, 0x94, 0x7d, 0x8e, 0x56, 0x0a, 0xc8, 0xeb, 0x46, 0x0d, 0x99,
+ 0x33, 0x4c, 0x63, 0x94, 0x0e, 0x9d, 0xfd, 0xb0, 0x65, 0x5f, 0x5c, 0xb5,
+ 0xa3, 0x0d, 0x11, 0xba, 0x65, 0x9c, 0x71, 0x21, 0x9e, 0xeb, 0x35, 0x52,
+ 0xa8, 0x9d, 0xbc, 0xfa, 0x60, 0x03, 0x01, 0x85, 0x84, 0xa4, 0x01, 0xcb,
+ 0x34, 0x2c, 0x6f, 0x0d, 0x33, 0x6d, 0x98, 0x73, 0x4e, 0x74, 0x30, 0x0e,
+ 0xb3, 0xb0, 0x7a, 0xd6, 0x06, 0x0e, 0x32, 0xdf, 0xdd, 0x18, 0xfd, 0x77,
+ 0xeb, 0x87, 0xf3, 0xee, 0x9f, 0x19, 0xce, 0x41, 0xf4, 0x68, 0xb0, 0x9f,
+ 0xd6, 0x3f, 0x60, 0x26, 0x52, 0xe8, 0x49, 0x9d, 0x64, 0x30, 0x08, 0x19,
+ 0xfd, 0xc9, 0x1a, 0x8d, 0xd9, 0x09, 0x30, 0xaa, 0x62, 0x4d, 0x36, 0xd5,
+ 0x95, 0x79, 0x26, 0x4f, 0x43, 0x7e, 0xe4, 0xf6, 0x7b, 0x36, 0x94, 0x8f,
+ 0x1d, 0xae, 0xe5, 0xb9, 0x5b, 0xb4, 0xaa, 0xef, 0x4f, 0x32, 0xb0, 0xa4,
+ 0x85, 0x20, 0xe6, 0x5f, 0x10, 0xc8, 0xe5, 0x79, 0xc6, 0x1e, 0x7f, 0x40,
+ 0xe0, 0x06, 0x0d, 0xd6, 0x97, 0x90, 0xe3, 0x99, 0x20, 0x33, 0xaa, 0xf6,
+ 0x9a, 0x7e, 0xb6, 0x2b, 0x70, 0x4d, 0xc4, 0x1e, 0x15, 0x1b, 0x8f, 0xf4,
+ 0x4c, 0xba, 0xac, 0x16, 0x08, 0x3f, 0xac, 0x96, 0xeb, 0x92, 0x7b, 0x45,
+ 0x8a, 0xce, 0x63, 0xe5, 0x82, 0x5a, 0xd6, 0x28, 0xfc, 0x25, 0x63, 0x94,
+ 0xba, 0xc6, 0x5a, 0x0e, 0x45, 0x8a, 0xac, 0xe2, 0x9e, 0x4f, 0x12, 0x69,
+ 0xa9, 0x5c, 0x1b, 0x06, 0x7c, 0x18, 0x30, 0x5e, 0x21, 0x67, 0xb0, 0xef,
+ 0xe8, 0x6a, 0x99, 0x23, 0x3c, 0x43, 0xb3, 0xd1, 0x35, 0x99, 0x90, 0x1a,
+ 0xbd, 0x38, 0x78, 0xfb, 0xd5, 0x31, 0xce, 0x3b, 0xb3, 0x5d, 0x9f, 0x3a,
+ 0xcb, 0xb9, 0x71, 0x7d, 0x38, 0x8b, 0x0b, 0x01, 0xeb, 0x48, 0xf9, 0x8d,
+ 0xc9, 0x72, 0xcc, 0x7e, 0xea, 0x77, 0x7a, 0x0c, 0xd2, 0x02, 0x38, 0x9d,
+ 0xd3, 0x94, 0x07, 0xc1, 0x2c, 0x57, 0x5d, 0xc2, 0x1b, 0x91, 0xa9, 0xa7,
+ 0xe0, 0x18, 0x2c, 0xd2, 0xd0, 0x0a, 0x41, 0x97, 0x2d, 0x96, 0xa3, 0x45,
+ 0xac, 0x29, 0x5a, 0x71, 0x98, 0xf5, 0xa3, 0x9a, 0xc0, 0xa0, 0x32, 0x05,
+ 0xbe, 0x3b, 0x24, 0x20, 0xd2, 0x49, 0x9d, 0x39, 0xa4, 0xce, 0x41, 0xa8,
+ 0x71, 0x09, 0x3e, 0xd2, 0xee, 0xce, 0x8e, 0xc7, 0xdc, 0xf1, 0xd9, 0x4b,
+ 0x0d, 0x22, 0xcb, 0xa3, 0x9d, 0xfe, 0x8b, 0x17, 0xeb, 0xe8, 0xc7, 0x35,
+ 0x8a, 0x2c, 0x94, 0x67, 0x1f, 0xdd, 0x66, 0x9f, 0x1f, 0x5d, 0xd7, 0x66,
+ 0x8b, 0x6c, 0x81, 0x32, 0x1d, 0xea, 0x8e, 0x2f, 0x5c, 0xcc, 0x87, 0xea,
+ 0x20, 0x62, 0xfb, 0x82, 0x2d, 0x72, 0xee, 0x04, 0x0c, 0x5e, 0xca, 0x8d,
+ 0xc8, 0x49, 0x02, 0x80, 0x90, 0x32, 0x75, 0x65, 0xc1, 0x1e, 0xf9, 0xd4,
+ 0x99, 0x68, 0x3f, 0x6a, 0x61, 0x02, 0x11, 0x73, 0xcd, 0x12, 0x5d, 0x35,
+ 0x67, 0x63, 0x8c, 0xf4, 0xdd, 0x39, 0x2b, 0xa3, 0xa4, 0xbb, 0x88, 0xc0,
+ 0x4e, 0xd2, 0x27, 0x0c, 0x13, 0xdb, 0x35, 0x59, 0xf4, 0x9d, 0x16, 0xb0,
+ 0xe3, 0xe2, 0x03, 0xec, 0x9b, 0x11, 0xc8, 0xe2, 0x74, 0xae, 0x95, 0xe4,
+ 0xdc, 0xee, 0xaf, 0x51, 0x8c, 0x2f, 0xa3, 0x7e, 0xc0, 0xd2, 0x15, 0x85,
+ 0x87, 0xf9, 0xf9, 0x6c, 0x65, 0x32, 0x8a, 0xf6, 0x80, 0xd6, 0xcd, 0xd0,
+ 0x55, 0xa9, 0xe8, 0xdb, 0x53, 0xc1, 0x12, 0x14, 0xd4, 0x60, 0xe9, 0x2d,
+ 0x5d, 0x4a, 0x37, 0xb8, 0x22, 0x6a, 0x0c, 0xfc, 0xe3, 0x86, 0x12, 0xb7,
+ 0xd4, 0xe6, 0x34, 0x29, 0x36, 0xe5, 0xfc, 0x47, 0xd5, 0x4e, 0xea, 0x8a,
+ 0xb2, 0x42, 0x36, 0xf2, 0x83, 0x38, 0x3f, 0xd9, 0xbf, 0x3e, 0xb6, 0x47,
+ 0x46, 0xc5, 0x87, 0xd3, 0x6a, 0xae, 0xd7, 0x46, 0xd9, 0x6a, 0x30, 0xb8,
+ 0x94, 0xf7, 0xa5, 0xeb, 0xb8, 0xbd, 0x3b, 0x79, 0xdf, 0x96, 0xa3, 0x85,
+ 0xe8, 0xf9, 0xda, 0x57, 0x64, 0x26, 0x17, 0xed, 0x6d, 0x38, 0x12, 0xac,
+ 0x9d, 0x80, 0x5b, 0xa4, 0x55, 0x0e, 0xbe, 0x11, 0x69, 0xce, 0x04, 0x70,
+ 0x9b, 0x98, 0x6e, 0x00, 0x34, 0x0b, 0xde, 0x76, 0x8b, 0x68, 0x8a, 0x2b,
+ 0x45, 0xa7, 0x40, 0x61, 0x92, 0x13, 0x64, 0xa2, 0xb0, 0xcb, 0xc4, 0x83,
+ 0x7d, 0xe4, 0xcb, 0xb9, 0xcc, 0x02, 0x0e, 0x07, 0x1a, 0x7c, 0x5c, 0xdc,
+ 0xc0, 0xc9, 0xee, 0x14, 0xa4, 0xe6, 0x4d, 0x14, 0x02, 0x56, 0xd0, 0xd5,
+ 0x23, 0xf7, 0x0e, 0xb8, 0x6a, 0x65, 0x29, 0xaa, 0x2b, 0x10, 0xe8, 0x13,
+ 0x1f, 0x4b, 0xf9, 0xcc, 0x32, 0x5a, 0x8d, 0xa5, 0x20, 0xfe, 0x46, 0x89,
+ 0xc3, 0x1a, 0xc9, 0x55, 0xf5, 0x31, 0x69, 0x4b, 0x44, 0x19, 0xa8, 0x3f,
+ 0xa8, 0x0b, 0x87, 0xf4, 0xda, 0xda, 0x12, 0x42, 0x96, 0x05, 0x68, 0x81,
+ 0xa4, 0xdb, 0x1a, 0x9b, 0xd5, 0x2c, 0x12, 0x28, 0xa1, 0x1e, 0xea, 0x46,
+ 0xf3, 0x6e, 0x18, 0x13, 0x5f, 0x82, 0xfc, 0x60, 0xc1, 0x67, 0x24, 0xf2,
+ 0x4c, 0xfa, 0xc4, 0x0c, 0x65, 0x80, 0x92, 0xd4, 0x22, 0x81, 0x55, 0xc3,
+ 0x4b, 0x57, 0xaa, 0xdc, 0xe4, 0xc0, 0x6f, 0x8f, 0x2f, 0xbe, 0x3c, 0x1b,
+ 0x1e, 0x13, 0x87, 0x38, 0x3a, 0xfe, 0xf2, 0x1d, 0x73, 0x0f, 0xde, 0x31,
+ 0x31, 0x52, 0x00, 0x97, 0x41, 0x50, 0x96, 0x91, 0x4c, 0xe4, 0x64, 0x64,
+ 0xc9, 0x89, 0xec, 0x19, 0x65, 0x68, 0x4c, 0x97, 0x4a, 0xd1, 0xd3, 0x44,
+ 0xb4, 0xda, 0x14, 0xd1, 0x74, 0x1e, 0xb2, 0x84, 0x65, 0xe7, 0x39, 0x63,
+ 0x0c, 0x97, 0x86, 0xd1, 0x61, 0x18, 0xb7, 0xc5, 0xbe, 0x97, 0x8d, 0xef,
+ 0xc4, 0x86, 0xa1, 0x07, 0xc2, 0x57, 0xd1, 0xb1, 0x6a, 0x39, 0x83, 0xa0,
+ 0x14, 0xae, 0xc2, 0x57, 0x4f, 0x33, 0xb9, 0xbd, 0x38, 0x8d, 0x08, 0x67,
+ 0x19, 0xb8, 0xec, 0x29, 0xaa, 0xee, 0x29, 0xfe, 0xa4, 0xd6, 0xae, 0x29,
+ 0x84, 0xe0, 0x88, 0xcd, 0x48, 0x0a, 0xc6, 0x54, 0xd9, 0x32, 0xb8, 0x50,
+ 0x91, 0x48, 0xc2, 0xb2, 0xdc, 0x9e, 0x6a, 0xe6, 0x97, 0xa0, 0x15, 0x85,
+ 0x55, 0xdc, 0xe4, 0x23, 0xc1, 0x90, 0x01, 0xa2, 0x2d, 0x08, 0x7e, 0xb0,
+ 0xd4, 0x77, 0x71, 0xe0, 0x52, 0xbc, 0xf2, 0x81, 0xe7, 0x4b, 0x49, 0xe7,
+ 0x6e, 0x3d, 0x3b, 0xb8, 0x94, 0x99, 0x72, 0x72, 0xa9, 0x5c, 0xc8, 0xae,
+ 0xa2, 0x36, 0xfc, 0x48, 0x3e, 0x33, 0x8a, 0x03, 0x73, 0x1c, 0x6e, 0x9a,
+ 0x9c, 0x27, 0x0e, 0x8d, 0x0b, 0x24, 0xe0, 0xf5, 0x05, 0x61, 0xcc, 0xce,
+ 0xa2, 0xe1, 0x3c, 0xf5, 0x9c, 0x68, 0xf5, 0x76, 0xf3, 0x96, 0xc2, 0x78,
+ 0x14, 0xd5, 0xeb, 0x7e, 0xea, 0x19, 0x94, 0xd6, 0xa5, 0x16, 0x4c, 0xf9,
+ 0x50, 0x86, 0x26, 0xb6, 0x8d, 0x8d, 0x8d, 0xa3, 0xe3, 0xcb, 0x83, 0x93,
+ 0xd3, 0xe3, 0xa3, 0xe8, 0xe4, 0xed, 0xeb, 0xb3, 0x8b, 0x37, 0x07, 0x97,
+ 0xea, 0x64, 0x3a, 0x72, 0x3a, 0xaa, 0x2b, 0x67, 0xe2, 0x4c, 0x00, 0x5e,
+ 0x7f, 0x05, 0x09, 0xd3, 0x2e, 0x5e, 0x2b, 0x60, 0x90, 0x2c, 0x43, 0x52,
+ 0x59, 0x83, 0x8d, 0x48, 0x9d, 0x53, 0xbe, 0x40, 0x09, 0xdf, 0xcf, 0xdb,
+ 0xce, 0xa1, 0x30, 0xb0, 0xe5, 0x34, 0x0d, 0x13, 0xd8, 0x5f, 0x8f, 0x36,
+ 0xe5, 0x8a, 0x71, 0xc9, 0xdd, 0x04, 0xdc, 0x7a, 0x64, 0xc1, 0x80, 0x26,
+ 0xfb, 0x27, 0x9c, 0xdb, 0x0a, 0xf1, 0x52, 0xab, 0x9a, 0x9f, 0x94, 0xae,
+ 0x98, 0x1f, 0x93, 0x0b, 0xb7, 0x13, 0x64, 0x57, 0x11, 0x05, 0xa2, 0x6a,
+ 0x70, 0xd0, 0xa6, 0x4b, 0x54, 0xb2, 0x0a, 0x24, 0xe2, 0xd2, 0xc4, 0x27,
+ 0xe1, 0xfe, 0x72, 0x26, 0xd7, 0x06, 0x7b, 0x6d, 0x4b, 0xad, 0x8d, 0xf1,
+ 0x50, 0x26, 0xf3, 0x82, 0xeb, 0x40, 0xd9, 0x59, 0xe7, 0x57, 0x3c, 0x13,
+ 0x35, 0x3b, 0xae, 0x82, 0x1e, 0x86, 0x4d, 0x6d, 0x3a, 0x27, 0x04, 0x49,
+ 0x2e, 0xfd, 0x13, 0x45, 0x31, 0xe3, 0xb5, 0xe0, 0x9a, 0xbf, 0xfc, 0x73,
+ 0xee, 0xd3, 0xfa, 0x35, 0x4a, 0xc3, 0x2b, 0x2c, 0x41, 0xdd, 0x23, 0x3d,
+ 0x6d, 0xfe, 0xdc, 0x16, 0x46, 0x69, 0x47, 0xf4, 0x10, 0x17, 0x91, 0xec,
+ 0x6b, 0xf7, 0x1a, 0x26, 0x05, 0x5d, 0xd8, 0xb6, 0x50, 0x84, 0x27, 0x08,
+ 0x01, 0xa3, 0x4c, 0x80, 0x4a, 0xb0, 0x06, 0x32, 0x0f, 0xd0, 0x77, 0x69,
+ 0x46, 0x63, 0x16, 0xf1, 0xbd, 0x9d, 0xd7, 0x15, 0x69, 0x6a, 0x54, 0xc3,
+ 0x76, 0x05, 0xc2, 0x86, 0xee, 0x59, 0xac, 0x64, 0xf0, 0x42, 0xec, 0xfd,
+ 0xae, 0x58, 0xff, 0x4d, 0xc3, 0x36, 0x67, 0x92, 0xd5, 0x06, 0xd5, 0x73,
+ 0xd0, 0x34, 0x53, 0x57, 0x26, 0x15, 0xbe, 0x58, 0xf5, 0x54, 0x86, 0x9c,
+ 0xde, 0xba, 0xc6, 0xe8, 0x27, 0x6d, 0x23, 0x50, 0x2e, 0x8e, 0xf2, 0x9e,
+ 0x5a, 0xcc, 0x2b, 0x86, 0xc7, 0x8e, 0xd1, 0x1a, 0x36, 0x14, 0x90, 0x41,
+ 0x39, 0x25, 0x4c, 0xa7, 0x61, 0x1e, 0xee, 0x98, 0xeb, 0x4b, 0x71, 0x8d,
+ 0x4e, 0xad, 0x27, 0x17, 0xc4, 0x92, 0x8b, 0x47, 0x5d, 0x91, 0x47, 0xc1,
+ 0xf4, 0xe6, 0x1b, 0x86, 0x94, 0x68, 0x2f, 0x59, 0x9c, 0x00, 0xb8, 0xbf,
+ 0xe4, 0x63, 0x83, 0xc9, 0xb3, 0x3b, 0x33, 0x89, 0x0b, 0xd8, 0x18, 0x11,
+ 0x52, 0x2a, 0x77, 0x06, 0x48, 0x00, 0x73, 0x75, 0x66, 0x4b, 0x5c, 0x3e,
+ 0xbe, 0xac, 0x70, 0x5f, 0x60, 0x2b, 0x62, 0xce, 0x2a, 0xb3, 0x43, 0x21,
+ 0xc1, 0x6d, 0xae, 0x15, 0xab, 0x3b, 0x4f, 0xcd, 0x20, 0x42, 0x49, 0x43,
+ 0x36, 0xce, 0xb3, 0x42, 0xce, 0x1b, 0x24, 0xed, 0x8e, 0xaf, 0xfe, 0xd0,
+ 0x59, 0xdc, 0x50, 0x1f, 0x9d, 0xe8, 0x9a, 0x75, 0x95, 0x51, 0x16, 0xc6,
+ 0xbb, 0xe9, 0xb6, 0x4c, 0xe4, 0xf1, 0x57, 0x17, 0xf1, 0x55, 0x9c, 0x4c,
+ 0x7f, 0xbf, 0xb7, 0x33, 0x8c, 0xaf, 0x97, 0xd3, 0xf8, 0x0f, 0x78, 0xf1,
+ 0xd5, 0x93, 0x27, 0x7b, 0x3b, 0x9f, 0x7e, 0xb6, 0xd3, 0xa9, 0xb9, 0x8a,
+ 0x02, 0x3f, 0x33, 0xdc, 0x86, 0x28, 0xd7, 0xcc, 0x7c, 0x17, 0xfd, 0x0c,
+ 0xc6, 0xd7, 0x29, 0x77, 0xf3, 0x35, 0x0b, 0x2f, 0xba, 0x06, 0x31, 0x02,
+ 0x22, 0x84, 0x4d, 0x6a, 0x5d, 0x28, 0xba, 0x71, 0x89, 0xae, 0x3f, 0xd9,
+ 0xdd, 0x17, 0x56, 0x76, 0x0d, 0xbb, 0x54, 0x2c, 0x14, 0x1b, 0xbd, 0x4c,
+ 0xe7, 0x74, 0x03, 0x7d, 0x1e, 0x95, 0xf1, 0xb5, 0xa3, 0x55, 0xb4, 0xe0,
+ 0x2a, 0x39, 0x9b, 0x25, 0xfc, 0x2a, 0x45, 0x4d, 0xe1, 0x41, 0xb4, 0x79,
+ 0x29, 0x90, 0x69, 0x10, 0x7c, 0x16, 0x49, 0x3e, 0x95, 0x6c, 0xd7, 0x78,
+ 0x66, 0x21, 0x97, 0xfc, 0x3e, 0x3b, 0xe3, 0x07, 0x8b, 0xa9, 0xab, 0x5b,
+ 0x0d, 0x0d, 0x2c, 0xf5, 0x04, 0x37, 0x5d, 0x14, 0xbe, 0x4e, 0x92, 0x5c,
+ 0x37, 0x21, 0x18, 0x1b, 0x2d, 0x16, 0xaa, 0x40, 0x74, 0x30, 0xab, 0x9e,
+ 0x2b, 0xb8, 0xd2, 0x9f, 0xd8, 0x4c, 0x07, 0xf8, 0x1d, 0xd5, 0xe8, 0xb4,
+ 0xa8, 0x6e, 0x67, 0x21, 0xf9, 0x41, 0xae, 0xc8, 0x87, 0xa6, 0x13, 0x57,
+ 0xe6, 0x15, 0x97, 0x7e, 0x63, 0x5e, 0x9a, 0x92, 0xbb, 0xfb, 0xf9, 0x2b,
+ 0x10, 0xc4, 0xee, 0xe7, 0x7f, 0x70, 0x9f, 0xed, 0xe9, 0x67, 0x7b, 0x9f,
+ 0xff, 0x61, 0x30, 0xc0, 0xf8, 0x98, 0x42, 0xba, 0xf6, 0x75, 0x57, 0x93,
+ 0x0e, 0x63, 0x3d, 0xc2, 0xf2, 0x97, 0x43, 0xde, 0x91, 0xbd, 0xee, 0x58,
+ 0xcf, 0xe1, 0x2a, 0xf7, 0xd4, 0xf6, 0xee, 0xf8, 0x56, 0x6a, 0x80, 0xc5,
+ 0x40, 0xf5, 0x2c, 0xda, 0x16, 0xdd, 0x99, 0x08, 0xd1, 0x4e, 0xe1, 0x20,
+ 0x4b, 0xe2, 0xe8, 0x8f, 0x4c, 0xa9, 0x7f, 0xdc, 0x88, 0xd4, 0x44, 0xce,
+ 0xdb, 0x81, 0xb2, 0x84, 0x91, 0x91, 0xad, 0xd4, 0x96, 0x17, 0xc8, 0x37,
+ 0x6e, 0x99, 0xa3, 0x2c, 0xf9, 0x0e, 0x0c, 0x0a, 0x5d, 0xfc, 0x49, 0x61,
+ 0x7f, 0x64, 0xc3, 0x99, 0x9f, 0x21, 0x9f, 0x41, 0xb2, 0x82, 0x48, 0xc2,
+ 0x28, 0x99, 0x37, 0xe0, 0xc9, 0xdf, 0x7f, 0xff, 0xbd, 0x8a, 0x53, 0xf4,
+ 0x8b, 0x8e, 0xfb, 0x86, 0x38, 0xd1, 0x84, 0x98, 0xdb, 0x0c, 0xe5, 0x14,
+ 0xb4, 0x32, 0x89, 0x5e, 0xf8, 0x57, 0x3a, 0x4f, 0x69, 0x84, 0x36, 0x56,
+ 0xea, 0xf8, 0xf2, 0xc8, 0xb0, 0xa4, 0xc7, 0xc2, 0xc4, 0x40, 0x99, 0x9b,
+ 0x70, 0x05, 0xfa, 0x50, 0x8b, 0x90, 0xf0, 0x79, 0xe7, 0xb0, 0xe9, 0xa0,
+ 0x7d, 0x6a, 0xcc, 0xd4, 0x60, 0xdd, 0x48, 0x50, 0xac, 0xc8, 0x38, 0xaf,
+ 0x3a, 0xf2, 0xe0, 0x75, 0xda, 0x51, 0x03, 0xaf, 0x7c, 0xd2, 0xf1, 0x39,
+ 0xa4, 0xb2, 0x1b, 0xd8, 0xb2, 0x57, 0x22, 0x38, 0xa5, 0x3f, 0x27, 0xaf,
+ 0x76, 0x77, 0xda, 0x9f, 0x60, 0x6d, 0x28, 0x62, 0xf4, 0xd5, 0x57, 0xde,
+ 0x40, 0xfe, 0xd8, 0xf3, 0xe9, 0x44, 0x9e, 0xd6, 0xa2, 0x82, 0x28, 0xb2,
+ 0xf2, 0xaa, 0x33, 0xe2, 0xfb, 0x95, 0xff, 0x7f, 0xcd, 0x38, 0x10, 0xf0,
+ 0xa5, 0xcf, 0x16, 0xcb, 0xd1, 0x2c, 0xad, 0x0c, 0x78, 0x9b, 0x27, 0xf8,
+ 0x39, 0x4c, 0x2a, 0x89, 0xa3, 0x0d, 0x54, 0xa3, 0x15, 0xc9, 0xaf, 0x7b,
+ 0x95, 0x65, 0xa3, 0x38, 0xef, 0xaa, 0x11, 0xd5, 0xc6, 0xd9, 0xdd, 0xdd,
+ 0x7b, 0xf2, 0xf4, 0x59, 0x77, 0xa0, 0x52, 0x1a, 0x18, 0x04, 0x14, 0xb3,
+ 0x54, 0x55, 0x19, 0x69, 0x22, 0x96, 0xe3, 0x19, 0xd6, 0x96, 0x6f, 0x75,
+ 0x36, 0x30, 0x0f, 0xe3, 0xee, 0x5e, 0x49, 0x6f, 0x7f, 0xe0, 0x7e, 0x5e,
+ 0xa1, 0x8b, 0x3f, 0xa4, 0x93, 0x57, 0x6e, 0x86, 0x7f, 0xe0, 0xb9, 0xbc,
+ 0xd2, 0x49, 0xd0, 0xbe, 0x5a, 0x2c, 0x7d, 0xb1, 0xb5, 0xd1, 0xca, 0xd5,
+ 0x5a, 0x37, 0xd7, 0x36, 0x71, 0x03, 0x93, 0x86, 0xa7, 0xab, 0x3f, 0x11,
+ 0xcb, 0x2d, 0x64, 0x55, 0x1f, 0x48, 0xbe, 0xfd, 0xd0, 0xa7, 0x56, 0xfa,
+ 0xdc, 0x4a, 0xdf, 0xb3, 0xeb, 0x68, 0xc6, 0x89, 0x23, 0xbc, 0x11, 0x3d,
+ 0xcd, 0x26, 0x98, 0xc2, 0xd6, 0xa1, 0x82, 0x40, 0x96, 0xc1, 0x8f, 0x74,
+ 0xf8, 0xd5, 0x49, 0x57, 0x1d, 0xb4, 0xa2, 0xb8, 0xf5, 0xda, 0x8c, 0x6b,
+ 0x2e, 0x6a, 0x42, 0x51, 0x08, 0x36, 0x0c, 0x1e, 0x3c, 0x66, 0x7f, 0x23,
+ 0xf7, 0x2b, 0xa9, 0x3f, 0xd4, 0x99, 0xde, 0x39, 0x53, 0x36, 0xd7, 0xe5,
+ 0xf8, 0x24, 0x6c, 0x06, 0xa8, 0x2e, 0xe2, 0x78, 0x84, 0xa5, 0x7a, 0xe1,
+ 0xb2, 0x06, 0xfa, 0xaf, 0x9d, 0x37, 0xc0, 0x45, 0xa9, 0xeb, 0xa3, 0xf4,
+ 0x95, 0x70, 0x13, 0x63, 0x10, 0x1d, 0x57, 0x82, 0x4a, 0x28, 0x21, 0xe4,
+ 0x1d, 0xf0, 0x65, 0x8c, 0x92, 0x4a, 0x61, 0x23, 0x11, 0x0b, 0x99, 0x7b,
+ 0xbe, 0x74, 0x35, 0x8b, 0x3e, 0x8f, 0x80, 0xfb, 0x2f, 0x6f, 0x69, 0x1c,
+ 0x7a, 0xa5, 0xbe, 0x2b, 0x5e, 0x52, 0xe5, 0xc0, 0x79, 0x3e, 0x02, 0xaf,
+ 0xad, 0x8a, 0x05, 0xd2, 0x82, 0x4c, 0x74, 0xb4, 0x52, 0xf5, 0x9f, 0x5b,
+ 0xe8, 0xfe, 0x19, 0x87, 0xe0, 0x25, 0x6f, 0x03, 0xbe, 0xfe, 0xbc, 0x2b,
+ 0x26, 0x3c, 0xf7, 0x2e, 0x0f, 0xa3, 0xe6, 0x59, 0x11, 0x02, 0x0d, 0xe7,
+ 0x93, 0x5d, 0x39, 0x38, 0x17, 0x91, 0xc5, 0x38, 0xc9, 0x74, 0x0e, 0x75,
+ 0x2a, 0x4d, 0xa6, 0x13, 0x2d, 0xab, 0xa6, 0xb2, 0x50, 0x4f, 0x1b, 0x4f,
+ 0x38, 0x83, 0x97, 0x65, 0xc7, 0x2e, 0x07, 0xe0, 0xe0, 0xbd, 0xae, 0x43,
+ 0x87, 0x61, 0x91, 0x3a, 0x01, 0xbb, 0xcb, 0x13, 0x2b, 0x39, 0xb6, 0xa1,
+ 0xc9, 0x65, 0x5e, 0x96, 0x0f, 0x27, 0x56, 0x04, 0xa2, 0x83, 0x8f, 0xd5,
+ 0x97, 0x1c, 0xe4, 0xc6, 0x11, 0x79, 0xcd, 0x89, 0x30, 0xda, 0xe9, 0x2b,
+ 0x5e, 0xee, 0xdd, 0xc1, 0x75, 0x7a, 0x25, 0x8b, 0x41, 0x2c, 0xf2, 0x3a,
+ 0xd9, 0xa6, 0x3f, 0x7b, 0xf4, 0xf9, 0x1e, 0xcb, 0x64, 0xfc, 0xcb, 0x13,
+ 0xf8, 0xed, 0xc3, 0x9b, 0x3f, 0x38, 0x1b, 0xee, 0x5c, 0xf0, 0x2f, 0xa9,
+ 0xbb, 0xf1, 0xd5, 0x24, 0xad, 0xa3, 0x04, 0x99, 0x2b, 0xf0, 0xa6, 0x17,
+ 0x34, 0x7b, 0x81, 0xb9, 0x19, 0xc0, 0x6b, 0x19, 0xa4, 0x93, 0xc2, 0x87,
+ 0xb9, 0xa9, 0x63, 0x51, 0xc5, 0x74, 0x96, 0xba, 0x53, 0x35, 0x98, 0x70,
+ 0xa0, 0x2d, 0xee, 0xd5, 0xe4, 0x7e, 0xab, 0x17, 0x06, 0x0f, 0x59, 0xa5,
+ 0x4d, 0x57, 0x0e, 0x18, 0x59, 0x68, 0xdc, 0xfd, 0xa6, 0xd6, 0xb6, 0x62,
+ 0x2c, 0x07, 0x4d, 0x97, 0xc1, 0x36, 0xa7, 0xf5, 0x1d, 0xac, 0x96, 0x87,
+ 0x92, 0x80, 0x8f, 0xb4, 0x28, 0xb7, 0xb8, 0x9b, 0x64, 0x5a, 0x40, 0x53,
+ 0xe7, 0x41, 0x6f, 0x44, 0xc1, 0xba, 0x1b, 0x4a, 0x06, 0xba, 0xea, 0x72,
+ 0xbd, 0xaa, 0x6d, 0xf8, 0x83, 0x84, 0xb7, 0x1d, 0xcf, 0x04, 0x14, 0x1e,
+ 0x64, 0x3b, 0xed, 0xcb, 0x7d, 0xa9, 0x42, 0x50, 0xff, 0xf5, 0x20, 0x3a,
+ 0x45, 0xe8, 0x5b, 0x11, 0x4b, 0x66, 0xb1, 0xdd, 0xa9, 0x46, 0x01, 0x44,
+ 0x2e, 0x22, 0x75, 0x6f, 0x48, 0xa1, 0x2e, 0x4e, 0xe6, 0x34, 0x32, 0x02,
+ 0x8e, 0x9d, 0x57, 0x33, 0x45, 0xa2, 0x50, 0x09, 0xa4, 0x07, 0x2b, 0xb4,
+ 0x7b, 0x0e, 0x65, 0xdb, 0x5c, 0xd9, 0xe8, 0x80, 0x48, 0x83, 0x46, 0xc4,
+ 0xa1, 0xaf, 0x22, 0x67, 0xc0, 0xca, 0x1d, 0xe1, 0x4b, 0xce, 0x68, 0x22,
+ 0x66, 0x16, 0x2d, 0xed, 0x2b, 0x3e, 0x2c, 0x6a, 0x0d, 0x94, 0xc5, 0x73,
+ 0x67, 0xd2, 0xe9, 0x40, 0x53, 0x9c, 0x26, 0x4e, 0x9d, 0x56, 0x30, 0x5e,
+ 0xc1, 0xc5, 0xcd, 0x14, 0x1a, 0x49, 0x04, 0x0c, 0xef, 0x5f, 0xe0, 0x41,
+ 0xf2, 0xb8, 0xe2, 0x3b, 0xfa, 0x85, 0x2f, 0xf9, 0x51, 0x4e, 0x3b, 0x9d,
+ 0xe4, 0x72, 0x1d, 0xa0, 0x57, 0xe0, 0xa6, 0x38, 0xd8, 0xcb, 0x37, 0xa7,
+ 0x91, 0x65, 0x68, 0x5f, 0x79, 0xe1, 0xd0, 0xa2, 0x76, 0x30, 0x45, 0xb5,
+ 0x85, 0x88, 0x04, 0xa4, 0x4f, 0xc9, 0xcd, 0x26, 0x6b, 0xcb, 0x49, 0x5e,
+ 0x11, 0x2f, 0x4e, 0xe5, 0x98, 0x06, 0x4f, 0xc8, 0xab, 0x4c, 0x3b, 0x44,
+ 0x1a, 0x5d, 0x5e, 0x82, 0x6e, 0x2f, 0xea, 0xf2, 0x50, 0xf9, 0x8b, 0x2e,
+ 0xd6, 0x13, 0x1f, 0x07, 0xcb, 0xd7, 0x1d, 0xb4, 0x9c, 0x3c, 0x7e, 0xe6,
+ 0xd5, 0x17, 0x95, 0x55, 0xc2, 0xe7, 0xd6, 0xd4, 0x2b, 0x89, 0x96, 0x6d,
+ 0x48, 0xd9, 0xf6, 0x6e, 0xd0, 0xfe, 0xab, 0x43, 0x6a, 0x45, 0x0a, 0xa3,
+ 0xc9, 0x9e, 0x40, 0xa0, 0x76, 0x9f, 0xa5, 0x48, 0x45, 0x69, 0x34, 0xf4,
+ 0xe1, 0x93, 0x7b, 0x69, 0xec, 0xc7, 0x85, 0x07, 0x09, 0x47, 0x13, 0x12,
+ 0x30, 0x6e, 0x4b, 0xbb, 0x99, 0x8a, 0xa6, 0x77, 0x9f, 0xc1, 0xae, 0x00,
+ 0x3e, 0xb3, 0x3b, 0x40, 0x6a, 0x82, 0x87, 0xd2, 0x71, 0x0d, 0x38, 0x75,
+ 0xbd, 0x83, 0x05, 0xed, 0x98, 0x99, 0xc4, 0x29, 0xf1, 0xb6, 0xca, 0x6d,
+ 0xfc, 0x6a, 0x91, 0x8e, 0x51, 0xe7, 0xf4, 0xd5, 0x17, 0x93, 0xec, 0x9a,
+ 0xb9, 0x55, 0x8f, 0x2e, 0x56, 0xfe, 0xd9, 0xe1, 0x87, 0xf7, 0xb4, 0x53,
+ 0x19, 0x30, 0xce, 0x8a, 0xc8, 0xed, 0xf6, 0xf7, 0x9a, 0xf0, 0x25, 0x6a,
+ 0x78, 0x92, 0x8d, 0xb5, 0x6d, 0xd7, 0xb4, 0xec, 0x07, 0xb5, 0xef, 0xbe,
+ 0x08, 0xfb, 0xb2, 0xc5, 0x89, 0xb5, 0x65, 0x29, 0x50, 0x37, 0x4d, 0x4b,
+ 0xb9, 0xbe, 0x1d, 0xae, 0x3a, 0x4c, 0x5a, 0x5c, 0x63, 0x42, 0xee, 0xaa,
+ 0xa9, 0xc6, 0xcb, 0x77, 0xbf, 0xe8, 0x4a, 0xa8, 0x63, 0xf7, 0x65, 0x17,
+ 0x5c, 0x8b, 0x79, 0x91, 0xa1, 0xe8, 0xea, 0x85, 0xd4, 0x95, 0x9b, 0xb0,
+ 0x2f, 0xf2, 0x82, 0x16, 0x0f, 0xac, 0x44, 0xa7, 0x30, 0xc3, 0x30, 0xc5,
+ 0x31, 0x0c, 0xac, 0x81, 0x61, 0xc0, 0x97, 0xcd, 0x63, 0x64, 0x9a, 0x51,
+ 0x29, 0x2e, 0x69, 0xbd, 0x68, 0x21, 0x8a, 0x21, 0xd1, 0xb7, 0x60, 0x87,
+ 0xab, 0x18, 0x36, 0x97, 0xf3, 0x05, 0xa7, 0x75, 0x8d, 0x51, 0x55, 0x57,
+ 0xcf, 0xd2, 0x20, 0x7a, 0x37, 0x17, 0xdc, 0xbb, 0x84, 0xd5, 0xe3, 0xd0,
+ 0x5f, 0xde, 0x73, 0x7e, 0x7f, 0x5a, 0xa8, 0x8a, 0x3f, 0x31, 0x1c, 0xb0,
+ 0x98, 0x43, 0xc4, 0x6c, 0xad, 0xfd, 0xf2, 0xd5, 0x9a, 0x73, 0x34, 0x82,
+ 0x9a, 0xa5, 0x21, 0x09, 0xb8, 0x84, 0x5f, 0x65, 0x40, 0xec, 0x9d, 0x3b,
+ 0x7e, 0x7d, 0x7c, 0x71, 0x71, 0x7c, 0xc1, 0xeb, 0x7d, 0x50, 0xc5, 0xaf,
+ 0xbf, 0xd1, 0xc8, 0x68, 0x8f, 0xcc, 0x66, 0x11, 0x61, 0xcd, 0xb2, 0xc6,
+ 0xc2, 0x09, 0x15, 0x4a, 0x69, 0x23, 0x32, 0x3f, 0xb7, 0x64, 0xb9, 0x8b,
+ 0x41, 0x18, 0xd6, 0x44, 0xc4, 0x03, 0x3a, 0xcb, 0xfd, 0x94, 0xaf, 0x15,
+ 0x81, 0xa1, 0x0f, 0x85, 0x89, 0x8d, 0xc8, 0x5e, 0xcd, 0xb5, 0xfe, 0x08,
+ 0xae, 0x6a, 0xd3, 0x1d, 0x03, 0xb9, 0x74, 0xa0, 0x21, 0x5c, 0x89, 0x7a,
+ 0xaf, 0x7d, 0x6d, 0x71, 0xcc, 0xf7, 0x8a, 0x0f, 0x28, 0xab, 0x4a, 0x58,
+ 0x89, 0xa2, 0x5c, 0x2e, 0xd2, 0x89, 0x33, 0xee, 0xd2, 0xe7, 0x24, 0xef,
+ 0x45, 0x72, 0xc4, 0x0b, 0x1b, 0x31, 0x9c, 0x89, 0x66, 0x7b, 0x08, 0x8d,
+ 0x6b, 0x92, 0x54, 0xee, 0x4d, 0x63, 0x88, 0xf9, 0x97, 0xa2, 0x95, 0x8a,
+ 0x99, 0x5d, 0xcb, 0xd8, 0x52, 0xc2, 0x4f, 0x60, 0x54, 0x64, 0x56, 0x61,
+ 0xb1, 0x02, 0x21, 0x5b, 0x60, 0xd3, 0xd5, 0xcc, 0x07, 0x42, 0xfa, 0x82,
+ 0x82, 0x17, 0x48, 0xd4, 0xc8, 0xf7, 0xa3, 0x1f, 0x8b, 0x74, 0xfc, 0x93,
+ 0xbf, 0x39, 0x10, 0xc2, 0xec, 0x63, 0x15, 0x25, 0xb6, 0x80, 0x26, 0xaf,
+ 0x0b, 0xa5, 0xba, 0xaf, 0x24, 0x48, 0xbd, 0x1b, 0x1e, 0x5f, 0x44, 0x07,
+ 0x5f, 0x31, 0xba, 0xd3, 0xbf, 0xb6, 0xbb, 0xfc, 0x9c, 0xde, 0x0c, 0xb6,
+ 0xb7, 0x9a, 0x92, 0x9b, 0x98, 0xe1, 0x5b, 0xeb, 0x26, 0x84, 0x1b, 0x9b,
+ 0x5a, 0xf5, 0x98, 0x20, 0x77, 0xb2, 0xb2, 0x85, 0x1b, 0xd1, 0x07, 0x37,
+ 0xf1, 0x63, 0xb6, 0x90, 0x0f, 0x58, 0xb8, 0x89, 0x92, 0xcb, 0x2f, 0x0e,
+ 0x08, 0xdb, 0x1a, 0x1d, 0x7d, 0xd1, 0x50, 0x33, 0x65, 0x93, 0x0e, 0xa2,
+ 0xee, 0x9b, 0xec, 0x67, 0x12, 0x04, 0xe2, 0xed, 0x27, 0x83, 0x9d, 0x68,
+ 0xf3, 0xbb, 0x74, 0xfe, 0xe2, 0xd9, 0x9f, 0xa3, 0x93, 0xad, 0x6e, 0x25,
+ 0xc8, 0x53, 0x60, 0x9c, 0x47, 0xf1, 0xfc, 0xd6, 0xed, 0xd8, 0x19, 0x4e,
+ 0xb5, 0x84, 0xae, 0x18, 0x18, 0xa8, 0x54, 0x26, 0x5c, 0xdb, 0x22, 0x12,
+ 0x8d, 0x34, 0x5e, 0x34, 0xfa, 0xd6, 0x01, 0xd2, 0xb1, 0x4e, 0x4f, 0x4f,
+ 0x4d, 0x78, 0xe9, 0x5e, 0x3c, 0x6b, 0x34, 0xf1, 0xd4, 0xb5, 0xf1, 0x4e,
+ 0xda, 0xf8, 0x85, 0x4d, 0xec, 0x0d, 0x76, 0xf6, 0xa2, 0xcd, 0xb3, 0xe1,
+ 0xf6, 0x9e, 0x6b, 0xa1, 0xd9, 0xc4, 0x1e, 0x9a, 0xe0, 0x87, 0xaa, 0x2f,
+ 0x3f, 0xe5, 0xfe, 0x7f, 0x4c, 0xe6, 0x3f, 0x45, 0x9b, 0xdf, 0xef, 0xee,
+ 0x52, 0x03, 0x7f, 0x8e, 0x0e, 0x4e, 0xbe, 0x8f, 0x9e, 0x0e, 0xa8, 0xb1,
+ 0xb7, 0xf1, 0x9d, 0x36, 0xa7, 0x18, 0x4e, 0x43, 0x34, 0x42, 0xdf, 0x37,
+ 0xda, 0x78, 0x56, 0x6b, 0xe3, 0x94, 0xf4, 0xc0, 0x07, 0xba, 0x52, 0x76,
+ 0x06, 0x4f, 0xf6, 0xa2, 0xf4, 0xd9, 0x67, 0xcf, 0xad, 0x21, 0x6d, 0x03,
+ 0xdf, 0x57, 0x6d, 0x93, 0x92, 0xe5, 0x4b, 0x62, 0xce, 0xf1, 0x03, 0x31,
+ 0x33, 0x70, 0x08, 0x40, 0xa7, 0xde, 0xc4, 0xf9, 0x44, 0xc9, 0x8d, 0x8b,
+ 0xaa, 0xd0, 0x4e, 0x29, 0x3a, 0x58, 0x02, 0x23, 0x25, 0x5d, 0x9a, 0xfb,
+ 0x8d, 0xe1, 0xb0, 0x2e, 0x6a, 0x8f, 0xfe, 0x39, 0x7a, 0x33, 0x3c, 0x39,
+ 0xa6, 0x19, 0xed, 0xd0, 0xd0, 0xfc, 0x1a, 0xca, 0x80, 0xf0, 0x15, 0x16,
+ 0x97, 0x56, 0x75, 0x83, 0xf3, 0x7e, 0xd0, 0x86, 0xc9, 0xd8, 0x12, 0xd1,
+ 0xc5, 0xb0, 0x8d, 0x59, 0x51, 0xa0, 0xdf, 0x77, 0x44, 0x6b, 0xfd, 0x83,
+ 0x6b, 0x56, 0x19, 0xe4, 0x9a, 0x45, 0xd7, 0xdf, 0x64, 0x73, 0x3a, 0x26,
+ 0x79, 0x96, 0x73, 0x98, 0x47, 0xb7, 0x22, 0x29, 0x7c, 0x73, 0x74, 0x2c,
+ 0x79, 0x6a, 0x6f, 0xe2, 0x39, 0xb1, 0x48, 0x46, 0x74, 0x28, 0x6e, 0xd9,
+ 0xeb, 0x2e, 0xce, 0x1b, 0x79, 0xff, 0x74, 0x35, 0x7f, 0xa0, 0x7d, 0xfc,
+ 0x74, 0xb0, 0xcb, 0xa8, 0x76, 0xac, 0xe5, 0xbe, 0x7e, 0x43, 0x7f, 0xef,
+ 0x3e, 0xed, 0x46, 0xfc, 0x55, 0x55, 0x63, 0xb7, 0xf3, 0xba, 0x71, 0x78,
+ 0x76, 0xf6, 0xcd, 0x89, 0x04, 0x60, 0x1c, 0xaa, 0x11, 0x95, 0x05, 0x2b,
+ 0xa7, 0x05, 0x0b, 0x73, 0x25, 0x6d, 0xcd, 0xc7, 0x8f, 0xc3, 0xf5, 0x76,
+ 0x9b, 0x24, 0x0b, 0xc0, 0xd0, 0xd5, 0x38, 0x42, 0xa9, 0x2c, 0x5a, 0x46,
+ 0xc6, 0x82, 0x74, 0x3a, 0xa9, 0xa2, 0x51, 0x14, 0x8c, 0x10, 0x66, 0x06,
+ 0xdb, 0xd1, 0xca, 0xe5, 0xc2, 0xc6, 0xbe, 0x08, 0x24, 0x86, 0xe8, 0xa2,
+ 0x58, 0xcd, 0xe0, 0x2c, 0x55, 0xe0, 0xe9, 0x45, 0xd5, 0x75, 0xbb, 0xc3,
+ 0xa4, 0xec, 0xcb, 0xa0, 0xf7, 0xd5, 0x46, 0xdb, 0x55, 0x83, 0x93, 0x33,
+ 0x97, 0x2d, 0x14, 0x93, 0x16, 0x86, 0xe2, 0xd5, 0x82, 0x8b, 0x55, 0x4e,
+ 0x5d, 0x3d, 0x61, 0x14, 0x63, 0x4d, 0x10, 0x4b, 0xf4, 0xf6, 0xe0, 0xcd,
+ 0xf1, 0xab, 0x6f, 0x0f, 0x4e, 0xdf, 0x1d, 0xd3, 0x2b, 0x8c, 0xca, 0xba,
+ 0xe9, 0xe3, 0x8d, 0x30, 0xc6, 0x59, 0x3a, 0xce, 0xa6, 0xec, 0x53, 0xea,
+ 0xfe, 0xb9, 0xbb, 0x21, 0xe1, 0x95, 0x51, 0x87, 0xdf, 0xda, 0x95, 0xd7,
+ 0x88, 0x2e, 0xf8, 0xaf, 0x3d, 0xf9, 0x6b, 0xef, 0xcf, 0x9d, 0xad, 0xca,
+ 0xa4, 0x1b, 0x5a, 0x31, 0xd3, 0xcb, 0xbd, 0xc4, 0xd5, 0xa1, 0x4a, 0x0a,
+ 0x62, 0x7a, 0x65, 0x55, 0x3a, 0xe6, 0x91, 0xb1, 0xab, 0x8d, 0x9f, 0xdd,
+ 0x1c, 0xad, 0x42, 0x9d, 0xbb, 0xc3, 0x2f, 0xbd, 0x82, 0x70, 0xd1, 0xe1,
+ 0x9c, 0x27, 0x15, 0x37, 0xe0, 0xac, 0xe6, 0x36, 0xac, 0x89, 0xe4, 0x61,
+ 0xc1, 0xe1, 0x5b, 0x9b, 0x1d, 0xf9, 0xe5, 0xd5, 0xd1, 0xc1, 0xe5, 0x31,
+ 0xbf, 0x60, 0xdd, 0x5b, 0x59, 0x6b, 0x8b, 0xbc, 0xe5, 0xf1, 0x6c, 0x76,
+ 0xe4, 0xc3, 0x57, 0x3c, 0xa1, 0x8e, 0xd4, 0x18, 0x10, 0x80, 0xc5, 0xda,
+ 0xb8, 0xb2, 0xb9, 0x06, 0x31, 0x06, 0x29, 0x7a, 0x85, 0xc5, 0x89, 0x6c,
+ 0x76, 0xe4, 0xbb, 0x8e, 0xb3, 0xd7, 0x6a, 0xe1, 0x56, 0x75, 0x4e, 0x4e,
+ 0x10, 0x97, 0xdb, 0x48, 0x0f, 0x92, 0x5a, 0x49, 0x7e, 0x7f, 0xd4, 0x35,
+ 0x21, 0x16, 0xa6, 0x00, 0x64, 0xce, 0x6d, 0xbc, 0x66, 0x14, 0xb2, 0x4d,
+ 0x29, 0xcb, 0x76, 0xf7, 0x9e, 0xfc, 0x19, 0xeb, 0xf9, 0xaa, 0xb3, 0x4d,
+ 0x77, 0x43, 0xe7, 0xcf, 0xdc, 0x75, 0x5a, 0x06, 0xe5, 0x56, 0xb4, 0x1b,
+ 0xd6, 0xa5, 0x94, 0xa2, 0x24, 0x48, 0x85, 0x77, 0x1d, 0xb6, 0x30, 0x99,
+ 0x17, 0x16, 0xf4, 0x5e, 0xb2, 0x07, 0x2c, 0xc9, 0xdc, 0xdc, 0xf7, 0xd8,
+ 0x2f, 0x94, 0x0c, 0x9c, 0x3b, 0x68, 0x52, 0xe9, 0x2e, 0xbc, 0x3f, 0x7a,
+ 0xf2, 0xae, 0xcc, 0x51, 0x8b, 0xc0, 0x70, 0x9f, 0xb3, 0x95, 0x25, 0x18,
+ 0xa0, 0x2f, 0xc8, 0xe3, 0xb2, 0x67, 0x0d, 0xa9, 0x78, 0xa4, 0xb6, 0x1c,
+ 0x53, 0x44, 0x20, 0x12, 0x10, 0x6b, 0x59, 0x41, 0x4e, 0x12, 0x7f, 0x7f,
+ 0x10, 0xe6, 0x60, 0x77, 0x76, 0x3c, 0xe2, 0x4c, 0x39, 0x17, 0x4d, 0x1d,
+ 0x68, 0xe1, 0x6e, 0xe9, 0xed, 0xf8, 0xa5, 0x01, 0xa0, 0x00, 0x5f, 0x94,
+ 0xb2, 0x96, 0x85, 0xb3, 0x19, 0xc1, 0xb7, 0xa8, 0xcf, 0x56, 0xf7, 0xa9,
+ 0x96, 0xa7, 0x80, 0x69, 0x88, 0x0a, 0x2f, 0xba, 0x31, 0xb1, 0x9a, 0x79,
+ 0x92, 0x3f, 0x1a, 0xe2, 0xd0, 0xe2, 0x7a, 0xc2, 0x14, 0x83, 0x34, 0x17,
+ 0x7e, 0x67, 0x30, 0x18, 0xf8, 0x32, 0x20, 0xbc, 0x2d, 0xea, 0x71, 0x02,
+ 0xa2, 0x78, 0x80, 0x7a, 0x86, 0x35, 0xde, 0x84, 0x20, 0x0f, 0x61, 0x7a,
+ 0x4b, 0xc3, 0x5d, 0xd4, 0x1a, 0xe1, 0x8e, 0x46, 0x60, 0xd3, 0xe8, 0x6a,
+ 0xb7, 0x5d, 0x2b, 0x32, 0x70, 0xdb, 0xb6, 0x09, 0x8f, 0x8c, 0x4d, 0x6c,
+ 0x8d, 0x45, 0x8c, 0xd4, 0x7c, 0xc7, 0xa7, 0x32, 0xb7, 0x16, 0x4c, 0xc1,
+ 0x9c, 0xae, 0x2f, 0x35, 0x50, 0xb1, 0x25, 0xb2, 0x68, 0x3a, 0x14, 0x2d,
+ 0x70, 0xc3, 0x4c, 0x2e, 0xbb, 0x47, 0x26, 0x27, 0xf2, 0x45, 0x39, 0xfa,
+ 0x63, 0x2e, 0xa6, 0x01, 0xbb, 0x41, 0x1c, 0xe6, 0xaf, 0xb5, 0x33, 0x11,
+ 0xd3, 0x2c, 0xeb, 0xcb, 0x90, 0xfb, 0x35, 0xfb, 0x45, 0x73, 0xbc, 0x8b,
+ 0x58, 0xb1, 0xb1, 0x48, 0x6c, 0xcb, 0x66, 0x70, 0x72, 0xe9, 0xe4, 0xbd,
+ 0x99, 0x84, 0x63, 0xbc, 0xfa, 0x92, 0x25, 0x6d, 0x09, 0x2a, 0xc6, 0x3d,
+ 0x34, 0x4f, 0xf6, 0x31, 0xef, 0xf8, 0xd8, 0x5a, 0x74, 0xae, 0xf1, 0xda,
+ 0xda, 0xf8, 0x5b, 0xb9, 0xca, 0xba, 0x68, 0x45, 0xc5, 0x9a, 0x0c, 0x41,
+ 0x39, 0xe0, 0x7b, 0x51, 0x7c, 0xcf, 0xd5, 0x68, 0x88, 0x06, 0xc5, 0x4d,
+ 0x26, 0x16, 0x99, 0xd3, 0xc0, 0xae, 0xe8, 0x66, 0x68, 0xe5, 0x9e, 0x63,
+ 0x5f, 0xef, 0xd9, 0x00, 0x61, 0x05, 0xe4, 0xcd, 0x0c, 0x78, 0x29, 0xca,
+ 0x89, 0x30, 0x28, 0x97, 0x0a, 0xea, 0xa6, 0x9a, 0xf3, 0xc8, 0x89, 0x45,
+ 0x0f, 0x95, 0x6e, 0x52, 0x44, 0x03, 0xb2, 0x8d, 0x43, 0xa2, 0x28, 0x6c,
+ 0xb5, 0xa4, 0xd6, 0xb7, 0x75, 0xe2, 0xbc, 0xd1, 0x30, 0x37, 0xb1, 0x3c,
+ 0x3d, 0xcf, 0xe6, 0x7d, 0x57, 0x5f, 0xc8, 0x45, 0x5c, 0xe5, 0xe9, 0xf5,
+ 0xb5, 0x68, 0x6c, 0x51, 0x7d, 0x6a, 0xed, 0x44, 0x76, 0xca, 0xab, 0xc2,
+ 0x21, 0x9b, 0xab, 0x75, 0xab, 0x79, 0xe9, 0xea, 0x98, 0xaa, 0xc5, 0xa5,
+ 0x42, 0xcc, 0xe6, 0x81, 0x94, 0x7d, 0x2b, 0x51, 0x07, 0x06, 0x69, 0x96,
+ 0x6c, 0xf6, 0xaa, 0x7a, 0x8c, 0xcf, 0x2e, 0x36, 0x50, 0xde, 0x7e, 0xee,
+ 0xb3, 0x4a, 0x6d, 0xd3, 0x01, 0x2a, 0xe3, 0xe3, 0x4d, 0x26, 0x6c, 0x57,
+ 0x9e, 0xf1, 0x55, 0x7c, 0xef, 0x82, 0x9d, 0x04, 0x65, 0x77, 0x14, 0x7b,
+ 0x8d, 0x6b, 0x23, 0xaa, 0x58, 0x77, 0x0b, 0xd4, 0xad, 0x56, 0x3e, 0x94,
+ 0xdd, 0x25, 0x1e, 0xd9, 0xc8, 0x1b, 0x18, 0x3d, 0x18, 0x9d, 0x9e, 0x7e,
+ 0xc7, 0x4c, 0x6a, 0xee, 0x5c, 0xc7, 0xaf, 0x30, 0xc9, 0xda, 0xaa, 0x0c,
+ 0xa2, 0xa0, 0x49, 0x31, 0x93, 0x64, 0x21, 0x8b, 0x97, 0xb1, 0xa9, 0x97,
+ 0xda, 0x5a, 0xd4, 0x58, 0x7e, 0xa0, 0xed, 0x07, 0xaa, 0x89, 0xe0, 0xc8,
+ 0x2a, 0x55, 0x15, 0x2e, 0x32, 0xce, 0x7b, 0x7b, 0x6d, 0x96, 0x1d, 0xb7,
+ 0x49, 0x1d, 0xa4, 0x9c, 0x8c, 0x94, 0x08, 0x40, 0x03, 0x2c, 0xd0, 0x39,
+ 0x87, 0xfd, 0xc1, 0x34, 0xe6, 0x90, 0x95, 0x4c, 0x62, 0x01, 0xb0, 0x65,
+ 0x20, 0x6a, 0x18, 0xd2, 0x6a, 0x3c, 0xb5, 0x71, 0xfc, 0x5c, 0x6c, 0x86,
+ 0xd0, 0x1a, 0x60, 0xe9, 0xb8, 0x19, 0xa2, 0x12, 0x04, 0xe5, 0x8e, 0x8d,
+ 0xb9, 0x3f, 0x9e, 0x7e, 0x39, 0xaa, 0x9c, 0xd1, 0x0f, 0x1d, 0xd9, 0xf3,
+ 0x8b, 0xb3, 0xaf, 0x2e, 0x8e, 0x87, 0xc3, 0xe8, 0xcd, 0xf1, 0xa5, 0xa8,
+ 0xfc, 0x97, 0x12, 0x07, 0x27, 0xe0, 0xc4, 0x70, 0x33, 0x18, 0x42, 0x82,
+ 0xc5, 0x9a, 0x98, 0x3d, 0x01, 0x68, 0xaa, 0x19, 0xbb, 0xd0, 0x20, 0xca,
+ 0x41, 0x9d, 0x9f, 0x6a, 0xf8, 0xdc, 0x0d, 0x0c, 0xfd, 0x08, 0x66, 0x82,
+ 0x27, 0xd2, 0xd9, 0xcd, 0xbd, 0x35, 0x15, 0x32, 0xb2, 0x84, 0x37, 0xdd,
+ 0x18, 0xe7, 0xf2, 0xd6, 0x73, 0xbe, 0xbd, 0xe9, 0x27, 0xa6, 0xf7, 0xfb,
+ 0xe8, 0xd2, 0x8a, 0x75, 0xff, 0x9e, 0xd4, 0x60, 0xa5, 0x8f, 0xdf, 0x47,
+ 0xdf, 0x53, 0x9b, 0x13, 0x5a, 0x75, 0x2d, 0xc0, 0x38, 0x44, 0x91, 0x0d,
+ 0x5f, 0xc8, 0x04, 0x25, 0x20, 0xc2, 0xe2, 0x3a, 0xcb, 0x3c, 0xff, 0x40,
+ 0xc1, 0x5f, 0x24, 0xcc, 0x0b, 0xa8, 0x80, 0x06, 0xd3, 0xb9, 0x9e, 0xf9,
+ 0x6d, 0x00, 0x65, 0x9e, 0x26, 0x57, 0x25, 0x04, 0x12, 0xee, 0x8e, 0x9a,
+ 0xdb, 0x61, 0xf8, 0xc2, 0xdd, 0x37, 0xfc, 0xd1, 0x4e, 0xf4, 0xe4, 0xb3,
+ 0xe7, 0x3b, 0x9f, 0xc9, 0xaf, 0xf6, 0xef, 0x8b, 0xa7, 0x3b, 0x0a, 0x03,
+ 0x4a, 0x7f, 0x3d, 0xdd, 0x7f, 0xba, 0xbb, 0xcf, 0xf0, 0x44, 0x3b, 0xfb,
+ 0x3b, 0xf4, 0xff, 0x4f, 0xf5, 0x13, 0xc6, 0x60, 0x7a, 0xb1, 0xf7, 0xd9,
+ 0xa7, 0x08, 0x83, 0x61, 0xfa, 0x98, 0x52, 0x27, 0xfd, 0x32, 0xeb, 0x03,
+ 0xc3, 0x01, 0x42, 0xd0, 0xef, 0xab, 0x06, 0x49, 0xf6, 0xab, 0x73, 0x21,
+ 0x45, 0x9e, 0xb8, 0x2b, 0xcf, 0x6c, 0xc6, 0x55, 0x49, 0xe3, 0x0f, 0x4b,
+ 0xc8, 0xba, 0x69, 0xe8, 0xdb, 0x52, 0xc5, 0x13, 0xa0, 0x28, 0x95, 0x77,
+ 0x48, 0x64, 0x94, 0x1c, 0xaa, 0xf0, 0xe5, 0x5f, 0xd2, 0xb5, 0xe5, 0x1a,
+ 0x6e, 0x00, 0x55, 0x45, 0xb7, 0x4a, 0xdf, 0x1b, 0xcb, 0x12, 0x12, 0x8d,
+ 0x04, 0xa5, 0x49, 0x6b, 0x85, 0x44, 0x7f, 0x69, 0x7f, 0x62, 0xc0, 0xe2,
+ 0xb7, 0x94, 0x1a, 0xa2, 0x66, 0x6f, 0x56, 0x51, 0xb5, 0xad, 0xaf, 0x0a,
+ 0xf1, 0x6c, 0xf8, 0xed, 0xf7, 0x2b, 0x15, 0x54, 0x1e, 0x75, 0x98, 0x22,
+ 0x52, 0xcf, 0xa5, 0x65, 0xca, 0x8d, 0xe6, 0xde, 0x2d, 0xc2, 0xf6, 0x3e,
+ 0xa6, 0x39, 0x3f, 0x23, 0x50, 0xb0, 0xdb, 0xb9, 0x7e, 0xb0, 0x39, 0xa9,
+ 0x44, 0xb4, 0xb9, 0x62, 0xa1, 0x86, 0x8b, 0xe5, 0x2a, 0x0a, 0xe2, 0x55,
+ 0x47, 0xb2, 0x7d, 0x79, 0x43, 0xc5, 0xcf, 0x02, 0x99, 0x41, 0x22, 0x28,
+ 0xdc, 0x65, 0xb8, 0xed, 0xe5, 0x79, 0xa3, 0xec, 0x46, 0x57, 0x4c, 0x8d,
+ 0x41, 0x7f, 0xda, 0x07, 0xce, 0x93, 0x3b, 0x74, 0x8f, 0x4e, 0xcd, 0x07,
+ 0xb7, 0xbb, 0x6a, 0x36, 0x9b, 0x2e, 0x58, 0xbc, 0xed, 0x48, 0xfa, 0xe7,
+ 0x10, 0x3f, 0xee, 0x9a, 0x0b, 0x2f, 0x22, 0x94, 0x32, 0x52, 0x24, 0x63,
+ 0x86, 0xdb, 0x62, 0x70, 0xda, 0x2d, 0x63, 0x61, 0xfd, 0x4f, 0x5c, 0xbc,
+ 0x16, 0xee, 0x35, 0x05, 0x64, 0x8f, 0x85, 0xf2, 0xa7, 0x61, 0x5a, 0x59,
+ 0x05, 0x8a, 0x3d, 0x04, 0x81, 0xdd, 0x90, 0xda, 0xc2, 0x74, 0xd3, 0xd2,
+ 0xcd, 0x11, 0x94, 0xed, 0xfa, 0xdd, 0xc6, 0xc6, 0xf0, 0xfc, 0xf8, 0xf8,
+ 0x28, 0x3a, 0x3d, 0x79, 0x73, 0x72, 0x19, 0x08, 0xe4, 0xee, 0x22, 0x31,
+ 0x83, 0x6b, 0x61, 0xb5, 0x5b, 0xaa, 0xcb, 0xe1, 0x51, 0x07, 0xa5, 0x3f,
+ 0xbb, 0xca, 0x67, 0x89, 0xa6, 0x31, 0x4c, 0xeb, 0xef, 0x41, 0xf5, 0x06,
+ 0x50, 0x05, 0xea, 0x6b, 0x78, 0x81, 0xae, 0x20, 0xe1, 0x66, 0xec, 0xaa,
+ 0xfc, 0xf4, 0x7f, 0xd0, 0x00, 0x8d, 0xaa, 0xe4, 0xa4, 0xe0, 0x69, 0xae,
+ 0x88, 0x93, 0x06, 0xb5, 0xd6, 0x46, 0xc5, 0x6b, 0x9b, 0x4c, 0xb5, 0x90,
+ 0xa8, 0xb3, 0xd0, 0x21, 0x5e, 0xef, 0x3e, 0x41, 0x42, 0xec, 0x2c, 0x15,
+ 0x08, 0xe7, 0x30, 0x98, 0xd8, 0x55, 0x4d, 0xb9, 0xcc, 0x84, 0x8f, 0x87,
+ 0x3d, 0x86, 0x05, 0xad, 0x2c, 0x92, 0xd6, 0xfa, 0x0a, 0x4b, 0x25, 0x3d,
+ 0xd9, 0x71, 0xf9, 0x02, 0x0b, 0xf0, 0x1c, 0x15, 0xf5, 0xb9, 0xb3, 0xdd,
+ 0x88, 0xe4, 0x91, 0x25, 0x4b, 0xf5, 0xf9, 0x72, 0xde, 0xb8, 0xee, 0x7e,
+ 0x90, 0x77, 0x69, 0xfe, 0xcf, 0x77, 0x70, 0xbd, 0x5d, 0xc5, 0x79, 0x9f,
+ 0x24, 0xaf, 0x55, 0xdf, 0x8c, 0xab, 0x42, 0x11, 0x1a, 0x68, 0x2c, 0xa6,
+ 0x9f, 0xc4, 0xd7, 0xf8, 0xa8, 0x49, 0x8b, 0x3e, 0xe9, 0x23, 0x83, 0x4b,
+ 0x72, 0xaa, 0x07, 0x80, 0xa7, 0xde, 0x8b, 0x50, 0xa1, 0xda, 0x85, 0x3e,
+ 0x8b, 0xac, 0xe3, 0x81, 0xf5, 0x6c, 0x17, 0x3d, 0x8f, 0x42, 0xd5, 0xd3,
+ 0x4c, 0x9d, 0x43, 0x29, 0x4f, 0x53, 0xe7, 0xd2, 0x14, 0xad, 0x67, 0xd1,
+ 0xee, 0x67, 0x3c, 0x8f, 0x8f, 0x9b, 0x0f, 0xd7, 0xb2, 0xb0, 0x28, 0x36,
+ 0x51, 0x17, 0x32, 0xbf, 0x9b, 0x92, 0x97, 0x00, 0xb4, 0x72, 0x59, 0x5d,
+ 0x8b, 0x86, 0x45, 0xb4, 0x1e, 0xeb, 0x27, 0xea, 0x4a, 0x87, 0x65, 0x0a,
+ 0xbe, 0x6d, 0x91, 0x90, 0x50, 0xb5, 0x51, 0xd6, 0x85, 0x6d, 0xad, 0x12,
+ 0xad, 0xd7, 0xcd, 0x7d, 0xc6, 0x1c, 0x96, 0x81, 0xad, 0x23, 0x44, 0x6b,
+ 0xf7, 0xe9, 0x04, 0x52, 0xb5, 0x19, 0x01, 0x40, 0x7f, 0x42, 0x7c, 0x12,
+ 0x24, 0x0d, 0xd7, 0x25, 0x7c, 0x9e, 0x6e, 0x64, 0x2a, 0xc0, 0xf0, 0xb2,
+ 0x66, 0x30, 0x2e, 0x6c, 0x42, 0x7e, 0xe0, 0x32, 0x2c, 0x55, 0xd7, 0x00,
+ 0xb3, 0xe6, 0x8e, 0xef, 0x85, 0x03, 0xf7, 0xcb, 0x72, 0x6a, 0x76, 0x05,
+ 0x5f, 0x67, 0xa1, 0x3a, 0x67, 0x4e, 0xe6, 0x0f, 0xa6, 0xbd, 0xbb, 0x43,
+ 0xf2, 0xeb, 0x34, 0xab, 0x17, 0x64, 0x6b, 0x2a, 0xa5, 0x98, 0x56, 0x1f,
+ 0xab, 0xb3, 0xbb, 0xf3, 0xcd, 0xfa, 0x55, 0x07, 0x48, 0xeb, 0xa3, 0x2f,
+ 0xef, 0x3d, 0x7d, 0x64, 0xd3, 0xce, 0x72, 0x57, 0x61, 0xc7, 0x03, 0x8d,
+ 0x78, 0x07, 0x4c, 0x63, 0xdb, 0x88, 0xf0, 0x93, 0xeb, 0x18, 0x25, 0xd8,
+ 0x1f, 0x19, 0xbd, 0x25, 0x68, 0xd4, 0x86, 0xf2, 0x46, 0xc3, 0xb1, 0xe5,
+ 0xcb, 0x82, 0x2d, 0x64, 0x0b, 0xc0, 0x0d, 0x79, 0x35, 0xd6, 0xa5, 0x74,
+ 0x4a, 0x8e, 0x77, 0xf0, 0xb6, 0x70, 0xce, 0x5e, 0x95, 0x49, 0x18, 0xf5,
+ 0xe4, 0xc9, 0xf5, 0x52, 0x92, 0xa8, 0x33, 0x51, 0xfb, 0x19, 0x8f, 0x51,
+ 0xcf, 0x2b, 0xf1, 0x66, 0x8e, 0x1c, 0x12, 0x7a, 0x02, 0xe3, 0x1d, 0xc7,
+ 0x26, 0xb2, 0x8a, 0xc8, 0x51, 0xbf, 0x18, 0xd8, 0x3e, 0x3b, 0x66, 0x67,
+ 0x18, 0xb8, 0x81, 0x1c, 0xaf, 0xb0, 0xd4, 0x93, 0x54, 0x41, 0x1a, 0x20,
+ 0x43, 0x51, 0x08, 0xc5, 0x31, 0x7b, 0xce, 0xeb, 0x62, 0xa7, 0x58, 0x29,
+ 0x1e, 0x02, 0x34, 0xd0, 0x53, 0xaa, 0x45, 0x4b, 0xae, 0x2b, 0xe6, 0xf8,
+ 0x85, 0xa5, 0xa0, 0x0a, 0x4c, 0x2c, 0xdb, 0xfd, 0x0f, 0xcf, 0xde, 0xbe,
+ 0x3e, 0xf9, 0xca, 0x01, 0x5b, 0x08, 0x13, 0x5f, 0x96, 0x19, 0xdb, 0x35,
+ 0xc5, 0x68, 0xe8, 0x8a, 0x70, 0x39, 0x87, 0xb7, 0x56, 0xda, 0xd0, 0xb0,
+ 0x5b, 0x62, 0x4f, 0xef, 0xc3, 0x0f, 0xc0, 0x40, 0xe6, 0x4f, 0xd8, 0x56,
+ 0x2e, 0xd9, 0xe3, 0xc5, 0x96, 0xb7, 0x3c, 0xd4, 0xa0, 0x77, 0x24, 0x3d,
+ 0x23, 0xce, 0xcb, 0xe5, 0xc2, 0x45, 0x0f, 0x06, 0x95, 0x3a, 0x14, 0x40,
+ 0x92, 0x6f, 0x05, 0xae, 0x18, 0xbd, 0x5c, 0x08, 0x6b, 0x92, 0xa8, 0xc7,
+ 0xaa, 0x61, 0x57, 0xee, 0x00, 0xb6, 0x2c, 0x68, 0xba, 0xbd, 0x5e, 0x00,
+ 0x8d, 0x90, 0x9c, 0x29, 0xe3, 0x61, 0x85, 0x81, 0xf2, 0xe6, 0xca, 0xe1,
+ 0x32, 0x5d, 0x32, 0x51, 0x2b, 0xb2, 0x34, 0x13, 0xcd, 0x8c, 0xe7, 0x2d,
+ 0xb5, 0x5b, 0x7f, 0x70, 0x55, 0x6c, 0x35, 0xec, 0xd7, 0xbb, 0x8a, 0x0a,
+ 0x57, 0x92, 0xd4, 0x85, 0x26, 0xc9, 0x60, 0x11, 0x42, 0x58, 0xf4, 0xc4,
+ 0xe5, 0x89, 0x4f, 0x5e, 0xb1, 0x87, 0x66, 0x7f, 0x80, 0x42, 0x97, 0x88,
+ 0xdf, 0x09, 0x6b, 0x50, 0x29, 0x97, 0xf4, 0x60, 0xa7, 0x27, 0x57, 0x41,
+ 0x4a, 0x99, 0x84, 0x08, 0x1a, 0xd1, 0x89, 0xb9, 0x98, 0x6d, 0x2d, 0xdd,
+ 0x4f, 0xba, 0xfd, 0x62, 0x35, 0x1b, 0x65, 0x53, 0xcb, 0xb8, 0x70, 0x49,
+ 0xd5, 0xf6, 0x50, 0x49, 0xd3, 0x40, 0xcc, 0xa0, 0x14, 0x1d, 0x44, 0xd7,
+ 0x81, 0x85, 0xd2, 0x87, 0x49, 0xf9, 0xf1, 0x0b, 0xba, 0x3e, 0x3c, 0x45,
+ 0x36, 0x0b, 0x97, 0xe1, 0x9f, 0xcc, 0xc7, 0xd3, 0x4c, 0xa9, 0x9a, 0x13,
+ 0x63, 0xb1, 0x52, 0xd5, 0xa9, 0xb3, 0xef, 0x2f, 0x5b, 0xb2, 0xb1, 0x03,
+ 0xc8, 0xd9, 0x24, 0xee, 0xb0, 0x71, 0xf8, 0x3b, 0x9b, 0x20, 0xbf, 0x2d,
+ 0x5f, 0x68, 0x38, 0xbe, 0x41, 0x23, 0x50, 0x43, 0x02, 0xb5, 0x4d, 0x43,
+ 0xfd, 0x8b, 0xd8, 0x16, 0xc5, 0x03, 0xf8, 0x83, 0x75, 0x6e, 0x8f, 0xd6,
+ 0x96, 0x9e, 0xe8, 0x29, 0xce, 0xaf, 0x15, 0x73, 0x48, 0x9d, 0x6a, 0x50,
+ 0x12, 0x1d, 0x00, 0xba, 0xb3, 0x51, 0xb2, 0x50, 0xe2, 0xc2, 0x65, 0x20,
+ 0x3e, 0x2d, 0x25, 0xa9, 0x4f, 0xd3, 0x9f, 0xc4, 0x3a, 0xe9, 0x08, 0x31,
+ 0xe0, 0x38, 0x9f, 0xb8, 0x90, 0x94, 0xd8, 0xdf, 0x65, 0x86, 0xcc, 0xec,
+ 0x4d, 0xb5, 0x7a, 0x99, 0x05, 0xaf, 0xb1, 0x3d, 0x0f, 0x9a, 0x70, 0xa2,
+ 0x36, 0x14, 0xe9, 0x0a, 0xb2, 0x04, 0x03, 0x6e, 0x21, 0xeb, 0x27, 0x29,
+ 0x7c, 0x13, 0xf2, 0xfd, 0x2b, 0x4d, 0x31, 0xa7, 0xf3, 0xac, 0xa0, 0x01,
+ 0x0a, 0x86, 0xf4, 0xd9, 0x8e, 0x5a, 0xe2, 0x4a, 0x8d, 0x53, 0x2d, 0xa2,
+ 0x83, 0x8b, 0x63, 0x92, 0x6c, 0xaf, 0xe7, 0x48, 0x0a, 0xe7, 0x11, 0x96,
+ 0xba, 0x3f, 0x10, 0xac, 0x79, 0x15, 0xf4, 0x7c, 0x70, 0x87, 0xf7, 0xc1,
+ 0x9b, 0x4c, 0x4c, 0x1a, 0x1f, 0x40, 0x87, 0xcc, 0x05, 0xa0, 0x31, 0xc9,
+ 0x8d, 0x0d, 0xac, 0x0f, 0x5c, 0x87, 0xb3, 0xbb, 0x85, 0xa4, 0xd8, 0x5b,
+ 0x42, 0x5d, 0x65, 0x06, 0xd4, 0x77, 0xde, 0x60, 0xeb, 0x21, 0x42, 0x9f,
+ 0xad, 0x35, 0x4e, 0xb5, 0xcf, 0x41, 0xf8, 0x9b, 0xe1, 0x8c, 0x69, 0x5f,
+ 0x15, 0x0f, 0xa8, 0x27, 0xa7, 0x5e, 0xbb, 0xf5, 0xe8, 0x6f, 0xb8, 0x67,
+ 0x58, 0x16, 0xa9, 0xcb, 0x05, 0x89, 0x0b, 0xad, 0x17, 0x43, 0xf6, 0x24,
+ 0x10, 0x7e, 0x25, 0x1f, 0x8f, 0x83, 0xab, 0xc5, 0x46, 0xcd, 0xc2, 0x4f,
+ 0x5c, 0x24, 0x56, 0x51, 0x09, 0xea, 0xc0, 0x44, 0xcf, 0x2a, 0x53, 0x05,
+ 0xc7, 0x09, 0x8f, 0x18, 0x68, 0xe3, 0x56, 0x04, 0x80, 0x90, 0x3f, 0xb5,
+ 0x9a, 0x79, 0x3f, 0x71, 0xb3, 0xf5, 0x63, 0x70, 0x5f, 0xf2, 0x47, 0xaf,
+ 0x1c, 0xee, 0x10, 0x8f, 0x62, 0xc0, 0x1d, 0x81, 0xa5, 0xc2, 0x7d, 0xca,
+ 0xbf, 0xe0, 0x63, 0x04, 0xbc, 0x19, 0x7a, 0x5b, 0x05, 0x3b, 0x44, 0x21,
+ 0xdf, 0xc3, 0x81, 0x88, 0x8f, 0x0f, 0x1c, 0x7a, 0x14, 0x8a, 0xc6, 0x41,
+ 0x95, 0x23, 0x36, 0xe5, 0x70, 0x06, 0xaf, 0x1d, 0xf8, 0x22, 0xa9, 0x54,
+ 0x45, 0x72, 0x29, 0x42, 0x9d, 0x7e, 0x87, 0xd6, 0xa2, 0x3b, 0x9d, 0x7a,
+ 0x86, 0x6f, 0x8f, 0xf1, 0xae, 0x22, 0x9b, 0xce, 0x0b, 0x4c, 0xca, 0xbb,
+ 0x18, 0x4f, 0x7a, 0x55, 0xc9, 0x6d, 0xe0, 0x7a, 0x1c, 0x9c, 0xfa, 0xe3,
+ 0xb0, 0x5f, 0x90, 0x1f, 0x82, 0x70, 0x81, 0xbb, 0xb4, 0x30, 0x3f, 0x24,
+ 0xd1, 0xf6, 0x58, 0x63, 0x23, 0x24, 0x91, 0x3a, 0x29, 0xc7, 0xc1, 0x52,
+ 0x26, 0xe3, 0x9b, 0x4c, 0xc2, 0x69, 0x69, 0xd1, 0x82, 0xb4, 0xcb, 0x4e,
+ 0xf4, 0x5f, 0x4a, 0x03, 0xdf, 0xf8, 0x6c, 0x3d, 0x26, 0x84, 0x81, 0xa0,
+ 0x6a, 0x0d, 0x3c, 0x41, 0x1c, 0x7f, 0x7f, 0x79, 0x71, 0x10, 0x7d, 0x7d,
+ 0x7c, 0x70, 0x74, 0x7c, 0x31, 0xac, 0x5d, 0xfa, 0x1a, 0x05, 0x22, 0x12,
+ 0x1a, 0xdb, 0x83, 0x21, 0x1a, 0x5b, 0xce, 0xbf, 0x06, 0xec, 0x1b, 0xd7,
+ 0x8b, 0x57, 0x38, 0x48, 0x74, 0x3e, 0x58, 0x21, 0x12, 0xc7, 0x01, 0x47,
+ 0xa5, 0x71, 0xe4, 0x73, 0x16, 0xb4, 0xa1, 0xa5, 0x7f, 0x9d, 0xf5, 0x3c,
+ 0x4c, 0x95, 0xf1, 0x70, 0x4e, 0xfe, 0x32, 0x99, 0x64, 0x96, 0x05, 0x58,
+ 0xdd, 0xb9, 0xaf, 0x7d, 0xc2, 0x75, 0xc0, 0xb6, 0xf4, 0x92, 0x51, 0x03,
+ 0x62, 0xe7, 0xfb, 0x3e, 0xf5, 0xdb, 0xa7, 0xc5, 0xef, 0x33, 0xe2, 0xd6,
+ 0x2a, 0x29, 0x3a, 0x35, 0x6b, 0x60, 0xb5, 0xfb, 0x0d, 0x29, 0x70, 0xd9,
+ 0x38, 0x49, 0x5f, 0xb7, 0xb6, 0xc4, 0xa7, 0x6b, 0xca, 0x95, 0x01, 0xea,
+ 0x1a, 0x04, 0x2e, 0xd5, 0x40, 0x48, 0xd6, 0x13, 0xd4, 0xc8, 0x6b, 0xd1,
+ 0x38, 0x25, 0xaf, 0x66, 0x6a, 0x58, 0x18, 0x06, 0xa2, 0x53, 0x80, 0xac,
+ 0x93, 0x96, 0x7a, 0xa9, 0xc3, 0x2e, 0x62, 0x70, 0x90, 0x34, 0x2c, 0x7d,
+ 0x28, 0xbc, 0x1f, 0xe0, 0x0b, 0xd1, 0x00, 0xfd, 0xa2, 0xe2, 0x2a, 0x55,
+ 0xbb, 0xa8, 0x16, 0xa7, 0xd1, 0xe6, 0x78, 0x0c, 0x8e, 0xe6, 0x2d, 0xae,
+ 0x9f, 0xbb, 0x34, 0x60, 0x6c, 0x7d, 0x57, 0x82, 0xc1, 0x58, 0xa9, 0x87,
+ 0xa9, 0x93, 0xc3, 0xcd, 0x64, 0xe3, 0x4d, 0x5e, 0x0d, 0x92, 0x80, 0x42,
+ 0x62, 0x46, 0x11, 0x0f, 0x04, 0x8e, 0xbb, 0xe7, 0x92, 0xe8, 0xeb, 0xac,
+ 0xc0, 0x5d, 0xd0, 0x7c, 0x9c, 0x2f, 0xf9, 0xb6, 0xe5, 0xc7, 0x1b, 0xea,
+ 0xea, 0x72, 0x90, 0x77, 0xc0, 0x88, 0x04, 0xfb, 0x3a, 0x3f, 0xb8, 0xfc,
+ 0x1a, 0x8e, 0x56, 0x90, 0xf0, 0x11, 0x90, 0x1e, 0xcc, 0xbd, 0xd6, 0xcc,
+ 0xc5, 0x72, 0x0a, 0x9c, 0xc8, 0xbf, 0x86, 0xdd, 0x65, 0xf2, 0x24, 0x1c,
+ 0x79, 0x30, 0x51, 0x02, 0x0a, 0x28, 0x55, 0xc3, 0x63, 0xb5, 0xb4, 0x0c,
+ 0xa2, 0xde, 0x5d, 0xa2, 0x9d, 0x0b, 0xbb, 0xec, 0x4a, 0x26, 0x7a, 0x57,
+ 0xe6, 0x04, 0xa2, 0x67, 0x61, 0x8e, 0x35, 0x9e, 0x10, 0x49, 0x11, 0x5f,
+ 0x5c, 0x69, 0x8a, 0x6d, 0x8f, 0xf6, 0xb4, 0x1d, 0x1a, 0x2b, 0x38, 0xd2,
+ 0x5f, 0xcc, 0x56, 0x83, 0x26, 0x6e, 0x48, 0xf4, 0xe5, 0xb2, 0xac, 0xb2,
+ 0x95, 0x1a, 0x9e, 0xa3, 0x93, 0x2c, 0xf3, 0x2c, 0x2b, 0xab, 0x88, 0x88,
+ 0x58, 0x1d, 0x39, 0xd1, 0x82, 0x81, 0x26, 0x63, 0xe1, 0xa6, 0xe6, 0x2a,
+ 0x77, 0x87, 0x82, 0x61, 0x3c, 0x2a, 0xb2, 0xe9, 0xb2, 0x0c, 0x02, 0xaf,
+ 0x7f, 0xd9, 0x98, 0x83, 0x41, 0x6f, 0x9e, 0x0c, 0x12, 0x23, 0x28, 0x8e,
+ 0x1c, 0xce, 0x63, 0xd2, 0xf4, 0xb9, 0x0a, 0x2c, 0xfb, 0x1d, 0xf3, 0x6c,
+ 0x5e, 0xad, 0x7e, 0x82, 0x18, 0xef, 0xad, 0x8d, 0x8d, 0xa1, 0x6d, 0x36,
+ 0x83, 0xef, 0x35, 0x37, 0x1d, 0x38, 0x11, 0x40, 0xf8, 0x13, 0xbf, 0xc1,
+ 0x98, 0x7e, 0x31, 0x3c, 0xa4, 0x44, 0xf6, 0x14, 0x2c, 0x5c, 0xf6, 0x38,
+ 0x2d, 0xaa, 0x93, 0xc2, 0x57, 0xce, 0x73, 0x61, 0x89, 0x65, 0x97, 0x99,
+ 0x01, 0xe5, 0xaa, 0xe7, 0xce, 0x13, 0x44, 0x25, 0x35, 0xbd, 0x15, 0x31,
+ 0x93, 0x2f, 0x01, 0x05, 0xe7, 0xf2, 0x51, 0xb9, 0x3c, 0xc8, 0xed, 0xff,
+ 0xde, 0x8e, 0x7a, 0x02, 0x73, 0xd3, 0x02, 0x36, 0xb2, 0x8c, 0xfe, 0x1f,
+ 0x84, 0x60, 0x29, 0x58, 0x21, 0xb7, 0x59, 0x43, 0xf8, 0x1b, 0x90, 0x0a,
+ 0x75, 0x93, 0x8f, 0x3d, 0xf5, 0x93, 0x74, 0x90, 0xdc, 0xb3, 0xfe, 0x62,
+ 0x3a, 0x02, 0x7f, 0x61, 0x59, 0xa6, 0x1e, 0x38, 0x06, 0x78, 0x17, 0x57,
+ 0xce, 0xaa, 0xc7, 0x85, 0xa3, 0xa4, 0x8c, 0x92, 0x88, 0xf5, 0xa8, 0x22,
+ 0x60, 0x1e, 0xd4, 0x8d, 0xa8, 0xa2, 0xb7, 0x17, 0x51, 0x91, 0xc9, 0x4f,
+ 0xcb, 0x36, 0xd2, 0x18, 0x2f, 0x25, 0x7f, 0x55, 0xa3, 0xb4, 0x62, 0x8b,
+ 0x96, 0x31, 0xb3, 0xb8, 0x53, 0x09, 0xab, 0x33, 0xc7, 0xa4, 0x8d, 0xd1,
+ 0x84, 0x00, 0xf6, 0x5b, 0x02, 0xf8, 0x0c, 0x97, 0x4d, 0xe1, 0x0b, 0xa3,
+ 0x22, 0x59, 0x9b, 0xab, 0x0e, 0x99, 0x22, 0x63, 0x37, 0xaa, 0x25, 0x70,
+ 0xb8, 0x8d, 0xf2, 0xa3, 0xd7, 0xab, 0x1f, 0x09, 0xf1, 0xf0, 0xd1, 0xdd,
+ 0xc7, 0x69, 0x19, 0x4a, 0x04, 0x36, 0x23, 0xd2, 0xf0, 0x14, 0xae, 0x7e,
+ 0xb4, 0xaa, 0x84, 0xa6, 0xf8, 0xb8, 0xcd, 0x6b, 0xce, 0xef, 0x50, 0x8b,
+ 0x94, 0x62, 0x89, 0xc0, 0xfc, 0x75, 0x93, 0x6a, 0x74, 0xa9, 0x2c, 0xba,
+ 0x99, 0x03, 0xd9, 0x9e, 0x01, 0xf3, 0x1e, 0x87, 0x16, 0x78, 0xef, 0xaa,
+ 0x0b, 0x80, 0x18, 0x34, 0x4f, 0xcb, 0xc0, 0xa1, 0xee, 0xe9, 0x0d, 0x72,
+ 0x12, 0x66, 0x92, 0x63, 0x55, 0x5c, 0xb8, 0xf3, 0x47, 0x75, 0x1d, 0xf6,
+ 0xc7, 0x51, 0xac, 0xf3, 0xc8, 0xaf, 0x47, 0x21, 0x57, 0xc9, 0xde, 0x2e,
+ 0x54, 0x52, 0x09, 0xdc, 0x00, 0x88, 0x9d, 0x95, 0xb3, 0xaa, 0x54, 0x1f,
+ 0x09, 0xd6, 0x1d, 0xf5, 0x32, 0x81, 0x91, 0x68, 0x49, 0xf6, 0xea, 0x67,
+ 0x16, 0x89, 0x30, 0xf0, 0x38, 0x55, 0xca, 0x9e, 0x48, 0xe2, 0x76, 0x51,
+ 0xe6, 0xcb, 0x71, 0x05, 0xb0, 0x0a, 0xc4, 0x50, 0xf1, 0xcf, 0xbb, 0xe5,
+ 0xcd, 0x42, 0xad, 0x7e, 0x33, 0xae, 0xa4, 0xb1, 0xe8, 0x93, 0x61, 0x17,
+ 0x5b, 0x52, 0x06, 0x54, 0x8b, 0x20, 0x43, 0x3b, 0xa1, 0xf1, 0x3b, 0x02,
+ 0xeb, 0x9f, 0xbb, 0x24, 0xfa, 0x0a, 0xee, 0x97, 0xa4, 0x24, 0x04, 0xb7,
+ 0xae, 0x8a, 0x60, 0x10, 0x39, 0xf2, 0x48, 0x11, 0xc8, 0x20, 0xd0, 0xb0,
+ 0xb1, 0x72, 0xc3, 0xa1, 0x84, 0x51, 0x77, 0x7d, 0x5f, 0xf7, 0x93, 0xfa,
+ 0xdb, 0xa6, 0x85, 0x34, 0xe0, 0x7d, 0x57, 0xd6, 0xa1, 0xf0, 0x48, 0x63,
+ 0xb5, 0x58, 0xd5, 0x64, 0x4a, 0x53, 0x76, 0x92, 0xa1, 0x9c, 0xc4, 0x99,
+ 0xae, 0xdf, 0xc0, 0x55, 0xe2, 0xb4, 0x72, 0xa7, 0x35, 0x41, 0xa2, 0x79,
+ 0x2b, 0x9e, 0x0b, 0x0a, 0x49, 0x83, 0x88, 0x8e, 0xcc, 0x9a, 0x0a, 0x66,
+ 0x83, 0x05, 0x63, 0x9d, 0xc6, 0x36, 0xe9, 0xe4, 0xdc, 0x75, 0x41, 0x43,
+ 0xe0, 0x19, 0x77, 0xa7, 0xc9, 0x4e, 0x37, 0xa8, 0x4b, 0xb1, 0x29, 0x51,
+ 0xff, 0x19, 0xf4, 0x1e, 0xb6, 0x1c, 0x62, 0x82, 0x62, 0xb7, 0xe0, 0x08,
+ 0xb7, 0xad, 0x96, 0xa1, 0x50, 0x13, 0xbf, 0x74, 0x30, 0xbb, 0x2f, 0xf6,
+ 0x06, 0xbb, 0xcf, 0x3f, 0x1b, 0xec, 0x0c, 0x76, 0x77, 0x98, 0xb3, 0xf0,
+ 0x50, 0x82, 0xc1, 0xc9, 0xba, 0xb4, 0x74, 0x55, 0x79, 0xaf, 0xd9, 0xe7,
+ 0xdb, 0xe3, 0xcb, 0xef, 0xce, 0x2e, 0xbe, 0x89, 0x4e, 0xde, 0x5e, 0x1e,
+ 0x5f, 0xbc, 0x3e, 0x38, 0xfc, 0x58, 0xe8, 0xe1, 0xd0, 0x60, 0x1d, 0x14,
+ 0x22, 0x4c, 0xfc, 0xc2, 0x34, 0xad, 0x82, 0x7e, 0xcd, 0x92, 0xf2, 0x66,
+ 0x67, 0x7f, 0xf7, 0x51, 0xbc, 0xd2, 0x16, 0xc3, 0xa0, 0x7f, 0xdf, 0x26,
+ 0xb5, 0xcb, 0x93, 0x5a, 0xdf, 0x8a, 0x43, 0x41, 0x1b, 0x4a, 0x80, 0x95,
+ 0x0b, 0xce, 0x05, 0x83, 0x47, 0x51, 0x82, 0x74, 0x94, 0xc7, 0x66, 0x92,
+ 0x1a, 0x09, 0x68, 0xa2, 0x64, 0xd4, 0x2a, 0xbe, 0x8b, 0x06, 0xa1, 0x2b,
+ 0xbb, 0xe5, 0x18, 0xe5, 0x65, 0x3a, 0x2d, 0xd5, 0x90, 0x22, 0x18, 0x88,
+ 0x13, 0x08, 0x77, 0xc6, 0x90, 0xad, 0x30, 0x2f, 0xea, 0xf2, 0xa2, 0x30,
+ 0x97, 0x14, 0xe6, 0x9d, 0xb8, 0x44, 0x11, 0x07, 0x3c, 0x50, 0x49, 0xb7,
+ 0xc1, 0x58, 0xab, 0x75, 0x1b, 0xc3, 0x18, 0xda, 0x1a, 0x00, 0x61, 0x61,
+ 0xb1, 0xcd, 0x98, 0x58, 0xc5, 0x28, 0x7a, 0xa8, 0x03, 0xc1, 0x69, 0x08,
+ 0x46, 0x23, 0x5d, 0x41, 0x94, 0x32, 0xd0, 0xdb, 0x2a, 0x7c, 0xa6, 0xdc,
+ 0x4e, 0x48, 0x9e, 0x10, 0xc9, 0xcf, 0xf0, 0xb9, 0xb9, 0xf5, 0xa2, 0x02,
+ 0xab, 0x16, 0x49, 0xa1, 0x88, 0xf0, 0x75, 0x11, 0xb2, 0x11, 0xa2, 0x39,
+ 0xc9, 0xe3, 0x7b, 0xae, 0x3f, 0x23, 0x62, 0x83, 0x0f, 0x66, 0x0c, 0x8a,
+ 0x5d, 0xb0, 0xc8, 0xe4, 0xd7, 0x3c, 0x3a, 0x3f, 0x7e, 0xd3, 0xb7, 0x3a,
+ 0x78, 0xf4, 0xbb, 0x98, 0xa1, 0x0c, 0x76, 0x53, 0x92, 0x7b, 0x16, 0xc9,
+ 0xdc, 0x02, 0x6a, 0xc0, 0x13, 0x35, 0x02, 0x28, 0x9c, 0x00, 0x1f, 0x1a,
+ 0xb1, 0x48, 0x08, 0xaf, 0x55, 0xfc, 0x32, 0xbb, 0xb4, 0x5a, 0x10, 0xf0,
+ 0x78, 0x3f, 0x35, 0x6a, 0x39, 0xda, 0x74, 0x91, 0xba, 0xdc, 0x1f, 0xc2,
+ 0x51, 0x11, 0x2d, 0xe0, 0x02, 0x04, 0x32, 0x4b, 0xb6, 0x3e, 0xff, 0xe6,
+ 0x70, 0xf8, 0xc9, 0xee, 0x9e, 0x0e, 0x67, 0x6b, 0xe0, 0xe1, 0x2c, 0x1b,
+ 0x79, 0xf8, 0x60, 0xd7, 0xe1, 0x18, 0x2d, 0xab, 0x1a, 0x07, 0x1c, 0x9b,
+ 0xb1, 0xe9, 0x32, 0x83, 0xb6, 0x2a, 0xa9, 0x41, 0x1b, 0x52, 0x7d, 0xd4,
+ 0x84, 0x4b, 0x57, 0xa7, 0x8e, 0x9d, 0x21, 0xa8, 0xb6, 0xa0, 0xf5, 0x0e,
+ 0x4a, 0x17, 0xef, 0x17, 0xcf, 0xed, 0x23, 0x69, 0x59, 0x5b, 0x43, 0xda,
+ 0xb8, 0x8f, 0x69, 0xa9, 0xef, 0x39, 0xaf, 0xb7, 0xff, 0x96, 0x51, 0x13,
+ 0xf5, 0x52, 0x37, 0x5c, 0x1e, 0xdf, 0x0d, 0x0e, 0x80, 0x86, 0xb0, 0x4f,
+ 0xac, 0xa2, 0xca, 0xdc, 0x03, 0xba, 0xf3, 0xd3, 0x67, 0xb4, 0x51, 0x74,
+ 0xb2, 0x04, 0xaa, 0x81, 0x99, 0x42, 0x36, 0x65, 0xa5, 0xc5, 0x3d, 0x72,
+ 0x94, 0x33, 0x70, 0xfe, 0x42, 0x82, 0x49, 0xdf, 0x0e, 0xa2, 0xaf, 0x93,
+ 0x79, 0xa1, 0xd5, 0x8a, 0x2d, 0xf9, 0x0a, 0xc1, 0x81, 0x5c, 0x34, 0x09,
+ 0x25, 0x6e, 0x4e, 0x93, 0x58, 0x41, 0x04, 0x89, 0xd7, 0x15, 0xa2, 0xdb,
+ 0x5a, 0x79, 0x87, 0x98, 0x43, 0xf4, 0x70, 0x13, 0xa9, 0x81, 0x16, 0x35,
+ 0x0e, 0xd3, 0x42, 0x1b, 0xd8, 0xac, 0x42, 0x01, 0x02, 0x9a, 0x1a, 0xcd,
+ 0xe9, 0x31, 0x87, 0x97, 0x49, 0xed, 0xc9, 0x37, 0xc0, 0x5a, 0x65, 0x3b,
+ 0xa1, 0xe8, 0x5a, 0x9e, 0xa9, 0x4c, 0xf2, 0x1b, 0x36, 0x7a, 0x14, 0x74,
+ 0xdd, 0xc4, 0xf3, 0xf1, 0x6a, 0x30, 0x21, 0x29, 0x96, 0xcd, 0x66, 0x83,
+ 0xe5, 0xed, 0x76, 0x70, 0x4c, 0x99, 0xe5, 0xdf, 0x08, 0x2c, 0x40, 0xd5,
+ 0xe4, 0x6d, 0xf5, 0xf9, 0x9a, 0xa8, 0x5d, 0x71, 0xe5, 0x4c, 0x30, 0x49,
+ 0x58, 0x82, 0xbf, 0x1c, 0xcf, 0xb5, 0xf8, 0x56, 0xc7, 0x91, 0x83, 0xf9,
+ 0xe4, 0x16, 0x06, 0x8b, 0x64, 0xb6, 0xef, 0x52, 0x90, 0x8d, 0x3f, 0x28,
+ 0x3a, 0xb8, 0x53, 0x29, 0x02, 0xf3, 0xec, 0x3c, 0xb9, 0x9e, 0xaa, 0x40,
+ 0x11, 0x2a, 0x2d, 0x1e, 0xb6, 0xb5, 0x99, 0x06, 0x22, 0xaa, 0x0e, 0x3c,
+ 0x10, 0x28, 0xbe, 0x44, 0x9c, 0x6a, 0x86, 0xaa, 0x28, 0xc6, 0xf8, 0xb5,
+ 0x24, 0xac, 0x6f, 0x44, 0xc1, 0x42, 0x80, 0x38, 0xca, 0x62, 0xb0, 0x1a,
+ 0x77, 0x2c, 0x1c, 0x49, 0x1d, 0x4f, 0xf4, 0xad, 0x50, 0x08, 0x30, 0x7e,
+ 0x35, 0x34, 0x1a, 0x6e, 0x4f, 0x2b, 0x82, 0x27, 0x67, 0x85, 0xbe, 0xbe,
+ 0x7b, 0xc2, 0xb6, 0xee, 0xcb, 0xd3, 0x61, 0x4f, 0xe8, 0x61, 0x9e, 0xdc,
+ 0x07, 0x94, 0x25, 0xb0, 0xd4, 0x4a, 0x7e, 0x6c, 0xf9, 0x91, 0xf0, 0x35,
+ 0x2b, 0xc0, 0x9b, 0xcb, 0x68, 0x84, 0x33, 0x78, 0x27, 0x99, 0xcf, 0x82,
+ 0xb0, 0x85, 0xd0, 0x78, 0x62, 0x1e, 0x8e, 0x55, 0x13, 0x11, 0x81, 0xc8,
+ 0x01, 0xbc, 0x30, 0x74, 0x1e, 0x09, 0x4c, 0x4f, 0x7a, 0x51, 0x7f, 0x0f,
+ 0xb0, 0x39, 0xbb, 0xd5, 0x85, 0x8c, 0xb9, 0xc8, 0x47, 0x3c, 0x46, 0x51,
+ 0xa3, 0x0d, 0x57, 0x6c, 0xdd, 0x58, 0xc2, 0xa6, 0x92, 0xf5, 0x1d, 0xbd,
+ 0xcf, 0x3f, 0xf6, 0x74, 0x52, 0x77, 0xbb, 0x08, 0xdd, 0x66, 0x79, 0xf4,
+ 0x2e, 0x99, 0xae, 0x9a, 0x62, 0xc3, 0xde, 0xa3, 0x3b, 0x8b, 0x24, 0x89,
+ 0xfb, 0xd4, 0x41, 0xaa, 0x0a, 0xaa, 0x36, 0x0c, 0xa1, 0x0a, 0x64, 0x68,
+ 0x03, 0xa0, 0x65, 0x54, 0x13, 0xf7, 0x3c, 0xba, 0xdb, 0x33, 0x4f, 0x33,
+ 0x7f, 0x63, 0x8b, 0x27, 0xa6, 0x7a, 0xcf, 0x48, 0x1a, 0xb9, 0x8b, 0x1c,
+ 0xee, 0x16, 0x50, 0x2e, 0xa7, 0x3e, 0x11, 0xdd, 0x12, 0x27, 0xa9, 0x70,
+ 0x1a, 0xd6, 0xa0, 0x4a, 0x87, 0x3e, 0xc4, 0xdb, 0x0f, 0xc4, 0x57, 0x92,
+ 0x85, 0x7d, 0x90, 0x13, 0x42, 0xc0, 0x71, 0xa6, 0x49, 0x82, 0x2d, 0x96,
+ 0x33, 0xad, 0xce, 0x04, 0x46, 0xdc, 0xc3, 0x75, 0x5b, 0x46, 0xc4, 0x89,
+ 0x53, 0x09, 0xf9, 0x9b, 0x42, 0x98, 0x86, 0x80, 0xa5, 0xc6, 0x52, 0xbf,
+ 0x50, 0x6c, 0x01, 0x13, 0x38, 0x3d, 0xd0, 0xcb, 0x4d, 0x2a, 0x36, 0x0c,
+ 0x44, 0xa8, 0x62, 0xc1, 0x88, 0x55, 0x74, 0x23, 0x3a, 0x7d, 0x4b, 0x6e,
+ 0xb4, 0xcc, 0x10, 0x02, 0xeb, 0x04, 0x06, 0x69, 0x63, 0x08, 0xa1, 0x33,
+ 0xea, 0x86, 0x3c, 0xb2, 0xff, 0x39, 0xaf, 0x41, 0xd1, 0xf5, 0x8b, 0xa6,
+ 0x20, 0xc1, 0xd5, 0x15, 0x50, 0xf7, 0x48, 0xa1, 0x60, 0x17, 0xe7, 0xb9,
+ 0x15, 0x13, 0xed, 0x26, 0x0f, 0x2c, 0x20, 0x75, 0xb5, 0x57, 0xf9, 0x5a,
+ 0x50, 0x00, 0xb0, 0xb8, 0xe7, 0x27, 0x6f, 0xa5, 0x3e, 0xa6, 0x3b, 0x48,
+ 0x09, 0x43, 0x26, 0x6e, 0x48, 0x69, 0x57, 0x8c, 0x27, 0x56, 0x9c, 0x89,
+ 0x48, 0xec, 0x4d, 0x4c, 0x6c, 0x7c, 0x40, 0x52, 0xed, 0xeb, 0x62, 0x29,
+ 0xbd, 0x77, 0xf9, 0x92, 0x2c, 0x8a, 0x69, 0xb7, 0x56, 0xf4, 0xcd, 0x6d,
+ 0x66, 0xed, 0x36, 0x72, 0x86, 0xac, 0xf1, 0x24, 0xac, 0x62, 0xab, 0xad,
+ 0x54, 0x98, 0x64, 0xaf, 0x96, 0x27, 0x19, 0x5a, 0xd0, 0x3f, 0x89, 0x06,
+ 0xdb, 0xd4, 0x61, 0xb1, 0x6d, 0x2f, 0x2e, 0x6e, 0xc7, 0x05, 0x5d, 0x8f,
+ 0x9c, 0x14, 0xfc, 0xa3, 0x43, 0x72, 0xe6, 0x11, 0x4f, 0x7e, 0x8a, 0xfa,
+ 0xe3, 0x29, 0xe6, 0x17, 0xa1, 0xc2, 0xe4, 0x8f, 0x44, 0x32, 0xfc, 0xc4,
+ 0x4f, 0x1b, 0x9c, 0x25, 0x37, 0x7c, 0xf7, 0x86, 0x71, 0xd4, 0x51, 0xc2,
+ 0xef, 0xf2, 0xe2, 0xe0, 0xed, 0xf0, 0xb5, 0x18, 0x59, 0x2f, 0x33, 0x5f,
+ 0x1c, 0x50, 0x2d, 0x0b, 0xce, 0x13, 0xe9, 0x90, 0xc6, 0xee, 0x05, 0xdc,
+ 0xdb, 0x82, 0xb4, 0xb5, 0x6c, 0x60, 0xaf, 0x0e, 0x62, 0x2c, 0x65, 0x07,
+ 0xc1, 0xab, 0xe9, 0x30, 0x6d, 0x16, 0x5b, 0xee, 0x62, 0x2d, 0xc2, 0x6a,
+ 0x25, 0x1e, 0xe3, 0xce, 0xb0, 0x51, 0xf5, 0x21, 0x26, 0x94, 0x43, 0x1b,
+ 0x8c, 0x7d, 0x2a, 0xbc, 0x7c, 0x2d, 0xae, 0xe4, 0x21, 0xa9, 0x1e, 0x7d,
+ 0x85, 0xc5, 0x0f, 0x6a, 0xb3, 0x38, 0xc3, 0x9c, 0xf0, 0x72, 0x45, 0x83,
+ 0x73, 0x8d, 0x87, 0x89, 0x84, 0xd6, 0xf4, 0xe6, 0x1f, 0x77, 0xb7, 0xda,
+ 0x9b, 0xbf, 0xfc, 0xa5, 0xcd, 0xb7, 0x8f, 0xdd, 0x64, 0x7d, 0x9f, 0xa7,
+ 0xb2, 0xf9, 0xc7, 0xbd, 0xad, 0x47, 0x67, 0x14, 0x66, 0xda, 0xf9, 0x3e,
+ 0xe9, 0x0d, 0x1e, 0x6c, 0xf4, 0xca, 0xea, 0xc0, 0xea, 0x1d, 0xec, 0x62,
+ 0x3d, 0xae, 0x3c, 0xca, 0x5d, 0x05, 0xf5, 0x81, 0x63, 0x81, 0x9d, 0xe4,
+ 0xe7, 0x5d, 0x38, 0x9a, 0xb2, 0x70, 0xf2, 0xbf, 0x8f, 0x43, 0x74, 0x40,
+ 0x52, 0xc4, 0x43, 0x76, 0xc7, 0xe9, 0xe6, 0x45, 0x36, 0x40, 0xdf, 0x7b,
+ 0x8f, 0xf4, 0xed, 0x67, 0x17, 0xa8, 0xb9, 0xec, 0x0f, 0xe5, 0x80, 0x2a,
+ 0xc3, 0x83, 0xd5, 0x7e, 0x36, 0x7c, 0xc9, 0xc9, 0xf5, 0xfd, 0x5d, 0x9e,
+ 0xbc, 0x39, 0x66, 0xdc, 0xd8, 0xa3, 0x13, 0xc6, 0x2f, 0x1b, 0x2a, 0x82,
+ 0xa0, 0x69, 0xb4, 0x0e, 0x5c, 0x35, 0x04, 0xb7, 0x17, 0x47, 0xa1, 0x8b,
+ 0x5b, 0x72, 0xa7, 0xdf, 0xed, 0x04, 0x77, 0xad, 0x81, 0xb5, 0x85, 0xa5,
+ 0xef, 0x9d, 0x5c, 0xf5, 0xdf, 0x64, 0x13, 0x68, 0x5d, 0x7d, 0x81, 0xa3,
+ 0xa6, 0xb7, 0xe8, 0xc3, 0x77, 0xf3, 0x59, 0xe5, 0xe3, 0x30, 0x49, 0x50,
+ 0x15, 0xea, 0x8d, 0x75, 0x05, 0x00, 0x7e, 0xde, 0xee, 0xf7, 0x51, 0xf2,
+ 0x55, 0xe2, 0x83, 0xd4, 0x4b, 0x50, 0xc1, 0x78, 0xb0, 0xb3, 0x4f, 0xeb,
+ 0x93, 0x4e, 0x57, 0xe2, 0xd1, 0x8e, 0x7d, 0x1c, 0x92, 0xcf, 0x08, 0xbc,
+ 0xe6, 0xac, 0x24, 0x6f, 0x2c, 0x12, 0x73, 0xd0, 0x46, 0x08, 0x49, 0x09,
+ 0xb9, 0x3c, 0xb9, 0xf7, 0x81, 0x34, 0x5a, 0x5c, 0x2f, 0x5b, 0xac, 0x30,
+ 0xc9, 0xfb, 0x8a, 0x8f, 0xbe, 0xd5, 0x51, 0xf7, 0xb3, 0xbc, 0x53, 0x29,
+ 0x79, 0x21, 0x3d, 0x84, 0x04, 0xa8, 0x9f, 0x68, 0x85, 0x88, 0xb3, 0x3c,
+ 0x60, 0x60, 0x3a, 0x6c, 0x2b, 0xfa, 0x12, 0xc0, 0x55, 0x06, 0xe8, 0x9a,
+ 0xd5, 0x71, 0x7a, 0xeb, 0xe5, 0x06, 0x5f, 0x6b, 0x03, 0x36, 0x9a, 0x9b,
+ 0x97, 0x85, 0xb8, 0xce, 0xa2, 0x5a, 0xbe, 0x2e, 0x89, 0x2c, 0x69, 0x58,
+ 0x72, 0xc2, 0xbb, 0xfd, 0x2e, 0x10, 0xb5, 0xd3, 0x79, 0xcb, 0x64, 0xfa,
+ 0xbf, 0x7c, 0x36, 0x0d, 0x1f, 0x5e, 0xd4, 0xb9, 0x62, 0x60, 0x05, 0x76,
+ 0x88, 0x74, 0x64, 0x00, 0x82, 0x35, 0x22, 0xb4, 0x45, 0xf2, 0x3c, 0xb3,
+ 0x35, 0xd3, 0x4b, 0x44, 0x47, 0x73, 0x21, 0x96, 0xce, 0xda, 0x2a, 0x46,
+ 0x2e, 0xe6, 0xa3, 0xcb, 0xc5, 0x04, 0xde, 0x7d, 0x89, 0x6b, 0xfc, 0xcf,
+ 0x78, 0xbe, 0x8c, 0xf3, 0x55, 0xb4, 0xbb, 0xd7, 0x8b, 0xf6, 0x76, 0x76,
+ 0xf7, 0x5a, 0xe6, 0xd0, 0xf9, 0x4f, 0x8e, 0xae, 0xd9, 0xc3, 0xd7, 0x9d,
+ 0x8f, 0x9d, 0x85, 0x8f, 0x91, 0xc7, 0xad, 0xaa, 0xd9, 0xa4, 0xc4, 0x7b,
+ 0xd8, 0xd1, 0x27, 0x15, 0x6e, 0xb9, 0xa6, 0x1d, 0x00, 0xd1, 0x20, 0x53,
+ 0x88, 0xcd, 0xc9, 0x6a, 0x4f, 0xb9, 0x32, 0x25, 0xfc, 0xc4, 0x86, 0x96,
+ 0x15, 0x43, 0x08, 0x85, 0x33, 0xbc, 0xc5, 0x39, 0x0a, 0x6b, 0x55, 0xf7,
+ 0x28, 0x2d, 0x6d, 0x5b, 0x38, 0x46, 0x83, 0xf7, 0x86, 0xe8, 0xfd, 0xe8,
+ 0xe4, 0xf0, 0xd2, 0x10, 0xf3, 0xae, 0xf8, 0x3a, 0xcd, 0x57, 0x1f, 0x57,
+ 0xa3, 0xe8, 0xd1, 0x67, 0x26, 0xfb, 0x37, 0x09, 0x49, 0x64, 0xf3, 0xd1,
+ 0xf2, 0x7a, 0xff, 0xaf, 0x71, 0x7e, 0x9d, 0xcd, 0x3f, 0xf4, 0xfc, 0x04,
+ 0x49, 0x4a, 0xfb, 0xc4, 0xa0, 0x76, 0x5f, 0xec, 0x3e, 0x91, 0x08, 0xf8,
+ 0x94, 0x4b, 0x9a, 0x81, 0x3f, 0x74, 0x67, 0x5d, 0x01, 0x6c, 0x40, 0xe8,
+ 0xbd, 0x43, 0x69, 0x98, 0x4f, 0xba, 0xa2, 0x6e, 0xc5, 0xe1, 0xb3, 0x13,
+ 0x7d, 0x56, 0xb2, 0x99, 0xbb, 0x1b, 0x52, 0xbe, 0xb0, 0xcb, 0xa9, 0x7f,
+ 0xcb, 0x45, 0x77, 0x50, 0x39, 0xe1, 0x1f, 0x98, 0x2b, 0x77, 0xe1, 0x4a,
+ 0x32, 0x1d, 0x0a, 0x4f, 0x56, 0x76, 0x3a, 0xca, 0x93, 0xf8, 0xd6, 0x17,
+ 0xb9, 0xf3, 0x68, 0x0e, 0x66, 0x3b, 0xbf, 0x78, 0x7d, 0x28, 0x18, 0x98,
+ 0x96, 0x83, 0x83, 0xa5, 0x8e, 0x9c, 0xa5, 0x63, 0x8b, 0x47, 0xf9, 0x81,
+ 0xfe, 0x39, 0x48, 0x7e, 0x7f, 0x32, 0xfa, 0x88, 0x87, 0xe8, 0xdc, 0x09,
+ 0xdc, 0xd8, 0x41, 0xb5, 0x9c, 0x01, 0xcb, 0xfc, 0x25, 0x93, 0x9a, 0x55,
+ 0xb3, 0xdb, 0x94, 0x02, 0x6d, 0x62, 0xbb, 0x96, 0x2a, 0xea, 0x5a, 0x74,
+ 0x57, 0x8d, 0x05, 0x34, 0x6e, 0xae, 0x7e, 0x76, 0x74, 0x70, 0x1e, 0xe8,
+ 0x4d, 0xd0, 0x4b, 0xbc, 0x8d, 0x88, 0x9f, 0x63, 0x99, 0x19, 0x05, 0x33,
+ 0xc5, 0x94, 0xb4, 0xea, 0x79, 0x69, 0xb7, 0x04, 0x9f, 0x9c, 0xdc, 0xc5,
+ 0x12, 0x69, 0x9d, 0xe9, 0x75, 0x02, 0x73, 0x06, 0xf0, 0xbc, 0xa7, 0x93,
+ 0x18, 0x1e, 0x35, 0xbd, 0x84, 0x20, 0x84, 0xa2, 0xad, 0x54, 0xc3, 0x6a,
+ 0x68, 0x6f, 0x1e, 0x22, 0xcd, 0x06, 0xd0, 0xb4, 0x07, 0xf9, 0x5d, 0x1e,
+ 0xe3, 0x4c, 0xd7, 0x95, 0x4d, 0x40, 0xf8, 0x33, 0x0d, 0x3e, 0x2e, 0x6e,
+ 0x89, 0x95, 0x8a, 0x27, 0x98, 0x7a, 0x4f, 0xc7, 0x89, 0xd9, 0x54, 0x27,
+ 0xa9, 0x44, 0x64, 0xb0, 0x35, 0x03, 0x58, 0x3a, 0x95, 0x0d, 0x93, 0x1b,
+ 0x88, 0x95, 0x97, 0x69, 0x91, 0x08, 0xee, 0x5d, 0x74, 0x79, 0x9f, 0x89,
+ 0xd0, 0xe9, 0x00, 0x07, 0x24, 0xa6, 0xb1, 0x58, 0xa6, 0x02, 0x9d, 0x41,
+ 0x9b, 0x07, 0x7e, 0x10, 0x94, 0x57, 0xeb, 0x38, 0x43, 0xca, 0x91, 0x73,
+ 0xa0, 0x0d, 0x8f, 0xbe, 0x89, 0x38, 0x47, 0x9b, 0xfb, 0x38, 0xe4, 0x9a,
+ 0x04, 0xec, 0x0b, 0x9f, 0x41, 0x91, 0xf8, 0x6a, 0xc9, 0xe7, 0xfd, 0xf0,
+ 0x26, 0x5e, 0xb0, 0x48, 0xbc, 0xbb, 0xc3, 0xda, 0xf7, 0x77, 0x96, 0xed,
+ 0xc5, 0x07, 0xd5, 0xca, 0x91, 0x16, 0x9d, 0x40, 0x31, 0x9f, 0x70, 0x35,
+ 0x51, 0x96, 0x89, 0xab, 0x36, 0x3f, 0xba, 0x3d, 0x8b, 0xed, 0x19, 0x33,
+ 0xac, 0x69, 0x41, 0xa4, 0x91, 0x17, 0x93, 0xdb, 0xed, 0x31, 0xfd, 0xf3,
+ 0x64, 0x67, 0x1b, 0x50, 0x8c, 0x25, 0x4c, 0x64, 0x4c, 0x93, 0x7b, 0x7b,
+ 0xcf, 0x9e, 0xf5, 0xa2, 0x0e, 0x1b, 0xad, 0xac, 0x03, 0x3e, 0x12, 0x74,
+ 0xb2, 0x3a, 0x6d, 0x75, 0xe6, 0xb6, 0xf3, 0xab, 0x31, 0xff, 0xc7, 0xaf,
+ 0x59, 0xad, 0xa8, 0x4b, 0x4d, 0xdf, 0xc0, 0x3a, 0xcc, 0x43, 0xac, 0x15,
+ 0x23, 0xab, 0x7b, 0xda, 0x07, 0x33, 0x4b, 0xb0, 0x07, 0x62, 0x91, 0x64,
+ 0x0b, 0x73, 0x33, 0xce, 0x14, 0x20, 0x1f, 0xdd, 0x07, 0xce, 0x19, 0x38,
+ 0x86, 0x25, 0xae, 0x4a, 0x13, 0xeb, 0x8b, 0xe5, 0xa8, 0xaf, 0x19, 0xa6,
+ 0xa2, 0x67, 0xa4, 0x74, 0x72, 0xe9, 0xcf, 0xa9, 0x59, 0x7f, 0x1b, 0x1c,
+ 0xf9, 0xcb, 0xa8, 0xa3, 0xb4, 0xc5, 0x3f, 0x06, 0xf0, 0x12, 0x26, 0x63,
+ 0x9e, 0x46, 0xf6, 0x4a, 0xff, 0xf8, 0x8f, 0xff, 0xa0, 0x66, 0xff, 0x83,
+ 0x5b, 0x79, 0xf5, 0xc7, 0xa2, 0xbc, 0x09, 0x9e, 0xe9, 0x28, 0xc1, 0x9f,
+ 0x78, 0x1f, 0x29, 0xe2, 0x9e, 0x00, 0x54, 0x8a, 0x44, 0xa8, 0x37, 0xa7,
+ 0xca, 0x91, 0x7b, 0xc1, 0xfc, 0x52, 0xa4, 0xa8, 0x89, 0xcd, 0xcd, 0x85,
+ 0x1d, 0x7c, 0xc9, 0xfe, 0xcb, 0x84, 0x53, 0x9b, 0x89, 0x0a, 0x81, 0x44,
+ 0xb7, 0x65, 0x22, 0xc6, 0xf1, 0xdb, 0x6f, 0x4f, 0x2e, 0xce, 0xde, 0xbe,
+ 0x39, 0x7e, 0x7b, 0x19, 0x7d, 0x7b, 0x70, 0x71, 0x72, 0xf0, 0xe5, 0xa9,
+ 0x66, 0x50, 0xf3, 0x14, 0x38, 0x5a, 0x44, 0x44, 0xef, 0x1a, 0x8e, 0x68,
+ 0x90, 0xd1, 0xd2, 0x0a, 0x9e, 0x5f, 0x2b, 0x17, 0xf8, 0x5e, 0x81, 0xa9,
+ 0x61, 0x5e, 0x7d, 0x8f, 0x02, 0x16, 0x3d, 0x76, 0xf8, 0xbd, 0xb7, 0x5a,
+ 0x16, 0x6c, 0xb6, 0x5c, 0x05, 0x39, 0xb9, 0x1c, 0xc8, 0xc2, 0x54, 0x6a,
+ 0xfc, 0xc9, 0xd7, 0x1d, 0x52, 0x78, 0xff, 0x41, 0xf4, 0x95, 0xa4, 0x75,
+ 0x6b, 0x48, 0x95, 0x7b, 0x55, 0x53, 0x8c, 0x60, 0xc6, 0x71, 0x63, 0x38,
+ 0x38, 0x3d, 0xf5, 0x5d, 0x3d, 0x5e, 0x85, 0x41, 0xe1, 0x7c, 0x24, 0x0b,
+ 0xe8, 0xc6, 0x2a, 0x0a, 0x5f, 0x67, 0x1e, 0x65, 0x7b, 0xbe, 0x0a, 0x01,
+ 0xb5, 0xb9, 0x33, 0xda, 0x8e, 0x4d, 0xc1, 0x62, 0x60, 0x77, 0x23, 0x1d,
+ 0xa0, 0xb4, 0xb8, 0xed, 0x45, 0xdd, 0x3f, 0x76, 0x25, 0x3b, 0x2b, 0x01,
+ 0xdc, 0xac, 0xd4, 0x78, 0xd8, 0xf2, 0x83, 0x7a, 0x7b, 0xe6, 0xc7, 0xa4,
+ 0x4e, 0x34, 0x37, 0x00, 0xf7, 0xa2, 0xf7, 0x7f, 0x16, 0x26, 0xcf, 0x20,
+ 0xf0, 0xd0, 0x3f, 0xae, 0x88, 0xfe, 0x2e, 0xc5, 0x5c, 0x69, 0x94, 0xfd,
+ 0x24, 0xad, 0xef, 0x42, 0x69, 0x8b, 0xc7, 0x01, 0xaa, 0xb0, 0x98, 0x71,
+ 0x58, 0xf9, 0x85, 0x1c, 0x20, 0xf5, 0x8f, 0xe5, 0x72, 0x78, 0x90, 0xb2,
+ 0xd9, 0x1b, 0x56, 0xac, 0x57, 0x39, 0x28, 0xa8, 0xea, 0x61, 0xdb, 0x6a,
+ 0x3d, 0xc0, 0x65, 0xc5, 0x81, 0xe5, 0x79, 0x3a, 0x51, 0x9c, 0xba, 0x56,
+ 0xaa, 0x18, 0xc0, 0xd3, 0x71, 0x71, 0x08, 0x50, 0xef, 0x39, 0x17, 0x80,
+ 0x72, 0x85, 0x10, 0x24, 0x08, 0x95, 0xb8, 0x48, 0xce, 0x99, 0x5d, 0x73,
+ 0x15, 0x42, 0x10, 0xd8, 0x09, 0x11, 0x3d, 0xbe, 0xce, 0x4c, 0xfc, 0x8e,
+ 0x9d, 0xfb, 0x55, 0x32, 0xb6, 0x24, 0x66, 0xc7, 0xa4, 0x30, 0x07, 0x44,
+ 0xe5, 0x2c, 0x60, 0x70, 0xd4, 0x9a, 0xbd, 0x99, 0xe3, 0x94, 0x60, 0x2f,
+ 0xd3, 0x38, 0x86, 0x22, 0x48, 0xf7, 0xf5, 0x61, 0xf0, 0xcc, 0x4b, 0xc4,
+ 0x45, 0x69, 0xc8, 0x50, 0xc0, 0xdf, 0xb2, 0xf4, 0x60, 0x44, 0xcc, 0x61,
+ 0x58, 0xfc, 0x20, 0x9a, 0xd4, 0xe0, 0x47, 0x34, 0x69, 0xa6, 0x50, 0x3a,
+ 0x3d, 0x53, 0xce, 0x44, 0x32, 0x4e, 0x14, 0x47, 0xa3, 0xf4, 0x3a, 0x32,
+ 0x2b, 0x48, 0xc4, 0x54, 0x02, 0x94, 0xb0, 0x6c, 0x96, 0xf0, 0x56, 0x01,
+ 0x03, 0x0c, 0xb2, 0xfb, 0x0d, 0x57, 0x88, 0xf7, 0xa0, 0x55, 0x36, 0x93,
+ 0x82, 0x23, 0xf5, 0x03, 0x2b, 0x1a, 0x2c, 0xe9, 0x4b, 0x5e, 0x47, 0x0b,
+ 0x6b, 0x52, 0x7c, 0x6b, 0x0d, 0xf2, 0x62, 0x13, 0x2d, 0xe0, 0xf6, 0xe6,
+ 0x48, 0x29, 0xb1, 0xf4, 0x5c, 0xac, 0x83, 0x05, 0xc0, 0x32, 0xb7, 0x80,
+ 0x65, 0x85, 0xab, 0x4d, 0x6d, 0x3a, 0x80, 0x6a, 0x6e, 0x65, 0x2c, 0x10,
+ 0x9f, 0x4c, 0xf4, 0x12, 0x9f, 0x5e, 0xa9, 0x26, 0x61, 0x9b, 0xa5, 0x50,
+ 0x4c, 0x57, 0x52, 0xd6, 0x9e, 0xc6, 0xb7, 0x19, 0x30, 0x9e, 0x39, 0x91,
+ 0x88, 0x3c, 0x26, 0xfa, 0xa3, 0xfe, 0xd5, 0x17, 0xef, 0x65, 0x6c, 0x85,
+ 0xb7, 0x8a, 0x2d, 0xef, 0xc1, 0x16, 0x29, 0x80, 0xa9, 0x75, 0xac, 0x05,
+ 0xad, 0x30, 0x5e, 0xda, 0x2f, 0x33, 0x44, 0x85, 0x76, 0xac, 0xc8, 0x32,
+ 0x37, 0xa6, 0xd3, 0x00, 0xa2, 0x5a, 0xcc, 0x11, 0x71, 0x43, 0xf8, 0x70,
+ 0xe5, 0xe9, 0x0f, 0x34, 0x86, 0x44, 0xe0, 0x6c, 0x83, 0x99, 0x68, 0x74,
+ 0x32, 0x8b, 0x67, 0x35, 0xf3, 0x58, 0xc0, 0xd1, 0xcc, 0xdb, 0x1a, 0xde,
+ 0x4c, 0x5a, 0x19, 0x21, 0x8d, 0x67, 0x22, 0x3c, 0x7a, 0xf2, 0x9b, 0xad,
+ 0x24, 0x7e, 0x6d, 0x63, 0xe3, 0xf0, 0xdd, 0xf0, 0xf2, 0xec, 0x4d, 0x74,
+ 0xf6, 0xee, 0xf2, 0xfc, 0xdd, 0xa5, 0x5e, 0x5d, 0x23, 0x89, 0xfe, 0x15,
+ 0x1d, 0x51, 0xa4, 0x00, 0xdb, 0xcd, 0x99, 0xba, 0x90, 0x11, 0xac, 0x90,
+ 0x01, 0x9a, 0x2e, 0x40, 0xa9, 0x71, 0xd9, 0x3d, 0xc0, 0x6e, 0x12, 0xc4,
+ 0x5b, 0xac, 0xf9, 0x3d, 0xad, 0x39, 0x32, 0x33, 0x61, 0xdb, 0xb1, 0x64,
+ 0x21, 0xe8, 0x3d, 0xed, 0x55, 0x47, 0x6a, 0x75, 0xcc, 0xe0, 0xec, 0xad,
+ 0x82, 0x02, 0xf9, 0x88, 0x1c, 0xb3, 0xed, 0x78, 0xd3, 0x4f, 0x18, 0x1c,
+ 0x88, 0xb0, 0x98, 0x71, 0x69, 0xc6, 0x4c, 0x8b, 0xcf, 0x44, 0xd0, 0x4a,
+ 0x35, 0x45, 0x2d, 0xcc, 0x94, 0x2b, 0x33, 0x9a, 0xe1, 0x8d, 0x8b, 0xad,
+ 0xe6, 0x78, 0x14, 0xc4, 0x94, 0x89, 0x43, 0x9e, 0x83, 0xb7, 0xac, 0xc0,
+ 0xfc, 0x3d, 0x9b, 0xc0, 0x1b, 0xd7, 0xec, 0x7d, 0xd4, 0xfd, 0x2e, 0x09,
+ 0x1b, 0xfc, 0xfd, 0xdf, 0x39, 0x01, 0xf0, 0xbd, 0x7d, 0xf2, 0x0f, 0xe9,
+ 0xf2, 0x2f, 0xf3, 0x2e, 0x42, 0xb1, 0xaa, 0x9e, 0xd7, 0x6f, 0x8e, 0x2f,
+ 0xbe, 0x3c, 0xbe, 0x38, 0x1b, 0x22, 0xfc, 0xc4, 0xcc, 0x5d, 0x4d, 0x62,
+ 0xbf, 0x4d, 0xf2, 0x51, 0x92, 0x67, 0x5a, 0x48, 0xc6, 0xfe, 0x7a, 0xb6,
+ 0xfd, 0xd5, 0x70, 0x78, 0x70, 0x7e, 0xe2, 0x6a, 0x8e, 0xb8, 0x54, 0x24,
+ 0xd1, 0x91, 0xe6, 0x92, 0x2c, 0xc7, 0xf3, 0xb7, 0x57, 0x88, 0x2e, 0xc6,
+ 0xb7, 0x12, 0xa2, 0xda, 0xf0, 0x71, 0x9a, 0x8d, 0x96, 0x9d, 0x9b, 0x9a,
+ 0xa1, 0xc6, 0x0d, 0x1b, 0xba, 0x90, 0x24, 0x6a, 0x0b, 0x01, 0xbf, 0x66,
+ 0x93, 0x72, 0xcf, 0x85, 0x71, 0xdd, 0xe6, 0xa3, 0x3e, 0x11, 0xfa, 0xad,
+ 0xd5, 0x87, 0x94, 0x60, 0x7a, 0x62, 0x93, 0x12, 0x65, 0xeb, 0xed, 0x0c,
+ 0xb7, 0x5c, 0x15, 0x76, 0xfb, 0x96, 0x8f, 0x06, 0x97, 0xc5, 0x98, 0x0e,
+ 0x84, 0xb3, 0xcb, 0x59, 0xb2, 0xd0, 0x49, 0x66, 0xaf, 0x8f, 0x81, 0x1d,
+ 0x50, 0x6f, 0xae, 0x5e, 0x95, 0x98, 0xba, 0xe8, 0x93, 0xa7, 0x0e, 0xf4,
+ 0x29, 0x2c, 0x18, 0x7a, 0x45, 0xc2, 0xf7, 0xe2, 0x7e, 0xa2, 0x17, 0x08,
+ 0x20, 0x8e, 0xe7, 0x62, 0xe5, 0x16, 0xfe, 0x5d, 0xf7, 0x75, 0x70, 0x81,
+ 0x2d, 0x44, 0xfd, 0x6b, 0x4c, 0x73, 0x34, 0x9a, 0xc6, 0xf3, 0x5b, 0xdc,
+ 0x64, 0xb8, 0x9b, 0x58, 0xdd, 0x34, 0x2c, 0x23, 0x2e, 0x47, 0x06, 0xd7,
+ 0x96, 0xc2, 0x0b, 0x40, 0x00, 0xb4, 0xe2, 0xe7, 0x6c, 0xd9, 0x75, 0x90,
+ 0x4d, 0x81, 0x13, 0x07, 0x27, 0xc9, 0x2f, 0x02, 0x5b, 0x8d, 0x8e, 0x4f,
+ 0xe9, 0x52, 0x72, 0x99, 0x0a, 0x50, 0xcf, 0x93, 0x29, 0x03, 0xef, 0x58,
+ 0x70, 0x89, 0x24, 0xe7, 0xa5, 0x60, 0x62, 0xc2, 0x38, 0x0c, 0x7d, 0x1b,
+ 0x6e, 0x08, 0x50, 0x0a, 0x72, 0x10, 0x0b, 0x57, 0xa3, 0x42, 0xb9, 0xb6,
+ 0x30, 0x30, 0x80, 0x4b, 0xfa, 0x92, 0x15, 0x61, 0x11, 0x13, 0x8d, 0xd9,
+ 0x3a, 0xf4, 0xa1, 0x25, 0xb1, 0x7d, 0x27, 0x83, 0xf0, 0x22, 0xa9, 0x73,
+ 0x56, 0x55, 0x52, 0x24, 0xd6, 0x6e, 0x93, 0xbc, 0xde, 0x66, 0x00, 0x00,
+ 0x03, 0xa4, 0x06, 0xc4, 0xfa, 0xed, 0xe0, 0x65, 0x2c, 0xee, 0xb5, 0x1a,
+ 0x6b, 0x6a, 0x03, 0x1f, 0x58, 0x75, 0x75, 0x84, 0x3f, 0x89, 0xff, 0x09,
+ 0x71, 0x92, 0x7a, 0xfb, 0x96, 0x13, 0x70, 0x9b, 0xbc, 0x82, 0x74, 0x1a,
+ 0x86, 0x78, 0x0a, 0x02, 0x02, 0xcc, 0x82, 0x12, 0xf4, 0x0f, 0x0d, 0xc6,
+ 0xc9, 0xb6, 0xfd, 0xb7, 0x7c, 0x55, 0x64, 0xfd, 0xd1, 0x12, 0x3a, 0x99,
+ 0xc7, 0xea, 0xd2, 0x44, 0x40, 0x2e, 0x0a, 0x0c, 0x70, 0x2e, 0x7c, 0xcf,
+ 0x6e, 0x0d, 0xa4, 0x58, 0x8b, 0xa7, 0x03, 0x39, 0x77, 0x55, 0xe0, 0x16,
+ 0x07, 0xd7, 0x21, 0x81, 0xec, 0x08, 0xe8, 0xd5, 0xa8, 0x65, 0x1d, 0xa1,
+ 0x6e, 0xb2, 0x0b, 0x39, 0x9b, 0x6b, 0xd5, 0x3c, 0xd8, 0xd9, 0xab, 0x61,
+ 0xbb, 0xa5, 0x43, 0x4b, 0xbf, 0x84, 0x88, 0x90, 0x28, 0x86, 0xb8, 0xc5,
+ 0xe3, 0x5a, 0xf4, 0xff, 0x5d, 0xc9, 0xf5, 0x81, 0x04, 0x69, 0x20, 0x9e,
+ 0x4a, 0x91, 0x87, 0xb5, 0xb7, 0x88, 0x1c, 0xa6, 0xf2, 0xf2, 0xf2, 0x87,
+ 0xf3, 0xe3, 0x57, 0xf6, 0xe6, 0x63, 0x7b, 0x26, 0x00, 0x5c, 0x08, 0xbf,
+ 0x48, 0x14, 0xec, 0x32, 0xa8, 0xc1, 0x49, 0x44, 0xd6, 0x2f, 0xcd, 0x2d,
+ 0x2c, 0xdd, 0xf4, 0xa3, 0xef, 0x8f, 0x4e, 0x86, 0xe7, 0xa7, 0x67, 0x87,
+ 0xaf, 0x5e, 0x7e, 0x6f, 0xdc, 0xf8, 0x73, 0x46, 0x9c, 0x11, 0x19, 0xcd,
+ 0x7d, 0xe6, 0x01, 0x02, 0xf4, 0xbd, 0xb7, 0xc7, 0xdf, 0xbd, 0x27, 0xcd,
+ 0xe0, 0x15, 0x83, 0x82, 0xf7, 0xee, 0xe2, 0xa9, 0xbe, 0xc4, 0xea, 0x55,
+ 0x8b, 0x5c, 0x17, 0xa4, 0x73, 0xb4, 0x2d, 0x2c, 0xcb, 0x13, 0x01, 0x42,
+ 0xeb, 0x0a, 0x12, 0xb4, 0x46, 0x64, 0x05, 0xf5, 0x84, 0xe2, 0x4a, 0x6e,
+ 0x66, 0x4b, 0x71, 0xc6, 0xcc, 0xdd, 0xfc, 0xdd, 0x52, 0x22, 0xf3, 0xd8,
+ 0x1b, 0x1d, 0x3a, 0x79, 0x11, 0xfc, 0xa8, 0xdf, 0xf8, 0xa0, 0x50, 0x85,
+ 0xdf, 0xcd, 0x39, 0x16, 0xc2, 0x61, 0x19, 0x6a, 0x85, 0x4c, 0xb8, 0x4f,
+ 0x15, 0xf0, 0x50, 0x91, 0x7c, 0x38, 0x0e, 0xd3, 0x42, 0xb2, 0x5d, 0x15,
+ 0x66, 0x11, 0x5f, 0xdc, 0x58, 0xe2, 0xf1, 0x98, 0x7e, 0x30, 0xc6, 0x24,
+ 0x97, 0x73, 0x39, 0xe7, 0xaa, 0xec, 0xc3, 0x4b, 0x56, 0xa1, 0xb4, 0x6a,
+ 0x99, 0x9a, 0x9f, 0xad, 0xa4, 0x1c, 0x12, 0xff, 0xab, 0xd8, 0x95, 0x61,
+ 0xa9, 0x89, 0xca, 0x89, 0x76, 0x6c, 0xae, 0x9a, 0x09, 0xc8, 0x56, 0x04,
+ 0x49, 0x2f, 0x64, 0x21, 0x54, 0x10, 0x58, 0xe3, 0x2b, 0x3b, 0xc0, 0x99,
+ 0x92, 0x46, 0xad, 0xe2, 0x02, 0xaa, 0xa5, 0x60, 0x77, 0xa6, 0xe9, 0xc8,
+ 0x1b, 0xcc, 0x6b, 0x9e, 0x48, 0x76, 0x74, 0x2b, 0xe2, 0x43, 0x78, 0x84,
+ 0xcc, 0x14, 0xee, 0xd3, 0x6b, 0x8b, 0xcc, 0xca, 0x27, 0x0a, 0xf1, 0xc3,
+ 0x54, 0x1d, 0x26, 0x41, 0x3a, 0x25, 0x15, 0x8a, 0x89, 0x89, 0x68, 0xee,
+ 0xd3, 0x20, 0x94, 0x51, 0x41, 0x84, 0x80, 0x7d, 0xaa, 0x2c, 0x1b, 0xf5,
+ 0xca, 0x25, 0x9d, 0x89, 0x8d, 0x2c, 0x24, 0xb0, 0x20, 0x3d, 0x1b, 0x21,
+ 0x27, 0x3a, 0xb3, 0x86, 0xf4, 0xa1, 0x62, 0xe3, 0x35, 0xe7, 0x41, 0x01,
+ 0xa9, 0x69, 0xc2, 0xa2, 0x16, 0xac, 0x6f, 0x61, 0x67, 0x76, 0x93, 0xf2,
+ 0x0a, 0x8e, 0x96, 0x61, 0x3d, 0x2f, 0x37, 0x7a, 0x29, 0x69, 0x81, 0x85,
+ 0x47, 0xb0, 0x5d, 0x9c, 0x03, 0x09, 0xb1, 0x54, 0xa4, 0x71, 0x53, 0x7a,
+ 0x34, 0x72, 0x6e, 0x50, 0x05, 0x85, 0x31, 0xba, 0xb4, 0x52, 0x7d, 0x8f,
+ 0xad, 0xa8, 0x5b, 0x4d, 0x21, 0xdf, 0x3c, 0xb1, 0x10, 0x18, 0x31, 0x31,
+ 0x14, 0xec, 0x6b, 0x98, 0x8f, 0xdd, 0x65, 0xcc, 0x99, 0x2b, 0x1c, 0x0a,
+ 0x92, 0x2b, 0xe0, 0xce, 0x92, 0x8b, 0xa3, 0x6b, 0x05, 0x51, 0xd4, 0xbf,
+ 0x64, 0x87, 0x9b, 0x81, 0xb1, 0xf9, 0x58, 0x60, 0x59, 0xee, 0x80, 0xac,
+ 0xc4, 0xb4, 0xbe, 0xd2, 0x0e, 0x5d, 0x96, 0xb5, 0x6d, 0x56, 0x4f, 0x92,
+ 0x76, 0x62, 0xe4, 0x88, 0x98, 0x4d, 0x37, 0xc8, 0x35, 0x2c, 0x34, 0x83,
+ 0xd3, 0x39, 0x2b, 0x85, 0xe1, 0xa1, 0x62, 0x91, 0xcf, 0x79, 0xaa, 0x38,
+ 0x05, 0x49, 0xb2, 0x5c, 0xa0, 0xfc, 0xce, 0x58, 0x11, 0xc8, 0x11, 0xfc,
+ 0xe9, 0xda, 0xb3, 0x3b, 0xc4, 0xaf, 0x15, 0x2d, 0xea, 0x9b, 0x77, 0xa7,
+ 0x97, 0x27, 0xe7, 0xa1, 0xe3, 0x31, 0xfa, 0xee, 0xe4, 0xf2, 0x6b, 0x92,
+ 0xd7, 0xb9, 0xb6, 0xf3, 0x29, 0x7b, 0x77, 0xde, 0xbc, 0x39, 0x78, 0xcb,
+ 0x19, 0xea, 0x6f, 0x11, 0x23, 0x77, 0x00, 0x9d, 0x81, 0xb9, 0x11, 0xad,
+ 0x30, 0x93, 0x0e, 0xe7, 0x2e, 0xf7, 0x9a, 0x5e, 0x86, 0xda, 0xe9, 0x03,
+ 0xc3, 0xe1, 0x23, 0x14, 0xae, 0x11, 0x6f, 0xb8, 0xea, 0x04, 0x2b, 0xb6,
+ 0xe9, 0xe0, 0xd4, 0xb2, 0x9e, 0xc5, 0xeb, 0x5c, 0x87, 0x1e, 0x47, 0x9e,
+ 0x9c, 0xc8, 0xe6, 0xf0, 0xa9, 0xca, 0xd5, 0xed, 0x3d, 0x17, 0xd8, 0x50,
+ 0x07, 0x62, 0x8a, 0x98, 0x55, 0x12, 0x99, 0xe6, 0xaa, 0xd2, 0xc8, 0x75,
+ 0x59, 0x8d, 0x5b, 0xa7, 0x1e, 0x31, 0x24, 0x38, 0x95, 0x33, 0x6f, 0x0c,
+ 0x64, 0x65, 0x93, 0xf5, 0xe5, 0x8b, 0xd3, 0xf0, 0x3e, 0xad, 0xd6, 0x0f,
+ 0xb6, 0x40, 0xb3, 0xeb, 0x2c, 0xf1, 0x07, 0xb7, 0x7f, 0x66, 0xcd, 0x98,
+ 0xe5, 0x17, 0x1a, 0x98, 0xdc, 0x2d, 0x7d, 0x66, 0x6b, 0x7d, 0xda, 0x92,
+ 0x2d, 0x57, 0xa3, 0x46, 0x2d, 0x67, 0xfb, 0x22, 0x55, 0x56, 0xaa, 0x78,
+ 0x03, 0x39, 0xf6, 0xcc, 0xb5, 0xac, 0x01, 0x0d, 0x88, 0xeb, 0xd5, 0xd4,
+ 0x18, 0x9d, 0x33, 0x98, 0xa5, 0x3d, 0x56, 0xc9, 0xec, 0xad, 0x95, 0x12,
+ 0xb7, 0xd4, 0x28, 0x24, 0x44, 0x32, 0x84, 0x8b, 0xf7, 0x99, 0xa2, 0x2c,
+ 0x57, 0x96, 0x0d, 0x92, 0x87, 0x84, 0xdd, 0x9b, 0xfc, 0xeb, 0x5f, 0x17,
+ 0xd7, 0x61, 0xd6, 0x14, 0xe6, 0xaa, 0xe9, 0xc1, 0xed, 0x98, 0xc0, 0x22,
+ 0x15, 0x69, 0x71, 0xb2, 0xca, 0x08, 0xb4, 0xe2, 0xd8, 0xee, 0xba, 0x0e,
+ 0xf5, 0xfb, 0xbd, 0xe6, 0xf7, 0x7b, 0x62, 0x71, 0xe4, 0x0a, 0xf4, 0x0e,
+ 0x4f, 0x53, 0x72, 0x81, 0x43, 0xe9, 0xcd, 0x64, 0x02, 0xa6, 0x30, 0x29,
+ 0x56, 0x0f, 0xb7, 0x8a, 0xb0, 0x44, 0x31, 0xfb, 0x73, 0x2c, 0xd2, 0x32,
+ 0x47, 0x8e, 0x23, 0x1e, 0x81, 0x85, 0x58, 0x02, 0x48, 0x11, 0xae, 0x05,
+ 0x36, 0xc5, 0xb7, 0x15, 0x35, 0x48, 0xdf, 0x3f, 0x75, 0x01, 0xdd, 0x9e,
+ 0xa5, 0xa1, 0xc0, 0x97, 0x66, 0xd4, 0xf4, 0xd3, 0xc5, 0x9d, 0x15, 0xb8,
+ 0xa4, 0x5f, 0x9f, 0xbb, 0xe2, 0x2e, 0x45, 0xc5, 0x3d, 0x55, 0x01, 0xae,
+ 0x35, 0xde, 0x8f, 0xc1, 0x21, 0xc0, 0x8e, 0x19, 0x83, 0xc3, 0x7c, 0x1d,
+ 0xd4, 0xc6, 0x95, 0x54, 0x43, 0x7b, 0x83, 0x52, 0x93, 0xb0, 0x2d, 0x4f,
+ 0x91, 0x5d, 0x09, 0x76, 0x14, 0xf0, 0x96, 0x10, 0x27, 0x5e, 0x77, 0xfd,
+ 0xc7, 0xbd, 0x9d, 0x9d, 0xdd, 0xfd, 0xdd, 0xcf, 0x5e, 0xec, 0xec, 0xef,
+ 0xee, 0xee, 0xee, 0xed, 0xef, 0xee, 0xef, 0xef, 0xed, 0xfc, 0xb4, 0xcd,
+ 0xa6, 0xa3, 0xbb, 0x34, 0xb9, 0x77, 0x95, 0xe4, 0xbf, 0x93, 0x6b, 0x1a,
+ 0xfe, 0x82, 0x95, 0xb8, 0x01, 0x99, 0x4b, 0xaa, 0x86, 0x6b, 0x82, 0x8f,
+ 0x43, 0x26, 0x90, 0xe0, 0x6b, 0x01, 0x24, 0x5b, 0xf8, 0x6c, 0x45, 0x9c,
+ 0xc1, 0x00, 0x30, 0x19, 0xa3, 0xfa, 0xdb, 0x92, 0x67, 0x3a, 0x62, 0x69,
+ 0x00, 0x22, 0x4d, 0xe1, 0x72, 0xc3, 0xae, 0xa7, 0xd9, 0x68, 0x84, 0x00,
+ 0x78, 0x97, 0x1e, 0x39, 0x88, 0x18, 0x99, 0xf3, 0x56, 0x48, 0x42, 0x9d,
+ 0x06, 0x08, 0x4f, 0x93, 0x83, 0xee, 0x57, 0x47, 0xe4, 0x2e, 0x0d, 0xc9,
+ 0x1d, 0x67, 0x8c, 0x4a, 0x3f, 0x61, 0xa6, 0x44, 0x8b, 0x94, 0xbb, 0xb4,
+ 0x89, 0xe8, 0x2a, 0xf9, 0x6c, 0x67, 0x7f, 0x9f, 0x0b, 0x47, 0xfc, 0x7e,
+ 0xb7, 0xa7, 0x91, 0x85, 0x61, 0xb8, 0x74, 0xcf, 0xdd, 0x4e, 0xd2, 0x06,
+ 0x6b, 0x1f, 0xe1, 0x3c, 0xe7, 0xcb, 0x59, 0x92, 0xab, 0x1e, 0x82, 0xfb,
+ 0x50, 0x00, 0x64, 0x98, 0x18, 0x6d, 0xc8, 0xee, 0x59, 0x94, 0x42, 0x81,
+ 0x49, 0x5e, 0xf2, 0x1b, 0xfc, 0xe5, 0xa9, 0xe7, 0x1c, 0x47, 0x65, 0x2e,
+ 0x45, 0x26, 0xf9, 0x61, 0x08, 0xe4, 0x40, 0xc5, 0xc8, 0x6e, 0x43, 0x59,
+ 0x55, 0x73, 0x3a, 0x7e, 0x0c, 0x06, 0xbf, 0xf7, 0x6c, 0xf7, 0x27, 0x09,
+ 0x64, 0x63, 0x02, 0xf7, 0xab, 0xa0, 0xa5, 0xc1, 0x26, 0x2a, 0x8f, 0x48,
+ 0x1a, 0x98, 0x12, 0xc6, 0x66, 0x32, 0xb8, 0x1e, 0x98, 0x90, 0xa0, 0x86,
+ 0xc3, 0x5e, 0x18, 0x4e, 0x2c, 0x08, 0xd6, 0x52, 0x93, 0x1d, 0x6a, 0x97,
+ 0xd9, 0x86, 0xcc, 0xb6, 0x2b, 0x76, 0xc9, 0x4a, 0x8d, 0x97, 0x0d, 0xba,
+ 0x32, 0x0e, 0x4e, 0x4e, 0x39, 0x5e, 0xe5, 0x94, 0x24, 0xb0, 0xa1, 0xb1,
+ 0x32, 0x84, 0xf4, 0x20, 0xde, 0x66, 0x9e, 0xf2, 0x6d, 0xda, 0x73, 0xd0,
+ 0xf2, 0x16, 0x16, 0x0f, 0xb1, 0x82, 0xed, 0xee, 0x22, 0x99, 0x2b, 0x0e,
+ 0x14, 0xc9, 0xc3, 0xc4, 0xcf, 0x0a, 0x31, 0xa7, 0x00, 0x6e, 0x91, 0x71,
+ 0x88, 0xe1, 0xe3, 0x80, 0xc4, 0x2b, 0x0b, 0x8f, 0x6a, 0x16, 0x79, 0x32,
+ 0x4d, 0xee, 0xd4, 0xee, 0x21, 0xe0, 0x75, 0x5f, 0xa9, 0x7b, 0x41, 0x8a,
+ 0xd9, 0x95, 0xde, 0x4b, 0x52, 0xf1, 0x60, 0x70, 0x9f, 0xdb, 0x92, 0xf7,
+ 0xef, 0xd3, 0xb9, 0x51, 0xfc, 0xd7, 0x01, 0x2e, 0x9b, 0x37, 0x87, 0xdf,
+ 0xeb, 0xb3, 0x08, 0xaa, 0x71, 0x48, 0xef, 0x0a, 0xcd, 0xd8, 0xad, 0x47,
+ 0x05, 0x8a, 0x2a, 0x6f, 0xe5, 0x90, 0xc4, 0x2c, 0xd6, 0x33, 0x4c, 0x4c,
+ 0x31, 0xe6, 0xb1, 0xd4, 0xd2, 0x63, 0x13, 0x0a, 0x5a, 0xba, 0x22, 0x79,
+ 0x89, 0x91, 0xcf, 0x7b, 0x91, 0x2f, 0x1c, 0x9f, 0x4d, 0xe9, 0x4f, 0x04,
+ 0x3a, 0xf0, 0xaa, 0xe3, 0x59, 0xc6, 0xf4, 0x0b, 0xc2, 0x8f, 0xe8, 0x4f,
+ 0x09, 0x7b, 0xd5, 0xbf, 0xd0, 0x54, 0xbe, 0x04, 0x74, 0x64, 0x4f, 0x88,
+ 0x95, 0xfd, 0x01, 0xe5, 0x78, 0xe0, 0x46, 0xaf, 0xee, 0x38, 0x19, 0xff,
+ 0x91, 0x79, 0x8b, 0x8c, 0x4d, 0x64, 0xb9, 0xad, 0xae, 0xec, 0xc2, 0x48,
+ 0xaa, 0x57, 0x7d, 0xb9, 0x64, 0x3b, 0xb5, 0xab, 0xce, 0xc0, 0xa3, 0x98,
+ 0x31, 0x69, 0x25, 0x52, 0x28, 0xce, 0x35, 0xce, 0x02, 0xd7, 0x92, 0x76,
+ 0x57, 0x5a, 0x3f, 0xcd, 0xee, 0xb9, 0xca, 0xdd, 0xd5, 0x15, 0xd7, 0x2d,
+ 0x3f, 0x9b, 0x7b, 0x88, 0x48, 0xe6, 0xaa, 0xf2, 0xe0, 0xcc, 0x4a, 0x6b,
+ 0xd0, 0xdc, 0xac, 0x80, 0xbd, 0x05, 0x2e, 0x0e, 0xa2, 0x03, 0xac, 0x12,
+ 0xc9, 0x42, 0x68, 0x4e, 0xdc, 0x6c, 0x10, 0x07, 0x6b, 0x71, 0x72, 0x5a,
+ 0x82, 0x97, 0x6f, 0xc8, 0x19, 0xca, 0xfd, 0x71, 0x4c, 0xd8, 0x2c, 0x9b,
+ 0x5b, 0xd8, 0xf3, 0xb2, 0x10, 0xc0, 0x30, 0xab, 0xd7, 0xbb, 0x21, 0x36,
+ 0xc3, 0x74, 0xaa, 0x08, 0xbd, 0x2a, 0x38, 0xe3, 0x8d, 0x70, 0x32, 0x93,
+ 0xfe, 0xe2, 0x66, 0x61, 0x3b, 0x6d, 0xfc, 0x4a, 0x98, 0x99, 0x06, 0xda,
+ 0xe2, 0x7a, 0x3b, 0xff, 0xfa, 0x7c, 0x10, 0x1d, 0x73, 0x4b, 0x32, 0x26,
+ 0xbd, 0x87, 0xa0, 0x41, 0xd1, 0x77, 0x34, 0xd9, 0x6b, 0x66, 0xe0, 0x67,
+ 0x39, 0xff, 0x85, 0xd6, 0xf4, 0x4b, 0x31, 0x9a, 0xe0, 0xdb, 0x6a, 0xaf,
+ 0xd4, 0x90, 0x45, 0xc4, 0x9d, 0xe3, 0x77, 0x3a, 0x2a, 0xc4, 0x1d, 0xdd,
+ 0x36, 0xf9, 0x1e, 0xb2, 0xbc, 0x02, 0xaf, 0x20, 0x6f, 0x46, 0xc4, 0x34,
+ 0xc1, 0xfa, 0x16, 0x2b, 0xec, 0x1f, 0x14, 0x6e, 0x60, 0x72, 0xe8, 0xf5,
+ 0x20, 0x0d, 0x04, 0xa4, 0xa5, 0xe4, 0xe7, 0x02, 0x6b, 0xe4, 0x5c, 0xe5,
+ 0x02, 0x2c, 0x90, 0x27, 0x1a, 0x86, 0x94, 0xa9, 0x03, 0x43, 0xf4, 0x8d,
+ 0x22, 0xa9, 0x1d, 0xd7, 0x40, 0xbc, 0xb2, 0x2f, 0x58, 0x28, 0xe6, 0xb1,
+ 0x10, 0x13, 0xa2, 0x2d, 0x18, 0x6c, 0xfc, 0xbf, 0xe1, 0xec, 0xb1, 0x7d,
+ 0xfd, 0x05, 0x02, 0x00,
};
#define BUF_SIZE 0x10000
/* Decompress and send to stdout a gzip-compressed buffer */
diff --git a/src/macos/MACINSTALL.TXT b/src/macos/MACINSTALL.TXT
new file mode 100644
index 0000000..17da133
--- /dev/null
+++ b/src/macos/MACINSTALL.TXT
@@ -0,0 +1 @@
+MACOS (not MACOS X) =================== This is the first attempt at porting cURL to MacOS. http, ftp, dict and telnet seems to work fine, other protocols and advanced features have not been all tested. This port is heavily based on the GUSI library from Matthias Neeracher. GUSI (Grand Unified Socket Interface) is a POSIX/Pthreads/Sockets library bringing some of the comforts of UNIX 98 to traditional MacOS. The latest GUSI release can be downloaded from sourceforge at <http://sourceforge.net/projects/gusi/> I have also write a few functions to help port UNIX applications to MacOS. These functions are part of the GUSI Extra library that can be downloaded at <http://perso.wanadoo.fr/ela/resources.html#gusiextra> OpenSSL support is still experimental but I hope to deliver a version including SSL soon. cURL for MacOS requires using the CodeWarrior compiler from Metrowerks. First download GUSI, GUSI Extra and cURL. Access paths have been setup so that GUSI, GUSI Extra and cURL directories should have the same parent directory. Follow the instructions in GUSI Extra "readme.txt" mainly the ones related to SIOUX and GUSI patches. If you do not apply these patches curl will not behave correctly. In the 'curl/src/macos' directory, decode "curl.mcp.xml.sit.hqx" (This is a stuffit binhexed file) From the CodeWarrior IDE, import 'curl/src/macos/curl.xml', adjust the access paths if required. Then you should be able to build: - the libcurl libraries for PPC and 68K. - the curl application (also available for PPC and 68K) which is the command line version of cURL. If the file "hugehelp.c" is missing rename "curl/src/hugehelp.c.cvs" to "hugehelp.c" and make sure its file type is 'TEXT' \ No newline at end of file
diff --git a/src/macos/curl.mcp.xml.sit.hqx b/src/macos/curl.mcp.xml.sit.hqx
new file mode 100644
index 0000000..01650b9
--- /dev/null
+++ b/src/macos/curl.mcp.xml.sit.hqx
@@ -0,0 +1 @@
+(This file must be converted with BinHex 4.0) :%'0eFQ`ZE@0`,RKYE#jcDA3!8dP8090*9#%!N!3F@`#3")EF8h4eCQC*G#!SBbN a16Nh,6)`-$%J3@aKC'4TEL"6HA0dC@ec,#"*EQ-Z,#"SG(4`1Lm[Gj!$,Q&XB@4 ND@jcHA-ZBfpY,e0dG@CQ5A3[$3SD!!83!!!F@`#3!h)!!3#3!h)0,`fPT9*PFf9 bGQ9NTD8!TC!%!3!!2!!3Z$+T+EJbU5N!N!d-['F!"*UP!!!E'J#3"!m!Bh9bE#j YBh!ZH'eX!!%`!P4&@&4$9dP&!3$rN!3!N!U!!*!*!CS!N!0K!*!%$`"#`G6)[bB "`A,RBHAV3f@ZJUhAq'5,9!EjE+@0l9R9ECKR4kTRRh2Tr@@VMJ"@0,FaU4R&FMa LBT)4LbVeb+BC%jqHQQI4[fPBGXP3'T4BeHdDm#H-`9$4'EUJEJ186cE)3X(8K-U 1KiJ4+5-HVi0DI[@5XBTQHb300K2--ZQmjPHEfdA)NhXMSJc'A+@kemq4P`'SeCB TD8QEYXMK8Kk4YZRkc1,G%m39"[dp8Zmc'[eKd,jpTVh555HQXd2`S9"KrGB`laE (r+!)8r8DP'9kbYVQeY-aSjVQRA2k-`'2pqTr9EP6Z&H-%4eK4@qp1Z(fDAd1&`A H1IYG&T86QUHmp*%cdr$@G4fJrQ[9'8p)f"FPKmMQH6!kGBGeTA5Im1Pp*(P69-* b8ld+I'KQIH`@CNfcIEGE&Zbb`3f,4IkZ#4Ve"2%R-a#MLYefeG"*FSMj,RD`aaE DHh6$h8hF"r`SK84RjI*$KFfI&J3ZTk"r!J2$Nr#%K(IA803e(bAG645j1231E'$ C5$(Nr9Z2LZbqJPSH&9[h1(,+e"8!I$4XKrIeH6Y"")PlSQG2V4#-hZAbb2jBT25 (IUG-bFQ+0[bbfAlrpIDlpCradaS5G(*4d%[i*ISQ&5*3e$NVT#A+!Y3P%V*@HX9 6AGI"h1N`D@lj56PX8fB95NekUL&lk'15a*Z(38rC`Ii%$Y$E-A"!QfHG(Ed)Uhd $e&Ckrm4jfVikK&j$D[%H)*lGX!FUK'&[Ck*%#lJUT9qiT13X#T4mK2)e"`%-JFe )*)Sa9b+92'@Gb8N6d9E+kJ#VEA(c6+d`%E82FXcNKJYM'a,FD@Jf-Bhe0i+B2b' 4,T!!lq1IYLpFITlMfGiYPc0f$6,+MDV5TI9#X-SpJhU%)Fb8cp2EjaJ6Y-)DC*f e'FGC5B'BdQV'H!@cS`XJID*-@m3!EFmNq*Ve20Pc0%pLrF4I`MH*iE!bAI`TJ6f fIkZ$4)P"bTla%@'ZL"8pmd(L(R3XEa8KPe@FkheL$l%E1UF89BS&afbE`RN#pXJ IUFD+"e#6RG6PSV[,G0B8l,Ipa2UU$4a@eA6jr+8Y,jkA1f9)d0!)UcD8pc1PCaS $4e#PcC8bCKD'Ar-2Yr"-%XLQh@AF!9p6rj`FhAk@,R*F(2h!LB#ca(F'im+pi,L Bf4LJV+icK26r2XR2)q9fr#K3PQ3PU)3V#9KqDVJL&pEb*`f)lAAq9FdpFU[$8N6 H43&)*h$BNrd0,c(!ICCA2Nh-i-b#,A9)Dq6b0QXcb4Cb)HG0c,H"E8"bQ0V82+K (6bpND%LUfp6S(mNAhkhHBJTdab-6GA&I%2cqe4`NjKlSpKDmI6m!h0,h!`LC-2j pCCGeT6#1Y62eS"hVZBAlj!YPi8DS1XV14b!3d)r5Z1C(*KTB'Df3!+cZN!#aJMU am2DQK54epTl55RJcT[d$'Q5Me1@)lDI#N6S,Rb-#2%BpdZePl2&DZb9GH)-0FR` 3N!!5&mlD,Sp)"5ZC2f@E-bpUflPTaUfFJ4mZUlcp#`iNNNl#eBaVI1&m0!dP'F[ lT`UUYVZpKX&HPmBMVf"+'fS0*6pRfA+HccXLd0PXk",eKDrh`@MYIGqm(MRcMcP UCb#C$m'[dhBrb438Hbh4+bDe&0"BSF1P+PPP4@i`%iP22P9ibJHTcBXRN5!leUL LkN%bVNT!r-qGI('DMAp8jc1e[eH9VBp1+DSk0V(-aMaJD(6FHQ+T'%'h8"e3LeY *2ldFPa@Tem)!l+PBLXN#idPfFC0i-V-9Ed2X@hEhCC!!e2J+JDccb1@@XE`Ch+V @!I1YF"Jf&8Kc*-A[5BT"cFJ3I8rP#Vb#NHYS+"%q25(pP2,aD$5KBV4"&PiN--c f!&h'b,[%ZDE0!j&ZY32dZD3h)p'VEr2p@kU8c8kU,K'lh$A8,)`efrhRPmImIpI YXG)SXje6-1Z$'lrlYNl#ECVlA2V[1h9Ej6X"Q-(LA%P65$-Ka92rah%dQmeF#KH (%CE56(aEpX$BKjEHj(6mN!"l3iEi(2#eJXU2$BHK`913!#8U6q3!&-VfilRY05# +CbP+)RJR0D'943,GI+$+0I0+'SNaNUMBZ[q4'kLpb*c)iGMP,'c'hFQc1B6@@J6 fXPPfGrc`"VaZDc5@lD1*@AIr'1UT5C'NI$HV@!e*U##m)62YSNd$`'p*J1[@ZVM 5D'GRTkrhF6"1D9-DV'2YVR*$RV,I`+QmTjICq92DT-f+SL1lD&kp)C8`64h*aY* AaJiFNQBGVU!$p6A1-m-e*1L9Iic!B!lQ,rZIkda"cB%TJ`U*0QP,'JVEhkFUFU& (X5K4`r3eG5!0T0`KfYQ6-I-E-mUbb&1TIGYrd"X"EXL$@U!J)EB+%q8mMd,dFeJ fLGJA5!N*4MXRSYfk8"8Vp9RY*4rXaR0dQ"3d!1R%CAQZRaPE1*MZ&DHdelBBaaA (CTA1k$H!##ZMT'i$kB0JJPc9Y"5Em&M)DRM*#SIahMpP`2T[3F,Sr2JX9E@,U5L 10Sdd1Y(qAG#,G'hX$PibcN@!,X`qX*,'eM#B)#S*k1PLLI*REMpB"UmhHT-j!0& TG)jc$@3BLI"em*jDf-B%qLmRR$,BQ1q)YN!*Q1ZNVH,YL#f$!C3-1#@Lch3a2+D 1S3dIq-1a[1C*E$*P+KPQG`THP&p'TQ$JJ-*$cK9F03c3F-aJGGic8i,3hd[fAQ( X2Zr!KU)Rlj!!cer8P'[-pmXiEG4ETUADfi2e!+XIM"@%f)[i)Ikd3c!4jR!-4ar q1T6*aH(Xp6eP)1"JRKV00!kq!BaZa-p*GA93QrN2e@l5U!bDcH)QqRTh9BT04b$ 5Yml1!p$+q9ILbSc)r+'IfN,jLH0'9S)Z+ji4P'1GBK9MHCmrhF8AVC(Xmm"IHl# QFBJ"3PC,19FjeHrVT3AV%qCIqAh1VJm(G,#b$Gh-aRS@jXNFTGXV8@2Eq&L#U%L bf**dKC),j0c9*P0&V!XPRpA0'`jEQG1PDJ+Zdb`[PpRLe34(EcHI-CPm54(VIbE 2J3S%q'`"i`+,HjI3D&@MmVRC5ffqFSVlc[1eQP`@)$eHGrSTSGA@,fc&Yd%c#-[ c`N5)bZ%5b!`+QA-C%YBp[NpG`fMrU'VklXR-he$9jRbE5pBEJR2GeER[mN'1,[` *5HDBYJFl#DN&kKi#mVHiL2@'H4Lb-%(#jb5!e"`RQeJJPfD*L#l$'($NZ1*53#4 P"Z19[8kVVN86PN0#LLPpq&`6QI1)ZR-h3b"[H'qCf&q%J1$CRiFD6AhC'iAdA!5 &9qaeYeVcr,1k'F2P%TlIY-mjXqRIMK+"1cJjQ1[ad0mTG53!aa[IQhlKS@)N-(a pUJ$DahNB2HZ[!!fJ,p(-ACep@IGH86&XYZf#UZd`6HTD`e66bA,VjkUkQpeq)%J hajLPmXp(SipKb*'k%k1f[e'0!D&Sh80Q"$BH&jiJb+SEbpTbQBkE2Qp,5[hLS@1 1pUZ(*&)`(+D+RH8$Z0,+br4iTZJ2rZVP,UC!FP8[XHa#3+"aHC!!DMcpKpFDeIe D%2`@$YX20DB&iIcJUS-R%eCPc4&MSE2f3qfA9IJK5I@,R4403FVlTR'JKYF'NBr eC`jcaFi8Bl$9bp,K,TCp"cJ33fq@Z6`!DldUA,C8J[(2MaI2,p!`$5YT12Mei`2 kEK")F$6(J8GAiLMFaTiMqpE8KiZGrrk"D3Fi#8(4*fVmGK4GIb9Pb9N,%Qh2V&b G`4BR#1B@ZrmSF@DdRU#!!i64LJXc9abPYpjfa+I*FSZ(&IkqF2,@5XqlSfe(pJ5 @FBNcIm6`B$SBQ19pA0k8'bmMac8kRP[Q#l4qV9P3ibU$dmlE'[@*Dj1JGRJe4[Z 5M#`*0UYGpeTAFQV4)hc"Frq0Qe88T#fG+YrEd%GD5VaN8ee69)@GJLMaCTYZJ$h Y`PmD[A8fB#4GP0TV(G5&@%i-DBILl&5HUC*fk#qhfiL-VdMPEK`@*G5aB'3@1DI `Gmq!%mJhD-m-E@ei1#pf)H!Y)#hdYf5,Kre61KKr6-k+iC&[6#!,*8aC4V,dBda *G-Ea,kcp`EQYmI)q(TSXdpT[&6NmmVela*&ZrNk#!a*Ek1U9e(A-C#MTiFrU*8# GRIPS(IG0NC0@D@C,ef!3$-V,f1MmeU$hMNGflfPjdA1l$m'dhT6mE$5k,&09Rk* 35$B&A8hc`Q,f[MCL'()&ZSp9"F43Y6Gp$d@GQ1*-IFE)fQ`!Gl+4bY!)4&ME!i1 S(e$jM(!B0$aPZUklAZC&R6Q$q(JE0b`QVJ8l2ELL'2i"i$m4hNQq3$S*@r,KlPV @0aB$#$cij*NFIiA[#P'Hmk'D%mJh*T,r&0T!Sj!!I%QRN!"4J!C25i'JdhRAG4# +iPZ,'C)pS[%JqMbf%5Z@HYTRpTjm`P9K-jj6!9j,5+E8[jbd,$Qb,rLerVlm'a" EJ,NAIG%b0S`!KTfSi1,Hlm6&Tl86i@XA-SjmDCVVm2JR[U[ZUaabTc`"ZLc''*T MA06`8"HaVhrb,12m0TYp8$49BH,J(bC-qMij8S3`iIJLm!&DUAX,NDT4j(cCZq` Sjr#YLPbe+8AqUc@cBNPJ0I"'D`jmfZPUpmQhXQ'2G"i,XrX6PZh5*UdATE`QBJT 2*-NNJ'H03hDLq3NLl8V#BcH(SN53!&)l)I#5DJXfUc)pbK*kKMMdhlkIbRYcdU* -kaTcDabVQGjqY*`D1++%&&hPjA0$mc46dA5Pa&+%QbaXIY(9*40iKhGhE(!d(Zj TU%6JfY"(KHR"&-pfT-D8AB"c'iDKcqH'9"0#TcflZJ5YE#(YDU4QTYFS*`lY2+' HUH+"N6hThTfY$V%@bmP3RrZVqj*lIM!qQ&'(*R8#YUX0ViVa-8c1cLi5mSh423Y c"ZTZ&UCCXZeRVUh#+(cU-p`4R%4,2aCl@ZeXXYH'f1j5r6'Fdp6k&d9CITqHK#@ jRIp9LG#d$jCXIJ9ZTRb1X1r#JCA&JjmSEMUfVbL!D[6I$5#JScE6Na9lmKfF0EH V"15k'@bDdk%miP"ThZ@A0I0@V`65l5S9deFHd#$hUXR5GDT"DMik$YJL+GmY#CB f%KC+a"&%)ihiBfR+0I#@&ENYGGfGh1ZaX"RlLlZ$l-9X9H*LaaQqEZ6LZ'rpIM* GCa`prJ+&V"j-rb!(B[h8XVQbRfQhYc,GJ(J65aIbPCVha(mX8UAS2e@%VYZYMF( $UMM#pf[eK66(Dj1)d*GNK+[I"ZK52ijfp01Pj098q,AA1GUbRR,5Z)jBdJMD1LZ Y8$2iKCVB!R2!PiF*N!$Ycb2#1Nh6&f-fSDEc2YH1jp9GM@!XI'*ilG-Qc4qT0fe dIZdlC9qP)X!!&@4T9A$EaNq-AZKQ6%R$$a54DScX[R*,M*!!k)K4LrB9Ma0[+II jcUfa44M*R18DLAMSp36ELf),#2#qPidNRI[QVFj%D95q)Xa`RS6EjCd+5BN6MeV %!,Q1a$r!B1`Bp3FM8IpLD)S+$G#+BR1)d#!hB9'5GRjMXFLAC-06*FkSLrBpG6X ,q$JVU-a-"TBp@F)+T`$8S[Dj!EIek6Ei!CIBUAGZpERj!eKb9(,X'RqjiBH5bbP -M*hrM9L`Xhl"GqM#U-f9*jXA"IQeZ[b#&`DqGehATT!!(S$6dqLGCl@A-NeefUB CPHNb!6cQp-!L[%Qal$RBVE9ZN!#qrF#!'d&V@ceTH8bbU3`DV0!06TamU$%('FZ l0N`a41a+-&6)Jcjl2XS1jHBp[HE"-PTaj6*#rZXdIX8%X8XRqJXc(FN5iG%bELS +b,60YmQf"J65!j!!D%+B#Ik0&-B3B@*GM[jJlJBU$RkG93B`&-#!h+HerJ8PT,@ b4!M[IeX(5fA%bFZLUp@K6(mkd@BTHhBcDkGaJh0`$CA2N!#3!%G1-Ne!SYh%drH F,BQM`')#DqM&#U(*Y-1lG45[6@GDN!#,bMKZRMG8"D$T2Kc192P!mSK@0AC8#3E D5,p-B+X2ZcmCQAIc,2AEdK5!+1N5*`cl9qJ@N!")h+G,fYaRJrRN`dd1NQ"E$VL ki6&AIilJU6[Z6pR5B*U9Rm1S[dr`a6mp3Fd`ArhVJQ!TR9T#ZhI+MpjYcFC*Tpf JP)[hkrKT5D`IVBCl"QA0TS2!TdYN8%E#epb&4PA9Q-hQ50A5SA@GjUa`kE-X-HM +d28*r*JYMjd!ICRc,(ZrmcU5e(4KNd[IAR$U[Tm*rdK"&(P&HE,U5c&(#0[`'-D 5f6@Qdr3dIB[VAlQbBHEiXrVYae)ZjkP@,'U[dE)NKfe95B9"Jk0'I$A8b$VC&CI hj0TB-$9m0"N8$CIaHe"M2@3-GQ$(12rHGfTrFM[EP9BMH3B`fcFE2PM'VNZ+fSm R[kIC&VabE@DX[9ZChF-R3*X*[Gmakl`@[!XBM"Iq3#d4e2`)6dE"fe2&5r'*3)D fB!kY""qf-#Xh!5DUNqDYG(&`URfpc*RAAS-#r+D@!A[j8r[eAi!S-rimJJ'!JGb %*BZ5$!f,GjJjLa5D")q,RL4XR[Ppi(r8RNiP$2e@ALL+bU&lUIljbU5MXf56RSK #8KbRX8C@f&kmYX-V,K+TmASNfml4&HPfSV$Y(&Y&J8ER)M[,N!"VmB&c'$a2h'h c`MAp!+rpRY(4Qe8@Z#el[0+YYH#ZYd3EMkbHRechUKDqX5k8m)cfAKj'mJ*[h6' 6)pLEDAqcBBi5[CE[rpIkcC%LIUe3f4@8TFUBfZ9B6FYY-F)N[fBV'h3@(m&iB,a )d1HkSQUS"C91!eHTUrHa9J[FLDk'K8-H9XmKc$L*'V5H'-5[*p)TC'El!$b2J"k T0Ul!A)(4ZlVY!Te#X5V)+@[J"r1e-BdkRFe`N!#r0DcM"VUBekGkJe,*5cpX0PS T(d3588LNcfA!1-TB8GQ`K0eIIl0N96)Nd!Rb%&4LIRETS'P3+jA+Bi9SY#qCmGI 5Ai,[V-NK#La5439PX&LDc8hTl$aLj359-bqmDJZ)GiaX1k1[k)bMZ2r(U*c[Gej %D)m*@@+eGqbF249V)fRpkp)6e0JrHiB*[K8*9fGR-AU+jTcpi#f0+U0+L@Yc'U2 dc04kb961J1JdC5PLEV30PJSYZXJ#jfdlb$,0UrY"jX[RkUY8JLY)-L`Gj6ieH'6 %C*LCT`)3ZS@[X2!%!-SJKp1jEL2Cml64,qZhPa)'AidDL1Ybp@6`iI80l+RfHpd Y1XF"[0[r!$B*PqDdHB95)l8[1I%*Nr,#e&Y3CCiNFC[8dj9TDKdh)Q6,,fCk(S# pQbBT0TY@PD(I@lDhBV%Pk9GrD%IY,YpIM-V9cE(UBbG2&Xck6c5I1BcMA-YcJFA 0,Q"*[F1C16*jHTMMPV0@6HYDU5V0`dPbD&X+MPSlR&+hbi36I8(5pBhrN!$Nj*a Z#!akZ&EGD+M,95XdGQGpfB`RY9BjCa9"Jp0EhH,EFY$Xp0#fq5DI#KVJBj,10hZ `Bq#LBCm2%H@E,+X9!b92Xb3iDFh4MVPIpfIVl"rkr%Eie%$X)MHS6PM!XTB'1$H kR%(U%"b&pq)aqe3a9TkCmFDMGk2qq%"HEh*XqVLk9-A,*pAd(dpZSG2Q#&qCJP2 X5cRMX'hX$'L5*+0!i`51"Yaj''JmqAJA#qUqe!P,MR-!NDje18N(qV3@5C1&B`D IqHRl9X2i2T6ZJH'e!jK,MY#3!+TSYiGI*AaPcjIbGE,pQ5[0Bk@%Ahrf#aQ$NkU d!GNU@XiVQ!T6'EHGZC4@(Qf-icF'*X1,1elXp1L)jmi`Y"F,'Fll%A@'$Mp1IT% 4pZjYGj%b,8rhMFlIh1-NN!#MD$'mrpeRD+18mX9YJ+9kiQE-B&U''*jE1*6raUl $40TV"8Aj2`cF3YHakZ6%05+TZ8&#e4HlCpJjL2$)l&2RNVNKBEAbL2UqijV4C,4 !9bq*`lQDp-&$iV8-!)S2)(el3Gp5lfekXY%TkcB%-PkqfD`DRD,R`APCTf%SkYi YkMk9pc01i''-FlHj6bF6QU%PJ+-@4DbAp91&Q,4`0mc1'1(,P6j)j1fMGbAf%BG ,M8&e!2R'Uk,%Rcm9JkL53'"eTe@IXaCCY!0!33RNL)DY5CYmjN%VhK,U8GXFG+[ 8jmX*Z2'(9BE)F'c"[r"4(UF4E*Qa[Nk-j&"MM!B6UZ*0YpL'!+9)G*&k,&2l@&& AbpQL&q)IrbB+ED(J8lRM"*Ii6%VUADiNE'dVU'q%[LHeia*6Y%89acHSZLZH(mq I[jRmr6$mVc-RTPb8+)ZMjI@hNG(F0VT&bU@(Hq1!F"2j881[Z$Nm5SC@1$41qHC Z*B%dX0kZFfcHDPjCH`GJrbU5DkEdIaTUI+NaK"PdSmI[LPTLJ9IJ8KA#kV"2Uia KdERdQFN93d"lqUqXj@Mr+*qi6&"UECZ-#,*iEC&C`bZqlMfYpM(epQ)*%&C![LJ hPR8L[G0#*-Pj,5P*C$cF+BTi2&i!bX+hlrFri`8+M'SNkXcMM(Q3!%%A2MlD*28 VCqT[JjMIq0PTUq0qPSAf4a0$XLC)-48j(c*)V1K5Pc(m%SGL+($j+p8S%dQ3!&Z lQ%+#S[eP8p$5$[$Vq)R)6HaCkZT5CT&*Rb,2I'PA"EVrJTPJKBE@Xi$J%rQAiUE $fqc2ald8l1R&r%FZ(Gq*VR(@l'M!MiUBId*-Kd&S!pP"YBNkYP[B[Z%YlT5SmY! 2rJF43CSX-e@Gp1FDa-d'!JQ@al9raL0r$[fkG0#D5VmHClHGEqhD`fmVA[jC+rM (&qL@f"N"(1DT-#2bD)j)N3!`Tr&$Rep"LN@aR!Rl(5lcE1UYTUmcVKrX(f1)40K Y4RQl"CKXF9C08YC(*$aR5a@QalMZGITR05QRZ"+h`52GmMN4pj6iXh*6MZFb8ke arcTIYkJ%@!F4TNFBfCKU#I3SZViZSKC0e*!!"cFIrhEC%XbSMX6jaS5&9#h@!`d [Y&`V)j*NiURXkhF0DP5e2dAG*Z,9N!$*D[l1$KF5SNi[b"J@Z2Di),1E93CDGmd Gb1)8,k@iE`R'kNHkLYb%dGd34Y,C013(''CiPAT2BRL[dYPHEY6ZE'`i0f-mp)a X&[HT"f3K+8rfE`T!,%MI)YZKJqZ#ZDTfGRYe'+5[Ke+2E%ecBS3pPC!!rU*,drD &884$ZmbC%Y-Iea(IUfjblN-*cX2hB`Mr+aG#AhMaaJfKPbd5P[+H$9A'(jGqcQ- 2pAc0'J[b`hF4+N1dYV[8#-aHm&FiqHbK`R8PpZ*be,`-[a"P"q1lcb$Z8I%0RA2 X8bcClk*cpGU1Q5c6VI%#`63X"PYE,*Hi3bF21r2JTij#%Q3J'cij@e+-99)rZqB $DdVZbrG[S8$eBj!!@$Z3!%C,DD1H[Dr+iFXKGGD&**8$2mqBZG+M+&`P%``#e8Y 13020cm&rj9ND(4q*S+D%eYGi'X(IT1lA+fV1,T!!6(fcKe2S6"!X-C-F-TqlSTB BJTb$,U'!bY8!!!: \ No newline at end of file
diff --git a/src/macos/src/curl_GUSIConfig.cpp b/src/macos/src/curl_GUSIConfig.cpp
new file mode 100644
index 0000000..fc9378a
--- /dev/null
+++ b/src/macos/src/curl_GUSIConfig.cpp
@@ -0,0 +1 @@
+/**************** BEGIN GUSI CONFIGURATION **************************** * * GUSI Configuration section generated by GUSI Configurator * last modified: Mon Oct 29 15:41:51 2001 * * This section will be overwritten by the next run of Configurator. */ #define GUSI_SOURCE #include <GUSIConfig.h> #include <sys/cdefs.h> /* Declarations of Socket Factories */ __BEGIN_DECLS void GUSIwithInetSockets(); void GUSIwithLocalSockets(); void GUSIwithMTInetSockets(); void GUSIwithMTTcpSockets(); void GUSIwithMTUdpSockets(); void GUSIwithOTInetSockets(); void GUSIwithOTTcpSockets(); void GUSIwithOTUdpSockets(); void GUSIwithPPCSockets(); void GUSISetupFactories(); __END_DECLS /* Configure Socket Factories */ void GUSISetupFactories() { #ifdef GUSISetupFactories_BeginHook GUSISetupFactories_BeginHook #endif GUSIwithInetSockets(); #ifdef GUSISetupFactories_EndHook GUSISetupFactories_EndHook #endif } /* Declarations of File Devices */ __BEGIN_DECLS void GUSIwithNullSockets(); void GUSISetupDevices(); __END_DECLS /* Configure File Devices */ void GUSISetupDevices() { #ifdef GUSISetupDevices_BeginHook GUSISetupDevices_BeginHook #endif GUSIwithNullSockets(); #ifdef GUSISetupDevices_EndHook GUSISetupDevices_EndHook #endif } #ifndef __cplusplus #error GUSISetupConfig() needs to be written in C++ #endif GUSIConfiguration::FileSuffix sSuffices[] = { "", '????', '????' }; extern "C" void GUSISetupConfig() { GUSIConfiguration * config = GUSIConfiguration::CreateInstance(GUSIConfiguration::kNoResource); config->ConfigureDefaultTypeCreator('TEXT', 'CWIE'); config->ConfigureSuffices( sizeof(sSuffices)/sizeof(GUSIConfiguration::FileSuffix)-1, sSuffices); } /**************** END GUSI CONFIGURATION *************************/ \ No newline at end of file
diff --git a/src/macos/src/macos_main.cpp b/src/macos/src/macos_main.cpp
new file mode 100644
index 0000000..cf3075f
--- /dev/null
+++ b/src/macos/src/macos_main.cpp
@@ -0,0 +1 @@
+/* ========================================================================= Copyright (C) 2001 Eric Lavigne Permission is granted to anyone to use this software for any purpose on any computer system, and to redistribute it freely, subject to the following restrictions: - The author is not responsible for the consequences of use of this software, no matter how awful, even if they arise from defects in it. - The origin of this software must not be misrepresented, either by explicit claim or by omission. - You are allowed to distributed modified copies of the software, in source and binary form, provided they are marked plainly as altered versions, and are not misrepresented as being the original software. ========================================================================= */ #include <stdlib.h> #include <string.h> #include <stdio.h> #include <Memory.h> #include <GUSICommandLine.h> #include <stdlib.h> /* ========================================================================= */ DECLARE_MAIN(curl) REGISTER_MAIN_START REGISTER_MAIN(curl) REGISTER_MAIN_END /* ========================================================================= */ int main() { ::MaxApplZone(); for (int i = 1; i <= 10; i++) ::MoreMasters(); (void) exec_commands(); return 0; } \ No newline at end of file
diff --git a/src/main.c b/src/main.c
index 6e3ef3d..95b47ea 100644
--- a/src/main.c
+++ b/src/main.c
@@ -148,13 +148,13 @@ static int vms_show = 0;
#define DEFAULT_MAXREDIRS 50L
#if defined(O_BINARY) && defined(HAVE_SETMODE)
- #ifdef __HIGHC__
- #define SET_BINMODE(file) _setmode(file,O_BINARY)
- #else
- #define SET_BINMODE(file) setmode(fileno(file),O_BINARY)
- #endif
+#ifdef __HIGHC__
+#define SET_BINMODE(file) _setmode(file,O_BINARY)
#else
- #define SET_BINMODE(file) ((void)0)
+#define SET_BINMODE(file) setmode(fileno(file),O_BINARY)
+#endif
+#else
+#define SET_BINMODE(file) ((void)0)
#endif
#ifndef O_BINARY
@@ -331,8 +331,8 @@ convert_to_network(char *buffer, size_t length)
input_ptr = output_ptr = buffer;
in_bytes = out_bytes = length;
rc = iconv(outbound_cd, &input_ptr, &in_bytes,
- &output_ptr, &out_bytes);
- if ((rc == -1) || (in_bytes != 0)) {
+ &output_ptr, &out_bytes);
+ if((rc == -1) || (in_bytes != 0)) {
return CURLE_CONV_FAILED;
}
@@ -364,8 +364,8 @@ convert_from_network(char *buffer, size_t length)
input_ptr = output_ptr = buffer;
in_bytes = out_bytes = length;
rc = iconv(inbound_cd, &input_ptr, &in_bytes,
- &output_ptr, &out_bytes);
- if ((rc == -1) || (in_bytes != 0)) {
+ &output_ptr, &out_bytes);
+ if((rc == -1) || (in_bytes != 0)) {
return CURLE_CONV_FAILED;
}
@@ -383,7 +383,7 @@ char convert_char(curl_infotype infotype, char this_char)
case CURLINFO_SSL_DATA_IN:
case CURLINFO_SSL_DATA_OUT:
/* data, treat as ASCII */
- if ((this_char >= 0x20) && (this_char < 0x7f)) {
+ if((this_char >= 0x20) && (this_char < 0x7f)) {
/* printable ASCII hex value: convert to host encoding */
convert_from_network(&this_char, 1);
}
@@ -394,10 +394,10 @@ char convert_char(curl_infotype infotype, char this_char)
/* fall through to default */
default:
/* treat as host encoding */
- if (ISPRINT(this_char)
- && (this_char != '\t')
- && (this_char != '\r')
- && (this_char != '\n')) {
+ if(ISPRINT(this_char)
+ && (this_char != '\t')
+ && (this_char != '\r')
+ && (this_char != '\n')) {
/* printable characters excluding tabs and line end characters */
return this_char;
}
@@ -411,13 +411,13 @@ char convert_char(curl_infotype infotype, char this_char)
#ifdef WIN32
#ifdef __BORLANDC__
- /* 64-bit lseek-like function unavailable */
+/* 64-bit lseek-like function unavailable */
# define _lseeki64(hnd,ofs,whence) lseek(hnd,ofs,whence)
#endif
#ifdef __POCC__
-# if (__POCC__ < 450)
- /* 64-bit lseek-like function unavailable */
+# if(__POCC__ < 450)
+/* 64-bit lseek-like function unavailable */
# define _lseeki64(hnd,ofs,whence) _lseek(hnd,ofs,whence)
# else
# define _lseeki64(hnd,ofs,whence) _lseek64(hnd,ofs,whence)
@@ -432,7 +432,7 @@ char convert_char(curl_infotype infotype, char this_char)
* Truncate a file handle at a 64-bit position 'where'.
*/
-static int ftruncate64 (int fd, curl_off_t where)
+static int ftruncate64(int fd, curl_off_t where)
{
if(_lseeki64(fd, where, SEEK_SET) < 0)
return -1;
@@ -478,6 +478,10 @@ struct Configurable {
bool disable_epsv;
bool disable_eprt;
bool ftp_pret;
+ long proto;
+ bool proto_present;
+ long proto_redir;
+ bool proto_redir_present;
curl_off_t resume_from;
char *postfields;
curl_off_t postfieldsize;
@@ -841,6 +845,8 @@ static void help(void)
" --post301 Do not switch to GET after following a 301 redirect (H)",
" --post302 Do not switch to GET after following a 302 redirect (H)",
" -#/--progress-bar Display transfer progress as a progress bar",
+ " --proto <protocols> Enable/disable specified protocols",
+ " --proto-redir <protocols> Enable/disable specified protocols on redirect",
" -x/--proxy <host[:port]> Use HTTP proxy on given port",
" --proxy-anyauth Pick \"any\" proxy authentication method (H)",
" --proxy-basic Use Basic authentication on the proxy (H)",
@@ -906,7 +912,7 @@ static void help(void)
for(i=0; helptext[i]; i++) {
puts(helptext[i]);
#ifdef PRINT_LINES_PAUSE
- if (i && ((i % PRINT_LINES_PAUSE) == 0))
+ if(i && ((i % PRINT_LINES_PAUSE) == 0))
pressanykey();
#endif
}
@@ -980,7 +986,7 @@ static struct getout *new_getout(struct Configurable *config)
/* Structure for storing the information needed to build a multiple files
* section
-*/
+ */
struct multi_files {
struct curl_forms form;
struct multi_files *next;
@@ -989,17 +995,17 @@ struct multi_files {
/* Add a new list entry possibly with a type_name
*/
static struct multi_files *
-AddMultiFiles (const char *file_name,
- const char *type_name,
- const char *show_filename,
- struct multi_files **multi_start,
- struct multi_files **multi_current)
+AddMultiFiles(const char *file_name,
+ const char *type_name,
+ const char *show_filename,
+ struct multi_files **multi_start,
+ struct multi_files **multi_current)
{
struct multi_files *multi;
struct multi_files *multi_type = NULL;
struct multi_files *multi_name = NULL;
multi = malloc(sizeof(struct multi_files));
- if (multi) {
+ if(multi) {
memset(multi, 0, sizeof(struct multi_files));
multi->form.option = CURLFORM_FILE;
multi->form.value = file_name;
@@ -1007,12 +1013,12 @@ AddMultiFiles (const char *file_name,
else
return NULL;
- if (!*multi_start)
+ if(!*multi_start)
*multi_start = multi;
- if (type_name) {
+ if(type_name) {
multi_type = malloc(sizeof(struct multi_files));
- if (multi_type) {
+ if(multi_type) {
memset(multi_type, 0, sizeof(struct multi_files));
multi_type->form.option = CURLFORM_CONTENTTYPE;
multi_type->form.value = type_name;
@@ -1021,13 +1027,13 @@ AddMultiFiles (const char *file_name,
multi = multi_type;
}
else {
- free (multi);
+ free(multi);
return NULL;
}
}
- if (show_filename) {
+ if(show_filename) {
multi_name = malloc(sizeof(struct multi_files));
- if (multi_name) {
+ if(multi_name) {
memset(multi_name, 0, sizeof(struct multi_files));
multi_name->form.option = CURLFORM_FILENAME;
multi_name->form.value = show_filename;
@@ -1036,12 +1042,12 @@ AddMultiFiles (const char *file_name,
multi = multi_name;
}
else {
- free (multi);
+ free(multi);
return NULL;
}
}
- if (*multi_current)
+ if(*multi_current)
(*multi_current)->next = multi;
*multi_current = multi;
@@ -1051,27 +1057,27 @@ AddMultiFiles (const char *file_name,
/* Free the items of the list.
*/
-static void FreeMultiInfo (struct multi_files *multi_start)
+static void FreeMultiInfo(struct multi_files *multi_start)
{
struct multi_files *multi;
- while (multi_start) {
+ while(multi_start) {
multi = multi_start;
multi_start = multi_start->next;
- free (multi);
+ free(multi);
}
}
/* Print list of OpenSSL engines supported.
*/
-static void list_engines (const struct curl_slist *engines)
+static void list_engines(const struct curl_slist *engines)
{
- puts ("Build-time engines:");
- if (!engines) {
- puts (" <none>");
+ puts("Build-time engines:");
+ if(!engines) {
+ puts(" <none>");
return;
}
- for ( ; engines; engines = engines->next)
- printf (" %s\n", engines->data);
+ for( ; engines; engines = engines->next)
+ printf(" %s\n", engines->data);
}
/***************************************************************************
@@ -1184,7 +1190,7 @@ static int formparse(struct Configurable *config,
while(ISSPACE(*ptr))
ptr++;
- if(curlx_strnequal("type=", ptr, 5)) {
+ if(checkprefix("type=", ptr)) {
/* set type pointer */
type = &ptr[5];
@@ -1193,12 +1199,25 @@ static int formparse(struct Configurable *config,
major, minor)) {
warnf(config, "Illegally formatted content-type field!\n");
free(contents);
- FreeMultiInfo (multi_start);
+ FreeMultiInfo(multi_start);
return 2; /* illegal content-type syntax! */
}
+
/* now point beyond the content-type specifier */
sep = (char *)type + strlen(major)+strlen(minor)+1;
+ /* there's a semicolon following - we check if it is a filename
+ specified and if not we simply assume that it is text that
+ the user wants included in the type and include that too up
+ to the next zero or semicolon. */
+ if((*sep==';') && !checkprefix(";filename=", sep)) {
+ sep2 = strchr(sep+1, ';');
+ if(sep2)
+ sep = sep2;
+ else
+ sep = sep+strlen(sep); /* point to end of string */
+ }
+
if(*sep) {
*sep=0; /* zero terminate type string */
@@ -1207,7 +1226,7 @@ static int formparse(struct Configurable *config,
else
ptr = NULL; /* end */
}
- else if(curlx_strnequal("filename=", ptr, 9)) {
+ else if(checkprefix("filename=", ptr)) {
filename = &ptr[9];
ptr=strchr(filename, FORM_TYPE_SEPARATOR);
if(!ptr) {
@@ -1238,11 +1257,11 @@ static int formparse(struct Configurable *config,
}
/* if type == NULL curl_formadd takes care of the problem */
- if (!AddMultiFiles (contp, type, filename, &multi_start,
- &multi_current)) {
+ if(!AddMultiFiles(contp, type, filename, &multi_start,
+ &multi_current)) {
warnf(config, "Error building form post!\n");
free(contents);
- FreeMultiInfo (multi_start);
+ FreeMultiInfo(multi_start);
return 3;
}
contp = sep; /* move the contents pointer to after the separator */
@@ -1250,32 +1269,32 @@ static int formparse(struct Configurable *config,
} while(sep && *sep); /* loop if there's another file name */
/* now we add the multiple files section */
- if (multi_start) {
+ if(multi_start) {
struct curl_forms *forms = NULL;
struct multi_files *ptr = multi_start;
unsigned int i, count = 0;
- while (ptr) {
+ while(ptr) {
ptr = ptr->next;
++count;
}
forms = malloc((count+1)*sizeof(struct curl_forms));
- if (!forms)
+ if(!forms)
{
fprintf(config->errors, "Error building form post!\n");
free(contents);
- FreeMultiInfo (multi_start);
+ FreeMultiInfo(multi_start);
return 4;
}
- for (i = 0, ptr = multi_start; i < count; ++i, ptr = ptr->next)
+ for(i = 0, ptr = multi_start; i < count; ++i, ptr = ptr->next)
{
forms[i].option = ptr->form.option;
forms[i].value = ptr->form.value;
}
forms[count].option = CURLFORM_END;
- FreeMultiInfo (multi_start);
- if (curl_formadd(httppost, last_post,
- CURLFORM_COPYNAME, name,
- CURLFORM_ARRAY, forms, CURLFORM_END) != 0) {
+ FreeMultiInfo(multi_start);
+ if(curl_formadd(httppost, last_post,
+ CURLFORM_COPYNAME, name,
+ CURLFORM_ARRAY, forms, CURLFORM_END) != 0) {
warnf(config, "curl_formadd failed!\n");
free(forms);
free(contents);
@@ -1306,8 +1325,8 @@ static int formparse(struct Configurable *config,
i++;
info[i].option = CURLFORM_END;
- if (curl_formadd(httppost, last_post,
- CURLFORM_ARRAY, info, CURLFORM_END ) != 0) {
+ if(curl_formadd(httppost, last_post,
+ CURLFORM_ARRAY, info, CURLFORM_END ) != 0) {
warnf(config, "curl_formadd failed, possibly the file %s is bad!\n",
contp+1);
free(contents);
@@ -1322,8 +1341,8 @@ static int formparse(struct Configurable *config,
info[i].value = contp;
i++;
info[i].option = CURLFORM_END;
- if (curl_formadd(httppost, last_post,
- CURLFORM_ARRAY, info, CURLFORM_END) != 0) {
+ if(curl_formadd(httppost, last_post,
+ CURLFORM_ARRAY, info, CURLFORM_END) != 0) {
warnf(config, "curl_formadd failed!\n");
free(contents);
return 7;
@@ -1462,7 +1481,7 @@ static void cleanarg(char *str)
/* now that GetStr has copied the contents of nextarg, wipe the next
* argument out so that the username:password isn't displayed in the
* system process list */
- if (str) {
+ if(str) {
size_t len = strlen(str);
memset(str, ' ', len);
}
@@ -1492,6 +1511,110 @@ static int str2num(long *val, const char *str)
return retcode;
}
+/*
+ * Parse the string and modify the long in the given address. Return
+ * non-zero on failure, zero on success.
+ *
+ * The string is a list of protocols
+ *
+ * Since this function gets called with the 'nextarg' pointer from within the
+ * getparameter a lot, we must check it for NULL before accessing the str
+ * data.
+ */
+
+static long proto2num(struct Configurable *config, long *val, const char *str)
+{
+ char *buffer;
+ const char *sep = ",";
+ char *token;
+
+ static struct sprotos {
+ const char *name;
+ long bit;
+ } const protos[] = {
+ { "all", CURLPROTO_ALL },
+ { "http", CURLPROTO_HTTP },
+ { "https", CURLPROTO_HTTPS },
+ { "ftp", CURLPROTO_FTP },
+ { "ftps", CURLPROTO_FTPS },
+ { "scp", CURLPROTO_SCP },
+ { "sftp", CURLPROTO_SFTP },
+ { "telnet", CURLPROTO_TELNET },
+ { "ldap", CURLPROTO_LDAP },
+ { "ldaps", CURLPROTO_LDAPS },
+ { "dict", CURLPROTO_DICT },
+ { "file", CURLPROTO_FILE },
+ { "tftp", CURLPROTO_TFTP },
+ { "imap", CURLPROTO_IMAP },
+ { "imaps", CURLPROTO_IMAPS },
+ { "pop3", CURLPROTO_POP3 },
+ { "pop3s", CURLPROTO_POP3S },
+ { "smtp", CURLPROTO_SMTP },
+ { "smtps", CURLPROTO_SMTPS },
+ { "rtsp", CURLPROTO_RTSP },
+ { "gopher", CURLPROTO_GOPHER },
+ { NULL, 0 }
+ };
+
+ if(!str)
+ return 1;
+
+ buffer = strdup(str); /* because strtok corrupts it */
+
+ for(token = strtok(buffer, sep);
+ token;
+ token = strtok(NULL, sep)) {
+ enum e_action { allow, deny, set } action = allow;
+
+ struct sprotos const *pp;
+
+ /* Process token modifiers */
+ while(!ISALNUM(*token)) { /* may be NULL if token is all modifiers */
+ switch (*token++) {
+ case '=':
+ action = set;
+ break;
+ case '-':
+ action = deny;
+ break;
+ case '+':
+ action = allow;
+ break;
+ default: /* Includes case of terminating NULL */
+ free(buffer);
+ return 1;
+ }
+ }
+
+ for(pp=protos; pp->name; pp++) {
+ if(curlx_raw_equal(token, pp->name)) {
+ switch (action) {
+ case deny:
+ *val &= ~(pp->bit);
+ break;
+ case allow:
+ *val |= pp->bit;
+ break;
+ case set:
+ *val = pp->bit;
+ break;
+ }
+ break;
+ }
+ }
+
+ if(!(pp->name)) { /* unknown protocol */
+ /* If they have specified only this protocol, we say treat it as
+ if no protocols are allowed */
+ if(action == set)
+ *val = 0;
+ warnf(config, "unrecognized protocol '%s'\n", token);
+ }
+ }
+ free(buffer);
+ return 0;
+}
+
/**
* Parses the given string looking for an offset (which may be
* a larger-than-integer value).
@@ -1502,13 +1625,13 @@ static int str2num(long *val, const char *str)
*/
static int str2offset(curl_off_t *val, const char *str)
{
-#if (CURL_SIZEOF_CURL_OFF_T > CURL_SIZEOF_LONG)
+#if(CURL_SIZEOF_CURL_OFF_T > CURL_SIZEOF_LONG)
*val = curlx_strtoofft(str, NULL, 0);
- if((*val == CURL_LLONG_MAX || *val == CURL_LLONG_MIN) && (ERRNO == ERANGE))
+ if((*val == CURL_OFF_T_MAX || *val == CURL_OFF_T_MIN) && (ERRNO == ERANGE))
return 1;
#else
*val = strtol(str, NULL, 0);
- if ((*val == LONG_MIN || *val == LONG_MAX) && ERRNO == ERANGE)
+ if((*val == LONG_MIN || *val == LONG_MAX) && ERRNO == ERANGE)
return 1;
#endif
return 0;
@@ -1532,8 +1655,8 @@ static void checkpasswd(const char *kind, /* for what purpose */
/* build a nice-looking prompt */
curlx_msnprintf(prompt, sizeof(prompt),
- "Enter %s password for user '%s':",
- kind, *userpwd);
+ "Enter %s password for user '%s':",
+ kind, *userpwd);
/* get password */
getpass_r(prompt, passwd, sizeof(passwd));
@@ -1598,7 +1721,7 @@ static int sockoptcallback(void *clientp, curl_socket_t curlfd,
int keepidle = (int)config->alivetime;
#endif
- switch (purpose) {
+ switch(purpose) {
case CURLSOCKTYPE_IPCXN:
if(setsockopt(curlfd, SOL_SOCKET, SO_KEEPALIVE, (void *)&onoff,
sizeof(onoff)) < 0) {
@@ -1608,7 +1731,7 @@ static int sockoptcallback(void *clientp, curl_socket_t curlfd,
return 0;
}
else {
- if (config->alivetime) {
+ if(config->alivetime) {
#ifdef TCP_KEEPIDLE
if(setsockopt(curlfd, IPPROTO_TCP, TCP_KEEPIDLE, (void *)&keepidle,
sizeof(keepidle)) < 0) {
@@ -1660,7 +1783,7 @@ static ParameterError getparameter(char *flag, /* f or -long-flag */
/* single-letter,
long-name,
boolean whether it takes an additional argument
- */
+ */
static const struct LongShort aliases[]= {
/* all these ones, starting with "*" or "$" as a short-option have *no*
short option to mention. */
@@ -1752,6 +1875,8 @@ static ParameterError getparameter(char *flag, /* f or -long-flag */
{"$A", "mail-from", TRUE},
{"$B", "mail-rcpt", TRUE},
{"$C", "ftp-pret", FALSE},
+ {"$D", "proto", TRUE},
+ {"$E", "proto-redir", TRUE},
{"0", "http1.0", FALSE},
{"1", "tlsv1", FALSE},
{"2", "sslv2", FALSE},
@@ -1954,41 +2079,41 @@ static ParameterError getparameter(char *flag, /* f or -long-flag */
config->tracetype = TRACE_ASCII;
break;
case 'i': /* --limit-rate */
- {
- /* We support G, M, K too */
- char *unit;
- curl_off_t value = curlx_strtoofft(nextarg, &unit, 0);
-
- if(!*unit)
- unit=(char *)"b";
- else if(strlen(unit) > 1)
- unit=(char *)"w"; /* unsupported */
-
- switch(*unit) {
- case 'G':
- case 'g':
- value *= 1024*1024*1024;
- break;
- case 'M':
- case 'm':
- value *= 1024*1024;
- break;
- case 'K':
- case 'k':
- value *= 1024;
- break;
- case 'b':
- case 'B':
- /* for plain bytes, leave as-is */
- break;
- default:
- warnf(config, "unsupported rate unit. Use G, M, K or B!\n");
- return PARAM_BAD_USE;
- }
- config->recvpersecond = value;
- config->sendpersecond = value;
+ {
+ /* We support G, M, K too */
+ char *unit;
+ curl_off_t value = curlx_strtoofft(nextarg, &unit, 0);
+
+ if(!*unit)
+ unit=(char *)"b";
+ else if(strlen(unit) > 1)
+ unit=(char *)"w"; /* unsupported */
+
+ switch(*unit) {
+ case 'G':
+ case 'g':
+ value *= 1024*1024*1024;
+ break;
+ case 'M':
+ case 'm':
+ value *= 1024*1024;
+ break;
+ case 'K':
+ case 'k':
+ value *= 1024;
+ break;
+ case 'b':
+ case 'B':
+ /* for plain bytes, leave as-is */
+ break;
+ default:
+ warnf(config, "unsupported rate unit. Use G, M, K or B!\n");
+ return PARAM_BAD_USE;
}
- break;
+ config->recvpersecond = value;
+ config->sendpersecond = value;
+ }
+ break;
case 'j': /* --compressed */
config->encoding = toggle;
@@ -2081,7 +2206,7 @@ static ParameterError getparameter(char *flag, /* f or -long-flag */
}
else
config->errors = stdout;
- break;
+ break;
case 'w': /* --interface */
/* interface */
GetStr(&config->iface, nextarg);
@@ -2106,31 +2231,31 @@ static ParameterError getparameter(char *flag, /* f or -long-flag */
break;
default: /* the URL! */
- {
- struct getout *url;
- if(config->url_get || (config->url_get=config->url_list)) {
- /* there's a node here, if it already is filled-in continue to find
- an "empty" node */
- while(config->url_get && (config->url_get->flags&GETOUT_URL))
- config->url_get = config->url_get->next;
- }
+ {
+ struct getout *url;
+ if(config->url_get || (config->url_get=config->url_list)) {
+ /* there's a node here, if it already is filled-in continue to find
+ an "empty" node */
+ while(config->url_get && (config->url_get->flags&GETOUT_URL))
+ config->url_get = config->url_get->next;
+ }
- /* now there might or might not be an available node to fill in! */
+ /* now there might or might not be an available node to fill in! */
- if(config->url_get)
- /* existing node */
- url = config->url_get;
- else
- /* there was no free node, create one! */
- url=new_getout(config);
+ if(config->url_get)
+ /* existing node */
+ url = config->url_get;
+ else
+ /* there was no free node, create one! */
+ url=new_getout(config);
- if(url) {
- /* fill in the URL */
- GetStr(&url->url, nextarg);
- url->flags |= GETOUT_URL;
- }
+ if(url) {
+ /* fill in the URL */
+ GetStr(&url->url, nextarg);
+ url->flags |= GETOUT_URL;
}
}
+ }
break;
case '$': /* more options without a short option */
switch(subletter) {
@@ -2237,7 +2362,7 @@ static ParameterError getparameter(char *flag, /* f or -long-flag */
case 'y': /* --ftp-ssl-ccc */
config->ftp_ssl_ccc = toggle;
if(!config->ftp_ssl_ccc_mode)
- config->ftp_ssl_ccc_mode = CURLFTPSSL_CCC_PASSIVE;
+ config->ftp_ssl_ccc_mode = CURLFTPSSL_CCC_PASSIVE;
break;
case 'j': /* --ftp-ssl-ccc-mode */
config->ftp_ssl_ccc = TRUE;
@@ -2294,6 +2419,16 @@ static ParameterError getparameter(char *flag, /* f or -long-flag */
case 'C': /* --ftp-pret */
config->ftp_pret = toggle;
break;
+ case 'D': /* --proto */
+ config->proto_present = TRUE;
+ if(proto2num(config, &config->proto, nextarg))
+ return PARAM_BAD_USE;
+ break;
+ case 'E': /* --proto-redir */
+ config->proto_redir_present = TRUE;
+ if(proto2num(config, &config->proto_redir, nextarg))
+ return PARAM_BAD_USE;
+ break;
}
break;
case '#': /* --progress-bar */
@@ -2369,179 +2504,179 @@ static ParameterError getparameter(char *flag, /* f or -long-flag */
break;
case 'd':
/* postfield data */
- {
- char *postdata=NULL;
- FILE *file;
-
- if(subletter == 'e') { /* --data-urlencode*/
- /* [name]=[content], we encode the content part only
- * [name]@[file name]
- *
- * Case 2: we first load the file using that name and then encode
- * the content.
- */
- const char *p = strchr(nextarg, '=');
- size_t size = 0;
- size_t nlen;
- char is_file;
- if(!p)
- /* there was no '=' letter, check for a '@' instead */
- p = strchr(nextarg, '@');
- if (p) {
- nlen = p - nextarg; /* length of the name part */
- is_file = *p++; /* pass the separator */
- }
- else {
- /* neither @ nor =, so no name and it isn't a file */
- nlen = is_file = 0;
- p = nextarg;
- }
- if('@' == is_file) {
- /* a '@' letter, it means that a file name or - (stdin) follows */
-
- if(curlx_strequal("-", p)) {
- file = stdin;
- SET_BINMODE(stdin);
- }
- else {
- file = fopen(p, "rb");
- if(!file)
- warnf(config,
- "Couldn't read data from file \"%s\", this makes "
- "an empty POST.\n", nextarg);
- }
-
- err = file2memory(&postdata, &size, file);
-
- if(file && (file != stdin))
- fclose(file);
- if(err)
- return err;
- }
- else {
- GetStr(&postdata, p);
- size = strlen(postdata);
- }
-
- if(!postdata) {
- /* no data from the file, point to a zero byte string to make this
- get sent as a POST anyway */
- postdata=strdup("");
- }
- else {
- char *enc = curl_easy_escape(config->easy, postdata, (int)size);
- free(postdata); /* no matter if it worked or not */
- if(enc) {
- /* now make a string with the name from above and append the
- encoded string */
- size_t outlen = nlen + strlen(enc) + 2;
- char *n = malloc(outlen);
- if(!n) {
- curl_free(enc);
- return PARAM_NO_MEM;
- }
- if (nlen > 0) /* only append '=' if we have a name */
- snprintf(n, outlen, "%.*s=%s", nlen, nextarg, enc);
- else
- strcpy(n, enc);
- curl_free(enc);
- postdata = n;
- }
- else
- return PARAM_NO_MEM;
- }
+ {
+ char *postdata=NULL;
+ FILE *file;
+
+ if(subletter == 'e') { /* --data-urlencode*/
+ /* [name]=[content], we encode the content part only
+ * [name]@[file name]
+ *
+ * Case 2: we first load the file using that name and then encode
+ * the content.
+ */
+ const char *p = strchr(nextarg, '=');
+ size_t size = 0;
+ size_t nlen;
+ char is_file;
+ if(!p)
+ /* there was no '=' letter, check for a '@' instead */
+ p = strchr(nextarg, '@');
+ if(p) {
+ nlen = p - nextarg; /* length of the name part */
+ is_file = *p++; /* pass the separator */
+ }
+ else {
+ /* neither @ nor =, so no name and it isn't a file */
+ nlen = is_file = 0;
+ p = nextarg;
}
- else if('@' == *nextarg) {
- size_t size = 0;
- /* the data begins with a '@' letter, it means that a file name
- or - (stdin) follows */
- nextarg++; /* pass the @ */
+ if('@' == is_file) {
+ /* a '@' letter, it means that a file name or - (stdin) follows */
- if(curlx_strequal("-", nextarg)) {
+ if(curlx_strequal("-", p)) {
file = stdin;
- if(subletter == 'b') /* forced data-binary */
- SET_BINMODE(stdin);
+ SET_BINMODE(stdin);
}
else {
- file = fopen(nextarg, "rb");
+ file = fopen(p, "rb");
if(!file)
- warnf(config, "Couldn't read data from file \"%s\", this makes "
+ warnf(config,
+ "Couldn't read data from file \"%s\", this makes "
"an empty POST.\n", nextarg);
}
- if(subletter == 'b') {
- /* forced binary */
- err = file2memory(&postdata, &size, file);
- config->postfieldsize = (curl_off_t)size;
- }
- else
- err = file2string(&postdata, file);
+ err = file2memory(&postdata, &size, file);
if(file && (file != stdin))
fclose(file);
if(err)
return err;
+ }
+ else {
+ GetStr(&postdata, p);
+ size = strlen(postdata);
+ }
- if(!postdata) {
- /* no data from the file, point to a zero byte string to make this
- get sent as a POST anyway */
- postdata=strdup("");
+ if(!postdata) {
+ /* no data from the file, point to a zero byte string to make this
+ get sent as a POST anyway */
+ postdata=strdup("");
+ }
+ else {
+ char *enc = curl_easy_escape(config->easy, postdata, (int)size);
+ free(postdata); /* no matter if it worked or not */
+ if(enc) {
+ /* now make a string with the name from above and append the
+ encoded string */
+ size_t outlen = nlen + strlen(enc) + 2;
+ char *n = malloc(outlen);
+ if(!n) {
+ curl_free(enc);
+ return PARAM_NO_MEM;
+ }
+ if(nlen > 0) /* only append '=' if we have a name */
+ snprintf(n, outlen, "%.*s=%s", nlen, nextarg, enc);
+ else
+ strcpy(n, enc);
+ curl_free(enc);
+ postdata = n;
}
+ else
+ return PARAM_NO_MEM;
+ }
+ }
+ else if('@' == *nextarg) {
+ size_t size = 0;
+ /* the data begins with a '@' letter, it means that a file name
+ or - (stdin) follows */
+ nextarg++; /* pass the @ */
+
+ if(curlx_strequal("-", nextarg)) {
+ file = stdin;
+ if(subletter == 'b') /* forced data-binary */
+ SET_BINMODE(stdin);
}
else {
- GetStr(&postdata, nextarg);
+ file = fopen(nextarg, "rb");
+ if(!file)
+ warnf(config, "Couldn't read data from file \"%s\", this makes "
+ "an empty POST.\n", nextarg);
}
-#ifdef CURL_DOES_CONVERSIONS
- if(subletter != 'b') { /* NOT forced binary, convert to ASCII */
- convert_to_network(postdata, strlen(postdata));
+ if(subletter == 'b') {
+ /* forced binary */
+ err = file2memory(&postdata, &size, file);
+ config->postfieldsize = (curl_off_t)size;
+ }
+ else
+ err = file2string(&postdata, file);
+
+ if(file && (file != stdin))
+ fclose(file);
+ if(err)
+ return err;
+
+ if(!postdata) {
+ /* no data from the file, point to a zero byte string to make this
+ get sent as a POST anyway */
+ postdata=strdup("");
}
+ }
+ else {
+ GetStr(&postdata, nextarg);
+ }
+
+#ifdef CURL_DOES_CONVERSIONS
+ if(subletter != 'b') { /* NOT forced binary, convert to ASCII */
+ convert_to_network(postdata, strlen(postdata));
+ }
#endif
- if(config->postfields) {
- /* we already have a string, we append this one
- with a separating &-letter */
- char *oldpost=config->postfields;
- size_t newlen = strlen(oldpost) + strlen(postdata) + 2;
- config->postfields=malloc(newlen);
- if(!config->postfields) {
- free(postdata);
- return PARAM_NO_MEM;
- }
- /* use ASCII value 0x26 for '&' to accommodate non-ASCII platforms */
- snprintf(config->postfields, newlen, "%s\x26%s", oldpost, postdata);
- free(oldpost);
+ if(config->postfields) {
+ /* we already have a string, we append this one
+ with a separating &-letter */
+ char *oldpost=config->postfields;
+ size_t newlen = strlen(oldpost) + strlen(postdata) + 2;
+ config->postfields=malloc(newlen);
+ if(!config->postfields) {
free(postdata);
+ return PARAM_NO_MEM;
}
- else
- config->postfields=postdata;
+ /* use ASCII value 0x26 for '&' to accommodate non-ASCII platforms */
+ snprintf(config->postfields, newlen, "%s\x26%s", oldpost, postdata);
+ free(oldpost);
+ free(postdata);
}
- /*
- We can't set the request type here, as this data might be used in
- a simple GET if -G is used. Already or soon.
+ else
+ config->postfields=postdata;
+ }
+ /*
+ We can't set the request type here, as this data might be used in
+ a simple GET if -G is used. Already or soon.
- if(SetHTTPrequest(HTTPREQ_SIMPLEPOST, &config->httpreq))
- return PARAM_BAD_USE;
- */
- break;
+ if(SetHTTPrequest(HTTPREQ_SIMPLEPOST, &config->httpreq))
+ return PARAM_BAD_USE;
+ */
+ break;
case 'D':
/* dump-header to given file name */
GetStr(&config->headerfile, nextarg);
break;
case 'e':
- {
- char *ptr = strstr(nextarg, ";auto");
- if(ptr) {
- /* Automatic referer requested, this may be combined with a
- set initial one */
- config->autoreferer = TRUE;
- *ptr = 0; /* zero terminate here */
- }
- else
- config->autoreferer = FALSE;
- GetStr(&config->referer, nextarg);
+ {
+ char *ptr = strstr(nextarg, ";auto");
+ if(ptr) {
+ /* Automatic referer requested, this may be combined with a
+ set initial one */
+ config->autoreferer = TRUE;
+ *ptr = 0; /* zero terminate here */
}
- break;
+ else
+ config->autoreferer = FALSE;
+ GetStr(&config->referer, nextarg);
+ }
+ break;
case 'E':
switch(subletter) {
case 'a': /* CA info PEM file */
@@ -2563,8 +2698,8 @@ static ParameterError getparameter(char *flag, /* f or -long-flag */
break;
case 'f': /* crypto engine */
GetStr(&config->engine, nextarg);
- if (config->engine && curlx_raw_equal(config->engine,"list"))
- config->list_engines = TRUE;
+ if(config->engine && curlx_raw_equal(config->engine,"list"))
+ config->list_engines = TRUE;
break;
case 'g': /* CA info PEM file */
/* CA cert directory */
@@ -2575,41 +2710,41 @@ static ParameterError getparameter(char *flag, /* f or -long-flag */
break;
case 'i': /* --hostpubmd5 md5 of the host public key */
GetStr(&config->hostpubmd5, nextarg);
- if (!config->hostpubmd5 || strlen(config->hostpubmd5) != 32)
- return PARAM_BAD_USE;
+ if(!config->hostpubmd5 || strlen(config->hostpubmd5) != 32)
+ return PARAM_BAD_USE;
break;
case 'j': /* CRL info PEM file */
/* CRL file */
GetStr(&config->crlfile, nextarg);
break;
default: /* certificate file */
- {
- char *ptr = strchr(nextarg, ':');
- /* Since we live in a world of weirdness and confusion, the win32
- dudes can use : when using drive letters and thus
- c:\file:password needs to work. In order not to break
- compatibility, we still use : as separator, but we try to detect
- when it is used for a file name! On windows. */
+ {
+ char *ptr = strchr(nextarg, ':');
+ /* Since we live in a world of weirdness and confusion, the win32
+ dudes can use : when using drive letters and thus
+ c:\file:password needs to work. In order not to break
+ compatibility, we still use : as separator, but we try to detect
+ when it is used for a file name! On windows. */
#ifdef WIN32
- if(ptr &&
- (ptr == &nextarg[1]) &&
- (nextarg[2] == '\\' || nextarg[2] == '/') &&
- (ISALPHA(nextarg[0])) )
- /* colon in the second column, followed by a backslash, and the
- first character is an alphabetic letter:
-
- this is a drive letter colon */
- ptr = strchr(&nextarg[3], ':'); /* find the next one instead */
+ if(ptr &&
+ (ptr == &nextarg[1]) &&
+ (nextarg[2] == '\\' || nextarg[2] == '/') &&
+ (ISALPHA(nextarg[0])) )
+ /* colon in the second column, followed by a backslash, and the
+ first character is an alphabetic letter:
+
+ this is a drive letter colon */
+ ptr = strchr(&nextarg[3], ':'); /* find the next one instead */
#endif
- if(ptr) {
- /* we have a password too */
- *ptr=0;
- ptr++;
- GetStr(&config->key_passwd, ptr);
- }
- GetStr(&config->cert, nextarg);
- cleanarg(nextarg);
+ if(ptr) {
+ /* we have a password too */
+ *ptr=0;
+ ptr++;
+ GetStr(&config->key_passwd, ptr);
}
+ GetStr(&config->cert, nextarg);
+ cleanarg(nextarg);
+ }
}
break;
case 'f':
@@ -2668,7 +2803,7 @@ static ParameterError getparameter(char *flag, /* f or -long-flag */
return PARAM_BAD_USE;
break;
case 'J': /* --remote-header-name */
- if (config->include_headers) {
+ if(config->include_headers) {
warnf(config,
"--include and --remote-header-name cannot be combined.\n");
return PARAM_BAD_USE;
@@ -2739,50 +2874,50 @@ static ParameterError getparameter(char *flag, /* f or -long-flag */
config->default_node_flags = toggle?GETOUT_USEREMOTE:0;
break;
}
- /* fall-through! */
+ /* fall-through! */
case 'o': /* --output */
/* output file */
- {
- struct getout *url;
- if(config->url_out || (config->url_out=config->url_list)) {
- /* there's a node here, if it already is filled-in continue to find
- an "empty" node */
- while(config->url_out && (config->url_out->flags&GETOUT_OUTFILE))
- config->url_out = config->url_out->next;
- }
-
- /* now there might or might not be an available node to fill in! */
+ {
+ struct getout *url;
+ if(config->url_out || (config->url_out=config->url_list)) {
+ /* there's a node here, if it already is filled-in continue to find
+ an "empty" node */
+ while(config->url_out && (config->url_out->flags&GETOUT_OUTFILE))
+ config->url_out = config->url_out->next;
+ }
- if(config->url_out)
- /* existing node */
- url = config->url_out;
- else
- /* there was no free node, create one! */
- url=new_getout(config);
+ /* now there might or might not be an available node to fill in! */
- if(url) {
- /* fill in the outfile */
- if('o' == letter) {
- GetStr(&url->outfile, nextarg);
+ if(config->url_out)
+ /* existing node */
+ url = config->url_out;
+ else
+ /* there was no free node, create one! */
+ url=new_getout(config);
+
+ if(url) {
+ /* fill in the outfile */
+ if('o' == letter) {
+ GetStr(&url->outfile, nextarg);
+ url->flags &= ~GETOUT_USEREMOTE; /* switch off */
+ }
+ else {
+ url->outfile=NULL; /* leave it */
+ if(toggle)
+ url->flags |= GETOUT_USEREMOTE; /* switch on */
+ else
url->flags &= ~GETOUT_USEREMOTE; /* switch off */
- }
- else {
- url->outfile=NULL; /* leave it */
- if(toggle)
- url->flags |= GETOUT_USEREMOTE; /* switch on */
- else
- url->flags &= ~GETOUT_USEREMOTE; /* switch off */
- }
- url->flags |= GETOUT_OUTFILE;
}
+ url->flags |= GETOUT_OUTFILE;
}
- break;
+ }
+ break;
case 'P':
/* This makes the FTP sessions use PORT instead of PASV */
/* use <eth0> or <192.168.10.10> style addresses. Anything except
this will make us try to get the "default" address.
NOTE: this is a changed behaviour since the released 4.1!
- */
+ */
GetStr(&config->ftpport, nextarg);
break;
case 'p':
@@ -2870,35 +3005,35 @@ static ParameterError getparameter(char *flag, /* f or -long-flag */
break;
case 'T':
/* we are uploading */
- {
- struct getout *url;
- if(config->url_out || (config->url_out=config->url_list)) {
- /* there's a node here, if it already is filled-in continue to find
- an "empty" node */
- while(config->url_out && (config->url_out->flags&GETOUT_UPLOAD))
- config->url_out = config->url_out->next;
- }
+ {
+ struct getout *url;
+ if(config->url_out || (config->url_out=config->url_list)) {
+ /* there's a node here, if it already is filled-in continue to find
+ an "empty" node */
+ while(config->url_out && (config->url_out->flags&GETOUT_UPLOAD))
+ config->url_out = config->url_out->next;
+ }
- /* now there might or might not be an available node to fill in! */
+ /* now there might or might not be an available node to fill in! */
- if(config->url_out)
- /* existing node */
- url = config->url_out;
- else
- /* there was no free node, create one! */
- url=new_getout(config);
+ if(config->url_out)
+ /* existing node */
+ url = config->url_out;
+ else
+ /* there was no free node, create one! */
+ url=new_getout(config);
- if(url) {
- url->flags |= GETOUT_UPLOAD; /* mark -T used */
- if(!*nextarg)
- url->flags |= GETOUT_NOUPLOAD;
- else {
- /* "-" equals stdin, but keep the string around for now */
- GetStr(&url->infile, nextarg);
- }
+ if(url) {
+ url->flags |= GETOUT_UPLOAD; /* mark -T used */
+ if(!*nextarg)
+ url->flags |= GETOUT_NOUPLOAD;
+ else {
+ /* "-" equals stdin, but keep the string around for now */
+ GetStr(&url->infile, nextarg);
}
}
- break;
+ }
+ break;
case 'u':
/* user:password */
GetStr(&config->userpwd, nextarg);
@@ -2933,9 +3068,9 @@ static ParameterError getparameter(char *flag, /* f or -long-flag */
break;
printf(CURL_ID "%s\n", curl_version());
- if (curlinfo->protocols) {
+ if(curlinfo->protocols) {
printf("Protocols: ");
- for (proto=curlinfo->protocols; *proto; ++proto) {
+ for(proto=curlinfo->protocols; *proto; ++proto) {
printf("%s ", *proto);
}
puts(""); /* newline */
@@ -3139,7 +3274,7 @@ static int parseconfig(const char *filename,
* directory as our executable
*/
file = fopen(filebuffer, "r");
- if (file != NULL) {
+ if(file != NULL) {
fclose(file);
filename = filebuffer;
}
@@ -3149,15 +3284,15 @@ static int parseconfig(const char *filename,
* We assume that we are using the ASCII version here.
*/
int n = GetModuleFileName(0, filebuffer, sizeof(filebuffer));
- if (n > 0 && n < (int)sizeof(filebuffer)) {
+ if(n > 0 && n < (int)sizeof(filebuffer)) {
/* We got a valid filename - get the directory part */
char *lastdirchar = strrchr(filebuffer, '\\');
- if (lastdirchar) {
+ if(lastdirchar) {
size_t remaining;
*lastdirchar = 0;
/* If we have enough space, build the RC filename */
remaining = sizeof(filebuffer) - strlen(filebuffer);
- if (strlen(CURLRC) < remaining - 1) {
+ if(strlen(CURLRC) < remaining - 1) {
snprintf(lastdirchar, remaining,
"%s%s", DIR_CHAR, CURLRC);
/* Don't bother checking if it exists - we do
@@ -3176,9 +3311,9 @@ static int parseconfig(const char *filename,
}
# else /* __AMIGA__ */
- /* On AmigaOS all the config files are into env:
- */
- filename = "ENV:" CURLRC;
+ /* On AmigaOS all the config files are into env:
+ */
+ filename = "ENV:" CURLRC;
#endif
}
@@ -3198,7 +3333,7 @@ static int parseconfig(const char *filename,
#define ISSEP(x) (((x)=='=') || ((x) == ':'))
- while (NULL != (aline = my_get_line(file))) {
+ while(NULL != (aline = my_get_line(file))) {
lineno++;
line = aline;
alloced_param=FALSE;
@@ -3240,14 +3375,14 @@ static int parseconfig(const char *filename,
/* quoted parameter, do the quote dance */
line++;
param=malloc(strlen(line)+1); /* parameter */
- if (!param) {
+ if(!param) {
/* out of memory */
free(aline);
rc = 1;
break;
}
alloced_param=TRUE;
- line = (char*) unslashquote(line, param);
+ (void)unslashquote(line, param);
}
else {
param=line; /* parameter starts here */
@@ -3256,10 +3391,10 @@ static int parseconfig(const char *filename,
*line=0; /* zero terminate */
}
- if (param && !*param) {
+ if(param && !*param) {
/* do this so getparameter can check for required parameters.
Otherwise it always thinks there's a parameter. */
- if (alloced_param)
+ if(alloced_param)
free(param);
param = NULL;
}
@@ -3269,7 +3404,7 @@ static int parseconfig(const char *filename,
#endif
res = getparameter(option, param, &usedarg, config);
- if (param && *param && !usedarg)
+ if(param && *param && !usedarg)
/* we passed in a parameter that wasn't used! */
res = PARAM_GOT_EXTRA_PARAMETER;
@@ -3343,15 +3478,16 @@ static size_t my_fwrite(void *buffer, size_t sz, size_t nmemb, void *stream)
const size_t err_rc = (sz * nmemb) ? 0 : 1;
if(!out->stream) {
- if (!out->filename) {
+ out->bytes = 0; /* nothing written yet */
+ if(!out->filename) {
warnf(config, "Remote filename has no length!\n");
return err_rc; /* Failure */
}
- if (config->content_disposition) {
+ if(config->content_disposition) {
/* don't overwrite existing files */
FILE* f = fopen(out->filename, "r");
- if (f) {
+ if(f) {
fclose(f);
warnf(config, "Refusing to overwrite %s: %s\n", out->filename,
strerror(EEXIST));
@@ -3370,10 +3506,9 @@ static size_t my_fwrite(void *buffer, size_t sz, size_t nmemb, void *stream)
rc = fwrite(buffer, sz, nmemb, out->stream);
- if((sz * nmemb) == rc) {
+ if((sz * nmemb) == rc)
/* we added this amount of data to the output */
out->bytes += (sz * nmemb);
- }
if(config->readbusy) {
config->readbusy = FALSE;
@@ -3406,7 +3541,7 @@ static int my_seek(void *stream, curl_off_t offset, int whence)
{
struct InStruct *in=(struct InStruct *)stream;
-#if (CURL_SIZEOF_CURL_OFF_T > SIZEOF_OFF_T) && !defined(USE_WIN32_LARGE_FILES)
+#if(CURL_SIZEOF_CURL_OFF_T > SIZEOF_OFF_T) && !defined(USE_WIN32_LARGE_FILES)
/* The offset check following here is only interesting if curl_off_t is
larger than off_t and we are not using the WIN32 large file support
macros that provide the support to do 64bit seeks correctly */
@@ -3504,7 +3639,7 @@ static int myprogress (void *clientp,
if(total < 1) {
curl_off_t prevblock = bar->prev / 1024;
curl_off_t thisblock = point / 1024;
- while ( thisblock > prevblock ) {
+ while( thisblock > prevblock ) {
fprintf( bar->out, "#" );
prevblock++;
}
@@ -3514,7 +3649,7 @@ static int myprogress (void *clientp,
percent = frac * 100.0f;
barwidth = bar->width - 7;
num = (int) (((double)barwidth) * frac);
- for ( i = 0; i < num; i++ ) {
+ for( i = 0; i < num; i++ ) {
line[i] = '#';
}
line[i] = '\0';
@@ -3543,17 +3678,17 @@ void progressbarinit(struct ProgressData *bar,
/* pass this through to progress function so
* it can display progress towards total file
* not just the part that's left. (21-may-03, dbyron) */
- if (config->use_resume)
+ if(config->use_resume)
bar->initial_size = config->resume_from;
/* TODO: get terminal width through ansi escapes or something similar.
- try to update width when xterm is resized... - 19990617 larsa */
+ try to update width when xterm is resized... - 19990617 larsa */
#ifndef __EMX__
/* 20000318 mgs
* OS/2 users most likely won't have this env var set, and besides that
* we're using our own way to determine screen width */
colp = curlx_getenv("COLUMNS");
- if (colp != NULL) {
+ if(colp != NULL) {
bar->width = atoi(colp);
curl_free(colp);
}
@@ -3605,15 +3740,15 @@ void dump(const char *timebuf, const char *text,
for(c = 0; (c < width) && (i+c < size); c++) {
/* check for 0D0A; if found, skip past and start a new line of output */
- if ((tracetype == TRACE_ASCII) &&
- (i+c+1 < size) && ptr[i+c]==0x0D && ptr[i+c+1]==0x0A) {
+ if((tracetype == TRACE_ASCII) &&
+ (i+c+1 < size) && ptr[i+c]==0x0D && ptr[i+c+1]==0x0A) {
i+=(c+2-width);
break;
}
#ifdef CURL_DOES_CONVERSIONS
/* repeat the 0D0A check above but use the host encoding for CRLF */
- if ((tracetype == TRACE_ASCII) &&
- (i+c+1 < size) && ptr[i+c]=='\r' && ptr[i+c+1]=='\n') {
+ if((tracetype == TRACE_ASCII) &&
+ (i+c+1 < size) && ptr[i+c]=='\r' && ptr[i+c+1]=='\n') {
i+=(c+2-width);
break;
}
@@ -3625,8 +3760,8 @@ void dump(const char *timebuf, const char *text,
(ptr[i+c]>=0x20) && (ptr[i+c]<0x80)?ptr[i+c]:UNPRINTABLE_CHAR);
#endif /* CURL_DOES_CONVERSIONS */
/* check again for 0D0A, to avoid an extra \n if it's at width */
- if ((tracetype == TRACE_ASCII) &&
- (i+c+2 < size) && ptr[i+c+1]==0x0D && ptr[i+c+2]==0x0A) {
+ if((tracetype == TRACE_ASCII) &&
+ (i+c+2 < size) && ptr[i+c+1]==0x0D && ptr[i+c+2]==0x0A) {
i+=(c+3-width);
break;
}
@@ -3845,11 +3980,11 @@ static void free_config_fields(struct Configurable *config)
free(config->writeout);
if(config->httppost)
curl_formfree(config->httppost);
- if (config->cert)
+ if(config->cert)
free(config->cert);
if(config->cacert)
free(config->cacert);
- if (config->cert_type)
+ if(config->cert_type)
free(config->cert_type);
if(config->capath)
free(config->capath);
@@ -3867,17 +4002,17 @@ static void free_config_fields(struct Configurable *config)
free(config->socksproxy);
if(config->libcurl)
free(config->libcurl);
- if (config->key_passwd)
+ if(config->key_passwd)
free(config->key_passwd);
- if (config->key)
+ if(config->key)
free(config->key);
- if (config->key_type)
+ if(config->key_type)
free(config->key_type);
- if (config->pubkey)
+ if(config->pubkey)
free(config->pubkey);
- if (config->referer)
+ if(config->referer)
free(config->referer);
- if (config->hostpubmd5)
+ if(config->hostpubmd5)
free(config->hostpubmd5);
if(config->mail_from)
free(config->mail_from);
@@ -3917,11 +4052,11 @@ static void FindWin32CACert(struct Configurable *config,
DWORD buflen;
char *ptr = NULL;
char *retval = malloc(sizeof (TCHAR) * (MAX_PATH + 1));
- if (!retval)
+ if(!retval)
return;
retval[0] = '\0';
buflen = SearchPathA(NULL, bundle_file, NULL, MAX_PATH+2, retval, &ptr);
- if (buflen > 0) {
+ if(buflen > 0) {
GetStr(&config->cacert, retval);
}
free(retval);
@@ -3944,10 +4079,11 @@ output_expected(const char* url, const char* uploadfile)
return FALSE; /* non-HTTP upload, probably no output should be expected */
}
-#define my_setopt(x,y,z) _my_setopt(x, 0, config, #y, y, z)
-#define my_setopt_str(x,y,z) _my_setopt(x, 1, config, #y, y, z)
+#define my_setopt(x,y,z) _my_setopt(x, FALSE, config, #y, y, z)
+#define my_setopt_str(x,y,z) _my_setopt(x, TRUE, config, #y, y, z)
static struct curl_slist *easycode;
+static struct curl_slist *easycode_remarks;
static CURLcode _my_setopt(CURL *curl, bool str, struct Configurable *config,
const char *name, CURLoption tag, ...);
@@ -3960,6 +4096,7 @@ static CURLcode _my_setopt(CURL *curl, bool str, struct Configurable *config,
char *bufp;
char value[256];
bool remark=FALSE;
+ bool skip=FALSE;
va_start(arg, tag);
@@ -3967,50 +4104,65 @@ static CURLcode _my_setopt(CURL *curl, bool str, struct Configurable *config,
long lval = va_arg(arg, long);
snprintf(value, sizeof(value), "%ld", lval);
ret = curl_easy_setopt(curl, tag, lval);
-
+ if(!lval)
+ skip = TRUE;
}
else if(tag < CURLOPTTYPE_OFF_T) {
void *pval = va_arg(arg, void *);
unsigned char *ptr = (unsigned char *)pval;
/* function pointers are never printable */
- if (tag >= CURLOPTTYPE_FUNCTIONPOINT) {
- if (pval) {
- snprintf(value, sizeof(value), "%p", pval);
+ if(tag >= CURLOPTTYPE_FUNCTIONPOINT) {
+ if(pval) {
+ strcpy(value, "functionpointer"); /* 'value' fits 256 bytes */
remark = TRUE;
}
else
- strcpy(value, "NULL");
+ skip = TRUE;
}
else if(pval && str)
snprintf(value, sizeof(value), "\"%s\"", (char *)ptr);
else if(pval) {
- snprintf(value, sizeof(value), "%p", pval);
+ strcpy(value, "objectpointer"); /* 'value' fits 256 bytes */
remark = TRUE;
}
- else {
- strcpy(value, "NULL"); /* value fits more than 5 bytes */
- }
+ else
+ skip = TRUE;
+
ret = curl_easy_setopt(curl, tag, pval);
}
else {
curl_off_t oval = va_arg(arg, curl_off_t);
- snprintf(value, sizeof(value), "%" CURL_FORMAT_CURL_OFF_T, oval);
+ snprintf(value, sizeof(value),
+ "(curl_off_t)%" CURL_FORMAT_CURL_OFF_T, oval);
ret = curl_easy_setopt(curl, tag, oval);
+
+ if(!oval)
+ skip = TRUE;
}
- if(config->libcurl) {
+ if(config->libcurl && !skip) {
/* we only use this for real if --libcurl was used */
- bufp = curlx_maprintf("%scurl_easy_setopt(hnd, %s, %s);%s",
- remark?"/* ":"", name, value,
- remark?" [REMARK] */":"");
+ if(remark)
+ bufp = curlx_maprintf("%s set to a %s", name, value);
+ else
+ bufp = curlx_maprintf("curl_easy_setopt(hnd, %s, %s);", name, value);
- if (!bufp || !curl_slist_append(easycode, bufp))
+ if(!bufp)
ret = CURLE_OUT_OF_MEMORY;
- if (bufp)
+ else {
+ struct curl_slist *list =
+ curl_slist_append(remark?easycode_remarks:easycode, bufp);
+
+ if(remark)
+ easycode_remarks = list;
+ else
+ easycode = list;
+ }
+ if(bufp)
curl_free(bufp);
}
va_end(arg);
@@ -4020,8 +4172,7 @@ static CURLcode _my_setopt(CURL *curl, bool str, struct Configurable *config,
static const char * const srchead[]={
"/********* Sample code generated by the curl command line tool **********",
- " * Lines with [REMARK] below might need to be modified to make this code ",
- " * usable. Add error code checking where appropriate.",
+ " * Add error code checking where appropriate!",
" * Compile this with a suitable header include path. Then link with ",
" * libcurl.",
" * If you use any *_LARGE options, make sure your compiler figure",
@@ -4040,7 +4191,7 @@ static const char * const srchead[]={
static void dumpeasycode(struct Configurable *config)
{
- struct curl_slist *ptr = easycode;
+ struct curl_slist *ptr;
char *o = config->libcurl;
if(o) {
@@ -4070,10 +4221,27 @@ static void dumpeasycode(struct Configurable *config)
fprintf(out, "%s\n", c);
}
+ ptr = easycode;
while(ptr) {
fprintf(out, " %s\n", ptr->data);
ptr = ptr->next;
}
+
+ ptr = easycode_remarks;
+ if(ptr) {
+ fprintf(out,
+ "\n /* Here is a list of options the curl code"
+ " used that cannot get generated\n"
+ " as source easily. You may select to either"
+ " not use them or implement\n them yourself.\n"
+ "\n");
+ while(ptr) {
+ fprintf(out, " %s\n", ptr->data);
+ ptr = ptr->next;
+ }
+ fprintf(out, "\n */\n");
+ }
+
fprintf(out,
" return (int)ret;\n"
"}\n"
@@ -4178,13 +4346,13 @@ parse_filename(char *ptr, size_t len)
/* simple implementation of strndup() */
copy = malloc(len+1);
- if (!copy)
+ if(!copy)
return NULL;
strncpy(copy, ptr, len);
copy[len] = 0;
p = copy;
- if (*p == '\'' || *p == '"') {
+ if(*p == '\'' || *p == '"') {
/* store the starting quote */
quote = *p;
p++;
@@ -4192,19 +4360,48 @@ parse_filename(char *ptr, size_t len)
/* if the filename contains a path, only use filename portion */
q = strrchr(copy, '/');
- if (q) {
+ if(q) {
p=q+1;
+ if(!*p) {
+ free(copy);
+ return NULL;
+ }
+ }
+
+ /* If the filename contains a backslash, only use filename portion. The idea
+ is that even systems that don't handle backslashes as path separators
+ probably want the path removed for convenience. */
+ q = strrchr(p, '\\');
+ if (q) {
+ p = q+1;
if (!*p) {
free(copy);
return NULL;
}
}
- q = strrchr(p, quote);
- if (q)
- *q = 0;
+ if(quote) {
+ /* if the file name started with a quote, then scan for the end quote and
+ stop there */
+ q = strrchr(p, quote);
+ if(q)
+ *q = 0;
+ }
+ else
+ q = NULL; /* no start quote, so no end has been found */
+
+ if(!q) {
+ /* make sure the file name doesn't end in \r or \n */
+ q = strchr(p, '\r');
+ if(q)
+ *q = 0;
+
+ q = strchr(p, '\n');
+ if(q)
+ *q = 0;
+ }
- if (copy!=p)
+ if(copy!=p)
memmove(copy, p, strlen(p)+1);
return copy;
@@ -4217,29 +4414,37 @@ header_callback(void *ptr, size_t size, size_t nmemb, void *stream)
const char* str = (char*)ptr;
const size_t cb = size*nmemb;
const char* end = (char*)ptr + cb;
+ size_t len;
- if (cb > 20 && curlx_strnequal(str, "Content-disposition:", 20)) {
+ if(cb > 20 && checkprefix("Content-disposition:", str)) {
char *p = (char*)str + 20;
/* look for the 'filename=' parameter
(encoded filenames (*=) are not supported) */
for(;;) {
char *filename;
+ char *semi;
- while (*p && (p < end) && !ISALPHA(*p))
+ while(*p && (p < end) && !ISALPHA(*p))
p++;
- if (p > end-9)
+ if(p > end-9)
break;
- if (memcmp(p, "filename=", 9)) {
+ if(memcmp(p, "filename=", 9)) {
/* no match, find next parameter */
- while ((p < end) && (*p != ';'))
+ while((p < end) && (*p != ';'))
p++;
continue;
}
p+=9;
- filename = parse_filename(p, cb - (p - str));
- if (filename) {
+ semi = strchr(p, ';');
+
+ /* this expression below typecasts 'cb' only to avoid
+ warning: signed and unsigned type in conditional expression
+ */
+ len = semi ? (semi - p) : (ssize_t)cb - (p - str);
+ filename = parse_filename(p, len);
+ if(filename) {
outs->filename = filename;
break;
}
@@ -4308,8 +4513,8 @@ operate(struct Configurable *config, int argc, argv_item_t argv[])
/* Initialize curl library - do not call any libcurl functions before.
Note that the CURLDEBUG magic above is an exception, but then that's not
part of the official public API.
- */
- if (main_init() != CURLE_OK) {
+ */
+ if(main_init() != CURLE_OK) {
helpf(config->errors, "error initializing curl library\n");
return CURLE_FAILED_INIT;
}
@@ -4345,6 +4550,11 @@ operate(struct Configurable *config, int argc, argv_item_t argv[])
config->use_httpget=FALSE;
config->create_dirs=FALSE;
config->maxredirs = DEFAULT_MAXREDIRS;
+ config->proto = CURLPROTO_ALL; /* FIXME: better to read from library */
+ config->proto_present = FALSE;
+ config->proto_redir =
+ CURLPROTO_ALL & ~(CURLPROTO_FILE|CURLPROTO_SCP); /* not FILE or SCP */
+ config->proto_redir_present = FALSE;
if(argc>1 &&
(!curlx_strnequal("--", argv[1], 2) && (argv[1][0] == '-')) &&
@@ -4359,13 +4569,13 @@ operate(struct Configurable *config, int argc, argv_item_t argv[])
parseconfig(NULL, config); /* ignore possible failure */
}
- if ((argc < 2) && !config->url_list) {
+ if((argc < 2) && !config->url_list) {
helpf(config->errors, NULL);
return CURLE_FAILED_INIT;
}
/* Parse options */
- for (i = 1; i < argc; i++) {
+ for(i = 1; i < argc; i++) {
if(stillflags &&
('-' == argv[i][0])) {
char *nextarg;
@@ -4433,9 +4643,9 @@ operate(struct Configurable *config, int argc, argv_item_t argv[])
* We support the environment variable thing for non-Windows platforms
* too. Just for the sake of it.
*/
- if (!config->cacert &&
- !config->capath &&
- !config->insecure_ok) {
+ if(!config->cacert &&
+ !config->capath &&
+ !config->insecure_ok) {
env = curlx_getenv("CURL_CA_BUNDLE");
if(env)
GetStr(&config->cacert, env);
@@ -4458,8 +4668,8 @@ operate(struct Configurable *config, int argc, argv_item_t argv[])
#endif
}
- if (config->postfields) {
- if (config->use_httpget) {
+ if(config->postfields) {
+ if(config->use_httpget) {
/* Use the postfields data for a http get */
httpgetfields = strdup(config->postfields);
free(config->postfields);
@@ -4485,7 +4695,7 @@ operate(struct Configurable *config, int argc, argv_item_t argv[])
goto quit_curl;
}
- if (config->list_engines) {
+ if(config->list_engines) {
struct curl_slist *engines = NULL;
curl_easy_getinfo(curl, CURLINFO_SSL_ENGINES, &engines);
@@ -4541,9 +4751,9 @@ operate(struct Configurable *config, int argc, argv_item_t argv[])
outs.bytes = 0; /* nothing written yet */
/* save outfile pattern before expansion */
- if (urlnode->outfile) {
+ if(urlnode->outfile) {
outfiles = strdup(urlnode->outfile);
- if (!outfiles) {
+ if(!outfiles) {
clean_getout(config);
break;
}
@@ -4595,7 +4805,7 @@ operate(struct Configurable *config, int argc, argv_item_t argv[])
(url = urls?glob_next_url(urls):(i?NULL:strdup(url)));
i++) {
/* NOTE: In the condition expression in the for() statement above, the
- 'url' variable is only ever strdup()ed if (i == 0) and thus never
+ 'url' variable is only ever strdup()ed if(i == 0) and thus never
when this loops later on. Further down in this function we call
free(url) and then the code loops. Static code parsers may thus get
tricked into believing that we have a potential access-after-free
@@ -4626,7 +4836,7 @@ operate(struct Configurable *config, int argc, argv_item_t argv[])
}
#if defined(MSDOS) || defined(WIN32)
/* For DOS and WIN32, we do some major replacing of
- bad characters in the file name before using it */
+ bad characters in the file name before using it */
outfile = sanitize_dos_name(outfile);
if(!outfile) {
res = CURLE_OUT_OF_MEMORY;
@@ -4679,7 +4889,7 @@ operate(struct Configurable *config, int argc, argv_item_t argv[])
outs.init = config->resume_from;
/* open file for output: */
outs.stream=(FILE *) fopen(outfile, config->resume_from?"ab":"wb");
- if (!outs.stream) {
+ if(!outs.stream) {
helpf(config->errors, "Can't open '%s'!\n", outfile);
free(url);
res = CURLE_WRITE_ERROR;
@@ -4688,6 +4898,7 @@ operate(struct Configurable *config, int argc, argv_item_t argv[])
}
else {
outs.stream = NULL; /* open when needed */
+ outs.bytes = 0; /* reset byte counter */
}
}
infdopen=FALSE;
@@ -4719,7 +4930,7 @@ operate(struct Configurable *config, int argc, argv_item_t argv[])
*/
infd= open(uploadfile, O_RDONLY | O_BINARY);
- if ((infd == -1) || fstat(infd, &fileinfo)) {
+ if((infd == -1) || fstat(infd, &fileinfo)) {
helpf(config->errors, "Can't open '%s'!\n", uploadfile);
if(infd != -1)
close(infd);
@@ -4740,14 +4951,42 @@ operate(struct Configurable *config, int argc, argv_item_t argv[])
goto quit_urls;
}
infdopen=TRUE;
- uploadfilesize=fileinfo.st_size;
+
+ /* we ignore file size for char/block devices, sockets, etc. */
+ if(S_ISREG(fileinfo.st_mode))
+ uploadfilesize=fileinfo.st_size;
}
else if(uploadfile && stdin_upload(uploadfile)) {
+ /* count to see if there are more than one auth bit set
+ in the authtype field */
+ int authbits = 0;
+ int bitcheck = 0;
+ while(bitcheck < 32) {
+ if(config->authtype & (1 << bitcheck++)) {
+ authbits++;
+ if(authbits > 1) {
+ /* more than one, we're done! */
+ break;
+ }
+ }
+ }
+
+ /*
+ * If the user has also selected --anyauth or --proxy-anyauth
+ * we should warn him/her.
+ */
+ if(config->proxyanyauth || (authbits>1)) {
+ warnf(config,
+ "Using --anyauth or --proxy-anyauth with upload from stdin"
+ " involves a big risk of it not working. Use a temporary"
+ " file or a fixed auth type instead!\n");
+ }
+
SET_BINMODE(stdin);
infd = STDIN_FILENO;
- if (curlx_strequal(uploadfile, ".")) {
- if (curlx_nonblock((curl_socket_t)infd, TRUE) < 0)
+ if(curlx_strequal(uploadfile, ".")) {
+ if(curlx_nonblock((curl_socket_t)infd, TRUE) < 0)
warnf(config,
"fcntl failed on fd=%d: %s\n", infd, strerror(errno));
}
@@ -4762,13 +5001,13 @@ operate(struct Configurable *config, int argc, argv_item_t argv[])
meter */
config->noprogress = config->isatty = TRUE;
- if (urlnum > 1 && !(config->mute)) {
+ if(urlnum > 1 && !(config->mute)) {
fprintf(config->errors, "\n[%d/%d]: %s --> %s\n",
i+1, urlnum, url, outfile ? outfile : "<stdout>");
- if (separator)
+ if(separator)
printf("%s%s\n", CURLseparator, url);
}
- if (httpgetfields) {
+ if(httpgetfields) {
char *urlbuffer;
/* Find out whether the url contains a file name */
const char *pc =strstr(url, "://");
@@ -4810,7 +5049,7 @@ operate(struct Configurable *config, int argc, argv_item_t argv[])
res = CURLE_OUT_OF_MEMORY;
goto quit_urls;
}
- if (pc)
+ if(pc)
sprintf(urlbuffer, "%s%c%s", url, sep, httpgetfields);
else
/* Append / before the ? to create a well-formed url
@@ -4844,7 +5083,9 @@ operate(struct Configurable *config, int argc, argv_item_t argv[])
input.config = config;
my_setopt(curl, CURLOPT_READDATA, &input);
/* what call to read */
- my_setopt(curl, CURLOPT_READFUNCTION, my_fread);
+ if((outfile && !curlx_strequal("-", outfile)) ||
+ !checkprefix("telnet:", url))
+ my_setopt(curl, CURLOPT_READFUNCTION, my_fread);
/* in 7.18.0, the CURLOPT_SEEKFUNCTION/DATA pair is taking over what
CURLOPT_IOCTLFUNCTION/DATA pair previously provided for seeking */
@@ -4857,7 +5098,8 @@ operate(struct Configurable *config, int argc, argv_item_t argv[])
my_setopt(curl, CURLOPT_BUFFERSIZE, config->recvpersecond);
/* size of uploaded file: */
- my_setopt(curl, CURLOPT_INFILESIZE_LARGE, uploadfilesize);
+ if(uploadfilesize != -1)
+ my_setopt(curl, CURLOPT_INFILESIZE_LARGE, uploadfilesize);
my_setopt_str(curl, CURLOPT_URL, url); /* what to fetch */
my_setopt_str(curl, CURLOPT_PROXY, config->proxy); /* proxy to use */
if(config->proxy)
@@ -4875,9 +5117,9 @@ operate(struct Configurable *config, int argc, argv_item_t argv[])
my_setopt(curl, CURLOPT_DIRLISTONLY, config->dirlistonly);
my_setopt(curl, CURLOPT_APPEND, config->ftp_append);
- if (config->netrc_opt)
+ if(config->netrc_opt)
my_setopt(curl, CURLOPT_NETRC, CURL_NETRC_OPTIONAL);
- else if (config->netrc)
+ else if(config->netrc)
my_setopt(curl, CURLOPT_NETRC, CURL_NETRC_REQUIRED);
else
my_setopt(curl, CURLOPT_NETRC, CURL_NETRC_IGNORED);
@@ -4936,16 +5178,16 @@ operate(struct Configurable *config, int argc, argv_item_t argv[])
config->hostpubmd5);
/* default to strict verifyhost */
- my_setopt(curl, CURLOPT_SSL_VERIFYHOST, 2);
+ /* my_setopt(curl, CURLOPT_SSL_VERIFYHOST, 2); */
if(config->cacert || config->capath) {
- if (config->cacert)
+ if(config->cacert)
my_setopt_str(curl, CURLOPT_CAINFO, config->cacert);
- if (config->capath)
+ if(config->capath)
my_setopt_str(curl, CURLOPT_CAPATH, config->capath);
my_setopt(curl, CURLOPT_SSL_VERIFYPEER, TRUE);
}
- if (config->crlfile)
+ if(config->crlfile)
my_setopt_str(curl, CURLOPT_CRLFILE, config->crlfile);
if(config->insecure_ok) {
/* new stuff needed for libcurl 7.10 */
@@ -5056,17 +5298,17 @@ operate(struct Configurable *config, int argc, argv_item_t argv[])
res = CURLE_OK;
/* new in curl ?? */
- if (config->engine) {
+ if(config->engine) {
res = my_setopt_str(curl, CURLOPT_SSLENGINE, config->engine);
my_setopt(curl, CURLOPT_SSLENGINE_DEFAULT, 1);
}
- if (res != CURLE_OK)
- goto show_error;
+ if(res != CURLE_OK)
+ goto show_error;
/* new in curl 7.10 */
my_setopt_str(curl, CURLOPT_ENCODING,
- (config->encoding) ? "" : NULL);
+ (config->encoding) ? "" : NULL);
/* new in curl 7.10.7, extended in 7.19.4 but this only sets 0 or 1 */
my_setopt(curl, CURLOPT_FTP_CREATE_MISSING_DIRS,
@@ -5085,7 +5327,7 @@ operate(struct Configurable *config, int argc, argv_item_t argv[])
/* new in curl 7.10.8 */
if(config->max_filesize)
my_setopt(curl, CURLOPT_MAXFILESIZE_LARGE,
- config->max_filesize);
+ config->max_filesize);
if(4 == config->ip_version)
my_setopt(curl, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
@@ -5108,7 +5350,7 @@ operate(struct Configurable *config, int argc, argv_item_t argv[])
/* new in curl 7.16.1 */
if(config->ftp_ssl_ccc)
- my_setopt(curl, CURLOPT_FTP_SSL_CCC, config->ftp_ssl_ccc_mode);
+ my_setopt(curl, CURLOPT_FTP_SSL_CCC, config->ftp_ssl_ccc_mode);
/* new in curl 7.11.1, modified in 7.15.2 */
if(config->socksproxy) {
@@ -5120,7 +5362,7 @@ operate(struct Configurable *config, int argc, argv_item_t argv[])
/* new in curl 7.19.4 */
if(config->socks5_gssapi_service)
my_setopt_str(curl, CURLOPT_SOCKS5_GSSAPI_SERVICE,
- config->socks5_gssapi_service);
+ config->socks5_gssapi_service);
/* new in curl 7.19.4 */
if(config->socks5_gssapi_nec)
@@ -5142,16 +5384,17 @@ operate(struct Configurable *config, int argc, argv_item_t argv[])
if(config->localport) {
my_setopt(curl, CURLOPT_LOCALPORT, config->localport);
my_setopt_str(curl, CURLOPT_LOCALPORTRANGE,
- config->localportrange);
+ config->localportrange);
}
/* curl 7.15.5 */
my_setopt_str(curl, CURLOPT_FTP_ALTERNATIVE_TO_USER,
- config->ftp_alternative_to_user);
+ config->ftp_alternative_to_user);
/* curl 7.16.0 */
- my_setopt(curl, CURLOPT_SSL_SESSIONID_CACHE,
- !config->disable_sessionid);
+ if(config->disable_sessionid)
+ my_setopt(curl, CURLOPT_SSL_SESSIONID_CACHE,
+ !config->disable_sessionid);
/* curl 7.16.2 */
if(config->raw) {
@@ -5160,7 +5403,7 @@ operate(struct Configurable *config, int argc, argv_item_t argv[])
}
/* curl 7.17.1 */
- if (!config->nokeepalive) {
+ if(!config->nokeepalive) {
my_setopt(curl, CURLOPT_SOCKOPTFUNCTION, sockoptcallback);
my_setopt(curl, CURLOPT_SOCKOPTDATA, config);
}
@@ -5183,8 +5426,13 @@ operate(struct Configurable *config, int argc, argv_item_t argv[])
if(config->ftp_pret)
my_setopt(curl, CURLOPT_FTP_USE_PRET, TRUE);
- if ((urlnode->flags & GETOUT_USEREMOTE)
- && config->content_disposition) {
+ if(config->proto_present)
+ my_setopt(curl, CURLOPT_PROTOCOLS, config->proto);
+ if(config->proto_redir_present)
+ my_setopt(curl, CURLOPT_REDIR_PROTOCOLS, config->proto_redir);
+
+ if((urlnode->flags & GETOUT_USEREMOTE)
+ && config->content_disposition) {
my_setopt(curl, CURLOPT_HEADERFUNCTION, header_callback);
my_setopt(curl, CURLOPT_HEADERDATA, &outs);
}
@@ -5195,12 +5443,13 @@ operate(struct Configurable *config, int argc, argv_item_t argv[])
for(;;) {
res = curl_easy_perform(curl);
- if (!curl_slist_append(easycode, "ret = curl_easy_perform(hnd);")) {
+ if(!curl_slist_append(easycode, "ret = curl_easy_perform(hnd);")) {
res = CURLE_OUT_OF_MEMORY;
break;
}
- if (config->content_disposition && outs.stream && !config->mute)
+ if(config->content_disposition && outs.stream && !config->mute &&
+ outs.filename)
printf("curl: Saved to filename '%s'\n", outs.filename);
/* if retry-max-time is non-zero, make sure we haven't exceeded the
@@ -5220,12 +5469,16 @@ operate(struct Configurable *config, int argc, argv_item_t argv[])
if(CURLE_OPERATION_TIMEDOUT == res)
/* retry timeout always */
retry = RETRY_TIMEOUT;
- else if(CURLE_OK == res) {
- /* Check for HTTP transient errors */
+ else if((CURLE_OK == res) ||
+ (config->failonerror &&
+ (CURLE_HTTP_RETURNED_ERROR == res))) {
+ /* If it returned OK. _or_ failonerror was enabled and it
+ returned due to such an error, check for HTTP transient
+ errors to retry on. */
char *this_url=NULL;
curl_easy_getinfo(curl, CURLINFO_EFFECTIVE_URL, &this_url);
if(this_url &&
- curlx_strnequal(this_url, "http", 4)) {
+ checkprefix("http", this_url)) {
/* This was HTTP(S) */
curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response);
@@ -5326,11 +5579,11 @@ operate(struct Configurable *config, int argc, argv_item_t argv[])
if(config->writeout)
ourWriteOut(curl, config->writeout);
#ifdef USE_ENVIRONMENT
- if (config->writeenv)
+ if(config->writeenv)
ourWriteEnv(curl);
#endif
-show_error:
+ show_error:
#ifdef __VMS
if(is_vms_shell()) {
@@ -5347,20 +5600,20 @@ show_error:
errorbuffer[0]? errorbuffer:
curl_easy_strerror((CURLcode)res));
if(CURLE_SSL_CACERT == res) {
-#define CURL_CA_CERT_ERRORMSG1 \
-"More details here: http://curl.haxx.se/docs/sslcerts.html\n\n" \
-"curl performs SSL certificate verification by default, using a \"bundle\"\n" \
-" of Certificate Authority (CA) public keys (CA certs). If the default\n" \
-" bundle file isn't adequate, you can specify an alternate file\n" \
-" using the --cacert option.\n"
-
-#define CURL_CA_CERT_ERRORMSG2 \
-"If this HTTPS server uses a certificate signed by a CA represented in\n" \
-" the bundle, the certificate verification probably failed due to a\n" \
-" problem with the certificate (it might be expired, or the name might\n" \
-" not match the domain name in the URL).\n" \
-"If you'd like to turn off curl's verification of the certificate, use\n" \
-" the -k (or --insecure) option.\n"
+#define CURL_CA_CERT_ERRORMSG1 \
+ "More details here: http://curl.haxx.se/docs/sslcerts.html\n\n" \
+ "curl performs SSL certificate verification by default, using a \"bundle\"\n" \
+ " of Certificate Authority (CA) public keys (CA certs). If the default\n" \
+ " bundle file isn't adequate, you can specify an alternate file\n" \
+ " using the --cacert option.\n"
+
+#define CURL_CA_CERT_ERRORMSG2 \
+ "If this HTTPS server uses a certificate signed by a CA represented in\n" \
+ " the bundle, the certificate verification probably failed due to a\n" \
+ " problem with the certificate (it might be expired, or the name might\n" \
+ " not match the domain name in the URL).\n" \
+ "If you'd like to turn off curl's verification of the certificate, use\n" \
+ " the -k (or --insecure) option.\n"
fprintf(config->errors, "%s%s",
CURL_CA_CERT_ERRORMSG1,
@@ -5369,7 +5622,7 @@ show_error:
}
}
- if (outfile && !curlx_strequal(outfile, "-") && outs.stream) {
+ if(outfile && !curlx_strequal(outfile, "-") && outs.stream) {
int rc = fclose(outs.stream);
if(!res && rc) {
/* something went wrong in the writing process */
@@ -5402,7 +5655,7 @@ show_error:
SetComment( outs.filename, url);
#endif
-quit_urls:
+ quit_urls:
if(url)
free(url);
@@ -5448,17 +5701,17 @@ quit_urls:
} /* while-loop through all URLs */
-quit_curl:
- if (httpgetfields)
+ quit_curl:
+ if(httpgetfields)
free(httpgetfields);
- if (config->engine)
+ if(config->engine)
free(config->engine);
/* cleanup the curl handle! */
curl_easy_cleanup(curl);
config->easy = NULL; /* cleanup now */
- if (easycode)
+ if(easycode)
curl_slist_append(easycode, "curl_easy_cleanup(hnd);");
if(heads.stream && (heads.stream != stdout))
@@ -5498,7 +5751,7 @@ static void checkfds(void)
fd[1] == STDIN_FILENO ||
fd[1] == STDOUT_FILENO ||
fd[1] == STDERR_FILENO )
- if (pipe(fd) < 0)
+ if(pipe(fd) < 0)
return; /* Out of handles. This isn't really a big problem now, but
will be when we try to create a socket later. */
close(fd[0]);
@@ -5521,13 +5774,13 @@ int main(int argc, char *argv[])
res = operate(&config, argc, argv);
#ifdef __SYMBIAN32__
- if (config.showerror)
+ if(config.showerror)
pressanykey();
#endif
free_config_fields(&config);
#ifdef __NOVELL_LIBC__
- if (getenv("_IN_NETWARE_BASH_") == NULL)
+ if(getenv("_IN_NETWARE_BASH_") == NULL)
pressanykey();
#endif
#ifdef __VMS
@@ -5544,35 +5797,35 @@ int main(int argc, char *argv[])
*/
static char *my_get_line(FILE *fp)
{
- char buf[4096];
- char *nl = NULL;
- char *retval = NULL;
-
- do {
- if (NULL == fgets(buf, sizeof(buf), fp))
- break;
- if (NULL == retval) {
- retval = strdup(buf);
- if(!retval)
- return NULL;
- }
- else {
- char *ptr;
- ptr = realloc(retval, strlen(retval) + strlen(buf) + 1);
- if (NULL == ptr) {
- free(retval);
- return NULL;
- }
- retval = ptr;
- strcat(retval, buf);
- }
- }
- while (NULL == (nl = strchr(retval, '\n')));
-
- if (NULL != nl)
- *nl = '\0';
-
- return retval;
+ char buf[4096];
+ char *nl = NULL;
+ char *retval = NULL;
+
+ do {
+ if(NULL == fgets(buf, sizeof(buf), fp))
+ break;
+ if(NULL == retval) {
+ retval = strdup(buf);
+ if(!retval)
+ return NULL;
+ }
+ else {
+ char *ptr;
+ ptr = realloc(retval, strlen(retval) + strlen(buf) + 1);
+ if(NULL == ptr) {
+ free(retval);
+ return NULL;
+ }
+ retval = ptr;
+ strcat(retval, buf);
+ }
+ }
+ while(NULL == (nl = strchr(retval, '\n')));
+
+ if(NULL != nl)
+ *nl = '\0';
+
+ return retval;
}
static void show_dir_errno(FILE *errors, const char *name)
@@ -5637,23 +5890,23 @@ static int create_dir_hierarchy(const char *outfile, FILE *errors)
tempdir = strtok(outdup, DIR_CHAR);
- while (tempdir != NULL) {
+ while(tempdir != NULL) {
tempdir2 = strtok(NULL, DIR_CHAR);
/* since strtok returns a token for the last word even
if not ending with DIR_CHAR, we need to prune it */
- if (tempdir2 != NULL) {
+ if(tempdir2 != NULL) {
size_t dlen = strlen(dirbuildup);
- if (dlen)
+ if(dlen)
sprintf(&dirbuildup[dlen], "%s%s", DIR_CHAR, tempdir);
else {
- if (0 != strncmp(outdup, DIR_CHAR, 1))
+ if(0 != strncmp(outdup, DIR_CHAR, 1))
strcpy(dirbuildup, tempdir);
else
sprintf(dirbuildup, "%s%s", DIR_CHAR, tempdir);
}
- if (access(dirbuildup, F_OK) == -1) {
+ if(access(dirbuildup, F_OK) == -1) {
result = mkdir(dirbuildup,(mode_t)0000750);
- if (-1 == result) {
+ if(-1 == result) {
show_dir_errno(errors, dirbuildup);
break; /* get out of loop */
}
@@ -5704,7 +5957,7 @@ msdosify (const char *file_name)
{
static char dos_name[PATH_MAX];
static const char illegal_chars_dos[] = ".+, ;=[]" /* illegal in DOS */
- "|<>\\\":?*"; /* illegal in DOS & W95 */
+ "|<>\\\":?*"; /* illegal in DOS & W95 */
static const char *illegal_chars_w95 = &illegal_chars_dos[8];
int idx, dot_idx;
const char *s = file_name;
@@ -5714,36 +5967,36 @@ msdosify (const char *file_name)
size_t len = sizeof (illegal_chars_dos) - 1;
/* Support for Windows 9X VFAT systems, when available. */
- if (_use_lfn (file_name)) {
+ if(_use_lfn (file_name)) {
illegal_aliens = illegal_chars_w95;
len -= (illegal_chars_w95 - illegal_chars_dos);
}
/* Get past the drive letter, if any. */
- if (s[0] >= 'A' && s[0] <= 'z' && s[1] == ':') {
+ if(s[0] >= 'A' && s[0] <= 'z' && s[1] == ':') {
*d++ = *s++;
*d++ = *s++;
}
- for (idx = 0, dot_idx = -1; *s && d < dlimit; s++, d++) {
- if (memchr (illegal_aliens, *s, len)) {
+ for(idx = 0, dot_idx = -1; *s && d < dlimit; s++, d++) {
+ if(memchr (illegal_aliens, *s, len)) {
/* Dots are special: DOS doesn't allow them as the leading character,
and a file name cannot have more than a single dot. We leave the
first non-leading dot alone, unless it comes too close to the
beginning of the name: we want sh.lex.c to become sh_lex.c, not
sh.lex-c. */
- if (*s == '.') {
- if (idx == 0 && (s[1] == '/' || (s[1] == '.' && s[2] == '/'))) {
+ if(*s == '.') {
+ if(idx == 0 && (s[1] == '/' || (s[1] == '.' && s[2] == '/'))) {
/* Copy "./" and "../" verbatim. */
*d++ = *s++;
- if (*s == '.')
+ if(*s == '.')
*d++ = *s++;
*d = *s;
}
- else if (idx == 0)
+ else if(idx == 0)
*d = '_';
- else if (dot_idx >= 0) {
- if (dot_idx < 5) { /* 5 is a heuristic ad-hoc'ery */
+ else if(dot_idx >= 0) {
+ if(dot_idx < 5) { /* 5 is a heuristic ad-hoc'ery */
d[dot_idx - idx] = '_'; /* replace previous dot */
*d = '.';
}
@@ -5753,11 +6006,11 @@ msdosify (const char *file_name)
else
*d = '.';
- if (*s == '.')
+ if(*s == '.')
dot_idx = idx;
}
- else if (*s == '+' && s[1] == '+') {
- if (idx - 2 == dot_idx) { /* .c++, .h++ etc. */
+ else if(*s == '+' && s[1] == '+') {
+ if(idx - 2 == dot_idx) { /* .c++, .h++ etc. */
*d++ = 'x';
*d = 'x';
}
@@ -5774,7 +6027,7 @@ msdosify (const char *file_name)
}
else
*d = *s;
- if (*s == '/') {
+ if(*s == '/') {
idx = 0;
dot_idx = -1;
}
@@ -5799,10 +6052,10 @@ rename_if_dos_device_name (char *file_name)
strncpy(fname, file_name, PATH_MAX-1);
fname[PATH_MAX-1] = 0;
base = basename(fname);
- if (((stat(base, &st_buf)) == 0) && (S_ISCHR(st_buf.st_mode))) {
+ if(((stat(base, &st_buf)) == 0) && (S_ISCHR(st_buf.st_mode))) {
size_t blen = strlen (base);
- if (strlen(fname) >= PATH_MAX-1) {
+ if(strlen(fname) >= PATH_MAX-1) {
/* Make room for the '_' */
blen--;
base[blen] = 0;
@@ -5822,7 +6075,8 @@ rename_if_dos_device_name (char *file_name)
static char *sanitize_dos_name(char *fn)
{
char tmpfn[PATH_MAX];
- fn[PATH_MAX-1]=0; /* ensure fn is not too long by possibly truncating it */
+ if(strlen(fn) >= PATH_MAX)
+ fn[PATH_MAX-1]=0; /* truncate it */
strcpy(tmpfn, msdosify(fn));
free(fn);
return strdup(rename_if_dos_device_name(tmpfn));
diff --git a/src/makefile.amiga b/src/makefile.amiga
new file mode 100644
index 0000000..dc98481
--- /dev/null
+++ b/src/makefile.amiga
@@ -0,0 +1,32 @@
+#
+# $VER: cURL Makefile for AmigaOS ...
+#
+
+# change the follow to where you have the AmiTCP SDK v4.3 includes:
+
+ATCPSDKI= /GG/netinclude
+
+
+CC = m68k-amigaos-gcc
+CFLAGS = -I$(ATCPSDKI) -m68020-60 -O2 -msoft-float -noixemul -g -I. -I../include -W -Wall
+LIBS = ../lib/libcurl.a -lssl -lcrypto -lz
+MANPAGE = ../docs/curl.1
+README = ../docs/MANUAL
+MKHELP = ../src/mkhelp.pl
+
+top_srcdir = ..
+
+include Makefile.inc
+
+OBJS = $(CURL_CFILES:.c=.o) $(CURLX_ONES:.c=.o)
+
+all: hugehelp.c $(OBJS)
+ $(CC) $(CFLAGS) -o cURL $(OBJS) $(LIBS) -Wl,-Map,cURL.map,--cref
+
+hugehelp.c: $(README) $(MANPAGE) mkhelp.pl
+ rm -f hugehelp.c
+ /bin/nroff -man $(MANPAGE) | /bin/perl $(MKHELP) -c $(README) > hugehelp.c
+
+install:
+ $(INSTALL) -c cURL /c/cURL
+
diff --git a/src/makefile.dj b/src/makefile.dj
new file mode 100644
index 0000000..fc3ae16
--- /dev/null
+++ b/src/makefile.dj
@@ -0,0 +1,84 @@
+#
+#
+# Adapted for djgpp2 / Watt-32 / DOS by
+# Gisle Vanem <giva@bgnett.no>
+#
+
+DEPEND_PREREQ = curl_config.h hugehelp.c
+
+top_srcdir = ..
+TOPDIR = ..
+
+include ../packages/DOS/common.dj
+include Makefile.inc
+
+CSOURCES = $(CURL_CFILES)
+
+ifeq ($(USE_SSL),1)
+ EX_LIBS += $(OPENSSL_ROOT)/lib/libssl.a $(OPENSSL_ROOT)/lib/libcrypt.a
+endif
+
+ifeq ($(USE_ARES),1)
+ EX_LIBS += $(ARES_ROOT)/libcares.a
+endif
+
+ifeq ($(USE_ZLIB),1)
+ EX_LIBS += $(ZLIB_ROOT)/libz.a
+ CFLAGS += -DUSE_MANUAL
+endif
+
+ifeq ($(USE_IDNA),1)
+ EX_LIBS += $(LIBIDN_ROOT)/lib/dj_obj/libidn.a -liconv
+endif
+
+EX_LIBS += $(WATT32_ROOT)/lib/libwatt.a
+
+CFLAGS += -DUSE_ENVIRONMENT
+
+PROGRAM = curl.exe
+OBJECTS += $(addprefix $(OBJ_DIR)/, $(CSOURCES:.c=.o))
+
+all: $(OBJ_DIR) curl_config.h $(PROGRAM)
+ @echo Welcome to cURL
+
+$(PROGRAM): $(OBJECTS) ../lib/libcurl.a
+ $(CC) -o $@ $^ $(LDFLAGS) $(EX_LIBS)
+
+curl_config.h:
+ifeq ($(IS_UNIX_SHELL),1)
+ @echo '#include "../lib/config.dos"' > $@
+else
+ @echo #include "../lib/config.dos" > $@
+endif
+
+#
+# groff 1.18+ requires "-P -c"
+#
+hugehelp.c: ../docs/MANUAL ../docs/curl.1 mkhelp.pl
+ groff -Tascii -man ../docs/curl.1 | \
+ perl -w mkhelp.pl ../docs/MANUAL > $@
+
+# clean generated files
+#
+genclean:
+ - $(DELETE) curl_config.h
+ - $(DELETE) hugehelp.c
+
+# clean object files and subdir
+#
+objclean: genclean
+ - $(DELETE) $(OBJ_DIR)$(DS)*.o
+ - $(RMDIR) $(OBJ_DIR)
+
+# clean without removing built program
+#
+clean: objclean
+ - $(DELETE) depend.dj
+
+# clean everything
+#
+realclean vclean: clean
+ - $(DELETE) $(PROGRAM)
+
+-include depend.dj
+
diff --git a/src/mkhelp.pl b/src/mkhelp.pl
new file mode 100644
index 0000000..03c884f
--- /dev/null
+++ b/src/mkhelp.pl
@@ -0,0 +1,232 @@
+#!/usr/local/bin/perl
+
+# Yeah, I know, probably 1000 other persons already wrote a script like
+# this, but I'll tell ya:
+
+# THEY DON'T FIT ME :-)
+
+# Get readme file as parameter:
+
+if($ARGV[0] eq "-c") {
+ $c=1;
+ shift @ARGV;
+}
+
+my $README = $ARGV[0];
+
+if($README eq "") {
+ print "usage: mkreadme.pl [-c] <README> < manpage\n";
+ exit;
+}
+
+
+push @out, " _ _ ____ _\n";
+push @out, " Project ___| | | | _ \\| |\n";
+push @out, " / __| | | | |_) | |\n";
+push @out, " | (__| |_| | _ <| |___\n";
+push @out, " \\___|\\___/|_| \\_\\_____|\n";
+
+my $olen=0;
+while (<STDIN>) {
+ my $line = $_;
+
+ # this should be removed:
+ $line =~ s/(.|_)//g;
+
+ if($line =~ /^([ \t]*\n|curl)/i) {
+ # cut off headers and empty lines
+ $wline++; # count number of cut off lines
+ next;
+ }
+
+ my $text = $line;
+ $text =~ s/^\s+//g; # cut off preceeding...
+ $text =~ s/\s+$//g; # and trailing whitespaces
+
+ $tlen = length($text);
+
+ if($wline && ($olen == $tlen)) {
+ # if the previous line with contents was exactly as long as
+ # this line, then we ignore the newlines!
+
+ # We do this magic because a header may abort a paragraph at
+ # any line, but we don't want that to be noticed in the output
+ # here
+ $wline=0;
+ }
+ $olen = $tlen;
+
+ if($wline) {
+ # we only make one empty line max
+ $wline = 0;
+ push @out, "\n";
+ }
+ push @out, $line;
+}
+push @out, "\n"; # just an extra newline
+
+open(READ, "<$README") ||
+ die "couldn't read the README infile $README";
+
+while(<READ>) {
+ push @out, $_;
+}
+close(READ);
+
+# if compressed
+if($c) {
+ my @test = `gzip --version 2>&1`;
+ if($test[0] =~ /gzip/) {
+ open(GZIP, ">dumpit") ||
+ die "can't create the dumpit file, try without -c";
+ binmode GZIP;
+ for(@out) {
+ print GZIP $_;
+ $gzip += length($_);
+ }
+ close(GZIP);
+
+ system("gzip --best --no-name dumpit");
+
+ open(GZIP, "<dumpit.gz") ||
+ die "can't read the dumpit.gz file, try without -c";
+ binmode GZIP;
+ while(<GZIP>) {
+ push @gzip, $_;
+ $gzipped += length($_);
+ }
+ close(GZIP);
+
+ unlink("dumpit.gz");
+ }
+ else {
+ # no gzip, no compression!
+ undef $c;
+ print STDERR "MEEEP: Couldn't find gzip, disable compression\n";
+ }
+}
+
+$now = localtime;
+print <<HEAD
+/*
+ * NEVER EVER edit this manually, fix the mkhelp.pl script instead!
+ * Generation time: $now
+ */
+#include "setup.h"
+#ifdef USE_MANUAL
+#include "hugehelp.h"
+#include <stdio.h>
+HEAD
+ ;
+if($c) {
+ print <<HEAD
+#include <stdlib.h>
+#include <zlib.h>
+static const unsigned char hugehelpgz[] = {
+ /* This mumbo-jumbo is the huge help text compressed with gzip.
+ Thanks to this operation, the size of this data shrunk from $gzip
+ to $gzipped bytes. You can disable the use of compressed help
+ texts by NOT passing -c to the mkhelp.pl tool. */
+HEAD
+;
+ my $c=0;
+ print " ";
+ for(@gzip) {
+ my @all=split(//, $_);
+ for(@all) {
+ my $num=ord($_);
+ printf(" 0x%02x,", 0+$num);
+ if(++$c>11) {
+ print "\n ";
+ $c=0;
+ }
+ }
+ }
+ print "\n};\n";
+
+ print <<EOF
+#define BUF_SIZE 0x10000
+/* Decompress and send to stdout a gzip-compressed buffer */
+void hugehelp(void)
+{
+ unsigned char* buf;
+ int status,headerlen;
+ z_stream z;
+
+ /* Make sure no gzip options are set */
+ if (hugehelpgz[3] & 0xfe)
+ return;
+
+ headerlen = 10;
+ z.avail_in = (unsigned int)(sizeof(hugehelpgz) - headerlen);
+ z.next_in = (unsigned char *)hugehelpgz + headerlen;
+ z.zalloc = (alloc_func)Z_NULL;
+ z.zfree = (free_func)Z_NULL;
+ z.opaque = 0;
+
+ if (inflateInit2(&z, -MAX_WBITS) != Z_OK)
+ return;
+
+ buf = malloc(BUF_SIZE);
+ if (buf) {
+ while(1) {
+ z.avail_out = BUF_SIZE;
+ z.next_out = buf;
+ status = inflate(&z, Z_SYNC_FLUSH);
+ if (status == Z_OK || status == Z_STREAM_END) {
+ fwrite(buf, BUF_SIZE - z.avail_out, 1, stdout);
+ if (status == Z_STREAM_END)
+ break;
+ }
+ else
+ break; /* Error */
+ }
+ free(buf);
+ }
+ inflateEnd(&z);
+}
+EOF
+ ;
+foot();
+exit;
+}
+else {
+ print <<HEAD
+void hugehelp(void)
+{
+ fputs(
+HEAD
+ ;
+}
+
+$outsize=0;
+for(@out) {
+ chop;
+
+ $new = $_;
+
+ $outsize += length($new)+1; # one for the newline
+
+ $new =~ s/\\/\\\\/g;
+ $new =~ s/\"/\\\"/g;
+
+ # gcc 2.96 claims ISO C89 only is required to support 509 letter strings
+ if($outsize > 500) {
+ # terminate and make another fputs() call here
+ print ", stdout);\n fputs(\n";
+ $outsize=length($new)+1;
+ }
+ printf("\"%s\\n\"\n", $new);
+
+}
+
+print ", stdout) ;\n}\n";
+
+foot();
+
+sub foot {
+ print <<FOOT
+#endif /* USE_MANUAL */
+FOOT
+ ;
+}
diff --git a/src/setup.h b/src/setup.h
index 69da710..0d2a99f 100644
--- a/src/setup.h
+++ b/src/setup.h
@@ -207,6 +207,11 @@ int fileno( FILE *stream);
#define strdup(ptr) curlx_strdup(ptr)
#endif
+/* Define S_ISREG if not defined by system headers, f.e. MSVC */
+#if !defined(S_ISREG) && defined(S_IFMT) && defined(S_IFREG)
+#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
+#endif
+
/*
* Include macros and defines that should only be processed once.
*/
diff --git a/src/urlglob.c b/src/urlglob.c
index 5f8fb28..590c37a 100644
--- a/src/urlglob.c
+++ b/src/urlglob.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -75,8 +75,6 @@ static GlobCode glob_set(URLGlob *glob, char *pattern,
++glob->size;
while (!done) {
- bool skip;
-
switch (*pattern) {
case '\0': /* URL ended while set was still open */
snprintf(glob->errormsg, sizeof(glob->errormsg),
@@ -109,7 +107,7 @@ static GlobCode glob_set(URLGlob *glob, char *pattern,
/* always check for a literal (may be "") between patterns */
if(GLOB_ERROR == glob_word(glob, ++pattern, ++pos, &wordamount))
- wordamount=1;
+ return GLOB_ERROR;
*amount = pat->content.Set.size * wordamount;
done = TRUE;
@@ -127,24 +125,7 @@ static GlobCode glob_set(URLGlob *glob, char *pattern,
return GLOB_ERROR;
case '\\': /* escaped character, skip '\' */
- switch(pattern[1]) {
- case '[':
- case ']':
- case '{':
- case '}':
- case ',':
- skip = TRUE;
- break;
- default:
- skip = FALSE;
- break;
- }
- if(skip) {
- if (*(buf+1) == '\0') { /* but no escaping of '\0'! */
- snprintf(glob->errormsg, sizeof(glob->errormsg),
- "illegal pattern at pos %zu\n", pos);
- return GLOB_ERROR;
- }
+ if(pattern[1]) {
++pattern;
++pos;
}
@@ -281,8 +262,11 @@ static GlobCode glob_word(URLGlob *glob, char *pattern,
*amount = 1; /* default is one single string */
while (*pattern != '\0' && *pattern != '{' && *pattern != '[') {
- if (*pattern == '}' || *pattern == ']')
+ if (*pattern == '}' || *pattern == ']') {
+ snprintf(glob->errormsg, sizeof(glob->errormsg),
+ "unmatched close brace/bracket at pos %zu\n", pos);
return GLOB_ERROR;
+ }
/* only allow \ to escape known "special letters" */
if (*pattern == '\\' &&
@@ -292,8 +276,6 @@ static GlobCode glob_word(URLGlob *glob, char *pattern,
/* escape character, skip '\' */
++pattern;
++pos;
- if (*pattern == '\0') /* but no escaping of '\0'! */
- return GLOB_ERROR;
}
*buf++ = *pattern++; /* copy character to literal */
++pos;
@@ -356,7 +338,7 @@ int glob_url(URLGlob** glob, char* url, int *urlnum, FILE *error)
else {
if(error && glob_expand->errormsg[0]) {
/* send error description to the error-stream */
- fprintf(error, "curl: (%d) [globbing] %s\n",
+ fprintf(error, "curl: (%d) [globbing] %s",
CURLE_URL_MALFORMAT, glob_expand->errormsg);
}
/* it failed, we cleanup */
diff --git a/src/vc6curlsrc.dsp b/src/vc6curlsrc.dsp
new file mode 100644
index 0000000..642cd5d
--- /dev/null
+++ b/src/vc6curlsrc.dsp
@@ -0,0 +1,258 @@
+# Microsoft Developer Studio Project File - Name="curlsrc" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=curlsrc - Win32 using libcurl LIB Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "curlsrc.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "curlsrc.mak" CFG="curlsrc - Win32 using libcurl LIB Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "curlsrc - Win32 using libcurl DLL Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "curlsrc - Win32 using libcurl DLL Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "curlsrc - Win32 using libcurl LIB Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "curlsrc - Win32 using libcurl LIB Release" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "curlsrc - Win32 using libcurl DLL Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "DLL-Debug"
+# PROP BASE Intermediate_Dir "DLL-Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "DLL-Debug"
+# PROP Intermediate_Dir "DLL-Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\lib" /I "..\include" /I "." /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_CONSOLE" /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\lib" /I "..\include" /I "." /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_CONSOLE" /FD /GZ /c
+# ADD BASE RSC /l 0x409 /i "..\include" /d "_DEBUG"
+# ADD RSC /l 0x409 /i "..\include" /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 libcurld_imp.lib kernel32.lib ws2_32.lib wldap32.lib /nologo /subsystem:console /incremental:no /debug /machine:I386 /out:"DLL-Debug/curl.exe" /pdbtype:sept /libpath:"..\lib\DLL-Debug"
+# ADD LINK32 libcurld_imp.lib kernel32.lib ws2_32.lib wldap32.lib /nologo /subsystem:console /incremental:no /debug /machine:I386 /out:"DLL-Debug/curl.exe" /pdbtype:sept /libpath:"..\lib\DLL-Debug"
+
+!ELSEIF "$(CFG)" == "curlsrc - Win32 using libcurl DLL Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "DLL-Release"
+# PROP BASE Intermediate_Dir "DLL-Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "DLL-Release"
+# PROP Intermediate_Dir "DLL-Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "..\lib" /I "..\include" /I "." /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\lib" /I "..\include" /I "." /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_CONSOLE" /FD /c
+# ADD BASE RSC /l 0x409 /i "..\include" /d "NDEBUG"
+# ADD RSC /l 0x409 /i "..\include" /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 libcurl_imp.lib kernel32.lib ws2_32.lib wldap32.lib /nologo /subsystem:console /pdb:none /machine:I386 /out:"DLL-Release/curl.exe" /libpath:"..\lib\DLL-Release"
+# ADD LINK32 libcurl_imp.lib kernel32.lib ws2_32.lib wldap32.lib /nologo /subsystem:console /pdb:none /machine:I386 /out:"DLL-Release/curl.exe" /libpath:"..\lib\DLL-Release"
+
+!ELSEIF "$(CFG)" == "curlsrc - Win32 using libcurl LIB Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "LIB-Debug"
+# PROP BASE Intermediate_Dir "LIB-Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "LIB-Debug"
+# PROP Intermediate_Dir "LIB-Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\lib" /I "..\include" /I "." /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_CONSOLE" /D "CURL_STATICLIB" /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\lib" /I "..\include" /I "." /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_CONSOLE" /D "CURL_STATICLIB" /FD /GZ /c
+# ADD BASE RSC /l 0x409 /i "..\include" /d "_DEBUG"
+# ADD RSC /l 0x409 /i "..\include" /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 libcurld.lib kernel32.lib ws2_32.lib wldap32.lib /nologo /subsystem:console /incremental:no /debug /machine:I386 /out:"LIB-Debug/curl.exe" /pdbtype:sept /libpath:"..\lib\LIB-Debug"
+# ADD LINK32 libcurld.lib kernel32.lib ws2_32.lib wldap32.lib /nologo /subsystem:console /incremental:no /debug /machine:I386 /out:"LIB-Debug/curl.exe" /pdbtype:sept /libpath:"..\lib\LIB-Debug"
+
+!ELSEIF "$(CFG)" == "curlsrc - Win32 using libcurl LIB Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "LIB-Release"
+# PROP BASE Intermediate_Dir "LIB-Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "LIB-Release"
+# PROP Intermediate_Dir "LIB-Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "..\lib" /I "..\include" /I "." /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_CONSOLE" /D "CURL_STATICLIB" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\lib" /I "..\include" /I "." /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_CONSOLE" /D "CURL_STATICLIB" /FD /c
+# ADD BASE RSC /l 0x409 /i "..\include" /d "NDEBUG"
+# ADD RSC /l 0x409 /i "..\include" /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 libcurl.lib kernel32.lib ws2_32.lib wldap32.lib /nologo /subsystem:console /pdb:none /machine:I386 /out:"LIB-Release/curl.exe" /libpath:"..\lib\LIB-Release"
+# ADD LINK32 libcurl.lib kernel32.lib ws2_32.lib wldap32.lib /nologo /subsystem:console /pdb:none /machine:I386 /out:"LIB-Release/curl.exe" /libpath:"..\lib\LIB-Release"
+
+!ENDIF
+
+# Begin Target
+
+# Name "curlsrc - Win32 using libcurl DLL Debug"
+# Name "curlsrc - Win32 using libcurl DLL Release"
+# Name "curlsrc - Win32 using libcurl LIB Debug"
+# Name "curlsrc - Win32 using libcurl LIB Release"
+# Begin Group "Source Files"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\curlutil.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\getpass.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\homedir.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\hugehelp.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\main.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\os-specific.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\nonblock.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\rawstr.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\strtoofft.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\urlglob.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\writeenv.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\writeout.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=".\config-win32.h"
+# End Source File
+# Begin Source File
+
+SOURCE=.\curlutil.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\getpass.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\homedir.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\hugehelp.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\os-specific.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\setup.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\nonblock.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\rawstr.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\strtoofft.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\urlglob.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\version.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\writeenv.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\writeout.h
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\curl.rc
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/src/vc6curlsrc.dsw b/src/vc6curlsrc.dsw
new file mode 100644
index 0000000..6b2db6f
--- /dev/null
+++ b/src/vc6curlsrc.dsw
@@ -0,0 +1,29 @@
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "curlsrc"=".\vc6curlsrc.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
diff --git a/src/version.h b/src/version.h
index 8c091b2..676102f 100644
--- a/src/version.h
+++ b/src/version.h
@@ -26,7 +26,7 @@
#define CURL_NAME "curl"
#define CURL_COPYRIGHT LIBCURL_COPYRIGHT
-#define CURL_VERSION "7.20.1"
+#define CURL_VERSION "7.21.2"
#define CURL_VERSION_MAJOR LIBCURL_VERSION_MAJOR
#define CURL_VERSION_MINOR LIBCURL_VERSION_MINOR
#define CURL_VERSION_PATCH LIBCURL_VERSION_PATCH
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
new file mode 100644
index 0000000..04ab06e
--- /dev/null
+++ b/tests/CMakeLists.txt
@@ -0,0 +1,2 @@
+add_subdirectory(libtest)
+add_subdirectory(server)
diff --git a/tests/FILEFORMAT b/tests/FILEFORMAT
new file mode 100644
index 0000000..fb162a3
--- /dev/null
+++ b/tests/FILEFORMAT
@@ -0,0 +1,345 @@
+ The test suite's file format is very simple and extensible, closely
+resembling XML. All data for a single test case resides in a single
+ASCII file. Labels mark the beginning and the end of all sections, and each
+label must be written in its own line. Comments are either XML-style
+(enclosed with <!-- and -->) or C-style (beginning with #) and must appear
+on their own lines and not alongside actual test data. Most test data files
+are syntactically valid XML, although a few files are not (lack of
+support for character entities and the preservation of CR/LF characters at
+the end of lines are the biggest differences).
+
+ The file begins with a 'testcase' tag, which encompasses the remainder of
+the file.
+
+<testcase>
+
+ Each file is split up in three main sections: reply, client and verify. The
+reply section is used for the server to know what to send as a reply for the
+requests curl sends, the client section defines how the client should behave
+while the verify section defines how to verify that the data stored after a
+command has been run ended up correctly.
+
+ Each main section has a number of available subsections that can be
+specified, that will be checked/used if specified. This document includes all
+the subsections currently supported.
+
+Main sections are 'info', 'reply', 'client' and 'verify'.
+
+<info>
+<keywords>
+A newline-separated list of keywords describing what this test case uses and
+tests. Try to use an already used keyword. These keywords will be used for
+statistical/informational purposes and for choosing or skipping classes
+of tests. "Keywords" must begin with an alphabetic character, "-", "["
+or "{" and may actually consist of multiple words separated by spaces
+which are treated together as a single identifier.
+</keywords>
+</info>
+
+<reply>
+<data [nocheck="yes"] [sendzero="yes"] [base64="yes"]>
+data to be sent to the client on its request and later verified that it arrived
+safely. Set nocheck="yes" to prevent the test script from verifying the arrival
+of this data.
+
+If the data contains 'swsclose' anywhere within the start and end tag, and
+this is a HTTP test, then the connection will be closed by the server after
+this response is sent. If not, the connection will be kept persistent.
+
+If the data contains 'swsbounce' anywhere within the start and end tag, the
+HTTP server will detect if this is a second request using the same test and
+part number and will then increase the part number with one. This is useful
+for auth tests and similar.
+
+'sendzero' set to yes means that the (FTP) server will "send" the data even if
+the size is zero bytes. Used to verify curl's behaviour on zero bytes
+transfers.
+
+'base64' set to yes means that the data provided in the test-file is a chunk
+of data encoded with base64. It is the only way a test case can contain binary
+data. (This attribute can in fact be used on any section, but it doesn't make
+much sense for other sections than "data").
+</data>
+<dataNUM>
+Send back this contents instead of the <data> one. The num is set by:
+A) The test number in the request line is >10000 and this is the remainder
+of [test case number]%10000.
+B) The request was HTTP and included digest details, which adds 1000 to NUM
+C) If a HTTP request is NTLM type-1, it adds 1001 to num
+D) If a HTTP request is NTLM type-3, it adds 1002 to num
+E) If a HTTP request is Basic and num is already >=1000, it adds 1 to num
+
+Dynamically changing num in this way allows the test harness to be used to
+test authentication negotiation where several different requests must be sent
+to complete a transfer. The response to each request is found in its own data
+section. Validating the entire negotiation sequence can be done by
+specifying a datacheck section.
+</dataNUM>
+<datacheck [nonewline="yes"]>
+if the data is sent but this is what should be checked afterwards. If
+'nonewline' is set, we will cut off the trailing newline of this given data
+before comparing with the one actually received by the client
+</datacheck>
+<size>
+number to return on a ftp SIZE command (set to -1 to make this command fail)
+</size>
+<mdtm>
+what to send back if the client sends a (FTP) MDTM command, set to -1 to
+have it return that the file doesn't exist
+</mdtm>
+<postcmd>
+special purpose server-command to control its behavior *after* the
+reply is sent
+For HTTP/HTTPS, these are supported:
+
+wait [secs]
+ - Pause for the given time
+</postcmd>
+<servercmd>
+Special-commands for the server.
+For FTP, these are supported:
+
+REPLY [command] [return value] [response string]
+ - Changes how the server responds to the [command]. [response string] is
+ evaluated as a perl string, so it can contain embedded \r\n, for example.
+COUNT [command] [num]
+ - Do the REPLY change for [command] only [num] times and then go back to the
+ built-in approach
+DELAY [command] [secs]
+ - Delay responding to this command for the given time
+RETRWEIRDO
+ - Enable the "weirdo" RETR case when multiple response lines appear at once
+ when a file is transfered
+RETRNOSIZE
+ - Make sure the RETR response doesn't contain the size of the file
+NOSAVE
+ - Don't actually save what is received
+SLOWDOWN
+ - Send FTP responses with 0.01 sec delay between each byte
+PASVBADIP
+ - makes PASV send back an illegal IP in its 227 response
+
+For HTTP/HTTPS:
+auth_required if this is set and a POST/PUT is made without auth, the
+ server will NOT wait for the full request body to get sent
+idle do nothing after receiving the request, just "sit idle"
+stream continuously send data to the client, never-ending
+writedelay: [secs] delay this amount between reply packets
+pipe: [num] tell the server to expect this many HTTP requests before
+ sending back anything, to allow pipelining tests
+skip: [num] instructs the server to ignore reading this many bytes from a PUT
+ or POST request
+
+rtp: part [num] channel [num] size [num]
+ stream a fake RTP packet for the given part on a chosen channel
+ with the given payload size
+</servercmd>
+</reply>
+
+<client>
+
+<server>
+What server(s) this test case requires/uses:
+
+file
+ftp
+ftp-ipv6
+ftps
+http
+http-ipv6
+https
+none
+scp
+sftp
+socks4
+socks5
+rtsp
+rtsp-ipv6
+imap
+pop3
+smtp
+
+Give only one per line. This subsection is mandatory.
+</server>
+
+<features>
+A list of features that MUST be present in the client/library for this test to
+be able to run (if these features are not present, the test will be
+SKIPPED). Features testable here are:
+
+crypto
+getrlimit
+GnuTLS
+idn
+ipv6
+large_file
+libz
+netrc_debug
+NSS
+NTLM
+OpenSSL
+SSL
+socks
+
+as well as each protocol that curl supports. A protocol only needs to be
+specified if it is different from the server (useful when the server
+is 'none').
+</features>
+
+<killserver>
+Using the same syntax as in <server> but when mentioned here these servers
+are explicitly KILLED when this test case is completed. Only use this if there
+is no other alternatives. Using this of course requires subsequent tests to
+restart servers.
+</killserver>
+
+<precheck>
+A command line that if set gets run by the test script before the test. If an
+output is displayed by the command or if the return code is non-zero, the test
+will be skipped and the (single-line) output will be displayed as reason for
+not running the test. Variables are substituted as in the <command> section.
+</precheck>
+
+<postcheck>
+A command line that if set gets run by the test script after the test. If
+the command exists with a non-zero status code, the test will be considered
+to have failed. Variables are substituted as in the <command> section.
+</postcheck>
+
+<tool>
+Name of tool to use instead of "curl". This tool must be built and exist
+in the libtest/ directory.
+</tool>
+
+<name>
+test case description
+</name>
+
+<setenv>
+variable1=contents1
+variable2=contents2
+
+Set the given environment variables to the specified value before the actual
+command is run. They are cleared again after the command has been run.
+Variables are first substituted as in the <command> section.
+</setenv>
+
+<command [option="no-output"] [timeout="secs"] [delay="secs"]>
+command line to run, there's a bunch of %variables that get replaced
+accordingly.
+
+Note that the URL that gets passed to the server actually controls what data
+that is returned. The last slash in the URL must be followed by a number. That
+number (N) will be used by the test-server to load test case N and return the
+data that is defined within the <reply><data></data></reply> section.
+
+If a CONNECT is used to the server (to emulate HTTPS etc over proxy), the port
+number given in the CONNECT request will be used to identify which test that
+is being run, if the proxy host name is said to start with 'test'.
+
+Set option="no-output" to prevent the test script to slap on the --output
+argument that directs the output to a file. The --output is also not added if
+the verify/stdout section is used.
+
+Set timeout="secs" to override default server logs advisor read lock timeout.
+This timeout is used by the test harness, once that the command has completed
+execution, to wait for the test server to write out server side log files and
+remove the lock that advised not to read them. The "secs" parameter is the not
+negative integer number of seconds for the timeout. This 'timeout' attribute
+is documented for completeness sake, but is deep test harness stuff and only
+needed for very singular and specific test cases. Avoid using it.
+
+Set delay="secs" to introduce a time delay once that the command has completed
+execution and before the <postcheck> section runs. The "secs" parameter is the
+not negative integer number of seconds for the delay. This 'delay' attribute
+is intended for very specific test cases, and normally not needed.
+
+Available substitute variables include:
+%CLIENTIP - IPv4 address of the client running curl
+%CLIENT6IP - IPv6 address of the client running curl
+%HOSTIP - IPv4 address of the host running this test
+%HOSTPORT - Port number of the HTTP server
+%HOST6IP - IPv6 address of the host running this test
+%HOST6PORT - IPv6 port number of the HTTP server
+%HTTPSPORT - Port number of the HTTPS server
+%FTPPORT - Port number of the FTP server
+%FTP6PORT - IPv6 port number of the FTP server
+%FTPSPORT - Port number of the FTPS server
+%FTP2PORT - Port number of the FTP server 2
+%FTPTIME2 - Timeout in seconds that should be just sufficient to receive
+ a response from the test FTP server
+%TFTPPORT - Port number of the TFTP server
+%TFTP6PORT - IPv6 port number of the TFTP server
+%SSHPORT - Port number of the SCP/SFTP server
+%SOCKSPORT - Port number of the SOCKS4/5 server
+%RTSPPORT - Port number of the RTSP server
+%RTSP6PORT - IPv6 port number of the RTSP server
+%SRCDIR - Full path to the source dir
+%PWD - Current directory
+%CURL - Path to the curl executable
+%USER - Login ID of the user running the test
+</command>
+
+<file name="log/filename">
+This creates the named file with this content before the test case is run,
+which is useful if the test case needs a file to act on.
+Variables are substituted on the contents of the file as in the <command>
+section.
+</file>
+
+<stdin>
+Pass this given data on stdin to the tool.
+</stdin>
+
+</client>
+
+<verify>
+<errorcode>
+numerical error code curl is supposed to return. Specify a list of accepted
+error codes by separating multiple numbers with comma. See test 237 for an
+example.
+</errorcode>
+<strip>
+One regex per line that is removed from the protocol dumps before the
+comparison is made. This is very useful to remove dependencies on dynamically
+changing protocol data such as port numbers or user-agent strings.
+</strip>
+<strippart>
+One perl op per line that operates on the protocol dump. This is pretty
+advanced. Example: "s/^EPRT .*/EPRT stripped/"
+</strippart>
+<protocol [nonewline="yes"]>
+the protocol dump curl should transmit, if 'nonewline' is set, we will cut
+off the trailing newline of this given data before comparing with the one
+actually sent by the client
+Variables are substituted as in the <command> section.
+</protocol>
+<stdout [mode="text"] [nonewline="yes"]>
+This verifies that this data was passed to stdout. Variables are
+substituted as in the <command> section.
+
+Use the mode="text" attribute if the output is in text mode on platforms that
+have a text/binary difference.
+
+If 'nonewline' is set, we will cut off the trailing newline of this given data
+before comparing with the one actually received by the client
+</stdout>
+<file name="log/filename" [mode="text"]>
+The file's contents must be identical to this after the test is complete.
+Use the mode="text" attribute if the output is in text mode on platforms that
+have a text/binary difference.
+Variables are substituted as in the <command> section.
+</file>
+<stripfile>
+One perl op per line that operates on the file before being compared. This is
+pretty advanced. Example: "s/^EPRT .*/EPRT stripped/"
+</stripfile>
+<upload>
+the contents of the upload data curl should have sent
+</upload>
+<valgrind>
+disable - disables the valgrind log check for this test
+</valgrind>
+</verify>
+
+</testcase>
diff --git a/tests/Makefile.am b/tests/Makefile.am
new file mode 100644
index 0000000..1d5a4af
--- /dev/null
+++ b/tests/Makefile.am
@@ -0,0 +1,75 @@
+#***************************************************************************
+# _ _ ____ _
+# Project ___| | | | _ \| |
+# / __| | | | |_) | |
+# | (__| |_| | _ <| |___
+# \___|\___/|_| \_\_____|
+#
+# Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al.
+#
+# This software is licensed as described in the file COPYING, which
+# you should have received as part of this distribution. The terms
+# are also available at http://curl.haxx.se/docs/copyright.html.
+#
+# You may opt to use, copy, modify, merge, publish, distribute and/or sell
+# copies of the Software, and permit persons to whom the Software is
+# furnished to do so, under the terms of the COPYING file.
+#
+# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+# KIND, either express or implied.
+#
+###########################################################################
+
+HTMLPAGES = testcurl.html runtests.html
+PDFPAGES = testcurl.pdf runtests.pdf
+
+EXTRA_DIST = ftpserver.pl httpserver.pl secureserver.pl runtests.pl getpart.pm \
+ FILEFORMAT README stunnel.pem memanalyze.pl testcurl.pl valgrind.pm ftp.pm \
+ sshserver.pl sshhelp.pm testcurl.1 runtests.1 $(HTMLPAGES) $(PDFPAGES) \
+ CMakeLists.txt certs/scripts/*.sh certs/Server* certs/EdelCurlRoot* \
+ serverhelp.pm tftpserver.pl rtspserver.pl directories.pm
+
+SUBDIRS = data server libtest
+
+PERLFLAGS = -I$(srcdir)
+
+CLEANFILES = .http.pid .https.pid .ftp.pid .ftps.pid
+
+MAN2HTML= roffit < $< >$@
+
+curl:
+ @cd $(top_builddir) && $(MAKE)
+
+if CROSSCOMPILING
+TEST = @echo "NOTICE: we can't run the tests when cross-compiling!"
+TEST_Q =
+TEST_F =
+TEST_T =
+else # if not cross-compiling:
+TEST = srcdir=$(srcdir) $(PERL) $(PERLFLAGS) $(srcdir)/runtests.pl
+TEST_Q = -a -s
+TEST_F = -a -p -r
+TEST_T = -a -t
+endif
+
+test: all
+ $(TEST)
+
+quiet-test: all
+ $(TEST) $(TEST_Q)
+
+full-test: all
+ $(TEST) $(TEST_F)
+
+torture-test: all
+ $(TEST) $(TEST_T)
+
+.1.html:
+ $(MAN2HTML)
+
+.1.pdf:
+ @(foo=`echo $@ | sed -e 's/\.[0-9]$$//g'`; \
+ groff -Tps -man $< >$$foo.ps; \
+ ps2pdf $$foo.ps $@; \
+ rm $$foo.ps; \
+ echo "converted $< to $@")
diff --git a/tests/Makefile.in b/tests/Makefile.in
new file mode 100644
index 0000000..a944800
--- /dev/null
+++ b/tests/Makefile.in
@@ -0,0 +1,631 @@
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005 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.
+
+@SET_MAKE@
+
+#***************************************************************************
+# _ _ ____ _
+# Project ___| | | | _ \| |
+# / __| | | | |_) | |
+# | (__| |_| | _ <| |___
+# \___|\___/|_| \_\_____|
+#
+# Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al.
+#
+# This software is licensed as described in the file COPYING, which
+# you should have received as part of this distribution. The terms
+# are also available at http://curl.haxx.se/docs/copyright.html.
+#
+# You may opt to use, copy, modify, merge, publish, distribute and/or sell
+# copies of the Software, and permit persons to whom the Software is
+# furnished to do so, under the terms of the COPYING file.
+#
+# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+# KIND, either express or implied.
+#
+###########################################################################
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = tests
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
+ $(top_srcdir)/m4/curl-confopts.m4 \
+ $(top_srcdir)/m4/curl-functions.m4 \
+ $(top_srcdir)/m4/curl-override.m4 \
+ $(top_srcdir)/m4/curl-reentrant.m4 \
+ $(top_srcdir)/m4/curl-system.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/lib/curl_config.h \
+ $(top_builddir)/src/curl_config.h \
+ $(top_builddir)/include/curl/curlbuild.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-recursive \
+ install-exec-recursive install-info-recursive \
+ install-recursive installcheck-recursive installdirs-recursive \
+ pdf-recursive ps-recursive uninstall-info-recursive \
+ uninstall-recursive
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_LIBHOSTNAME_FALSE = @BUILD_LIBHOSTNAME_FALSE@
+BUILD_LIBHOSTNAME_TRUE = @BUILD_LIBHOSTNAME_TRUE@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_OPTIONS = @CONFIGURE_OPTIONS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CROSSCOMPILING_FALSE = @CROSSCOMPILING_FALSE@
+CROSSCOMPILING_TRUE = @CROSSCOMPILING_TRUE@
+CURLDEBUG_FALSE = @CURLDEBUG_FALSE@
+CURLDEBUG_TRUE = @CURLDEBUG_TRUE@
+CURL_CA_BUNDLE = @CURL_CA_BUNDLE@
+CURL_CFLAG_EXTRAS = @CURL_CFLAG_EXTRAS@
+CURL_DISABLE_DICT = @CURL_DISABLE_DICT@
+CURL_DISABLE_FILE = @CURL_DISABLE_FILE@
+CURL_DISABLE_FTP = @CURL_DISABLE_FTP@
+CURL_DISABLE_GOPHER = @CURL_DISABLE_GOPHER@
+CURL_DISABLE_HTTP = @CURL_DISABLE_HTTP@
+CURL_DISABLE_IMAP = @CURL_DISABLE_IMAP@
+CURL_DISABLE_LDAP = @CURL_DISABLE_LDAP@
+CURL_DISABLE_LDAPS = @CURL_DISABLE_LDAPS@
+CURL_DISABLE_POP3 = @CURL_DISABLE_POP3@
+CURL_DISABLE_PROXY = @CURL_DISABLE_PROXY@
+CURL_DISABLE_RTSP = @CURL_DISABLE_RTSP@
+CURL_DISABLE_SMTP = @CURL_DISABLE_SMTP@
+CURL_DISABLE_TELNET = @CURL_DISABLE_TELNET@
+CURL_DISABLE_TFTP = @CURL_DISABLE_TFTP@
+CURL_LIBS = @CURL_LIBS@
+CURL_NETWORK_LIBS = @CURL_NETWORK_LIBS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_SHARED = @ENABLE_SHARED@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_LDAP_SSL = @HAVE_LDAP_SSL@
+HAVE_LIBZ = @HAVE_LIBZ@
+HAVE_LIBZ_FALSE = @HAVE_LIBZ_FALSE@
+HAVE_LIBZ_TRUE = @HAVE_LIBZ_TRUE@
+HAVE_PK11_CREATEGENERICOBJECT = @HAVE_PK11_CREATEGENERICOBJECT@
+IDN_ENABLED = @IDN_ENABLED@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+IPV6_ENABLED = @IPV6_ENABLED@
+KRB4_ENABLED = @KRB4_ENABLED@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBCURL_LIBS = @LIBCURL_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+MANOPT = @MANOPT@
+MIMPURE_FALSE = @MIMPURE_FALSE@
+MIMPURE_TRUE = @MIMPURE_TRUE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NO_UNDEFINED_FALSE = @NO_UNDEFINED_FALSE@
+NO_UNDEFINED_TRUE = @NO_UNDEFINED_TRUE@
+NROFF = @NROFF@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH = @PATH@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+PKGADD_NAME = @PKGADD_NAME@
+PKGADD_PKG = @PKGADD_PKG@
+PKGADD_VENDOR = @PKGADD_VENDOR@
+PKGCONFIG = @PKGCONFIG@
+RANDOM_FILE = @RANDOM_FILE@
+RANLIB = @RANLIB@
+REQUIRE_LIB_DEPS = @REQUIRE_LIB_DEPS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SONAME_BUMP_FALSE = @SONAME_BUMP_FALSE@
+SONAME_BUMP_TRUE = @SONAME_BUMP_TRUE@
+SSL_ENABLED = @SSL_ENABLED@
+STATICLIB_FALSE = @STATICLIB_FALSE@
+STATICLIB_TRUE = @STATICLIB_TRUE@
+STRIP = @STRIP@
+SUPPORT_FEATURES = @SUPPORT_FEATURES@
+SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
+TEST_SERVER_LIBS = @TEST_SERVER_LIBS@
+USE_ARES = @USE_ARES@
+USE_EMBEDDED_ARES_FALSE = @USE_EMBEDDED_ARES_FALSE@
+USE_EMBEDDED_ARES_TRUE = @USE_EMBEDDED_ARES_TRUE@
+USE_GNUTLS = @USE_GNUTLS@
+USE_LIBRTMP = @USE_LIBRTMP@
+USE_LIBSSH2 = @USE_LIBSSH2@
+USE_MANUAL_FALSE = @USE_MANUAL_FALSE@
+USE_MANUAL_TRUE = @USE_MANUAL_TRUE@
+USE_NSS = @USE_NSS@
+USE_OPENLDAP = @USE_OPENLDAP@
+USE_POLARSSL = @USE_POLARSSL@
+USE_SSLEAY = @USE_SSLEAY@
+USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
+VERSION = @VERSION@
+VERSIONNUM = @VERSIONNUM@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+libext = @libext@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+HTMLPAGES = testcurl.html runtests.html
+PDFPAGES = testcurl.pdf runtests.pdf
+EXTRA_DIST = ftpserver.pl httpserver.pl secureserver.pl runtests.pl getpart.pm \
+ FILEFORMAT README stunnel.pem memanalyze.pl testcurl.pl valgrind.pm ftp.pm \
+ sshserver.pl sshhelp.pm testcurl.1 runtests.1 $(HTMLPAGES) $(PDFPAGES) \
+ CMakeLists.txt certs/scripts/*.sh certs/Server* certs/EdelCurlRoot* \
+ serverhelp.pm tftpserver.pl rtspserver.pl directories.pm
+
+SUBDIRS = data server libtest
+PERLFLAGS = -I$(srcdir)
+CLEANFILES = .http.pid .https.pid .ftp.pid .ftps.pid
+MAN2HTML = roffit < $< >$@
+@CROSSCOMPILING_FALSE@TEST = srcdir=$(srcdir) $(PERL) $(PERLFLAGS) $(srcdir)/runtests.pl
+@CROSSCOMPILING_TRUE@TEST = @echo "NOTICE: we can't run the tests when cross-compiling!"
+@CROSSCOMPILING_FALSE@TEST_Q = -a -s
+@CROSSCOMPILING_TRUE@TEST_Q =
+@CROSSCOMPILING_FALSE@TEST_F = -a -p -r
+@CROSSCOMPILING_TRUE@TEST_F =
+@CROSSCOMPILING_FALSE@TEST_T = -a -t
+@CROSSCOMPILING_TRUE@TEST_T =
+all: all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .1 .html .pdf
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tests/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --foreign tests/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+ -rm -f libtool
+uninstall-info-am:
+
+# 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.
+$(RECURSIVE_TARGETS):
+ @failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ 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) \
+ || eval $$failcom; \
+ 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:
+ @failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ rev=''; for subdir in $$list; do \
+ if test "$$subdir" = "."; then :; else \
+ rev="$$subdir $$rev"; \
+ fi; \
+ done; \
+ 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) \
+ || eval $$failcom; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique; \
+ fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ $(mkdir_p) $(distdir)/certs $(distdir)/certs/scripts
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ list='$(DISTFILES)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkdir_p) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+ list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -d "$(distdir)/$$subdir" \
+ || $(mkdir_p) "$(distdir)/$$subdir" \
+ || exit 1; \
+ distdir=`$(am__cd) $(distdir) && pwd`; \
+ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
+ (cd $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$top_distdir" \
+ distdir="$$distdir/$$subdir" \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-libtool \
+ distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-recursive
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-info-am
+
+uninstall-info: uninstall-info-recursive
+
+.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \
+ clean clean-generic clean-libtool clean-recursive ctags \
+ ctags-recursive distclean distclean-generic distclean-libtool \
+ distclean-recursive distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-exec install-exec-am install-info \
+ install-info-am install-man install-strip installcheck \
+ installcheck-am installdirs installdirs-am maintainer-clean \
+ maintainer-clean-generic maintainer-clean-recursive \
+ mostlyclean mostlyclean-generic mostlyclean-libtool \
+ mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \
+ uninstall uninstall-am uninstall-info-am
+
+
+curl:
+ @cd $(top_builddir) && $(MAKE)
+
+test: all
+ $(TEST)
+
+quiet-test: all
+ $(TEST) $(TEST_Q)
+
+full-test: all
+ $(TEST) $(TEST_F)
+
+torture-test: all
+ $(TEST) $(TEST_T)
+
+.1.html:
+ $(MAN2HTML)
+
+.1.pdf:
+ @(foo=`echo $@ | sed -e 's/\.[0-9]$$//g'`; \
+ groff -Tps -man $< >$$foo.ps; \
+ ps2pdf $$foo.ps $@; \
+ rm $$foo.ps; \
+ echo "converted $< to $@")
+# 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/tests/README b/tests/README
new file mode 100644
index 0000000..be22778
--- /dev/null
+++ b/tests/README
@@ -0,0 +1,160 @@
+ _ _ ____ _
+ ___| | | | _ \| |
+ / __| | | | |_) | |
+ | (__| |_| | _ <| |___
+ \___|\___/|_| \_\_____|
+
+The cURL Test Suite
+
+Requires:
+ perl (and a unix-style shell)
+ diff (when a test fails, a diff is shown)
+ stunnel (for HTTPS and FTPS tests)
+ OpenSSH or SunSSH (for SCP, SFTP and SOCKS4/5 tests)
+
+Ports used by default:
+
+ - TCP/8990 for HTTP
+ - TCP/8991 for HTTPS
+ - TCP/8992 for FTP
+ - TCP/8993 for FTPS
+ - TCP/8994 for HTTP IPv6
+ - TCP/8995 for FTP (2)
+ - TCP/8996 for FTP IPv6
+ - UDP/8997 for TFTP
+ - UDP/8998 for TFTP IPv6
+ - TCP/8999 for SCP/SFTP
+ - TCP/9000 for SOCKS
+ - TCP/9001 for POP3
+ - TCP/9002 for IMAP
+ - TCP/9003 for SMTP
+
+ The test suite runs simple FTP, POP3, IMAP, SMTP, HTTP and TFTP stand-alone
+ servers on these ports to which it makes requests. For SSL tests, it runs
+ stunnel to handle encryption to the regular servers. For SSH, it runs a
+ standard OpenSSH server. For SOCKS4/5 tests SSH is used to perform the SOCKS
+ functionality and requires a SSH client and server.
+
+ The base port number shown above can be changed using runtests' -b option
+ to allow running more than one instance of the test suite simultaneously
+ on one machine.
+
+Run:
+ 'make test'. This builds the test suite support code and invokes the
+ 'runtests.pl' perl script to run all the tests. Edit the top variables
+ of that script in case you have some specific needs, or run the script
+ manually (after the support code has been built).
+
+ The script breaks on the first test that doesn't do OK. Use -a to prevent
+ the script from abort on the first error. Run the script with -v for more
+ verbose output. Use -d to run the test servers with debug output enabled as
+ well. Specifying -k keeps all the log files generated by the test intact.
+
+ Use -s for shorter output, or pass test numbers to run specific tests only
+ (like "./runtests.pl 3 4" to test 3 and 4 only). It also supports test case
+ ranges with 'to', as in "./runtests 3 to 9" which runs the seven tests from
+ 3 to 9. Any test numbers starting with ! are disabled, as are any test
+ numbers found in the file data/DISABLED (one per line).
+
+Shell startup scripts:
+ Tests which use the ssh test server, SCP/SFTP/SOCKS tests, might be badly
+ influenced by the output of system wide or user specific shell startup
+ scripts, .bashrc, .profile, /etc/csh.cshrc, .login, /etc/bashrc, etc. which
+ output text messages or escape sequences on user login. When these shell
+ startup messages or escape sequences are output they might corrupt the
+ expected stream of data which flows to the sftp-server or from the ssh
+ client which can result in bad test behaviour or even prevent the test
+ server from running.
+
+ If the test suite ssh or sftp server fails to start up and logs the message
+ 'Received message too long' then you are certainly suffering the unwanted
+ output of a shell startup script. Locate, cleanup or adjust the shell
+ script.
+
+Memory:
+ The test script will check that all allocated memory is freed properly IF
+ curl has been built with the CURLDEBUG define set. The script will
+ automatically detect if that is the case, and it will use the ../memanalyze
+ script to analyze the memory debugging output.
+
+ The -t option will enable torture testing mode, which runs each test
+ many times but causes a different memory allocation to fail on each
+ successive run. This tests the out of memory error handling code to
+ ensure that memory leaks do not occur even in those situations.
+
+Debug:
+ If a test case fails, you can conveniently get the script to invoke the
+ debugger (gdb) for you with the server running and the exact same command
+ line parameters that failed. Just invoke 'runtests.pl <test number> -g' and
+ then just type 'run' in the debugger to perform the command through the
+ debugger.
+
+ If a test case causes a core dump, analyze it by running gdb like:
+
+ # gdb ../curl/src core
+
+ ... and get a stack trace with the gdb command:
+
+ (gdb) where
+
+Logs:
+ All logs are generated in the logs/ subdirectory (it is emptied first
+ in the runtests.pl script). Use runtests.pl -k to keep the temporary files
+ after the test run.
+
+Data:
+ All test cases are put in the data/ subdirectory. Each test is stored in the
+ file named according to the test number.
+
+ See FILEFORMAT for the description of the test case files.
+
+Code coverage:
+ gcc provides a tool that can determine the code coverage figures for
+ the test suite. To use it, configure curl with
+ CFLAGS='-fprofile-arcs -ftest-coverage -g -O0'. Make sure you run the normal
+ and torture tests to get more full coverage, i.e. do:
+
+ make test
+ make test-torture
+
+ The graphical tool ggcov can be used to browse the source and create
+ coverage reports on *NIX hosts:
+
+ ggcov -r lib src
+
+ The text mode tool gcov may also be used, but it doesn't handle object files
+ in more than one directory very well.
+
+Remote testing:
+ The runtests.pl script provides some hooks to allow curl to be tested on a
+ machine where perl can not be run. The test framework in this case runs on
+ a workstation where perl is available, while curl itself is run on a remote
+ system using ssh or some other remote execution method. See the comments at
+ the beginning of runtests.pl for details.
+
+TEST CASE NUMBERS
+
+ So far, we've used this system:
+
+ 1 - 99 HTTP
+ 100 - 199 FTP*
+ 200 - 299 FILE*
+ 300 - 399 HTTPS
+ 400 - 499 FTPS
+ 500 - 599 libcurl source code tests, not using the curl command tool
+ 600 - 699 SCP/SFTP
+ 700 - 799 SOCKS4 (even numbers) and SOCK5 (odd numbers)
+ 800 - 899 POP3, IMAP, SMTP
+ 1000 - 1999 miscellaneous*
+ 2000 - x multiple sequential protocols per test case*
+
+ Since 30-apr-2003, there's nothing in the system that requires us to keep
+ within these number series, and those sections marked with * actually
+ contain tests for a variety of protocols. Each test case now specifies
+ its own server requirements, independent of test number.
+
+TODO:
+
+ * Add tests for TELNET, LDAP, DICT...
+ * SOCKS4/5 test deficiencies - no proxy authentication tests as SSH (the
+ test mechanism) doesn't support them
diff --git a/tests/certs/EdelCurlRoot-ca.cacert b/tests/certs/EdelCurlRoot-ca.cacert
new file mode 100644
index 0000000..8bcbc18
--- /dev/null
+++ b/tests/certs/EdelCurlRoot-ca.cacert
@@ -0,0 +1,85 @@
+Certificate:
+ Data:
+ Version: 3 (0x2)
+ Serial Number:
+ 0b:98:94:f5:ab:a6
+ Signature Algorithm: sha1WithRSAEncryption
+ Issuer:
+ countryName = NN
+ organizationName = Edel Curl Arctic Illudium Research Cloud
+ commonName = Nothern Nowhere Trust Anchor
+ Validity
+ Not Before: May 27 21:36:46 2010 GMT
+ Not After : Oct 30 21:36:46 2026 GMT
+ Subject:
+ countryName = NN
+ organizationName = Edel Curl Arctic Illudium Research Cloud
+ commonName = Nothern Nowhere Trust Anchor
+ Subject Public Key Info:
+ Public Key Algorithm: rsaEncryption
+ Public-Key: (2048 bit)
+ Modulus:
+ 00:c1:a9:0a:ef:76:06:7d:fe:78:3a:f1:0e:40:6d:
+ c2:5b:ae:8f:8d:7f:f0:d5:89:9e:42:2a:f0:17:94:
+ d9:2e:67:c7:2d:01:1c:95:a3:b1:a6:86:d4:12:3c:
+ 47:3a:70:e6:7b:1f:11:06:d3:73:ae:df:ca:24:19:
+ 03:e4:62:0a:eb:67:d4:dc:ef:9d:2d:e0:82:77:fe:
+ 2a:30:5a:fb:57:e5:b8:4f:36:52:4c:2f:57:ad:12:
+ 6a:94:3e:e4:48:a7:ad:a5:c0:3a:d0:4e:00:99:88:
+ 8f:bd:4a:70:be:3b:5b:6b:ff:5e:6f:29:6d:0c:a7:
+ 55:4a:e2:43:e7:49:0f:99:54:59:68:81:34:d8:a9:
+ fb:c8:0d:14:5a:40:cb:70:1e:f5:3b:c0:42:39:06:
+ f9:63:ad:d9:29:14:53:af:42:10:1d:18:95:b6:15:
+ 8a:d8:41:d8:37:31:0a:97:5a:1b:10:90:ac:1d:ff:
+ 6e:71:33:6b:7e:88:18:20:ed:be:35:ff:e7:69:48:
+ 05:c0:78:2e:04:46:f4:c2:8d:4d:70:6e:42:fa:93:
+ eb:ce:12:3b:d1:f5:ce:3f:29:5c:8c:bd:59:83:e4:
+ a1:c1:3c:8e:3e:38:55:f3:99:18:b0:df:f6:74:c9:
+ 8e:28:f4:38:0d:45:20:d6:db:c0:73:a2:e6:8c:6e:
+ 98:9f
+ Exponent: 65537 (0x10001)
+ X509v3 extensions:
+ X509v3 Basic Constraints: critical
+ CA:TRUE
+ X509v3 Key Usage: critical
+ Certificate Sign, CRL Sign
+ X509v3 Subject Key Identifier:
+ AD:3E:E2:39:07:B8:5C:AA:26:90:94:4C:26:69:21:83:E2:4E:36:94
+ Signature Algorithm: sha1WithRSAEncryption
+ 86:1f:9d:dd:45:11:c8:6b:f1:97:1a:f0:25:b2:0c:f7:1f:58:
+ c4:6a:a5:56:07:32:cb:2d:7a:8c:ae:47:1e:7d:e7:73:6c:3b:
+ 96:1e:75:b4:e5:89:05:a7:7e:b6:52:56:5a:e2:6b:38:e4:18:
+ 3c:64:6f:be:bd:d3:01:76:b4:83:7f:7a:1e:9c:cb:40:1b:9a:
+ dd:43:cb:9a:db:8a:f8:76:50:ab:ad:85:7f:cf:3a:6f:4b:e2:
+ 27:b0:8c:a9:0a:e0:d8:45:00:05:5e:29:ab:a0:8a:78:e5:09:
+ 89:48:8a:0d:42:49:1e:ad:c2:85:2f:29:9d:af:2e:c8:ef:b9:
+ dc:74:33:eb:e9:45:e9:a2:b3:00:ba:76:0b:74:59:c9:a8:96:
+ 4c:f3:cd:9b:34:5a:4a:87:b2:6a:52:74:5b:be:f3:81:f8:32:
+ d0:1f:c9:cc:9f:8a:6a:eb:6e:f3:6d:2c:54:20:86:f6:87:62:
+ c0:ed:55:03:9d:97:a9:5a:ae:39:a0:7e:e4:a6:95:e9:26:19:
+ 91:e6:0f:b6:18:f7:49:6c:a7:ce:fd:c1:04:c2:f9:27:27:4c:
+ 59:e9:bf:7a:f6:65:a0:d9:a0:71:a6:54:c6:6f:9a:5d:23:19:
+ 57:49:59:2c:06:91:3e:28:9b:c1:6f:f2:2d:9a:24:a7:0b:da:
+ cd:cc:f3:bc
+-----BEGIN CERTIFICATE-----
+MIIDkDCCAnigAwIBAgIGC5iU9aumMA0GCSqGSIb3DQEBBQUAMGcxCzAJBgNVBAYT
+Ak5OMTEwLwYDVQQKDChFZGVsIEN1cmwgQXJjdGljIElsbHVkaXVtIFJlc2VhcmNo
+IENsb3VkMSUwIwYDVQQDDBxOb3RoZXJuIE5vd2hlcmUgVHJ1c3QgQW5jaG9yMB4X
+DTEwMDUyNzIxMzY0NloXDTI2MTAzMDIxMzY0NlowZzELMAkGA1UEBhMCTk4xMTAv
+BgNVBAoMKEVkZWwgQ3VybCBBcmN0aWMgSWxsdWRpdW0gUmVzZWFyY2ggQ2xvdWQx
+JTAjBgNVBAMMHE5vdGhlcm4gTm93aGVyZSBUcnVzdCBBbmNob3IwggEiMA0GCSqG
+SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDBqQrvdgZ9/ng68Q5AbcJbro+Nf/DViZ5C
+KvAXlNkuZ8ctARyVo7GmhtQSPEc6cOZ7HxEG03Ou38okGQPkYgrrZ9Tc750t4IJ3
+/iowWvtX5bhPNlJML1etEmqUPuRIp62lwDrQTgCZiI+9SnC+O1tr/15vKW0Mp1VK
+4kPnSQ+ZVFlogTTYqfvIDRRaQMtwHvU7wEI5BvljrdkpFFOvQhAdGJW2FYrYQdg3
+MQqXWhsQkKwd/25xM2t+iBgg7b41/+dpSAXAeC4ERvTCjU1wbkL6k+vOEjvR9c4/
+KVyMvVmD5KHBPI4+OFXzmRiw3/Z0yY4o9DgNRSDW28BzouaMbpifAgMBAAGjQjBA
+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBStPuI5
+B7hcqiaQlEwmaSGD4k42lDANBgkqhkiG9w0BAQUFAAOCAQEAhh+d3UURyGvxlxrw
+JbIM9x9YxGqlVgcyyy16jK5HHn3nc2w7lh51tOWJBad+tlJWWuJrOOQYPGRvvr3T
+AXa0g396HpzLQBua3UPLmtuK+HZQq62Ff886b0viJ7CMqQrg2EUABV4pq6CKeOUJ
+iUiKDUJJHq3ChS8pna8uyO+53HQz6+lF6aKzALp2C3RZyaiWTPPNmzRaSoeyalJ0
+W77zgfgy0B/JzJ+Kautu820sVCCG9odiwO1VA52XqVquOaB+5KaV6SYZkeYPthj3
+SWynzv3BBML5JydMWem/evZloNmgcaZUxm+aXSMZV0lZLAaRPiibwW/yLZokpwva
+zczzvA==
+-----END CERTIFICATE-----
diff --git a/tests/certs/EdelCurlRoot-ca.cnf b/tests/certs/EdelCurlRoot-ca.cnf
new file mode 100644
index 0000000..ba99881
--- /dev/null
+++ b/tests/certs/EdelCurlRoot-ca.cnf
@@ -0,0 +1,11 @@
+[ ca ]
+default_ca = EdelCurlRoot
+
+[ EdelCurlRoot ]
+database = EdelCurlRoot-ca.db
+certificate = EdelCurlRoot-ca.crt
+private_key = EdelCurlRoot-ca.key
+crlnumber = EdelCurlRoot-ca.cnt
+default_md = sha1
+default_days = 365
+default_crl_days = 30
diff --git a/tests/certs/EdelCurlRoot-ca.crt b/tests/certs/EdelCurlRoot-ca.crt
new file mode 100644
index 0000000..8bcbc18
--- /dev/null
+++ b/tests/certs/EdelCurlRoot-ca.crt
@@ -0,0 +1,85 @@
+Certificate:
+ Data:
+ Version: 3 (0x2)
+ Serial Number:
+ 0b:98:94:f5:ab:a6
+ Signature Algorithm: sha1WithRSAEncryption
+ Issuer:
+ countryName = NN
+ organizationName = Edel Curl Arctic Illudium Research Cloud
+ commonName = Nothern Nowhere Trust Anchor
+ Validity
+ Not Before: May 27 21:36:46 2010 GMT
+ Not After : Oct 30 21:36:46 2026 GMT
+ Subject:
+ countryName = NN
+ organizationName = Edel Curl Arctic Illudium Research Cloud
+ commonName = Nothern Nowhere Trust Anchor
+ Subject Public Key Info:
+ Public Key Algorithm: rsaEncryption
+ Public-Key: (2048 bit)
+ Modulus:
+ 00:c1:a9:0a:ef:76:06:7d:fe:78:3a:f1:0e:40:6d:
+ c2:5b:ae:8f:8d:7f:f0:d5:89:9e:42:2a:f0:17:94:
+ d9:2e:67:c7:2d:01:1c:95:a3:b1:a6:86:d4:12:3c:
+ 47:3a:70:e6:7b:1f:11:06:d3:73:ae:df:ca:24:19:
+ 03:e4:62:0a:eb:67:d4:dc:ef:9d:2d:e0:82:77:fe:
+ 2a:30:5a:fb:57:e5:b8:4f:36:52:4c:2f:57:ad:12:
+ 6a:94:3e:e4:48:a7:ad:a5:c0:3a:d0:4e:00:99:88:
+ 8f:bd:4a:70:be:3b:5b:6b:ff:5e:6f:29:6d:0c:a7:
+ 55:4a:e2:43:e7:49:0f:99:54:59:68:81:34:d8:a9:
+ fb:c8:0d:14:5a:40:cb:70:1e:f5:3b:c0:42:39:06:
+ f9:63:ad:d9:29:14:53:af:42:10:1d:18:95:b6:15:
+ 8a:d8:41:d8:37:31:0a:97:5a:1b:10:90:ac:1d:ff:
+ 6e:71:33:6b:7e:88:18:20:ed:be:35:ff:e7:69:48:
+ 05:c0:78:2e:04:46:f4:c2:8d:4d:70:6e:42:fa:93:
+ eb:ce:12:3b:d1:f5:ce:3f:29:5c:8c:bd:59:83:e4:
+ a1:c1:3c:8e:3e:38:55:f3:99:18:b0:df:f6:74:c9:
+ 8e:28:f4:38:0d:45:20:d6:db:c0:73:a2:e6:8c:6e:
+ 98:9f
+ Exponent: 65537 (0x10001)
+ X509v3 extensions:
+ X509v3 Basic Constraints: critical
+ CA:TRUE
+ X509v3 Key Usage: critical
+ Certificate Sign, CRL Sign
+ X509v3 Subject Key Identifier:
+ AD:3E:E2:39:07:B8:5C:AA:26:90:94:4C:26:69:21:83:E2:4E:36:94
+ Signature Algorithm: sha1WithRSAEncryption
+ 86:1f:9d:dd:45:11:c8:6b:f1:97:1a:f0:25:b2:0c:f7:1f:58:
+ c4:6a:a5:56:07:32:cb:2d:7a:8c:ae:47:1e:7d:e7:73:6c:3b:
+ 96:1e:75:b4:e5:89:05:a7:7e:b6:52:56:5a:e2:6b:38:e4:18:
+ 3c:64:6f:be:bd:d3:01:76:b4:83:7f:7a:1e:9c:cb:40:1b:9a:
+ dd:43:cb:9a:db:8a:f8:76:50:ab:ad:85:7f:cf:3a:6f:4b:e2:
+ 27:b0:8c:a9:0a:e0:d8:45:00:05:5e:29:ab:a0:8a:78:e5:09:
+ 89:48:8a:0d:42:49:1e:ad:c2:85:2f:29:9d:af:2e:c8:ef:b9:
+ dc:74:33:eb:e9:45:e9:a2:b3:00:ba:76:0b:74:59:c9:a8:96:
+ 4c:f3:cd:9b:34:5a:4a:87:b2:6a:52:74:5b:be:f3:81:f8:32:
+ d0:1f:c9:cc:9f:8a:6a:eb:6e:f3:6d:2c:54:20:86:f6:87:62:
+ c0:ed:55:03:9d:97:a9:5a:ae:39:a0:7e:e4:a6:95:e9:26:19:
+ 91:e6:0f:b6:18:f7:49:6c:a7:ce:fd:c1:04:c2:f9:27:27:4c:
+ 59:e9:bf:7a:f6:65:a0:d9:a0:71:a6:54:c6:6f:9a:5d:23:19:
+ 57:49:59:2c:06:91:3e:28:9b:c1:6f:f2:2d:9a:24:a7:0b:da:
+ cd:cc:f3:bc
+-----BEGIN CERTIFICATE-----
+MIIDkDCCAnigAwIBAgIGC5iU9aumMA0GCSqGSIb3DQEBBQUAMGcxCzAJBgNVBAYT
+Ak5OMTEwLwYDVQQKDChFZGVsIEN1cmwgQXJjdGljIElsbHVkaXVtIFJlc2VhcmNo
+IENsb3VkMSUwIwYDVQQDDBxOb3RoZXJuIE5vd2hlcmUgVHJ1c3QgQW5jaG9yMB4X
+DTEwMDUyNzIxMzY0NloXDTI2MTAzMDIxMzY0NlowZzELMAkGA1UEBhMCTk4xMTAv
+BgNVBAoMKEVkZWwgQ3VybCBBcmN0aWMgSWxsdWRpdW0gUmVzZWFyY2ggQ2xvdWQx
+JTAjBgNVBAMMHE5vdGhlcm4gTm93aGVyZSBUcnVzdCBBbmNob3IwggEiMA0GCSqG
+SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDBqQrvdgZ9/ng68Q5AbcJbro+Nf/DViZ5C
+KvAXlNkuZ8ctARyVo7GmhtQSPEc6cOZ7HxEG03Ou38okGQPkYgrrZ9Tc750t4IJ3
+/iowWvtX5bhPNlJML1etEmqUPuRIp62lwDrQTgCZiI+9SnC+O1tr/15vKW0Mp1VK
+4kPnSQ+ZVFlogTTYqfvIDRRaQMtwHvU7wEI5BvljrdkpFFOvQhAdGJW2FYrYQdg3
+MQqXWhsQkKwd/25xM2t+iBgg7b41/+dpSAXAeC4ERvTCjU1wbkL6k+vOEjvR9c4/
+KVyMvVmD5KHBPI4+OFXzmRiw3/Z0yY4o9DgNRSDW28BzouaMbpifAgMBAAGjQjBA
+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBStPuI5
+B7hcqiaQlEwmaSGD4k42lDANBgkqhkiG9w0BAQUFAAOCAQEAhh+d3UURyGvxlxrw
+JbIM9x9YxGqlVgcyyy16jK5HHn3nc2w7lh51tOWJBad+tlJWWuJrOOQYPGRvvr3T
+AXa0g396HpzLQBua3UPLmtuK+HZQq62Ff886b0viJ7CMqQrg2EUABV4pq6CKeOUJ
+iUiKDUJJHq3ChS8pna8uyO+53HQz6+lF6aKzALp2C3RZyaiWTPPNmzRaSoeyalJ0
+W77zgfgy0B/JzJ+Kautu820sVCCG9odiwO1VA52XqVquOaB+5KaV6SYZkeYPthj3
+SWynzv3BBML5JydMWem/evZloNmgcaZUxm+aXSMZV0lZLAaRPiibwW/yLZokpwva
+zczzvA==
+-----END CERTIFICATE-----
diff --git a/tests/certs/EdelCurlRoot-ca.csr b/tests/certs/EdelCurlRoot-ca.csr
new file mode 100644
index 0000000..2df94f5
--- /dev/null
+++ b/tests/certs/EdelCurlRoot-ca.csr
@@ -0,0 +1,17 @@
+-----BEGIN CERTIFICATE REQUEST-----
+MIICrDCCAZQCAQAwZzELMAkGA1UEBhMCTk4xMTAvBgNVBAoMKEVkZWwgQ3VybCBB
+cmN0aWMgSWxsdWRpdW0gUmVzZWFyY2ggQ2xvdWQxJTAjBgNVBAMMHE5vdGhlcm4g
+Tm93aGVyZSBUcnVzdCBBbmNob3IwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
+AoIBAQDBqQrvdgZ9/ng68Q5AbcJbro+Nf/DViZ5CKvAXlNkuZ8ctARyVo7GmhtQS
+PEc6cOZ7HxEG03Ou38okGQPkYgrrZ9Tc750t4IJ3/iowWvtX5bhPNlJML1etEmqU
+PuRIp62lwDrQTgCZiI+9SnC+O1tr/15vKW0Mp1VK4kPnSQ+ZVFlogTTYqfvIDRRa
+QMtwHvU7wEI5BvljrdkpFFOvQhAdGJW2FYrYQdg3MQqXWhsQkKwd/25xM2t+iBgg
+7b41/+dpSAXAeC4ERvTCjU1wbkL6k+vOEjvR9c4/KVyMvVmD5KHBPI4+OFXzmRiw
+3/Z0yY4o9DgNRSDW28BzouaMbpifAgMBAAGgADANBgkqhkiG9w0BAQsFAAOCAQEA
+eFMy55kFke/e9mrGloRUh1o8dxmzSiVwVCw5DTZQzTFNAMSOZXIId8k2IeHSUd84
+ZyJ1UNyJn2EFcwgaYaMtvZ8xMWR2W0C7lBvOOcjvWmiGze9F2Z5XMQzL8cjkK4jW
+RKIq9b0W6TC8lLO5F2eJpW6BoTQ8cBCDiVIDlCm7xZxPRjHowuyM0Tpewq2PltC1
+p8DbQipZWl5LPaHBSZSmIuUgOBU9porH/Vn0oWXxYfts59103VJY5YKkdz0PiqqA
+5kWYCMFDZyL+nZ2aIol4r8nXkN9MuPOU12aHqPGcDlaGS2i5zfm2Ywsg110k+NCk
+AmqhjnrQjvJhif3rGO4+qw==
+-----END CERTIFICATE REQUEST-----
diff --git a/tests/certs/EdelCurlRoot-ca.der b/tests/certs/EdelCurlRoot-ca.der
new file mode 100644
index 0000000..1eaf424
--- /dev/null
+++ b/tests/certs/EdelCurlRoot-ca.der
Binary files differ
diff --git a/tests/certs/EdelCurlRoot-ca.key b/tests/certs/EdelCurlRoot-ca.key
new file mode 100644
index 0000000..9a1303a
--- /dev/null
+++ b/tests/certs/EdelCurlRoot-ca.key
@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEowIBAAKCAQEAwakK73YGff54OvEOQG3CW66PjX/w1YmeQirwF5TZLmfHLQEc
+laOxpobUEjxHOnDmex8RBtNzrt/KJBkD5GIK62fU3O+dLeCCd/4qMFr7V+W4TzZS
+TC9XrRJqlD7kSKetpcA60E4AmYiPvUpwvjtba/9ebyltDKdVSuJD50kPmVRZaIE0
+2Kn7yA0UWkDLcB71O8BCOQb5Y63ZKRRTr0IQHRiVthWK2EHYNzEKl1obEJCsHf9u
+cTNrfogYIO2+Nf/naUgFwHguBEb0wo1NcG5C+pPrzhI70fXOPylcjL1Zg+ShwTyO
+PjhV85kYsN/2dMmOKPQ4DUUg1tvAc6LmjG6YnwIDAQABAoIBAEQculXigwIJYCwK
+4GJUuEkaqi6wUvonvtuy0mLY3VHu+iSgAXe37SGOxkPro3mwf7/J+2kVMdjNqQDt
+M2s9+G03Ray3MecS0ZB2ekwrk78kcqCZkHRvKj0a/xVI0W2kW/SyGX1uEdPuLe/7
+oI+nvM3NMV+TiGEs8Vi3H/7WuX/JiEpBFNtgKqlT1ZdTblj+igrAT30on9FBfOyo
+NtkxIL7YY1TAZ7YjdpZWrAAyo7gBjXAmeslnJ9IHzKPBsuSXQ4A7JjGOAGyv3INi
+D8mwoa/8pNaZTxFCCRnvezA3JvVa4gWigZtb0JX5Z+H1nERZWoJq4Cj4kMa3ERuC
+iyVXijECgYEA4q5bkQTrQ7liRCrNETmbVspmbuBc6XaAFrYwbrxlzvl2nyumCgKg
+GaPeP2Skh5nPz+1x1EXmYAqXsAfLoE4z6kk1D1Ws4FWxxaAuwlWTmoJ2HXl2dcbR
+f0HLgQ/oswYtNVaP7HASmEf5Y3DeGLDrojh1aOE8kq/MpBHsO28qTA0CgYEA2rVV
+eTfj4VV5tpVlfiU5D947qIERVwIQ+FW8Epokwct1VgUeWwXMQFJFX6KWQdkB+Ktj
+vknBSrN+VmwBMMhuUTpMxvaZFL5UCyLUUt2K8azNDdg9FcfH8dSZnnNoo8aH9k6A
+v5gFk+QQ7VgGVBeLv22PG1zknj4SsGZhzx9H0FsCgYB/8uq8cIpbL8jHsWEO1/VW
+h+hJrVrEbJ7gMvYjizPsH+NU9M5D2DeGQXixT52O7MLgGqalqs7eZxw3wC6vzXSA
+SdIpVbK+7Z/qbP/3sVYfYIRLHsQ+tnqJ2hmEP/aZFmNuN+4FBz13tyiNeKfkR/i5
+GCUtjfUi1xgrg/JTmevGAQKBgQC9QEh0Gj7gj9xAeEpYu9ECwCUTjIv6pFkW6ulR
+l3zTDUG9a7R2wy+ZQReyx7gJxsSD75rh4GSYRXW/RrpJAkcjlrU1PdH9Nyz2be8Y
+vYgr1IGjx0gkfrmvs24yxF75ySOBqTCTmfLJpIJZPuBLCAzvWtiIrvtNSx1U82MT
+nVfBHQKBgDJZQmr5lqdo5Zv/VP+w+VtxeX2oCgw7Mn56TW4IzDEL6ly+sKNNs+Ji
+pp/c2XYw24o7318yV70oWVWscay1SOjK7RdoCat590iuTGMSYyY8pMkgK+QuDqDe
+1Hhyb0iPorMS5wZXx/TROS4+4GOIHLAtZOZ8B+20tczp7HGqUIK1
+-----END RSA PRIVATE KEY-----
diff --git a/tests/certs/EdelCurlRoot-ca.prm b/tests/certs/EdelCurlRoot-ca.prm
new file mode 100644
index 0000000..4c53ef5
--- /dev/null
+++ b/tests/certs/EdelCurlRoot-ca.prm
@@ -0,0 +1,18 @@
+extensions = x509v3
+[ req ]
+default_bits = 2048
+distinguished_name = req_DN
+default_md = sha256
+string_mask = utf8only
+[ req_DN ]
+countryName = "Country Name"
+countryName_value = NN
+organizationName = "Organization Name"
+organizationName_value = Edel Curl Arctic Illudium Research Cloud
+commonName = "Common Name"
+commonName_value = Nothern Nowhere Trust Anchor
+[ x509v3 ]
+basicConstraints = critical,CA:true
+keyUsage = critical,keyCertSign,cRLSign
+subjectKeyIdentifier = hash
+
diff --git a/tests/certs/Server-localhost-sv.crl b/tests/certs/Server-localhost-sv.crl
new file mode 100644
index 0000000..804655d
--- /dev/null
+++ b/tests/certs/Server-localhost-sv.crl
@@ -0,0 +1,12 @@
+-----BEGIN X509 CRL-----
+MIIB2zCBxAIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJOTjExMC8GA1UE
+CgwoRWRlbCBDdXJsIEFyY3RpYyBJbGx1ZGl1bSBSZXNlYXJjaCBDbG91ZDElMCMG
+A1UEAwwcTm90aGVybiBOb3doZXJlIFRydXN0IEFuY2hvchcNMTAwNTI3MjEzNzEx
+WhcNMTAwNjI2MjEzNzExWjAZMBcCBguYlPl8ahcNMTAwNTI3MjEzNzExWqAOMAww
+CgYDVR0UBAMCAQEwDQYJKoZIhvcNAQEFBQADggEBAFuPZJ/cNNCeAzkSxVvPPPRX
+Wsv9T6Dt61C5Fmq9eSNN2kRf7/dq5A5nqTIlHbXXiLdj3UqNhUHXe2oA1UpbdHz9
+0JlfwWm1Y/gMr1fh1n0oFebEtCuOgDRpd07Uiz8AqOUBykDNDUlMvVwR9raHL8hj
+NRwzugsfIxl0CvLLqrBpUWMxW3qemk4cWW39yrDdZgKo6eOZAOR3FQYlLIrw6Jcr
+Kmm0PjdcJIfRgJvNysgyx1dIIKe7QXvFTR/QzdHWIWTkiYIW7wUKSzSICvDCr094
+eo3nr3n9BtOqT61Z1m6FGCP6Mm0wFl6xLTCNd6ygfFo7pcAdWlUsdBgKzics0Kc=
+-----END X509 CRL-----
diff --git a/tests/certs/Server-localhost-sv.crt b/tests/certs/Server-localhost-sv.crt
new file mode 100644
index 0000000..9a3d944
--- /dev/null
+++ b/tests/certs/Server-localhost-sv.crt
@@ -0,0 +1,81 @@
+Certificate:
+ Data:
+ Version: 3 (0x2)
+ Serial Number:
+ 0b:98:94:f9:7c:6a
+ Signature Algorithm: sha1WithRSAEncryption
+ Issuer:
+ countryName = NN
+ organizationName = Edel Curl Arctic Illudium Research Cloud
+ commonName = Nothern Nowhere Trust Anchor
+ Validity
+ Not Before: May 27 21:37:11 2010 GMT
+ Not After : Aug 13 21:37:11 2018 GMT
+ Subject:
+ countryName = NN
+ organizationName = Edel Curl Arctic Illudium Research Cloud
+ commonName = localhost
+ Subject Public Key Info:
+ Public Key Algorithm: rsaEncryption
+ Public-Key: (1024 bit)
+ Modulus:
+ 00:b0:27:79:26:2c:b9:e4:d1:81:0a:09:d2:76:fe:
+ 9a:e1:05:68:01:b3:72:77:97:38:e4:60:1c:71:9d:
+ 99:f7:26:7b:21:b5:6d:aa:9f:14:76:07:6c:a4:2a:
+ 2d:7d:ee:f6:6f:8a:58:c4:93:de:fe:a1:25:0f:ff:
+ 57:49:c0:d9:94:d9:07:79:bf:8c:6d:fa:f1:18:82:
+ 67:a0:3f:d7:31:03:82:ec:b9:39:69:07:ec:ec:93:
+ 17:5b:1a:72:91:93:b2:6b:98:66:63:fe:61:29:e7:
+ ad:86:0e:04:ba:bf:8b:55:57:61:a5:4a:f6:ca:e7:
+ c6:d1:b8:65:42:ab:67:64:17
+ Exponent: 65537 (0x10001)
+ X509v3 extensions:
+ X509v3 Subject Alternative Name:
+ DNS:localhost
+ X509v3 Key Usage:
+ Key Encipherment
+ X509v3 Extended Key Usage:
+ TLS Web Server Authentication
+ X509v3 Subject Key Identifier:
+ BC:69:86:84:70:3A:AD:DE:08:2A:70:C6:3B:47:8C:11:3F:E0:9A:6D
+ X509v3 Authority Key Identifier:
+ keyid:AD:3E:E2:39:07:B8:5C:AA:26:90:94:4C:26:69:21:83:E2:4E:36:94
+
+ X509v3 Basic Constraints: critical
+ CA:FALSE
+ Signature Algorithm: sha1WithRSAEncryption
+ 7b:f0:b0:a0:d9:d0:91:38:9b:fe:cf:78:c8:d6:30:5d:87:9d:
+ b3:b9:6e:8b:5a:73:74:93:cb:30:49:d1:00:79:9d:5a:c2:71:
+ a3:93:5f:de:d3:5a:0c:fb:6d:41:83:89:1b:4f:0d:1c:65:0c:
+ 1a:0c:0f:96:79:62:90:e1:74:04:dd:c6:d8:cf:0f:5f:0f:28:
+ 87:d7:86:56:90:b4:d0:88:80:f1:a7:cd:fd:0b:13:58:bb:6d:
+ e6:ab:44:f6:9b:d6:cc:c7:db:3d:3a:90:c4:20:72:f4:38:38:
+ c0:ef:80:1d:60:3f:4e:30:40:11:56:29:70:aa:17:91:90:5f:
+ 70:0b:89:51:af:17:a8:ed:20:4e:76:bb:cf:a8:88:9a:25:0f:
+ 3a:96:26:17:50:2a:af:f3:8b:21:9c:cf:ff:f9:20:fc:fe:c0:
+ 37:95:c7:cd:0d:7a:53:d9:26:12:38:2c:f6:03:95:1b:da:d0:
+ 08:f7:32:91:07:a7:35:0c:14:00:44:c7:43:fb:23:2e:14:44:
+ e6:ee:a9:c9:20:37:09:b8:ae:21:4f:4b:b7:86:4d:e3:41:84:
+ 15:4e:1a:29:00:03:a8:92:99:3c:75:ea:43:0f:e3:2b:f7:17:
+ b1:1b:87:80:04:d3:a7:73:b1:5e:85:38:7d:89:01:16:19:f6:
+ c4:e1:1b:75
+-----BEGIN CERTIFICATE-----
+MIIDQTCCAimgAwIBAgIGC5iU+XxqMA0GCSqGSIb3DQEBBQUAMGcxCzAJBgNVBAYT
+Ak5OMTEwLwYDVQQKDChFZGVsIEN1cmwgQXJjdGljIElsbHVkaXVtIFJlc2VhcmNo
+IENsb3VkMSUwIwYDVQQDDBxOb3RoZXJuIE5vd2hlcmUgVHJ1c3QgQW5jaG9yMB4X
+DTEwMDUyNzIxMzcxMVoXDTE4MDgxMzIxMzcxMVowVDELMAkGA1UEBhMCTk4xMTAv
+BgNVBAoMKEVkZWwgQ3VybCBBcmN0aWMgSWxsdWRpdW0gUmVzZWFyY2ggQ2xvdWQx
+EjAQBgNVBAMMCWxvY2FsaG9zdDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA
+sCd5Jiy55NGBCgnSdv6a4QVoAbNyd5c45GAccZ2Z9yZ7IbVtqp8UdgdspCotfe72
+b4pYxJPe/qElD/9XScDZlNkHeb+MbfrxGIJnoD/XMQOC7Lk5aQfs7JMXWxpykZOy
+a5hmY/5hKeethg4Eur+LVVdhpUr2yufG0bhlQqtnZBcCAwEAAaOBiTCBhjAUBgNV
+HREEDTALgglsb2NhbGhvc3QwCwYDVR0PBAQDAgUgMBMGA1UdJQQMMAoGCCsGAQUF
+BwMBMB0GA1UdDgQWBBS8aYaEcDqt3ggqcMY7R4wRP+CabTAfBgNVHSMEGDAWgBSt
+PuI5B7hcqiaQlEwmaSGD4k42lDAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3DQEBBQUA
+A4IBAQB78LCg2dCROJv+z3jI1jBdh52zuW6LWnN0k8swSdEAeZ1awnGjk1/e01oM
++21Bg4kbTw0cZQwaDA+WeWKQ4XQE3cbYzw9fDyiH14ZWkLTQiIDxp839CxNYu23m
+q0T2m9bMx9s9OpDEIHL0ODjA74AdYD9OMEARVilwqheRkF9wC4lRrxeo7SBOdrvP
+qIiaJQ86liYXUCqv84shnM//+SD8/sA3lcfNDXpT2SYSOCz2A5Ub2tAI9zKRB6c1
+DBQARMdD+yMuFETm7qnJIDcJuK4hT0u3hk3jQYQVThopAAOokpk8depDD+Mr9xex
+G4eABNOnc7FehTh9iQEWGfbE4Rt1
+-----END CERTIFICATE-----
diff --git a/tests/certs/Server-localhost-sv.csr b/tests/certs/Server-localhost-sv.csr
new file mode 100644
index 0000000..a8773f5
--- /dev/null
+++ b/tests/certs/Server-localhost-sv.csr
@@ -0,0 +1,11 @@
+-----BEGIN CERTIFICATE REQUEST-----
+MIIBkzCB/QIBADBUMQswCQYDVQQGEwJOTjExMC8GA1UECgwoRWRlbCBDdXJsIEFy
+Y3RpYyBJbGx1ZGl1bSBSZXNlYXJjaCBDbG91ZDESMBAGA1UEAwwJbG9jYWxob3N0
+MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCwJ3kmLLnk0YEKCdJ2/prhBWgB
+s3J3lzjkYBxxnZn3JnshtW2qnxR2B2ykKi197vZviljEk97+oSUP/1dJwNmU2Qd5
+v4xt+vEYgmegP9cxA4LsuTlpB+zskxdbGnKRk7JrmGZj/mEp562GDgS6v4tVV2Gl
+SvbK58bRuGVCq2dkFwIDAQABoAAwDQYJKoZIhvcNAQELBQADgYEAlIivGkhU8iph
+eZQAaiwakIwPx1TPA3+Dl4tbStTr3Ludd8rjZMGPRXKU+wjvfhCmDlyk90yOun2C
+lPIT8W/ibXNgRF1vz+eFofjM0hZtNPOX4G18wwD5y0OTr7obyqJPKAZsJZh6L3YE
+aARr27RCoFv92hFwVr181wAU+bVCekA=
+-----END CERTIFICATE REQUEST-----
diff --git a/tests/certs/Server-localhost-sv.der b/tests/certs/Server-localhost-sv.der
new file mode 100644
index 0000000..766cf53
--- /dev/null
+++ b/tests/certs/Server-localhost-sv.der
Binary files differ
diff --git a/tests/certs/Server-localhost-sv.dhp b/tests/certs/Server-localhost-sv.dhp
new file mode 100644
index 0000000..b61c28b
--- /dev/null
+++ b/tests/certs/Server-localhost-sv.dhp
@@ -0,0 +1,5 @@
+-----BEGIN DH PARAMETERS-----
+MIGHAoGBAP5mA7oYimErFUulbvNC8V0HwyB62NCj6TZb6YXJwElCksQc8RyHnkrY
+9Wx2+lduFqHjUWalgVF7Gma7CfR/pt+fiU6Jn2vWR2v7KT6hYeRKsJrONJlth+NK
+V7/d4zyvleJ/VSp0TuuSxmMMQ6hG3i5YhSGXyCh4h0pl4Wu/hdVTAgEC
+-----END DH PARAMETERS-----
diff --git a/tests/certs/Server-localhost-sv.key b/tests/certs/Server-localhost-sv.key
new file mode 100644
index 0000000..8ade26a
--- /dev/null
+++ b/tests/certs/Server-localhost-sv.key
@@ -0,0 +1,15 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICXQIBAAKBgQCwJ3kmLLnk0YEKCdJ2/prhBWgBs3J3lzjkYBxxnZn3JnshtW2q
+nxR2B2ykKi197vZviljEk97+oSUP/1dJwNmU2Qd5v4xt+vEYgmegP9cxA4LsuTlp
+B+zskxdbGnKRk7JrmGZj/mEp562GDgS6v4tVV2GlSvbK58bRuGVCq2dkFwIDAQAB
+AoGBAKa0JHWZHC9MiSa71t5f4qiTGjOJ5AkDJocR4bkv4dZAJ4TmEqvGsnFkY08U
+z0p/i95Q+eLG4eDtFYsHJU8Z343odktK99BUJzkDzqWT9RMzJ5Ykx6LbldJyW5NN
+IwvhDuW3rq8fbCMr+NGe9chc1Rg2lrfeEJDwjki/drBQs7zpAkEA3R6QEcuST7Gq
+JzjfU9uLD2tHLYZFNzS4dm4PvwC2aK7OdEOm7VkXFwUyP97QjwPV7fabrQ2QjwGg
+ek+nVEdH9QJBAMvxFickez9eqgiMfZbfY8t5I+Dxz69ZVGsPvl/6xhiUvgxjREM7
+EnScf86HwlBnteoUtMptAKu7Dbq5inPbkFsCQCV8FuRNZGJKNhQsGf/3Sd21S/21
+s2omb9bz1YuFrWaVq74d8eBup/FpGhmlxilYdx2+Hqn5kLYNiozxj+ZDpzkCQQC8
+7VJAYKNsSR3rXXra0Yd5b3e1Y02qe26g36zU7VOmYeTNRQhv38FxFamwgkOYiPsV
+Jql0/RWqAVburAN+4OARAkB9FwUtKyhs7FM4N9bXi+c8m42hkBv+dSim534tPijS
+UCcCONLEQTv4yjlCOwTKMVDoajkWH1A2e7psTmIR+zwc
+-----END RSA PRIVATE KEY-----
diff --git a/tests/certs/Server-localhost-sv.p12 b/tests/certs/Server-localhost-sv.p12
new file mode 100644
index 0000000..d7b8441
--- /dev/null
+++ b/tests/certs/Server-localhost-sv.p12
Binary files differ
diff --git a/tests/certs/Server-localhost-sv.pem b/tests/certs/Server-localhost-sv.pem
new file mode 100644
index 0000000..86b48b3
--- /dev/null
+++ b/tests/certs/Server-localhost-sv.pem
@@ -0,0 +1,126 @@
+extensions = x509v3
+[ x509v3 ]
+subjectAltName = DNS:localhost
+keyUsage = keyEncipherment
+extendedKeyUsage = serverAuth
+subjectKeyIdentifier = hash
+authorityKeyIdentifier = keyid
+basicConstraints = critical,CA:false
+[ req ]
+default_bits = 1024
+distinguished_name = req_DN
+default_md = sha256
+string_mask = utf8only
+[ req_DN ]
+countryName = "Country Name is Northern Nowhere"
+countryName_value = NN
+organizationName = "Organization Name"
+organizationName_value = Edel Curl Arctic Illudium Research Cloud
+commonName = "Common Name"
+commonName_value = localhost
+
+[something]
+# The key
+# the certficate
+# some dhparam
+-----BEGIN RSA PRIVATE KEY-----
+MIICXQIBAAKBgQCwJ3kmLLnk0YEKCdJ2/prhBWgBs3J3lzjkYBxxnZn3JnshtW2q
+nxR2B2ykKi197vZviljEk97+oSUP/1dJwNmU2Qd5v4xt+vEYgmegP9cxA4LsuTlp
+B+zskxdbGnKRk7JrmGZj/mEp562GDgS6v4tVV2GlSvbK58bRuGVCq2dkFwIDAQAB
+AoGBAKa0JHWZHC9MiSa71t5f4qiTGjOJ5AkDJocR4bkv4dZAJ4TmEqvGsnFkY08U
+z0p/i95Q+eLG4eDtFYsHJU8Z343odktK99BUJzkDzqWT9RMzJ5Ykx6LbldJyW5NN
+IwvhDuW3rq8fbCMr+NGe9chc1Rg2lrfeEJDwjki/drBQs7zpAkEA3R6QEcuST7Gq
+JzjfU9uLD2tHLYZFNzS4dm4PvwC2aK7OdEOm7VkXFwUyP97QjwPV7fabrQ2QjwGg
+ek+nVEdH9QJBAMvxFickez9eqgiMfZbfY8t5I+Dxz69ZVGsPvl/6xhiUvgxjREM7
+EnScf86HwlBnteoUtMptAKu7Dbq5inPbkFsCQCV8FuRNZGJKNhQsGf/3Sd21S/21
+s2omb9bz1YuFrWaVq74d8eBup/FpGhmlxilYdx2+Hqn5kLYNiozxj+ZDpzkCQQC8
+7VJAYKNsSR3rXXra0Yd5b3e1Y02qe26g36zU7VOmYeTNRQhv38FxFamwgkOYiPsV
+Jql0/RWqAVburAN+4OARAkB9FwUtKyhs7FM4N9bXi+c8m42hkBv+dSim534tPijS
+UCcCONLEQTv4yjlCOwTKMVDoajkWH1A2e7psTmIR+zwc
+-----END RSA PRIVATE KEY-----
+Certificate:
+ Data:
+ Version: 3 (0x2)
+ Serial Number:
+ 0b:98:94:f9:7c:6a
+ Signature Algorithm: sha1WithRSAEncryption
+ Issuer:
+ countryName = NN
+ organizationName = Edel Curl Arctic Illudium Research Cloud
+ commonName = Nothern Nowhere Trust Anchor
+ Validity
+ Not Before: May 27 21:37:11 2010 GMT
+ Not After : Aug 13 21:37:11 2018 GMT
+ Subject:
+ countryName = NN
+ organizationName = Edel Curl Arctic Illudium Research Cloud
+ commonName = localhost
+ Subject Public Key Info:
+ Public Key Algorithm: rsaEncryption
+ Public-Key: (1024 bit)
+ Modulus:
+ 00:b0:27:79:26:2c:b9:e4:d1:81:0a:09:d2:76:fe:
+ 9a:e1:05:68:01:b3:72:77:97:38:e4:60:1c:71:9d:
+ 99:f7:26:7b:21:b5:6d:aa:9f:14:76:07:6c:a4:2a:
+ 2d:7d:ee:f6:6f:8a:58:c4:93:de:fe:a1:25:0f:ff:
+ 57:49:c0:d9:94:d9:07:79:bf:8c:6d:fa:f1:18:82:
+ 67:a0:3f:d7:31:03:82:ec:b9:39:69:07:ec:ec:93:
+ 17:5b:1a:72:91:93:b2:6b:98:66:63:fe:61:29:e7:
+ ad:86:0e:04:ba:bf:8b:55:57:61:a5:4a:f6:ca:e7:
+ c6:d1:b8:65:42:ab:67:64:17
+ Exponent: 65537 (0x10001)
+ X509v3 extensions:
+ X509v3 Subject Alternative Name:
+ DNS:localhost
+ X509v3 Key Usage:
+ Key Encipherment
+ X509v3 Extended Key Usage:
+ TLS Web Server Authentication
+ X509v3 Subject Key Identifier:
+ BC:69:86:84:70:3A:AD:DE:08:2A:70:C6:3B:47:8C:11:3F:E0:9A:6D
+ X509v3 Authority Key Identifier:
+ keyid:AD:3E:E2:39:07:B8:5C:AA:26:90:94:4C:26:69:21:83:E2:4E:36:94
+
+ X509v3 Basic Constraints: critical
+ CA:FALSE
+ Signature Algorithm: sha1WithRSAEncryption
+ 7b:f0:b0:a0:d9:d0:91:38:9b:fe:cf:78:c8:d6:30:5d:87:9d:
+ b3:b9:6e:8b:5a:73:74:93:cb:30:49:d1:00:79:9d:5a:c2:71:
+ a3:93:5f:de:d3:5a:0c:fb:6d:41:83:89:1b:4f:0d:1c:65:0c:
+ 1a:0c:0f:96:79:62:90:e1:74:04:dd:c6:d8:cf:0f:5f:0f:28:
+ 87:d7:86:56:90:b4:d0:88:80:f1:a7:cd:fd:0b:13:58:bb:6d:
+ e6:ab:44:f6:9b:d6:cc:c7:db:3d:3a:90:c4:20:72:f4:38:38:
+ c0:ef:80:1d:60:3f:4e:30:40:11:56:29:70:aa:17:91:90:5f:
+ 70:0b:89:51:af:17:a8:ed:20:4e:76:bb:cf:a8:88:9a:25:0f:
+ 3a:96:26:17:50:2a:af:f3:8b:21:9c:cf:ff:f9:20:fc:fe:c0:
+ 37:95:c7:cd:0d:7a:53:d9:26:12:38:2c:f6:03:95:1b:da:d0:
+ 08:f7:32:91:07:a7:35:0c:14:00:44:c7:43:fb:23:2e:14:44:
+ e6:ee:a9:c9:20:37:09:b8:ae:21:4f:4b:b7:86:4d:e3:41:84:
+ 15:4e:1a:29:00:03:a8:92:99:3c:75:ea:43:0f:e3:2b:f7:17:
+ b1:1b:87:80:04:d3:a7:73:b1:5e:85:38:7d:89:01:16:19:f6:
+ c4:e1:1b:75
+-----BEGIN CERTIFICATE-----
+MIIDQTCCAimgAwIBAgIGC5iU+XxqMA0GCSqGSIb3DQEBBQUAMGcxCzAJBgNVBAYT
+Ak5OMTEwLwYDVQQKDChFZGVsIEN1cmwgQXJjdGljIElsbHVkaXVtIFJlc2VhcmNo
+IENsb3VkMSUwIwYDVQQDDBxOb3RoZXJuIE5vd2hlcmUgVHJ1c3QgQW5jaG9yMB4X
+DTEwMDUyNzIxMzcxMVoXDTE4MDgxMzIxMzcxMVowVDELMAkGA1UEBhMCTk4xMTAv
+BgNVBAoMKEVkZWwgQ3VybCBBcmN0aWMgSWxsdWRpdW0gUmVzZWFyY2ggQ2xvdWQx
+EjAQBgNVBAMMCWxvY2FsaG9zdDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA
+sCd5Jiy55NGBCgnSdv6a4QVoAbNyd5c45GAccZ2Z9yZ7IbVtqp8UdgdspCotfe72
+b4pYxJPe/qElD/9XScDZlNkHeb+MbfrxGIJnoD/XMQOC7Lk5aQfs7JMXWxpykZOy
+a5hmY/5hKeethg4Eur+LVVdhpUr2yufG0bhlQqtnZBcCAwEAAaOBiTCBhjAUBgNV
+HREEDTALgglsb2NhbGhvc3QwCwYDVR0PBAQDAgUgMBMGA1UdJQQMMAoGCCsGAQUF
+BwMBMB0GA1UdDgQWBBS8aYaEcDqt3ggqcMY7R4wRP+CabTAfBgNVHSMEGDAWgBSt
+PuI5B7hcqiaQlEwmaSGD4k42lDAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3DQEBBQUA
+A4IBAQB78LCg2dCROJv+z3jI1jBdh52zuW6LWnN0k8swSdEAeZ1awnGjk1/e01oM
++21Bg4kbTw0cZQwaDA+WeWKQ4XQE3cbYzw9fDyiH14ZWkLTQiIDxp839CxNYu23m
+q0T2m9bMx9s9OpDEIHL0ODjA74AdYD9OMEARVilwqheRkF9wC4lRrxeo7SBOdrvP
+qIiaJQ86liYXUCqv84shnM//+SD8/sA3lcfNDXpT2SYSOCz2A5Ub2tAI9zKRB6c1
+DBQARMdD+yMuFETm7qnJIDcJuK4hT0u3hk3jQYQVThopAAOokpk8depDD+Mr9xex
+G4eABNOnc7FehTh9iQEWGfbE4Rt1
+-----END CERTIFICATE-----
+-----BEGIN DH PARAMETERS-----
+MIGHAoGBAP5mA7oYimErFUulbvNC8V0HwyB62NCj6TZb6YXJwElCksQc8RyHnkrY
+9Wx2+lduFqHjUWalgVF7Gma7CfR/pt+fiU6Jn2vWR2v7KT6hYeRKsJrONJlth+NK
+V7/d4zyvleJ/VSp0TuuSxmMMQ6hG3i5YhSGXyCh4h0pl4Wu/hdVTAgEC
+-----END DH PARAMETERS-----
diff --git a/tests/certs/Server-localhost-sv.prm b/tests/certs/Server-localhost-sv.prm
new file mode 100644
index 0000000..6351025
--- /dev/null
+++ b/tests/certs/Server-localhost-sv.prm
@@ -0,0 +1,25 @@
+extensions = x509v3
+[ x509v3 ]
+subjectAltName = DNS:localhost
+keyUsage = keyEncipherment
+extendedKeyUsage = serverAuth
+subjectKeyIdentifier = hash
+authorityKeyIdentifier = keyid
+basicConstraints = critical,CA:false
+[ req ]
+default_bits = 1024
+distinguished_name = req_DN
+default_md = sha256
+string_mask = utf8only
+[ req_DN ]
+countryName = "Country Name is Northern Nowhere"
+countryName_value = NN
+organizationName = "Organization Name"
+organizationName_value = Edel Curl Arctic Illudium Research Cloud
+commonName = "Common Name"
+commonName_value = localhost
+
+[something]
+# The key
+# the certficate
+# some dhparam
diff --git a/tests/certs/Server-localhost.nn-sv.crl b/tests/certs/Server-localhost.nn-sv.crl
new file mode 100644
index 0000000..db40831
--- /dev/null
+++ b/tests/certs/Server-localhost.nn-sv.crl
@@ -0,0 +1,13 @@
+-----BEGIN X509 CRL-----
+MIIB9DCB3QIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJOTjExMC8GA1UE
+CgwoRWRlbCBDdXJsIEFyY3RpYyBJbGx1ZGl1bSBSZXNlYXJjaCBDbG91ZDElMCMG
+A1UEAwwcTm90aGVybiBOb3doZXJlIFRydXN0IEFuY2hvchcNMTAwNTI3MjEzNzI0
+WhcNMTAwNjI2MjEzNzI0WjAyMBcCBguYlPl8ahcNMTAwNTI3MjEzNzExWjAXAgYL
+mJT7eF8XDTEwMDUyNzIxMzcyNFqgDjAMMAoGA1UdFAQDAgEBMA0GCSqGSIb3DQEB
+BQUAA4IBAQCo8mBpkZqiYWJMkJsZ1qqqOqVRne4iWhPOJSDGDgxoCTA4RgN1sQUv
+/MxO2LgSEyo9GopCpgWlhig+wzQmYCUf7HDw8sLzClUG4XUKRSW2Uq6q5BF5fwIu
+vHksi/RIPdcMx/+3dGIFeoccZZd5o7xgryGySAN6wHy6lY7LeeW7acpaDU43D7yi
+wQipBczrlH/jJDy6ja5FFBrAvvyRc4zC2X1/Rh3f0vNqnX9PLC524HxRmasCKYM8
+vgcPbvJ7Z/HRGOYRu9vTp5X0+lPPj24WE8vX3AZdjyI6qpinHzrsYen/qs6c0v3k
+FKYuzuVlUAy+5aZDhx+GHr+KW+y2T/ol
+-----END X509 CRL-----
diff --git a/tests/certs/Server-localhost.nn-sv.crt b/tests/certs/Server-localhost.nn-sv.crt
new file mode 100644
index 0000000..722aeeb
--- /dev/null
+++ b/tests/certs/Server-localhost.nn-sv.crt
@@ -0,0 +1,81 @@
+Certificate:
+ Data:
+ Version: 3 (0x2)
+ Serial Number:
+ 0b:98:94:fb:78:5f
+ Signature Algorithm: sha1WithRSAEncryption
+ Issuer:
+ countryName = NN
+ organizationName = Edel Curl Arctic Illudium Research Cloud
+ commonName = Nothern Nowhere Trust Anchor
+ Validity
+ Not Before: May 27 21:37:24 2010 GMT
+ Not After : Aug 13 21:37:24 2018 GMT
+ Subject:
+ countryName = NN
+ organizationName = Edel Curl Arctic Illudium Research Cloud
+ commonName = localhost.nn
+ Subject Public Key Info:
+ Public Key Algorithm: rsaEncryption
+ Public-Key: (1024 bit)
+ Modulus:
+ 00:d3:d4:4e:db:63:5c:3f:3a:3a:5e:38:09:94:e6:
+ 4d:70:9d:0d:af:49:e6:82:5d:07:b7:f5:cd:a0:df:
+ af:71:f1:cf:bf:d5:9a:bd:af:7c:78:5d:55:3f:14:
+ bd:bb:2c:0e:73:9d:d6:82:9a:d5:e6:f6:21:5d:08:
+ 92:a2:71:5f:80:5f:5c:ce:f0:c2:37:37:79:0f:4d:
+ 3d:d4:f2:80:6d:47:36:45:d1:d2:8b:7a:2e:12:71:
+ 4b:47:86:f5:8c:99:af:e7:0e:cf:b5:c9:4d:7a:75:
+ f7:b2:74:0c:41:e3:ab:bb:2c:9d:6f:54:08:13:5a:
+ 3a:ef:7c:27:f7:3f:0b:0b:71
+ Exponent: 65537 (0x10001)
+ X509v3 extensions:
+ X509v3 Subject Alternative Name:
+ DNS:localhost.nn
+ X509v3 Key Usage:
+ Key Encipherment
+ X509v3 Extended Key Usage:
+ TLS Web Server Authentication
+ X509v3 Subject Key Identifier:
+ 81:26:F9:75:CC:9C:2D:3C:36:64:68:41:F7:07:3C:66:86:E5:4A:C1
+ X509v3 Authority Key Identifier:
+ keyid:AD:3E:E2:39:07:B8:5C:AA:26:90:94:4C:26:69:21:83:E2:4E:36:94
+
+ X509v3 Basic Constraints: critical
+ CA:FALSE
+ Signature Algorithm: sha1WithRSAEncryption
+ 65:05:8c:48:14:58:8c:1a:d4:95:67:1c:29:52:ed:5a:6e:14:
+ 41:bc:2b:16:20:c4:89:3a:6e:cb:c1:ff:ab:61:79:5f:ce:27:
+ 93:3c:ff:29:7a:25:68:00:27:04:f3:68:17:30:f0:fd:ff:09:
+ 0e:15:2a:25:b1:45:18:93:ab:12:8e:0c:13:11:9a:b8:a4:75:
+ d0:17:1b:ca:f2:66:6b:73:15:dd:8b:bb:34:d6:70:dc:34:1b:
+ e7:7a:30:ea:50:50:2f:88:67:b3:f8:b3:55:62:44:7e:3e:df:
+ 59:4f:a8:57:83:40:9f:bf:52:bf:fd:2c:18:6e:bd:0c:41:b7:
+ 78:1c:9b:fa:c4:ff:c3:2b:46:a4:8f:0c:19:a7:3d:75:81:29:
+ 6b:cf:07:f0:1d:65:d4:0e:19:51:87:92:a8:3d:7e:80:04:84:
+ ad:5e:4e:b6:ef:9a:02:c3:84:95:ec:c3:e8:a1:69:1f:42:cb:
+ da:63:1a:35:6f:d0:ba:62:9e:73:36:63:58:0f:cc:25:c8:59:
+ 73:df:3b:c2:b9:5a:da:3d:e1:3f:0a:1f:0f:41:c4:88:2d:92:
+ 06:88:d4:54:81:e1:12:57:53:ab:6b:f8:c8:90:3e:30:4c:f5:
+ 72:cf:f0:d4:18:70:c1:78:85:30:9c:fe:94:f4:1b:c2:6c:14:
+ 49:7a:0e:27
+-----BEGIN CERTIFICATE-----
+MIIDRzCCAi+gAwIBAgIGC5iU+3hfMA0GCSqGSIb3DQEBBQUAMGcxCzAJBgNVBAYT
+Ak5OMTEwLwYDVQQKDChFZGVsIEN1cmwgQXJjdGljIElsbHVkaXVtIFJlc2VhcmNo
+IENsb3VkMSUwIwYDVQQDDBxOb3RoZXJuIE5vd2hlcmUgVHJ1c3QgQW5jaG9yMB4X
+DTEwMDUyNzIxMzcyNFoXDTE4MDgxMzIxMzcyNFowVzELMAkGA1UEBhMCTk4xMTAv
+BgNVBAoMKEVkZWwgQ3VybCBBcmN0aWMgSWxsdWRpdW0gUmVzZWFyY2ggQ2xvdWQx
+FTATBgNVBAMMDGxvY2FsaG9zdC5ubjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkC
+gYEA09RO22NcPzo6XjgJlOZNcJ0Nr0nmgl0Ht/XNoN+vcfHPv9Wava98eF1VPxS9
+uywOc53WgprV5vYhXQiSonFfgF9czvDCNzd5D0091PKAbUc2RdHSi3ouEnFLR4b1
+jJmv5w7PtclNenX3snQMQeOruyydb1QIE1o673wn9z8LC3ECAwEAAaOBjDCBiTAX
+BgNVHREEEDAOggxsb2NhbGhvc3Qubm4wCwYDVR0PBAQDAgUgMBMGA1UdJQQMMAoG
+CCsGAQUFBwMBMB0GA1UdDgQWBBSBJvl1zJwtPDZkaEH3BzxmhuVKwTAfBgNVHSME
+GDAWgBStPuI5B7hcqiaQlEwmaSGD4k42lDAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3
+DQEBBQUAA4IBAQBlBYxIFFiMGtSVZxwpUu1abhRBvCsWIMSJOm7Lwf+rYXlfzieT
+PP8peiVoACcE82gXMPD9/wkOFSolsUUYk6sSjgwTEZq4pHXQFxvK8mZrcxXdi7s0
+1nDcNBvnejDqUFAviGez+LNVYkR+Pt9ZT6hXg0Cfv1K//SwYbr0MQbd4HJv6xP/D
+K0akjwwZpz11gSlrzwfwHWXUDhlRh5KoPX6ABIStXk6275oCw4SV7MPooWkfQsva
+Yxo1b9C6Yp5zNmNYD8wlyFlz3zvCuVraPeE/Ch8PQcSILZIGiNRUgeESV1Ora/jI
+kD4wTPVyz/DUGHDBeIUwnP6U9BvCbBRJeg4n
+-----END CERTIFICATE-----
diff --git a/tests/certs/Server-localhost.nn-sv.csr b/tests/certs/Server-localhost.nn-sv.csr
new file mode 100644
index 0000000..6424343
--- /dev/null
+++ b/tests/certs/Server-localhost.nn-sv.csr
@@ -0,0 +1,11 @@
+-----BEGIN CERTIFICATE REQUEST-----
+MIIBlzCCAQACAQAwVzELMAkGA1UEBhMCTk4xMTAvBgNVBAoMKEVkZWwgQ3VybCBB
+cmN0aWMgSWxsdWRpdW0gUmVzZWFyY2ggQ2xvdWQxFTATBgNVBAMMDGxvY2FsaG9z
+dC5ubjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA09RO22NcPzo6XjgJlOZN
+cJ0Nr0nmgl0Ht/XNoN+vcfHPv9Wava98eF1VPxS9uywOc53WgprV5vYhXQiSonFf
+gF9czvDCNzd5D0091PKAbUc2RdHSi3ouEnFLR4b1jJmv5w7PtclNenX3snQMQeOr
+uyydb1QIE1o673wn9z8LC3ECAwEAAaAAMA0GCSqGSIb3DQEBCwUAA4GBAM5PenDC
+AtDhzdVKrX6DcJINWck5XFEnvWQksSYU7iDeiQVycQxR+LYKGZiy04u+9C+MN7eq
+JmHAIi+88r7/ZaGJLujqSUOJn8ocZ+vwhJOwh2XBhhLaCjIW/H05g0aNlk80Ye6m
+OA9DCIZUINF0lDQaJCpKXxwNVcz4Rifp5/9T
+-----END CERTIFICATE REQUEST-----
diff --git a/tests/certs/Server-localhost.nn-sv.der b/tests/certs/Server-localhost.nn-sv.der
new file mode 100644
index 0000000..08cf02f
--- /dev/null
+++ b/tests/certs/Server-localhost.nn-sv.der
Binary files differ
diff --git a/tests/certs/Server-localhost.nn-sv.dhp b/tests/certs/Server-localhost.nn-sv.dhp
new file mode 100644
index 0000000..5d54840
--- /dev/null
+++ b/tests/certs/Server-localhost.nn-sv.dhp
@@ -0,0 +1,5 @@
+-----BEGIN DH PARAMETERS-----
+MIGHAoGBAPrtEVPhZfEczB9JnWXbln79YnTh/V6ehXMWe414wyn/VT1ow25sLEev
+H2+eT84aDp5e+TfBSFjA6or96/lyQvsgAE+cE6f6uuw9ApVG2MK+BCn4snxHBb6G
+LFQf+9qHZ4BEkpBL60p1fkGu8BM1wXGXEaeYhgGumNA9fm5YJrl7AgEC
+-----END DH PARAMETERS-----
diff --git a/tests/certs/Server-localhost.nn-sv.key b/tests/certs/Server-localhost.nn-sv.key
new file mode 100644
index 0000000..bf1cc7e
--- /dev/null
+++ b/tests/certs/Server-localhost.nn-sv.key
@@ -0,0 +1,15 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICXgIBAAKBgQDT1E7bY1w/OjpeOAmU5k1wnQ2vSeaCXQe39c2g369x8c+/1Zq9
+r3x4XVU/FL27LA5zndaCmtXm9iFdCJKicV+AX1zO8MI3N3kPTT3U8oBtRzZF0dKL
+ei4ScUtHhvWMma/nDs+1yU16dfeydAxB46u7LJ1vVAgTWjrvfCf3PwsLcQIDAQAB
+AoGBALr1HQxAq8AaMj3KE5rZkOudkeBtxwaz+QYB6hTcl8pnc8aKTmKwKZlKNtzP
+/4zdG3wriJII+lU4UsX7tP+uNGxKxALrDQRuBPyi8XQfUT1nJth6qkp8g3V/ixfE
+Yah3od9dL3+xsOH28RKKUC5kjmnNupO9KQZ6/CyYfUHAEG+pAkEA+PP+7FIvpPQ+
+7bbG4IIqn7QKVxGbtaFY8pdLnsUkrnIqwEIbZoU12iEKm5qMoXNv30GknXrvxU53
+tdIZU5Z28wJBANnTTMb/jac+Q1SaqmWQnrpcmvuPZ/8xRM6xeSJh+MDpK768WpYe
+nivHvinQjQZBQmNM3IPYbJ33nTAdJylmFQsCQQCn4crATPAKOheRsJdO4RijWAM9
+EgfCJUtZVMPPDr0c0qqXujzGFwDo1y1TH5bEbZc8pATBmhzFHpRFzaf8oVQXAkAX
+Hch5GefDhuUIVn2c17MwneFIrxhfSbA+qzDqyDDo8BXXYQ/P/KHWjZUNxPciYcyU
+0zRXvaERRpTk5UMhrpavAkEAy4ZyhH1UViuWsmTQaRjc5mDs8aXkd2y85A7jnfWA
+8r7CL+sOe4TU1/CVyJf2FJaqHfD/GG6fqqeFoHuaqwTyiw==
+-----END RSA PRIVATE KEY-----
diff --git a/tests/certs/Server-localhost.nn-sv.pem b/tests/certs/Server-localhost.nn-sv.pem
new file mode 100644
index 0000000..b5c2531
--- /dev/null
+++ b/tests/certs/Server-localhost.nn-sv.pem
@@ -0,0 +1,126 @@
+extensions = x509v3
+[ x509v3 ]
+subjectAltName = DNS:localhost.nn
+keyUsage = keyEncipherment
+extendedKeyUsage = serverAuth
+subjectKeyIdentifier = hash
+authorityKeyIdentifier = keyid
+basicConstraints = critical,CA:false
+[ req ]
+default_bits = 1024
+distinguished_name = req_DN
+default_md = sha256
+string_mask = utf8only
+[ req_DN ]
+countryName = "Country Name is Northern Nowhere"
+countryName_value = NN
+organizationName = "Organization Name"
+organizationName_value = Edel Curl Arctic Illudium Research Cloud
+commonName = "Common Name"
+commonName_value = localhost.nn
+
+[something]
+# The key
+# the certficate
+# some dhparam
+-----BEGIN RSA PRIVATE KEY-----
+MIICXgIBAAKBgQDT1E7bY1w/OjpeOAmU5k1wnQ2vSeaCXQe39c2g369x8c+/1Zq9
+r3x4XVU/FL27LA5zndaCmtXm9iFdCJKicV+AX1zO8MI3N3kPTT3U8oBtRzZF0dKL
+ei4ScUtHhvWMma/nDs+1yU16dfeydAxB46u7LJ1vVAgTWjrvfCf3PwsLcQIDAQAB
+AoGBALr1HQxAq8AaMj3KE5rZkOudkeBtxwaz+QYB6hTcl8pnc8aKTmKwKZlKNtzP
+/4zdG3wriJII+lU4UsX7tP+uNGxKxALrDQRuBPyi8XQfUT1nJth6qkp8g3V/ixfE
+Yah3od9dL3+xsOH28RKKUC5kjmnNupO9KQZ6/CyYfUHAEG+pAkEA+PP+7FIvpPQ+
+7bbG4IIqn7QKVxGbtaFY8pdLnsUkrnIqwEIbZoU12iEKm5qMoXNv30GknXrvxU53
+tdIZU5Z28wJBANnTTMb/jac+Q1SaqmWQnrpcmvuPZ/8xRM6xeSJh+MDpK768WpYe
+nivHvinQjQZBQmNM3IPYbJ33nTAdJylmFQsCQQCn4crATPAKOheRsJdO4RijWAM9
+EgfCJUtZVMPPDr0c0qqXujzGFwDo1y1TH5bEbZc8pATBmhzFHpRFzaf8oVQXAkAX
+Hch5GefDhuUIVn2c17MwneFIrxhfSbA+qzDqyDDo8BXXYQ/P/KHWjZUNxPciYcyU
+0zRXvaERRpTk5UMhrpavAkEAy4ZyhH1UViuWsmTQaRjc5mDs8aXkd2y85A7jnfWA
+8r7CL+sOe4TU1/CVyJf2FJaqHfD/GG6fqqeFoHuaqwTyiw==
+-----END RSA PRIVATE KEY-----
+Certificate:
+ Data:
+ Version: 3 (0x2)
+ Serial Number:
+ 0b:98:94:fb:78:5f
+ Signature Algorithm: sha1WithRSAEncryption
+ Issuer:
+ countryName = NN
+ organizationName = Edel Curl Arctic Illudium Research Cloud
+ commonName = Nothern Nowhere Trust Anchor
+ Validity
+ Not Before: May 27 21:37:24 2010 GMT
+ Not After : Aug 13 21:37:24 2018 GMT
+ Subject:
+ countryName = NN
+ organizationName = Edel Curl Arctic Illudium Research Cloud
+ commonName = localhost.nn
+ Subject Public Key Info:
+ Public Key Algorithm: rsaEncryption
+ Public-Key: (1024 bit)
+ Modulus:
+ 00:d3:d4:4e:db:63:5c:3f:3a:3a:5e:38:09:94:e6:
+ 4d:70:9d:0d:af:49:e6:82:5d:07:b7:f5:cd:a0:df:
+ af:71:f1:cf:bf:d5:9a:bd:af:7c:78:5d:55:3f:14:
+ bd:bb:2c:0e:73:9d:d6:82:9a:d5:e6:f6:21:5d:08:
+ 92:a2:71:5f:80:5f:5c:ce:f0:c2:37:37:79:0f:4d:
+ 3d:d4:f2:80:6d:47:36:45:d1:d2:8b:7a:2e:12:71:
+ 4b:47:86:f5:8c:99:af:e7:0e:cf:b5:c9:4d:7a:75:
+ f7:b2:74:0c:41:e3:ab:bb:2c:9d:6f:54:08:13:5a:
+ 3a:ef:7c:27:f7:3f:0b:0b:71
+ Exponent: 65537 (0x10001)
+ X509v3 extensions:
+ X509v3 Subject Alternative Name:
+ DNS:localhost.nn
+ X509v3 Key Usage:
+ Key Encipherment
+ X509v3 Extended Key Usage:
+ TLS Web Server Authentication
+ X509v3 Subject Key Identifier:
+ 81:26:F9:75:CC:9C:2D:3C:36:64:68:41:F7:07:3C:66:86:E5:4A:C1
+ X509v3 Authority Key Identifier:
+ keyid:AD:3E:E2:39:07:B8:5C:AA:26:90:94:4C:26:69:21:83:E2:4E:36:94
+
+ X509v3 Basic Constraints: critical
+ CA:FALSE
+ Signature Algorithm: sha1WithRSAEncryption
+ 65:05:8c:48:14:58:8c:1a:d4:95:67:1c:29:52:ed:5a:6e:14:
+ 41:bc:2b:16:20:c4:89:3a:6e:cb:c1:ff:ab:61:79:5f:ce:27:
+ 93:3c:ff:29:7a:25:68:00:27:04:f3:68:17:30:f0:fd:ff:09:
+ 0e:15:2a:25:b1:45:18:93:ab:12:8e:0c:13:11:9a:b8:a4:75:
+ d0:17:1b:ca:f2:66:6b:73:15:dd:8b:bb:34:d6:70:dc:34:1b:
+ e7:7a:30:ea:50:50:2f:88:67:b3:f8:b3:55:62:44:7e:3e:df:
+ 59:4f:a8:57:83:40:9f:bf:52:bf:fd:2c:18:6e:bd:0c:41:b7:
+ 78:1c:9b:fa:c4:ff:c3:2b:46:a4:8f:0c:19:a7:3d:75:81:29:
+ 6b:cf:07:f0:1d:65:d4:0e:19:51:87:92:a8:3d:7e:80:04:84:
+ ad:5e:4e:b6:ef:9a:02:c3:84:95:ec:c3:e8:a1:69:1f:42:cb:
+ da:63:1a:35:6f:d0:ba:62:9e:73:36:63:58:0f:cc:25:c8:59:
+ 73:df:3b:c2:b9:5a:da:3d:e1:3f:0a:1f:0f:41:c4:88:2d:92:
+ 06:88:d4:54:81:e1:12:57:53:ab:6b:f8:c8:90:3e:30:4c:f5:
+ 72:cf:f0:d4:18:70:c1:78:85:30:9c:fe:94:f4:1b:c2:6c:14:
+ 49:7a:0e:27
+-----BEGIN CERTIFICATE-----
+MIIDRzCCAi+gAwIBAgIGC5iU+3hfMA0GCSqGSIb3DQEBBQUAMGcxCzAJBgNVBAYT
+Ak5OMTEwLwYDVQQKDChFZGVsIEN1cmwgQXJjdGljIElsbHVkaXVtIFJlc2VhcmNo
+IENsb3VkMSUwIwYDVQQDDBxOb3RoZXJuIE5vd2hlcmUgVHJ1c3QgQW5jaG9yMB4X
+DTEwMDUyNzIxMzcyNFoXDTE4MDgxMzIxMzcyNFowVzELMAkGA1UEBhMCTk4xMTAv
+BgNVBAoMKEVkZWwgQ3VybCBBcmN0aWMgSWxsdWRpdW0gUmVzZWFyY2ggQ2xvdWQx
+FTATBgNVBAMMDGxvY2FsaG9zdC5ubjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkC
+gYEA09RO22NcPzo6XjgJlOZNcJ0Nr0nmgl0Ht/XNoN+vcfHPv9Wava98eF1VPxS9
+uywOc53WgprV5vYhXQiSonFfgF9czvDCNzd5D0091PKAbUc2RdHSi3ouEnFLR4b1
+jJmv5w7PtclNenX3snQMQeOruyydb1QIE1o673wn9z8LC3ECAwEAAaOBjDCBiTAX
+BgNVHREEEDAOggxsb2NhbGhvc3Qubm4wCwYDVR0PBAQDAgUgMBMGA1UdJQQMMAoG
+CCsGAQUFBwMBMB0GA1UdDgQWBBSBJvl1zJwtPDZkaEH3BzxmhuVKwTAfBgNVHSME
+GDAWgBStPuI5B7hcqiaQlEwmaSGD4k42lDAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3
+DQEBBQUAA4IBAQBlBYxIFFiMGtSVZxwpUu1abhRBvCsWIMSJOm7Lwf+rYXlfzieT
+PP8peiVoACcE82gXMPD9/wkOFSolsUUYk6sSjgwTEZq4pHXQFxvK8mZrcxXdi7s0
+1nDcNBvnejDqUFAviGez+LNVYkR+Pt9ZT6hXg0Cfv1K//SwYbr0MQbd4HJv6xP/D
+K0akjwwZpz11gSlrzwfwHWXUDhlRh5KoPX6ABIStXk6275oCw4SV7MPooWkfQsva
+Yxo1b9C6Yp5zNmNYD8wlyFlz3zvCuVraPeE/Ch8PQcSILZIGiNRUgeESV1Ora/jI
+kD4wTPVyz/DUGHDBeIUwnP6U9BvCbBRJeg4n
+-----END CERTIFICATE-----
+-----BEGIN DH PARAMETERS-----
+MIGHAoGBAPrtEVPhZfEczB9JnWXbln79YnTh/V6ehXMWe414wyn/VT1ow25sLEev
+H2+eT84aDp5e+TfBSFjA6or96/lyQvsgAE+cE6f6uuw9ApVG2MK+BCn4snxHBb6G
+LFQf+9qHZ4BEkpBL60p1fkGu8BM1wXGXEaeYhgGumNA9fm5YJrl7AgEC
+-----END DH PARAMETERS-----
diff --git a/tests/certs/Server-localhost.nn-sv.prm b/tests/certs/Server-localhost.nn-sv.prm
new file mode 100644
index 0000000..e515ea1
--- /dev/null
+++ b/tests/certs/Server-localhost.nn-sv.prm
@@ -0,0 +1,25 @@
+extensions = x509v3
+[ x509v3 ]
+subjectAltName = DNS:localhost.nn
+keyUsage = keyEncipherment
+extendedKeyUsage = serverAuth
+subjectKeyIdentifier = hash
+authorityKeyIdentifier = keyid
+basicConstraints = critical,CA:false
+[ req ]
+default_bits = 1024
+distinguished_name = req_DN
+default_md = sha256
+string_mask = utf8only
+[ req_DN ]
+countryName = "Country Name is Northern Nowhere"
+countryName_value = NN
+organizationName = "Organization Name"
+organizationName_value = Edel Curl Arctic Illudium Research Cloud
+commonName = "Common Name"
+commonName_value = localhost.nn
+
+[something]
+# The key
+# the certficate
+# some dhparam
diff --git a/tests/certs/Server-localhost0h-sv.crl b/tests/certs/Server-localhost0h-sv.crl
new file mode 100644
index 0000000..87a1859
--- /dev/null
+++ b/tests/certs/Server-localhost0h-sv.crl
@@ -0,0 +1,14 @@
+-----BEGIN X509 CRL-----
+MIICDTCB9gIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJOTjExMC8GA1UE
+CgwoRWRlbCBDdXJsIEFyY3RpYyBJbGx1ZGl1bSBSZXNlYXJjaCBDbG91ZDElMCMG
+A1UEAwwcTm90aGVybiBOb3doZXJlIFRydXN0IEFuY2hvchcNMTAwNTI3MjEzNzU0
+WhcNMTAwNjI2MjEzNzU0WjBLMBcCBguYlPl8ahcNMTAwNTI3MjEzNzExWjAXAgYL
+mJT7eF8XDTEwMDUyNzIxMzcyNFowFwIGC5iVAAx+Fw0xMDA1MjcyMTM3NTRaoA4w
+DDAKBgNVHRQEAwIBATANBgkqhkiG9w0BAQUFAAOCAQEAWBL4VhArwJkUv91oyMIo
+xyyRmVl+1oY5IjEpLGd+mNIgqXuljQmbp8cS8A+jWinJPOWZqvsHa+mLCl4OuwhP
+JbAtIQ22OQRaVqWRuguG2T1sh3Dd7a1GcupIGKc/zgnY45D4pY4UNZv+KmY3bF0S
+83zn6YoQtBTzF9y2Nq5R0UTdxl6+j5swpo1ttvQPz40yqIlmjmW/llkaD4UBaegl
+zSxmnR5xCjAR7nYm+HyWW9SLSWGptUOd32B9TPJPLDhJa9lfBb8H9l5k7kx9ECJG
+LyujleeXIucfqOgE2cB0zCjExqrGWRp8ZgEWfpdSkDEpXBCDo88TA3dIr2f3Zxwp
+QA==
+-----END X509 CRL-----
diff --git a/tests/certs/Server-localhost0h-sv.crt b/tests/certs/Server-localhost0h-sv.crt
new file mode 100644
index 0000000..0dcb5df
--- /dev/null
+++ b/tests/certs/Server-localhost0h-sv.crt
@@ -0,0 +1,81 @@
+Certificate:
+ Data:
+ Version: 3 (0x2)
+ Serial Number:
+ 0b:98:95:00:0c:7e
+ Signature Algorithm: sha1WithRSAEncryption
+ Issuer:
+ countryName = NN
+ organizationName = Edel Curl Arctic Illudium Research Cloud
+ commonName = Nothern Nowhere Trust Anchor
+ Validity
+ Not Before: May 27 21:37:54 2010 GMT
+ Not After : Aug 13 21:37:54 2018 GMT
+ Subject:
+ countryName = NN
+ organizationName = Edel Curl Arctic Illudium Research Cloud
+ commonName = localhost
+ Subject Public Key Info:
+ Public Key Algorithm: rsaEncryption
+ Public-Key: (1024 bit)
+ Modulus:
+ 00:cc:a9:91:2b:22:e8:90:2b:e5:4c:dc:ae:6d:da:
+ 4c:f3:32:cc:a5:68:67:5a:3b:b9:86:a3:95:88:3e:
+ e8:63:c3:ed:00:60:19:03:2b:5d:5b:56:8a:da:21:
+ 5e:71:5c:d1:e3:de:51:18:c1:17:14:b1:33:90:00:
+ 5c:9a:e5:73:0b:a8:88:9c:d0:0b:54:bc:ea:3a:39:
+ dd:f6:65:81:4b:29:99:4c:71:d3:f7:69:7f:80:e8:
+ e8:6d:61:41:83:87:eb:ac:2c:bd:0f:eb:1b:fd:a2:
+ 37:97:6d:31:56:ba:4b:51:dd:b1:01:eb:89:f8:25:
+ de:5b:a3:e5:b2:3f:4c:77:53
+ Exponent: 65537 (0x10001)
+ X509v3 extensions:
+ X509v3 Subject Alternative Name:
+ DNS:localhost
+ X509v3 Key Usage:
+ Key Encipherment
+ X509v3 Extended Key Usage:
+ TLS Web Server Authentication
+ X509v3 Subject Key Identifier:
+ 3B:2B:84:0D:23:3C:46:F9:9B:E5:C2:FA:B7:30:E7:AC:E3:ED:09:C3
+ X509v3 Authority Key Identifier:
+ keyid:AD:3E:E2:39:07:B8:5C:AA:26:90:94:4C:26:69:21:83:E2:4E:36:94
+
+ X509v3 Basic Constraints: critical
+ CA:FALSE
+ Signature Algorithm: sha1WithRSAEncryption
+ a2:fa:61:4e:c0:10:1f:f8:38:2c:fd:a6:74:85:df:8e:ee:41:
+ 90:a1:d7:c9:32:65:5d:61:d5:13:51:3b:11:1c:7b:01:06:70:
+ 9f:93:52:54:15:bd:93:3a:f8:40:e3:e2:ab:01:96:fb:73:c5:
+ 42:2c:ad:ce:e8:52:57:db:b6:15:90:75:e3:e5:75:99:b0:83:
+ ed:b0:fc:f2:d0:d9:3d:68:1c:d9:b4:cd:a1:a9:40:19:44:46:
+ 14:8b:11:6e:2e:1c:65:85:73:45:f0:8b:4f:ea:01:2d:61:0f:
+ ae:0d:70:0c:d3:3c:1c:1f:24:66:a3:0b:62:d1:87:1e:8e:96:
+ f6:43:cf:1c:24:e7:94:d0:7e:b0:ee:1b:6f:14:1f:04:35:e8:
+ fc:3c:c8:9e:e3:6e:0e:4c:7d:a9:23:97:2d:6e:b1:4d:e3:05:
+ 1b:ce:86:2f:2f:b3:c9:60:47:58:ac:ea:4c:cb:c2:7b:0f:08:
+ b8:a7:90:e7:22:32:70:f6:09:3e:f9:54:94:b0:37:50:22:60:
+ 49:1c:84:9e:1a:22:0c:3e:a9:16:7c:5e:b1:50:13:6b:82:14:
+ d3:8a:3d:4d:ed:18:ca:40:59:d6:b9:72:9f:64:e5:0b:e7:a6:
+ b8:ee:29:b5:6a:ec:82:b2:94:56:36:e3:87:b3:07:aa:69:b8:
+ 2c:ef:0c:14
+-----BEGIN CERTIFICATE-----
+MIIDQzCCAiugAwIBAgIGC5iVAAx+MA0GCSqGSIb3DQEBBQUAMGcxCzAJBgNVBAYT
+Ak5OMTEwLwYDVQQKDChFZGVsIEN1cmwgQXJjdGljIElsbHVkaXVtIFJlc2VhcmNo
+IENsb3VkMSUwIwYDVQQDDBxOb3RoZXJuIE5vd2hlcmUgVHJ1c3QgQW5jaG9yMB4X
+DTEwMDUyNzIxMzc1NFoXDTE4MDgxMzIxMzc1NFowVDELMAkGA1UEBhMCTk4xMTAv
+BgNVBAoMKEVkZWwgQ3VybCBBcmN0aWMgSWxsdWRpdW0gUmVzZWFyY2ggQ2xvdWQx
+EjAQBgNVBAMMCWxvY2FsaG9zdDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA
+zKmRKyLokCvlTNyubdpM8zLMpWhnWju5hqOViD7oY8PtAGAZAytdW1aK2iFecVzR
+495RGMEXFLEzkABcmuVzC6iInNALVLzqOjnd9mWBSymZTHHT92l/gOjobWFBg4fr
+rCy9D+sb/aI3l20xVrpLUd2xAeuJ+CXeW6Plsj9Md1MCAwEAAaOBizCBiDAWBgNV
+HREEDzANggtsb2NhbGhvc3QAaDALBgNVHQ8EBAMCBSAwEwYDVR0lBAwwCgYIKwYB
+BQUHAwEwHQYDVR0OBBYEFDsrhA0jPEb5m+XC+rcw56zj7QnDMB8GA1UdIwQYMBaA
+FK0+4jkHuFyqJpCUTCZpIYPiTjaUMAwGA1UdEwEB/wQCMAAwDQYJKoZIhvcNAQEF
+BQADggEBAKL6YU7AEB/4OCz9pnSF347uQZCh18kyZV1h1RNROxEcewEGcJ+TUlQV
+vZM6+EDj4qsBlvtzxUIsrc7oUlfbthWQdePldZmwg+2w/PLQ2T1oHNm0zaGpQBlE
+RhSLEW4uHGWFc0Xwi0/qAS1hD64NcAzTPBwfJGajC2LRhx6OlvZDzxwk55TQfrDu
+G28UHwQ16Pw8yJ7jbg5Mfakjly1usU3jBRvOhi8vs8lgR1is6kzLwnsPCLinkOci
+MnD2CT75VJSwN1AiYEkchJ4aIgw+qRZ8XrFQE2uCFNOKPU3tGMpAWda5cp9k5Qvn
+prjuKbVq7IKylFY244ezB6ppuCzvDBQ=
+-----END CERTIFICATE-----
diff --git a/tests/certs/Server-localhost0h-sv.csr b/tests/certs/Server-localhost0h-sv.csr
new file mode 100644
index 0000000..edf776f
--- /dev/null
+++ b/tests/certs/Server-localhost0h-sv.csr
@@ -0,0 +1,11 @@
+-----BEGIN CERTIFICATE REQUEST-----
+MIIBkzCB/QIBADBUMQswCQYDVQQGEwJOTjExMC8GA1UECgwoRWRlbCBDdXJsIEFy
+Y3RpYyBJbGx1ZGl1bSBSZXNlYXJjaCBDbG91ZDESMBAGA1UEAwwJbG9jYWxob3N0
+MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMqZErIuiQK+VM3K5t2kzzMsyl
+aGdaO7mGo5WIPuhjw+0AYBkDK11bVoraIV5xXNHj3lEYwRcUsTOQAFya5XMLqIic
+0AtUvOo6Od32ZYFLKZlMcdP3aX+A6OhtYUGDh+usLL0P6xv9ojeXbTFWuktR3bEB
+64n4Jd5bo+WyP0x3UwIDAQABoAAwDQYJKoZIhvcNAQELBQADgYEAPor+2apn3kPJ
+ZdjyyT/iXETRTrN87PuBaujcV+oVeVSWW+YgGUzDHi+RkEKTxWdz3leW2goE41X9
+2D/n66ASQGs1x8wXwIMIX83MjkWtjqdfcrJVi1l6T7NjzZt6EyJdvreRntCUu8zc
+J5tK3rl/tIeudKUE2COc0Ngu9JUB1j8=
+-----END CERTIFICATE REQUEST-----
diff --git a/tests/certs/Server-localhost0h-sv.der b/tests/certs/Server-localhost0h-sv.der
new file mode 100644
index 0000000..14be0ba
--- /dev/null
+++ b/tests/certs/Server-localhost0h-sv.der
Binary files differ
diff --git a/tests/certs/Server-localhost0h-sv.dhp b/tests/certs/Server-localhost0h-sv.dhp
new file mode 100644
index 0000000..99e6107
--- /dev/null
+++ b/tests/certs/Server-localhost0h-sv.dhp
@@ -0,0 +1,5 @@
+-----BEGIN DH PARAMETERS-----
+MIGHAoGBAL/3hRxvWX+Mdyu/aBPU1JeeA5sg4nXtA7B24eCql9Tq53Lks1/HJ5B+
+xSapGAFd+22xhBsNkJihf74oiPEVr9nNoLjFV/DZe259+JYgs+pBTFN+Cp13ALUi
+CeZxX2mlxlstD1SBRTKgxA/j4ttR1Chn8knn+RVdFE9YFKCYPyLrAgEC
+-----END DH PARAMETERS-----
diff --git a/tests/certs/Server-localhost0h-sv.key b/tests/certs/Server-localhost0h-sv.key
new file mode 100644
index 0000000..95c4666
--- /dev/null
+++ b/tests/certs/Server-localhost0h-sv.key
@@ -0,0 +1,15 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICXAIBAAKBgQDMqZErIuiQK+VM3K5t2kzzMsylaGdaO7mGo5WIPuhjw+0AYBkD
+K11bVoraIV5xXNHj3lEYwRcUsTOQAFya5XMLqIic0AtUvOo6Od32ZYFLKZlMcdP3
+aX+A6OhtYUGDh+usLL0P6xv9ojeXbTFWuktR3bEB64n4Jd5bo+WyP0x3UwIDAQAB
+AoGAGT+OBilPUYHoztumtSyqM5J/xqQjo/EcSSzjJKTGHJCuK06vp0FxSfRaOuDE
++u09g4QIsyoXA9l8h/ZTdlR6Jax5nc+iRFs/21isrgKAsZYj4DghjgXJ9LWGHXnb
+7xstVFkFBGnOaeY7dVr54907TYUQwtJg4fk7Vror05gb1qECQQDykAxr2D/CxLk9
+RjWDi/P6JnfF0ZxZzCe0yATvuZ89+rpWQ5uxEJDq5FqwW4QXX+0G2aWDv64YExPS
+JmWQTlojAkEA2AAHDv2KBWFcXeTlWnKZTdzUOniE8PzS5zipi2ssiqXScrj9NX2U
+yCCOkv/42blPXBKbaVnfWBEhtj7pQxHJEQJBAOTvXjnfVXafs/IINPPegLyF2B/G
+EZqTXJp8+mPEP28BGSPYFbdN2mlIc+vlxEtHh3AitdweatNgFiIPiWZk/R8CQEIf
+EAoYtw2alknv7f3YIvHg7d7QUfHrkyxQ/iW9sy7mQBv6YRjkzozM2phJX4ZW4eJP
+l9+SMXqmE+nULFfps+ECQFVkjPDF065x++Fh3BVtNJ0goYStTJM6IcmYKflap+Ux
+cORZUWJ8tvDavlSSwQQYK8kOVTINC6iFwwEQ41HlYLE=
+-----END RSA PRIVATE KEY-----
diff --git a/tests/certs/Server-localhost0h-sv.p12 b/tests/certs/Server-localhost0h-sv.p12
new file mode 100644
index 0000000..82e03c7
--- /dev/null
+++ b/tests/certs/Server-localhost0h-sv.p12
Binary files differ
diff --git a/tests/certs/Server-localhost0h-sv.pem b/tests/certs/Server-localhost0h-sv.pem
new file mode 100644
index 0000000..45be9c3
--- /dev/null
+++ b/tests/certs/Server-localhost0h-sv.pem
@@ -0,0 +1,127 @@
+extensions = x509v3
+[ x509v3 ]
+#subjectAltName = DNS:localhost\0h
+subjectAltName = DER:30:0d:82:0b:6c:6f:63:61:6c:68:6f:73:74:00:68
+keyUsage = keyEncipherment
+extendedKeyUsage = serverAuth
+subjectKeyIdentifier = hash
+authorityKeyIdentifier = keyid
+basicConstraints = critical,CA:false
+[ req ]
+default_bits = 1024
+distinguished_name = req_DN
+default_md = sha256
+string_mask = utf8only
+[ req_DN ]
+countryName = "Country Name is Northern Nowhere"
+countryName_value = NN
+organizationName = "Organization Name"
+organizationName_value = Edel Curl Arctic Illudium Research Cloud
+commonName = "Common Name"
+commonName_value = localhost
+
+[something]
+# The key
+# the certificate
+# some dhparam
+-----BEGIN RSA PRIVATE KEY-----
+MIICXAIBAAKBgQDMqZErIuiQK+VM3K5t2kzzMsylaGdaO7mGo5WIPuhjw+0AYBkD
+K11bVoraIV5xXNHj3lEYwRcUsTOQAFya5XMLqIic0AtUvOo6Od32ZYFLKZlMcdP3
+aX+A6OhtYUGDh+usLL0P6xv9ojeXbTFWuktR3bEB64n4Jd5bo+WyP0x3UwIDAQAB
+AoGAGT+OBilPUYHoztumtSyqM5J/xqQjo/EcSSzjJKTGHJCuK06vp0FxSfRaOuDE
++u09g4QIsyoXA9l8h/ZTdlR6Jax5nc+iRFs/21isrgKAsZYj4DghjgXJ9LWGHXnb
+7xstVFkFBGnOaeY7dVr54907TYUQwtJg4fk7Vror05gb1qECQQDykAxr2D/CxLk9
+RjWDi/P6JnfF0ZxZzCe0yATvuZ89+rpWQ5uxEJDq5FqwW4QXX+0G2aWDv64YExPS
+JmWQTlojAkEA2AAHDv2KBWFcXeTlWnKZTdzUOniE8PzS5zipi2ssiqXScrj9NX2U
+yCCOkv/42blPXBKbaVnfWBEhtj7pQxHJEQJBAOTvXjnfVXafs/IINPPegLyF2B/G
+EZqTXJp8+mPEP28BGSPYFbdN2mlIc+vlxEtHh3AitdweatNgFiIPiWZk/R8CQEIf
+EAoYtw2alknv7f3YIvHg7d7QUfHrkyxQ/iW9sy7mQBv6YRjkzozM2phJX4ZW4eJP
+l9+SMXqmE+nULFfps+ECQFVkjPDF065x++Fh3BVtNJ0goYStTJM6IcmYKflap+Ux
+cORZUWJ8tvDavlSSwQQYK8kOVTINC6iFwwEQ41HlYLE=
+-----END RSA PRIVATE KEY-----
+Certificate:
+ Data:
+ Version: 3 (0x2)
+ Serial Number:
+ 0b:98:95:00:0c:7e
+ Signature Algorithm: sha1WithRSAEncryption
+ Issuer:
+ countryName = NN
+ organizationName = Edel Curl Arctic Illudium Research Cloud
+ commonName = Nothern Nowhere Trust Anchor
+ Validity
+ Not Before: May 27 21:37:54 2010 GMT
+ Not After : Aug 13 21:37:54 2018 GMT
+ Subject:
+ countryName = NN
+ organizationName = Edel Curl Arctic Illudium Research Cloud
+ commonName = localhost
+ Subject Public Key Info:
+ Public Key Algorithm: rsaEncryption
+ Public-Key: (1024 bit)
+ Modulus:
+ 00:cc:a9:91:2b:22:e8:90:2b:e5:4c:dc:ae:6d:da:
+ 4c:f3:32:cc:a5:68:67:5a:3b:b9:86:a3:95:88:3e:
+ e8:63:c3:ed:00:60:19:03:2b:5d:5b:56:8a:da:21:
+ 5e:71:5c:d1:e3:de:51:18:c1:17:14:b1:33:90:00:
+ 5c:9a:e5:73:0b:a8:88:9c:d0:0b:54:bc:ea:3a:39:
+ dd:f6:65:81:4b:29:99:4c:71:d3:f7:69:7f:80:e8:
+ e8:6d:61:41:83:87:eb:ac:2c:bd:0f:eb:1b:fd:a2:
+ 37:97:6d:31:56:ba:4b:51:dd:b1:01:eb:89:f8:25:
+ de:5b:a3:e5:b2:3f:4c:77:53
+ Exponent: 65537 (0x10001)
+ X509v3 extensions:
+ X509v3 Subject Alternative Name:
+ DNS:localhost
+ X509v3 Key Usage:
+ Key Encipherment
+ X509v3 Extended Key Usage:
+ TLS Web Server Authentication
+ X509v3 Subject Key Identifier:
+ 3B:2B:84:0D:23:3C:46:F9:9B:E5:C2:FA:B7:30:E7:AC:E3:ED:09:C3
+ X509v3 Authority Key Identifier:
+ keyid:AD:3E:E2:39:07:B8:5C:AA:26:90:94:4C:26:69:21:83:E2:4E:36:94
+
+ X509v3 Basic Constraints: critical
+ CA:FALSE
+ Signature Algorithm: sha1WithRSAEncryption
+ a2:fa:61:4e:c0:10:1f:f8:38:2c:fd:a6:74:85:df:8e:ee:41:
+ 90:a1:d7:c9:32:65:5d:61:d5:13:51:3b:11:1c:7b:01:06:70:
+ 9f:93:52:54:15:bd:93:3a:f8:40:e3:e2:ab:01:96:fb:73:c5:
+ 42:2c:ad:ce:e8:52:57:db:b6:15:90:75:e3:e5:75:99:b0:83:
+ ed:b0:fc:f2:d0:d9:3d:68:1c:d9:b4:cd:a1:a9:40:19:44:46:
+ 14:8b:11:6e:2e:1c:65:85:73:45:f0:8b:4f:ea:01:2d:61:0f:
+ ae:0d:70:0c:d3:3c:1c:1f:24:66:a3:0b:62:d1:87:1e:8e:96:
+ f6:43:cf:1c:24:e7:94:d0:7e:b0:ee:1b:6f:14:1f:04:35:e8:
+ fc:3c:c8:9e:e3:6e:0e:4c:7d:a9:23:97:2d:6e:b1:4d:e3:05:
+ 1b:ce:86:2f:2f:b3:c9:60:47:58:ac:ea:4c:cb:c2:7b:0f:08:
+ b8:a7:90:e7:22:32:70:f6:09:3e:f9:54:94:b0:37:50:22:60:
+ 49:1c:84:9e:1a:22:0c:3e:a9:16:7c:5e:b1:50:13:6b:82:14:
+ d3:8a:3d:4d:ed:18:ca:40:59:d6:b9:72:9f:64:e5:0b:e7:a6:
+ b8:ee:29:b5:6a:ec:82:b2:94:56:36:e3:87:b3:07:aa:69:b8:
+ 2c:ef:0c:14
+-----BEGIN CERTIFICATE-----
+MIIDQzCCAiugAwIBAgIGC5iVAAx+MA0GCSqGSIb3DQEBBQUAMGcxCzAJBgNVBAYT
+Ak5OMTEwLwYDVQQKDChFZGVsIEN1cmwgQXJjdGljIElsbHVkaXVtIFJlc2VhcmNo
+IENsb3VkMSUwIwYDVQQDDBxOb3RoZXJuIE5vd2hlcmUgVHJ1c3QgQW5jaG9yMB4X
+DTEwMDUyNzIxMzc1NFoXDTE4MDgxMzIxMzc1NFowVDELMAkGA1UEBhMCTk4xMTAv
+BgNVBAoMKEVkZWwgQ3VybCBBcmN0aWMgSWxsdWRpdW0gUmVzZWFyY2ggQ2xvdWQx
+EjAQBgNVBAMMCWxvY2FsaG9zdDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA
+zKmRKyLokCvlTNyubdpM8zLMpWhnWju5hqOViD7oY8PtAGAZAytdW1aK2iFecVzR
+495RGMEXFLEzkABcmuVzC6iInNALVLzqOjnd9mWBSymZTHHT92l/gOjobWFBg4fr
+rCy9D+sb/aI3l20xVrpLUd2xAeuJ+CXeW6Plsj9Md1MCAwEAAaOBizCBiDAWBgNV
+HREEDzANggtsb2NhbGhvc3QAaDALBgNVHQ8EBAMCBSAwEwYDVR0lBAwwCgYIKwYB
+BQUHAwEwHQYDVR0OBBYEFDsrhA0jPEb5m+XC+rcw56zj7QnDMB8GA1UdIwQYMBaA
+FK0+4jkHuFyqJpCUTCZpIYPiTjaUMAwGA1UdEwEB/wQCMAAwDQYJKoZIhvcNAQEF
+BQADggEBAKL6YU7AEB/4OCz9pnSF347uQZCh18kyZV1h1RNROxEcewEGcJ+TUlQV
+vZM6+EDj4qsBlvtzxUIsrc7oUlfbthWQdePldZmwg+2w/PLQ2T1oHNm0zaGpQBlE
+RhSLEW4uHGWFc0Xwi0/qAS1hD64NcAzTPBwfJGajC2LRhx6OlvZDzxwk55TQfrDu
+G28UHwQ16Pw8yJ7jbg5Mfakjly1usU3jBRvOhi8vs8lgR1is6kzLwnsPCLinkOci
+MnD2CT75VJSwN1AiYEkchJ4aIgw+qRZ8XrFQE2uCFNOKPU3tGMpAWda5cp9k5Qvn
+prjuKbVq7IKylFY244ezB6ppuCzvDBQ=
+-----END CERTIFICATE-----
+-----BEGIN DH PARAMETERS-----
+MIGHAoGBAL/3hRxvWX+Mdyu/aBPU1JeeA5sg4nXtA7B24eCql9Tq53Lks1/HJ5B+
+xSapGAFd+22xhBsNkJihf74oiPEVr9nNoLjFV/DZe259+JYgs+pBTFN+Cp13ALUi
+CeZxX2mlxlstD1SBRTKgxA/j4ttR1Chn8knn+RVdFE9YFKCYPyLrAgEC
+-----END DH PARAMETERS-----
diff --git a/tests/certs/Server-localhost0h-sv.prm b/tests/certs/Server-localhost0h-sv.prm
new file mode 100644
index 0000000..5e8944b
--- /dev/null
+++ b/tests/certs/Server-localhost0h-sv.prm
@@ -0,0 +1,26 @@
+extensions = x509v3
+[ x509v3 ]
+#subjectAltName = DNS:localhost\0h
+subjectAltName = DER:30:0d:82:0b:6c:6f:63:61:6c:68:6f:73:74:00:68
+keyUsage = keyEncipherment
+extendedKeyUsage = serverAuth
+subjectKeyIdentifier = hash
+authorityKeyIdentifier = keyid
+basicConstraints = critical,CA:false
+[ req ]
+default_bits = 1024
+distinguished_name = req_DN
+default_md = sha256
+string_mask = utf8only
+[ req_DN ]
+countryName = "Country Name is Northern Nowhere"
+countryName_value = NN
+organizationName = "Organization Name"
+organizationName_value = Edel Curl Arctic Illudium Research Cloud
+commonName = "Common Name"
+commonName_value = localhost
+
+[something]
+# The key
+# the certificate
+# some dhparam
diff --git a/tests/certs/scripts/genroot.sh b/tests/certs/scripts/genroot.sh
new file mode 100755
index 0000000..6ac1388
--- /dev/null
+++ b/tests/certs/scripts/genroot.sh
@@ -0,0 +1,66 @@
+#!/bin/bash
+
+# (c) CopyRight EdelWeb for EdelKey and OpenEvidence, 2000-2004, 2009
+# Author: Peter Sylvester
+
+# "libre" for integration with curl
+
+OPENSSL=openssl
+if [ -f /usr/local/ssl/bin/openssl ] ; then
+OPENSSL=/usr/local/ssl/bin/openssl
+fi
+
+USAGE="echo Usage is genroot.sh \<name\>"
+
+HOME=`pwd`
+cd $HOME
+
+KEYSIZE=2048
+DURATION=6000
+
+PREFIX=$1
+if [ ".$PREFIX" = . ] ; then
+ echo No configuration prefix
+ NOTOK=1
+else
+ if [ ! -f $PREFIX-ca.prm ] ; then
+ echo No configuration file $PREFIX-ca.prm
+ NOTOK=1
+ fi
+fi
+
+if [ ".$NOTOK" != . ] ; then
+ echo "Sorry, I can't do that for you."
+ $USAGE
+ exit
+fi
+
+GETSERIAL="\$t = time ;\$d = \$t . substr(\$t+$$ ,-4,4)-1;print \$d"
+SERIAL=`/usr/bin/env perl -e "$GETSERIAL"`
+
+echo SERIAL=$SERIAL PREFIX=$PREFIX DURATION=$DURATION KEYSIZE=$KEYSIZE
+
+echo "openssl genrsa -out $PREFIX-ca.key $KEYSIZE -passout XXX"
+openssl genrsa -out $PREFIX-ca.key $KEYSIZE -passout pass:secret
+
+echo "openssl req -config $PREFIX-ca.prm -new -key $PREFIX-ca.key -out $PREFIX-ca.csr"
+$OPENSSL req -config $PREFIX-ca.prm -new -key $PREFIX-ca.key -out $PREFIX-ca.csr -passin pass:secret
+
+echo "openssl x509 -set_serial $SERIAL -extfile $PREFIX-ca.prm -days $DURATION -req -signkey $PREFIX-ca.key -in $PREFIX-ca.csr -out $PREFIX-$SERIAL.ca-cacert -sha1 "
+
+$OPENSSL x509 -set_serial $SERIAL -extfile $PREFIX-ca.prm -days $DURATION -req -signkey $PREFIX-ca.key -in $PREFIX-ca.csr -out $PREFIX-$SERIAL-ca.cacert -sha1
+
+echo "openssl x509 -text -hash -out $PREFIX-ca.cacert -in $PREFIX-$SERIAL-ca.cacert -nameopt multiline"
+$OPENSSL x509 -text -hash -out $PREFIX-ca.cacert -in $PREFIX-$SERIAL-ca.cacert -nameopt multiline
+
+echo "openssl x509 -in $PREFIX-ca.cacert -outform der -out $PREFIX-ca.der "
+$OPENSSL x509 -in $PREFIX-ca.cacert -outform der -out $PREFIX-ca.der
+
+echo "openssl x509 -in $PREFIX-ca.cacert -text -out $PREFIX-ca.crt -nameopt multiline"
+
+$OPENSSL x509 -in $PREFIX-ca.cacert -text -out $PREFIX-ca.crt -nameopt multiline
+
+echo "openssl x509 -noout -text -in $PREFIX-ca.cacert -nameopt multiline"
+$OPENSSL x509 -noout -text -in $PREFIX-ca.cacert -nameopt multiline
+
+#$OPENSSL rsa -in ../keys/$PREFIX-ca.key -text -noout -pubout
diff --git a/tests/certs/scripts/genserv.sh b/tests/certs/scripts/genserv.sh
new file mode 100755
index 0000000..a70da9c
--- /dev/null
+++ b/tests/certs/scripts/genserv.sh
@@ -0,0 +1,112 @@
+#!/bin/bash
+
+# (c) CopyRight EdelWeb for EdelKey and OpenEvidence, 2000-2004, 2009
+# Author: Peter Sylvester
+
+# "libre" for integration with curl
+
+OPENSSL=openssl
+if [ -f /usr/local/ssl/bin/openssl ] ; then
+ OPENSSL=/usr/local/ssl/bin/openssl
+fi
+
+USAGE="echo Usage is genserv.sh <prefix> <caprefix>"
+
+HOME=`pwd`
+cd $HOME
+
+KEYSIZE=1024
+DURATION=3000
+
+REQ=YES
+P12=NO
+DHP=NO
+
+PREFIX=$1
+if [ ".$PREFIX" = . ] ; then
+ echo No configuration prefix
+ NOTOK=1
+else
+ if [ ! -f $PREFIX-sv.prm ] ; then
+ echo No configuration file $PREFIX-sv.prm
+ NOTOK=1
+ fi
+fi
+
+CAPREFIX=$2
+if [ ".$CAPREFIX" = . ] ; then
+ echo No CA prefix
+ NOTOK=1
+else
+ if [ ! -f $CAPREFIX-ca.cacert ] ; then
+ echo No CA certficate file $CAPREFIX-ca.caert
+ NOTOK=1
+ fi
+ if [ ! -f $CAPREFIX-ca.key ] ; then
+ echo No $CAPREFIX key
+ NOTOK=1
+ fi
+fi
+
+if [ ".$NOTOK" != . ] ; then
+ echo "Sorry, I can't do that for you."
+ $USAGE
+ exit
+fi
+
+if [ ".$SERIAL" = . ] ; then
+ GETSERIAL="\$t = time ;\$d = \$t . substr(\$t+$$ ,-4,4)-1;print \$d"
+ SERIAL=`/usr/bin/env perl -e "$GETSERIAL"`
+fi
+
+echo SERIAL=$SERIAL PREFIX=$PREFIX CAPREFIX=$CAPREFIX DURATION=$DURATION KEYSIZE=$KEYSIZE
+
+if [ "$DHP." = YES. ] ; then
+ echo "openssl dhparam -2 -out $PREFIX-sv.dhp $KEYSIZE"
+ $OPENSSL dhparam -2 -out $PREFIX-sv.dhp $KEYSIZE
+fi
+
+if [ "$REQ." = YES. ] ; then
+ echo "openssl req -config $PREFIX-sv.prm -newkey rsa:$KEYSIZE -keyout $PREFIX-sv.key -out $PREFIX-sv.csr -passout XXX"
+ $OPENSSL req -config $PREFIX-sv.prm -newkey rsa:$KEYSIZE -keyout $PREFIX-sv.key -out $PREFIX-sv.csr -passout pass:secret
+fi
+
+echo "openssl rsa -in $PREFIX-sv.key -out $PREFIX-sv.key"
+$OPENSSL rsa -in $PREFIX-sv.key -out $PREFIX-sv.key -passin pass:secret
+echo pseudo secrets generated
+
+echo "openssl x509 -set_serial $SERIAL -extfile $PREFIX-sv.prm -days $DURATION -CA $CAPREFIX-ca.cacert -CAkey $CAPREFIX-ca.key -in $PREFIX-sv.csr -req -out $PREFIX-sv.crt -text -nameopt multiline -sha1"
+
+$OPENSSL x509 -set_serial $SERIAL -extfile $PREFIX-sv.prm -days $DURATION -CA $CAPREFIX-ca.cacert -CAkey $CAPREFIX-ca.key -in $PREFIX-sv.csr -req -out $PREFIX-sv.crt -text -nameopt multiline -sha1
+
+if [ "$P12." = YES. ] ; then
+
+ echo "$OPENSSL pkcs12 -export -des3 -out $PREFIX-sv.p12 -caname $CAPREFIX -name $PREFIX -inkey $PREFIX-sv.key -in $PREFIX-sv.crt -certfile $CAPREFIX-ca.crt "
+
+ $OPENSSL pkcs12 -export -des3 -out $PREFIX-sv.p12 -caname $CAPREFIX -name $PREFIX -inkey $PREFIX-sv.key -in $PREFIX-sv.crt -certfile $CAPREFIX-ca.crt
+fi
+
+echo "openssl x509 -noout -text -hash -in $PREFIX-sv.selfcert -nameopt multiline"
+$OPENSSL x509 -noout -text -hash -in $PREFIX-sv.crt -nameopt multiline
+
+# revoke server cert
+touch $CAPREFIX-ca.db
+echo 01 > $CAPREFIX-ca.cnt
+echo "openssl ca -config $CAPREFIX-ca.cnf -revoke $PREFIX-sv.crt"
+$OPENSSL ca -config $CAPREFIX-ca.cnf -revoke $PREFIX-sv.crt
+
+# issue CRL
+echo "openssl ca -config $CAPREFIX-ca.cnf -gencrl -out $PREFIX-sv.crl"
+$OPENSSL ca -config $CAPREFIX-ca.cnf -gencrl -out $PREFIX-sv.crl
+
+echo "openssl x509 -in $PREFIX-sv.crt -outform der -out $PREFIX-sv.der "
+$OPENSSL x509 -in $PREFIX-sv.crt -outform der -out $PREFIX-sv.der
+
+# all together now
+touch $PREFIX-sv.dhp
+cat $PREFIX-sv.prm $PREFIX-sv.key $PREFIX-sv.crt $PREFIX-sv.dhp >$PREFIX-sv.pem
+chmod o-r $PREFIX-sv.prm
+
+echo "$PREFIX-sv.pem done"
+
+
diff --git a/tests/data/DISABLED b/tests/data/DISABLED
new file mode 100644
index 0000000..b6071cb
--- /dev/null
+++ b/tests/data/DISABLED
@@ -0,0 +1,5 @@
+# This file can be used to specify test cases that should not run when all
+# test cases are run by runtests.pl. Just add the plain test case numbers, one
+# per line.
+# Lines starting with '#' letters are treated as comments.
+564
diff --git a/tests/data/Makefile.am b/tests/data/Makefile.am
new file mode 100644
index 0000000..9370974
--- /dev/null
+++ b/tests/data/Makefile.am
@@ -0,0 +1,92 @@
+iall:
+install:
+test:
+
+EXTRA_DIST = test1 test108 test117 test127 test20 test27 test34 test46 \
+ test10 test109 test118 test13 test200 test28 test36 test47 test100 test11 \
+ test119 test14 test201 test29 test37 test5 test101 test110 test12 test15 \
+ test202 test3 test4 test6 test102 test111 test120 test16 test21 test30 \
+ test7 test103 test112 test121 test17 test22 test300 test8 test104 test113 \
+ test122 test18 test23 test301 test9 test105 test114 test123 test19 test24 \
+ test302 test43 test31 test106 test115 test124 test190 test25 test303 \
+ test44 test38 test107 test116 test125 test2 test26 test33 test45 test126 \
+ test304 test39 test32 test128 test48 test306 test130 test131 test132 \
+ test133 test134 test135 test305 test49 test50 test51 test52 test53 test54 \
+ test55 test56 test500 test501 test502 test503 test504 test136 test57 \
+ test137 test138 test58 test139 test140 test141 test59 test60 test61 \
+ test142 test143 test62 test63 test64 test65 test66 test144 test145 test67 \
+ test68 test41 test40 test42 test69 test70 test71 test72 test73 test146 \
+ test505 test74 test75 test76 test77 test78 test147 test148 test506 test79 \
+ test80 test81 test82 test83 test84 test85 test86 test87 test507 test149 \
+ test88 test89 test90 test508 test91 test92 test203 test93 test94 test95 \
+ test510 test97 test98 test99 test150 test151 test152 test153 test154 \
+ test155 test156 test157 test158 test159 test511 test160 test161 test162 \
+ test163 test164 test512 test165 test166 test167 test168 test169 test170 \
+ test171 test172 test204 test205 test173 test174 test175 test176 test177 \
+ test513 test514 test178 test179 test180 test181 test182 test183 test184 \
+ test185 test186 test187 test188 test189 test191 test192 test193 test194 \
+ test195 test196 test197 test198 test515 test516 test517 test518 test210 \
+ test211 test212 test220 test221 test222 test223 test224 test206 test207 \
+ test208 test209 test213 test240 test241 test242 test519 test214 test215 \
+ test216 test217 test218 test199 test225 test226 test227 test228 test229 \
+ test233 test234 test235 test236 test520 test237 test238 test239 test243 \
+ test245 test246 test247 test248 test249 test250 test251 test252 test253 \
+ test254 test255 test521 test522 test523 test256 test257 test258 test259 \
+ test260 test261 test262 test263 test264 test265 test266 test267 test268 \
+ test269 test270 test271 test272 test273 test274 test275 test524 test525 \
+ test276 test277 test526 test527 test528 test530 DISABLED test278 test279 \
+ test531 test280 test529 test532 test533 test534 test535 test281 test537 \
+ test282 test283 test284 test538 test285 test286 test307 test308 test287 \
+ test400 test288 test600 test601 test602 test603 test401 test402 test290 \
+ test291 test292 test293 test403 test404 test405 test604 test605 test606 \
+ test607 test608 test609 test294 test295 test296 test297 test298 test610 \
+ test611 test612 test406 test407 test408 test409 test613 test614 test700 \
+ test701 test702 test704 test705 test703 test706 test707 test350 test351 \
+ test352 test353 test289 test540 test354 test231 test1000 test1001 \
+ test1002 test1003 test1004 test1005 test1006 test615 test1007 test541 \
+ test1010 test1011 test1012 test542 test543 test536 test1008 test1009 \
+ test2000 test2001 test2002 test2003 test35 test544 test545 test2004 \
+ test546 test1013 test1014 test1015 test547 test548 test549 test550 \
+ test551 test552 test1016 test1017 test1018 test1019 test1020 test553 \
+ test1021 test1022 test1023 test309 test616 test617 test618 test619 \
+ test620 test621 test622 test623 test624 test625 test626 test627 test554 \
+ test1024 test1025 test555 test1026 test1027 test1028 test1029 test1030 \
+ test556 test557 test1031 test628 test629 test630 test631 test632 test1032 \
+ test1033 test539 test1034 test1035 test1036 test1037 test1038 test1039 \
+ test1040 test1041 test1042 test1043 test1044 test1045 test1046 test1047 \
+ test1048 test1049 test1050 test1051 test1052 test1053 test1054 test1055 \
+ test1056 test1057 test1058 test1059 test1060 test1061 test1062 test1063 \
+ test1064 test1065 test1066 test1067 test1068 test1069 test1070 test1071 \
+ test1072 test1073 test1074 test1075 test1076 test1077 test1078 test1079 \
+ test1080 test1081 test1082 test1083 test1084 test1085 test633 test634 \
+ test635 test636 test637 test558 test559 test1086 test1087 test1088 \
+ test574 test575 test576 test577 test1113 test1114 test1089 test1090 \
+ test1091 test1092 test1093 test1094 test1095 test1096 test1097 test560 \
+ test561 test1098 test1099 test562 test563 test1100 test564 test1101 \
+ test1102 test1103 test1104 test299 test310 test311 test312 test1105 \
+ test565 test800 test1106 test801 test566 test802 test803 test1107 \
+ test1108 test1109 test1110 test1111 test1112 test129 test567 test568 \
+ test569 test570 test571 test572 test804 test805 test806 test807 test573 \
+ test313 test1115 test578 test579 test1116 test1200 test1201 test1202 \
+ test1203 test1117
+
+filecheck:
+ @mkdir test-place; \
+ cp "$(top_srcdir)"/tests/data/test[0-9]* test-place/; \
+ rm test-place/*~; \
+ for f in $(EXTRA_DIST); do \
+ if test -f "$(top_srcdir)/tests/data/$$f"; then \
+ rm -f "test-place/$$f"; \
+ else \
+ echo "$$f is listed but missing!"; \
+ fi \
+ done; \
+ echo "Local files not present in EXTRA_DIST:" ; \
+ ls test-place; \
+ ! ls test-place | grep . >/dev/null ; \
+ RC=$$? ; \
+ rm -rf test-place ; \
+ exit $$RC
+
+show:
+ @echo $(EXTRA_DIST)
diff --git a/tests/data/Makefile.in b/tests/data/Makefile.in
new file mode 100644
index 0000000..435b126
--- /dev/null
+++ b/tests/data/Makefile.in
@@ -0,0 +1,495 @@
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005 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.
+
+@SET_MAKE@
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = tests/data
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
+ $(top_srcdir)/m4/curl-confopts.m4 \
+ $(top_srcdir)/m4/curl-functions.m4 \
+ $(top_srcdir)/m4/curl-override.m4 \
+ $(top_srcdir)/m4/curl-reentrant.m4 \
+ $(top_srcdir)/m4/curl-system.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/lib/curl_config.h \
+ $(top_builddir)/src/curl_config.h \
+ $(top_builddir)/include/curl/curlbuild.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_LIBHOSTNAME_FALSE = @BUILD_LIBHOSTNAME_FALSE@
+BUILD_LIBHOSTNAME_TRUE = @BUILD_LIBHOSTNAME_TRUE@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_OPTIONS = @CONFIGURE_OPTIONS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CROSSCOMPILING_FALSE = @CROSSCOMPILING_FALSE@
+CROSSCOMPILING_TRUE = @CROSSCOMPILING_TRUE@
+CURLDEBUG_FALSE = @CURLDEBUG_FALSE@
+CURLDEBUG_TRUE = @CURLDEBUG_TRUE@
+CURL_CA_BUNDLE = @CURL_CA_BUNDLE@
+CURL_CFLAG_EXTRAS = @CURL_CFLAG_EXTRAS@
+CURL_DISABLE_DICT = @CURL_DISABLE_DICT@
+CURL_DISABLE_FILE = @CURL_DISABLE_FILE@
+CURL_DISABLE_FTP = @CURL_DISABLE_FTP@
+CURL_DISABLE_GOPHER = @CURL_DISABLE_GOPHER@
+CURL_DISABLE_HTTP = @CURL_DISABLE_HTTP@
+CURL_DISABLE_IMAP = @CURL_DISABLE_IMAP@
+CURL_DISABLE_LDAP = @CURL_DISABLE_LDAP@
+CURL_DISABLE_LDAPS = @CURL_DISABLE_LDAPS@
+CURL_DISABLE_POP3 = @CURL_DISABLE_POP3@
+CURL_DISABLE_PROXY = @CURL_DISABLE_PROXY@
+CURL_DISABLE_RTSP = @CURL_DISABLE_RTSP@
+CURL_DISABLE_SMTP = @CURL_DISABLE_SMTP@
+CURL_DISABLE_TELNET = @CURL_DISABLE_TELNET@
+CURL_DISABLE_TFTP = @CURL_DISABLE_TFTP@
+CURL_LIBS = @CURL_LIBS@
+CURL_NETWORK_LIBS = @CURL_NETWORK_LIBS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_SHARED = @ENABLE_SHARED@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_LDAP_SSL = @HAVE_LDAP_SSL@
+HAVE_LIBZ = @HAVE_LIBZ@
+HAVE_LIBZ_FALSE = @HAVE_LIBZ_FALSE@
+HAVE_LIBZ_TRUE = @HAVE_LIBZ_TRUE@
+HAVE_PK11_CREATEGENERICOBJECT = @HAVE_PK11_CREATEGENERICOBJECT@
+IDN_ENABLED = @IDN_ENABLED@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+IPV6_ENABLED = @IPV6_ENABLED@
+KRB4_ENABLED = @KRB4_ENABLED@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBCURL_LIBS = @LIBCURL_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+MANOPT = @MANOPT@
+MIMPURE_FALSE = @MIMPURE_FALSE@
+MIMPURE_TRUE = @MIMPURE_TRUE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NO_UNDEFINED_FALSE = @NO_UNDEFINED_FALSE@
+NO_UNDEFINED_TRUE = @NO_UNDEFINED_TRUE@
+NROFF = @NROFF@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH = @PATH@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+PKGADD_NAME = @PKGADD_NAME@
+PKGADD_PKG = @PKGADD_PKG@
+PKGADD_VENDOR = @PKGADD_VENDOR@
+PKGCONFIG = @PKGCONFIG@
+RANDOM_FILE = @RANDOM_FILE@
+RANLIB = @RANLIB@
+REQUIRE_LIB_DEPS = @REQUIRE_LIB_DEPS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SONAME_BUMP_FALSE = @SONAME_BUMP_FALSE@
+SONAME_BUMP_TRUE = @SONAME_BUMP_TRUE@
+SSL_ENABLED = @SSL_ENABLED@
+STATICLIB_FALSE = @STATICLIB_FALSE@
+STATICLIB_TRUE = @STATICLIB_TRUE@
+STRIP = @STRIP@
+SUPPORT_FEATURES = @SUPPORT_FEATURES@
+SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
+TEST_SERVER_LIBS = @TEST_SERVER_LIBS@
+USE_ARES = @USE_ARES@
+USE_EMBEDDED_ARES_FALSE = @USE_EMBEDDED_ARES_FALSE@
+USE_EMBEDDED_ARES_TRUE = @USE_EMBEDDED_ARES_TRUE@
+USE_GNUTLS = @USE_GNUTLS@
+USE_LIBRTMP = @USE_LIBRTMP@
+USE_LIBSSH2 = @USE_LIBSSH2@
+USE_MANUAL_FALSE = @USE_MANUAL_FALSE@
+USE_MANUAL_TRUE = @USE_MANUAL_TRUE@
+USE_NSS = @USE_NSS@
+USE_OPENLDAP = @USE_OPENLDAP@
+USE_POLARSSL = @USE_POLARSSL@
+USE_SSLEAY = @USE_SSLEAY@
+USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
+VERSION = @VERSION@
+VERSIONNUM = @VERSIONNUM@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+libext = @libext@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+EXTRA_DIST = test1 test108 test117 test127 test20 test27 test34 test46 \
+ test10 test109 test118 test13 test200 test28 test36 test47 test100 test11 \
+ test119 test14 test201 test29 test37 test5 test101 test110 test12 test15 \
+ test202 test3 test4 test6 test102 test111 test120 test16 test21 test30 \
+ test7 test103 test112 test121 test17 test22 test300 test8 test104 test113 \
+ test122 test18 test23 test301 test9 test105 test114 test123 test19 test24 \
+ test302 test43 test31 test106 test115 test124 test190 test25 test303 \
+ test44 test38 test107 test116 test125 test2 test26 test33 test45 test126 \
+ test304 test39 test32 test128 test48 test306 test130 test131 test132 \
+ test133 test134 test135 test305 test49 test50 test51 test52 test53 test54 \
+ test55 test56 test500 test501 test502 test503 test504 test136 test57 \
+ test137 test138 test58 test139 test140 test141 test59 test60 test61 \
+ test142 test143 test62 test63 test64 test65 test66 test144 test145 test67 \
+ test68 test41 test40 test42 test69 test70 test71 test72 test73 test146 \
+ test505 test74 test75 test76 test77 test78 test147 test148 test506 test79 \
+ test80 test81 test82 test83 test84 test85 test86 test87 test507 test149 \
+ test88 test89 test90 test508 test91 test92 test203 test93 test94 test95 \
+ test510 test97 test98 test99 test150 test151 test152 test153 test154 \
+ test155 test156 test157 test158 test159 test511 test160 test161 test162 \
+ test163 test164 test512 test165 test166 test167 test168 test169 test170 \
+ test171 test172 test204 test205 test173 test174 test175 test176 test177 \
+ test513 test514 test178 test179 test180 test181 test182 test183 test184 \
+ test185 test186 test187 test188 test189 test191 test192 test193 test194 \
+ test195 test196 test197 test198 test515 test516 test517 test518 test210 \
+ test211 test212 test220 test221 test222 test223 test224 test206 test207 \
+ test208 test209 test213 test240 test241 test242 test519 test214 test215 \
+ test216 test217 test218 test199 test225 test226 test227 test228 test229 \
+ test233 test234 test235 test236 test520 test237 test238 test239 test243 \
+ test245 test246 test247 test248 test249 test250 test251 test252 test253 \
+ test254 test255 test521 test522 test523 test256 test257 test258 test259 \
+ test260 test261 test262 test263 test264 test265 test266 test267 test268 \
+ test269 test270 test271 test272 test273 test274 test275 test524 test525 \
+ test276 test277 test526 test527 test528 test530 DISABLED test278 test279 \
+ test531 test280 test529 test532 test533 test534 test535 test281 test537 \
+ test282 test283 test284 test538 test285 test286 test307 test308 test287 \
+ test400 test288 test600 test601 test602 test603 test401 test402 test290 \
+ test291 test292 test293 test403 test404 test405 test604 test605 test606 \
+ test607 test608 test609 test294 test295 test296 test297 test298 test610 \
+ test611 test612 test406 test407 test408 test409 test613 test614 test700 \
+ test701 test702 test704 test705 test703 test706 test707 test350 test351 \
+ test352 test353 test289 test540 test354 test231 test1000 test1001 \
+ test1002 test1003 test1004 test1005 test1006 test615 test1007 test541 \
+ test1010 test1011 test1012 test542 test543 test536 test1008 test1009 \
+ test2000 test2001 test2002 test2003 test35 test544 test545 test2004 \
+ test546 test1013 test1014 test1015 test547 test548 test549 test550 \
+ test551 test552 test1016 test1017 test1018 test1019 test1020 test553 \
+ test1021 test1022 test1023 test309 test616 test617 test618 test619 \
+ test620 test621 test622 test623 test624 test625 test626 test627 test554 \
+ test1024 test1025 test555 test1026 test1027 test1028 test1029 test1030 \
+ test556 test557 test1031 test628 test629 test630 test631 test632 test1032 \
+ test1033 test539 test1034 test1035 test1036 test1037 test1038 test1039 \
+ test1040 test1041 test1042 test1043 test1044 test1045 test1046 test1047 \
+ test1048 test1049 test1050 test1051 test1052 test1053 test1054 test1055 \
+ test1056 test1057 test1058 test1059 test1060 test1061 test1062 test1063 \
+ test1064 test1065 test1066 test1067 test1068 test1069 test1070 test1071 \
+ test1072 test1073 test1074 test1075 test1076 test1077 test1078 test1079 \
+ test1080 test1081 test1082 test1083 test1084 test1085 test633 test634 \
+ test635 test636 test637 test558 test559 test1086 test1087 test1088 \
+ test574 test575 test576 test577 test1113 test1114 test1089 test1090 \
+ test1091 test1092 test1093 test1094 test1095 test1096 test1097 test560 \
+ test561 test1098 test1099 test562 test563 test1100 test564 test1101 \
+ test1102 test1103 test1104 test299 test310 test311 test312 test1105 \
+ test565 test800 test1106 test801 test566 test802 test803 test1107 \
+ test1108 test1109 test1110 test1111 test1112 test129 test567 test568 \
+ test569 test570 test571 test572 test804 test805 test806 test807 test573 \
+ test313 test1115 test578 test579 test1116 test1200 test1201 test1202 \
+ test1203 test1117
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tests/data/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --foreign tests/data/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+ -rm -f libtool
+uninstall-info-am:
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ list='$(DISTFILES)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkdir_p) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile
+installdirs:
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-libtool
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ distclean distclean-generic distclean-libtool distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-exec install-exec-am \
+ install-info install-info-am install-man install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+ uninstall-info-am
+
+iall:
+install:
+test:
+
+filecheck:
+ @mkdir test-place; \
+ cp "$(top_srcdir)"/tests/data/test[0-9]* test-place/; \
+ rm test-place/*~; \
+ for f in $(EXTRA_DIST); do \
+ if test -f "$(top_srcdir)/tests/data/$$f"; then \
+ rm -f "test-place/$$f"; \
+ else \
+ echo "$$f is listed but missing!"; \
+ fi \
+ done; \
+ echo "Local files not present in EXTRA_DIST:" ; \
+ ls test-place; \
+ ! ls test-place | grep . >/dev/null ; \
+ RC=$$? ; \
+ rm -rf test-place ; \
+ exit $$RC
+
+show:
+ @echo $(EXTRA_DIST)
+# 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/tests/data/test1 b/tests/data/test1
new file mode 100644
index 0000000..b882735
--- /dev/null
+++ b/tests/data/test1
@@ -0,0 +1,55 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+</keywords>
+</info>
+
+#
+# Server-side
+<reply name="1">
+<data>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+-foo-
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP GET
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/1
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /1 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test10 b/tests/data/test10
new file mode 100644
index 0000000..806aa69
--- /dev/null
+++ b/tests/data/test10
@@ -0,0 +1,67 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP PUT
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+HTTP/1.0 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+
+blablabla
+
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+simple HTTP PUT from file
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/we/want/10 -T log/test10.txt
+</command>
+<file name="log/test10.txt">
+Weird
+ file
+ to
+ upload
+for
+ testing
+the
+ PUT
+ feature
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+PUT /we/want/10 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 78
+Expect: 100-continue
+
+Weird
+ file
+ to
+ upload
+for
+ testing
+the
+ PUT
+ feature
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test100 b/tests/data/test100
new file mode 100644
index 0000000..6127163
--- /dev/null
+++ b/tests/data/test100
@@ -0,0 +1,56 @@
+<testcase>
+<info>
+<keywords>
+FTP
+PASV
+LIST
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+# When doing LIST, we get the default list output hard-coded in the test
+# FTP server
+<datacheck>
+total 20
+drwxr-xr-x 8 98 98 512 Oct 22 13:06 .
+drwxr-xr-x 8 98 98 512 Oct 22 13:06 ..
+drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT
+-r--r--r-- 1 0 1 35 Jul 16 1996 README
+lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin
+dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev
+drwxrwxrwx 2 98 98 512 May 29 16:04 download.html
+dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc
+drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub
+dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr
+</datacheck>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP dir list PASV
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE A
+LIST
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1000 b/tests/data/test1000
new file mode 100644
index 0000000..e6f8eef
--- /dev/null
+++ b/tests/data/test1000
@@ -0,0 +1,42 @@
+<testcase>
+<info>
+<keywords>
+FTP
+PASV
+LIST
+NOBODY
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+<datacheck>
+</datacheck>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP dir list PASV with -I
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/1000/ -I
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+CWD 1000
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1001 b/tests/data/test1001
new file mode 100644
index 0000000..9a87d6e
--- /dev/null
+++ b/tests/data/test1001
@@ -0,0 +1,104 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP PUT
+HTTP proxy
+HTTP Digest auth
+Resume
+Content-Range
+CUSTOMREQUEST
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+HTTP/1.1 100 Continue
+Server: Microsoft-IIS/5.0
+Date: Sun, 03 Apr 2005 14:57:45 GMT
+X-Powered-By: ASP.NET
+
+HTTP/1.1 401 authentication please swsbounce
+Server: Microsoft-IIS/6.0
+WWW-Authenticate: Digest realm="testrealm", nonce="1053604144"
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 0
+
+</data>
+<data1000>
+HTTP/1.1 200 A OK
+Server: Microsoft-IIS/6.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 3
+
+ok
+</data1000>
+
+<datacheck>
+HTTP/1.1 100 Continue
+Server: Microsoft-IIS/5.0
+Date: Sun, 03 Apr 2005 14:57:45 GMT
+X-Powered-By: ASP.NET
+
+HTTP/1.1 401 authentication please swsbounce
+Server: Microsoft-IIS/6.0
+WWW-Authenticate: Digest realm="testrealm", nonce="1053604144"
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 0
+
+HTTP/1.1 200 A OK
+Server: Microsoft-IIS/6.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 3
+
+ok
+</datacheck>
+
+</reply>
+
+# Client-side
+<client>
+#
+<server>
+http
+</server>
+ <name>
+HTTP POST --digest with PUT and resumed upload and modified method
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/1001 -u auser:apasswd --digest -T log/1001 -x http://%HOSTIP:%HTTPPORT -C 2 -X GET
+</command>
+<file name="log/1001">
+test
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET http://%HOSTIP:%HTTPPORT/1001 HTTP/1.1
+Content-Range: bytes 2-4/5
+User-Agent: curl/7.12.1-CVS (i686-pc-linux-gnu) libcurl/7.12.1-CVS OpenSSL/0.9.6b ipv6 zlib/1.1.4 GSS libidn/0.4.6
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Proxy-Connection: Keep-Alive
+Content-Length: 0
+Expect: 100-continue
+
+GET http://%HOSTIP:%HTTPPORT/1001 HTTP/1.1
+Authorization: Digest username="auser", realm="testrealm", nonce="1053604144", uri="/1001", response="6af4d89c952f4dd4cc215a6878dc499d"
+Content-Range: bytes 2-4/5
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Proxy-Connection: Keep-Alive
+Content-Length: 3
+Expect: 100-continue
+
+st
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1002 b/tests/data/test1002
new file mode 100644
index 0000000..04c18f9
--- /dev/null
+++ b/tests/data/test1002
@@ -0,0 +1,114 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP PUT
+HTTP proxy
+HTTP Digest auth
+Resume
+Content-Range
+CUSTOMREQUEST
+</keywords>
+</info>
+
+<reply>
+<data>
+HTTP/1.1 100 Continue
+Server: Microsoft-IIS/5.0
+Date: Sun, 03 Apr 2005 14:57:45 GMT
+X-Powered-By: ASP.NET
+
+HTTP/1.1 401 authentication please swsbounce
+Server: Microsoft-IIS/6.0
+WWW-Authenticate: Digest realm="testrealm", nonce="1053604144"
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 0
+
+</data>
+<data1000>
+HTTP/1.1 200 A OK
+Server: Microsoft-IIS/6.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 3
+
+ok
+</data1000>
+
+<datacheck>
+HTTP/1.1 100 Continue
+Server: Microsoft-IIS/5.0
+Date: Sun, 03 Apr 2005 14:57:45 GMT
+X-Powered-By: ASP.NET
+
+HTTP/1.1 401 authentication please swsbounce
+Server: Microsoft-IIS/6.0
+WWW-Authenticate: Digest realm="testrealm", nonce="1053604144"
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 0
+
+HTTP/1.1 200 A OK
+Server: Microsoft-IIS/6.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 3
+
+ok
+</datacheck>
+
+</reply>
+
+# Client-side
+<client>
+#
+<server>
+http
+</server>
+ <name>
+HTTP POST --digest with PUT and resumed upload and modified method, twice
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/1002.upload1 -T log/1002 http://%HOSTIP:%HTTPPORT/1002.upload2 -T log/1002 -u auser:apasswd --digest -x http://%HOSTIP:%HTTPPORT -C 2 -X GET
+</command>
+<file name="log/1002">
+test
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET http://%HOSTIP:%HTTPPORT/1002.upload1 HTTP/1.1
+Content-Range: bytes 2-4/5
+User-Agent: curl/7.12.1-CVS (i686-pc-linux-gnu) libcurl/7.12.1-CVS OpenSSL/0.9.6b ipv6 zlib/1.1.4 GSS libidn/0.4.6
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Proxy-Connection: Keep-Alive
+Content-Length: 0
+Expect: 100-continue
+
+GET http://%HOSTIP:%HTTPPORT/1002.upload1 HTTP/1.1
+Authorization: Digest username="auser", realm="testrealm", nonce="1053604144", uri="/1002.upload1", response="198aa9b6acb4b0c71d02a197a5e41f54"
+Content-Range: bytes 2-4/5
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Proxy-Connection: Keep-Alive
+Content-Length: 3
+Expect: 100-continue
+
+st
+GET http://%HOSTIP:%HTTPPORT/1002.upload2 HTTP/1.1
+Authorization: Digest username="auser", realm="testrealm", nonce="1053604144", uri="/1002.upload2", response="d711f0d2042786d930de635ba0d1a1d0"
+Content-Range: bytes 2-4/5
+User-Agent: curl/7.16.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Proxy-Connection: Keep-Alive
+Content-Length: 3
+Expect: 100-continue
+
+st
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1003 b/tests/data/test1003
new file mode 100644
index 0000000..08e377a
--- /dev/null
+++ b/tests/data/test1003
@@ -0,0 +1,48 @@
+<testcase>
+<info>
+<keywords>
+FTP
+RETR
+huge response
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+mooo
+</data>
+# a ~17000 bytes response string to CWD to make sure the ftp parser deals
+# with it nicely
+<servercmd>
+REPLY CWD 250 CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB
+</servercmd>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP with excessively large server command response line
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/path/1003
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+EPSV
+TYPE I
+SIZE 1003
+RETR 1003
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1004 b/tests/data/test1004
new file mode 100644
index 0000000..955163b
--- /dev/null
+++ b/tests/data/test1004
@@ -0,0 +1,59 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP proxy
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+-foo-
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP GET with empty proxy
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/1004 --proxy ""
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /1004 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+<valgrind>
+disable
+</valgrind>
+</verify>
+</testcase>
diff --git a/tests/data/test1005 b/tests/data/test1005
new file mode 100644
index 0000000..5c0c676
--- /dev/null
+++ b/tests/data/test1005
@@ -0,0 +1,48 @@
+<testcase>
+<info>
+<keywords>
+FTP
+RETR
+huge response
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+mooo
+</data>
+# a long set of response strings to CWD to make sure the ftp parser deals
+# with it nicely
+<servercmd>
+REPLY CWD 250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250 Finally, here is the response
+</servercmd>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP with excessively large number of server command response lines
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/path/1005
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+EPSV
+TYPE I
+SIZE 1005
+RETR 1005
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1006 b/tests/data/test1006
new file mode 100644
index 0000000..b37f807
--- /dev/null
+++ b/tests/data/test1006
@@ -0,0 +1,49 @@
+<testcase>
+<info>
+<keywords>
+FTP
+RETR
+huge response
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+mooo
+</data>
+# A long set of response strings to CWD to make sure the ftp parser deals
+# with it nicely. The length hits a boundary condition that may make curl
+# hang.
+<servercmd>
+REPLY CWD 250-AAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250 Finally, here is the response
+</servercmd>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP with excessively large number of server command response lines (boundary condition)
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/path/1006
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+EPSV
+TYPE I
+SIZE 1006
+RETR 1006
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1007 b/tests/data/test1007
new file mode 100644
index 0000000..5966ab3
--- /dev/null
+++ b/tests/data/test1007
@@ -0,0 +1,39 @@
+<testcase>
+<info>
+<keywords>
+TFTP
+TFTP WRQ
+FAILURE
+</keywords>
+</info>
+
+#
+# Client-side
+<client>
+<server>
+tftp
+</server>
+ <name>
+TFTP send with invalid permission on server
+ </name>
+ <command>
+-T log/test1007.txt tftp://%HOSTIP:%TFTPPORT//invalid-file --trace-ascii log/traceit
+</command>
+<file name="log/test1007.txt">
+This data will not be sent
+</file>
+</client>
+
+#
+# Verify pseudo protocol after the test has been "shot"
+<verify>
+<errorcode>
+69
+</errorcode>
+<protocol>
+opcode: 2
+filename: /invalid-file
+mode: octet
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1008 b/tests/data/test1008
new file mode 100644
index 0000000..5334f85
--- /dev/null
+++ b/tests/data/test1008
@@ -0,0 +1,126 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP CONNECT
+HTTP proxy
+HTTP proxy NTLM auth
+</keywords>
+</info>
+
+# Server-side
+<reply>
+
+# this is returned first since we get no proxy-auth
+<data1001>
+HTTP/1.1 407 Authorization Required to proxy me my dear
+Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+Transfer-Encoding: chunked
+
+20
+And you should ignore this data.
+FA0
+XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+0
+
+</data1001>
+
+# This is supposed to be returned when the server gets the second
+# Authorization: NTLM line passed-in from the client
+<data1002>
+HTTP/1.1 200 Things are fine in proxy land
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+
+</data1002>
+
+# this is returned when we get a GET!
+<data2>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 7
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+daniel
+</data2>
+
+# then this is returned when we get proxy-auth
+<data1000>
+HTTP/1.1 200 OK swsbounce
+Server: no
+
+Nice proxy auth sir!
+</data1000>
+
+<datacheck>
+HTTP/1.1 407 Authorization Required to proxy me my dear
+Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+Transfer-Encoding: chunked
+
+HTTP/1.1 200 Things are fine in proxy land
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 7
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+daniel
+</datacheck>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+<features>
+NTLM
+</features>
+ <name>
+HTTP proxy CONNECT auth NTLM with chunked-encoded 407 response
+ </name>
+ <setenv>
+# we force our own host name, in order to make the test machine independent
+CURL_GETHOSTNAME=curlhost
+# we try to use the LD_PRELOAD hack, if not a debug build
+LD_PRELOAD=%PWD/libtest/.libs/libhostname.so
+ </setenv>
+ <command>
+http://test.remote.haxx.se:1008/path/10080002 --proxy http://%HOSTIP:%HTTPPORT --proxy-user silly:person --proxy-ntlm --proxytunnel
+</command>
+<precheck>
+chkhostname curlhost
+</precheck>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent: curl/.*
+</strip>
+<protocol>
+CONNECT test.remote.haxx.se:1008 HTTP/1.1
+Host: test.remote.haxx.se:1008
+Proxy-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+Proxy-Connection: Keep-Alive
+
+CONNECT test.remote.haxx.se:1008 HTTP/1.1
+Host: test.remote.haxx.se:1008
+Proxy-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAABQAFAHAAAAAIAAgAdQAAAAAAAAAAAAAABoKBAKAeQjzKtCQ7ubW8S6MN7B59436GAxPu0CVROwwNBsgxML49gcbAXLT/bU+H5wrS9XNpbGx5Y3VybGhvc3Q=
+Proxy-Connection: Keep-Alive
+
+GET /path/10080002 HTTP/1.1
+User-Agent: curl/7.12.3-CVS (i686-pc-linux-gnu) libcurl/7.12.3-CVS OpenSSL/0.9.6b zlib/1.1.4
+Host: test.remote.haxx.se:1008
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1009 b/tests/data/test1009
new file mode 100644
index 0000000..b0a93e5
--- /dev/null
+++ b/tests/data/test1009
@@ -0,0 +1,44 @@
+<testcase>
+<info>
+<keywords>
+TFTP
+TFTP RRQ
+--local-port
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data>
+a chunk of
+data
+returned
+ to client
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+tftp
+</server>
+ <name>
+TFTP retrieve with --local-port
+ </name>
+ <command>
+tftp://%HOSTIP:%TFTPPORT//1009 --local-port 44444-45444
+</command>
+</client>
+
+#
+# Verify pseudo protocol after the test has been "shot"
+<verify>
+<protocol>
+opcode: 1
+filename: /1009
+mode: octet
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test101 b/tests/data/test101
new file mode 100644
index 0000000..815292b
--- /dev/null
+++ b/tests/data/test101
@@ -0,0 +1,58 @@
+<testcase>
+<info>
+<keywords>
+FTP
+PORT
+LIST
+</keywords>
+</info>
+# Server-side
+<reply>
+# When doing LIST, we get the default list output hard-coded in the test
+# FTP server
+<datacheck>
+total 20
+drwxr-xr-x 8 98 98 512 Oct 22 13:06 .
+drwxr-xr-x 8 98 98 512 Oct 22 13:06 ..
+drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT
+-r--r--r-- 1 0 1 35 Jul 16 1996 README
+lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin
+dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev
+drwxrwxrwx 2 98 98 512 May 29 16:04 download.html
+dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc
+drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub
+dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr
+</datacheck>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP dir list, PORT with specified IP
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/ -P %CLIENTIP
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+# Strip all valid kinds of PORT and EPRT that curl can send
+<strip>
+^PORT \d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3}
+^EPRT \|1\|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\|\d{1,5}\|
+</strip>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+PORT 127,0,0,1,243,212
+TYPE A
+LIST
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1010 b/tests/data/test1010
new file mode 100644
index 0000000..1f8bf3a
--- /dev/null
+++ b/tests/data/test1010
@@ -0,0 +1,56 @@
+<testcase>
+<info>
+<keywords>
+FTP
+PASV
+LIST
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+# When doing LIST, we get the default list output hard-coded in the test
+# FTP server
+<datacheck>
+total 20
+drwxr-xr-x 8 98 98 512 Oct 22 13:06 .
+drwxr-xr-x 8 98 98 512 Oct 22 13:06 ..
+drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT
+-r--r--r-- 1 0 1 35 Jul 16 1996 README
+lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin
+dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev
+drwxrwxrwx 2 98 98 512 May 29 16:04 download.html
+dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc
+drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub
+dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr
+</datacheck>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP dir list nocwd
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT//list/this/path/1010/ --ftp-method nocwd
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE A
+LIST /list/this/path/1010/
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1011 b/tests/data/test1011
new file mode 100644
index 0000000..62ba074
--- /dev/null
+++ b/tests/data/test1011
@@ -0,0 +1,76 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP POST
+followlocation
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 301 OK swsclose
+Location: moo.html&testcase=/10110002
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+
+</data>
+<data2>
+HTTP/1.1 200 OK swsclose
+Location: this should be ignored
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+
+body
+</data2>
+<datacheck>
+HTTP/1.1 301 OK swsclose
+Location: moo.html&testcase=/10110002
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+
+HTTP/1.1 200 OK swsclose
+Location: this should be ignored
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+
+body
+</datacheck>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP POST with 301 redirect
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/blah/1011 -L -d "moo"
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+POST /blah/1011 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 3
+Content-Type: application/x-www-form-urlencoded
+
+mooGET /blah/moo.html&testcase=/10110002 HTTP/1.1
+User-Agent: curl/7.10 (i686-pc-linux-gnu) libcurl/7.10 OpenSSL/0.9.6c ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1012 b/tests/data/test1012
new file mode 100644
index 0000000..6aa1715
--- /dev/null
+++ b/tests/data/test1012
@@ -0,0 +1,79 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP POST
+followlocation
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 301 OK swsclose
+Location: moo.html&testcase=/10120002
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+
+</data>
+<data2>
+HTTP/1.1 200 OK swsclose
+Location: this should be ignored
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+
+body
+</data2>
+<datacheck>
+HTTP/1.1 301 OK swsclose
+Location: moo.html&testcase=/10120002
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+
+HTTP/1.1 200 OK swsclose
+Location: this should be ignored
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+
+body
+</datacheck>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP POST with 301 redirect and --post301
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/blah/1012 -L -d "moo" --post301
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol nonewline="yes">
+POST /blah/1012 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 3
+Content-Type: application/x-www-form-urlencoded
+
+mooPOST /blah/moo.html&testcase=/10120002 HTTP/1.1
+User-Agent: curl/7.10 (i686-pc-linux-gnu) libcurl/7.10 OpenSSL/0.9.6c ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 3
+Content-Type: application/x-www-form-urlencoded
+
+moo
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1013 b/tests/data/test1013
new file mode 100644
index 0000000..9a1e6d4
--- /dev/null
+++ b/tests/data/test1013
@@ -0,0 +1,37 @@
+<testcase>
+<info>
+<keywords>
+curl-config
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+none
+</server>
+ <name>
+Compare curl --version with curl-config --protocols
+ </name>
+ <command>
+--version
+</command>
+<postcheck>
+%SRCDIR/libtest/test1013.pl ../curl-config log/stdout1013 protocols
+</postcheck>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+0
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test1014 b/tests/data/test1014
new file mode 100644
index 0000000..5116aad
--- /dev/null
+++ b/tests/data/test1014
@@ -0,0 +1,37 @@
+<testcase>
+<info>
+<keywords>
+curl-config
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+none
+</server>
+ <name>
+Compare curl --version with curl-config --features
+ </name>
+ <command>
+--version
+</command>
+<postcheck>
+%SRCDIR/libtest/test1013.pl ../curl-config log/stdout1014 features
+</postcheck>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+0
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test1015 b/tests/data/test1015
new file mode 100644
index 0000000..c167466
--- /dev/null
+++ b/tests/data/test1015
@@ -0,0 +1,53 @@
+<testcase>
+<info>
+<keywords>
+--data-urlencode
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 I am cool swsclose
+Server: Cool server/10.0
+Content-Length: 0
+
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+--data-urlencode
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/1015 --data-urlencode "my name is moo[]" --data-urlencode "y e s=s_i_r" --data-urlencode "v_alue@log/1015.txt" --data-urlencode @log/1015.txt
+</command>
+<file name="log/1015.txt">
+content to _?!#$'|<>
+</file>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol nonewline="yes">
+POST /1015 HTTP/1.1
+User-Agent: curl/7.17.2-CVS (i686-pc-linux-gnu) libcurl/7.17.2-CVS OpenSSL/0.9.8g zlib/1.2.3.3 c-ares/1.5.2-CVS libidn/1.1 libssh2/0.19.0-C
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 133
+Content-Type: application/x-www-form-urlencoded
+
+my%20name%20is%20moo%5B%5D&y e s=s_i_r&v_alue=content%20to%20_%3F%21%23%24%27%7C%3C%3E%0A&content%20to%20_%3F%21%23%24%27%7C%3C%3E%0A
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1016 b/tests/data/test1016
new file mode 100644
index 0000000..b404cac
--- /dev/null
+++ b/tests/data/test1016
@@ -0,0 +1,39 @@
+<testcase>
+<info>
+<keywords>
+FILE
+Range
+</keywords>
+</info>
+
+<reply>
+<data>
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+none
+</server>
+<features>
+file
+</features>
+ <name>
+X-Y range on a file:// URL to stdout
+ </name>
+ <command>
+-r 1-4 file://localhost/%PWD/log/test1016.txt
+</command>
+<file name="log/test1016.txt">
+1234567890
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<stdout nonewline="yes">
+2345
+</stdout>
+</verify>
+</testcase>
diff --git a/tests/data/test1017 b/tests/data/test1017
new file mode 100644
index 0000000..6fbc38a
--- /dev/null
+++ b/tests/data/test1017
@@ -0,0 +1,40 @@
+<testcase>
+<info>
+<keywords>
+FILE
+Range
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+none
+</server>
+<features>
+file
+</features>
+ <name>
+0-Y range on a file:// URL to stdout
+ </name>
+ <command>
+-r 0-3 file://localhost/%PWD/log/test1017.txt
+</command>
+<file name="log/test1017.txt">
+1234567890
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<stdout nonewline="yes">
+1234
+</stdout>
+</verify>
+</testcase>
diff --git a/tests/data/test1018 b/tests/data/test1018
new file mode 100644
index 0000000..28a7027
--- /dev/null
+++ b/tests/data/test1018
@@ -0,0 +1,39 @@
+<testcase>
+<info>
+<keywords>
+FILE
+Range
+</keywords>
+</info>
+
+<reply>
+<data>
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+none
+</server>
+<features>
+file
+</features>
+ <name>
+X-X range on a file:// URL to stdout
+ </name>
+ <command>
+-r 4-4 file://localhost/%PWD/log/test1018.txt
+</command>
+<file name="log/test1018.txt">
+1234567890
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<stdout nonewline="yes">
+5
+</stdout>
+</verify>
+</testcase>
diff --git a/tests/data/test1019 b/tests/data/test1019
new file mode 100644
index 0000000..4d9872a
--- /dev/null
+++ b/tests/data/test1019
@@ -0,0 +1,42 @@
+<testcase>
+<info>
+<keywords>
+FILE
+Range
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+none
+</server>
+<features>
+file
+</features>
+ <name>
+X- range on a file:// URL to stdout
+ </name>
+ <command>
+-r 7- file://localhost/%PWD/log/test1019.txt
+</command>
+<file name="log/test1019.txt">
+1234567890
+1234567890
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<stdout>
+890
+1234567890
+</stdout>
+</verify>
+</testcase>
diff --git a/tests/data/test102 b/tests/data/test102
new file mode 100644
index 0000000..141bc0f
--- /dev/null
+++ b/tests/data/test102
@@ -0,0 +1,52 @@
+<testcase>
+<info>
+<keywords>
+FTP
+PASV
+RETR
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+data
+ to
+ see
+that FTP
+works
+ so does it?
+</data>
+<servercmd>
+REPLY EPSV 500 no such command
+</servercmd>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP RETR PASV
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/102
+</command>
+
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+PASV
+TYPE I
+SIZE 102
+RETR 102
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1020 b/tests/data/test1020
new file mode 100644
index 0000000..735871d
--- /dev/null
+++ b/tests/data/test1020
@@ -0,0 +1,42 @@
+<testcase>
+<info>
+<keywords>
+FILE
+Range
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+none
+</server>
+<features>
+file
+</features>
+ <name>
+-Y range on a file:// URL to stdout
+ </name>
+ <command>
+-r -9 file://localhost/%PWD/log/test1020.txt
+</command>
+<file name="log/test1020.txt">
+1234567890
+1234567890
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<stdout>
+34567890
+</stdout>
+</verify>
+</testcase>
+
diff --git a/tests/data/test1021 b/tests/data/test1021
new file mode 100644
index 0000000..5ab7728
--- /dev/null
+++ b/tests/data/test1021
@@ -0,0 +1,139 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP CONNECT
+HTTP proxy
+HTTP proxy NTLM auth
+--proxy-anyauth
+</keywords>
+</info>
+# Server-side
+<reply>
+
+<data>
+HTTP/1.1 407 Authorization Required to proxy me my dear swsclose
+Proxy-Authenticate: NTLM
+Content-Length: 21
+Connection: close
+
+data to discard
+</data>
+
+# this is returned first since we get no proxy-auth
+<data1001>
+HTTP/1.1 407 Authorization Required to proxy me my dear
+Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+Content-Length: 28
+
+And you should ignore this data.
+</data1001>
+
+# This is supposed to be returned when the server gets the second
+# Authorization: NTLM line passed-in from the client
+<data1002>
+HTTP/1.1 200 Things are fine in proxy land
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+
+</data1002>
+
+# this is returned when we get a GET!
+<data2>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 7
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+daniel
+</data2>
+
+# then this is returned when we get proxy-auth
+<data1000>
+HTTP/1.1 200 OK swsbounce
+Server: no
+
+Nice proxy auth sir!
+</data1000>
+
+<datacheck>
+HTTP/1.1 407 Authorization Required to proxy me my dear swsclose
+Proxy-Authenticate: NTLM
+Content-Length: 21
+Connection: close
+
+HTTP/1.1 407 Authorization Required to proxy me my dear
+Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+Content-Length: 28
+
+HTTP/1.1 200 Things are fine in proxy land
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 7
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+daniel
+</datacheck>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+<features>
+NTLM
+</features>
+ <name>
+HTTP proxy CONNECT with any proxyauth and proxy offers NTLM and close
+ </name>
+ <setenv>
+# we force our own host name, in order to make the test machine independent
+CURL_GETHOSTNAME=curlhost
+# we try to use the LD_PRELOAD hack, if not a debug build
+LD_PRELOAD=%PWD/libtest/.libs/libhostname.so
+ </setenv>
+ <command>
+http://test.remote.haxx.se:1021/path/10210002 --proxy http://%HOSTIP:%HTTPPORT --proxy-user silly:person --proxy-anyauth --proxytunnel
+</command>
+<precheck>
+chkhostname curlhost
+</precheck>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent: curl/.*
+</strip>
+<protocol>
+CONNECT test.remote.haxx.se:1021 HTTP/1.1
+Host: test.remote.haxx.se:1021
+Proxy-Connection: Keep-Alive
+
+CONNECT test.remote.haxx.se:1021 HTTP/1.1
+Host: test.remote.haxx.se:1021
+Proxy-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+Proxy-Connection: Keep-Alive
+
+CONNECT test.remote.haxx.se:1021 HTTP/1.1
+Host: test.remote.haxx.se:1021
+Proxy-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAABQAFAHAAAAAIAAgAdQAAAAAAAAAAAAAABoKBAKAeQjzKtCQ7ubW8S6MN7B59436GAxPu0CVROwwNBsgxML49gcbAXLT/bU+H5wrS9XNpbGx5Y3VybGhvc3Q=
+Proxy-Connection: Keep-Alive
+
+GET /path/10210002 HTTP/1.1
+User-Agent: curl/7.12.3-CVS (i686-pc-linux-gnu) libcurl/7.12.3-CVS OpenSSL/0.9.6b zlib/1.1.4
+Host: test.remote.haxx.se:1021
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1022 b/tests/data/test1022
new file mode 100644
index 0000000..6a8b012
--- /dev/null
+++ b/tests/data/test1022
@@ -0,0 +1,37 @@
+<testcase>
+<info>
+<keywords>
+curl-config
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+none
+</server>
+ <name>
+Compare curl --version with curl-config --version
+ </name>
+ <command>
+--version
+</command>
+<postcheck>
+%SRCDIR/libtest/test1022.pl ../curl-config log/stdout1022 version
+</postcheck>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+0
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test1023 b/tests/data/test1023
new file mode 100644
index 0000000..9c916a0
--- /dev/null
+++ b/tests/data/test1023
@@ -0,0 +1,37 @@
+<testcase>
+<info>
+<keywords>
+curl-config
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+none
+</server>
+ <name>
+Compare curl --version with curl-config --vernum
+ </name>
+ <command>
+--version
+</command>
+<postcheck>
+%SRCDIR/libtest/test1022.pl ../curl-config log/stdout1023 vernum
+</postcheck>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+0
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test1024 b/tests/data/test1024
new file mode 100644
index 0000000..086ef26
--- /dev/null
+++ b/tests/data/test1024
@@ -0,0 +1,103 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+followlocation
+cookies
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+HTTP/1.1 301 This is a weirdo text message
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Location: ../data/10240002.txt
+Set-Cookie: firstcookie=want; path=/want/
+Content-Length: 69
+
+This server reply is for testing a Location: following with cookies
+
+</data>
+<data2>
+HTTP/1.1 301 This is a weirdo text message
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Location: ../want/10240003.txt
+Set-Cookie: nextcookie=data; path=/data/
+Content-Length: 69
+
+This server reply is for testing a Location: following with cookies
+
+</data2>
+<data3>
+HTTP/1.1 200 Followed here fine
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 52
+
+If this is received, the location following worked
+
+</data3>
+<datacheck>
+HTTP/1.1 301 This is a weirdo text message
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Location: ../data/10240002.txt
+Set-Cookie: firstcookie=want; path=/want/
+Content-Length: 69
+
+HTTP/1.1 301 This is a weirdo text message
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Location: ../want/10240003.txt
+Set-Cookie: nextcookie=data; path=/data/
+Content-Length: 69
+
+HTTP/1.1 200 Followed here fine
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 52
+
+If this is received, the location following worked
+
+</datacheck>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP Location: following with cookies
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/want/1024 -L -c log/jar1024
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /want/1024 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /data/10240002.txt HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /want/10240003.txt HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Cookie: firstcookie=want
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1025 b/tests/data/test1025
new file mode 100644
index 0000000..494f8f8
--- /dev/null
+++ b/tests/data/test1025
@@ -0,0 +1,105 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+followlocation
+cookies
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+HTTP/1.1 301 This is a weirdo text message
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Location: ../data/10250002.txt
+Set-Cookie: firstcookie=want; path=/want/
+Content-Length: 69
+
+This server reply is for testing a Location: following with cookies
+
+</data>
+<data2>
+HTTP/1.1 301 This is a weirdo text message
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Location: ../want/10250003.txt
+Set-Cookie: nextcookie=data; path=/data/
+Content-Length: 69
+
+This server reply is for testing a Location: following with cookies
+
+</data2>
+<data3>
+HTTP/1.1 200 Followed here fine
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 52
+
+If this is received, the location following worked
+
+</data3>
+<datacheck>
+HTTP/1.1 301 This is a weirdo text message
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Location: ../data/10250002.txt
+Set-Cookie: firstcookie=want; path=/want/
+Content-Length: 69
+
+HTTP/1.1 301 This is a weirdo text message
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Location: ../want/10250003.txt
+Set-Cookie: nextcookie=data; path=/data/
+Content-Length: 69
+
+HTTP/1.1 200 Followed here fine
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 52
+
+If this is received, the location following worked
+
+</datacheck>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP Location: following with command-line and server cookies
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/want/1025 -L -c log/jar1025 -b forcedcookie=yes
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /want/1025 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Cookie: forcedcookie=yes
+
+GET /data/10250002.txt HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Cookie: forcedcookie=yes
+
+GET /want/10250003.txt HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Cookie: firstcookie=want; forcedcookie=yes
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1026 b/tests/data/test1026
new file mode 100644
index 0000000..e47b12a
--- /dev/null
+++ b/tests/data/test1026
@@ -0,0 +1,39 @@
+<testcase>
+<info>
+<keywords>
+--manual
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+none
+</server>
+ <name>
+curl --manual
+ </name>
+ <command>
+--manual
+</command>
+# Search for these two sentinel lines in the manual output; if they are found,
+# then chances are good the entire manual is there.
+<postcheck>
+perl -e 'open(IN,$ARGV[0]); my $lines=grep(/(a\s*tool\s*to\s*transfer\s*data)|(mailing\s*lists\s*to\s*discuss\s*curl)/, <IN>); exit ($lines != 2); # Let this file pass an XML syntax check: </IN>' log/stdout1026
+</postcheck>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+0
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test1027 b/tests/data/test1027
new file mode 100644
index 0000000..9c3d6e3
--- /dev/null
+++ b/tests/data/test1027
@@ -0,0 +1,39 @@
+<testcase>
+<info>
+<keywords>
+--help
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+none
+</server>
+ <name>
+curl --help
+ </name>
+ <command>
+--help
+</command>
+# Search for these two sentinel lines in the help output; if they are found,
+# then chances are good the entire help is there.
+<postcheck>
+perl -e 'open(IN,$ARGV[0]); my $lines=grep(/(Usage: curl )|(--version\s*Show version)/, <IN>); exit ($lines != 2); # Let this file pass an XML syntax check: </IN>' log/stdout1027
+</postcheck>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+0
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test1028 b/tests/data/test1028
new file mode 100644
index 0000000..fd5162a
--- /dev/null
+++ b/tests/data/test1028
@@ -0,0 +1,94 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+followlocation
+FTP
+PASV
+FILE
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data1>
+HTTP/1.1 302 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake swsclose
+Content-Type: text/html
+Funny-head: yesyes
+Location: ftp://127.0.0.1:8992/10280002
+Content-Length: 0
+Connection: close
+
+</data1>
+<data2>
+data
+ to
+ see
+that FTP
+works
+ so does it?
+</data2>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+ftp
+</server>
+ <name>
+HTTP Location: redirect to FTP URL
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/10280001 -L
+</command>
+# The data section doesn't do variable substitution, so we must assert this
+<precheck>
+perl -e "print 'Test requires default test server host and port' if ( '%HOSTIP' ne '127.0.0.1' || '%FTPPORT' ne '8992' );"
+</precheck>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /10280001 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE I
+SIZE 10280002
+RETR 10280002
+QUIT
+</protocol>
+<stdout>
+HTTP/1.1 302 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake swsclose
+Content-Type: text/html
+Funny-head: yesyes
+Location: ftp://%HOSTIP:%FTPPORT/10280002
+Content-Length: 0
+Connection: close
+
+data
+ to
+ see
+that FTP
+works
+ so does it?
+</stdout>
+</verify>
+</testcase>
diff --git a/tests/data/test1029 b/tests/data/test1029
new file mode 100644
index 0000000..9c2bc5f
--- /dev/null
+++ b/tests/data/test1029
@@ -0,0 +1,58 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+redirect_url
+followlocation
+--write-out
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.1 301 This is a weirdo text message swsclose
+Location: data/10290002.txt?coolsite=yes
+Content-Length: 62
+Connection: close
+
+This server reply is for testing a simple Location: following
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP Location: and 'redirect_url' check
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/we/want/our/1029 -w '%{redirect_url}\n'
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /we/want/our/1029 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+<stdout mode="text">
+HTTP/1.1 301 This is a weirdo text message swsclose
+Location: data/10290002.txt?coolsite=yes
+Content-Length: 62
+Connection: close
+
+This server reply is for testing a simple Location: following
+http://%HOSTIP:%HTTPPORT/we/want/our/data/10290002.txt?coolsite=yes
+</stdout>
+</verify>
+</testcase>
diff --git a/tests/data/test103 b/tests/data/test103
new file mode 100644
index 0000000..15712f5
--- /dev/null
+++ b/tests/data/test103
@@ -0,0 +1,54 @@
+<testcase>
+<info>
+<keywords>
+FTP
+PORT
+RETR
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+data
+ to
+ see
+that FTP
+works
+ so does it?
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP RETR PORT with CWD
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/a/path/103 -P -
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+# Strip all valid kinds of PORT and EPRT that curl can send
+<strip>
+^PORT \d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3}
+^EPRT \|1\|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\|\d{1,5}\|
+</strip>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+CWD a
+CWD path
+PORT 127,0,0,1,0,0
+TYPE I
+SIZE 103
+RETR 103
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1030 b/tests/data/test1030
new file mode 100644
index 0000000..d05a092
--- /dev/null
+++ b/tests/data/test1030
@@ -0,0 +1,109 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP PUT
+HTTP Digest auth
+--anyauth
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+HTTP/1.1 401 Authorization Required
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Blackmagic realm="gimme all yer s3cr3ts"
+WWW-Authenticate: Basic realm="gimme all yer s3cr3ts"
+WWW-Authenticate: Digest realm="gimme all yer s3cr3ts", nonce="11223344"
+Content-Length: 26
+Content-Type: text/html; charset=iso-8859-1
+
+This is not the real page
+</data>
+
+# This is supposed to be returned when the server gets a
+# Authorization: Digest line passed-in from the client
+<data1000>
+HTTP/1.1 200 OK
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 23
+Connection: close
+
+This IS the real page!
+</data1000>
+
+<datacheck>
+HTTP/1.1 401 Authorization Required
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Blackmagic realm="gimme all yer s3cr3ts"
+WWW-Authenticate: Basic realm="gimme all yer s3cr3ts"
+WWW-Authenticate: Digest realm="gimme all yer s3cr3ts", nonce="11223344"
+Content-Length: 26
+Content-Type: text/html; charset=iso-8859-1
+
+HTTP/1.1 200 OK
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 23
+Connection: close
+
+This IS the real page!
+</datacheck>
+
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+<features>
+crypto
+</features>
+ <name>
+HTTP PUT with --anyauth authorization (picking Digest)
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/1030 -T log/put1030 -u testuser:testpass --anyauth
+</command>
+<file name="log/put1030">
+This is data we upload with PUT
+a second line
+line three
+four is the number of lines
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+PUT /1030 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 85
+Expect: 100-continue
+
+This is data we upload with PUT
+a second line
+line three
+four is the number of lines
+PUT /1030 HTTP/1.1
+Authorization: Digest username="testuser", realm="gimme all yer s3cr3ts", nonce="11223344", uri="/1030", response="01cb59db1ddaac246b072d5f5f0716d9"
+User-Agent: curl/7.10.5 (i686-pc-linux-gnu) libcurl/7.10.5 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 85
+Expect: 100-continue
+
+This is data we upload with PUT
+a second line
+line three
+four is the number of lines
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1031 b/tests/data/test1031
new file mode 100644
index 0000000..9cfbab5
--- /dev/null
+++ b/tests/data/test1031
@@ -0,0 +1,76 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+followlocation
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+HTTP/1.1 301 This is a weirdo text message swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Location: ?coolsite=yes/10310002.txt
+Connection: close
+
+This server reply is for testing a simple Location: following
+
+</data>
+<data2>
+HTTP/1.1 200 Followed here fine swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 52
+
+If this is received, the location following worked
+
+</data2>
+<datacheck>
+HTTP/1.1 301 This is a weirdo text message swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Location: ?coolsite=yes/10310002.txt
+Connection: close
+
+HTTP/1.1 200 Followed here fine swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 52
+
+If this is received, the location following worked
+
+</datacheck>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP Location: following to a query string
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/want/this/1031 -L
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /want/this/1031 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /want/this/1031?coolsite=yes/10310002.txt HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1032 b/tests/data/test1032
new file mode 100644
index 0000000..614cdbf
--- /dev/null
+++ b/tests/data/test1032
@@ -0,0 +1,56 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP HEAD
+range
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP HEAD with --range
+ </name>
+ <command>
+--range 1-3 --head http://%HOSTIP:%HTTPPORT/1032
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+HEAD /1032 HTTP/1.1
+Range: bytes=1-3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1033 b/tests/data/test1033
new file mode 100644
index 0000000..9ad5d25
--- /dev/null
+++ b/tests/data/test1033
@@ -0,0 +1,60 @@
+<testcase>
+#
+# This case with an unexpected 1xx response used to cause a "hang" before the fix
+# got 7.19.0
+<info>
+<keywords>
+HTTP
+HTTP GET
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 102 unexpected huh?!
+
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+-foo-
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP GET with 102 response!
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/1033
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /1033 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1034 b/tests/data/test1034
new file mode 100644
index 0000000..c475740
--- /dev/null
+++ b/tests/data/test1034
@@ -0,0 +1,62 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP proxy
+IDN
+FAILURE
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.0 503 Service Unavailable
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake swsclose
+Content-Type: text/html
+Funny-head: yesyes
+
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<features>
+idn
+</features>
+<setenv>
+CHARSET=UTF-8
+</setenv>
+ <name>
+HTTP over proxy with malformatted IDN host name
+ </name>
+
+# This host name contains an invalid UTF-8 byte sequence that can't be
+# converted into an IDN name
+ <command>
+http://invalid-utf8-â.local/page/1034 -x %HOSTIP:%HTTPPORT
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET http://invalid-utf8-â.local/page/1034 HTTP/1.1
+Host: invalid-utf8-â.local
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1035 b/tests/data/test1035
new file mode 100644
index 0000000..20b434c
--- /dev/null
+++ b/tests/data/test1035
@@ -0,0 +1,59 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP proxy
+IDN
+FAILURE
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.0 503 Service Unavailable
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake swsclose
+Content-Type: text/html
+Funny-head: yesyes
+
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<features>
+idn
+</features>
+<setenv>
+CHARSET=ISO8859-1
+</setenv>
+ <name>
+HTTP over proxy with too long IDN host name
+ </name>
+ <command>
+http://too-long-IDN-name-cürl-rüles-la-la-la-dee-da-flooby-nooby.local/page/1035 -x %HOSTIP:%HTTPPORT
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET http://too-long-IDN-name-cürl-rüles-la-la-la-dee-da-flooby-nooby.local/page/1035 HTTP/1.1
+Host: too-long-IDN-name-cürl-rüles-la-la-la-dee-da-flooby-nooby.local
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1036 b/tests/data/test1036
new file mode 100644
index 0000000..b8ebc4f
--- /dev/null
+++ b/tests/data/test1036
@@ -0,0 +1,61 @@
+<testcase>
+<info>
+<keywords>
+FTP
+PASV
+RETR
+Resume
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data nocheck="yes">
+expected to be a file without the first part
+but we emulate that
+</data>
+<size>
+85
+</size>
+<servercmd>
+REPLY EPSV 500 no such command
+</servercmd>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP download resume from end of file
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/1036 -C -
+</command>
+<file name="log/curl1036.out">
+This is the start!!
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+PASV
+TYPE I
+SIZE 1036
+REST 20
+RETR 1036
+QUIT
+</protocol>
+<file name="log/curl1036.out">
+This is the start!!
+expected to be a file without the first part
+but we emulate that
+</file>
+</verify>
+</testcase>
diff --git a/tests/data/test1037 b/tests/data/test1037
new file mode 100644
index 0000000..d9cdc0a
--- /dev/null
+++ b/tests/data/test1037
@@ -0,0 +1,54 @@
+<testcase>
+<info>
+<keywords>
+FTP
+PASV
+RETR
+Resume
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data nocheck="yes">
+expected to be a file without the first part
+but we emulate that
+</data>
+<size>
+65
+</size>
+<servercmd>
+REPLY EPSV 500 no such command
+</servercmd>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP download resume from end of empty file
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/1037 -C -
+</command>
+<file name="log/curl1037.out">
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+PASV
+TYPE I
+SIZE 1037
+RETR 1037
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1038 b/tests/data/test1038
new file mode 100644
index 0000000..9572d78
--- /dev/null
+++ b/tests/data/test1038
@@ -0,0 +1,53 @@
+<testcase>
+<info>
+<keywords>
+FTP
+EPSV
+APPE
+Resume
+</keywords>
+</info>
+# Server-side
+<reply>
+<size>
+17
+</size>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP PASV upload resume from end of file
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/1038 -T log/upload1038 -C -
+</command>
+<file name="log/upload1038">
+this is the *****cr@p******** that we're gonna upload
+
+worx?
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE I
+SIZE 1038
+APPE 1038
+QUIT
+</protocol>
+<upload>
+cr@p******** that we're gonna upload
+
+worx?
+</upload>
+</verify>
+</testcase>
diff --git a/tests/data/test1039 b/tests/data/test1039
new file mode 100644
index 0000000..654d836
--- /dev/null
+++ b/tests/data/test1039
@@ -0,0 +1,53 @@
+<testcase>
+<info>
+<keywords>
+FTP
+EPSV
+APPE
+Resume
+</keywords>
+</info>
+# Server-side
+<reply>
+<size>
+0
+</size>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP PASV upload resume from end of empty file
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/1039 -T log/upload1039 -C -
+</command>
+<file name="log/upload1039">
+this is the *****cr@p******** that we're gonna upload
+
+worx?
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE I
+SIZE 1039
+STOR 1039
+QUIT
+</protocol>
+<upload>
+this is the *****cr@p******** that we're gonna upload
+
+worx?
+</upload>
+</verify>
+</testcase>
diff --git a/tests/data/test104 b/tests/data/test104
new file mode 100644
index 0000000..82df98a
--- /dev/null
+++ b/tests/data/test104
@@ -0,0 +1,43 @@
+<testcase>
+<info>
+<keywords>
+FTP
+NOBODY
+</keywords>
+</info>
+# Server-side
+<reply>
+<size>
+51
+</size>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP --head to get file size only
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/a/path/104 --head
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+CWD a
+CWD path
+MDTM 104
+TYPE I
+SIZE 104
+REST 0
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1040 b/tests/data/test1040
new file mode 100644
index 0000000..2466e70
--- /dev/null
+++ b/tests/data/test1040
@@ -0,0 +1,79 @@
+<testcase>
+# Similar to test92
+<info>
+<keywords>
+HTTP
+HTTP GET
+Resume
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+HTTP/1.1 416 Invalid range
+Connection: close
+Content-Length: 0
+
+</data>
+
+# The file data that exists at the start of the test must be included in
+# the verification.
+<datacheck>
+012345678
+012345678
+012345678
+012345678
+012345678
+012345678
+012345678
+012345678
+012345678
+012345678
+HTTP/1.1 416 Invalid range
+Connection: close
+Content-Length: 0
+
+</datacheck>
+
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP GET with resume from end of entirely-downloaded file
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/1040 -C -
+</command>
+<file name="log/curl1040.out">
+012345678
+012345678
+012345678
+012345678
+012345678
+012345678
+012345678
+012345678
+012345678
+012345678
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /1040 HTTP/1.1
+Range: bytes=100-
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1041 b/tests/data/test1041
new file mode 100644
index 0000000..fa1692c
--- /dev/null
+++ b/tests/data/test1041
@@ -0,0 +1,78 @@
+<testcase>
+# Similar to test33
+<info>
+<keywords>
+HTTP
+HTTP PUT
+Resume
+Content-Range
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+HTTP/1.1 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Accept-Ranges: bytes
+Content-Length: 0
+Connection: close
+Content-Type: text/html
+
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP PUT with resume from end of already-uploaded file
+ </name>
+<file name="log/test1041.txt">
+012345678
+012345678
+012345678
+012345678
+012345678
+012345678
+012345678
+012345678
+012345678
+012345678
+</file>
+ <command>
+http://%HOSTIP:%HTTPPORT/1041 -Tlog/test1041.txt -C -
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+# curl doesn't do a HEAD request on the remote file so it has no idea whether
+# it can skip part of the file or not. Instead, it sends the entire file.
+<protocol>
+PUT /1041 HTTP/1.1
+Content-Range: bytes 0-99/100
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 100
+Expect: 100-continue
+
+012345678
+012345678
+012345678
+012345678
+012345678
+012345678
+012345678
+012345678
+012345678
+012345678
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1042 b/tests/data/test1042
new file mode 100644
index 0000000..d532120
--- /dev/null
+++ b/tests/data/test1042
@@ -0,0 +1,94 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+Resume
+FAILURE
+</keywords>
+</info>
+
+# Server-side
+<reply>
+# Some servers (e.g. Apache 1.2) respond this way to an invalid byte range
+<data>
+HTTP/1.1 200 OK
+Connection: close
+Content-Length: 100
+Content-Type: text/plain
+
+012345678
+012345678
+012345678
+012345678
+012345678
+012345678
+012345678
+012345678
+012345678
+012345678
+</data>
+
+# The file data that exists at the start of the test must be included in
+# the verification.
+<datacheck>
+012345678
+012345678
+012345678
+012345678
+012345678
+012345678
+012345678
+012345678
+012345678
+012345678
+HTTP/1.1 200 OK
+Connection: close
+Content-Length: 100
+Content-Type: text/plain
+
+</datacheck>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP GET from end of entirely-downloaded file, no server resume
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/1042 -C -
+</command>
+<file name="log/curl1042.out">
+012345678
+012345678
+012345678
+012345678
+012345678
+012345678
+012345678
+012345678
+012345678
+012345678
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+33
+</errorcode>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /1042 HTTP/1.1
+Range: bytes=100-
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1043 b/tests/data/test1043
new file mode 100644
index 0000000..f9bd105
--- /dev/null
+++ b/tests/data/test1043
@@ -0,0 +1,84 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+Resume
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+HTTP/1.1 206 Partial Content
+Date: Mon, 13 Nov 2007 13:41:09 GMT
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+Accept-Ranges: bytes
+Content-Length: 60
+Content-Range: bytes 40-99/100
+
+012345678
+012345678
+012345678
+012345678
+012345678
+012345678
+</data>
+
+# The file data that exists at the start of the test must be included in
+# the verification.
+<datacheck>
+012345678
+012345678
+012345678
+012345678
+HTTP/1.1 206 Partial Content
+Date: Mon, 13 Nov 2007 13:41:09 GMT
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+Accept-Ranges: bytes
+Content-Length: 60
+Content-Range: bytes 40-99/100
+
+012345678
+012345678
+012345678
+012345678
+012345678
+012345678
+</datacheck>
+
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP GET with resume from end of file
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/1043 -C -
+</command>
+<file name="log/curl1043.out">
+012345678
+012345678
+012345678
+012345678
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /1043 HTTP/1.1
+Range: bytes=40-
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1044 b/tests/data/test1044
new file mode 100644
index 0000000..a95f568
--- /dev/null
+++ b/tests/data/test1044
@@ -0,0 +1,58 @@
+<testcase>
+# Similar to test141
+<info>
+<keywords>
+FTP
+NOBODY
+Largefile
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+</data>
+<size>
+9999999999
+</size>
+<mdtm>
+213 20080726102659
+</mdtm>
+</reply>
+
+# Client-side
+<client>
+<features>
+large_file
+</features>
+<server>
+ftp
+</server>
+ <name>
+FTP download large file info with -I
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/blalbla/1044 -I
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+CWD blalbla
+MDTM 1044
+TYPE I
+SIZE 1044
+REST 0
+QUIT
+</protocol>
+<stdout>
+Last-Modified: Sat, 26 Jul 2008 10:26:59 GMT
+Content-Length: 9999999999
+Accept-ranges: bytes
+</stdout>
+</verify>
+</testcase>
diff --git a/tests/data/test1045 b/tests/data/test1045
new file mode 100644
index 0000000..fa8ad4b
--- /dev/null
+++ b/tests/data/test1045
@@ -0,0 +1,52 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+--interface
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Date: Mon, 28 Jul 2008 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 6
+Connection: close
+Content-Type: text/plain
+
+-foo-
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP GET with numeric localhost --interface
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/1045 --interface %CLIENTIP
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /1045 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1046 b/tests/data/test1046
new file mode 100644
index 0000000..bc4e5c2
--- /dev/null
+++ b/tests/data/test1046
@@ -0,0 +1,60 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+--interface
+IPv6
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Date: Mon, 28 Jul 2008 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 6
+Connection: close
+Content-Type: text/plain
+
+-foo-
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<features>
+ipv6
+</features>
+<server>
+http-ipv6
+</server>
+ <name>
+HTTP-IPv6 GET with numeric localhost --interface
+ </name>
+ <command>
+-g "http://%HOST6IP:%HTTP6PORT/1046" --interface ::1
+</command>
+# --interface doesn't accept an address surrounded by [] so %CLIENT6IP is out
+<precheck>
+perl -e "print 'Test requires default test server host address' if ( '%CLIENT6IP' ne '[::1]' );"
+</precheck>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /1046 HTTP/1.1
+Host: %HOST6IP:%HTTP6PORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1047 b/tests/data/test1047
new file mode 100644
index 0000000..421708c
--- /dev/null
+++ b/tests/data/test1047
@@ -0,0 +1,58 @@
+<testcase>
+<info>
+<keywords>
+FTP
+PASV
+LIST
+--interface
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+# When doing LIST, we get the default list output hard-coded in the test
+# FTP server
+<datacheck>
+total 20
+drwxr-xr-x 8 98 98 512 Oct 22 13:06 .
+drwxr-xr-x 8 98 98 512 Oct 22 13:06 ..
+drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT
+-r--r--r-- 1 0 1 35 Jul 16 1996 README
+lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin
+dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev
+drwxrwxrwx 2 98 98 512 May 29 16:04 download.html
+dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc
+drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub
+dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr
+</datacheck>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP dir list PASV with localhost --interface
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/ --interface %CLIENTIP
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE A
+LIST
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1048 b/tests/data/test1048
new file mode 100644
index 0000000..cba99ba
--- /dev/null
+++ b/tests/data/test1048
@@ -0,0 +1,66 @@
+<testcase>
+<info>
+<keywords>
+FTP
+PASV
+LIST
+--interface
+IPv6
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+# When doing LIST, we get the default list output hard-coded in the test
+# FTP server
+<datacheck>
+total 20
+drwxr-xr-x 8 98 98 512 Oct 22 13:06 .
+drwxr-xr-x 8 98 98 512 Oct 22 13:06 ..
+drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT
+-r--r--r-- 1 0 1 35 Jul 16 1996 README
+lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin
+dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev
+drwxrwxrwx 2 98 98 512 May 29 16:04 download.html
+dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc
+drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub
+dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr
+</datacheck>
+</reply>
+
+#
+# Client-side
+<client>
+<features>
+ipv6
+</features>
+<server>
+ftp-ipv6
+</server>
+ <name>
+FTP-IPv6 dir list PASV with localhost --interface
+ </name>
+ <command>
+-g "ftp://%HOST6IP:%FTP6PORT/" --interface ::1
+</command>
+# --interface doesn't accept an address surrounded by [] so %CLIENT6IP is out
+<precheck>
+perl -e "print 'Test requires default test server host address' if ( '%CLIENT6IP' ne '[::1]' );"
+</precheck>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE A
+LIST
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1049 b/tests/data/test1049
new file mode 100644
index 0000000..e6054a4
--- /dev/null
+++ b/tests/data/test1049
@@ -0,0 +1,44 @@
+<testcase>
+<info>
+<keywords>
+TFTP
+TFTP RRQ
+--interface
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data>
+a chunk of
+data
+returned
+ to client
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+tftp
+</server>
+ <name>
+TFTP retrieve with localhost --interface
+ </name>
+ <command>
+tftp://%HOSTIP:%TFTPPORT//1049 --trace-ascii log/traceit --interface %CLIENTIP
+</command>
+</client>
+
+#
+# Verify pseudo protocol after the test has been "shot"
+<verify>
+<protocol>
+opcode: 1
+filename: /1049
+mode: octet
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test105 b/tests/data/test105
new file mode 100644
index 0000000..cc811ae
--- /dev/null
+++ b/tests/data/test105
@@ -0,0 +1,53 @@
+<testcase>
+<info>
+<keywords>
+FTP
+PASV
+TYPE A
+RETR
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+data
+ to
+ see
+that FTP
+works
+ so does it?
+</data>
+<servercmd>
+REPLY EPSV 500 no such command
+REPLY SIZE 500 no such command
+</servercmd>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP user+password in URL and ASCII transfer
+ </name>
+ <command>
+ftp://userdude:passfellow@%HOSTIP:%FTPPORT/105 --use-ascii
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER userdude
+PASS passfellow
+PWD
+EPSV
+PASV
+TYPE A
+SIZE 105
+RETR 105
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1050 b/tests/data/test1050
new file mode 100644
index 0000000..1abb9b1
--- /dev/null
+++ b/tests/data/test1050
@@ -0,0 +1,66 @@
+<testcase>
+# Similar to test 253
+<info>
+<keywords>
+FTP-ipv6
+IPv6
+EPRT
+</keywords>
+</info>
+
+# Server-side
+<reply>
+# When doing LIST, we get the default list output hard-coded in the test
+# FTP server
+<datacheck>
+total 20
+drwxr-xr-x 8 98 98 512 Oct 22 13:06 .
+drwxr-xr-x 8 98 98 512 Oct 22 13:06 ..
+drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT
+-r--r--r-- 1 0 1 35 Jul 16 1996 README
+lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin
+dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev
+drwxrwxrwx 2 98 98 512 May 29 16:04 download.html
+dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc
+drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub
+dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr
+</datacheck>
+</reply>
+
+# Client-side
+<client>
+<features>
+ipv6
+</features>
+<server>
+ftp-ipv6
+</server>
+ <name>
+FTP-IPv6 dir list, EPRT with specified IP
+ </name>
+ <command>
+-g "ftp://%HOST6IP:%FTP6PORT/" -P ::1
+</command>
+# --interface doesn't accept an address surrounded by [] so %CLIENT6IP is out
+<precheck>
+perl -e "print 'Test requires default test server host address' if ( '%CLIENT6IP' ne '[::1]' );"
+</precheck>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+# Strip all valid kinds of EPRT that curl can send
+<strippart>
+s/^(EPRT \|2\|::1\|)(.*)/$1/
+</strippart>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+EPRT |2|::1|
+TYPE A
+LIST
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1051 b/tests/data/test1051
new file mode 100644
index 0000000..080e1d1
--- /dev/null
+++ b/tests/data/test1051
@@ -0,0 +1,118 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP PUT
+followlocation
+</keywords>
+
+</info>
+# Server-side
+<reply>
+<data>
+HTTP/1.1 301 Redirect swsclose
+Date: Thu, 29 Jul 2008 14:49:00 GMT
+Server: test-server/fake
+Location: data/10510002.txt?coolsite=yes
+Content-Length: 0
+Connection: close
+
+</data>
+<data2>
+HTTP/1.1 100 Continue
+
+HTTP/1.1 200 Followed here fine swsclose
+Date: Thu, 29 Jul 2008 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 51
+
+If this is received, the location following worked
+</data2>
+<datacheck>
+HTTP/1.1 301 Redirect swsclose
+Date: Thu, 29 Jul 2008 14:49:00 GMT
+Server: test-server/fake
+Location: data/10510002.txt?coolsite=yes
+Content-Length: 0
+Connection: close
+
+HTTP/1.1 100 Continue
+
+HTTP/1.1 200 Followed here fine swsclose
+Date: Thu, 29 Jul 2008 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 51
+
+If this is received, the location following worked
+</datacheck>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP PUT with Location: following
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/want/1051 -L -T log/test1051.txt
+</command>
+<file name="log/test1051.txt">
+Weird
+ file
+ to
+ upload
+for
+ testing
+the
+ PUT
+ feature
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+
+# The primary reason libcurl sends the data part twice in this test is that
+# the test HTTP server is blocking until it has read the entire request,
+# including the full request-body before it responds. So in this test the
+# server says 301 and 100 _after_ the entire PUT body has been sent.
+
+<protocol>
+PUT /want/1051 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 78
+Expect: 100-continue
+
+Weird
+ file
+ to
+ upload
+for
+ testing
+the
+ PUT
+ feature
+PUT /want/data/10510002.txt?coolsite=yes HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 78
+Expect: 100-continue
+
+Weird
+ file
+ to
+ upload
+for
+ testing
+the
+ PUT
+ feature
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1052 b/tests/data/test1052
new file mode 100644
index 0000000..10c16b4
--- /dev/null
+++ b/tests/data/test1052
@@ -0,0 +1,111 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP PUT
+followlocation
+</keywords>
+
+</info>
+# Server-side
+<reply>
+<data>
+HTTP/1.0 301 Redirect swsclose
+Date: Thu, 29 Jul 2008 14:49:00 GMT
+Server: test-server/fake
+Location: data/10520002.txt?coolsite=yes
+Content-Length: 0
+Connection: close
+
+</data>
+<data2>
+HTTP/1.0 200 Followed here fine swsclose
+Date: Thu, 29 Jul 2008 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 51
+
+If this is received, the location following worked
+</data2>
+<datacheck>
+HTTP/1.0 301 Redirect swsclose
+Date: Thu, 29 Jul 2008 14:49:00 GMT
+Server: test-server/fake
+Location: data/10520002.txt?coolsite=yes
+Content-Length: 0
+Connection: close
+
+HTTP/1.0 200 Followed here fine swsclose
+Date: Thu, 29 Jul 2008 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 51
+
+If this is received, the location following worked
+</datacheck>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP 1.0 PUT with Location: following
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/want/1052 -0 -L -T log/test1052.txt
+</command>
+<file name="log/test1052.txt">
+Weird
+ file
+ to
+ upload
+for
+ testing
+the
+ PUT
+ feature
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+
+# The primary reason libcurl sends the data part twice in this test is that
+# the test HTTP server is blocking until it has read the entire request,
+# including the full request-body before it responds. So in this test the
+# server says 301 and 200 _after_ the entire PUT body has been sent.
+<protocol>
+PUT /want/1052 HTTP/1.0
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 78
+
+Weird
+ file
+ to
+ upload
+for
+ testing
+the
+ PUT
+ feature
+PUT /want/data/10520002.txt?coolsite=yes HTTP/1.0
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 78
+
+Weird
+ file
+ to
+ upload
+for
+ testing
+the
+ PUT
+ feature
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1053 b/tests/data/test1053
new file mode 100644
index 0000000..8c60e5c
--- /dev/null
+++ b/tests/data/test1053
@@ -0,0 +1,129 @@
+<testcase>
+# Based on test 9
+<info>
+<keywords>
+HTTP
+HTTP FORMPOST
+HTTP file upload
+followlocation
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+HTTP/1.1 307 Redirect swsclose
+Date: Thu, 29 Jul 2008 14:49:00 GMT
+Server: test-server/fake
+Location: data/10530002.txt?coolsite=yes
+Content-Length: 0
+Connection: close
+
+</data>
+<data2>
+HTTP/1.1 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 11
+Connection: close
+
+blablabla
+
+</data2>
+<datacheck>
+HTTP/1.1 307 Redirect swsclose
+Date: Thu, 29 Jul 2008 14:49:00 GMT
+Server: test-server/fake
+Location: data/10530002.txt?coolsite=yes
+Content-Length: 0
+Connection: close
+
+HTTP/1.1 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 11
+Connection: close
+
+blablabla
+
+</datacheck>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP RFC1867-type formposting from file with Location: following
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/we/want/1053 -L -F name=daniel -F tool=curl -F file=@log/test1053.txt
+</command>
+# We create this file before the command is invoked!
+<file name="log/test1053.txt">
+foo-
+This is a moo-
+bar
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^(User-Agent:|Content-Type: multipart/form-data;|------------).*
+</strip>
+<protocol>
+POST /we/want/1053 HTTP/1.1
+User-Agent: curl/7.18.2 (i686-pc-linux-gnu) libcurl/7.18.2 OpenSSL/0.9.7a ipv6 zlib/1.1.4
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 410
+Expect: 100-continue
+Content-Type: multipart/form-data; boundary=----------------------------9ef8d6205763
+
+------------------------------9ef8d6205763
+Content-Disposition: form-data; name="name"
+
+daniel
+------------------------------9ef8d6205763
+Content-Disposition: form-data; name="tool"
+
+curl
+------------------------------9ef8d6205763
+Content-Disposition: form-data; name="file"; filename="test1053.txt"
+Content-Type: text/plain
+
+foo-
+This is a moo-
+bar
+
+------------------------------9ef8d6205763--
+POST /we/want/data/10530002.txt?coolsite=yes HTTP/1.1
+User-Agent: curl/7.18.2 (i686-pc-linux-gnu) libcurl/7.18.2 OpenSSL/0.9.7a ipv6 zlib/1.1.4
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 410
+Expect: 100-continue
+Content-Type: multipart/form-data; boundary=----------------------------9ef8d6205763
+
+------------------------------9ef8d6205763
+Content-Disposition: form-data; name="name"
+
+daniel
+------------------------------9ef8d6205763
+Content-Disposition: form-data; name="tool"
+
+curl
+------------------------------9ef8d6205763
+Content-Disposition: form-data; name="file"; filename="test1053.txt"
+Content-Type: text/plain
+
+foo-
+This is a moo-
+bar
+
+------------------------------9ef8d6205763--
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1054 b/tests/data/test1054
new file mode 100644
index 0000000..54d0232
--- /dev/null
+++ b/tests/data/test1054
@@ -0,0 +1,80 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP POST
+followlocation
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 301 OK swsclose
+Location: moo/testcase/10540002
+Date: Thu, 31 Jul 2008 14:49:00 GMT
+Connection: close
+
+</data>
+<data2>
+HTTP/1.1 200 OK swsclose
+Date: Thu, 31 Jul 2008 14:49:00 GMT
+Connection: close
+
+body
+</data2>
+<datacheck>
+HTTP/1.1 301 OK swsclose
+Location: moo/testcase/10540002
+Date: Thu, 31 Jul 2008 14:49:00 GMT
+Connection: close
+
+HTTP/1.1 200 OK swsclose
+Date: Thu, 31 Jul 2008 14:49:00 GMT
+Connection: close
+
+body
+</datacheck>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP POST from file with 301 redirect and --post301
+ </name>
+<file name="log/test1054.txt">
+field=data
+</file>
+ <command>
+http://%HOSTIP:%HTTPPORT/blah/1054 -L -d @log/test1054.txt --post301
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol nonewline="yes">
+POST /blah/1054 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 10
+Content-Type: application/x-www-form-urlencoded
+
+field=dataPOST /blah/moo/testcase/10540002 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 10
+Content-Type: application/x-www-form-urlencoded
+
+field=data
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1055 b/tests/data/test1055
new file mode 100644
index 0000000..510d490
--- /dev/null
+++ b/tests/data/test1055
@@ -0,0 +1,100 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP PUT
+followlocation
+FTP
+EPSV
+STOR
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 307 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake swsclose
+Content-Type: text/html
+Location: ftp://127.0.0.1:8992/1055
+Content-Length: 0
+Connection: close
+
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+ftp
+</server>
+ <name>
+HTTP PUT Location: redirect to FTP URL
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/1055 -L -T log/test1055.txt
+</command>
+# The data section doesn't do variable substitution, so we must assert this
+<precheck>
+perl -e "print 'Test requires default test server host and port' if ( '%HOSTIP' ne '127.0.0.1' || '%FTPPORT' ne '8992' );"
+</precheck>
+<file name="log/test1055.txt">
+Weird
+ file
+ to
+ upload
+for
+ testing
+the
+ PUT
+ feature
+</file>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+PUT /1055 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 78
+Expect: 100-continue
+
+Weird
+ file
+ to
+ upload
+for
+ testing
+the
+ PUT
+ feature
+USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE I
+STOR 1055
+QUIT
+</protocol>
+<upload>
+Weird
+ file
+ to
+ upload
+for
+ testing
+the
+ PUT
+ feature
+</upload>
+</verify>
+</testcase>
diff --git a/tests/data/test1056 b/tests/data/test1056
new file mode 100644
index 0000000..52b0136
--- /dev/null
+++ b/tests/data/test1056
@@ -0,0 +1,81 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+followlocation
+IPv6
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 302 OK swsclose
+Location: http://[::1%259999]:8994/moo/10560002
+Date: Thu, 31 Jul 2008 14:49:00 GMT
+Connection: close
+
+</data>
+<data2>
+HTTP/1.1 200 OK swsclose
+Date: Thu, 31 Jul 2008 14:49:00 GMT
+Connection: close
+
+body
+</data2>
+<datacheck>
+HTTP/1.1 302 OK swsclose
+Location: http://[::1%259999]:8994/moo/10560002
+Date: Thu, 31 Jul 2008 14:49:00 GMT
+Connection: close
+
+HTTP/1.1 200 OK swsclose
+Date: Thu, 31 Jul 2008 14:49:00 GMT
+Connection: close
+
+body
+</datacheck>
+</reply>
+
+#
+# Client-side
+<client>
+<features>
+ipv6
+</features>
+<server>
+http
+http-ipv6
+</server>
+ <name>
+HTTP follow redirect from IPv4 to IPv6 with scope
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/we/are/all/twits/1056 -L
+</command>
+# The data section doesn't do variable substitution, so we must assert this
+<precheck>
+perl -e "print 'Test requires default test server host and port' if ( '%HOST6IP' ne '[::1]' || '%HTTP6PORT' ne '8994' );"
+</precheck>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /we/are/all/twits/1056 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /moo/10560002 HTTP/1.1
+Host: %HOST6IP:%HTTP6PORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1057 b/tests/data/test1057
new file mode 100644
index 0000000..cfb88f2
--- /dev/null
+++ b/tests/data/test1057
@@ -0,0 +1,51 @@
+<testcase>
+<info>
+<keywords>
+FTP
+EPSV
+RETR
+Range
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+456789abcdef
+</data>
+<datacheck nonewline="yes">
+456789abcdef
+</datacheck>
+<size>
+64
+</size>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP retrieve a byte-range relative to end of file
+ </name>
+ <command>
+-r -12 ftp://%HOSTIP:%FTPPORT/1057
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE I
+SIZE 1057
+REST 52
+RETR 1057
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1058 b/tests/data/test1058
new file mode 100644
index 0000000..0731778
--- /dev/null
+++ b/tests/data/test1058
@@ -0,0 +1,53 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+Content-Range
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+HTTP/1.1 206 Partial Content
+Date: Thu, 31 Jul 2008 13:41:09 GMT
+Accept-Ranges: bytes
+Content-Length: 101
+Content-Range: bytes 100-200/201
+Connection: close
+Content-Type: text/html
+
+..partial data returned from the
+server as a result of setting an explicit byte range
+in the request
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP range relative to end of file
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/want/1058 -r -101
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /want/1058 HTTP/1.1
+Range: bytes=-101
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1059 b/tests/data/test1059
new file mode 100644
index 0000000..5a96de6
--- /dev/null
+++ b/tests/data/test1059
@@ -0,0 +1,58 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP CONNECT
+proxytunnel
+FTP
+FAILURE
+</keywords>
+
+</info>
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 501 Method not implemented swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+Content-Length: 0
+
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<features>
+ftp
+</features>
+<server>
+http
+</server>
+ <name>
+HTTP CONNECT with proxytunnel to unsupported FTP URL
+ </name>
+ <command>
+ftp://test-number:1059/wanted/page -p -x %HOSTIP:%HTTPPORT
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+# The server doesn't implement CONNECT for ftp, so this must be a failure test
+<errorcode>
+56
+</errorcode>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+CONNECT test-number:1059 HTTP/1.1
+Host: test-number:1059
+Proxy-Connection: Keep-Alive
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test106 b/tests/data/test106
new file mode 100644
index 0000000..d1b9a81
--- /dev/null
+++ b/tests/data/test106
@@ -0,0 +1,51 @@
+<testcase>
+<info>
+<keywords>
+FTP
+EPSV
+TYPE A
+RETR
+type=
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+data
+ to
+ see
+that FTP
+works
+ so does it?
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP GET with type=A style ASCII URL using %20 codes
+ </name>
+ <command>
+"ftp://%HOSTIP:%FTPPORT//path%20with%20%20spaces//and%20things2/106;type=A"
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+CWD /path with spaces
+CWD and things2
+EPSV
+TYPE A
+SIZE 106
+RETR 106
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1060 b/tests/data/test1060
new file mode 100644
index 0000000..767a7cc
--- /dev/null
+++ b/tests/data/test1060
@@ -0,0 +1,902 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP CONNECT
+HTTP proxy
+proxytunnel
+HTTP proxy Digest auth
+</keywords>
+</info>
+
+# Server-side
+<reply>
+
+# this is returned first since we get no proxy-auth
+<data>
+HTTP/1.1 407 Authorization Required to proxy me my dear
+Proxy-Authenticate: Digest realm="weirdorealm", nonce="12345"
+Content-Length: 40000
+X-tra-long-header: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+</data>
+
+# this is returned when we get a GET!
+<data2>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 7
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+daniel
+</data2>
+
+# then this is returned when we get proxy-auth
+<data1000>
+HTTP/1.1 200 OK swsbounce
+Server: no
+
+Nice proxy auth sir!
+</data1000>
+
+<datacheck>
+HTTP/1.1 407 Authorization Required to proxy me my dear
+Proxy-Authenticate: Digest realm="weirdorealm", nonce="12345"
+Content-Length: 40000
+X-tra-long-header: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+
+HTTP/1.1 200 OK swsbounce
+Server: no
+
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 7
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+daniel
+</datacheck>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+<features>
+crypto
+</features>
+ <name>
+HTTP proxy CONNECT auth Digest, large headers and data
+ </name>
+ <command>
+http://test.remote.haxx.se:1060/path/10600002 --proxy http://%HOSTIP:%HTTPPORT --proxy-user silly:person --proxy-digest --proxytunnel
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent: curl/.*
+</strip>
+<protocol>
+CONNECT test.remote.haxx.se:1060 HTTP/1.1
+Host: test.remote.haxx.se:1060
+Proxy-Connection: Keep-Alive
+
+CONNECT test.remote.haxx.se:1060 HTTP/1.1
+Host: test.remote.haxx.se:1060
+Proxy-Authorization: Digest username="silly", realm="weirdorealm", nonce="12345", uri="test.remote.haxx.se:1060", response="79e394ffcd42b6c771c7582da1fc4498"
+Proxy-Connection: Keep-Alive
+
+GET /path/10600002 HTTP/1.1
+Host: test.remote.haxx.se:1060
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1061 b/tests/data/test1061
new file mode 100644
index 0000000..0fb8c51
--- /dev/null
+++ b/tests/data/test1061
@@ -0,0 +1,907 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP CONNECT
+HTTP proxy
+chunked Transfer-Encoding
+proxytunnel
+HTTP proxy Digest auth
+</keywords>
+</info>
+
+# Server-side
+<reply>
+
+# this is returned first since we get no proxy-auth
+<data>
+HTTP/1.1 407 Authorization Required to proxy me my dear
+Proxy-Authenticate: Digest realm="weirdorealm", nonce="12345"
+Transfer-Encoding: chunked
+X-tra-long-header: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+
+9c40
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+And you should ignore this data. aaaaaaaaaaaaaaaa
+end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+
+0
+
+</data>
+
+# this is returned when we get a GET!
+<data2>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 7
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+daniel
+</data2>
+
+# then this is returned when we get proxy-auth
+<data1000>
+HTTP/1.1 200 OK swsbounce
+Server: no
+
+Nice proxy auth sir!
+</data1000>
+
+<datacheck>
+HTTP/1.1 407 Authorization Required to proxy me my dear
+Proxy-Authenticate: Digest realm="weirdorealm", nonce="12345"
+Transfer-Encoding: chunked
+X-tra-long-header: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+
+HTTP/1.1 200 OK swsbounce
+Server: no
+
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 7
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+daniel
+</datacheck>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+<features>
+crypto
+</features>
+ <name>
+HTTP proxy CONNECT auth Digest, large headers and chunked data
+ </name>
+ <command>
+http://test.remote.haxx.se:1061/path/10610002 --proxy http://%HOSTIP:%HTTPPORT --proxy-user silly:person --proxy-digest --proxytunnel
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent: curl/.*
+</strip>
+<protocol>
+CONNECT test.remote.haxx.se:1061 HTTP/1.1
+Host: test.remote.haxx.se:1061
+Proxy-Connection: Keep-Alive
+
+CONNECT test.remote.haxx.se:1061 HTTP/1.1
+Host: test.remote.haxx.se:1061
+Proxy-Authorization: Digest username="silly", realm="weirdorealm", nonce="12345", uri="test.remote.haxx.se:1061", response="8e96acf6a6214012183879e28e73b2d3"
+Proxy-Connection: Keep-Alive
+
+GET /path/10610002 HTTP/1.1
+Host: test.remote.haxx.se:1061
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1062 b/tests/data/test1062
new file mode 100644
index 0000000..d96686e
--- /dev/null
+++ b/tests/data/test1062
@@ -0,0 +1,49 @@
+<testcase>
+<info>
+<keywords>
+FTP
+RETR
+huge response
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+mooo
+</data>
+# a long set of response strings to CWD to make sure the ftp parser deals
+# with it nicely
+<servercmd>
+REPLY CWD 250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-A Exactly fill curl's buffer\r\n250 Finally, here is the response, boundary condition
+</servercmd>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP with excessively long server command response lines, boundary condition
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/path/1062
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+EPSV
+TYPE I
+SIZE 1062
+RETR 1062
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1063 b/tests/data/test1063
new file mode 100644
index 0000000..cc07e6b
--- /dev/null
+++ b/tests/data/test1063
@@ -0,0 +1,47 @@
+<testcase>
+<info>
+<keywords>
+FILE
+Range
+FAILURE
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+none
+</server>
+<features>
+file
+large_file
+</features>
+ <name>
+Invalid large X- range on a file://
+ </name>
+# This range value is 2**32+7, which will be truncated to the valid value 7
+# if the large file support is not working correctly
+ <command>
+-r 4294967303- file://localhost/%PWD/log/test1063.txt
+</command>
+<file name="log/test1063.txt">
+1234567890
+1234567890
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+36
+</errorcode>
+<stdout>
+</stdout>
+</verify>
+</testcase>
diff --git a/tests/data/test1064 b/tests/data/test1064
new file mode 100644
index 0000000..dd05ddf
--- /dev/null
+++ b/tests/data/test1064
@@ -0,0 +1,79 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP PUT
+</keywords>
+</info>
+
+<reply>
+<data nocheck="yes">
+HTTP/1.1 200 A OK
+Server: curl test
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 3
+
+ok
+</data>
+<data2 nocheck="yes">
+HTTP/1.1 200 A OK
+Server: curl test
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 9
+
+still ok
+</data2>
+</reply>
+
+# Client-side
+<client>
+#
+<server>
+http
+</server>
+ <name>
+HTTP PUT twice
+ </name>
+ <command>
+-H "Expect:" -T log/1064 http://%HOSTIP:%HTTPPORT/1064.upload1 -T log/1064 http://%HOSTIP:%HTTPPORT/10640002.upload2
+</command>
+<file name="log/1064">
+test
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+PUT /1064.upload1 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 5
+
+test
+PUT /10640002.upload2 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 5
+
+test
+</protocol>
+<stdout>
+HTTP/1.1 200 A OK
+Server: curl test
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 3
+
+ok
+HTTP/1.1 200 A OK
+Server: curl test
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 9
+
+still ok
+</stdout>
+</verify>
+</testcase>
diff --git a/tests/data/test1065 b/tests/data/test1065
new file mode 100644
index 0000000..5688ff9
--- /dev/null
+++ b/tests/data/test1065
@@ -0,0 +1,78 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP PUT
+HTTP GET
+</keywords>
+</info>
+
+<reply>
+<data nocheck="yes">
+HTTP/1.1 200 A OK
+Server: curl test
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 3
+
+ok
+</data>
+<data2 nocheck="yes">
+HTTP/1.1 200 A OK
+Server: curl test
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 9
+
+still ok
+</data2>
+</reply>
+
+# Client-side
+<client>
+#
+<server>
+http
+</server>
+ <name>
+HTTP PUT with one file but two URLs
+ </name>
+ <command>
+-H "Expect:" -T log/1065 http://%HOSTIP:%HTTPPORT/1065.upload1 http://%HOSTIP:%HTTPPORT/10650002.url2
+</command>
+<file name="log/1065">
+test
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+PUT /1065.upload1 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 5
+
+test
+GET /10650002.url2 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+<stdout>
+HTTP/1.1 200 A OK
+Server: curl test
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 3
+
+ok
+HTTP/1.1 200 A OK
+Server: curl test
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 9
+
+still ok
+</stdout>
+</verify>
+</testcase>
diff --git a/tests/data/test1066 b/tests/data/test1066
new file mode 100644
index 0000000..bacedef
--- /dev/null
+++ b/tests/data/test1066
@@ -0,0 +1,82 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.1 200 OK
+Server: thebest/1.0
+Content-Type: text/plain
+Content-Length: 6
+
+first
+</data>
+<data1 nocheck="yes">
+HTTP/1.1 200 OK
+Server: thebest/1.0
+Content-Type: text/plain
+Content-Length: 7
+
+second
+</data1>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP --dump-header - with two URLs
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/want/1066 http://%HOSTIP:%HTTPPORT/want/10660001 --dump-header -
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /want/1066 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /want/10660001 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+<stdout>
+HTTP/1.1 200 OK
+HTTP/1.1 200 OK
+Server: thebest/1.0
+Server: thebest/1.0
+Content-Type: text/plain
+Content-Type: text/plain
+Content-Length: 6
+Content-Length: 6
+
+
+first
+HTTP/1.1 200 OK
+HTTP/1.1 200 OK
+Server: thebest/1.0
+Server: thebest/1.0
+Content-Type: text/plain
+Content-Type: text/plain
+Content-Length: 7
+Content-Length: 7
+
+
+second
+</stdout>
+</verify>
+</testcase>
diff --git a/tests/data/test1067 b/tests/data/test1067
new file mode 100644
index 0000000..9fc7a6f
--- /dev/null
+++ b/tests/data/test1067
@@ -0,0 +1,78 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+followlocation
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+HTTP/1.1 301 This is a weirdo text message swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Location: data/10670002.txt?coolsite=yes
+Connection: close
+
+This server reply is for testing a simple Location: following
+
+</data>
+<data2>
+HTTP/1.1 200 Followed here fine swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 52
+
+If this is received, the location following worked
+
+</data2>
+<datacheck>
+HTTP/1.1 301 This is a weirdo text message swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Location: data/10670002.txt?coolsite=yes
+Connection: close
+
+HTTP/1.1 200 Followed here fine swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 52
+
+If this is received, the location following worked
+
+</datacheck>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP Location: following with auto-referer
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/want/1067 -L --referer "firstone.html;auto"
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /want/1067 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Referer: firstone.html
+
+GET /want/data/10670002.txt?coolsite=yes HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Referer: http://%HOSTIP:%HTTPPORT/want/1067
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1068 b/tests/data/test1068
new file mode 100644
index 0000000..ff26d78
--- /dev/null
+++ b/tests/data/test1068
@@ -0,0 +1,57 @@
+<testcase>
+# Similar to test 60
+<info>
+<keywords>
+HTTP
+HTTP PUT
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+HTTP/1.0 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+
+blablabla
+
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+<name>
+HTTP PUT from stdin
+</name>
+ <command>
+http://%HOSTIP:%HTTPPORT/bzz/1068 -T -
+</command>
+<stdin>
+more than one byte
+</stdin>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+PUT /bzz/1068 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Transfer-Encoding: chunked
+Expect: 100-continue
+
+13
+more than one byte
+
+0
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1069 b/tests/data/test1069
new file mode 100644
index 0000000..c47c357
--- /dev/null
+++ b/tests/data/test1069
@@ -0,0 +1,36 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP PUT
+HTTP/1.0
+</keywords>
+</info>
+
+# Server-side
+<reply>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+<name>
+HTTP 1.0 PUT from stdin with no content length
+</name>
+ <command>
+http://%HOSTIP:%HTTPPORT/bzz/1069 -T - -0
+</command>
+<stdin>
+this data can't be sent
+</stdin>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+25
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test107 b/tests/data/test107
new file mode 100644
index 0000000..25b6452
--- /dev/null
+++ b/tests/data/test107
@@ -0,0 +1,51 @@
+<testcase>
+<info>
+<keywords>
+FTP
+EPSV
+STOR
+</keywords>
+</info>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP PASV upload file
+ </name>
+<file name="log/test107.txt">
+data
+ to
+ see
+that FTP
+works
+ so does it?
+</file>
+ <command>
+ftp://%HOSTIP:%FTPPORT/107 -T log/test107.txt
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<upload>
+data
+ to
+ see
+that FTP
+works
+ so does it?
+</upload>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE I
+STOR 107
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1070 b/tests/data/test1070
new file mode 100644
index 0000000..d202a9c
--- /dev/null
+++ b/tests/data/test1070
@@ -0,0 +1,65 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP POST
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 403 Go away and swsclose
+Server: test-server/fake
+Content-Type: text/html
+Content-Length: 55
+Connection: close
+
+you are not supposed to be allowed to send things here
+</data>
+<servercmd>
+skip: 2300
+</servercmd>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP POST with server closing connection before (all) data is received
+ </name>
+ <command>
+ -d @log/input1070 http://%HOSTIP:%HTTPPORT/1070
+</command>
+<file name="log/input1070">
+This creates the named file with this content before the test case is run,
+which is useful if the test case needs a file to act on. We create this file
+rather large (larger than your typical TCP packet) so that not all of it can nor
+will be sent in one go as that is kind of the point of this test!
+
+Here's 2000 x 'O':
+OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
+</file>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol nonewline="yes">
+POST /1070 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 2313
+Content-Type: application/x-www-form-urlencoded
+Expect: 100-continue
+
+This creates
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1071 b/tests/data/test1071
new file mode 100644
index 0000000..758457a
--- /dev/null
+++ b/tests/data/test1071
@@ -0,0 +1,113 @@
+<testcase>
+# Authorization is used to force curl to realize that the server is
+# speaking HTTP 1.0. The request must be resent with the correct
+# authorization header, but using HTTP 1.0, not 1.1.
+<info>
+<keywords>
+HTTP
+HTTP PUT
+HTTP Digest auth
+--anyauth
+HTTP/1.0
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+HTTP/1.0 401 Authorization Required swsclose
+Server: testcurl
+WWW-Authenticate: Blackmagic realm="gimme all yer s3cr3ts"
+WWW-Authenticate: Basic realm="gimme all yer s3cr3ts"
+WWW-Authenticate: Digest realm="gimme all yer s3cr3ts", nonce="11223344"
+Content-Type: text/plain
+Content-Length: 35
+Connection: close
+
+Try again on this HTTP 1.0 server!
+</data>
+
+# This is supposed to be returned when the server gets a
+# Authorization: Digest line passed-in from the client
+<data1000>
+HTTP/1.0 200 OK swsclose
+Server: testcurl
+Content-Type: text/plain
+Content-Length: 23
+Connection: close
+
+This IS the real page!
+</data1000>
+
+<datacheck>
+HTTP/1.0 401 Authorization Required swsclose
+Server: testcurl
+WWW-Authenticate: Blackmagic realm="gimme all yer s3cr3ts"
+WWW-Authenticate: Basic realm="gimme all yer s3cr3ts"
+WWW-Authenticate: Digest realm="gimme all yer s3cr3ts", nonce="11223344"
+Content-Type: text/plain
+Content-Length: 35
+Connection: close
+
+HTTP/1.0 200 OK swsclose
+Server: testcurl
+Content-Type: text/plain
+Content-Length: 23
+Connection: close
+
+This IS the real page!
+</datacheck>
+
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+<features>
+crypto
+</features>
+ <name>
+Downgraded HTTP PUT to HTTP 1.0 with authorization
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/1071 -T log/put1071 -u testuser:testpass --anyauth
+</command>
+<file name="log/put1071">
+This is data we upload with PUT
+a second line
+line three
+four is the number of lines
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+PUT /1071 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 85
+Expect: 100-continue
+
+This is data we upload with PUT
+a second line
+line three
+four is the number of lines
+PUT /1071 HTTP/1.0
+Authorization: Digest username="testuser", realm="gimme all yer s3cr3ts", nonce="11223344", uri="/1071", response="df4cef6b52a30e65d472dd848d2055a1"
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 85
+
+This is data we upload with PUT
+a second line
+line three
+four is the number of lines
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1072 b/tests/data/test1072
new file mode 100644
index 0000000..14b6d80
--- /dev/null
+++ b/tests/data/test1072
@@ -0,0 +1,78 @@
+<testcase>
+# Authorization is used to force curl to realize that the server is
+# speaking HTTP 1.0. The request is impossible to satisfy with HTTP 1.0
+# because chunked encoding is unavailable, so the request must fail.
+<info>
+<keywords>
+HTTP
+HTTP PUT
+HTTP Digest auth
+--anyauth
+HTTP/1.0
+chunked Transfer-Encoding
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+HTTP/1.0 401 Authorization Required swsclose
+Server: testcurl
+WWW-Authenticate: Blackmagic realm="gimme all yer s3cr3ts"
+WWW-Authenticate: Basic realm="gimme all yer s3cr3ts"
+WWW-Authenticate: Digest realm="gimme all yer s3cr3ts", nonce="11223344"
+Content-Type: text/plain
+Content-Length: 0
+Connection: close
+
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+<features>
+crypto
+</features>
+ <name>
+HTTP chunked PUT to HTTP 1.0 server with authorization
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/1072 -T - -u testuser:testpass --anyauth
+</command>
+<stdin>
+This is data we upload with PUT
+it comes from stdin so MUST be sent
+with chunked encoding
+which is impossible in HTTP/1.0
+</stdin>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+25
+</errorcode>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+PUT /1072 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Transfer-Encoding: chunked
+Expect: 100-continue
+
+7a
+This is data we upload with PUT
+it comes from stdin so MUST be sent
+with chunked encoding
+which is impossible in HTTP/1.0
+
+0
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1073 b/tests/data/test1073
new file mode 100644
index 0000000..481f909
--- /dev/null
+++ b/tests/data/test1073
@@ -0,0 +1,72 @@
+<testcase>
+# Redirection is used to force curl to realize that the server is
+# speaking HTTP 1.0. The request is impossible to satisfy with HTTP 1.0
+# because chunked encoding is unavailable, so the request must fail.
+<info>
+<keywords>
+HTTP
+HTTP PUT
+HTTP/1.0
+followlocation
+chunked Transfer-Encoding
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+HTTP/1.0 301 Redirect swsclose
+Server: testcurl
+Content-Type: text/plain
+Location: /newlocation/10730002
+Content-Length: 0
+Connection: close
+
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP chunked PUT to HTTP 1.0 server with redirect
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/1073 -T - -L
+</command>
+<stdin>
+This is data we upload with PUT
+it comes from stdin so MUST be sent
+with chunked encoding
+which is impossible in HTTP/1.0
+</stdin>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+25
+</errorcode>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+PUT /1073 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Transfer-Encoding: chunked
+Expect: 100-continue
+
+7a
+This is data we upload with PUT
+it comes from stdin so MUST be sent
+with chunked encoding
+which is impossible in HTTP/1.0
+
+0
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1074 b/tests/data/test1074
new file mode 100644
index 0000000..3464b41
--- /dev/null
+++ b/tests/data/test1074
@@ -0,0 +1,76 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP/1.0
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.0 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 9
+Connection: Keep-Alive
+
+surprise
+</data>
+<data1>
+HTTP/1.0 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+
+surprise2
+</data1>
+
+<postcmd>
+wait 1
+</postcmd>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP downgrade to HTTP/1.0 on second request
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/want/1074 http://%HOSTIP:%HTTPPORT/wantmore/10740001
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<stdout>
+HTTP/1.0 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 9
+Connection: Keep-Alive
+
+surprise
+HTTP/1.0 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+
+surprise2
+</stdout>
+
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /want/1074 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /wantmore/10740001 HTTP/1.0
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1075 b/tests/data/test1075
new file mode 100644
index 0000000..5b8f186
--- /dev/null
+++ b/tests/data/test1075
@@ -0,0 +1,94 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP PUT
+HTTP Basic auth
+--anyauth
+</keywords>
+</info>
+
+# Server-side
+<reply>
+# The test server provides no way to respond differently to a subsequent
+# Basic authenticated request (we really want to respond with 200 for
+# the second), so just respond with 401 for both and let curl deal with it.
+<data>
+HTTP/1.1 401 Authorization Required
+Server: testcurl
+WWW-Authenticate: Blackmagic realm="gimme all yer s3cr3ts"
+WWW-Authenticate: Basic realm="gimme all yer s3cr3ts"
+WWW-Authenticate: X-bogus-auth realm="gimme all yer s3cr3ts"
+Content-Type: text/plain
+Content-Length: 0
+
+</data>
+<datacheck>
+HTTP/1.1 401 Authorization Required
+Server: testcurl
+WWW-Authenticate: Blackmagic realm="gimme all yer s3cr3ts"
+WWW-Authenticate: Basic realm="gimme all yer s3cr3ts"
+WWW-Authenticate: X-bogus-auth realm="gimme all yer s3cr3ts"
+Content-Type: text/plain
+Content-Length: 0
+
+HTTP/1.1 401 Authorization Required
+Server: testcurl
+WWW-Authenticate: Blackmagic realm="gimme all yer s3cr3ts"
+WWW-Authenticate: Basic realm="gimme all yer s3cr3ts"
+WWW-Authenticate: X-bogus-auth realm="gimme all yer s3cr3ts"
+Content-Type: text/plain
+Content-Length: 0
+
+</datacheck>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP PUT with --anyauth authorization (picking Basic)
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/1075 -T log/put1075 -u testuser:testpass --anyauth
+</command>
+<file name="log/put1075">
+This is data we upload with PUT
+a second line
+line three
+four is the number of lines
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+PUT /1075 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 85
+Expect: 100-continue
+
+This is data we upload with PUT
+a second line
+line three
+four is the number of lines
+PUT /1075 HTTP/1.1
+Authorization: Basic dGVzdHVzZXI6dGVzdHBhc3M=
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 85
+Expect: 100-continue
+
+This is data we upload with PUT
+a second line
+line three
+four is the number of lines
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1076 b/tests/data/test1076
new file mode 100644
index 0000000..ad079eb
--- /dev/null
+++ b/tests/data/test1076
@@ -0,0 +1,79 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP POST
+followlocation
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 302 OK swsclose
+Location: moo.html&testcase=/10760002
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+
+</data>
+<data2>
+HTTP/1.1 200 OK swsclose
+Location: this should be ignored
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+
+body
+</data2>
+<datacheck>
+HTTP/1.1 302 OK swsclose
+Location: moo.html&testcase=/10760002
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+
+HTTP/1.1 200 OK swsclose
+Location: this should be ignored
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+
+body
+</datacheck>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP POST with 302 redirect and --post302
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/blah/1076 -L -d "moo" --post302
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol nonewline="yes">
+POST /blah/1076 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 3
+Content-Type: application/x-www-form-urlencoded
+
+mooPOST /blah/moo.html&testcase=/10760002 HTTP/1.1
+User-Agent: curl/7.10 (i686-pc-linux-gnu) libcurl/7.10 OpenSSL/0.9.6c ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 3
+Content-Type: application/x-www-form-urlencoded
+
+moo
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1077 b/tests/data/test1077
new file mode 100644
index 0000000..a3c9024
--- /dev/null
+++ b/tests/data/test1077
@@ -0,0 +1,75 @@
+<testcase>
+<info>
+<keywords>
+FTP
+HTTP
+HTTP/1.0
+HTTP GET
+HTTP proxy
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.0 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Type: text/plain
+Content-Length: 9
+Funny-head: yesyes
+Proxy-Connection: Keep-Alive
+
+contents
+</data>
+<data2>
+HTTP/1.0 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Type: text/plain
+Content-Length: 9
+Funny-head: yesyes
+Proxy-Connection: Keep-Alive
+
+contents
+</data2>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<features>
+ftp
+</features>
+ <name>
+FTP over HTTP proxy with downgrade to HTTP 1.0
+ </name>
+ <command>
+-x %HOSTIP:%HTTPPORT ftp://%HOSTIP:%HTTPPORT/we/want/that/page/1077 ftp://%HOSTIP:%HTTPPORT/we/want/that/page/10770002
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET ftp://%HOSTIP:%HTTPPORT/we/want/that/page/1077 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+GET ftp://%HOSTIP:%HTTPPORT/we/want/that/page/10770002 HTTP/1.0
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1078 b/tests/data/test1078
new file mode 100644
index 0000000..e2355e3
--- /dev/null
+++ b/tests/data/test1078
@@ -0,0 +1,86 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP/1.0
+HTTP GET
+HTTP CONNECT
+HTTP proxy
+proxytunnel
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.0 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Type: text/html
+Funny-head: yesyes
+Content-Length: 9
+Connection: keep-alive
+
+contents
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP 1.0 CONNECT with proxytunnel and downgrade GET to HTTP/1.0
+ </name>
+ <command>
+--proxy1.0 %HOSTIP:%HTTPPORT -p http://%HOSTIP:%HTTPPORT/we/want/that/page/1078 http://%HOSTIP:%HTTPPORT/we/want/that/page/1078
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+CONNECT %HOSTIP:%HTTPPORT HTTP/1.0
+Host: %HOSTIP:%HTTPPORT
+Proxy-Connection: Keep-Alive
+
+GET /we/want/that/page/1078 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /we/want/that/page/1078 HTTP/1.0
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+<stdout>
+HTTP/1.1 200 Mighty fine indeed
+
+HTTP/1.0 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Type: text/html
+Funny-head: yesyes
+Content-Length: 9
+Connection: keep-alive
+
+contents
+HTTP/1.0 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Type: text/html
+Funny-head: yesyes
+Content-Length: 9
+Connection: keep-alive
+
+contents
+</stdout>
+</verify>
+</testcase>
diff --git a/tests/data/test1079 b/tests/data/test1079
new file mode 100644
index 0000000..c188e79
--- /dev/null
+++ b/tests/data/test1079
@@ -0,0 +1,75 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP Digest auth
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+HTTP/1.1 401 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Digest realm="testrealm", nonce="1053604145"
+Content-Type: text/plain; charset=iso-8859-1
+Content-Length: 26
+
+This is not the real page
+</data>
+
+# This is supposed to be returned when the server gets a
+# Authorization: Digest line passed-in from the client
+# Send nothing to force an error code 52 reply
+<data1000>
+</data1000>
+
+<datacheck>
+HTTP/1.1 401 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Digest realm="testrealm", nonce="1053604145"
+Content-Type: text/plain; charset=iso-8859-1
+Content-Length: 26
+
+</datacheck>
+
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+<features>
+crypto
+</features>
+ <name>
+HTTP retry after closed connection and empty response
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/1079 -u testuser:testpass --digest
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+52
+</errorcode>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /1079 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /1079 HTTP/1.1
+Authorization: Digest username="testuser", realm="testrealm", nonce="1053604145", uri="/1079", response="e340c7cdca0950462070f46ee139e9f7"
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test108 b/tests/data/test108
new file mode 100644
index 0000000..eb2ea63
--- /dev/null
+++ b/tests/data/test108
@@ -0,0 +1,56 @@
+<testcase>
+<info>
+<keywords>
+FTP
+PORT
+STOR
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP PORT upload with CWD
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/CWD/STOR/RETR/108 -T log/upload108 -P -
+</command>
+<file name="log/upload108">
+Moooooooooooo
+ upload this
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+# Strip all valid kinds of PORT and EPRT that curl can send
+<strip>
+^PORT \d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3}
+^EPRT \|1\|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\|\d{1,5}\|
+</strip>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+CWD CWD
+CWD STOR
+CWD RETR
+PORT 127,0,0,1,5,109
+TYPE I
+STOR 108
+QUIT
+</protocol>
+<upload>
+Moooooooooooo
+ upload this
+</upload>
+</verify>
+</testcase>
diff --git a/tests/data/test1080 b/tests/data/test1080
new file mode 100644
index 0000000..ae37fb7
--- /dev/null
+++ b/tests/data/test1080
@@ -0,0 +1,69 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+redirect_url
+followlocation
+--write-out
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.1 301 This is a weirdo text message swsclose
+Location: data/10800002.txt?coolsite=yes
+Content-Length: 62
+Connection: close
+
+This server reply is for testing a simple Location: following
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP Location: on two URLs 'redirect_url' check
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/we/want/our/1080 http://%HOSTIP:%HTTPPORT/we/want/our/1080 -w '%{redirect_url}\n'
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /we/want/our/1080 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /we/want/our/1080 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+<stdout mode="text">
+HTTP/1.1 301 This is a weirdo text message swsclose
+Location: data/10800002.txt?coolsite=yes
+Content-Length: 62
+Connection: close
+
+This server reply is for testing a simple Location: following
+http://%HOSTIP:%HTTPPORT/we/want/our/data/10800002.txt?coolsite=yes
+HTTP/1.1 301 This is a weirdo text message swsclose
+Location: data/10800002.txt?coolsite=yes
+Content-Length: 62
+Connection: close
+
+This server reply is for testing a simple Location: following
+http://%HOSTIP:%HTTPPORT/we/want/our/data/10800002.txt?coolsite=yes
+</stdout>
+</verify>
+</testcase>
diff --git a/tests/data/test1081 b/tests/data/test1081
new file mode 100644
index 0000000..d290020
--- /dev/null
+++ b/tests/data/test1081
@@ -0,0 +1,77 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+redirect_url
+followlocation
+--write-out
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.1 301 This is a weirdo text message swsclose
+Location: data/10810099.txt?coolsite=yes
+Content-Length: 62
+Connection: close
+
+This server reply is for testing a simple Location: following
+</data>
+<data2 nocheck="yes">
+HTTP/1.1 200 Followed here fine swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 41
+
+This second URL does not have a location
+</data2>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP no Location: on second URL 'redirect_url' check
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/we/want/our/1081 http://%HOSTIP:%HTTPPORT/we/want/our/10810002 -w '%{redirect_url}\n'
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /we/want/our/1081 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /we/want/our/10810002 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+<stdout mode="text">
+HTTP/1.1 301 This is a weirdo text message swsclose
+Location: data/10810099.txt?coolsite=yes
+Content-Length: 62
+Connection: close
+
+This server reply is for testing a simple Location: following
+http://%HOSTIP:%HTTPPORT/we/want/our/data/10810099.txt?coolsite=yes
+HTTP/1.1 200 Followed here fine swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 41
+
+This second URL does not have a location
+
+</stdout>
+</verify>
+</testcase>
diff --git a/tests/data/test1082 b/tests/data/test1082
new file mode 100644
index 0000000..d58dd25
--- /dev/null
+++ b/tests/data/test1082
@@ -0,0 +1,55 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+--interface
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Date: Mon, 28 Jul 2008 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 6
+Connection: close
+Content-Type: text/plain
+
+-foo-
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP GET with localhost --interface
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/1082 --interface localhost
+</command>
+<precheck>
+perl -e "print 'Test requires default test server host address' if ( '%CLIENTIP' ne '127.0.0.1' );"
+</precheck>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /1082 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1083 b/tests/data/test1083
new file mode 100644
index 0000000..e441278
--- /dev/null
+++ b/tests/data/test1083
@@ -0,0 +1,59 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+--interface
+IPv6
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Date: Mon, 28 Jul 2008 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 6
+Connection: close
+Content-Type: text/plain
+
+-foo-
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<features>
+ipv6
+</features>
+<server>
+http-ipv6
+</server>
+ <name>
+HTTP-IPv6 GET with ip6-localhost --interface
+ </name>
+ <command>
+-g "http://%HOST6IP:%HTTP6PORT/1083" --interface ip6-localhost
+</command>
+<precheck>
+perl -e "if ('%CLIENT6IP' ne '[::1]') {print 'Test requires default test server host address';} else {exec './server/resolve --ipv6 ip6-localhost'; print 'Cannot run precheck resolve';}"
+</precheck>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /1083 HTTP/1.1
+Host: %HOST6IP:%HTTP6PORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1084 b/tests/data/test1084
new file mode 100644
index 0000000..1cfab68
--- /dev/null
+++ b/tests/data/test1084
@@ -0,0 +1,41 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+--interface
+FAILURE
+non-existing host
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+</reply>
+
+#
+# Client-side
+<client>
+<features>
+http
+</features>
+<server>
+none
+</server>
+ <name>
+HTTP GET with invalid --interface
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/1084 --interface non-existing-host.haxx.se.
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+45
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test1085 b/tests/data/test1085
new file mode 100644
index 0000000..db02e60
--- /dev/null
+++ b/tests/data/test1085
@@ -0,0 +1,48 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+--interface
+IPv6
+FAILURE
+non-existing host
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+</reply>
+
+#
+# Client-side
+<client>
+<features>
+http
+ipv6
+</features>
+<server>
+none
+</server>
+ <name>
+HTTP-IPv6 GET with invalid --interface
+ </name>
+ <command>
+-g "http://%HOST6IP:%HTTP6PORT/1085" --interface non-existing-host.haxx.se.
+</command>
+# Ensure the IPv6 stack is operational before running this test (other tests
+# use the startup of the IPv6 test server as a substitute check for this).
+<precheck>
+./server/resolve --ipv6 ::1
+</precheck>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+45
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test1086 b/tests/data/test1086
new file mode 100644
index 0000000..402e1f9
--- /dev/null
+++ b/tests/data/test1086
@@ -0,0 +1,109 @@
+<testcase>
+<info>
+<keywords>
+FTP
+EPSV
+RETR
+timeout
+FAILURE
+</keywords>
+</info>
+
+# Server-side
+<reply>
+# Overload some standard FTP responses to make them shorter and faster
+# to avoid wasting time waiting for the data phase to start
+<servercmd>
+SLOWDOWN
+REPLY USER 331 OK
+REPLY PASS 230 OK
+REPLY PWD 257 "/"
+REPLY TYPE 200 OK
+</servercmd>
+<data nocheck="yes">
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+<killserver>
+ftp
+</killserver>
+ <name>
+FTP download with strict timeout and slow data transfer
+ </name>
+ <command timeout="1">
+ftp://%HOSTIP:%FTPPORT/1086 -m 7
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+# 28 is CURLE_OPERATION_TIMEDOUT
+<errorcode>
+28
+</errorcode>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE I
+SIZE 1086
+RETR 1086
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1087 b/tests/data/test1087
new file mode 100644
index 0000000..d3bec0c
--- /dev/null
+++ b/tests/data/test1087
@@ -0,0 +1,110 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP proxy
+HTTP Basic auth
+HTTP proxy Basic auth
+followlocation
+--anyauth
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data1000 nocheck="yes">
+HTTP/1.1 401 Authorization Required
+WWW-Authenticate: Basic
+Content-Type: text/plain
+Content-Length: 0
+
+</data1000>
+<data1001 nocheck="yes">
+HTTP/1.1 302 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake swsclose
+Content-Type: text/plain
+Funny-head: yesyes
+Location: http://goto.second.host.now/10871002
+Content-Length: 0
+Connection: close
+
+</data1001>
+<data1002 nocheck="yes">
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake swsclose
+Content-Type: text/plain
+Funny-head: yesyes
+Content-Length: 9
+
+contents
+</data1002>
+
+<datacheck>
+HTTP/1.1 401 Authorization Required
+WWW-Authenticate: Basic
+Content-Type: text/plain
+Content-Length: 0
+
+HTTP/1.1 302 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake swsclose
+Content-Type: text/plain
+Funny-head: yesyes
+Location: http://goto.second.host.now/10871002
+Content-Length: 0
+Connection: close
+
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake swsclose
+Content-Type: text/plain
+Funny-head: yesyes
+Content-Length: 9
+
+contents
+</datacheck>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP, proxy with --anyauth and Location: to new host
+ </name>
+ <command>
+http://first.host.it.is/we/want/that/page/10871000 -x %HOSTIP:%HTTPPORT --user iam:myself --location --anyauth
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET http://first.host.it.is/we/want/that/page/10871000 HTTP/1.1
+Host: first.host.it.is
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+GET http://first.host.it.is/we/want/that/page/10871000 HTTP/1.1
+Authorization: Basic aWFtOm15c2VsZg==
+Host: first.host.it.is
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+GET http://goto.second.host.now/10871002 HTTP/1.1
+Host: goto.second.host.now
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1088 b/tests/data/test1088
new file mode 100644
index 0000000..13e7d03
--- /dev/null
+++ b/tests/data/test1088
@@ -0,0 +1,112 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP proxy
+HTTP Basic auth
+HTTP proxy Basic auth
+followlocation
+--anyauth
+--location-trusted
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data1000 nocheck="yes">
+HTTP/1.1 401 Authorization Required
+WWW-Authenticate: Basic
+Content-Type: text/plain
+Content-Length: 0
+
+</data1000>
+<data1001 nocheck="yes">
+HTTP/1.1 302 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake swsclose
+Content-Type: text/plain
+Funny-head: yesyes
+Location: http://goto.second.host.now/10881002
+Content-Length: 0
+Connection: close
+
+</data1001>
+<data1003 nocheck="yes">
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake swsclose
+Content-Type: text/plain
+Funny-head: yesyes
+Content-Length: 9
+
+contents
+</data1003>
+
+<datacheck>
+HTTP/1.1 401 Authorization Required
+WWW-Authenticate: Basic
+Content-Type: text/plain
+Content-Length: 0
+
+HTTP/1.1 302 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake swsclose
+Content-Type: text/plain
+Funny-head: yesyes
+Location: http://goto.second.host.now/10881002
+Content-Length: 0
+Connection: close
+
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake swsclose
+Content-Type: text/plain
+Funny-head: yesyes
+Content-Length: 9
+
+contents
+</datacheck>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP, proxy with --anyauth and Location: to new host using location-trusted
+ </name>
+ <command>
+http://first.host.it.is/we/want/that/page/10881000 -x %HOSTIP:%HTTPPORT --user iam:myself --location-trusted --anyauth
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET http://first.host.it.is/we/want/that/page/10881000 HTTP/1.1
+Host: first.host.it.is
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+GET http://first.host.it.is/we/want/that/page/10881000 HTTP/1.1
+Authorization: Basic aWFtOm15c2VsZg==
+Host: first.host.it.is
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+GET http://goto.second.host.now/10881002 HTTP/1.1
+Authorization: Basic aWFtOm15c2VsZg==
+Host: goto.second.host.now
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1089 b/tests/data/test1089
new file mode 100644
index 0000000..d2a18a2
--- /dev/null
+++ b/tests/data/test1089
@@ -0,0 +1,91 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+followlocation
+--write-out
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.1 302 OK swsbounce swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 8
+Connection: close
+Content-Type: text/plain
+Location: ./10890001
+
+monster
+</data>
+<data1 nocheck="yes">
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 15
+Connection: close
+Content-Type: text/plain; charset=us-ascii
+
+bigger monster
+</data1>
+
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP GET --write-out with redirected fetch
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/1089 -w "%{num_connects}\n%{num_redirects}\n%{size_download}\n%{url_effective}\n%{content_type}\n%{response_code}\n" -L
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /1089 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /10890001 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+
+<stdout>
+HTTP/1.1 302 OK swsbounce swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 8
+Connection: close
+Content-Type: text/plain
+Location: ./10890001
+
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 15
+Connection: close
+Content-Type: text/plain; charset=us-ascii
+
+bigger monster
+2
+1
+15
+http://%HOSTIP:%HTTPPORT/10890001
+text/plain; charset=us-ascii
+200
+</stdout>
+
+</verify>
+</testcase>
diff --git a/tests/data/test109 b/tests/data/test109
new file mode 100644
index 0000000..c027885
--- /dev/null
+++ b/tests/data/test109
@@ -0,0 +1,48 @@
+<testcase>
+<info>
+<keywords>
+FTP
+EPSV
+APPE
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP PASV upload append
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/109 -T log/upload109 --append
+</command>
+<file name="log/upload109">
+Moooooooooooo
+ upload this
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE I
+APPE 109
+QUIT
+</protocol>
+<upload>
+Moooooooooooo
+ upload this
+</upload>
+</verify>
+</testcase>
diff --git a/tests/data/test1090 b/tests/data/test1090
new file mode 100644
index 0000000..3304f91
--- /dev/null
+++ b/tests/data/test1090
@@ -0,0 +1,98 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+followlocation
+chunked Transfer-Encoding
+--write-out
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.1 302 OK swsbounce swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 8
+Connection: close
+Content-Type: text/plain
+Location: ./10900001
+
+monster
+</data>
+<data1 nocheck="yes">
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Transfer-Encoding: chunked
+Connection: close
+Content-Type: text/plain; charset=us-ascii
+
+0007
+bigger
+0008
+monster
+
+0
+
+</data1>
+
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP GET --write-out with redirected fetch and chunked reply
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/1090 -w "%{num_connects}\n%{num_redirects}\n%{size_download}\n%{url_effective}\n%{content_type}\n%{response_code}\n" -L
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /1090 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /10900001 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+
+<stdout>
+HTTP/1.1 302 OK swsbounce swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 8
+Connection: close
+Content-Type: text/plain
+Location: ./10900001
+
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Transfer-Encoding: chunked
+Connection: close
+Content-Type: text/plain; charset=us-ascii
+
+bigger monster
+2
+1
+15
+http://%HOSTIP:%HTTPPORT/10900001
+text/plain; charset=us-ascii
+200
+</stdout>
+
+</verify>
+</testcase>
diff --git a/tests/data/test1091 b/tests/data/test1091
new file mode 100644
index 0000000..f3ce860
--- /dev/null
+++ b/tests/data/test1091
@@ -0,0 +1,46 @@
+<testcase>
+# based on test 143
+<info>
+<keywords>
+FTP
+RETR
+type=
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+bla bla bla
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP URL with type=i
+ </name>
+ <command>
+"ftp://%HOSTIP:%FTPPORT/%2ftmp/moo/1091;type=i" --use-ascii
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+CWD /tmp
+CWD moo
+EPSV
+TYPE I
+SIZE 1091
+RETR 1091
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1092 b/tests/data/test1092
new file mode 100644
index 0000000..adef432
--- /dev/null
+++ b/tests/data/test1092
@@ -0,0 +1,56 @@
+<testcase>
+<info>
+<keywords>
+FTP
+HTTP
+HTTP GET
+HTTP proxy
+type=
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.0 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake swsclose
+Content-Type: text/html
+Funny-head: yesyes
+
+contents
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<features>
+ftp
+</features>
+ <name>
+FTP with type=i over HTTP proxy
+ </name>
+ <command>
+"ftp://%HOSTIP:%HTTPPORT/we/want/that/page/1092;type=i" --use-ascii -x %HOSTIP:%HTTPPORT
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET ftp://%HOSTIP:%HTTPPORT/we/want/that/page/1092;type=i HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1093 b/tests/data/test1093
new file mode 100644
index 0000000..dbcfd9f
--- /dev/null
+++ b/tests/data/test1093
@@ -0,0 +1,44 @@
+<testcase>
+<info>
+<keywords>
+TFTP
+TFTP RRQ
+mode=
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data>
+a chunk of
+data
+returned
+ to client
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+tftp
+</server>
+ <name>
+TFTP retrieve with mode=i
+ </name>
+ <command>
+"tftp://%HOSTIP:%TFTPPORT//1093;mode=i" --use-ascii --trace-ascii log/traceit
+</command>
+</client>
+
+#
+# Verify pseudo protocol after the test has been "shot"
+<verify>
+<protocol>
+opcode: 1
+filename: /1093
+mode: octet
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1094 b/tests/data/test1094
new file mode 100644
index 0000000..2996550
--- /dev/null
+++ b/tests/data/test1094
@@ -0,0 +1,50 @@
+<testcase>
+<info>
+<keywords>
+TFTP
+TFTP RRQ
+mode=
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data>
+a chunk of
+data
+returned
+ to client
+</data>
+<datacheck>
+a chunk of
+data
+returned
+ to client
+</datacheck>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+tftp
+</server>
+ <name>
+TFTP retrieve with mode=netascii
+ </name>
+ <command>
+"tftp://%HOSTIP:%TFTPPORT//1094;mode=netascii" --trace-ascii log/traceit
+</command>
+</client>
+
+#
+# Verify pseudo protocol after the test has been "shot"
+<verify>
+<protocol>
+opcode: 1
+filename: /1094
+mode: netascii
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1095 b/tests/data/test1095
new file mode 100644
index 0000000..d401b52
--- /dev/null
+++ b/tests/data/test1095
@@ -0,0 +1,83 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP Digest auth
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+HTTP/1.1 401 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Digest realm="test \"this\" realm!!", nonce="1053604145"
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 26
+
+This is not the real page
+</data>
+
+# This is supposed to be returned when the server gets a
+# Authorization: Digest line passed-in from the client
+<data1000>
+HTTP/1.1 200 OK swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 23
+
+This IS the real page!
+</data1000>
+
+<datacheck>
+HTTP/1.1 401 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Digest realm="test \"this\" realm!!", nonce="1053604145"
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 26
+
+HTTP/1.1 200 OK swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 23
+
+This IS the real page!
+</datacheck>
+
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+<features>
+crypto
+</features>
+ <name>
+HTTP with Digest and realm with quoted quotes
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/1095 -u testuser:testpass --digest
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /1095 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /1095 HTTP/1.1
+Authorization: Digest username="testuser", realm="test \"this\" realm!!", nonce="1053604145", uri="/1095", response="a1c7931ece9e8617bae2715045e4f49f"
+User-Agent: curl/7.10.5 (i686-pc-linux-gnu) libcurl/7.10.5 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1096 b/tests/data/test1096
new file mode 100644
index 0000000..30748c1
--- /dev/null
+++ b/tests/data/test1096
@@ -0,0 +1,50 @@
+<testcase>
+<info>
+<keywords>
+FTP
+PASV
+RETR
+FAILURE
+</keywords>
+</info>
+# Server-side
+<reply>
+<servercmd>
+REPLY RETR 550 no such file!
+</servercmd>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+Two FTP downloads, with failed RETR but re-used control connection
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/dir/1096 ftp://%HOSTIP:%FTPPORT/dir/1096
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+78
+</errorcode>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+CWD dir
+EPSV
+TYPE I
+SIZE 1096
+RETR 1096
+EPSV
+SIZE 1096
+RETR 1096
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1097 b/tests/data/test1097
new file mode 100644
index 0000000..ebb0399
--- /dev/null
+++ b/tests/data/test1097
@@ -0,0 +1,79 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP POST
+HTTP CONNECT
+HTTP proxy
+HTTP proxy NTLM auth
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 We are fine and cool
+Server: Apache/1.3.27 (Dorw1n) PHP/44.1.2
+Content-Length: 27
+
+This is all fine and dandy
+</data>
+<data1001>
+HTTP/1.1 200 We are fine and cool
+Server: Apache/1.3.27 (Dorw1n) PHP/44.1.2
+Content-Length: 27
+
+This is all fine and dandy
+</data1001>
+<datacheck>
+HTTP/1.1 200 We are fine and cool
+Server: Apache/1.3.27 (Dorw1n) PHP/44.1.2
+Content-Length: 27
+
+HTTP/1.1 200 We are fine and cool
+Server: Apache/1.3.27 (Dorw1n) PHP/44.1.2
+Content-Length: 27
+
+This is all fine and dandy
+</datacheck>
+</reply>
+
+# Client-side
+<client>
+<server>
+https
+</server>
+<features>
+NTLM
+</features>
+ <name>
+HTTP POST using CONNECT with --proxy-ntlm but no auth is required
+ </name>
+ <command>
+http://test.a.galaxy.far.far.away:1097/1097 --proxy http://%HOSTIP:%HTTPPORT --proxy-user foo:bar --proxy-ntlm -d "dummy=value" -p
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent: curl/.*
+</strip>
+<protocol>
+CONNECT test.a.galaxy.far.far.away:1097 HTTP/1.1
+Host: test.a.galaxy.far.far.away:1097
+Proxy-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+User-Agent: curl/7.19.5-CVS (i686-pc-linux-gnu) libcurl/7.19.5-CVS OpenSSL/0.9.8g zlib/1.2.3.3 c-ares/1.6.1-CVS libidn/1.12 libssh2/1.0.1_CVS
+Proxy-Connection: Keep-Alive
+
+POST /1097 HTTP/1.1
+User-Agent: curl/7.19.5-CVS (i686-pc-linux-gnu) libcurl/7.19.5-CVS OpenSSL/0.9.8g zlib/1.2.3.3 c-ares/1.6.1-CVS libidn/1.12 libssh2/1.0.1_CVS
+Host: test.a.galaxy.far.far.away:1097
+Accept: */*
+Content-Length: 0
+Content-Type: application/x-www-form-urlencoded
+
+</protocol>
+
+</verify>
+</testcase>
diff --git a/tests/data/test1098 b/tests/data/test1098
new file mode 100644
index 0000000..b5c45cb
--- /dev/null
+++ b/tests/data/test1098
@@ -0,0 +1,73 @@
+<testcase>
+<info>
+<keywords>
+FTP
+HTTP proxy
+CURLOPT_PROXY
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 6
+
+hello
+</data>
+
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<features>
+http
+ftp
+</features>
+ <name>
+FTP RETR twice over proxy confirming persistent connection
+ </name>
+
+ <command>
+ftp://ftp-site/moo/1098 ftp://ftp-site/moo/1098 --proxy http://%HOSTIP:%HTTPPORT
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET ftp://ftp-site/moo/1098 HTTP/1.1
+Host: ftp-site:21
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+GET ftp://ftp-site/moo/1098 HTTP/1.1
+Host: ftp-site:21
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol>
+<stdout mode="text">
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 6
+
+hello
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 6
+
+hello
+</stdout>
+</verify>
+</testcase>
diff --git a/tests/data/test1099 b/tests/data/test1099
new file mode 100644
index 0000000..f81e601
--- /dev/null
+++ b/tests/data/test1099
@@ -0,0 +1,45 @@
+<testcase>
+<info>
+<keywords>
+TFTP
+TFTP RRQ
+FAILURE
+</keywords>
+</info>
+
+<reply>
+<data nocheck="yes">
+data for 1099
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+tftp
+</server>
+ <name>
+TFTP get first a non-existing file then an existing
+ </name>
+ <command>
+tftp://%HOSTIP:%TFTPPORT/an/invalid-file tftp://%HOSTIP:%TFTPPORT//1099 --trace-ascii log/traceit
+</command>
+</client>
+
+#
+# Verify pseudo protocol after the test has been "shot"
+<verify>
+<protocol>
+opcode: 1
+filename: an/invalid-file
+mode: octet
+opcode: 1
+filename: /1099
+mode: octet
+</protocol>
+<stdout mode="text">
+data for 1099
+</stdout>
+</verify>
+</testcase>
diff --git a/tests/data/test11 b/tests/data/test11
new file mode 100644
index 0000000..9d93f80
--- /dev/null
+++ b/tests/data/test11
@@ -0,0 +1,76 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+followlocation
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+HTTP/1.1 301 This is a weirdo text message swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Location: data/110002.txt?coolsite=yes
+Connection: close
+
+This server reply is for testing a simple Location: following
+
+</data>
+<data2>
+HTTP/1.1 200 Followed here fine swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 52
+
+If this is received, the location following worked
+
+</data2>
+<datacheck>
+HTTP/1.1 301 This is a weirdo text message swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Location: data/110002.txt?coolsite=yes
+Connection: close
+
+HTTP/1.1 200 Followed here fine swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 52
+
+If this is received, the location following worked
+
+</datacheck>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+simple HTTP Location: following
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/want/11 -L
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /want/11 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /want/data/110002.txt?coolsite=yes HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test110 b/tests/data/test110
new file mode 100644
index 0000000..b63ba8a
--- /dev/null
+++ b/tests/data/test110
@@ -0,0 +1,52 @@
+<testcase>
+<info>
+<keywords>
+FTP
+PASV
+RETR
+Resume
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+expected to be a file without the first part
+but we emulate that
+</data>
+<size>
+85
+</size>
+<servercmd>
+REPLY EPSV 500 no such command
+</servercmd>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP download resume with set limit
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/110 -C 20
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+PASV
+TYPE I
+SIZE 110
+REST 20
+RETR 110
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1100 b/tests/data/test1100
new file mode 100644
index 0000000..e38c0e0
--- /dev/null
+++ b/tests/data/test1100
@@ -0,0 +1,116 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP POST
+HTTP NTLM auth
+</keywords>
+</info>
+# Server-side
+<reply>
+
+<data>
+HTTP/1.1 200 Thanks for this! swsclose
+Content-Length: 25
+
+This is the final page !
+</data>
+
+<data1001>
+HTTP/1.1 401 Now gimme that second request of crap
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 34
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+This is not the real page either!
+</data1001>
+
+# This is supposed to be returned when the server gets the second
+# Authorization: NTLM line passed-in from the client
+<data1002>
+HTTP/1.1 302 Thanks for this, but we want to redir you!
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Location: /1100
+Content-Length: 34
+
+This is not the real page either!
+</data1002>
+
+<datacheck>
+HTTP/1.1 401 Now gimme that second request of crap
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 34
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+HTTP/1.1 302 Thanks for this, but we want to redir you!
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Location: /1100
+Content-Length: 34
+
+HTTP/1.1 200 Thanks for this! swsclose
+Content-Length: 25
+
+This is the final page !
+</datacheck>
+
+</reply>
+
+# Client-side
+<client>
+<features>
+NTLM
+</features>
+<server>
+http
+</server>
+ <name>
+HTTP POST with NTLM authorization and following a 302 redirect
+ </name>
+ <setenv>
+# we force our own host name, in order to make the test machine independent
+CURL_GETHOSTNAME=curlhost
+# we try to use the LD_PRELOAD hack, if not a debug build
+LD_PRELOAD=%PWD/libtest/.libs/libhostname.so
+ </setenv>
+ <command>
+http://%HOSTIP:%HTTPPORT/1100 -u testuser:testpass --ntlm -L -d "stuff to send away"
+</command>
+<precheck>
+chkhostname curlhost
+</precheck>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+POST /1100 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+User-Agent: curl/7.10.6-pre1 (i686-pc-linux-gnu) libcurl/7.10.6-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 0
+Content-Type: application/x-www-form-urlencoded
+
+POST /1100 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoKBAFpkQwKRCZFMhjj0tw47wEjKHRHlvzfxQamFcheMuv8v+xeqphEO5V41xRd7R9deOXRlc3R1c2VyY3VybGhvc3Q=
+User-Agent: curl/7.10.6-pre1 (i686-pc-linux-gnu) libcurl/7.10.6-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 18
+Content-Type: application/x-www-form-urlencoded
+
+stuff to send awayGET /1100 HTTP/1.1
+User-Agent: curl/7.19.5-CVS (i686-pc-linux-gnu) libcurl/7.19.5-CVS GnuTLS/2.6.6 zlib/1.2.3.3 c-ares/1.6.1-CVS libidn/1.14 libssh2/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1101 b/tests/data/test1101
new file mode 100644
index 0000000..63887c4
--- /dev/null
+++ b/tests/data/test1101
@@ -0,0 +1,54 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP Basic auth
+NO_PROXY
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 4
+Content-Type: text/html
+
+boo
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+NO_PROXY test, with user name in URL
+ </name>
+
+<setenv>
+no_proxy=%HOSTIP
+http_proxy=http://non-existing-host.haxx.se:3128/
+</setenv>
+ <command>
+http://user:secret@%HOSTIP:%HTTPPORT/gimme/1101
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /gimme/1101 HTTP/1.1
+Authorization: Basic dXNlcjpzZWNyZXQ=
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1102 b/tests/data/test1102
new file mode 100644
index 0000000..addc7b5
--- /dev/null
+++ b/tests/data/test1102
@@ -0,0 +1,51 @@
+<testcase>
+<info>
+<keywords>
+FTP
+SYST
+SITE
+OS400
+</keywords>
+</info>
+# Server-side
+<reply>
+<data nocheck="yes">
+blabla
+</data>
+<servercmd>
+REPLY PWD 257 "QGPL" is the current library
+REPLY SYST 215 OS/400 runs this server
+REPLY SITE 250 Name format set to 1
+</servercmd>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP OS/400 server name format check
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/1102
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+SYST
+SITE NAMEFMT 1
+PWD
+EPSV
+TYPE I
+SIZE 1102
+RETR 1102
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1103 b/tests/data/test1103
new file mode 100644
index 0000000..4d45056
--- /dev/null
+++ b/tests/data/test1103
@@ -0,0 +1,48 @@
+<testcase>
+<info>
+<keywords>
+FTP
+SYST
+SITE
+OS400
+</keywords>
+</info>
+# Server-side
+<reply>
+<data nocheck="yes">
+blabla
+</data>
+<servercmd>
+REPLY PWD 257 "C:/somedir" is the current directory
+REPLY SYST 215 unknown-OS runs this server
+</servercmd>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP non-OS/400 server
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/1103
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+SYST
+EPSV
+TYPE I
+SIZE 1103
+RETR 1103
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1104 b/tests/data/test1104
new file mode 100644
index 0000000..21efe3c
--- /dev/null
+++ b/tests/data/test1104
@@ -0,0 +1,85 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP proxy
+cookies
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+HTTP/1.1 301 Moved
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Location: /want/data/11040002
+Server: test-server/fake
+Set-Cookie: test=true; domain=127.0.0.1; path=/; expires=Thu Jan 1 00:00:00 GMT 1970;
+Set-Cookie: test2=true; domain=127.0.0.1; path=/; expires=Fri Feb 2 11:56:27 GMT 2035;
+Connection: close
+
+This server reply is for testing a set-cookie
+
+</data>
+<data2>
+HTTP/1.1 200 Followed here fine swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 52
+
+If this is received, the location following worked
+
+</data2>
+<datacheck>
+HTTP/1.1 301 Moved
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Location: /want/data/11040002
+Server: test-server/fake
+Set-Cookie: test=true; domain=127.0.0.1; path=/; expires=Thu Jan 1 00:00:00 GMT 1970;
+Set-Cookie: test2=true; domain=127.0.0.1; path=/; expires=Fri Feb 2 11:56:27 GMT 2035;
+Connection: close
+
+HTTP/1.1 200 Followed here fine swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 52
+
+If this is received, the location following worked
+
+</datacheck>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP cookie expiry date at Jan 1 00:00:00 GMT 1970
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/want/1104 -L -x %HOSTIP:%HTTPPORT -c log/cookies.jar
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET http://%HOSTIP:%HTTPPORT/want/1104 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+GET http://%HOSTIP:%HTTPPORT/want/data/11040002 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Proxy-Connection: Keep-Alive
+Cookie: test2=true
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1105 b/tests/data/test1105
new file mode 100644
index 0000000..1a8f896
--- /dev/null
+++ b/tests/data/test1105
@@ -0,0 +1,63 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP POST
+cookies
+cookiejar
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Type: text/html
+Funny-head: yesyes swsclose
+Set-Cookie: foobar=name;
+Set-Cookie: mismatch=this; domain=127.0.0.1; path="/silly/";
+Set-Cookie: partmatch=present; domain=.0.0.1; path=/;
+
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP with cookie parser and header recording
+ </name>
+ <command>
+"http://%HOSTIP:%HTTPPORT/we/want/1105?parm1=this*that/other/thing&parm2=foobar/1105" -c log/cookie1105.txt -d "userid=myname&password=mypassword"
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol nonewline="yes">
+POST /we/want/1105?parm1=this*that/other/thing&parm2=foobar/1105 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 33
+Content-Type: application/x-www-form-urlencoded
+
+userid=myname&password=mypassword
+</protocol>
+<file name="log/cookie1105.txt">
+# Netscape HTTP Cookie File
+# http://curl.haxx.se/rfc/cookie_spec.html
+# This file was generated by libcurl! Edit at your own risk.
+
+127.0.0.1 FALSE /we/want/ FALSE 0 foobar name
+.127.0.0.1 TRUE "/silly/" FALSE 0 mismatch this
+.0.0.1 TRUE / FALSE 0 partmatch present
+</file>
+</verify>
+</testcase>
diff --git a/tests/data/test1106 b/tests/data/test1106
new file mode 100644
index 0000000..0c6bec1
--- /dev/null
+++ b/tests/data/test1106
@@ -0,0 +1,57 @@
+<testcase>
+<info>
+<keywords>
+FTP
+CURLOPT_PORT
+HTTP proxy
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.1 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Accept-Ranges: bytes
+Content-Length: 6
+
+hello
+</data>
+</reply>
+
+# Client-side
+<client>
+<features>
+ftp
+</features>
+<server>
+http
+</server>
+ <name>
+FTP URL and with ftp_proxy environment variable set
+ </name>
+
+<setenv>
+ftp_proxy=http://%HOSTIP:%HTTPPORT/
+</setenv>
+ <command>
+ftp://%HOSTIP:23456/1106
+</command>
+
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET ftp://%HOSTIP:23456/1106 HTTP/1.1
+Host: %HOSTIP:23456
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1107 b/tests/data/test1107
new file mode 100644
index 0000000..6adc636
--- /dev/null
+++ b/tests/data/test1107
@@ -0,0 +1,53 @@
+<testcase>
+<info>
+<keywords>
+FTP
+PASV
+RETR
+PRET
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+data
+ to
+ see
+that FTP
+works
+ so does it?
+</data>
+<servercmd>
+REPLY PRET 200 fine
+</servercmd>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP RETR PASV with PRET
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/1107 --ftp-pret
+</command>
+
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+PRET RETR 1107
+EPSV
+TYPE I
+SIZE 1107
+RETR 1107
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1108 b/tests/data/test1108
new file mode 100644
index 0000000..7b779e1
--- /dev/null
+++ b/tests/data/test1108
@@ -0,0 +1,45 @@
+<testcase>
+<info>
+<keywords>
+FTP
+PASV
+RETR
+PRET
+</keywords>
+</info>
+# Server-side
+<reply>
+
+<servercmd>
+REPLY PRET 550 unkown command
+</servercmd>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP RETR PASV with PRET not supported
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/1108 --ftp-pret
+</command>
+
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+PRET RETR 1108
+</protocol>
+# we expect that the server doesn't understand PRET
+<errorcode>
+84
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test1109 b/tests/data/test1109
new file mode 100644
index 0000000..c18ae46
--- /dev/null
+++ b/tests/data/test1109
@@ -0,0 +1,46 @@
+<testcase>
+# Test that the fragment is not send as part of the path.
+<info>
+<keywords>
+HTTP
+CURLOPT_URL
+</keywords>
+</info>
+
+# Server-side
+<reply name="1">
+<data>
+HTTP/1.1 200 OK
+Content-Length: 6
+
+hello
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP GET with URL that contains fragment after the path
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/1109#test
+</command>
+</client>
+
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /1109 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test111 b/tests/data/test111
new file mode 100644
index 0000000..bcaa554
--- /dev/null
+++ b/tests/data/test111
@@ -0,0 +1,45 @@
+<testcase>
+<info>
+<keywords>
+FTP
+EPSV
+Resume
+FAILURE
+</keywords>
+</info>
+# Server-side
+<reply>
+<size>
+85
+</size>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP download resume beyond file size
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/111 -C 2000
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+36
+</errorcode>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE I
+SIZE 111
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1110 b/tests/data/test1110
new file mode 100644
index 0000000..90ffc41
--- /dev/null
+++ b/tests/data/test1110
@@ -0,0 +1,47 @@
+<testcase>
+# Test that the fragment is not send as part of the path
+# when it contains a query.
+<info>
+<keywords>
+HTTP
+CURLOPT_URL
+</keywords>
+</info>
+
+# Server-side
+<reply name="1">
+<data>
+HTTP/1.1 200 OK
+Content-Length: 6
+
+hello
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP GET with URL that contains a fragment after the query part
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/1110?q=foobar#fragment
+</command>
+</client>
+
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /1110?q=foobar HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1111 b/tests/data/test1111
new file mode 100644
index 0000000..77b78f7
--- /dev/null
+++ b/tests/data/test1111
@@ -0,0 +1,47 @@
+<testcase>
+# Test that no fragment is not send as part of the path
+# when the URI contains 2 '#' (does not follow RFC 2396)
+<info>
+<keywords>
+HTTP
+CURLOPT_URL
+</keywords>
+</info>
+
+# Server-side
+<reply name="1">
+<data>
+HTTP/1.1 200 OK
+Content-Length: 6
+
+hello
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP GET with URL whose fragment contains a # (which is illegal)
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/1111?q=foobar#fragment#fragment2
+</command>
+</client>
+
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /1111?q=foobar HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1112 b/tests/data/test1112
new file mode 100644
index 0000000..9307d93
--- /dev/null
+++ b/tests/data/test1112
@@ -0,0 +1,114 @@
+<testcase>
+<info>
+<keywords>
+FTPS
+EPSV
+RETR
+timeout
+FAILURE
+</keywords>
+</info>
+
+# Server-side
+<reply>
+# Overload some standard FTP responses to make them shorter and faster
+# to avoid wasting time waiting for the data phase to start
+<servercmd>
+SLOWDOWN
+REPLY USER 331 OK
+REPLY PASS 230 OK
+REPLY PWD 257 "/"
+REPLY TYPE 200 OK
+</servercmd>
+<data nocheck="yes">
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+Long chunk of data that couldn't possibly be sent in the time allotted.
+</data>
+</reply>
+
+# Client-side
+<client>
+<features>
+SSL
+</features>
+<server>
+ftps
+</server>
+<killserver>
+ftps
+</killserver>
+ <name>
+FTPS download with strict timeout and slow data transfer
+ </name>
+ <command timeout="1">
+-k --ftp-ssl-control ftps://%HOSTIP:%FTPSPORT/1112 -m 7
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+# 28 is CURLE_OPERATION_TIMEDOUT
+<errorcode>
+28
+</errorcode>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PBSZ 0
+PROT C
+PWD
+EPSV
+TYPE I
+SIZE 1112
+RETR 1112
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1113 b/tests/data/test1113
new file mode 100644
index 0000000..4d692ae
--- /dev/null
+++ b/tests/data/test1113
@@ -0,0 +1,98 @@
+<testcase>
+<info>
+<keywords>
+FTP
+RETR
+LIST
+wildcardmatch
+ftplistparser
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data mode="text">
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+<tool>
+lib574
+</tool>
+<name>
+FTP wildcard download - changed fnmatch, 2x perform (DOS LIST response)
+</name>
+<command>
+"ftp://%HOSTIP:%FTPPORT/fully_simulated/DOS/*.txt"
+</command>
+</client>
+
+############################################
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+0
+</errorcode>
+# THERE SHOULD NOT BE "SIZE"! and one "USER/PASS"
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+CWD fully_simulated
+CWD DOS
+EPSV
+TYPE A
+LIST
+EPSV
+TYPE I
+RETR chmod1
+EPSV
+RETR chmod2
+EPSV
+RETR chmod3
+EPSV
+RETR empty_file.dat
+EPSV
+RETR file.txt
+EPSV
+RETR someothertext.txt
+CWD /
+CWD fully_simulated
+CWD DOS
+EPSV
+TYPE A
+LIST
+EPSV
+TYPE I
+RETR chmod1
+EPSV
+RETR chmod2
+EPSV
+RETR chmod3
+EPSV
+RETR empty_file.dat
+EPSV
+RETR file.txt
+EPSV
+RETR someothertext.txt
+QUIT
+</protocol>
+<stdout mode="text">
+This file should have permissions 444
+This file should have permissions 666
+This file should have permissions 777
+This is content of file "file.txt"
+Some junk ;-) This file does not really exist.
+This file should have permissions 444
+This file should have permissions 666
+This file should have permissions 777
+This is content of file "file.txt"
+Some junk ;-) This file does not really exist.
+</stdout>
+</verify>
+</testcase>
diff --git a/tests/data/test1114 b/tests/data/test1114
new file mode 100644
index 0000000..8eee429
--- /dev/null
+++ b/tests/data/test1114
@@ -0,0 +1,136 @@
+<testcase>
+<info>
+<keywords>
+FTP
+wildcardmatch
+ftplistparser
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+<tool>
+lib576
+</tool>
+ <name>
+FTP wildcard download - skip/parser_correctness/CURLOPT_FNMATCH_FUNCTION (DOS)
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/fully_simulated/DOS/*
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+0
+</errorcode>
+<stdout mode="text">
+=============================================================
+Remains: 12
+Filename: .
+Size: 0B
+Time: 04-27-10 05:12AM
+Filetype: directory
+=============================================================
+Remains: 11
+Filename: ..
+Size: 0B
+Time: 04-23-10 03:12AM
+Filetype: directory
+=============================================================
+Remains: 10
+Filename: chmod1
+Size: 38B
+Time: 01-11-10 10:00AM
+Filetype: regular file
+Content:
+-------------------------------------------------------------
+This file should have permissions 444
+-------------------------------------------------------------
+=============================================================
+Remains: 9
+Filename: chmod2
+Size: 38B
+Time: 02-01-10 08:00AM
+Filetype: regular file
+Content:
+-------------------------------------------------------------
+This file should have permissions 666
+-------------------------------------------------------------
+=============================================================
+Remains: 8
+Filename: chmod3
+Size: 38B
+Time: 02-01-10 08:00AM
+Filetype: regular file
+Content:
+-------------------------------------------------------------
+This file should have permissions 777
+-------------------------------------------------------------
+=============================================================
+Remains: 7
+Filename: chmod4
+Size: 0B
+Time: 05-04-10 04:31AM
+Filetype: directory
+=============================================================
+Remains: 6
+Filename: chmod5
+Size: 0B
+Time: 05-04-10 04:31AM
+Filetype: directory
+=============================================================
+Remains: 5
+Filename: empty_file.dat
+Size: 0B
+Time: 04-27-10 11:01AM
+Filetype: regular file
+Content:
+-------------------------------------------------------------
+-------------------------------------------------------------
+=============================================================
+Remains: 4
+Filename: file.txt
+Size: 35B
+Time: 04-27-10 11:01AM
+Filetype: regular file
+Content:
+-------------------------------------------------------------
+This is content of file "file.txt"
+-------------------------------------------------------------
+=============================================================
+Remains: 3
+Filename: .NeXT
+Size: 0B
+Time: 01-23-05 02:05AM
+Filetype: directory
+=============================================================
+Remains: 2
+Filename: someothertext.txt
+Size: 47B
+Time: 04-27-10 11:01AM
+Filetype: regular file
+Content:
+-------------------------------------------------------------
+# THIS CONTENT WAS SKIPPED IN CHUNK_BGN CALLBACK #
+-------------------------------------------------------------
+=============================================================
+Remains: 1
+Filename: weirddir.txt
+Size: 0B
+Time: 04-23-10 03:12AM
+Filetype: directory
+=============================================================
+</stdout>
+</verify>
+</testcase>
diff --git a/tests/data/test1115 b/tests/data/test1115
new file mode 100644
index 0000000..0f294d4
--- /dev/null
+++ b/tests/data/test1115
@@ -0,0 +1,55 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP 1xx response code
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+HTTP/1.1 104 Experiment
+Server: Microsoft-IIS/5.0
+Date: Sun, 03 Apr 2005 14:57:45 GMT
+X-Powered-By: ASP.NET
+
+HTTP/1.1 200 OK swsbounce
+Server: Microsoft-IIS/6.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 0
+
+</data>
+
+</reply>
+
+# Client-side
+<client>
+#
+<server>
+http
+</server>
+<features>
+crypto
+</features>
+ <name>
+HTTP GET with unexpected 1xx response
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/1115
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /1115 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1116 b/tests/data/test1116
new file mode 100644
index 0000000..a9af3e6
--- /dev/null
+++ b/tests/data/test1116
@@ -0,0 +1,77 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+chunked Transfer-Encoding
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 funky chunky!
+Server: fakeit/0.9 fakeitbad/1.0
+Transfer-Encoding: chunked
+Connection: mooo
+
+40
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+30
+bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
+21;heresatest=moooo
+cccccccccccccccccccccccccccccccc
+
+0
+chunky-trailer: header data
+another-header: yes
+
+</data>
+<datacheck>
+HTTP/1.1 200 funky chunky!
+Server: fakeit/0.9 fakeitbad/1.0
+Transfer-Encoding: chunked
+Connection: mooo
+
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbcccccccccccccccccccccccccccccccc
+</datacheck>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP GET with chunked trailer without Trailer:
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/1116 -D log/heads1116
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /1116 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+<file name="log/heads1116">
+HTTP/1.1 200 funky chunky!
+Server: fakeit/0.9 fakeitbad/1.0
+Transfer-Encoding: chunked
+Connection: mooo
+
+chunky-trailer: header data
+another-header: yes
+</file>
+</verify>
+
+</testcase>
diff --git a/tests/data/test1117 b/tests/data/test1117
new file mode 100644
index 0000000..5b69611
--- /dev/null
+++ b/tests/data/test1117
@@ -0,0 +1,87 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+Range
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.1 416 Requested Range Not Satisfiable
+Date: Thu, 09 Sep 2010 14:49:00 GMT
+Accept-Ranges: bytes
+Content-Length: 115
+
+This is a long error message that is large enough that the test server is
+guaranteed to split it into two packets.
+</data>
+
+<data1>
+HTTP/1.1 206 Partial Content
+Date: Thu, 09 Sep 2010 14:49:01 GMT
+Accept-Ranges: bytes
+Content-Range: bytes 10-18/155
+Content-Length: 13
+Content-Type: text/plain
+
+partial body
+</data1>
+
+<servercmd>
+writedelay: 1
+</servercmd>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP with invalid range then another URL
+ </name>
+ <command>
+-r 10-22 http://%HOSTIP:%HTTPPORT/want/1117 http://%HOSTIP:%HTTPPORT/wantmore/11170001
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<stdout>
+HTTP/1.1 416 Requested Range Not Satisfiable
+Date: Thu, 09 Sep 2010 14:49:00 GMT
+Accept-Ranges: bytes
+Content-Length: 115
+
+This is a long error message that is large enough that the test server is
+guaranteed to split it into two packets.
+HTTP/1.1 206 Partial Content
+Date: Thu, 09 Sep 2010 14:49:01 GMT
+Accept-Ranges: bytes
+Content-Range: bytes 10-18/155
+Content-Length: 13
+Content-Type: text/plain
+
+partial body
+</stdout>
+
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /want/1117 HTTP/1.1
+Range: bytes=10-22
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /wantmore/11170001 HTTP/1.1
+Range: bytes=10-22
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test112 b/tests/data/test112
new file mode 100644
index 0000000..eb3400c
--- /dev/null
+++ b/tests/data/test112
@@ -0,0 +1,49 @@
+<testcase>
+<info>
+<keywords>
+FTP
+EPSV
+APPE
+Resume
+</keywords>
+</info>
+# Server-side
+<reply>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP PASV upload resume
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/112 -T log/upload112 -C 40
+</command>
+<file name="log/upload112">
+this is the *****crap******** that we're gonna upload
+
+worx?
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE I
+APPE 112
+QUIT
+</protocol>
+<upload>
+ gonna upload
+
+worx?
+</upload>
+</verify>
+</testcase>
diff --git a/tests/data/test113 b/tests/data/test113
new file mode 100644
index 0000000..0046297
--- /dev/null
+++ b/tests/data/test113
@@ -0,0 +1,37 @@
+<testcase>
+<info>
+<keywords>
+FTP
+FAILURE
+</keywords>
+</info>
+# Server-side
+<reply>
+<servercmd>
+REPLY USER 314 bluah you fewl!
+</servercmd>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP download, failed login: USER not valid
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/113
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+67
+</errorcode>
+<protocol>
+USER anonymous
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test114 b/tests/data/test114
new file mode 100644
index 0000000..6611aed
--- /dev/null
+++ b/tests/data/test114
@@ -0,0 +1,38 @@
+<testcase>
+<info>
+<keywords>
+FTP
+FAILURE
+</keywords>
+</info>
+# Server-side
+<reply>
+<servercmd>
+REPLY PASS 314 bluah you f00l!
+</servercmd>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP download, failed login: PASS not valid
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/114
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+67
+</errorcode>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test115 b/tests/data/test115
new file mode 100644
index 0000000..f37a7e9
--- /dev/null
+++ b/tests/data/test115
@@ -0,0 +1,44 @@
+<testcase>
+<info>
+<keywords>
+FTP
+PASV
+FAILURE
+</keywords>
+</info>
+# Server-side
+<reply>
+<servercmd>
+REPLY PASV 314 bluah you f00l!
+REPLY EPSV 314 bluah you f00l!
+</servercmd>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP download, failed PASV
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/115
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+13
+</errorcode>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+PASV
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test116 b/tests/data/test116
new file mode 100644
index 0000000..bf04492
--- /dev/null
+++ b/tests/data/test116
@@ -0,0 +1,52 @@
+<testcase>
+<info>
+<keywords>
+FTP
+PORT
+FAILURE
+</keywords>
+</info>
+# Server-side
+<reply>
+<servercmd>
+REPLY PORT 314 bluah you f00l!
+</servercmd>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+# EPRT is only sent when IPv6 is enabled
+<features>
+ipv6
+</features>
+ <name>
+FTP download, failed PORT
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/116 -P 1.2.3.4
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+30
+</errorcode>
+# Strip the port number but leave the rest
+<strippart>
+s/^(PORT \d{1,3},\d{1,3},\d{1,3},\d{1,3},)\d{1,3},\d{1,3}/$1/
+s/^(EPRT \|1\|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\|)\d{1,5}\|/$1/
+</strippart>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+EPRT |1|1.2.3.4|
+PORT 1,2,3,4,
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test117 b/tests/data/test117
new file mode 100644
index 0000000..2caad0d
--- /dev/null
+++ b/tests/data/test117
@@ -0,0 +1,44 @@
+<testcase>
+<info>
+<keywords>
+FTP
+FAILURE
+</keywords>
+</info>
+# Server-side
+<reply>
+<servercmd>
+REPLY EPSV 314 bluah you f00l!
+REPLY TYPE 314 bluah you f00l!
+</servercmd>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP download, failed TYPE
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/117
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+17
+</errorcode>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+PASV
+TYPE I
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test118 b/tests/data/test118
new file mode 100644
index 0000000..6cd086c
--- /dev/null
+++ b/tests/data/test118
@@ -0,0 +1,48 @@
+<testcase>
+<info>
+<keywords>
+FTP
+PASV
+RETR
+FAILURE
+</keywords>
+</info>
+# Server-side
+<reply>
+<servercmd>
+REPLY RETR 314 bluah you f00l!
+REPLY EPSV 314 bluah you f00l!
+</servercmd>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP download, failed RETR
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/118
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+19
+</errorcode>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+PASV
+TYPE I
+SIZE 118
+RETR 118
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test119 b/tests/data/test119
new file mode 100644
index 0000000..00a2428
--- /dev/null
+++ b/tests/data/test119
@@ -0,0 +1,50 @@
+<testcase>
+<info>
+<keywords>
+FTP
+PORT
+RETR
+FAILURE
+</keywords>
+</info>
+# Server-side
+<reply>
+<servercmd>
+REPLY RETR 314 bluah you f00l!
+</servercmd>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP download, failed RETR with PORT
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/119 -P -
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+19
+</errorcode>
+# Strip all valid kinds of PORT and EPRT that curl can send
+<strip>
+^PORT \d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3}
+^EPRT \|1\|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\|\d{1,5}\|
+</strip>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+TYPE I
+SIZE 119
+RETR 119
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test12 b/tests/data/test12
new file mode 100644
index 0000000..95b891a
--- /dev/null
+++ b/tests/data/test12
@@ -0,0 +1,56 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+Content-Range
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+HTTP/1.1 206 Partial Content
+Date: Mon, 13 Nov 2000 13:41:09 GMT
+Server: Apache/1.3.11 (Unix) PHP/3.0.14
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 101
+Content-Range: bytes 100-200/3527
+Connection: close
+Content-Type: text/html
+
+..partial data returned from the
+server as a result of setting an explicit byte range
+in the request
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP range support
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/want/12 -r 100-200
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /want/12 HTTP/1.1
+Range: bytes=100-200
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test120 b/tests/data/test120
new file mode 100644
index 0000000..85d49f5
--- /dev/null
+++ b/tests/data/test120
@@ -0,0 +1,53 @@
+<testcase>
+<info>
+<keywords>
+FTP
+PASV
+RETR
+post-quote
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+data
+ to
+ see
+that FTP
+works
+ so does it?
+</data>
+<servercmd>
+REPLY EPSV 314 bluah you f00l!
+</servercmd>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+ftp download with post-quote delete operation
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/120 -Q "-DELE file"
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+PASV
+TYPE I
+SIZE 120
+RETR 120
+DELE file
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1200 b/tests/data/test1200
new file mode 100644
index 0000000..ba1159f
--- /dev/null
+++ b/tests/data/test1200
@@ -0,0 +1,39 @@
+<testcase>
+<info>
+<keywords>
+GOPHER
+INDEX
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data>
+iMenu results error.host 1
+0Selector /bar bar.foo.invalid 70
+.
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+gopher
+</server>
+ <name>
+Gopher index
+ </name>
+ <command>
+gopher://%HOSTIP:%GOPHERPORT/1/1200
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+/1200
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1201 b/tests/data/test1201
new file mode 100644
index 0000000..81a9fe4
--- /dev/null
+++ b/tests/data/test1201
@@ -0,0 +1,39 @@
+<testcase>
+<info>
+<keywords>
+GOPHER
+SELECTOR
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data>
+iMenu results error.host 1
+0Selector /selector/SELECTOR /bar bar.foo.invalid 70
+.
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+gopher
+</server>
+ <name>
+Gopher selector
+ </name>
+ <command>
+gopher://%HOSTIP:%GOPHERPORT/1/selector/SELECTOR/1201
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+/selector/SELECTOR/1201
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1202 b/tests/data/test1202
new file mode 100644
index 0000000..37d270a
--- /dev/null
+++ b/tests/data/test1202
@@ -0,0 +1,40 @@
+<testcase>
+<info>
+<keywords>
+GOPHER
+QUERY
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data>
+iSearch results error.host 1
+0Query query succeeded /foo foo.bar.invalid 70
+0Selector /the/search/engine /bar bar.foo.invalid 70
+.
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+gopher
+</server>
+ <name>
+Gopher query
+ </name>
+ <command>
+"gopher://%HOSTIP:%GOPHERPORT/7/the/search/engine?query%20succeeded/1202"
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+/the/search/engine query succeeded/1202
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1203 b/tests/data/test1203
new file mode 100644
index 0000000..3cb83be
--- /dev/null
+++ b/tests/data/test1203
@@ -0,0 +1,43 @@
+<testcase>
+<info>
+<keywords>
+GOPHER-ipv6
+IPv6
+INDEX
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data>
+iMenu results error.host 1
+0Selector /bar bar.foo.invalid 70
+.
+</data>
+</reply>
+
+# Client-side
+<client>
+<features>
+ipv6
+</features>
+<server>
+gopher-ipv6
+</server>
+ <name>
+Gopher IPv6 index
+ </name>
+ <command>
+-g gopher://%HOSTIP:%GOPHER6PORT/1/moo/1203
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+/moo/1203
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test121 b/tests/data/test121
new file mode 100644
index 0000000..de7a561
--- /dev/null
+++ b/tests/data/test121
@@ -0,0 +1,51 @@
+<testcase>
+<info>
+<keywords>
+FTP
+EPSV
+RETR
+post-quote
+pre-quote
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+data
+ to
+ see
+that FTP
+works
+ so does it?
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+ftp download with post- and pre-transfer delete operations
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/121 -Q "-DELE after_transfer" -Q "DELE before_transfer"
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+DELE before_transfer
+EPSV
+TYPE I
+SIZE 121
+RETR 121
+DELE after_transfer
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test122 b/tests/data/test122
new file mode 100644
index 0000000..fb1dd05
--- /dev/null
+++ b/tests/data/test122
@@ -0,0 +1,45 @@
+<testcase>
+<info>
+<keywords>
+FTP
+PASV
+Resume
+</keywords>
+</info>
+# Server-side
+<reply>
+<size>
+5
+</size>
+<servercmd>
+REPLY EPSV 500 no such command
+</servercmd>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP download resume with whole file already downloaded
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/122 -C 5
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+PASV
+TYPE I
+SIZE 122
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test123 b/tests/data/test123
new file mode 100644
index 0000000..4bbfce9
--- /dev/null
+++ b/tests/data/test123
@@ -0,0 +1,40 @@
+<testcase>
+<info>
+<keywords>
+FTP
+EPSV
+Resume
+</keywords>
+</info>
+# Server-side
+<reply>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP upload resume with whole file already downloaded
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/123 -T log/upload123 -C 51
+</command>
+<file name="log/upload123">
+--------------------------------------------------
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE I
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test124 b/tests/data/test124
new file mode 100644
index 0000000..255d873
--- /dev/null
+++ b/tests/data/test124
@@ -0,0 +1,47 @@
+<testcase>
+<info>
+<keywords>
+FTP
+PASV
+RETR
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+we can still send data even if pwd fails!
+</data>
+<servercmd>
+REPLY PWD 314 bluah you f00l!
+REPLY EPSV 314 bluah you f00l!
+</servercmd>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP download, failed PWD
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/124
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+PASV
+TYPE I
+SIZE 124
+RETR 124
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test125 b/tests/data/test125
new file mode 100644
index 0000000..5677aeb
--- /dev/null
+++ b/tests/data/test125
@@ -0,0 +1,41 @@
+<testcase>
+<info>
+<keywords>
+FTP
+FAILURE
+</keywords>
+</info>
+# Server-side
+<reply>
+<servercmd>
+REPLY CWD 314 bluah you f00l!
+</servercmd>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP download, failed CWD
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/path/to/file/125
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+9
+</errorcode>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test126 b/tests/data/test126
new file mode 100644
index 0000000..0872214
--- /dev/null
+++ b/tests/data/test126
@@ -0,0 +1,48 @@
+<testcase>
+<info>
+<keywords>
+FTP
+EPSV
+RETR
+RETRWEIRDO
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+this is file contents
+</data>
+<servercmd>
+RETRWEIRDO
+</servercmd>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP download with multiple replies at once in RETR
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/blalbla/lululul/126
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+CWD blalbla
+CWD lululul
+EPSV
+TYPE I
+SIZE 126
+RETR 126
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test127 b/tests/data/test127
new file mode 100644
index 0000000..ac46d8d
--- /dev/null
+++ b/tests/data/test127
@@ -0,0 +1,46 @@
+<testcase>
+<info>
+<keywords>
+FTP
+PASV
+RETR
+--disable-epsv
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+moooooooo
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP --disable-epsv
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/path/to/file/127 --disable-epsv
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+CWD to
+CWD file
+PASV
+TYPE I
+SIZE 127
+RETR 127
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test128 b/tests/data/test128
new file mode 100644
index 0000000..743cd12
--- /dev/null
+++ b/tests/data/test128
@@ -0,0 +1,57 @@
+<testcase>
+<info>
+<keywords>
+FTP
+EPSV
+STOR
+--crlf
+</keywords>
+</info>
+# Server-side
+<reply>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP upload with --crlf
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/128 -T log/upload128 --crlf
+</command>
+<file name="log/upload128">
+file
+with unix newlines
+meant to be
+converted
+with
+the
+--crlf option
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE I
+STOR 128
+QUIT
+</protocol>
+<upload>
+file
+with unix newlines
+meant to be
+converted
+with
+the
+--crlf option
+</upload>
+</verify>
+</testcase>
diff --git a/tests/data/test129 b/tests/data/test129
new file mode 100644
index 0000000..cf1e839
--- /dev/null
+++ b/tests/data/test129
@@ -0,0 +1,52 @@
+<testcase>
+<info>
+<keywords>
+FTP
+EPSV
+TYPE A
+RETR
+type=
+</keywords>
+</info>
+# Server-side
+<reply>
+<size>
+37
+</size>
+<data>
+data
+ to
+ see
+that FTP
+works
+ so does it?
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP GET with type=A style ASCII URL and understated server SIZE
+ </name>
+ <command>
+"ftp://%HOSTIP:%FTPPORT/129;type=A"
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE A
+SIZE 129
+RETR 129
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test13 b/tests/data/test13
new file mode 100644
index 0000000..8f997f0
--- /dev/null
+++ b/tests/data/test13
@@ -0,0 +1,44 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP custom request
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 Read you
+Content-Length: 29
+Deleted: suppose we got a header like this! ;-)
+
+blabla custom request result
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP custom request 'DELETE'
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/want/13 -X DELETE
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+DELETE /want/13 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test130 b/tests/data/test130
new file mode 100644
index 0000000..43ab24c
--- /dev/null
+++ b/tests/data/test130
@@ -0,0 +1,65 @@
+<testcase>
+<info>
+<keywords>
+FTP
+EPSV
+LIST
+netrc
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+# When doing LIST, we get the default list output hard-coded in the test
+# FTP server
+<datacheck>
+total 20
+drwxr-xr-x 8 98 98 512 Oct 22 13:06 .
+drwxr-xr-x 8 98 98 512 Oct 22 13:06 ..
+drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT
+-r--r--r-- 1 0 1 35 Jul 16 1996 README
+lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin
+dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev
+drwxrwxrwx 2 98 98 512 May 29 16:04 download.html
+dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc
+drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub
+dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr
+</datacheck>
+</reply>
+
+#
+# Client-side
+<client>
+<features>
+netrc_debug
+</features>
+<server>
+ftp
+</server>
+ <name>
+FTP (optional .netrc; no user/pass) dir list PASV
+ </name>
+ <command>
+--netrc-optional ftp://%HOSTIP:%FTPPORT/
+</command>
+<file name="log/netrc" >
+# the following two lines were created while testing curl
+machine %HOSTIP login user1 password passwd1
+machine %HOSTIP login user2 password passwd2
+</file>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER user1
+PASS passwd1
+PWD
+EPSV
+TYPE A
+LIST
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test131 b/tests/data/test131
new file mode 100644
index 0000000..4e9ba6d
--- /dev/null
+++ b/tests/data/test131
@@ -0,0 +1,66 @@
+<testcase>
+<info>
+<keywords>
+FTP
+EPSV
+LIST
+netrc
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+#
+# When doing LIST, we get the default list output hard-coded in the test
+# FTP server
+<datacheck>
+total 20
+drwxr-xr-x 8 98 98 512 Oct 22 13:06 .
+drwxr-xr-x 8 98 98 512 Oct 22 13:06 ..
+drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT
+-r--r--r-- 1 0 1 35 Jul 16 1996 README
+lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin
+dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev
+drwxrwxrwx 2 98 98 512 May 29 16:04 download.html
+dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc
+drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub
+dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr
+</datacheck>
+</reply>
+
+#
+# Client-side
+<client>
+<features>
+netrc_debug
+</features>
+<server>
+ftp
+</server>
+ <name>
+FTP (optional .netrc; user/no pass) dir list PASV
+ </name>
+ <command>
+--netrc-optional ftp://user2@%HOSTIP:%FTPPORT/
+</command>
+<file name="log/netrc" >
+# the following two lines were created while testing curl
+machine %HOSTIP login user1 password passwd1
+machine %HOSTIP login user2 password passwd2
+</file>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER user2
+PASS passwd2
+PWD
+EPSV
+TYPE A
+LIST
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test132 b/tests/data/test132
new file mode 100644
index 0000000..2ff39fb
--- /dev/null
+++ b/tests/data/test132
@@ -0,0 +1,65 @@
+<testcase>
+<info>
+<keywords>
+FTP
+EPSV
+LIST
+netrc
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+# When doing LIST, we get the default list output hard-coded in the test
+# FTP server
+<datacheck>
+total 20
+drwxr-xr-x 8 98 98 512 Oct 22 13:06 .
+drwxr-xr-x 8 98 98 512 Oct 22 13:06 ..
+drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT
+-r--r--r-- 1 0 1 35 Jul 16 1996 README
+lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin
+dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev
+drwxrwxrwx 2 98 98 512 May 29 16:04 download.html
+dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc
+drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub
+dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr
+</datacheck>
+</reply>
+
+#
+# Client-side
+<client>
+<features>
+netrc_debug
+</features>
+<server>
+ftp
+</server>
+ <name>
+FTP (optional .netrc; user/passwd supplied) dir list PASV
+ </name>
+ <command>
+--netrc-optional ftp://mary:mark@%HOSTIP:%FTPPORT/
+</command>
+<file name="log/netrc" >
+# the following two lines were created while testing curl
+machine %HOSTIP login user1 password passwd1
+machine %HOSTIP login user2 password passwd2
+</file>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER mary
+PASS mark
+PWD
+EPSV
+TYPE A
+LIST
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test133 b/tests/data/test133
new file mode 100644
index 0000000..2e6b2c3
--- /dev/null
+++ b/tests/data/test133
@@ -0,0 +1,65 @@
+<testcase>
+<info>
+<keywords>
+FTP
+EPSV
+LIST
+netrc
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+# When doing LIST, we get the default list output hard-coded in the test
+# FTP server
+<datacheck>
+total 20
+drwxr-xr-x 8 98 98 512 Oct 22 13:06 .
+drwxr-xr-x 8 98 98 512 Oct 22 13:06 ..
+drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT
+-r--r--r-- 1 0 1 35 Jul 16 1996 README
+lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin
+dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev
+drwxrwxrwx 2 98 98 512 May 29 16:04 download.html
+dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc
+drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub
+dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr
+</datacheck>
+</reply>
+
+#
+# Client-side
+<client>
+<features>
+netrc_debug
+</features>
+<server>
+ftp
+</server>
+ <name>
+FTP (compulsory .netrc; ignored user/passwd) dir list PASV
+ </name>
+ <command>
+-n ftp://mary:mark@%HOSTIP:%FTPPORT/
+</command>
+<file name="log/netrc" >
+# the following two lines were created while testing curl
+machine %HOSTIP login user1 password passwd1
+machine %HOSTIP login user2 password passwd2
+</file>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER user1
+PASS passwd1
+PWD
+EPSV
+TYPE A
+LIST
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test134 b/tests/data/test134
new file mode 100644
index 0000000..8ff9c19
--- /dev/null
+++ b/tests/data/test134
@@ -0,0 +1,65 @@
+<testcase>
+<info>
+<keywords>
+FTP
+EPSV
+LIST
+netrc
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+# When doing LIST, we get the default list output hard-coded in the test
+# FTP server
+<datacheck>
+total 20
+drwxr-xr-x 8 98 98 512 Oct 22 13:06 .
+drwxr-xr-x 8 98 98 512 Oct 22 13:06 ..
+drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT
+-r--r--r-- 1 0 1 35 Jul 16 1996 README
+lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin
+dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev
+drwxrwxrwx 2 98 98 512 May 29 16:04 download.html
+dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc
+drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub
+dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr
+</datacheck>
+</reply>
+
+#
+# Client-side
+<client>
+<features>
+netrc_debug
+</features>
+<server>
+ftp
+</server>
+ <name>
+FTP (optional .netrc; programmatic user/passwd) dir list PASV
+ </name>
+ <command>
+--netrc-optional -u romulus:rhemus ftp://mary:mark@%HOSTIP:%FTPPORT/
+</command>
+<file name="log/netrc" >
+# the following two lines were created while testing curl
+machine %HOSTIP login user1 password passwd1
+machine %HOSTIP login user2 password passwd2
+</file>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER romulus
+PASS rhemus
+PWD
+EPSV
+TYPE A
+LIST
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test135 b/tests/data/test135
new file mode 100644
index 0000000..a051dba
--- /dev/null
+++ b/tests/data/test135
@@ -0,0 +1,53 @@
+<testcase>
+<info>
+<keywords>
+FTP
+EPSV
+RETR
+Range
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+0123456789abcdef
+0123456789abcdef
+0123456789abcdef
+0123456789abcdef
+</data>
+<datacheck nonewline="yes">
+0123456789abc
+</datacheck>
+<size>
+64
+</size>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP retrieve a byte-range
+ </name>
+ <command>
+-r 4-16 ftp://%HOSTIP:%FTPPORT/135
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE I
+SIZE 135
+REST 4
+RETR 135
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test136 b/tests/data/test136
new file mode 100644
index 0000000..25940b5
--- /dev/null
+++ b/tests/data/test136
@@ -0,0 +1,42 @@
+<testcase>
+<info>
+<keywords>
+FTP
+EPSV
+RETR
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+0123456789abcdef
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP with user and no password
+ </name>
+ <command>
+-u user: ftp://%HOSTIP:%FTPPORT/136
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER user
+PASS
+PWD
+EPSV
+TYPE I
+SIZE 136
+RETR 136
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test137 b/tests/data/test137
new file mode 100644
index 0000000..b8e2726
--- /dev/null
+++ b/tests/data/test137
@@ -0,0 +1,47 @@
+<testcase>
+<info>
+<keywords>
+FTP
+RETR
+--data-binary
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+this is file contents
+</data>
+<servercmd>
+RETRNOSIZE
+</servercmd>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP download without size in RETR string
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/blalbla/lululul/137
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+CWD blalbla
+CWD lululul
+EPSV
+TYPE I
+SIZE 137
+RETR 137
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test138 b/tests/data/test138
new file mode 100644
index 0000000..4eb73e6
--- /dev/null
+++ b/tests/data/test138
@@ -0,0 +1,49 @@
+<testcase>
+<info>
+<keywords>
+FTP
+RETR
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+this is file contents
+</data>
+<size>
+-1
+</size>
+<servercmd>
+RETRNOSIZE
+</servercmd>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP download without size in RETR string and no SIZE command
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/blalbla/lululul/138
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+CWD blalbla
+CWD lululul
+EPSV
+TYPE I
+SIZE 138
+RETR 138
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test139 b/tests/data/test139
new file mode 100644
index 0000000..15a242b
--- /dev/null
+++ b/tests/data/test139
@@ -0,0 +1,47 @@
+<testcase>
+<info>
+<keywords>
+FTP
+RETR
+-z
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+this is file contents
+</data>
+<mdtm>
+213 20030409102659
+</mdtm>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP download a newer file with -z
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/blalbla/139 -z "1 jan 1989"
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+CWD blalbla
+MDTM 139
+EPSV
+TYPE I
+SIZE 139
+RETR 139
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test14 b/tests/data/test14
new file mode 100644
index 0000000..21a4865
--- /dev/null
+++ b/tests/data/test14
@@ -0,0 +1,44 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP HEAD
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Server: thebest/1.0
+Connection: close
+
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP HEAD with Connection: close
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/want/14 -i --head
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+HEAD /want/14 HTTP/1.1
+User-Agent: curl/7.4.2-pre4 (sparc-sun-solaris2.7) libcurl 7.4.2-pre4
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test140 b/tests/data/test140
new file mode 100644
index 0000000..4d8bc85
--- /dev/null
+++ b/tests/data/test140
@@ -0,0 +1,42 @@
+<testcase>
+<info>
+<keywords>
+FTP
+-z
+--data-binary
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+</data>
+<mdtm>
+213 20030409102659
+</mdtm>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP download file with -z, expected to not transfer
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/blalbla/140 -z "1 jan 2004"
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+CWD blalbla
+MDTM 140
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test141 b/tests/data/test141
new file mode 100644
index 0000000..694d87c
--- /dev/null
+++ b/tests/data/test141
@@ -0,0 +1,52 @@
+<testcase>
+<info>
+<keywords>
+FTP
+NOBODY
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+</data>
+<size>
+42
+</size>
+<mdtm>
+213 20030409102659
+</mdtm>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP download info with -I
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/blalbla/141 -I
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+CWD blalbla
+MDTM 141
+TYPE I
+SIZE 141
+REST 0
+QUIT
+</protocol>
+<stdout>
+Last-Modified: Wed, 09 Apr 2003 10:26:59 GMT
+Content-Length: 42
+Accept-ranges: bytes
+</stdout>
+</verify>
+</testcase>
diff --git a/tests/data/test142 b/tests/data/test142
new file mode 100644
index 0000000..e26aa19
--- /dev/null
+++ b/tests/data/test142
@@ -0,0 +1,190 @@
+<testcase>
+<info>
+<keywords>
+FTP
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+many parts there are
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP URL with 150 dir levels
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/part1/part2/part3/part4/part5/part6/part7/part8/part9/part10/part11/part12/part13/part14/part15/part16/part17/part18/part19/part20/part21/part22/part23/part24/part25/part26/part27/part28/part29/part30/part31/part32/part33/part34/part35/part36/part37/part38/part39/part40/part41/part42/part43/part44/part45/part46/part47/part48/part49/part50/part51/part52/part53/part54/part55/part56/part57/part58/part59/part60/part61/part62/part63/part64/part65/part66/part67/part68/part69/part70/part71/part72/part73/part74/part75/part76/part77/part78/part79/part80/part81/part82/part83/part84/part85/part86/part87/part88/part89/part90/part91/part92/part93/part94/part95/part96/part97/part98/part99/part100/part101/part102/part103/part104/part105/part106/part107/part108/part109/part110/part111/part112/part113/part114/part115/part116/part117/part118/part119/part120/part121/part122/part123/part124/part125/part126/part127/part128/part129/part130/part131/part132/part133/part134/part135/part136/part137/part138/part139/part140/part141/part142/part143/part144/part145/part146/part147/part148/part149/part150/142
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+CWD part1
+CWD part2
+CWD part3
+CWD part4
+CWD part5
+CWD part6
+CWD part7
+CWD part8
+CWD part9
+CWD part10
+CWD part11
+CWD part12
+CWD part13
+CWD part14
+CWD part15
+CWD part16
+CWD part17
+CWD part18
+CWD part19
+CWD part20
+CWD part21
+CWD part22
+CWD part23
+CWD part24
+CWD part25
+CWD part26
+CWD part27
+CWD part28
+CWD part29
+CWD part30
+CWD part31
+CWD part32
+CWD part33
+CWD part34
+CWD part35
+CWD part36
+CWD part37
+CWD part38
+CWD part39
+CWD part40
+CWD part41
+CWD part42
+CWD part43
+CWD part44
+CWD part45
+CWD part46
+CWD part47
+CWD part48
+CWD part49
+CWD part50
+CWD part51
+CWD part52
+CWD part53
+CWD part54
+CWD part55
+CWD part56
+CWD part57
+CWD part58
+CWD part59
+CWD part60
+CWD part61
+CWD part62
+CWD part63
+CWD part64
+CWD part65
+CWD part66
+CWD part67
+CWD part68
+CWD part69
+CWD part70
+CWD part71
+CWD part72
+CWD part73
+CWD part74
+CWD part75
+CWD part76
+CWD part77
+CWD part78
+CWD part79
+CWD part80
+CWD part81
+CWD part82
+CWD part83
+CWD part84
+CWD part85
+CWD part86
+CWD part87
+CWD part88
+CWD part89
+CWD part90
+CWD part91
+CWD part92
+CWD part93
+CWD part94
+CWD part95
+CWD part96
+CWD part97
+CWD part98
+CWD part99
+CWD part100
+CWD part101
+CWD part102
+CWD part103
+CWD part104
+CWD part105
+CWD part106
+CWD part107
+CWD part108
+CWD part109
+CWD part110
+CWD part111
+CWD part112
+CWD part113
+CWD part114
+CWD part115
+CWD part116
+CWD part117
+CWD part118
+CWD part119
+CWD part120
+CWD part121
+CWD part122
+CWD part123
+CWD part124
+CWD part125
+CWD part126
+CWD part127
+CWD part128
+CWD part129
+CWD part130
+CWD part131
+CWD part132
+CWD part133
+CWD part134
+CWD part135
+CWD part136
+CWD part137
+CWD part138
+CWD part139
+CWD part140
+CWD part141
+CWD part142
+CWD part143
+CWD part144
+CWD part145
+CWD part146
+CWD part147
+CWD part148
+CWD part149
+CWD part150
+EPSV
+TYPE I
+SIZE 142
+RETR 142
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test143 b/tests/data/test143
new file mode 100644
index 0000000..a4df8cb
--- /dev/null
+++ b/tests/data/test143
@@ -0,0 +1,44 @@
+<testcase>
+<info>
+<keywords>
+FTP
+RETR
+type=
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+bla bla bla
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP URL with type=a
+ </name>
+ <command>
+"ftp://%HOSTIP:%FTPPORT/%2ftmp/moo/143;type=a"
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+CWD /tmp
+CWD moo
+EPSV
+TYPE A
+SIZE 143
+RETR 143
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test144 b/tests/data/test144
new file mode 100644
index 0000000..4419b09
--- /dev/null
+++ b/tests/data/test144
@@ -0,0 +1,49 @@
+<testcase>
+<info>
+<keywords>
+FTP
+PORT
+NLST
+--data-binary
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+</data>
+<servercmd>
+REPLY NLST 450 No files found
+</servercmd>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP NLST dir list without contents, using PORT
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/ -P - -l
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+# Strip all valid kinds of PORT and EPRT that curl can send
+<strip>
+^PORT \d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3}
+^EPRT \|1\|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\|\d{1,5}\|
+</strip>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+PORT 127,0,0,1,243,212
+TYPE A
+NLST
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test145 b/tests/data/test145
new file mode 100644
index 0000000..1e80cf8
--- /dev/null
+++ b/tests/data/test145
@@ -0,0 +1,51 @@
+<testcase>
+<info>
+<keywords>
+FTP
+NLST
+PORT
+</keywords>
+</info>
+# Server-side
+<reply>
+<servercmd>
+REPLY NLST 550 Have a taste on this!
+</servercmd>
+<data>
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP NLST dir list with weird reply code, using PORT
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/ -P - -l
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+19
+</errorcode>
+# Strip all valid kinds of PORT and EPRT that curl can send
+<strip>
+^PORT \d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3}
+^EPRT \|1\|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\|\d{1,5}\|
+</strip>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+PORT 127,0,0,1,243,212
+TYPE A
+NLST
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test146 b/tests/data/test146
new file mode 100644
index 0000000..3cd4bd5
--- /dev/null
+++ b/tests/data/test146
@@ -0,0 +1,55 @@
+<testcase>
+<info>
+<keywords>
+FTP
+RETR
+persistent connection
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+this is file contents
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+persistent FTP with different paths
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/first/dir/here/146 ftp://%HOSTIP:%FTPPORT/146
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+# Strip all valid kinds of PORT and EPRT that curl can send
+<strip>
+^PORT \d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3}
+^EPRT \|1\|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\|\d{1,5}\|
+</strip>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+CWD first
+CWD dir
+CWD here
+EPSV
+TYPE I
+SIZE 146
+RETR 146
+CWD /
+EPSV
+SIZE 146
+RETR 146
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test147 b/tests/data/test147
new file mode 100644
index 0000000..aaa4ca1
--- /dev/null
+++ b/tests/data/test147
@@ -0,0 +1,49 @@
+<testcase>
+# Server-side
+<reply>
+<data>
+foo
+</data>
+<servercmd>
+REPLY CWD 550 I won't allow this on my server
+COUNT CWD 1
+</servercmd>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP with --ftp-create-dirs (failing CWD)
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/first/dir/here/147 --ftp-create-dirs
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+# Strip all valid kinds of PORT and EPRT that curl can send
+<strip>
+^PORT \d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3}
+^EPRT \|1\|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\|\d{1,5}\|
+</strip>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+CWD first
+MKD first
+CWD first
+CWD dir
+CWD here
+EPSV
+TYPE I
+SIZE 147
+RETR 147
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test148 b/tests/data/test148
new file mode 100644
index 0000000..de0fa7a
--- /dev/null
+++ b/tests/data/test148
@@ -0,0 +1,42 @@
+<testcase>
+# Server-side
+<reply>
+<servercmd>
+REPLY CWD 550 I won't allow this on my server
+REPLY MKD 550 We will have no such thing
+</servercmd>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP with --ftp-create-dirs (failing MKD)
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/attempt/to/get/this/148 --ftp-create-dirs
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+# Strip all valid kinds of PORT and EPRT that curl can send
+<strip>
+^PORT \d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3}
+^EPRT \|1\|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\|\d{1,5}\|
+</strip>
+<errorcode>
+9
+</errorcode>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+CWD attempt
+MKD attempt
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test149 b/tests/data/test149
new file mode 100644
index 0000000..f7973f4
--- /dev/null
+++ b/tests/data/test149
@@ -0,0 +1,47 @@
+<testcase>
+# Server-side
+<reply>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP with multiple uploads
+ </name>
+ <command>
+-T log/upload149 ftp://%HOSTIP:%FTPPORT/dir1/149 -T log/upload149 ftp://%HOSTIP:%FTPPORT/dir2/149
+</command>
+<file name="log/upload149">
+send away this contents
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+# Strip all valid kinds of PORT and EPRT that curl can send
+<strip>
+^PORT \d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3}
+^EPRT \|1\|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\|\d{1,5}\|
+</strip>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+CWD dir1
+EPSV
+TYPE I
+STOR 149
+CWD /
+CWD dir2
+EPSV
+STOR 149
+QUIT
+</protocol>
+<file name="log/upload149">
+send away this contents
+</file>
+</verify>
+</testcase>
diff --git a/tests/data/test15 b/tests/data/test15
new file mode 100644
index 0000000..3b1fa43
--- /dev/null
+++ b/tests/data/test15
@@ -0,0 +1,57 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+--write-out
+</keywords>
+</info>
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.4 200 OK
+Fake: yes
+Fake: yes
+Fake: yes
+Content-Length: 26
+
+Repeated nonsense-headers
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+--write-out test
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/want/15 --write-out "%{url_effective} %{http_code} %{size_download}\n"
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<stdout>
+HTTP/1.4 200 OK
+Fake: yes
+Fake: yes
+Fake: yes
+Content-Length: 26
+
+Repeated nonsense-headers
+http://%HOSTIP:%HTTPPORT/want/15 200 26
+</stdout>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /want/15 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test150 b/tests/data/test150
new file mode 100644
index 0000000..cdd4cf6
--- /dev/null
+++ b/tests/data/test150
@@ -0,0 +1,94 @@
+<testcase>
+
+<!-- Server-side -->
+<reply>
+
+<!-- no <data> in this test since we have NTLM from the start
+
+This is supposed to be returned when the server gets a first
+Authorization: NTLM line passed-in from the client -->
+
+<data1001>
+HTTP/1.1 401 Now gimme that second request of crap
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 34
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+This is not the real page either!
+</data1001>
+
+# This is supposed to be returned when the server gets the second
+# Authorization: NTLM line passed-in from the client
+<data1002>
+HTTP/1.1 200 Things are fine in server land swsclose
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page!
+</data1002>
+
+<datacheck>
+HTTP/1.1 401 Now gimme that second request of crap
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 34
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+HTTP/1.1 200 Things are fine in server land swsclose
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page!
+</datacheck>
+
+</reply>
+
+# Client-side
+<client>
+<features>
+NTLM
+</features>
+<server>
+http
+</server>
+ <name>
+HTTP with NTLM authorization and --fail
+ </name>
+ <setenv>
+# we force our own host name, in order to make the test machine independent
+CURL_GETHOSTNAME=curlhost
+# we try to use the LD_PRELOAD hack, if not a debug build
+LD_PRELOAD=%PWD/libtest/.libs/libhostname.so
+ </setenv>
+ <command>
+http://%HOSTIP:%HTTPPORT/150 -u testuser:testpass --ntlm --fail
+</command>
+<precheck>
+chkhostname curlhost
+</precheck>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /150 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+User-Agent: curl/7.10.6-pre1 (i686-pc-linux-gnu) libcurl/7.10.6-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /150 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoKBAFpkQwKRCZFMhjj0tw47wEjKHRHlvzfxQamFcheMuv8v+xeqphEO5V41xRd7R9deOXRlc3R1c2VyY3VybGhvc3Q=
+User-Agent: curl/7.10.6-pre1 (i686-pc-linux-gnu) libcurl/7.10.6-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test151 b/tests/data/test151
new file mode 100644
index 0000000..7fb1908
--- /dev/null
+++ b/tests/data/test151
@@ -0,0 +1,41 @@
+<testcase>
+# Server-side
+<reply>
+<data>
+HTTP/1.0 401 BAD BOY
+Server: swsclose
+Content-Type: text/html
+
+This contains a response code >= 400, so curl shouldn't display this. Even
+though it's a response code that triggers authentication, we're not using
+authentication so we should still fail.
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP GET with an error code that might trick authentication
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/151
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent: curl/.*
+</strip>
+<protocol>
+GET /151 HTTP/1.1
+User-Agent: curl/7.8.1-pre3 (sparc-sun-solaris2.7) libcurl 7.8.1-pre3 (OpenSSL 0.9.6a) (krb4 enabled)
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test152 b/tests/data/test152
new file mode 100644
index 0000000..c3f4159
--- /dev/null
+++ b/tests/data/test152
@@ -0,0 +1,44 @@
+<testcase>
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.0 401 BAD BOY
+Server: swsclose
+Content-Type: text/html
+
+This contains a response code >= 400, so curl shouldn't display this. Even
+though it's a response code that triggers authentication, we're not using
+authentication so we should still fail.
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP GET with an error code that might trick authentication and --fail
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/152 --fail
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent: curl/.*
+</strip>
+<protocol>
+GET /152 HTTP/1.1
+User-Agent: curl/7.8.1-pre3 (sparc-sun-solaris2.7) libcurl 7.8.1-pre3 (OpenSSL 0.9.6a) (krb4 enabled)
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+<errorcode>
+22
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test153 b/tests/data/test153
new file mode 100644
index 0000000..5a1db31
--- /dev/null
+++ b/tests/data/test153
@@ -0,0 +1,133 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP Digest auth
+</keywords>
+</info>
+
+# Server-side
+<reply>
+# reply back and ask for Digest auth
+<data1>
+HTTP/1.1 401 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Digest realm="testrealm", nonce="1053604145"
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 26
+
+This is not the real page
+</data1>
+
+# This is supposed to be returned when the server gets a
+# Authorization: Digest line passed-in from the client
+<data1001>
+HTTP/1.1 200 OK
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 23
+
+This IS the real page!
+</data1001>
+
+#
+# This is the second request, and this sends back a response saying that
+# the request contained stale data. We want an update. Set swsbounce to
+# bounce on to data1003 on the second request.
+<data1002>
+HTTP/1.1 401 Authorization re-negotiation please swsbounce
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Digest realm="testrealm", algorithm=MD5, nonce="999999", stale=true, qop="auth"
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 25
+
+This is not the real page
+</data1002>
+
+# The second request to the 1002 section will bounce this one back instead
+# thanks to the swsbounce keyword up there
+<data1003>
+HTTP/1.1 200 OK
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 30
+
+This IS the second real page!
+</data1003>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+<features>
+crypto
+</features>
+ <name>
+HTTP with Digest authorization with stale=true
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/1530001 -u testuser:testpass --digest http://%HOSTIP:%HTTPPORT/1530002
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^Authorization.*cnonce
+^User-Agent:.*
+</strip>
+<protocol>
+GET /1530001 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /1530001 HTTP/1.1
+Authorization: Digest username="testuser", realm="testrealm", nonce="1053604145", uri="/1530001", response="f4f83139396995bac665f24a1f1055c7"
+User-Agent: curl/7.10.5 (i686-pc-linux-gnu) libcurl/7.10.5 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /1530002 HTTP/1.1
+Authorization: Digest username="testuser", realm="testrealm", nonce="1053604145", uri="/1530002", response="f84511b014fdd0ba6494f42871079c32"
+User-Agent: curl/7.11.0-CVS (i686-pc-linux-gnu) libcurl/7.11.0-CVS OpenSSL/0.9.6b ipv6 zlib/1.1.4 GSS
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /1530002 HTTP/1.1
+Authorization: Digest username="testuser", realm="testrealm", nonce="999999", uri="/1530002", cnonce="MTA4MzIy", nc="00000001", qop="auth", response="25291c357671604a16c0242f56721c07", algorithm="MD5"
+User-Agent: curl/7.11.0-CVS (i686-pc-linux-gnu) libcurl/7.11.0-CVS OpenSSL/0.9.6b ipv6 zlib/1.1.4 GSS
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+<stdout>
+HTTP/1.1 401 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Digest realm="testrealm", nonce="1053604145"
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 26
+
+HTTP/1.1 200 OK
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 23
+
+This IS the real page!
+HTTP/1.1 401 Authorization re-negotiation please swsbounce
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Digest realm="testrealm", algorithm=MD5, nonce="999999", stale=true, qop="auth"
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 25
+
+HTTP/1.1 200 OK
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 30
+
+This IS the second real page!
+</stdout>
+</verify>
+</testcase>
diff --git a/tests/data/test154 b/tests/data/test154
new file mode 100644
index 0000000..89e2bd5
--- /dev/null
+++ b/tests/data/test154
@@ -0,0 +1,108 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP PUT
+HTTP Digest auth
+--anyauth
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<servercmd>
+auth_required
+</servercmd>
+<data>
+HTTP/1.1 401 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Blackmagic realm="gimme all yer s3cr3ts"
+WWW-Authenticate: Basic realm="gimme all yer s3cr3ts"
+WWW-Authenticate: Digest realm="gimme all yer s3cr3ts", nonce="11223344"
+Content-Type: text/html; charset=iso-8859-1
+Connection: close
+
+This is not the real page
+</data>
+
+# This is supposed to be returned when the server gets a
+# Authorization: Digest line passed-in from the client
+<data1000>
+HTTP/1.1 200 OK swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 23
+Connection: close
+
+This IS the real page!
+</data1000>
+
+<datacheck>
+HTTP/1.1 401 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Blackmagic realm="gimme all yer s3cr3ts"
+WWW-Authenticate: Basic realm="gimme all yer s3cr3ts"
+WWW-Authenticate: Digest realm="gimme all yer s3cr3ts", nonce="11223344"
+Content-Type: text/html; charset=iso-8859-1
+Connection: close
+
+HTTP/1.1 200 OK swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 23
+Connection: close
+
+This IS the real page!
+</datacheck>
+
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+<features>
+crypto
+</features>
+ <name>
+HTTP PUT with --anyauth authorization (picking Digest)
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/154 -T log/put154 -u testuser:testpass --anyauth
+</command>
+<file name="log/put154">
+This is data we upload with PUT
+a second line
+line three
+four is the number of lines
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+PUT /154 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 85
+Expect: 100-continue
+
+PUT /154 HTTP/1.1
+Authorization: Digest username="testuser", realm="gimme all yer s3cr3ts", nonce="11223344", uri="/154", response="b71551e12d1c456e47d8388ecb2edeca"
+User-Agent: curl/7.10.5 (i686-pc-linux-gnu) libcurl/7.10.5 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 85
+Expect: 100-continue
+
+This is data we upload with PUT
+a second line
+line three
+four is the number of lines
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test155 b/tests/data/test155
new file mode 100644
index 0000000..891aa35
--- /dev/null
+++ b/tests/data/test155
@@ -0,0 +1,131 @@
+<testcase>
+# Server-side
+<reply>
+<servercmd>
+auth_required
+</servercmd>
+<data>
+HTTP/1.1 401 NTLM Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Blackmagic realm="gimme all yer s3cr3ts"
+WWW-Authenticate: Basic realm="gimme all yer s3cr3ts"
+WWW-Authenticate: NTLM
+Content-Type: text/html; charset=iso-8859-1
+Connection: close
+
+moo
+</data>
+
+# This is supposed to be returned when the server gets a first
+# Authorization: NTLM line passed-in from the client
+<data1001>
+HTTP/1.1 401 Type-1 received, send back type-2
+Server: Microsoft-IIS/5.0
+Content-Length: 34
+Content-Type: text/html; charset=iso-8859-1
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+This is not the real page either!
+</data1001>
+
+# This is supposed to be returned when the server gets the second
+# Authorization: NTLM line passed-in from the client
+<data1002>
+HTTP/1.1 200 Type-3 Recevied and all Things are fine swsclose
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page!
+</data1002>
+
+<datacheck>
+HTTP/1.1 401 NTLM Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Blackmagic realm="gimme all yer s3cr3ts"
+WWW-Authenticate: Basic realm="gimme all yer s3cr3ts"
+WWW-Authenticate: NTLM
+Content-Type: text/html; charset=iso-8859-1
+Connection: close
+
+HTTP/1.1 401 Type-1 received, send back type-2
+Server: Microsoft-IIS/5.0
+Content-Length: 34
+Content-Type: text/html; charset=iso-8859-1
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+HTTP/1.1 200 Type-3 Recevied and all Things are fine swsclose
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page!
+</datacheck>
+
+</reply>
+
+# Client-side
+<client>
+<features>
+NTLM
+</features>
+<server>
+http
+</server>
+ <name>
+HTTP PUT with --anyauth authorization (picking NTLM)
+ </name>
+ <setenv>
+# we force our own host name, in order to make the test machine independent
+CURL_GETHOSTNAME=curlhost
+# we try to use the LD_PRELOAD hack, if not a debug build
+LD_PRELOAD=%PWD/libtest/.libs/libhostname.so
+ </setenv>
+ <command>
+http://%HOSTIP:%HTTPPORT/155 -T log/put155 -u testuser:testpass --anyauth
+</command>
+<precheck>
+chkhostname curlhost
+</precheck>
+<file name="log/put155">
+This is data we upload with PUT
+a second line
+line three
+four is the number of lines
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+PUT /155 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 85
+Expect: 100-continue
+
+PUT /155 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 0
+Expect: 100-continue
+
+PUT /155 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoKBAFpkQwKRCZFMhjj0tw47wEjKHRHlvzfxQamFcheMuv8v+xeqphEO5V41xRd7R9deOXRlc3R1c2VyY3VybGhvc3Q=
+User-Agent: curl/7.10.5 (i686-pc-linux-gnu) libcurl/7.10.5 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 85
+Expect: 100-continue
+
+This is data we upload with PUT
+a second line
+line three
+four is the number of lines
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test156 b/tests/data/test156
new file mode 100644
index 0000000..0ff5e7e
--- /dev/null
+++ b/tests/data/test156
@@ -0,0 +1,52 @@
+<testcase>
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 No Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Content-Type: text/html; charset=iso-8859-1
+Connection: close
+
+PUT received fine. Thank you very much
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP PUT with --anyauth (when the server requires none)
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/156 -T log/put156 -u testuser:testpass --anyauth
+</command>
+<file name="log/put156">
+This is data we upload with PUT
+a second line
+line three
+four is the number of lines
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+PUT /156 HTTP/1.1
+User-Agent: curl/7.10.5 (i686-pc-linux-gnu) libcurl/7.10.5 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 85
+Expect: 100-continue
+
+This is data we upload with PUT
+a second line
+line three
+four is the number of lines
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test157 b/tests/data/test157
new file mode 100644
index 0000000..872d93b
--- /dev/null
+++ b/tests/data/test157
@@ -0,0 +1,39 @@
+<testcase>
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 No Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Content-Type: text/html; charset=iso-8859-1
+Connection: close
+
+GET received and served just fine. Thank you very much
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP GET with --anyauth (when the server requires none)
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/157 -u testuser:testpass --anyauth
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /157 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test158 b/tests/data/test158
new file mode 100644
index 0000000..417238d
--- /dev/null
+++ b/tests/data/test158
@@ -0,0 +1,50 @@
+<testcase>
+# Server-side
+<reply>
+<data>
+HTTP/1.1 100 Continue swsclose
+Silly-header: yeeeees
+
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP multipart formpost with only a 100 reply
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/158 -F name=daniel
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+^Content-Type: multipart/form-data.*
+^---------------------------.*
+</strip>
+<protocol>
+POST /158 HTTP/1.1
+User-Agent: curl/7.11.2-CVS (i686-pc-linux-gnu) libcurl/7.11.2-CVS OpenSSL/0.9.6b ipv6 zlib/1.1.4 GSS
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 145
+Expect: 100-continue
+Content-Type: multipart/form-data; boundary=----------------------------4f12fcdaa3bc
+
+------------------------------4f12fcdaa3bc
+Content-Disposition: form-data; name="name"
+
+daniel
+------------------------------4f12fcdaa3bc--
+</protocol>
+<errorcode>
+52
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test159 b/tests/data/test159
new file mode 100644
index 0000000..2b9c832
--- /dev/null
+++ b/tests/data/test159
@@ -0,0 +1,93 @@
+<testcase>
+# Server-side
+<reply>
+
+<!-- no <data> in this test since we have NTLM from the start
+
+This is supposed to be returned when the server gets a first
+Authorization: NTLM line passed-in from the client -->
+
+<data1001>
+HTTP/1.1 401 Now gimme that second request of crap
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 34
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+This is not the real page either!
+</data1001>
+
+# This is supposed to be returned when the server gets the second
+# Authorization: NTLM line passed-in from the client
+<data1002>
+HTTP/1.1 200 Things are fine in server land swsclose
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page!
+</data1002>
+
+<datacheck>
+HTTP/1.1 401 Now gimme that second request of crap
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 34
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+HTTP/1.1 200 Things are fine in server land swsclose
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page!
+</datacheck>
+
+</reply>
+
+# Client-side
+<client>
+<features>
+NTLM
+</features>
+<server>
+http
+</server>
+ <name>
+HTTP with NTLM authorization when talking HTTP/1.0
+ </name>
+ <setenv>
+# we force our own host name, in order to make the test machine independent
+CURL_GETHOSTNAME=curlhost
+# we try to use the LD_PRELOAD hack, if not a debug build
+LD_PRELOAD=%PWD/libtest/.libs/libhostname.so
+ </setenv>
+ <command>
+http://%HOSTIP:%HTTPPORT/159 -u testuser:testpass --ntlm -0
+</command>
+<precheck>
+chkhostname curlhost
+</precheck>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /159 HTTP/1.0
+Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+User-Agent: curl/7.10.6-pre1 (i686-pc-linux-gnu) libcurl/7.10.6-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /159 HTTP/1.0
+Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoKBAFpkQwKRCZFMhjj0tw47wEjKHRHlvzfxQamFcheMuv8v+xeqphEO5V41xRd7R9deOXRlc3R1c2VyY3VybGhvc3Q=
+User-Agent: curl/7.10.6-pre1 (i686-pc-linux-gnu) libcurl/7.10.6-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test16 b/tests/data/test16
new file mode 100644
index 0000000..98539be
--- /dev/null
+++ b/tests/data/test16
@@ -0,0 +1,52 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP proxy
+HTTP proxy Basic auth
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Type: text/html
+Funny-head: yesyes
+Content-Length: 22
+
+the content goes here
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP with proxy authorization
+ </name>
+ <command>
+ -U fake@user:§§§looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong -x %HOSTIP:%HTTPPORT http://we.want.that.site.com/16
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET http://we.want.that.site.com/16 HTTP/1.1
+Proxy-Authorization: Basic ZmFrZUB1c2VyOqenp2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZw==
+Host: we.want.that.site.com
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test160 b/tests/data/test160
new file mode 100644
index 0000000..d6ead59
--- /dev/null
+++ b/tests/data/test160
@@ -0,0 +1,66 @@
+<testcase>
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.1 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 9
+
+surprise
+</data>
+<data1>
+HTTP/1.1 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+
+surprise2
+</data1>
+
+<postcmd>
+wait 1
+</postcmd>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP with delayed close, conn reuse, connection reset and retry
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/want/160 http://%HOSTIP:%HTTPPORT/wantmore/1600001
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<stdout>
+HTTP/1.1 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 9
+
+surprise
+HTTP/1.1 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+
+surprise2
+</stdout>
+
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /want/160 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /wantmore/1600001 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test161 b/tests/data/test161
new file mode 100644
index 0000000..bc6820c
--- /dev/null
+++ b/tests/data/test161
@@ -0,0 +1,41 @@
+<testcase>
+# Server-side
+<reply>
+<data>
+1oooooooooooooooooooooooooooooooooooooooooo2
+</data>
+<size>
+10928
+</size>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP RETR PASV
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/161
+</command>
+</client>
+
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE I
+SIZE 161
+RETR 161
+</protocol>
+<errorcode>
+18
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test162 b/tests/data/test162
new file mode 100644
index 0000000..9b75f7c
--- /dev/null
+++ b/tests/data/test162
@@ -0,0 +1,60 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP proxy
+HTTP proxy NTLM auth
+FAILURE
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data1001 nocheck="yes">
+HTTP/1.0 407 BAD BOY
+Proxy-Authenticate: Basic realm="Squid proxy-caching web server"
+Server: swsclose
+Content-Type: text/html
+
+Even though it's the response code that triggers authentication, we're
+using NTLM and the server isn't, so we should fail. We know the server
+isn't because there's no Proxy-Authorization: NTLM header
+</data1001>
+</reply>
+
+# Client-side
+<client>
+<features>
+NTLM
+</features>
+<server>
+http
+</server>
+ <name>
+HTTP GET asking for --proxy-ntlm when some other authentication is required
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/162 --proxy http://%HOSTIP:%HTTPPORT --proxy-user foo:bar --proxy-ntlm --fail
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent: curl/.*
+</strip>
+<protocol>
+GET http://%HOSTIP:%HTTPPORT/162 HTTP/1.1
+Proxy-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+User-Agent: curl/7.8.1-pre3 (sparc-sun-solaris2.7) libcurl 7.8.1-pre3 (OpenSSL 0.9.6a) (krb4 enabled)
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol>
+<errorcode>
+22
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test163 b/tests/data/test163
new file mode 100644
index 0000000..9e8256d
--- /dev/null
+++ b/tests/data/test163
@@ -0,0 +1,73 @@
+<testcase>
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 10
+
+blablabla
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP multipart formpost with contents from a file
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/we/want/163 -F "name=<log/field163" -F tool=curl
+</command>
+# We create this file before the command is invoked!
+<file name="log/field163">
+contents
+from
+a
+file
+
+newlinens?
+yes please
+
+[tab][CR] too
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^(User-Agent:|Content-Type: multipart/form-data;|------------).*
+</strip>
+<protocol>
+POST /we/want/163 HTTP/1.1
+User-Agent: curl/7.11.2-CVS (i686-pc-linux-gnu) libcurl/7.11.2-CVS OpenSSL/0.9.6b zlib/1.1.4 c-ares/1.0.0
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 304
+Expect: 100-continue
+Content-Type: multipart/form-data; boundary=----------------------------c2d1767eb6ac
+
+------------------------------c2d1767eb6ac
+Content-Disposition: form-data; name="name"
+
+contents
+from
+a
+file
+
+newlinens?
+yes please
+
+[tab][CR] too
+
+------------------------------c2d1767eb6ac
+Content-Disposition: form-data; name="tool"
+
+curl
+------------------------------c2d1767eb6ac--
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test164 b/tests/data/test164
new file mode 100644
index 0000000..baac196
--- /dev/null
+++ b/tests/data/test164
@@ -0,0 +1,61 @@
+<testcase>
+# Server-side
+# This particular response is an exact excerpt from an actual Apache
+# server when asked for a 0-10,12-15 range (except gt/lt changed to {}
+# to avoid XML escaping problems).
+<reply>
+<data>
+HTTP/1.1 206 Partial Content swsclose
+Date: Sat, 24 Apr 2004 09:24:49 GMT
+Server: Apache/1.3.29 (Unix) mod_throttle/3.1.2 PHP/4.3.4 mod_fastcgi/2.4.0
+Last-Modified: Tue, 23 Mar 2004 08:23:14 GMT
+ETag: "53814a-ec5-405ff3f2"
+Accept-Ranges: bytes
+Content-Length: 187
+Content-Type: multipart/byteranges; boundary=408a326132c
+
+--408a326132c
+Content-type: text/html
+Content-range: bytes 0-10/3781
+
+{html}
+{hea
+
+--408a326132c
+Content-type: text/html
+Content-range: bytes 12-15/3781
+
+}
+{t
+
+--408a326132c--
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP range with multiple ranges
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/want/164 -r 0-10,12-15
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /want/164 HTTP/1.1
+Range: bytes=0-10,12-15
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test165 b/tests/data/test165
new file mode 100644
index 0000000..ddfe1e9
--- /dev/null
+++ b/tests/data/test165
@@ -0,0 +1,58 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP proxy
+IDN
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake swsclose
+Content-Type: text/html
+Funny-head: yesyes
+
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<features>
+idn
+</features>
+<setenv>
+CHARSET=ISO8859-1
+</setenv>
+ <name>
+HTTP over proxy with IDN host name
+ </name>
+ <command>
+http://www.åäö.se/page/165 -x %HOSTIP:%HTTPPORT
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET http://www.xn--4cab6c.se/page/165 HTTP/1.1
+Host: www.xn--4cab6c.se
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test166 b/tests/data/test166
new file mode 100644
index 0000000..374be28
--- /dev/null
+++ b/tests/data/test166
@@ -0,0 +1,54 @@
+<testcase>
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 10
+
+blablabla
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP formpost a file with spaces in name
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/we/want/166 -F "name=@log/fie ld 166"
+</command>
+# We create this file before the command is invoked!
+<file name="log/fie ld 166">
+data inside the file
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^(User-Agent:|Content-Type: multipart/form-data;|------------).*
+</strip>
+<protocol>
+POST /we/want/166 HTTP/1.1
+User-Agent: curl/7.12.0-CVS (i686-pc-linux-gnu) libcurl/7.12.0-CVS OpenSSL/0.9.6b zlib/1.1.4 c-ares/1.2.0 libidn/0.4.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 223
+Expect: 100-continue
+Content-Type: multipart/form-data; boundary=----------------------------b0b3d6d23991
+
+------------------------------b0b3d6d23991
+Content-Disposition: form-data; name="name"; filename="fie ld 166"
+Content-Type: application/octet-stream
+
+data inside the file
+
+------------------------------b0b3d6d23991--
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test167 b/tests/data/test167
new file mode 100644
index 0000000..2ce968d
--- /dev/null
+++ b/tests/data/test167
@@ -0,0 +1,79 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP proxy
+HTTP proxy Basic auth
+HTTP Digest auth
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+HTTP/1.1 401 Authorization Required swsclose
+WWW-Authenticate: Digest realm="weirdorealm", nonce="12345"
+
+</data>
+
+<data1000>
+HTTP/1.1 200 OK swsclose
+Server: no
+Content-Length: 15
+
+Nice auth sir!
+</data1000>
+
+<datacheck>
+HTTP/1.1 401 Authorization Required swsclose
+WWW-Authenticate: Digest realm="weirdorealm", nonce="12345"
+
+HTTP/1.1 200 OK swsclose
+Server: no
+Content-Length: 15
+
+Nice auth sir!
+</datacheck>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+<features>
+crypto
+</features>
+ <name>
+HTTP with proxy-requiring-Basic to site-requiring-Digest
+ </name>
+ <command>
+http://data.from.server.requiring.digest.hohoho.com/167 --proxy http://%HOSTIP:%HTTPPORT --proxy-user foo:bar --digest --user digest:alot
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent: curl/.*
+</strip>
+<protocol>
+GET http://data.from.server.requiring.digest.hohoho.com/167 HTTP/1.1
+Proxy-Authorization: Basic Zm9vOmJhcg==
+User-Agent: curl/7.12.0-CVS (i686-pc-linux-gnu) libcurl/7.12.0-CVS OpenSSL/0.9.6b zlib/1.1.4 c-ares/1.2.0 libidn/0.4.3
+Host: data.from.server.requiring.digest.hohoho.com
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+GET http://data.from.server.requiring.digest.hohoho.com/167 HTTP/1.1
+Proxy-Authorization: Basic Zm9vOmJhcg==
+Authorization: Digest username="digest", realm="weirdorealm", nonce="12345", uri="/167", response="13c7c02a252cbe1c46d8669898a3be26"
+User-Agent: curl/7.12.0-CVS (i686-pc-linux-gnu) libcurl/7.12.0-CVS OpenSSL/0.9.6b zlib/1.1.4 c-ares/1.2.0 libidn/0.4.3
+Host: data.from.server.requiring.digest.hohoho.com
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test168 b/tests/data/test168
new file mode 100644
index 0000000..e72e931
--- /dev/null
+++ b/tests/data/test168
@@ -0,0 +1,99 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP proxy
+HTTP proxy Digest auth
+HTTP Digest auth
+</keywords>
+</info>
+
+# Server-side
+<reply>
+
+# this is returned first since we get no proxy-auth
+<data>
+HTTP/1.1 407 Authorization Required to proxy me my dear swsclose
+Proxy-Authenticate: Digest realm="weirdorealm", nonce="12345"
+
+And you should ignore this data.
+</data>
+
+# then this is returned since we get no server-auth
+<data1000>
+HTTP/1.1 401 Authorization to the remote host as well swsbounce swsclose
+WWW-Authenticate: Digest realm="realmweirdo", nonce="123456"
+
+you should ignore this data too
+</data1000>
+
+<data1001>
+HTTP/1.1 200 OK swsclose
+Server: no
+Content-Length: 15
+
+Nice auth sir!
+</data1001>
+
+<datacheck>
+HTTP/1.1 407 Authorization Required to proxy me my dear swsclose
+Proxy-Authenticate: Digest realm="weirdorealm", nonce="12345"
+
+HTTP/1.1 401 Authorization to the remote host as well swsbounce swsclose
+WWW-Authenticate: Digest realm="realmweirdo", nonce="123456"
+
+HTTP/1.1 200 OK swsclose
+Server: no
+Content-Length: 15
+
+Nice auth sir!
+</datacheck>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+<features>
+crypto
+</features>
+ <name>
+HTTP with proxy-requiring-Digest to site-requiring-Digest
+ </name>
+ <command>
+http://data.from.server.requiring.digest.hohoho.com/168 --proxy http://%HOSTIP:%HTTPPORT --proxy-user foo:bar --proxy-digest --digest --user digest:alot
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent: curl/.*
+</strip>
+<protocol>
+GET http://data.from.server.requiring.digest.hohoho.com/168 HTTP/1.1
+User-Agent: curl/7.12.0-CVS (i686-pc-linux-gnu) libcurl/7.12.0-CVS OpenSSL/0.9.6b zlib/1.1.4 c-ares/1.2.0 libidn/0.4.3
+Host: data.from.server.requiring.digest.hohoho.com
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+GET http://data.from.server.requiring.digest.hohoho.com/168 HTTP/1.1
+Proxy-Authorization: Digest username="foo", realm="weirdorealm", nonce="12345", uri="/168", response="fb8608e00ad9239a3dedb14bc8575976"
+User-Agent: curl/7.12.0-CVS (i686-pc-linux-gnu) libcurl/7.12.0-CVS OpenSSL/0.9.6b zlib/1.1.4 c-ares/1.2.0 libidn/0.4.3
+Host: data.from.server.requiring.digest.hohoho.com
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+GET http://data.from.server.requiring.digest.hohoho.com/168 HTTP/1.1
+Proxy-Authorization: Digest username="foo", realm="weirdorealm", nonce="12345", uri="/168", response="fb8608e00ad9239a3dedb14bc8575976"
+Authorization: Digest username="digest", realm="realmweirdo", nonce="123456", uri="/168", response="ca87f2d768a231e2d637a55698d5c416"
+User-Agent: curl/7.12.0-CVS (i686-pc-linux-gnu) libcurl/7.12.0-CVS OpenSSL/0.9.6b ipv6 zlib/1.1.4 GSS libidn/0.4.3
+Host: data.from.server.requiring.digest.hohoho.com
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test169 b/tests/data/test169
new file mode 100644
index 0000000..f7419e6
--- /dev/null
+++ b/tests/data/test169
@@ -0,0 +1,127 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP proxy
+HTTP proxy NTLM auth
+HTTP Digest auth
+</keywords>
+</info>
+
+# Server-side
+<reply>
+
+# this is returned first since we get no proxy-auth
+<data>
+HTTP/1.1 407 Authorization Required to proxy me my dear swsclose
+Proxy-Authenticate: NTLM
+
+And you should ignore this data.
+</data>
+
+# then this is returned since we get no server-auth
+<data1000>
+HTTP/1.1 200 Authorizated fine
+Content-Length: 27
+
+Welcome to the end station
+</data1000>
+
+<data1001>
+HTTP/1.1 407 NTLM type-1 received sending back type-2
+Server: Microsoft-IIS/5.0
+Content-Length: 34
+Content-Type: text/html; charset=iso-8859-1
+Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+This is not the real page either!
+</data1001>
+
+# This is supposed to be returned when the server gets the second
+# Authorization: NTLM line passed-in from the client
+<data1002>
+HTTP/1.1 401 You now need to authenticate with the host
+Server: Microsoft-IIS/5.0
+WWW-Authenticate: Digest realm="r e a l m", nonce="abcdef"
+Content-Length: 46
+Content-Type: text/html; charset=iso-8859-1
+
+We have not authenticated with the server yet
+</data1002>
+
+<datacheck>
+HTTP/1.1 407 NTLM type-1 received sending back type-2
+Server: Microsoft-IIS/5.0
+Content-Length: 34
+Content-Type: text/html; charset=iso-8859-1
+Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+HTTP/1.1 401 You now need to authenticate with the host
+Server: Microsoft-IIS/5.0
+WWW-Authenticate: Digest realm="r e a l m", nonce="abcdef"
+Content-Length: 46
+Content-Type: text/html; charset=iso-8859-1
+
+HTTP/1.1 200 Authorizated fine
+Content-Length: 27
+
+Welcome to the end station
+</datacheck>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+<features>
+NTLM
+</features>
+ <name>
+HTTP with proxy-requiring-NTLM to site-requiring-Digest
+ </name>
+ <setenv>
+# we force our own host name, in order to make the test machine independent
+CURL_GETHOSTNAME=curlhost
+# we try to use the LD_PRELOAD hack, if not a debug build
+LD_PRELOAD=%PWD/libtest/.libs/libhostname.so
+ </setenv>
+ <command>
+http://data.from.server.requiring.digest.hohoho.com/169 --proxy http://%HOSTIP:%HTTPPORT --proxy-user foo:bar --proxy-ntlm --digest --user digest:alot
+</command>
+<precheck>
+chkhostname curlhost
+</precheck>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent: curl/.*
+</strip>
+<protocol>
+GET http://data.from.server.requiring.digest.hohoho.com/169 HTTP/1.1
+Proxy-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+User-Agent: curl/7.12.0-CVS (i686-pc-linux-gnu) libcurl/7.12.0-CVS OpenSSL/0.9.6b ipv6 zlib/1.1.4 GSS libidn/0.4.3
+Host: data.from.server.requiring.digest.hohoho.com
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+GET http://data.from.server.requiring.digest.hohoho.com/169 HTTP/1.1
+Proxy-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAAAwADAHAAAAAIAAgAcwAAAAAAAAAAAAAABoKBAIP6B+XVQ6vQsx3DfDXUVhd9436GAxPu0IYcl2Z7LxHmNeOAWQ+vxUmhuCFJBUgXCWZvb2N1cmxob3N0
+User-Agent: curl/7.12.0-CVS (i686-pc-linux-gnu) libcurl/7.12.0-CVS OpenSSL/0.9.6b ipv6 zlib/1.1.4 GSS libidn/0.4.3
+Host: data.from.server.requiring.digest.hohoho.com
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+GET http://data.from.server.requiring.digest.hohoho.com/169 HTTP/1.1
+Authorization: Digest username="digest", realm="r e a l m", nonce="abcdef", uri="/169", response="95d48591985a03c4b49cb962aa7bd3e6"
+User-Agent: curl/7.12.0-CVS (i686-pc-linux-gnu) libcurl/7.12.0-CVS OpenSSL/0.9.6b ipv6 zlib/1.1.4 GSS libidn/0.4.3
+Host: data.from.server.requiring.digest.hohoho.com
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test17 b/tests/data/test17
new file mode 100644
index 0000000..259580b
--- /dev/null
+++ b/tests/data/test17
@@ -0,0 +1,54 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP custom request
+config file
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Funny-head: yesyes
+Content-Length: 27
+
+This is the proof it works
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP with config file on stdin
+ </name>
+ <stdin>
+#
+# Use a silly request without '--':
+request MOOO
+#
+# Set the user-agent using a short-option:
+-A "agent007 license to drill\t"
+#
+# long option *with* '--':
+--max-time 180
+ </stdin>
+ <command>
+-K - %HOSTIP:%HTTPPORT/that.site.com/17
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+MOOO /that.site.com/17 HTTP/1.1
+User-Agent: agent007 license to drill
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test170 b/tests/data/test170
new file mode 100644
index 0000000..a2c2217
--- /dev/null
+++ b/tests/data/test170
@@ -0,0 +1,51 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP POST
+HTTP proxy
+HTTP proxy NTLM auth
+</keywords>
+</info>
+
+# Server-side
+<reply>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+<features>
+NTLM
+</features>
+ <name>
+HTTP POST with --proxy-ntlm and no SSL with no response
+ </name>
+ <command>
+http://a.galaxy.far.far.away/170 --proxy http://%HOSTIP:%HTTPPORT --proxy-user foo:bar --proxy-ntlm -F "dummy=value"
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent: curl/.*
+</strip>
+<protocol>
+POST http://a.galaxy.far.far.away/170 HTTP/1.1
+Proxy-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+User-Agent: curl/7.12.0-CVS (i686-pc-linux-gnu) libcurl/7.12.0-CVS OpenSSL/0.9.6b ipv6 zlib/1.1.4 libidn/0.4.3
+Host: a.galaxy.far.far.away
+Accept: */*
+Proxy-Connection: Keep-Alive
+Content-Length: 0
+
+</protocol>
+# 52 is CURLE_GOT_NOTHING
+<errorcode>
+52
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test171 b/tests/data/test171
new file mode 100644
index 0000000..870d236
--- /dev/null
+++ b/tests/data/test171
@@ -0,0 +1,58 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP proxy
+cookies
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Date: Tue, 25 Sep 2001 19:37:44 GMT
+Content-Type: text/html
+Set-Cookie: XToken=xt;Domain=.z.x.com;Path=/
+Cache-control: private
+Content-Length: 62
+
+This server reply is for testing a simple cookie test case...
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP, get cookie with dot prefixed full domain
+ </name>
+ <command>
+-c log/jar171 -x %HOSTIP:%HTTPPORT http://z.x.com/171
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET http://z.x.com/171 HTTP/1.1
+Host: z.x.com
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol>
+<file name="log/jar171" mode="text">
+# Netscape HTTP Cookie File
+# http://curl.haxx.se/rfc/cookie_spec.html
+# This file was generated by libcurl! Edit at your own risk.
+
+.z.x.com TRUE / FALSE 0 XToken xt
+</file>
+</verify>
+</testcase>
diff --git a/tests/data/test172 b/tests/data/test172
new file mode 100644
index 0000000..1ab9020
--- /dev/null
+++ b/tests/data/test172
@@ -0,0 +1,56 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+cookies
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Content-Length: 4
+Connection: close
+
+boo
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP with cookies file and custom added cookie
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/we/want/172 -b log/jar172.txt -b "tool=curl; name=fool"
+</command>
+<file name="log/jar172.txt">
+# Netscape HTTP Cookie File
+# http://curl.haxx.se/rfc/cookie_spec.html
+# This file was generated by libcurl! Edit at your own risk.
+
+.%HOSTIP TRUE /silly/ FALSE 0 ismatch this
+.%HOSTIP TRUE / FALSE 0 partmatch present
+%HOSTIP FALSE /we/want/ FALSE 1391252187 nodomain value
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /we/want/172 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Cookie: nodomain=value; partmatch=present; tool=curl; name=fool
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test173 b/tests/data/test173
new file mode 100644
index 0000000..bf6af00
--- /dev/null
+++ b/tests/data/test173
@@ -0,0 +1,80 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP POST
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 11
+
+blablabla
+
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP RFC1867-formpost a file from stdin with "faked" filename
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/we/want/173 -F field1=contents1 -F "fileupload=@-;filename=/dev/null;type=text/x-null;format=x-curl"
+</command>
+
+<stdin>
+line1
+line2
+line3
+line4
+line5
+line6
+line7
+line8
+</stdin>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^(User-Agent:|Content-Type: multipart/form-data;|------------).*
+</strip>
+<protocol>
+POST /we/want/173 HTTP/1.1
+User-Agent: curl/7.12.1-CVS (i686-pc-linux-gnu) libcurl/7.12.1-CVS OpenSSL/0.9.6b ipv6 zlib/1.1.4 GSS libidn/0.4.6
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 360
+Expect: 100-continue
+Content-Type: multipart/form-data; boundary=----------------------------5dbea401cd8c
+
+------------------------------5dbea401cd8c
+Content-Disposition: form-data; name="field1"
+
+contents1
+------------------------------5dbea401cd8c
+Content-Disposition: form-data; name="fileupload"; filename="/dev/null"
+Content-Type: text/x-null;format=x-curl
+
+line1
+line2
+line3
+line4
+line5
+line6
+line7
+line8
+
+------------------------------5dbea401cd8c--
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test174 b/tests/data/test174
new file mode 100644
index 0000000..fc5ccc1
--- /dev/null
+++ b/tests/data/test174
@@ -0,0 +1,45 @@
+<testcase>
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 beng swsclose
+Server: Microsoft-IIS/6.0
+Authentication-Info: Passport1.4 tname=MSPAuth,tname=MSPProf,tname=MSPConsent,tname=MSPSecAuth
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 26
+
+This is not the real page
+</data>
+</reply>
+
+# Client-side
+<client>
+#
+<server>
+http
+</server>
+ <name>
+HTTP POST --anyauth to server not requiring any auth at all
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/174 -u testuser:testpass --anyauth -d "junkelijunk"
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol nonewline="yes">
+POST /174 HTTP/1.1
+User-Agent: curl/7.12.1-CVS (i686-pc-linux-gnu) libcurl/7.12.1-CVS OpenSSL/0.9.6b ipv6 zlib/1.1.4 GSS libidn/0.4.6
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 11
+Content-Type: application/x-www-form-urlencoded
+
+junkelijunk
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test175 b/tests/data/test175
new file mode 100644
index 0000000..2ee78d5
--- /dev/null
+++ b/tests/data/test175
@@ -0,0 +1,86 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP POST
+HTTP Digest auth
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 beng swsclose swsbounce
+Server: Microsoft-IIS/6.0
+Authentication-Info: Passport1.4 tname=MSPAuth,tname=MSPProf,tname=MSPConsent,tname=MSPSecAuth
+Content-Type: text/html; charset=iso-8859-1
+
+This is not the real page
+</data>
+
+<data1>
+HTTP/1.1 200 moo swsclose
+Server: Microsoft-IIS/6.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 16
+
+content for you
+</data1>
+
+<datacheck>
+HTTP/1.1 200 beng swsclose swsbounce
+Server: Microsoft-IIS/6.0
+Authentication-Info: Passport1.4 tname=MSPAuth,tname=MSPProf,tname=MSPConsent,tname=MSPSecAuth
+Content-Type: text/html; charset=iso-8859-1
+
+HTTP/1.1 200 moo swsclose
+Server: Microsoft-IIS/6.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 16
+
+content for you
+</datacheck>
+
+</reply>
+
+# Client-side
+<client>
+#
+<server>
+http
+</server>
+<features>
+crypto
+</features>
+ <name>
+HTTP POST --digest to server not requiring any auth at all
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/175 -u auser:apasswd --digest -d "junkelijunk"
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol nonewline="yes">
+POST /175 HTTP/1.1
+User-Agent: curl/7.12.1-CVS (i686-pc-linux-gnu) libcurl/7.12.1-CVS OpenSSL/0.9.6b ipv6 zlib/1.1.4 GSS libidn/0.4.6
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 0
+Content-Type: application/x-www-form-urlencoded
+
+POST /175 HTTP/1.1
+User-Agent: curl/7.12.1-CVS (i686-pc-linux-gnu) libcurl/7.12.1-CVS OpenSSL/0.9.6b ipv6 zlib/1.1.4 GSS libidn/0.4.6
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 11
+Content-Type: application/x-www-form-urlencoded
+
+junkelijunk
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test176 b/tests/data/test176
new file mode 100644
index 0000000..d3b220b
--- /dev/null
+++ b/tests/data/test176
@@ -0,0 +1,79 @@
+<testcase>
+# Server-side
+<reply>
+# the first request has NTLM type-1 included, and then the 1001 is returned
+<data1001>
+HTTP/1.1 200 beng swsclose swsbounce
+Server: Microsoft-IIS/6.0
+Authentication-Info: Passport1.4 tname=MSPAuth,tname=MSPProf,tname=MSPConsent,tname=MSPSecAuth
+Content-Type: text/html; charset=iso-8859-1
+
+</data1001>
+
+# the second request should be auth-less and then this is returned.
+<data>
+HTTP/1.1 200 moo swsclose
+Server: Microsoft-IIS/6.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 16
+
+content for you
+</data>
+
+<datacheck>
+HTTP/1.1 200 beng swsclose swsbounce
+Server: Microsoft-IIS/6.0
+Authentication-Info: Passport1.4 tname=MSPAuth,tname=MSPProf,tname=MSPConsent,tname=MSPSecAuth
+Content-Type: text/html; charset=iso-8859-1
+
+HTTP/1.1 200 moo swsclose
+Server: Microsoft-IIS/6.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 16
+
+content for you
+</datacheck>
+
+</reply>
+
+# Client-side
+<client>
+<features>
+NTLM
+</features>
+<server>
+http
+</server>
+ <name>
+HTTP POST --ntlm to server not requiring any auth at all
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/176 -u auser:apasswd --ntlm -d "junkelijunk"
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol nonewline="yes">
+POST /176 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+User-Agent: curl/7.12.1-CVS (i686-pc-linux-gnu) libcurl/7.12.1-CVS OpenSSL/0.9.6b ipv6 zlib/1.1.4 GSS libidn/0.4.6
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 0
+Content-Type: application/x-www-form-urlencoded
+
+POST /176 HTTP/1.1
+User-Agent: curl/7.12.1-CVS (i686-pc-linux-gnu) libcurl/7.12.1-CVS OpenSSL/0.9.6b ipv6 zlib/1.1.4 GSS libidn/0.4.6
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 11
+Content-Type: application/x-www-form-urlencoded
+
+junkelijunk
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test177 b/tests/data/test177
new file mode 100644
index 0000000..495dea9
--- /dev/null
+++ b/tests/data/test177
@@ -0,0 +1,54 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP POST
+HTTP Digest auth
+followlocation
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+HTTP/1.1 302 *MOVED* swsclose swsbounce
+Server: Microsoft-IIS/6.0
+Location: /mooooo/177
+Content-Type: text/html; charset=iso-8859-1
+
+</data>
+</reply>
+
+# Client-side
+<client>
+#
+<server>
+http
+</server>
+<features>
+crypto
+</features>
+ <name>
+HTTP POST --digest to server doing a 302-location response
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/177 -u auser:apasswd --digest -d "junkelijunk"
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+POST /177 HTTP/1.1
+User-Agent: curl/7.12.1-CVS (i686-pc-linux-gnu) libcurl/7.12.1-CVS OpenSSL/0.9.6b ipv6 zlib/1.1.4 GSS libidn/0.4.6
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 0
+Content-Type: application/x-www-form-urlencoded
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test178 b/tests/data/test178
new file mode 100644
index 0000000..07f0566
--- /dev/null
+++ b/tests/data/test178
@@ -0,0 +1,43 @@
+<testcase>
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: -6
+Content-Type: text/html
+Funny-head: yesyes
+
+moooooooooooo
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+simple HTTP GET with negative Content-Length
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/178
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /178 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test179 b/tests/data/test179
new file mode 100644
index 0000000..f8f7811
--- /dev/null
+++ b/tests/data/test179
@@ -0,0 +1,57 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP proxy
+cookies
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Server: Microsoft-IIS/4.0
+Date: Tue, 25 Sep 2001 19:37:44 GMT
+Content-Type: text/html
+Connection: close
+Content-Length: 21
+
+This server says moo
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP using proxy and cookies with path checks
+ </name>
+ <command>
+http://supertrooper.fake/c/179 -b log/injar179 -x %HOSTIP:%HTTPPORT
+</command>
+<file name="log/injar179">
+supertrooper.fake FALSE /a FALSE 2139150993 mooo indeed
+supertrooper.fake FALSE /b FALSE 0 moo1 indeed
+supertrooper.fake FALSE /c FALSE 2139150993 moo2 indeed
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET http://supertrooper.fake/c/179 HTTP/1.1
+Host: supertrooper.fake
+Accept: */*
+Proxy-Connection: Keep-Alive
+Cookie: moo2=indeed
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test18 b/tests/data/test18
new file mode 100644
index 0000000..ff65817
--- /dev/null
+++ b/tests/data/test18
@@ -0,0 +1,90 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+{} list
+</keywords>
+</info>
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.1 200 OK
+Funny-head: yesyes
+Content-Length: 4
+
+moo
+</data>
+<data2>
+HTTP/1.1 200 OK
+Funny-head: yesyes
+Content-Length: 4
+
+foo
+</data2>
+<data3>
+HTTP/1.1 200 OK
+Funny-head: yesyes
+Content-Length: 4
+
+hoo
+</data3>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+multiple requests using {} in URL
+ </name>
+ <command>
+"%HOSTIP:%HTTPPORT/{18,180002,180003}"
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /18 HTTP/1.1
+User-Agent: curl/7.8.1-pre3 (sparc-sun-solaris2.7) libcurl 7.8.1-pre3 (OpenSSL 0.9.6a) (krb4 enabled)
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /180002 HTTP/1.1
+User-Agent: curl/7.8.1-pre3 (sparc-sun-solaris2.7) libcurl 7.8.1-pre3 (OpenSSL 0.9.6a) (krb4 enabled)
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /180003 HTTP/1.1
+User-Agent: curl/7.8.1-pre3 (sparc-sun-solaris2.7) libcurl 7.8.1-pre3 (OpenSSL 0.9.6a) (krb4 enabled)
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+<stdout>
+--_curl_--%HOSTIP:%HTTPPORT/18
+HTTP/1.1 200 OK
+Funny-head: yesyes
+Content-Length: 4
+
+moo
+--_curl_--%HOSTIP:%HTTPPORT/180002
+HTTP/1.1 200 OK
+Funny-head: yesyes
+Content-Length: 4
+
+foo
+--_curl_--%HOSTIP:%HTTPPORT/180003
+HTTP/1.1 200 OK
+Funny-head: yesyes
+Content-Length: 4
+
+hoo
+</stdout>
+</verify>
+</testcase>
diff --git a/tests/data/test180 b/tests/data/test180
new file mode 100644
index 0000000..c93302e
--- /dev/null
+++ b/tests/data/test180
@@ -0,0 +1,59 @@
+<testcase>
+<reply>
+<data>
+HTTP/1.0 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+
+blablabla
+
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP 1.0 PUT
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/we/want/180 -T log/test180.txt --http1.0
+</command>
+<file name="log/test180.txt">
+Weird
+ file
+ to
+ upload
+for
+ testing
+the
+ PUT
+ feature
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+PUT /we/want/180 HTTP/1.0
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 78
+
+Weird
+ file
+ to
+ upload
+for
+ testing
+the
+ PUT
+ feature
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test181 b/tests/data/test181
new file mode 100644
index 0000000..87c5701
--- /dev/null
+++ b/tests/data/test181
@@ -0,0 +1,60 @@
+<testcase>
+<reply>
+<data>
+HTTP/1.0 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+
+blablabla
+
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP 1.0 POST
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/we/want/181 --data-binary @log/test181.txt --http1.0
+</command>
+<file name="log/test181.txt">
+Weird
+ file
+ to
+ upload
+for
+ testing
+the
+ POST
+ feature
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+POST /we/want/181 HTTP/1.0
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 79
+Content-Type: application/x-www-form-urlencoded
+
+Weird
+ file
+ to
+ upload
+for
+ testing
+the
+ POST
+ feature
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test182 b/tests/data/test182
new file mode 100644
index 0000000..272cdee
--- /dev/null
+++ b/tests/data/test182
@@ -0,0 +1,37 @@
+<testcase>
+# Server-side
+<reply>
+<data sendzero="yes">
+</data>
+<size>
+0
+</size>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+<name>
+FTP download an empty file
+</name>
+<command>
+ftp://%HOSTIP:%FTPPORT/182
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE I
+SIZE 182
+RETR 182
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test183 b/tests/data/test183
new file mode 100644
index 0000000..f34dc0c
--- /dev/null
+++ b/tests/data/test183
@@ -0,0 +1,56 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP proxy
+persistent connection
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 4
+
+moo
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP GET two URLs over a single proxy with persistent connection
+ </name>
+ <command>
+http://deathstar.another.galaxy/183 http://a.galaxy.far.far.away/183 --proxy http://%HOSTIP:%HTTPPORT
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent: curl/.*
+</strip>
+<protocol>
+GET http://deathstar.another.galaxy/183 HTTP/1.1
+User-Agent: curl/7.12.2-CVS (i686-pc-linux-gnu) libcurl/7.12.2-CVS OpenSSL/0.9.6b zlib/1.1.4 libidn/0.4.6
+Host: deathstar.another.galaxy
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+GET http://a.galaxy.far.far.away/183 HTTP/1.1
+User-Agent: curl/7.12.2-CVS (i686-pc-linux-gnu) libcurl/7.12.2-CVS OpenSSL/0.9.6b zlib/1.1.4 libidn/0.4.6
+Host: a.galaxy.far.far.away
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol>
+
+</verify>
+</testcase>
diff --git a/tests/data/test184 b/tests/data/test184
new file mode 100644
index 0000000..e42a393
--- /dev/null
+++ b/tests/data/test184
@@ -0,0 +1,75 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP proxy
+followlocation
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+HTTP/1.1 301 OK swsbounce
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 4
+Location: http://yet.another.host/184
+
+moo
+</data>
+<data1>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 4
+
+moo
+</data1>
+<datacheck>
+HTTP/1.1 301 OK swsbounce
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 4
+Location: http://yet.another.host/184
+
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 4
+
+moo
+</datacheck>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP replace Host: when following Location: to new host
+ </name>
+ <command>
+http://deathstar.another.galaxy/184 -L -H "Host: another.visitor.stay.a.while.stay.foreeeeeever" --proxy http://%HOSTIP:%HTTPPORT
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent: curl/.*
+</strip>
+<protocol>
+GET http://deathstar.another.galaxy/184 HTTP/1.1
+User-Agent: curl/7.12.2-CVS (i686-pc-linux-gnu) libcurl/7.12.2-CVS OpenSSL/0.9.6b zlib/1.1.4 libidn/0.4.6
+Accept: */*
+Proxy-Connection: Keep-Alive
+Host: another.visitor.stay.a.while.stay.foreeeeeever
+
+GET http://yet.another.host/184 HTTP/1.1
+Host: yet.another.host
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol>
+
+</verify>
+</testcase>
diff --git a/tests/data/test185 b/tests/data/test185
new file mode 100644
index 0000000..01a66f6
--- /dev/null
+++ b/tests/data/test185
@@ -0,0 +1,75 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP proxy
+followlocation
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+HTTP/1.1 301 OK swsbounce
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 4
+Location: go/west/185
+
+moo
+</data>
+<data1>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 4
+
+moo
+</data1>
+<datacheck>
+HTTP/1.1 301 OK swsbounce
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 4
+Location: go/west/185
+
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 4
+
+moo
+</datacheck>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP replace Host: when following Location: on the same host
+ </name>
+ <command>
+http://deathstar.another.galaxy/185 -L -H "Host: another.visitor.stay.a.while.stay.foreeeeeever" --proxy http://%HOSTIP:%HTTPPORT
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent: curl/.*
+</strip>
+<protocol>
+GET http://deathstar.another.galaxy/185 HTTP/1.1
+User-Agent: curl/7.12.2-CVS (i686-pc-linux-gnu) libcurl/7.12.2-CVS OpenSSL/0.9.6b zlib/1.1.4 libidn/0.4.6
+Accept: */*
+Proxy-Connection: Keep-Alive
+Host: another.visitor.stay.a.while.stay.foreeeeeever
+
+GET http://deathstar.another.galaxy/go/west/185 HTTP/1.1
+Accept: */*
+Proxy-Connection: Keep-Alive
+Host: another.visitor.stay.a.while.stay.foreeeeeever
+
+</protocol>
+
+</verify>
+</testcase>
diff --git a/tests/data/test186 b/tests/data/test186
new file mode 100644
index 0000000..5a1b7b9
--- /dev/null
+++ b/tests/data/test186
@@ -0,0 +1,56 @@
+<testcase>
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 11
+
+blablabla
+
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP RFC1867-type formposting with types on text fields
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/we/want/186 -F "name=daniel;type=moo/foo" -F "html= <body>hello</body>;type=text/html;charset=verymoo"
+</command>
+# We create this file before the command is invoked!
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^(User-Agent:|Content-Type: multipart/form-data;|------------).*
+</strip>
+<protocol>
+POST /we/want/186 HTTP/1.1
+User-Agent: curl/7.12.2-CVS (i686-pc-linux-gnu) libcurl/7.12.2-CVS OpenSSL/0.9.7d zlib/1.2.1.1 c-ares/1.2.0 libidn/0.5.2
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 321
+Expect: 100-continue
+Content-Type: multipart/form-data; boundary=----------------------------212d9006ceb5
+
+------------------------------212d9006ceb5
+Content-Disposition: form-data; name="name"
+Content-Type: moo/foo
+
+daniel
+------------------------------212d9006ceb5
+Content-Disposition: form-data; name="html"
+Content-Type: text/html;charset=verymoo
+
+ <body>hello</body>
+------------------------------212d9006ceb5--
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test187 b/tests/data/test187
new file mode 100644
index 0000000..b82a6c6
--- /dev/null
+++ b/tests/data/test187
@@ -0,0 +1,77 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+followlocation
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+HTTP/1.1 301 This is a weirdo text message
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Location: /root/1870002.txt?coolsite=yes
+Connection: close
+
+This server reply is for testing a simple Location: following
+
+</data>
+<data2>
+HTTP/1.1 200 Followed here fine swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 52
+
+If this is received, the location following worked
+
+</data2>
+<datacheck>
+HTTP/1.1 301 This is a weirdo text message
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Location: /root/1870002.txt?coolsite=yes
+Connection: close
+
+HTTP/1.1 200 Followed here fine swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 52
+
+If this is received, the location following worked
+
+</datacheck>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP redirect with bad host name separation and slash in parameters
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT?oh=what-weird=test/187 -L
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /?oh=what-weird=test/187 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /root/1870002.txt?coolsite=yes HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test188 b/tests/data/test188
new file mode 100644
index 0000000..0303544
--- /dev/null
+++ b/tests/data/test188
@@ -0,0 +1,78 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+Content-Range
+Resume
+followlocation
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+HTTP/1.1 301 OK swsbounce
+Location: /188
+Content-Length: 2
+
+OK
+</data>
+<data1>
+HTTP/1.1 200 OK
+Connection: close
+Content-Length: 15
+Content-Range: bytes 50-
+
+Actual content
+</data1>
+
+<datacheck>
+HTTP/1.1 301 OK swsbounce
+Location: /188
+Content-Length: 2
+
+HTTP/1.1 200 OK
+Connection: close
+Content-Length: 15
+Content-Range: bytes 50-
+
+Actual content
+</datacheck>
+
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP GET with resume and redirect
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/188 -C 50 -L
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /188 HTTP/1.1
+Range: bytes=50-
+User-Agent: curl/7.6 (sparc-sun-solaris2.7) libcurl 7.6-pre4 (SSL 0.9.6) (krb4 enabled)
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /188 HTTP/1.1
+Range: bytes=50-
+User-Agent: curl/7.12.2-CVS (i686-pc-linux-gnu) libcurl/7.12.2-CVS OpenSSL/0.9.7d zlib/1.2.1.2 libidn/0.5.2
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test189 b/tests/data/test189
new file mode 100644
index 0000000..5548510
--- /dev/null
+++ b/tests/data/test189
@@ -0,0 +1,69 @@
+<testcase>
+# Server-side
+<reply>
+<data>
+HTTP/1.1 301 OK swsbounce
+Location: /189
+Content-Length: 2
+
+OK
+</data>
+<data1>
+HTTP/1.1 200 OK
+Connection: close
+Content-Length: 15
+
+Actual content
+</data1>
+
+<datacheck>
+HTTP/1.1 301 OK swsbounce
+Location: /189
+Content-Length: 2
+
+HTTP/1.1 200 OK
+Connection: close
+Content-Length: 15
+
+</datacheck>
+
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP GET with resume and redirect (to a page that doesn't resume)
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/189 -C 50 -L
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /189 HTTP/1.1
+Range: bytes=50-
+User-Agent: curl/7.6 (sparc-sun-solaris2.7) libcurl 7.6-pre4 (SSL 0.9.6) (krb4 enabled)
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /189 HTTP/1.1
+Range: bytes=50-
+User-Agent: curl/7.12.2-CVS (i686-pc-linux-gnu) libcurl/7.12.2-CVS OpenSSL/0.9.7d zlib/1.2.1.2 libidn/0.5.2
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+# 33 is CURLE_RANGE_ERROR
+<errorcode>
+33
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test19 b/tests/data/test19
new file mode 100644
index 0000000..dd60b8c
--- /dev/null
+++ b/tests/data/test19
@@ -0,0 +1,37 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+connect to non-listen
+FAILURE
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+none
+</server>
+<features>
+http
+</features>
+ <name>
+attempt connect to non-listening socket
+ </name>
+ <command>
+%HOSTIP:60000
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+7
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test190 b/tests/data/test190
new file mode 100644
index 0000000..4789cfa
--- /dev/null
+++ b/tests/data/test190
@@ -0,0 +1,38 @@
+<testcase>
+# Server-side
+<reply>
+<servercmd>
+DELAY CWD 60
+</servercmd>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+<killserver>
+ftp
+</killserver>
+ <name>
+FTP download with strict timeout and slow CWD
+ </name>
+ <command timeout="1">
+ftp://%HOSTIP:%FTPPORT/path/to/file/190 -m %FTPTIME2
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+# 28 is CURLE_OPERATION_TIMEDOUT
+<errorcode>
+28
+</errorcode>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test191 b/tests/data/test191
new file mode 100644
index 0000000..090d4c5
--- /dev/null
+++ b/tests/data/test191
@@ -0,0 +1,35 @@
+<testcase>
+# Server-side
+<reply>
+<data>
+data in file
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP URL with ?-letters in username and password
+ </name>
+ <command>
+"ftp://use?r:pass?word@%HOSTIP:%FTPPORT/191"
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER use?r
+PASS pass?word
+PWD
+EPSV
+TYPE I
+SIZE 191
+RETR 191
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test192 b/tests/data/test192
new file mode 100644
index 0000000..5f59e18
--- /dev/null
+++ b/tests/data/test192
@@ -0,0 +1,52 @@
+<testcase>
+#
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 8
+Connection: close
+
+monster
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP GET -w num_connects with one simple connect
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/192 -w "%{num_connects}\n"
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /192 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+
+<stdout>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 8
+Connection: close
+
+monster
+1
+</stdout>
+</verify>
+</testcase>
diff --git a/tests/data/test193 b/tests/data/test193
new file mode 100644
index 0000000..c5425bb
--- /dev/null
+++ b/tests/data/test193
@@ -0,0 +1,82 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+followlocation
+--write-out
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.1 302 OK swsbounce swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 8
+Connection: close
+Location: ./193
+
+monster
+</data>
+<data1 nocheck="yes">
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 8
+Connection: close
+
+monster
+</data1>
+
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP GET -w num_connects with redirected fetch (2 connects)
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/193 -w "%{num_connects}\n" -L
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /193 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /193 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+
+<stdout>
+HTTP/1.1 302 OK swsbounce swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 8
+Connection: close
+Location: ./193
+
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 8
+Connection: close
+
+monster
+2
+</stdout>
+
+</verify>
+</testcase>
diff --git a/tests/data/test194 b/tests/data/test194
new file mode 100644
index 0000000..582f197
--- /dev/null
+++ b/tests/data/test194
@@ -0,0 +1,57 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+Content-Range
+Resume
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+HTTP/1.1 416 Requested Range Not Satisfiable swsclose
+Date: Fri, 24 Oct 2003 21:33:12 GMT
+Server: Apache/1.3.19 (Unix) (Red-Hat/Linux) mod_ssl/2.8.1 OpenSSL/0.9.6 PHP/4.3.1
+Last-Modified: Fri, 24 Oct 2003 18:01:23 GMT
+ETag: "ab57a-507-3f9968f3"
+Accept-Ranges: bytes
+Content-Length: 4
+Content-Range: bytes */87
+Content-Type: image/gif
+Connection: close
+
+bad
+</data>
+
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP resume transfer with the whole file already downloaded and --fail
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/want/194 -C 87 --fail
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /want/194 HTTP/1.1
+Range: bytes=87-
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+
+</verify>
+</testcase>
diff --git a/tests/data/test195 b/tests/data/test195
new file mode 100644
index 0000000..788c89a
--- /dev/null
+++ b/tests/data/test195
@@ -0,0 +1,32 @@
+<testcase>
+# Server-side
+<reply>
+<servercmd>
+REPLY PASS 530 temporarily not available
+</servercmd>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP response 530 after PASS, temporarily not allowed access
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/195
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+67
+</errorcode>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test196 b/tests/data/test196
new file mode 100644
index 0000000..b070f38
--- /dev/null
+++ b/tests/data/test196
@@ -0,0 +1,35 @@
+<testcase>
+# Server-side
+<reply>
+<servercmd>
+REPLY PASS 430 temporarily not available
+</servercmd>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP transient error, retry request once
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/196 --retry 1
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+# 67 is CURLE_LOGIN_DENIED
+<errorcode>
+67
+</errorcode>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+USER anonymous
+PASS ftp@example.com
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test197 b/tests/data/test197
new file mode 100644
index 0000000..062f469
--- /dev/null
+++ b/tests/data/test197
@@ -0,0 +1,69 @@
+<testcase>
+#
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.1 503 OK swsbounce
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 21
+
+server not available
+</data>
+<data1 nocheck="yes">
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 3
+Connection: close
+
+ok
+</data1>
+
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP GET --retry on 503 error with output to stdout
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/197 --retry 1000
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /197 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /197 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+
+<stdout>
+HTTP/1.1 503 OK swsbounce
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 21
+
+server not available
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 3
+Connection: close
+
+ok
+</stdout>
+
+</verify>
+</testcase>
diff --git a/tests/data/test198 b/tests/data/test198
new file mode 100644
index 0000000..bb451b5
--- /dev/null
+++ b/tests/data/test198
@@ -0,0 +1,64 @@
+<testcase>
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 503 OK swsbounce
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 21
+
+server not available
+</data>
+<data1>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 3
+Connection: close
+
+ok
+</data1>
+
+<datacheck>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 3
+Connection: close
+
+ok
+</datacheck>
+
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP GET --retry on 503 error with output to file
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/198 --retry 1000
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /198 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /198 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+
+</verify>
+</testcase>
diff --git a/tests/data/test199 b/tests/data/test199
new file mode 100644
index 0000000..c9651bc
--- /dev/null
+++ b/tests/data/test199
@@ -0,0 +1,52 @@
+<testcase>
+#
+# Server-side
+<reply name="1">
+<data>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+-foo-
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP with -d, -G and {}
+ </name>
+ <command>
+-d "foo=moo&moo=poo" "http://%HOSTIP:%HTTPPORT/{199,199}" -G
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /199?foo=moo&moo=poo HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /199?foo=moo&moo=poo HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test2 b/tests/data/test2
new file mode 100644
index 0000000..22b4f18
--- /dev/null
+++ b/tests/data/test2
@@ -0,0 +1,53 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP Basic auth
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake swsclose
+Content-Type: text/html
+Funny-head: yesyes
+
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP GET with user and password
+ </name>
+ <command>
+ -u fake:user http://%HOSTIP:%HTTPPORT/2
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /2 HTTP/1.1
+Authorization: Basic ZmFrZTp1c2Vy
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+<data>
+[insert full protocol verifiction dump here]
+</data>
+</verify>
+</testcase>
diff --git a/tests/data/test20 b/tests/data/test20
new file mode 100644
index 0000000..57fa48d
--- /dev/null
+++ b/tests/data/test20
@@ -0,0 +1,38 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+FAILURE
+non-existing host
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+none
+</server>
+<features>
+http
+</features>
+ <name>
+attempt connect to non-existing host name
+ </name>
+ <command>
+non-existing-host.haxx.se.
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+6
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test200 b/tests/data/test200
new file mode 100644
index 0000000..8be1de0
--- /dev/null
+++ b/tests/data/test200
@@ -0,0 +1,41 @@
+<testcase>
+<info>
+<keywords>
+FILE
+</keywords>
+</info>
+
+<reply>
+<data>
+foo
+ bar
+bar
+ foo
+moo
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+file
+</server>
+ <name>
+basic file:// file
+ </name>
+ <command>
+file://localhost/%PWD/log/test200.txt
+</command>
+<file name="log/test200.txt">
+foo
+ bar
+bar
+ foo
+moo
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+</verify>
+</testcase>
diff --git a/tests/data/test2000 b/tests/data/test2000
new file mode 100644
index 0000000..d3edb16
--- /dev/null
+++ b/tests/data/test2000
@@ -0,0 +1,73 @@
+<testcase>
+<info>
+<keywords>
+FTP
+PASV
+FILE
+multiprotocol
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data nocheck="yes">
+data
+ to
+ see
+that FTP
+works
+ so does it?
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+ftp
+file
+</server>
+ <name>
+FTP RETR followed by FILE
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/2000 file://localhost/%PWD/log/test2000.txt
+</command>
+<file name="log/test2000.txt">
+foo
+ bar
+bar
+ foo
+moo
+</file>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE I
+SIZE 2000
+RETR 2000
+QUIT
+</protocol>
+<stdout>
+data
+ to
+ see
+that FTP
+works
+ so does it?
+foo
+ bar
+bar
+ foo
+moo
+</stdout>
+</verify>
+</testcase>
diff --git a/tests/data/test2001 b/tests/data/test2001
new file mode 100644
index 0000000..68c0df7
--- /dev/null
+++ b/tests/data/test2001
@@ -0,0 +1,109 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+FTP
+PASV
+FILE
+multiprotocol
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data1 nocheck="yes">
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+-foo-
+</data1>
+<data2 nocheck="yes">
+data
+ to
+ see
+that FTP
+works
+ so does it?
+</data2>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+ftp
+file
+</server>
+ <name>
+HTTP GET followed by FTP RETR followed by FILE
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/20010001 ftp://%HOSTIP:%FTPPORT/20010002 file://localhost/%PWD/log/test2001.txt
+</command>
+<file name="log/test2001.txt">
+foo
+ bar
+bar
+ foo
+moo
+</file>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /20010001 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE I
+SIZE 20010002
+RETR 20010002
+QUIT
+</protocol>
+<stdout>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+-foo-
+data
+ to
+ see
+that FTP
+works
+ so does it?
+foo
+ bar
+bar
+ foo
+moo
+</stdout>
+</verify>
+</testcase>
diff --git a/tests/data/test2002 b/tests/data/test2002
new file mode 100644
index 0000000..f39cd60
--- /dev/null
+++ b/tests/data/test2002
@@ -0,0 +1,125 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+FTP
+PASV
+FILE
+TFTP
+TFTP RRQ
+multiprotocol
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data1 nocheck="yes">
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+-foo-
+</data1>
+<data2 nocheck="yes">
+data
+ to
+ see
+that FTP
+works
+ so does it?
+</data2>
+<data3 nocheck="yes">
+a chunk of
+data
+returned
+ to TFTP client
+</data3>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+ftp
+file
+tftp
+</server>
+ <name>
+HTTP GET followed by FTP RETR followed by FILE followed by TFTP RRQ
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/20020001 ftp://%HOSTIP:%FTPPORT/20020002 file://localhost/%PWD/log/test2002.txt tftp://%HOSTIP:%TFTPPORT//20020003
+</command>
+<file name="log/test2002.txt">
+foo
+ bar
+bar
+ foo
+moo
+</file>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /20020001 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE I
+SIZE 20020002
+RETR 20020002
+opcode: 1
+filename: /20020003
+mode: octet
+QUIT
+</protocol>
+<stdout>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+-foo-
+data
+ to
+ see
+that FTP
+works
+ so does it?
+foo
+ bar
+bar
+ foo
+moo
+a chunk of
+data
+returned
+ to TFTP client
+</stdout>
+</verify>
+</testcase>
diff --git a/tests/data/test2003 b/tests/data/test2003
new file mode 100644
index 0000000..57c0d24
--- /dev/null
+++ b/tests/data/test2003
@@ -0,0 +1,162 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+FTP
+PASV
+FILE
+TFTP
+TFTP RRQ
+multiprotocol
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data1 nocheck="yes">
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+-foo-
+</data1>
+<data2 nocheck="yes">
+data
+ to
+ see
+that FTP
+works
+ so does it?
+</data2>
+<data3 nocheck="yes">
+a chunk of
+data
+returned
+ to TFTP client
+</data3>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+ftp
+file
+tftp
+</server>
+ <name>
+HTTP GET followed by FTP RETR followed by FILE followed by TFTP RRQ then again in reverse order
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/20030001 ftp://%HOSTIP:%FTPPORT/20030002 file://localhost/%PWD/log/test2003.txt tftp://%HOSTIP:%TFTPPORT//20030003 tftp://%HOSTIP:%TFTPPORT//20030003 file://localhost/%PWD/log/test2003.txt ftp://%HOSTIP:%FTPPORT/20030002 http://%HOSTIP:%HTTPPORT/20030001
+</command>
+<file name="log/test2003.txt">
+foo
+ bar
+bar
+ foo
+moo
+</file>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /20030001 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE I
+SIZE 20030002
+RETR 20030002
+opcode: 1
+filename: /20030003
+mode: octet
+opcode: 1
+filename: /20030003
+mode: octet
+EPSV
+SIZE 20030002
+RETR 20030002
+GET /20030001 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+QUIT
+</protocol>
+<stdout>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+-foo-
+data
+ to
+ see
+that FTP
+works
+ so does it?
+foo
+ bar
+bar
+ foo
+moo
+a chunk of
+data
+returned
+ to TFTP client
+a chunk of
+data
+returned
+ to TFTP client
+foo
+ bar
+bar
+ foo
+moo
+data
+ to
+ see
+that FTP
+works
+ so does it?
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+-foo-
+</stdout>
+</verify>
+</testcase>
diff --git a/tests/data/test2004 b/tests/data/test2004
new file mode 100644
index 0000000..bad6f7b
--- /dev/null
+++ b/tests/data/test2004
@@ -0,0 +1,72 @@
+<testcase>
+<info>
+<keywords>
+TFTP
+TFTP RRQ
+FILE
+SFTP
+SCP
+multiprotocol
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data nocheck="yes">
+Test data file
+for tftp test
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+tftp
+sftp
+</server>
+ <name>
+TFTP RRQ followed by SFTP retrieval followed by FILE followed by SCP retrieval then again in reverse order
+ </name>
+ <command>
+--key curl_client_key --pubkey curl_client_key.pub -u %USER: tftp://%HOSTIP:%TFTPPORT//2004 sftp://%HOSTIP:%SSHPORT%PWD/log/test2004.txt file://localhost/%PWD/log/test2004.txt scp://%HOSTIP:%SSHPORT%PWD/log/test2004.txt file://localhost/%PWD/log/test2004.txt sftp://%HOSTIP:%SSHPORT%PWD/log/test2004.txt tftp://%HOSTIP:%TFTPPORT//2004 --insecure
+</command>
+<file name="log/test2004.txt">
+This is test data
+for several protocols
+</file>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+opcode: 1
+filename: /2004
+mode: octet
+opcode: 1
+filename: /2004
+mode: octet
+</protocol>
+<stdout>
+Test data file
+for tftp test
+This is test data
+for several protocols
+This is test data
+for several protocols
+This is test data
+for several protocols
+This is test data
+for several protocols
+This is test data
+for several protocols
+Test data file
+for tftp test
+</stdout>
+<valgrind>
+disable
+</valgrind>
+</verify>
+</testcase>
diff --git a/tests/data/test201 b/tests/data/test201
new file mode 100644
index 0000000..eb24224
--- /dev/null
+++ b/tests/data/test201
@@ -0,0 +1,27 @@
+<testcase>
+# Server-side
+<reply>
+<data>
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+file
+</server>
+ <name>
+missing file:// file
+ </name>
+ <command>
+file://localhost/%PWD/log/non-existant-file.txt
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+37
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test202 b/tests/data/test202
new file mode 100644
index 0000000..5178470
--- /dev/null
+++ b/tests/data/test202
@@ -0,0 +1,31 @@
+<testcase>
+# Server-side
+<reply>
+<data>
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+file
+</server>
+ <name>
+two file:// URLs to stdout
+ </name>
+ <command>
+file://localhost/%PWD/log/test202.txt FILE://localhost/%PWD/log/test202.txt
+</command>
+<file name="log/test202.txt">
+contents in a single file
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<stdout>
+contents in a single file
+contents in a single file
+</stdout>
+</verify>
+</testcase>
diff --git a/tests/data/test203 b/tests/data/test203
new file mode 100644
index 0000000..c7cdce5
--- /dev/null
+++ b/tests/data/test203
@@ -0,0 +1,36 @@
+<testcase>
+# Server-side
+<reply>
+<data>
+foo
+ bar
+bar
+ foo
+moo
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+file
+</server>
+ <name>
+file:/path URL with a single slash
+ </name>
+ <command>
+file:%PWD/log/test203.txt
+</command>
+<file name="log/test203.txt">
+foo
+ bar
+bar
+ foo
+moo
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+</verify>
+</testcase>
diff --git a/tests/data/test204 b/tests/data/test204
new file mode 100644
index 0000000..c4e219e
--- /dev/null
+++ b/tests/data/test204
@@ -0,0 +1,34 @@
+<testcase>
+# no Server-side
+
+# Client-side
+<client>
+<server>
+file
+</server>
+ <name>
+"upload" with file://
+ </name>
+ <command>
+file://localhost/%PWD/log/result204.txt -T log/upload204.txt
+</command>
+<file name="log/upload204.txt">
+data
+in
+file
+to
+write
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<file name="log/result204.txt">
+data
+in
+file
+to
+write
+</file>
+</verify>
+</testcase>
diff --git a/tests/data/test205 b/tests/data/test205
new file mode 100644
index 0000000..edcf7fe
--- /dev/null
+++ b/tests/data/test205
@@ -0,0 +1,31 @@
+<testcase>
+# no Server-side
+
+# Client-side
+<client>
+<server>
+file
+</server>
+ <name>
+"upload" with file://
+ </name>
+ <command>
+file://localhost/%PWD/log/nonexisting/result205.txt -T log/upload205.txt
+</command>
+<file name="log/upload205.txt">
+data
+in
+file
+to
+write
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+# 23 => CURLE_WRITE_ERROR
+<errorcode>
+23
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test206 b/tests/data/test206
new file mode 100644
index 0000000..caf9113
--- /dev/null
+++ b/tests/data/test206
@@ -0,0 +1,100 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP CONNECT
+HTTP proxy
+proxytunnel
+HTTP proxy Digest auth
+</keywords>
+</info>
+
+# Server-side
+<reply>
+
+# this is returned first since we get no proxy-auth
+<data>
+HTTP/1.1 407 Authorization Required to proxy me my dear
+Proxy-Authenticate: Digest realm="weirdorealm", nonce="12345"
+
+And you should ignore this data.
+</data>
+
+# this is returned when we get a GET!
+<data2>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 7
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+daniel
+</data2>
+
+# then this is returned when we get proxy-auth
+<data1000>
+HTTP/1.1 200 OK swsbounce
+Server: no
+
+Nice proxy auth sir!
+</data1000>
+
+<datacheck>
+HTTP/1.1 407 Authorization Required to proxy me my dear
+Proxy-Authenticate: Digest realm="weirdorealm", nonce="12345"
+
+HTTP/1.1 200 OK swsbounce
+Server: no
+
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 7
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+daniel
+</datacheck>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+<features>
+crypto
+</features>
+ <name>
+HTTP proxy CONNECT auth Digest
+ </name>
+ <command>
+http://test.remote.haxx.se:206/path/2060002 --proxy http://%HOSTIP:%HTTPPORT --proxy-user silly:person --proxy-digest --proxytunnel
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent: curl/.*
+</strip>
+<protocol>
+CONNECT test.remote.haxx.se:206 HTTP/1.1
+Host: test.remote.haxx.se:206
+Proxy-Connection: Keep-Alive
+
+CONNECT test.remote.haxx.se:206 HTTP/1.1
+Host: test.remote.haxx.se:206
+Proxy-Authorization: Digest username="silly", realm="weirdorealm", nonce="12345", uri="test.remote.haxx.se:206", response="676e0836f3e1c5b31bf29770ef9d8224"
+Proxy-Connection: Keep-Alive
+
+GET /path/2060002 HTTP/1.1
+User-Agent: curl/7.12.3-CVS (i686-pc-linux-gnu) libcurl/7.12.3-CVS OpenSSL/0.9.6b zlib/1.1.4
+Host: test.remote.haxx.se:206
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test207 b/tests/data/test207
new file mode 100644
index 0000000..c2eff63
--- /dev/null
+++ b/tests/data/test207
@@ -0,0 +1,58 @@
+<testcase>
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 funky chunky! swsclose
+Server: fakeit/0.9 fakeitbad/1.0
+Transfer-Encoding: chunked
+Connection: mooo
+
+41
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+
+</data>
+<datacheck>
+HTTP/1.1 200 funky chunky! swsclose
+Server: fakeit/0.9 fakeitbad/1.0
+Transfer-Encoding: chunked
+Connection: mooo
+
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+</datacheck>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP GET with chunked Transfer-Encoding closed pre-maturely
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/207
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /207 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+
+# curl: (18) transfer closed with outstanding read data remaining
+# 18 == CURLE_PARTIAL_FILE
+<errorcode>
+18
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test208 b/tests/data/test208
new file mode 100644
index 0000000..a7a99b9
--- /dev/null
+++ b/tests/data/test208
@@ -0,0 +1,75 @@
+<testcase>
+<info>
+<keywords>
+FTP
+HTTP
+HTTP PUT
+HTTP proxy
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+HTTP/1.0 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+
+blablabla
+
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+<features>
+ftp
+</features>
+ <name>
+HTTP PUT to a FTP URL with username+password - over HTTP proxy
+ </name>
+ <command>
+-x http://%HOSTIP:%HTTPPORT ftp://daniel:mysecret@host.com/we/want/208 -T log/test208.txt
+</command>
+<file name="log/test208.txt">
+Weird
+ file
+ to
+ upload
+for
+ testing
+the
+ PUT
+ feature
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+PUT ftp://daniel:mysecret@host.com/we/want/208 HTTP/1.1
+Authorization: Basic ZGFuaWVsOm15c2VjcmV0
+Host: host.com:21
+Accept: */*
+Proxy-Connection: Keep-Alive
+Content-Length: 78
+Expect: 100-continue
+
+Weird
+ file
+ to
+ upload
+for
+ testing
+the
+ PUT
+ feature
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test209 b/tests/data/test209
new file mode 100644
index 0000000..81cdcbd
--- /dev/null
+++ b/tests/data/test209
@@ -0,0 +1,119 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP CONNECT
+HTTP proxy
+HTTP proxy NTLM auth
+</keywords>
+</info>
+
+# Server-side
+<reply>
+
+# this is returned first since we get no proxy-auth
+<data1001>
+HTTP/1.1 407 Authorization Required to proxy me my dear
+Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+And you should ignore this data.
+</data1001>
+
+# This is supposed to be returned when the server gets the second
+# Authorization: NTLM line passed-in from the client
+<data1002>
+HTTP/1.1 200 Things are fine in proxy land
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+
+</data1002>
+
+# this is returned when we get a GET!
+<data2>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 7
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+daniel
+</data2>
+
+# then this is returned when we get proxy-auth
+<data1000>
+HTTP/1.1 200 OK swsbounce
+Server: no
+
+Nice proxy auth sir!
+</data1000>
+
+<datacheck>
+HTTP/1.1 407 Authorization Required to proxy me my dear
+Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+HTTP/1.1 200 Things are fine in proxy land
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 7
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+daniel
+</datacheck>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+<features>
+NTLM
+</features>
+ <name>
+HTTP proxy CONNECT auth NTLM
+ </name>
+ <setenv>
+# we force our own host name, in order to make the test machine independent
+CURL_GETHOSTNAME=curlhost
+# we try to use the LD_PRELOAD hack, if not a debug build
+LD_PRELOAD=%PWD/libtest/.libs/libhostname.so
+ </setenv>
+ <command>
+http://test.remote.haxx.se:209/path/2090002 --proxy http://%HOSTIP:%HTTPPORT --proxy-user silly:person --proxy-ntlm --proxytunnel
+</command>
+<precheck>
+chkhostname curlhost
+</precheck>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent: curl/.*
+</strip>
+<protocol>
+CONNECT test.remote.haxx.se:209 HTTP/1.1
+Host: test.remote.haxx.se:209
+Proxy-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+Proxy-Connection: Keep-Alive
+
+CONNECT test.remote.haxx.se:209 HTTP/1.1
+Host: test.remote.haxx.se:209
+Proxy-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAABQAFAHAAAAAIAAgAdQAAAAAAAAAAAAAABoKBAKAeQjzKtCQ7ubW8S6MN7B59436GAxPu0CVROwwNBsgxML49gcbAXLT/bU+H5wrS9XNpbGx5Y3VybGhvc3Q=
+Proxy-Connection: Keep-Alive
+
+GET /path/2090002 HTTP/1.1
+User-Agent: curl/7.12.3-CVS (i686-pc-linux-gnu) libcurl/7.12.3-CVS OpenSSL/0.9.6b zlib/1.1.4
+Host: test.remote.haxx.se:209
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test21 b/tests/data/test21
new file mode 100644
index 0000000..8e4e847
--- /dev/null
+++ b/tests/data/test21
@@ -0,0 +1,33 @@
+<testcase>
+<info>
+<keywords>
+FAILURE
+multiple HTTP requests
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+use curl with multiple request methods
+ </name>
+ <command>
+-I -d FOOO -F moo=moo localhost
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+2
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test210 b/tests/data/test210
new file mode 100644
index 0000000..83c9b3e
--- /dev/null
+++ b/tests/data/test210
@@ -0,0 +1,46 @@
+<testcase>
+# Server-side
+<reply>
+<data>
+data blobb
+</data>
+
+# data is sent to stdout
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+Get two FTP files from the same remote dir: no second CWD
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/a/path/210 ftp://%HOSTIP:%FTPPORT/a/path/210
+</command>
+<stdout>
+data blobb
+data blobb
+</stdout>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+CWD a
+CWD path
+EPSV
+TYPE I
+SIZE 210
+RETR 210
+EPSV
+SIZE 210
+RETR 210
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test211 b/tests/data/test211
new file mode 100644
index 0000000..0214eff
--- /dev/null
+++ b/tests/data/test211
@@ -0,0 +1,48 @@
+<testcase>
+# Server-side
+<reply>
+<data>
+data blobb
+</data>
+<servercmd>
+REPLY EPSV 500 no such command
+</servercmd>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+Get two FTP files with no remote EPSV support
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/a/path/211 ftp://%HOSTIP:%FTPPORT/a/path/211
+</command>
+<stdout>
+data blobb
+data blobb
+</stdout>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+CWD a
+CWD path
+EPSV
+PASV
+TYPE I
+SIZE 211
+RETR 211
+PASV
+SIZE 211
+RETR 211
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test212 b/tests/data/test212
new file mode 100644
index 0000000..8a10abf
--- /dev/null
+++ b/tests/data/test212
@@ -0,0 +1,57 @@
+<testcase>
+# Server-side
+<reply>
+<data>
+data blobb
+</data>
+<servercmd>
+REPLY EPRT 500 no such command
+</servercmd>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+# EPRT is only sent when IPv6 is enabled
+<features>
+ipv6
+</features>
+ <name>
+Get two FTP files with no remote EPRT support
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/a/path/212 ftp://%HOSTIP:%FTPPORT/a/path/212 -P -
+</command>
+<stdout>
+data blobb
+data blobb
+</stdout>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+# Strip the addresses and port number but leave the rest
+<strippart>
+s/^(EPRT \|1\|)\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\|\d{1,5}\|/$1/
+s/^(PORT )\d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3}/$1/
+</strippart>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+CWD a
+CWD path
+EPRT |1|
+PORT
+TYPE I
+SIZE 212
+RETR 212
+PORT
+SIZE 212
+RETR 212
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test213 b/tests/data/test213
new file mode 100644
index 0000000..bb7763b
--- /dev/null
+++ b/tests/data/test213
@@ -0,0 +1,122 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP POST
+HTTP CONNECT
+HTTP proxy
+HTTP proxy NTLM auth
+</keywords>
+</info>
+
+# Server-side
+<reply>
+
+# this is returned first since we get no proxy-auth
+<data1001>
+HTTP/1.1 407 Authorization Required to proxy me my dear
+Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+And you should ignore this data.
+</data1001>
+
+# This is supposed to be returned when the server gets the second
+# Authorization: NTLM line passed-in from the client
+<data1002>
+HTTP/1.1 200 Things are fine in proxy land
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+
+</data1002>
+
+# this is returned when we get a GET!
+<data2>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 7
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+daniel
+</data2>
+
+# then this is returned when we get proxy-auth
+<data1000>
+HTTP/1.1 200 OK swsbounce
+Server: no
+
+Nice proxy auth sir!
+</data1000>
+
+<datacheck>
+HTTP/1.1 407 Authorization Required to proxy me my dear
+Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+HTTP/1.1 200 Things are fine in proxy land
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 7
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+daniel
+</datacheck>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+<features>
+NTLM
+</features>
+ <name>
+HTTP 1.0 proxy CONNECT auth NTLM and then POST
+ </name>
+ <setenv>
+# we force our own host name, in order to make the test machine independent
+CURL_GETHOSTNAME=curlhost
+# we try to use the LD_PRELOAD hack, if not a debug build
+LD_PRELOAD=%PWD/libtest/.libs/libhostname.so
+ </setenv>
+ <command>
+http://test.remote.haxx.se:213/path/2130002 --proxy1.0 http://%HOSTIP:%HTTPPORT --proxy-user silly:person --proxy-ntlm --proxytunnel -d "postit"
+</command>
+<precheck>
+chkhostname curlhost
+</precheck>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent: curl/.*
+</strip>
+<protocol nonewline="yes">
+CONNECT test.remote.haxx.se:213 HTTP/1.0
+Host: test.remote.haxx.se:213
+Proxy-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+Proxy-Connection: Keep-Alive
+
+CONNECT test.remote.haxx.se:213 HTTP/1.0
+Host: test.remote.haxx.se:213
+Proxy-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAABQAFAHAAAAAIAAgAdQAAAAAAAAAAAAAABoKBAKAeQjzKtCQ7ubW8S6MN7B59436GAxPu0CVROwwNBsgxML49gcbAXLT/bU+H5wrS9XNpbGx5Y3VybGhvc3Q=
+Proxy-Connection: Keep-Alive
+
+POST /path/2130002 HTTP/1.1
+User-Agent: curl/7.12.3-CVS (i686-pc-linux-gnu) libcurl/7.12.3-CVS OpenSSL/0.9.6b zlib/1.1.4
+Host: test.remote.haxx.se:213
+Accept: */*
+Content-Length: 6
+Content-Type: application/x-www-form-urlencoded
+
+postit
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test214 b/tests/data/test214
new file mode 100644
index 0000000..e12dfbf
--- /dev/null
+++ b/tests/data/test214
@@ -0,0 +1,44 @@
+<testcase>
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 6
+Content-Type: text/html
+Funny-head: yesyes
+
+-foo-
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP URL with escaped { and }
+ </name>
+<command>
+"http://%HOSTIP:%HTTPPORT/\{\}\/214"
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /{}\/214 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+
+</verify>
+</testcase>
diff --git a/tests/data/test215 b/tests/data/test215
new file mode 100644
index 0000000..5005817
--- /dev/null
+++ b/tests/data/test215
@@ -0,0 +1,52 @@
+<testcase>
+# Server-side
+<reply>
+# When doing LIST, we get the default list output hard-coded in the test
+# FTP server
+<datacheck>
+total 20
+drwxr-xr-x 8 98 98 512 Oct 22 13:06 .
+drwxr-xr-x 8 98 98 512 Oct 22 13:06 ..
+drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT
+-r--r--r-- 1 0 1 35 Jul 16 1996 README
+lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin
+dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev
+drwxrwxrwx 2 98 98 512 May 29 16:04 download.html
+dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc
+drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub
+dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr
+</datacheck>
+
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+Get two FTP dir listings from the same remote dir: no second CWD
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/a/path/215/ ftp://%HOSTIP:%FTPPORT/a/path/215/
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+CWD a
+CWD path
+CWD 215
+EPSV
+TYPE A
+LIST
+EPSV
+LIST
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test216 b/tests/data/test216
new file mode 100644
index 0000000..a8264ce
--- /dev/null
+++ b/tests/data/test216
@@ -0,0 +1,39 @@
+<testcase>
+# Server-side
+<reply>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP upload two files to the same dir
+ </name>
+ <command>
+-T log/upload.216 ftp://%HOSTIP:%FTPPORT/a/path/216/ -T log/upload.216 ftp://%HOSTIP:%FTPPORT/a/path/216/%2e%2eanotherup
+</command>
+<file name="log/upload.216">
+upload this file twice
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+CWD a
+CWD path
+CWD 216
+EPSV
+TYPE I
+STOR upload.216
+EPSV
+STOR ..anotherup
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test217 b/tests/data/test217
new file mode 100644
index 0000000..f288008
--- /dev/null
+++ b/tests/data/test217
@@ -0,0 +1,60 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP CONNECT
+HTTP proxy
+proxytunnel
+followlocation
+--write-out
+</keywords>
+</info>
+
+# Server-side
+<reply>
+
+# this is returned first since we get no proxy-auth
+<data nocheck="yes">
+HTTP/1.1 405 Method Not Allowed swsclose
+
+And you should ignore this data.
+</data>
+
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP proxy CONNECT to proxy returning 405
+ </name>
+ <command>
+http://test.remote.haxx.se:217/path/2170002 --proxy http://%HOSTIP:%HTTPPORT --proxytunnel -w "%{http_code} %{http_connect}\n"
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent: curl/.*
+</strip>
+<protocol>
+CONNECT test.remote.haxx.se:217 HTTP/1.1
+Host: test.remote.haxx.se:217
+Proxy-Connection: Keep-Alive
+
+</protocol>
+# CURLE_RECV_ERROR
+<errorcode>
+56
+</errorcode>
+<stdout>
+HTTP/1.1 405 Method Not Allowed swsclose
+
+000 405
+</stdout>
+</verify>
+</testcase>
diff --git a/tests/data/test218 b/tests/data/test218
new file mode 100644
index 0000000..dc146fc
--- /dev/null
+++ b/tests/data/test218
@@ -0,0 +1,52 @@
+<testcase>
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.0 200 OK
+Server: test-server/fake
+Content-Type: text/html
+Content-Length: 6
+
+blaha
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP PUT from a file but enforce chunked transfer-encoding
+ </name>
+ <command>
+ -T log/file218 -H "Transfer-Encoding: chunked" http://%HOSTIP:%HTTPPORT/218
+</command>
+<file name="log/file218">
+just some tiny teeny contents
+</file>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+PUT /218 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Transfer-Encoding: chunked
+Expect: 100-continue
+
+1e
+just some tiny teeny contents
+
+0
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test22 b/tests/data/test22
new file mode 100644
index 0000000..734379e
--- /dev/null
+++ b/tests/data/test22
@@ -0,0 +1,46 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP PUT
+long URL
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Funny-head: yesyes
+Content-Length: 27
+
+This is the proof it works
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+get HTTP with URL > 10000 bytes
+ </name>
+ <command>
+%HOSTIP:%HTTPPORT/`perl -e "print \"a\" x 10000;"`/22
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent: curl/.*
+</strip>
+<protocol>
+GET /aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/22 HTTP/1.1
+User-Agent: curl/7.4.2 (sparc-sun-solaris2.7) libcurl 7.4.2 (SSL 0.9.6)
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test220 b/tests/data/test220
new file mode 100644
index 0000000..2fb0b8a
--- /dev/null
+++ b/tests/data/test220
@@ -0,0 +1,68 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+compressed
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+<data base64="yes">
+SFRUUC8xLjEgMjAwIE9LDQpEYXRlOiBNb24sIDI5IE5vdiAyMDA0IDIxOjU2OjUzIEdNVA0KU2Vy
+dmVyOiBBcGFjaGUvMS4zLjMxIChEZWJpYW4gR05VL0xpbnV4KSBtb2RfZ3ppcC8xLjMuMjYuMWEg
+UEhQLzQuMy45LTEgbW9kX3NzbC8yLjguMjAgT3BlblNTTC8wLjkuN2QgbW9kX3BlcmwvMS4yOQ0K
+VmFyeTogQWNjZXB0LUVuY29kaW5nDQpDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1J
+U08tODg1OS0xDQpDb250ZW50LUVuY29kaW5nOiBHWklQDQpDb250ZW50LUxlbmd0aDogNDQNCg0K
+H4sICHmeq0EAA2xhbGFsYQDLycxLVTDkUsgB0UZcChCGMRcACgJxYBgAAAA=
+</data>
+
+<datacheck>
+HTTP/1.1 200 OK
+Date: Mon, 29 Nov 2004 21:56:53 GMT
+Server: Apache/1.3.31 (Debian GNU/Linux) mod_gzip/1.3.26.1a PHP/4.3.9-1 mod_ssl/2.8.20 OpenSSL/0.9.7d mod_perl/1.29
+Vary: Accept-Encoding
+Content-Type: text/html; charset=ISO-8859-1
+Content-Encoding: GZIP
+Content-Length: 44
+
+line 1
+ line 2
+ line 3
+</datacheck>
+
+</reply>
+
+#
+# Client-side
+<client>
+<features>
+libz
+</features>
+<server>
+http
+</server>
+ <name>
+HTTP GET gzip compressed content
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/220 --compressed
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /220 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Accept-Encoding: deflate, gzip
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test221 b/tests/data/test221
new file mode 100644
index 0000000..95edb49
--- /dev/null
+++ b/tests/data/test221
@@ -0,0 +1,71 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+compressed
+FAILURE
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+<data base64="yes">
+SFRUUC8xLjEgMjAwIE9LDQpEYXRlOiBNb24sIDI5IE5vdiAyMDA0IDIxOjU2OjUzIEdNVA0KU2Vy
+dmVyOiBBcGFjaGUvMS4zLjMxIChEZWJpYW4gR05VL0xpbnV4KSBtb2RfZ3ppcC8xLjMuMjYuMWEg
+UEhQLzQuMy45LTEgbW9kX3NzbC8yLjguMjAgT3BlblNTTC8wLjkuN2QgbW9kX3BlcmwvMS4yOQ0K
+VmFyeTogQWNjZXB0LUVuY29kaW5nDQpDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1J
+U08tODg1OS0xDQpDb250ZW50LUVuY29kaW5nOiBnemlwDQpDb250ZW50LUxlbmd0aDogNDENCg0K
+CHmeq0EAA2xhbGFsYQDLycxLVTDkUsgB0UZcChCGMRcACgJxYBgAAAA=
+</data>
+
+# I removed the first three bytes of the gzip compressed contents
+
+<datacheck>
+HTTP/1.1 200 OK
+Date: Mon, 29 Nov 2004 21:56:53 GMT
+Server: Apache/1.3.31 (Debian GNU/Linux) mod_gzip/1.3.26.1a PHP/4.3.9-1 mod_ssl/2.8.20 OpenSSL/0.9.7d mod_perl/1.29
+Vary: Accept-Encoding
+Content-Type: text/html; charset=ISO-8859-1
+Content-Encoding: gzip
+Content-Length: 41
+
+</datacheck>
+
+</reply>
+
+#
+# Client-side
+<client>
+<features>
+libz
+</features>
+<server>
+http
+</server>
+ <name>
+HTTP GET gzip compressed content with broken gzip header
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/221 --compressed
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /221 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Accept-Encoding: deflate, gzip
+
+</protocol>
+<errorcode>
+61
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test222 b/tests/data/test222
new file mode 100644
index 0000000..a459486
--- /dev/null
+++ b/tests/data/test222
@@ -0,0 +1,199 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+compressed
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+<data base64="yes">
+SFRUUC8xLjEgMjAwIE9LDQpEYXRlOiBNb24sIDI5IE5vdiAyMDA0IDIxOjU2OjUzIEdNVA0KU2Vy
+dmVyOiBBcGFjaGUvMS4zLjMxIChEZWJpYW4gR05VL0xpbnV4KSBtb2RfZ3ppcC8xLjMuMjYuMWEg
+UEhQLzQuMy45LTEgbW9kX3NzbC8yLjguMjAgT3BlblNTTC8wLjkuN2QgbW9kX3BlcmwvMS4yOQ0K
+VmFyeTogQWNjZXB0LUVuY29kaW5nDQpDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1J
+U08tODg1OS0xDQpDb250ZW50LUVuY29kaW5nOiBkZWZsYXRlDQpDb250ZW50LUxlbmd0aDogMTMw
+NQ0KDQp4nNxY227jNhB9N5B/YP3UArZuthM5cLQoctkEzTbB2gW6TwYt0TYbSRRIyrk89Ns7lCiJ
+sRyvd4O+BEhicuacw+EMSZOZfHpKYrQhXFCWnnVdy+kikoYsounqrHszvev7/mjcd7ufgs7kl4u7
+89m3+0uUcfYPCWU/pkICEE2/TWeXX1B3LWV2attLTsQ6IVhaKZH2AocPJI3sZdLXPNF3rKEVyagL
+oltaQQehyqbaTW9Oo8A9dr2JbRhKRIQlmeMoIoAYj/2+4/c9FznDU8c99cYT2/AbhDxTH1HgOc6w
+7zp910eOd+rBz0BTKsSrOFKckLlYMy6DMOdxHY5hb+OXeRwXcITTCMV00aYWEB0eEaGWOmdJUlJS
+giRjtQDH/BktGUdhTEkq+4JGBP319RZJjlOxhIpaMItGyFDeGQyiAuFyBKVaqXBV3yWNiTjq5EJ1
+1BjiOZX4yUI3Eok8y0BfoOvZ7L5X/J320BW0jzpXRfvi5nzWQ7PL2z8v4fP24neAXd3cXvaK4T/f
+3V9ffoU2DPBIYoiplOpnTMiebubQChl7oEQU2ijPYoYjGAKWWp6QqJl1D2VYiEfGI9WEyNI8WRT2
+6fT2qBMSLumShlBXMP1BOPiYKEOBajzBCMW0IBsZeyScREedxXOVpB6Sa/JmxquyWEed2RqoCMPv
+gqZqMwlIbZ1qlWAGmw55zlEnxukqxysiihhIuqGcpQkMIEBHl9BYGxsqcUzl81yEjJNgdOIPrdHJ
+xN6yb4EzwkOQDAaWe2xgK/MWGubzAHttbCALk17XLMtjzJuxjkdjiGEIy3nb0yJUA7oDy3dfEV6H
+YjjKYJzRK7QRDsfFueFbI2di647pmYcsB13Prbza8ApTDuIPaowxgMgXIuQ0k3BEimCgTofXphIG
+pU/D9Vzt5eCCLHEey4ltGksY1H9eHWAZlD3YeWhWJ6Wt1os9sVusRmzNEvK2ECxgyksVdXjaJkPr
+1gKNply9HC4HYK2kaI3I4sU7XATAWkTRGpEXmh0uAmAtomiNSLiGPUZitjpcqqZowUaikeVZcrgg
+gLWUojUiEVkcLgJgLaJojQgTT4eLAFiLKJpRLxGp8/IHalYSqrppurHMcw5pEyTQ67fqGoXZiB8o
+yUZUxdgIQ0TdHA5XUWgtUxAbnYRyzvjhSiVea2myWdeEBVWtoFl6YgqHHKTgy83M/hudw+kBKaN5
+gm5Lx8SuEBqvvqfknJOY1Jlrmef6/hacWK5nwQXpDfcbbHWvOjl2/FGLWF2w2hx1L9p9cdoFLOdi
+75rMBM5RAhNeMzmXa/iqhpy1TCUS5xJuMqIOqexX3dqgT2CcUhKjqSQpfMOvJrbpbFGgSrvr/u8C
+ryKiimwgW3TOYhLcPaaE17jCVEVqm6FWvWoJqy94ThOaYmnOTnK4IRS1gYLWnZbX8473uQd7ufuc
+ru/v5bp7x4WlsT/qvW73eLjPPd5L9sd7vc5etzv6TtzfCWx/ZIPW2OX9brv8sCYyeDLBQwyuo7VO
+bXxG8jkjZ11OQngdKJt6SdWLssGZG9lRQ+1y7CTqewu4T4aqGDtdO5nG46xF3X64vcWVVKoNBXa4
+s6Nf9W3qt51aJbbeaQ3i7byx4t6G4/8vac5PZ2w4eGfG1Pvq4yfK9QYj9x2ZeoGn2MfP0sBzhifv
+yNI1oUmE44+fqOFwNPDekaiwD0998TN5Miz6rK//KxR0/gMAAP//gjMRo2MAAAAA//8DAN04jtE=
+</data>
+
+<datacheck>
+HTTP/1.1 200 OK
+Date: Mon, 29 Nov 2004 21:56:53 GMT
+Server: Apache/1.3.31 (Debian GNU/Linux) mod_gzip/1.3.26.1a PHP/4.3.9-1 mod_ssl/2.8.20 OpenSSL/0.9.7d mod_perl/1.29
+Vary: Accept-Encoding
+Content-Type: text/html; charset=ISO-8859-1
+Content-Encoding: deflate
+Content-Length: 1305
+
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE project-listing SYSTEM "http://freshmeat.net/backend/fm-projects-0.4.dtd">
+<project-listing>
+ <project>
+ <project_id>1612</project_id>
+ <date_added>1998-08-21 04:01:29</date_added>
+ <date_updated>2004-10-18 02:22:23</date_updated>
+ <projectname_short>curl</projectname_short>
+ <projectname_full>curl and libcurl</projectname_full>
+ <desc_short>Command line tool and library for client-side URL transfers.</desc_short>
+ <desc_full>curl and libcurl is a tool for transferring files
+using URL syntax. It supports HTTP, HTTPS, FTP,
+FTPS, DICT, TELNET, LDAP, FILE, and GOPHER, as
+well as HTTP-post, HTTP-put, cookies, FTP upload,
+resumed transfers, passwords, portnumbers, SSL
+certificates, Kerberos, and proxies. It is powered
+by libcurl, the client-side URL transfer library.
+There are bindings to libcurl for over 20
+languages and environments.
+</desc_full>
+ <vitality_score>5784.57</vitality_score>
+ <vitality_percent>3.16</vitality_percent>
+ <vitality_rank>169</vitality_rank>
+ <popularity_score>6594.54</popularity_score>
+ <popularity_percent>13.81</popularity_percent>
+ <popularity_rank>105</popularity_rank>
+ <rating>8.50</rating>
+ <rating_count>21</rating_count>
+ <rating_rank>183</rating_rank>
+ <subscriptions>323</subscriptions>
+ <branch_name>Default</branch_name>
+ <url_project_page>http://freshmeat.net/projects/curl/</url_project_page>
+ <url_homepage>http://freshmeat.net/redir/curl/1612/url_homepage/</url_homepage>
+ <url_tgz>http://freshmeat.net/redir/curl/1612/url_tgz/</url_tgz>
+ <url_bz2>http://freshmeat.net/redir/curl/1612/url_bz2/</url_bz2>
+ <url_zip>http://freshmeat.net/redir/curl/1612/url_zip/</url_zip>
+ <url_changelog>http://freshmeat.net/redir/curl/1612/url_changelog/</url_changelog>
+ <url_rpm>http://freshmeat.net/redir/curl/1612/url_rpm/</url_rpm>
+ <url_deb>http://freshmeat.net/redir/curl/1612/url_deb/</url_deb>
+ <url_osx>http://freshmeat.net/redir/curl/1612/url_osx/</url_osx>
+ <url_bsdport>http://freshmeat.net/redir/curl/1612/url_bsdport/</url_bsdport>
+ <url_purchase></url_purchase>
+ <url_cvs>http://freshmeat.net/redir/curl/1612/url_cvs/</url_cvs>
+ <url_list>http://freshmeat.net/redir/curl/1612/url_list/</url_list>
+ <url_mirror>http://freshmeat.net/redir/curl/1612/url_mirror/</url_mirror>
+ <url_demo></url_demo>
+ <license>MIT/X Consortium License</license>
+ <latest_release>
+ <latest_release_version>7.12.2</latest_release_version>
+ <latest_release_id>176085</latest_release_id>
+ <latest_release_date>2004-10-18 02:22:23</latest_release_date>
+ </latest_release>
+ <screenshot_thumb></screenshot_thumb>
+ <authors>
+ <author>
+ <author_name>Daniel Stenberg</author_name>
+ <author_url>http://freshmeat.net/~bagder/</author_url>
+ <author_role>Owner</author_role>
+ </author>
+ </authors>
+ <descriminators>
+ <trove_id>12</trove_id>
+ <trove_id>226</trove_id>
+ <trove_id>3</trove_id>
+ <trove_id>2</trove_id>
+ <trove_id>188</trove_id>
+ <trove_id>216</trove_id>
+ <trove_id>200</trove_id>
+ <trove_id>220</trove_id>
+ <trove_id>164</trove_id>
+ <trove_id>90</trove_id>
+ <trove_id>89</trove_id>
+ <trove_id>809</trove_id>
+ <trove_id>150</trove_id>
+ <trove_id>224</trove_id>
+ <trove_id>900</trove_id>
+ <trove_id>839</trove_id>
+ </descriminators>
+ <dependencies>
+ <dependency type="recommended">
+ <dependency_release_id>0</dependency_release_id>
+ <dependency_branch_id>7464</dependency_branch_id>
+ <dependency_project_id>7464</dependency_project_id>
+ <dependency_project_title>OpenSSL (Default)</dependency_project_title>
+ </dependency>
+ <dependency type="optional">
+ <dependency_release_id>0</dependency_release_id>
+ <dependency_branch_id>0</dependency_branch_id>
+ <dependency_project_id>7443</dependency_project_id>
+ <dependency_project_title>OpenLDAP</dependency_project_title>
+ </dependency>
+ <dependency type="optional">
+ <dependency_release_id>0</dependency_release_id>
+ <dependency_branch_id>0</dependency_branch_id>
+ <dependency_project_id>12351</dependency_project_id>
+ <dependency_project_title>zlib</dependency_project_title>
+ </dependency>
+ <dependency type="optional">
+ <dependency_release_id>0</dependency_release_id>
+ <dependency_branch_id>0</dependency_branch_id>
+ <dependency_project_id>32047</dependency_project_id>
+ <dependency_project_title>Heimdal</dependency_project_title>
+ </dependency>
+ <dependency type="optional">
+ <dependency_release_id>0</dependency_release_id>
+ <dependency_branch_id>0</dependency_branch_id>
+ <dependency_project_id>44532</dependency_project_id>
+ <dependency_project_title>c-ares</dependency_project_title>
+ </dependency>
+ </dependencies>
+ </project>
+</project-listing>
+</datacheck>
+
+</reply>
+
+#
+# Client-side
+<client>
+<features>
+libz
+</features>
+<server>
+http
+</server>
+ <name>
+HTTP GET deflate compressed content
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/222 --compressed
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /222 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Accept-Encoding: deflate, gzip
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test223 b/tests/data/test223
new file mode 100644
index 0000000..196e78c
--- /dev/null
+++ b/tests/data/test223
@@ -0,0 +1,92 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+compressed
+FAILURE
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+# this deflate chunk has three bytes removed from the beginning
+<data base64="yes">
+SFRUUC8xLjEgMjAwIE9LDQpEYXRlOiBNb24sIDI5IE5vdiAyMDA0IDIxOjU2OjUzIEdNVA0KU2Vy
+dmVyOiBBcGFjaGUvMS4zLjMxIChEZWJpYW4gR05VL0xpbnV4KSBtb2RfZ3ppcC8xLjMuMjYuMWEg
+UEhQLzQuMy45LTEgbW9kX3NzbC8yLjguMjAgT3BlblNTTC8wLjkuN2QgbW9kX3BlcmwvMS4yOQ0K
+VmFyeTogQWNjZXB0LUVuY29kaW5nDQpDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1J
+U08tODg1OS0xDQpDb250ZW50LUVuY29kaW5nOiBkZWZsYXRlDQpDb250ZW50LUxlbmd0aDogMTMw
+NQ0KDQpY227jNhB9N5B/YP3UArZuthM5cLQoctkEzTbB2gW6TwYt0TYbSRRIyrk89Ns7lCiJsRyv
+d4O+BEhicuacw+EMSZOZfHpKYrQhXFCWnnVdy+kikoYsounqrHszvev7/mjcd7ufgs7kl4u789m3
++0uUcfYPCWU/pkICEE2/TWeXX1B3LWV2attLTsQ6IVhaKZH2AocPJI3sZdLXPNF3rKEVyagLolta
+QQehyqbaTW9Oo8A9dr2JbRhKRIQlmeMoIoAYj/2+4/c9FznDU8c99cYT2/AbhDxTH1HgOc6w7zp9
+10eOd+rBz0BTKsSrOFKckLlYMy6DMOdxHY5hb+OXeRwXcITTCMV00aYWEB0eEaGWOmdJUlJSgiRj
+tQDH/BktGUdhTEkq+4JGBP319RZJjlOxhIpaMItGyFDeGQyiAuFyBKVaqXBV3yWNiTjq5EJ11Bji
+OZX4yUI3Eok8y0BfoOvZ7L5X/J320BW0jzpXRfvi5nzWQ7PL2z8v4fP24neAXd3cXvaK4T/f3V9f
+foU2DPBIYoiplOpnTMiebubQChl7oEQU2ijPYoYjGAKWWp6QqJl1D2VYiEfGI9WEyNI8WRT26fT2
+qBMSLumShlBXMP1BOPiYKEOBajzBCMW0IBsZeyScREedxXOVpB6Sa/JmxquyWEed2RqoCMPvgqZq
+MwlIbZ1qlWAGmw55zlEnxukqxysiihhIuqGcpQkMIEBHl9BYGxsqcUzl81yEjJNgdOIPrdHJxN6y
+b4EzwkOQDAaWe2xgK/MWGubzAHttbCALk17XLMtjzJuxjkdjiGEIy3nb0yJUA7oDy3dfEV6HYjjK
+YJzRK7QRDsfFueFbI2di647pmYcsB13Prbza8ApTDuIPaowxgMgXIuQ0k3BEimCgTofXphIGpU/D
+9Vzt5eCCLHEey4ltGksY1H9eHWAZlD3YeWhWJ6Wt1os9sVusRmzNEvK2ECxgyksVdXjaJkPr1gKN
+ply9HC4HYK2kaI3I4sU7XATAWkTRGpEXmh0uAmAtomiNSLiGPUZitjpcqqZowUaikeVZcrgggLWU
+ojUiEVkcLgJgLaJojQgTT4eLAFiLKJpRLxGp8/IHalYSqrppurHMcw5pEyTQ67fqGoXZiB8oyUZU
+xdgIQ0TdHA5XUWgtUxAbnYRyzvjhSiVea2myWdeEBVWtoFl6YgqHHKTgy83M/hudw+kBKaN5gm5L
+x8SuEBqvvqfknJOY1Jlrmef6/hacWK5nwQXpDfcbbHWvOjl2/FGLWF2w2hx1L9p9cdoFLOdi75rM
+BM5RAhNeMzmXa/iqhpy1TCUS5xJuMqIOqexX3dqgT2CcUhKjqSQpfMOvJrbpbFGgSrvr/u8CryKi
+imwgW3TOYhLcPaaE17jCVEVqm6FWvWoJqy94ThOaYmnOTnK4IRS1gYLWnZbX8473uQd7ufucru/v
+5bp7x4WlsT/qvW73eLjPPd5L9sd7vc5etzv6TtzfCWx/ZIPW2OX9brv8sCYyeDLBQwyuo7VObXxG
+8jkjZ11OQngdKJt6SdWLssGZG9lRQ+1y7CTqewu4T4aqGDtdO5nG46xF3X64vcWVVKoNBXa4s6Nf
+9W3qt51aJbbeaQ3i7byx4t6G4/8vac5PZ2w4eGfG1Pvq4yfK9QYj9x2ZeoGn2MfP0sBzhifvyNI1
+oUmE44+fqOFwNPDekaiwD0998TN5Miz6rK//KxR0/gMAAP//gjMRo2MAAAAA//8DAN04jtE=
+</data>
+
+<datacheck>
+HTTP/1.1 200 OK
+Date: Mon, 29 Nov 2004 21:56:53 GMT
+Server: Apache/1.3.31 (Debian GNU/Linux) mod_gzip/1.3.26.1a PHP/4.3.9-1 mod_ssl/2.8.20 OpenSSL/0.9.7d mod_perl/1.29
+Vary: Accept-Encoding
+Content-Type: text/html; charset=ISO-8859-1
+Content-Encoding: deflate
+Content-Length: 1305
+
+</datacheck>
+
+</reply>
+
+#
+# Client-side
+<client>
+<features>
+libz
+</features>
+<server>
+http
+</server>
+ <name>
+HTTP GET deflate compressed content with broken deflate header
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/223 --compressed
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /223 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Accept-Encoding: deflate, gzip
+
+</protocol>
+<errorcode>
+61
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test224 b/tests/data/test224
new file mode 100644
index 0000000..1c8ad23
--- /dev/null
+++ b/tests/data/test224
@@ -0,0 +1,104 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+compressed
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+<data base64="yes">
+SFRUUC8xLjEgMjAwIE9LDQpEYXRlOiBNb24sIDI5IE5vdiAyMDA0IDIxOjU2OjUzIEdNVA0KU2Vy
+dmVyOiBBcGFjaGUvMS4zLjMxIChEZWJpYW4gR05VL0xpbnV4KSBtb2RfZ3ppcC8xLjMuMjYuMWEg
+UEhQLzQuMy45LTEgbW9kX3NzbC8yLjguMjAgT3BlblNTTC8wLjkuN2QgbW9kX3BlcmwvMS4yOQ0K
+VmFyeTogQWNjZXB0LUVuY29kaW5nDQpDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1J
+U08tODg1OS0xDQpDb250ZW50LUVuY29kaW5nOiBnemlwDQpDb250ZW50LUxlbmd0aDogMjE4Ng0K
+DQofiwgcv7yrQQIDMAB0aGlzIGlzIGFuIGV4dHJhIGZpZWxkIHRoYXQgbXVzdCBiZSByZW1vdmVk
+X19fX19sb25nLWZpbGVuYW1lLXh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
+eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
+eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
+eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
+eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
+eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
+eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
+eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
+eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
+eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
+eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
+eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
+eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
+eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
+eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
+eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
+eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
+eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
+eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
+eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
+eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
+eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
+eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
+eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
+eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
+eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
+eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
+eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
+eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
+eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
+eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
+eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
+eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
+eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
+eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
+eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4AHRoaXMgaXMgYSBj
+b21tZW50IHRoYXQgbXVzdCBiZSBza2lwcGVkACvNS87PLShKLS5OTVFIr8osUEhJLElUKM8syVDI
+yc9Lh4hlpCampBZxAQC4UJ7LLQAAAA==
+</data>
+
+<datacheck>
+HTTP/1.1 200 OK
+Date: Mon, 29 Nov 2004 21:56:53 GMT
+Server: Apache/1.3.31 (Debian GNU/Linux) mod_gzip/1.3.26.1a PHP/4.3.9-1 mod_ssl/2.8.20 OpenSSL/0.9.7d mod_perl/1.29
+Vary: Accept-Encoding
+Content-Type: text/html; charset=ISO-8859-1
+Content-Encoding: gzip
+Content-Length: 2186
+
+uncompressed gzip data with long gzip header
+</datacheck>
+
+</reply>
+
+#
+# Client-side
+<client>
+<features>
+libz
+</features>
+<server>
+http
+</server>
+ <name>
+HTTP GET gzip compressed content with huge comment and extra field
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/224 --compressed
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /224 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Accept-Encoding: deflate, gzip
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test225 b/tests/data/test225
new file mode 100644
index 0000000..a644712
--- /dev/null
+++ b/tests/data/test225
@@ -0,0 +1,28 @@
+<testcase>
+<info>
+<keywords>
+FTP
+FAILURE
+</keywords>
+</info>
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP %0a-code in URL's name part
+ </name>
+ <command>
+ftp://bad%0auser:passwd@%HOSTIP:%FTPPORT/225%0a
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+# 3 == CURLE_URL_MALFORMAT
+<errorcode>
+3
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test226 b/tests/data/test226
new file mode 100644
index 0000000..9fc4bda
--- /dev/null
+++ b/tests/data/test226
@@ -0,0 +1,29 @@
+<testcase>
+<info>
+<keywords>
+FTP
+FAILURE
+</keywords>
+</info>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP %0d-code in URL's CWD part
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/226%0d
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+# 3 == CURLE_URL_MALFORMAT
+<errorcode>
+3
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test227 b/tests/data/test227
new file mode 100644
index 0000000..523fa02
--- /dev/null
+++ b/tests/data/test227
@@ -0,0 +1,58 @@
+<testcase>
+<info>
+<keywords>
+FTP
+post-quote
+pre-quote
+quote
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+data
+ to
+ see
+that FTP
+works
+ so does it?
+</data>
+<servercmd>
+REPLY EPSV 500 no such command
+REPLY FAIL 500 this might not be a failure!
+</servercmd>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP with quote ops
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/227 -Q "NOOP 1" -Q "+NOOP 2" -Q "-NOOP 3" -Q "*FAIL" -Q "+*FAIL HARD"
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+NOOP 1
+FAIL
+EPSV
+PASV
+TYPE I
+NOOP 2
+FAIL HARD
+SIZE 227
+RETR 227
+NOOP 3
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test228 b/tests/data/test228
new file mode 100644
index 0000000..f581583
--- /dev/null
+++ b/tests/data/test228
@@ -0,0 +1,52 @@
+<testcase>
+<info>
+<keywords>
+FTP
+ACCT
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+data
+ to
+ see
+that FTP
+works
+ so does it?
+</data>
+<servercmd>
+REPLY PASS 332 please provide account name
+REPLY ACCT 230 thank you
+</servercmd>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP RETR with ACCT
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/228 --ftp-account "one count"
+</command>
+</client>
+
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+ACCT one count
+PWD
+EPSV
+TYPE I
+SIZE 228
+RETR 228
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test229 b/tests/data/test229
new file mode 100644
index 0000000..d337468
--- /dev/null
+++ b/tests/data/test229
@@ -0,0 +1,41 @@
+<testcase>
+<info>
+<keywords>
+FTP
+ACCT
+FAILURE
+</keywords>
+</info>
+# Server-side
+<reply>
+<servercmd>
+REPLY PASS 332 please provide account name
+REPLY ACCT 532 bluah!
+</servercmd>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP RETR with bad ACCT
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/229 --ftp-account "one count"
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+ACCT one count
+</protocol>
+<errorcode>
+11
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test23 b/tests/data/test23
new file mode 100644
index 0000000..46872e8
--- /dev/null
+++ b/tests/data/test23
@@ -0,0 +1,33 @@
+<testcase>
+<info>
+<keywords>
+unsupported protocol
+FAILURE
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+unsupported protocol:// URL
+ </name>
+ <command>
+htfp://%HOSTIP:%HTTPPORT/none.htfml
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+1
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test231 b/tests/data/test231
new file mode 100644
index 0000000..912ea41
--- /dev/null
+++ b/tests/data/test231
@@ -0,0 +1,32 @@
+<testcase>
+# Server-side
+<reply>
+# 16 bytes to check
+<datacheck>
+B01234567
+C01234567
+</datacheck>
+</reply>
+
+# Client-side
+<client>
+<server>
+file
+</server>
+ <name>
+file:// with resume
+ </name>
+ <command>
+file://localhost/%PWD/log/test231.txt -C 10-
+</command>
+<file name="log/test231.txt">
+A01234567
+B01234567
+C01234567
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+</verify>
+</testcase>
diff --git a/tests/data/test233 b/tests/data/test233
new file mode 100644
index 0000000..d165da9
--- /dev/null
+++ b/tests/data/test233
@@ -0,0 +1,94 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP proxy
+HTTP Basic auth
+HTTP proxy Basic auth
+followlocation
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 302 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake swsclose
+Content-Type: text/html
+Funny-head: yesyes
+Location: http://goto.second.host.now/2330002
+Content-Length: 8
+Connection: close
+
+contents
+</data>
+<data2>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake swsclose
+Content-Type: text/html
+Funny-head: yesyes
+Content-Length: 9
+
+contents
+</data2>
+
+<datacheck>
+HTTP/1.1 302 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake swsclose
+Content-Type: text/html
+Funny-head: yesyes
+Location: http://goto.second.host.now/2330002
+Content-Length: 8
+Connection: close
+
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake swsclose
+Content-Type: text/html
+Funny-head: yesyes
+Content-Length: 9
+
+contents
+</datacheck>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP, proxy, site+proxy auth and Location: to new host
+ </name>
+ <command>
+http://first.host.it.is/we/want/that/page/233 -x %HOSTIP:%HTTPPORT --user iam:myself --proxy-user testing:this --location
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET http://first.host.it.is/we/want/that/page/233 HTTP/1.1
+Proxy-Authorization: Basic dGVzdGluZzp0aGlz
+Authorization: Basic aWFtOm15c2VsZg==
+Host: first.host.it.is
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+GET http://goto.second.host.now/2330002 HTTP/1.1
+Proxy-Authorization: Basic dGVzdGluZzp0aGlz
+Host: goto.second.host.now
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test234 b/tests/data/test234
new file mode 100644
index 0000000..d8c7081
--- /dev/null
+++ b/tests/data/test234
@@ -0,0 +1,97 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP proxy
+HTTP proxy Basic auth
+followlocation
+--location-trusted
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 302 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake swsclose
+Content-Type: text/html
+Funny-head: yesyes
+Location: http://goto.second.host.now/2340002
+Content-Length: 8
+Connection: close
+
+contents
+</data>
+<data2>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake swsclose
+Content-Type: text/html
+Funny-head: yesyes
+Content-Length: 9
+
+contents
+</data2>
+
+<datacheck>
+HTTP/1.1 302 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake swsclose
+Content-Type: text/html
+Funny-head: yesyes
+Location: http://goto.second.host.now/2340002
+Content-Length: 8
+Connection: close
+
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake swsclose
+Content-Type: text/html
+Funny-head: yesyes
+Content-Length: 9
+
+contents
+</datacheck>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP, proxy, site+proxy auth and Location: to new host using location-trusted
+ </name>
+ <command>
+http://first.host.it.is/we/want/that/page/234 -x %HOSTIP:%HTTPPORT --user iam:myself --proxy-user testing:this --location-trusted
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET http://first.host.it.is/we/want/that/page/234 HTTP/1.1
+Proxy-Authorization: Basic dGVzdGluZzp0aGlz
+Authorization: Basic aWFtOm15c2VsZg==
+Host: first.host.it.is
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+GET http://goto.second.host.now/2340002 HTTP/1.1
+Proxy-Authorization: Basic dGVzdGluZzp0aGlz
+Authorization: Basic aWFtOm15c2VsZg==
+Host: goto.second.host.now
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test235 b/tests/data/test235
new file mode 100644
index 0000000..ee843f1
--- /dev/null
+++ b/tests/data/test235
@@ -0,0 +1,42 @@
+<testcase>
+# Server-side
+<reply>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP resumed upload but no file present remotely
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/235 -T log/upload235 -C -
+</command>
+<file name="log/upload235">
+this is the *****crap******** that we're gonna upload
+
+worx?
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE I
+SIZE 235
+STOR 235
+QUIT
+</protocol>
+<upload>
+this is the *****crap******** that we're gonna upload
+
+worx?
+</upload>
+</verify>
+</testcase>
diff --git a/tests/data/test236 b/tests/data/test236
new file mode 100644
index 0000000..20d0470
--- /dev/null
+++ b/tests/data/test236
@@ -0,0 +1,47 @@
+<testcase>
+
+# Server-side
+<reply>
+<servercmd>
+REPLY SIZE 550 access to this file is very much denied
+REPLY APPE 550 I said: access to this file is very much denied
+REPLY STOR 550 I said: access to this file is very much denied
+</servercmd>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP resume upload but denied access to remote file
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/236 -T log/file236.txt -C -
+</command>
+<file name="log/file236.txt">
+Test data
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE I
+SIZE 236
+STOR 236
+QUIT
+</protocol>
+
+# (25) Failed FTP upload: 550
+<errorcode>
+25
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test237 b/tests/data/test237
new file mode 100644
index 0000000..9675a1e
--- /dev/null
+++ b/tests/data/test237
@@ -0,0 +1,42 @@
+<testcase>
+# Server-side
+<reply>
+<servercmd>
+REPLY PASV 227 Entering Passiv Mode (1216,256,2,127,127,127)
+</servercmd>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP getting bad host in 227-response to PASV
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/237 --disable-epsv
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+# The bogus address used here is chosen specifically so that when processed on
+# certain hosts with buggy resolver code, the resulting address (192.0.2.127)
+# is from an address block that is guaranteed never to be assigned (RFC3330).
+<verify>
+# curl: (15) Can't resolve new host 1216.256.2.127:32639
+# 15 => CURLE_FTP_CANT_GET_HOST
+# some systems just don't fail on the illegal host name/address but instead
+# moves on and attempt to connect to... yes, to what?
+# 7= CURLE_COULDNT_CONNECT
+<errorcode>
+15, 7
+</errorcode>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+PASV
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test238 b/tests/data/test238
new file mode 100644
index 0000000..6397e3b
--- /dev/null
+++ b/tests/data/test238
@@ -0,0 +1,41 @@
+<testcase>
+# Server-side
+<reply>
+<servercmd>
+REPLY EPSV 229 Entering Passiv Mode (|||1000000|)
+REPLY PASV 227 Entering Passiv Mode (1216,256,2,127,127,127)
+</servercmd>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP getting bad port in response to EPSV and in response to PASV
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/238
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+# curl: (15) Can't resolve new host 1216.256.2.127:32639
+# 15 => CURLE_FTP_CANT_GET_HOST
+# some systems just don't fail on the illegal host name/address but instead
+# moves on and attempt to connect to... yes, to what?
+# 7= CURLE_COULDNT_CONNECT
+<errorcode>
+7, 15
+</errorcode>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+PASV
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test239 b/tests/data/test239
new file mode 100644
index 0000000..2748100
--- /dev/null
+++ b/tests/data/test239
@@ -0,0 +1,100 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP POST
+HTTP proxy
+HTTP proxy NTLM auth
+</keywords>
+</info>
+
+# Server-side
+<reply>
+
+# this is returned first since we get no proxy-auth
+<data1001>
+HTTP/1.1 407 Authorization Required to proxy me my dear
+Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+Content-Length: 34
+
+Hey you, authenticate or go away!
+</data1001>
+
+# This is supposed to be returned when the server gets the second
+# Authorization: NTLM line passed-in from the client
+<data1002>
+HTTP/1.1 200 Things are fine in proxy land swsclose
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 42
+
+Contents of that page you requested, sir.
+</data1002>
+
+<datacheck>
+HTTP/1.1 407 Authorization Required to proxy me my dear
+Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+Content-Length: 34
+
+HTTP/1.1 200 Things are fine in proxy land swsclose
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 42
+
+Contents of that page you requested, sir.
+</datacheck>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+<features>
+NTLM
+</features>
+ <name>
+HTTP proxy-auth NTLM and then POST
+ </name>
+ <setenv>
+# we force our own host name, in order to make the test machine independent
+CURL_GETHOSTNAME=curlhost
+# we try to use the LD_PRELOAD hack, if not a debug build
+LD_PRELOAD=%PWD/libtest/.libs/libhostname.so
+ </setenv>
+ <command>
+http://%HOSTIP:%HTTPPORT/239 --proxy http://%HOSTIP:%HTTPPORT --proxy-user silly:person --proxy-ntlm -d "postit"
+</command>
+<precheck>
+chkhostname curlhost
+</precheck>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent: curl/.*
+</strip>
+<protocol nonewline="yes">
+POST http://%HOSTIP:%HTTPPORT/239 HTTP/1.1
+Proxy-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+User-Agent: curl/7.13.2-CVS (i686-pc-linux-gnu) libcurl/7.13.2-CVS OpenSSL/0.9.7e zlib/1.2.2 libidn/0.5.13
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Proxy-Connection: Keep-Alive
+Content-Length: 0
+Content-Type: application/x-www-form-urlencoded
+
+POST http://%HOSTIP:%HTTPPORT/239 HTTP/1.1
+Proxy-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAABQAFAHAAAAAIAAgAdQAAAAAAAAAAAAAABoKBAKAeQjzKtCQ7ubW8S6MN7B59436GAxPu0CVROwwNBsgxML49gcbAXLT/bU+H5wrS9XNpbGx5Y3VybGhvc3Q=
+User-Agent: curl/7.13.2-CVS (i686-pc-linux-gnu) libcurl/7.13.2-CVS OpenSSL/0.9.7e zlib/1.2.2 libidn/0.5.13
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Proxy-Connection: Keep-Alive
+Content-Length: 6
+Content-Type: application/x-www-form-urlencoded
+
+postit
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test24 b/tests/data/test24
new file mode 100644
index 0000000..7985f43
--- /dev/null
+++ b/tests/data/test24
@@ -0,0 +1,47 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+</keywords>
+</info>
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.0 404 BAD BOY
+Content-Type: text/html
+
+This silly page doesn't reaaaaaly exist so you should not get it.
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP GET fail silently on HTTP error return
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/24 --fail
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent: curl/.*
+</strip>
+<protocol>
+GET /24 HTTP/1.1
+User-Agent: curl/7.8.1-pre3 (sparc-sun-solaris2.7) libcurl 7.8.1-pre3 (OpenSSL 0.9.6a) (krb4 enabled)
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+<errorcode>
+22
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test240 b/tests/data/test240
new file mode 100644
index 0000000..cd8594d
--- /dev/null
+++ b/tests/data/test240
@@ -0,0 +1,58 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+IPv6
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+-foo-
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<features>
+ipv6
+</features>
+<server>
+http-ipv6
+</server>
+ <name>
+HTTP-IPv6 GET
+ </name>
+ <command>
+-g "http://%HOST6IP:%HTTP6PORT/240"
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:
+</strip>
+<protocol>
+GET /240 HTTP/1.1
+Host: %HOST6IP:%HTTP6PORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test241 b/tests/data/test241
new file mode 100644
index 0000000..46eae1f
--- /dev/null
+++ b/tests/data/test241
@@ -0,0 +1,56 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+IPv6
+IPv6-hostname
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 6
+
+hello
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<features>
+ipv6
+</features>
+<server>
+http-ipv6
+</server>
+ <name>
+HTTP-IPv6 GET (using ip6-localhost)
+ </name>
+ <command>
+-g "http://ip6-localhost:%HTTP6PORT/241"
+</command>
+<precheck>
+./server/resolve --ipv6 ip6-localhost
+</precheck>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:
+</strip>
+<protocol>
+GET /241 HTTP/1.1
+Host: ip6-localhost:%HTTP6PORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test242 b/tests/data/test242
new file mode 100644
index 0000000..01d40bd
--- /dev/null
+++ b/tests/data/test242
@@ -0,0 +1,54 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+IPv6
+HTTP Basic auth
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 6
+Connection: close
+
+hello
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<features>
+ipv6
+</features>
+<server>
+http-ipv6
+</server>
+ <name>
+HTTP-IPv6 GET with username+password in URL
+ </name>
+ <command>
+-g "http://foobar:barfoo@%HOST6IP:%HTTP6PORT/242"
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:
+</strip>
+<protocol>
+GET /242 HTTP/1.1
+Authorization: Basic Zm9vYmFyOmJhcmZvbw==
+Host: %HOST6IP:%HTTP6PORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test243 b/tests/data/test243
new file mode 100644
index 0000000..d53a437
--- /dev/null
+++ b/tests/data/test243
@@ -0,0 +1,129 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP proxy
+HTTP proxy NTLM auth
+--proxy-anyauth
+</keywords>
+</info>
+
+# Server-side
+<reply>
+
+<data>
+HTTP/1.1 407 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Proxy-Authenticate: Blackmagic realm="gimme all yer s3cr3ts"
+Proxy-Authenticate: Basic realm="gimme all yer s3cr3ts"
+Proxy-Authenticate: NTLM
+Content-Type: text/html; charset=iso-8859-1
+Connection: close
+
+This is not the real page
+</data>
+
+# this is returned first since we get no proxy-auth
+<data1001>
+HTTP/1.1 407 Authorization Required to proxy me my dear
+Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+Content-Length: 34
+
+Hey you, authenticate or go away!
+</data1001>
+
+# This is supposed to be returned when the server gets the second
+# Authorization: NTLM line passed-in from the client
+<data1002>
+HTTP/1.1 200 Things are fine in proxy land swsclose
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 42
+
+Contents of that page you requested, sir.
+</data1002>
+
+<datacheck>
+HTTP/1.1 407 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Proxy-Authenticate: Blackmagic realm="gimme all yer s3cr3ts"
+Proxy-Authenticate: Basic realm="gimme all yer s3cr3ts"
+Proxy-Authenticate: NTLM
+Content-Type: text/html; charset=iso-8859-1
+Connection: close
+
+HTTP/1.1 407 Authorization Required to proxy me my dear
+Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+Content-Length: 34
+
+HTTP/1.1 200 Things are fine in proxy land swsclose
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 42
+
+Contents of that page you requested, sir.
+</datacheck>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+<features>
+NTLM
+</features>
+ <name>
+HTTP POST with --proxy-anyauth, picking NTLM
+ </name>
+ <setenv>
+# we force our own host name, in order to make the test machine independent
+CURL_GETHOSTNAME=curlhost
+# we try to use the LD_PRELOAD hack, if not a debug build
+LD_PRELOAD=%PWD/libtest/.libs/libhostname.so
+ </setenv>
+ <command>
+http://%HOSTIP:%HTTPPORT/243 --proxy http://%HOSTIP:%HTTPPORT --proxy-user silly:person --proxy-anyauth -d "postit"
+</command>
+<precheck>
+chkhostname curlhost
+</precheck>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent: curl/.*
+</strip>
+<protocol nonewline="yes">
+POST http://%HOSTIP:%HTTPPORT/243 HTTP/1.1
+User-Agent: curl/7.13.2-CVS (i686-pc-linux-gnu) libcurl/7.13.2-CVS OpenSSL/0.9.7e zlib/1.2.2 libidn/0.5.13
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Proxy-Connection: Keep-Alive
+Content-Length: 6
+Content-Type: application/x-www-form-urlencoded
+
+postitPOST http://%HOSTIP:%HTTPPORT/243 HTTP/1.1
+Proxy-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+User-Agent: curl/7.13.2-CVS (i686-pc-linux-gnu) libcurl/7.13.2-CVS OpenSSL/0.9.7e zlib/1.2.2 libidn/0.5.13
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Proxy-Connection: Keep-Alive
+Content-Length: 0
+Content-Type: application/x-www-form-urlencoded
+
+POST http://%HOSTIP:%HTTPPORT/243 HTTP/1.1
+Proxy-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAABQAFAHAAAAAIAAgAdQAAAAAAAAAAAAAABoKBAKAeQjzKtCQ7ubW8S6MN7B59436GAxPu0CVROwwNBsgxML49gcbAXLT/bU+H5wrS9XNpbGx5Y3VybGhvc3Q=
+User-Agent: curl/7.13.2-CVS (i686-pc-linux-gnu) libcurl/7.13.2-CVS OpenSSL/0.9.7e zlib/1.2.2 libidn/0.5.13
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Proxy-Connection: Keep-Alive
+Content-Length: 6
+Content-Type: application/x-www-form-urlencoded
+
+postit
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test245 b/tests/data/test245
new file mode 100644
index 0000000..8ad45d3
--- /dev/null
+++ b/tests/data/test245
@@ -0,0 +1,87 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP POST
+HTTP Digest auth
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+HTTP/1.1 401 authentication please swsbounce
+Server: Microsoft-IIS/6.0
+WWW-Authenticate: Digest realm="testrealm", nonce="1053604144"
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 0
+
+</data>
+<data1000>
+HTTP/1.1 200 A OK
+Server: Microsoft-IIS/6.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 3
+
+ok
+</data1000>
+
+<datacheck>
+HTTP/1.1 401 authentication please swsbounce
+Server: Microsoft-IIS/6.0
+WWW-Authenticate: Digest realm="testrealm", nonce="1053604144"
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 0
+
+HTTP/1.1 200 A OK
+Server: Microsoft-IIS/6.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 3
+
+ok
+</datacheck>
+
+</reply>
+
+# Client-side
+<client>
+#
+<server>
+http
+</server>
+<features>
+crypto
+</features>
+ <name>
+HTTP POST --digest
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/245 -u auser:apasswd --digest -d "junkelijunk"
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol nonewline="yes">
+POST /245 HTTP/1.1
+User-Agent: curl/7.12.1-CVS (i686-pc-linux-gnu) libcurl/7.12.1-CVS OpenSSL/0.9.6b ipv6 zlib/1.1.4 GSS libidn/0.4.6
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 0
+Content-Type: application/x-www-form-urlencoded
+
+POST /245 HTTP/1.1
+Authorization: Digest username="auser", realm="testrealm", nonce="1053604144", uri="/245", response="379a439b1737ba257c1d2f103914b18b"
+User-Agent: curl/7.13.2-CVS (i686-pc-linux-gnu) libcurl/7.13.2-CVS OpenSSL/0.9.7e zlib/1.2.2 libidn/0.5.13
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 11
+Content-Type: application/x-www-form-urlencoded
+
+junkelijunk
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test246 b/tests/data/test246
new file mode 100644
index 0000000..b92c17a
--- /dev/null
+++ b/tests/data/test246
@@ -0,0 +1,97 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP POST
+HTTP Digest auth
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+HTTP/1.1 100 Continue
+Server: Microsoft-IIS/5.0
+Date: Sun, 03 Apr 2005 14:57:45 GMT
+X-Powered-By: ASP.NET
+
+HTTP/1.1 401 authentication please swsbounce
+Server: Microsoft-IIS/6.0
+WWW-Authenticate: Digest realm="testrealm", nonce="1053604144"
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 0
+
+</data>
+<data1000>
+HTTP/1.1 200 A OK
+Server: Microsoft-IIS/6.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 3
+
+ok
+</data1000>
+
+<datacheck>
+HTTP/1.1 100 Continue
+Server: Microsoft-IIS/5.0
+Date: Sun, 03 Apr 2005 14:57:45 GMT
+X-Powered-By: ASP.NET
+
+HTTP/1.1 401 authentication please swsbounce
+Server: Microsoft-IIS/6.0
+WWW-Authenticate: Digest realm="testrealm", nonce="1053604144"
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 0
+
+HTTP/1.1 200 A OK
+Server: Microsoft-IIS/6.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 3
+
+ok
+</datacheck>
+
+</reply>
+
+# Client-side
+<client>
+#
+<server>
+http
+</server>
+<features>
+crypto
+</features>
+ <name>
+HTTP POST --digest with server doing a 100 before 401 response
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/246 -u auser:apasswd --digest -d "junkelijunk"
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol nonewline="yes">
+POST /246 HTTP/1.1
+User-Agent: curl/7.12.1-CVS (i686-pc-linux-gnu) libcurl/7.12.1-CVS OpenSSL/0.9.6b ipv6 zlib/1.1.4 GSS libidn/0.4.6
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 0
+Content-Type: application/x-www-form-urlencoded
+
+POST /246 HTTP/1.1
+Authorization: Digest username="auser", realm="testrealm", nonce="1053604144", uri="/246", response="761e6fc9a760c39d587092e8d840e740"
+User-Agent: curl/7.13.2-CVS (i686-pc-linux-gnu) libcurl/7.13.2-CVS OpenSSL/0.9.7e zlib/1.2.2 libidn/0.5.13
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 11
+Content-Type: application/x-www-form-urlencoded
+
+junkelijunk
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test247 b/tests/data/test247
new file mode 100644
index 0000000..66c674e
--- /dev/null
+++ b/tests/data/test247
@@ -0,0 +1,41 @@
+<testcase>
+<reply>
+<mdtm>
+213 20030409102659
+</mdtm>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP upload time condition evaluates TRUE => skip upload
+ </name>
+<file name="log/test247.txt">
+data
+ to
+ see
+that FTP
+works
+ so does it?
+</file>
+ <command>
+ftp://%HOSTIP:%FTPPORT/247 -T log/test247.txt -z "apr 1 2005 08:00:00"
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<upload>
+</upload>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+MDTM 247
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test248 b/tests/data/test248
new file mode 100644
index 0000000..814b1d7
--- /dev/null
+++ b/tests/data/test248
@@ -0,0 +1,50 @@
+<testcase>
+<reply>
+<mdtm>
+213 20050409102659
+</mdtm>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP upload time condition evaluates FALSE => upload anyway
+ </name>
+<file name="log/test248.txt">
+data
+ to
+ see
+that FTP
+works
+ so does it?
+</file>
+ <command>
+ftp://%HOSTIP:%FTPPORT/248 -T log/test248.txt -z "apr 1 2005 08:00:00"
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<upload>
+data
+ to
+ see
+that FTP
+works
+ so does it?
+</upload>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+MDTM 248
+EPSV
+TYPE I
+STOR 248
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test249 b/tests/data/test249
new file mode 100644
index 0000000..69df5be
--- /dev/null
+++ b/tests/data/test249
@@ -0,0 +1,47 @@
+<testcase>
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 304 Not Modified swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 1910 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 677777
+Connection: close
+Content-Type: text/html
+
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP 304 response with "illegal" Content-Length: header
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/249 -z "dec 12 12:00:00 1999 GMT"
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /249 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+If-Modified-Since: Sun, 12 Dec 1999 12:00:00 GMT
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test25 b/tests/data/test25
new file mode 100644
index 0000000..15030ae
--- /dev/null
+++ b/tests/data/test25
@@ -0,0 +1,116 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+followlocation
+--max-redirs
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+HTTP/1.1 301 This is a weirdo text message
+Server: test-server/fake
+Location: data/reply/25
+Content-Length: 32
+Connection: close
+
+Redirect to the same URL again!
+</data>
+<datacheck>
+HTTP/1.1 301 This is a weirdo text message
+Server: test-server/fake
+Location: data/reply/25
+Content-Length: 32
+Connection: close
+
+HTTP/1.1 301 This is a weirdo text message
+Server: test-server/fake
+Location: data/reply/25
+Content-Length: 32
+Connection: close
+
+HTTP/1.1 301 This is a weirdo text message
+Server: test-server/fake
+Location: data/reply/25
+Content-Length: 32
+Connection: close
+
+HTTP/1.1 301 This is a weirdo text message
+Server: test-server/fake
+Location: data/reply/25
+Content-Length: 32
+Connection: close
+
+HTTP/1.1 301 This is a weirdo text message
+Server: test-server/fake
+Location: data/reply/25
+Content-Length: 32
+Connection: close
+
+HTTP/1.1 301 This is a weirdo text message
+Server: test-server/fake
+Location: data/reply/25
+Content-Length: 32
+Connection: close
+
+</datacheck>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+looping HTTP Location: following with --max-redirs
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/want/25 -L --max-redirs 5
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent: curl/.*
+</strip>
+<protocol>
+GET /want/25 HTTP/1.1
+User-Agent: curl/7.8.1-pre3 (sparc-sun-solaris2.7) libcurl 7.8.1-pre3 (OpenSSL 0.9.6a) (krb4 enabled)
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /want/data/reply/25 HTTP/1.1
+User-Agent: curl/7.8.1-pre3 (sparc-sun-solaris2.7) libcurl 7.8.1-pre3 (OpenSSL 0.9.6a) (krb4 enabled)
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /want/data/reply/data/reply/25 HTTP/1.1
+User-Agent: curl/7.8.1-pre3 (sparc-sun-solaris2.7) libcurl 7.8.1-pre3 (OpenSSL 0.9.6a) (krb4 enabled)
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /want/data/reply/data/reply/data/reply/25 HTTP/1.1
+User-Agent: curl/7.8.1-pre3 (sparc-sun-solaris2.7) libcurl 7.8.1-pre3 (OpenSSL 0.9.6a) (krb4 enabled)
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /want/data/reply/data/reply/data/reply/data/reply/25 HTTP/1.1
+User-Agent: curl/7.8.1-pre3 (sparc-sun-solaris2.7) libcurl 7.8.1-pre3 (OpenSSL 0.9.6a) (krb4 enabled)
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /want/data/reply/data/reply/data/reply/data/reply/data/reply/25 HTTP/1.1
+User-Agent: curl/7.8.1-pre3 (sparc-sun-solaris2.7) libcurl 7.8.1-pre3 (OpenSSL 0.9.6a) (krb4 enabled)
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+
+<errorcode>
+47
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test250 b/tests/data/test250
new file mode 100644
index 0000000..2c99c46
--- /dev/null
+++ b/tests/data/test250
@@ -0,0 +1,52 @@
+<testcase>
+#
+# Server-side
+<reply>
+# When doing LIST, we get the default list output hard-coded in the test
+# FTP server
+<datacheck>
+total 20
+drwxr-xr-x 8 98 98 512 Oct 22 13:06 .
+drwxr-xr-x 8 98 98 512 Oct 22 13:06 ..
+drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT
+-r--r--r-- 1 0 1 35 Jul 16 1996 README
+lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin
+dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev
+drwxrwxrwx 2 98 98 512 May 29 16:04 download.html
+dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc
+drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub
+dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr
+</datacheck>
+<servercmd>
+SLOWDOWN
+</servercmd>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP dir list PASV with slow response
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE A
+LIST
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test251 b/tests/data/test251
new file mode 100644
index 0000000..73ee09e
--- /dev/null
+++ b/tests/data/test251
@@ -0,0 +1,54 @@
+<testcase>
+# Server-side
+<reply>
+# When doing LIST, we get the default list output hard-coded in the test
+# FTP server
+<datacheck>
+total 20
+drwxr-xr-x 8 98 98 512 Oct 22 13:06 .
+drwxr-xr-x 8 98 98 512 Oct 22 13:06 ..
+drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT
+-r--r--r-- 1 0 1 35 Jul 16 1996 README
+lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin
+dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev
+drwxrwxrwx 2 98 98 512 May 29 16:04 download.html
+dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc
+drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub
+dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr
+</datacheck>
+<servercmd>
+SLOWDOWN
+</servercmd>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP dir list, PORT with specified IP and slow response
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/ -P %CLIENTIP
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+# Strip all valid kinds of PORT and EPRT that curl can send
+<strip>
+^PORT \d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3}
+^EPRT \|1\|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\|\d{1,5}\|
+</strip>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+PORT 127,0,0,1,243,212
+TYPE A
+LIST
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test252 b/tests/data/test252
new file mode 100644
index 0000000..b3f4966
--- /dev/null
+++ b/tests/data/test252
@@ -0,0 +1,59 @@
+<testcase>
+<info>
+<keywords>
+FTP-ipv6
+IPv6
+EPSV
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+# When doing LIST, we get the default list output hard-coded in the test
+# FTP server
+<datacheck>
+total 20
+drwxr-xr-x 8 98 98 512 Oct 22 13:06 .
+drwxr-xr-x 8 98 98 512 Oct 22 13:06 ..
+drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT
+-r--r--r-- 1 0 1 35 Jul 16 1996 README
+lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin
+dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev
+drwxrwxrwx 2 98 98 512 May 29 16:04 download.html
+dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc
+drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub
+dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr
+</datacheck>
+</reply>
+
+#
+# Client-side
+<client>
+<features>
+ipv6
+</features>
+<server>
+ftp-ipv6
+</server>
+ <name>
+FTP IPv6 dir list PASV
+ </name>
+ <command>
+-g "ftp://%HOST6IP:%FTP6PORT/"
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE A
+LIST
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test253 b/tests/data/test253
new file mode 100644
index 0000000..9be5f3d
--- /dev/null
+++ b/tests/data/test253
@@ -0,0 +1,62 @@
+<testcase>
+<info>
+<keywords>
+FTP-ipv6
+IPv6
+EPRT
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+# When doing LIST, we get the default list output hard-coded in the test
+# FTP server
+<datacheck>
+total 20
+drwxr-xr-x 8 98 98 512 Oct 22 13:06 .
+drwxr-xr-x 8 98 98 512 Oct 22 13:06 ..
+drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT
+-r--r--r-- 1 0 1 35 Jul 16 1996 README
+lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin
+dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev
+drwxrwxrwx 2 98 98 512 May 29 16:04 download.html
+dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc
+drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub
+dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr
+</datacheck>
+</reply>
+
+#
+# Client-side
+<client>
+<features>
+ipv6
+</features>
+<server>
+ftp-ipv6
+</server>
+ <name>
+FTP IPv6 dir list with EPRT
+ </name>
+ <command>
+-g "ftp://%HOST6IP:%FTP6PORT/" -P -
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strippart>
+s/^(EPRT \|2\|::1\|)(.*)/$1/
+</strippart>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+EPRT |2|::1|
+TYPE A
+LIST
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test254 b/tests/data/test254
new file mode 100644
index 0000000..571b033
--- /dev/null
+++ b/tests/data/test254
@@ -0,0 +1,60 @@
+<testcase>
+<info>
+<keywords>
+FTP-ipv6
+IPv6
+EPSV
+--disable-epsv
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+# When doing LIST, we get the default list output hard-coded in the test
+# FTP server
+<datacheck>
+total 20
+drwxr-xr-x 8 98 98 512 Oct 22 13:06 .
+drwxr-xr-x 8 98 98 512 Oct 22 13:06 ..
+drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT
+-r--r--r-- 1 0 1 35 Jul 16 1996 README
+lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin
+dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev
+drwxrwxrwx 2 98 98 512 May 29 16:04 download.html
+dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc
+drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub
+dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr
+</datacheck>
+</reply>
+
+#
+# Client-side
+<client>
+<features>
+ipv6
+</features>
+<server>
+ftp-ipv6
+</server>
+ <name>
+FTP IPv6 dir list PASV and --disable-epsv
+ </name>
+ <command>
+-g "ftp://%HOST6IP:%FTP6PORT/" --disable-epsv
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE A
+LIST
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test255 b/tests/data/test255
new file mode 100644
index 0000000..cc50c95
--- /dev/null
+++ b/tests/data/test255
@@ -0,0 +1,63 @@
+<testcase>
+<info>
+<keywords>
+FTP-ipv6
+IPv6
+EPRT
+--disable-eprt
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+# When doing LIST, we get the default list output hard-coded in the test
+# FTP server
+<datacheck>
+total 20
+drwxr-xr-x 8 98 98 512 Oct 22 13:06 .
+drwxr-xr-x 8 98 98 512 Oct 22 13:06 ..
+drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT
+-r--r--r-- 1 0 1 35 Jul 16 1996 README
+lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin
+dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev
+drwxrwxrwx 2 98 98 512 May 29 16:04 download.html
+dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc
+drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub
+dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr
+</datacheck>
+</reply>
+
+#
+# Client-side
+<client>
+<features>
+ipv6
+</features>
+<server>
+ftp-ipv6
+</server>
+ <name>
+FTP IPv6 dir list with EPRT and --disable-eprt
+ </name>
+ <command>
+-g "ftp://%HOST6IP:%FTP6PORT/" -P - --disable-eprt
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strippart>
+s/^(EPRT \|2\|::1\|)(.*)/$1/
+</strippart>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+EPRT |2|::1|
+TYPE A
+LIST
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test256 b/tests/data/test256
new file mode 100644
index 0000000..5f8323b
--- /dev/null
+++ b/tests/data/test256
@@ -0,0 +1,64 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP proxy
+Resume
+FAILURE
+</keywords>
+</info>
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.0 200 Mooo
+Date: Mon, 13 Nov 2000 13:41:09 GMT
+Server: myown/1.0
+Connection: close
+
+todelooooo lalalala yada yada, we know nothing about ranges ;-)
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP resume request over proxy with auth without server supporting it
+ </name>
+ <command option="no-output">
+-x http://%HOSTIP:%HTTPPORT http://%HOSTIP:%HTTPPORT/want/256 -C - --no-include -o log/fewl.txt -U daniel:stenberg
+</command>
+<file name="log/fewl.txt">
+This text is here to simulate a partly downloaded file to resume
+download on.
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+33
+</errorcode>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET http://%HOSTIP:%HTTPPORT/want/256 HTTP/1.1
+Proxy-Authorization: Basic ZGFuaWVsOnN0ZW5iZXJn
+Range: bytes=78-
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol>
+
+# the download target file must remain untouched
+<file name="log/fewl.txt">
+This text is here to simulate a partly downloaded file to resume
+download on.
+</file>
+</verify>
+</testcase>
diff --git a/tests/data/test257 b/tests/data/test257
new file mode 100644
index 0000000..c211c2f
--- /dev/null
+++ b/tests/data/test257
@@ -0,0 +1,115 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP proxy
+HTTP Basic auth
+followlocation
+netrc
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+HTTP/1.1 301 This is a weirdo text message swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Location: http://anotherone.com/2570002
+Connection: close
+
+This server reply is for testing a simple Location: following
+
+</data>
+<data2>
+HTTP/1.1 302 Followed here fine swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Location: http://athird.com/2570003
+
+If this is received, the location following worked
+
+</data2>
+<data3>
+HTTP/1.1 200 Followed here fine swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 52
+
+If this is received, the location following worked
+
+</data3>
+<datacheck>
+HTTP/1.1 301 This is a weirdo text message swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Location: http://anotherone.com/2570002
+Connection: close
+
+HTTP/1.1 302 Followed here fine swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Location: http://athird.com/2570003
+
+HTTP/1.1 200 Followed here fine swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 52
+
+If this is received, the location following worked
+
+</datacheck>
+</reply>
+
+# Client-side
+<client>
+<features>
+netrc_debug
+</features>
+<server>
+http
+</server>
+ <name>
+HTTP Location: following with --netrc-optional
+ </name>
+ <command>
+http://supersite.com/want/257 -L -x http://%HOSTIP:%HTTPPORT --netrc-optional
+</command>
+
+# netrc auth for two out of three sites:
+<file name="log/netrc">
+machine supersite.com login user1 password passwd1
+machine anotherone.com login user2 password passwd2
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET http://supersite.com/want/257 HTTP/1.1
+Authorization: Basic dXNlcjE6cGFzc3dkMQ==
+User-Agent: curl/7.14.0-CVS (i686-pc-linux-gnu) libcurl/7.14.0-CVS OpenSSL/0.9.7e zlib/1.2.2 libidn/0.5.13
+Host: supersite.com
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+GET http://anotherone.com/2570002 HTTP/1.1
+Authorization: Basic dXNlcjI6cGFzc3dkMg==
+User-Agent: curl/7.14.0-CVS (i686-pc-linux-gnu) libcurl/7.14.0-CVS OpenSSL/0.9.7e zlib/1.2.2 libidn/0.5.13
+Host: anotherone.com
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+GET http://athird.com/2570003 HTTP/1.1
+User-Agent: curl/7.14.0-CVS (i686-pc-linux-gnu) libcurl/7.14.0-CVS OpenSSL/0.9.7e zlib/1.2.2 libidn/0.5.13
+Host: athird.com
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test258 b/tests/data/test258
new file mode 100644
index 0000000..0d95dec
--- /dev/null
+++ b/tests/data/test258
@@ -0,0 +1,134 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP FORMPOST
+HTTP replaced headers
+HTTP proxy
+HTTP proxy Digest auth
+--proxy-anyauth
+</keywords>
+
+</info>
+# Server-side
+<reply>
+# The stupid test server doesn't response anything at all until the full
+# request has been sent, and then of course the full POST has already been
+# sent!
+<data>
+HTTP/1.1 407 no, tell me who you are first swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Proxy-Authenticate: Digest realm="many secrets", nonce="911"
+Proxy-Connection: close
+Content-Length: 0
+
+</data>
+<data1000>
+HTTP/1.1 200 A OK
+Server: Microsoft-IIS/6.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 3
+
+ok
+</data1000>
+<datacheck>
+HTTP/1.1 407 no, tell me who you are first swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Proxy-Authenticate: Digest realm="many secrets", nonce="911"
+Proxy-Connection: close
+Content-Length: 0
+
+HTTP/1.1 200 A OK
+Server: Microsoft-IIS/6.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 3
+
+ok
+</datacheck>
+
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+<features>
+crypto
+</features>
+ <name>
+HTTP POST multipart without Expect: header using proxy anyauth (Digest)
+ </name>
+ <command>
+-x http://%HOSTIP:%HTTPPORT http://remotehost:54321/we/want/258 -F name=daniel -F tool=curl -F file=@log/test258.txt -H "Expect:" -U uuuser:pppassword --proxy-anyauth
+</command>
+# We create this file before the command is invoked!
+<file name="log/test258.txt">
+foo-
+This is a moo-
+bar
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^(User-Agent:|Content-Type: multipart/form-data;|------).*
+</strip>
+<protocol>
+POST http://remotehost:54321/we/want/258 HTTP/1.1
+User-Agent: curl/7.10.4 (i686-pc-linux-gnu) libcurl/7.10.4 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: remotehost:54321
+Accept: */*
+Proxy-Connection: Keep-Alive
+Content-Length: 409
+Content-Type: multipart/form-data; boundary=----------------------------7c633d5c27ce
+
+------------------------------7c633d5c27ce
+Content-Disposition: form-data; name="name"
+
+daniel
+------------------------------7c633d5c27ce
+Content-Disposition: form-data; name="tool"
+
+curl
+------------------------------7c633d5c27ce
+Content-Disposition: form-data; name="file"; filename="test258.txt"
+Content-Type: text/plain
+
+foo-
+This is a moo-
+bar
+
+------------------------------7c633d5c27ce--
+POST http://remotehost:54321/we/want/258 HTTP/1.1
+User-Agent: curl/7.10.4 (i686-pc-linux-gnu) libcurl/7.10.4 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Proxy-Authorization: Digest username="uuuser", realm="many secrets", nonce="911", uri="/we/want/258", response="2501654ca391f0b5c8c12a1da77e34cd"
+Host: remotehost:54321
+Accept: */*
+Proxy-Connection: Keep-Alive
+Content-Length: 409
+Content-Type: multipart/form-data; boundary=----------------------------7c633d5c27ce
+
+------------------------------7c633d5c27ce
+Content-Disposition: form-data; name="name"
+
+daniel
+------------------------------7c633d5c27ce
+Content-Disposition: form-data; name="tool"
+
+curl
+------------------------------7c633d5c27ce
+Content-Disposition: form-data; name="file"; filename="test258.txt"
+Content-Type: text/plain
+
+foo-
+This is a moo-
+bar
+
+------------------------------7c633d5c27ce--
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test259 b/tests/data/test259
new file mode 100644
index 0000000..b9d8ef1
--- /dev/null
+++ b/tests/data/test259
@@ -0,0 +1,132 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP FORMPOST
+HTTP proxy
+HTTP proxy Digest auth
+--proxy-anyauth
+</keywords>
+</info>
+# Server-side
+<reply>
+# The stupid test server doesn't response anything at all until the full
+# request has been sent, and then of course the full POST has already been
+# sent!
+<data>
+HTTP/1.1 407 no, tell me who you are first
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Proxy-Authenticate: Digest realm="many secrets", nonce="911"
+Content-Length: 0
+
+</data>
+<data1000>
+HTTP/1.1 200 A OK
+Server: Microsoft-IIS/6.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 3
+
+ok
+</data1000>
+<datacheck>
+HTTP/1.1 407 no, tell me who you are first
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Proxy-Authenticate: Digest realm="many secrets", nonce="911"
+Content-Length: 0
+
+HTTP/1.1 200 A OK
+Server: Microsoft-IIS/6.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 3
+
+ok
+</datacheck>
+
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+<features>
+crypto
+</features>
+ <name>
+HTTP POST multipart with Expect: header using proxy anyauth (Digest)
+ </name>
+ <command>
+-x http://%HOSTIP:%HTTPPORT http://remotehost:54321/we/want/259 -F name=daniel -F tool=curl -F file=@log/test259.txt -U uuuser:pppassword --proxy-anyauth
+</command>
+# We create this file before the command is invoked!
+<file name="log/test259.txt">
+foo-
+This is a moo-
+bar
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^(User-Agent:|Content-Type: multipart/form-data;|------).*
+</strip>
+<protocol>
+POST http://remotehost:54321/we/want/259 HTTP/1.1
+User-Agent: curl/7.10.4 (i686-pc-linux-gnu) libcurl/7.10.4 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: remotehost:54321
+Accept: */*
+Proxy-Connection: Keep-Alive
+Content-Length: 409
+Expect: 100-continue
+Content-Type: multipart/form-data; boundary=----------------------------7c633d5c27ce
+
+------------------------------7c633d5c27ce
+Content-Disposition: form-data; name="name"
+
+daniel
+------------------------------7c633d5c27ce
+Content-Disposition: form-data; name="tool"
+
+curl
+------------------------------7c633d5c27ce
+Content-Disposition: form-data; name="file"; filename="test259.txt"
+Content-Type: text/plain
+
+foo-
+This is a moo-
+bar
+
+------------------------------7c633d5c27ce--
+POST http://remotehost:54321/we/want/259 HTTP/1.1
+User-Agent: curl/7.10.4 (i686-pc-linux-gnu) libcurl/7.10.4 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Proxy-Authorization: Digest username="uuuser", realm="many secrets", nonce="911", uri="/we/want/259", response="b479994d13e60f3aa192a67c5892ddc5"
+Host: remotehost:54321
+Accept: */*
+Proxy-Connection: Keep-Alive
+Content-Length: 409
+Expect: 100-continue
+Content-Type: multipart/form-data; boundary=----------------------------7c633d5c27ce
+
+------------------------------7c633d5c27ce
+Content-Disposition: form-data; name="name"
+
+daniel
+------------------------------7c633d5c27ce
+Content-Disposition: form-data; name="tool"
+
+curl
+------------------------------7c633d5c27ce
+Content-Disposition: form-data; name="file"; filename="test259.txt"
+Content-Type: text/plain
+
+foo-
+This is a moo-
+bar
+
+------------------------------7c633d5c27ce--
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test26 b/tests/data/test26
new file mode 100644
index 0000000..072dbf7
--- /dev/null
+++ b/tests/data/test26
@@ -0,0 +1,45 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+HTTP/1.0 200 Mooo swsclose
+Server: test-server/fake
+Connection: close
+
+*flopp*
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+specify more -o than URLs
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/want/26 -o - -o -
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent: curl.*
+</strip>
+<protocol>
+GET /want/26 HTTP/1.1
+User-Agent: curl/7.8.1-pre3 (sparc-sun-solaris2.7) libcurl 7.8.1-pre3 (OpenSSL 0.9.6a) (krb4 enabled)
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test260 b/tests/data/test260
new file mode 100644
index 0000000..589e86e
--- /dev/null
+++ b/tests/data/test260
@@ -0,0 +1,55 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+-foo-
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP GET URL without slash but with questionmark
+ </name>
+ <command>
+"http://%HOSTIP:%HTTPPORT?260"
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /?260 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test261 b/tests/data/test261
new file mode 100644
index 0000000..e3639bf
--- /dev/null
+++ b/tests/data/test261
@@ -0,0 +1,48 @@
+<testcase>
+<info>
+<keywords>
+FTP
+EPSV
+RETR
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+<data>
+hepp
+</data>
+<servercmd>
+REPLY TYPE 226 Kind of on the positive side!
+</servercmd>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP RETR with 226 response code to TYPE
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/261
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE I
+SIZE 261
+RETR 261
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test262 b/tests/data/test262
new file mode 100644
index 0000000..4c28f22
--- /dev/null
+++ b/tests/data/test262
Binary files differ
diff --git a/tests/data/test263 b/tests/data/test263
new file mode 100644
index 0000000..5088141
--- /dev/null
+++ b/tests/data/test263
@@ -0,0 +1,54 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+IPv6
+HTTP proxy
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 6
+Content-Type: text/html
+
+hello
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<features>
+ipv6
+</features>
+<server>
+http-ipv6
+</server>
+ <name>
+HTTP-IPv6 GET with proxy specified using IPv6-numerical address
+ </name>
+ <command>
+-g -x "http://%HOST6IP:%HTTP6PORT" http://veryveryremotesite.com/263
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:
+</strip>
+<protocol>
+GET http://veryveryremotesite.com/263 HTTP/1.1
+Host: veryveryremotesite.com
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test264 b/tests/data/test264
new file mode 100644
index 0000000..3cfb4d8
--- /dev/null
+++ b/tests/data/test264
@@ -0,0 +1,49 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP proxy
+HTTP proxy Basic auth
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Type: text/html
+Content-Length: 26
+
+the content would go here
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP with proxy string including http:// and user+password
+ </name>
+ <command>
+http://we.want.that.site.com/264 -x http://f%61ke:user@%HOSTIP:%HTTPPORT
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET http://we.want.that.site.com/264 HTTP/1.1
+Proxy-Authorization: Basic ZmFrZTp1c2Vy
+Host: we.want.that.site.com
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test265 b/tests/data/test265
new file mode 100644
index 0000000..18d20a6
--- /dev/null
+++ b/tests/data/test265
@@ -0,0 +1,125 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP POST
+HTTP CONNECT
+HTTP proxy
+HTTP proxy NTLM auth
+</keywords>
+</info>
+
+# Server-side
+<reply>
+
+# this is returned first since we get no proxy-auth
+<data1001>
+HTTP/1.0 407 Authorization Required to proxy me my dear
+Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+Content-Length: 1033
+
+And you should ignore this data.
+QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQz
+</data1001>
+
+# This is supposed to be returned when the server gets the second
+# Authorization: NTLM line passed-in from the client
+<data1002>
+HTTP/1.1 200 Things are fine in proxy land
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+
+</data1002>
+
+# this is returned when we get a GET!
+<data2>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 7
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+daniel
+</data2>
+
+# then this is returned when we get proxy-auth
+<data1000>
+HTTP/1.1 200 OK swsbounce
+Server: no
+
+Nice proxy auth sir!
+</data1000>
+
+<datacheck>
+HTTP/1.0 407 Authorization Required to proxy me my dear
+Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+Content-Length: 1033
+
+HTTP/1.1 200 Things are fine in proxy land
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 7
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+daniel
+</datacheck>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+<features>
+NTLM
+</features>
+ <name>
+HTTP proxy CONNECT auth NTLM and then POST, response-body in the 407
+ </name>
+ <setenv>
+# we force our own host name, in order to make the test machine independent
+CURL_GETHOSTNAME=curlhost
+# we try to use the LD_PRELOAD hack, if not a debug build
+LD_PRELOAD=%PWD/libtest/.libs/libhostname.so
+ </setenv>
+ <command>
+http://test.remote.haxx.se:265/path/2650002 --proxy http://%HOSTIP:%HTTPPORT --proxy-user silly:person --proxy-ntlm --proxytunnel -d "postit"
+</command>
+<precheck>
+chkhostname curlhost
+</precheck>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent: curl/.*
+</strip>
+<protocol nonewline="yes">
+CONNECT test.remote.haxx.se:265 HTTP/1.1
+Host: test.remote.haxx.se:265
+Proxy-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+Proxy-Connection: Keep-Alive
+
+CONNECT test.remote.haxx.se:265 HTTP/1.1
+Host: test.remote.haxx.se:265
+Proxy-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAABQAFAHAAAAAIAAgAdQAAAAAAAAAAAAAABoKBAKAeQjzKtCQ7ubW8S6MN7B59436GAxPu0CVROwwNBsgxML49gcbAXLT/bU+H5wrS9XNpbGx5Y3VybGhvc3Q=
+Proxy-Connection: Keep-Alive
+
+POST /path/2650002 HTTP/1.1
+User-Agent: curl/7.12.3-CVS (i686-pc-linux-gnu) libcurl/7.12.3-CVS OpenSSL/0.9.6b zlib/1.1.4
+Host: test.remote.haxx.se:265
+Accept: */*
+Content-Length: 6
+Content-Type: application/x-www-form-urlencoded
+
+postit
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test266 b/tests/data/test266
new file mode 100644
index 0000000..d520be0
--- /dev/null
+++ b/tests/data/test266
@@ -0,0 +1,78 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+chunked Transfer-Encoding
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 funky chunky!
+Server: fakeit/0.9 fakeitbad/1.0
+Transfer-Encoding: chunked
+Trailer: chunky-trailer
+Connection: mooo
+
+40
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+30
+bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
+21;heresatest=moooo
+cccccccccccccccccccccccccccccccc
+
+0
+chunky-trailer: header data
+
+</data>
+<datacheck>
+HTTP/1.1 200 funky chunky!
+Server: fakeit/0.9 fakeitbad/1.0
+Transfer-Encoding: chunked
+Trailer: chunky-trailer
+Connection: mooo
+
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbcccccccccccccccccccccccccccccccc
+</datacheck>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP GET with chunked Transfer-Encoding and chunked trailer
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/266 -D log/heads266
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /266 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+<file name="log/heads266">
+HTTP/1.1 200 funky chunky!
+Server: fakeit/0.9 fakeitbad/1.0
+Transfer-Encoding: chunked
+Trailer: chunky-trailer
+Connection: mooo
+
+chunky-trailer: header data
+</file>
+</verify>
+
+</testcase>
diff --git a/tests/data/test267 b/tests/data/test267
new file mode 100644
index 0000000..479031c
--- /dev/null
+++ b/tests/data/test267
@@ -0,0 +1,109 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP POST
+HTTP NTLM auth
+</keywords>
+</info>
+# Server-side
+<reply>
+
+<!-- no <data> in this test since we have NTLM from the start
+
+This is supposed to be returned when the server gets a first
+Authorization: NTLM line passed-in from the client -->
+
+<data1001>
+HTTP/1.1 401 Now gimme that second request of crap
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 34
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+This is not the real page either!
+</data1001>
+
+# This is supposed to be returned when the server gets the second
+# Authorization: NTLM line passed-in from the client
+<data1002>
+HTTP/1.1 200 Things are fine in server land swsclose
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page!
+</data1002>
+
+<datacheck>
+HTTP/1.1 401 Now gimme that second request of crap
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 34
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+HTTP/1.1 200 Things are fine in server land swsclose
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page!
+</datacheck>
+
+</reply>
+
+# Client-side
+<client>
+<features>
+NTLM
+</features>
+<server>
+http
+</server>
+ <name>
+HTTP POST with NTLM authorization and added custom headers
+ </name>
+ <setenv>
+# we force our own host name, in order to make the test machine independent
+CURL_GETHOSTNAME=curlhost
+# we try to use the LD_PRELOAD hack, if not a debug build
+LD_PRELOAD=%PWD/libtest/.libs/libhostname.so
+ </setenv>
+ <command>
+http://%HOSTIP:%HTTPPORT/267 -u testuser:testpass --ntlm -d "data" -H "Header1: yes" -H "Header2: no"
+</command>
+<precheck>
+chkhostname curlhost
+</precheck>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol nonewline="yes">
+POST /267 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+User-Agent: curl/7.10.6-pre1 (i686-pc-linux-gnu) libcurl/7.10.6-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Header1: yes
+Header2: no
+Content-Length: 0
+Content-Type: application/x-www-form-urlencoded
+
+POST /267 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoKBAFpkQwKRCZFMhjj0tw47wEjKHRHlvzfxQamFcheMuv8v+xeqphEO5V41xRd7R9deOXRlc3R1c2VyY3VybGhvc3Q=
+User-Agent: curl/7.10.6-pre1 (i686-pc-linux-gnu) libcurl/7.10.6-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Header1: yes
+Header2: no
+Content-Length: 4
+Content-Type: application/x-www-form-urlencoded
+
+data
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test268 b/tests/data/test268
new file mode 100644
index 0000000..c9c7311
--- /dev/null
+++ b/tests/data/test268
@@ -0,0 +1,57 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP POST
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.0 200 OK
+Server: test-server/fake
+Content-Type: text/html
+Content-Length: 0
+
+this is data even though Content-Length is set to zero
+</data>
+<datacheck>
+HTTP/1.0 200 OK
+Server: test-server/fake
+Content-Type: text/html
+Content-Length: 0
+
+</datacheck>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP POST a non-existing file
+ </name>
+ <command>
+ -d @nonesuchfile http://%HOSTIP:%HTTPPORT/268
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+POST /268 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 0
+Content-Type: application/x-www-form-urlencoded
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test269 b/tests/data/test269
new file mode 100644
index 0000000..6b7159b
--- /dev/null
+++ b/tests/data/test269
@@ -0,0 +1,53 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Accept-Ranges: bytes
+Content-Length: 677654
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+muahahaha
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP --ignore-content-length
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/269 --ignore-content-length
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /269 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test27 b/tests/data/test27
new file mode 100644
index 0000000..5ae2ffd
--- /dev/null
+++ b/tests/data/test27
@@ -0,0 +1,56 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+cookies
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 Mooo swsclose
+Connection: close
+Set-Cookie: path=/; thewinneris=nowayyouwin;
+Content-Length: 8
+
+*flopp*
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+Get same cookie page several times
+ </name>
+ <command>
+"http://%HOSTIP:%HTTPPORT/want/{27,27,27}" -b none
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent: curl.*
+</strip>
+<protocol>
+GET /want/27 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /want/27 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Cookie: thewinneris=nowayyouwin
+
+GET /want/27 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Cookie: thewinneris=nowayyouwin
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test270 b/tests/data/test270
new file mode 100644
index 0000000..f4eea97
--- /dev/null
+++ b/tests/data/test270
@@ -0,0 +1,50 @@
+<testcase>
+<info>
+<keywords>
+FTP
+PASV
+RETR
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+data
+ to
+ see
+that FTP
+works
+ so does it?
+</data>
+<servercmd>
+PASVBADIP
+</servercmd>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP RETR PASV --ftp-skip-pasv-ip
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/270 --ftp-skip-pasv-ip --disable-epsv
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+PASV
+TYPE I
+SIZE 270
+RETR 270
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test271 b/tests/data/test271
new file mode 100644
index 0000000..af5a6c6
--- /dev/null
+++ b/tests/data/test271
@@ -0,0 +1,43 @@
+<testcase>
+<info>
+<keywords>
+TFTP
+TFTP RRQ
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data>
+a chunk of
+data
+returned
+ to client
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+tftp
+</server>
+ <name>
+TFTP retrieve
+ </name>
+ <command>
+tftp://%HOSTIP:%TFTPPORT//271 --trace-ascii log/traceit
+</command>
+</client>
+
+#
+# Verify pseudo protocol after the test has been "shot"
+<verify>
+<protocol>
+opcode: 1
+filename: /271
+mode: octet
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test272 b/tests/data/test272
new file mode 100644
index 0000000..f728a2a
--- /dev/null
+++ b/tests/data/test272
@@ -0,0 +1,40 @@
+<testcase>
+<info>
+<keywords>
+FTP
+PASV
+RETR
+</keywords>
+</info>
+# Server-side
+<reply>
+<mdtm>
+213 20040101121212
+</mdtm>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP timed conditioned get file with identical time stamp
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/272 -z "2004 jan 1 12:12:12 UTC"
+</command>
+
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+MDTM 272
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test273 b/tests/data/test273
new file mode 100644
index 0000000..bb23725
--- /dev/null
+++ b/tests/data/test273
@@ -0,0 +1,83 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP Digest auth
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+HTTP/1.1 401 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Digest realm="testrealm", nonce="1053604145"
+WWW-Authenticate: Digest realm="testrealm", nonce="1053604145"
+Content-Type: text/html; charset=iso-8859-1
+
+This is not the real page
+</data>
+
+# This is supposed to be returned when the server gets a
+# Authorization: Digest line passed-in from the client
+<data1000>
+HTTP/1.1 200 OK swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 23
+
+This IS the real page!
+</data1000>
+
+<datacheck>
+HTTP/1.1 401 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Digest realm="testrealm", nonce="1053604145"
+WWW-Authenticate: Digest realm="testrealm", nonce="1053604145"
+Content-Type: text/html; charset=iso-8859-1
+
+HTTP/1.1 200 OK swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 23
+
+This IS the real page!
+</datacheck>
+
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+<features>
+crypto
+</features>
+ <name>
+HTTP with two Digest authorization headers
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/273 -u testuser:testpass --digest
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /273 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /273 HTTP/1.1
+Authorization: Digest username="testuser", realm="testrealm", nonce="1053604145", uri="/273", response="576ae57b1db0039f8c0de43ef58e49e3"
+User-Agent: curl/7.10.5 (i686-pc-linux-gnu) libcurl/7.10.5 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test274 b/tests/data/test274
new file mode 100644
index 0000000..579341c
--- /dev/null
+++ b/tests/data/test274
@@ -0,0 +1,52 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+followlocation
+--max-redirs
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+HTTP/1.1 301 This is a weirdo text message swsclose
+Server: test-server/fake
+Location: data/reply/25
+Content-Length: 0
+Connection: close
+
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP Location: following with --max-redirs 0
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/want/274 -L --max-redirs 0
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent: curl/.*
+</strip>
+<protocol>
+GET /want/274 HTTP/1.1
+User-Agent: curl/7.8.1-pre3 (sparc-sun-solaris2.7) libcurl 7.8.1-pre3 (OpenSSL 0.9.6a) (krb4 enabled)
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+
+<errorcode>
+47
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test275 b/tests/data/test275
new file mode 100644
index 0000000..145c163
--- /dev/null
+++ b/tests/data/test275
@@ -0,0 +1,78 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP CONNECT
+HTTP Basic auth
+HTTP proxy
+HTTP proxy Basic auth
+proxytunnel
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Type: text/html
+Content-Length: 9
+
+contents
+</data>
+<datacheck>
+HTTP/1.1 200 Mighty fine indeed
+
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Type: text/html
+Content-Length: 9
+
+contents
+</datacheck>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP CONNECT with proxytunnel getting two URLs from the same host
+ </name>
+ <command>
+http://remotesite.com/we/want/that/page/275 -p -x %HOSTIP:%HTTPPORT --user iam:myself --proxy-user youare:yourself http://remotesite.com/we/want/that/page/275
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+CONNECT remotesite.com:80 HTTP/1.1
+Host: remotesite.com:80
+Proxy-Authorization: Basic eW91YXJlOnlvdXJzZWxm
+User-Agent: curl/7.10.7-pre2 (i686-pc-linux-gnu) libcurl/7.10.7-pre2 OpenSSL/0.9.7a zlib/1.1.3
+Proxy-Connection: Keep-Alive
+
+GET /we/want/that/page/275 HTTP/1.1
+Authorization: Basic aWFtOm15c2VsZg==
+Host: remotesite.com
+Accept: */*
+
+GET /we/want/that/page/275 HTTP/1.1
+Authorization: Basic aWFtOm15c2VsZg==
+Host: remotesite.com
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test276 b/tests/data/test276
new file mode 100644
index 0000000..34e2235
--- /dev/null
+++ b/tests/data/test276
@@ -0,0 +1,76 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+followlocation
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+HTTP/1.1 301 This is a weirdo text message swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Location: data/2760002.txt?coolsite=http://anotherurl/?a_second/2760002
+Connection: close
+
+This server reply is for testing a simple Location: following
+
+</data>
+<data2>
+HTTP/1.1 200 Followed here fine swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 52
+
+If this is received, the location following worked
+
+</data2>
+<datacheck>
+HTTP/1.1 301 This is a weirdo text message swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Location: data/2760002.txt?coolsite=http://anotherurl/?a_second/2760002
+Connection: close
+
+HTTP/1.1 200 Followed here fine swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 52
+
+If this is received, the location following worked
+
+</datacheck>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP Location: following with multiple question marks in URLs
+ </name>
+ <command>
+"http://%HOSTIP:%HTTPPORT/want?uri=http://anything/276?secondq/276" -L
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /want?uri=http://anything/276?secondq/276 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /data/2760002.txt?coolsite=http://anotherurl/?a_second/2760002 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test277 b/tests/data/test277
new file mode 100644
index 0000000..18e4198
--- /dev/null
+++ b/tests/data/test277
@@ -0,0 +1,59 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP FORMPOST
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 11
+
+blablabla
+
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP RFC1867-type formposting with custom Content-Type
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/want/277 -F name=daniel -H "Content-Type: text/info"
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<strippart>
+s/^------------------------------[a-z0-9]*/------------------------------/
+s/boundary=----------------------------[a-z0-9]*/boundary=----------------------------/
+</strippart>
+<protocol>
+POST /want/277 HTTP/1.1
+User-Agent: curl/7.10.4 (i686-pc-linux-gnu) libcurl/7.10.4 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 145
+Expect: 100-continue
+Content-Type: text/info; boundary=----------------------------
+
+------------------------------
+Content-Disposition: form-data; name="name"
+
+daniel
+--------------------------------
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test278 b/tests/data/test278
new file mode 100644
index 0000000..6c57822
--- /dev/null
+++ b/tests/data/test278
@@ -0,0 +1,49 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP proxy
+HTTP proxy Basic auth
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Type: text/html
+Content-Length: 27
+
+the content would go here
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP with proxy string including http:// and user+empty password
+ </name>
+ <command>
+http://we.want.that.site.com/278 -x http://f%61ke:@%HOSTIP:%HTTPPORT
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET http://we.want.that.site.com/278 HTTP/1.1
+Proxy-Authorization: Basic ZmFrZTo=
+Host: we.want.that.site.com
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test279 b/tests/data/test279
new file mode 100644
index 0000000..5a1938c
--- /dev/null
+++ b/tests/data/test279
@@ -0,0 +1,50 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP proxy
+HTTP proxy Basic auth
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Type: text/html
+Content-Length: 27
+
+the content would go here
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP with proxy string including http:// and user only
+ </name>
+ <command>
+http://we.want.that.site.com/279 -x http://f%61ke@%HOSTIP:%HTTPPORT
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET http://we.want.that.site.com/279 HTTP/1.1
+Proxy-Authorization: Basic ZmFrZTo=
+Host: we.want.that.site.com
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test28 b/tests/data/test28
new file mode 100644
index 0000000..1f80d5f
--- /dev/null
+++ b/tests/data/test28
@@ -0,0 +1,75 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+HTTP/1.1 301 This is a weirdo text message swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Location: /online/1,1795,Welcome,00.html/280002.txt?logout=TRUE
+Connection: close
+
+This server reply is for testing a simple Location: following
+
+</data>
+<data2>
+HTTP/1.1 200 Followed here fine swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 52
+
+If this is received, the location following worked
+
+</data2>
+<datacheck>
+HTTP/1.1 301 This is a weirdo text message swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Location: /online/1,1795,Welcome,00.html/280002.txt?logout=TRUE
+Connection: close
+
+HTTP/1.1 200 Followed here fine swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 52
+
+If this is received, the location following worked
+
+</datacheck>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP Location: following with extra spaces in header
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/want/28 -L
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /want/28 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /online/1,1795,Welcome,00.html/280002.txt?logout=TRUE HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test280 b/tests/data/test280
new file mode 100644
index 0000000..c169993
--- /dev/null
+++ b/tests/data/test280
@@ -0,0 +1,63 @@
+<testcase>
+<info>
+<keywords>
+FTP
+PASV
+LIST
+--ftp-alternative-to-user
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+# When doing LIST, we get the default list output hard-coded in the test
+# FTP server
+<datacheck>
+total 20
+drwxr-xr-x 8 98 98 512 Oct 22 13:06 .
+drwxr-xr-x 8 98 98 512 Oct 22 13:06 ..
+drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT
+-r--r--r-- 1 0 1 35 Jul 16 1996 README
+lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin
+dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev
+drwxrwxrwx 2 98 98 512 May 29 16:04 download.html
+dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc
+drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub
+dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr
+</datacheck>
+<servercmd>
+REPLY USER 530 We don't like USER commands
+COUNT USER 1
+</servercmd>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP --ftp-alternative-to-user on USER failure
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/280/ --ftp-alternative-to-user "USER replacement"
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+USER replacement
+PASS ftp@example.com
+PWD
+CWD 280
+EPSV
+TYPE A
+LIST
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test281 b/tests/data/test281
new file mode 100644
index 0000000..d399fc0
--- /dev/null
+++ b/tests/data/test281
@@ -0,0 +1,65 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP PUT
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+HTTP/1.1 100 Continue
+
+HTTP/1.1 401 Bad Auth swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+WWW-Authenticate: Basic Realm=authenticate
+Server: test-server/fake
+</data>
+<datacheck>
+HTTP/1.1 100 Continue
+
+</datacheck>
+
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP PUT from file with 100 + 401 responses and -f without auth given
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/we/want/281 -f -T log/test281.txt
+</command>
+<file name="log/test281.txt">
+Weird
+ file
+ to
+ upload
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+22
+</errorcode>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+PUT /we/want/281 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 38
+Expect: 100-continue
+
+Weird
+ file
+ to
+ upload
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test282 b/tests/data/test282
new file mode 100644
index 0000000..aa8aba5
--- /dev/null
+++ b/tests/data/test282
@@ -0,0 +1,45 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK swsclose
+
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP GET with no response body or headers
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/282
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /282 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test283 b/tests/data/test283
new file mode 100644
index 0000000..922de51
--- /dev/null
+++ b/tests/data/test283
@@ -0,0 +1,36 @@
+<testcase>
+<info>
+<keywords>
+TFTP
+TFTP RRQ
+FAILURE
+</keywords>
+</info>
+
+#
+# Client-side
+<client>
+<server>
+tftp
+</server>
+ <name>
+TFTP retrieve on invalid file
+ </name>
+ <command>
+tftp://%HOSTIP:%TFTPPORT//invalid-file --trace-ascii log/traceit
+</command>
+</client>
+
+#
+# Verify pseudo protocol after the test has been "shot"
+<verify>
+<errorcode>
+69
+</errorcode>
+<protocol>
+opcode: 1
+filename: /invalid-file
+mode: octet
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test284 b/tests/data/test284
new file mode 100644
index 0000000..0c2a665
--- /dev/null
+++ b/tests/data/test284
@@ -0,0 +1,67 @@
+<testcase>
+<info>
+<keywords>
+TFTP
+TFTP RRQ
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data>
+A chunk of data which exactly fits into
+a 512 byte TFTP block, testing a boundary
+condition in the TFTP receive code.
+789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+tftp
+</server>
+ <name>
+TFTP retrieve of boundary case 512 byte file
+ </name>
+ <command>
+tftp://%HOSTIP:%TFTPPORT//284 --trace-ascii log/traceit
+</command>
+</client>
+
+#
+# Verify pseudo protocol after the test has been "shot"
+<verify>
+<protocol>
+opcode: 1
+filename: /284
+mode: octet
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test285 b/tests/data/test285
new file mode 100644
index 0000000..75a1999
--- /dev/null
+++ b/tests/data/test285
@@ -0,0 +1,44 @@
+<testcase>
+<info>
+<keywords>
+TFTP
+TFTP WRQ
+</keywords>
+</info>
+
+#
+# Client-side
+<client>
+<server>
+tftp
+</server>
+ <name>
+TFTP send
+ </name>
+ <command>
+-T log/test285.txt tftp://%HOSTIP:%TFTPPORT// --trace-ascii log/traceit
+</command>
+<file name="log/test285.txt">
+a chunk of
+data
+sent
+ to server
+</file>
+</client>
+
+#
+# Verify pseudo protocol after the test has been "shot"
+<verify>
+<upload>
+a chunk of
+data
+sent
+ to server
+</upload>
+<protocol>
+opcode: 2
+filename: /test285.txt
+mode: octet
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test286 b/tests/data/test286
new file mode 100644
index 0000000..841ee1e
--- /dev/null
+++ b/tests/data/test286
@@ -0,0 +1,92 @@
+<testcase>
+<info>
+<keywords>
+TFTP
+TFTP WRQ
+</keywords>
+</info>
+
+#
+# Client-side
+<client>
+<server>
+tftp
+</server>
+ <name>
+TFTP send of boundary case 512 byte file
+ </name>
+ <command>
+-T log/test286.txt tftp://%HOSTIP:%TFTPPORT// --trace-ascii log/traceit
+</command>
+<file name="log/test286.txt">
+A chunk of data which exactly fits into
+a 512 byte TFTP block, testing a boundary
+condition in the TFTP transmit code.
+89ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+</file>
+</client>
+
+#
+# Verify pseudo protocol after the test has been "shot"
+<verify>
+<upload>
+A chunk of data which exactly fits into
+a 512 byte TFTP block, testing a boundary
+condition in the TFTP transmit code.
+89ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+123456789ABCDEF
+</upload>
+<protocol>
+opcode: 2
+filename: /test286.txt
+mode: octet
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test287 b/tests/data/test287
new file mode 100644
index 0000000..30f5834
--- /dev/null
+++ b/tests/data/test287
@@ -0,0 +1,54 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP CONNECT
+HTTP proxy
+proxytunnel
+</keywords>
+</info>
+
+# Server-side
+<reply>
+
+# this is returned first since we get no proxy-auth
+<data nocheck="yes">
+HTTP/1.1 405 Method Not Allowed swsclose
+
+And you should ignore this data.
+</data>
+
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP proxy CONNECT with custom User-Agent header
+ </name>
+ <command>
+http://test.remote.haxx.se:287/path/287 -H "User-Agent: looser/2007" --proxy http://%HOSTIP:%HTTPPORT --proxytunnel
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+CONNECT test.remote.haxx.se:287 HTTP/1.1
+Host: test.remote.haxx.se:287
+Proxy-Connection: Keep-Alive
+User-Agent: looser/2007
+
+</protocol>
+# CURLE_RECV_ERROR
+<errorcode>
+56
+</errorcode>
+<stdout>
+HTTP/1.1 405 Method Not Allowed swsclose
+
+</stdout>
+</verify>
+</testcase>
diff --git a/tests/data/test288 b/tests/data/test288
new file mode 100644
index 0000000..da69145
--- /dev/null
+++ b/tests/data/test288
@@ -0,0 +1,42 @@
+<testcase>
+# Server-side
+<reply>
+<data>
+foo
+ bar
+bar
+ foo
+moo
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+none
+</server>
+<features>
+file
+</features>
+ <name>
+file:// with (unsupported) proxy, authentication and range
+ </name>
+<setenv>
+all_proxy=http://fake:user@%HOSTIP:%HTTPPORT/
+</setenv>
+ <command>
+file://localhost/%PWD/log/test288.txt
+</command>
+<file name="log/test288.txt">
+foo
+ bar
+bar
+ foo
+moo
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+</verify>
+</testcase>
diff --git a/tests/data/test289 b/tests/data/test289
new file mode 100644
index 0000000..2720e2e
--- /dev/null
+++ b/tests/data/test289
@@ -0,0 +1,30 @@
+<testcase>
+<info>
+<keywords>
+FTP
+STOR
+Resume
+FAILURE
+</keywords>
+</info>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP resume upload but denied access to local file
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/289 -T log/illegal-nonexistent-file -C -
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+26
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test29 b/tests/data/test29
new file mode 100644
index 0000000..9a7bd9e
--- /dev/null
+++ b/tests/data/test29
@@ -0,0 +1,52 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+timeout
+FAILURE
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+
+_data_result_data_
+</data>
+<postcmd>
+wait 10
+</postcmd>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP with 2 secs timeout
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/want/29 -m 2
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /want/29 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+<errorcode>
+28
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test290 b/tests/data/test290
new file mode 100644
index 0000000..6078a2a
--- /dev/null
+++ b/tests/data/test290
@@ -0,0 +1,43 @@
+<testcase>
+<info>
+<keywords>
+FTP
+--max-filesize
+</keywords>
+</info>
+# Server-side
+<reply>
+<size>
+85
+</size>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP download maximum filesize exceeded
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/290 --max-filesize 30
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+63
+</errorcode>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE I
+SIZE 290
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test291 b/tests/data/test291
new file mode 100644
index 0000000..18e039e
--- /dev/null
+++ b/tests/data/test291
@@ -0,0 +1,47 @@
+<testcase>
+<info>
+<keywords>
+FTP
+RETR
+--max-filesize
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+data
+ to
+ see
+that FTP
+works
+ so does it?
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP download maximum filesize not exceeded
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/291 --max-filesize 100
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE I
+SIZE 291
+RETR 291
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test292 b/tests/data/test292
new file mode 100644
index 0000000..800e8d1
--- /dev/null
+++ b/tests/data/test292
@@ -0,0 +1,56 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+--max-filesize
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+-foo-
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP GET with maximum filesize not exceeded
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/292 --max-filesize 1000
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /292 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test293 b/tests/data/test293
new file mode 100644
index 0000000..d75fc9a
--- /dev/null
+++ b/tests/data/test293
@@ -0,0 +1,60 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+--max-filesize
+FAILURE
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+-foo-
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP GET with maximum filesize exceeded
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/293 --max-filesize 2
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+63
+</errorcode>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /293 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test294 b/tests/data/test294
new file mode 100644
index 0000000..4d7f2b8
--- /dev/null
+++ b/tests/data/test294
@@ -0,0 +1,64 @@
+<testcase>
+<info>
+<keywords>
+FTP
+PASV
+LIST
+ACCT
+--ftp-account
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+# When doing LIST, we get the default list output hard-coded in the test
+# FTP server
+<datacheck>
+total 20
+drwxr-xr-x 8 98 98 512 Oct 22 13:06 .
+drwxr-xr-x 8 98 98 512 Oct 22 13:06 ..
+drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT
+-r--r--r-- 1 0 1 35 Jul 16 1996 README
+lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin
+dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev
+drwxrwxrwx 2 98 98 512 May 29 16:04 download.html
+dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc
+drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub
+dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr
+</datacheck>
+<servercmd>
+REPLY PASS 332 Give me an ACCT now
+REPLY ACCT 230 Thank-you for the ACCT
+</servercmd>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP --ftp-account on ACCT request
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/294/ --ftp-account "data for acct"
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+ACCT data for acct
+PWD
+CWD 294
+EPSV
+TYPE A
+LIST
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test295 b/tests/data/test295
new file mode 100644
index 0000000..5b1ddcf
--- /dev/null
+++ b/tests/data/test295
@@ -0,0 +1,45 @@
+<testcase>
+<info>
+<keywords>
+FTP
+PASV
+LIST
+ACCT
+FAILURE
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+<servercmd>
+REPLY PASS 332 Give me an ACCT now
+REPLY PWD 530 No ACCT, go away
+</servercmd>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP ACCT request without --ftp-account
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/295/
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+67
+</errorcode>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test296 b/tests/data/test296
new file mode 100644
index 0000000..2008c8b
--- /dev/null
+++ b/tests/data/test296
@@ -0,0 +1,48 @@
+<testcase>
+<info>
+<keywords>
+FTP
+PASV
+CWD
+--ftp-method
+multicwd
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+<data>
+bla bla bla
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP CWD with --ftp-method multicwd
+ </name>
+ <command>
+--ftp-method multicwd ftp://%HOSTIP:%FTPPORT/first/second/third/296
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+CWD first
+CWD second
+CWD third
+EPSV
+TYPE I
+SIZE 296
+RETR 296
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test297 b/tests/data/test297
new file mode 100644
index 0000000..36573f8
--- /dev/null
+++ b/tests/data/test297
@@ -0,0 +1,46 @@
+<testcase>
+<info>
+<keywords>
+FTP
+PASV
+CWD
+--ftp-method
+singlecwd
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+<data>
+bla bla bla
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP CWD with --ftp-method singlecwd
+ </name>
+ <command>
+--ftp-method singlecwd ftp://%HOSTIP:%FTPPORT/first/second/third/297
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+CWD first/second/third
+EPSV
+TYPE I
+SIZE 297
+RETR 297
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test298 b/tests/data/test298
new file mode 100644
index 0000000..80913e8
--- /dev/null
+++ b/tests/data/test298
@@ -0,0 +1,45 @@
+<testcase>
+<info>
+<keywords>
+FTP
+PASV
+CWD
+--ftp-method
+nocwd
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+<data>
+bla bla bla
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP CWD with --ftp-method nocwd
+ </name>
+ <command>
+--ftp-method nocwd ftp://%HOSTIP:%FTPPORT/first/second/third/298
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE I
+SIZE first/second/third/298
+RETR first/second/third/298
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test299 b/tests/data/test299
new file mode 100644
index 0000000..a557a14
--- /dev/null
+++ b/tests/data/test299
@@ -0,0 +1,53 @@
+<testcase>
+<info>
+<keywords>
+FTP
+HTTP
+CURLOPT_USERPWD
+HTTP proxy
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+HTTP/1.0 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+
+blablabla
+
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+<features>
+ftp
+</features>
+ <name>
+FTP over HTTP proxy with user:pass not in url
+ </name>
+ <command>
+-x http://%HOSTIP:%HTTPPORT -u michal:aybabtu ftp://host.com/we/want/299
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET ftp://michal:aybabtu@host.com/we/want/299 HTTP/1.1
+Authorization: Basic bWljaGFsOmF5YmFidHU=
+Host: host.com:21
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test3 b/tests/data/test3
new file mode 100644
index 0000000..2167b2a
--- /dev/null
+++ b/tests/data/test3
@@ -0,0 +1,60 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP POST
+HTTP Basic auth
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.0 200 OK
+Server: test-server/fake
+Content-Type: text/html
+Content-Length: 0
+
+this is data even though Content-Length is set to zero
+</data>
+<datacheck>
+HTTP/1.0 200 OK
+Server: test-server/fake
+Content-Type: text/html
+Content-Length: 0
+
+</datacheck>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP POST with auth and contents but with content-length set to 0
+ </name>
+ <command>
+ -d "fooo=mooo&pooo=clue&doo=%20%20%20++++" -u "fake:-user" http://%HOSTIP:%HTTPPORT/3
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol nonewline="yes">
+POST /3 HTTP/1.1
+Authorization: Basic ZmFrZTotdXNlcg==
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 37
+Content-Type: application/x-www-form-urlencoded
+
+fooo=mooo&pooo=clue&doo=%20%20%20++++
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test30 b/tests/data/test30
new file mode 100644
index 0000000..70b8005
--- /dev/null
+++ b/tests/data/test30
@@ -0,0 +1,43 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+FAILURE
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP with no data in server reply
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/want/30
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /want/30 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+<errorcode>
+52
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test300 b/tests/data/test300
new file mode 100644
index 0000000..7b4222d
--- /dev/null
+++ b/tests/data/test300
@@ -0,0 +1,52 @@
+<testcase>
+<info>
+<keywords>
+HTTPS
+HTTP GET
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 7
+
+MooMoo
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<features>
+SSL
+</features>
+<server>
+https
+</server>
+ <name>
+simple HTTPS GET
+ </name>
+ <command>
+-k https://%HOSTIP:%HTTPSPORT/300
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /300 HTTP/1.1
+Host: %HOSTIP:%HTTPSPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test301 b/tests/data/test301
new file mode 100644
index 0000000..d5974ce
--- /dev/null
+++ b/tests/data/test301
@@ -0,0 +1,57 @@
+<testcase>
+<info>
+<keywords>
+HTTPS
+HTTP GET
+HTTP Basic auth
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Type: text/html
+Funny-head: yesyes
+
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<features>
+SSL
+</features>
+<server>
+https
+</server>
+ <name>
+HTTPS GET with user and password
+ </name>
+ <command>
+-k -u fake:user https://%HOSTIP:%HTTPSPORT/301
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /301 HTTP/1.1
+Authorization: Basic ZmFrZTp1c2Vy
+Host: %HOSTIP:%HTTPSPORT
+Accept: */*
+
+</protocol>
+<data>
+[insert full protocol verifiction dump here]
+</data>
+</verify>
+</testcase>
diff --git a/tests/data/test302 b/tests/data/test302
new file mode 100644
index 0000000..1223f1c
--- /dev/null
+++ b/tests/data/test302
@@ -0,0 +1,40 @@
+<testcase>
+<info>
+<keywords>
+HTTPS
+HTTP GET
+HTTP CONNECT
+HTTP proxy
+FAILURE
+</keywords>
+</info>
+
+# Client-side
+<client>
+<features>
+SSL
+</features>
+<server>
+https
+</server>
+ <name>
+HTTPS GET over HTTP proxy fails
+ </name>
+ <command>
+-k -U fake:user -x %HOSTIP:%HTTPPORT https://bad.fakeurl-to.test/slash/302
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+56
+</errorcode>
+<strip>
+^User-Agent:.*
+</strip>
+<data>
+</data>
+</verify>
+</testcase>
diff --git a/tests/data/test303 b/tests/data/test303
new file mode 100644
index 0000000..01dd9eb
--- /dev/null
+++ b/tests/data/test303
@@ -0,0 +1,55 @@
+<testcase>
+<info>
+<keywords>
+HTTPS
+HTTP GET
+timeout
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+
+_data_result_data_
+</data>
+<postcmd>
+wait 20
+</postcmd>
+</reply>
+
+# Client-side
+<client>
+<features>
+SSL
+</features>
+<server>
+https
+</server>
+ <name>
+HTTPS with 8 secs timeout
+ </name>
+ <command>
+-k https://%HOSTIP:%HTTPSPORT/want/303 -m 8
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /want/303 HTTP/1.1
+Host: %HOSTIP:%HTTPSPORT
+Accept: */*
+
+</protocol>
+<errorcode>
+28
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test304 b/tests/data/test304
new file mode 100644
index 0000000..fedf18f
--- /dev/null
+++ b/tests/data/test304
@@ -0,0 +1,72 @@
+<testcase>
+<info>
+<keywords>
+HTTPS
+HTTP POST
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 10
+
+blablabla
+</data>
+</reply>
+
+# Client-side
+<client>
+<features>
+SSL
+</features>
+<server>
+https
+</server>
+ <name>
+HTTPS multipart formpost
+ </name>
+ <command>
+-k https://%HOSTIP:%HTTPSPORT/we/want/304 -F name=daniel -F tool=curl -F file=@log/test304.txt
+</command>
+# We create this file before the command is invoked!
+<file name="log/test304.txt">
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^(User-Agent:|Content-Type: multipart/form-data;|------).*
+</strip>
+<protocol>
+POST /we/want/304 HTTP/1.1
+User-Agent: curl/7.10.4 (i686-pc-linux-gnu) libcurl/7.10.4 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPSPORT
+Accept: */*
+Content-Length: 1386
+Expect: 100-continue
+Content-Type: multipart/form-data; boundary=----------------------------c3b2ef7f0bb8
+
+------------------------------c3b2ef7f0bb8
+Content-Disposition: form-data; name="name"
+
+daniel
+------------------------------c3b2ef7f0bb8
+Content-Disposition: form-data; name="tool"
+
+curl
+------------------------------c3b2ef7f0bb8
+Content-Disposition: form-data; name="file"; filename="test304.txt"
+Content-Type: text/plain
+
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+
+------------------------------c3b2ef7f0bb8--
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test305 b/tests/data/test305
new file mode 100644
index 0000000..858a004
--- /dev/null
+++ b/tests/data/test305
@@ -0,0 +1,35 @@
+<testcase>
+<info>
+<keywords>
+HTTPS
+HTTP GET
+FAILURE
+</keywords>
+</info>
+
+# Client-side
+<client>
+<features>
+SSL
+</features>
+<server>
+https
+</server>
+ <name>
+insecure HTTPS without permission
+ </name>
+ <command>
+https://%HOSTIP:%HTTPSPORT/want/305 --cacert moooo
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<errorcode>
+77
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test306 b/tests/data/test306
new file mode 100644
index 0000000..95d4cef
--- /dev/null
+++ b/tests/data/test306
@@ -0,0 +1,65 @@
+<testcase>
+<info>
+<keywords>
+HTTPS
+HTTP GET
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data>
+No headers at all, just data swsclose
+
+Let's get
+
+a little
+
+so that
+
+we
+
+have
+
+some
+
+test
+
+data to
+
+verify
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<features>
+SSL
+</features>
+<server>
+https
+</server>
+ <name>
+HTTPS GET, receive no headers only data!
+ </name>
+ <command>
+-k https://%HOSTIP:%HTTPSPORT/306
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /306 HTTP/1.1
+Host: %HOSTIP:%HTTPSPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test307 b/tests/data/test307
new file mode 100644
index 0000000..03c2b3c
--- /dev/null
+++ b/tests/data/test307
@@ -0,0 +1,56 @@
+<testcase>
+<info>
+<keywords>
+HTTPS
+HTTP GET
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Date: Tue, 16 Jan 2007 18:00:14 GMT
+Server: test-server/fake
+Content-Length: 7
+
+MooMoo
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<features>
+OpenSSL
+</features>
+<server>
+https
+</server>
+<precheck>
+perl %SRCDIR/libtest/test307.pl %CURL
+</precheck>
+
+ <name>
+simple HTTPS GET with openssl engine
+ </name>
+ <command>
+--engine openssl -k https://%HOSTIP:%HTTPSPORT/307
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /307 HTTP/1.1
+Host: %HOSTIP:%HTTPSPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test308 b/tests/data/test308
new file mode 100644
index 0000000..d20556a
--- /dev/null
+++ b/tests/data/test308
@@ -0,0 +1,34 @@
+<testcase>
+<info>
+<keywords>
+HTTPS
+HTTP GET
+FAILURE
+</keywords>
+</info>
+
+#
+# Client-side
+<client>
+<features>
+OpenSSL
+</features>
+<server>
+https
+</server>
+ <name>
+simple HTTPS GET with invalid crypto engine
+ </name>
+ <command>
+--engine invalid-crypto-engine-xyzzy -k https://%HOSTIP:%HTTPSPORT/308
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+53
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test309 b/tests/data/test309
new file mode 100644
index 0000000..dd04312
--- /dev/null
+++ b/tests/data/test309
@@ -0,0 +1,86 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTPS
+HTTP GET
+followlocation
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+HTTP/1.1 301 This is a weirdo text message swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Location: https://127.0.0.1:8991/data/3090002.txt?coolsite=yes
+Connection: close
+
+This server reply is for testing a simple Location: following to HTTPS URL
+
+</data>
+<data2>
+HTTP/1.1 200 Followed here fine swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 52
+
+If this is received, the location following worked
+
+</data2>
+<datacheck>
+HTTP/1.1 301 This is a weirdo text message swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Location: https://127.0.0.1:8991/data/3090002.txt?coolsite=yes
+Connection: close
+
+HTTP/1.1 200 Followed here fine swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 52
+
+If this is received, the location following worked
+
+</datacheck>
+</reply>
+
+# Client-side
+<client>
+<features>
+SSL
+</features>
+<server>
+http
+https
+</server>
+ <name>
+HTTP Location: redirect to HTTPS URL
+ </name>
+ <command>
+-k http://%HOSTIP:%HTTPPORT/want/309 -L
+</command>
+# The data section doesn't do variable substitution, so we must assert this
+<precheck>
+perl -e "print 'Test requires default test server host and port' if ( '%HOSTIP' ne '127.0.0.1' || '%HTTPSPORT' ne '8991' );"
+</precheck>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /want/309 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /data/3090002.txt?coolsite=yes HTTP/1.1
+Host: %HOSTIP:%HTTPSPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test31 b/tests/data/test31
new file mode 100644
index 0000000..d06bc11
--- /dev/null
+++ b/tests/data/test31
@@ -0,0 +1,78 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+cookies
+cookiejar
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 4
+Content-Type: text/html
+Funny-head: yesyes
+Set-Cookie: foobar=name; domain=anything.com; path=/ ; secure
+Set-Cookie:ismatch=this ; domain=127.0.0.1; path=/silly/
+Set-Cookie: partmatch=present; domain=127.0.0.1 ; path=/;
+Set-Cookie:eat=this; domain=moo.foo.moo;
+Set-Cookie: eat=this-too; domain=.foo.moo;
+Set-Cookie: nodomainnovalue
+Set-Cookie: nodomain=value; expires=Fri Feb 2 11:56:27 GMT 2035
+Set-Cookie: novalue; domain=reallysilly
+Set-Cookie: test=yes; domain=foo.com; expires=Sat Feb 2 11:56:27 GMT 2030
+Set-Cookie: test2=yes; domain=se; expires=Sat Feb 2 11:56:27 GMT 2030
+Set-Cookie: magic=yessir; path=/silly/; HttpOnly
+Set-Cookie: blexp=yesyes; domain=.0.0.1; domain=.0.0.1; expiry=totally bad;
+
+boo
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP with weirdly formatted cookies and cookiejar storage
+ </name>
+# Explicitly set the time zone to a known good one, in case the user is
+# using one of the 'right' zones that take into account leap seconds
+# which causes the cookie expiry times to be different.
+<setenv>
+TZ=GMT
+</setenv>
+ <command>
+http://%HOSTIP:%HTTPPORT/we/want/31 -b none -c log/jar31.txt
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /we/want/31 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+<file name="log/jar31.txt" mode="text">
+# Netscape HTTP Cookie File
+# http://curl.haxx.se/rfc/cookie_spec.html
+# This file was generated by libcurl! Edit at your own risk.
+
+.127.0.0.1 TRUE /silly/ FALSE 0 ismatch this
+.127.0.0.1 TRUE / FALSE 0 partmatch present
+127.0.0.1 FALSE /we/want/ FALSE 2054030187 nodomain value
+#HttpOnly_127.0.0.1 FALSE /silly/ FALSE 0 magic yessir
+.0.0.1 TRUE /we/want/ FALSE 0 blexp yesyes
+</file>
+</verify>
+</testcase>
diff --git a/tests/data/test310 b/tests/data/test310
new file mode 100644
index 0000000..e7a9379
--- /dev/null
+++ b/tests/data/test310
@@ -0,0 +1,57 @@
+<testcase>
+<info>
+<keywords>
+HTTPS
+HTTP GET
+PEM certificate
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 7
+
+MooMoo
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<features>
+SSL
+</features>
+<server>
+https Server-localhost-sv.pem
+</server>
+ <name>
+simple HTTPS GET
+ </name>
+ <command>
+--cacert %SRCDIR/certs/EdelCurlRoot-ca.crt https://localhost:%HTTPSPORT/310
+</command>
+# Ensure that we're running on localhost because we're checking the host name
+<precheck>
+perl -e "print 'Test requires default test server host' if ( '%HOSTIP' ne '127.0.0.1' );"
+</precheck>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /310 HTTP/1.1
+Host: localhost:%HTTPSPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test311 b/tests/data/test311
new file mode 100644
index 0000000..0465ed1
--- /dev/null
+++ b/tests/data/test311
@@ -0,0 +1,43 @@
+<testcase>
+<info>
+<keywords>
+HTTPS
+HTTP GET
+PEM certificate
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+</reply>
+
+#
+# Client-side
+<client>
+<features>
+SSL
+</features>
+<server>
+https Server-localhost0h-sv.pem
+</server>
+ <name>
+HTTPS wrong subjectAltName but right CN
+ </name>
+ <command>
+--cacert %SRCDIR/certs/EdelCurlRoot-ca.crt https://localhost:%HTTPSPORT/311
+</command>
+# Ensure that we're running on localhost because we're checking the host name
+<precheck>
+perl -e "print 'Test requires default test server host' if ( '%HOSTIP' ne '127.0.0.1' );"
+</precheck>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+51
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test312 b/tests/data/test312
new file mode 100644
index 0000000..af4422f
--- /dev/null
+++ b/tests/data/test312
@@ -0,0 +1,43 @@
+<testcase>
+<info>
+<keywords>
+HTTPS
+HTTP GET
+PEM certificate
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+</reply>
+
+#
+# Client-side
+<client>
+<features>
+SSL
+</features>
+<server>
+https Server-localhost.nn-sv.pem
+</server>
+ <name>
+HTTPS GET to localhost and null-prefixed CN cert
+ </name>
+ <command>
+--cacert %SRCDIR/certs/EdelCurlRoot-ca.crt https://localhost:%HTTPSPORT/312
+</command>
+# Ensure that we're running on localhost because we're checking the host name
+<precheck>
+perl -e "print 'Test requires default test server host' if ( '%HOSTIP' ne '127.0.0.1' );"
+</precheck>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+51
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test313 b/tests/data/test313
new file mode 100644
index 0000000..c54495a
--- /dev/null
+++ b/tests/data/test313
@@ -0,0 +1,39 @@
+<testcase>
+<info>
+<keywords>
+HTTPS
+HTTP GET
+PEM certificate
+CRL
+</keywords>
+</info>
+
+#
+# Client-side
+<client>
+<features>
+SSL
+</features>
+<server>
+https Server-localhost-sv.pem
+</server>
+ <name>
+CRL test
+ </name>
+ <command>
+--cacert %SRCDIR/certs/EdelCurlRoot-ca.crt --crlfile %SRCDIR/certs/Server-localhost-sv.crl https://localhost:%HTTPSPORT/313
+</command>
+# Ensure that we're running on localhost because we're checking the host name
+<precheck>
+perl -e "print 'Test requires default test server host' if ( '%HOSTIP' ne '127.0.0.1' );"
+</precheck>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+60
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test32 b/tests/data/test32
new file mode 100644
index 0000000..992ffcb
--- /dev/null
+++ b/tests/data/test32
@@ -0,0 +1,56 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+-G
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+-foo-
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP with -d and -G
+ </name>
+ <command>
+-d "foo=moo&moo=poo" http://%HOSTIP:%HTTPPORT/32 -G
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /32?foo=moo&moo=poo HTTP/1.1
+User-Agent: curl/7.9.5 (i686-pc-linux-gnu) libcurl 7.9.5-cvs (OpenSSL 0.9.5) (ipv6 enabled)
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test33 b/tests/data/test33
new file mode 100644
index 0000000..82cf80b
--- /dev/null
+++ b/tests/data/test33
@@ -0,0 +1,64 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP PUT
+Resume
+Content-Range
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+HTTP/1.1 OK swsclose
+
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP PUT with resume
+ </name>
+<file name="log/test33.txt">
+012345678
+012345678
+012345678
+012345678
+012345678
+012345678
+012345678
+012345678
+012345678
+012345678
+</file>
+ <command>
+http://%HOSTIP:%HTTPPORT/33 -Tlog/test33.txt -C 50
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+PUT /33 HTTP/1.1
+Content-Range: bytes 50-99/100
+User-Agent: curl/7.6 (sparc-sun-solaris2.7) libcurl 7.6-pre4 (SSL 0.9.6) (krb4 enabled)
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 50
+Expect: 100-continue
+
+012345678
+012345678
+012345678
+012345678
+012345678
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test34 b/tests/data/test34
new file mode 100644
index 0000000..a332b8c
--- /dev/null
+++ b/tests/data/test34
@@ -0,0 +1,66 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+chunked Transfer-Encoding
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 funky chunky!
+Server: fakeit/0.9 fakeitbad/1.0
+Transfer-Encoding: chunked
+Connection: mooo
+
+40
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+30
+bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
+21;heresatest=moooo
+cccccccccccccccccccccccccccccccc
+
+0
+
+</data>
+<datacheck>
+HTTP/1.1 200 funky chunky!
+Server: fakeit/0.9 fakeitbad/1.0
+Transfer-Encoding: chunked
+Connection: mooo
+
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbcccccccccccccccccccccccccccccccc
+</datacheck>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP GET with chunked Transfer-Encoding
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/34
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /34 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+
+</testcase>
diff --git a/tests/data/test35 b/tests/data/test35
new file mode 100644
index 0000000..85733a4
--- /dev/null
+++ b/tests/data/test35
Binary files differ
diff --git a/tests/data/test350 b/tests/data/test350
new file mode 100644
index 0000000..9c22d30
--- /dev/null
+++ b/tests/data/test350
@@ -0,0 +1,57 @@
+<testcase>
+<info>
+<keywords>
+FTP
+PASV
+LIST
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+# When doing LIST, we get the default list output hard-coded in the test
+# FTP server
+<datacheck>
+total 20
+drwxr-xr-x 8 98 98 512 Oct 22 13:06 .
+drwxr-xr-x 8 98 98 512 Oct 22 13:06 ..
+drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT
+-r--r--r-- 1 0 1 35 Jul 16 1996 README
+lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin
+dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev
+drwxrwxrwx 2 98 98 512 May 29 16:04 download.html
+dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc
+drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub
+dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr
+</datacheck>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP root dir list multicwd
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT// --ftp-method multicwd
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+CWD /
+EPSV
+TYPE A
+LIST
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test351 b/tests/data/test351
new file mode 100644
index 0000000..5d44a64
--- /dev/null
+++ b/tests/data/test351
@@ -0,0 +1,56 @@
+<testcase>
+<info>
+<keywords>
+FTP
+PASV
+LIST
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+# When doing LIST, we get the default list output hard-coded in the test
+# FTP server
+<datacheck>
+total 20
+drwxr-xr-x 8 98 98 512 Oct 22 13:06 .
+drwxr-xr-x 8 98 98 512 Oct 22 13:06 ..
+drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT
+-r--r--r-- 1 0 1 35 Jul 16 1996 README
+lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin
+dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev
+drwxrwxrwx 2 98 98 512 May 29 16:04 download.html
+dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc
+drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub
+dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr
+</datacheck>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP root dir list nocwd
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT// --ftp-method nocwd
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE A
+LIST /
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test352 b/tests/data/test352
new file mode 100644
index 0000000..d868894
--- /dev/null
+++ b/tests/data/test352
@@ -0,0 +1,57 @@
+<testcase>
+<info>
+<keywords>
+FTP
+PASV
+LIST
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+# When doing LIST, we get the default list output hard-coded in the test
+# FTP server
+<datacheck>
+total 20
+drwxr-xr-x 8 98 98 512 Oct 22 13:06 .
+drwxr-xr-x 8 98 98 512 Oct 22 13:06 ..
+drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT
+-r--r--r-- 1 0 1 35 Jul 16 1996 README
+lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin
+dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev
+drwxrwxrwx 2 98 98 512 May 29 16:04 download.html
+dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc
+drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub
+dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr
+</datacheck>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP root dir list singlecwd
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT// --ftp-method singlecwd
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+CWD /
+EPSV
+TYPE A
+LIST
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test353 b/tests/data/test353
new file mode 100644
index 0000000..417b8c3
--- /dev/null
+++ b/tests/data/test353
@@ -0,0 +1,56 @@
+<testcase>
+<info>
+<keywords>
+FTP
+PASV
+LIST
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+# When doing LIST, we get the default list output hard-coded in the test
+# FTP server
+<datacheck>
+total 20
+drwxr-xr-x 8 98 98 512 Oct 22 13:06 .
+drwxr-xr-x 8 98 98 512 Oct 22 13:06 ..
+drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT
+-r--r--r-- 1 0 1 35 Jul 16 1996 README
+lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin
+dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev
+drwxrwxrwx 2 98 98 512 May 29 16:04 download.html
+dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc
+drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub
+dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr
+</datacheck>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP home dir list singlecwd
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/ --ftp-method singlecwd
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE A
+LIST
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test354 b/tests/data/test354
new file mode 100644
index 0000000..a694932
--- /dev/null
+++ b/tests/data/test354
@@ -0,0 +1,50 @@
+<testcase>
+<info>
+<keywords>
+FTP
+PASV
+RETR
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+data
+ to
+ see
+that FTP
+works
+ so does it?
+</data>
+<servercmd>
+REPLY USER 200 fine, proceed without password
+</servercmd>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP without password
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/354
+</command>
+
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PWD
+EPSV
+TYPE I
+SIZE 354
+RETR 354
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test36 b/tests/data/test36
new file mode 100644
index 0000000..4e3fd8c
--- /dev/null
+++ b/tests/data/test36
@@ -0,0 +1,66 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+chunked Transfer-Encoding
+FAILURE
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 funky chunky!
+Server: fakeit/0.9 fakeitbad/1.0
+Transfer-Encoding: chunked
+Connection: mooo
+
+2
+a
+
+ILLEGAL
+bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
+</data>
+<datacheck>
+HTTP/1.1 200 funky chunky!
+Server: fakeit/0.9 fakeitbad/1.0
+Transfer-Encoding: chunked
+Connection: mooo
+
+a
+</datacheck>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP GET with bad chunked Transfer-Encoding
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/36
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+56
+</errorcode>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /36 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+
+</testcase>
diff --git a/tests/data/test37 b/tests/data/test37
new file mode 100644
index 0000000..7687623
--- /dev/null
+++ b/tests/data/test37
@@ -0,0 +1,47 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+FAILURE
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+<data>
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP GET with nothing returned from server
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/37
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+52
+</errorcode>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /37 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+
+</testcase>
diff --git a/tests/data/test38 b/tests/data/test38
new file mode 100644
index 0000000..7515586
--- /dev/null
+++ b/tests/data/test38
@@ -0,0 +1,61 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+Resume
+FAILURE
+</keywords>
+</info>
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.0 200 Mooo
+Date: Mon, 13 Nov 2000 13:41:09 GMT
+Server: myown/1.0
+Connection: close
+
+todelooooo lalalala yada yada, we know nothing about ranges ;-)
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP resume request without server supporting it
+ </name>
+ <command option="no-output">
+http://%HOSTIP:%HTTPPORT/want/38 -C - --no-include -o log/fewl.txt
+</command>
+<file name="log/fewl.txt">
+This text is here to simulate a partly downloaded file to resume
+download on.
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+33
+</errorcode>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /want/38 HTTP/1.1
+Range: bytes=78-
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+
+# the download target file must remain untouched
+<file name="log/fewl.txt">
+This text is here to simulate a partly downloaded file to resume
+download on.
+</file>
+</verify>
+</testcase>
diff --git a/tests/data/test39 b/tests/data/test39
new file mode 100644
index 0000000..2c8da33
--- /dev/null
+++ b/tests/data/test39
@@ -0,0 +1,91 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP FORMPOST
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 10
+
+blablabla
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP RFC1867-type formposting with filename= and type=
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/we/want/39 -F name=daniel -F tool=curl --form-string "str1=@literal" --form-string "str2=<verbatim;type=xxx/yyy" -F "file=@log/test39.txt;type=moo/foobar;filename=fakerfile" -F file2=@log/test39.txt
+</command>
+# We create this file before the command is invoked!
+<file name="log/test39.txt">
+foo bar
+This is a bar foo
+bar
+foo
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^(User-Agent:|Content-Type: multipart/form-data;|-------).*
+</strip>
+<protocol>
+POST /we/want/39 HTTP/1.1
+User-Agent: curl/7.10.4 (i686-pc-linux-gnu) libcurl/7.10.4 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 810
+Expect: 100-continue
+Content-Type: multipart/form-data; boundary=----------------------------24e78000bd32
+
+------------------------------24e78000bd32
+Content-Disposition: form-data; name="name"
+
+daniel
+------------------------------24e78000bd32
+Content-Disposition: form-data; name="tool"
+
+curl
+------------------------------24e78000bd32
+Content-Disposition: form-data; name="str1"
+
+@literal
+------------------------------24e78000bd32
+Content-Disposition: form-data; name="str2"
+
+<verbatim;type=xxx/yyy
+------------------------------24e78000bd32
+Content-Disposition: form-data; name="file"; filename="fakerfile"
+Content-Type: moo/foobar
+
+foo bar
+This is a bar foo
+bar
+foo
+
+------------------------------24e78000bd32
+Content-Disposition: form-data; name="file2"; filename="test39.txt"
+Content-Type: text/plain
+
+foo bar
+This is a bar foo
+bar
+foo
+
+------------------------------24e78000bd32--
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test4 b/tests/data/test4
new file mode 100644
index 0000000..ce6bfc8
--- /dev/null
+++ b/tests/data/test4
@@ -0,0 +1,51 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP added headers
+HTTP replaced headers
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake swsclose
+Content-Type: text/html
+Funny-head: yesyes
+
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+Replaced internal and added custom HTTP headers
+ </name>
+ <command>
+ -H "extra-header: here" -H "Accept: replaced" http://%HOSTIP:%HTTPPORT/4
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /4 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+extra-header: here
+Accept: replaced
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test40 b/tests/data/test40
new file mode 100644
index 0000000..b56ff75
--- /dev/null
+++ b/tests/data/test40
@@ -0,0 +1,74 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+followlocation
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 302 OK swsclose
+Location: ../moo.html/?name=d a niel&testcase=/400002
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+
+</data>
+<data2>
+HTTP/1.1 200 OK swsclose
+Location: this should be ignored
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+
+body
+</data2>
+<datacheck>
+HTTP/1.1 302 OK swsclose
+Location: ../moo.html/?name=d a niel&testcase=/400002
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+
+HTTP/1.1 200 OK swsclose
+Location: this should be ignored
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+
+body
+</datacheck>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP redirect with whitespace after ? (and conversion)
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/we/are/all/twits/40 -L
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /we/are/all/twits/40 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /we/are/all/moo.html/?name=d+a+niel&testcase=/400002 HTTP/1.1
+User-Agent: curl/7.10 (i686-pc-linux-gnu) libcurl/7.10 OpenSSL/0.9.6c ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test400 b/tests/data/test400
new file mode 100644
index 0000000..75d5979
--- /dev/null
+++ b/tests/data/test400
@@ -0,0 +1,61 @@
+<testcase>
+<info>
+<keywords>
+FTPS
+PASV
+LIST
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+# When doing LIST, we get the default list output hard-coded in the test
+# FTPS server
+<datacheck>
+total 20
+drwxr-xr-x 8 98 98 512 Oct 22 13:06 .
+drwxr-xr-x 8 98 98 512 Oct 22 13:06 ..
+drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT
+-r--r--r-- 1 0 1 35 Jul 16 1996 README
+lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin
+dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev
+drwxrwxrwx 2 98 98 512 May 29 16:04 download.html
+dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc
+drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub
+dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr
+</datacheck>
+</reply>
+
+#
+# Client-side
+<client>
+<features>
+SSL
+</features>
+<server>
+ftps
+</server>
+ <name>
+FTPS dir list PASV unencrypted data
+ </name>
+ <command>
+-k --ftp-ssl-control ftps://%HOSTIP:%FTPSPORT/
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PBSZ 0
+PROT C
+PWD
+EPSV
+TYPE A
+LIST
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test401 b/tests/data/test401
new file mode 100644
index 0000000..cb01c1c
--- /dev/null
+++ b/tests/data/test401
@@ -0,0 +1,56 @@
+<testcase>
+<info>
+<keywords>
+FTPS
+EPSV
+STOR
+</keywords>
+</info>
+
+# Client-side
+<client>
+<features>
+SSL
+</features>
+<server>
+ftps
+</server>
+ <name>
+FTPS PASV upload file
+ </name>
+<file name="log/test401.txt">
+data
+ to
+ see
+that FTPS
+works
+ so does it?
+</file>
+ <command>
+-k --ftp-ssl-control ftps://%HOSTIP:%FTPSPORT/401 -T log/test401.txt
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<upload>
+data
+ to
+ see
+that FTPS
+works
+ so does it?
+</upload>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PBSZ 0
+PROT C
+PWD
+EPSV
+TYPE I
+STOR 401
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test402 b/tests/data/test402
new file mode 100644
index 0000000..272c4e3
--- /dev/null
+++ b/tests/data/test402
@@ -0,0 +1,35 @@
+<testcase>
+<info>
+<keywords>
+FTPS
+FAILURE
+</keywords>
+</info>
+
+# Client-side
+<client>
+<features>
+SSL
+</features>
+<server>
+ftp
+</server>
+ <name>
+FTP SSL required on non-SSL server
+ </name>
+ <command>
+-k --ftp-ssl-reqd ftp://%HOSTIP:%FTPPORT/402
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+64
+</errorcode>
+<protocol>
+AUTH SSL
+AUTH TLS
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test403 b/tests/data/test403
new file mode 100644
index 0000000..2b8ff5e
--- /dev/null
+++ b/tests/data/test403
@@ -0,0 +1,64 @@
+<testcase>
+<info>
+<keywords>
+FTPS
+PASV
+LIST
+CCC
+FAILURE
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+# When doing LIST, we get the default list output hard-coded in the test
+# FTPS server
+<datacheck>
+total 20
+drwxr-xr-x 8 98 98 512 Oct 22 13:06 .
+drwxr-xr-x 8 98 98 512 Oct 22 13:06 ..
+drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT
+-r--r--r-- 1 0 1 35 Jul 16 1996 README
+lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin
+dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev
+drwxrwxrwx 2 98 98 512 May 29 16:04 download.html
+dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc
+drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub
+dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr
+</datacheck>
+</reply>
+
+#
+# Client-side
+<client>
+<features>
+SSL
+</features>
+<server>
+ftps
+</server>
+ <name>
+FTPS with CCC not supported by server
+ </name>
+ <command>
+-k --ftp-ssl-control --ftp-ssl-ccc ftps://%HOSTIP:%FTPSPORT/
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PBSZ 0
+PROT C
+CCC
+PWD
+EPSV
+TYPE A
+LIST
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test404 b/tests/data/test404
new file mode 100644
index 0000000..9766630
--- /dev/null
+++ b/tests/data/test404
@@ -0,0 +1,31 @@
+<testcase>
+<info>
+<keywords>
+FTPS
+FAILURE
+</keywords>
+</info>
+
+# Client-side
+<client>
+<features>
+SSL
+</features>
+<server>
+ftps
+</server>
+ <name>
+FTPS with invalid cacert
+ </name>
+ <command>
+--ftp-ssl-control --cacert moooo ftps://%HOSTIP:%FTPSPORT/
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+77
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test405 b/tests/data/test405
new file mode 100644
index 0000000..29e7af2
--- /dev/null
+++ b/tests/data/test405
@@ -0,0 +1,34 @@
+<testcase>
+<info>
+<keywords>
+FTPS
+FAILURE
+</keywords>
+</info>
+
+# Client-side
+<client>
+<features>
+SSL
+</features>
+<server>
+ftp
+</server>
+ <name>
+FTPS operation to FTP port
+ </name>
+ <command>
+-m 5 -k ftps://%HOSTIP:%FTPPORT/path/to/file/405
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+# error code 35 is CURLE_SSL_CONNECT_ERROR
+# GnuTLS seems to not fail on its handshake but instead times out which gives
+# error 28
+<errorcode>
+35,28
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test406 b/tests/data/test406
new file mode 100644
index 0000000..3259bc6
--- /dev/null
+++ b/tests/data/test406
@@ -0,0 +1,66 @@
+<testcase>
+<info>
+<keywords>
+FTPS
+PORT
+LIST
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+# When doing LIST, we get the default list output hard-coded in the test
+# FTPS server
+<datacheck>
+total 20
+drwxr-xr-x 8 98 98 512 Oct 22 13:06 .
+drwxr-xr-x 8 98 98 512 Oct 22 13:06 ..
+drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT
+-r--r--r-- 1 0 1 35 Jul 16 1996 README
+lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin
+dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev
+drwxrwxrwx 2 98 98 512 May 29 16:04 download.html
+dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc
+drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub
+dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr
+</datacheck>
+</reply>
+
+#
+# Client-side
+<client>
+<features>
+SSL
+</features>
+<server>
+ftps
+</server>
+ <name>
+FTPS dir list, PORT with specified IP
+ </name>
+ <command>
+-k --ftp-ssl-control -P %CLIENTIP ftps://%HOSTIP:%FTPSPORT/
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+# Strip all valid kinds of PORT and EPRT that curl can send
+<strip>
+^PORT \d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3}
+^EPRT \|1\|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\|\d{1,5}\|
+</strip>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PBSZ 0
+PROT C
+PWD
+PORT 127,0,0,1,243,212
+TYPE A
+LIST
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test407 b/tests/data/test407
new file mode 100644
index 0000000..8c14fa8
--- /dev/null
+++ b/tests/data/test407
@@ -0,0 +1,59 @@
+<testcase>
+<info>
+<keywords>
+FTPS
+PASV
+RETR
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+data blobb
+</data>
+
+# data is sent to stdout
+</reply>
+
+# Client-side
+<client>
+<features>
+SSL
+</features>
+<server>
+ftps
+</server>
+ <name>
+Get two FTPS files from the same remote dir: no second CWD
+ </name>
+ <command>
+-k --ftp-ssl-control ftps://%HOSTIP:%FTPSPORT/a/path/407 ftps://%HOSTIP:%FTPSPORT/a/path/407
+</command>
+<stdout>
+data blobb
+data blobb
+</stdout>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PBSZ 0
+PROT C
+PWD
+CWD a
+CWD path
+EPSV
+TYPE I
+SIZE 407
+RETR 407
+EPSV
+SIZE 407
+RETR 407
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test408 b/tests/data/test408
new file mode 100644
index 0000000..d0aa13b
--- /dev/null
+++ b/tests/data/test408
@@ -0,0 +1,61 @@
+<testcase>
+<info>
+<keywords>
+FTPS
+PORT
+STOR
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+</data>
+</reply>
+
+# Client-side
+<client>
+<features>
+SSL
+</features>
+<server>
+ftps
+</server>
+ <name>
+FTPS PORT upload with CWD
+ </name>
+ <command>
+-k --ftp-ssl-control ftps://%HOSTIP:%FTPSPORT/CWD/STOR/RETR/408 -T log/upload408 -P -
+</command>
+<file name="log/upload408">
+Moooooooooooo
+ upload this
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+# Strip all valid kinds of PORT and EPRT that curl can send
+<strip>
+^PORT \d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3}
+^EPRT \|1\|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\|\d{1,5}\|
+</strip>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PBSZ 0
+PROT C
+PWD
+CWD CWD
+CWD STOR
+CWD RETR
+PORT 127,0,0,1,5,109
+TYPE I
+STOR 408
+QUIT
+</protocol>
+<upload>
+Moooooooooooo
+ upload this
+</upload>
+</verify>
+</testcase>
diff --git a/tests/data/test409 b/tests/data/test409
new file mode 100644
index 0000000..d7801a8
--- /dev/null
+++ b/tests/data/test409
@@ -0,0 +1,56 @@
+<testcase>
+<info>
+<keywords>
+FTPS
+EPSV
+STOR
+</keywords>
+</info>
+
+# Client-side
+<client>
+<features>
+SSL
+</features>
+<server>
+ftps
+</server>
+ <name>
+FTPS PASV upload file
+ </name>
+<file name="log/test409.txt">
+data
+ to
+ see
+that FTP
+works
+ so does it?
+</file>
+ <command>
+-k --ftp-ssl-control ftps://%HOSTIP:%FTPSPORT/409 -T log/test409.txt
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<upload>
+data
+ to
+ see
+that FTP
+works
+ so does it?
+</upload>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PBSZ 0
+PROT C
+PWD
+EPSV
+TYPE I
+STOR 409
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test41 b/tests/data/test41
new file mode 100644
index 0000000..08eca38
--- /dev/null
+++ b/tests/data/test41
@@ -0,0 +1,32 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP FORMPOST
+FAILURE
+</keywords>
+</info>
+# Server-side
+<reply>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP formpost with missing file
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/want/41 -F moo=@boo
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+26
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test42 b/tests/data/test42
new file mode 100644
index 0000000..ec67426
--- /dev/null
+++ b/tests/data/test42
@@ -0,0 +1,74 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+followlocation
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 302 OK swsclose
+Location: ../m o o.html/420002
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+
+</data>
+<data2>
+HTTP/1.1 200 OK swsclose
+Location: this should be ignored
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+
+body
+</data2>
+<datacheck>
+HTTP/1.1 302 OK swsclose
+Location: ../m o o.html/420002
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+
+HTTP/1.1 200 OK swsclose
+Location: this should be ignored
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+
+body
+</datacheck>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP redirect with whitespace in path (and conversion)
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/we/are/all/twits/42 -L
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /we/are/all/twits/42 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /we/are/all/m%20o%20o.html/420002 HTTP/1.1
+User-Agent: curl/7.10 (i686-pc-linux-gnu) libcurl/7.10 OpenSSL/0.9.6c ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test43 b/tests/data/test43
new file mode 100644
index 0000000..e5535bb
--- /dev/null
+++ b/tests/data/test43
@@ -0,0 +1,79 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+followlocation
+HTTP proxy
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+HTTP/1.1 301 This is a weirdo text message
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Location: data/430002.txt?coolsite=yes
+Connection: close
+
+This server reply is for testing a simple Location: following
+
+</data>
+<data2>
+HTTP/1.1 200 Followed here fine swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 52
+
+If this is received, the location following worked
+
+</data2>
+<datacheck>
+HTTP/1.1 301 This is a weirdo text message
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Location: data/430002.txt?coolsite=yes
+Connection: close
+
+HTTP/1.1 200 Followed here fine swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 52
+
+If this is received, the location following worked
+
+</datacheck>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP Location: following over HTTP proxy
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/want/43 -L -x %HOSTIP:%HTTPPORT
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET http://%HOSTIP:%HTTPPORT/want/43 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+GET http://%HOSTIP:%HTTPPORT/want/data/430002.txt?coolsite=yes HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test44 b/tests/data/test44
new file mode 100644
index 0000000..8220a1a
--- /dev/null
+++ b/tests/data/test44
@@ -0,0 +1,72 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP FORMPOST
+HTTP replaced headers
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+HTTP/1.0 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+
+blablabla
+
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP RFC1867-type formposting without Expect: header
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/we/want/44 -F name=daniel -F tool=curl -F file=@log/test44.txt -H "Expect:"
+</command>
+# We create this file before the command is invoked!
+<file name="log/test44.txt">
+foo-
+This is a moo-
+bar
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^(User-Agent:|Content-Type: multipart/form-data;|------).*
+</strip>
+<protocol>
+POST /we/want/44 HTTP/1.1
+User-Agent: curl/7.10.4 (i686-pc-linux-gnu) libcurl/7.10.4 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 408
+Content-Type: multipart/form-data; boundary=----------------------------7c633d5c27ce
+
+------------------------------7c633d5c27ce
+Content-Disposition: form-data; name="name"
+
+daniel
+------------------------------7c633d5c27ce
+Content-Disposition: form-data; name="tool"
+
+curl
+------------------------------7c633d5c27ce
+Content-Disposition: form-data; name="file"; filename="test44.txt"
+Content-Type: text/plain
+
+foo-
+This is a moo-
+bar
+
+------------------------------7c633d5c27ce--
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test45 b/tests/data/test45
new file mode 100644
index 0000000..3eb9ba9
--- /dev/null
+++ b/tests/data/test45
@@ -0,0 +1,76 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+followlocation
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+HTTP/1.1 301 This is a weirdo text message swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Location: data.cgi?moo=http://&/450002
+Connection: close
+
+This server reply is for testing a simple Location: following
+
+</data>
+<data2>
+HTTP/1.1 200 Followed here fine swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 52
+
+If this is received, the location following worked
+
+</data2>
+<datacheck>
+HTTP/1.1 301 This is a weirdo text message swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Location: data.cgi?moo=http://&/450002
+Connection: close
+
+HTTP/1.1 200 Followed here fine swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 52
+
+If this is received, the location following worked
+
+</datacheck>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+simple HTTP Location: without protocol in initial URL
+ </name>
+ <command>
+%HOSTIP:%HTTPPORT/want/45 -L
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /want/45 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /want/data.cgi?moo=http://&/450002 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test46 b/tests/data/test46
new file mode 100644
index 0000000..d0d1930
--- /dev/null
+++ b/tests/data/test46
@@ -0,0 +1,89 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+cookies
+cookiejar
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Server: Microsoft-IIS/4.0
+Date: Tue, 25 Sep 2001 19:37:44 GMT
+Content-Type: text/html
+Set-Cookie: ckyPersistent=permanent; expires=Fri, 02-Feb-2035 11:56:27 GMT; path=/
+Set-Cookie: ckySession=temporary; path=/
+Set-Cookie: ASPSESSIONIDQGGQQSJJ=GKNBDIFAAOFDPDAIEAKDIBKE; path=/
+Set-Cookie: justaname=; path=/;
+Set-Cookie: simplyhuge=zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
+Cache-control: private
+Content-Length: 41
+
+This server reply is for testing cookies
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP, get cookies and store in cookie jar
+ </name>
+# Explicitly set the time zone to a known good one, in case the user is
+# using one of the 'right' zones that take into account leap seconds
+# which causes the cookie expiry times to be different from what we expect.
+<setenv>
+TZ=GMT
+</setenv>
+ <command>
+%HOSTIP:%HTTPPORT/want/46 -c log/jar46 -b log/injar46
+</command>
+<file name="log/injar46">
+# Netscape HTTP Cookie File
+# http://curl.haxx.se/rfc/cookie_spec.html
+# This is generated by libcurl! Do not edit.
+
+www.fake.come FALSE / FALSE 1022144953 cookiecliente si
+www.loser.com FALSE / FALSE 1139150993 UID 99
+%HOSTIP FALSE / FALSE 1439150993 mooo indeed
+#HttpOnly_%HOSTIP FALSE / FALSE 1439150993 mooo2 indeed2
+%HOSTIP FALSE / FALSE 0 empty
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /want/46 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Cookie: empty=; mooo2=indeed2; mooo=indeed
+
+</protocol>
+<file name="log/jar46" mode="text">
+# Netscape HTTP Cookie File
+# http://curl.haxx.se/rfc/cookie_spec.html
+# This file was generated by libcurl! Edit at your own risk.
+
+www.fake.come FALSE / FALSE 1022144953 cookiecliente si
+www.loser.com FALSE / FALSE 1139150993 UID 99
+%HOSTIP FALSE / FALSE 1439150993 mooo indeed
+#HttpOnly_%HOSTIP FALSE / FALSE 1439150993 mooo2 indeed2
+%HOSTIP FALSE / FALSE 0 empty
+%HOSTIP FALSE / FALSE 2054030187 ckyPersistent permanent
+%HOSTIP FALSE / FALSE 0 ckySession temporary
+%HOSTIP FALSE / FALSE 0 ASPSESSIONIDQGGQQSJJ GKNBDIFAAOFDPDAIEAKDIBKE
+%HOSTIP FALSE / FALSE 0 justaname
+%HOSTIP FALSE /want/ FALSE 0 simplyhuge zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
+</file>
+</verify>
+</testcase>
diff --git a/tests/data/test47 b/tests/data/test47
new file mode 100644
index 0000000..0a6d4da
--- /dev/null
+++ b/tests/data/test47
@@ -0,0 +1,49 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP/1.0
+</keywords>
+</info>
+#
+# Server-side
+<reply name="47">
+<data>
+HTTP/1.0 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+
+-foo- within foo -!foo-
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+simple HTTP 1.0 GET
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/47 -0
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /47 HTTP/1.0
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+
+</testcase>
diff --git a/tests/data/test48 b/tests/data/test48
new file mode 100644
index 0000000..e092b41
--- /dev/null
+++ b/tests/data/test48
@@ -0,0 +1,47 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP HEAD
+-G
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP with -d and -G and -I
+ </name>
+ <command>
+-d "foo=moo&moo=poo" http://%HOSTIP:%HTTPPORT/48 -G -I
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+HEAD /48?foo=moo&moo=poo HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test49 b/tests/data/test49
new file mode 100644
index 0000000..4a4175e
--- /dev/null
+++ b/tests/data/test49
@@ -0,0 +1,74 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+followlocation
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 302 OK swsclose
+Location: ../moo.html/490002
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+
+</data>
+<data2>
+HTTP/1.1 200 OK swsclose
+Location: this should be ignored
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+
+body
+</data2>
+<datacheck>
+HTTP/1.1 302 OK swsclose
+Location: ../moo.html/490002
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+
+HTTP/1.1 200 OK swsclose
+Location: this should be ignored
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+
+body
+</datacheck>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP follow redirect with ../
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/we/are/all/twits/49 -L
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /we/are/all/twits/49 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /we/are/all/moo.html/490002 HTTP/1.1
+User-Agent: curl/7.10 (i686-pc-linux-gnu) libcurl/7.10 OpenSSL/0.9.6c ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test5 b/tests/data/test5
new file mode 100644
index 0000000..7a0ebd7
--- /dev/null
+++ b/tests/data/test5
@@ -0,0 +1,50 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP proxy
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake swsclose
+Content-Type: text/html
+Funny-head: yesyes
+
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP over proxy
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/we/want/that/page/5 -x %HOSTIP:%HTTPPORT
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET http://%HOSTIP:%HTTPPORT/we/want/that/page/5 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test50 b/tests/data/test50
new file mode 100644
index 0000000..84b05da
--- /dev/null
+++ b/tests/data/test50
@@ -0,0 +1,74 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+followlocation
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 302 OK swsclose
+Location: ../../moo.html/500002
+Date: Thu, 09 Nov 2010 14:50:00 GMT
+Connection: close
+
+</data>
+<data2>
+HTTP/1.1 200 OK swsclose
+Location: this should be ignored
+Date: Thu, 09 Nov 2010 14:50:00 GMT
+Connection: close
+
+body
+</data2>
+<datacheck>
+HTTP/1.1 302 OK swsclose
+Location: ../../moo.html/500002
+Date: Thu, 09 Nov 2010 14:50:00 GMT
+Connection: close
+
+HTTP/1.1 200 OK swsclose
+Location: this should be ignored
+Date: Thu, 09 Nov 2010 14:50:00 GMT
+Connection: close
+
+body
+</datacheck>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP follow redirect with ../../
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/we/are/all/twits/50 -L
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /we/are/all/twits/50 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /we/are/moo.html/500002 HTTP/1.1
+User-Agent: curl/7.10 (i686-pc-linux-gnu) libcurl/7.10 OpenSSL/0.9.6c ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test500 b/tests/data/test500
new file mode 100644
index 0000000..f9b17f3
--- /dev/null
+++ b/tests/data/test500
@@ -0,0 +1,58 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+</keywords>
+</info>
+#
+# Server-side
+<reply name="1">
+<data mode="text">
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+-foo-
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+# tool is what to use instead of 'curl'
+<tool>
+lib500
+</tool>
+
+ <name>
+simple libcurl HTTP GET tool
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/500 log/ip500
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<file name="log/ip500" mode="text">
+IP: %HOSTIP
+</file>
+<protocol>
+GET /500 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test501 b/tests/data/test501
new file mode 100644
index 0000000..9c9dcc9
--- /dev/null
+++ b/tests/data/test501
@@ -0,0 +1,40 @@
+<testcase>
+<info>
+<keywords>
+missing URL
+</keywords>
+</info>
+#
+# Server-side
+<reply name="1">
+</reply>
+
+# Client-side
+<client>
+<server>
+none
+</server>
+<features>
+http
+</features>
+# tool is what to use instead of 'curl'
+<tool>
+lib501
+</tool>
+
+ <name>
+simple libcurl attempt operation without URL set
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/501
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+3
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test502 b/tests/data/test502
new file mode 100644
index 0000000..f73a4eb
--- /dev/null
+++ b/tests/data/test502
@@ -0,0 +1,47 @@
+<testcase>
+<info>
+<keywords>
+FILE
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+<data mode="text">
+foo
+ bar swsclose
+bar
+ foo
+moo
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+file
+</server>
+# tool is what to use instead of 'curl'
+<tool>
+lib502
+</tool>
+
+ <name>
+simple multi file:// get
+ </name>
+ <command>
+file://%PWD/log/test502.txt
+</command>
+<file name="log/test502.txt">
+foo
+ bar swsclose
+bar
+ foo
+moo
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+</verify>
+</testcase>
diff --git a/tests/data/test503 b/tests/data/test503
new file mode 100644
index 0000000..3f29d8f
--- /dev/null
+++ b/tests/data/test503
@@ -0,0 +1,76 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP CONNECT
+HTTP proxy
+HTTP proxy Basic auth
+proxytunnel
+multi
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+
+</data>
+<datacheck>
+HTTP/1.1 200 Mighty fine indeed
+
+HTTP/1.1 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+
+</datacheck>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+# tool is what to use instead of 'curl'
+<tool>
+lib503
+</tool>
+
+ <name>
+simple multi http:// through proxytunnel with authentication info
+ </name>
+ <command>
+http://%HOSTIP:%HTTPSPORT/503 %HOSTIP:%HTTPPORT
+</command>
+<file name="log/test503.txt">
+foo
+ bar
+bar
+ foo
+moo
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+CONNECT %HOSTIP:%HTTPSPORT HTTP/1.1
+Host: %HOSTIP:%HTTPSPORT
+Proxy-Authorization: Basic dGVzdDppbmc=
+Proxy-Connection: Keep-Alive
+
+GET /503 HTTP/1.1
+Authorization: Basic dGVzdDppbmc=
+Host: %HOSTIP:%HTTPSPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test504 b/tests/data/test504
new file mode 100644
index 0000000..573ab51
--- /dev/null
+++ b/tests/data/test504
@@ -0,0 +1,43 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP proxy
+multi
+FAILURE
+</keywords>
+</info>
+
+# Server-side
+<reply>
+</reply>
+
+# Client-side
+<client>
+<server>
+none
+</server>
+<features>
+http
+</features>
+# tool is what to use instead of 'curl'
+<tool>
+lib504
+</tool>
+
+ <name>
+simple multi through local proxy without listener
+ </name>
+ <command>
+http://%HOSTIP:%HTTPSPORT/504 %HOSTIP:55555
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+100
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test505 b/tests/data/test505
new file mode 100644
index 0000000..d9e0fd2
--- /dev/null
+++ b/tests/data/test505
@@ -0,0 +1,60 @@
+<testcase>
+# Server-side
+<reply>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+# tool is what to use instead of 'curl'
+<tool>
+lib505
+</tool>
+
+ <name>
+FTP upload with rename after transfer
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/505 log/upload505
+</command>
+<file name="log/upload505">
+Contents
+of
+a file
+to verify
+ftp
+upload
+
+
+works?
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<upload>
+Contents
+of
+a file
+to verify
+ftp
+upload
+
+
+works?
+</upload>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE I
+STOR 505
+RNFR 505
+RNTO 505-forreal
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test506 b/tests/data/test506
new file mode 100644
index 0000000..64eb6c9
--- /dev/null
+++ b/tests/data/test506
@@ -0,0 +1,181 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+cookies
+shared cookies
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data1>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Type: text/html
+Set-Cookie: test1=one; domain=foo.com; expires=Sat Feb 2 11:56:27 GMT 2030
+Set-Cookie: test2=two; domain=host.foo.com; expires=Sat Feb 2 11:56:27 GMT 2030
+Set-Cookie: test3=three; domain=foo.com; expires=Sat Feb 2 11:56:27 GMT 2030
+Content-Length: 29
+
+run 1: set cookie 1, 2 and 3
+</data1>
+<data2>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:01 GMT
+Server: test-server/fake
+Content-Type: text/html
+Set-Cookie: test4=four; domain=host.foo.com; expires=Sat Feb 2 11:56:27 GMT 2030
+Set-Cookie: test5=five; domain=host.foo.com; expires=Sat Feb 2 11:56:27 GMT 2030
+Content-Length: 26
+
+run 2: set cookie 4 and 5
+</data2>
+<data3>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:02 GMT
+Server: test-server/fake
+Content-Type: text/html
+Funny-head: yesyes
+Set-Cookie: test4=overwritten4; domain=host.foo.com; expires=Sat May 5 GMT 11:56:27 2035
+Set-Cookie: test1=overwritten1; domain=foo.com; expires=Thu Mar 3 GMT 11:56:27 2033
+Content-Type: text/html
+Content-Length: 32
+
+run 3: overwrite cookie 1 and 4
+</data3>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+<name>
+HTTP with shared cookie list (and dns cache)
+</name>
+# Explicitly set the time zone to a known good one, in case the user is
+# using one of the 'right' zones that take into account leap seconds
+# which causes the cookie expiry times to be different.
+<setenv>
+TZ=GMT
+</setenv>
+<tool>
+lib506
+</tool>
+<command>
+http://%HOSTIP:%HTTPPORT/506
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<stdout mode="text">
+GLOBAL_INIT
+SHARE_INIT
+CURLSHOPT_LOCKFUNC
+CURLSHOPT_UNLOCKFUNC
+CURLSHOPT_USERDATA
+CURL_LOCK_DATA_COOKIE
+CURL_LOCK_DATA_DNS
+*** run 1
+CURLOPT_SHARE
+lock: share [Pigs in space]: 0
+unlock: share [Pigs in space]: 1
+PERFORM
+lock: dns [Pigs in space]: 2
+unlock: dns [Pigs in space]: 3
+lock: dns [Pigs in space]: 4
+unlock: dns [Pigs in space]: 5
+lock: cookie [Pigs in space]: 6
+unlock: cookie [Pigs in space]: 7
+lock: cookie [Pigs in space]: 8
+unlock: cookie [Pigs in space]: 9
+lock: cookie [Pigs in space]: 10
+unlock: cookie [Pigs in space]: 11
+lock: cookie [Pigs in space]: 12
+unlock: cookie [Pigs in space]: 13
+run 1: set cookie 1, 2 and 3
+lock: dns [Pigs in space]: 14
+unlock: dns [Pigs in space]: 15
+CLEANUP
+lock: dns [Pigs in space]: 16
+unlock: dns [Pigs in space]: 17
+lock: cookie [Pigs in space]: 18
+unlock: cookie [Pigs in space]: 19
+lock: share [Pigs in space]: 20
+unlock: share [Pigs in space]: 21
+*** run 2
+CURLOPT_SHARE
+lock: share [Pigs in space]: 22
+unlock: share [Pigs in space]: 23
+PERFORM
+lock: dns [Pigs in space]: 24
+unlock: dns [Pigs in space]: 25
+lock: cookie [Pigs in space]: 26
+unlock: cookie [Pigs in space]: 27
+lock: cookie [Pigs in space]: 28
+unlock: cookie [Pigs in space]: 29
+lock: cookie [Pigs in space]: 30
+unlock: cookie [Pigs in space]: 31
+run 2: set cookie 4 and 5
+lock: dns [Pigs in space]: 32
+unlock: dns [Pigs in space]: 33
+CLEANUP
+lock: dns [Pigs in space]: 34
+unlock: dns [Pigs in space]: 35
+lock: cookie [Pigs in space]: 36
+unlock: cookie [Pigs in space]: 37
+lock: share [Pigs in space]: 38
+unlock: share [Pigs in space]: 39
+*** run 3
+CURLOPT_SHARE
+lock: share [Pigs in space]: 40
+unlock: share [Pigs in space]: 41
+CURLOPT_COOKIEJAR
+PERFORM
+lock: dns [Pigs in space]: 42
+unlock: dns [Pigs in space]: 43
+lock: cookie [Pigs in space]: 44
+unlock: cookie [Pigs in space]: 45
+lock: cookie [Pigs in space]: 46
+unlock: cookie [Pigs in space]: 47
+lock: cookie [Pigs in space]: 48
+unlock: cookie [Pigs in space]: 49
+run 3: overwrite cookie 1 and 4
+lock: dns [Pigs in space]: 50
+unlock: dns [Pigs in space]: 51
+try SHARE_CLEANUP...
+lock: share [Pigs in space]: 52
+unlock: share [Pigs in space]: 53
+SHARE_CLEANUP failed, correct
+CLEANUP
+lock: dns [Pigs in space]: 54
+unlock: dns [Pigs in space]: 55
+lock: cookie [Pigs in space]: 56
+unlock: cookie [Pigs in space]: 57
+lock: share [Pigs in space]: 58
+unlock: share [Pigs in space]: 59
+SHARE_CLEANUP
+lock: share [Pigs in space]: 60
+unlock: share [Pigs in space]: 61
+GLOBAL_CLEANUP
+</stdout>
+<stderr>
+http://%HOSTIP:%HTTPPORT/506
+</stderr>
+<file name="log/jar506" mode="text">
+# Netscape HTTP Cookie File
+# http://curl.haxx.se/rfc/cookie_spec.html
+# This file was generated by libcurl! Edit at your own risk.
+
+.foo.com TRUE / FALSE 1993463787 test1 overwritten1
+.host.foo.com TRUE / FALSE 1896263787 test2 two
+.foo.com TRUE / FALSE 1896263787 test3 three
+.host.foo.com TRUE / FALSE 2061978987 test4 overwritten4
+.host.foo.com TRUE / FALSE 1896263787 test5 five
+</file>
+</verify>
+</testcase>
diff --git a/tests/data/test507 b/tests/data/test507
new file mode 100644
index 0000000..9549bd9
--- /dev/null
+++ b/tests/data/test507
@@ -0,0 +1,37 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+multi
+FAILURE
+non-existing host
+</keywords>
+</info>
+
+# Server-side
+<reply>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+<name>
+multi interface get with non-existing host name
+</name>
+<tool>
+lib507
+</tool>
+<command>
+http://non-existing-host.haxx.se/
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+6
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test508 b/tests/data/test508
new file mode 100644
index 0000000..5cd4b8c
--- /dev/null
+++ b/tests/data/test508
@@ -0,0 +1,51 @@
+<testcase>
+#
+# Server-side
+<reply>
+<data mode="text">
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake swsclose
+Connection: close
+Content-Type: text/html
+
+hello
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+# tool is what to use instead of 'curl'
+<tool>
+lib508
+</tool>
+
+ <name>
+send HTTP POST using read callback
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/508
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strippart>
+# remove CR that CURLOPT_TRANSFERTEXT added, when CharConv enabled:
+s/^(this is what we post to the silly web server)\r\n/$1\n/ if($has_charconv)
+</strippart>
+<protocol>
+POST /508 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 45
+Content-Type: application/x-www-form-urlencoded
+
+this is what we post to the silly web server
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test51 b/tests/data/test51
new file mode 100644
index 0000000..b58c357
--- /dev/null
+++ b/tests/data/test51
@@ -0,0 +1,74 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+followlocation
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 302 OK swsclose
+Location: ../../../../../../../510002
+Date: Thu, 09 Nov 2010 14:50:00 GMT
+Connection: close
+
+</data>
+<data2>
+HTTP/1.1 200 OK swsclose
+Location: this should be ignored
+Date: Thu, 09 Nov 2010 14:50:00 GMT
+Connection: close
+
+body
+</data2>
+<datacheck>
+HTTP/1.1 302 OK swsclose
+Location: ../../../../../../../510002
+Date: Thu, 09 Nov 2010 14:50:00 GMT
+Connection: close
+
+HTTP/1.1 200 OK swsclose
+Location: this should be ignored
+Date: Thu, 09 Nov 2010 14:50:00 GMT
+Connection: close
+
+body
+</datacheck>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP follow redirect with excessive ../
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/we/are/all/twits/51 -L
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /we/are/all/twits/51 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /510002 HTTP/1.1
+User-Agent: curl/7.10 (i686-pc-linux-gnu) libcurl/7.10 OpenSSL/0.9.6c ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test510 b/tests/data/test510
new file mode 100644
index 0000000..8313f51
--- /dev/null
+++ b/tests/data/test510
@@ -0,0 +1,57 @@
+<testcase>
+#
+# Server-side
+<reply>
+<data mode="text">
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake swsclose
+Connection: close
+Content-Type: text/html
+
+hello
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+# tool is what to use instead of 'curl'
+<tool>
+lib510
+</tool>
+
+ <name>
+send HTTP POST using read callback, using chunked transfer-encoding
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/510
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+POST /510 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Transfer-Encoding: chunked
+Content-Type: application/x-www-form-urlencoded
+Expect: 100-continue
+
+3
+one
+3
+two
+5
+three
+1d
+and a final longer crap: four
+0
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test511 b/tests/data/test511
new file mode 100644
index 0000000..81fe657
--- /dev/null
+++ b/tests/data/test511
@@ -0,0 +1,44 @@
+<testcase>
+#
+# Server-side
+<reply>
+<servercmd>
+REPLY MDTM 550 bluah you f00l!
+REPLY SIZE 550 bluah you f00l!
+</servercmd>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+# tool is what to use instead of 'curl'
+<tool>
+lib511
+</tool>
+
+ <name>
+FTP with FILETIME and NOBODY but missing file
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/511
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+# CURLE_FTP_COULDNT_RETR_FILE
+<errorcode>
+19
+</errorcode>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+MDTM 511
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test512 b/tests/data/test512
new file mode 100644
index 0000000..516a503
--- /dev/null
+++ b/tests/data/test512
@@ -0,0 +1,46 @@
+<testcase>
+#
+# Server-side
+<reply>
+<data mode="text">
+HTTP/1.1 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: yes
+Connection: close
+
+hello
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+# tool is what to use instead of 'curl'
+<tool>
+lib512
+</tool>
+
+ <name>
+simple curl_easy_duplicate() test
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/512
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /512 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test513 b/tests/data/test513
new file mode 100644
index 0000000..7d8e69b
--- /dev/null
+++ b/tests/data/test513
@@ -0,0 +1,42 @@
+<testcase>
+#
+# Server-side
+<reply>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+# tool is what to use instead of 'curl'
+<tool>
+lib513
+</tool>
+
+ <name>
+send HTTP POST using read callback that returns CURL_READFUNC_ABORT
+ </name>
+# the 1s post-command delay helps to prevent a spurious failure on s390
+ <command delay="1">
+http://%HOSTIP:%HTTPPORT/513
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+POST /513 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 1
+Content-Type: application/x-www-form-urlencoded
+
+</protocol>
+# 42 - aborted by callback
+<errorcode>
+42
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test514 b/tests/data/test514
new file mode 100644
index 0000000..bd6da02
--- /dev/null
+++ b/tests/data/test514
@@ -0,0 +1,51 @@
+<testcase>
+#
+# Server-side
+<reply>
+<data mode="text">
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<tool>
+lib514
+</tool>
+ <name>
+First set options to POST and then to make HEAD
+ </name>
+# the 1s post-command delay helps to prevent a spurious failure on s390
+ <command delay="1">
+http://%HOSTIP:%HTTPPORT/514
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+HEAD /514 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test515 b/tests/data/test515
new file mode 100644
index 0000000..9de0ac2
--- /dev/null
+++ b/tests/data/test515
@@ -0,0 +1,48 @@
+<testcase>
+#
+# Server-side
+<reply>
+<data mode="text">
+HTTP/1.1 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 3
+
+OK
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+# tool is what to use instead of 'curl'
+<tool>
+lib515
+</tool>
+
+ <name>
+make a POSTFIELDS set to NULL with POSTFIELDSIZE set to zero
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/515
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+POST /515 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 0
+Content-Type: application/x-www-form-urlencoded
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test516 b/tests/data/test516
new file mode 100644
index 0000000..22c39dc
--- /dev/null
+++ b/tests/data/test516
@@ -0,0 +1,47 @@
+<testcase>
+#
+# Server-side
+<reply>
+<data mode="text">
+HTTP/1.1 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 3
+
+OK
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+# tool is what to use instead of 'curl'
+<tool>
+lib516
+</tool>
+
+ <name>
+make a HTTPPOST set to NULL
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/516
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+POST /516 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 0
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test517 b/tests/data/test517
new file mode 100644
index 0000000..d7b9184
--- /dev/null
+++ b/tests/data/test517
@@ -0,0 +1,117 @@
+<testcase>
+#
+# Server-side
+<reply>
+</reply>
+
+# Client-side
+<client>
+<server>
+none
+</server>
+# tool is what to use instead of 'curl'
+<tool>
+lib517
+</tool>
+
+ <name>
+curl_getdate() testing
+ </name>
+ <command>
+nothing
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<stdout mode="text">
+0: Sun, 06 Nov 1994 08:49:37 GMT => 784111777
+1: Sunday, 06-Nov-94 08:49:37 GMT => 784111777
+2: Sun Nov 6 08:49:37 1994 => 784111777
+3: 06 Nov 1994 08:49:37 GMT => 784111777
+4: 06-Nov-94 08:49:37 GMT => 784111777
+5: Nov 6 08:49:37 1994 => 784111777
+6: 06 Nov 1994 08:49:37 => 784111777
+7: 06-Nov-94 08:49:37 => 784111777
+8: 1994 Nov 6 08:49:37 => 784111777
+9: GMT 08:49:37 06-Nov-94 Sunday => 784111777
+10: 94 6 Nov 08:49:37 => 784111777
+11: 1994 Nov 6 => 784080000
+12: 06-Nov-94 => 784080000
+13: Sun Nov 6 94 => 784080000
+14: 1994.Nov.6 => 784080000
+15: Sun/Nov/6/94/GMT => 784080000
+16: Sun, 06 Nov 1994 08:49:37 CET => 784108177
+17: 06 Nov 1994 08:49:37 EST => 784129777
+18: Sun, 12 Sep 2004 15:05:58 -0700 => 1095026758
+19: Sat, 11 Sep 2004 21:32:11 +0200 => 1094931131
+20: 20040912 15:05:58 -0700 => 1095026758
+21: 20040911 +0200 => 1094853600
+22: Thu, 01-Jan-1970 00:59:59 GMT => 3599
+23: Thu, 01-Jan-1970 01:00:00 GMT => 3600
+24: Sat, 15-Apr-17 21:01:22 GMT => 1492290082
+25: Thu, 19-Apr-2007 16:00:00 GMT => 1176998400
+26: Wed, 25 Apr 2007 21:02:13 GMT => 1177534933
+27: Thu, 19/Apr\2007 16:00:00 GMT => 1176998400
+28: Fri, 1 Jan 2010 01:01:50 GMT => 1262307710
+29: Wednesday, 1-Jan-2003 00:00:00 GMT => 1041379200
+30: , 1-Jan-2003 00:00:00 GMT => 1041379200
+31: 1-Jan-2003 00:00:00 GMT => 1041379200
+32: 1-Jan-2003 00:00:00 GMT => 1041379200
+33: Wed,18-Apr-07 22:50:12 GMT => 1176936612
+34: WillyWonka , 18-Apr-07 22:50:12 GMT => -1
+35: WillyWonka , 18-Apr-07 22:50:12 => -1
+36: WillyWonka , 18-apr-07 22:50:12 => -1
+37: Mon, 18-Apr-1977 22:50:13 GMT => 230251813
+38: Mon, 18-Apr-77 22:50:13 GMT => 230251813
+39: "Sat, 15-Apr-17\"21:01:22\"GMT" => 1492290082
+40: Partyday, 18- April-07 22:50:12 => -1
+41: Partyday, 18 - Apri-07 22:50:12 => -1
+42: Wednes, 1-Januar-2003 00:00:00 GMT => -1
+43: Sat, 15-Apr-17 21:01:22 => 1492290082
+44: Sat, 15-Apr-17 21:01:22 GMT-2 => 1492290082
+45: Sat, 15-Apr-17 21:01:22 GMT BLAH => 1492290082
+46: Sat, 15-Apr-17 21:01:22 GMT-0400 => 1492290082
+47: Sat, 15-Apr-17 21:01:22 GMT-0400 (EDT) => 1492290082
+48: Sat, 15-Apr-17 21:01:22 DST => -1
+49: Sat, 15-Apr-17 21:01:22 -0400 => 1492304482
+50: Sat, 15-Apr-17 21:01:22 (hello there) => -1
+51: Sat, 15-Apr-17 21:01:22 11:22:33 => -1
+52: Sat, 15-Apr-17 ::00 21:01:22 => -1
+53: Sat, 15-Apr-17 boink:z 21:01:22 => -1
+54: Sat, 15-Apr-17 91:22:33 21:01:22 => -1
+55: Thu Apr 18 22:50:12 2007 GMT => 1176936612
+56: 22:50:12 Thu Apr 18 2007 GMT => 1176936612
+57: Thu 22:50:12 Apr 18 2007 GMT => 1176936612
+58: Thu Apr 22:50:12 18 2007 GMT => 1176936612
+59: Thu Apr 18 22:50:12 2007 GMT => 1176936612
+60: Thu Apr 18 2007 22:50:12 GMT => 1176936612
+61: Thu Apr 18 2007 GMT 22:50:12 => 1176936612
+62: Sat, 15-Apr-17 21:01:22 GMT => 1492290082
+63: 15-Sat, Apr-17 21:01:22 GMT => 1492290082
+64: 15-Sat, Apr 21:01:22 GMT 17 => 1492290082
+65: 15-Sat, Apr 21:01:22 GMT 2017 => 1492290082
+66: 15 Apr 21:01:22 2017 => 1492290082
+67: 15 17 Apr 21:01:22 => 1492290082
+68: Apr 15 17 21:01:22 => 1492290082
+69: Apr 15 21:01:22 17 => 1492290082
+70: 2017 April 15 21:01:22 => -1
+71: 15 April 2017 21:01:22 => -1
+72: 98 April 17 21:01:22 => -1
+73: Thu, 012-Aug-2008 20:49:07 GMT => 1218574147
+74: Thu, 999999999999-Aug-2007 20:49:07 GMT => -1
+75: Thu, 12-Aug-2007 20:61:99999999999 GMT => -1
+76: IAintNoDateFool => -1
+77: Thu Apr 18 22:50 2007 GMT => 1176936600
+</stdout>
+
+# This test case previously testes an overflow case ("2094 Nov 6 =>
+# 2147483647") for 32bit time_t, but since some systems have 64bit time_t and
+# handles this (returning 3939840000), and some 64bit-time_t systems don't
+# handle this and returns -1 for this, it turned very tricky to write a fine
+# test case and thus it is now removed until we have a way to write test cases
+# for this kind of things.
+
+</verify>
+</testcase>
diff --git a/tests/data/test518 b/tests/data/test518
new file mode 100644
index 0000000..8e52615
--- /dev/null
+++ b/tests/data/test518
@@ -0,0 +1,60 @@
+<testcase>
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+-foo-
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+<features>
+getrlimit
+</features>
+# tool is what to use instead of 'curl'
+<tool>
+lib518
+</tool>
+# precheck is a command line to run before the test, to see if we can execute
+# the test or not
+<precheck>
+./libtest/lib518 check
+</precheck>
+
+ <name>
+HTTP GET with more than FD_SETSIZE descriptors open
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/518
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+GET /518 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+<valgrind>
+disable
+</valgrind>
+</verify>
+</testcase>
diff --git a/tests/data/test519 b/tests/data/test519
new file mode 100644
index 0000000..c6bc861
--- /dev/null
+++ b/tests/data/test519
@@ -0,0 +1,71 @@
+<testcase>
+#
+# Server-side
+<reply>
+<data mode="text">
+HTTP/1.1 200 OK swsbounce
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 8
+
+content
+</data>
+<data1>
+HTTP/1.1 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 9
+
+content2
+</data1>
+<datacheck>
+HTTP/1.1 200 OK swsbounce
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 8
+
+content
+HTTP/1.1 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 9
+
+content2
+</datacheck>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+# tool is what to use instead of 'curl'
+<tool>
+lib519
+</tool>
+
+ <name>
+GET same URL twice with different users
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/519
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+GET /519 HTTP/1.1
+Authorization: Basic bW9uc3Rlcjp1bmRlcmJlZA==
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /519 HTTP/1.1
+Authorization: Basic YW5vdGhlcm1vbnN0ZXI6aW53YXJkcm9iZQ==
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test52 b/tests/data/test52
new file mode 100644
index 0000000..14fa42b
--- /dev/null
+++ b/tests/data/test52
@@ -0,0 +1,74 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+followlocation
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 302 OK swsclose
+Location: ./520002
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+
+</data>
+<data2>
+HTTP/1.1 200 OK swsclose
+Location: this should be ignored
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+
+body
+</data2>
+<datacheck>
+HTTP/1.1 302 OK swsclose
+Location: ./520002
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+
+HTTP/1.1 200 OK swsclose
+Location: this should be ignored
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+
+body
+</datacheck>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP follow redirect with ./-prefix
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/we/are/all/twits/52 -L
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /we/are/all/twits/52 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /we/are/all/twits/520002 HTTP/1.1
+User-Agent: curl/7.10 (i686-pc-linux-gnu) libcurl/7.10 OpenSSL/0.9.6c ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test520 b/tests/data/test520
new file mode 100644
index 0000000..0938b58
--- /dev/null
+++ b/tests/data/test520
@@ -0,0 +1,47 @@
+<testcase>
+#
+# Server-side
+<reply>
+<data>
+contents of file
+</data>
+<servercmd>
+REPLY MDTM 213 20030405060708
+</servercmd>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+# tool is what to use instead of 'curl'
+<tool>
+lib520
+</tool>
+
+ <name>
+FTP RETR with FILETIME
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/520
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+MDTM 520
+EPSV
+TYPE I
+SIZE 520
+RETR 520
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test521 b/tests/data/test521
new file mode 100644
index 0000000..9bc5501
--- /dev/null
+++ b/tests/data/test521
@@ -0,0 +1,60 @@
+<testcase>
+<info>
+<keywords>
+FTP
+PASV
+CURLOPT_PORT
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+# When doing LIST, we get the default list output hard-coded in the test
+# FTP server
+<datacheck>
+total 20
+drwxr-xr-x 8 98 98 512 Oct 22 13:06 .
+drwxr-xr-x 8 98 98 512 Oct 22 13:06 ..
+drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT
+-r--r--r-- 1 0 1 35 Jul 16 1996 README
+lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin
+dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev
+drwxrwxrwx 2 98 98 512 May 29 16:04 download.html
+dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc
+drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub
+dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr
+</datacheck>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+ftp
+</server>
+<tool>
+lib521
+</tool>
+ <name>
+FTP dir list PASV with CURLOPT_PORT
+ </name>
+ <command>
+ftp://%HOSTIP/521/ %FTPPORT
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER xxx
+PASS yyy
+PWD
+CWD 521
+EPSV
+TYPE A
+LIST
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test522 b/tests/data/test522
new file mode 100644
index 0000000..4ac46ff
--- /dev/null
+++ b/tests/data/test522
@@ -0,0 +1,60 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+CURLOPT_PORT
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+
+hello
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<tool>
+lib521
+</tool>
+ <name>
+HTTP GET with CURLOPT_PORT
+ </name>
+ <command>
+http://%HOSTIP/522 %HTTPPORT
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /522 HTTP/1.1
+Authorization: Basic eHh4Onl5eQ==
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+<stdout mode="text">
+hello
+</stdout>
+</verify>
+</testcase>
diff --git a/tests/data/test523 b/tests/data/test523
new file mode 100644
index 0000000..6c1efbd
--- /dev/null
+++ b/tests/data/test523
@@ -0,0 +1,64 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP proxy
+CURLOPT_PORT
+CURLOPT_PROXY
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.1 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+
+hello
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<tool>
+lib523
+</tool>
+ <name>
+HTTP GET with proxy and CURLOPT_PORT
+ </name>
+# first URL then proxy
+ <command>
+http://www.haxx.se:999/523 http://%HOSTIP:%HTTPPORT
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET HTTP://www.haxx.se:19999/523 HTTP/1.1
+Authorization: Basic eHh4Onl5eQ==
+Host: www.haxx.se:19999
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol>
+<stdout mode="text">
+hello
+</stdout>
+</verify>
+</testcase>
diff --git a/tests/data/test524 b/tests/data/test524
new file mode 100644
index 0000000..c609466
--- /dev/null
+++ b/tests/data/test524
@@ -0,0 +1,46 @@
+<testcase>
+<info>
+<keywords>
+FTP
+UPLOAD
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+ftp
+</server>
+<tool>
+lib524
+</tool>
+ <name>
+FTP upload with target URL ending with slash
+ </name>
+# first URL then proxy
+ <command>
+ftp://%HOSTIP:%FTPPORT/path/to/
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+</protocol>
+
+# 3 is CURLE_URL_MALFORMAT
+<errorcode>
+3
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test525 b/tests/data/test525
new file mode 100644
index 0000000..7bd494e
--- /dev/null
+++ b/tests/data/test525
@@ -0,0 +1,59 @@
+<testcase>
+<info>
+<keywords>
+FTP
+PORT
+STOR
+multi
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+<tool>
+lib525
+</tool>
+ <name>
+FTP PORT upload using multi interface
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/path/525 log/upload525
+</command>
+<file name="log/upload525">
+Moooooooooooo
+ upload this
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+# Strip all valid kinds of PORT and EPRT that curl can send
+<strip>
+^PORT \d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3}
+^EPRT \|1\|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\|\d{1,5}\|
+</strip>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+PORT 127,0,0,1,5,109
+TYPE I
+STOR 525
+QUIT
+</protocol>
+<upload>
+Moooooooooooo
+ upload this
+</upload>
+</verify>
+</testcase>
diff --git a/tests/data/test526 b/tests/data/test526
new file mode 100644
index 0000000..70e6dcd
--- /dev/null
+++ b/tests/data/test526
@@ -0,0 +1,63 @@
+<testcase>
+<info>
+<keywords>
+FTP
+PASV
+RETR
+multi
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+file contents should appear once for each file
+</data>
+<datacheck>
+file contents should appear once for each file
+file contents should appear once for each file
+file contents should appear once for each file
+file contents should appear once for each file
+</datacheck>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+<tool>
+lib526
+</tool>
+ <name>
+FTP RETR same file using different handles but same connection
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/path/526
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+EPSV
+TYPE I
+SIZE 526
+RETR 526
+EPSV
+SIZE 526
+RETR 526
+EPSV
+SIZE 526
+RETR 526
+EPSV
+SIZE 526
+RETR 526
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test527 b/tests/data/test527
new file mode 100644
index 0000000..98892a9
--- /dev/null
+++ b/tests/data/test527
@@ -0,0 +1,63 @@
+<testcase>
+<info>
+<keywords>
+FTP
+PASV
+RETR
+multi
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+file contents should appear once for each file
+</data>
+<datacheck>
+file contents should appear once for each file
+file contents should appear once for each file
+file contents should appear once for each file
+file contents should appear once for each file
+</datacheck>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+<tool>
+lib527
+</tool>
+ <name>
+FTP RETR same file using different handles but same connection
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/path/527
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+EPSV
+TYPE I
+SIZE 527
+RETR 527
+EPSV
+SIZE 527
+RETR 527
+EPSV
+SIZE 527
+RETR 527
+EPSV
+SIZE 527
+RETR 527
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test528 b/tests/data/test528
new file mode 100644
index 0000000..0a55fd3
--- /dev/null
+++ b/tests/data/test528
@@ -0,0 +1,65 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+multi
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 47
+
+file contents should appear once for each file
+</data>
+<datacheck>
+file contents should appear once for each file
+file contents should appear once for each file
+file contents should appear once for each file
+file contents should appear once for each file
+</datacheck>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+<tool>
+lib526
+</tool>
+ <name>
+HTTP GET same file using different handles but same connection
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/path/528
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+GET /path/528 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /path/528 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /path/528 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /path/528 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test529 b/tests/data/test529
new file mode 100644
index 0000000..1614720
--- /dev/null
+++ b/tests/data/test529
@@ -0,0 +1,59 @@
+<testcase>
+<info>
+<keywords>
+FTP
+PORT
+STOR
+multi
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+<tool>
+lib529
+</tool>
+ <name>
+FTP PORT upload using multi interface (weird cleanup function sequence)
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/path/529 log/upload529
+</command>
+<file name="log/upload529">
+Moooooooooooo
+ upload this
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+# Strip all valid kinds of PORT and EPRT that curl can send
+<strip>
+^PORT \d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3}
+^EPRT \|1\|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\|\d{1,5}\|
+</strip>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+PORT 127,0,0,1,5,109
+TYPE I
+STOR 529
+QUIT
+</protocol>
+<upload>
+Moooooooooooo
+ upload this
+</upload>
+</verify>
+</testcase>
diff --git a/tests/data/test53 b/tests/data/test53
new file mode 100644
index 0000000..0ced2d2
--- /dev/null
+++ b/tests/data/test53
@@ -0,0 +1,54 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+cookies
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Server: Microsoft-IIS/4.0
+Date: Tue, 25 Sep 2001 19:37:44 GMT
+Content-Type: text/html
+Connection: close
+Content-Length: 21
+
+This server says moo
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP, junk session cookies
+ </name>
+ <command>
+%HOSTIP:%HTTPPORT/want/53 -b log/injar53 -j
+</command>
+<file name="log/injar53">
+%HOSTIP FALSE / FALSE 2139150993 mooo indeed
+%HOSTIP FALSE / FALSE 0 moo1 indeed
+%HOSTIP FALSE / FALSE 1 moo2 indeed
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /want/53 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Cookie: mooo=indeed
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test530 b/tests/data/test530
new file mode 100644
index 0000000..359d04c
--- /dev/null
+++ b/tests/data/test530
@@ -0,0 +1,83 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+Pipelining
+multi
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data1>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 47
+
+file contents should appear once for each file
+</data1>
+<data2>
+HTTP/1.1 200 OK
+</data2>
+<data3>
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+</data3>
+<data4>
+Server: test-server/fake
+Content-Length: 47
+
+file contents should appear once for each file
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 47
+
+file contents should appear once for each file
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 47
+
+file contents should appear once for each file
+</data4>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+<tool>
+lib530
+</tool>
+ <name>
+HTTP GET using pipelining
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/path/530
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+GET /path/5300001 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /path/5300002 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /path/5300003 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /path/5300004 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test531 b/tests/data/test531
new file mode 100644
index 0000000..8a7cee5
--- /dev/null
+++ b/tests/data/test531
@@ -0,0 +1,59 @@
+<testcase>
+<info>
+<keywords>
+FTP
+PORT
+STOR
+multi
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+</data>
+<servercmd>
+REPLY STOR 425 Permission Denied. File Exists.
+</servercmd>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+<tool>
+lib525
+</tool>
+ <name>
+FTP PORT upload using multi interface and get 425 response
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/path/531 log/upload531
+</command>
+<file name="log/upload531">
+Moooooooooooo
+don't upload this
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+# Strip all valid kinds of PORT and EPRT that curl can send
+<strip>
+^PORT \d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3},\d{1,3}
+^EPRT \|1\|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\|\d{1,5}\|
+</strip>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+PORT 127,0,0,1,5,109
+TYPE I
+STOR 531
+QUIT
+</protocol>
+
+</verify>
+</testcase>
diff --git a/tests/data/test532 b/tests/data/test532
new file mode 100644
index 0000000..dc45db1
--- /dev/null
+++ b/tests/data/test532
@@ -0,0 +1,63 @@
+<testcase>
+<info>
+<keywords>
+FTP
+PASV
+RETR
+multi
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+file contents should appear once for each file
+</data>
+<datacheck>
+file contents should appear once for each file
+file contents should appear once for each file
+file contents should appear once for each file
+file contents should appear once for each file
+</datacheck>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+<tool>
+lib532
+</tool>
+ <name>
+FTP RETR same file using reset handles between each transfer
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/path/532
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+EPSV
+TYPE I
+SIZE 532
+RETR 532
+EPSV
+SIZE 532
+RETR 532
+EPSV
+SIZE 532
+RETR 532
+EPSV
+SIZE 532
+RETR 532
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test533 b/tests/data/test533
new file mode 100644
index 0000000..f4446cb
--- /dev/null
+++ b/tests/data/test533
@@ -0,0 +1,55 @@
+<testcase>
+<info>
+<keywords>
+FTP
+PASV
+RETR
+multi
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+</data>
+
+<servercmd>
+REPLY RETR 550 the file doesn't exist
+REPLY SIZE 550 Can't check for file existence
+</servercmd>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+<tool>
+lib533
+</tool>
+ <name>
+FTP RETR a non-existing file twice using the multi interface
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/path/533 ftp://%HOSTIP:%FTPPORT/path/533
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+EPSV
+TYPE I
+SIZE 533
+RETR 533
+EPSV
+SIZE 533
+RETR 533
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test534 b/tests/data/test534
new file mode 100644
index 0000000..6045dba
--- /dev/null
+++ b/tests/data/test534
@@ -0,0 +1,53 @@
+<testcase>
+<info>
+<keywords>
+FTP
+PASV
+RETR
+multi
+non-existing host
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+</data>
+
+<servercmd>
+REPLY RETR 550 the file doesn't exist
+REPLY SIZE 550 Can't check for file existence
+</servercmd>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+<tool>
+lib533
+</tool>
+ <name>
+FTP RETR twice using multi: non-existing host and non-existing file
+ </name>
+ <command>
+ftp://non-existing-host.haxx.se/path/534 ftp://%HOSTIP:%FTPPORT/path/534
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+EPSV
+TYPE I
+SIZE 534
+RETR 534
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test535 b/tests/data/test535
new file mode 100644
index 0000000..85515a1
--- /dev/null
+++ b/tests/data/test535
@@ -0,0 +1,69 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+multi
+</keywords>
+</info>
+
+<reply>
+<data mode="text">
+HTTP/1.1 404 Badness
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+ETag: "21025-dc7-39462498"
+Content-Length: 6
+Content-Type: text/html
+Funny-head: yesyes
+
+hejsan
+</data>
+<data1>
+HTTP/1.1 200 Fine
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 13
+Connection: close
+Content-Type: text/html
+
+fine content
+</data1>
+
+<datacheck>
+fine content
+</datacheck>
+
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+# tool is what to use instead of 'curl'
+<tool>
+lib533
+</tool>
+
+ <name>
+HTTP GET multi two files with FAILONERROR
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/535 http://%HOSTIP:%HTTPPORT/5350001
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+GET /535 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /5350001 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test536 b/tests/data/test536
new file mode 100644
index 0000000..334c07f
--- /dev/null
+++ b/tests/data/test536
@@ -0,0 +1,65 @@
+<testcase>
+<reply>
+<data mode="text">
+HTTP/1.1 404 Badness
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+ETag: "21025-dc7-39462498"
+Content-Length: 6
+Content-Type: text/html
+Funny-head: yesyes
+
+hejsan
+</data>
+<data1>
+HTTP/1.1 200 Fine
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 13
+Connection: close
+Content-Type: text/html
+
+fine content
+</data1>
+
+<datacheck>
+fine content
+Finished!
+</datacheck>
+
+<servercmd>
+pipe: 1
+</servercmd>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+# tool is what to use instead of 'curl'
+<tool>
+lib536
+</tool>
+
+ <name>
+HTTP GET multi two files with FAILONERROR and pipelining
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/536 http://%HOSTIP:%HTTPPORT/5360001
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+GET /536 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /5360001 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test537 b/tests/data/test537
new file mode 100644
index 0000000..ce66c40
--- /dev/null
+++ b/tests/data/test537
@@ -0,0 +1,57 @@
+<testcase>
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+-foo-
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+<features>
+getrlimit
+</features>
+# tool is what to use instead of 'curl'
+<tool>
+lib537
+</tool>
+# precheck is a command line to run before the test, to see if we can execute
+# the test or not
+<precheck>
+./libtest/lib537 check
+</precheck>
+
+ <name>
+HTTP GET with a HUGE number of file descriptors open
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/537
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+GET /537 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test538 b/tests/data/test538
new file mode 100644
index 0000000..f33b2a6
--- /dev/null
+++ b/tests/data/test538
@@ -0,0 +1,46 @@
+<testcase>
+<info>
+<keywords>
+FTP
+FAILURE
+multi
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<servercmd>
+REPLY PASS 314 bluah you f00l!
+</servercmd>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+# NOTE that we use the 504 tool for this case
+<tool>
+lib504
+</tool>
+ <name>
+FTP multi-interface download, failed login: PASS not valid
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/538
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+# ok, the error code here is supposed to be 100 for the fine case since
+# that's just how lib504.c is written
+<errorcode>
+100
+</errorcode>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test539 b/tests/data/test539
new file mode 100644
index 0000000..2406c54
--- /dev/null
+++ b/tests/data/test539
@@ -0,0 +1,63 @@
+<testcase>
+#
+# Server-side
+<reply>
+<data mode="text">
+file contents
+</data>
+
+<datacheck>
+file contents
+total 20
+drwxr-xr-x 8 98 98 512 Oct 22 13:06 .
+drwxr-xr-x 8 98 98 512 Oct 22 13:06 ..
+drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT
+-r--r--r-- 1 0 1 35 Jul 16 1996 README
+lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin
+dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev
+drwxrwxrwx 2 98 98 512 May 29 16:04 download.html
+dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc
+drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub
+dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr
+</datacheck>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+# tool is what to use instead of 'curl'
+<tool>
+lib539
+</tool>
+
+ <name>
+Two FTP fetches using different CURLOPT_FTP_FILEMETHOD
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/path/to/the/file/539
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+CWD path/to/the/file
+EPSV
+TYPE I
+SIZE 539
+RETR 539
+SYST
+CWD /
+EPSV
+TYPE A
+LIST path/to/the/file/539./
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test54 b/tests/data/test54
new file mode 100644
index 0000000..66dbe9d
--- /dev/null
+++ b/tests/data/test54
@@ -0,0 +1,45 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+followlocation
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+HTTP/1.1 302 This is a weirdo text message swsclose
+Connection: close
+Location:
+
+This server reply is for testing
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP with blank Location:
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/want/54 -L
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /want/54 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test540 b/tests/data/test540
new file mode 100644
index 0000000..7c5b9a8
--- /dev/null
+++ b/tests/data/test540
@@ -0,0 +1,96 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP proxy
+HTTP proxy Digest auth
+multi
+</keywords>
+</info>
+
+# Server-side
+<reply>
+
+# this is returned first since we get no proxy-auth
+<data>
+HTTP/1.1 407 Authorization Required to proxy me my dear
+Proxy-Authenticate: Digest realm="weirdorealm", nonce="12345"
+Content-Length: 33
+
+And you should ignore this data.
+</data>
+
+# then this is returned when we get proxy-auth
+<data1000>
+HTTP/1.1 200 OK
+Content-Length: 21
+Server: no
+
+Nice proxy auth sir!
+</data1000>
+
+<datacheck>
+HTTP/1.1 407 Authorization Required to proxy me my dear
+Proxy-Authenticate: Digest realm="weirdorealm", nonce="12345"
+Content-Length: 33
+
+HTTP/1.1 200 OK
+Content-Length: 21
+Server: no
+
+Nice proxy auth sir!
+HTTP/1.1 200 OK
+Content-Length: 21
+Server: no
+
+Nice proxy auth sir!
+</datacheck>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+# tool is what to use instead of 'curl'
+<tool>
+lib540
+</tool>
+<features>
+crypto
+</features>
+ <name>
+HTTP proxy auth Digest multi API re-using connection
+ </name>
+ <command>
+http://test.remote.haxx.se/path/540 http://%HOSTIP:%HTTPPORT silly:person custom.set.host.name
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent: curl/.*
+</strip>
+<protocol>
+GET http://test.remote.haxx.se/path/540 HTTP/1.1
+Accept: */*
+Proxy-Connection: Keep-Alive
+Host: custom.set.host.name
+
+GET http://test.remote.haxx.se/path/540 HTTP/1.1
+Proxy-Authorization: Digest username="silly", realm="weirdorealm", nonce="12345", uri="/path/540", response="ca507dcf189196b6a5374d3233042261"
+Accept: */*
+Proxy-Connection: Keep-Alive
+Host: custom.set.host.name
+
+GET http://test.remote.haxx.se/path/540 HTTP/1.1
+Proxy-Authorization: Digest username="silly", realm="weirdorealm", nonce="12345", uri="/path/540", response="ca507dcf189196b6a5374d3233042261"
+Accept: */*
+Proxy-Connection: Keep-Alive
+Host: custom.set.host.name
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test541 b/tests/data/test541
new file mode 100644
index 0000000..ce4c911
--- /dev/null
+++ b/tests/data/test541
@@ -0,0 +1,51 @@
+<testcase>
+# Server-side
+<reply>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+# tool is what to use instead of 'curl'
+<tool>
+lib541
+</tool>
+
+ <name>
+FTP upload and upload same file again without rewind
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/541 log/upload541
+</command>
+<file name="log/upload541">
+Contents
+of
+a file
+to verify
+ftp
+upload
+
+
+works?
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<upload>
+</upload>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE I
+STOR 541
+EPSV
+STOR 541
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test542 b/tests/data/test542
new file mode 100644
index 0000000..5afe124
--- /dev/null
+++ b/tests/data/test542
@@ -0,0 +1,57 @@
+<testcase>
+<info>
+<keywords>
+FTP
+PASV
+RETR
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+data
+ to
+ see
+that FTP
+works
+ so does it?
+</data>
+<datacheck>
+Content-Length: 51
+Accept-ranges: bytes
+</datacheck>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+<tool>
+lib542
+</tool>
+ <name>
+FTP a file with NOBODY yes and HEADER no
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/542
+</command>
+
+</client>
+
+# Verify data after the test has been "shot"
+#
+# There's no MTDM in the protocol here since this code doesn't ask for the
+# time/date of the file
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+TYPE I
+SIZE 542
+REST 0
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test543 b/tests/data/test543
new file mode 100644
index 0000000..4556330
--- /dev/null
+++ b/tests/data/test543
@@ -0,0 +1,35 @@
+<testcase>
+<info>
+<keywords>
+curl_easy_escape
+</keywords>
+</info>
+# Server-side
+
+# Client-side
+<client>
+<server>
+none
+</server>
+<tool>
+lib543
+</tool>
+ <name>
+curl_easy_escape
+ </name>
+ <command>
+-
+</command>
+
+</client>
+
+# Verify data after the test has been "shot"
+#
+# There's no MTDM in the protocol here since this code doesn't ask for the
+# time/date of the file
+<verify>
+<stdout>
+%9C%26K%3DI%04%A1%01%E0%D8%7C%20%B7%EFS%29%FA%1DW%E1
+</stdout>
+</verify>
+</testcase>
diff --git a/tests/data/test544 b/tests/data/test544
new file mode 100644
index 0000000..2fa4edb
--- /dev/null
+++ b/tests/data/test544
@@ -0,0 +1,49 @@
+<testcase>
+#
+# Server-side
+<reply>
+<data mode="text">
+HTTP/1.1 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 3
+
+OK
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+# tool is what to use instead of 'curl'
+<tool>
+lib544
+</tool>
+
+ <name>
+HTTP POST text data using CURLOPT_COPYPOSTFIELDS
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/544
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol nonewline="yes">
+POST /544 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 4
+Content-Type: application/x-www-form-urlencoded
+
+This
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test545 b/tests/data/test545
new file mode 100644
index 0000000..66ebb61
--- /dev/null
+++ b/tests/data/test545
Binary files differ
diff --git a/tests/data/test546 b/tests/data/test546
new file mode 100644
index 0000000..12e604a
--- /dev/null
+++ b/tests/data/test546
@@ -0,0 +1,70 @@
+<testcase>
+<info>
+<keywords>
+FTP
+PASV
+RETR
+multi
+</keywords>
+</info>
+# Server-side
+<reply>
+<data nocheck="yes">
+data
+ to
+ see
+that FTP
+works
+ so does it?
+</data>
+
+<servercmd>
+REPLY RETR 550 the file doesn't exist
+COUNT RETR 1
+REPLY SIZE 550 Can't check for file existence
+COUNT SIZE 1
+</servercmd>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+<tool>
+lib533
+</tool>
+ <name>
+FTP RETR a non-existing file then a found one using the multi interface
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/path/546 ftp://%HOSTIP:%FTPPORT/path/546
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+EPSV
+TYPE I
+SIZE 546
+RETR 546
+EPSV
+SIZE 546
+RETR 546
+QUIT
+</protocol>
+<stdout>
+data
+ to
+ see
+that FTP
+works
+ so does it?
+</stdout>
+</verify>
+</testcase>
diff --git a/tests/data/test547 b/tests/data/test547
new file mode 100644
index 0000000..d1e2604
--- /dev/null
+++ b/tests/data/test547
@@ -0,0 +1,133 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP POST
+POST callback
+HTTP proxy
+HTTP proxy NTLM auth
+</keywords>
+</info>
+# Server-side
+<reply>
+
+<data>
+HTTP/1.1 407 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Proxy-Authenticate: Blackmagic realm="gimme all yer s3cr3ts"
+Proxy-Authenticate: Basic realm="gimme all yer s3cr3ts"
+Proxy-Authenticate: NTLM
+Content-Type: text/html; charset=iso-8859-1
+Connection: close
+
+This is not the real page
+</data>
+
+# this is returned first since we get no proxy-auth
+<data1001>
+HTTP/1.1 407 Authorization Required to proxy me my dear
+Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+Content-Length: 34
+
+Hey you, authenticate or go away!
+</data1001>
+
+# This is supposed to be returned when the server gets the second
+# Authorization: NTLM line passed-in from the client
+<data1002>
+HTTP/1.1 200 Things are fine in proxy land swsclose
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 42
+
+Contents of that page you requested, sir.
+</data1002>
+
+<datacheck>
+HTTP/1.1 407 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Proxy-Authenticate: Blackmagic realm="gimme all yer s3cr3ts"
+Proxy-Authenticate: Basic realm="gimme all yer s3cr3ts"
+Proxy-Authenticate: NTLM
+Content-Type: text/html; charset=iso-8859-1
+Connection: close
+
+HTTP/1.1 407 Authorization Required to proxy me my dear
+Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+Content-Length: 34
+
+HTTP/1.1 200 Things are fine in proxy land swsclose
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 42
+
+Contents of that page you requested, sir.
+</datacheck>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+# tool to use
+<tool>
+lib547
+</tool>
+<features>
+NTLM
+</features>
+ <name>
+HTTP proxy auth NTLM with POST data from read callback
+ </name>
+ <setenv>
+# we force our own host name, in order to make the test machine independent
+CURL_GETHOSTNAME=curlhost
+# we try to use the LD_PRELOAD hack, if not a debug build
+LD_PRELOAD=%PWD/libtest/.libs/libhostname.so
+ </setenv>
+ <command>
+http://test.remote.haxx.se/path/547 http://%HOSTIP:%HTTPPORT s1lly:pers0n
+</command>
+<precheck>
+chkhostname curlhost
+</precheck>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent: curl/.*
+</strip>
+<protocol>
+POST http://test.remote.haxx.se/path/547 HTTP/1.1
+User-Agent: curl/7.13.2-CVS (i686-pc-linux-gnu) libcurl/7.13.2-CVS OpenSSL/0.9.7e zlib/1.2.2 libidn/0.5.13
+Host: test.remote.haxx.se
+Accept: */*
+Proxy-Connection: Keep-Alive
+Content-Length: 36
+Content-Type: application/x-www-form-urlencoded
+
+this is the blurb we want to upload
+POST http://test.remote.haxx.se/path/547 HTTP/1.1
+Proxy-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+User-Agent: curl/7.13.2-CVS (i686-pc-linux-gnu) libcurl/7.13.2-CVS OpenSSL/0.9.7e zlib/1.2.2 libidn/0.5.13
+Host: test.remote.haxx.se
+Accept: */*
+Proxy-Connection: Keep-Alive
+Content-Length: 0
+Content-Type: application/x-www-form-urlencoded
+
+POST http://test.remote.haxx.se/path/547 HTTP/1.1
+Proxy-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAABQAFAHAAAAAIAAgAdQAAAAAAAAAAAAAABoKBAIYrD1xJmhNBNL9fLzuk9PV9436GAxPu0EKWzqQ/sZDVLXnp1JrySgl8A+cibE6z4HMxbGx5Y3VybGhvc3Q=
+User-Agent: curl/7.13.2-CVS (i686-pc-linux-gnu) libcurl/7.13.2-CVS OpenSSL/0.9.7e zlib/1.2.2 libidn/0.5.13
+Host: test.remote.haxx.se
+Accept: */*
+Proxy-Connection: Keep-Alive
+Content-Length: 36
+Content-Type: application/x-www-form-urlencoded
+
+this is the blurb we want to upload
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test548 b/tests/data/test548
new file mode 100644
index 0000000..c4942e6
--- /dev/null
+++ b/tests/data/test548
@@ -0,0 +1,133 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP POST
+HTTP proxy
+HTTP proxy NTLM auth
+</keywords>
+</info>
+
+# Server-side
+<reply>
+
+<data>
+HTTP/1.1 407 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Proxy-Authenticate: Blackmagic realm="gimme all yer s3cr3ts"
+Proxy-Authenticate: Basic realm="gimme all yer s3cr3ts"
+Proxy-Authenticate: NTLM
+Content-Type: text/html; charset=iso-8859-1
+Connection: close
+
+This is not the real page
+</data>
+
+# this is returned first since we get no proxy-auth
+<data1001>
+HTTP/1.1 407 Authorization Required to proxy me my dear
+Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+Content-Length: 34
+
+Hey you, authenticate or go away!
+</data1001>
+
+# This is supposed to be returned when the server gets the second
+# Authorization: NTLM line passed-in from the client
+<data1002>
+HTTP/1.1 200 Things are fine in proxy land swsclose
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 42
+
+Contents of that page you requested, sir.
+</data1002>
+
+<datacheck>
+HTTP/1.1 407 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Proxy-Authenticate: Blackmagic realm="gimme all yer s3cr3ts"
+Proxy-Authenticate: Basic realm="gimme all yer s3cr3ts"
+Proxy-Authenticate: NTLM
+Content-Type: text/html; charset=iso-8859-1
+Connection: close
+
+HTTP/1.1 407 Authorization Required to proxy me my dear
+Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+Content-Length: 34
+
+HTTP/1.1 200 Things are fine in proxy land swsclose
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 42
+
+Contents of that page you requested, sir.
+</datacheck>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+# tool to use
+<tool>
+lib548
+</tool>
+<features>
+NTLM
+</features>
+ <name>
+HTTP proxy auth NTLM with POST data from CURLOPT_POSTFIELDS
+ </name>
+ <setenv>
+# we force our own host name, in order to make the test machine independent
+CURL_GETHOSTNAME=curlhost
+# we try to use the LD_PRELOAD hack, if not a debug build
+LD_PRELOAD=%PWD/libtest/.libs/libhostname.so
+ </setenv>
+ <command>
+http://test.remote.haxx.se/path/548 http://%HOSTIP:%HTTPPORT s1lly:pers0n
+</command>
+<precheck>
+chkhostname curlhost
+</precheck>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent: curl/.*
+</strip>
+<protocol>
+POST http://test.remote.haxx.se/path/548 HTTP/1.1
+User-Agent: curl/7.13.2-CVS (i686-pc-linux-gnu) libcurl/7.13.2-CVS OpenSSL/0.9.7e zlib/1.2.2 libidn/0.5.13
+Host: test.remote.haxx.se
+Accept: */*
+Proxy-Connection: Keep-Alive
+Content-Length: 36
+Content-Type: application/x-www-form-urlencoded
+
+this is the blurb we want to upload
+POST http://test.remote.haxx.se/path/548 HTTP/1.1
+Proxy-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+User-Agent: curl/7.13.2-CVS (i686-pc-linux-gnu) libcurl/7.13.2-CVS OpenSSL/0.9.7e zlib/1.2.2 libidn/0.5.13
+Host: test.remote.haxx.se
+Accept: */*
+Proxy-Connection: Keep-Alive
+Content-Length: 0
+Content-Type: application/x-www-form-urlencoded
+
+POST http://test.remote.haxx.se/path/548 HTTP/1.1
+Proxy-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAABQAFAHAAAAAIAAgAdQAAAAAAAAAAAAAABoKBAIYrD1xJmhNBNL9fLzuk9PV9436GAxPu0EKWzqQ/sZDVLXnp1JrySgl8A+cibE6z4HMxbGx5Y3VybGhvc3Q=
+User-Agent: curl/7.13.2-CVS (i686-pc-linux-gnu) libcurl/7.13.2-CVS OpenSSL/0.9.7e zlib/1.2.2 libidn/0.5.13
+Host: test.remote.haxx.se
+Accept: */*
+Proxy-Connection: Keep-Alive
+Content-Length: 36
+Content-Type: application/x-www-form-urlencoded
+
+this is the blurb we want to upload
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test549 b/tests/data/test549
new file mode 100644
index 0000000..298d0ad
--- /dev/null
+++ b/tests/data/test549
@@ -0,0 +1,65 @@
+<testcase>
+<info>
+<keywords>
+FTP
+CURLOPT_PROXY_TRANSFER_MODE
+CURLOPT_PROXY
+HTTP proxy
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.1 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+
+hello
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<features>
+ftp
+</features>
+<tool>
+lib549
+</tool>
+ <name>
+FTP RETR over proxy with CURLOPT_PROXY_TRANSFER_MODE
+ </name>
+# first URL then proxy
+ <command>
+ftp://www.haxx.se/moo/549 http://%HOSTIP:%HTTPPORT
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET ftp://www.haxx.se/moo/549;type=i HTTP/1.1
+Host: www.haxx.se:21
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol>
+<stdout mode="text">
+hello
+</stdout>
+</verify>
+</testcase>
diff --git a/tests/data/test55 b/tests/data/test55
new file mode 100644
index 0000000..6623856
--- /dev/null
+++ b/tests/data/test55
@@ -0,0 +1,66 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+followlocation
+</keywords>
+</info>
+<reply>
+<data>
+HTTP/1.1 302 OK swsclose
+Location: 550002
+Date: Thu, 09 Nov 2010 14:50:00 GMT
+Connection: close
+
+</data>
+<data2>
+HTTP/1.1 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:50:00 GMT
+Connection: close
+
+body
+</data2>
+<datacheck>
+HTTP/1.1 302 OK swsclose
+Location: 550002
+Date: Thu, 09 Nov 2010 14:50:00 GMT
+Connection: close
+
+HTTP/1.1 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:50:00 GMT
+Connection: close
+
+body
+</datacheck>
+</reply>
+
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP follow redirect with single slash in path
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/55 -L
+</command>
+</client>
+
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /55 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /550002 HTTP/1.1
+User-Agent: curl/7.10 (i686-pc-linux-gnu) libcurl/7.10 OpenSSL/0.9.6c ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test550 b/tests/data/test550
new file mode 100644
index 0000000..c99cf4b
--- /dev/null
+++ b/tests/data/test550
@@ -0,0 +1,65 @@
+<testcase>
+<info>
+<keywords>
+FTP
+HTTP proxy
+CURLOPT_PROXY_TRANSFER_MODE
+CURLOPT_PROXY
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.1 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+
+hello
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<features>
+ftp
+</features>
+<tool>
+lib549
+</tool>
+ <name>
+FTP RETR over proxy with CURLOPT_PROXY_TRANSFER_MODE and ASCII transfer
+ </name>
+# first URL then proxy
+ <command>
+ftp://www.haxx.se/moo/550 http://%HOSTIP:%HTTPPORT ascii
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET ftp://www.haxx.se/moo/550;type=a HTTP/1.1
+Host: www.haxx.se:21
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol>
+<stdout mode="text">
+hello
+</stdout>
+</verify>
+</testcase>
diff --git a/tests/data/test551 b/tests/data/test551
new file mode 100644
index 0000000..8027d91
--- /dev/null
+++ b/tests/data/test551
@@ -0,0 +1,98 @@
+<testcase>
+<info>
+# this test is meant to be exactly like 547 but using Digest instead of NTLM
+<keywords>
+HTTP
+HTTP POST
+POST callback
+HTTP proxy
+HTTP proxy Digest auth
+</keywords>
+</info>
+
+# Server-side
+<reply>
+
+# as a bonus, ww use an excessive nonce length
+<data>
+HTTP/1.1 407 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Proxy-Authenticate: Digest realm="something fun to read", nonce="AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+Content-Type: text/html; charset=iso-8859-1
+Connection: close
+
+This is not the real page
+</data>
+
+# This is supposed to be returned when the server gets the Digest
+# Authorization: line passed-in from the client
+<data1000>
+HTTP/1.1 200 Things are fine in proxy land swsclose
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 42
+
+Contents of that page you requested, sir.
+</data1000>
+
+<datacheck>
+HTTP/1.1 407 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Proxy-Authenticate: Digest realm="something fun to read", nonce="AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+Content-Type: text/html; charset=iso-8859-1
+Connection: close
+
+HTTP/1.1 200 Things are fine in proxy land swsclose
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 42
+
+Contents of that page you requested, sir.
+</datacheck>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+# tool to use
+<tool>
+lib547
+</tool>
+<features>
+</features>
+ <name>
+HTTP proxy auth Digest with POST data from read callback
+ </name>
+ <command>
+http://test.remote.haxx.se/path/551 http://%HOSTIP:%HTTPPORT s1lly:pers0n
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent: curl/.*
+</strip>
+<protocol>
+POST http://test.remote.haxx.se/path/551 HTTP/1.1
+Host: test.remote.haxx.se
+Accept: */*
+Proxy-Connection: Keep-Alive
+Content-Length: 36
+Content-Type: application/x-www-form-urlencoded
+
+this is the blurb we want to upload
+POST http://test.remote.haxx.se/path/551 HTTP/1.1
+Proxy-Authorization: Digest username="s1lly", realm="something fun to read", nonce="AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", uri="/path/551", response="3325240726fbdaf1e61f3a0dd40b930c"
+Host: test.remote.haxx.se
+Accept: */*
+Proxy-Connection: Keep-Alive
+Content-Length: 36
+Content-Type: application/x-www-form-urlencoded
+
+this is the blurb we want to upload
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test552 b/tests/data/test552
new file mode 100644
index 0000000..b0db37c
--- /dev/null
+++ b/tests/data/test552
Binary files differ
diff --git a/tests/data/test553 b/tests/data/test553
new file mode 100644
index 0000000..5552936
--- /dev/null
+++ b/tests/data/test553
@@ -0,0 +1,67 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP POST
+POST callback
+huge request header
+</keywords>
+</info>
+# Server-side
+<reply>
+
+<data>
+HTTP/1.1 200 Fine!
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Content-Length: 6
+
+hello
+</data>
+
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+# tool to use
+<tool>
+lib553
+</tool>
+<features>
+</features>
+ <name>
+HTTP post with huge request headers and post data from callback
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/path/553
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent: curl/.*
+</strip>
+# We strip off a large chunk of the type-2 NTLM message since it depends on
+# the local host name and thus differs on different machines!
+<protocol nonewline="yes">
+POST /path/553 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Header0: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+Header1: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+Header2: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+Header3: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+Header4: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+Header5: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+Header6: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+Header7: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+Content-Length: 40960
+Content-Type: application/x-www-form-urlencoded
+
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test554 b/tests/data/test554
new file mode 100644
index 0000000..134f7ef
--- /dev/null
+++ b/tests/data/test554
@@ -0,0 +1,68 @@
+<testcase>
+#
+# Server-side
+<reply>
+<data mode="text">
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake swsclose
+Connection: close
+Content-Type: text/html
+
+hello
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+# tool is what to use instead of 'curl'
+<tool>
+lib554
+</tool>
+
+ <name>
+HTTP multi-part formpost using read callback for the file part
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/554
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strippart>
+s/^------------------------------[a-z0-9]*/------------------------------/
+s/boundary=----------------------------[a-z0-9]*/boundary=----------------------------/
+</strippart>
+# Note that the stripping above removes 12 bytes from every occurance of the
+# boundary string and since 4 of them are in the body contents, we see
+# 415 - (4*12) here == 367 bytes.
+<protocol>
+POST /554 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 415
+Expect: 100-continue
+Content-Type: multipart/form-data; boundary=----------------------------
+
+------------------------------
+Content-Disposition: form-data; name="sendfile"; filename="postit2.c"
+
+this is what we post to the silly web server
+
+------------------------------
+Content-Disposition: form-data; name="filename"
+
+postit2.c
+------------------------------
+Content-Disposition: form-data; name="submit"
+
+send
+--------------------------------
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test555 b/tests/data/test555
new file mode 100644
index 0000000..3222345
--- /dev/null
+++ b/tests/data/test555
@@ -0,0 +1,142 @@
+<testcase>
+# NOTE: this test case is a duplicate of 547 but the tool is built to use the
+# multi interface instead of easy, but that shouldn't be noticable at all in
+# this file!
+<info>
+<keywords>
+HTTP
+HTTP POST
+POST callback
+HTTP proxy
+HTTP proxy NTLM auth
+multi
+</keywords>
+</info>
+
+# Server-side
+<reply>
+
+<data>
+HTTP/1.1 407 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Proxy-Authenticate: Blackmagic realm="gimme all yer s3cr3ts"
+Proxy-Authenticate: Basic realm="gimme all yer s3cr3ts"
+Proxy-Authenticate: NTLM
+Content-Type: text/html; charset=iso-8859-1
+Connection: close
+
+This is not the real page
+</data>
+
+# this is returned first since we get no proxy-auth
+<data1001>
+HTTP/1.1 407 Authorization Required to proxy me my dear
+Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+Content-Length: 34
+
+Hey you, authenticate or go away!
+</data1001>
+
+# This is supposed to be returned when the server gets the second
+# Authorization: NTLM line passed-in from the client
+<data1002>
+HTTP/1.1 200 Things are fine in proxy land swsclose
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 42
+
+Contents of that page you requested, sir.
+</data1002>
+
+<datacheck>
+HTTP/1.1 407 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Proxy-Authenticate: Blackmagic realm="gimme all yer s3cr3ts"
+Proxy-Authenticate: Basic realm="gimme all yer s3cr3ts"
+Proxy-Authenticate: NTLM
+Content-Type: text/html; charset=iso-8859-1
+Connection: close
+
+HTTP/1.1 407 Authorization Required to proxy me my dear
+Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+Content-Length: 34
+
+HTTP/1.1 200 Things are fine in proxy land swsclose
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 42
+
+Contents of that page you requested, sir.
+</datacheck>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+# tool to use
+<tool>
+lib555
+</tool>
+<features>
+NTLM
+</features>
+ <name>
+HTTP proxy auth NTLM with POST data from read callback multi-if
+ </name>
+ <setenv>
+# we force our own host name, in order to make the test machine independent
+CURL_GETHOSTNAME=curlhost
+# we try to use the LD_PRELOAD hack, if not a debug build
+LD_PRELOAD=%PWD/libtest/.libs/libhostname.so
+ </setenv>
+ <command>
+http://test.remote.haxx.se/path/555 http://%HOSTIP:%HTTPPORT s1lly:pers0n
+</command>
+<precheck>
+chkhostname curlhost
+</precheck>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent: curl/.*
+</strip>
+<strippart>
+# remove CR that CURLOPT_TRANSFERTEXT added, when CharConv enabled:
+s/^(this is the blurb we want to upload)\r\n/$1\n/ if($has_charconv)
+</strippart>
+<protocol>
+POST http://test.remote.haxx.se/path/555 HTTP/1.1
+User-Agent: curl/7.13.2-CVS (i686-pc-linux-gnu) libcurl/7.13.2-CVS OpenSSL/0.9.7e zlib/1.2.2 libidn/0.5.13
+Host: test.remote.haxx.se
+Accept: */*
+Proxy-Connection: Keep-Alive
+Content-Length: 36
+Content-Type: application/x-www-form-urlencoded
+
+this is the blurb we want to upload
+POST http://test.remote.haxx.se/path/555 HTTP/1.1
+Proxy-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+User-Agent: curl/7.13.2-CVS (i686-pc-linux-gnu) libcurl/7.13.2-CVS OpenSSL/0.9.7e zlib/1.2.2 libidn/0.5.13
+Host: test.remote.haxx.se
+Accept: */*
+Proxy-Connection: Keep-Alive
+Content-Length: 0
+Content-Type: application/x-www-form-urlencoded
+
+POST http://test.remote.haxx.se/path/555 HTTP/1.1
+Proxy-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAABQAFAHAAAAAIAAgAdQAAAAAAAAAAAAAABoKBAIYrD1xJmhNBNL9fLzuk9PV9436GAxPu0EKWzqQ/sZDVLXnp1JrySgl8A+cibE6z4HMxbGx5Y3VybGhvc3Q=
+User-Agent: curl/7.13.2-CVS (i686-pc-linux-gnu) libcurl/7.13.2-CVS OpenSSL/0.9.7e zlib/1.2.2 libidn/0.5.13
+Host: test.remote.haxx.se
+Accept: */*
+Proxy-Connection: Keep-Alive
+Content-Length: 36
+Content-Type: application/x-www-form-urlencoded
+
+this is the blurb we want to upload
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test556 b/tests/data/test556
new file mode 100644
index 0000000..998bdfb
--- /dev/null
+++ b/tests/data/test556
@@ -0,0 +1,50 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+</keywords>
+</info>
+
+<reply>
+<data>
+HTTP/1.1 200 OK
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+Content-Length: 6
+Connection: close
+
+-foo-
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<tool>
+lib556
+</tool>
+ <name>
+send and recv HTTP
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /556 HTTP/1.2
+Host: ninja
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test557 b/tests/data/test557
new file mode 100644
index 0000000..3da67e9
--- /dev/null
+++ b/tests/data/test557
@@ -0,0 +1,39 @@
+<testcase>
+#
+# Server-side
+<reply>
+</reply>
+
+# Client-side
+<client>
+<server>
+none
+</server>
+# tool is what to use instead of 'curl'
+<tool>
+lib557
+</tool>
+
+<name>
+curl_mprintf() testing
+</name>
+<command>
+nothing
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<stdout mode="text">
+All curl_mprintf() unsigned short tests OK!
+All curl_mprintf() signed short tests OK!
+All curl_mprintf() unsigned int tests OK!
+All curl_mprintf() signed int tests OK!
+All curl_mprintf() unsigned long tests OK!
+All curl_mprintf() signed long tests OK!
+All curl_mprintf() curl_off_t tests OK!
+</stdout>
+</verify>
+
+</testcase>
diff --git a/tests/data/test558 b/tests/data/test558
new file mode 100644
index 0000000..5b69ea0
--- /dev/null
+++ b/tests/data/test558
@@ -0,0 +1,44 @@
+<testcase>
+#
+# Server-side
+<reply>
+</reply>
+
+# Client-side
+<client>
+<server>
+none
+</server>
+# tool is what to use instead of 'curl'
+<tool>
+lib558
+</tool>
+# precheck is a command line to run before the test,
+# to see if we can execute the test or not
+<precheck>
+./libtest/lib558 check
+</precheck>
+
+<name>
+internal hash create/destroy testing
+</name>
+<command>
+nothing
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<stdout mode="text">
+easy handle init OK
+creating hash...
+hash creation OK
+destroying hash...
+hash destruction OK
+destroying easy handle...
+easy handle destruction OK
+</stdout>
+</verify>
+
+</testcase>
diff --git a/tests/data/test559 b/tests/data/test559
new file mode 100644
index 0000000..ecaf54c
--- /dev/null
+++ b/tests/data/test559
@@ -0,0 +1,44 @@
+<testcase>
+#
+# Server-side
+<reply>
+</reply>
+
+# Client-side
+<client>
+<server>
+none
+</server>
+# tool is what to use instead of 'curl'
+<tool>
+lib559
+</tool>
+# precheck is a command line to run before the test,
+# to see if we can execute the test or not
+<precheck>
+./libtest/lib559 check
+</precheck>
+
+<name>
+internal hash create/add/destroy testing
+</name>
+<command>
+nothing
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<stdout mode="text">
+easy handle init OK
+creating hash...
+hash creation OK
+destroying hash...
+hash destruction OK
+destroying easy handle...
+easy handle destruction OK
+</stdout>
+</verify>
+
+</testcase>
diff --git a/tests/data/test56 b/tests/data/test56
new file mode 100644
index 0000000..a97b365
--- /dev/null
+++ b/tests/data/test56
@@ -0,0 +1,61 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP POST
+chunked Transfer-Encoding
+config file
+-A
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+HTTP/1.0 200 OK swsclose
+Funny-head: yesyes
+
+This is the proof it works
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP POST with *HUGE* request and chunked transfer-encoding
+ </name>
+ <stdin>
+#
+data "we post this"
+#
+# enforce chunky post!
+header "Transfer-Encoding: chunked"
+#
+# Set the user-agent using a short-option:
+-A "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+#
+ </stdin>
+ <command>
+-K - %HOSTIP:%HTTPPORT/that.site.com/56
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+POST /that.site.com/56 HTTP/1.1
+User-Agent: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Transfer-Encoding: chunked
+Content-Type: application/x-www-form-urlencoded
+
+c
+we post this
+0
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test560 b/tests/data/test560
new file mode 100644
index 0000000..0e991b8
--- /dev/null
+++ b/tests/data/test560
@@ -0,0 +1,56 @@
+<testcase>
+<info>
+<keywords>
+HTTPS
+HTTP GET
+multi
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 7
+
+MooMoo
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<features>
+SSL
+</features>
+<server>
+https
+</server>
+<tool>
+lib560
+</tool>
+ <name>
+simple HTTPS GET with multi interface
+ </name>
+ <command>
+https://%HOSTIP:%HTTPSPORT/560
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /560 HTTP/1.1
+Host: %HOSTIP:%HTTPSPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test561 b/tests/data/test561
new file mode 100644
index 0000000..18e827c
--- /dev/null
+++ b/tests/data/test561
@@ -0,0 +1,66 @@
+<testcase>
+<info>
+<keywords>
+FTP
+HTTP proxy
+CURLOPT_PROXY_TRANSFER_MODE
+CURLOPT_PROXY
+type=
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.1 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+
+hello
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<features>
+ftp
+</features>
+<tool>
+lib549
+</tool>
+ <name>
+FTP RETR with CURLOPT_PROXY_TRANSFER_MODE, ASCII transfer and type=i
+ </name>
+# first URL then proxy
+ <command>
+"ftp://www.haxx.se/moo/561;type=i" http://%HOSTIP:%HTTPPORT ascii
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET ftp://www.haxx.se/moo/561;type=i HTTP/1.1
+Host: www.haxx.se:21
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol>
+<stdout mode="text">
+hello
+</stdout>
+</verify>
+</testcase>
diff --git a/tests/data/test562 b/tests/data/test562
new file mode 100644
index 0000000..070cf7a
--- /dev/null
+++ b/tests/data/test562
@@ -0,0 +1,53 @@
+<testcase>
+<info>
+<keywords>
+FTP
+PASV
+RETR
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+silly data
+over FTP
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+<tool>
+lib562
+</tool>
+ <name>
+FTP a type=A URL and CURLOPT_PORT set
+ </name>
+
+# note that we need quotes around the URL below to make sure the shell doesn't
+# treat the semicolon as a separator!
+ <command>
+'ftp://%HOSTIP:23456/562;type=A' %FTPPORT
+</command>
+
+</client>
+
+# Verify data after the test has been "shot"
+#
+# There's no MTDM in the protocol here since this code doesn't ask for the
+# time/date of the file
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE A
+SIZE 562
+RETR 562
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test563 b/tests/data/test563
new file mode 100644
index 0000000..7851523
--- /dev/null
+++ b/tests/data/test563
@@ -0,0 +1,57 @@
+<testcase>
+<info>
+<keywords>
+FTP
+CURLOPT_PORT
+HTTP proxy
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.1 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Accept-Ranges: bytes
+Content-Length: 6
+
+hello
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+http
+</server>
+<tool>
+lib562
+</tool>
+ <name>
+FTP type=A URL and CURLOPT_PORT set and proxy
+ </name>
+
+<setenv>
+ftp_proxy=http://%HOSTIP:%HTTPPORT/
+</setenv>
+# note that we need quotes around the URL below to make sure the shell doesn't
+# treat the semicolon as a separator!
+ <command>
+"ftp://%HOSTIP:23456/563;type=A" %FTPPORT
+</command>
+
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+GET FTP://%HOSTIP:%FTPPORT/563;type=A HTTP/1.1
+Host: %HOSTIP:%FTPPORT
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test564 b/tests/data/test564
new file mode 100644
index 0000000..6d0609d
--- /dev/null
+++ b/tests/data/test564
@@ -0,0 +1,66 @@
+<testcase>
+<info>
+<keywords>
+FTP
+PASV
+RETR
+multi
+SOCKS4
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+data
+ to
+ see
+that FTP
+works
+ so does it?
+</data>
+
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+socks4
+</server>
+<tool>
+lib564
+</tool>
+ <name>
+FTP RETR a file over a SOCKS proxy using the multi interface
+ </name>
+<command>
+ftp://%HOSTIP:%FTPPORT/path/564 %HOSTIP:%SOCKSPORT
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+CWD path
+EPSV
+TYPE I
+SIZE 546
+RETR 546
+EPSV
+SIZE 546
+RETR 546
+QUIT
+</protocol>
+<stdout>
+data
+ to
+ see
+that FTP
+works
+ so does it?
+</stdout>
+</verify>
+</testcase>
diff --git a/tests/data/test565 b/tests/data/test565
new file mode 100644
index 0000000..fdf75a5
--- /dev/null
+++ b/tests/data/test565
@@ -0,0 +1,105 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP POST
+HTTP Digest auth
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 100 Continue
+Server: Microsoft-IIS/5.0
+Date: Sun, 03 Apr 2005 14:57:45 GMT
+X-Powered-By: ASP.NET
+
+HTTP/1.1 401 authentication please swsbounce
+Server: Microsoft-IIS/6.0
+WWW-Authenticate: Digest realm="testrealm", nonce="1053604144"
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 0
+
+</data>
+<data1>
+HTTP/1.1 200 A OK
+Server: Microsoft-IIS/6.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 3
+
+ok
+</data1>
+<datacheck>
+HTTP/1.1 100 Continue
+Server: Microsoft-IIS/5.0
+Date: Sun, 03 Apr 2005 14:57:45 GMT
+X-Powered-By: ASP.NET
+
+HTTP/1.1 401 authentication please swsbounce
+Server: Microsoft-IIS/6.0
+WWW-Authenticate: Digest realm="testrealm", nonce="1053604144"
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 0
+
+HTTP/1.1 200 A OK
+Server: Microsoft-IIS/6.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 3
+
+ok
+</datacheck>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+# tool is what to use instead of 'curl'
+<tool>
+lib565
+</tool>
+
+ <name>
+send HTTP POST using read callback, chunked transfer-encoding and Digest
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/565
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+POST /565 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Transfer-Encoding: chunked
+Content-Type: application/x-www-form-urlencoded
+
+
+0
+
+POST /565 HTTP/1.1
+Authorization: Digest username="foo", realm="testrealm", nonce="1053604144", uri="/565", response="877424f750af047634dbd94f9933217b"
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Transfer-Encoding: chunked
+Content-Type: application/x-www-form-urlencoded
+Expect: 100-continue
+
+3
+one
+3
+two
+5
+three
+1d
+and a final longer crap: four
+0
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test566 b/tests/data/test566
new file mode 100644
index 0000000..95da61d
--- /dev/null
+++ b/tests/data/test566
@@ -0,0 +1,57 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+<data mode="text">
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 0
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+# tool is what to use instead of 'curl'
+<tool>
+lib566
+</tool>
+
+ <name>
+HTTP GET with CURLINFO_CONTENT_LENGTH_DOWNLOAD and 0 bytes transfer
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/566 log/ip566
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<file name="log/ip566" mode="text">
+CL: 0
+</file>
+<protocol>
+GET /566 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test567 b/tests/data/test567
new file mode 100644
index 0000000..4fd1484
--- /dev/null
+++ b/tests/data/test567
@@ -0,0 +1,50 @@
+<testcase>
+
+#Informational
+<info>
+<keywords>
+RTSP
+OPTIONS
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+RTSP/1.0 200 OK
+Server: RTSPD/libcurl-test
+CSeq: 1
+Public: DESCRIBE, OPTIONS, SETUP, TEARDOWN, PLAY, PAUSE
+Curl-Private: swsclose
+</data>
+</reply>
+
+# Client-Side
+<client>
+<server>
+rtsp
+</server>
+<tool>
+lib567
+</tool>
+
+<name>
+simple RTSP OPTIONS command
+</name>
+<command>
+rtsp://%HOSTIP:%RTSPPORT/567
+</command>
+</client>
+
+<verify>
+<protocol>
+OPTIONS rtsp://%HOSTIP:%RTSPPORT/567 RTSP/1.0
+CSeq: 1
+User-Agent: test567
+Test-Number: 567
+
+</protocol>
+</verify>
+
+</testcase>
+
diff --git a/tests/data/test568 b/tests/data/test568
new file mode 100644
index 0000000..d746e96
--- /dev/null
+++ b/tests/data/test568
@@ -0,0 +1,117 @@
+<testcase>
+
+#Informational
+<info>
+<keywords>
+RTSP
+ANNOUNCE
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data1>
+RTSP/1.0 200 OK
+Server: RTSPD/libcurl-test
+Cseq: 1
+
+</data1>
+
+<data2>
+RTSP/1.0 200 OK
+Server: RTSPD/libcurl-test
+Cseq: 2
+Content-Length: 70
+Content-Type: application/sdp
+
+v=0
+s=rtspd SDP
+i=A fake SDP reply
+u=http://www.curl.haxx.se/fakesdp.ps
+</data2>
+<data3>
+RTSP/1.0 200 Okie Dokie
+Server: RTSPD/libcurl-test
+Cseq: 3
+
+</data3>
+<data4>
+RTSP/1.0 200 OK
+Server: RTSPD/libcurl-test
+CSeq: 4
+Curl-private: swsclose
+Informational: Empty Options Response
+
+</data4>
+</reply>
+
+# Client-Side
+<client>
+<server>
+rtsp
+</server>
+<tool>
+lib568
+</tool>
+
+<name>
+RTSP Announce (PUT and POST style) test
+</name>
+<command>
+rtsp://%HOSTIP:%RTSPPORT/568
+</command>
+# file written before test command runs
+<file name="log/file568.txt">
+v=0
+o=mhandley 2890844526 2890845468 IN IP4 126.16.64.4
+s=SDP Seminar
+i=A Seminar on the session description protocol
+u=http://www.cs.ucl.ac.uk/staff/M.Handley/sdp.03.ps
+e=mjh@isi.edu (Mark Handley)
+c=IN IP4 224.2.17.12/127
+t=2873397496 2873404696
+a=recvonly
+m=audio 3456 RTP/AVP 0
+m=video 2232 RTP/AVP 31
+</file>
+</client>
+
+<verify>
+<strip>
+^If-Modified-Since:.*
+</strip>
+<protocol>
+ANNOUNCE rtsp://%HOSTIP:%RTSPPORT/5680001 RTSP/1.0
+CSeq: 1
+Content-Length: 306
+Content-Type: application/sdp
+
+v=0
+o=mhandley 2890844526 2890845468 IN IP4 126.16.64.4
+s=SDP Seminar
+i=A Seminar on the session description protocol
+u=http://www.cs.ucl.ac.uk/staff/M.Handley/sdp.03.ps
+e=mjh@isi.edu (Mark Handley)
+c=IN IP4 224.2.17.12/127
+t=2873397496 2873404696
+a=recvonly
+m=audio 3456 RTP/AVP 0
+m=video 2232 RTP/AVP 31
+DESCRIBE rtsp://%HOSTIP:%RTSPPORT/5680002 RTSP/1.0
+CSeq: 2
+Accept: application/sdp
+
+ANNOUNCE rtsp://%HOSTIP:%RTSPPORT/5680003 RTSP/1.0
+CSeq: 3
+Content-Type: posty goodness
+Content-Length: 35
+
+postyfield=postystuff&project=curl
+OPTIONS rtsp://%HOSTIP:%RTSPPORT/5680004 RTSP/1.0
+CSeq: 4
+
+</protocol>
+</verify>
+
+</testcase>
+
diff --git a/tests/data/test569 b/tests/data/test569
new file mode 100644
index 0000000..5cd4797
--- /dev/null
+++ b/tests/data/test569
@@ -0,0 +1,110 @@
+<testcase>
+
+#Informational
+<info>
+<keywords>
+RTSP
+SESSION_ID
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data1>
+RTSP/1.0 200 OK
+Server: RTSPD/libcurl-test
+CSeq: 1
+Session: 00.+1-am-aSe55ion_id\$yes-i-am\$;timeout=60
+
+</data1>
+<data2>
+RTSP/1.0 200 OK
+Server: RTSPD/libcurl-test
+CSeq: 2
+
+</data2>
+<data3>
+RTSP/1.0 200 OK
+Session: \$extraspaces ignore-this-part-------;foo=bar
+CSeq: 3
+Server: RTSPD/libcurl-test
+
+</data3>
+<data4>
+RTSP/1.0 200 OK
+CSeq: 4
+Server: RTSPD/libcurl-test
+
+</data4>
+<data5>
+RTSP/1.0 200 OK
+Session: A
+Server: RTSPD/libcurl-test
+CSeq: 5
+Informational: Single Character
+
+</data5>
+<data6>
+RTSP/1.0 200 OK
+Server: RTSPD/libcurl-test
+Curl-Private: swsclose
+CSeq: 6
+
+</data6>
+
+# Client-Side
+<client>
+<server>
+rtsp
+</server>
+<tool>
+lib569
+</tool>
+
+<name>
+RTSP Session ID parsing
+</name>
+<command>
+rtsp://%HOSTIP:%RTSPPORT/569 log/idfile.txt
+</command>
+</client>
+
+<verify>
+<strip>
+^If-Modified-Since:.*
+</strip>
+<protocol>
+SETUP rtsp://%HOSTIP:%RTSPPORT/5690001 RTSP/1.0
+CSeq: 1
+Transport: Fake/NotReal/JustATest;foo=baz
+
+TEARDOWN rtsp://%HOSTIP:%RTSPPORT/5690002 RTSP/1.0
+CSeq: 2
+Session: 00.+1-am-aSe55ion_id\$yes-i-am\$
+
+SETUP rtsp://%HOSTIP:%RTSPPORT/5690003 RTSP/1.0
+CSeq: 3
+Transport: Fake/NotReal/JustATest;foo=baz
+
+TEARDOWN rtsp://%HOSTIP:%RTSPPORT/5690004 RTSP/1.0
+CSeq: 4
+Session: \$extraspaces
+
+SETUP rtsp://%HOSTIP:%RTSPPORT/5690005 RTSP/1.0
+CSeq: 5
+Transport: Fake/NotReal/JustATest;foo=baz
+
+TEARDOWN rtsp://%HOSTIP:%RTSPPORT/5690006 RTSP/1.0
+CSeq: 6
+Session: A
+
+</protocol>
+<file name="log/idfile.txt">
+Got Session ID: [00.+1-am-aSe55ion_id\$yes-i-am\$]
+Got Session ID: [\$extraspaces]
+Got Session ID: [A]
+</file>
+</verify>
+
+</testcase>
+
diff --git a/tests/data/test57 b/tests/data/test57
new file mode 100644
index 0000000..0724eac
--- /dev/null
+++ b/tests/data/test57
@@ -0,0 +1,48 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+--write-out
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.1 200 OK swsclose
+Funny-head: yesyes
+Content-Type: text/html; charset=ISO-8859-4
+
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP content-type with spaces in
+ </name>
+ <command>
+-w "%{content_type}\n" http://%HOSTIP:%HTTPPORT/57 -o log/out57
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<stdout mode="text">
+text/html; charset=ISO-8859-4
+</stdout>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /57 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test570 b/tests/data/test570
new file mode 100644
index 0000000..aec8638
--- /dev/null
+++ b/tests/data/test570
@@ -0,0 +1,77 @@
+<testcase>
+
+#Informational
+<info>
+<keywords>
+RTSP
+Mismatch checking
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data1>
+RTSP/1.0 200 OK
+Server: RTSPD/libcurl-test
+CSeq: 2
+Public: DESCRIBE, OPTIONS, SETUP, TEARDOWN, PLAY, PAUSE
+Informational: CSeq Mismatch
+
+</data1>
+<data2>
+RTSP/1.0 200 OK
+Server: RTSPD/libcurl-test
+Session: asdf
+CSeq: 999
+
+</data2>
+<data3>
+RTSP/1.0 200 OK
+Server: RTSPD/libcurl-test
+Session: asdfWRONG
+Informational: Session ID mismatch
+Curl-Private: swsclose
+CSeq: 1000
+
+</data3>
+
+</reply>
+
+# Client-Side
+<client>
+<server>
+rtsp
+</server>
+<tool>
+lib570
+</tool>
+
+<name>
+RTSP CSeq and Session Mismatch checks
+</name>
+<command>
+rtsp://%HOSTIP:%RTSPPORT/570
+</command>
+</client>
+
+<verify>
+<strip>
+^If-Modified-Since:.*
+</strip>
+<protocol>
+OPTIONS rtsp://%HOSTIP:%RTSPPORT/5700001 RTSP/1.0
+CSeq: 1
+
+SETUP rtsp://%HOSTIP:%RTSPPORT/5700002 RTSP/1.0
+CSeq: 999
+Transport: RAW/RAW/UDP;unicast;client_port=3056-3057
+
+PLAY rtsp://%HOSTIP:%RTSPPORT/5700003 RTSP/1.0
+CSeq: 1000
+Session: asdf
+
+</protocol>
+</verify>
+
+</testcase>
+
diff --git a/tests/data/test571 b/tests/data/test571
new file mode 100644
index 0000000..9b263b1
--- /dev/null
+++ b/tests/data/test571
@@ -0,0 +1,108 @@
+<testcase>
+
+# Informational
+# Bang on RTP by
+# 1) giving an evil payload (with $)
+# 2) Giving evil content (SDP starting with $)
+# 3) packing rtp after headers, after content, and at the start
+<info>
+<keywords>
+RTSP
+RTP
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data1>
+RTSP/1.0 200 OK
+Server: RTSPD/libcurl-test
+Session: asdf
+CSeq: 1
+
+</data1>
+
+<data2>
+RTSP/1.0 200 OK
+Server: RTSPD/libcurl-test
+CSeq: 2
+Session: asdf
+
+</data2>
+
+<data3>
+RTSP/1.0 200 OK
+Server: RTSPD/libcurl-test
+Cseq: 3
+Content-Length: 4
+Content-Type: fake/evil
+
+$99
+</data3>
+
+<data4>
+RTSP/1.0 200 OK
+Server: RTSPD/libcurl-test
+Session: asdf
+CSeq: 4
+
+</data4>
+
+<servercmd>
+rtp: part 2 channel 1 size 10
+rtp: part 2 channel 0 size 500
+rtp: part 2 channel 0 size 196
+rtp: part 2 channel 0 size 124
+rtp: part 2 channel 0 size 824
+rtp: part 3 channel 1 size 10
+rtp: part 3 channel 0 size 50
+rtp: part 4 channel 0 size 798
+rtp: part 4 channel 0 size 42
+rtp: part 4 channel 1 size 30
+rtp: part 4 channel 0 size 2048
+rtp: part 4 channel 0 size 85
+rtp: part 4 channel 1 size 24
+</servercmd>
+</reply>
+
+# Client-Side
+<client>
+<server>
+rtsp
+</server>
+<tool>
+lib571
+</tool>
+
+<name>
+RTSP RTP Interleaving Test
+</name>
+<command>
+rtsp://%HOSTIP:%RTSPPORT/571 log/protofile.txt
+</command>
+</client>
+
+<verify>
+<stdout>
+RTP: message size 10, channel 1
+RTP: message size 500, channel 0
+RTP: message size 196, channel 0
+RTP: message size 124, channel 0
+RTP: message size 824, channel 0
+RTP: message size 10, channel 1
+RTP: message size 50, channel 0
+RTP: message size 798, channel 0
+RTP: message size 42, channel 0
+RTP: message size 30, channel 1
+RTP: message size 2048, channel 0
+RTP: message size 85, channel 0
+RTP: message size 24, channel 1
+</stdout>
+
+<file name="log/protofile.txt">
+$99
+</file>
+</verify>
+
+</testcase>
+
diff --git a/tests/data/test572 b/tests/data/test572
new file mode 100644
index 0000000..c06e531
--- /dev/null
+++ b/tests/data/test572
@@ -0,0 +1,121 @@
+<testcase>
+
+#Informational
+<info>
+<keywords>
+RTSP
+GET_PARAMETER
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data1>
+RTSP/1.0 200 OK
+Server: RTSPD/libcurl-test
+Session: getparams-test
+CSeq: 1
+
+</data1>
+
+<data2>
+RTSP/1.0 200 OK
+Server: RTSPD/libcurl-test
+Session: getparams-test
+Content-Type: text/parameters
+Content-Length: 32
+Cseq: 2
+
+scale=enormous
+speed=ludicrous
+</data2>
+
+<data3>
+RTSP/1.0 200 OK
+Server: RTSPD/libcurl-test
+Session: getparams-test
+Cseq: 3
+
+</data3>
+
+<data4>
+RTSP/1.0 200 Okie Dokie
+Server: RTSPD/libcurl-test
+Session: getparams-test
+Cseq: 4
+Content-Length: 37
+
+packets_received: 1000
+jitter: 0.314
+</data4>
+<data5>
+RTSP/1.0 200 OK
+Server: RTSPD/libcurl-test
+Session: getparams-test
+CSeq: 5
+Curl-private: swsclose
+Informational: Empty Options Response
+
+</data5>
+</reply>
+
+# Client-Side
+<client>
+<server>
+rtsp
+</server>
+<tool>
+lib572
+</tool>
+
+<name>
+RTSP GET_PARAMETER (Put/Heartbeat/Post)
+</name>
+<command>
+rtsp://%HOSTIP:%RTSPPORT/572
+</command>
+# file written before test command runs
+<file name="log/file572.txt">
+scale
+speed
+</file>
+</client>
+
+<verify>
+<strip>
+^If-Modified-Since:.*
+</strip>
+<protocol>
+SETUP rtsp://%HOSTIP:%RTSPPORT/5720001 RTSP/1.0
+CSeq: 1
+Transport: Planes/Trains/Automobiles
+
+GET_PARAMETER rtsp://%HOSTIP:%RTSPPORT/5720002 RTSP/1.0
+CSeq: 2
+Session: getparams-test
+Content-Length: 12
+Content-Type: text/parameters
+
+scale
+speed
+GET_PARAMETER rtsp://%HOSTIP:%RTSPPORT/5720003 RTSP/1.0
+CSeq: 3
+Session: getparams-test
+
+GET_PARAMETER rtsp://%HOSTIP:%RTSPPORT/5720004 RTSP/1.0
+CSeq: 4
+Session: getparams-test
+Content-Length: 24
+Content-Type: text/parameters
+
+packets_received
+jitter
+OPTIONS rtsp://%HOSTIP:%RTSPPORT/5720005 RTSP/1.0
+CSeq: 5
+Session: getparams-test
+
+</protocol>
+</verify>
+
+</testcase>
+
diff --git a/tests/data/test573 b/tests/data/test573
new file mode 100644
index 0000000..909ae3c
--- /dev/null
+++ b/tests/data/test573
@@ -0,0 +1,56 @@
+<testcase>
+<info>
+<keywords>
+FILE
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+-foo-
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+# tool is what to use instead of 'curl'
+<tool>
+lib573
+</tool>
+
+ <name>
+verify connect time with multi interface
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/573
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /573 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test574 b/tests/data/test574
new file mode 100644
index 0000000..1fa4654
--- /dev/null
+++ b/tests/data/test574
@@ -0,0 +1,98 @@
+<testcase>
+<info>
+<keywords>
+FTP
+LIST
+RETR
+wildcardmatch
+ftplistparser
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data mode="text">
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+<tool>
+lib574
+</tool>
+<name>
+FTP wildcard download - changed fnmatch, 2x perform (UNIX LIST response)
+</name>
+<command>
+ftp://%HOSTIP:%FTPPORT/fully_simulated/UNIX/*.txt
+</command>
+</client>
+
+############################################
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+0
+</errorcode>
+# THERE SHOULD NOT BE "SIZE"! and one "USER/PASS"
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+CWD fully_simulated
+CWD UNIX
+EPSV
+TYPE A
+LIST
+EPSV
+TYPE I
+RETR chmod1
+EPSV
+RETR chmod2
+EPSV
+RETR chmod3
+EPSV
+RETR empty_file.dat
+EPSV
+RETR file.txt
+EPSV
+RETR someothertext.txt
+CWD /
+CWD fully_simulated
+CWD UNIX
+EPSV
+TYPE A
+LIST
+EPSV
+TYPE I
+RETR chmod1
+EPSV
+RETR chmod2
+EPSV
+RETR chmod3
+EPSV
+RETR empty_file.dat
+EPSV
+RETR file.txt
+EPSV
+RETR someothertext.txt
+QUIT
+</protocol>
+<stdout mode="text">
+This file should have permissions 444
+This file should have permissions 666
+This file should have permissions 777
+This is content of file "file.txt"
+Some junk ;-) This file does not really exist.
+This file should have permissions 444
+This file should have permissions 666
+This file should have permissions 777
+This is content of file "file.txt"
+Some junk ;-) This file does not really exist.
+</stdout>
+</verify>
+</testcase>
diff --git a/tests/data/test575 b/tests/data/test575
new file mode 100644
index 0000000..5670e6b
--- /dev/null
+++ b/tests/data/test575
@@ -0,0 +1,121 @@
+<testcase>
+<info>
+<keywords>
+FTP
+RETR
+multi
+wildcardmatch
+ftplistparser
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+<tool>
+lib575
+</tool>
+ <name>
+FTP wildcard download - dup_handle and multi interface
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/fully_simulated/UNIX/*
+</command>
+</client>
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+0
+</errorcode>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+CWD fully_simulated
+CWD UNIX
+EPSV
+TYPE A
+LIST
+EPSV
+TYPE I
+RETR chmod1
+EPSV
+RETR chmod2
+EPSV
+RETR chmod3
+EPSV
+RETR empty_file.dat
+EPSV
+RETR file.txt
+EPSV
+RETR someothertext.txt
+CWD /
+CWD fully_simulated
+CWD UNIX
+EPSV
+TYPE A
+LIST
+EPSV
+TYPE I
+RETR chmod1
+EPSV
+RETR chmod2
+EPSV
+RETR chmod3
+EPSV
+RETR empty_file.dat
+EPSV
+RETR file.txt
+EPSV
+RETR someothertext.txt
+QUIT
+USER anonymous
+PASS ftp@example.com
+PWD
+CWD fully_simulated
+CWD UNIX
+EPSV
+TYPE A
+LIST
+EPSV
+TYPE I
+RETR chmod1
+EPSV
+RETR chmod2
+EPSV
+RETR chmod3
+EPSV
+RETR empty_file.dat
+EPSV
+RETR file.txt
+EPSV
+RETR someothertext.txt
+QUIT
+</protocol>
+<stdout mode="text">
+This file should have permissions 444
+This file should have permissions 666
+This file should have permissions 777
+This is content of file "file.txt"
+Some junk ;-) This file does not really exist.
+This file should have permissions 444
+This file should have permissions 666
+This file should have permissions 777
+This is content of file "file.txt"
+Some junk ;-) This file does not really exist.
+This file should have permissions 444
+This file should have permissions 666
+This file should have permissions 777
+This is content of file "file.txt"
+Some junk ;-) This file does not really exist.
+</stdout>
+</verify>
+</testcase>
diff --git a/tests/data/test576 b/tests/data/test576
new file mode 100644
index 0000000..4d4b90c
--- /dev/null
+++ b/tests/data/test576
@@ -0,0 +1,192 @@
+<testcase>
+<info>
+<keywords>
+FTP
+wildcardmatch
+ftplistparser
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+<tool>
+lib576
+</tool>
+ <name>
+FTP wildcard download - skip/parser_correctness/CURLOPT_FNMATCH_FUNCTION (UNIX)
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/fully_simulated/UNIX/*
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+0
+</errorcode>
+<stdout mode="text">
+=============================================================
+Remains: 14
+Filename: .
+Permissions: rwxrwxrwx (parsed => 777)
+Size: 20480B
+User: ftp-default
+Group: ftp-default
+Time: Apr 27 5:12
+Filetype: directory
+=============================================================
+Remains: 13
+Filename: ..
+Permissions: rwxrwxrwx (parsed => 777)
+Size: 20480B
+User: ftp-default
+Group: ftp-default
+Time: Apr 23 3:12
+Filetype: directory
+=============================================================
+Remains: 12
+Filename: chmod1
+Permissions: r--r--r-- (parsed => 444)
+Size: 38B
+User: ftp-default
+Group: ftp-default
+Time: Jan 11 10:00
+Filetype: regular file
+Content:
+-------------------------------------------------------------
+This file should have permissions 444
+-------------------------------------------------------------
+=============================================================
+Remains: 11
+Filename: chmod2
+Permissions: rw-rw-rw- (parsed => 666)
+Size: 38B
+User: ftp-default
+Group: ftp-default
+Time: Feb 1 8:00
+Filetype: regular file
+Content:
+-------------------------------------------------------------
+This file should have permissions 666
+-------------------------------------------------------------
+=============================================================
+Remains: 10
+Filename: chmod3
+Permissions: rwxrwxrwx (parsed => 777)
+Size: 38B
+User: ftp-default
+Group: ftp-default
+Time: Feb 1 8:00
+Filetype: regular file
+Content:
+-------------------------------------------------------------
+This file should have permissions 777
+-------------------------------------------------------------
+=============================================================
+Remains: 9
+Filename: chmod4
+Permissions: --S--S--t (parsed => 7001)
+Size: 4096B
+User: ftp-default
+Group: ftp-default
+Time: May 4 4:31
+Filetype: directory
+=============================================================
+Remains: 8
+Filename: chmod5
+Permissions: --s--s--T (parsed => 7110)
+Size: 4096B
+User: ftp-default
+Group: ftp-default
+Time: May 4 4:31
+Filetype: directory
+=============================================================
+Remains: 7
+Filename: empty_file.dat
+Permissions: rw-r--r-- (parsed => 644)
+Size: 0B
+User: ftp-default
+Group: ftp-default
+Time: Apr 27 11:01
+Filetype: regular file
+Content:
+-------------------------------------------------------------
+-------------------------------------------------------------
+=============================================================
+Remains: 6
+Filename: file.txt
+Permissions: rw-r--r-- (parsed => 644)
+Size: 35B
+User: ftp-default
+Group: ftp-default
+Time: Apr 27 11:01
+Filetype: regular file
+Content:
+-------------------------------------------------------------
+This is content of file "file.txt"
+-------------------------------------------------------------
+=============================================================
+Remains: 5
+Filename: link
+Permissions: rwxrwxrwx (parsed => 777)
+Size: 0B
+User: ftp-default
+Group: ftp-default
+Time: Jan 6 4:42
+Filetype: symlink
+Target: file.txt
+=============================================================
+Remains: 4
+Filename: link_absolute
+Permissions: rwxrwxrwx (parsed => 777)
+Size: 0B
+User: ftp-default
+Group: ftp-default
+Time: Jan 6 4:45
+Filetype: symlink
+Target: /data/ftp/file.txt
+=============================================================
+Remains: 3
+Filename: .NeXT
+Permissions: rwxrwxrwx (parsed => 777)
+Size: 4096B
+User: ftp-default
+Group: ftp-default
+Time: Jan 23 2:05
+Filetype: directory
+=============================================================
+Remains: 2
+Filename: someothertext.txt
+Permissions: rw-r--r-- (parsed => 644)
+Size: 47B
+User: ftp-default
+Group: ftp-default
+Time: Apr 27 11:01
+Filetype: regular file
+Content:
+-------------------------------------------------------------
+# THIS CONTENT WAS SKIPPED IN CHUNK_BGN CALLBACK #
+-------------------------------------------------------------
+=============================================================
+Remains: 1
+Filename: weirddir.txt
+Permissions: rwxr-xrwx (parsed => 757)
+Size: 4096B
+User: ftp-default
+Group: ftp-default
+Time: Apr 23 3:12
+Filetype: directory
+=============================================================
+</stdout>
+</verify>
+</testcase>
diff --git a/tests/data/test577 b/tests/data/test577
new file mode 100644
index 0000000..7a69ead
--- /dev/null
+++ b/tests/data/test577
@@ -0,0 +1,43 @@
+<testcase>
+<info>
+<keywords>
+wildcardmatch
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+</reply>
+
+# Client-side
+<client>
+<server>
+none
+</server>
+# tool is what to use instead of 'curl'
+<tool>
+lib577
+</tool>
+# precheck is a command line to run before the test,
+# to see if we can execute the test or not
+<precheck>
+./libtest/lib577 check
+</precheck>
+
+ <name>
+Curl_fnmatch() testing
+ </name>
+ <command>
+nothing
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<stdout mode="text">
+===========================
+===========================
+</stdout>
+</verify>
+</testcase>
diff --git a/tests/data/test578 b/tests/data/test578
new file mode 100644
index 0000000..0b6a437
--- /dev/null
+++ b/tests/data/test578
@@ -0,0 +1,52 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP POST
+</keywords>
+</info>
+#
+# Server-side
+<reply name="1">
+<data mode="text">
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+-foo-
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+# tool is what to use instead of 'curl'
+<tool>
+lib578
+</tool>
+
+ <name>
+HTTP POST lower than MAX_INITIAL_POST_SIZE with progress callback
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/500 log/ip578
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<file name="log/ip578" mode="text">
+PASSED, UL data matched data size
+</file>
+</verify>
+</testcase>
diff --git a/tests/data/test579 b/tests/data/test579
new file mode 100644
index 0000000..5f87944
--- /dev/null
+++ b/tests/data/test579
@@ -0,0 +1,85 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP POST
+HTTP Digest auth
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 100 Continue
+Server: Microsoft-IIS/5.0
+Date: Sun, 03 Apr 2005 14:57:45 GMT
+X-Powered-By: ASP.NET
+
+HTTP/1.1 401 authentication please swsbounce
+Server: Microsoft-IIS/6.0
+WWW-Authenticate: Digest realm="testrealm", nonce="1053604144"
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 0
+
+</data>
+<data1>
+HTTP/1.1 200 A OK
+Server: Microsoft-IIS/6.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 3
+
+ok
+</data1>
+<datacheck>
+HTTP/1.1 100 Continue
+Server: Microsoft-IIS/5.0
+Date: Sun, 03 Apr 2005 14:57:45 GMT
+X-Powered-By: ASP.NET
+
+HTTP/1.1 401 authentication please swsbounce
+Server: Microsoft-IIS/6.0
+WWW-Authenticate: Digest realm="testrealm", nonce="1053604144"
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 0
+
+HTTP/1.1 200 A OK
+Server: Microsoft-IIS/6.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 3
+
+ok
+</datacheck>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+# tool is what to use instead of 'curl'
+<tool>
+lib579
+</tool>
+
+ <name>
+small chunked HTTP POSTs with digest auth. and progress callback
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/579 log/ip579
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<file name="log/ip579" mode="text">
+Progress callback called with UL 0 out of 0
+Progress callback called with UL 0 out of -1
+Progress callback called with UL 8 out of -1
+Progress callback called with UL 16 out of -1
+Progress callback called with UL 26 out of -1
+Progress callback called with UL 61 out of -1
+Progress callback called with UL 66 out of -1
+</file>
+</verify>
+</testcase>
diff --git a/tests/data/test58 b/tests/data/test58
new file mode 100644
index 0000000..1bd53fa
--- /dev/null
+++ b/tests/data/test58
@@ -0,0 +1,51 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP PUT
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+HTTP/1.0 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+
+blablabla
+
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+<name>
+HTTP PUT from file with weird letters
+</name>
+ <command>
+http://%HOSTIP:%HTTPPORT/we/want/ -T log/58te[]st.txt -g
+</command>
+<file name="log/58te[]st.txt">
+a few bytes
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+PUT /we/want/58te%5B%5Dst.txt HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 12
+Expect: 100-continue
+
+a few bytes
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test59 b/tests/data/test59
new file mode 100644
index 0000000..1924650
--- /dev/null
+++ b/tests/data/test59
@@ -0,0 +1,47 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+</keywords>
+</info>
+#
+# Server-side
+<reply name="1">
+<data>
+HTTP/1.0 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+
+hej
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP URL with slash but with "parameter"
+ </name>
+ <command>
+"http://%HOSTIP:%HTTPPORT?mooo/59"
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /?mooo/59 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test6 b/tests/data/test6
new file mode 100644
index 0000000..0e7dc9b
--- /dev/null
+++ b/tests/data/test6
@@ -0,0 +1,49 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP set cookie
+cookies
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Type: text/html
+Funny-head: yesyes
+swsclose: booo
+
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP with simple cookie send
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/we/want/that/page/6 -b "name=contents;name2=content2"
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /we/want/that/page/6 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Cookie: name=contents;name2=content2
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test60 b/tests/data/test60
new file mode 100644
index 0000000..df9eeee
--- /dev/null
+++ b/tests/data/test60
@@ -0,0 +1,57 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP PUT
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+HTTP/1.0 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+
+blablabla
+
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+<name>
+HTTP PUT from stdin with wrong content-length
+</name>
+ <command>
+http://%HOSTIP:%HTTPPORT/bzz/60 -T - -H "Content-Length: 1"
+</command>
+<stdin>
+more than one byte
+</stdin>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+PUT /bzz/60 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Transfer-Encoding: chunked
+Content-Length: 1
+Expect: 100-continue
+
+13
+more than one byte
+
+0
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test600 b/tests/data/test600
new file mode 100644
index 0000000..1f3f601
--- /dev/null
+++ b/tests/data/test600
@@ -0,0 +1,42 @@
+<testcase>
+<info>
+<keywords>
+SFTP
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data>
+Test data
+for ssh test
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+sftp
+</server>
+ <name>
+SFTP retrieval
+ </name>
+ <command>
+--key curl_client_key --pubkey curl_client_key.pub -u %USER: sftp://%HOSTIP:%SSHPORT%PWD/log/file600.txt --insecure
+</command>
+<file name="log/file600.txt">
+Test data
+for ssh test
+</file>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<valgrind>
+disable
+</valgrind>
+</verify>
+</testcase>
diff --git a/tests/data/test601 b/tests/data/test601
new file mode 100644
index 0000000..8e765a8
--- /dev/null
+++ b/tests/data/test601
@@ -0,0 +1,42 @@
+<testcase>
+<info>
+<keywords>
+SCP
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data>
+Test data
+for ssh test
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+scp
+</server>
+ <name>
+SCP retrieval
+ </name>
+ <command>
+--key curl_client_key --pubkey curl_client_key.pub -u %USER: scp://%HOSTIP:%SSHPORT%PWD/log/file601.txt --insecure
+</command>
+<file name="log/file601.txt">
+Test data
+for ssh test
+</file>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<valgrind>
+disable
+</valgrind>
+</verify>
+</testcase>
diff --git a/tests/data/test602 b/tests/data/test602
new file mode 100644
index 0000000..6b75feb
--- /dev/null
+++ b/tests/data/test602
@@ -0,0 +1,43 @@
+<testcase>
+<info>
+<keywords>
+SFTP
+SFTP put
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+sftp
+</server>
+ <name>
+SFTP put
+ </name>
+ <command>
+--key curl_client_key --pubkey curl_client_key.pub -u %USER: -T log/file602.txt sftp://%HOSTIP:%SSHPORT%PWD/log/upload.602 --insecure
+</command>
+<file name="log/file602.txt">
+Test data
+for ssh upload test
+</file>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<upload>
+Test data
+for ssh upload test
+</upload>
+<valgrind>
+disable
+</valgrind>
+</verify>
+</testcase>
diff --git a/tests/data/test603 b/tests/data/test603
new file mode 100644
index 0000000..efa7d2e
--- /dev/null
+++ b/tests/data/test603
@@ -0,0 +1,43 @@
+<testcase>
+<info>
+<keywords>
+SCP
+SCP upload
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+scp
+</server>
+ <name>
+SCP upload
+ </name>
+ <command>
+--key curl_client_key --pubkey curl_client_key.pub -u %USER: -T log/file603.txt scp://%HOSTIP:%SSHPORT%PWD/log/upload.603 --insecure
+</command>
+<file name="log/file603.txt">
+Test data
+for ssh upload test
+</file>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<upload>
+Test data
+for ssh upload test
+</upload>
+<valgrind>
+disable
+</valgrind>
+</verify>
+</testcase>
diff --git a/tests/data/test604 b/tests/data/test604
new file mode 100644
index 0000000..af0259f
--- /dev/null
+++ b/tests/data/test604
@@ -0,0 +1,30 @@
+<testcase>
+<info>
+<keywords>
+SFTP
+FAILURE
+</keywords>
+</info>
+
+#
+# Client-side
+<client>
+<server>
+sftp
+</server>
+ <name>
+SFTP retrieval of nonexistent file
+ </name>
+ <command>
+--key curl_client_key --pubkey curl_client_key.pub -u %USER: sftp://%HOSTIP:%SSHPORT%PWD/not-a-valid-file-moooo --insecure
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+78
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test605 b/tests/data/test605
new file mode 100644
index 0000000..1c162fc
--- /dev/null
+++ b/tests/data/test605
@@ -0,0 +1,33 @@
+<testcase>
+<info>
+<keywords>
+SCP
+FAILURE
+</keywords>
+</info>
+
+#
+# Client-side
+<client>
+<server>
+scp
+</server>
+ <name>
+SCP retrieval of nonexistent file
+ </name>
+ <command>
+--key curl_client_key --pubkey curl_client_key.pub -u %USER: scp://%HOSTIP:%SSHPORT%PWD/not-a-valid-file-moooo --insecure
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+79
+</errorcode>
+<valgrind>
+disable
+</valgrind>
+</verify>
+</testcase>
diff --git a/tests/data/test606 b/tests/data/test606
new file mode 100644
index 0000000..80a82e9
--- /dev/null
+++ b/tests/data/test606
@@ -0,0 +1,33 @@
+<testcase>
+<info>
+<keywords>
+SFTP
+FAILURE
+</keywords>
+</info>
+
+#
+# Client-side
+<client>
+<server>
+sftp
+</server>
+ <name>
+SFTP invalid user login
+ </name>
+ <command>
+--key curl_client_key --pubkey curl_client_key.pub -u not-a-valid-user: sftp://%HOSTIP:%SSHPORT%PWD/not-a-valid-file-moooo --insecure
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+67
+</errorcode>
+<valgrind>
+disable
+</valgrind>
+</verify>
+</testcase>
diff --git a/tests/data/test607 b/tests/data/test607
new file mode 100644
index 0000000..e340987
--- /dev/null
+++ b/tests/data/test607
@@ -0,0 +1,33 @@
+<testcase>
+<info>
+<keywords>
+SCP
+FAILURE
+</keywords>
+</info>
+
+#
+# Client-side
+<client>
+<server>
+scp
+</server>
+ <name>
+SCP invalid user login
+ </name>
+ <command>
+--key curl_client_key --pubkey curl_client_key.pub -u not-a-valid-user: scp://%HOSTIP:%SSHPORT%PWD/not-a-valid-file-moooo --insecure
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+67
+</errorcode>
+<valgrind>
+disable
+</valgrind>
+</verify>
+</testcase>
diff --git a/tests/data/test608 b/tests/data/test608
new file mode 100644
index 0000000..c904bff
--- /dev/null
+++ b/tests/data/test608
@@ -0,0 +1,49 @@
+<testcase>
+<info>
+<keywords>
+SFTP
+post-quote
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data>
+Test file for rename test
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+sftp
+</server>
+ <name>
+SFTP post-quote rename
+ </name>
+ <command>
+--key curl_client_key --pubkey curl_client_key.pub -u %USER: -Q "-rename %PWD/log/file608.txt %PWD/log/file608-renamed.txt" sftp://%HOSTIP:%SSHPORT%PWD/log/file608.txt --insecure
+</command>
+# Verify that the file was renamed properly, then rename the file back to what
+# it was so the verify section works and the file can be cleaned up.
+<postcheck>
+perl %SRCDIR/libtest/test610.pl gone %PWD/log/file608.txt move %PWD/log/file608-renamed.txt %PWD/log/file608.txt
+</postcheck>
+<file name="log/file608.txt">
+Test file for rename test
+</file>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<file name="log/file608.txt">
+Test file for rename test
+</file>
+<valgrind>
+disable
+</valgrind>
+</verify>
+</testcase>
diff --git a/tests/data/test609 b/tests/data/test609
new file mode 100644
index 0000000..59a2175
--- /dev/null
+++ b/tests/data/test609
@@ -0,0 +1,45 @@
+<testcase>
+<info>
+<keywords>
+SFTP
+post-quote
+FAILURE
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data>
+Test file for mkdir test
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+sftp
+</server>
+ <name>
+SFTP post-quote mkdir failure
+ </name>
+ <command>
+--key curl_client_key --pubkey curl_client_key.pub -u %USER: -Q "-mkdir %PWD/log/file609.txt" sftp://%HOSTIP:%SSHPORT%PWD/log/file609.txt --insecure
+</command>
+<file name="log/file609.txt">
+Test file for mkdir test
+</file>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+21
+</errorcode>
+<valgrind>
+disable
+</valgrind>
+</verify>
+</testcase>
diff --git a/tests/data/test61 b/tests/data/test61
new file mode 100644
index 0000000..f2a6a4e
--- /dev/null
+++ b/tests/data/test61
@@ -0,0 +1,71 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+cookies
+cookiejar
+HTTP replaced headers
+httponly
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Type: text/html
+Funny-head: yesyes
+Set-Cookie: test=yes; httponly; domain=foo.com; expires=Fri Feb 2 11:56:27 GMT 2035
+SET-COOKIE: test2=yes; domain=host.foo.com; expires=Fri Feb 2 11:56:27 GMT 2035
+Set-Cookie: test3=maybe; domain=foo.com; path=/moo; secure
+Set-Cookie: test4=no; domain=nope.foo.com; path=/moo; secure
+Set-Cookie: test5=name; domain=anything.com; path=/ ; secure
+Content-Length: 4
+
+boo
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP with various cookies and custom Host:
+ </name>
+# Explicitly set the time zone to a known good one, in case the user is
+# using one of the 'right' zones that take into account leap seconds
+# which causes the cookie expiry times to be different.
+<setenv>
+TZ=GMT
+</setenv>
+ <command>
+http://%HOSTIP:%HTTPPORT/we/want/61 -c log/jar61.txt -H "Host: www.host.foo.com"
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /we/want/61 HTTP/1.1
+Accept: */*
+Host: www.host.foo.com
+
+</protocol>
+<file name="log/jar61.txt" mode="text">
+# Netscape HTTP Cookie File
+# http://curl.haxx.se/rfc/cookie_spec.html
+# This file was generated by libcurl! Edit at your own risk.
+
+#HttpOnly_.foo.com TRUE /we/want/ FALSE 2054030187 test yes
+.host.foo.com TRUE /we/want/ FALSE 2054030187 test2 yes
+.foo.com TRUE /moo TRUE 0 test3 maybe
+</file>
+</verify>
+</testcase>
diff --git a/tests/data/test610 b/tests/data/test610
new file mode 100644
index 0000000..a7c2ce3
--- /dev/null
+++ b/tests/data/test610
@@ -0,0 +1,47 @@
+<testcase>
+<info>
+<keywords>
+SFTP
+post-quote
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data>
+Dummy test file for rmdir test
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+sftp
+</server>
+<precheck>
+perl %SRCDIR/libtest/test610.pl mkdir %PWD/log/test610.dir
+</precheck>
+ <name>
+SFTP post-quote rmdir
+ </name>
+ <command>
+--key curl_client_key --pubkey curl_client_key.pub -u %USER: -Q "-rmdir %PWD/log/test610.dir" sftp://%HOSTIP:%SSHPORT%PWD/log/file610.txt --insecure
+</command>
+<postcheck>
+perl %SRCDIR/libtest/test610.pl gone %PWD/log/test610.dir
+</postcheck>
+<file name="log/file610.txt">
+Dummy test file for rmdir test
+</file>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<valgrind>
+disable
+</valgrind>
+</verify>
+</testcase>
diff --git a/tests/data/test611 b/tests/data/test611
new file mode 100644
index 0000000..bfdddde
--- /dev/null
+++ b/tests/data/test611
@@ -0,0 +1,47 @@
+<testcase>
+<info>
+<keywords>
+SFTP
+post-quote
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data>
+Dummy test file for rename test
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+sftp
+</server>
+<precheck>
+perl %SRCDIR/libtest/test610.pl mkdir %PWD/log/test611.dir
+</precheck>
+ <name>
+SFTP post-quote rename
+ </name>
+ <command>
+--key curl_client_key --pubkey curl_client_key.pub -u %USER: -Q "-rename %PWD/log/test611.dir %PWD/log/test611.new" sftp://%HOSTIP:%SSHPORT%PWD/log/file611.txt --insecure
+</command>
+<postcheck>
+perl %SRCDIR/libtest/test610.pl rmdir %PWD/log/test611.new
+</postcheck>
+<file name="log/file611.txt">
+Dummy test file for rename test
+</file>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<valgrind>
+disable
+</valgrind>
+</verify>
+</testcase>
diff --git a/tests/data/test612 b/tests/data/test612
new file mode 100644
index 0000000..a8f2a5c
--- /dev/null
+++ b/tests/data/test612
@@ -0,0 +1,47 @@
+<testcase>
+<info>
+<keywords>
+SFTP
+post-quote
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data nocheck="yes">
+Dummy test file for remove test
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+sftp
+</server>
+ <name>
+SFTP post-quote remove file
+ </name>
+ <command>
+--key curl_client_key --pubkey curl_client_key.pub -u %USER: -T log/file612.txt -Q "-rm %PWD/log/file612.txt" sftp://%HOSTIP:%SSHPORT%PWD/log/upload.612 --insecure
+</command>
+<postcheck>
+perl %SRCDIR/libtest/test610.pl gone %PWD/log/test612.txt
+</postcheck>
+<file name="log/file612.txt">
+Dummy test file for remove test
+</file>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<upload>
+Dummy test file for remove test
+</upload>
+<valgrind>
+disable
+</valgrind>
+</verify>
+</testcase>
diff --git a/tests/data/test613 b/tests/data/test613
new file mode 100644
index 0000000..9b0b3fd
--- /dev/null
+++ b/tests/data/test613
@@ -0,0 +1,48 @@
+<testcase>
+<info>
+<keywords>
+SFTP
+directory
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<datacheck>
+d????????? N U U N ??? N NN:NN .
+d????????? N U U N ??? N NN:NN ..
+d????????? N U U N ??? N NN:NN asubdir
+-rw?rw?rw? 1 U U 37 Jan 1 2000 plainfile.txt
+-r-?r-?r-? 1 U U 47 Dec 31 2000 rofile.txt
+</datacheck>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+sftp
+</server>
+<precheck>
+perl %SRCDIR/libtest/test613.pl prepare %PWD/log/test613.dir
+</precheck>
+ <name>
+SFTP directory retrieval
+ </name>
+ <command>
+--key curl_client_key --pubkey curl_client_key.pub -u %USER: sftp://%HOSTIP:%SSHPORT%PWD/log/test613.dir/ --insecure
+</command>
+<postcheck>
+perl %SRCDIR/libtest/test613.pl postprocess %PWD/log/test613.dir %PWD/log/curl613.out
+</postcheck>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<valgrind>
+disable
+</valgrind>
+</verify>
+</testcase>
diff --git a/tests/data/test614 b/tests/data/test614
new file mode 100644
index 0000000..2184a22
--- /dev/null
+++ b/tests/data/test614
@@ -0,0 +1,49 @@
+<testcase>
+<info>
+<keywords>
+SFTP
+pre-quote
+directory
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<datacheck>
+d????????? N U U N ??? N NN:NN .
+d????????? N U U N ??? N NN:NN ..
+d????????? N U U N ??? N NN:NN asubdir
+-r-?r-?r-? 1 U U 37 Jan 1 2000 plainfile.txt
+-r-?r-?r-? 1 U U 47 Dec 31 2000 rofile.txt
+</datacheck>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+sftp
+</server>
+<precheck>
+perl %SRCDIR/libtest/test613.pl prepare %PWD/log/test614.dir
+</precheck>
+ <name>
+SFTP pre-quote chmod
+ </name>
+ <command>
+--key curl_client_key --pubkey curl_client_key.pub -u %USER: -Q "chmod 444 %PWD/log/test614.dir/plainfile.txt" sftp://%HOSTIP:%SSHPORT%PWD/log/test614.dir/ --insecure
+</command>
+<postcheck>
+perl %SRCDIR/libtest/test613.pl postprocess %PWD/log/test614.dir %PWD/log/curl614.out
+</postcheck>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<valgrind>
+disable
+</valgrind>
+</verify>
+</testcase>
diff --git a/tests/data/test615 b/tests/data/test615
new file mode 100644
index 0000000..abe9902
--- /dev/null
+++ b/tests/data/test615
@@ -0,0 +1,44 @@
+<testcase>
+<info>
+<keywords>
+SFTP
+SFTP put
+FAILURE
+</keywords>
+</info>
+
+#
+# Client-side
+<client>
+<server>
+sftp
+</server>
+<precheck>
+perl %SRCDIR/libtest/test613.pl prepare %PWD/log/test615.dir
+</precheck>
+ <name>
+SFTP put remote failure
+ </name>
+ <command>
+--key curl_client_key --pubkey curl_client_key.pub -u %USER: -T log/file615.txt sftp://%HOSTIP:%SSHPORT%PWD/log/test615.dir/rofile.txt --insecure
+</command>
+<postcheck>
+perl %SRCDIR/libtest/test613.pl postprocess %PWD/log/test615.dir
+</postcheck>
+<file name="log/file615.txt">
+Test data
+for ssh upload test
+</file>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+9
+</errorcode>
+<valgrind>
+disable
+</valgrind>
+</verify>
+</testcase>
diff --git a/tests/data/test616 b/tests/data/test616
new file mode 100644
index 0000000..a6a225d
--- /dev/null
+++ b/tests/data/test616
@@ -0,0 +1,39 @@
+<testcase>
+<info>
+<keywords>
+SFTP
+zero-length
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data sendzero="yes">
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+sftp
+</server>
+ <name>
+SFTP retrieval of empty file
+ </name>
+ <command>
+--key curl_client_key --pubkey curl_client_key.pub -u %USER: sftp://%HOSTIP:%SSHPORT%PWD/log/file616.txt --insecure
+</command>
+<file name="log/file616.txt">
+</file>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<valgrind>
+disable
+</valgrind>
+</verify>
+</testcase>
diff --git a/tests/data/test617 b/tests/data/test617
new file mode 100644
index 0000000..4b183e4
--- /dev/null
+++ b/tests/data/test617
@@ -0,0 +1,39 @@
+<testcase>
+<info>
+<keywords>
+SCP
+zero-length
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data sendzero="yes">
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+scp
+</server>
+ <name>
+SCP retrieval of empty file
+ </name>
+ <command>
+--key curl_client_key --pubkey curl_client_key.pub -u %USER: scp://%HOSTIP:%SSHPORT%PWD/log/file617.txt --insecure
+</command>
+<file name="log/file617.txt">
+</file>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<valgrind>
+disable
+</valgrind>
+</verify>
+</testcase>
diff --git a/tests/data/test618 b/tests/data/test618
new file mode 100644
index 0000000..d545d62
--- /dev/null
+++ b/tests/data/test618
@@ -0,0 +1,39 @@
+<testcase>
+<info>
+<keywords>
+SFTP
+</keywords>
+</info>
+
+#
+# Client-side
+<client>
+<server>
+sftp
+</server>
+ <name>
+SFTP retrieval of two files
+ </name>
+ <command>
+--key curl_client_key --pubkey curl_client_key.pub -u %USER: sftp://%HOSTIP:%SSHPORT%PWD/log/file618.txt sftp://%HOSTIP:%SSHPORT%PWD/log/file618.txt --insecure
+</command>
+<file name="log/file618.txt">
+Test data
+for ssh test
+</file>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<valgrind>
+disable
+</valgrind>
+<stdout>
+Test data
+for ssh test
+Test data
+for ssh test
+</stdout>
+</verify>
+</testcase>
diff --git a/tests/data/test619 b/tests/data/test619
new file mode 100644
index 0000000..303266f
--- /dev/null
+++ b/tests/data/test619
@@ -0,0 +1,39 @@
+<testcase>
+<info>
+<keywords>
+SCP
+</keywords>
+</info>
+
+#
+# Client-side
+<client>
+<server>
+scp
+</server>
+ <name>
+SCP retrieval of two files
+ </name>
+ <command>
+--key curl_client_key --pubkey curl_client_key.pub -u %USER: scp://%HOSTIP:%SSHPORT%PWD/log/file619.txt scp://%HOSTIP:%SSHPORT%PWD/log/file619.txt --insecure
+</command>
+<file name="log/file619.txt">
+Test data
+for ssh test
+</file>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<valgrind>
+disable
+</valgrind>
+<stdout>
+Test data
+for ssh test
+Test data
+for ssh test
+</stdout>
+</verify>
+</testcase>
diff --git a/tests/data/test62 b/tests/data/test62
new file mode 100644
index 0000000..99eca1e
--- /dev/null
+++ b/tests/data/test62
@@ -0,0 +1,60 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP replaced headers
+cookies
+httponly
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+HTTP/1.0 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Type: text/html
+
+boo
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP, send cookies when using custom Host:
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/we/want/62 -b log/jar62.txt -H "Host: www.host.foo.com"
+</command>
+<file name="log/jar62.txt">
+# Netscape HTTP Cookie File
+# http://curl.haxx.se/rfc/cookie_spec.html
+# This file was generated by libcurl! Edit at your own risk.
+
+#HttpOnly_.foo.com TRUE /we/want/ FALSE 2054030187 test yes
+.host.foo.com TRUE /we/want/ FALSE 2054030187 test2 yes
+.fake.host.foo.com TRUE /we/want/ FALSE 2054030187 test4 yes
+
+.foo.com TRUE /moo TRUE 0 test3 maybe
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /we/want/62 HTTP/1.1
+Accept: */*
+Cookie: test2=yes; test=yes
+Host: www.host.foo.com
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test620 b/tests/data/test620
new file mode 100644
index 0000000..1750ab9
--- /dev/null
+++ b/tests/data/test620
@@ -0,0 +1,38 @@
+<testcase>
+<info>
+<keywords>
+SFTP
+FAILURE
+</keywords>
+</info>
+
+#
+# Client-side
+<client>
+<server>
+sftp
+</server>
+ <name>
+SFTP retrieval of missing file followed by good file
+ </name>
+ <command>
+--key curl_client_key --pubkey curl_client_key.pub -u %USER: sftp://%HOSTIP:%SSHPORT%PWD/log/not-a-valid-file-moooo sftp://%HOSTIP:%SSHPORT%PWD/log/file620.txt --insecure
+</command>
+<file name="log/file620.txt">
+Test data
+for ssh test
+</file>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<valgrind>
+disable
+</valgrind>
+<stdout>
+Test data
+for ssh test
+</stdout>
+</verify>
+</testcase>
diff --git a/tests/data/test621 b/tests/data/test621
new file mode 100644
index 0000000..c75a284
--- /dev/null
+++ b/tests/data/test621
@@ -0,0 +1,38 @@
+<testcase>
+<info>
+<keywords>
+SCP
+FAILURE
+</keywords>
+</info>
+
+#
+# Client-side
+<client>
+<server>
+scp
+</server>
+ <name>
+SCP retrieval of missing file followed by good file
+ </name>
+ <command>
+--key curl_client_key --pubkey curl_client_key.pub -u %USER: scp://%HOSTIP:%SSHPORT%PWD/log/not-a-valid-file-moooo scp://%HOSTIP:%SSHPORT%PWD/log/file621.txt --insecure
+</command>
+<file name="log/file621.txt">
+Test data
+for ssh test
+</file>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<valgrind>
+disable
+</valgrind>
+<stdout>
+Test data
+for ssh test
+</stdout>
+</verify>
+</testcase>
diff --git a/tests/data/test622 b/tests/data/test622
new file mode 100644
index 0000000..e5a769c
--- /dev/null
+++ b/tests/data/test622
@@ -0,0 +1,43 @@
+<testcase>
+<info>
+<keywords>
+SFTP
+SFTP put
+FAILURE
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+sftp
+</server>
+ <name>
+SFTP put failure
+ </name>
+ <command>
+--key curl_client_key --pubkey curl_client_key.pub -u %USER: -T log/file622.txt sftp://%HOSTIP:%SSHPORT%PWD/log/nonexistent-directory/nonexistent-file --insecure
+</command>
+<file name="log/file622.txt">
+Test data
+for ssh upload test
+</file>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+78
+</errorcode>
+<valgrind>
+disable
+</valgrind>
+</verify>
+</testcase>
diff --git a/tests/data/test623 b/tests/data/test623
new file mode 100644
index 0000000..19e505b
--- /dev/null
+++ b/tests/data/test623
@@ -0,0 +1,41 @@
+<testcase>
+<info>
+<keywords>
+SCP
+SCP upload
+FAILURE
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+scp
+</server>
+ <name>
+SCP upload failure
+ </name>
+ <command>
+--key curl_client_key --pubkey curl_client_key.pub -u %USER: -T log/file623.txt scp://%HOSTIP:%SSHPORT%PWD/log/nonexistent-directory/nonexistent-file --insecure
+</command>
+<file name="log/file623.txt">
+Test data
+for ssh upload test
+</file>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+79
+</errorcode>
+
+</verify>
+</testcase>
diff --git a/tests/data/test624 b/tests/data/test624
new file mode 100644
index 0000000..fa4ff08
--- /dev/null
+++ b/tests/data/test624
@@ -0,0 +1,47 @@
+<testcase>
+<info>
+<keywords>
+SFTP
+SFTP put
+--ftp-create-dirs
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+sftp
+</server>
+ <name>
+SFTP put with --ftp-create-dirs
+ </name>
+ <command>
+--ftp-create-dirs --key curl_client_key --pubkey curl_client_key.pub -u %USER: -T log/file624.txt sftp://%HOSTIP:%SSHPORT%PWD/log/test624.dir/upload.624 --insecure
+</command>
+<postcheck>
+perl %SRCDIR/libtest/test610.pl move %PWD/log/test624.dir/upload.624 %PWD/log/upload.624 rmdir %PWD/log/test624.dir
+</postcheck>
+<file name="log/file624.txt">
+Test data
+for ssh upload test
+</file>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<upload>
+Test data
+for ssh upload test
+</upload>
+<valgrind>
+disable
+</valgrind>
+</verify>
+</testcase>
diff --git a/tests/data/test625 b/tests/data/test625
new file mode 100644
index 0000000..b3ec738
--- /dev/null
+++ b/tests/data/test625
@@ -0,0 +1,47 @@
+<testcase>
+<info>
+<keywords>
+SFTP
+SFTP put
+--ftp-create-dirs
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+sftp
+</server>
+ <name>
+SFTP put with --ftp-create-dirs twice
+ </name>
+ <command>
+--ftp-create-dirs --key curl_client_key --pubkey curl_client_key.pub -u %USER: -T log/file625.txt sftp://%HOSTIP:%SSHPORT%PWD/log/test625.a/upload.625 -T log/file625.txt sftp://%HOSTIP:%SSHPORT%PWD/log/test625.b/upload.625 --insecure
+</command>
+<postcheck>
+perl %SRCDIR/libtest/test610.pl move %PWD/log/test625.a/upload.625 %PWD/log/upload.625 rmdir %PWD/log/test625.a rm %PWD/log/test625.b/upload.625 rmdir %PWD/log/test625.b
+</postcheck>
+<file name="log/file625.txt">
+Test data
+for ssh upload test
+</file>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<upload>
+Test data
+for ssh upload test
+</upload>
+<valgrind>
+disable
+</valgrind>
+</verify>
+</testcase>
diff --git a/tests/data/test626 b/tests/data/test626
new file mode 100644
index 0000000..a8c2a6c
--- /dev/null
+++ b/tests/data/test626
@@ -0,0 +1,42 @@
+<testcase>
+<info>
+<keywords>
+SFTP
+pre-quote
+FAILURE
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+sftp
+</server>
+ <name>
+SFTP invalid quote command
+ </name>
+ <command>
+--key curl_client_key --pubkey curl_client_key.pub -u %USER: -Q "invalid-command foo bar" sftp://%HOSTIP:%SSHPORT%PWD/log/file626.txt --insecure
+</command>
+<file name="log/file626.txt">
+Test file for rename test
+</file>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+21
+</errorcode>
+<valgrind>
+disable
+</valgrind>
+</verify>
+</testcase>
diff --git a/tests/data/test627 b/tests/data/test627
new file mode 100644
index 0000000..ae29d9b
--- /dev/null
+++ b/tests/data/test627
@@ -0,0 +1,46 @@
+<testcase>
+<info>
+<keywords>
+SFTP
+quote
+NOBODY
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data sendzero="yes">
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+sftp
+</server>
+ <name>
+SFTP quote remove file with NOBODY
+ </name>
+ <command>
+--key curl_client_key --pubkey curl_client_key.pub -u %USER: -I -Q "rm %PWD/log/file627.txt" sftp://%HOSTIP:%SSHPORT --insecure
+</command>
+<postcheck>
+perl %SRCDIR/libtest/test610.pl gone %PWD/log/test627.txt
+</postcheck>
+<file name="log/file627.txt">
+Dummy test file for remove test
+</file>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<valgrind>
+disable
+</valgrind>
+<protocol>
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test628 b/tests/data/test628
new file mode 100644
index 0000000..37a6f1c
--- /dev/null
+++ b/tests/data/test628
@@ -0,0 +1,33 @@
+<testcase>
+<info>
+<keywords>
+SFTP
+FAILURE
+</keywords>
+</info>
+
+#
+# Client-side
+<client>
+<server>
+sftp
+</server>
+ <name>
+SFTP invalid user login (password authentication)
+ </name>
+ <command>
+-u not-a-valid-user: sftp://%HOSTIP:%SSHPORT%PWD/irrelevant-file --insecure
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+67
+</errorcode>
+<valgrind>
+disable
+</valgrind>
+</verify>
+</testcase>
diff --git a/tests/data/test629 b/tests/data/test629
new file mode 100644
index 0000000..0c17914
--- /dev/null
+++ b/tests/data/test629
@@ -0,0 +1,33 @@
+<testcase>
+<info>
+<keywords>
+SCP
+FAILURE
+</keywords>
+</info>
+
+#
+# Client-side
+<client>
+<server>
+scp
+</server>
+ <name>
+SCP invalid user login (password authentication)
+ </name>
+ <command>
+-u not-a-valid-user: scp://%HOSTIP:%SSHPORT%PWD/irrelevant-file --insecure
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+67
+</errorcode>
+<valgrind>
+disable
+</valgrind>
+</verify>
+</testcase>
diff --git a/tests/data/test63 b/tests/data/test63
new file mode 100644
index 0000000..66ed1d8
--- /dev/null
+++ b/tests/data/test63
@@ -0,0 +1,52 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP proxy
+HTTP proxy Basic auth
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Type: text/html
+Content-Length: 26
+
+the content would go here
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP with proxy authorization set in environment
+ </name>
+<setenv>
+http_proxy=http://fake:user@%HOSTIP:%HTTPPORT/
+</setenv>
+ <command>
+http://we.want.that.site.com/63
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET http://we.want.that.site.com/63 HTTP/1.1
+Proxy-Authorization: Basic ZmFrZTp1c2Vy
+Host: we.want.that.site.com
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test630 b/tests/data/test630
new file mode 100644
index 0000000..e2f6ff9
--- /dev/null
+++ b/tests/data/test630
@@ -0,0 +1,34 @@
+<testcase>
+<info>
+<keywords>
+SFTP
+FAILURE
+server key check
+</keywords>
+</info>
+
+#
+# Client-side
+<client>
+<server>
+sftp
+</server>
+ <name>
+SFTP incorrect host key
+ </name>
+ <command>
+--hostpubmd5 00000000000000000000000000000000 --key curl_client_key --pubkey curl_client_key.pub -u %USER: sftp://%HOSTIP:%SSHPORT%PWD/log/irrelevant-file --insecure
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+51
+</errorcode>
+<valgrind>
+disable
+</valgrind>
+</verify>
+</testcase>
diff --git a/tests/data/test631 b/tests/data/test631
new file mode 100644
index 0000000..47b0acb
--- /dev/null
+++ b/tests/data/test631
@@ -0,0 +1,34 @@
+<testcase>
+<info>
+<keywords>
+SCP
+FAILURE
+server key check
+</keywords>
+</info>
+
+#
+# Client-side
+<client>
+<server>
+scp
+</server>
+ <name>
+SCP incorrect host key
+ </name>
+ <command>
+--hostpubmd5 00000000000000000000000000000000 --key curl_client_key --pubkey curl_client_key.pub -u %USER: scp://%HOSTIP:%SSHPORT%PWD/log/irrelevant-file --insecure
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+51
+</errorcode>
+<valgrind>
+disable
+</valgrind>
+</verify>
+</testcase>
diff --git a/tests/data/test632 b/tests/data/test632
new file mode 100644
index 0000000..2da0c79
--- /dev/null
+++ b/tests/data/test632
@@ -0,0 +1,34 @@
+<testcase>
+<info>
+<keywords>
+SFTP
+FAILURE
+server key check
+</keywords>
+</info>
+
+#
+# Client-side
+<client>
+<server>
+none
+</server>
+<features>
+sftp
+</features>
+ <name>
+SFTP syntactically invalid host key
+ </name>
+ <command>
+--hostpubmd5 00 --key curl_client_key --pubkey curl_client_key.pub -u %USER: sftp://%HOSTIP:%SSHPORT%PWD/log/irrelevant-file --insecure
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+2
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test633 b/tests/data/test633
new file mode 100644
index 0000000..adfd109
--- /dev/null
+++ b/tests/data/test633
@@ -0,0 +1,42 @@
+<testcase>
+<info>
+<keywords>
+SFTP
+Range
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data>
+data
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+sftp
+</server>
+ <name>
+SFTP retrieval with byte range
+ </name>
+ <command>
+--key curl_client_key --pubkey curl_client_key.pub -u %USER: sftp://%HOSTIP:%SSHPORT%PWD/log/file633.txt -r 5-9 --insecure
+</command>
+<file name="log/file633.txt">
+Test data
+for ssh test
+</file>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<valgrind>
+disable
+</valgrind>
+</verify>
+</testcase>
diff --git a/tests/data/test634 b/tests/data/test634
new file mode 100644
index 0000000..1fbb879
--- /dev/null
+++ b/tests/data/test634
@@ -0,0 +1,43 @@
+<testcase>
+<info>
+<keywords>
+SFTP
+Range
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data>
+data
+for ssh test
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+sftp
+</server>
+ <name>
+SFTP retrieval with byte range past end of file
+ </name>
+ <command>
+--key curl_client_key --pubkey curl_client_key.pub -u %USER: sftp://%HOSTIP:%SSHPORT%PWD/log/file634.txt -r 5-99 --insecure
+</command>
+<file name="log/file634.txt">
+Test data
+for ssh test
+</file>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<valgrind>
+disable
+</valgrind>
+</verify>
+</testcase>
diff --git a/tests/data/test635 b/tests/data/test635
new file mode 100644
index 0000000..a54929d
--- /dev/null
+++ b/tests/data/test635
@@ -0,0 +1,42 @@
+<testcase>
+<info>
+<keywords>
+SFTP
+Range
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data>
+ssh test
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+sftp
+</server>
+ <name>
+SFTP retrieval with byte range relative to end of file
+ </name>
+ <command>
+--key curl_client_key --pubkey curl_client_key.pub -u %USER: sftp://%HOSTIP:%SSHPORT%PWD/log/file635.txt -r -9 --insecure
+</command>
+<file name="log/file635.txt">
+Test data
+for ssh test
+</file>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<valgrind>
+disable
+</valgrind>
+</verify>
+</testcase>
diff --git a/tests/data/test636 b/tests/data/test636
new file mode 100644
index 0000000..df4ee7e
--- /dev/null
+++ b/tests/data/test636
@@ -0,0 +1,43 @@
+<testcase>
+<info>
+<keywords>
+SFTP
+Range
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data>
+data
+for ssh test
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+sftp
+</server>
+ <name>
+SFTP retrieval with X- byte range
+ </name>
+ <command>
+--key curl_client_key --pubkey curl_client_key.pub -u %USER: sftp://%HOSTIP:%SSHPORT%PWD/log/file636.txt -r 5- --insecure
+</command>
+<file name="log/file636.txt">
+Test data
+for ssh test
+</file>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<valgrind>
+disable
+</valgrind>
+</verify>
+</testcase>
diff --git a/tests/data/test637 b/tests/data/test637
new file mode 100644
index 0000000..ef0c814
--- /dev/null
+++ b/tests/data/test637
@@ -0,0 +1,44 @@
+<testcase>
+<info>
+<keywords>
+SFTP
+Range
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data>
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+sftp
+</server>
+ <name>
+SFTP retrieval with invalid X- range
+ </name>
+ <command>
+--key curl_client_key --pubkey curl_client_key.pub -u %USER: sftp://%HOSTIP:%SSHPORT%PWD/log/file637.txt -r 99- --insecure
+</command>
+<file name="log/file637.txt">
+Test data
+for ssh test
+</file>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+36
+</errorcode>
+<valgrind>
+disable
+</valgrind>
+</verify>
+</testcase>
diff --git a/tests/data/test64 b/tests/data/test64
new file mode 100644
index 0000000..6bd82a8
--- /dev/null
+++ b/tests/data/test64
@@ -0,0 +1,83 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP Digest auth
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+HTTP/1.1 401 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Digest realm="testrealm", nonce="1053604145"
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 26
+
+This is not the real page
+</data>
+
+# This is supposed to be returned when the server gets a
+# Authorization: Digest line passed-in from the client
+<data1000>
+HTTP/1.1 200 OK swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 23
+
+This IS the real page!
+</data1000>
+
+<datacheck>
+HTTP/1.1 401 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Digest realm="testrealm", nonce="1053604145"
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 26
+
+HTTP/1.1 200 OK swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 23
+
+This IS the real page!
+</datacheck>
+
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+<features>
+crypto
+</features>
+ <name>
+HTTP with Digest authorization
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/64 -u testuser:testpass --digest
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /64 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /64 HTTP/1.1
+Authorization: Digest username="testuser", realm="testrealm", nonce="1053604145", uri="/64", response="c55f7f30d83d774a3d2dcacf725abaca"
+User-Agent: curl/7.10.5 (i686-pc-linux-gnu) libcurl/7.10.5 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test65 b/tests/data/test65
new file mode 100644
index 0000000..8582a0c
--- /dev/null
+++ b/tests/data/test65
@@ -0,0 +1,83 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP Digest auth
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+HTTP/1.1 401 Authorization Required
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Digest realm="testrealm", nonce="2053604145"
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 26
+
+This is not the real page
+</data>
+
+# This is supposed to be returned when the server gets a
+# Authorization: Digest line passed-in from the client
+<data1000>
+HTTP/1.1 401 Still a bad password you moron
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 34
+
+This is not the real page either
+</data1000>
+
+<datacheck>
+HTTP/1.1 401 Authorization Required
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Digest realm="testrealm", nonce="2053604145"
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 26
+
+HTTP/1.1 401 Still a bad password you moron
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 34
+
+This is not the real page either
+</datacheck>
+
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+<features>
+crypto
+</features>
+ <name>
+HTTP with Digest authorization with bad password
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/65 -u testuser:test2pass --digest
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /65 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /65 HTTP/1.1
+Authorization: Digest username="testuser", realm="testrealm", nonce="2053604145", uri="/65", response="66d68d3251f1839576ba7c766cf9205b"
+User-Agent: curl/7.10.5 (i686-pc-linux-gnu) libcurl/7.10.5 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test66 b/tests/data/test66
new file mode 100644
index 0000000..a018d8f
--- /dev/null
+++ b/tests/data/test66
@@ -0,0 +1,41 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+no headers swsclose
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP GET without headers in the response
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/66
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /66 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test67 b/tests/data/test67
new file mode 100644
index 0000000..bfe6edd
--- /dev/null
+++ b/tests/data/test67
@@ -0,0 +1,100 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP NTLM auth
+</keywords>
+</info>
+# Server-side
+<reply>
+
+<!-- no <data> in this test since we have NTLM from the start
+
+This is supposed to be returned when the server gets a first
+Authorization: NTLM line passed-in from the client -->
+
+<data1001>
+HTTP/1.1 401 Now gimme that second request of crap
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 34
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+This is not the real page either!
+</data1001>
+
+# This is supposed to be returned when the server gets the second
+# Authorization: NTLM line passed-in from the client
+<data1002>
+HTTP/1.1 200 Things are fine in server land swsclose
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page!
+</data1002>
+
+<datacheck>
+HTTP/1.1 401 Now gimme that second request of crap
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 34
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+HTTP/1.1 200 Things are fine in server land swsclose
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page!
+</datacheck>
+
+</reply>
+
+# Client-side
+<client>
+<features>
+NTLM
+</features>
+<server>
+http
+</server>
+ <name>
+HTTP with NTLM authorization
+ </name>
+ <setenv>
+# we force our own host name, in order to make the test machine independent
+CURL_GETHOSTNAME=curlhost
+# we try to use the LD_PRELOAD hack, if not a debug build
+LD_PRELOAD=%PWD/libtest/.libs/libhostname.so
+ </setenv>
+ <command>
+http://%HOSTIP:%HTTPPORT/67 -u testuser:testpass --ntlm
+</command>
+<precheck>
+chkhostname curlhost
+</precheck>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /67 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+User-Agent: curl/7.10.6-pre1 (i686-pc-linux-gnu) libcurl/7.10.6-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /67 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoKBAFpkQwKRCZFMhjj0tw47wEjKHRHlvzfxQamFcheMuv8v+xeqphEO5V41xRd7R9deOXRlc3R1c2VyY3VybGhvc3Q=
+User-Agent: curl/7.10.6-pre1 (i686-pc-linux-gnu) libcurl/7.10.6-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test68 b/tests/data/test68
new file mode 100644
index 0000000..10b4429
--- /dev/null
+++ b/tests/data/test68
@@ -0,0 +1,99 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP NTLM auth
+</keywords>
+</info>
+# Server-side
+<reply>
+
+# This is supposed to be returned when the server gets a first
+# Authorization: NTLM line passed-in from the client
+<data1001>
+HTTP/1.1 401 Now gimme that second request of crap
+Server: Microsoft-IIS/5.0
+Content-Length: 34
+Content-Type: text/html; charset=iso-8859-1
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+This is not the real page either!
+</data1001>
+
+# This is supposed to be returned when the server gets the second
+# Authorization: NTLM line passed-in from the client
+<data1002>
+HTTP/1.1 401 You give me wrong password
+Server: Microsoft-IIS/5.0
+WWW-Authenticate: NTLM
+Content-Length: 46
+Content-Type: text/html; charset=iso-8859-1
+
+Wrong password dude. Get it fixed and return.
+</data1002>
+
+<datacheck>
+HTTP/1.1 401 Now gimme that second request of crap
+Server: Microsoft-IIS/5.0
+Content-Length: 34
+Content-Type: text/html; charset=iso-8859-1
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+HTTP/1.1 401 You give me wrong password
+Server: Microsoft-IIS/5.0
+WWW-Authenticate: NTLM
+Content-Length: 46
+Content-Type: text/html; charset=iso-8859-1
+
+Wrong password dude. Get it fixed and return.
+</datacheck>
+
+</reply>
+
+# Client-side
+<client>
+<features>
+NTLM
+</features>
+<server>
+http
+</server>
+ <name>
+HTTP with NTLM authorization and wrong password
+ </name>
+ <setenv>
+# we force our own host name, in order to make the test machine independent
+CURL_GETHOSTNAME=curlhost
+# we try to use the LD_PRELOAD hack, if not a debug build
+LD_PRELOAD=%PWD/libtest/.libs/libhostname.so
+ </setenv>
+ <command>
+http://%HOSTIP:%HTTPPORT/68 -u testuser:testpass --ntlm
+</command>
+<precheck>
+chkhostname curlhost
+</precheck>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /68 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+User-Agent: curl/7.10.6-pre1 (i686-pc-linux-gnu) libcurl/7.10.6-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /68 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoKBAFpkQwKRCZFMhjj0tw47wEjKHRHlvzfxQamFcheMuv8v+xeqphEO5V41xRd7R9deOXRlc3R1c2VyY3VybGhvc3Q=
+User-Agent: curl/7.10.6-pre1 (i686-pc-linux-gnu) libcurl/7.10.6-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test69 b/tests/data/test69
new file mode 100644
index 0000000..441aed7
--- /dev/null
+++ b/tests/data/test69
@@ -0,0 +1,121 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP NTLM auth
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+HTTP/1.1 401 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Basic
+WWW-Authenticate: Wild-and-crazy
+WWW-Authenticate: NTLM
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 26
+
+This is not the real page
+</data>
+
+# This is supposed to be returned when the server gets a first
+# Authorization: NTLM line passed-in from the client
+<data1001>
+HTTP/1.1 401 Now gimme that second request of crap
+Server: Microsoft-IIS/5.0
+Content-Length: 34
+Content-Type: text/html; charset=iso-8859-1
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+This is not the real page either!
+</data1001>
+
+# This is supposed to be returned when the server gets the second
+# Authorization: NTLM line passed-in from the client
+<data1002>
+HTTP/1.1 200 Things are fine in server land swsclose
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page!
+</data1002>
+
+<datacheck>
+HTTP/1.1 401 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Basic
+WWW-Authenticate: Wild-and-crazy
+WWW-Authenticate: NTLM
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 26
+
+HTTP/1.1 401 Now gimme that second request of crap
+Server: Microsoft-IIS/5.0
+Content-Length: 34
+Content-Type: text/html; charset=iso-8859-1
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+HTTP/1.1 200 Things are fine in server land swsclose
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page!
+</datacheck>
+
+</reply>
+
+# Client-side
+<client>
+<features>
+NTLM
+</features>
+<server>
+http
+</server>
+ <name>
+HTTP with NTLM, Basic or Wild-and-crazy authorization
+ </name>
+ <setenv>
+# we force our own host name, in order to make the test machine independent
+CURL_GETHOSTNAME=curlhost
+# we try to use the LD_PRELOAD hack, if not a debug build
+LD_PRELOAD=%PWD/libtest/.libs/libhostname.so
+ </setenv>
+ <command>
+http://%HOSTIP:%HTTPPORT/69 -u testuser:testpass --anyauth
+</command>
+<precheck>
+chkhostname curlhost
+</precheck>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /69 HTTP/1.1
+User-Agent: curl/7.10.6-pre1 (i686-pc-linux-gnu) libcurl/7.10.6-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /69 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+User-Agent: curl/7.10.6-pre1 (i686-pc-linux-gnu) libcurl/7.10.6-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /69 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoKBAFpkQwKRCZFMhjj0tw47wEjKHRHlvzfxQamFcheMuv8v+xeqphEO5V41xRd7R9deOXRlc3R1c2VyY3VybGhvc3Q=
+User-Agent: curl/7.10.6-pre1 (i686-pc-linux-gnu) libcurl/7.10.6-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test7 b/tests/data/test7
new file mode 100644
index 0000000..62731de
--- /dev/null
+++ b/tests/data/test7
@@ -0,0 +1,62 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+cookies
+header dump
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Type: text/html
+Funny-head: yesyes swsclose
+Set-Cookie: foobar=name; domain=127.0.0.1; path=/;
+Set-Cookie: mismatch=this; domain=127.0.0.1; path="/silly/";
+Set-Cookie: partmatch=present; domain=.0.0.1; path=/;
+
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP with cookie parser and header recording
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/we/want/7 -b none -D log/heads7.txt
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /we/want/7 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+<file name="log/heads7.txt">
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Type: text/html
+Funny-head: yesyes swsclose
+Set-Cookie: foobar=name; domain=127.0.0.1; path=/;
+Set-Cookie: mismatch=this; domain=127.0.0.1; path="/silly/";
+Set-Cookie: partmatch=present; domain=.0.0.1; path=/;
+
+</file>
+</verify>
+</testcase>
diff --git a/tests/data/test70 b/tests/data/test70
new file mode 100644
index 0000000..2fc0327
--- /dev/null
+++ b/tests/data/test70
@@ -0,0 +1,87 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP Digest auth
+--anyauth
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+HTTP/1.1 401 Authorization Required
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Digest realm="testrealm", nonce="1053604199"
+WWW-Authenticate: NTLM
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 26
+
+This is not the real page
+</data>
+
+# This is supposed to be returned when the server gets a
+# Authorization: Digest line passed-in from the client
+<data1000>
+HTTP/1.1 200 OK
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 23
+
+This IS the real page!
+</data1000>
+
+<datacheck>
+HTTP/1.1 401 Authorization Required
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Digest realm="testrealm", nonce="1053604199"
+WWW-Authenticate: NTLM
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 26
+
+HTTP/1.1 200 OK
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 23
+
+This IS the real page!
+</datacheck>
+
+</reply>
+
+# Client-side
+<client>
+<features>
+NTLM
+</features>
+<server>
+http
+</server>
+ <name>
+HTTP with Digest *OR* NTLM authorization
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/70 -u testuser:testpass --anyauth
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /70 HTTP/1.1
+User-Agent: curl/7.10.6-pre1 (i686-pc-linux-gnu) libcurl/7.10.6-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /70 HTTP/1.1
+Authorization: Digest username="testuser", realm="testrealm", nonce="1053604199", uri="/70", response="2c9a6f00af0d86497b177b90e90c688a"
+User-Agent: curl/7.10.6-pre1 (i686-pc-linux-gnu) libcurl/7.10.6-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test700 b/tests/data/test700
new file mode 100644
index 0000000..ce6f894
--- /dev/null
+++ b/tests/data/test700
@@ -0,0 +1,57 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+SOCKS4
+</keywords>
+</info>
+
+#
+# Server-side
+<reply name="1">
+<data>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+-foo-
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+socks4
+</server>
+ <name>
+HTTP GET via SOCKS4 proxy
+ </name>
+ <command>
+--socks4 %HOSTIP:%SOCKSPORT http://%HOSTIP:%HTTPPORT/700
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /700 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test701 b/tests/data/test701
new file mode 100644
index 0000000..014aca2
--- /dev/null
+++ b/tests/data/test701
@@ -0,0 +1,57 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+SOCKS5
+</keywords>
+</info>
+
+#
+# Server-side
+<reply name="1">
+<data>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+-foo-
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+socks5
+</server>
+ <name>
+HTTP GET via SOCKS5 proxy
+ </name>
+ <command>
+--socks5 %HOSTIP:%SOCKSPORT http://%HOSTIP:%HTTPPORT/701
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /701 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test702 b/tests/data/test702
new file mode 100644
index 0000000..36af713
--- /dev/null
+++ b/tests/data/test702
@@ -0,0 +1,39 @@
+<testcase>
+#based off 19
+<info>
+<keywords>
+HTTP
+SOCKS4
+connect to non-listen
+FAILURE
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+socks4
+</server>
+<features>
+http
+</features>
+ <name>
+Attempt connect to non-listening HTTP server via SOCKS4 proxy
+ </name>
+ <command>
+--socks4 %HOSTIP:%SOCKSPORT http://%HOSTIP:60000
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+7
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test703 b/tests/data/test703
new file mode 100644
index 0000000..4aa89b4
--- /dev/null
+++ b/tests/data/test703
@@ -0,0 +1,39 @@
+<testcase>
+#based off 19
+<info>
+<keywords>
+HTTP
+SOCKS5
+connect to non-listen
+FAILURE
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+socks5
+</server>
+<features>
+http
+</features>
+ <name>
+Attempt connect to non-listening HTTP server via SOCKS5 proxy
+ </name>
+ <command>
+--socks5 %HOSTIP:%SOCKSPORT http://%HOSTIP:60000
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+7
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test704 b/tests/data/test704
new file mode 100644
index 0000000..15a1b67
--- /dev/null
+++ b/tests/data/test704
@@ -0,0 +1,36 @@
+<testcase>
+#based off 19
+<info>
+<keywords>
+HTTP
+SOCKS4
+connect to non-listen
+FAILURE
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+Attempt connect to non-listening SOCKS4 proxy
+ </name>
+ <command>
+--socks4 %HOSTIP:60000 http://%HOSTIP:%HTTPPORT/704
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+7
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test705 b/tests/data/test705
new file mode 100644
index 0000000..3b904c6
--- /dev/null
+++ b/tests/data/test705
@@ -0,0 +1,36 @@
+<testcase>
+#based off 19
+<info>
+<keywords>
+HTTP
+SOCKS5
+connect to non-listen
+FAILURE
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+Attempt connect to non-listening SOCKS5 proxy
+ </name>
+ <command>
+--socks5 %HOSTIP:60000 http://%HOSTIP:%HTTPPORT/705
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+7
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test706 b/tests/data/test706
new file mode 100644
index 0000000..330cb23
--- /dev/null
+++ b/tests/data/test706
@@ -0,0 +1,59 @@
+<testcase>
+#based off test 100
+<info>
+<keywords>
+FTP
+PASV
+LIST
+SOCKS4
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+# When doing LIST, we get the default list output hard-coded in the test
+# FTP server
+<datacheck>
+total 20
+drwxr-xr-x 8 98 98 512 Oct 22 13:06 .
+drwxr-xr-x 8 98 98 512 Oct 22 13:06 ..
+drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT
+-r--r--r-- 1 0 1 35 Jul 16 1996 README
+lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin
+dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev
+drwxrwxrwx 2 98 98 512 May 29 16:04 download.html
+dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc
+drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub
+dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr
+</datacheck>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+ftp
+socks4
+</server>
+ <name>
+FTP dir list PASV via SOCKS4
+ </name>
+ <command>
+--socks4 %HOSTIP:%SOCKSPORT ftp://%HOSTIP:%FTPPORT/
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE A
+LIST
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test707 b/tests/data/test707
new file mode 100644
index 0000000..c3a8621
--- /dev/null
+++ b/tests/data/test707
@@ -0,0 +1,59 @@
+<testcase>
+#based off test 100
+<info>
+<keywords>
+FTP
+PASV
+LIST
+SOCKS5
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+# When doing LIST, we get the default list output hard-coded in the test
+# FTP server
+<datacheck>
+total 20
+drwxr-xr-x 8 98 98 512 Oct 22 13:06 .
+drwxr-xr-x 8 98 98 512 Oct 22 13:06 ..
+drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT
+-r--r--r-- 1 0 1 35 Jul 16 1996 README
+lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin
+dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev
+drwxrwxrwx 2 98 98 512 May 29 16:04 download.html
+dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc
+drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub
+dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr
+</datacheck>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+ftp
+socks5
+</server>
+ <name>
+FTP dir list PASV via SOCKS5
+ </name>
+ <command>
+--socks5 %HOSTIP:%SOCKSPORT ftp://%HOSTIP:%FTPPORT/
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE A
+LIST
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test71 b/tests/data/test71
new file mode 100644
index 0000000..b71f969
--- /dev/null
+++ b/tests/data/test71
@@ -0,0 +1,79 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP FORMPOST
+config file
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 11
+
+blablabla
+
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP and -F upload in config file
+ </name>
+<stdin>
+-F name=daniel
+-F tool=curl
+-F file=@log/test71.txt
+</stdin>
+ <command>
+http://%HOSTIP:%HTTPPORT/we/want/71 -K -
+</command>
+# We create this file before the command is invoked!
+<file name="log/test71.txt">
+foo-
+This is a moo-
+bar
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^(User-Agent:|Content-Type: multipart/form-data;|------------).*
+</strip>
+<protocol>
+POST /we/want/71 HTTP/1.1
+User-Agent: curl/7.10.4 (i686-pc-linux-gnu) libcurl/7.10.4 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 408
+Expect: 100-continue
+Content-Type: multipart/form-data; boundary=----------------------------9ef8d6205763
+
+------------------------------9ef8d6205763
+Content-Disposition: form-data; name="name"
+
+daniel
+------------------------------9ef8d6205763
+Content-Disposition: form-data; name="tool"
+
+curl
+------------------------------9ef8d6205763
+Content-Disposition: form-data; name="file"; filename="test71.txt"
+Content-Type: text/plain
+
+foo-
+This is a moo-
+bar
+
+------------------------------9ef8d6205763--
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test72 b/tests/data/test72
new file mode 100644
index 0000000..5c24271
--- /dev/null
+++ b/tests/data/test72
@@ -0,0 +1,86 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP Digest auth
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+HTTP/1.1 401 Authorization Required
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Basic realm="foothis"
+WWW-Authenticate: Digest realm="testrealm", nonce="1053604199"
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 26
+
+This is not the real page
+</data>
+
+# This is supposed to be returned when the server gets a
+# Authorization: Digest line passed-in from the client
+<data1000>
+HTTP/1.1 200 OK
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 23
+
+This IS the real page!
+</data1000>
+
+<datacheck>
+HTTP/1.1 401 Authorization Required
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Basic realm="foothis"
+WWW-Authenticate: Digest realm="testrealm", nonce="1053604199"
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 26
+
+HTTP/1.1 200 OK
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 23
+
+This IS the real page!
+</datacheck>
+
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+<features>
+crypto
+</features>
+ <name>
+HTTP with Digest *OR* Basic authorization
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/72 -u testuser:testpass --anyauth
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /72 HTTP/1.1
+User-Agent: curl/7.10.6-pre1 (i686-pc-linux-gnu) libcurl/7.10.6-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /72 HTTP/1.1
+Authorization: Digest username="testuser", realm="testrealm", nonce="1053604199", uri="/72", response="9fcd1330377365a09bbcb33b2cbb25bd"
+User-Agent: curl/7.10.6-pre1 (i686-pc-linux-gnu) libcurl/7.10.6-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test73 b/tests/data/test73
new file mode 100644
index 0000000..dec0801
--- /dev/null
+++ b/tests/data/test73
@@ -0,0 +1,55 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+cookies
+cookiejar
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Type: text/html
+Set-Cookie: IPCZQX01af0fca5c=000010008168c200d25dfc4b; path=/; domain=.NOT_DISCLOSED.se
+Content-Length: 4
+
+boo
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP, receive cookies when using custom Host:, domain using only two dots
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/we/want/73 -c log/jar73.txt -H "Host: host.NOT_DISCLOSED.se"
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /we/want/73 HTTP/1.1
+Accept: */*
+Host: host.NOT_DISCLOSED.se
+
+</protocol>
+<file name="log/jar73.txt" mode="text">
+# Netscape HTTP Cookie File
+# http://curl.haxx.se/rfc/cookie_spec.html
+# This file was generated by libcurl! Edit at your own risk.
+
+.NOT_DISCLOSED.se TRUE / FALSE 0 IPCZQX01af0fca5c 000010008168c200d25dfc4b
+</file>
+</verify>
+</testcase>
diff --git a/tests/data/test74 b/tests/data/test74
new file mode 100644
index 0000000..4c08e26
--- /dev/null
+++ b/tests/data/test74
@@ -0,0 +1,74 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+{} list
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+Content-Type: text/html
+Funny-head: yesyes
+
+-foo-
+</data>
+<data1>
+HTTP/1.0 200 OK
+Content-Type: text/html
+Funny-head: swsclose
+Connection: close
+
+crap data
+</data1>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP, urlglob {}-retrieval and -o #[num] usage
+ </name>
+ <command option="no-output">
+"http://%HOSTIP:%HTTPPORT/{74,740001}" -o "log/dumpit#1.dump"
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /74 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /740001 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+<file name="log/dumpit740001.dump">
+HTTP/1.0 200 OK
+Content-Type: text/html
+Funny-head: swsclose
+Connection: close
+
+crap data
+</file>
+</verify>
+</testcase>
diff --git a/tests/data/test75 b/tests/data/test75
new file mode 100644
index 0000000..07f6990
--- /dev/null
+++ b/tests/data/test75
@@ -0,0 +1,49 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+FAILURE
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+none
+</server>
+<features>
+http
+</features>
+ <name>
+HTTP, urlglob retrieval with bad range
+ </name>
+ <command option="no-output">
+"http://%HOSTIP:%HTTPPORT/[2-1]" -o "log/weee#1.dump" --stderr -
+</command>
+# The error message on stdout implicitly depends on the length of the
+# URL, so refuse to run if the length is unexpected.
+<precheck>
+perl %SRCDIR/libtest/test75.pl http://%HOSTIP:%HTTPPORT/ 22
+</precheck>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<errorcode>
+3
+</errorcode>
+<stdout mode="text">
+curl: (3) [globbing] error: bad range specification after pos 24
+</stdout>
+</verify>
+</testcase>
diff --git a/tests/data/test76 b/tests/data/test76
new file mode 100644
index 0000000..ada3a33
--- /dev/null
+++ b/tests/data/test76
@@ -0,0 +1,39 @@
+<testcase>
+<info>
+<keywords>
+FAILURE
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+none
+</server>
+<features>
+http
+</features>
+ <name>
+HTTP, -O with no file name part in the URL
+ </name>
+ <command option="no-output">
+http://%HOSTIP:%HTTPPORT/76/ -O
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<errorcode>
+23
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test77 b/tests/data/test77
new file mode 100644
index 0000000..90f4563
--- /dev/null
+++ b/tests/data/test77
@@ -0,0 +1,55 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+-z
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2010 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+
+-foo-
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP with -z "older date"
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/77 -z "dec 12 12:00:00 1999 GMT"
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /77 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+If-Modified-Since: Sun, 12 Dec 1999 12:00:00 GMT
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test78 b/tests/data/test78
new file mode 100644
index 0000000..aa889c5
--- /dev/null
+++ b/tests/data/test78
@@ -0,0 +1,67 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+-z
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 1990 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+-foo-
+</data>
+<datacheck>
+HTTP/1.1 200 OK
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 1990 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+</datacheck>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP with -z "newer date"
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/78 -z "dec 12 11:00:00 1999 GMT"
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /78 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+If-Modified-Since: Sun, 12 Dec 1999 11:00:00 GMT
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test79 b/tests/data/test79
new file mode 100644
index 0000000..b2566e2
--- /dev/null
+++ b/tests/data/test79
@@ -0,0 +1,55 @@
+<testcase>
+<info>
+<keywords>
+FTP
+HTTP
+HTTP GET
+HTTP proxy
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.0 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake swsclose
+Content-Type: text/html
+Funny-head: yesyes
+
+contents
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<features>
+ftp
+</features>
+ <name>
+FTP over HTTP proxy
+ </name>
+ <command>
+ftp://%HOSTIP:%HTTPPORT/we/want/that/page/79 -x %HOSTIP:%HTTPPORT
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET ftp://%HOSTIP:%HTTPPORT/we/want/that/page/79 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test8 b/tests/data/test8
new file mode 100644
index 0000000..4a6e004
--- /dev/null
+++ b/tests/data/test8
@@ -0,0 +1,63 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+cookies
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP with cookie parsing from header file
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/we/want/8 -b log/heads8.txt
+</command>
+
+# We create this file before the command is invoked!
+<file name="log/heads8.txt">
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Type: text/html
+Funny-head: yesyes
+Set-Cookie: foobar=name; domain=127.0.0.1; path=/;
+Set-Cookie: mismatch=this; domain=127.0.0.1; path="/silly/";
+Set-Cookie: partmatch=present; domain=.0.0.1; path=/w;
+Set-Cookie: duplicate=test; domain=.0.0.1; domain=.0.0.1; path=/donkey;
+Set-Cookie: cookie=yes; path=/we;
+Set-Cookie: cookie=perhaps; path=/we/want;
+Set-Cookie: nocookie=yes; path=/WE;
+Set-Cookie: blexp=yesyes; domain=.0.0.1; domain=.0.0.1; expiry=totally bad;
+
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /we/want/8 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Cookie: cookie=perhaps; cookie=yes; partmatch=present; foobar=name; blexp=yesyes
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test80 b/tests/data/test80
new file mode 100644
index 0000000..a405af7
--- /dev/null
+++ b/tests/data/test80
@@ -0,0 +1,76 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP CONNECT
+HTTP Basic auth
+HTTP proxy
+HTTP proxy Basic auth
+proxytunnel
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake swsclose
+Content-Type: text/html
+Funny-head: yesyes
+Content-Length: 9
+
+contents
+</data>
+<datacheck>
+HTTP/1.1 200 Mighty fine indeed
+
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake swsclose
+Content-Type: text/html
+Funny-head: yesyes
+Content-Length: 9
+
+contents
+</datacheck>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP 1.0 CONNECT with proxytunnel and host Basic authentication
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/we/want/that/page/80 -p --proxy1.0 %HOSTIP:%HTTPPORT --user iam:myself --proxy-user youare:yourself
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+CONNECT %HOSTIP:%HTTPPORT HTTP/1.0
+Host: %HOSTIP:%HTTPPORT
+Proxy-Authorization: Basic eW91YXJlOnlvdXJzZWxm
+User-Agent: curl/7.10.7-pre2 (i686-pc-linux-gnu) libcurl/7.10.7-pre2 OpenSSL/0.9.7a zlib/1.1.3
+Proxy-Connection: Keep-Alive
+
+GET /we/want/that/page/80 HTTP/1.1
+Authorization: Basic aWFtOm15c2VsZg==
+User-Agent: curl/7.10.7-pre2 (i686-pc-linux-gnu) libcurl/7.10.7-pre2 OpenSSL/0.9.7a zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test800 b/tests/data/test800
new file mode 100644
index 0000000..3281b63
--- /dev/null
+++ b/tests/data/test800
@@ -0,0 +1,47 @@
+<testcase>
+<info>
+<keywords>
+POP3
+RETR
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data>
+From: me@somewhere
+To: fake@nowhere
+
+body
+
+--
+ yours sincerely
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+pop3
+</server>
+ <name>
+POP3 RETR
+ </name>
+ <command>
+pop3://%HOSTIP:%POP3PORT/800 -u user:secret
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER user
+PASS secret
+RETR 800
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test801 b/tests/data/test801
new file mode 100644
index 0000000..271d8d1
--- /dev/null
+++ b/tests/data/test801
@@ -0,0 +1,47 @@
+<testcase>
+<info>
+<keywords>
+IMAP
+FETCH
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data>
+From: me@somewhere
+To: fake@nowhere
+
+body
+
+--
+ yours sincerely
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+imap
+</server>
+ <name>
+IMAP FETCH
+ </name>
+ <command>
+imap://%HOSTIP:%IMAPPORT/801 -u user:secret
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+B LOGIN user secret
+C SELECT 801
+D FETCH 1 BODY[TEXT]
+A LOGOUT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test802 b/tests/data/test802
new file mode 100644
index 0000000..7027c80
--- /dev/null
+++ b/tests/data/test802
@@ -0,0 +1,53 @@
+<testcase>
+<info>
+<keywords>
+SMTP
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+smtp
+</server>
+ <name>
+SMTP
+ </name>
+<stdin>
+From: different
+To: another
+
+body
+</stdin>
+ <command>
+smtp://%HOSTIP:%SMTPPORT/user --mail-rcpt 802@foo --mail-rcpt 802@foobar.example --mail-from 802@from -T -
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+EHLO user
+MAIL FROM:802@from
+RCPT TO:<802@foo>
+RCPT TO:<802@foobar.example>
+DATA
+QUIT
+</protocol>
+<upload>
+From: different
+To: another
+
+body
+
+.
+</upload>
+</verify>
+</testcase>
diff --git a/tests/data/test803 b/tests/data/test803
new file mode 100644
index 0000000..24ff0d0
--- /dev/null
+++ b/tests/data/test803
@@ -0,0 +1,64 @@
+<testcase>
+<info>
+<keywords>
+SMTP
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+smtp
+</server>
+ <name>
+SMTP with CRLF-dot-CRLF in data
+ </name>
+<stdin>
+From: different
+To: another
+
+
+.
+.
+
+.
+
+body
+</stdin>
+ <command>
+smtp://%HOSTIP:%SMTPPORT/user --mail-rcpt 803@foo --mail-from 803@from -T -
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+EHLO user
+MAIL FROM:803@from
+RCPT TO:<803@foo>
+DATA
+QUIT
+</protocol>
+<upload>
+From: different
+To: another
+
+
+..
+..
+
+..
+
+body
+
+.
+</upload>
+</verify>
+</testcase>
diff --git a/tests/data/test804 b/tests/data/test804
new file mode 100644
index 0000000..3d490c5
--- /dev/null
+++ b/tests/data/test804
@@ -0,0 +1,59 @@
+<testcase>
+<info>
+<keywords>
+SMTP
+SMTP HELO
+RFC821
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<servercmd>
+REPLY EHLO 500 Command unrecognized
+REPLY HELO 250 Already old but still servicing...
+</servercmd>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+smtp
+</server>
+ <name>
+RFC821-only SMTP server (EHLO not supported)
+ </name>
+<stdin>
+From: different
+To: another
+
+body
+</stdin>
+ <command>
+smtp://%HOSTIP:%SMTPPORT/user --mail-rcpt 804@foo --mail-from 804@from -T -
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+EHLO user
+HELO user
+MAIL FROM:804@from
+RCPT TO:<804@foo>
+DATA
+QUIT
+</protocol>
+<upload>
+From: different
+To: another
+
+body
+
+.
+</upload>
+</verify>
+</testcase>
diff --git a/tests/data/test805 b/tests/data/test805
new file mode 100644
index 0000000..fba5124
--- /dev/null
+++ b/tests/data/test805
@@ -0,0 +1,54 @@
+<testcase>
+<info>
+<keywords>
+SMTP
+SMTP AUTH PLAIN
+RFC4616
+RFC4954
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<servercmd>
+REPLY EHLO 220 AUTH PLAIN
+REPLY AUTH 235 Authenticated
+</servercmd>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+smtp
+</server>
+ <name>
+SMTP plain authentication
+ </name>
+<stdin>
+mail body
+</stdin>
+ <command>
+smtp://%HOSTIP:%SMTPPORT/user --mail-rcpt 805@foo --mail-from 805@from -u test:1234 -T -
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+EHLO user
+AUTH PLAIN dGVzdAB0ZXN0ADEyMzQ=
+MAIL FROM:805@from
+RCPT TO:<805@foo>
+DATA
+QUIT
+</protocol>
+<upload>
+mail body
+
+.
+</upload>
+</verify>
+</testcase>
diff --git a/tests/data/test806 b/tests/data/test806
new file mode 100644
index 0000000..8ece5dc
--- /dev/null
+++ b/tests/data/test806
@@ -0,0 +1,55 @@
+<testcase>
+<info>
+<keywords>
+SMTP
+SMTP AUTH LOGIN
+RFC4954
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<servercmd>
+REPLY EHLO 220 AUTH LOGIN
+REPLY AUTH 334 UGFzc3dvcmQ6
+REPLY MTIzNA== 235 Authenticated
+</servercmd>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+smtp
+</server>
+ <name>
+SMTP login authentication
+ </name>
+<stdin>
+mail body
+</stdin>
+ <command>
+smtp://%HOSTIP:%SMTPPORT/user --mail-rcpt 806@foo --mail-from 806@from -u test:1234 -T -
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+EHLO user
+AUTH LOGIN dGVzdA==
+MTIzNA==
+MAIL FROM:806@from
+RCPT TO:<806@foo>
+DATA
+QUIT
+</protocol>
+<upload>
+mail body
+
+.
+</upload>
+</verify>
+</testcase>
diff --git a/tests/data/test807 b/tests/data/test807
new file mode 100644
index 0000000..6daa1d0
--- /dev/null
+++ b/tests/data/test807
@@ -0,0 +1,59 @@
+<testcase>
+<info>
+<keywords>
+SMTP
+SMTP AUTH CRAM-MD5
+RFC2195
+RFC4954
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<servercmd>
+REPLY EHLO 220 AUTH CRAM-MD5
+REPLY AUTH 334 PDE4OTYuNjk3MTcwOTUyQHBvc3RvZmZpY2UucmVzdG9uLm1jaS5uZXQ+
+REPLY dGltIGI5MTNhNjAyYzdlZGE3YTQ5NWI0ZTZlNzMzNGQzODkw 235 Authenticated
+</servercmd>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+smtp
+</server>
+<features>
+crypto
+</features>
+ <name>
+SMTP CRAM-MD5 authentication
+ </name>
+<stdin>
+mail body
+</stdin>
+ <command>
+smtp://%HOSTIP:%SMTPPORT/user --mail-rcpt 807@foo --mail-from 807@from -u tim:tanstaaftanstaaf -T -
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+EHLO user
+AUTH CRAM-MD5
+dGltIGI5MTNhNjAyYzdlZGE3YTQ5NWI0ZTZlNzMzNGQzODkw
+MAIL FROM:807@from
+RCPT TO:<807@foo>
+DATA
+QUIT
+</protocol>
+<upload>
+mail body
+
+.
+</upload>
+</verify>
+</testcase>
diff --git a/tests/data/test81 b/tests/data/test81
new file mode 100644
index 0000000..0da0bdc
--- /dev/null
+++ b/tests/data/test81
@@ -0,0 +1,101 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP proxy
+HTTP proxy NTLM auth
+</keywords>
+</info>
+
+# Server-side
+<reply>
+
+# This is supposed to be returned when the server gets a first
+# Authorization: NTLM line passed-in from the client
+<data1001>
+HTTP/1.1 407 Now gimme that second request of crap
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 34
+Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+This is not the real page either!
+</data1001>
+
+# This is supposed to be returned when the server gets the second
+# Authorization: NTLM line passed-in from the client
+<data1002>
+HTTP/1.1 200 Things are fine in server land swsclose
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page!
+</data1002>
+
+<datacheck>
+HTTP/1.1 407 Now gimme that second request of crap
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 34
+Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+HTTP/1.1 200 Things are fine in server land swsclose
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page!
+</datacheck>
+
+</reply>
+
+# Client-side
+<client>
+<features>
+NTLM
+</features>
+<server>
+http
+</server>
+ <name>
+HTTP with proxy using NTLM authorization
+ </name>
+ <setenv>
+# we force our own host name, in order to make the test machine independent
+CURL_GETHOSTNAME=curlhost
+# we try to use the LD_PRELOAD hack, if not a debug build
+LD_PRELOAD=%PWD/libtest/.libs/libhostname.so
+ </setenv>
+ <command>
+http://%HOSTIP:%HTTPPORT/81 --proxy-user testuser:testpass -x http://%HOSTIP:%HTTPPORT --proxy-ntlm
+</command>
+<precheck>
+chkhostname curlhost
+</precheck>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET http://%HOSTIP:%HTTPPORT/81 HTTP/1.1
+Proxy-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+User-Agent: curl/7.10.6-pre1 (i686-pc-linux-gnu) libcurl/7.10.6-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+GET http://%HOSTIP:%HTTPPORT/81 HTTP/1.1
+Proxy-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoKBAFpkQwKRCZFMhjj0tw47wEjKHRHlvzfxQamFcheMuv8v+xeqphEO5V41xRd7R9deOXRlc3R1c2VyY3VybGhvc3Q=
+User-Agent: curl/7.10.6-pre1 (i686-pc-linux-gnu) libcurl/7.10.6-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test82 b/tests/data/test82
new file mode 100644
index 0000000..9e800bb
--- /dev/null
+++ b/tests/data/test82
@@ -0,0 +1,56 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP proxy
+HTTP proxy Basic auth
+HTTP proxy NTLM auth
+</keywords>
+</info>
+# Server-side
+<reply>
+
+<data>
+HTTP/1.1 407 We only deal with NTLM my friend
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 34
+Proxy-Authenticate: NTLM
+
+This is not the real page either!
+</data>
+
+</reply>
+
+# Client-side
+<client>
+<features>
+</features>
+<server>
+http
+</server>
+ <name>
+HTTP with proxy requiring NTLM, but we send Basic
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/82 --proxy-user testuser:testpass -x http://%HOSTIP:%HTTPPORT
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET http://%HOSTIP:%HTTPPORT/82 HTTP/1.1
+Proxy-Authorization: Basic dGVzdHVzZXI6dGVzdHBhc3M=
+User-Agent: curl/7.10.6-pre1 (i686-pc-linux-gnu) libcurl/7.10.6-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test83 b/tests/data/test83
new file mode 100644
index 0000000..0ada5d1
--- /dev/null
+++ b/tests/data/test83
@@ -0,0 +1,72 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP CONNECT
+HTTP Basic auth
+proxytunnel
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake swsclose
+Content-Type: text/html
+Funny-head: yesyes
+Content-Length: 9
+
+contents
+</data>
+<datacheck>
+HTTP/1.1 200 Mighty fine indeed
+
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake swsclose
+Content-Type: text/html
+Funny-head: yesyes
+Content-Length: 9
+
+contents
+</datacheck>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP over proxy-tunnel with site authentication
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/we/want/that/page/83 -p -x %HOSTIP:%HTTPPORT --user iam:myself
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+CONNECT %HOSTIP:%HTTPPORT HTTP/1.1
+User-Agent: curl/7.10.7-pre2 (i686-pc-linux-gnu) libcurl/7.10.7-pre2 OpenSSL/0.9.7a zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Proxy-Connection: Keep-Alive
+
+GET /we/want/that/page/83 HTTP/1.1
+Authorization: Basic aWFtOm15c2VsZg==
+User-Agent: curl/7.10.7-pre2 (i686-pc-linux-gnu) libcurl/7.10.7-pre2 OpenSSL/0.9.7a zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test84 b/tests/data/test84
new file mode 100644
index 0000000..4dbf164
--- /dev/null
+++ b/tests/data/test84
@@ -0,0 +1,54 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP Basic auth
+HTTP proxy
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.0 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake swsclose
+Content-Type: text/html
+Funny-head: yesyes
+
+contents
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP over proxy with site authentication
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/we/want/that/page/84 -x %HOSTIP:%HTTPPORT --user iam:myself
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET http://%HOSTIP:%HTTPPORT/we/want/that/page/84 HTTP/1.1
+Authorization: Basic aWFtOm15c2VsZg==
+User-Agent: curl/7.10.7-pre2 (i686-pc-linux-gnu) libcurl/7.10.7-pre2 OpenSSL/0.9.7a zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test85 b/tests/data/test85
new file mode 100644
index 0000000..a5d1a3b
--- /dev/null
+++ b/tests/data/test85
@@ -0,0 +1,58 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP Basic auth
+HTTP proxy
+HTTP proxy Basic auth
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake swsclose
+Content-Type: text/html
+Funny-head: yesyes
+Content-Length: 9
+
+contents
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP over proxy with site and proxy authentication
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/we/want/that/page/85 -x %HOSTIP:%HTTPPORT --user iam:myself --proxy-user testing:this
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET http://%HOSTIP:%HTTPPORT/we/want/that/page/85 HTTP/1.1
+Proxy-Authorization: Basic dGVzdGluZzp0aGlz
+Authorization: Basic aWFtOm15c2VsZg==
+User-Agent: curl/7.10.7-pre2 (i686-pc-linux-gnu) libcurl/7.10.7-pre2 OpenSSL/0.9.7a zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test86 b/tests/data/test86
new file mode 100644
index 0000000..70c28e9
--- /dev/null
+++ b/tests/data/test86
@@ -0,0 +1,96 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+[] range
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+-foo-
+</data>
+<data1>
+HTTP/1.0 200 OK
+Content-Type: text/html
+Funny-head: swsclose
+
+crap data
+</data1>
+<data2>
+HTTP/1.0 200 OK
+Content-Type: text/html
+Funny-head: swsclose
+
+crap data
+</data2>
+<data3>
+HTTP/1.0 200 OK
+Content-Type: text/html
+Funny-head: swsclose
+
+crap data
+</data3>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP, urlglob []-retrieval and -o #[num] usage
+ </name>
+ <command option="no-output">
+"http://%HOSTIP:%HTTPPORT/[860001-860003]" -o "log/dumpit#1.dump"
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /860001 HTTP/1.1
+User-Agent: curl/7.10.7-pre4 (i686-pc-linux-gnu) libcurl/7.10.7-pre4 OpenSSL/0.9.7a ipv6 zlib/1.1.3 GSS
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /860002 HTTP/1.1
+User-Agent: curl/7.10.7-pre4 (i686-pc-linux-gnu) libcurl/7.10.7-pre4 OpenSSL/0.9.7a ipv6 zlib/1.1.3 GSS
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /860003 HTTP/1.1
+User-Agent: curl/7.10.7-pre4 (i686-pc-linux-gnu) libcurl/7.10.7-pre4 OpenSSL/0.9.7a ipv6 zlib/1.1.3 GSS
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+
+# we check the second file
+<file name="log/dumpit860002.dump">
+HTTP/1.0 200 OK
+Content-Type: text/html
+Funny-head: swsclose
+
+crap data
+</file>
+</verify>
+</testcase>
diff --git a/tests/data/test87 b/tests/data/test87
new file mode 100644
index 0000000..40b274b
--- /dev/null
+++ b/tests/data/test87
@@ -0,0 +1,36 @@
+<testcase>
+<info>
+<keywords>
+[] range
+FAILURE
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+</reply>
+#
+# Client-side
+<client>
+<server>
+none
+</server>
+<features>
+http
+</features>
+ <name>
+urlglob with bad -o #[num] usage
+ </name>
+ <command option="no-output">
+"http://%HOSTIP:%HTTPPORT/[870001-870003]" -o "log/dumpit#2.dump"
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+2
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test88 b/tests/data/test88
new file mode 100644
index 0000000..2495aec
--- /dev/null
+++ b/tests/data/test88
@@ -0,0 +1,101 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP PUT
+HTTP Digest auth
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<servercmd>
+auth_required
+</servercmd>
+<data>
+HTTP/1.1 401 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Digest realm="testrealm", nonce="1053604145"
+Content-Type: text/html; charset=iso-8859-1
+Connection: close
+
+This is not the real page
+</data>
+
+# This is supposed to be returned when the server gets a
+# Authorization: Digest line passed-in from the client
+<data1000>
+HTTP/1.1 200 OK swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Content-Type: text/html; charset=iso-8859-1
+Connection: close
+
+This IS the real page!
+</data1000>
+
+<datacheck>
+HTTP/1.1 401 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Digest realm="testrealm", nonce="1053604145"
+Content-Type: text/html; charset=iso-8859-1
+Connection: close
+
+HTTP/1.1 200 OK swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Content-Type: text/html; charset=iso-8859-1
+Connection: close
+
+This IS the real page!
+</datacheck>
+
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+<features>
+crypto
+</features>
+ <name>
+HTTP PUT with Digest authorization
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/88 -T log/put88 -u testuser:testpass --digest
+</command>
+<file name="log/put88">
+This is data we upload with PUT
+a second line
+line three
+four is the number of lines
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+PUT /88 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 0
+Expect: 100-continue
+
+PUT /88 HTTP/1.1
+Authorization: Digest username="testuser", realm="testrealm", nonce="1053604145", uri="/88", response="78a49fa53d0c228778297687d4168e71"
+User-Agent: curl/7.10.5 (i686-pc-linux-gnu) libcurl/7.10.5 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 85
+Expect: 100-continue
+
+This is data we upload with PUT
+a second line
+line three
+four is the number of lines
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test89 b/tests/data/test89
new file mode 100644
index 0000000..f348eb6
--- /dev/null
+++ b/tests/data/test89
@@ -0,0 +1,145 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP NTLM auth
+followlocation
+</keywords>
+</info>
+# Server-side
+<reply>
+
+<!-- no <data> in this test since we have NTLM from the start
+
+This is supposed to be returned when the server gets a first
+Authorization: NTLM line passed-in from the client -->
+
+<data1001>
+HTTP/1.1 401 Now gimme that second request of crap
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 34
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+This is not the real page either!
+</data1001>
+
+# This is supposed to be returned when the server gets the second
+# Authorization: NTLM line passed-in from the client
+<data1002>
+HTTP/1.1 301 Things are fine in server land swsclose
+Server: Microsoft-IIS/5.0
+Connection: close
+Location: /you/890010
+
+</data1002>
+
+# This is the first reply after the redirection
+<data1011>
+HTTP/1.1 401 Now gimme that second round of crap
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 34
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+This is not the real page either!
+</data1011>
+
+# This is supposed to be returned when the server gets the second
+# Authorization: NTLM line passed-in from the client
+<data1012>
+HTTP/1.1 200 Things are fine in server land swsclose
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page!
+</data1012>
+
+<datacheck>
+HTTP/1.1 401 Now gimme that second request of crap
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 34
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+HTTP/1.1 301 Things are fine in server land swsclose
+Server: Microsoft-IIS/5.0
+Connection: close
+Location: /you/890010
+
+HTTP/1.1 401 Now gimme that second round of crap
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 34
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+HTTP/1.1 200 Things are fine in server land swsclose
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page!
+</datacheck>
+
+</reply>
+
+# Client-side
+<client>
+<features>
+NTLM
+</features>
+<server>
+http
+</server>
+ <name>
+HTTP with NTLM and follow-location
+ </name>
+ <setenv>
+# we force our own host name, in order to make the test machine independent
+CURL_GETHOSTNAME=curlhost
+# we try to use the LD_PRELOAD hack, if not a debug build
+LD_PRELOAD=%PWD/libtest/.libs/libhostname.so
+ </setenv>
+ <command>
+http://%HOSTIP:%HTTPPORT/89 -u testuser:testpass --ntlm -L
+</command>
+<precheck>
+chkhostname curlhost
+</precheck>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /89 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+User-Agent: curl/7.10.6-pre1 (i686-pc-linux-gnu) libcurl/7.10.6-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /89 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoKBAFpkQwKRCZFMhjj0tw47wEjKHRHlvzfxQamFcheMuv8v+xeqphEO5V41xRd7R9deOXRlc3R1c2VyY3VybGhvc3Q=
+User-Agent: curl/7.10.6-pre1 (i686-pc-linux-gnu) libcurl/7.10.6-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /you/890010 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+User-Agent: curl/7.10.8-pre1 (i686-pc-linux-gnu) libcurl/7.10.8-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3 GSS
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /you/890010 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoKBAFpkQwKRCZFMhjj0tw47wEjKHRHlvzfxQamFcheMuv8v+xeqphEO5V41xRd7R9deOXRlc3R1c2VyY3VybGhvc3Q=
+User-Agent: curl/7.10.8-pre1 (i686-pc-linux-gnu) libcurl/7.10.8-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3 GSS
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test9 b/tests/data/test9
new file mode 100644
index 0000000..7905ac8
--- /dev/null
+++ b/tests/data/test9
@@ -0,0 +1,73 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP FORMPOST
+HTTP file upload
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+HTTP/1.0 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+
+blablabla
+
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP RFC1867-type formposting
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/we/want/9 -F name=daniel -F tool=curl -F file=@log/test9.txt
+</command>
+# We create this file before the command is invoked!
+<file name="log/test9.txt">
+foo-
+This is a moo-
+bar
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^(User-Agent:|Content-Type: multipart/form-data;|------------).*
+</strip>
+<protocol>
+POST /we/want/9 HTTP/1.1
+User-Agent: curl/7.10.4 (i686-pc-linux-gnu) libcurl/7.10.4 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 407
+Expect: 100-continue
+Content-Type: multipart/form-data; boundary=----------------------------9ef8d6205763
+
+------------------------------9ef8d6205763
+Content-Disposition: form-data; name="name"
+
+daniel
+------------------------------9ef8d6205763
+Content-Disposition: form-data; name="tool"
+
+curl
+------------------------------9ef8d6205763
+Content-Disposition: form-data; name="file"; filename="test9.txt"
+Content-Type: text/plain
+
+foo-
+This is a moo-
+bar
+
+------------------------------9ef8d6205763--
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test90 b/tests/data/test90
new file mode 100644
index 0000000..24a7ff4
--- /dev/null
+++ b/tests/data/test90
@@ -0,0 +1,191 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP NTLM auth
+--anyauth
+followlocation
+</keywords>
+</info>
+# Server-side
+<reply>
+
+<data>
+HTTP/1.1 401 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Basic
+WWW-Authenticate: Wild-and-crazy
+WWW-Authenticate: NTLM
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 26
+
+This is not the real page
+</data>
+
+# This is supposed to be returned when the server gets a first
+# Authorization: NTLM line passed-in from the client
+<data1001>
+HTTP/1.1 401 Now gimme that second request of crap
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 34
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+This is not the real page either!
+</data1001>
+
+# This is supposed to be returned when the server gets the second
+# Authorization: NTLM line passed-in from the client
+<data1002>
+HTTP/1.1 301 Things are fine in server land swsclose
+Server: Microsoft-IIS/5.0
+Connection: close
+Location: /you/900010
+
+</data1002>
+
+# This is the first reply after the redirection
+<data10>
+HTTP/1.1 401 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Basic
+WWW-Authenticate: Wild-and-crazy
+WWW-Authenticate: NTLM
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 26
+
+This is not the real page
+</data10>
+
+<data1011>
+HTTP/1.1 401 Now gimme that second round of crap
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 34
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+This is not the real page either!
+</data1011>
+
+# This is supposed to be returned when the server gets the second
+# Authorization: NTLM line passed-in from the client
+<data1012>
+HTTP/1.1 200 Things are fine in server land swsclose
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page!
+</data1012>
+
+<datacheck>
+HTTP/1.1 401 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Basic
+WWW-Authenticate: Wild-and-crazy
+WWW-Authenticate: NTLM
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 26
+
+HTTP/1.1 401 Now gimme that second request of crap
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 34
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+HTTP/1.1 301 Things are fine in server land swsclose
+Server: Microsoft-IIS/5.0
+Connection: close
+Location: /you/900010
+
+HTTP/1.1 401 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Basic
+WWW-Authenticate: Wild-and-crazy
+WWW-Authenticate: NTLM
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 26
+
+HTTP/1.1 401 Now gimme that second round of crap
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 34
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+HTTP/1.1 200 Things are fine in server land swsclose
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page!
+</datacheck>
+
+</reply>
+
+# Client-side
+<client>
+<features>
+NTLM
+</features>
+<server>
+http
+</server>
+ <name>
+HTTP with NTLM via --anyauth, and then follow-location with NTLM again
+ </name>
+ <setenv>
+# we force our own host name, in order to make the test machine independent
+CURL_GETHOSTNAME=curlhost
+# we try to use the LD_PRELOAD hack, if not a debug build
+LD_PRELOAD=%PWD/libtest/.libs/libhostname.so
+ </setenv>
+ <command>
+http://%HOSTIP:%HTTPPORT/90 -u testuser:testpass --anyauth -L
+</command>
+<precheck>
+chkhostname curlhost
+</precheck>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /90 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /90 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+User-Agent: curl/7.10.6-pre1 (i686-pc-linux-gnu) libcurl/7.10.6-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /90 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoKBAFpkQwKRCZFMhjj0tw47wEjKHRHlvzfxQamFcheMuv8v+xeqphEO5V41xRd7R9deOXRlc3R1c2VyY3VybGhvc3Q=
+User-Agent: curl/7.10.6-pre1 (i686-pc-linux-gnu) libcurl/7.10.6-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /you/900010 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /you/900010 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+User-Agent: curl/7.10.8-pre1 (i686-pc-linux-gnu) libcurl/7.10.8-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3 GSS
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /you/900010 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoKBAFpkQwKRCZFMhjj0tw47wEjKHRHlvzfxQamFcheMuv8v+xeqphEO5V41xRd7R9deOXRlc3R1c2VyY3VybGhvc3Q=
+User-Agent: curl/7.10.8-pre1 (i686-pc-linux-gnu) libcurl/7.10.8-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3 GSS
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test91 b/tests/data/test91
new file mode 100644
index 0000000..e6f34ae
--- /dev/null
+++ b/tests/data/test91
@@ -0,0 +1,122 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP NTLM auth
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+HTTP/1.1 401 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Magic-Negotiate
+WWW-Authenticate: NTLM
+WWW-Authenticate: Basic realm="daniel"
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 0
+Connection: close
+
+</data>
+
+# This is supposed to be returned when the server gets a first
+# Authorization: NTLM line passed-in from the client
+<data1001>
+HTTP/1.1 401 Now gimme that second request of crap
+Server: Microsoft-IIS/5.0
+Content-Length: 34
+Content-Type: text/html; charset=iso-8859-1
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+This is not the real page either!
+</data1001>
+
+# This is supposed to be returned when the server gets the second
+# Authorization: NTLM line passed-in from the client
+<data1002>
+HTTP/1.1 200 Things are fine in server land swsclose
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page!
+</data1002>
+
+<datacheck>
+HTTP/1.1 401 Authorization Required swsclose
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Magic-Negotiate
+WWW-Authenticate: NTLM
+WWW-Authenticate: Basic realm="daniel"
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 0
+Connection: close
+
+HTTP/1.1 401 Now gimme that second request of crap
+Server: Microsoft-IIS/5.0
+Content-Length: 34
+Content-Type: text/html; charset=iso-8859-1
+WWW-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+
+HTTP/1.1 200 Things are fine in server land swsclose
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page!
+</datacheck>
+
+</reply>
+
+# Client-side
+<client>
+<features>
+NTLM
+</features>
+<server>
+http
+</server>
+ <name>
+HTTP with NTLM/Negotiate/Basic, anyauth and user with domain, with size 0
+ </name>
+ <setenv>
+# we force our own host name, in order to make the test machine independent
+CURL_GETHOSTNAME=curlhost
+# we try to use the LD_PRELOAD hack, if not a debug build
+LD_PRELOAD=%PWD/libtest/.libs/libhostname.so
+ </setenv>
+ <command>
+http://%HOSTIP:%HTTPPORT/91 --anyauth -u mydomain\\myself:secret
+</command>
+<precheck>
+chkhostname curlhost
+</precheck>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /91 HTTP/1.1
+User-Agent: curl/7.10.6-pre1 (i686-pc-linux-gnu) libcurl/7.10.6-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /91 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
+User-Agent: curl/7.10.6-pre1 (i686-pc-linux-gnu) libcurl/7.10.6-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /91 HTTP/1.1
+Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAgACABwAAAABgAGAHgAAAAIAAgAfgAAAAAAAAAAAAAABoKBAMIyJpR5mHpg2FZha5kRaFZ9436GAxPu0C5llxexSQ5QzVkiLSfkcpVyRgCXXqR+Am15ZG9tYWlubXlzZWxmY3VybGhvc3Q=
+User-Agent: curl/7.10.6-pre1 (i686-pc-linux-gnu) libcurl/7.10.6-pre1 OpenSSL/0.9.7a ipv6 zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test92 b/tests/data/test92
new file mode 100644
index 0000000..726aa79
--- /dev/null
+++ b/tests/data/test92
@@ -0,0 +1,55 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+Content-Range
+Resume
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+HTTP/1.1 416 Requested Range Not Satisfiable
+Date: Fri, 24 Oct 2003 21:33:12 GMT
+Server: Apache/1.3.19 (Unix) (Red-Hat/Linux) mod_ssl/2.8.1 OpenSSL/0.9.6 PHP/4.3.1
+Last-Modified: Fri, 24 Oct 2003 18:01:23 GMT
+ETag: "ab57a-507-3f9968f3"
+Accept-Ranges: bytes
+Content-Length: 4
+Content-Range: bytes */87
+Content-Type: image/gif
+
+bad
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP resume transfer with the whole file already downloaded
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/want/92 -C 87
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /want/92 HTTP/1.1
+Range: bytes=87-
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+
+</verify>
+</testcase>
diff --git a/tests/data/test93 b/tests/data/test93
new file mode 100644
index 0000000..1387248
--- /dev/null
+++ b/tests/data/test93
@@ -0,0 +1,50 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP proxy
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 407 Needs proxy authentication
+Server: test-server/fake swsclose yesyes
+Proxy-Authenticate: Basic "oh please"
+Connection: close
+
+bing
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP GET with failed proxy auth
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/93 -x %HOSTIP:%HTTPPORT
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET http://%HOSTIP:%HTTPPORT/93 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test94 b/tests/data/test94
new file mode 100644
index 0000000..a7bafa6
--- /dev/null
+++ b/tests/data/test94
@@ -0,0 +1,58 @@
+<testcase>
+<info>
+<keywords>
+HTTPS
+HTTP GET
+HTTP CONNECT
+HTTP proxy
+FAILURE
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.1 407 Needs proxy authentication
+Server: test-server/fake swsclose yesyes
+Proxy-Authenticate: Basic "oh please"
+Connection: close
+
+bing
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<features>
+SSL
+</features>
+ <name>
+HTTPS GET with failed proxy auth (CONNECT 1.0)
+ </name>
+ <command>
+https://test.anything.really.com:94 --proxy1.0 %HOSTIP:%HTTPPORT
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+56
+</errorcode>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+CONNECT test.anything.really.com:94 HTTP/1.0
+User-Agent: curl/7.11.0-CVS (i686-pc-linux-gnu) libcurl/7.11.0-CVS OpenSSL/0.9.6b ipv6 zlib/1.1.4
+Host: test.anything.really.com:94
+Proxy-Connection: Keep-Alive
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test95 b/tests/data/test95
new file mode 100644
index 0000000..9fea1be
--- /dev/null
+++ b/tests/data/test95
@@ -0,0 +1,74 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP POST
+HTTP CONNECT
+proxytunnel
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake swsclose
+Content-Type: text/html
+Funny-head: yesyes
+Content-Length: 9
+
+contents
+</data>
+<datacheck>
+HTTP/1.1 200 Mighty fine indeed
+
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake swsclose
+Content-Type: text/html
+Funny-head: yesyes
+Content-Length: 9
+
+contents
+</datacheck>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP over proxytunnel using POST
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/we/want/that/page/95 -p -x %HOSTIP:%HTTPPORT -d "datatopost=ohthatsfunyesyes"
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol nonewline="yes">
+CONNECT %HOSTIP:%HTTPPORT HTTP/1.1
+User-Agent: curl/7.10.7-pre2 (i686-pc-linux-gnu) libcurl/7.10.7-pre2 OpenSSL/0.9.7a zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Proxy-Connection: Keep-Alive
+
+POST /we/want/that/page/95 HTTP/1.1
+User-Agent: curl/7.10.7-pre2 (i686-pc-linux-gnu) libcurl/7.10.7-pre2 OpenSSL/0.9.7a zlib/1.1.3
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 27
+Content-Type: application/x-www-form-urlencoded
+
+datatopost=ohthatsfunyesyes
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test97 b/tests/data/test97
new file mode 100644
index 0000000..c1065bb
--- /dev/null
+++ b/tests/data/test97
@@ -0,0 +1,52 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP POST
+HTTP replaced headers
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.0 200 OK
+Server: test-server/fake
+Content-Type: text/html
+Content-Length: 6
+
+blaha
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP POST with custom content-type
+ </name>
+ <command>
+ -d "hejsanallabarn" -H "Content-Type: silly/type" http://%HOSTIP:%HTTPPORT/97
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol nonewline="yes">
+POST /97 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Type: silly/type
+Content-Length: 14
+
+hejsanallabarn
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test98 b/tests/data/test98
new file mode 100644
index 0000000..b6d1182
--- /dev/null
+++ b/tests/data/test98
@@ -0,0 +1,55 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP PUT
+chunked Transfer-Encoding
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.0 200 OK
+Server: test-server/fake
+Content-Type: text/html
+Content-Length: 6
+
+blaha
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP PUT from stdin with set size, disabling chunked transfer-encoding
+ </name>
+ <command>
+ -T - -H "Transfer-Encoding:" -H "Content-Length: 14" http://%HOSTIP:%HTTPPORT/98
+</command>
+<stdin>
+data on stdin
+</stdin>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+PUT /98 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 14
+Expect: 100-continue
+
+data on stdin
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test99 b/tests/data/test99
new file mode 100644
index 0000000..2517002
--- /dev/null
+++ b/tests/data/test99
@@ -0,0 +1,69 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+Resume
+Largefile
+FAILURE
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 404 Nah
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+Content-Length: 13
+Funny-head: yesyes
+
+0123456789123
+</data>
+
+<datacheck>
+HTTP/1.1 404 Nah
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+Content-Length: 13
+Funny-head: yesyes
+
+</datacheck>
+</reply>
+
+#
+# Client-side
+<client>
+<features>
+large_file
+</features>
+<server>
+http
+</server>
+ <name>
+HTTP GET with large-file resume point and failed resume
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/99 -C 9999999999
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+# 33 is CURLE_RANGE_ERROR
+<errorcode>
+33
+</errorcode>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /99 HTTP/1.1
+Range: bytes=9999999999-
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/directories.pm b/tests/directories.pm
new file mode 100644
index 0000000..6f20e6f
--- /dev/null
+++ b/tests/directories.pm
@@ -0,0 +1,266 @@
+%file_chmod1 = (
+ 'name' => 'chmod1',
+ 'content' => "This file should have permissions 444\n",
+ 'perm' => 'r--r--r--',
+ 'time' => 'Jan 11 10:00',
+ 'dostime' => '01-11-10 10:00AM',
+);
+
+%file_chmod2 = (
+ 'name' => 'chmod2',
+ 'content' => "This file should have permissions 666\n",
+ 'perm' => 'rw-rw-rw-',
+ 'time' => 'Feb 1 8:00',
+ 'dostime' => '02-01-10 08:00AM',
+);
+
+%file_chmod3 = (
+ 'name' => 'chmod3',
+ 'content' => "This file should have permissions 777\n",
+ 'perm' => 'rwxrwxrwx',
+ 'time' => 'Feb 1 8:00',
+ 'dostime' => '02-01-10 08:00AM',
+);
+
+%file_chmod4 = (
+ 'type' => 'd',
+ 'name' => 'chmod4',
+ 'content' => "This file should have permissions 001\n",
+ 'perm' => '--S--S--t',
+ 'time' => 'May 4 4:31',
+ 'dostime' => '05-04-10 04:31AM'
+);
+
+%file_chmod5 = (
+ 'type' => 'd',
+ 'name' => 'chmod5',
+ 'content' => "This file should have permissions 110\n",
+ 'perm' => '--s--s--T',
+ 'time' => 'May 4 4:31',
+ 'dostime' => '05-04-10 04:31AM'
+);
+
+%link_link = (
+ 'type' => 'l',
+ 'name' => 'link -> file.txt',
+ 'size' => '8',
+ 'perm' => 'rwxrwxrwx',
+ 'time' => 'Jan 6 4:42'
+);
+
+%link_link_absolute = (
+ 'type' => 'l',
+ 'name' => 'link_absolute -> /data/ftp/file.txt',
+ 'size' => '15',
+ 'perm' => 'rwxrwxrwx',
+ 'time' => 'Jan 6 4:45'
+);
+
+%dir_dot = (
+ 'type' => "d",
+ 'name' => ".",
+ 'hlink' => "4",
+ 'time' => "Apr 27 5:12",
+ 'size' => "20480",
+ 'dostime' => "04-27-10 05:12AM",
+ 'perm' => "rwxrwxrwx"
+);
+
+%dir_ddot = (
+ 'type' => "d",
+ 'name' => "..",
+ 'hlink' => "4",
+ 'size' => "20480",
+ 'time' => "Apr 23 3:12",
+ 'dostime' => "04-23-10 03:12AM",
+ 'perm' => "rwxrwxrwx"
+);
+
+%dir_weirddir_txt = (
+ 'type' => "d",
+ 'name' => "weirddir.txt",
+ 'hlink' => "2",
+ 'size' => "4096",
+ 'time' => "Apr 23 3:12",
+ 'dostime' => "04-23-10 03:12AM",
+ 'perm' => "rwxr-xrwx"
+);
+
+%dir_UNIX = (
+ 'type' => "d",
+ 'name' => "UNIX",
+ 'hlink' => "11",
+ 'size' => "4096",
+ 'time' => "Nov 01 2008",
+ 'dostime' => "11-01-08 11:11AM",
+ 'perm' => "rwx--x--x"
+);
+
+%dir_DOS = (
+ 'type' => "d",
+ 'name' => "DOS",
+ 'hlink' => "11",
+ 'size' => "4096",
+ 'time' => "Nov 01 2008",
+ 'dostime' => "11-01-08 11:11AM",
+ 'perm' => "rwx--x--x"
+);
+
+%dir_dot_NeXT = (
+ 'type' => "d",
+ 'name' => ".NeXT",
+ 'hlink' => "4",
+ 'size' => "4096",
+ 'time' => "Jan 23 2:05",
+ 'dostime' => "01-23-05 02:05AM",
+ 'perm' => "rwxrwxrwx"
+);
+
+%file_empty_file_dat = (
+ 'name' => "empty_file.dat",
+ 'content' => "",
+ 'perm' => "rw-r--r--",
+ 'time' => "Apr 27 11:01",
+ 'dostime' => "04-27-10 11:01AM"
+);
+
+%file_file_txt = (
+ 'name' => "file.txt",
+ 'content' => "This is content of file \"file.txt\"\n",
+ 'time' => "Apr 27 11:01",
+ 'dostime' => "04-27-10 11:01AM",
+ 'perm' => "rw-r--r--"
+);
+
+%file_someothertext_txt = (
+ 'name' => "someothertext.txt",
+ 'content' => "Some junk ;-) This file does not really exist.\n",
+ 'time' => "Apr 27 11:01",
+ 'dostime' => "04-27-10 11:01AM",
+ 'perm' => "rw-r--r--"
+);
+
+%lists = (
+ '/fully_simulated/' => {
+ 'files' => [ \%dir_dot, \%dir_ddot, \%dir_DOS, \%dir_UNIX ],
+ 'eol' => "\r\n",
+ 'type' => "unix"
+ },
+ '/fully_simulated/UNIX/' => {
+ 'files' => [ \%dir_dot, \%dir_ddot,
+ \%file_chmod1, \%file_chmod2, \%file_chmod3, \%file_chmod4, \%file_chmod5,
+ \%file_empty_file_dat, \%file_file_txt,
+ \%link_link, \%link_link_absolute, \%dir_dot_NeXT,
+ \%file_someothertext_txt, \%dir_weirddir_txt ],
+ 'eol' => "\r\n",
+ 'type' => 'unix'
+ },
+ '/fully_simulated/DOS/' => {
+ 'files' => [ \%dir_dot, \%dir_ddot,
+ \%file_chmod1, \%file_chmod2, \%file_chmod3, \%file_chmod4, \%file_chmod5,
+ \%file_empty_file_dat, \%file_file_txt,
+ \%dir_dot_NeXT, \%file_someothertext_txt, \%dir_weirddir_txt ],
+ 'eol' => "\r\n",
+ 'type' => 'dos'
+ }
+);
+
+sub ftp_createcontent($) {
+ my (%list) = @_;
+
+ $type = $$list{'type'};
+ $eol = $$list{'eol'};
+ $list_ref = $$list{'files'};
+
+ my @diroutput;
+ my @contentlist;
+ if($type eq "unix") {
+ for(@$list_ref) {
+ my %file = %$_;
+ my $line = "";
+ my $ftype = $file{'type'} ? $file{'type'} : "-";
+ my $fperm = $file{'perm'} ? $file{'perm'} : "rwxr-xr-x";
+ my $fuser = $file{'user'} ? sprintf("%15s", $file{'user'}) : "ftp-default";
+ my $fgroup = $file{'group'} ? sprintf("%15s", $file{'group'}) : "ftp-default";
+ my $fsize = "";
+ if($file{'type'} eq "d") {
+ $fsize = $file{'size'} ? sprintf("%7s", $file{'size'}) : sprintf("%7d", 4096);
+ }
+ else {
+ $fsize = sprintf("%7d", length $file{'content'});
+ }
+ my $fhlink = $file{'hlink'} ? sprintf("%4d", $file{'hlink'}) : " 1";
+ my $ftime = $file{'time'} ? sprintf("%10s", $file{'time'}) : "Jan 9 1933";
+ push(@contentlist, "$ftype$fperm $fhlink $fuser $fgroup $fsize $ftime $file{'name'}$eol");
+ }
+
+ return @contentlist;
+ }
+ elsif($type =~ /^dos$/) {
+ for(@$list_ref) {
+ my %file = %$_;
+ my $line = "";
+ my $time = $file{'dostime'} ? $file{'dostime'} : "06-25-97 09:12AM";
+ my $size_or_dir;
+ if($file{'type'} =~ /^d$/) {
+ $size_or_dir = " <DIR> ";
+ }
+ else {
+ $size_or_dir = sprintf("%20d", length $file{'content'});
+ }
+ push(@contentlist, "$time $size_or_dir $file{'name'}$eol");
+ }
+ return @contentlist;
+ }
+}
+
+sub wildcard_filesize($$) {
+ my ($list_type, $file) = @_;
+ $list = $lists{$list_type};
+ if($list) {
+ my $files = $list->{'files'};
+ for(@$files) {
+ my %f = %$_;
+ if ($f{'name'} eq $file) {
+ if($f{'content'}) {
+ return length $f{'content'};
+ }
+ elsif ($f{'type'} ne "d"){
+ return 0;
+ }
+ else {
+ return -1;
+ }
+ }
+ }
+ }
+ return -1;
+}
+sub wildcard_getfile($$) {
+ my ($list_type, $file) = @_;
+ $list = $lists{$list_type};
+ if($list) {
+ my $files = $list->{'files'};
+ for(@$files) {
+ my %f = %$_;
+ if ($f{'name'} eq $file) {
+ if($f{'content'}) {
+ return (length $f{'content'}, $f{'content'});
+ }
+ elsif ($f{'type'} ne "d"){
+ return (0, "");
+ }
+ else {
+ return (-1, 0);
+ }
+ }
+ }
+ }
+ return (-1, 0);
+}
+
+sub ftp_contentlist {
+ my $listname = $_[0];
+ $list = $lists{$listname};
+ return ftp_createcontent(\$list);
+}
diff --git a/tests/ftp.pm b/tests/ftp.pm
new file mode 100644
index 0000000..6a46e76
--- /dev/null
+++ b/tests/ftp.pm
@@ -0,0 +1,254 @@
+#***************************************************************************
+# _ _ ____ _
+# Project ___| | | | _ \| |
+# / __| | | | |_) | |
+# | (__| |_| | _ <| |___
+# \___|\___/|_| \_\_____|
+#
+# Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+#
+# This software is licensed as described in the file COPYING, which
+# you should have received as part of this distribution. The terms
+# are also available at http://curl.haxx.se/docs/copyright.html.
+#
+# You may opt to use, copy, modify, merge, publish, distribute and/or sell
+# copies of the Software, and permit persons to whom the Software is
+# furnished to do so, under the terms of the COPYING file.
+#
+# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+# KIND, either express or implied.
+#
+###########################################################################
+
+use strict;
+use warnings;
+
+use serverhelp qw(
+ servername_id
+ mainsockf_pidfilename
+ datasockf_pidfilename
+ );
+
+#######################################################################
+# pidfromfile returns the pid stored in the given pidfile. The value
+# of the returned pid will never be a negative value. It will be zero
+# on any file related error or if a pid can not be extracted from the
+# given file.
+#
+sub pidfromfile {
+ my $pidfile = $_[0];
+ my $pid = 0;
+
+ if(-f $pidfile && -s $pidfile && open(PIDFH, "<$pidfile")) {
+ $pid = 0 + <PIDFH>;
+ close(PIDFH);
+ $pid = 0 unless($pid > 0);
+ }
+ return $pid;
+}
+
+#######################################################################
+# processexists checks if a process with the pid stored in the given
+# pidfile exists and is alive. This will return 0 on any file related
+# error or if a pid can not be extracted from the given file. When a
+# process with the same pid as the one extracted from the given file
+# is currently alive this returns that positive pid. Otherwise, when
+# the process is not alive, will return the negative value of the pid.
+#
+sub processexists {
+ use POSIX ":sys_wait_h";
+ my $pidfile = $_[0];
+
+ # fetch pid from pidfile
+ my $pid = pidfromfile($pidfile);
+
+ if($pid > 0) {
+ # verify if currently alive
+ if(kill(0, $pid)) {
+ return $pid;
+ }
+ else {
+ # get rid of the certainly invalid pidfile
+ unlink($pidfile) if($pid == pidfromfile($pidfile));
+ # reap its dead children, if not done yet
+ waitpid($pid, &WNOHANG);
+ # negative return value means dead process
+ return -$pid;
+ }
+ }
+ return 0;
+}
+
+#######################################################################
+# killpid attempts to gracefully stop processes in the given pid list
+# with a SIGTERM signal and SIGKILLs those which haven't died on time.
+#
+sub killpid {
+ use POSIX ":sys_wait_h";
+ my ($verbose, $pidlist) = @_;
+ my @requested;
+ my @signalled;
+ my @reapchild;
+
+ # The 'pidlist' argument is a string of whitespace separated pids.
+ return if(not defined($pidlist));
+
+ # Make 'requested' hold the non-duplicate pids from 'pidlist'.
+ @requested = split(' ', $pidlist);
+ return if(not @requested);
+ if(scalar(@requested) > 2) {
+ @requested = sort({$a <=> $b} @requested);
+ }
+ for(my $i = scalar(@requested) - 2; $i >= 0; $i--) {
+ if($requested[$i] == $requested[$i+1]) {
+ splice @requested, $i+1, 1;
+ }
+ }
+
+ # Send a SIGTERM to processes which are alive to gracefully stop them.
+ foreach my $tmp (@requested) {
+ chomp $tmp;
+ if($tmp =~ /^(\d+)$/) {
+ my $pid = $1;
+ if($pid > 0) {
+ if(kill(0, $pid)) {
+ print("RUN: Process with pid $pid signalled to die\n")
+ if($verbose);
+ kill("TERM", $pid);
+ push @signalled, $pid;
+ }
+ else {
+ print("RUN: Process with pid $pid already dead\n")
+ if($verbose);
+ # if possible reap its dead children
+ waitpid($pid, &WNOHANG);
+ push @reapchild, $pid;
+ }
+ }
+ }
+ }
+
+ # Allow all signalled processes five seconds to gracefully die.
+ if(@signalled) {
+ my $twentieths = 5 * 20;
+ while($twentieths--) {
+ for(my $i = scalar(@signalled) - 1; $i >= 0; $i--) {
+ my $pid = $signalled[$i];
+ if(!kill(0, $pid)) {
+ print("RUN: Process with pid $pid gracefully died\n")
+ if($verbose);
+ splice @signalled, $i, 1;
+ # if possible reap its dead children
+ waitpid($pid, &WNOHANG);
+ push @reapchild, $pid;
+ }
+ }
+ last if(not scalar(@signalled));
+ select(undef, undef, undef, 0.05);
+ }
+ }
+
+ # Mercilessly SIGKILL processes still alive.
+ if(@signalled) {
+ foreach my $pid (@signalled) {
+ if($pid > 0) {
+ print("RUN: Process with pid $pid forced to die with SIGKILL\n")
+ if($verbose);
+ kill("KILL", $pid);
+ # if possible reap its dead children
+ waitpid($pid, &WNOHANG);
+ push @reapchild, $pid;
+ }
+ }
+ }
+
+ # Reap processes dead children for sure.
+ if(@reapchild) {
+ foreach my $pid (@reapchild) {
+ if($pid > 0) {
+ waitpid($pid, 0);
+ }
+ }
+ }
+}
+
+#######################################################################
+# killsockfilters kills sockfilter processes for a given server.
+#
+sub killsockfilters {
+ my ($proto, $ipvnum, $idnum, $verbose, $which) = @_;
+ my $server;
+ my $pidfile;
+ my $pid;
+
+ return if($proto !~ /^(ftp|imap|pop3|smtp)$/);
+
+ die "unsupported sockfilter: $which"
+ if($which && ($which !~ /^(main|data)$/));
+
+ $server = servername_id($proto, $ipvnum, $idnum) if($verbose);
+
+ if(!$which || ($which eq 'main')) {
+ $pidfile = mainsockf_pidfilename($proto, $ipvnum, $idnum);
+ $pid = processexists($pidfile);
+ if($pid > 0) {
+ printf("* kill pid for %s-%s => %d\n", $server,
+ ($proto eq 'ftp')?'ctrl':'filt', $pid) if($verbose);
+ kill("KILL", $pid);
+ waitpid($pid, 0);
+ }
+ unlink($pidfile) if(-f $pidfile);
+ }
+
+ return if($proto ne 'ftp');
+
+ if(!$which || ($which eq 'data')) {
+ $pidfile = datasockf_pidfilename($proto, $ipvnum, $idnum);
+ $pid = processexists($pidfile);
+ if($pid > 0) {
+ printf("* kill pid for %s-data => %d\n", $server,
+ $pid) if($verbose);
+ kill("KILL", $pid);
+ waitpid($pid, 0);
+ }
+ unlink($pidfile) if(-f $pidfile);
+ }
+}
+
+#######################################################################
+# killallsockfilters kills sockfilter processes for all servers.
+#
+sub killallsockfilters {
+ my $verbose = $_[0];
+
+ for my $proto (('ftp', 'imap', 'pop3', 'smtp')) {
+ for my $ipvnum (('4', '6')) {
+ for my $idnum (('1', '2')) {
+ killsockfilters($proto, $ipvnum, $idnum, $verbose);
+ }
+ }
+ }
+}
+
+
+sub set_advisor_read_lock {
+ my ($filename) = @_;
+
+ if(open(FILEH, ">$filename")) {
+ close(FILEH);
+ return;
+ }
+ printf "Error creating lock file $filename error: $!";
+}
+
+
+sub clear_advisor_read_lock {
+ my ($filename) = @_;
+
+ if(-f $filename) {
+ unlink($filename);
+ }
+}
+
+
+1;
diff --git a/tests/ftpserver.pl b/tests/ftpserver.pl
new file mode 100755
index 0000000..ed2a832
--- /dev/null
+++ b/tests/ftpserver.pl
@@ -0,0 +1,1574 @@
+#!/usr/bin/env perl
+#***************************************************************************
+# _ _ ____ _
+# Project ___| | | | _ \| |
+# / __| | | | |_) | |
+# | (__| |_| | _ <| |___
+# \___|\___/|_| \_\_____|
+#
+# Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+#
+# This software is licensed as described in the file COPYING, which
+# you should have received as part of this distribution. The terms
+# are also available at http://curl.haxx.se/docs/copyright.html.
+#
+# You may opt to use, copy, modify, merge, publish, distribute and/or sell
+# copies of the Software, and permit persons to whom the Software is
+# furnished to do so, under the terms of the COPYING file.
+#
+# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+# KIND, either express or implied.
+#
+###########################################################################
+
+# This is a server designed for the curl test suite.
+#
+# In December 2009 we started remaking the server to support more protocols
+# that are similar in spirit. Like POP3, IMAP and SMTP in addition to the FTP
+# it already supported since a long time. Note that it still only supports one
+# protocol per invoke. You need to start mulitple servers to support multiple
+# protocols simultaneously.
+#
+# It is meant to exercise curl, it is not meant to be a fully working
+# or even very standard compliant server.
+#
+# You may optionally specify port on the command line, otherwise it'll
+# default to port 8921.
+#
+# All socket/network/TCP related stuff is done by the 'sockfilt' program.
+#
+
+BEGIN {
+ @INC=(@INC, $ENV{'srcdir'}, '.');
+ # sub second timestamping needs Time::HiRes
+ eval {
+ no warnings "all";
+ require Time::HiRes;
+ import Time::HiRes qw( gettimeofday );
+ }
+}
+
+use strict;
+use warnings;
+use IPC::Open2;
+
+require "getpart.pm";
+require "ftp.pm";
+require "directories.pm";
+
+use serverhelp qw(
+ servername_str
+ server_pidfilename
+ server_logfilename
+ mainsockf_pidfilename
+ mainsockf_logfilename
+ datasockf_pidfilename
+ datasockf_logfilename
+ );
+
+#**********************************************************************
+# global vars...
+#
+my $verbose = 0; # set to 1 for debugging
+my $idstr = ""; # server instance string
+my $idnum = 1; # server instance number
+my $ipvnum = 4; # server IPv number (4 or 6)
+my $proto = 'ftp'; # default server protocol
+my $srcdir; # directory where ftpserver.pl is located
+my $srvrname; # server name for presentation purposes
+my $grok_eprt;
+
+my $path = '.';
+my $logdir = $path .'/log';
+
+#**********************************************************************
+# global vars used for server address and primary listener port
+#
+my $port = 8921; # default primary listener port
+my $listenaddr = '127.0.0.1'; # default address for listener port
+
+#**********************************************************************
+# global vars used for file names
+#
+my $pidfile; # server pid file name
+my $logfile; # server log file name
+my $mainsockf_pidfile; # pid file for primary connection sockfilt process
+my $mainsockf_logfile; # log file for primary connection sockfilt process
+my $datasockf_pidfile; # pid file for secondary connection sockfilt process
+my $datasockf_logfile; # log file for secondary connection sockfilt process
+
+#**********************************************************************
+# global vars used for server logs advisor read lock handling
+#
+my $SERVERLOGS_LOCK = 'log/serverlogs.lock';
+my $serverlogslocked = 0;
+
+#**********************************************************************
+# global vars used for child processes PID tracking
+#
+my $sfpid; # PID for primary connection sockfilt process
+my $slavepid; # PID for secondary connection sockfilt process
+
+#**********************************************************************
+# global typeglob filehandle vars to read/write from/to sockfilters
+#
+local *SFREAD; # used to read from primary connection
+local *SFWRITE; # used to write to primary connection
+local *DREAD; # used to read from secondary connection
+local *DWRITE; # used to write to secondary connection
+
+#**********************************************************************
+# global vars which depend on server protocol selection
+#
+my %commandfunc; # protocol command specific function callbacks
+my %displaytext; # text returned to client before callback runs
+my @welcome; # text returned to client upon connection
+
+#**********************************************************************
+# global vars customized for each test from the server commands file
+#
+my $ctrldelay; # set if server should throttle ctrl stream
+my $datadelay; # set if server should throttle data stream
+my $retrweirdo; # set if ftp server should use RETRWEIRDO
+my $retrnosize; # set if ftp server should use RETRNOSIZE
+my $pasvbadip; # set if ftp server should use PASVBADIP
+my $nosave; # set if ftp server should not save uploaded data
+my %customreply; #
+my %customcount; #
+my %delayreply; #
+
+#**********************************************************************
+# global variables for to test ftp wildcardmatching or other test that
+# need flexible LIST responses.. and corresponding files.
+# $ftptargetdir is keeping the fake "name" of LIST directory.
+my $ftplistparserstate;
+my $ftptargetdir;
+
+#**********************************************************************
+# global vars used for signal handling
+#
+my $got_exit_signal = 0; # set if program should finish execution ASAP
+my $exit_signal; # first signal handled in exit_signal_handler
+
+#**********************************************************************
+# exit_signal_handler will be triggered to indicate that the program
+# should finish its execution in a controlled way as soon as possible.
+# For now, program will also terminate from within this handler.
+#
+sub exit_signal_handler {
+ my $signame = shift;
+ # For now, simply mimic old behavior.
+ killsockfilters($proto, $ipvnum, $idnum, $verbose);
+ unlink($pidfile);
+ if($serverlogslocked) {
+ $serverlogslocked = 0;
+ clear_advisor_read_lock($SERVERLOGS_LOCK);
+ }
+ exit;
+}
+
+#**********************************************************************
+# logmsg is general message logging subroutine for our test servers.
+#
+sub logmsg {
+ my $now;
+ # sub second timestamping needs Time::HiRes
+ if($Time::HiRes::VERSION) {
+ my ($seconds, $usec) = gettimeofday();
+ my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
+ localtime($seconds);
+ $now = sprintf("%02d:%02d:%02d.%06d ", $hour, $min, $sec, $usec);
+ }
+ else {
+ my $seconds = time();
+ my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
+ localtime($seconds);
+ $now = sprintf("%02d:%02d:%02d ", $hour, $min, $sec);
+ }
+ if(open(LOGFILEFH, ">>$logfile")) {
+ print LOGFILEFH $now;
+ print LOGFILEFH @_;
+ close(LOGFILEFH);
+ }
+}
+
+sub ftpmsg {
+ # append to the server.input file
+ open(INPUT, ">>log/server$idstr.input") ||
+ logmsg "failed to open log/server$idstr.input\n";
+
+ print INPUT @_;
+ close(INPUT);
+
+ # use this, open->print->close system only to make the file
+ # open as little as possible, to make the test suite run
+ # better on windows/cygwin
+}
+
+
+sub sysread_or_die {
+ my $FH = shift;
+ my $scalar = shift;
+ my $length = shift;
+ my $fcaller;
+ my $lcaller;
+ my $result;
+
+ $result = sysread($$FH, $$scalar, $length);
+
+ if(not defined $result) {
+ ($fcaller, $lcaller) = (caller)[1,2];
+ logmsg "Failed to read input\n";
+ logmsg "Error: $srvrname server, sysread error: $!\n";
+ logmsg "Exited from sysread_or_die() at $fcaller " .
+ "line $lcaller. $srvrname server, sysread error: $!\n";
+ killsockfilters($proto, $ipvnum, $idnum, $verbose);
+ unlink($pidfile);
+ if($serverlogslocked) {
+ $serverlogslocked = 0;
+ clear_advisor_read_lock($SERVERLOGS_LOCK);
+ }
+ exit;
+ }
+ elsif($result == 0) {
+ ($fcaller, $lcaller) = (caller)[1,2];
+ logmsg "Failed to read input\n";
+ logmsg "Error: $srvrname server, read zero\n";
+ logmsg "Exited from sysread_or_die() at $fcaller " .
+ "line $lcaller. $srvrname server, read zero\n";
+ killsockfilters($proto, $ipvnum, $idnum, $verbose);
+ unlink($pidfile);
+ if($serverlogslocked) {
+ $serverlogslocked = 0;
+ clear_advisor_read_lock($SERVERLOGS_LOCK);
+ }
+ exit;
+ }
+
+ return $result;
+}
+
+sub startsf {
+ my $mainsockfcmd = "./server/sockfilt " .
+ "--ipv$ipvnum --port $port " .
+ "--pidfile \"$mainsockf_pidfile\" " .
+ "--logfile \"$mainsockf_logfile\"";
+ $sfpid = open2(*SFREAD, *SFWRITE, $mainsockfcmd);
+
+ print STDERR "$mainsockfcmd\n" if($verbose);
+
+ print SFWRITE "PING\n";
+ my $pong;
+ sysread_or_die(\*SFREAD, \$pong, 5);
+
+ if($pong !~ /^PONG/) {
+ logmsg "Failed sockfilt command: $mainsockfcmd\n";
+ killsockfilters($proto, $ipvnum, $idnum, $verbose);
+ unlink($pidfile);
+ if($serverlogslocked) {
+ $serverlogslocked = 0;
+ clear_advisor_read_lock($SERVERLOGS_LOCK);
+ }
+ die "Failed to start sockfilt!";
+ }
+}
+
+
+sub sockfilt {
+ my $l;
+ foreach $l (@_) {
+ printf SFWRITE "DATA\n%04x\n", length($l);
+ print SFWRITE $l;
+ }
+}
+
+
+sub sockfiltsecondary {
+ my $l;
+ foreach $l (@_) {
+ printf DWRITE "DATA\n%04x\n", length($l);
+ print DWRITE $l;
+ }
+}
+
+
+# Send data to the client on the control stream, which happens to be plain
+# stdout.
+
+sub sendcontrol {
+ if(!$ctrldelay) {
+ # spit it all out at once
+ sockfilt @_;
+ }
+ else {
+ my $a = join("", @_);
+ my @a = split("", $a);
+
+ for(@a) {
+ sockfilt $_;
+ select(undef, undef, undef, 0.01);
+ }
+ }
+ my $log;
+ foreach $log (@_) {
+ my $l = $log;
+ $l =~ s/[\r\n]//g;
+ logmsg "> \"$l\"\n";
+ }
+}
+
+# Send data to the client on the data stream
+
+sub senddata {
+ my $l;
+ foreach $l (@_) {
+ if(!$datadelay) {
+ # spit it all out at once
+ sockfiltsecondary $l;
+ }
+ else {
+ # pause between each byte
+ for (split(//,$l)) {
+ sockfiltsecondary $_;
+ select(undef, undef, undef, 0.01);
+ }
+ }
+ }
+}
+
+#**********************************************************************
+# protocolsetup initializes the 'displaytext' and 'commandfunc' hashes
+# for the given protocol. References to protocol command callbacks are
+# stored in 'commandfunc' hash, and text which will be returned to the
+# client before the command callback runs is stored in 'displaytext'.
+#
+sub protocolsetup {
+ my $proto = $_[0];
+
+ if($proto eq 'ftp') {
+ %commandfunc = (
+ 'PORT' => \&PORT_ftp,
+ 'EPRT' => \&PORT_ftp,
+ 'LIST' => \&LIST_ftp,
+ 'NLST' => \&NLST_ftp,
+ 'PASV' => \&PASV_ftp,
+ 'CWD' => \&CWD_ftp,
+ 'PWD' => \&PWD_ftp,
+ 'EPSV' => \&PASV_ftp,
+ 'RETR' => \&RETR_ftp,
+ 'SIZE' => \&SIZE_ftp,
+ 'REST' => \&REST_ftp,
+ 'STOR' => \&STOR_ftp,
+ 'APPE' => \&STOR_ftp, # append looks like upload
+ 'MDTM' => \&MDTM_ftp,
+ );
+ %displaytext = (
+ 'USER' => '331 We are happy you popped in!',
+ 'PASS' => '230 Welcome you silly person',
+ 'PORT' => '200 You said PORT - I say FINE',
+ 'TYPE' => '200 I modify TYPE as you wanted',
+ 'LIST' => '150 here comes a directory',
+ 'NLST' => '150 here comes a directory',
+ 'CWD' => '250 CWD command successful.',
+ 'SYST' => '215 UNIX Type: L8', # just fake something
+ 'QUIT' => '221 bye bye baby', # just reply something
+ 'MKD' => '257 Created your requested directory',
+ 'REST' => '350 Yeah yeah we set it there for you',
+ 'DELE' => '200 OK OK OK whatever you say',
+ 'RNFR' => '350 Received your order. Please provide more',
+ 'RNTO' => '250 Ok, thanks. File renaming completed.',
+ 'NOOP' => '200 Yes, I\'m very good at doing nothing.',
+ 'PBSZ' => '500 PBSZ not implemented',
+ 'PROT' => '500 PROT not implemented',
+ );
+ @welcome = (
+ '220- _ _ ____ _ '."\r\n",
+ '220- ___| | | | _ \| | '."\r\n",
+ '220- / __| | | | |_) | | '."\r\n",
+ '220- | (__| |_| | _ <| |___ '."\r\n",
+ '220 \___|\___/|_| \_\_____|'."\r\n"
+ );
+ }
+ elsif($proto eq 'pop3') {
+ %commandfunc = (
+ 'RETR' => \&RETR_pop3,
+ );
+ %displaytext = (
+ 'USER' => '+OK We are happy you popped in!',
+ 'PASS' => '+OK Access granted',
+ 'QUIT' => '+OK byebye',
+ );
+ @welcome = (
+ ' _ _ ____ _ '."\r\n",
+ ' ___| | | | _ \| | '."\r\n",
+ ' / __| | | | |_) | | '."\r\n",
+ ' | (__| |_| | _ <| |___ '."\r\n",
+ ' \___|\___/|_| \_\_____|'."\r\n",
+ '+OK cURL POP3 server ready to serve'."\r\n"
+ );
+ }
+ elsif($proto eq 'imap') {
+ %commandfunc = (
+ 'FETCH' => \&FETCH_imap,
+ 'SELECT' => \&SELECT_imap,
+ );
+ %displaytext = (
+ 'LOGIN' => ' OK We are happy you popped in!',
+ 'SELECT' => ' OK selection done',
+ 'LOGOUT' => ' OK thanks for the fish',
+ );
+ @welcome = (
+ ' _ _ ____ _ '."\r\n",
+ ' ___| | | | _ \| | '."\r\n",
+ ' / __| | | | |_) | | '."\r\n",
+ ' | (__| |_| | _ <| |___ '."\r\n",
+ ' \___|\___/|_| \_\_____|'."\r\n",
+ '* OK cURL IMAP server ready to serve'."\r\n"
+ );
+ }
+ elsif($proto eq 'smtp') {
+ %commandfunc = (
+ 'DATA' => \&DATA_smtp,
+ 'RCPT' => \&RCPT_smtp,
+ );
+ %displaytext = (
+ 'EHLO' => '230 We are happy you popped in!',
+ 'MAIL' => '200 Note taken',
+ 'RCPT' => '200 Receivers accepted',
+ 'QUIT' => '200 byebye',
+ );
+ @welcome = (
+ '220- _ _ ____ _ '."\r\n",
+ '220- ___| | | | _ \| | '."\r\n",
+ '220- / __| | | | |_) | | '."\r\n",
+ '220- | (__| |_| | _ <| |___ '."\r\n",
+ '220 \___|\___/|_| \_\_____|'."\r\n"
+ );
+ }
+}
+
+sub close_dataconn {
+ my ($closed)=@_; # non-zero if already disconnected
+
+ my $datapid = processexists($datasockf_pidfile);
+
+ if(!$closed) {
+ logmsg "* disconnect data connection\n";
+ if($datapid > 0) {
+ print DWRITE "DISC\n";
+ my $i;
+ sysread DREAD, $i, 5;
+ }
+ }
+ else {
+ logmsg "data connection already disconnected\n";
+ }
+ logmsg "=====> Closed data connection\n";
+
+ logmsg "* quit sockfilt for data (pid $datapid)\n";
+ if($datapid > 0) {
+ print DWRITE "QUIT\n";
+ waitpid($datapid, 0);
+ unlink($datasockf_pidfile) if(-f $datasockf_pidfile);
+ }
+}
+
+################
+################ SMTP commands
+################
+
+# what set by "RCPT"
+my $smtp_rcpt;
+
+sub DATA_smtp {
+ my $testno;
+
+ if($smtp_rcpt =~ /^TO:(.*)/) {
+ $testno = $1;
+ }
+ else {
+ return; # failure
+ }
+
+ if($testno eq "<verifiedserver>") {
+ sendcontrol "554 WE ROOLZ: $$\r\n";
+ return 0; # don't wait for data now
+ }
+ else {
+ $testno =~ s/^([^0-9]*)([0-9]+).*/$2/;
+ sendcontrol "354 Show me the mail\r\n";
+ }
+
+ logmsg "===> rcpt $testno was $smtp_rcpt\n";
+
+ my $filename = "log/upload.$testno";
+
+ logmsg "Store test number $testno in $filename\n";
+
+ open(FILE, ">$filename") ||
+ return 0; # failed to open output
+
+ my $line;
+ my $ulsize=0;
+ my $disc=0;
+ my $raw;
+ while (5 == (sysread \*SFREAD, $line, 5)) {
+ if($line eq "DATA\n") {
+ my $i;
+ my $eob;
+ sysread \*SFREAD, $i, 5;
+
+ my $size = 0;
+ if($i =~ /^([0-9a-fA-F]{4})\n/) {
+ $size = hex($1);
+ }
+
+ sysread \*SFREAD, $line, $size;
+
+ $ulsize += $size;
+ print FILE $line if(!$nosave);
+
+ $raw .= $line;
+ if($raw =~ /\x0d\x0a\x2e\x0d\x0a/) {
+ # end of data marker!
+ $eob = 1;
+ }
+ logmsg "> Appending $size bytes to file\n";
+ if($eob) {
+ logmsg "Found SMTP EOB marker\n";
+ last;
+ }
+ }
+ elsif($line eq "DISC\n") {
+ # disconnect!
+ $disc=1;
+ last;
+ }
+ else {
+ logmsg "No support for: $line";
+ last;
+ }
+ }
+ if($nosave) {
+ print FILE "$ulsize bytes would've been stored here\n";
+ }
+ close(FILE);
+ sendcontrol "250 OK, data received!\r\n";
+ logmsg "received $ulsize bytes upload\n";
+
+}
+
+sub RCPT_smtp {
+ my ($args) = @_;
+
+ $smtp_rcpt = $args;
+}
+
+################
+################ IMAP commands
+################
+
+# global to allow the command functions to read it
+my $cmdid;
+
+# what was picked by SELECT
+my $selected;
+
+sub SELECT_imap {
+ my ($testno) = @_;
+ my @data;
+ my $size;
+
+ logmsg "SELECT_imap got test $testno\n";
+
+ $selected = $testno;
+
+ return 0;
+}
+
+
+sub FETCH_imap {
+ my ($testno) = @_;
+ my @data;
+ my $size;
+
+ logmsg "FETCH_imap got test $testno\n";
+
+ $testno = $selected;
+
+ if($testno =~ /^verifiedserver$/) {
+ # this is the secret command that verifies that this actually is
+ # the curl test server
+ my $response = "WE ROOLZ: $$\r\n";
+ if($verbose) {
+ print STDERR "FTPD: We returned proof we are the test server\n";
+ }
+ $data[0] = $response;
+ logmsg "return proof we are we\n";
+ }
+ else {
+ logmsg "retrieve a mail\n";
+
+ $testno =~ s/^([^0-9]*)//;
+ my $testpart = "";
+ if ($testno > 10000) {
+ $testpart = $testno % 10000;
+ $testno = int($testno / 10000);
+ }
+
+ # send mail content
+ loadtest("$srcdir/data/test$testno");
+
+ @data = getpart("reply", "data$testpart");
+ }
+
+ for (@data) {
+ $size += length($_);
+ }
+
+ sendcontrol "* FETCH starts {$size}\r\n";
+
+ for my $d (@data) {
+ sendcontrol $d;
+ }
+
+ sendcontrol "$cmdid OK FETCH completed\r\n";
+
+ return 0;
+}
+
+################
+################ POP3 commands
+################
+
+sub RETR_pop3 {
+ my ($testno) = @_;
+ my @data;
+
+ if($testno =~ /^verifiedserver$/) {
+ # this is the secret command that verifies that this actually is
+ # the curl test server
+ my $response = "WE ROOLZ: $$\r\n";
+ if($verbose) {
+ print STDERR "FTPD: We returned proof we are the test server\n";
+ }
+ $data[0] = $response;
+ logmsg "return proof we are we\n";
+ }
+ else {
+ logmsg "retrieve a mail\n";
+
+ $testno =~ s/^([^0-9]*)//;
+ my $testpart = "";
+ if ($testno > 10000) {
+ $testpart = $testno % 10000;
+ $testno = int($testno / 10000);
+ }
+
+ # send mail content
+ loadtest("$srcdir/data/test$testno");
+
+ @data = getpart("reply", "data$testpart");
+ }
+
+ sendcontrol "+OK Mail transfer starts\r\n";
+
+ for my $d (@data) {
+ sendcontrol $d;
+ }
+
+ # end with the magic 5-byte end of mail marker
+ sendcontrol "\r\n.\r\n";
+
+ return 0;
+}
+
+################
+################ FTP commands
+################
+my $rest=0;
+sub REST_ftp {
+ $rest = $_[0];
+ logmsg "Set REST position to $rest\n"
+}
+
+sub switch_directory_goto {
+ my $target_dir = $_;
+
+ if(!$ftptargetdir) {
+ $ftptargetdir = "/";
+ }
+
+ if($target_dir eq "") {
+ $ftptargetdir = "/";
+ }
+ elsif($target_dir eq "..") {
+ if($ftptargetdir eq "/") {
+ $ftptargetdir = "/";
+ }
+ else {
+ $ftptargetdir =~ s/[[:alnum:]]+\/$//;
+ }
+ }
+ else {
+ $ftptargetdir .= $target_dir . "/";
+ }
+}
+
+sub switch_directory {
+ my $target_dir = $_[0];
+
+ if($target_dir eq "/") {
+ $ftptargetdir = "/";
+ }
+ else {
+ my @dirs = split("/", $target_dir);
+ for(@dirs) {
+ switch_directory_goto($_);
+ }
+ }
+}
+
+sub CWD_ftp {
+ my ($folder, $fullcommand) = $_[0];
+ switch_directory($folder);
+ if($ftptargetdir =~ /^\/fully_simulated/) {
+ $ftplistparserstate = "enabled";
+ }
+ else {
+ undef $ftplistparserstate;
+ }
+}
+
+sub PWD_ftp {
+ my $mydir;
+ $mydir = $ftptargetdir ? $ftptargetdir : "/";
+
+ if($mydir ne "/") {
+ $mydir =~ s/\/$//;
+ }
+ sendcontrol "257 \"$mydir\" is current directory\r\n";
+}
+
+sub LIST_ftp {
+ # print "150 ASCII data connection for /bin/ls (193.15.23.1,59196) (0 bytes)\r\n";
+
+# this is a built-in fake-dir ;-)
+my @ftpdir=("total 20\r\n",
+"drwxr-xr-x 8 98 98 512 Oct 22 13:06 .\r\n",
+"drwxr-xr-x 8 98 98 512 Oct 22 13:06 ..\r\n",
+"drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT\r\n",
+"-r--r--r-- 1 0 1 35 Jul 16 1996 README\r\n",
+"lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin\r\n",
+"dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev\r\n",
+"drwxrwxrwx 2 98 98 512 May 29 16:04 download.html\r\n",
+"dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc\r\n",
+"drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub\r\n",
+"dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr\r\n");
+
+ if($ftplistparserstate) {
+ @ftpdir = ftp_contentlist($ftptargetdir);
+ }
+
+ logmsg "pass LIST data on data connection\n";
+ for(@ftpdir) {
+ senddata $_;
+ }
+ close_dataconn(0);
+ sendcontrol "226 ASCII transfer complete\r\n";
+ return 0;
+}
+
+sub NLST_ftp {
+ my @ftpdir=("file", "with space", "fake", "..", " ..", "funny", "README");
+ logmsg "pass NLST data on data connection\n";
+ for(@ftpdir) {
+ senddata "$_\r\n";
+ }
+ close_dataconn(0);
+ sendcontrol "226 ASCII transfer complete\r\n";
+ return 0;
+}
+
+sub MDTM_ftp {
+ my $testno = $_[0];
+ my $testpart = "";
+ if ($testno > 10000) {
+ $testpart = $testno % 10000;
+ $testno = int($testno / 10000);
+ }
+
+ loadtest("$srcdir/data/test$testno");
+
+ my @data = getpart("reply", "mdtm");
+
+ my $reply = $data[0];
+ chomp $reply if($reply);
+
+ if($reply && ($reply =~ /^[+-]?\d+$/) && ($reply < 0)) {
+ sendcontrol "550 $testno: no such file.\r\n";
+ }
+ elsif($reply) {
+ sendcontrol "$reply\r\n";
+ }
+ else {
+ sendcontrol "500 MDTM: no such command.\r\n";
+ }
+ return 0;
+}
+
+sub SIZE_ftp {
+ my $testno = $_[0];
+ if($ftplistparserstate) {
+ my $size = wildcard_filesize($ftptargetdir, $testno);
+ if($size == -1) {
+ sendcontrol "550 $testno: No such file or directory.\r\n";
+ }
+ else {
+ sendcontrol "213 $size\r\n";
+ }
+ return 0;
+ }
+
+ if($testno =~ /^verifiedserver$/) {
+ my $response = "WE ROOLZ: $$\r\n";
+ my $size = length($response);
+ sendcontrol "213 $size\r\n";
+ return 0;
+ }
+
+ if($testno =~ /(\d+)\/?$/) {
+ $testno = $1;
+ }
+ else {
+ print STDERR "SIZE_ftp: invalid test number: $testno\n";
+ return 1;
+ }
+
+ my $testpart = "";
+ if($testno > 10000) {
+ $testpart = $testno % 10000;
+ $testno = int($testno / 10000);
+ }
+
+ loadtest("$srcdir/data/test$testno");
+
+ my @data = getpart("reply", "size");
+
+ my $size = $data[0];
+
+ if($size) {
+ if($size > -1) {
+ sendcontrol "213 $size\r\n";
+ }
+ else {
+ sendcontrol "550 $testno: No such file or directory.\r\n";
+ }
+ }
+ else {
+ $size=0;
+ @data = getpart("reply", "data$testpart");
+ for(@data) {
+ $size += length($_);
+ }
+ if($size) {
+ sendcontrol "213 $size\r\n";
+ }
+ else {
+ sendcontrol "550 $testno: No such file or directory.\r\n";
+ }
+ }
+ return 0;
+}
+
+sub RETR_ftp {
+ my ($testno) = @_;
+
+ if($ftplistparserstate) {
+ my @content = wildcard_getfile($ftptargetdir, $testno);
+ if($content[0] == -1) {
+ #file not found
+ }
+ else {
+ my $size = length $content[1];
+ sendcontrol "150 Binary data connection for $testno ($size bytes).\r\n",
+ senddata $content[1];
+ close_dataconn(0);
+ sendcontrol "226 File transfer complete\r\n";
+ }
+ return 0;
+ }
+
+ if($testno =~ /^verifiedserver$/) {
+ # this is the secret command that verifies that this actually is
+ # the curl test server
+ my $response = "WE ROOLZ: $$\r\n";
+ my $len = length($response);
+ sendcontrol "150 Binary junk ($len bytes).\r\n";
+ senddata "WE ROOLZ: $$\r\n";
+ close_dataconn(0);
+ sendcontrol "226 File transfer complete\r\n";
+ if($verbose) {
+ print STDERR "FTPD: We returned proof we are the test server\n";
+ }
+ return 0;
+ }
+
+ $testno =~ s/^([^0-9]*)//;
+ my $testpart = "";
+ if ($testno > 10000) {
+ $testpart = $testno % 10000;
+ $testno = int($testno / 10000);
+ }
+
+ loadtest("$srcdir/data/test$testno");
+
+ my @data = getpart("reply", "data$testpart");
+
+ my $size=0;
+ for(@data) {
+ $size += length($_);
+ }
+
+ my %hash = getpartattr("reply", "data$testpart");
+
+ if($size || $hash{'sendzero'}) {
+
+ if($rest) {
+ # move read pointer forward
+ $size -= $rest;
+ logmsg "REST $rest was removed from size, makes $size left\n";
+ $rest = 0; # reset REST offset again
+ }
+ if($retrweirdo) {
+ sendcontrol "150 Binary data connection for $testno () ($size bytes).\r\n",
+ "226 File transfer complete\r\n";
+
+ for(@data) {
+ my $send = $_;
+ senddata $send;
+ }
+ close_dataconn(0);
+ $retrweirdo=0; # switch off the weirdo again!
+ }
+ else {
+ my $sz = "($size bytes)";
+ if($retrnosize) {
+ $sz = "size?";
+ }
+
+ sendcontrol "150 Binary data connection for $testno () $sz.\r\n";
+
+ for(@data) {
+ my $send = $_;
+ senddata $send;
+ }
+ close_dataconn(0);
+ sendcontrol "226 File transfer complete\r\n";
+ }
+ }
+ else {
+ sendcontrol "550 $testno: No such file or directory.\r\n";
+ }
+ return 0;
+}
+
+sub STOR_ftp {
+ my $testno=$_[0];
+
+ my $filename = "log/upload.$testno";
+
+ logmsg "STOR test number $testno in $filename\n";
+
+ sendcontrol "125 Gimme gimme gimme!\r\n";
+
+ open(FILE, ">$filename") ||
+ return 0; # failed to open output
+
+ my $line;
+ my $ulsize=0;
+ my $disc=0;
+ while (5 == (sysread DREAD, $line, 5)) {
+ if($line eq "DATA\n") {
+ my $i;
+ sysread DREAD, $i, 5;
+
+ my $size = 0;
+ if($i =~ /^([0-9a-fA-F]{4})\n/) {
+ $size = hex($1);
+ }
+
+ sysread DREAD, $line, $size;
+
+ #print STDERR " GOT: $size bytes\n";
+
+ $ulsize += $size;
+ print FILE $line if(!$nosave);
+ logmsg "> Appending $size bytes to file\n";
+ }
+ elsif($line eq "DISC\n") {
+ # disconnect!
+ $disc=1;
+ last;
+ }
+ else {
+ logmsg "No support for: $line";
+ last;
+ }
+ }
+ if($nosave) {
+ print FILE "$ulsize bytes would've been stored here\n";
+ }
+ close(FILE);
+ close_dataconn($disc);
+ logmsg "received $ulsize bytes upload\n";
+ sendcontrol "226 File transfer complete\r\n";
+ return 0;
+}
+
+sub PASV_ftp {
+ my ($arg, $cmd)=@_;
+ my $pasvport;
+
+ # kill previous data connection sockfilt when alive
+ killsockfilters($proto, $ipvnum, $idnum, $verbose, 'data');
+
+ # We fire up a new sockfilt to do the data transfer for us.
+ my $datasockfcmd = "./server/sockfilt " .
+ "--ipv$ipvnum --port 0 " .
+ "--pidfile \"$datasockf_pidfile\" " .
+ "--logfile \"$datasockf_logfile\"";
+ $slavepid = open2(\*DREAD, \*DWRITE, $datasockfcmd);
+
+ print DWRITE "PING\n";
+ my $pong;
+ sysread_or_die(\*DREAD, \$pong, 5);
+
+ if($pong !~ /^PONG/) {
+ logmsg "failed to run sockfilt for data connection\n";
+ killsockfilters($proto, $ipvnum, $idnum, $verbose, 'data');
+ sendcontrol "500 no free ports!\r\n";
+ return 0;
+ }
+
+ logmsg "Run sockfilt for data on pid $slavepid\n";
+
+ # Find out what port we listen on
+ my $i;
+ print DWRITE "PORT\n";
+
+ # READ the response code
+ sysread_or_die(\*DREAD, \$i, 5);
+
+ # READ the response size
+ sysread_or_die(\*DREAD, \$i, 5);
+
+ my $size = 0;
+ if($i =~ /^([0-9a-fA-F]{4})\n/) {
+ $size = hex($1);
+ }
+
+ # READ the response data
+ sysread_or_die(\*DREAD, \$i, $size);
+
+ # The data is in the format
+ # IPvX/NNN
+
+ if($i =~ /IPv(\d)\/(\d+)/) {
+ # FIX: deal with IP protocol version
+ $pasvport = $2;
+ }
+
+ if($cmd ne "EPSV") {
+ # PASV reply
+ my $p=$listenaddr;
+ $p =~ s/\./,/g;
+ if($pasvbadip) {
+ $p="1,2,3,4";
+ }
+ sendcontrol sprintf("227 Entering Passive Mode ($p,%d,%d)\n",
+ ($pasvport/256), ($pasvport%256));
+ }
+ else {
+ # EPSV reply
+ sendcontrol sprintf("229 Entering Passive Mode (|||%d|)\n", $pasvport);
+ }
+
+ eval {
+ local $SIG{ALRM} = sub { die "alarm\n" };
+
+ # assume swift operations unless explicitly slow
+ alarm ($datadelay?20:10);
+
+ # Wait for 'CNCT'
+ my $input;
+
+ while(sysread(DREAD, $input, 5)) {
+
+ if($input !~ /^CNCT/) {
+ # we wait for a connected client
+ logmsg "Odd, we got $input from client\n";
+ next;
+ }
+ logmsg "====> Client DATA connect\n";
+ last;
+ }
+ alarm 0;
+ };
+ if ($@) {
+ # timed out
+ logmsg "$srvrname server timed out awaiting data connection ".
+ "on port $pasvport\n";
+ logmsg "accept failed or connection not even attempted\n";
+ killsockfilters($proto, $ipvnum, $idnum, $verbose, 'data');
+ return;
+ }
+ else {
+ logmsg "data connection setup on port $pasvport\n";
+ }
+
+ return;
+}
+
+# Support both PORT and EPRT here. Consider LPRT too.
+
+sub PORT_ftp {
+ my ($arg, $cmd) = @_;
+ my $port;
+ my $addr;
+
+ # We always ignore the given IP and use localhost.
+
+ if($cmd eq "PORT") {
+ if($arg !~ /(\d+),(\d+),(\d+),(\d+),(\d+),(\d+)/) {
+ logmsg "bad PORT-line: $arg\n";
+ sendcontrol "500 silly you, go away\r\n";
+ return 0;
+ }
+ $port = ($5<<8)+$6;
+ $addr = "$1.$2.$3.$4";
+ }
+ # EPRT |2|::1|49706|
+ elsif(($cmd eq "EPRT") && ($grok_eprt)) {
+ if($arg !~ /(\d+)\|([^\|]+)\|(\d+)/) {
+ sendcontrol "500 silly you, go away\r\n";
+ return 0;
+ }
+ sendcontrol "200 Thanks for dropping by. We contact you later\r\n";
+ $port = $3;
+ $addr = $2;
+ }
+ else {
+ sendcontrol "500 we don't like $cmd now\r\n";
+ return 0;
+ }
+
+ if(!$port || $port > 65535) {
+ print STDERR "very illegal PORT number: $port\n";
+ return 1;
+ }
+
+ # We fire up a new sockfilt to do the data transfer for us.
+ my $datasockfcmd = "./server/sockfilt " .
+ "--ipv$ipvnum --connect $port --addr \"$addr\" " .
+ "--pidfile \"$datasockf_pidfile\" " .
+ "--logfile \"$datasockf_logfile\"";
+ $slavepid = open2(\*DREAD, \*DWRITE, $datasockfcmd);
+
+ print STDERR "$datasockfcmd\n" if($verbose);
+
+ print DWRITE "PING\n";
+ my $pong;
+ sysread_or_die(\*DREAD, \$pong, 5);
+
+ if($pong !~ /^PONG/) {
+ logmsg "Failed sockfilt for data connection\n";
+ killsockfilters($proto, $ipvnum, $idnum, $verbose, 'data');
+ }
+
+ logmsg "====> Client DATA connect to port $port\n";
+
+ return;
+}
+
+#**********************************************************************
+# customize configures test server operation for each curl test, reading
+# configuration commands/parameters from server commands file each time
+# a new client control connection is established with the test server.
+# On success returns 1, otherwise zero.
+#
+sub customize {
+ $ctrldelay = 0; # default is no throttling of the ctrl stream
+ $datadelay = 0; # default is no throttling of the data stream
+ $retrweirdo = 0; # default is no use of RETRWEIRDO
+ $retrnosize = 0; # default is no use of RETRNOSIZE
+ $pasvbadip = 0; # default is no use of PASVBADIP
+ $nosave = 0; # default is to actually save uploaded data to file
+ %customreply = (); #
+ %customcount = (); #
+ %delayreply = (); #
+
+ open(CUSTOM, "<log/ftpserver.cmd") ||
+ return 1;
+
+ logmsg "FTPD: Getting commands from log/ftpserver.cmd\n";
+
+ while(<CUSTOM>) {
+ if($_ =~ /REPLY ([A-Za-z0-9+\/=]+) (.*)/) {
+ $customreply{$1}=eval "qq{$2}";
+ logmsg "FTPD: set custom reply for $1\n";
+ }
+ if($_ =~ /COUNT ([A-Z]+) (.*)/) {
+ # we blank the customreply for this command when having
+ # been used this number of times
+ $customcount{$1}=$2;
+ logmsg "FTPD: blank custom reply for $1 after $2 uses\n";
+ }
+ elsif($_ =~ /DELAY ([A-Z]+) (\d*)/) {
+ $delayreply{$1}=$2;
+ logmsg "FTPD: delay reply for $1 with $2 seconds\n";
+ }
+ elsif($_ =~ /SLOWDOWN/) {
+ $ctrldelay=1;
+ $datadelay=1;
+ logmsg "FTPD: send response with 0.01 sec delay between each byte\n";
+ }
+ elsif($_ =~ /RETRWEIRDO/) {
+ logmsg "FTPD: instructed to use RETRWEIRDO\n";
+ $retrweirdo=1;
+ }
+ elsif($_ =~ /RETRNOSIZE/) {
+ logmsg "FTPD: instructed to use RETRNOSIZE\n";
+ $retrnosize=1;
+ }
+ elsif($_ =~ /PASVBADIP/) {
+ logmsg "FTPD: instructed to use PASVBADIP\n";
+ $pasvbadip=1;
+ }
+ elsif($_ =~ /NOSAVE/) {
+ # don't actually store the file we upload - to be used when
+ # uploading insanely huge amounts
+ $nosave = 1;
+ logmsg "FTPD: NOSAVE prevents saving of uploaded data\n";
+ }
+ }
+ close(CUSTOM);
+}
+
+#----------------------------------------------------------------------
+#----------------------------------------------------------------------
+#--------------------------- END OF SUBS ----------------------------
+#----------------------------------------------------------------------
+#----------------------------------------------------------------------
+
+#**********************************************************************
+# Parse command line options
+#
+# Options:
+#
+# --verbose # verbose
+# --srcdir # source directory
+# --id # server instance number
+# --proto # server protocol
+# --pidfile # server pid file
+# --logfile # server log file
+# --ipv4 # server IP version 4
+# --ipv6 # server IP version 6
+# --port # server listener port
+# --addr # server address for listener port binding
+#
+while(@ARGV) {
+ if($ARGV[0] eq '--verbose') {
+ $verbose = 1;
+ }
+ elsif($ARGV[0] eq '--srcdir') {
+ if($ARGV[1]) {
+ $srcdir = $ARGV[1];
+ shift @ARGV;
+ }
+ }
+ elsif($ARGV[0] eq '--id') {
+ if($ARGV[1] && ($ARGV[1] =~ /^(\d+)$/)) {
+ $idnum = $1 if($1 > 0);
+ shift @ARGV;
+ }
+ }
+ elsif($ARGV[0] eq '--proto') {
+ if($ARGV[1] && ($ARGV[1] =~ /^(ftp|imap|pop3|smtp)$/)) {
+ $proto = $1;
+ shift @ARGV;
+ }
+ else {
+ die "unsupported protocol $ARGV[1]";
+ }
+ }
+ elsif($ARGV[0] eq '--pidfile') {
+ if($ARGV[1]) {
+ $pidfile = $ARGV[1];
+ shift @ARGV;
+ }
+ }
+ elsif($ARGV[0] eq '--logfile') {
+ if($ARGV[1]) {
+ $logfile = $ARGV[1];
+ shift @ARGV;
+ }
+ }
+ elsif($ARGV[0] eq '--ipv4') {
+ $ipvnum = 4;
+ $listenaddr = '127.0.0.1' if($listenaddr eq '::1');
+ $grok_eprt = 0;
+ }
+ elsif($ARGV[0] eq '--ipv6') {
+ $ipvnum = 6;
+ $listenaddr = '::1' if($listenaddr eq '127.0.0.1');
+ $grok_eprt = 1;
+ }
+ elsif($ARGV[0] eq '--port') {
+ if($ARGV[1] && ($ARGV[1] =~ /^(\d+)$/)) {
+ $port = $1 if($1 > 1024);
+ shift @ARGV;
+ }
+ }
+ elsif($ARGV[0] eq '--addr') {
+ if($ARGV[1]) {
+ my $tmpstr = $ARGV[1];
+ if($tmpstr =~ /^(\d\d?\d?)\.(\d\d?\d?)\.(\d\d?\d?)\.(\d\d?\d?)$/) {
+ $listenaddr = "$1.$2.$3.$4" if($ipvnum == 4);
+ }
+ elsif($ipvnum == 6) {
+ $listenaddr = $tmpstr;
+ $listenaddr =~ s/^\[(.*)\]$/$1/;
+ }
+ shift @ARGV;
+ }
+ }
+ else {
+ print STDERR "\nWarning: ftpserver.pl unknown parameter: $ARGV[0]\n";
+ }
+ shift @ARGV;
+}
+
+#***************************************************************************
+# Initialize command line option dependant variables
+#
+
+if(!$srcdir) {
+ $srcdir = $ENV{'srcdir'} || '.';
+}
+if(!$pidfile) {
+ $pidfile = "$path/". server_pidfilename($proto, $ipvnum, $idnum);
+}
+if(!$logfile) {
+ $logfile = server_logfilename($logdir, $proto, $ipvnum, $idnum);
+}
+
+$mainsockf_pidfile = "$path/".
+ mainsockf_pidfilename($proto, $ipvnum, $idnum);
+$mainsockf_logfile =
+ mainsockf_logfilename($logdir, $proto, $ipvnum, $idnum);
+
+if($proto eq 'ftp') {
+ $datasockf_pidfile = "$path/".
+ datasockf_pidfilename($proto, $ipvnum, $idnum);
+ $datasockf_logfile =
+ datasockf_logfilename($logdir, $proto, $ipvnum, $idnum);
+}
+
+$srvrname = servername_str($proto, $ipvnum, $idnum);
+
+$idstr = "$idnum" if($idnum > 1);
+
+protocolsetup($proto);
+
+$SIG{INT} = \&exit_signal_handler;
+$SIG{TERM} = \&exit_signal_handler;
+
+startsf();
+
+logmsg sprintf("%s server listens on port IPv${ipvnum}/${port}\n", uc($proto));
+
+open(PID, ">$pidfile");
+print PID $$."\n";
+close(PID);
+
+logmsg("logged pid $$ in $pidfile\n");
+
+
+while(1) {
+ #
+ # We read 'sockfilt' commands.
+ #
+ my $input;
+
+ logmsg "Awaiting input\n";
+ sysread_or_die(\*SFREAD, \$input, 5);
+
+ if($input !~ /^CNCT/) {
+ # we wait for a connected client
+ logmsg "sockfilt said: $input";
+ next;
+ }
+ logmsg "====> Client connect\n";
+
+ set_advisor_read_lock($SERVERLOGS_LOCK);
+ $serverlogslocked = 1;
+
+ # flush data:
+ $| = 1;
+
+ killsockfilters($proto, $ipvnum, $idnum, $verbose, 'data');
+
+ &customize(); # read test control instructions
+
+ sendcontrol @welcome;
+
+ #remove global variables from last connection
+ if($ftplistparserstate) {
+ undef $ftplistparserstate;
+ }
+ if($ftptargetdir) {
+ undef $ftptargetdir;
+ }
+
+ if($verbose) {
+ for(@welcome) {
+ print STDERR "OUT: $_";
+ }
+ }
+
+ while(1) {
+ my $i;
+
+ # Now we expect to read DATA\n[hex size]\n[prot], where the [prot]
+ # part only is FTP lingo.
+
+ # COMMAND
+ sysread_or_die(\*SFREAD, \$i, 5);
+
+ if($i !~ /^DATA/) {
+ logmsg "sockfilt said $i";
+ if($i =~ /^DISC/) {
+ # disconnect
+ last;
+ }
+ next;
+ }
+
+ # SIZE of data
+ sysread_or_die(\*SFREAD, \$i, 5);
+
+ my $size = 0;
+ if($i =~ /^([0-9a-fA-F]{4})\n/) {
+ $size = hex($1);
+ }
+
+ # data
+ sysread SFREAD, $_, $size;
+
+ ftpmsg $_;
+
+ # Remove trailing CRLF.
+ s/[\n\r]+$//;
+
+ my $FTPCMD;
+ my $FTPARG;
+ my $full=$_;
+ if($proto eq "imap") {
+ # IMAP is different with its identifier first on the command line
+ unless (m/^([^ ]+) ([^ ]+) (.*)/ ||
+ m/^([^ ]+) ([^ ]+)/) {
+ sendcontrol "$1 '$_': command not understood.\r\n";
+ last;
+ }
+ $cmdid=$1; # set the global variable
+ $FTPCMD=$2;
+ $FTPARG=$3;
+ }
+ elsif (m/^([A-Z]{3,4})(\s(.*))?$/i) {
+ $FTPCMD=$1;
+ $FTPARG=$3;
+ }
+ elsif($proto eq "smtp" && m/^[A-Z0-9+\/]{0,512}={0,2}$/i) {
+ # SMTP long "commands" are base64 authentication data.
+ $FTPCMD=$_;
+ $FTPARG="";
+ }
+ else {
+ sendcontrol "500 '$_': command not understood.\r\n";
+ last;
+ }
+
+ logmsg "< \"$full\"\n";
+
+ if($verbose) {
+ print STDERR "IN: $full\n";
+ }
+
+ my $delay = $delayreply{$FTPCMD};
+ if($delay) {
+ # just go sleep this many seconds!
+ logmsg("Sleep for $delay seconds\n");
+ my $twentieths = $delay * 20;
+ while($twentieths--) {
+ select(undef, undef, undef, 0.05) unless($got_exit_signal);
+ }
+ }
+
+ my $text;
+ $text = $customreply{$FTPCMD};
+ my $fake = $text;
+
+ if($text && ($text ne "")) {
+ if($customcount{$FTPCMD} && (!--$customcount{$FTPCMD})) {
+ # used enough number of times, now blank the customreply
+ $customreply{$FTPCMD}="";
+ }
+ }
+ else {
+ $text = $displaytext{$FTPCMD};
+ }
+ my $check;
+ if($text && ($text ne "")) {
+ if($cmdid && ($cmdid ne "")) {
+ sendcontrol "$cmdid$text\r\n";
+ }
+ else {
+ sendcontrol "$text\r\n";
+ }
+ }
+ else {
+ $check=1; # no response yet
+ }
+
+ unless($fake && ($fake ne "")) {
+ # only perform this if we're not faking a reply
+ my $func = $commandfunc{$FTPCMD};
+ if($func) {
+ &$func($FTPARG, $FTPCMD);
+ $check=0; # taken care of
+ }
+ }
+
+ if($check) {
+ logmsg "$FTPCMD wasn't handled!\n";
+ sendcontrol "500 $FTPCMD is not dealt with!\r\n";
+ }
+
+ } # while(1)
+ logmsg "====> Client disconnected\n";
+
+ if($serverlogslocked) {
+ $serverlogslocked = 0;
+ clear_advisor_read_lock($SERVERLOGS_LOCK);
+ }
+}
+
+killsockfilters($proto, $ipvnum, $idnum, $verbose);
+unlink($pidfile);
+if($serverlogslocked) {
+ $serverlogslocked = 0;
+ clear_advisor_read_lock($SERVERLOGS_LOCK);
+}
+
+exit;
diff --git a/tests/getpart.pm b/tests/getpart.pm
new file mode 100644
index 0000000..42e3b2b
--- /dev/null
+++ b/tests/getpart.pm
@@ -0,0 +1,224 @@
+
+#use strict;
+
+my @xml;
+
+my $warning=0;
+my $trace=0;
+
+sub decode_base64 {
+ tr:A-Za-z0-9+/::cd; # remove non-base64 chars
+ tr:A-Za-z0-9+/: -_:; # convert to uuencoded format
+ my $len = pack("c", 32 + 0.75*length); # compute length byte
+ return unpack("u", $len . $_); # uudecode and print
+}
+
+sub getpartattr {
+ # if $part is undefined (ie only one argument) then
+ # return the attributes of the section
+
+ my ($section, $part)=@_;
+
+ my %hash;
+ my $inside=0;
+
+ # print "Section: $section, part: $part\n";
+
+ for(@xml) {
+ # print "$inside: $_";
+ if(!$inside && ($_ =~ /^ *\<$section/)) {
+ $inside++;
+ }
+ if((1 ==$inside) && ( ($_ =~ /^ *\<$part([^>]*)/) ||
+ !(defined($part)) )
+ ) {
+ $inside++;
+ my $attr=$1;
+
+ while($attr =~ s/ *([^=]*)= *(\"([^\"]*)\"|([^\"> ]*))//) {
+ my ($var, $cont)=($1, $2);
+ $cont =~ s/^\"(.*)\"$/$1/;
+ $hash{$var}=$cont;
+ }
+ last;
+ }
+ elsif((2 ==$inside) && ($_ =~ /^ *\<\/$part/)) {
+ $inside--;
+ }
+ }
+ return %hash;
+}
+
+sub getpart {
+ my ($section, $part)=@_;
+
+ my @this;
+ my $inside=0;
+ my $base64=0;
+
+ # print "Section: $section, part: $part\n";
+
+ for(@xml) {
+ # print "$inside: $_";
+ if(!$inside && ($_ =~ /^ *\<$section/)) {
+ $inside++;
+ }
+ elsif((1 ==$inside) && ($_ =~ /^ *\<$part[ \>]/)) {
+ if($_ =~ /$part [^>]*base64=/) {
+ # attempt to detect base64 encoded parts
+ $base64=1;
+ }
+ $inside++;
+ }
+ elsif((2 ==$inside) && ($_ =~ /^ *\<\/$part/)) {
+ $inside--;
+ }
+ elsif((1==$inside) && ($_ =~ /^ *\<\/$section/)) {
+ if($trace) {
+ print STDERR "*** getpart.pm: $section/$part returned data!\n";
+ }
+ if(!@this && $warning) {
+ print STDERR "*** getpart.pm: $section/$part returned empty!\n";
+ }
+ if($base64) {
+ # decode the whole array before returning it!
+ for(@this) {
+ my $decoded = decode_base64($_);
+ $_ = $decoded;
+ }
+ }
+ return @this;
+ }
+ elsif(2==$inside) {
+ push @this, $_;
+ }
+ }
+ if($warning) {
+ print STDERR "*** getpart.pm: $section/$part returned empty!\n";
+ }
+ return @this; #empty!
+}
+
+sub loadtest {
+ my ($file)=@_;
+
+ undef @xml;
+
+ if(open(XML, "<$file")) {
+ binmode XML; # for crapage systems, use binary
+ while(<XML>) {
+ push @xml, $_;
+ }
+ close(XML);
+ }
+ else {
+ # failure
+ if($warning) {
+ print STDERR "file $file wouldn't open!\n";
+ }
+ return 1;
+ }
+ return 0;
+}
+
+#
+# Strip off all lines that match the specified pattern and return
+# the new array.
+#
+
+sub striparray {
+ my ($pattern, $arrayref) = @_;
+
+ my @array;
+
+ for(@$arrayref) {
+ if($_ !~ /$pattern/) {
+ push @array, $_;
+ }
+ }
+ return @array;
+}
+
+#
+# pass array *REFERENCES* !
+#
+sub compareparts {
+ my ($firstref, $secondref)=@_;
+
+ my $first = join("", @$firstref);
+ my $second = join("", @$secondref);
+
+ # we cannot compare arrays index per index since with the base64 chunks,
+ # they may not be "evenly" distributed
+
+ # NOTE: this no longer strips off carriage returns from the arrays. Is that
+ # really necessary? It ruins the testing of newlines. I believe it was once
+ # added to enable tests on win32.
+
+ if($first ne $second) {
+ return 1;
+ }
+
+ return 0;
+}
+
+#
+# Write a given array to the specified file
+#
+sub writearray {
+ my ($filename, $arrayref)=@_;
+
+ open(TEMP, ">$filename");
+ binmode(TEMP,":raw"); # cygwin fix by Kevin Roth
+ for(@$arrayref) {
+ print TEMP $_;
+ }
+ close(TEMP);
+}
+
+#
+# Load a specified file an return it as an array
+#
+sub loadarray {
+ my ($filename)=@_;
+ my @array;
+
+ open(TEMP, "<$filename");
+ while(<TEMP>) {
+ push @array, $_;
+ }
+ close(TEMP);
+ return @array;
+}
+
+# Given two array references, this function will store them in two temporary
+# files, run 'diff' on them, store the result and return the diff output!
+
+sub showdiff {
+ my ($logdir, $firstref, $secondref)=@_;
+
+ my $file1="$logdir/check-generated";
+ my $file2="$logdir/check-expected";
+
+ open(TEMP, ">$file1");
+ for(@$firstref) {
+ print TEMP $_;
+ }
+ close(TEMP);
+
+ open(TEMP, ">$file2");
+ for(@$secondref) {
+ print TEMP $_;
+ }
+ close(TEMP);
+ my @out = `diff -u $file2 $file1 2>/dev/null`;
+
+ if(!$out[0]) {
+ @out = `diff -c $file2 $file1 2>/dev/null`;
+ }
+
+ return @out;
+}
+
+
+1;
diff --git a/tests/httpserver.pl b/tests/httpserver.pl
new file mode 100755
index 0000000..37161f0
--- /dev/null
+++ b/tests/httpserver.pl
@@ -0,0 +1,118 @@
+#!/usr/bin/env perl
+#***************************************************************************
+# _ _ ____ _
+# Project ___| | | | _ \| |
+# / __| | | | |_) | |
+# | (__| |_| | _ <| |___
+# \___|\___/|_| \_\_____|
+#
+# Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+#
+# This software is licensed as described in the file COPYING, which
+# you should have received as part of this distribution. The terms
+# are also available at http://curl.haxx.se/docs/copyright.html.
+#
+# You may opt to use, copy, modify, merge, publish, distribute and/or sell
+# copies of the Software, and permit persons to whom the Software is
+# furnished to do so, under the terms of the COPYING file.
+#
+# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+# KIND, either express or implied.
+#
+#***************************************************************************
+
+BEGIN {
+ @INC=(@INC, $ENV{'srcdir'}, '.');
+}
+
+use strict;
+use warnings;
+
+use serverhelp qw(
+ server_pidfilename
+ server_logfilename
+ );
+
+my $verbose = 0; # set to 1 for debugging
+my $port = 8990; # just a default
+my $ipvnum = 4; # default IP version of http server
+my $idnum = 1; # dafault http server instance number
+my $proto = 'http'; # protocol the http server speaks
+my $pidfile; # http server pid file
+my $logfile; # http server log file
+my $srcdir;
+my $fork;
+my $gopher = 0;
+
+my $flags = "";
+my $path = '.';
+my $logdir = $path .'/log';
+
+while(@ARGV) {
+ if($ARGV[0] eq '--pidfile') {
+ if($ARGV[1]) {
+ $pidfile = $ARGV[1];
+ shift @ARGV;
+ }
+ }
+ elsif($ARGV[0] eq '--logfile') {
+ if($ARGV[1]) {
+ $logfile = $ARGV[1];
+ shift @ARGV;
+ }
+ }
+ elsif($ARGV[0] eq '--srcdir') {
+ if($ARGV[1]) {
+ $srcdir = $ARGV[1];
+ shift @ARGV;
+ }
+ }
+ elsif($ARGV[0] eq '--ipv4') {
+ $ipvnum = 4;
+ }
+ elsif($ARGV[0] eq '--ipv6') {
+ $ipvnum = 6;
+ }
+ elsif($ARGV[0] eq '--gopher') {
+ $gopher = 1;
+ }
+ elsif($ARGV[0] eq '--port') {
+ if($ARGV[1] =~ /^(\d+)$/) {
+ $port = $1;
+ shift @ARGV;
+ }
+ }
+ elsif($ARGV[0] eq '--id') {
+ if($ARGV[1] =~ /^(\d+)$/) {
+ $idnum = $1 if($1 > 0);
+ shift @ARGV;
+ }
+ }
+ elsif($ARGV[0] eq '--verbose') {
+ $verbose = 1;
+ }
+ elsif($ARGV[0] eq '--fork') {
+ $fork = $ARGV[0];
+ }
+ else {
+ print STDERR "\nWarning: httpserver.pl unknown parameter: $ARGV[0]\n";
+ }
+ shift @ARGV;
+}
+
+if(!$srcdir) {
+ $srcdir = $ENV{'srcdir'} || '.';
+}
+if(!$pidfile) {
+ $pidfile = "$path/". server_pidfilename($proto, $ipvnum, $idnum);
+}
+if(!$logfile) {
+ $logfile = server_logfilename($logdir, $proto, $ipvnum, $idnum);
+}
+
+$flags .= "--gopher " if($gopher);
+$flags .= "--fork " if(defined($fork));
+$flags .= "--pidfile \"$pidfile\" --logfile \"$logfile\" ";
+$flags .= "--ipv$ipvnum --port $port --srcdir \"$srcdir\"";
+
+exec("server/sws $flags");
diff --git a/tests/libtest/Makefile.am b/tests/libtest/Makefile.am
new file mode 100644
index 0000000..9c0d595
--- /dev/null
+++ b/tests/libtest/Makefile.am
@@ -0,0 +1,83 @@
+#***************************************************************************
+# _ _ ____ _
+# Project ___| | | | _ \| |
+# / __| | | | |_) | |
+# | (__| |_| | _ <| |___
+# \___|\___/|_| \_\_____|
+#
+# Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+#
+# This software is licensed as described in the file COPYING, which
+# you should have received as part of this distribution. The terms
+# are also available at http://curl.haxx.se/docs/copyright.html.
+#
+# You may opt to use, copy, modify, merge, publish, distribute and/or sell
+# copies of the Software, and permit persons to whom the Software is
+# furnished to do so, under the terms of the COPYING file.
+#
+# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+# KIND, either express or implied.
+#
+###########################################################################
+AUTOMAKE_OPTIONS = foreign nostdinc
+
+# Specify our include paths here, and do it relative to $(top_srcdir) and
+# $(top_builddir), to ensure that these paths which belong to the library
+# being currently built and tested are searched before the library which
+# might possibly already be installed in the system.
+#
+# $(top_builddir)/include/curl for generated curlbuild.h included from curl.h
+# $(top_builddir)/include for generated curlbuild.h included from lib/setup.h
+# $(top_srcdir)/include is for libcurl's external include files
+# $(top_builddir)/lib is for libcurl's generated lib/curl_config.h file
+# $(top_srcdir)/lib is for libcurl's lib/setup.h and other "borrowed" files
+# $(top_builddir)/ares is for in-tree c-ares's generated ares_build.h file
+# $(top_srcdir)/ares is for in-tree c-ares's external include files
+
+if USE_EMBEDDED_ARES
+INCLUDES = -I$(top_builddir)/include/curl \
+ -I$(top_builddir)/include \
+ -I$(top_srcdir)/include \
+ -I$(top_builddir)/lib \
+ -I$(top_srcdir)/lib \
+ -I$(top_builddir)/ares \
+ -I$(top_srcdir)/ares
+else
+INCLUDES = -I$(top_builddir)/include/curl \
+ -I$(top_builddir)/include \
+ -I$(top_srcdir)/include \
+ -I$(top_builddir)/lib \
+ -I$(top_srcdir)/lib
+endif
+
+EXTRA_DIST = test75.pl test307.pl test610.pl test613.pl test1013.pl \
+test1022.pl Makefile.inc
+
+# Dependencies (may need to be overriden)
+LDADD = $(top_builddir)/lib/libcurl.la @CURL_LIBS@
+DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+
+# Makefile.inc provides the source defines (TESTUTIL, SUPPORTFILES,
+# noinst_PROGRAMS, lib*_SOURCES, and lib*_CFLAGS)
+include Makefile.inc
+
+# Preloading of libhostname allows host name overriding,
+# this is used to make some tests machine independent.
+
+if BUILD_LIBHOSTNAME
+noinst_LTLIBRARIES = libhostname.la
+else
+noinst_LTLIBRARIES =
+endif
+
+if NO_UNDEFINED
+# The -no-undefined flag is crucial to build fine on some platforms
+UNDEF = -no-undefined
+endif
+
+libhostname_la_SOURCES = sethostname.c sethostname.h
+
+libhostname_la_LIBADD =
+libhostname_la_DEPENDENCIES =
+libhostname_la_LDFLAGS = -module -avoid-version $(UNDEF) -rpath /nowhere
+
diff --git a/tests/libtest/Makefile.in b/tests/libtest/Makefile.in
new file mode 100644
index 0000000..bce2c39
--- /dev/null
+++ b/tests/libtest/Makefile.in
@@ -0,0 +1,1720 @@
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005 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.
+
+@SET_MAKE@
+
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(srcdir)/Makefile.inc
+noinst_PROGRAMS = lib500$(EXEEXT) lib501$(EXEEXT) lib502$(EXEEXT) \
+ lib503$(EXEEXT) lib504$(EXEEXT) lib505$(EXEEXT) \
+ lib506$(EXEEXT) lib507$(EXEEXT) lib508$(EXEEXT) \
+ lib510$(EXEEXT) lib511$(EXEEXT) lib512$(EXEEXT) \
+ lib513$(EXEEXT) lib514$(EXEEXT) lib515$(EXEEXT) \
+ lib516$(EXEEXT) lib517$(EXEEXT) lib518$(EXEEXT) \
+ lib519$(EXEEXT) lib520$(EXEEXT) lib521$(EXEEXT) \
+ lib523$(EXEEXT) lib524$(EXEEXT) lib525$(EXEEXT) \
+ lib526$(EXEEXT) lib527$(EXEEXT) lib574$(EXEEXT) \
+ lib575$(EXEEXT) lib576$(EXEEXT) lib577$(EXEEXT) \
+ lib578$(EXEEXT) lib579$(EXEEXT) lib529$(EXEEXT) \
+ lib530$(EXEEXT) lib532$(EXEEXT) lib533$(EXEEXT) \
+ lib536$(EXEEXT) lib537$(EXEEXT) lib540$(EXEEXT) \
+ lib541$(EXEEXT) lib542$(EXEEXT) lib543$(EXEEXT) \
+ lib544$(EXEEXT) lib545$(EXEEXT) lib547$(EXEEXT) \
+ lib548$(EXEEXT) lib549$(EXEEXT) lib552$(EXEEXT) \
+ lib553$(EXEEXT) lib554$(EXEEXT) lib555$(EXEEXT) \
+ lib556$(EXEEXT) lib539$(EXEEXT) lib557$(EXEEXT) \
+ lib558$(EXEEXT) lib559$(EXEEXT) lib560$(EXEEXT) \
+ lib562$(EXEEXT) lib564$(EXEEXT) lib565$(EXEEXT) \
+ lib566$(EXEEXT) lib567$(EXEEXT) lib568$(EXEEXT) \
+ lib569$(EXEEXT) lib570$(EXEEXT) lib571$(EXEEXT) \
+ lib572$(EXEEXT) lib573$(EXEEXT) chkhostname$(EXEEXT)
+subdir = tests/libtest
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
+ $(top_srcdir)/m4/curl-confopts.m4 \
+ $(top_srcdir)/m4/curl-functions.m4 \
+ $(top_srcdir)/m4/curl-override.m4 \
+ $(top_srcdir)/m4/curl-reentrant.m4 \
+ $(top_srcdir)/m4/curl-system.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/lib/curl_config.h \
+ $(top_builddir)/src/curl_config.h \
+ $(top_builddir)/include/curl/curlbuild.h
+CONFIG_CLEAN_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+am_libhostname_la_OBJECTS = sethostname.lo
+libhostname_la_OBJECTS = $(am_libhostname_la_OBJECTS)
+@BUILD_LIBHOSTNAME_TRUE@am_libhostname_la_rpath =
+PROGRAMS = $(noinst_PROGRAMS)
+am_chkhostname_OBJECTS = chkhostname-chkhostname.$(OBJEXT) \
+ chkhostname-curl_gethostname.$(OBJEXT)
+chkhostname_OBJECTS = $(am_chkhostname_OBJECTS)
+am__objects_1 = first.$(OBJEXT)
+am_lib500_OBJECTS = lib500.$(OBJEXT) $(am__objects_1)
+lib500_OBJECTS = $(am_lib500_OBJECTS)
+lib500_LDADD = $(LDADD)
+lib500_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am_lib501_OBJECTS = lib501.$(OBJEXT) $(am__objects_1)
+lib501_OBJECTS = $(am_lib501_OBJECTS)
+lib501_LDADD = $(LDADD)
+lib501_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am__objects_2 = testutil.$(OBJEXT)
+am_lib502_OBJECTS = lib502.$(OBJEXT) $(am__objects_1) $(am__objects_2)
+lib502_OBJECTS = $(am_lib502_OBJECTS)
+lib502_LDADD = $(LDADD)
+lib502_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am_lib503_OBJECTS = lib503.$(OBJEXT) $(am__objects_1) $(am__objects_2)
+lib503_OBJECTS = $(am_lib503_OBJECTS)
+lib503_LDADD = $(LDADD)
+lib503_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am_lib504_OBJECTS = lib504.$(OBJEXT) $(am__objects_1) $(am__objects_2)
+lib504_OBJECTS = $(am_lib504_OBJECTS)
+lib504_LDADD = $(LDADD)
+lib504_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am_lib505_OBJECTS = lib505.$(OBJEXT) $(am__objects_1)
+lib505_OBJECTS = $(am_lib505_OBJECTS)
+lib505_LDADD = $(LDADD)
+lib505_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am_lib506_OBJECTS = lib506.$(OBJEXT) $(am__objects_1)
+lib506_OBJECTS = $(am_lib506_OBJECTS)
+lib506_LDADD = $(LDADD)
+lib506_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am_lib507_OBJECTS = lib507.$(OBJEXT) $(am__objects_1) $(am__objects_2)
+lib507_OBJECTS = $(am_lib507_OBJECTS)
+lib507_LDADD = $(LDADD)
+lib507_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am_lib508_OBJECTS = lib508.$(OBJEXT) $(am__objects_1)
+lib508_OBJECTS = $(am_lib508_OBJECTS)
+lib508_LDADD = $(LDADD)
+lib508_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am_lib510_OBJECTS = lib510.$(OBJEXT) $(am__objects_1)
+lib510_OBJECTS = $(am_lib510_OBJECTS)
+lib510_LDADD = $(LDADD)
+lib510_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am_lib511_OBJECTS = lib511.$(OBJEXT) $(am__objects_1)
+lib511_OBJECTS = $(am_lib511_OBJECTS)
+lib511_LDADD = $(LDADD)
+lib511_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am_lib512_OBJECTS = lib512.$(OBJEXT) $(am__objects_1)
+lib512_OBJECTS = $(am_lib512_OBJECTS)
+lib512_LDADD = $(LDADD)
+lib512_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am_lib513_OBJECTS = lib513.$(OBJEXT) $(am__objects_1)
+lib513_OBJECTS = $(am_lib513_OBJECTS)
+lib513_LDADD = $(LDADD)
+lib513_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am_lib514_OBJECTS = lib514.$(OBJEXT) $(am__objects_1)
+lib514_OBJECTS = $(am_lib514_OBJECTS)
+lib514_LDADD = $(LDADD)
+lib514_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am_lib515_OBJECTS = lib515.$(OBJEXT) $(am__objects_1)
+lib515_OBJECTS = $(am_lib515_OBJECTS)
+lib515_LDADD = $(LDADD)
+lib515_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am_lib516_OBJECTS = lib516.$(OBJEXT) $(am__objects_1)
+lib516_OBJECTS = $(am_lib516_OBJECTS)
+lib516_LDADD = $(LDADD)
+lib516_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am_lib517_OBJECTS = lib517.$(OBJEXT) $(am__objects_1)
+lib517_OBJECTS = $(am_lib517_OBJECTS)
+lib517_LDADD = $(LDADD)
+lib517_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am_lib518_OBJECTS = lib518.$(OBJEXT) $(am__objects_1)
+lib518_OBJECTS = $(am_lib518_OBJECTS)
+lib518_LDADD = $(LDADD)
+lib518_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am_lib519_OBJECTS = lib519.$(OBJEXT) $(am__objects_1)
+lib519_OBJECTS = $(am_lib519_OBJECTS)
+lib519_LDADD = $(LDADD)
+lib519_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am_lib520_OBJECTS = lib520.$(OBJEXT) $(am__objects_1)
+lib520_OBJECTS = $(am_lib520_OBJECTS)
+lib520_LDADD = $(LDADD)
+lib520_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am_lib521_OBJECTS = lib521.$(OBJEXT) $(am__objects_1)
+lib521_OBJECTS = $(am_lib521_OBJECTS)
+lib521_LDADD = $(LDADD)
+lib521_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am_lib523_OBJECTS = lib523.$(OBJEXT) $(am__objects_1)
+lib523_OBJECTS = $(am_lib523_OBJECTS)
+lib523_LDADD = $(LDADD)
+lib523_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am_lib524_OBJECTS = lib524.$(OBJEXT) $(am__objects_1)
+lib524_OBJECTS = $(am_lib524_OBJECTS)
+lib524_LDADD = $(LDADD)
+lib524_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am_lib525_OBJECTS = lib525.$(OBJEXT) $(am__objects_1) $(am__objects_2)
+lib525_OBJECTS = $(am_lib525_OBJECTS)
+lib525_LDADD = $(LDADD)
+lib525_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am__objects_3 = lib526-first.$(OBJEXT)
+am__objects_4 = lib526-testutil.$(OBJEXT)
+am_lib526_OBJECTS = lib526-lib526.$(OBJEXT) $(am__objects_3) \
+ $(am__objects_4)
+lib526_OBJECTS = $(am_lib526_OBJECTS)
+lib526_LDADD = $(LDADD)
+lib526_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am__objects_5 = lib527-first.$(OBJEXT)
+am__objects_6 = lib527-testutil.$(OBJEXT)
+am_lib527_OBJECTS = lib527-lib526.$(OBJEXT) $(am__objects_5) \
+ $(am__objects_6)
+lib527_OBJECTS = $(am_lib527_OBJECTS)
+lib527_LDADD = $(LDADD)
+lib527_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am__objects_7 = lib529-first.$(OBJEXT)
+am__objects_8 = lib529-testutil.$(OBJEXT)
+am_lib529_OBJECTS = lib529-lib525.$(OBJEXT) $(am__objects_7) \
+ $(am__objects_8)
+lib529_OBJECTS = $(am_lib529_OBJECTS)
+lib529_LDADD = $(LDADD)
+lib529_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am__objects_9 = lib530-first.$(OBJEXT)
+am__objects_10 = lib530-testutil.$(OBJEXT)
+am_lib530_OBJECTS = lib530-lib530.$(OBJEXT) $(am__objects_9) \
+ $(am__objects_10)
+lib530_OBJECTS = $(am_lib530_OBJECTS)
+lib530_LDADD = $(LDADD)
+lib530_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am__objects_11 = lib532-first.$(OBJEXT)
+am__objects_12 = lib532-testutil.$(OBJEXT)
+am_lib532_OBJECTS = lib532-lib526.$(OBJEXT) $(am__objects_11) \
+ $(am__objects_12)
+lib532_OBJECTS = $(am_lib532_OBJECTS)
+lib532_LDADD = $(LDADD)
+lib532_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am_lib533_OBJECTS = lib533.$(OBJEXT) $(am__objects_1) $(am__objects_2)
+lib533_OBJECTS = $(am_lib533_OBJECTS)
+lib533_LDADD = $(LDADD)
+lib533_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am_lib536_OBJECTS = lib536.$(OBJEXT) $(am__objects_1) $(am__objects_2)
+lib536_OBJECTS = $(am_lib536_OBJECTS)
+lib536_LDADD = $(LDADD)
+lib536_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am_lib537_OBJECTS = lib537.$(OBJEXT) $(am__objects_1)
+lib537_OBJECTS = $(am_lib537_OBJECTS)
+lib537_LDADD = $(LDADD)
+lib537_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am_lib539_OBJECTS = lib539.$(OBJEXT) $(am__objects_1)
+lib539_OBJECTS = $(am_lib539_OBJECTS)
+lib539_LDADD = $(LDADD)
+lib539_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am_lib540_OBJECTS = lib540.$(OBJEXT) $(am__objects_1)
+lib540_OBJECTS = $(am_lib540_OBJECTS)
+lib540_LDADD = $(LDADD)
+lib540_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am_lib541_OBJECTS = lib541.$(OBJEXT) $(am__objects_1)
+lib541_OBJECTS = $(am_lib541_OBJECTS)
+lib541_LDADD = $(LDADD)
+lib541_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am_lib542_OBJECTS = lib542.$(OBJEXT) $(am__objects_1)
+lib542_OBJECTS = $(am_lib542_OBJECTS)
+lib542_LDADD = $(LDADD)
+lib542_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am_lib543_OBJECTS = lib543.$(OBJEXT) $(am__objects_1)
+lib543_OBJECTS = $(am_lib543_OBJECTS)
+lib543_LDADD = $(LDADD)
+lib543_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am_lib544_OBJECTS = lib544.$(OBJEXT) $(am__objects_1)
+lib544_OBJECTS = $(am_lib544_OBJECTS)
+lib544_LDADD = $(LDADD)
+lib544_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am__objects_13 = lib545-first.$(OBJEXT)
+am_lib545_OBJECTS = lib545-lib544.$(OBJEXT) $(am__objects_13)
+lib545_OBJECTS = $(am_lib545_OBJECTS)
+lib545_LDADD = $(LDADD)
+lib545_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am_lib547_OBJECTS = lib547.$(OBJEXT) $(am__objects_1)
+lib547_OBJECTS = $(am_lib547_OBJECTS)
+lib547_LDADD = $(LDADD)
+lib547_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am__objects_14 = lib548-first.$(OBJEXT)
+am_lib548_OBJECTS = lib548-lib547.$(OBJEXT) $(am__objects_14)
+lib548_OBJECTS = $(am_lib548_OBJECTS)
+lib548_LDADD = $(LDADD)
+lib548_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am_lib549_OBJECTS = lib549.$(OBJEXT) $(am__objects_1)
+lib549_OBJECTS = $(am_lib549_OBJECTS)
+lib549_LDADD = $(LDADD)
+lib549_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am_lib552_OBJECTS = lib552.$(OBJEXT) $(am__objects_1)
+lib552_OBJECTS = $(am_lib552_OBJECTS)
+lib552_LDADD = $(LDADD)
+lib552_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am_lib553_OBJECTS = lib553.$(OBJEXT) $(am__objects_1)
+lib553_OBJECTS = $(am_lib553_OBJECTS)
+lib553_LDADD = $(LDADD)
+lib553_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am_lib554_OBJECTS = lib554.$(OBJEXT) $(am__objects_1)
+lib554_OBJECTS = $(am_lib554_OBJECTS)
+lib554_LDADD = $(LDADD)
+lib554_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am_lib555_OBJECTS = lib555.$(OBJEXT) $(am__objects_1) $(am__objects_2)
+lib555_OBJECTS = $(am_lib555_OBJECTS)
+lib555_LDADD = $(LDADD)
+lib555_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am_lib556_OBJECTS = lib556.$(OBJEXT) $(am__objects_1)
+lib556_OBJECTS = $(am_lib556_OBJECTS)
+lib556_LDADD = $(LDADD)
+lib556_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am_lib557_OBJECTS = lib557.$(OBJEXT) $(am__objects_1)
+lib557_OBJECTS = $(am_lib557_OBJECTS)
+lib557_LDADD = $(LDADD)
+lib557_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am__objects_15 = lib558-first.$(OBJEXT)
+am_lib558_OBJECTS = lib558-lib558.$(OBJEXT) $(am__objects_15)
+lib558_OBJECTS = $(am_lib558_OBJECTS)
+lib558_LDADD = $(LDADD)
+lib558_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am__objects_16 = lib559-first.$(OBJEXT)
+am_lib559_OBJECTS = lib559-lib558.$(OBJEXT) $(am__objects_16)
+lib559_OBJECTS = $(am_lib559_OBJECTS)
+lib559_LDADD = $(LDADD)
+lib559_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am_lib560_OBJECTS = lib560.$(OBJEXT) $(am__objects_1)
+lib560_OBJECTS = $(am_lib560_OBJECTS)
+lib560_LDADD = $(LDADD)
+lib560_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am_lib562_OBJECTS = lib562.$(OBJEXT) $(am__objects_1)
+lib562_OBJECTS = $(am_lib562_OBJECTS)
+lib562_LDADD = $(LDADD)
+lib562_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am_lib564_OBJECTS = lib564.$(OBJEXT) $(am__objects_1) $(am__objects_2)
+lib564_OBJECTS = $(am_lib564_OBJECTS)
+lib564_LDADD = $(LDADD)
+lib564_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am__objects_17 = lib565-first.$(OBJEXT)
+am_lib565_OBJECTS = lib565-lib510.$(OBJEXT) $(am__objects_17)
+lib565_OBJECTS = $(am_lib565_OBJECTS)
+lib565_LDADD = $(LDADD)
+lib565_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am_lib566_OBJECTS = lib566.$(OBJEXT) $(am__objects_1)
+lib566_OBJECTS = $(am_lib566_OBJECTS)
+lib566_LDADD = $(LDADD)
+lib566_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am_lib567_OBJECTS = lib567.$(OBJEXT) $(am__objects_1)
+lib567_OBJECTS = $(am_lib567_OBJECTS)
+lib567_LDADD = $(LDADD)
+lib567_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am_lib568_OBJECTS = lib568.$(OBJEXT) $(am__objects_1)
+lib568_OBJECTS = $(am_lib568_OBJECTS)
+lib568_LDADD = $(LDADD)
+lib568_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am_lib569_OBJECTS = lib569.$(OBJEXT) $(am__objects_1)
+lib569_OBJECTS = $(am_lib569_OBJECTS)
+lib569_LDADD = $(LDADD)
+lib569_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am_lib570_OBJECTS = lib570.$(OBJEXT) $(am__objects_1)
+lib570_OBJECTS = $(am_lib570_OBJECTS)
+lib570_LDADD = $(LDADD)
+lib570_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am_lib571_OBJECTS = lib571.$(OBJEXT) $(am__objects_1)
+lib571_OBJECTS = $(am_lib571_OBJECTS)
+lib571_LDADD = $(LDADD)
+lib571_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am_lib572_OBJECTS = lib572.$(OBJEXT) $(am__objects_1)
+lib572_OBJECTS = $(am_lib572_OBJECTS)
+lib572_LDADD = $(LDADD)
+lib572_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am_lib573_OBJECTS = lib573.$(OBJEXT) $(am__objects_1) $(am__objects_2)
+lib573_OBJECTS = $(am_lib573_OBJECTS)
+lib573_LDADD = $(LDADD)
+lib573_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am_lib574_OBJECTS = lib574.$(OBJEXT) $(am__objects_1)
+lib574_OBJECTS = $(am_lib574_OBJECTS)
+lib574_LDADD = $(LDADD)
+lib574_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am_lib575_OBJECTS = lib575.$(OBJEXT) $(am__objects_1)
+lib575_OBJECTS = $(am_lib575_OBJECTS)
+lib575_LDADD = $(LDADD)
+lib575_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am_lib576_OBJECTS = lib576.$(OBJEXT) $(am__objects_1)
+lib576_OBJECTS = $(am_lib576_OBJECTS)
+lib576_LDADD = $(LDADD)
+lib576_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am_lib577_OBJECTS = lib577.$(OBJEXT) $(am__objects_1)
+lib577_OBJECTS = $(am_lib577_OBJECTS)
+lib577_LDADD = $(LDADD)
+lib577_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am_lib578_OBJECTS = lib578.$(OBJEXT) $(am__objects_1)
+lib578_OBJECTS = $(am_lib578_OBJECTS)
+lib578_LDADD = $(LDADD)
+lib578_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+am_lib579_OBJECTS = lib579.$(OBJEXT) $(am__objects_1)
+lib579_OBJECTS = $(am_lib579_OBJECTS)
+lib579_LDADD = $(LDADD)
+lib579_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+DEFAULT_INCLUDES =
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(libhostname_la_SOURCES) $(chkhostname_SOURCES) \
+ $(lib500_SOURCES) $(lib501_SOURCES) $(lib502_SOURCES) \
+ $(lib503_SOURCES) $(lib504_SOURCES) $(lib505_SOURCES) \
+ $(lib506_SOURCES) $(lib507_SOURCES) $(lib508_SOURCES) \
+ $(lib510_SOURCES) $(lib511_SOURCES) $(lib512_SOURCES) \
+ $(lib513_SOURCES) $(lib514_SOURCES) $(lib515_SOURCES) \
+ $(lib516_SOURCES) $(lib517_SOURCES) $(lib518_SOURCES) \
+ $(lib519_SOURCES) $(lib520_SOURCES) $(lib521_SOURCES) \
+ $(lib523_SOURCES) $(lib524_SOURCES) $(lib525_SOURCES) \
+ $(lib526_SOURCES) $(lib527_SOURCES) $(lib529_SOURCES) \
+ $(lib530_SOURCES) $(lib532_SOURCES) $(lib533_SOURCES) \
+ $(lib536_SOURCES) $(lib537_SOURCES) $(lib539_SOURCES) \
+ $(lib540_SOURCES) $(lib541_SOURCES) $(lib542_SOURCES) \
+ $(lib543_SOURCES) $(lib544_SOURCES) $(lib545_SOURCES) \
+ $(lib547_SOURCES) $(lib548_SOURCES) $(lib549_SOURCES) \
+ $(lib552_SOURCES) $(lib553_SOURCES) $(lib554_SOURCES) \
+ $(lib555_SOURCES) $(lib556_SOURCES) $(lib557_SOURCES) \
+ $(lib558_SOURCES) $(lib559_SOURCES) $(lib560_SOURCES) \
+ $(lib562_SOURCES) $(lib564_SOURCES) $(lib565_SOURCES) \
+ $(lib566_SOURCES) $(lib567_SOURCES) $(lib568_SOURCES) \
+ $(lib569_SOURCES) $(lib570_SOURCES) $(lib571_SOURCES) \
+ $(lib572_SOURCES) $(lib573_SOURCES) $(lib574_SOURCES) \
+ $(lib575_SOURCES) $(lib576_SOURCES) $(lib577_SOURCES) \
+ $(lib578_SOURCES) $(lib579_SOURCES)
+DIST_SOURCES = $(libhostname_la_SOURCES) $(chkhostname_SOURCES) \
+ $(lib500_SOURCES) $(lib501_SOURCES) $(lib502_SOURCES) \
+ $(lib503_SOURCES) $(lib504_SOURCES) $(lib505_SOURCES) \
+ $(lib506_SOURCES) $(lib507_SOURCES) $(lib508_SOURCES) \
+ $(lib510_SOURCES) $(lib511_SOURCES) $(lib512_SOURCES) \
+ $(lib513_SOURCES) $(lib514_SOURCES) $(lib515_SOURCES) \
+ $(lib516_SOURCES) $(lib517_SOURCES) $(lib518_SOURCES) \
+ $(lib519_SOURCES) $(lib520_SOURCES) $(lib521_SOURCES) \
+ $(lib523_SOURCES) $(lib524_SOURCES) $(lib525_SOURCES) \
+ $(lib526_SOURCES) $(lib527_SOURCES) $(lib529_SOURCES) \
+ $(lib530_SOURCES) $(lib532_SOURCES) $(lib533_SOURCES) \
+ $(lib536_SOURCES) $(lib537_SOURCES) $(lib539_SOURCES) \
+ $(lib540_SOURCES) $(lib541_SOURCES) $(lib542_SOURCES) \
+ $(lib543_SOURCES) $(lib544_SOURCES) $(lib545_SOURCES) \
+ $(lib547_SOURCES) $(lib548_SOURCES) $(lib549_SOURCES) \
+ $(lib552_SOURCES) $(lib553_SOURCES) $(lib554_SOURCES) \
+ $(lib555_SOURCES) $(lib556_SOURCES) $(lib557_SOURCES) \
+ $(lib558_SOURCES) $(lib559_SOURCES) $(lib560_SOURCES) \
+ $(lib562_SOURCES) $(lib564_SOURCES) $(lib565_SOURCES) \
+ $(lib566_SOURCES) $(lib567_SOURCES) $(lib568_SOURCES) \
+ $(lib569_SOURCES) $(lib570_SOURCES) $(lib571_SOURCES) \
+ $(lib572_SOURCES) $(lib573_SOURCES) $(lib574_SOURCES) \
+ $(lib575_SOURCES) $(lib576_SOURCES) $(lib577_SOURCES) \
+ $(lib578_SOURCES) $(lib579_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_LIBHOSTNAME_FALSE = @BUILD_LIBHOSTNAME_FALSE@
+BUILD_LIBHOSTNAME_TRUE = @BUILD_LIBHOSTNAME_TRUE@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_OPTIONS = @CONFIGURE_OPTIONS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CROSSCOMPILING_FALSE = @CROSSCOMPILING_FALSE@
+CROSSCOMPILING_TRUE = @CROSSCOMPILING_TRUE@
+CURLDEBUG_FALSE = @CURLDEBUG_FALSE@
+CURLDEBUG_TRUE = @CURLDEBUG_TRUE@
+CURL_CA_BUNDLE = @CURL_CA_BUNDLE@
+CURL_CFLAG_EXTRAS = @CURL_CFLAG_EXTRAS@
+CURL_DISABLE_DICT = @CURL_DISABLE_DICT@
+CURL_DISABLE_FILE = @CURL_DISABLE_FILE@
+CURL_DISABLE_FTP = @CURL_DISABLE_FTP@
+CURL_DISABLE_GOPHER = @CURL_DISABLE_GOPHER@
+CURL_DISABLE_HTTP = @CURL_DISABLE_HTTP@
+CURL_DISABLE_IMAP = @CURL_DISABLE_IMAP@
+CURL_DISABLE_LDAP = @CURL_DISABLE_LDAP@
+CURL_DISABLE_LDAPS = @CURL_DISABLE_LDAPS@
+CURL_DISABLE_POP3 = @CURL_DISABLE_POP3@
+CURL_DISABLE_PROXY = @CURL_DISABLE_PROXY@
+CURL_DISABLE_RTSP = @CURL_DISABLE_RTSP@
+CURL_DISABLE_SMTP = @CURL_DISABLE_SMTP@
+CURL_DISABLE_TELNET = @CURL_DISABLE_TELNET@
+CURL_DISABLE_TFTP = @CURL_DISABLE_TFTP@
+CURL_LIBS = @CURL_LIBS@
+CURL_NETWORK_LIBS = @CURL_NETWORK_LIBS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_SHARED = @ENABLE_SHARED@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_LDAP_SSL = @HAVE_LDAP_SSL@
+HAVE_LIBZ = @HAVE_LIBZ@
+HAVE_LIBZ_FALSE = @HAVE_LIBZ_FALSE@
+HAVE_LIBZ_TRUE = @HAVE_LIBZ_TRUE@
+HAVE_PK11_CREATEGENERICOBJECT = @HAVE_PK11_CREATEGENERICOBJECT@
+IDN_ENABLED = @IDN_ENABLED@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+IPV6_ENABLED = @IPV6_ENABLED@
+KRB4_ENABLED = @KRB4_ENABLED@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBCURL_LIBS = @LIBCURL_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+MANOPT = @MANOPT@
+MIMPURE_FALSE = @MIMPURE_FALSE@
+MIMPURE_TRUE = @MIMPURE_TRUE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NO_UNDEFINED_FALSE = @NO_UNDEFINED_FALSE@
+NO_UNDEFINED_TRUE = @NO_UNDEFINED_TRUE@
+NROFF = @NROFF@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH = @PATH@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+PKGADD_NAME = @PKGADD_NAME@
+PKGADD_PKG = @PKGADD_PKG@
+PKGADD_VENDOR = @PKGADD_VENDOR@
+PKGCONFIG = @PKGCONFIG@
+RANDOM_FILE = @RANDOM_FILE@
+RANLIB = @RANLIB@
+REQUIRE_LIB_DEPS = @REQUIRE_LIB_DEPS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SONAME_BUMP_FALSE = @SONAME_BUMP_FALSE@
+SONAME_BUMP_TRUE = @SONAME_BUMP_TRUE@
+SSL_ENABLED = @SSL_ENABLED@
+STATICLIB_FALSE = @STATICLIB_FALSE@
+STATICLIB_TRUE = @STATICLIB_TRUE@
+STRIP = @STRIP@
+SUPPORT_FEATURES = @SUPPORT_FEATURES@
+SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
+TEST_SERVER_LIBS = @TEST_SERVER_LIBS@
+USE_ARES = @USE_ARES@
+USE_EMBEDDED_ARES_FALSE = @USE_EMBEDDED_ARES_FALSE@
+USE_EMBEDDED_ARES_TRUE = @USE_EMBEDDED_ARES_TRUE@
+USE_GNUTLS = @USE_GNUTLS@
+USE_LIBRTMP = @USE_LIBRTMP@
+USE_LIBSSH2 = @USE_LIBSSH2@
+USE_MANUAL_FALSE = @USE_MANUAL_FALSE@
+USE_MANUAL_TRUE = @USE_MANUAL_TRUE@
+USE_NSS = @USE_NSS@
+USE_OPENLDAP = @USE_OPENLDAP@
+USE_POLARSSL = @USE_POLARSSL@
+USE_SSLEAY = @USE_SSLEAY@
+USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
+VERSION = @VERSION@
+VERSIONNUM = @VERSIONNUM@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+libext = @libext@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+
+#***************************************************************************
+# _ _ ____ _
+# Project ___| | | | _ \| |
+# / __| | | | |_) | |
+# | (__| |_| | _ <| |___
+# \___|\___/|_| \_\_____|
+#
+# Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+#
+# This software is licensed as described in the file COPYING, which
+# you should have received as part of this distribution. The terms
+# are also available at http://curl.haxx.se/docs/copyright.html.
+#
+# You may opt to use, copy, modify, merge, publish, distribute and/or sell
+# copies of the Software, and permit persons to whom the Software is
+# furnished to do so, under the terms of the COPYING file.
+#
+# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+# KIND, either express or implied.
+#
+###########################################################################
+AUTOMAKE_OPTIONS = foreign nostdinc
+@USE_EMBEDDED_ARES_FALSE@INCLUDES = -I$(top_builddir)/include/curl \
+@USE_EMBEDDED_ARES_FALSE@ -I$(top_builddir)/include \
+@USE_EMBEDDED_ARES_FALSE@ -I$(top_srcdir)/include \
+@USE_EMBEDDED_ARES_FALSE@ -I$(top_builddir)/lib \
+@USE_EMBEDDED_ARES_FALSE@ -I$(top_srcdir)/lib
+
+
+# Specify our include paths here, and do it relative to $(top_srcdir) and
+# $(top_builddir), to ensure that these paths which belong to the library
+# being currently built and tested are searched before the library which
+# might possibly already be installed in the system.
+#
+# $(top_builddir)/include/curl for generated curlbuild.h included from curl.h
+# $(top_builddir)/include for generated curlbuild.h included from lib/setup.h
+# $(top_srcdir)/include is for libcurl's external include files
+# $(top_builddir)/lib is for libcurl's generated lib/curl_config.h file
+# $(top_srcdir)/lib is for libcurl's lib/setup.h and other "borrowed" files
+# $(top_builddir)/ares is for in-tree c-ares's generated ares_build.h file
+# $(top_srcdir)/ares is for in-tree c-ares's external include files
+@USE_EMBEDDED_ARES_TRUE@INCLUDES = -I$(top_builddir)/include/curl \
+@USE_EMBEDDED_ARES_TRUE@ -I$(top_builddir)/include \
+@USE_EMBEDDED_ARES_TRUE@ -I$(top_srcdir)/include \
+@USE_EMBEDDED_ARES_TRUE@ -I$(top_builddir)/lib \
+@USE_EMBEDDED_ARES_TRUE@ -I$(top_srcdir)/lib \
+@USE_EMBEDDED_ARES_TRUE@ -I$(top_builddir)/ares \
+@USE_EMBEDDED_ARES_TRUE@ -I$(top_srcdir)/ares
+
+EXTRA_DIST = test75.pl test307.pl test610.pl test613.pl test1013.pl \
+test1022.pl Makefile.inc
+
+
+# Dependencies (may need to be overriden)
+LDADD = $(top_builddir)/lib/libcurl.la @CURL_LIBS@
+DEPENDENCIES = $(top_builddir)/lib/libcurl.la
+
+# files used only in some libcurl test programs
+TESTUTIL = testutil.c testutil.h
+
+# these files are used in every single test program below
+SUPPORTFILES = first.c test.h
+chkhostname_SOURCES = chkhostname.c $(top_srcdir)/lib/curl_gethostname.c
+chkhostname_LDADD = @CURL_NETWORK_LIBS@
+chkhostname_DEPENDENCIES =
+chkhostname_CFLAGS = $(AM_CFLAGS)
+lib500_SOURCES = lib500.c $(SUPPORTFILES)
+lib501_SOURCES = lib501.c $(SUPPORTFILES)
+lib502_SOURCES = lib502.c $(SUPPORTFILES) $(TESTUTIL)
+lib503_SOURCES = lib503.c $(SUPPORTFILES) $(TESTUTIL)
+lib504_SOURCES = lib504.c $(SUPPORTFILES) $(TESTUTIL)
+lib505_SOURCES = lib505.c $(SUPPORTFILES)
+lib506_SOURCES = lib506.c $(SUPPORTFILES)
+lib507_SOURCES = lib507.c $(SUPPORTFILES) $(TESTUTIL)
+lib508_SOURCES = lib508.c $(SUPPORTFILES)
+lib510_SOURCES = lib510.c $(SUPPORTFILES)
+lib511_SOURCES = lib511.c $(SUPPORTFILES)
+lib512_SOURCES = lib512.c $(SUPPORTFILES)
+lib513_SOURCES = lib513.c $(SUPPORTFILES)
+lib514_SOURCES = lib514.c $(SUPPORTFILES)
+lib515_SOURCES = lib515.c $(SUPPORTFILES)
+lib516_SOURCES = lib516.c $(SUPPORTFILES)
+lib517_SOURCES = lib517.c $(SUPPORTFILES)
+lib518_SOURCES = lib518.c $(SUPPORTFILES)
+lib519_SOURCES = lib519.c $(SUPPORTFILES)
+lib520_SOURCES = lib520.c $(SUPPORTFILES)
+lib521_SOURCES = lib521.c $(SUPPORTFILES)
+lib523_SOURCES = lib523.c $(SUPPORTFILES)
+lib524_SOURCES = lib524.c $(SUPPORTFILES)
+lib525_SOURCES = lib525.c $(SUPPORTFILES) $(TESTUTIL)
+lib526_SOURCES = lib526.c $(SUPPORTFILES) $(TESTUTIL)
+lib526_CFLAGS = -DLIB526
+lib527_SOURCES = lib526.c $(SUPPORTFILES) $(TESTUTIL)
+lib527_CFLAGS = -DLIB527
+lib529_SOURCES = lib525.c $(SUPPORTFILES) $(TESTUTIL)
+lib529_CFLAGS = -DLIB529
+lib530_SOURCES = lib530.c $(SUPPORTFILES) $(TESTUTIL)
+lib530_CFLAGS = -DLIB530
+lib532_SOURCES = lib526.c $(SUPPORTFILES) $(TESTUTIL)
+lib532_CFLAGS = -DLIB532
+lib533_SOURCES = lib533.c $(SUPPORTFILES) $(TESTUTIL)
+lib536_SOURCES = lib536.c $(SUPPORTFILES) $(TESTUTIL)
+lib537_SOURCES = lib537.c $(SUPPORTFILES)
+lib539_SOURCES = lib539.c $(SUPPORTFILES)
+lib540_SOURCES = lib540.c $(SUPPORTFILES)
+lib541_SOURCES = lib541.c $(SUPPORTFILES)
+lib542_SOURCES = lib542.c $(SUPPORTFILES)
+lib543_SOURCES = lib543.c $(SUPPORTFILES)
+lib544_SOURCES = lib544.c $(SUPPORTFILES)
+lib545_SOURCES = lib544.c $(SUPPORTFILES)
+lib545_CFLAGS = -DLIB545
+lib547_SOURCES = lib547.c $(SUPPORTFILES)
+lib548_SOURCES = lib547.c $(SUPPORTFILES)
+lib548_CFLAGS = -DLIB548
+lib549_SOURCES = lib549.c $(SUPPORTFILES)
+lib555_SOURCES = lib555.c $(SUPPORTFILES) $(TESTUTIL)
+lib552_SOURCES = lib552.c $(SUPPORTFILES)
+lib553_SOURCES = lib553.c $(SUPPORTFILES)
+lib554_SOURCES = lib554.c $(SUPPORTFILES)
+lib556_SOURCES = lib556.c $(SUPPORTFILES)
+lib557_SOURCES = lib557.c $(SUPPORTFILES)
+lib558_SOURCES = lib558.c $(SUPPORTFILES)
+lib558_CFLAGS = -DLIB558
+lib559_SOURCES = lib558.c $(SUPPORTFILES)
+lib559_CFLAGS = -DLIB559
+lib560_SOURCES = lib560.c $(SUPPORTFILES)
+lib574_SOURCES = lib574.c $(SUPPORTFILES)
+lib575_SOURCES = lib575.c $(SUPPORTFILES)
+lib576_SOURCES = lib576.c $(SUPPORTFILES)
+lib577_SOURCES = lib577.c $(SUPPORTFILES)
+lib562_SOURCES = lib562.c $(SUPPORTFILES)
+lib564_SOURCES = lib564.c $(SUPPORTFILES) $(TESTUTIL)
+lib565_SOURCES = lib510.c $(SUPPORTFILES)
+lib565_CFLAGS = -DLIB565
+lib566_SOURCES = lib566.c $(SUPPORTFILES)
+lib567_SOURCES = lib567.c $(SUPPORTFILES)
+lib568_SOURCES = lib568.c $(SUPPORTFILES)
+lib569_SOURCES = lib569.c $(SUPPORTFILES)
+lib570_SOURCES = lib570.c $(SUPPORTFILES)
+lib571_SOURCES = lib571.c $(SUPPORTFILES)
+lib572_SOURCES = lib572.c $(SUPPORTFILES)
+lib573_SOURCES = lib573.c $(SUPPORTFILES) $(TESTUTIL)
+lib578_SOURCES = lib578.c $(SUPPORTFILES)
+lib579_SOURCES = lib579.c $(SUPPORTFILES)
+@BUILD_LIBHOSTNAME_FALSE@noinst_LTLIBRARIES =
+
+# Makefile.inc provides the source defines (TESTUTIL, SUPPORTFILES,
+# noinst_PROGRAMS, lib*_SOURCES, and lib*_CFLAGS)
+
+# Preloading of libhostname allows host name overriding,
+# this is used to make some tests machine independent.
+@BUILD_LIBHOSTNAME_TRUE@noinst_LTLIBRARIES = libhostname.la
+
+# The -no-undefined flag is crucial to build fine on some platforms
+@NO_UNDEFINED_TRUE@UNDEF = -no-undefined
+libhostname_la_SOURCES = sethostname.c sethostname.h
+libhostname_la_LIBADD =
+libhostname_la_DEPENDENCIES =
+libhostname_la_LDFLAGS = -module -avoid-version $(UNDEF) -rpath /nowhere
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/Makefile.inc $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tests/libtest/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --foreign tests/libtest/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+ test "$$dir" != "$$p" || dir=.; \
+ echo "rm -f \"$${dir}/so_locations\""; \
+ rm -f "$${dir}/so_locations"; \
+ done
+libhostname.la: $(libhostname_la_OBJECTS) $(libhostname_la_DEPENDENCIES)
+ $(LINK) $(am_libhostname_la_rpath) $(libhostname_la_LDFLAGS) $(libhostname_la_OBJECTS) $(libhostname_la_LIBADD) $(LIBS)
+
+clean-noinstPROGRAMS:
+ @list='$(noinst_PROGRAMS)'; for p in $$list; do \
+ f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f $$p $$f"; \
+ rm -f $$p $$f ; \
+ done
+chkhostname$(EXEEXT): $(chkhostname_OBJECTS) $(chkhostname_DEPENDENCIES)
+ @rm -f chkhostname$(EXEEXT)
+ $(LINK) $(chkhostname_LDFLAGS) $(chkhostname_OBJECTS) $(chkhostname_LDADD) $(LIBS)
+lib500$(EXEEXT): $(lib500_OBJECTS) $(lib500_DEPENDENCIES)
+ @rm -f lib500$(EXEEXT)
+ $(LINK) $(lib500_LDFLAGS) $(lib500_OBJECTS) $(lib500_LDADD) $(LIBS)
+lib501$(EXEEXT): $(lib501_OBJECTS) $(lib501_DEPENDENCIES)
+ @rm -f lib501$(EXEEXT)
+ $(LINK) $(lib501_LDFLAGS) $(lib501_OBJECTS) $(lib501_LDADD) $(LIBS)
+lib502$(EXEEXT): $(lib502_OBJECTS) $(lib502_DEPENDENCIES)
+ @rm -f lib502$(EXEEXT)
+ $(LINK) $(lib502_LDFLAGS) $(lib502_OBJECTS) $(lib502_LDADD) $(LIBS)
+lib503$(EXEEXT): $(lib503_OBJECTS) $(lib503_DEPENDENCIES)
+ @rm -f lib503$(EXEEXT)
+ $(LINK) $(lib503_LDFLAGS) $(lib503_OBJECTS) $(lib503_LDADD) $(LIBS)
+lib504$(EXEEXT): $(lib504_OBJECTS) $(lib504_DEPENDENCIES)
+ @rm -f lib504$(EXEEXT)
+ $(LINK) $(lib504_LDFLAGS) $(lib504_OBJECTS) $(lib504_LDADD) $(LIBS)
+lib505$(EXEEXT): $(lib505_OBJECTS) $(lib505_DEPENDENCIES)
+ @rm -f lib505$(EXEEXT)
+ $(LINK) $(lib505_LDFLAGS) $(lib505_OBJECTS) $(lib505_LDADD) $(LIBS)
+lib506$(EXEEXT): $(lib506_OBJECTS) $(lib506_DEPENDENCIES)
+ @rm -f lib506$(EXEEXT)
+ $(LINK) $(lib506_LDFLAGS) $(lib506_OBJECTS) $(lib506_LDADD) $(LIBS)
+lib507$(EXEEXT): $(lib507_OBJECTS) $(lib507_DEPENDENCIES)
+ @rm -f lib507$(EXEEXT)
+ $(LINK) $(lib507_LDFLAGS) $(lib507_OBJECTS) $(lib507_LDADD) $(LIBS)
+lib508$(EXEEXT): $(lib508_OBJECTS) $(lib508_DEPENDENCIES)
+ @rm -f lib508$(EXEEXT)
+ $(LINK) $(lib508_LDFLAGS) $(lib508_OBJECTS) $(lib508_LDADD) $(LIBS)
+lib510$(EXEEXT): $(lib510_OBJECTS) $(lib510_DEPENDENCIES)
+ @rm -f lib510$(EXEEXT)
+ $(LINK) $(lib510_LDFLAGS) $(lib510_OBJECTS) $(lib510_LDADD) $(LIBS)
+lib511$(EXEEXT): $(lib511_OBJECTS) $(lib511_DEPENDENCIES)
+ @rm -f lib511$(EXEEXT)
+ $(LINK) $(lib511_LDFLAGS) $(lib511_OBJECTS) $(lib511_LDADD) $(LIBS)
+lib512$(EXEEXT): $(lib512_OBJECTS) $(lib512_DEPENDENCIES)
+ @rm -f lib512$(EXEEXT)
+ $(LINK) $(lib512_LDFLAGS) $(lib512_OBJECTS) $(lib512_LDADD) $(LIBS)
+lib513$(EXEEXT): $(lib513_OBJECTS) $(lib513_DEPENDENCIES)
+ @rm -f lib513$(EXEEXT)
+ $(LINK) $(lib513_LDFLAGS) $(lib513_OBJECTS) $(lib513_LDADD) $(LIBS)
+lib514$(EXEEXT): $(lib514_OBJECTS) $(lib514_DEPENDENCIES)
+ @rm -f lib514$(EXEEXT)
+ $(LINK) $(lib514_LDFLAGS) $(lib514_OBJECTS) $(lib514_LDADD) $(LIBS)
+lib515$(EXEEXT): $(lib515_OBJECTS) $(lib515_DEPENDENCIES)
+ @rm -f lib515$(EXEEXT)
+ $(LINK) $(lib515_LDFLAGS) $(lib515_OBJECTS) $(lib515_LDADD) $(LIBS)
+lib516$(EXEEXT): $(lib516_OBJECTS) $(lib516_DEPENDENCIES)
+ @rm -f lib516$(EXEEXT)
+ $(LINK) $(lib516_LDFLAGS) $(lib516_OBJECTS) $(lib516_LDADD) $(LIBS)
+lib517$(EXEEXT): $(lib517_OBJECTS) $(lib517_DEPENDENCIES)
+ @rm -f lib517$(EXEEXT)
+ $(LINK) $(lib517_LDFLAGS) $(lib517_OBJECTS) $(lib517_LDADD) $(LIBS)
+lib518$(EXEEXT): $(lib518_OBJECTS) $(lib518_DEPENDENCIES)
+ @rm -f lib518$(EXEEXT)
+ $(LINK) $(lib518_LDFLAGS) $(lib518_OBJECTS) $(lib518_LDADD) $(LIBS)
+lib519$(EXEEXT): $(lib519_OBJECTS) $(lib519_DEPENDENCIES)
+ @rm -f lib519$(EXEEXT)
+ $(LINK) $(lib519_LDFLAGS) $(lib519_OBJECTS) $(lib519_LDADD) $(LIBS)
+lib520$(EXEEXT): $(lib520_OBJECTS) $(lib520_DEPENDENCIES)
+ @rm -f lib520$(EXEEXT)
+ $(LINK) $(lib520_LDFLAGS) $(lib520_OBJECTS) $(lib520_LDADD) $(LIBS)
+lib521$(EXEEXT): $(lib521_OBJECTS) $(lib521_DEPENDENCIES)
+ @rm -f lib521$(EXEEXT)
+ $(LINK) $(lib521_LDFLAGS) $(lib521_OBJECTS) $(lib521_LDADD) $(LIBS)
+lib523$(EXEEXT): $(lib523_OBJECTS) $(lib523_DEPENDENCIES)
+ @rm -f lib523$(EXEEXT)
+ $(LINK) $(lib523_LDFLAGS) $(lib523_OBJECTS) $(lib523_LDADD) $(LIBS)
+lib524$(EXEEXT): $(lib524_OBJECTS) $(lib524_DEPENDENCIES)
+ @rm -f lib524$(EXEEXT)
+ $(LINK) $(lib524_LDFLAGS) $(lib524_OBJECTS) $(lib524_LDADD) $(LIBS)
+lib525$(EXEEXT): $(lib525_OBJECTS) $(lib525_DEPENDENCIES)
+ @rm -f lib525$(EXEEXT)
+ $(LINK) $(lib525_LDFLAGS) $(lib525_OBJECTS) $(lib525_LDADD) $(LIBS)
+lib526$(EXEEXT): $(lib526_OBJECTS) $(lib526_DEPENDENCIES)
+ @rm -f lib526$(EXEEXT)
+ $(LINK) $(lib526_LDFLAGS) $(lib526_OBJECTS) $(lib526_LDADD) $(LIBS)
+lib527$(EXEEXT): $(lib527_OBJECTS) $(lib527_DEPENDENCIES)
+ @rm -f lib527$(EXEEXT)
+ $(LINK) $(lib527_LDFLAGS) $(lib527_OBJECTS) $(lib527_LDADD) $(LIBS)
+lib529$(EXEEXT): $(lib529_OBJECTS) $(lib529_DEPENDENCIES)
+ @rm -f lib529$(EXEEXT)
+ $(LINK) $(lib529_LDFLAGS) $(lib529_OBJECTS) $(lib529_LDADD) $(LIBS)
+lib530$(EXEEXT): $(lib530_OBJECTS) $(lib530_DEPENDENCIES)
+ @rm -f lib530$(EXEEXT)
+ $(LINK) $(lib530_LDFLAGS) $(lib530_OBJECTS) $(lib530_LDADD) $(LIBS)
+lib532$(EXEEXT): $(lib532_OBJECTS) $(lib532_DEPENDENCIES)
+ @rm -f lib532$(EXEEXT)
+ $(LINK) $(lib532_LDFLAGS) $(lib532_OBJECTS) $(lib532_LDADD) $(LIBS)
+lib533$(EXEEXT): $(lib533_OBJECTS) $(lib533_DEPENDENCIES)
+ @rm -f lib533$(EXEEXT)
+ $(LINK) $(lib533_LDFLAGS) $(lib533_OBJECTS) $(lib533_LDADD) $(LIBS)
+lib536$(EXEEXT): $(lib536_OBJECTS) $(lib536_DEPENDENCIES)
+ @rm -f lib536$(EXEEXT)
+ $(LINK) $(lib536_LDFLAGS) $(lib536_OBJECTS) $(lib536_LDADD) $(LIBS)
+lib537$(EXEEXT): $(lib537_OBJECTS) $(lib537_DEPENDENCIES)
+ @rm -f lib537$(EXEEXT)
+ $(LINK) $(lib537_LDFLAGS) $(lib537_OBJECTS) $(lib537_LDADD) $(LIBS)
+lib539$(EXEEXT): $(lib539_OBJECTS) $(lib539_DEPENDENCIES)
+ @rm -f lib539$(EXEEXT)
+ $(LINK) $(lib539_LDFLAGS) $(lib539_OBJECTS) $(lib539_LDADD) $(LIBS)
+lib540$(EXEEXT): $(lib540_OBJECTS) $(lib540_DEPENDENCIES)
+ @rm -f lib540$(EXEEXT)
+ $(LINK) $(lib540_LDFLAGS) $(lib540_OBJECTS) $(lib540_LDADD) $(LIBS)
+lib541$(EXEEXT): $(lib541_OBJECTS) $(lib541_DEPENDENCIES)
+ @rm -f lib541$(EXEEXT)
+ $(LINK) $(lib541_LDFLAGS) $(lib541_OBJECTS) $(lib541_LDADD) $(LIBS)
+lib542$(EXEEXT): $(lib542_OBJECTS) $(lib542_DEPENDENCIES)
+ @rm -f lib542$(EXEEXT)
+ $(LINK) $(lib542_LDFLAGS) $(lib542_OBJECTS) $(lib542_LDADD) $(LIBS)
+lib543$(EXEEXT): $(lib543_OBJECTS) $(lib543_DEPENDENCIES)
+ @rm -f lib543$(EXEEXT)
+ $(LINK) $(lib543_LDFLAGS) $(lib543_OBJECTS) $(lib543_LDADD) $(LIBS)
+lib544$(EXEEXT): $(lib544_OBJECTS) $(lib544_DEPENDENCIES)
+ @rm -f lib544$(EXEEXT)
+ $(LINK) $(lib544_LDFLAGS) $(lib544_OBJECTS) $(lib544_LDADD) $(LIBS)
+lib545$(EXEEXT): $(lib545_OBJECTS) $(lib545_DEPENDENCIES)
+ @rm -f lib545$(EXEEXT)
+ $(LINK) $(lib545_LDFLAGS) $(lib545_OBJECTS) $(lib545_LDADD) $(LIBS)
+lib547$(EXEEXT): $(lib547_OBJECTS) $(lib547_DEPENDENCIES)
+ @rm -f lib547$(EXEEXT)
+ $(LINK) $(lib547_LDFLAGS) $(lib547_OBJECTS) $(lib547_LDADD) $(LIBS)
+lib548$(EXEEXT): $(lib548_OBJECTS) $(lib548_DEPENDENCIES)
+ @rm -f lib548$(EXEEXT)
+ $(LINK) $(lib548_LDFLAGS) $(lib548_OBJECTS) $(lib548_LDADD) $(LIBS)
+lib549$(EXEEXT): $(lib549_OBJECTS) $(lib549_DEPENDENCIES)
+ @rm -f lib549$(EXEEXT)
+ $(LINK) $(lib549_LDFLAGS) $(lib549_OBJECTS) $(lib549_LDADD) $(LIBS)
+lib552$(EXEEXT): $(lib552_OBJECTS) $(lib552_DEPENDENCIES)
+ @rm -f lib552$(EXEEXT)
+ $(LINK) $(lib552_LDFLAGS) $(lib552_OBJECTS) $(lib552_LDADD) $(LIBS)
+lib553$(EXEEXT): $(lib553_OBJECTS) $(lib553_DEPENDENCIES)
+ @rm -f lib553$(EXEEXT)
+ $(LINK) $(lib553_LDFLAGS) $(lib553_OBJECTS) $(lib553_LDADD) $(LIBS)
+lib554$(EXEEXT): $(lib554_OBJECTS) $(lib554_DEPENDENCIES)
+ @rm -f lib554$(EXEEXT)
+ $(LINK) $(lib554_LDFLAGS) $(lib554_OBJECTS) $(lib554_LDADD) $(LIBS)
+lib555$(EXEEXT): $(lib555_OBJECTS) $(lib555_DEPENDENCIES)
+ @rm -f lib555$(EXEEXT)
+ $(LINK) $(lib555_LDFLAGS) $(lib555_OBJECTS) $(lib555_LDADD) $(LIBS)
+lib556$(EXEEXT): $(lib556_OBJECTS) $(lib556_DEPENDENCIES)
+ @rm -f lib556$(EXEEXT)
+ $(LINK) $(lib556_LDFLAGS) $(lib556_OBJECTS) $(lib556_LDADD) $(LIBS)
+lib557$(EXEEXT): $(lib557_OBJECTS) $(lib557_DEPENDENCIES)
+ @rm -f lib557$(EXEEXT)
+ $(LINK) $(lib557_LDFLAGS) $(lib557_OBJECTS) $(lib557_LDADD) $(LIBS)
+lib558$(EXEEXT): $(lib558_OBJECTS) $(lib558_DEPENDENCIES)
+ @rm -f lib558$(EXEEXT)
+ $(LINK) $(lib558_LDFLAGS) $(lib558_OBJECTS) $(lib558_LDADD) $(LIBS)
+lib559$(EXEEXT): $(lib559_OBJECTS) $(lib559_DEPENDENCIES)
+ @rm -f lib559$(EXEEXT)
+ $(LINK) $(lib559_LDFLAGS) $(lib559_OBJECTS) $(lib559_LDADD) $(LIBS)
+lib560$(EXEEXT): $(lib560_OBJECTS) $(lib560_DEPENDENCIES)
+ @rm -f lib560$(EXEEXT)
+ $(LINK) $(lib560_LDFLAGS) $(lib560_OBJECTS) $(lib560_LDADD) $(LIBS)
+lib562$(EXEEXT): $(lib562_OBJECTS) $(lib562_DEPENDENCIES)
+ @rm -f lib562$(EXEEXT)
+ $(LINK) $(lib562_LDFLAGS) $(lib562_OBJECTS) $(lib562_LDADD) $(LIBS)
+lib564$(EXEEXT): $(lib564_OBJECTS) $(lib564_DEPENDENCIES)
+ @rm -f lib564$(EXEEXT)
+ $(LINK) $(lib564_LDFLAGS) $(lib564_OBJECTS) $(lib564_LDADD) $(LIBS)
+lib565$(EXEEXT): $(lib565_OBJECTS) $(lib565_DEPENDENCIES)
+ @rm -f lib565$(EXEEXT)
+ $(LINK) $(lib565_LDFLAGS) $(lib565_OBJECTS) $(lib565_LDADD) $(LIBS)
+lib566$(EXEEXT): $(lib566_OBJECTS) $(lib566_DEPENDENCIES)
+ @rm -f lib566$(EXEEXT)
+ $(LINK) $(lib566_LDFLAGS) $(lib566_OBJECTS) $(lib566_LDADD) $(LIBS)
+lib567$(EXEEXT): $(lib567_OBJECTS) $(lib567_DEPENDENCIES)
+ @rm -f lib567$(EXEEXT)
+ $(LINK) $(lib567_LDFLAGS) $(lib567_OBJECTS) $(lib567_LDADD) $(LIBS)
+lib568$(EXEEXT): $(lib568_OBJECTS) $(lib568_DEPENDENCIES)
+ @rm -f lib568$(EXEEXT)
+ $(LINK) $(lib568_LDFLAGS) $(lib568_OBJECTS) $(lib568_LDADD) $(LIBS)
+lib569$(EXEEXT): $(lib569_OBJECTS) $(lib569_DEPENDENCIES)
+ @rm -f lib569$(EXEEXT)
+ $(LINK) $(lib569_LDFLAGS) $(lib569_OBJECTS) $(lib569_LDADD) $(LIBS)
+lib570$(EXEEXT): $(lib570_OBJECTS) $(lib570_DEPENDENCIES)
+ @rm -f lib570$(EXEEXT)
+ $(LINK) $(lib570_LDFLAGS) $(lib570_OBJECTS) $(lib570_LDADD) $(LIBS)
+lib571$(EXEEXT): $(lib571_OBJECTS) $(lib571_DEPENDENCIES)
+ @rm -f lib571$(EXEEXT)
+ $(LINK) $(lib571_LDFLAGS) $(lib571_OBJECTS) $(lib571_LDADD) $(LIBS)
+lib572$(EXEEXT): $(lib572_OBJECTS) $(lib572_DEPENDENCIES)
+ @rm -f lib572$(EXEEXT)
+ $(LINK) $(lib572_LDFLAGS) $(lib572_OBJECTS) $(lib572_LDADD) $(LIBS)
+lib573$(EXEEXT): $(lib573_OBJECTS) $(lib573_DEPENDENCIES)
+ @rm -f lib573$(EXEEXT)
+ $(LINK) $(lib573_LDFLAGS) $(lib573_OBJECTS) $(lib573_LDADD) $(LIBS)
+lib574$(EXEEXT): $(lib574_OBJECTS) $(lib574_DEPENDENCIES)
+ @rm -f lib574$(EXEEXT)
+ $(LINK) $(lib574_LDFLAGS) $(lib574_OBJECTS) $(lib574_LDADD) $(LIBS)
+lib575$(EXEEXT): $(lib575_OBJECTS) $(lib575_DEPENDENCIES)
+ @rm -f lib575$(EXEEXT)
+ $(LINK) $(lib575_LDFLAGS) $(lib575_OBJECTS) $(lib575_LDADD) $(LIBS)
+lib576$(EXEEXT): $(lib576_OBJECTS) $(lib576_DEPENDENCIES)
+ @rm -f lib576$(EXEEXT)
+ $(LINK) $(lib576_LDFLAGS) $(lib576_OBJECTS) $(lib576_LDADD) $(LIBS)
+lib577$(EXEEXT): $(lib577_OBJECTS) $(lib577_DEPENDENCIES)
+ @rm -f lib577$(EXEEXT)
+ $(LINK) $(lib577_LDFLAGS) $(lib577_OBJECTS) $(lib577_LDADD) $(LIBS)
+lib578$(EXEEXT): $(lib578_OBJECTS) $(lib578_DEPENDENCIES)
+ @rm -f lib578$(EXEEXT)
+ $(LINK) $(lib578_LDFLAGS) $(lib578_OBJECTS) $(lib578_LDADD) $(LIBS)
+lib579$(EXEEXT): $(lib579_OBJECTS) $(lib579_DEPENDENCIES)
+ @rm -f lib579$(EXEEXT)
+ $(LINK) $(lib579_LDFLAGS) $(lib579_OBJECTS) $(lib579_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chkhostname-chkhostname.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chkhostname-curl_gethostname.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/first.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib500.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib501.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib502.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib503.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib504.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib505.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib506.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib507.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib508.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib510.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib511.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib512.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib513.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib514.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib515.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib516.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib517.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib518.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib519.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib520.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib521.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib523.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib524.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib525.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib526-first.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib526-lib526.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib526-testutil.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib527-first.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib527-lib526.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib527-testutil.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib529-first.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib529-lib525.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib529-testutil.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib530-first.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib530-lib530.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib530-testutil.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib532-first.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib532-lib526.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib532-testutil.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib533.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib536.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib537.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib539.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib540.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib541.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib542.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib543.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib544.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib545-first.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib545-lib544.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib547.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib548-first.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib548-lib547.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib549.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib552.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib553.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib554.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib555.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib556.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib557.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib558-first.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib558-lib558.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib559-first.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib559-lib558.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib560.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib562.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib564.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib565-first.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib565-lib510.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib566.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib567.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib568.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib569.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib570.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib571.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib572.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib573.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib574.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib575.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib576.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib577.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib578.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib579.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sethostname.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testutil.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+chkhostname-chkhostname.o: chkhostname.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(chkhostname_CFLAGS) $(CFLAGS) -MT chkhostname-chkhostname.o -MD -MP -MF "$(DEPDIR)/chkhostname-chkhostname.Tpo" -c -o chkhostname-chkhostname.o `test -f 'chkhostname.c' || echo '$(srcdir)/'`chkhostname.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/chkhostname-chkhostname.Tpo" "$(DEPDIR)/chkhostname-chkhostname.Po"; else rm -f "$(DEPDIR)/chkhostname-chkhostname.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='chkhostname.c' object='chkhostname-chkhostname.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(chkhostname_CFLAGS) $(CFLAGS) -c -o chkhostname-chkhostname.o `test -f 'chkhostname.c' || echo '$(srcdir)/'`chkhostname.c
+
+chkhostname-chkhostname.obj: chkhostname.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(chkhostname_CFLAGS) $(CFLAGS) -MT chkhostname-chkhostname.obj -MD -MP -MF "$(DEPDIR)/chkhostname-chkhostname.Tpo" -c -o chkhostname-chkhostname.obj `if test -f 'chkhostname.c'; then $(CYGPATH_W) 'chkhostname.c'; else $(CYGPATH_W) '$(srcdir)/chkhostname.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/chkhostname-chkhostname.Tpo" "$(DEPDIR)/chkhostname-chkhostname.Po"; else rm -f "$(DEPDIR)/chkhostname-chkhostname.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='chkhostname.c' object='chkhostname-chkhostname.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(chkhostname_CFLAGS) $(CFLAGS) -c -o chkhostname-chkhostname.obj `if test -f 'chkhostname.c'; then $(CYGPATH_W) 'chkhostname.c'; else $(CYGPATH_W) '$(srcdir)/chkhostname.c'; fi`
+
+chkhostname-curl_gethostname.o: $(top_srcdir)/lib/curl_gethostname.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(chkhostname_CFLAGS) $(CFLAGS) -MT chkhostname-curl_gethostname.o -MD -MP -MF "$(DEPDIR)/chkhostname-curl_gethostname.Tpo" -c -o chkhostname-curl_gethostname.o `test -f '$(top_srcdir)/lib/curl_gethostname.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/curl_gethostname.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/chkhostname-curl_gethostname.Tpo" "$(DEPDIR)/chkhostname-curl_gethostname.Po"; else rm -f "$(DEPDIR)/chkhostname-curl_gethostname.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/curl_gethostname.c' object='chkhostname-curl_gethostname.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(chkhostname_CFLAGS) $(CFLAGS) -c -o chkhostname-curl_gethostname.o `test -f '$(top_srcdir)/lib/curl_gethostname.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/curl_gethostname.c
+
+chkhostname-curl_gethostname.obj: $(top_srcdir)/lib/curl_gethostname.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(chkhostname_CFLAGS) $(CFLAGS) -MT chkhostname-curl_gethostname.obj -MD -MP -MF "$(DEPDIR)/chkhostname-curl_gethostname.Tpo" -c -o chkhostname-curl_gethostname.obj `if test -f '$(top_srcdir)/lib/curl_gethostname.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/curl_gethostname.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/curl_gethostname.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/chkhostname-curl_gethostname.Tpo" "$(DEPDIR)/chkhostname-curl_gethostname.Po"; else rm -f "$(DEPDIR)/chkhostname-curl_gethostname.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/curl_gethostname.c' object='chkhostname-curl_gethostname.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(chkhostname_CFLAGS) $(CFLAGS) -c -o chkhostname-curl_gethostname.obj `if test -f '$(top_srcdir)/lib/curl_gethostname.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/curl_gethostname.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/curl_gethostname.c'; fi`
+
+lib526-lib526.o: lib526.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib526_CFLAGS) $(CFLAGS) -MT lib526-lib526.o -MD -MP -MF "$(DEPDIR)/lib526-lib526.Tpo" -c -o lib526-lib526.o `test -f 'lib526.c' || echo '$(srcdir)/'`lib526.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib526-lib526.Tpo" "$(DEPDIR)/lib526-lib526.Po"; else rm -f "$(DEPDIR)/lib526-lib526.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lib526.c' object='lib526-lib526.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib526_CFLAGS) $(CFLAGS) -c -o lib526-lib526.o `test -f 'lib526.c' || echo '$(srcdir)/'`lib526.c
+
+lib526-lib526.obj: lib526.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib526_CFLAGS) $(CFLAGS) -MT lib526-lib526.obj -MD -MP -MF "$(DEPDIR)/lib526-lib526.Tpo" -c -o lib526-lib526.obj `if test -f 'lib526.c'; then $(CYGPATH_W) 'lib526.c'; else $(CYGPATH_W) '$(srcdir)/lib526.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib526-lib526.Tpo" "$(DEPDIR)/lib526-lib526.Po"; else rm -f "$(DEPDIR)/lib526-lib526.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lib526.c' object='lib526-lib526.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib526_CFLAGS) $(CFLAGS) -c -o lib526-lib526.obj `if test -f 'lib526.c'; then $(CYGPATH_W) 'lib526.c'; else $(CYGPATH_W) '$(srcdir)/lib526.c'; fi`
+
+lib526-first.o: first.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib526_CFLAGS) $(CFLAGS) -MT lib526-first.o -MD -MP -MF "$(DEPDIR)/lib526-first.Tpo" -c -o lib526-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib526-first.Tpo" "$(DEPDIR)/lib526-first.Po"; else rm -f "$(DEPDIR)/lib526-first.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='first.c' object='lib526-first.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib526_CFLAGS) $(CFLAGS) -c -o lib526-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
+
+lib526-first.obj: first.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib526_CFLAGS) $(CFLAGS) -MT lib526-first.obj -MD -MP -MF "$(DEPDIR)/lib526-first.Tpo" -c -o lib526-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib526-first.Tpo" "$(DEPDIR)/lib526-first.Po"; else rm -f "$(DEPDIR)/lib526-first.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='first.c' object='lib526-first.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib526_CFLAGS) $(CFLAGS) -c -o lib526-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
+
+lib526-testutil.o: testutil.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib526_CFLAGS) $(CFLAGS) -MT lib526-testutil.o -MD -MP -MF "$(DEPDIR)/lib526-testutil.Tpo" -c -o lib526-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib526-testutil.Tpo" "$(DEPDIR)/lib526-testutil.Po"; else rm -f "$(DEPDIR)/lib526-testutil.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='testutil.c' object='lib526-testutil.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib526_CFLAGS) $(CFLAGS) -c -o lib526-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
+
+lib526-testutil.obj: testutil.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib526_CFLAGS) $(CFLAGS) -MT lib526-testutil.obj -MD -MP -MF "$(DEPDIR)/lib526-testutil.Tpo" -c -o lib526-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib526-testutil.Tpo" "$(DEPDIR)/lib526-testutil.Po"; else rm -f "$(DEPDIR)/lib526-testutil.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='testutil.c' object='lib526-testutil.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib526_CFLAGS) $(CFLAGS) -c -o lib526-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
+
+lib527-lib526.o: lib526.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib527_CFLAGS) $(CFLAGS) -MT lib527-lib526.o -MD -MP -MF "$(DEPDIR)/lib527-lib526.Tpo" -c -o lib527-lib526.o `test -f 'lib526.c' || echo '$(srcdir)/'`lib526.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib527-lib526.Tpo" "$(DEPDIR)/lib527-lib526.Po"; else rm -f "$(DEPDIR)/lib527-lib526.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lib526.c' object='lib527-lib526.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib527_CFLAGS) $(CFLAGS) -c -o lib527-lib526.o `test -f 'lib526.c' || echo '$(srcdir)/'`lib526.c
+
+lib527-lib526.obj: lib526.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib527_CFLAGS) $(CFLAGS) -MT lib527-lib526.obj -MD -MP -MF "$(DEPDIR)/lib527-lib526.Tpo" -c -o lib527-lib526.obj `if test -f 'lib526.c'; then $(CYGPATH_W) 'lib526.c'; else $(CYGPATH_W) '$(srcdir)/lib526.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib527-lib526.Tpo" "$(DEPDIR)/lib527-lib526.Po"; else rm -f "$(DEPDIR)/lib527-lib526.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lib526.c' object='lib527-lib526.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib527_CFLAGS) $(CFLAGS) -c -o lib527-lib526.obj `if test -f 'lib526.c'; then $(CYGPATH_W) 'lib526.c'; else $(CYGPATH_W) '$(srcdir)/lib526.c'; fi`
+
+lib527-first.o: first.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib527_CFLAGS) $(CFLAGS) -MT lib527-first.o -MD -MP -MF "$(DEPDIR)/lib527-first.Tpo" -c -o lib527-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib527-first.Tpo" "$(DEPDIR)/lib527-first.Po"; else rm -f "$(DEPDIR)/lib527-first.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='first.c' object='lib527-first.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib527_CFLAGS) $(CFLAGS) -c -o lib527-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
+
+lib527-first.obj: first.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib527_CFLAGS) $(CFLAGS) -MT lib527-first.obj -MD -MP -MF "$(DEPDIR)/lib527-first.Tpo" -c -o lib527-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib527-first.Tpo" "$(DEPDIR)/lib527-first.Po"; else rm -f "$(DEPDIR)/lib527-first.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='first.c' object='lib527-first.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib527_CFLAGS) $(CFLAGS) -c -o lib527-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
+
+lib527-testutil.o: testutil.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib527_CFLAGS) $(CFLAGS) -MT lib527-testutil.o -MD -MP -MF "$(DEPDIR)/lib527-testutil.Tpo" -c -o lib527-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib527-testutil.Tpo" "$(DEPDIR)/lib527-testutil.Po"; else rm -f "$(DEPDIR)/lib527-testutil.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='testutil.c' object='lib527-testutil.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib527_CFLAGS) $(CFLAGS) -c -o lib527-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
+
+lib527-testutil.obj: testutil.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib527_CFLAGS) $(CFLAGS) -MT lib527-testutil.obj -MD -MP -MF "$(DEPDIR)/lib527-testutil.Tpo" -c -o lib527-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib527-testutil.Tpo" "$(DEPDIR)/lib527-testutil.Po"; else rm -f "$(DEPDIR)/lib527-testutil.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='testutil.c' object='lib527-testutil.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib527_CFLAGS) $(CFLAGS) -c -o lib527-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
+
+lib529-lib525.o: lib525.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib529_CFLAGS) $(CFLAGS) -MT lib529-lib525.o -MD -MP -MF "$(DEPDIR)/lib529-lib525.Tpo" -c -o lib529-lib525.o `test -f 'lib525.c' || echo '$(srcdir)/'`lib525.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib529-lib525.Tpo" "$(DEPDIR)/lib529-lib525.Po"; else rm -f "$(DEPDIR)/lib529-lib525.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lib525.c' object='lib529-lib525.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib529_CFLAGS) $(CFLAGS) -c -o lib529-lib525.o `test -f 'lib525.c' || echo '$(srcdir)/'`lib525.c
+
+lib529-lib525.obj: lib525.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib529_CFLAGS) $(CFLAGS) -MT lib529-lib525.obj -MD -MP -MF "$(DEPDIR)/lib529-lib525.Tpo" -c -o lib529-lib525.obj `if test -f 'lib525.c'; then $(CYGPATH_W) 'lib525.c'; else $(CYGPATH_W) '$(srcdir)/lib525.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib529-lib525.Tpo" "$(DEPDIR)/lib529-lib525.Po"; else rm -f "$(DEPDIR)/lib529-lib525.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lib525.c' object='lib529-lib525.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib529_CFLAGS) $(CFLAGS) -c -o lib529-lib525.obj `if test -f 'lib525.c'; then $(CYGPATH_W) 'lib525.c'; else $(CYGPATH_W) '$(srcdir)/lib525.c'; fi`
+
+lib529-first.o: first.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib529_CFLAGS) $(CFLAGS) -MT lib529-first.o -MD -MP -MF "$(DEPDIR)/lib529-first.Tpo" -c -o lib529-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib529-first.Tpo" "$(DEPDIR)/lib529-first.Po"; else rm -f "$(DEPDIR)/lib529-first.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='first.c' object='lib529-first.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib529_CFLAGS) $(CFLAGS) -c -o lib529-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
+
+lib529-first.obj: first.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib529_CFLAGS) $(CFLAGS) -MT lib529-first.obj -MD -MP -MF "$(DEPDIR)/lib529-first.Tpo" -c -o lib529-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib529-first.Tpo" "$(DEPDIR)/lib529-first.Po"; else rm -f "$(DEPDIR)/lib529-first.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='first.c' object='lib529-first.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib529_CFLAGS) $(CFLAGS) -c -o lib529-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
+
+lib529-testutil.o: testutil.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib529_CFLAGS) $(CFLAGS) -MT lib529-testutil.o -MD -MP -MF "$(DEPDIR)/lib529-testutil.Tpo" -c -o lib529-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib529-testutil.Tpo" "$(DEPDIR)/lib529-testutil.Po"; else rm -f "$(DEPDIR)/lib529-testutil.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='testutil.c' object='lib529-testutil.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib529_CFLAGS) $(CFLAGS) -c -o lib529-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
+
+lib529-testutil.obj: testutil.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib529_CFLAGS) $(CFLAGS) -MT lib529-testutil.obj -MD -MP -MF "$(DEPDIR)/lib529-testutil.Tpo" -c -o lib529-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib529-testutil.Tpo" "$(DEPDIR)/lib529-testutil.Po"; else rm -f "$(DEPDIR)/lib529-testutil.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='testutil.c' object='lib529-testutil.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib529_CFLAGS) $(CFLAGS) -c -o lib529-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
+
+lib530-lib530.o: lib530.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib530_CFLAGS) $(CFLAGS) -MT lib530-lib530.o -MD -MP -MF "$(DEPDIR)/lib530-lib530.Tpo" -c -o lib530-lib530.o `test -f 'lib530.c' || echo '$(srcdir)/'`lib530.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib530-lib530.Tpo" "$(DEPDIR)/lib530-lib530.Po"; else rm -f "$(DEPDIR)/lib530-lib530.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lib530.c' object='lib530-lib530.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib530_CFLAGS) $(CFLAGS) -c -o lib530-lib530.o `test -f 'lib530.c' || echo '$(srcdir)/'`lib530.c
+
+lib530-lib530.obj: lib530.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib530_CFLAGS) $(CFLAGS) -MT lib530-lib530.obj -MD -MP -MF "$(DEPDIR)/lib530-lib530.Tpo" -c -o lib530-lib530.obj `if test -f 'lib530.c'; then $(CYGPATH_W) 'lib530.c'; else $(CYGPATH_W) '$(srcdir)/lib530.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib530-lib530.Tpo" "$(DEPDIR)/lib530-lib530.Po"; else rm -f "$(DEPDIR)/lib530-lib530.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lib530.c' object='lib530-lib530.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib530_CFLAGS) $(CFLAGS) -c -o lib530-lib530.obj `if test -f 'lib530.c'; then $(CYGPATH_W) 'lib530.c'; else $(CYGPATH_W) '$(srcdir)/lib530.c'; fi`
+
+lib530-first.o: first.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib530_CFLAGS) $(CFLAGS) -MT lib530-first.o -MD -MP -MF "$(DEPDIR)/lib530-first.Tpo" -c -o lib530-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib530-first.Tpo" "$(DEPDIR)/lib530-first.Po"; else rm -f "$(DEPDIR)/lib530-first.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='first.c' object='lib530-first.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib530_CFLAGS) $(CFLAGS) -c -o lib530-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
+
+lib530-first.obj: first.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib530_CFLAGS) $(CFLAGS) -MT lib530-first.obj -MD -MP -MF "$(DEPDIR)/lib530-first.Tpo" -c -o lib530-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib530-first.Tpo" "$(DEPDIR)/lib530-first.Po"; else rm -f "$(DEPDIR)/lib530-first.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='first.c' object='lib530-first.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib530_CFLAGS) $(CFLAGS) -c -o lib530-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
+
+lib530-testutil.o: testutil.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib530_CFLAGS) $(CFLAGS) -MT lib530-testutil.o -MD -MP -MF "$(DEPDIR)/lib530-testutil.Tpo" -c -o lib530-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib530-testutil.Tpo" "$(DEPDIR)/lib530-testutil.Po"; else rm -f "$(DEPDIR)/lib530-testutil.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='testutil.c' object='lib530-testutil.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib530_CFLAGS) $(CFLAGS) -c -o lib530-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
+
+lib530-testutil.obj: testutil.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib530_CFLAGS) $(CFLAGS) -MT lib530-testutil.obj -MD -MP -MF "$(DEPDIR)/lib530-testutil.Tpo" -c -o lib530-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib530-testutil.Tpo" "$(DEPDIR)/lib530-testutil.Po"; else rm -f "$(DEPDIR)/lib530-testutil.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='testutil.c' object='lib530-testutil.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib530_CFLAGS) $(CFLAGS) -c -o lib530-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
+
+lib532-lib526.o: lib526.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib532_CFLAGS) $(CFLAGS) -MT lib532-lib526.o -MD -MP -MF "$(DEPDIR)/lib532-lib526.Tpo" -c -o lib532-lib526.o `test -f 'lib526.c' || echo '$(srcdir)/'`lib526.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib532-lib526.Tpo" "$(DEPDIR)/lib532-lib526.Po"; else rm -f "$(DEPDIR)/lib532-lib526.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lib526.c' object='lib532-lib526.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib532_CFLAGS) $(CFLAGS) -c -o lib532-lib526.o `test -f 'lib526.c' || echo '$(srcdir)/'`lib526.c
+
+lib532-lib526.obj: lib526.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib532_CFLAGS) $(CFLAGS) -MT lib532-lib526.obj -MD -MP -MF "$(DEPDIR)/lib532-lib526.Tpo" -c -o lib532-lib526.obj `if test -f 'lib526.c'; then $(CYGPATH_W) 'lib526.c'; else $(CYGPATH_W) '$(srcdir)/lib526.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib532-lib526.Tpo" "$(DEPDIR)/lib532-lib526.Po"; else rm -f "$(DEPDIR)/lib532-lib526.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lib526.c' object='lib532-lib526.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib532_CFLAGS) $(CFLAGS) -c -o lib532-lib526.obj `if test -f 'lib526.c'; then $(CYGPATH_W) 'lib526.c'; else $(CYGPATH_W) '$(srcdir)/lib526.c'; fi`
+
+lib532-first.o: first.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib532_CFLAGS) $(CFLAGS) -MT lib532-first.o -MD -MP -MF "$(DEPDIR)/lib532-first.Tpo" -c -o lib532-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib532-first.Tpo" "$(DEPDIR)/lib532-first.Po"; else rm -f "$(DEPDIR)/lib532-first.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='first.c' object='lib532-first.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib532_CFLAGS) $(CFLAGS) -c -o lib532-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
+
+lib532-first.obj: first.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib532_CFLAGS) $(CFLAGS) -MT lib532-first.obj -MD -MP -MF "$(DEPDIR)/lib532-first.Tpo" -c -o lib532-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib532-first.Tpo" "$(DEPDIR)/lib532-first.Po"; else rm -f "$(DEPDIR)/lib532-first.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='first.c' object='lib532-first.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib532_CFLAGS) $(CFLAGS) -c -o lib532-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
+
+lib532-testutil.o: testutil.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib532_CFLAGS) $(CFLAGS) -MT lib532-testutil.o -MD -MP -MF "$(DEPDIR)/lib532-testutil.Tpo" -c -o lib532-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib532-testutil.Tpo" "$(DEPDIR)/lib532-testutil.Po"; else rm -f "$(DEPDIR)/lib532-testutil.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='testutil.c' object='lib532-testutil.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib532_CFLAGS) $(CFLAGS) -c -o lib532-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
+
+lib532-testutil.obj: testutil.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib532_CFLAGS) $(CFLAGS) -MT lib532-testutil.obj -MD -MP -MF "$(DEPDIR)/lib532-testutil.Tpo" -c -o lib532-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib532-testutil.Tpo" "$(DEPDIR)/lib532-testutil.Po"; else rm -f "$(DEPDIR)/lib532-testutil.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='testutil.c' object='lib532-testutil.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib532_CFLAGS) $(CFLAGS) -c -o lib532-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
+
+lib545-lib544.o: lib544.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib545_CFLAGS) $(CFLAGS) -MT lib545-lib544.o -MD -MP -MF "$(DEPDIR)/lib545-lib544.Tpo" -c -o lib545-lib544.o `test -f 'lib544.c' || echo '$(srcdir)/'`lib544.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib545-lib544.Tpo" "$(DEPDIR)/lib545-lib544.Po"; else rm -f "$(DEPDIR)/lib545-lib544.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lib544.c' object='lib545-lib544.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib545_CFLAGS) $(CFLAGS) -c -o lib545-lib544.o `test -f 'lib544.c' || echo '$(srcdir)/'`lib544.c
+
+lib545-lib544.obj: lib544.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib545_CFLAGS) $(CFLAGS) -MT lib545-lib544.obj -MD -MP -MF "$(DEPDIR)/lib545-lib544.Tpo" -c -o lib545-lib544.obj `if test -f 'lib544.c'; then $(CYGPATH_W) 'lib544.c'; else $(CYGPATH_W) '$(srcdir)/lib544.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib545-lib544.Tpo" "$(DEPDIR)/lib545-lib544.Po"; else rm -f "$(DEPDIR)/lib545-lib544.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lib544.c' object='lib545-lib544.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib545_CFLAGS) $(CFLAGS) -c -o lib545-lib544.obj `if test -f 'lib544.c'; then $(CYGPATH_W) 'lib544.c'; else $(CYGPATH_W) '$(srcdir)/lib544.c'; fi`
+
+lib545-first.o: first.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib545_CFLAGS) $(CFLAGS) -MT lib545-first.o -MD -MP -MF "$(DEPDIR)/lib545-first.Tpo" -c -o lib545-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib545-first.Tpo" "$(DEPDIR)/lib545-first.Po"; else rm -f "$(DEPDIR)/lib545-first.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='first.c' object='lib545-first.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib545_CFLAGS) $(CFLAGS) -c -o lib545-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
+
+lib545-first.obj: first.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib545_CFLAGS) $(CFLAGS) -MT lib545-first.obj -MD -MP -MF "$(DEPDIR)/lib545-first.Tpo" -c -o lib545-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib545-first.Tpo" "$(DEPDIR)/lib545-first.Po"; else rm -f "$(DEPDIR)/lib545-first.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='first.c' object='lib545-first.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib545_CFLAGS) $(CFLAGS) -c -o lib545-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
+
+lib548-lib547.o: lib547.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib548_CFLAGS) $(CFLAGS) -MT lib548-lib547.o -MD -MP -MF "$(DEPDIR)/lib548-lib547.Tpo" -c -o lib548-lib547.o `test -f 'lib547.c' || echo '$(srcdir)/'`lib547.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib548-lib547.Tpo" "$(DEPDIR)/lib548-lib547.Po"; else rm -f "$(DEPDIR)/lib548-lib547.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lib547.c' object='lib548-lib547.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib548_CFLAGS) $(CFLAGS) -c -o lib548-lib547.o `test -f 'lib547.c' || echo '$(srcdir)/'`lib547.c
+
+lib548-lib547.obj: lib547.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib548_CFLAGS) $(CFLAGS) -MT lib548-lib547.obj -MD -MP -MF "$(DEPDIR)/lib548-lib547.Tpo" -c -o lib548-lib547.obj `if test -f 'lib547.c'; then $(CYGPATH_W) 'lib547.c'; else $(CYGPATH_W) '$(srcdir)/lib547.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib548-lib547.Tpo" "$(DEPDIR)/lib548-lib547.Po"; else rm -f "$(DEPDIR)/lib548-lib547.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lib547.c' object='lib548-lib547.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib548_CFLAGS) $(CFLAGS) -c -o lib548-lib547.obj `if test -f 'lib547.c'; then $(CYGPATH_W) 'lib547.c'; else $(CYGPATH_W) '$(srcdir)/lib547.c'; fi`
+
+lib548-first.o: first.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib548_CFLAGS) $(CFLAGS) -MT lib548-first.o -MD -MP -MF "$(DEPDIR)/lib548-first.Tpo" -c -o lib548-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib548-first.Tpo" "$(DEPDIR)/lib548-first.Po"; else rm -f "$(DEPDIR)/lib548-first.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='first.c' object='lib548-first.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib548_CFLAGS) $(CFLAGS) -c -o lib548-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
+
+lib548-first.obj: first.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib548_CFLAGS) $(CFLAGS) -MT lib548-first.obj -MD -MP -MF "$(DEPDIR)/lib548-first.Tpo" -c -o lib548-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib548-first.Tpo" "$(DEPDIR)/lib548-first.Po"; else rm -f "$(DEPDIR)/lib548-first.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='first.c' object='lib548-first.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib548_CFLAGS) $(CFLAGS) -c -o lib548-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
+
+lib558-lib558.o: lib558.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib558_CFLAGS) $(CFLAGS) -MT lib558-lib558.o -MD -MP -MF "$(DEPDIR)/lib558-lib558.Tpo" -c -o lib558-lib558.o `test -f 'lib558.c' || echo '$(srcdir)/'`lib558.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib558-lib558.Tpo" "$(DEPDIR)/lib558-lib558.Po"; else rm -f "$(DEPDIR)/lib558-lib558.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lib558.c' object='lib558-lib558.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib558_CFLAGS) $(CFLAGS) -c -o lib558-lib558.o `test -f 'lib558.c' || echo '$(srcdir)/'`lib558.c
+
+lib558-lib558.obj: lib558.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib558_CFLAGS) $(CFLAGS) -MT lib558-lib558.obj -MD -MP -MF "$(DEPDIR)/lib558-lib558.Tpo" -c -o lib558-lib558.obj `if test -f 'lib558.c'; then $(CYGPATH_W) 'lib558.c'; else $(CYGPATH_W) '$(srcdir)/lib558.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib558-lib558.Tpo" "$(DEPDIR)/lib558-lib558.Po"; else rm -f "$(DEPDIR)/lib558-lib558.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lib558.c' object='lib558-lib558.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib558_CFLAGS) $(CFLAGS) -c -o lib558-lib558.obj `if test -f 'lib558.c'; then $(CYGPATH_W) 'lib558.c'; else $(CYGPATH_W) '$(srcdir)/lib558.c'; fi`
+
+lib558-first.o: first.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib558_CFLAGS) $(CFLAGS) -MT lib558-first.o -MD -MP -MF "$(DEPDIR)/lib558-first.Tpo" -c -o lib558-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib558-first.Tpo" "$(DEPDIR)/lib558-first.Po"; else rm -f "$(DEPDIR)/lib558-first.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='first.c' object='lib558-first.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib558_CFLAGS) $(CFLAGS) -c -o lib558-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
+
+lib558-first.obj: first.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib558_CFLAGS) $(CFLAGS) -MT lib558-first.obj -MD -MP -MF "$(DEPDIR)/lib558-first.Tpo" -c -o lib558-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib558-first.Tpo" "$(DEPDIR)/lib558-first.Po"; else rm -f "$(DEPDIR)/lib558-first.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='first.c' object='lib558-first.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib558_CFLAGS) $(CFLAGS) -c -o lib558-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
+
+lib559-lib558.o: lib558.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib559_CFLAGS) $(CFLAGS) -MT lib559-lib558.o -MD -MP -MF "$(DEPDIR)/lib559-lib558.Tpo" -c -o lib559-lib558.o `test -f 'lib558.c' || echo '$(srcdir)/'`lib558.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib559-lib558.Tpo" "$(DEPDIR)/lib559-lib558.Po"; else rm -f "$(DEPDIR)/lib559-lib558.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lib558.c' object='lib559-lib558.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib559_CFLAGS) $(CFLAGS) -c -o lib559-lib558.o `test -f 'lib558.c' || echo '$(srcdir)/'`lib558.c
+
+lib559-lib558.obj: lib558.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib559_CFLAGS) $(CFLAGS) -MT lib559-lib558.obj -MD -MP -MF "$(DEPDIR)/lib559-lib558.Tpo" -c -o lib559-lib558.obj `if test -f 'lib558.c'; then $(CYGPATH_W) 'lib558.c'; else $(CYGPATH_W) '$(srcdir)/lib558.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib559-lib558.Tpo" "$(DEPDIR)/lib559-lib558.Po"; else rm -f "$(DEPDIR)/lib559-lib558.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lib558.c' object='lib559-lib558.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib559_CFLAGS) $(CFLAGS) -c -o lib559-lib558.obj `if test -f 'lib558.c'; then $(CYGPATH_W) 'lib558.c'; else $(CYGPATH_W) '$(srcdir)/lib558.c'; fi`
+
+lib559-first.o: first.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib559_CFLAGS) $(CFLAGS) -MT lib559-first.o -MD -MP -MF "$(DEPDIR)/lib559-first.Tpo" -c -o lib559-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib559-first.Tpo" "$(DEPDIR)/lib559-first.Po"; else rm -f "$(DEPDIR)/lib559-first.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='first.c' object='lib559-first.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib559_CFLAGS) $(CFLAGS) -c -o lib559-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
+
+lib559-first.obj: first.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib559_CFLAGS) $(CFLAGS) -MT lib559-first.obj -MD -MP -MF "$(DEPDIR)/lib559-first.Tpo" -c -o lib559-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib559-first.Tpo" "$(DEPDIR)/lib559-first.Po"; else rm -f "$(DEPDIR)/lib559-first.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='first.c' object='lib559-first.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib559_CFLAGS) $(CFLAGS) -c -o lib559-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
+
+lib565-lib510.o: lib510.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib565_CFLAGS) $(CFLAGS) -MT lib565-lib510.o -MD -MP -MF "$(DEPDIR)/lib565-lib510.Tpo" -c -o lib565-lib510.o `test -f 'lib510.c' || echo '$(srcdir)/'`lib510.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib565-lib510.Tpo" "$(DEPDIR)/lib565-lib510.Po"; else rm -f "$(DEPDIR)/lib565-lib510.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lib510.c' object='lib565-lib510.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib565_CFLAGS) $(CFLAGS) -c -o lib565-lib510.o `test -f 'lib510.c' || echo '$(srcdir)/'`lib510.c
+
+lib565-lib510.obj: lib510.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib565_CFLAGS) $(CFLAGS) -MT lib565-lib510.obj -MD -MP -MF "$(DEPDIR)/lib565-lib510.Tpo" -c -o lib565-lib510.obj `if test -f 'lib510.c'; then $(CYGPATH_W) 'lib510.c'; else $(CYGPATH_W) '$(srcdir)/lib510.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib565-lib510.Tpo" "$(DEPDIR)/lib565-lib510.Po"; else rm -f "$(DEPDIR)/lib565-lib510.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lib510.c' object='lib565-lib510.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib565_CFLAGS) $(CFLAGS) -c -o lib565-lib510.obj `if test -f 'lib510.c'; then $(CYGPATH_W) 'lib510.c'; else $(CYGPATH_W) '$(srcdir)/lib510.c'; fi`
+
+lib565-first.o: first.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib565_CFLAGS) $(CFLAGS) -MT lib565-first.o -MD -MP -MF "$(DEPDIR)/lib565-first.Tpo" -c -o lib565-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib565-first.Tpo" "$(DEPDIR)/lib565-first.Po"; else rm -f "$(DEPDIR)/lib565-first.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='first.c' object='lib565-first.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib565_CFLAGS) $(CFLAGS) -c -o lib565-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
+
+lib565-first.obj: first.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib565_CFLAGS) $(CFLAGS) -MT lib565-first.obj -MD -MP -MF "$(DEPDIR)/lib565-first.Tpo" -c -o lib565-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib565-first.Tpo" "$(DEPDIR)/lib565-first.Po"; else rm -f "$(DEPDIR)/lib565-first.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='first.c' object='lib565-first.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib565_CFLAGS) $(CFLAGS) -c -o lib565-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+ -rm -f libtool
+uninstall-info-am:
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ list='$(DISTFILES)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkdir_p) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ clean-noinstPROGRAMS mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-libtool distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstLTLIBRARIES clean-noinstPROGRAMS \
+ ctags distclean distclean-compile distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-exec install-exec-am install-info \
+ install-info-am install-man install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags uninstall uninstall-am uninstall-info-am
+
+# 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/tests/libtest/Makefile.inc b/tests/libtest/Makefile.inc
new file mode 100644
index 0000000..a0f1c0e
--- /dev/null
+++ b/tests/libtest/Makefile.inc
@@ -0,0 +1,166 @@
+# files used only in some libcurl test programs
+TESTUTIL = testutil.c testutil.h
+
+# these files are used in every single test program below
+SUPPORTFILES = first.c test.h
+
+# These are all libcurl test programs
+noinst_PROGRAMS = lib500 lib501 lib502 lib503 lib504 lib505 lib506 \
+ lib507 lib508 lib510 lib511 lib512 lib513 lib514 lib515 lib516 \
+ lib517 lib518 lib519 lib520 lib521 lib523 lib524 lib525 lib526 lib527 \
+ lib574 lib575 lib576 lib577 lib578 lib579 \
+ lib529 lib530 lib532 lib533 lib536 lib537 lib540 lib541 lib542 lib543 \
+ lib544 lib545 lib547 lib548 lib549 lib552 lib553 lib554 lib555 lib556 \
+ lib539 lib557 lib558 lib559 lib560 lib562 lib564 lib565 lib566 lib567 \
+ lib568 lib569 lib570 lib571 lib572 lib573 chkhostname
+
+chkhostname_SOURCES = chkhostname.c $(top_srcdir)/lib/curl_gethostname.c
+chkhostname_LDADD = @CURL_NETWORK_LIBS@
+chkhostname_DEPENDENCIES =
+chkhostname_CFLAGS = $(AM_CFLAGS)
+
+lib500_SOURCES = lib500.c $(SUPPORTFILES)
+
+lib501_SOURCES = lib501.c $(SUPPORTFILES)
+
+lib502_SOURCES = lib502.c $(SUPPORTFILES) $(TESTUTIL)
+
+lib503_SOURCES = lib503.c $(SUPPORTFILES) $(TESTUTIL)
+
+lib504_SOURCES = lib504.c $(SUPPORTFILES) $(TESTUTIL)
+
+lib505_SOURCES = lib505.c $(SUPPORTFILES)
+
+lib506_SOURCES = lib506.c $(SUPPORTFILES)
+
+lib507_SOURCES = lib507.c $(SUPPORTFILES) $(TESTUTIL)
+
+lib508_SOURCES = lib508.c $(SUPPORTFILES)
+
+lib510_SOURCES = lib510.c $(SUPPORTFILES)
+
+lib511_SOURCES = lib511.c $(SUPPORTFILES)
+
+lib512_SOURCES = lib512.c $(SUPPORTFILES)
+
+lib513_SOURCES = lib513.c $(SUPPORTFILES)
+
+lib514_SOURCES = lib514.c $(SUPPORTFILES)
+
+lib515_SOURCES = lib515.c $(SUPPORTFILES)
+
+lib516_SOURCES = lib516.c $(SUPPORTFILES)
+
+lib517_SOURCES = lib517.c $(SUPPORTFILES)
+
+lib518_SOURCES = lib518.c $(SUPPORTFILES)
+
+lib519_SOURCES = lib519.c $(SUPPORTFILES)
+
+lib520_SOURCES = lib520.c $(SUPPORTFILES)
+
+lib521_SOURCES = lib521.c $(SUPPORTFILES)
+
+lib523_SOURCES = lib523.c $(SUPPORTFILES)
+
+lib524_SOURCES = lib524.c $(SUPPORTFILES)
+
+lib525_SOURCES = lib525.c $(SUPPORTFILES) $(TESTUTIL)
+
+lib526_SOURCES = lib526.c $(SUPPORTFILES) $(TESTUTIL)
+lib526_CFLAGS = -DLIB526
+
+lib527_SOURCES = lib526.c $(SUPPORTFILES) $(TESTUTIL)
+lib527_CFLAGS = -DLIB527
+
+lib529_SOURCES = lib525.c $(SUPPORTFILES) $(TESTUTIL)
+lib529_CFLAGS = -DLIB529
+
+lib530_SOURCES = lib530.c $(SUPPORTFILES) $(TESTUTIL)
+lib530_CFLAGS = -DLIB530
+
+lib532_SOURCES = lib526.c $(SUPPORTFILES) $(TESTUTIL)
+lib532_CFLAGS = -DLIB532
+
+lib533_SOURCES = lib533.c $(SUPPORTFILES) $(TESTUTIL)
+
+lib536_SOURCES = lib536.c $(SUPPORTFILES) $(TESTUTIL)
+
+lib537_SOURCES = lib537.c $(SUPPORTFILES)
+
+lib539_SOURCES = lib539.c $(SUPPORTFILES)
+
+lib540_SOURCES = lib540.c $(SUPPORTFILES)
+
+lib541_SOURCES = lib541.c $(SUPPORTFILES)
+
+lib542_SOURCES = lib542.c $(SUPPORTFILES)
+
+lib543_SOURCES = lib543.c $(SUPPORTFILES)
+
+lib544_SOURCES = lib544.c $(SUPPORTFILES)
+
+lib545_SOURCES = lib544.c $(SUPPORTFILES)
+lib545_CFLAGS = -DLIB545
+
+lib547_SOURCES = lib547.c $(SUPPORTFILES)
+
+lib548_SOURCES = lib547.c $(SUPPORTFILES)
+lib548_CFLAGS = -DLIB548
+
+lib549_SOURCES = lib549.c $(SUPPORTFILES)
+
+lib555_SOURCES = lib555.c $(SUPPORTFILES) $(TESTUTIL)
+
+lib552_SOURCES = lib552.c $(SUPPORTFILES)
+
+lib553_SOURCES = lib553.c $(SUPPORTFILES)
+
+lib554_SOURCES = lib554.c $(SUPPORTFILES)
+
+lib556_SOURCES = lib556.c $(SUPPORTFILES)
+
+lib557_SOURCES = lib557.c $(SUPPORTFILES)
+
+lib558_SOURCES = lib558.c $(SUPPORTFILES)
+lib558_CFLAGS = -DLIB558
+
+lib559_SOURCES = lib558.c $(SUPPORTFILES)
+lib559_CFLAGS = -DLIB559
+
+lib560_SOURCES = lib560.c $(SUPPORTFILES)
+
+lib574_SOURCES = lib574.c $(SUPPORTFILES)
+
+lib575_SOURCES = lib575.c $(SUPPORTFILES)
+
+lib576_SOURCES = lib576.c $(SUPPORTFILES)
+
+lib577_SOURCES = lib577.c $(SUPPORTFILES)
+
+lib562_SOURCES = lib562.c $(SUPPORTFILES)
+
+lib564_SOURCES = lib564.c $(SUPPORTFILES) $(TESTUTIL)
+
+lib565_SOURCES = lib510.c $(SUPPORTFILES)
+lib565_CFLAGS = -DLIB565
+
+lib566_SOURCES = lib566.c $(SUPPORTFILES)
+
+lib567_SOURCES = lib567.c $(SUPPORTFILES)
+
+lib568_SOURCES = lib568.c $(SUPPORTFILES)
+
+lib569_SOURCES = lib569.c $(SUPPORTFILES)
+
+lib570_SOURCES = lib570.c $(SUPPORTFILES)
+
+lib571_SOURCES = lib571.c $(SUPPORTFILES)
+
+lib572_SOURCES = lib572.c $(SUPPORTFILES)
+
+lib573_SOURCES = lib573.c $(SUPPORTFILES) $(TESTUTIL)
+
+lib578_SOURCES = lib578.c $(SUPPORTFILES)
+
+lib579_SOURCES = lib579.c $(SUPPORTFILES)
diff --git a/tests/libtest/chkhostname.c b/tests/libtest/chkhostname.c
new file mode 100644
index 0000000..72c8b6a
--- /dev/null
+++ b/tests/libtest/chkhostname.c
@@ -0,0 +1,26 @@
+#include "setup.h"
+
+#include "curl_gethostname.h"
+
+#define HOSTNAME_MAX 1024
+
+int main(int argc, char *argv[])
+{
+ char buff[HOSTNAME_MAX];
+ if (argc != 2) {
+ printf("Usage: %s EXPECTED_HOSTNAME\n", argv[0]);
+ return 1;
+ }
+
+ if (Curl_gethostname(buff, HOSTNAME_MAX)) {
+ printf("Curl_gethostname() failed\n");
+ return 1;
+ }
+
+ /* compare the name returned by Curl_gethostname() with the expected one */
+ if(strncmp(buff, argv[1], HOSTNAME_MAX)) {
+ printf("got unexpected host name back, LD_PRELOAD failed\n");
+ return 1;
+ }
+ return 0;
+}
diff --git a/tests/libtest/first.c b/tests/libtest/first.c
new file mode 100644
index 0000000..770f9d5
--- /dev/null
+++ b/tests/libtest/first.c
@@ -0,0 +1,95 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include "test.h"
+
+#ifdef HAVE_LOCALE_H
+#include <locale.h> /* for setlocale() */
+#endif
+
+#ifdef CURLDEBUG
+# define MEMDEBUG_NODEFINES
+# include "memdebug.h"
+#endif
+
+int select_test (int num_fds, fd_set *rd, fd_set *wr, fd_set *exc,
+ struct timeval *tv)
+{
+#ifdef USE_WINSOCK
+ /* Winsock doesn't like no socket set in 'rd', 'wr' or 'exc'. This is
+ * case when 'num_fds <= 0. So sleep.
+ */
+ if (num_fds <= 0) {
+ Sleep(1000*tv->tv_sec + tv->tv_usec/1000);
+ return 0;
+ }
+#endif
+ return select(num_fds, rd, wr, exc, tv);
+}
+
+char *libtest_arg2=NULL;
+char *libtest_arg3=NULL;
+int test_argc;
+char **test_argv;
+
+
+int main(int argc, char **argv)
+{
+ char *URL;
+
+#ifdef CURLDEBUG
+ /* this sends all memory debug messages to a logfile named memdump */
+ char *env = curl_getenv("CURL_MEMDEBUG");
+ if(env) {
+ /* use the value as file name */
+ char *s = strdup(env);
+ curl_free(env);
+ curl_memdebug(s);
+ free(s);
+ /* this weird strdup() and stuff here is to make the curl_free() get
+ called before the memdebug() as otherwise the memdebug tracing will
+ with tracing a free() without an alloc! */
+ }
+ /* this enables the fail-on-alloc-number-N functionality */
+ env = curl_getenv("CURL_MEMLIMIT");
+ if(env) {
+ curl_memlimit(atoi(env));
+ curl_free(env);
+ }
+#endif
+
+ /*
+ * Setup proper locale from environment. This is needed to enable locale-
+ * specific behaviour by the C library in order to test for undesired side
+ * effects that could cause in libcurl.
+ */
+#ifdef HAVE_SETLOCALE
+ setlocale(LC_ALL, "");
+#endif
+
+ if(argc< 2 ) {
+ fprintf(stderr, "Pass URL as argument please\n");
+ return 1;
+ }
+
+ test_argc = argc;
+ test_argv = argv;
+
+ if(argc>2)
+ libtest_arg2=argv[2];
+
+ if(argc>3)
+ libtest_arg3=argv[3];
+
+ URL = argv[1]; /* provide this to the rest */
+
+ fprintf(stderr, "URL: %s\n", URL);
+
+ return test(URL);
+}
diff --git a/tests/libtest/lib500.c b/tests/libtest/lib500.c
new file mode 100644
index 0000000..dc6967c
--- /dev/null
+++ b/tests/libtest/lib500.c
@@ -0,0 +1,53 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include "test.h"
+
+#include "memdebug.h"
+
+int test(char *URL)
+{
+ CURLcode res;
+ CURL *curl;
+ char *ipstr=NULL;
+
+ if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ if ((curl = curl_easy_init()) == NULL) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ test_setopt(curl, CURLOPT_URL, URL);
+ test_setopt(curl, CURLOPT_HEADER, 1L);
+
+ res = curl_easy_perform(curl);
+
+ if(!res) {
+ FILE *moo;
+ res = curl_easy_getinfo(curl, CURLINFO_PRIMARY_IP, &ipstr);
+ moo = fopen(libtest_arg2, "wb");
+ if(moo) {
+ fprintf(moo, "IP: %s\n", ipstr);
+ fclose(moo);
+ }
+ }
+
+test_cleanup:
+
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+
+ return (int)res;
+}
+
diff --git a/tests/libtest/lib501.c b/tests/libtest/lib501.c
new file mode 100644
index 0000000..770cf8f
--- /dev/null
+++ b/tests/libtest/lib501.c
@@ -0,0 +1,43 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include "test.h"
+
+#include "memdebug.h"
+
+int test(char *URL)
+{
+ CURLcode res;
+ CURL *curl;
+
+ (void)URL; /* we don't use this */
+
+ if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ if ((curl = curl_easy_init()) == NULL) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ test_setopt(curl, CURLOPT_HEADER, 1L);
+
+ res = curl_easy_perform(curl);
+
+test_cleanup:
+
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+
+ return (int)res;
+}
+
diff --git a/tests/libtest/lib502.c b/tests/libtest/lib502.c
new file mode 100644
index 0000000..f6be5aa
--- /dev/null
+++ b/tests/libtest/lib502.c
@@ -0,0 +1,94 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include "test.h"
+
+#include "testutil.h"
+#include "memdebug.h"
+
+#define MAIN_LOOP_HANG_TIMEOUT 90 * 1000
+#define MULTI_PERFORM_HANG_TIMEOUT 60 * 1000
+
+/*
+ * Get a single URL without select().
+ */
+
+int test(char *URL)
+{
+ CURL *c;
+ CURLM *m = NULL;
+ int res = 0;
+ int running=1;
+ struct timeval mp_start;
+ char mp_timedout = FALSE;
+
+ if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ if ((c = curl_easy_init()) == NULL) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ test_setopt(c, CURLOPT_URL, URL);
+
+ if ((m = curl_multi_init()) == NULL) {
+ fprintf(stderr, "curl_multi_init() failed\n");
+ curl_easy_cleanup(c);
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ if ((res = (int)curl_multi_add_handle(m, c)) != CURLM_OK) {
+ fprintf(stderr, "curl_multi_add_handle() failed, "
+ "with code %d\n", res);
+ curl_multi_cleanup(m);
+ curl_easy_cleanup(c);
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ mp_timedout = FALSE;
+ mp_start = tutil_tvnow();
+
+ while (running) {
+ res = (int)curl_multi_perform(m, &running);
+ if (tutil_tvdiff(tutil_tvnow(), mp_start) >
+ MULTI_PERFORM_HANG_TIMEOUT) {
+ mp_timedout = TRUE;
+ break;
+ }
+ if (running <= 0) {
+ fprintf(stderr, "nothing left running.\n");
+ break;
+ }
+ }
+
+ if (mp_timedout) {
+ if (mp_timedout) fprintf(stderr, "mp_timedout\n");
+ fprintf(stderr, "ABORTING TEST, since it seems "
+ "that it would have run forever.\n");
+ res = TEST_ERR_RUNS_FOREVER;
+ }
+
+test_cleanup:
+
+ if(m) {
+ curl_multi_remove_handle(m, c);
+ curl_multi_cleanup(m);
+ }
+ curl_easy_cleanup(c);
+ curl_global_cleanup();
+
+ return res;
+}
+
diff --git a/tests/libtest/lib503.c b/tests/libtest/lib503.c
new file mode 100644
index 0000000..2301186
--- /dev/null
+++ b/tests/libtest/lib503.c
@@ -0,0 +1,152 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include "test.h"
+
+#include <sys/types.h>
+
+#include "testutil.h"
+#include "memdebug.h"
+
+#define MAIN_LOOP_HANG_TIMEOUT 90 * 1000
+#define MULTI_PERFORM_HANG_TIMEOUT 60 * 1000
+
+/*
+ * Source code in here hugely as reported in bug report 651460 by
+ * Christopher R. Palmer.
+ *
+ * Use multi interface to get HTTPS document over proxy, and provide
+ * auth info.
+ */
+
+int test(char *URL)
+{
+ CURL *c;
+ CURLM *m = NULL;
+ int res = 0;
+ int running;
+ char done = FALSE;
+ struct timeval ml_start;
+ struct timeval mp_start;
+ char ml_timedout = FALSE;
+ char mp_timedout = FALSE;
+
+ if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ if ((c = curl_easy_init()) == NULL) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ test_setopt(c, CURLOPT_PROXY, libtest_arg2); /* set in first.c */
+ test_setopt(c, CURLOPT_URL, URL);
+ test_setopt(c, CURLOPT_USERPWD, "test:ing");
+ test_setopt(c, CURLOPT_PROXYUSERPWD, "test:ing");
+ test_setopt(c, CURLOPT_HTTPPROXYTUNNEL, 1L);
+ test_setopt(c, CURLOPT_HEADER, 1L);
+
+ if ((m = curl_multi_init()) == NULL) {
+ fprintf(stderr, "curl_multi_init() failed\n");
+ curl_easy_cleanup(c);
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ if ((res = (int)curl_multi_add_handle(m, c)) != CURLM_OK) {
+ fprintf(stderr, "curl_multi_add_handle() failed, "
+ "with code %d\n", res);
+ curl_multi_cleanup(m);
+ curl_easy_cleanup(c);
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ ml_timedout = FALSE;
+ ml_start = tutil_tvnow();
+
+ while(!done) {
+ fd_set rd, wr, exc;
+ int max_fd;
+ struct timeval interval;
+
+ interval.tv_sec = 1;
+ interval.tv_usec = 0;
+
+ if (tutil_tvdiff(tutil_tvnow(), ml_start) >
+ MAIN_LOOP_HANG_TIMEOUT) {
+ ml_timedout = TRUE;
+ break;
+ }
+ mp_timedout = FALSE;
+ mp_start = tutil_tvnow();
+
+ while (res == CURLM_CALL_MULTI_PERFORM) {
+ res = (int)curl_multi_perform(m, &running);
+ if (tutil_tvdiff(tutil_tvnow(), mp_start) >
+ MULTI_PERFORM_HANG_TIMEOUT) {
+ mp_timedout = TRUE;
+ break;
+ }
+ if (running <= 0) {
+ done = TRUE;
+ break;
+ }
+ }
+ if (mp_timedout || done)
+ break;
+
+ if (res != CURLM_OK) {
+ fprintf(stderr, "not okay???\n");
+ break;
+ }
+
+ FD_ZERO(&rd);
+ FD_ZERO(&wr);
+ FD_ZERO(&exc);
+ max_fd = 0;
+
+ if (curl_multi_fdset(m, &rd, &wr, &exc, &max_fd) != CURLM_OK) {
+ fprintf(stderr, "unexpected failured of fdset.\n");
+ res = 89;
+ break;
+ }
+
+ if (select_test(max_fd+1, &rd, &wr, &exc, &interval) == -1) {
+ fprintf(stderr, "bad select??\n");
+ res = 95;
+ break;
+ }
+
+ res = CURLM_CALL_MULTI_PERFORM;
+ }
+
+ if (ml_timedout || mp_timedout) {
+ if (ml_timedout) fprintf(stderr, "ml_timedout\n");
+ if (mp_timedout) fprintf(stderr, "mp_timedout\n");
+ fprintf(stderr, "ABORTING TEST, since it seems "
+ "that it would have run forever.\n");
+ res = TEST_ERR_RUNS_FOREVER;
+ }
+
+test_cleanup:
+
+ if(m) {
+ curl_multi_remove_handle(m, c);
+ curl_multi_cleanup(m);
+ }
+ curl_easy_cleanup(c);
+ curl_global_cleanup();
+
+ return res;
+}
+
diff --git a/tests/libtest/lib504.c b/tests/libtest/lib504.c
new file mode 100644
index 0000000..b8091f6
--- /dev/null
+++ b/tests/libtest/lib504.c
@@ -0,0 +1,161 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include "test.h"
+
+#include <sys/types.h>
+
+#include "testutil.h"
+#include "memdebug.h"
+
+#define MAIN_LOOP_HANG_TIMEOUT 90 * 1000
+#define MULTI_PERFORM_HANG_TIMEOUT 60 * 1000
+
+/*
+ * Source code in here hugely as reported in bug report 651464 by
+ * Christopher R. Palmer.
+ *
+ * Use multi interface to get document over proxy with bad port number.
+ * This caused the interface to "hang" in libcurl 7.10.2.
+ */
+int test(char *URL)
+{
+ CURL *c;
+ int res = 0;
+ CURLM *m = NULL;
+ fd_set rd, wr, exc;
+ CURLMcode ret;
+ char done = FALSE;
+ int running;
+ int max_fd;
+ int rc;
+ struct timeval ml_start;
+ struct timeval mp_start;
+ char ml_timedout = FALSE;
+ char mp_timedout = FALSE;
+
+ if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ if ((c = curl_easy_init()) == NULL) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ /* The point here is that there must not be anything running on the given
+ proxy port */
+ if (libtest_arg2)
+ test_setopt(c, CURLOPT_PROXY, libtest_arg2);
+ test_setopt(c, CURLOPT_URL, URL);
+ test_setopt(c, CURLOPT_VERBOSE, 1L);
+
+ if ((m = curl_multi_init()) == NULL) {
+ fprintf(stderr, "curl_multi_init() failed\n");
+ curl_easy_cleanup(c);
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ if ((ret = curl_multi_add_handle(m, c)) != CURLM_OK) {
+ fprintf(stderr, "curl_multi_add_handle() failed, "
+ "with code %d\n", ret);
+ curl_multi_cleanup(m);
+ curl_easy_cleanup(c);
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ ml_timedout = FALSE;
+ ml_start = tutil_tvnow();
+
+ while (!done) {
+ struct timeval interval;
+
+ interval.tv_sec = 1;
+ interval.tv_usec = 0;
+
+ if (tutil_tvdiff(tutil_tvnow(), ml_start) >
+ MAIN_LOOP_HANG_TIMEOUT) {
+ ml_timedout = TRUE;
+ break;
+ }
+ mp_timedout = FALSE;
+ mp_start = tutil_tvnow();
+
+ fprintf(stderr, "curl_multi_perform()\n");
+
+ ret = CURLM_CALL_MULTI_PERFORM;
+
+ while (ret == CURLM_CALL_MULTI_PERFORM) {
+ ret = curl_multi_perform(m, &running);
+ if (tutil_tvdiff(tutil_tvnow(), mp_start) >
+ MULTI_PERFORM_HANG_TIMEOUT) {
+ mp_timedout = TRUE;
+ break;
+ }
+ }
+ if (mp_timedout)
+ break;
+
+ if(!running) {
+ /* This is where this code is expected to reach */
+ int numleft;
+ CURLMsg *msg = curl_multi_info_read(m, &numleft);
+ fprintf(stderr, "Expected: not running\n");
+ if(msg && !numleft)
+ res = 100; /* this is where we should be */
+ else
+ res = 99; /* not correct */
+ break;
+ }
+ fprintf(stderr, "running == %d, ret == %d\n", running, ret);
+
+ if (ret != CURLM_OK) {
+ res = 2;
+ break;
+ }
+
+ FD_ZERO(&rd);
+ FD_ZERO(&wr);
+ FD_ZERO(&exc);
+ max_fd = 0;
+
+ fprintf(stderr, "curl_multi_fdset()\n");
+ if (curl_multi_fdset(m, &rd, &wr, &exc, &max_fd) != CURLM_OK) {
+ fprintf(stderr, "unexpected failured of fdset.\n");
+ res = 3;
+ break;
+ }
+ rc = select_test(max_fd+1, &rd, &wr, &exc, &interval);
+ fprintf(stderr, "select returned %d\n", rc);
+ }
+
+ if (ml_timedout || mp_timedout) {
+ if (ml_timedout) fprintf(stderr, "ml_timedout\n");
+ if (mp_timedout) fprintf(stderr, "mp_timedout\n");
+ fprintf(stderr, "ABORTING TEST, since it seems "
+ "that it would have run forever.\n");
+ res = TEST_ERR_RUNS_FOREVER;
+ }
+
+test_cleanup:
+
+ if(m) {
+ curl_multi_remove_handle(m, c);
+ curl_multi_cleanup(m);
+ }
+ curl_easy_cleanup(c);
+ curl_global_cleanup();
+
+ return res;
+}
+
diff --git a/tests/libtest/lib505.c b/tests/libtest/lib505.c
new file mode 100644
index 0000000..5af7ac0
--- /dev/null
+++ b/tests/libtest/lib505.c
@@ -0,0 +1,151 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include "test.h"
+
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#include "memdebug.h"
+
+/*
+ * This example shows an FTP upload, with a rename of the file just after
+ * a successful upload.
+ *
+ * Example based on source code provided by Erick Nuwendam. Thanks!
+ */
+
+int test(char *URL)
+{
+ CURL *curl;
+ CURLcode res = CURLE_OK;
+ FILE *hd_src ;
+ int hd ;
+ struct_stat file_info;
+ struct curl_slist *hl;
+ int error;
+
+ struct curl_slist *headerlist=NULL;
+ const char *buf_1 = "RNFR 505";
+ const char *buf_2 = "RNTO 505-forreal";
+
+ if (!libtest_arg2) {
+ fprintf(stderr, "Usage: <url> <file-to-upload>\n");
+ return -1;
+ }
+
+ hd_src = fopen(libtest_arg2, "rb");
+ if(NULL == hd_src) {
+ error = ERRNO;
+ fprintf(stderr, "fopen() failed with error: %d %s\n",
+ error, strerror(error));
+ fprintf(stderr, "Error opening file: %s\n", libtest_arg2);
+ return -2; /* if this happens things are major weird */
+ }
+
+ /* get the file size of the local file */
+ hd = fstat(fileno(hd_src), &file_info);
+ if(hd == -1) {
+ /* can't open file, bail out */
+ error = ERRNO;
+ fprintf(stderr, "fstat() failed with error: %d %s\n",
+ error, strerror(error));
+ fprintf(stderr, "ERROR: cannot open file %s\n", libtest_arg2);
+ fclose(hd_src);
+ return -1;
+ }
+
+ if(! file_info.st_size) {
+ fprintf(stderr, "ERROR: file %s has zero size!\n", libtest_arg2);
+ fclose(hd_src);
+ return -4;
+ }
+
+ if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ fclose(hd_src);
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ /* get a curl handle */
+ if ((curl = curl_easy_init()) == NULL) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ curl_global_cleanup();
+ fclose(hd_src);
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ /* build a list of commands to pass to libcurl */
+
+ if ((hl = curl_slist_append(headerlist, buf_1)) == NULL) {
+ fprintf(stderr, "curl_slist_append() failed\n");
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+ fclose(hd_src);
+ return TEST_ERR_MAJOR_BAD;
+ }
+ if ((headerlist = curl_slist_append(hl, buf_2)) == NULL) {
+ fprintf(stderr, "curl_slist_append() failed\n");
+ curl_slist_free_all(hl);
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+ fclose(hd_src);
+ return TEST_ERR_MAJOR_BAD;
+ }
+ headerlist = hl;
+
+ /* enable uploading */
+ test_setopt(curl, CURLOPT_UPLOAD, 1L);
+
+ /* enable verbose */
+ test_setopt(curl, CURLOPT_VERBOSE, 1L);
+
+ /* specify target */
+ test_setopt(curl,CURLOPT_URL, URL);
+
+ /* pass in that last of FTP commands to run after the transfer */
+ test_setopt(curl, CURLOPT_POSTQUOTE, headerlist);
+
+ /* now specify which file to upload */
+ test_setopt(curl, CURLOPT_INFILE, hd_src);
+
+ /* and give the size of the upload (optional) */
+ test_setopt(curl, CURLOPT_INFILESIZE_LARGE,
+ (curl_off_t)file_info.st_size);
+
+ /* Now run off and do what you've been told! */
+ res = curl_easy_perform(curl);
+
+test_cleanup:
+
+ /* clean up the FTP commands list */
+ curl_slist_free_all(headerlist);
+
+ /* close the local file */
+ fclose(hd_src);
+
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+
+ return res;
+}
diff --git a/tests/libtest/lib506.c b/tests/libtest/lib506.c
new file mode 100644
index 0000000..9209056
--- /dev/null
+++ b/tests/libtest/lib506.c
@@ -0,0 +1,268 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include "test.h"
+#include <stdlib.h>
+#include <ctype.h>
+#include <errno.h>
+
+#include <curl/mprintf.h>
+
+#include "memdebug.h"
+
+static const char *HOSTHEADER = "Host: www.host.foo.com";
+static const char *JAR = "log/jar506";
+#define THREADS 2
+
+/* struct containing data of a thread */
+struct Tdata {
+ CURLSH *share;
+ char *url;
+};
+
+struct userdata {
+ char *text;
+ int counter;
+};
+
+/* lock callback */
+static void my_lock(CURL *handle, curl_lock_data data, curl_lock_access laccess,
+ void *useptr )
+{
+ const char *what;
+ struct userdata *user = (struct userdata *)useptr;
+
+ (void)handle;
+ (void)laccess;
+
+ switch ( data ) {
+ case CURL_LOCK_DATA_SHARE:
+ what = "share";
+ break;
+ case CURL_LOCK_DATA_DNS:
+ what = "dns";
+ break;
+ case CURL_LOCK_DATA_COOKIE:
+ what = "cookie";
+ break;
+ default:
+ fprintf(stderr, "lock: no such data: %d\n", (int)data);
+ return;
+ }
+ printf("lock: %-6s [%s]: %d\n", what, user->text, user->counter);
+ user->counter++;
+}
+
+/* unlock callback */
+static void my_unlock(CURL *handle, curl_lock_data data, void *useptr )
+{
+ const char *what;
+ struct userdata *user = (struct userdata *)useptr;
+ (void)handle;
+ switch ( data ) {
+ case CURL_LOCK_DATA_SHARE:
+ what = "share";
+ break;
+ case CURL_LOCK_DATA_DNS:
+ what = "dns";
+ break;
+ case CURL_LOCK_DATA_COOKIE:
+ what = "cookie";
+ break;
+ default:
+ fprintf(stderr, "unlock: no such data: %d\n", (int)data);
+ return;
+ }
+ printf("unlock: %-6s [%s]: %d\n", what, user->text, user->counter);
+ user->counter++;
+}
+
+
+/* build host entry */
+static struct curl_slist *sethost(struct curl_slist *headers)
+{
+ (void)headers;
+ return curl_slist_append(NULL, HOSTHEADER );
+}
+
+
+/* the dummy thread function */
+static void *fire(void *ptr)
+{
+ CURLcode code;
+ struct curl_slist *headers;
+ struct Tdata *tdata = (struct Tdata*)ptr;
+ CURL *curl;
+ int i=0;
+
+ if ((curl = curl_easy_init()) == NULL) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ return NULL;
+ }
+
+ headers = sethost(NULL);
+ curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
+ curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
+ curl_easy_setopt(curl, CURLOPT_URL, tdata->url);
+ printf( "CURLOPT_SHARE\n" );
+ curl_easy_setopt(curl, CURLOPT_SHARE, tdata->share);
+
+ printf( "PERFORM\n" );
+ code = curl_easy_perform(curl);
+ if( code != CURLE_OK ) {
+ fprintf(stderr, "perform url '%s' repeat %d failed, curlcode %d\n",
+ tdata->url, i, (int)code);
+ }
+
+ printf( "CLEANUP\n" );
+ curl_easy_cleanup(curl);
+ curl_slist_free_all(headers);
+
+ return NULL;
+}
+
+
+/* build request url */
+static char *suburl(const char *base, int i)
+{
+ return curl_maprintf("%s%.4d", base, i);
+}
+
+
+/* test function */
+int test(char *URL)
+{
+ int res;
+ CURLSHcode scode = CURLSHE_OK;
+ char *url;
+ struct Tdata tdata;
+ CURL *curl;
+ CURLSH *share;
+ struct curl_slist *headers;
+ int i;
+ struct userdata user;
+
+ user.text = (char *)"Pigs in space";
+ user.counter = 0;
+
+ printf( "GLOBAL_INIT\n" );
+ if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ /* prepare share */
+ printf( "SHARE_INIT\n" );
+ if ((share = curl_share_init()) == NULL) {
+ fprintf(stderr, "curl_share_init() failed\n");
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ if ( CURLSHE_OK == scode ) {
+ printf( "CURLSHOPT_LOCKFUNC\n" );
+ scode = curl_share_setopt( share, CURLSHOPT_LOCKFUNC, my_lock);
+ }
+ if ( CURLSHE_OK == scode ) {
+ printf( "CURLSHOPT_UNLOCKFUNC\n" );
+ scode = curl_share_setopt( share, CURLSHOPT_UNLOCKFUNC, my_unlock);
+ }
+ if ( CURLSHE_OK == scode ) {
+ printf( "CURLSHOPT_USERDATA\n" );
+ scode = curl_share_setopt( share, CURLSHOPT_USERDATA, &user);
+ }
+ if ( CURLSHE_OK == scode ) {
+ printf( "CURL_LOCK_DATA_COOKIE\n" );
+ scode = curl_share_setopt( share, CURLSHOPT_SHARE, CURL_LOCK_DATA_COOKIE);
+ }
+ if ( CURLSHE_OK == scode ) {
+ printf( "CURL_LOCK_DATA_DNS\n" );
+ scode = curl_share_setopt( share, CURLSHOPT_SHARE, CURL_LOCK_DATA_DNS);
+ }
+
+ if ( CURLSHE_OK != scode ) {
+ fprintf(stderr, "curl_share_setopt() failed\n");
+ curl_share_cleanup(share);
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+
+ res = 0;
+
+ /* start treads */
+ for (i=1; i<=THREADS; i++ ) {
+
+ /* set thread data */
+ tdata.url = suburl( URL, i ); /* must be curl_free()d */
+ tdata.share = share;
+
+ /* simulate thread, direct call of "thread" function */
+ printf( "*** run %d\n",i );
+ fire( &tdata );
+
+ curl_free( tdata.url );
+
+ }
+
+
+ /* fetch a another one and save cookies */
+ printf( "*** run %d\n", i );
+ if ((curl = curl_easy_init()) == NULL) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ curl_share_cleanup(share);
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ url = suburl( URL, i );
+ headers = sethost( NULL );
+ test_setopt( curl, CURLOPT_HTTPHEADER, headers );
+ test_setopt( curl, CURLOPT_URL, url );
+ printf( "CURLOPT_SHARE\n" );
+ test_setopt( curl, CURLOPT_SHARE, share );
+ printf( "CURLOPT_COOKIEJAR\n" );
+ test_setopt( curl, CURLOPT_COOKIEJAR, JAR );
+
+ printf( "PERFORM\n" );
+ curl_easy_perform( curl );
+
+ /* try to free share, expect to fail because share is in use*/
+ printf( "try SHARE_CLEANUP...\n" );
+ scode = curl_share_cleanup( share );
+ if ( scode==CURLSHE_OK )
+ {
+ fprintf(stderr, "curl_share_cleanup succeed but error expected\n");
+ share = NULL;
+ } else {
+ printf( "SHARE_CLEANUP failed, correct\n" );
+ }
+
+test_cleanup:
+
+ /* clean up last handle */
+ printf( "CLEANUP\n" );
+ curl_easy_cleanup( curl );
+ curl_slist_free_all( headers );
+
+ curl_free(url);
+
+ /* free share */
+ printf( "SHARE_CLEANUP\n" );
+ scode = curl_share_cleanup( share );
+ if ( scode!=CURLSHE_OK )
+ fprintf(stderr, "curl_share_cleanup failed, code errno %d\n",
+ (int)scode);
+
+ printf( "GLOBAL_CLEANUP\n" );
+ curl_global_cleanup();
+
+ return res;
+}
+
diff --git a/tests/libtest/lib507.c b/tests/libtest/lib507.c
new file mode 100644
index 0000000..9707c9b
--- /dev/null
+++ b/tests/libtest/lib507.c
@@ -0,0 +1,141 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include "test.h"
+
+#include "testutil.h"
+#include "memdebug.h"
+
+#define MAIN_LOOP_HANG_TIMEOUT 90 * 1000
+#define MULTI_PERFORM_HANG_TIMEOUT 60 * 1000
+
+int test(char *URL)
+{
+ CURL* curls;
+ CURLM* multi;
+ int still_running;
+ int i = -1;
+ int res = 0;
+ CURLMsg *msg;
+ CURLMcode ret;
+ struct timeval ml_start;
+ struct timeval mp_start;
+ char ml_timedout = FALSE;
+ char mp_timedout = FALSE;
+
+ if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ if ((multi = curl_multi_init()) == NULL) {
+ fprintf(stderr, "curl_multi_init() failed\n");
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ if ((curls = curl_easy_init()) == NULL) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ curl_multi_cleanup(multi);
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ test_setopt(curls, CURLOPT_URL, URL);
+
+ if ((ret = curl_multi_add_handle(multi, curls)) != CURLM_OK) {
+ fprintf(stderr, "curl_multi_add_handle() failed, "
+ "with code %d\n", ret);
+ curl_easy_cleanup(curls);
+ curl_multi_cleanup(multi);
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ mp_timedout = FALSE;
+ mp_start = tutil_tvnow();
+
+ do {
+ ret = curl_multi_perform(multi, &still_running);
+ if (tutil_tvdiff(tutil_tvnow(), mp_start) >
+ MULTI_PERFORM_HANG_TIMEOUT) {
+ mp_timedout = TRUE;
+ break;
+ }
+ } while (ret == CURLM_CALL_MULTI_PERFORM);
+
+ ml_timedout = FALSE;
+ ml_start = tutil_tvnow();
+
+ while ((!ml_timedout) && (!mp_timedout) && (still_running)) {
+ struct timeval timeout;
+ int rc;
+ fd_set fdread;
+ fd_set fdwrite;
+ fd_set fdexcep;
+ int maxfd;
+
+ FD_ZERO(&fdread);
+ FD_ZERO(&fdwrite);
+ FD_ZERO(&fdexcep);
+ timeout.tv_sec = 1;
+ timeout.tv_usec = 0;
+
+ if (tutil_tvdiff(tutil_tvnow(), ml_start) >
+ MAIN_LOOP_HANG_TIMEOUT) {
+ ml_timedout = TRUE;
+ break;
+ }
+
+ curl_multi_fdset(multi, &fdread, &fdwrite, &fdexcep, &maxfd);
+ rc = select_test(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout);
+ switch(rc) {
+ case -1:
+ break;
+ case 0:
+ default:
+ mp_timedout = FALSE;
+ mp_start = tutil_tvnow();
+ do {
+ ret = curl_multi_perform(multi, &still_running);
+ if (tutil_tvdiff(tutil_tvnow(), mp_start) >
+ MULTI_PERFORM_HANG_TIMEOUT) {
+ mp_timedout = TRUE;
+ break;
+ }
+ } while (ret == CURLM_CALL_MULTI_PERFORM);
+ break;
+ }
+ }
+ if (ml_timedout || mp_timedout) {
+ if (ml_timedout) fprintf(stderr, "ml_timedout\n");
+ if (mp_timedout) fprintf(stderr, "mp_timedout\n");
+ fprintf(stderr, "ABORTING TEST, since it seems "
+ "that it would have run forever.\n");
+ i = TEST_ERR_RUNS_FOREVER;
+ }
+ else {
+ msg = curl_multi_info_read(multi, &still_running);
+ if(msg)
+ /* this should now contain a result code from the easy handle,
+ get it */
+ i = msg->data.result;
+ }
+
+test_cleanup:
+
+ curl_multi_cleanup(multi);
+ curl_easy_cleanup(curls);
+ curl_global_cleanup();
+
+ if(res)
+ i = res;
+
+ return i; /* return the final return code */
+}
diff --git a/tests/libtest/lib508.c b/tests/libtest/lib508.c
new file mode 100644
index 0000000..0fa5eb9
--- /dev/null
+++ b/tests/libtest/lib508.c
@@ -0,0 +1,95 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include "test.h"
+
+#include "memdebug.h"
+
+static char data[]="this is what we post to the silly web server\n";
+
+struct WriteThis {
+ char *readptr;
+ size_t sizeleft;
+};
+
+static size_t read_callback(void *ptr, size_t size, size_t nmemb, void *userp)
+{
+ struct WriteThis *pooh = (struct WriteThis *)userp;
+
+ if(size*nmemb < 1)
+ return 0;
+
+ if(pooh->sizeleft) {
+ *(char *)ptr = pooh->readptr[0]; /* copy one single byte */
+ pooh->readptr++; /* advance pointer */
+ pooh->sizeleft--; /* less data left */
+ return 1; /* we return 1 byte at a time! */
+ }
+
+ return 0; /* no more data left to deliver */
+}
+
+int test(char *URL)
+{
+ CURL *curl;
+ CURLcode res=CURLE_OK;
+
+ struct WriteThis pooh;
+
+ pooh.readptr = data;
+ pooh.sizeleft = strlen(data);
+
+ if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ if ((curl = curl_easy_init()) == NULL) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ /* First set the URL that is about to receive our POST. */
+ test_setopt(curl, CURLOPT_URL, URL);
+
+ /* Now specify we want to POST data */
+ test_setopt(curl, CURLOPT_POST, 1L);
+
+#ifdef CURL_DOES_CONVERSIONS
+ /* Convert the POST data to ASCII */
+ test_setopt(curl, CURLOPT_TRANSFERTEXT, 1L);
+#endif
+
+ /* Set the expected POST size */
+ test_setopt(curl, CURLOPT_POSTFIELDSIZE, (long)pooh.sizeleft);
+
+ /* we want to use our own read function */
+ test_setopt(curl, CURLOPT_READFUNCTION, read_callback);
+
+ /* pointer to pass to our read function */
+ test_setopt(curl, CURLOPT_INFILE, &pooh);
+
+ /* get verbose debug output please */
+ test_setopt(curl, CURLOPT_VERBOSE, 1L);
+
+ /* include headers in the output */
+ test_setopt(curl, CURLOPT_HEADER, 1L);
+
+ /* Perform the request, res will get the return code */
+ res = curl_easy_perform(curl);
+
+test_cleanup:
+
+ /* always cleanup */
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+
+ return res;
+}
diff --git a/tests/libtest/lib510.c b/tests/libtest/lib510.c
new file mode 100644
index 0000000..f3f8cdb
--- /dev/null
+++ b/tests/libtest/lib510.c
@@ -0,0 +1,118 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include "test.h"
+
+#include "memdebug.h"
+
+static const char *post[]={
+ "one",
+ "two",
+ "three",
+ "and a final longer crap: four",
+ NULL
+};
+
+
+struct WriteThis {
+ int counter;
+};
+
+static size_t read_callback(void *ptr, size_t size, size_t nmemb, void *userp)
+{
+ struct WriteThis *pooh = (struct WriteThis *)userp;
+ const char *data;
+
+ if(size*nmemb < 1)
+ return 0;
+
+ data = post[pooh->counter];
+
+ if(data) {
+ size_t len = strlen(data);
+ memcpy(ptr, data, len);
+ pooh->counter++; /* advance pointer */
+ return len;
+ }
+ return 0; /* no more data left to deliver */
+}
+
+int test(char *URL)
+{
+ CURL *curl;
+ CURLcode res=CURLE_OK;
+ struct curl_slist *slist = NULL;
+ struct WriteThis pooh;
+ pooh.counter = 0;
+
+ if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ if ((curl = curl_easy_init()) == NULL) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ slist = curl_slist_append(slist, "Transfer-Encoding: chunked");
+ if (slist == NULL) {
+ fprintf(stderr, "curl_slist_append() failed\n");
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ /* First set the URL that is about to receive our POST. */
+ test_setopt(curl, CURLOPT_URL, URL);
+
+ /* Now specify we want to POST data */
+ test_setopt(curl, CURLOPT_POST, 1L);
+
+#ifdef CURL_DOES_CONVERSIONS
+ /* Convert the POST data to ASCII */
+ test_setopt(curl, CURLOPT_TRANSFERTEXT, 1L);
+#endif
+
+ /* we want to use our own read function */
+ test_setopt(curl, CURLOPT_READFUNCTION, read_callback);
+
+ /* pointer to pass to our read function */
+ test_setopt(curl, CURLOPT_INFILE, &pooh);
+
+ /* get verbose debug output please */
+ test_setopt(curl, CURLOPT_VERBOSE, 1L);
+
+ /* include headers in the output */
+ test_setopt(curl, CURLOPT_HEADER, 1L);
+
+ /* enforce chunked transfer by setting the header */
+ test_setopt(curl, CURLOPT_HTTPHEADER, slist);
+
+#ifdef LIB565
+ test_setopt(curl, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST);
+ test_setopt(curl, CURLOPT_USERPWD, "foo:bar");
+#endif
+
+ /* Perform the request, res will get the return code */
+ res = curl_easy_perform(curl);
+
+test_cleanup:
+
+ /* clean up the headers list */
+ if(slist)
+ curl_slist_free_all(slist);
+
+ /* always cleanup */
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+
+ return res;
+}
diff --git a/tests/libtest/lib511.c b/tests/libtest/lib511.c
new file mode 100644
index 0000000..dea97c5
--- /dev/null
+++ b/tests/libtest/lib511.c
@@ -0,0 +1,43 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include "test.h"
+
+#include "memdebug.h"
+
+int test(char *URL)
+{
+ CURLcode res;
+ CURL *curl;
+
+ if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ if ((curl = curl_easy_init()) == NULL) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ test_setopt(curl, CURLOPT_URL, URL);
+ test_setopt(curl, CURLOPT_FILETIME, 1L);
+ test_setopt(curl, CURLOPT_NOBODY, 1L);
+ test_setopt(curl, CURLOPT_VERBOSE, 1L);
+
+ res = curl_easy_perform(curl);
+
+test_cleanup:
+
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+
+ return (int)res;
+}
diff --git a/tests/libtest/lib512.c b/tests/libtest/lib512.c
new file mode 100644
index 0000000..9f59f7b
--- /dev/null
+++ b/tests/libtest/lib512.c
@@ -0,0 +1,65 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include "test.h"
+
+#include "memdebug.h"
+
+/* Test case code based on source in a bug report filed by James Bursa on
+ 28 Apr 2004 */
+
+int test(char *URL)
+{
+ CURLcode code;
+ CURL *curl;
+ CURL *curl2;
+ int rc = 99;
+
+ code = curl_global_init(CURL_GLOBAL_ALL);
+ if(code == CURLE_OK) {
+
+ curl = curl_easy_init();
+ if(curl) {
+
+ curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
+ curl_easy_setopt(curl, CURLOPT_HEADER, 1L);
+
+ curl2 = curl_easy_duphandle(curl);
+ if(curl2) {
+
+ code = curl_easy_setopt(curl2, CURLOPT_URL, URL);
+ if(code == CURLE_OK) {
+
+ code = curl_easy_perform(curl2);
+ if(code == CURLE_OK)
+ rc = 0;
+ else
+ rc = 1;
+ }
+ else
+ rc = 2;
+
+ curl_easy_cleanup(curl2);
+ }
+ else
+ rc = 3;
+
+ curl_easy_cleanup(curl);
+ }
+ else
+ rc = 4;
+
+ curl_global_cleanup();
+ }
+ else
+ rc = 5;
+
+ return rc;
+}
+
diff --git a/tests/libtest/lib513.c b/tests/libtest/lib513.c
new file mode 100644
index 0000000..c85006e
--- /dev/null
+++ b/tests/libtest/lib513.c
@@ -0,0 +1,70 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include "test.h"
+
+#include "memdebug.h"
+
+static size_t read_callback(void *ptr, size_t size, size_t nmemb, void *userp)
+{
+ (void)ptr;
+ (void)size;
+ (void)nmemb;
+ (void)userp;
+ return CURL_READFUNC_ABORT;
+}
+
+int test(char *URL)
+{
+ CURL *curl;
+ CURLcode res=CURLE_OK;
+
+ if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ if ((curl = curl_easy_init()) == NULL) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ /* First set the URL that is about to receive our POST. */
+ test_setopt(curl, CURLOPT_URL, URL);
+
+ /* Now specify we want to POST data */
+ test_setopt(curl, CURLOPT_POST, 1L);
+
+ /* Set the expected POST size */
+ test_setopt(curl, CURLOPT_POSTFIELDSIZE, 1L);
+
+ /* we want to use our own read function */
+ test_setopt(curl, CURLOPT_READFUNCTION, read_callback);
+
+ /* pointer to pass to our read function */
+ test_setopt(curl, CURLOPT_INFILE, NULL);
+
+ /* get verbose debug output please */
+ test_setopt(curl, CURLOPT_VERBOSE, 1L);
+
+ /* include headers in the output */
+ test_setopt(curl, CURLOPT_HEADER, 1L);
+
+ /* Perform the request, res will get the return code */
+ res = curl_easy_perform(curl);
+
+test_cleanup:
+
+ /* always cleanup */
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+
+ return (int)res;
+}
diff --git a/tests/libtest/lib514.c b/tests/libtest/lib514.c
new file mode 100644
index 0000000..283f89e
--- /dev/null
+++ b/tests/libtest/lib514.c
@@ -0,0 +1,66 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include "test.h"
+
+#include "memdebug.h"
+
+int test(char *URL)
+{
+ CURL *curl;
+ CURLcode res=CURLE_OK;
+
+ if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ if ((curl = curl_easy_init()) == NULL) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ /* First set the URL that is about to receive our POST. */
+ test_setopt(curl, CURLOPT_URL, URL);
+
+ /* Based on a bug report by Niels van Tongeren on June 29, 2004:
+
+ A weird situation occurs when request 1 is a POST request and the request
+ 2 is a HEAD request. For the POST request we set the CURLOPT_POSTFIELDS,
+ CURLOPT_POSTFIELDSIZE and CURLOPT_POST options. For the HEAD request we
+ set the CURLOPT_NOBODY option to '1'.
+
+ */
+
+ test_setopt(curl, CURLOPT_POSTFIELDS, "moo");
+ test_setopt(curl, CURLOPT_POSTFIELDSIZE, 3L);
+ test_setopt(curl, CURLOPT_POST, 1L);
+
+ /* this is where transfer 1 would take place, but skip that and change
+ options right away instead */
+
+ test_setopt(curl, CURLOPT_NOBODY, 1L);
+
+ test_setopt(curl, CURLOPT_VERBOSE, 1L); /* show verbose for debug */
+ test_setopt(curl, CURLOPT_HEADER, 1L); /* include header */
+
+ /* Now, we should be making a fine HEAD request */
+
+ /* Perform the request 2, res will get the return code */
+ res = curl_easy_perform(curl);
+
+test_cleanup:
+
+ /* always cleanup */
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+
+ return (int)res;
+}
diff --git a/tests/libtest/lib515.c b/tests/libtest/lib515.c
new file mode 100644
index 0000000..2660ae3
--- /dev/null
+++ b/tests/libtest/lib515.c
@@ -0,0 +1,47 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include "test.h"
+
+#include "memdebug.h"
+
+int test(char *URL)
+{
+ CURL *curl;
+ CURLcode res=CURLE_OK;
+
+ if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ if ((curl = curl_easy_init()) == NULL) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ /* First set the URL that is about to receive our POST. */
+ test_setopt(curl, CURLOPT_URL, URL);
+ test_setopt(curl, CURLOPT_POSTFIELDS, NULL);
+ test_setopt(curl, CURLOPT_POSTFIELDSIZE, 0L);
+ test_setopt(curl, CURLOPT_VERBOSE, 1L); /* show verbose for debug */
+ test_setopt(curl, CURLOPT_HEADER, 1L); /* include header */
+
+ /* Now, we should be making a zero byte POST request */
+ res = curl_easy_perform(curl);
+
+test_cleanup:
+
+ /* always cleanup */
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+
+ return (int)res;
+}
diff --git a/tests/libtest/lib516.c b/tests/libtest/lib516.c
new file mode 100644
index 0000000..b796dbb
--- /dev/null
+++ b/tests/libtest/lib516.c
@@ -0,0 +1,46 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include "test.h"
+
+#include "memdebug.h"
+
+int test(char *URL)
+{
+ CURL *curl;
+ CURLcode res=CURLE_OK;
+
+ if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ if ((curl = curl_easy_init()) == NULL) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ /* First set the URL that is about to receive our POST. */
+ test_setopt(curl, CURLOPT_URL, URL);
+ test_setopt(curl, CURLOPT_HTTPPOST, NULL);
+ test_setopt(curl, CURLOPT_VERBOSE, 1L); /* show verbose for debug */
+ test_setopt(curl, CURLOPT_HEADER, 1L); /* include header */
+
+ /* Now, we should be making a zero byte POST request */
+ res = curl_easy_perform(curl);
+
+test_cleanup:
+
+ /* always cleanup */
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+
+ return (int)res;
+}
diff --git a/tests/libtest/lib517.c b/tests/libtest/lib517.c
new file mode 100644
index 0000000..38a65d3
--- /dev/null
+++ b/tests/libtest/lib517.c
@@ -0,0 +1,116 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include "test.h"
+
+#include "memdebug.h"
+
+static const char *dates[]={
+ "Sun, 06 Nov 1994 08:49:37 GMT",
+ "Sunday, 06-Nov-94 08:49:37 GMT",
+ "Sun Nov 6 08:49:37 1994",
+ "06 Nov 1994 08:49:37 GMT",
+ "06-Nov-94 08:49:37 GMT",
+ "Nov 6 08:49:37 1994",
+ "06 Nov 1994 08:49:37",
+ "06-Nov-94 08:49:37",
+ "1994 Nov 6 08:49:37",
+ "GMT 08:49:37 06-Nov-94 Sunday",
+ "94 6 Nov 08:49:37",
+ "1994 Nov 6",
+ "06-Nov-94",
+ "Sun Nov 6 94",
+ "1994.Nov.6",
+ "Sun/Nov/6/94/GMT",
+ "Sun, 06 Nov 1994 08:49:37 CET",
+ "06 Nov 1994 08:49:37 EST",
+ "Sun, 12 Sep 2004 15:05:58 -0700",
+ "Sat, 11 Sep 2004 21:32:11 +0200",
+ "20040912 15:05:58 -0700",
+ "20040911 +0200",
+ "Thu, 01-Jan-1970 00:59:59 GMT",
+ "Thu, 01-Jan-1970 01:00:00 GMT",
+/* "2094 Nov 6", See ../data/test517 for details */
+ "Sat, 15-Apr-17 21:01:22 GMT",
+ "Thu, 19-Apr-2007 16:00:00 GMT",
+ "Wed, 25 Apr 2007 21:02:13 GMT",
+ "Thu, 19/Apr\\2007 16:00:00 GMT",
+ "Fri, 1 Jan 2010 01:01:50 GMT",
+ "Wednesday, 1-Jan-2003 00:00:00 GMT",
+ ", 1-Jan-2003 00:00:00 GMT",
+ " 1-Jan-2003 00:00:00 GMT",
+ "1-Jan-2003 00:00:00 GMT",
+ "Wed,18-Apr-07 22:50:12 GMT",
+ "WillyWonka , 18-Apr-07 22:50:12 GMT",
+ "WillyWonka , 18-Apr-07 22:50:12",
+ "WillyWonka , 18-apr-07 22:50:12",
+ "Mon, 18-Apr-1977 22:50:13 GMT",
+ "Mon, 18-Apr-77 22:50:13 GMT",
+ "\"Sat, 15-Apr-17\\\"21:01:22\\\"GMT\"",
+ "Partyday, 18- April-07 22:50:12",
+ "Partyday, 18 - Apri-07 22:50:12",
+ "Wednes, 1-Januar-2003 00:00:00 GMT",
+ "Sat, 15-Apr-17 21:01:22",
+ "Sat, 15-Apr-17 21:01:22 GMT-2",
+ "Sat, 15-Apr-17 21:01:22 GMT BLAH",
+ "Sat, 15-Apr-17 21:01:22 GMT-0400",
+ "Sat, 15-Apr-17 21:01:22 GMT-0400 (EDT)",
+ "Sat, 15-Apr-17 21:01:22 DST",
+ "Sat, 15-Apr-17 21:01:22 -0400",
+ "Sat, 15-Apr-17 21:01:22 (hello there)",
+ "Sat, 15-Apr-17 21:01:22 11:22:33",
+ "Sat, 15-Apr-17 ::00 21:01:22",
+ "Sat, 15-Apr-17 boink:z 21:01:22",
+ "Sat, 15-Apr-17 91:22:33 21:01:22",
+ "Thu Apr 18 22:50:12 2007 GMT",
+ "22:50:12 Thu Apr 18 2007 GMT",
+ "Thu 22:50:12 Apr 18 2007 GMT",
+ "Thu Apr 22:50:12 18 2007 GMT",
+ "Thu Apr 18 22:50:12 2007 GMT",
+ "Thu Apr 18 2007 22:50:12 GMT",
+ "Thu Apr 18 2007 GMT 22:50:12",
+ "Sat, 15-Apr-17 21:01:22 GMT",
+ "15-Sat, Apr-17 21:01:22 GMT",
+ "15-Sat, Apr 21:01:22 GMT 17",
+ "15-Sat, Apr 21:01:22 GMT 2017",
+ "15 Apr 21:01:22 2017",
+ "15 17 Apr 21:01:22",
+ "Apr 15 17 21:01:22",
+ "Apr 15 21:01:22 17",
+ "2017 April 15 21:01:22",
+ "15 April 2017 21:01:22",
+ "98 April 17 21:01:22",
+ "Thu, 012-Aug-2008 20:49:07 GMT",
+#if 0
+ /* leaving out these strings since they differ between 32 and 64 bit
+ archs and the test suite has no good way to support two different outputs
+ like that */
+ "Thu, 12-Aug-31841 20:49:07 GMT",
+ "Thu, 12-Aug-9999999999 20:49:07 GMT",
+#endif
+ "Thu, 999999999999-Aug-2007 20:49:07 GMT",
+ "Thu, 12-Aug-2007 20:61:99999999999 GMT",
+ "IAintNoDateFool",
+ "Thu Apr 18 22:50 2007 GMT", /* without seconds */
+
+ NULL
+};
+
+int test(char *URL)
+{
+ int i;
+
+ (void)URL; /* not used */
+
+ for(i=0; dates[i]; i++) {
+ printf("%d: %s => %ld\n", i, dates[i], (long)curl_getdate(dates[i], NULL));
+ }
+
+ return 0;
+}
diff --git a/tests/libtest/lib518.c b/tests/libtest/lib518.c
new file mode 100644
index 0000000..9e683d9
--- /dev/null
+++ b/tests/libtest/lib518.c
@@ -0,0 +1,509 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include "test.h"
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_RESOURCE_H
+#include <sys/resource.h>
+#endif
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+#ifdef HAVE_LIMITS_H
+#include <limits.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+#include "memdebug.h"
+
+#ifndef FD_SETSIZE
+#error "this test requires FD_SETSIZE"
+#endif
+
+#define SAFETY_MARGIN (16)
+#define NUM_OPEN (FD_SETSIZE + 10)
+#define NUM_NEEDED (NUM_OPEN + SAFETY_MARGIN)
+
+#if defined(WIN32) || defined(_WIN32) || defined(MSDOS)
+#define DEV_NULL "NUL"
+#else
+#define DEV_NULL "/dev/null"
+#endif
+
+#if defined(HAVE_GETRLIMIT) && defined(HAVE_SETRLIMIT)
+
+static int *fd = NULL;
+static struct rlimit num_open;
+static char msgbuff[256];
+
+static void store_errmsg(const char *msg, int err)
+{
+ if (!err)
+ sprintf(msgbuff, "%s", msg);
+ else
+ sprintf(msgbuff, "%s, errno %d, %s", msg, err, strerror(err));
+}
+
+static void close_file_descriptors(void)
+{
+ for (num_open.rlim_cur = 0;
+ num_open.rlim_cur < num_open.rlim_max;
+ num_open.rlim_cur++)
+ if (fd[num_open.rlim_cur] > 0)
+ close(fd[num_open.rlim_cur]);
+ free(fd);
+ fd = NULL;
+}
+
+static int fopen_works(void)
+{
+ FILE *fpa[3];
+ int i;
+ int ret = 1;
+
+ for (i = 0; i < 3; i++) {
+ fpa[i] = NULL;
+ }
+ for (i = 0; i < 3; i++) {
+ fpa[i] = fopen(DEV_NULL, "r");
+ if (fpa[i] == NULL) {
+ store_errmsg("fopen() failed", ERRNO);
+ fprintf(stderr, "%s\n", msgbuff);
+ ret = 0;
+ break;
+ }
+ }
+ for (i = 0; i < 3; i++) {
+ if (fpa[i] != NULL)
+ fclose(fpa[i]);
+ }
+ return ret;
+}
+
+static int rlimit(int keep_open)
+{
+ int nitems, i;
+ int *memchunk = NULL;
+ char *fmt;
+ struct rlimit rl;
+ char strbuff[256];
+ char strbuff1[81];
+ char strbuff2[81];
+ char fmt_u[] = "%u";
+ char fmt_lu[] = "%lu";
+#ifdef HAVE_LONGLONG
+ char fmt_llu[] = "%llu";
+
+ if (sizeof(rl.rlim_max) > sizeof(long))
+ fmt = fmt_llu;
+ else
+#endif
+ fmt = (sizeof(rl.rlim_max) < sizeof(long))?fmt_u:fmt_lu;
+
+ /* get initial open file limits */
+
+ if (getrlimit(RLIMIT_NOFILE, &rl) != 0) {
+ store_errmsg("getrlimit() failed", ERRNO);
+ fprintf(stderr, "%s\n", msgbuff);
+ return -1;
+ }
+
+ /* show initial open file limits */
+
+#ifdef RLIM_INFINITY
+ if (rl.rlim_cur == RLIM_INFINITY)
+ strcpy(strbuff, "INFINITY");
+ else
+#endif
+ sprintf(strbuff, fmt, rl.rlim_cur);
+ fprintf(stderr, "initial soft limit: %s\n", strbuff);
+
+#ifdef RLIM_INFINITY
+ if (rl.rlim_max == RLIM_INFINITY)
+ strcpy(strbuff, "INFINITY");
+ else
+#endif
+ sprintf(strbuff, fmt, rl.rlim_max);
+ fprintf(stderr, "initial hard limit: %s\n", strbuff);
+
+ /* show our constants */
+
+ fprintf(stderr, "test518 FD_SETSIZE: %d\n", FD_SETSIZE);
+ fprintf(stderr, "test518 NUM_OPEN : %d\n", NUM_OPEN);
+ fprintf(stderr, "test518 NUM_NEEDED: %d\n", NUM_NEEDED);
+
+ /*
+ * if soft limit and hard limit are different we ask the
+ * system to raise soft limit all the way up to the hard
+ * limit. Due to some other system limit the soft limit
+ * might not be raised up to the hard limit. So from this
+ * point the resulting soft limit is our limit. Trying to
+ * open more than soft limit file descriptors will fail.
+ */
+
+ if (rl.rlim_cur != rl.rlim_max) {
+
+#ifdef OPEN_MAX
+ if ((rl.rlim_cur > 0) &&
+ (rl.rlim_cur < OPEN_MAX)) {
+ fprintf(stderr, "raising soft limit up to OPEN_MAX\n");
+ rl.rlim_cur = OPEN_MAX;
+ if (setrlimit(RLIMIT_NOFILE, &rl) != 0) {
+ /* on failure don't abort just issue a warning */
+ store_errmsg("setrlimit() failed", ERRNO);
+ fprintf(stderr, "%s\n", msgbuff);
+ msgbuff[0] = '\0';
+ }
+ }
+#endif
+
+ fprintf(stderr, "raising soft limit up to hard limit\n");
+ rl.rlim_cur = rl.rlim_max;
+ if (setrlimit(RLIMIT_NOFILE, &rl) != 0) {
+ /* on failure don't abort just issue a warning */
+ store_errmsg("setrlimit() failed", ERRNO);
+ fprintf(stderr, "%s\n", msgbuff);
+ msgbuff[0] = '\0';
+ }
+
+ /* get current open file limits */
+
+ if (getrlimit(RLIMIT_NOFILE, &rl) != 0) {
+ store_errmsg("getrlimit() failed", ERRNO);
+ fprintf(stderr, "%s\n", msgbuff);
+ return -3;
+ }
+
+ /* show current open file limits */
+
+#ifdef RLIM_INFINITY
+ if (rl.rlim_cur == RLIM_INFINITY)
+ strcpy(strbuff, "INFINITY");
+ else
+#endif
+ sprintf(strbuff, fmt, rl.rlim_cur);
+ fprintf(stderr, "current soft limit: %s\n", strbuff);
+
+#ifdef RLIM_INFINITY
+ if (rl.rlim_max == RLIM_INFINITY)
+ strcpy(strbuff, "INFINITY");
+ else
+#endif
+ sprintf(strbuff, fmt, rl.rlim_max);
+ fprintf(stderr, "current hard limit: %s\n", strbuff);
+
+ } /* (rl.rlim_cur != rl.rlim_max) */
+
+ /*
+ * test 518 is all about testing libcurl functionality
+ * when more than FD_SETSIZE file descriptors are open.
+ * This means that if for any reason we are not able to
+ * open more than FD_SETSIZE file descriptors then test
+ * 518 should not be run.
+ */
+
+ /*
+ * verify that soft limit is higher than NUM_NEEDED,
+ * which is the number of file descriptors we would
+ * try to open plus SAFETY_MARGIN to not exhaust the
+ * file descriptor pool
+ */
+
+ num_open.rlim_cur = NUM_NEEDED;
+
+ if ((rl.rlim_cur > 0) &&
+#ifdef RLIM_INFINITY
+ (rl.rlim_cur != RLIM_INFINITY) &&
+#endif
+ (rl.rlim_cur <= num_open.rlim_cur)) {
+ sprintf(strbuff2, fmt, rl.rlim_cur);
+ sprintf(strbuff1, fmt, num_open.rlim_cur);
+ sprintf(strbuff, "fds needed %s > system limit %s",
+ strbuff1, strbuff2);
+ store_errmsg(strbuff, 0);
+ fprintf(stderr, "%s\n", msgbuff);
+ return -4;
+ }
+
+ /*
+ * reserve a chunk of memory before opening file descriptors to
+ * avoid a low memory condition once the file descriptors are
+ * open. System conditions that could make the test fail should
+ * be addressed in the precheck phase. This chunk of memory shall
+ * be always free()ed before exiting the rlimit() function so
+ * that it becomes available to the test.
+ */
+
+ for (nitems = i = 1; nitems <= i; i *= 2)
+ nitems = i;
+ if (nitems > 0x7fff)
+ nitems = 0x40000;
+ do {
+ num_open.rlim_max = sizeof(*memchunk) * (size_t)nitems;
+ sprintf(strbuff, fmt, num_open.rlim_max);
+ fprintf(stderr, "allocating memchunk %s byte array\n", strbuff);
+ memchunk = malloc(sizeof(*memchunk) * (size_t)nitems);
+ if (!memchunk) {
+ fprintf(stderr, "memchunk, malloc() failed\n");
+ nitems /= 2;
+ }
+ } while (nitems && !memchunk);
+ if (!memchunk) {
+ store_errmsg("memchunk, malloc() failed", ERRNO);
+ fprintf(stderr, "%s\n", msgbuff);
+ return -5;
+ }
+
+ /* initialize it to fight lazy allocation */
+
+ fprintf(stderr, "initializing memchunk array\n");
+
+ for (i = 0; i < nitems; i++)
+ memchunk[i] = -1;
+
+ /* set the number of file descriptors we will try to open */
+
+ num_open.rlim_max = NUM_OPEN;
+
+ /* verify that we won't overflow size_t in malloc() */
+
+ if ((size_t)(num_open.rlim_max) > ((size_t)-1) / sizeof(*fd)) {
+ sprintf(strbuff1, fmt, num_open.rlim_max);
+ sprintf(strbuff, "unable to allocate an array for %s "
+ "file descriptors, would overflow size_t", strbuff1);
+ store_errmsg(strbuff, 0);
+ fprintf(stderr, "%s\n", msgbuff);
+ free(memchunk);
+ return -6;
+ }
+
+ /* allocate array for file descriptors */
+
+ sprintf(strbuff, fmt, num_open.rlim_max);
+ fprintf(stderr, "allocating array for %s file descriptors\n", strbuff);
+
+ fd = malloc(sizeof(*fd) * (size_t)(num_open.rlim_max));
+ if (!fd) {
+ store_errmsg("fd, malloc() failed", ERRNO);
+ fprintf(stderr, "%s\n", msgbuff);
+ free(memchunk);
+ return -7;
+ }
+
+ /* initialize it to fight lazy allocation */
+
+ fprintf(stderr, "initializing fd array\n");
+
+ for (num_open.rlim_cur = 0;
+ num_open.rlim_cur < num_open.rlim_max;
+ num_open.rlim_cur++)
+ fd[num_open.rlim_cur] = -1;
+
+ sprintf(strbuff, fmt, num_open.rlim_max);
+ fprintf(stderr, "trying to open %s file descriptors\n", strbuff);
+
+ /* open a dummy descriptor */
+
+ fd[0] = open(DEV_NULL, O_RDONLY);
+ if (fd[0] < 0) {
+ sprintf(strbuff, "opening of %s failed", DEV_NULL);
+ store_errmsg(strbuff, ERRNO);
+ fprintf(stderr, "%s\n", msgbuff);
+ free(fd);
+ fd = NULL;
+ free(memchunk);
+ return -8;
+ }
+
+ /* create a bunch of file descriptors */
+
+ for (num_open.rlim_cur = 1;
+ num_open.rlim_cur < num_open.rlim_max;
+ num_open.rlim_cur++) {
+
+ fd[num_open.rlim_cur] = dup(fd[0]);
+
+ if (fd[num_open.rlim_cur] < 0) {
+
+ fd[num_open.rlim_cur] = -1;
+
+ sprintf(strbuff1, fmt, num_open.rlim_cur);
+ sprintf(strbuff, "dup() attempt %s failed", strbuff1);
+ fprintf(stderr, "%s\n", strbuff);
+
+ sprintf(strbuff1, fmt, num_open.rlim_cur);
+ sprintf(strbuff, "fds system limit seems close to %s", strbuff1);
+ fprintf(stderr, "%s\n", strbuff);
+
+ num_open.rlim_max = NUM_NEEDED;
+
+ sprintf(strbuff2, fmt, num_open.rlim_max);
+ sprintf(strbuff1, fmt, num_open.rlim_cur);
+ sprintf(strbuff, "fds needed %s > system limit %s",
+ strbuff2, strbuff1);
+ store_errmsg(strbuff, 0);
+ fprintf(stderr, "%s\n", msgbuff);
+
+ for (num_open.rlim_cur = 0;
+ fd[num_open.rlim_cur] >= 0;
+ num_open.rlim_cur++)
+ close(fd[num_open.rlim_cur]);
+ free(fd);
+ fd = NULL;
+ free(memchunk);
+ return -9;
+
+ }
+
+ }
+
+ sprintf(strbuff, fmt, num_open.rlim_max);
+ fprintf(stderr, "%s file descriptors open\n", strbuff);
+
+#if !defined(HAVE_POLL_FINE) && \
+ !defined(USE_WINSOCK) && \
+ !defined(TPF)
+
+ /*
+ * when using select() instead of poll() we cannot test
+ * libcurl functionality with a socket number equal or
+ * greater than FD_SETSIZE. In any case, macro VERIFY_SOCK
+ * in lib/select.c enforces this check and protects libcurl
+ * from a possible crash. The effect of this protection
+ * is that test 518 will always fail, since the actual
+ * call to select() never takes place. We skip test 518
+ * with an indication that select limit would be exceeded.
+ */
+
+ num_open.rlim_cur = FD_SETSIZE - SAFETY_MARGIN;
+ if (num_open.rlim_max > num_open.rlim_cur) {
+ sprintf(strbuff, "select limit is FD_SETSIZE %d", FD_SETSIZE);
+ store_errmsg(strbuff, 0);
+ fprintf(stderr, "%s\n", msgbuff);
+ close_file_descriptors();
+ free(memchunk);
+ return -10;
+ }
+
+ num_open.rlim_cur = FD_SETSIZE - SAFETY_MARGIN;
+ for (rl.rlim_cur = 0;
+ rl.rlim_cur < num_open.rlim_max;
+ rl.rlim_cur++) {
+ if ((fd[rl.rlim_cur] > 0) &&
+ ((unsigned int)fd[rl.rlim_cur] > num_open.rlim_cur)) {
+ sprintf(strbuff, "select limit is FD_SETSIZE %d", FD_SETSIZE);
+ store_errmsg(strbuff, 0);
+ fprintf(stderr, "%s\n", msgbuff);
+ close_file_descriptors();
+ free(memchunk);
+ return -11;
+ }
+ }
+
+#endif /* using a FD_SETSIZE bound select() */
+
+ /*
+ * Old or 'backwards compatible' implementations of stdio do not allow
+ * handling of streams with an underlying file descriptor number greater
+ * than 255, even when allowing high numbered file descriptors for sockets.
+ * At this point we have a big number of file descriptors which have been
+ * opened using dup(), so lets test the stdio implementation and discover
+ * if it is capable of fopen()ing some additional files.
+ */
+
+ if (!fopen_works()) {
+ sprintf(strbuff1, fmt, num_open.rlim_max);
+ sprintf(strbuff, "stdio fopen() fails with %s fds open()",
+ strbuff1);
+ fprintf(stderr, "%s\n", msgbuff);
+ sprintf(strbuff, "stdio fopen() fails with lots of fds open()");
+ store_errmsg(strbuff, 0);
+ close_file_descriptors();
+ free(memchunk);
+ return -12;
+ }
+
+ /* free the chunk of memory we were reserving so that it
+ becomes becomes available to the test */
+
+ free(memchunk);
+
+ /* close file descriptors unless instructed to keep them */
+
+ if (!keep_open) {
+ close_file_descriptors();
+ }
+
+ return 0;
+}
+
+int test(char *URL)
+{
+ CURLcode res;
+ CURL *curl;
+
+ if(!strcmp(URL, "check")) {
+ /* used by the test script to ask if we can run this test or not */
+ if(rlimit(FALSE)) {
+ fprintf(stdout, "rlimit problem: %s\n", msgbuff);
+ return 1;
+ }
+ return 0; /* sure, run this! */
+ }
+
+ if (rlimit(TRUE)) {
+ /* failure */
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ /* run the test with the bunch of open file descriptors
+ and close them all once the test is over */
+
+ if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ close_file_descriptors();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ if ((curl = curl_easy_init()) == NULL) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ close_file_descriptors();
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ test_setopt(curl, CURLOPT_URL, URL);
+ test_setopt(curl, CURLOPT_HEADER, 1L);
+
+ res = curl_easy_perform(curl);
+
+test_cleanup:
+
+ close_file_descriptors();
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+
+ return (int)res;
+}
+
+#else /* defined(HAVE_GETRLIMIT) && defined(HAVE_SETRLIMIT) */
+
+int test(char *URL)
+{
+ (void)URL;
+ printf("system lacks necessary system function(s)");
+ return 1; /* skip test */
+}
+
+#endif /* defined(HAVE_GETRLIMIT) && defined(HAVE_SETRLIMIT) */
diff --git a/tests/libtest/lib519.c b/tests/libtest/lib519.c
new file mode 100644
index 0000000..f885c5d
--- /dev/null
+++ b/tests/libtest/lib519.c
@@ -0,0 +1,50 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include "test.h"
+
+#include "memdebug.h"
+
+int test(char *URL)
+{
+ CURLcode res;
+ CURL *curl;
+
+ if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ if ((curl = curl_easy_init()) == NULL) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ test_setopt(curl, CURLOPT_URL, URL);
+ test_setopt(curl, CURLOPT_USERPWD, "monster:underbed");
+ test_setopt(curl, CURLOPT_HEADER, 1L);
+ test_setopt(curl, CURLOPT_VERBOSE, 1L);
+
+ /* get first page */
+ res = curl_easy_perform(curl);
+
+ test_setopt(curl, CURLOPT_USERPWD, "anothermonster:inwardrobe");
+
+ /* get second page */
+ res = curl_easy_perform(curl);
+
+test_cleanup:
+
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+
+ return (int)res;
+}
+
diff --git a/tests/libtest/lib520.c b/tests/libtest/lib520.c
new file mode 100644
index 0000000..a0e1244
--- /dev/null
+++ b/tests/libtest/lib520.c
@@ -0,0 +1,42 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include "test.h"
+
+#include "memdebug.h"
+
+int test(char *URL)
+{
+ CURLcode res;
+ CURL *curl;
+
+ if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ if ((curl = curl_easy_init()) == NULL) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ test_setopt(curl, CURLOPT_URL, URL);
+ test_setopt(curl, CURLOPT_FILETIME, 1L);
+ test_setopt(curl, CURLOPT_VERBOSE, 1L);
+
+ res = curl_easy_perform(curl);
+
+test_cleanup:
+
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+
+ return (int)res;
+}
diff --git a/tests/libtest/lib521.c b/tests/libtest/lib521.c
new file mode 100644
index 0000000..a4ae555
--- /dev/null
+++ b/tests/libtest/lib521.c
@@ -0,0 +1,44 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include "test.h"
+
+#include "memdebug.h"
+
+int test(char *URL)
+{
+ CURLcode res;
+ CURL *curl;
+
+ if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ if ((curl = curl_easy_init()) == NULL) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ test_setopt(curl, CURLOPT_URL, URL);
+ test_setopt(curl, CURLOPT_PORT, atoi(libtest_arg2));
+ test_setopt(curl, CURLOPT_USERPWD, "xxx:yyy");
+ test_setopt(curl, CURLOPT_VERBOSE, 1L);
+
+ res = curl_easy_perform(curl);
+
+test_cleanup:
+
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+
+ return (int)res;
+}
+
diff --git a/tests/libtest/lib523.c b/tests/libtest/lib523.c
new file mode 100644
index 0000000..a1ac4a4
--- /dev/null
+++ b/tests/libtest/lib523.c
@@ -0,0 +1,45 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include "test.h"
+
+#include "memdebug.h"
+
+int test(char *URL)
+{
+ CURLcode res;
+ CURL *curl;
+
+ if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ if ((curl = curl_easy_init()) == NULL) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ test_setopt(curl, CURLOPT_PROXY, libtest_arg2);
+ test_setopt(curl, CURLOPT_URL, URL);
+ test_setopt(curl, CURLOPT_PORT, 19999L);
+ test_setopt(curl, CURLOPT_USERPWD, "xxx:yyy");
+ test_setopt(curl, CURLOPT_VERBOSE, 1L);
+
+ res = curl_easy_perform(curl);
+
+test_cleanup:
+
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+
+ return (int)res;
+}
+
diff --git a/tests/libtest/lib524.c b/tests/libtest/lib524.c
new file mode 100644
index 0000000..ee52062
--- /dev/null
+++ b/tests/libtest/lib524.c
@@ -0,0 +1,43 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include "test.h"
+
+#include "memdebug.h"
+
+int test(char *URL)
+{
+ CURLcode res;
+ CURL *curl;
+
+ if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ if ((curl = curl_easy_init()) == NULL) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ test_setopt(curl, CURLOPT_URL, URL);
+ test_setopt(curl, CURLOPT_UPLOAD, 1L);
+ test_setopt(curl, CURLOPT_VERBOSE, 1L);
+
+ res = curl_easy_perform(curl);
+
+test_cleanup:
+
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+
+ return (int)res;
+}
+
diff --git a/tests/libtest/lib525.c b/tests/libtest/lib525.c
new file mode 100644
index 0000000..ade6370
--- /dev/null
+++ b/tests/libtest/lib525.c
@@ -0,0 +1,211 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include "test.h"
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+
+#include "testutil.h"
+#include "memdebug.h"
+
+#define MAIN_LOOP_HANG_TIMEOUT 90 * 1000
+#define MULTI_PERFORM_HANG_TIMEOUT 60 * 1000
+
+int test(char *URL)
+{
+ int res = 0;
+ CURL *curl;
+ FILE *hd_src ;
+ int hd ;
+ int error;
+ struct_stat file_info;
+ int running;
+ char done=FALSE;
+ CURLM *m = NULL;
+ struct timeval ml_start;
+ struct timeval mp_start;
+ char ml_timedout = FALSE;
+ char mp_timedout = FALSE;
+
+ if (!libtest_arg2) {
+ fprintf(stderr, "Usage: lib525 [url] [uploadfile]\n");
+ return -1;
+ }
+
+ hd_src = fopen(libtest_arg2, "rb");
+ if(NULL == hd_src) {
+ error = ERRNO;
+ fprintf(stderr, "fopen() failed with error: %d %s\n",
+ error, strerror(error));
+ fprintf(stderr, "Error opening file: %s\n", libtest_arg2);
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ /* get the file size of the local file */
+ hd = fstat(fileno(hd_src), &file_info);
+ if(hd == -1) {
+ /* can't open file, bail out */
+ error = ERRNO;
+ fprintf(stderr, "fstat() failed with error: %d %s\n",
+ error, strerror(error));
+ fprintf(stderr, "ERROR: cannot open file %s\n", libtest_arg2);
+ fclose(hd_src);
+ return -1;
+ }
+
+ if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ fclose(hd_src);
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ if ((curl = curl_easy_init()) == NULL) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ fclose(hd_src);
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ /* enable uploading */
+ test_setopt(curl, CURLOPT_UPLOAD, 1L);
+
+ /* specify target */
+ test_setopt(curl,CURLOPT_URL, URL);
+
+ /* go verbose */
+ test_setopt(curl, CURLOPT_VERBOSE, 1L);
+
+ /* use active FTP */
+ test_setopt(curl, CURLOPT_FTPPORT, "-");
+
+ /* now specify which file to upload */
+ test_setopt(curl, CURLOPT_READDATA, hd_src);
+
+ /* NOTE: if you want this code to work on Windows with libcurl as a DLL, you
+ MUST also provide a read callback with CURLOPT_READFUNCTION. Failing to
+ do so will give you a crash since a DLL may not use the variable's memory
+ when passed in to it from an app like this. */
+
+ /* Set the size of the file to upload (optional). If you give a *_LARGE
+ option you MUST make sure that the type of the passed-in argument is a
+ curl_off_t. If you use CURLOPT_INFILESIZE (without _LARGE) you must
+ make sure that to pass in a type 'long' argument. */
+ test_setopt(curl, CURLOPT_INFILESIZE_LARGE,
+ (curl_off_t)file_info.st_size);
+
+ if ((m = curl_multi_init()) == NULL) {
+ fprintf(stderr, "curl_multi_init() failed\n");
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+ fclose(hd_src);
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ if ((res = (int)curl_multi_add_handle(m, curl)) != CURLM_OK) {
+ fprintf(stderr, "curl_multi_add_handle() failed, "
+ "with code %d\n", res);
+ curl_multi_cleanup(m);
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+ fclose(hd_src);
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ ml_timedout = FALSE;
+ ml_start = tutil_tvnow();
+
+ while (!done) {
+ fd_set rd, wr, exc;
+ int max_fd;
+ struct timeval interval;
+
+ interval.tv_sec = 1;
+ interval.tv_usec = 0;
+
+ if (tutil_tvdiff(tutil_tvnow(), ml_start) >
+ MAIN_LOOP_HANG_TIMEOUT) {
+ ml_timedout = TRUE;
+ break;
+ }
+ mp_timedout = FALSE;
+ mp_start = tutil_tvnow();
+
+ while (res == CURLM_CALL_MULTI_PERFORM) {
+ res = (int)curl_multi_perform(m, &running);
+ if (tutil_tvdiff(tutil_tvnow(), mp_start) >
+ MULTI_PERFORM_HANG_TIMEOUT) {
+ mp_timedout = TRUE;
+ break;
+ }
+ if (running <= 0) {
+ done = TRUE;
+ break;
+ }
+ }
+ if (mp_timedout || done)
+ break;
+
+ if (res != CURLM_OK) {
+ fprintf(stderr, "not okay???\n");
+ break;
+ }
+
+ FD_ZERO(&rd);
+ FD_ZERO(&wr);
+ FD_ZERO(&exc);
+ max_fd = 0;
+
+ if (curl_multi_fdset(m, &rd, &wr, &exc, &max_fd) != CURLM_OK) {
+ fprintf(stderr, "unexpected failured of fdset.\n");
+ res = 189;
+ break;
+ }
+
+ if (select_test(max_fd+1, &rd, &wr, &exc, &interval) == -1) {
+ fprintf(stderr, "bad select??\n");
+ res = 195;
+ break;
+ }
+
+ res = CURLM_CALL_MULTI_PERFORM;
+ }
+
+ if (ml_timedout || mp_timedout) {
+ if (ml_timedout) fprintf(stderr, "ml_timedout\n");
+ if (mp_timedout) fprintf(stderr, "mp_timedout\n");
+ fprintf(stderr, "ABORTING TEST, since it seems "
+ "that it would have run forever.\n");
+ res = TEST_ERR_RUNS_FOREVER;
+ }
+
+test_cleanup:
+
+#ifdef LIB529
+ /* test 529 */
+ if(m) {
+ curl_multi_remove_handle(m, curl);
+ curl_multi_cleanup(m);
+ }
+ curl_easy_cleanup(curl);
+#else
+ /* test 525 */
+ if(m)
+ curl_multi_remove_handle(m, curl);
+ curl_easy_cleanup(curl);
+ if(m)
+ curl_multi_cleanup(m);
+#endif
+
+ fclose(hd_src); /* close the local file */
+
+ curl_global_cleanup();
+ return res;
+}
diff --git a/tests/libtest/lib526.c b/tests/libtest/lib526.c
new file mode 100644
index 0000000..0418b6b
--- /dev/null
+++ b/tests/libtest/lib526.c
@@ -0,0 +1,236 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+/*
+ * This code sets up multiple easy handles that transfer a single file from
+ * the same URL, in a serial manner after each other. Due to the connection
+ * sharing within the multi handle all transfers are performed on the same
+ * persistent connection.
+ *
+ * This source code is used for lib526, lib527 and lib532 with only #ifdefs
+ * controlling the small differences.
+ *
+ * - lib526 closes all easy handles after
+ * they all have transfered the file over the single connection
+ * - lib527 closes each easy handle after each single transfer.
+ * - lib532 uses only a single easy handle that is removed, reset and then
+ * re-added for each transfer
+ *
+ * Test case 526, 527 and 532 use FTP, while test 528 uses the lib526 tool but
+ * with HTTP.
+ */
+
+#include "test.h"
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+
+#include "testutil.h"
+#include "memdebug.h"
+
+#define MAIN_LOOP_HANG_TIMEOUT 90 * 1000
+#define MULTI_PERFORM_HANG_TIMEOUT 60 * 1000
+
+#define NUM_HANDLES 4
+
+int test(char *URL)
+{
+ int res = 0;
+ CURL *curl[NUM_HANDLES];
+ int running;
+ char done=FALSE;
+ CURLM *m = NULL;
+ int current=0;
+ int i, j;
+ struct timeval ml_start;
+ struct timeval mp_start;
+ char ml_timedout = FALSE;
+ char mp_timedout = FALSE;
+
+ if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ /* get NUM_HANDLES easy handles */
+ for(i=0; i < NUM_HANDLES; i++) {
+ curl[i] = curl_easy_init();
+ if(!curl[i]) {
+ fprintf(stderr, "curl_easy_init() failed "
+ "on handle #%d\n", i);
+ for (j=i-1; j >= 0; j--) {
+ curl_easy_cleanup(curl[j]);
+ }
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD + i;
+ }
+ res = curl_easy_setopt(curl[i], CURLOPT_URL, URL);
+ if(res) {
+ fprintf(stderr, "curl_easy_setopt() failed "
+ "on handle #%d\n", i);
+ for (j=i; j >= 0; j--) {
+ curl_easy_cleanup(curl[j]);
+ }
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD + i;
+ }
+
+ /* go verbose */
+ res = curl_easy_setopt(curl[i], CURLOPT_VERBOSE, 1L);
+ if(res) {
+ fprintf(stderr, "curl_easy_setopt() failed "
+ "on handle #%d\n", i);
+ for (j=i; j >= 0; j--) {
+ curl_easy_cleanup(curl[j]);
+ }
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD + i;
+ }
+ }
+
+ if ((m = curl_multi_init()) == NULL) {
+ fprintf(stderr, "curl_multi_init() failed\n");
+ for(i=0; i < NUM_HANDLES; i++) {
+ curl_easy_cleanup(curl[i]);
+ }
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ if ((res = (int)curl_multi_add_handle(m, curl[current])) != CURLM_OK) {
+ fprintf(stderr, "curl_multi_add_handle() failed, "
+ "with code %d\n", res);
+ curl_multi_cleanup(m);
+ for(i=0; i < NUM_HANDLES; i++) {
+ curl_easy_cleanup(curl[i]);
+ }
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ ml_timedout = FALSE;
+ ml_start = tutil_tvnow();
+
+ fprintf(stderr, "Start at URL 0\n");
+
+ while (!done) {
+ fd_set rd, wr, exc;
+ int max_fd;
+ struct timeval interval;
+
+ interval.tv_sec = 1;
+ interval.tv_usec = 0;
+
+ if (tutil_tvdiff(tutil_tvnow(), ml_start) >
+ MAIN_LOOP_HANG_TIMEOUT) {
+ ml_timedout = TRUE;
+ break;
+ }
+ mp_timedout = FALSE;
+ mp_start = tutil_tvnow();
+
+ while (res == CURLM_CALL_MULTI_PERFORM) {
+ res = (int)curl_multi_perform(m, &running);
+ if (tutil_tvdiff(tutil_tvnow(), mp_start) >
+ MULTI_PERFORM_HANG_TIMEOUT) {
+ mp_timedout = TRUE;
+ break;
+ }
+ if (running <= 0) {
+#ifdef LIB527
+ /* NOTE: this code does not remove the handle from the multi handle
+ here, which would be the nice, sane and documented way of working.
+ This however tests that the API survives this abuse gracefully. */
+ curl_easy_cleanup(curl[current]);
+#endif
+ if(++current < NUM_HANDLES) {
+ fprintf(stderr, "Advancing to URL %d\n", current);
+#ifdef LIB532
+ /* first remove the only handle we use */
+ curl_multi_remove_handle(m, curl[0]);
+
+ /* make us re-use the same handle all the time, and try resetting
+ the handle first too */
+ curl_easy_reset(curl[0]);
+ test_setopt(curl[0], CURLOPT_URL, URL);
+ test_setopt(curl[0], CURLOPT_VERBOSE, 1L);
+
+ /* re-add it */
+ res = (int)curl_multi_add_handle(m, curl[0]);
+#else
+ res = (int)curl_multi_add_handle(m, curl[current]);
+#endif
+ if(res) {
+ fprintf(stderr, "add handle failed: %d.\n", res);
+ res = 243;
+ break;
+ }
+ }
+ else
+ done = TRUE; /* bail out */
+ break;
+ }
+ }
+ if (mp_timedout || done)
+ break;
+
+ if (res != CURLM_OK) {
+ fprintf(stderr, "not okay???\n");
+ break;
+ }
+
+ FD_ZERO(&rd);
+ FD_ZERO(&wr);
+ FD_ZERO(&exc);
+ max_fd = 0;
+
+ if (curl_multi_fdset(m, &rd, &wr, &exc, &max_fd) != CURLM_OK) {
+ fprintf(stderr, "unexpected failured of fdset.\n");
+ res = 189;
+ break;
+ }
+
+ if (select_test(max_fd+1, &rd, &wr, &exc, &interval) == -1) {
+ fprintf(stderr, "bad select??\n");
+ res = 195;
+ break;
+ }
+
+ res = CURLM_CALL_MULTI_PERFORM;
+ }
+
+ if (ml_timedout || mp_timedout) {
+ if (ml_timedout) fprintf(stderr, "ml_timedout\n");
+ if (mp_timedout) fprintf(stderr, "mp_timedout\n");
+ fprintf(stderr, "ABORTING TEST, since it seems "
+ "that it would have run forever.\n");
+ res = TEST_ERR_RUNS_FOREVER;
+ }
+
+#ifdef LIB532
+test_cleanup:
+#endif
+
+#ifndef LIB527
+ /* get NUM_HANDLES easy handles */
+ for(i=0; i < NUM_HANDLES; i++) {
+#ifdef LIB526
+ if(m)
+ curl_multi_remove_handle(m, curl[i]);
+#endif
+ curl_easy_cleanup(curl[i]);
+ }
+#endif
+ if(m)
+ curl_multi_cleanup(m);
+
+ curl_global_cleanup();
+ return res;
+}
diff --git a/tests/libtest/lib530.c b/tests/libtest/lib530.c
new file mode 100644
index 0000000..abefc92
--- /dev/null
+++ b/tests/libtest/lib530.c
@@ -0,0 +1,211 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include "test.h"
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+#include "testutil.h"
+#include "memdebug.h"
+
+#define MAIN_LOOP_HANG_TIMEOUT 90 * 1000
+#define MULTI_PERFORM_HANG_TIMEOUT 60 * 1000
+
+#define NUM_HANDLES 4
+
+int test(char *URL)
+{
+ int res = 0;
+ CURL *curl[NUM_HANDLES];
+ int running;
+ char done=FALSE;
+ CURLM *m;
+ int i, j;
+ struct timeval ml_start;
+ struct timeval mp_start;
+ char ml_timedout = FALSE;
+ char mp_timedout = FALSE;
+ char target_url[256];
+
+ if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ if ((m = curl_multi_init()) == NULL) {
+ fprintf(stderr, "curl_multi_init() failed\n");
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ /* get NUM_HANDLES easy handles */
+ for(i=0; i < NUM_HANDLES; i++) {
+ curl[i] = curl_easy_init();
+ if(!curl[i]) {
+ fprintf(stderr, "curl_easy_init() failed "
+ "on handle #%d\n", i);
+ for (j=i-1; j >= 0; j--) {
+ curl_multi_remove_handle(m, curl[j]);
+ curl_easy_cleanup(curl[j]);
+ }
+ curl_multi_cleanup(m);
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD + i;
+ }
+ sprintf(target_url, "%s%04i", URL, i + 1);
+ target_url[sizeof(target_url) - 1] = '\0';
+
+ res = curl_easy_setopt(curl[i], CURLOPT_URL, target_url);
+ if(res) {
+ fprintf(stderr, "curl_easy_setopt() failed "
+ "on handle #%d\n", i);
+ for (j=i; j >= 0; j--) {
+ curl_multi_remove_handle(m, curl[j]);
+ curl_easy_cleanup(curl[j]);
+ }
+ curl_multi_cleanup(m);
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD + i;
+ }
+
+ /* go verbose */
+ res = curl_easy_setopt(curl[i], CURLOPT_VERBOSE, 1L);
+ if(res) {
+ fprintf(stderr, "curl_easy_setopt() failed "
+ "on handle #%d\n", i);
+ for (j=i; j >= 0; j--) {
+ curl_multi_remove_handle(m, curl[j]);
+ curl_easy_cleanup(curl[j]);
+ }
+ curl_multi_cleanup(m);
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD + i;
+ }
+
+ /* include headers */
+ res = curl_easy_setopt(curl[i], CURLOPT_HEADER, 1L);
+ if(res) {
+ fprintf(stderr, "curl_easy_setopt() failed "
+ "on handle #%d\n", i);
+ for (j=i; j >= 0; j--) {
+ curl_multi_remove_handle(m, curl[j]);
+ curl_easy_cleanup(curl[j]);
+ }
+ curl_multi_cleanup(m);
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD + i;
+ }
+
+ /* add handle to multi */
+ if ((res = (int)curl_multi_add_handle(m, curl[i])) != CURLM_OK) {
+ fprintf(stderr, "curl_multi_add_handle() failed, "
+ "on handle #%d with code %d\n", i, res);
+ curl_easy_cleanup(curl[i]);
+ for (j=i-1; j >= 0; j--) {
+ curl_multi_remove_handle(m, curl[j]);
+ curl_easy_cleanup(curl[j]);
+ }
+ curl_multi_cleanup(m);
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD + i;
+ }
+ }
+
+ curl_multi_setopt(m, CURLMOPT_PIPELINING, 1L);
+
+ ml_timedout = FALSE;
+ ml_start = tutil_tvnow();
+
+ fprintf(stderr, "Start at URL 0\n");
+
+ while (!done) {
+ fd_set rd, wr, exc;
+ int max_fd;
+ struct timeval interval;
+
+ interval.tv_sec = 1;
+ interval.tv_usec = 0;
+
+ if (tutil_tvdiff(tutil_tvnow(), ml_start) >
+ MAIN_LOOP_HANG_TIMEOUT) {
+ ml_timedout = TRUE;
+ break;
+ }
+ mp_timedout = FALSE;
+ mp_start = tutil_tvnow();
+
+ while (res == CURLM_CALL_MULTI_PERFORM) {
+ res = (int)curl_multi_perform(m, &running);
+ if (tutil_tvdiff(tutil_tvnow(), mp_start) >
+ MULTI_PERFORM_HANG_TIMEOUT) {
+ mp_timedout = TRUE;
+ break;
+ }
+ if (running <= 0) {
+ done = TRUE; /* bail out */
+ break;
+ }
+ }
+ if (mp_timedout || done)
+ break;
+
+ if (res != CURLM_OK) {
+ fprintf(stderr, "not okay???\n");
+ break;
+ }
+
+ FD_ZERO(&rd);
+ FD_ZERO(&wr);
+ FD_ZERO(&exc);
+ max_fd = 0;
+
+ if (curl_multi_fdset(m, &rd, &wr, &exc, &max_fd) != CURLM_OK) {
+ fprintf(stderr, "unexpected failured of fdset.\n");
+ res = 189;
+ break;
+ }
+
+ if (select_test(max_fd+1, &rd, &wr, &exc, &interval) == -1) {
+ fprintf(stderr, "bad select??\n");
+ res = 195;
+ break;
+ }
+
+ res = CURLM_CALL_MULTI_PERFORM;
+ }
+
+ if (ml_timedout || mp_timedout) {
+ if (ml_timedout) fprintf(stderr, "ml_timedout\n");
+ if (mp_timedout) fprintf(stderr, "mp_timedout\n");
+ fprintf(stderr, "ABORTING TEST, since it seems "
+ "that it would have run forever.\n");
+ res = TEST_ERR_RUNS_FOREVER;
+ }
+
+/* test_cleanup: */
+
+ /* cleanup NUM_HANDLES easy handles */
+ for(i=0; i < NUM_HANDLES; i++) {
+ curl_multi_remove_handle(m, curl[i]);
+ curl_easy_cleanup(curl[i]);
+ }
+
+ curl_multi_cleanup(m);
+ curl_global_cleanup();
+
+ return res;
+}
diff --git a/tests/libtest/lib533.c b/tests/libtest/lib533.c
new file mode 100644
index 0000000..89ac7bf
--- /dev/null
+++ b/tests/libtest/lib533.c
@@ -0,0 +1,166 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+/* used for test case 533, 534 and 535 */
+
+#include "test.h"
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+
+#include "testutil.h"
+#include "memdebug.h"
+
+#define MAIN_LOOP_HANG_TIMEOUT 90 * 1000
+#define MULTI_PERFORM_HANG_TIMEOUT 60 * 1000
+
+int test(char *URL)
+{
+ int res = 0;
+ CURL *curl;
+ int running;
+ char done=FALSE;
+ CURLM *m = NULL;
+ int current=0;
+ struct timeval ml_start;
+ struct timeval mp_start;
+ char ml_timedout = FALSE;
+ char mp_timedout = FALSE;
+
+ if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ if ((curl = curl_easy_init()) == NULL) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ test_setopt(curl, CURLOPT_URL, URL);
+ test_setopt(curl, CURLOPT_VERBOSE, 1);
+ test_setopt(curl, CURLOPT_FAILONERROR, 1);
+
+ if ((m = curl_multi_init()) == NULL) {
+ fprintf(stderr, "curl_multi_init() failed\n");
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ if ((res = (int)curl_multi_add_handle(m, curl)) != CURLM_OK) {
+ fprintf(stderr, "curl_multi_add_handle() failed, "
+ "with code %d\n", res);
+ curl_multi_cleanup(m);
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ ml_timedout = FALSE;
+ ml_start = tutil_tvnow();
+
+ fprintf(stderr, "Start at URL 0\n");
+
+ while (!done) {
+ fd_set rd, wr, exc;
+ int max_fd;
+ struct timeval interval;
+
+ interval.tv_sec = 1;
+ interval.tv_usec = 0;
+
+ if (tutil_tvdiff(tutil_tvnow(), ml_start) >
+ MAIN_LOOP_HANG_TIMEOUT) {
+ ml_timedout = TRUE;
+ break;
+ }
+ mp_timedout = FALSE;
+ mp_start = tutil_tvnow();
+
+ while (res == CURLM_CALL_MULTI_PERFORM) {
+ res = (int)curl_multi_perform(m, &running);
+ if (tutil_tvdiff(tutil_tvnow(), mp_start) >
+ MULTI_PERFORM_HANG_TIMEOUT) {
+ mp_timedout = TRUE;
+ break;
+ }
+ if (running <= 0) {
+ if(!current++) {
+ fprintf(stderr, "Advancing to URL 1\n");
+ /* remove the handle we use */
+ curl_multi_remove_handle(m, curl);
+
+ /* make us re-use the same handle all the time, and try resetting
+ the handle first too */
+ curl_easy_reset(curl);
+ test_setopt(curl, CURLOPT_URL, libtest_arg2);
+ test_setopt(curl, CURLOPT_VERBOSE, 1);
+ test_setopt(curl, CURLOPT_FAILONERROR, 1);
+
+ /* re-add it */
+ res = (int)curl_multi_add_handle(m, curl);
+ if(res) {
+ fprintf(stderr, "add handle failed: %d.\n", res);
+ res = 243;
+ break;
+ }
+ }
+ else
+ done = TRUE; /* bail out */
+ break;
+ }
+ }
+ if (mp_timedout || done)
+ break;
+
+ if (res != CURLM_OK) {
+ fprintf(stderr, "not okay???\n");
+ break;
+ }
+
+ FD_ZERO(&rd);
+ FD_ZERO(&wr);
+ FD_ZERO(&exc);
+ max_fd = 0;
+
+ if (curl_multi_fdset(m, &rd, &wr, &exc, &max_fd) != CURLM_OK) {
+ fprintf(stderr, "unexpected failured of fdset.\n");
+ res = 189;
+ break;
+ }
+
+ if (select_test(max_fd+1, &rd, &wr, &exc, &interval) == -1) {
+ fprintf(stderr, "bad select??\n");
+ res = 195;
+ break;
+ }
+
+ res = CURLM_CALL_MULTI_PERFORM;
+ }
+
+ if (ml_timedout || mp_timedout) {
+ if (ml_timedout) fprintf(stderr, "ml_timedout\n");
+ if (mp_timedout) fprintf(stderr, "mp_timedout\n");
+ fprintf(stderr, "ABORTING TEST, since it seems "
+ "that it would have run forever.\n");
+ res = TEST_ERR_RUNS_FOREVER;
+ }
+
+test_cleanup:
+
+ curl_easy_cleanup(curl);
+ if(m)
+ curl_multi_cleanup(m);
+ curl_global_cleanup();
+
+ return res;
+}
diff --git a/tests/libtest/lib536.c b/tests/libtest/lib536.c
new file mode 100644
index 0000000..e0c19f6
--- /dev/null
+++ b/tests/libtest/lib536.c
@@ -0,0 +1,140 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include "test.h"
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+
+#include "testutil.h"
+#include "memdebug.h"
+
+#define MAIN_LOOP_HANG_TIMEOUT 90 * 1000
+#define MULTI_PERFORM_HANG_TIMEOUT 60 * 1000
+
+static CURLMcode perform(CURLM * multi)
+{
+ int handles;
+ CURLMcode code;
+ fd_set fdread, fdwrite, fdexcep;
+ struct timeval mp_start;
+ char mp_timedout = FALSE;
+
+ mp_timedout = FALSE;
+ mp_start = tutil_tvnow();
+
+ for (;;) {
+ static struct timeval timeout = /* 100 ms */ { 0, 100000L };
+ int maxfd = -1;
+
+ code = curl_multi_perform(multi, &handles);
+ if (tutil_tvdiff(tutil_tvnow(), mp_start) >
+ MULTI_PERFORM_HANG_TIMEOUT) {
+ mp_timedout = TRUE;
+ break;
+ }
+ if (handles <= 0)
+ return CURLM_OK;
+
+ switch (code) {
+ case CURLM_OK:
+ break;
+ case CURLM_CALL_MULTI_PERFORM:
+ continue;
+ default:
+ return code;
+ }
+
+ FD_ZERO(&fdread);
+ FD_ZERO(&fdwrite);
+ FD_ZERO(&fdexcep);
+ curl_multi_fdset(multi, &fdread, &fdwrite, &fdexcep, &maxfd);
+
+ /* In a real-world program you OF COURSE check the return code of the
+ function calls. On success, the value of maxfd is guaranteed to be
+ greater or equal than -1. We call select(maxfd + 1, ...), specially in
+ case of (maxfd == -1), we call select(0, ...), which is basically equal
+ to sleep. */
+
+ if (select(maxfd + 1, &fdread, &fdwrite, &fdexcep, &timeout) == -1)
+ return (CURLMcode) ~CURLM_OK;
+ }
+
+ /* We only reach this point if (mp_timedout) */
+ if (mp_timedout) fprintf(stderr, "mp_timedout\n");
+ fprintf(stderr, "ABORTING TEST, since it seems "
+ "that it would have run forever.\n");
+ return (CURLMcode) ~CURLM_OK;
+}
+
+int test(char *URL)
+{
+ CURLM *multi;
+ CURL *easy;
+ int res = 0;
+
+ if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ if ((multi = curl_multi_init()) == NULL) {
+ fprintf(stderr, "curl_multi_init() failed\n");
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ if ((easy = curl_easy_init()) == NULL) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ curl_multi_cleanup(multi);
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ curl_multi_setopt(multi, CURLMOPT_PIPELINING, 1L);
+
+ test_setopt(easy, CURLOPT_WRITEFUNCTION, fwrite);
+ test_setopt(easy, CURLOPT_FAILONERROR, 1L);
+ test_setopt(easy, CURLOPT_URL, URL);
+
+ if (curl_multi_add_handle(multi, easy) != CURLM_OK) {
+ printf("curl_multi_add_handle() failed\n");
+ res = TEST_ERR_MAJOR_BAD;
+ } else {
+ if (perform(multi) != CURLM_OK)
+ printf("retrieve 1 failed\n");
+
+ curl_multi_remove_handle(multi, easy);
+ }
+ curl_easy_reset(easy);
+
+ test_setopt(easy, CURLOPT_FAILONERROR, 1L);
+ test_setopt(easy, CURLOPT_URL, libtest_arg2);
+
+ if (curl_multi_add_handle(multi, easy) != CURLM_OK) {
+ printf("curl_multi_add_handle() 2 failed\n");
+ res = TEST_ERR_MAJOR_BAD;
+ } else {
+ if (perform(multi) != CURLM_OK)
+ printf("retrieve 2 failed\n");
+
+ curl_multi_remove_handle(multi, easy);
+ }
+
+test_cleanup:
+
+ curl_easy_cleanup(easy);
+ curl_multi_cleanup(multi);
+ curl_global_cleanup();
+
+ printf("Finished!\n");
+
+ return res;
+}
diff --git a/tests/libtest/lib537.c b/tests/libtest/lib537.c
new file mode 100644
index 0000000..842dbab
--- /dev/null
+++ b/tests/libtest/lib537.c
@@ -0,0 +1,512 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include "test.h"
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_RESOURCE_H
+#include <sys/resource.h>
+#endif
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+#ifdef HAVE_LIMITS_H
+#include <limits.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+#include "memdebug.h"
+
+#if !defined(HAVE_POLL_FINE) && \
+ !defined(USE_WINSOCK) && \
+ !defined(TPF) && \
+ !defined(FD_SETSIZE)
+#error "this test requires FD_SETSIZE"
+#endif
+
+#define SAFETY_MARGIN (10)
+
+#if defined(WIN32) || defined(_WIN32) || defined(MSDOS)
+#define DEV_NULL "NUL"
+#else
+#define DEV_NULL "/dev/null"
+#endif
+
+#if defined(HAVE_GETRLIMIT) && defined(HAVE_SETRLIMIT)
+
+static int *fd = NULL;
+static struct rlimit num_open;
+static char msgbuff[256];
+
+static void store_errmsg(const char *msg, int err)
+{
+ if (!err)
+ sprintf(msgbuff, "%s", msg);
+ else
+ sprintf(msgbuff, "%s, errno %d, %s", msg, err, strerror(err));
+}
+
+static void close_file_descriptors(void)
+{
+ for (num_open.rlim_cur = 0;
+ num_open.rlim_cur < num_open.rlim_max;
+ num_open.rlim_cur++)
+ if (fd[num_open.rlim_cur] > 0)
+ close(fd[num_open.rlim_cur]);
+ free(fd);
+ fd = NULL;
+}
+
+static int fopen_works(void)
+{
+ FILE *fpa[3];
+ int i;
+ int ret = 1;
+
+ for (i = 0; i < 3; i++) {
+ fpa[i] = NULL;
+ }
+ for (i = 0; i < 3; i++) {
+ fpa[i] = fopen(DEV_NULL, "r");
+ if (fpa[i] == NULL) {
+ store_errmsg("fopen() failed", ERRNO);
+ fprintf(stderr, "%s\n", msgbuff);
+ ret = 0;
+ break;
+ }
+ }
+ for (i = 0; i < 3; i++) {
+ if (fpa[i] != NULL)
+ fclose(fpa[i]);
+ }
+ return ret;
+}
+
+static int rlimit(int keep_open)
+{
+ int *tmpfd;
+ int nitems, i;
+ int *memchunk = NULL;
+ char *fmt;
+ struct rlimit rl;
+ char strbuff[256];
+ char strbuff1[81];
+ char fmt_u[] = "%u";
+ char fmt_lu[] = "%lu";
+#ifdef HAVE_LONGLONG
+ char fmt_llu[] = "%llu";
+
+ if (sizeof(rl.rlim_max) > sizeof(long))
+ fmt = fmt_llu;
+ else
+#endif
+ fmt = (sizeof(rl.rlim_max) < sizeof(long))?fmt_u:fmt_lu;
+
+ /* get initial open file limits */
+
+ if (getrlimit(RLIMIT_NOFILE, &rl) != 0) {
+ store_errmsg("getrlimit() failed", ERRNO);
+ fprintf(stderr, "%s\n", msgbuff);
+ return -1;
+ }
+
+ /* show initial open file limits */
+
+#ifdef RLIM_INFINITY
+ if (rl.rlim_cur == RLIM_INFINITY)
+ strcpy(strbuff, "INFINITY");
+ else
+#endif
+ sprintf(strbuff, fmt, rl.rlim_cur);
+ fprintf(stderr, "initial soft limit: %s\n", strbuff);
+
+#ifdef RLIM_INFINITY
+ if (rl.rlim_max == RLIM_INFINITY)
+ strcpy(strbuff, "INFINITY");
+ else
+#endif
+ sprintf(strbuff, fmt, rl.rlim_max);
+ fprintf(stderr, "initial hard limit: %s\n", strbuff);
+
+ /*
+ * if soft limit and hard limit are different we ask the
+ * system to raise soft limit all the way up to the hard
+ * limit. Due to some other system limit the soft limit
+ * might not be raised up to the hard limit. So from this
+ * point the resulting soft limit is our limit. Trying to
+ * open more than soft limit file descriptors will fail.
+ */
+
+ if (rl.rlim_cur != rl.rlim_max) {
+
+#ifdef OPEN_MAX
+ if ((rl.rlim_cur > 0) &&
+ (rl.rlim_cur < OPEN_MAX)) {
+ fprintf(stderr, "raising soft limit up to OPEN_MAX\n");
+ rl.rlim_cur = OPEN_MAX;
+ if (setrlimit(RLIMIT_NOFILE, &rl) != 0) {
+ /* on failure don't abort just issue a warning */
+ store_errmsg("setrlimit() failed", ERRNO);
+ fprintf(stderr, "%s\n", msgbuff);
+ msgbuff[0] = '\0';
+ }
+ }
+#endif
+
+ fprintf(stderr, "raising soft limit up to hard limit\n");
+ rl.rlim_cur = rl.rlim_max;
+ if (setrlimit(RLIMIT_NOFILE, &rl) != 0) {
+ /* on failure don't abort just issue a warning */
+ store_errmsg("setrlimit() failed", ERRNO);
+ fprintf(stderr, "%s\n", msgbuff);
+ msgbuff[0] = '\0';
+ }
+
+ /* get current open file limits */
+
+ if (getrlimit(RLIMIT_NOFILE, &rl) != 0) {
+ store_errmsg("getrlimit() failed", ERRNO);
+ fprintf(stderr, "%s\n", msgbuff);
+ return -3;
+ }
+
+ /* show current open file limits */
+
+#ifdef RLIM_INFINITY
+ if (rl.rlim_cur == RLIM_INFINITY)
+ strcpy(strbuff, "INFINITY");
+ else
+#endif
+ sprintf(strbuff, fmt, rl.rlim_cur);
+ fprintf(stderr, "current soft limit: %s\n", strbuff);
+
+#ifdef RLIM_INFINITY
+ if (rl.rlim_max == RLIM_INFINITY)
+ strcpy(strbuff, "INFINITY");
+ else
+#endif
+ sprintf(strbuff, fmt, rl.rlim_max);
+ fprintf(stderr, "current hard limit: %s\n", strbuff);
+
+ } /* (rl.rlim_cur != rl.rlim_max) */
+
+ /*
+ * test 537 is all about testing libcurl functionality
+ * when the system has nearly exhausted the number of
+ * available file descriptors. Test 537 will try to run
+ * with a very small number of file descriptors available.
+ * This implies that any file descriptor which is open
+ * when the test runs will have a number in the high range
+ * of whatever the system supports.
+ */
+
+ /*
+ * reserve a chunk of memory before opening file descriptors to
+ * avoid a low memory condition once the file descriptors are
+ * open. System conditions that could make the test fail should
+ * be addressed in the precheck phase. This chunk of memory shall
+ * be always free()ed before exiting the rlimit() function so
+ * that it becomes available to the test.
+ */
+
+ for (nitems = i = 1; nitems <= i; i *= 2)
+ nitems = i;
+ if (nitems > 0x7fff)
+ nitems = 0x40000;
+ do {
+ num_open.rlim_max = sizeof(*memchunk) * (size_t)nitems;
+ sprintf(strbuff, fmt, num_open.rlim_max);
+ fprintf(stderr, "allocating memchunk %s byte array\n", strbuff);
+ memchunk = malloc(sizeof(*memchunk) * (size_t)nitems);
+ if (!memchunk) {
+ fprintf(stderr, "memchunk, malloc() failed\n");
+ nitems /= 2;
+ }
+ } while (nitems && !memchunk);
+ if (!memchunk) {
+ store_errmsg("memchunk, malloc() failed", ERRNO);
+ fprintf(stderr, "%s\n", msgbuff);
+ return -4;
+ }
+
+ /* initialize it to fight lazy allocation */
+
+ fprintf(stderr, "initializing memchunk array\n");
+
+ for (i = 0; i < nitems; i++)
+ memchunk[i] = -1;
+
+ /* set the number of file descriptors we will try to open */
+
+#ifdef RLIM_INFINITY
+ if ((rl.rlim_cur > 0) && (rl.rlim_cur != RLIM_INFINITY)) {
+#else
+ if (rl.rlim_cur > 0) {
+#endif
+ /* soft limit minus SAFETY_MARGIN */
+ num_open.rlim_max = rl.rlim_cur - SAFETY_MARGIN;
+ }
+ else {
+ /* a huge number of file descriptors */
+ for (nitems = i = 1; nitems <= i; i *= 2)
+ nitems = i;
+ if (nitems > 0x7fff)
+ nitems = 0x40000;
+ num_open.rlim_max = nitems;
+ }
+
+ /* verify that we won't overflow size_t in malloc() */
+
+ if ((size_t)(num_open.rlim_max) > ((size_t)-1) / sizeof(*fd)) {
+ sprintf(strbuff1, fmt, num_open.rlim_max);
+ sprintf(strbuff, "unable to allocate an array for %s "
+ "file descriptors, would overflow size_t", strbuff1);
+ store_errmsg(strbuff, 0);
+ fprintf(stderr, "%s\n", msgbuff);
+ free(memchunk);
+ return -5;
+ }
+
+ /* allocate array for file descriptors */
+
+ do {
+ sprintf(strbuff, fmt, num_open.rlim_max);
+ fprintf(stderr, "allocating array for %s file descriptors\n", strbuff);
+ fd = malloc(sizeof(*fd) * (size_t)(num_open.rlim_max));
+ if (!fd) {
+ fprintf(stderr, "fd, malloc() failed\n");
+ num_open.rlim_max /= 2;
+ }
+ } while (num_open.rlim_max && !fd);
+ if (!fd) {
+ store_errmsg("fd, malloc() failed", ERRNO);
+ fprintf(stderr, "%s\n", msgbuff);
+ free(memchunk);
+ return -6;
+ }
+
+ /* initialize it to fight lazy allocation */
+
+ fprintf(stderr, "initializing fd array\n");
+
+ for (num_open.rlim_cur = 0;
+ num_open.rlim_cur < num_open.rlim_max;
+ num_open.rlim_cur++)
+ fd[num_open.rlim_cur] = -1;
+
+ sprintf(strbuff, fmt, num_open.rlim_max);
+ fprintf(stderr, "trying to open %s file descriptors\n", strbuff);
+
+ /* open a dummy descriptor */
+
+ fd[0] = open(DEV_NULL, O_RDONLY);
+ if (fd[0] < 0) {
+ sprintf(strbuff, "opening of %s failed", DEV_NULL);
+ store_errmsg(strbuff, ERRNO);
+ fprintf(stderr, "%s\n", msgbuff);
+ free(fd);
+ fd = NULL;
+ free(memchunk);
+ return -7;
+ }
+
+ /* create a bunch of file descriptors */
+
+ for (num_open.rlim_cur = 1;
+ num_open.rlim_cur < num_open.rlim_max;
+ num_open.rlim_cur++) {
+
+ fd[num_open.rlim_cur] = dup(fd[0]);
+
+ if (fd[num_open.rlim_cur] < 0) {
+
+ fd[num_open.rlim_cur] = -1;
+
+ sprintf(strbuff1, fmt, num_open.rlim_cur);
+ sprintf(strbuff, "dup() attempt %s failed", strbuff1);
+ fprintf(stderr, "%s\n", strbuff);
+
+ sprintf(strbuff1, fmt, num_open.rlim_cur);
+ sprintf(strbuff, "fds system limit seems close to %s", strbuff1);
+ fprintf(stderr, "%s\n", strbuff);
+
+ num_open.rlim_max = num_open.rlim_cur - SAFETY_MARGIN;
+
+ num_open.rlim_cur -= num_open.rlim_max;
+ sprintf(strbuff1, fmt, num_open.rlim_cur);
+ sprintf(strbuff, "closing %s file descriptors", strbuff1);
+ fprintf(stderr, "%s\n", strbuff);
+
+ for (num_open.rlim_cur = num_open.rlim_max;
+ fd[num_open.rlim_cur] >= 0;
+ num_open.rlim_cur++) {
+ close(fd[num_open.rlim_cur]);
+ fd[num_open.rlim_cur] = -1;
+ }
+
+ sprintf(strbuff, fmt, num_open.rlim_max);
+ fprintf(stderr, "shrinking array for %s file descriptors\n", strbuff);
+
+ /* we don't care if we can't shrink it */
+
+ tmpfd = realloc(fd, sizeof(*fd) * (size_t)(num_open.rlim_max));
+ if (tmpfd) {
+ fd = tmpfd;
+ tmpfd = NULL;
+ }
+
+ break;
+
+ }
+
+ }
+
+ sprintf(strbuff, fmt, num_open.rlim_max);
+ fprintf(stderr, "%s file descriptors open\n", strbuff);
+
+#if !defined(HAVE_POLL_FINE) && \
+ !defined(USE_WINSOCK) && \
+ !defined(TPF)
+
+ /*
+ * when using select() instead of poll() we cannot test
+ * libcurl functionality with a socket number equal or
+ * greater than FD_SETSIZE. In any case, macro VERIFY_SOCK
+ * in lib/select.c enforces this check and protects libcurl
+ * from a possible crash. The effect of this protection
+ * is that test 537 will always fail, since the actual
+ * call to select() never takes place. We skip test 537
+ * with an indication that select limit would be exceeded.
+ */
+
+ num_open.rlim_cur = FD_SETSIZE - SAFETY_MARGIN;
+ if (num_open.rlim_max > num_open.rlim_cur) {
+ sprintf(strbuff, "select limit is FD_SETSIZE %d", FD_SETSIZE);
+ store_errmsg(strbuff, 0);
+ fprintf(stderr, "%s\n", msgbuff);
+ close_file_descriptors();
+ free(memchunk);
+ return -8;
+ }
+
+ num_open.rlim_cur = FD_SETSIZE - SAFETY_MARGIN;
+ for (rl.rlim_cur = 0;
+ rl.rlim_cur < num_open.rlim_max;
+ rl.rlim_cur++) {
+ if ((fd[rl.rlim_cur] > 0) &&
+ ((unsigned int)fd[rl.rlim_cur] > num_open.rlim_cur)) {
+ sprintf(strbuff, "select limit is FD_SETSIZE %d", FD_SETSIZE);
+ store_errmsg(strbuff, 0);
+ fprintf(stderr, "%s\n", msgbuff);
+ close_file_descriptors();
+ free(memchunk);
+ return -9;
+ }
+ }
+
+#endif /* using a FD_SETSIZE bound select() */
+
+ /*
+ * Old or 'backwards compatible' implementations of stdio do not allow
+ * handling of streams with an underlying file descriptor number greater
+ * than 255, even when allowing high numbered file descriptors for sockets.
+ * At this point we have a big number of file descriptors which have been
+ * opened using dup(), so lets test the stdio implementation and discover
+ * if it is capable of fopen()ing some additional files.
+ */
+
+ if (!fopen_works()) {
+ sprintf(strbuff1, fmt, num_open.rlim_max);
+ sprintf(strbuff, "stdio fopen() fails with %s fds open()",
+ strbuff1);
+ fprintf(stderr, "%s\n", msgbuff);
+ sprintf(strbuff, "stdio fopen() fails with lots of fds open()");
+ store_errmsg(strbuff, 0);
+ close_file_descriptors();
+ free(memchunk);
+ return -10;
+ }
+
+ /* free the chunk of memory we were reserving so that it
+ becomes becomes available to the test */
+
+ free(memchunk);
+
+ /* close file descriptors unless instructed to keep them */
+
+ if (!keep_open) {
+ close_file_descriptors();
+ }
+
+ return 0;
+}
+
+int test(char *URL)
+{
+ CURLcode res;
+ CURL *curl;
+
+ if(!strcmp(URL, "check")) {
+ /* used by the test script to ask if we can run this test or not */
+ if(rlimit(FALSE)) {
+ fprintf(stdout, "rlimit problem: %s\n", msgbuff);
+ return 1;
+ }
+ return 0; /* sure, run this! */
+ }
+
+ if (rlimit(TRUE)) {
+ /* failure */
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ /* run the test with the bunch of open file descriptors
+ and close them all once the test is over */
+
+ if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ close_file_descriptors();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ if ((curl = curl_easy_init()) == NULL) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ close_file_descriptors();
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ test_setopt(curl, CURLOPT_URL, URL);
+ test_setopt(curl, CURLOPT_HEADER, 1L);
+
+ res = curl_easy_perform(curl);
+
+test_cleanup:
+
+ close_file_descriptors();
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+
+ return (int)res;
+}
+
+#else /* defined(HAVE_GETRLIMIT) && defined(HAVE_SETRLIMIT) */
+
+int test(char *URL)
+{
+ (void)URL;
+ printf("system lacks necessary system function(s)");
+ return 1; /* skip test */
+}
+
+#endif /* defined(HAVE_GETRLIMIT) && defined(HAVE_SETRLIMIT) */
diff --git a/tests/libtest/lib539.c b/tests/libtest/lib539.c
new file mode 100644
index 0000000..9909d01
--- /dev/null
+++ b/tests/libtest/lib539.c
@@ -0,0 +1,80 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include "test.h"
+
+#include "memdebug.h"
+
+int test(char *URL)
+{
+ CURLcode res;
+ CURL *curl;
+ char *newURL = NULL;
+ struct curl_slist *slist = NULL;
+
+ if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ if ((curl = curl_easy_init()) == NULL) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ /*
+ * Begin with cURL set to use a single CWD to the URL's directory.
+ */
+ test_setopt(curl, CURLOPT_URL, URL);
+ test_setopt(curl, CURLOPT_VERBOSE, 1L);
+ test_setopt(curl, CURLOPT_FTP_FILEMETHOD, (long) CURLFTPMETHOD_SINGLECWD);
+
+ res = curl_easy_perform(curl);
+
+ /*
+ * Change the FTP_FILEMETHOD option to use full paths rather than a CWD
+ * command. Alter the URL's path a bit, appending a "./". Use an innocuous
+ * QUOTE command, after which cURL will CWD to ftp_conn->entrypath and then
+ * (on the next call to ftp_statemach_act) find a non-zero ftpconn->dirdepth
+ * even though no directories are stored in the ftpconn->dirs array (after a
+ * call to freedirs).
+ */
+ newURL = malloc(strlen(URL) + 3);
+ if (newURL == NULL) {
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+ newURL = strcat(strcpy(newURL, URL), "./");
+
+ slist = curl_slist_append (NULL, "SYST");
+ if (slist == NULL) {
+ free(newURL);
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ test_setopt(curl, CURLOPT_URL, newURL);
+ test_setopt(curl, CURLOPT_FTP_FILEMETHOD, (long) CURLFTPMETHOD_NOCWD);
+ test_setopt(curl, CURLOPT_QUOTE, slist);
+
+ res = curl_easy_perform(curl);
+
+test_cleanup:
+
+ curl_slist_free_all(slist);
+ if(newURL)
+ free(newURL);
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+
+ return (int)res;
+}
diff --git a/tests/libtest/lib540.c b/tests/libtest/lib540.c
new file mode 100644
index 0000000..bf4cd52
--- /dev/null
+++ b/tests/libtest/lib540.c
@@ -0,0 +1,178 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ *
+ * This is the 'proxyauth.c' test app posted by Shmulik Regev on the libcurl
+ * mailing list on 10 Jul 2007, converted to a test case.
+ *
+ * argv1 = URL
+ * argv2 = proxy
+ * argv3 = proxyuser:password
+ * argv4 = host name to use for the custom Host: header
+ */
+
+#include "test.h"
+
+#include "memdebug.h"
+
+#define PROXY libtest_arg2
+#define PROXYUSERPWD libtest_arg3
+#define HOST test_argv[4]
+
+static int init(CURLM *cm, const char* url, const char* userpwd,
+ struct curl_slist *headers)
+{
+ CURL *eh;
+ int res;
+
+ if ((eh = curl_easy_init()) == NULL) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ return 1; /* failure */
+ }
+
+ res = curl_easy_setopt(eh, CURLOPT_URL, url);
+ if(res) return 1;
+ res = curl_easy_setopt(eh, CURLOPT_PROXY, PROXY);
+ if(res) return 1;
+ res = curl_easy_setopt(eh, CURLOPT_PROXYUSERPWD, userpwd);
+ if(res) return 1;
+ res = curl_easy_setopt(eh, CURLOPT_PROXYAUTH, (long)CURLAUTH_ANY);
+ if(res) return 1;
+ res = curl_easy_setopt(eh, CURLOPT_VERBOSE, 1L);
+ if(res) return 1;
+ res = curl_easy_setopt(eh, CURLOPT_HEADER, 1L);
+ if(res) return 1;
+ res = curl_easy_setopt(eh, CURLOPT_HTTPHEADER, headers); /* custom Host: */
+ if(res) return 1;
+
+ if ((res = (int)curl_multi_add_handle(cm, eh)) != CURLM_OK) {
+ fprintf(stderr, "curl_multi_add_handle() failed, "
+ "with code %d\n", res);
+ return 1; /* failure */
+ }
+
+ return 0; /* success */
+}
+
+static int loop(CURLM *cm, const char* url, const char* userpwd,
+ struct curl_slist *headers)
+{
+ CURLMsg *msg;
+ CURLMcode code;
+ long L;
+ int M, Q, U = -1;
+ fd_set R, W, E;
+ struct timeval T;
+
+ if(init(cm, url, userpwd, headers))
+ return 1; /* failure */
+
+ while (U) {
+
+ do {
+ code = curl_multi_perform(cm, &U);
+ } while (code == CURLM_CALL_MULTI_PERFORM);
+
+ if (U) {
+ FD_ZERO(&R);
+ FD_ZERO(&W);
+ FD_ZERO(&E);
+
+ if (curl_multi_fdset(cm, &R, &W, &E, &M)) {
+ fprintf(stderr, "E: curl_multi_fdset\n");
+ return 1; /* failure */
+ }
+
+ /* In a real-world program you OF COURSE check the return that maxfd is
+ bigger than -1 so that the call to select() below makes sense! */
+
+ if (curl_multi_timeout(cm, &L)) {
+ fprintf(stderr, "E: curl_multi_timeout\n");
+ return 1; /* failure */
+ }
+
+ if(L != -1) {
+ T.tv_sec = L/1000;
+ T.tv_usec = (L%1000)*1000;
+ }
+ else {
+ T.tv_sec = 5;
+ T.tv_usec = 0;
+ }
+
+ if (0 > select(M+1, &R, &W, &E, &T)) {
+ fprintf(stderr, "E: select\n");
+ return 1; /* failure */
+ }
+ }
+
+ while ((msg = curl_multi_info_read(cm, &Q))) {
+ if (msg->msg == CURLMSG_DONE) {
+ CURL *e = msg->easy_handle;
+ fprintf(stderr, "R: %d - %s\n", (int)msg->data.result,
+ curl_easy_strerror(msg->data.result));
+ curl_multi_remove_handle(cm, e);
+ curl_easy_cleanup(e);
+ }
+ else {
+ fprintf(stderr, "E: CURLMsg (%d)\n", (int)msg->msg);
+ }
+ }
+ }
+
+ return 0; /* success */
+}
+
+int test(char *URL)
+{
+ CURLM *cm = NULL;
+ struct curl_slist *headers = NULL;
+ char buffer[246]; /* naively fixed-size */
+ int res;
+
+ if(test_argc < 4)
+ return 99;
+
+ sprintf(buffer, "Host: %s", HOST);
+
+ /* now add a custom Host: header */
+ headers = curl_slist_append(headers, buffer);
+ if(!headers) {
+ fprintf(stderr, "curl_slist_append() failed\n");
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ curl_slist_free_all(headers);
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ if ((cm = curl_multi_init()) == NULL) {
+ fprintf(stderr, "curl_multi_init() failed\n");
+ curl_slist_free_all(headers);
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ res = loop(cm, URL, PROXYUSERPWD, headers);
+ if(res)
+ goto test_cleanup;
+
+ fprintf(stderr, "lib540: now we do the request again\n");
+ res = loop(cm, URL, PROXYUSERPWD, headers);
+
+test_cleanup:
+
+ curl_multi_cleanup(cm);
+
+ curl_global_cleanup();
+
+ curl_slist_free_all(headers);
+
+ return res;
+}
diff --git a/tests/libtest/lib541.c b/tests/libtest/lib541.c
new file mode 100644
index 0000000..2fc85b9
--- /dev/null
+++ b/tests/libtest/lib541.c
@@ -0,0 +1,118 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include "test.h"
+
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#include "memdebug.h"
+
+/*
+ * Two FTP uploads, the second with no content sent.
+ */
+
+int test(char *URL)
+{
+ CURL *curl;
+ CURLcode res = CURLE_OK;
+ FILE *hd_src ;
+ int hd ;
+ struct_stat file_info;
+ int error;
+
+ if (!libtest_arg2) {
+ fprintf(stderr, "Usage: <url> <file-to-upload>\n");
+ return -1;
+ }
+
+ hd_src = fopen(libtest_arg2, "rb");
+ if(NULL == hd_src) {
+ error = ERRNO;
+ fprintf(stderr, "fopen() failed with error: %d %s\n",
+ error, strerror(error));
+ fprintf(stderr, "Error opening file: %s\n", libtest_arg2);
+ return -2; /* if this happens things are major weird */
+ }
+
+ /* get the file size of the local file */
+ hd = fstat(fileno(hd_src), &file_info);
+ if(hd == -1) {
+ /* can't open file, bail out */
+ error = ERRNO;
+ fprintf(stderr, "fstat() failed with error: %d %s\n",
+ error, strerror(error));
+ fprintf(stderr, "ERROR: cannot open file %s\n", libtest_arg2);
+ fclose(hd_src);
+ return -1;
+ }
+
+ if(! file_info.st_size) {
+ fprintf(stderr, "ERROR: file %s has zero size!\n", libtest_arg2);
+ fclose(hd_src);
+ return -4;
+ }
+
+ if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ fclose(hd_src);
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ /* get a curl handle */
+ if ((curl = curl_easy_init()) == NULL) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ curl_global_cleanup();
+ fclose(hd_src);
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ /* enable uploading */
+ test_setopt(curl, CURLOPT_UPLOAD, 1L);
+
+ /* enable verbose */
+ test_setopt(curl, CURLOPT_VERBOSE, 1L);
+
+ /* specify target */
+ test_setopt(curl,CURLOPT_URL, URL);
+
+ /* now specify which file to upload */
+ test_setopt(curl, CURLOPT_INFILE, hd_src);
+
+ /* Now run off and do what you've been told! */
+ res = curl_easy_perform(curl);
+
+ /* and now upload the exact same again, but without rewinding so it already
+ is at end of file */
+ res = curl_easy_perform(curl);
+
+test_cleanup:
+
+ /* close the local file */
+ fclose(hd_src);
+
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+
+ return res;
+}
diff --git a/tests/libtest/lib542.c b/tests/libtest/lib542.c
new file mode 100644
index 0000000..ef7b483
--- /dev/null
+++ b/tests/libtest/lib542.c
@@ -0,0 +1,73 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include "test.h"
+
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#include "memdebug.h"
+
+/*
+ * FTP get with NOBODY but no HEADER
+ */
+
+int test(char *URL)
+{
+ CURL *curl;
+ CURLcode res = CURLE_OK;
+
+ if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ /* get a curl handle */
+ if ((curl = curl_easy_init()) == NULL) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ /* enable verbose */
+ test_setopt(curl, CURLOPT_VERBOSE, 1L);
+
+ /* enable NOBODY */
+ test_setopt(curl, CURLOPT_NOBODY, 1L);
+
+ /* disable HEADER */
+ test_setopt(curl, CURLOPT_HEADER, 0L);
+
+ /* specify target */
+ test_setopt(curl,CURLOPT_URL, URL);
+
+ /* Now run off and do what you've been told! */
+ res = curl_easy_perform(curl);
+
+test_cleanup:
+
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+
+ return res;
+}
diff --git a/tests/libtest/lib543.c b/tests/libtest/lib543.c
new file mode 100644
index 0000000..8f14f84
--- /dev/null
+++ b/tests/libtest/lib543.c
@@ -0,0 +1,42 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ *
+ * Based on Alex Fishman's bug report on September 30, 2007
+ */
+
+#include "test.h"
+
+#include "memdebug.h"
+
+int test(char *URL)
+{
+ unsigned char a[] = {0x9c, 0x26, 0x4b, 0x3d, 0x49, 0x4, 0xa1, 0x1,
+ 0xe0, 0xd8, 0x7c, 0x20, 0xb7, 0xef, 0x53, 0x29, 0xfa,
+ 0x1d, 0x57, 0xe1};
+
+ CURL *easy;
+ int asize;
+ char *s;
+ (void)URL;
+
+ if ((easy = curl_easy_init()) == NULL) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ asize = (int)sizeof(a);
+
+ s = curl_easy_escape(easy, (char*)a, asize);
+
+ printf("%s\n", s);
+
+ curl_free(s);
+ curl_easy_cleanup(easy);
+
+ return 0;
+}
diff --git a/tests/libtest/lib544.c b/tests/libtest/lib544.c
new file mode 100644
index 0000000..6bc899c
--- /dev/null
+++ b/tests/libtest/lib544.c
@@ -0,0 +1,66 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include "test.h"
+
+#include "memdebug.h"
+
+static char teststring[] =
+#ifdef CURL_DOES_CONVERSIONS
+ /* ASCII representation with escape sequences for non-ASCII platforms */
+ "\x54\x68\x69\x73\x00\x20\x69\x73\x20\x74\x65\x73\x74\x20\x62\x69\x6e\x61"
+ "\x72\x79\x20\x64\x61\x74\x61\x20\x77\x69\x74\x68\x20\x61\x6e\x20\x65\x6d"
+ "\x62\x65\x64\x64\x65\x64\x20\x4e\x55\x4c\x20\x62\x79\x74\x65\x0a";
+#else
+ "This\0 is test binary data with an embedded NUL byte\n";
+#endif
+
+
+int test(char *URL)
+{
+ CURL *curl;
+ CURLcode res=CURLE_OK;
+
+ if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ if ((curl = curl_easy_init()) == NULL) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ /* First set the URL that is about to receive our POST. */
+ test_setopt(curl, CURLOPT_URL, URL);
+
+#ifdef LIB545
+ test_setopt(curl, CURLOPT_POSTFIELDSIZE, (long) sizeof teststring - 1);
+#endif
+
+ test_setopt(curl, CURLOPT_COPYPOSTFIELDS, teststring);
+
+ test_setopt(curl, CURLOPT_VERBOSE, 1L); /* show verbose for debug */
+ test_setopt(curl, CURLOPT_HEADER, 1L); /* include header */
+
+ /* Update the original data to detect non-copy. */
+ strcpy(teststring, "FAIL");
+
+ /* Now, this is a POST request with binary 0 embedded in POST data. */
+ res = curl_easy_perform(curl);
+
+test_cleanup:
+
+ /* always cleanup */
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+
+ return (int)res;
+}
diff --git a/tests/libtest/lib547.c b/tests/libtest/lib547.c
new file mode 100644
index 0000000..4ef3037
--- /dev/null
+++ b/tests/libtest/lib547.c
@@ -0,0 +1,116 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ *
+ * argv1 = URL
+ * argv2 = proxy
+ * argv3 = proxyuser:password
+ */
+
+#include "test.h"
+
+#include "memdebug.h"
+
+#ifdef CURL_DOES_CONVERSIONS
+ /* ASCII representation with escape sequences for non-ASCII platforms */
+# define UPLOADTHIS "\x74\x68\x69\x73\x20\x69\x73\x20\x74\x68\x65\x20\x62" \
+ "\x6c\x75\x72\x62\x20\x77\x65\x20\x77\x61\x6e\x74\x20" \
+ "\x74\x6f\x20\x75\x70\x6c\x6f\x61\x64\x0a"
+#else
+# define UPLOADTHIS "this is the blurb we want to upload\n"
+#endif
+
+#ifndef LIB548
+static size_t readcallback(void *ptr,
+ size_t size,
+ size_t nmemb,
+ void *clientp)
+{
+ int *counter = (int *)clientp;
+
+ if(*counter) {
+ /* only do this once and then require a clearing of this */
+ fprintf(stderr, "READ ALREADY DONE!\n");
+ return 0;
+ }
+ (*counter)++; /* bump */
+
+ if(size * nmemb > strlen(UPLOADTHIS)) {
+ fprintf(stderr, "READ!\n");
+ strcpy(ptr, UPLOADTHIS);
+ return strlen(UPLOADTHIS);
+ }
+ fprintf(stderr, "READ NOT FINE!\n");
+ return 0;
+}
+static curlioerr ioctlcallback(CURL *handle,
+ int cmd,
+ void *clientp)
+{
+ int *counter = (int *)clientp;
+ (void)handle; /* unused */
+ if(cmd == CURLIOCMD_RESTARTREAD) {
+ fprintf(stderr, "REWIND!\n");
+ *counter = 0; /* clear counter to make the read callback restart */
+ }
+ return CURLIOE_OK;
+}
+
+
+
+#endif
+
+int test(char *URL)
+{
+ CURLcode res;
+ CURL *curl;
+#ifndef LIB548
+ int counter=0;
+#endif
+
+ if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ if ((curl = curl_easy_init()) == NULL) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ test_setopt(curl, CURLOPT_URL, URL);
+ test_setopt(curl, CURLOPT_VERBOSE, 1L);
+ test_setopt(curl, CURLOPT_HEADER, 1L);
+#ifdef LIB548
+ /* set the data to POST with a mere pointer to a zero-terminated string */
+ test_setopt(curl, CURLOPT_POSTFIELDS, UPLOADTHIS);
+#else
+ /* 547 style, which means reading the POST data from a callback */
+ test_setopt(curl, CURLOPT_IOCTLFUNCTION, ioctlcallback);
+ test_setopt(curl, CURLOPT_IOCTLDATA, &counter);
+ test_setopt(curl, CURLOPT_READFUNCTION, readcallback);
+ test_setopt(curl, CURLOPT_READDATA, &counter);
+ /* We CANNOT do the POST fine without setting the size (or choose chunked)! */
+ test_setopt(curl, CURLOPT_POSTFIELDSIZE, (long)strlen(UPLOADTHIS));
+#endif
+ test_setopt(curl, CURLOPT_POST, 1L);
+ test_setopt(curl, CURLOPT_PROXY, libtest_arg2);
+ test_setopt(curl, CURLOPT_PROXYUSERPWD, libtest_arg3);
+ test_setopt(curl, CURLOPT_PROXYAUTH,
+ (long) (CURLAUTH_NTLM | CURLAUTH_DIGEST | CURLAUTH_BASIC) );
+
+ res = curl_easy_perform(curl);
+
+test_cleanup:
+
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+
+ return (int)res;
+}
+
diff --git a/tests/libtest/lib549.c b/tests/libtest/lib549.c
new file mode 100644
index 0000000..9fd18b2
--- /dev/null
+++ b/tests/libtest/lib549.c
@@ -0,0 +1,52 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ *
+ * argv1 = URL
+ * argv2 = proxy
+ * argv3 = non-zero means ASCII transfer
+ */
+
+#include "test.h"
+
+#include "memdebug.h"
+
+int test(char *URL)
+{
+ CURLcode res;
+ CURL *curl;
+
+ if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ if ((curl = curl_easy_init()) == NULL) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ test_setopt(curl, CURLOPT_PROXY, libtest_arg2);
+ test_setopt(curl, CURLOPT_URL, URL);
+ test_setopt(curl, CURLOPT_PROXY_TRANSFER_MODE, 1L);
+ test_setopt(curl, CURLOPT_VERBOSE, 1L);
+ if(libtest_arg3) {
+ /* enable ascii/text mode */
+ test_setopt(curl, CURLOPT_TRANSFERTEXT, 1L);
+ }
+
+ res = curl_easy_perform(curl);
+
+test_cleanup:
+
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+
+ return (int)res;
+}
+
diff --git a/tests/libtest/lib552.c b/tests/libtest/lib552.c
new file mode 100644
index 0000000..eeecf6f
--- /dev/null
+++ b/tests/libtest/lib552.c
@@ -0,0 +1,205 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ *
+ * argv1 = URL
+ * argv2 = proxy with embedded user+password
+ */
+
+#include "test.h"
+
+#include "memdebug.h"
+
+struct data {
+ char trace_ascii; /* 1 or 0 */
+};
+
+static
+void dump(const char *text,
+ FILE *stream, unsigned char *ptr, size_t size,
+ char nohex)
+{
+ size_t i;
+ size_t c;
+
+ unsigned int width=0x10;
+
+ if(nohex)
+ /* without the hex output, we can fit more on screen */
+ width = 0x40;
+
+ fprintf(stream, "%s, %d bytes (0x%x)\n", text, (int)size, (int)size);
+
+ for(i=0; i<size; i+= width) {
+
+ fprintf(stream, "%04x: ", (int)i);
+
+ if(!nohex) {
+ /* hex not disabled, show it */
+ for(c = 0; c < width; c++)
+ if(i+c < size)
+ fprintf(stream, "%02x ", ptr[i+c]);
+ else
+ fputs(" ", stream);
+ }
+
+ for(c = 0; (c < width) && (i+c < size); c++) {
+ /* check for 0D0A; if found, skip past and start a new line of output */
+ if (nohex && (i+c+1 < size) && ptr[i+c]==0x0D && ptr[i+c+1]==0x0A) {
+ i+=(c+2-width);
+ break;
+ }
+ fprintf(stream, "%c",
+ (ptr[i+c]>=0x20) && (ptr[i+c]<0x80)?ptr[i+c]:'.');
+ /* check again for 0D0A, to avoid an extra \n if it's at width */
+ if (nohex && (i+c+2 < size) && ptr[i+c+1]==0x0D && ptr[i+c+2]==0x0A) {
+ i+=(c+3-width);
+ break;
+ }
+ }
+ fputc('\n', stream); /* newline */
+ }
+ fflush(stream);
+}
+
+static
+int my_trace(CURL *handle, curl_infotype type,
+ char *data, size_t size,
+ void *userp)
+{
+ struct data *config = (struct data *)userp;
+ const char *text;
+ (void)handle; /* prevent compiler warning */
+
+ switch (type) {
+ case CURLINFO_TEXT:
+ fprintf(stderr, "== Info: %s", (char *)data);
+ default: /* in case a new one is introduced to shock us */
+ return 0;
+
+ case CURLINFO_HEADER_OUT:
+ text = "=> Send header";
+ break;
+ case CURLINFO_DATA_OUT:
+ text = "=> Send data";
+ break;
+ case CURLINFO_SSL_DATA_OUT:
+ text = "=> Send SSL data";
+ break;
+ case CURLINFO_HEADER_IN:
+ text = "<= Recv header";
+ break;
+ case CURLINFO_DATA_IN:
+ text = "<= Recv data";
+ break;
+ case CURLINFO_SSL_DATA_IN:
+ text = "<= Recv SSL data";
+ break;
+ }
+
+ dump(text, stderr, (unsigned char *)data, size, config->trace_ascii);
+ return 0;
+}
+
+
+static size_t current_offset = 0;
+static char databuf[70000]; /* MUST be more than 64k OR MAX_INITIAL_POST_SIZE */
+
+static size_t read_callback(void *ptr, size_t size, size_t nmemb, void *stream)
+{
+ size_t amount = nmemb * size; /* Total bytes curl wants */
+ size_t available = sizeof(databuf) - current_offset; /* What we have to give */
+ size_t given = amount < available ? amount : available; /* What is given */
+ (void)stream;
+ memcpy(ptr, databuf + current_offset, given);
+ current_offset += given;
+ return given;
+}
+
+
+static size_t write_callback(void *ptr, size_t size, size_t nmemb, void *stream)
+{
+ printf("%.*s", (int)(size * nmemb), (char *)ptr);
+ (void)stream;
+ return size * nmemb;
+}
+
+
+static curlioerr ioctl_callback(CURL * handle, int cmd, void *clientp)
+{
+ (void)clientp;
+ if (cmd == CURLIOCMD_RESTARTREAD ) {
+ printf("APPLICATION: recieved a CURLIOCMD_RESTARTREAD request\n");
+ printf("APPLICATION: ** REWINDING! **\n");
+ current_offset = 0;
+ return CURLIOE_OK;
+ }
+ (void)handle;
+ return CURLIOE_UNKNOWNCMD;
+}
+
+
+
+int test(char *URL)
+{
+ CURL *curl;
+ CURLcode res = CURLE_OUT_OF_MEMORY;
+ struct data config;
+ size_t i;
+ static const char fill[] = "test data";
+
+ config.trace_ascii = 1; /* enable ascii tracing */
+
+ if((curl = curl_easy_init()) == NULL) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ test_setopt(curl, CURLOPT_DEBUGFUNCTION, my_trace);
+ test_setopt(curl, CURLOPT_DEBUGDATA, &config);
+ /* the DEBUGFUNCTION has no effect until we enable VERBOSE */
+ test_setopt(curl, CURLOPT_VERBOSE, 1L);
+
+ /* setup repeated data string */
+ for (i=0; i < sizeof(databuf); ++i)
+ databuf[i] = fill[i % sizeof fill];
+
+ /* Post */
+ test_setopt(curl, CURLOPT_POST, 1L);
+
+#ifdef CURL_DOES_CONVERSIONS
+ /* Convert the POST data to ASCII */
+ test_setopt(curl, CURLOPT_TRANSFERTEXT, 1L);
+#endif
+
+ /* Setup read callback */
+ test_setopt(curl, CURLOPT_POSTFIELDSIZE, (long) sizeof(databuf));
+ test_setopt(curl, CURLOPT_READFUNCTION, read_callback);
+
+ /* Write callback */
+ test_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback);
+
+ /* Ioctl function */
+ test_setopt(curl, CURLOPT_IOCTLFUNCTION, ioctl_callback);
+
+ test_setopt(curl, CURLOPT_PROXY, libtest_arg2);
+
+ test_setopt(curl, CURLOPT_URL, URL);
+
+ /* Accept any auth. But for this bug configure proxy with DIGEST, basic might work too, not NTLM */
+ test_setopt(curl, CURLOPT_PROXYAUTH, (long)CURLAUTH_ANY);
+
+ res = curl_easy_perform(curl);
+ fprintf(stderr, "curl_easy_perform = %d\n", (int)res);
+
+test_cleanup:
+
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+ return (int)res;
+}
diff --git a/tests/libtest/lib553.c b/tests/libtest/lib553.c
new file mode 100644
index 0000000..8694daf
--- /dev/null
+++ b/tests/libtest/lib553.c
@@ -0,0 +1,100 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ *
+ * This test case and code is based on the bug recipe Joe Malicki provided for
+ * bug report #1871269, fixed on Jan 14 2008 before the 7.18.0 release.
+ */
+
+#include "test.h"
+
+#include "memdebug.h"
+
+#define POSTLEN 40960
+
+static size_t myreadfunc(void *ptr, size_t size, size_t nmemb, void *stream)
+{
+ static size_t total=POSTLEN;
+ static char buf[1024];
+ (void)stream;
+
+ memset(buf, 'A', sizeof(buf));
+
+ size *= nmemb;
+ if (size > total)
+ size = total;
+
+ if(size > sizeof(buf))
+ size = sizeof(buf);
+
+ memcpy(ptr, buf, size);
+ total -= size;
+ return size;
+}
+
+#define NUM_HEADERS 8
+#define SIZE_HEADERS 5000
+
+static char buf[SIZE_HEADERS + 100];
+
+int test(char *URL)
+{
+ CURL *curl;
+ CURLcode res = CURLE_FAILED_INIT;
+ int i;
+ struct curl_slist *headerlist=NULL, *hl;
+
+ if(curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ if((curl = curl_easy_init()) == NULL) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ for (i = 0; i < NUM_HEADERS; i++) {
+ int len = sprintf(buf, "Header%d: ", i);
+ memset(&buf[len], 'A', SIZE_HEADERS);
+ buf[len + SIZE_HEADERS]=0; /* zero terminate */
+ hl = curl_slist_append(headerlist, buf);
+ if (!hl)
+ goto test_cleanup;
+ headerlist = hl;
+ }
+
+ hl = curl_slist_append(headerlist, "Expect: ");
+ if (!hl)
+ goto test_cleanup;
+ headerlist = hl;
+
+ test_setopt(curl, CURLOPT_URL, URL);
+ test_setopt(curl, CURLOPT_HTTPHEADER, headerlist);
+ test_setopt(curl, CURLOPT_POST, 1L);
+#ifdef CURL_DOES_CONVERSIONS
+ /* Convert the POST data to ASCII */
+ test_setopt(curl, CURLOPT_TRANSFERTEXT, 1L);
+#endif
+ test_setopt(curl, CURLOPT_POSTFIELDSIZE, (long)POSTLEN);
+ test_setopt(curl, CURLOPT_VERBOSE, 1L);
+ test_setopt(curl, CURLOPT_HEADER, 1L);
+ test_setopt(curl, CURLOPT_READFUNCTION, myreadfunc);
+
+ res = curl_easy_perform(curl);
+
+test_cleanup:
+
+ curl_easy_cleanup(curl);
+
+ curl_slist_free_all(headerlist);
+
+ curl_global_cleanup();
+
+ return (int)res;
+}
diff --git a/tests/libtest/lib554.c b/tests/libtest/lib554.c
new file mode 100644
index 0000000..d7c6824
--- /dev/null
+++ b/tests/libtest/lib554.c
@@ -0,0 +1,150 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include "test.h"
+
+#include "memdebug.h"
+
+static char data[]=
+#ifdef CURL_DOES_CONVERSIONS
+ /* ASCII representation with escape sequences for non-ASCII platforms */
+ "\x74\x68\x69\x73\x20\x69\x73\x20\x77\x68\x61\x74\x20\x77\x65\x20\x70"
+ "\x6f\x73\x74\x20\x74\x6f\x20\x74\x68\x65\x20\x73\x69\x6c\x6c\x79\x20"
+ "\x77\x65\x62\x20\x73\x65\x72\x76\x65\x72\x0a";
+#else
+ "this is what we post to the silly web server\n";
+#endif
+
+struct WriteThis {
+ char *readptr;
+ size_t sizeleft;
+};
+
+static size_t read_callback(void *ptr, size_t size, size_t nmemb, void *userp)
+{
+ struct WriteThis *pooh = (struct WriteThis *)userp;
+
+ if(size*nmemb < 1)
+ return 0;
+
+ if(pooh->sizeleft) {
+ *(char *)ptr = pooh->readptr[0]; /* copy one single byte */
+ pooh->readptr++; /* advance pointer */
+ pooh->sizeleft--; /* less data left */
+ return 1; /* we return 1 byte at a time! */
+ }
+
+ return 0; /* no more data left to deliver */
+}
+
+int test(char *URL)
+{
+ CURL *curl;
+ CURLcode res=CURLE_OK;
+ CURLFORMcode formrc;
+
+ struct curl_httppost *formpost=NULL;
+ struct curl_httppost *lastptr=NULL;
+ struct WriteThis pooh;
+
+ if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ pooh.readptr = data;
+ pooh.sizeleft = strlen(data);
+
+ /* Fill in the file upload field */
+ formrc = curl_formadd(&formpost,
+ &lastptr,
+ CURLFORM_COPYNAME, "sendfile",
+ CURLFORM_STREAM, &pooh,
+ CURLFORM_CONTENTSLENGTH, pooh.sizeleft,
+ CURLFORM_FILENAME, "postit2.c",
+ CURLFORM_END);
+
+ if(formrc)
+ printf("curl_formadd(1) = %d\n", (int)formrc);
+
+ /* Fill in the filename field */
+ formrc = curl_formadd(&formpost,
+ &lastptr,
+ CURLFORM_COPYNAME, "filename",
+#ifdef CURL_DOES_CONVERSIONS
+ /* ASCII representation with escape
+ sequences for non-ASCII platforms */
+ CURLFORM_COPYCONTENTS,
+ "\x70\x6f\x73\x74\x69\x74\x32\x2e\x63",
+#else
+ CURLFORM_COPYCONTENTS, "postit2.c",
+#endif
+ CURLFORM_END);
+
+ if(formrc)
+ printf("curl_formadd(2) = %d\n", (int)formrc);
+
+ /* Fill in a submit field too */
+ formrc = curl_formadd(&formpost,
+ &lastptr,
+ CURLFORM_COPYNAME, "submit",
+#ifdef CURL_DOES_CONVERSIONS
+ /* ASCII representation with escape
+ sequences for non-ASCII platforms */
+ CURLFORM_COPYCONTENTS, "\x73\x65\x6e\x64",
+#else
+ CURLFORM_COPYCONTENTS, "send",
+#endif
+ CURLFORM_END);
+
+ if(formrc)
+ printf("curl_formadd(3) = %d\n", (int)formrc);
+
+ if ((curl = curl_easy_init()) == NULL) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ curl_formfree(formpost);
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ /* First set the URL that is about to receive our POST. */
+ test_setopt(curl, CURLOPT_URL, URL);
+
+ /* Now specify we want to POST data */
+ test_setopt(curl, CURLOPT_POST, 1L);
+
+ /* Set the expected POST size */
+ test_setopt(curl, CURLOPT_POSTFIELDSIZE, (long)pooh.sizeleft);
+
+ /* we want to use our own read function */
+ test_setopt(curl, CURLOPT_READFUNCTION, read_callback);
+
+ /* send a multi-part formpost */
+ test_setopt(curl, CURLOPT_HTTPPOST, formpost);
+
+ /* get verbose debug output please */
+ test_setopt(curl, CURLOPT_VERBOSE, 1L);
+
+ /* include headers in the output */
+ test_setopt(curl, CURLOPT_HEADER, 1L);
+
+ /* Perform the request, res will get the return code */
+ res = curl_easy_perform(curl);
+
+test_cleanup:
+
+ /* always cleanup */
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+
+ /* now cleanup the formpost chain */
+ curl_formfree(formpost);
+
+ return res;
+}
diff --git a/tests/libtest/lib555.c b/tests/libtest/lib555.c
new file mode 100644
index 0000000..55b3f13
--- /dev/null
+++ b/tests/libtest/lib555.c
@@ -0,0 +1,157 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ *
+ * This test case is supposed to be identical to 547 except that this uses the
+ * multi interface and 547 is easy interface.
+ *
+ * argv1 = URL
+ * argv2 = proxy
+ * argv3 = proxyuser:password
+ */
+
+#include "test.h"
+#include "testutil.h"
+#include "memdebug.h"
+
+#define MULTI_PERFORM_HANG_TIMEOUT 60 * 1000
+
+#define UPLOADTHIS "this is the blurb we want to upload\n"
+
+static size_t readcallback(void *ptr,
+ size_t size,
+ size_t nmemb,
+ void *clientp)
+{
+ int *counter = (int *)clientp;
+
+ if(*counter) {
+ /* only do this once and then require a clearing of this */
+ fprintf(stderr, "READ ALREADY DONE!\n");
+ return 0;
+ }
+ (*counter)++; /* bump */
+
+ if(size * nmemb > strlen(UPLOADTHIS)) {
+ fprintf(stderr, "READ!\n");
+ strcpy(ptr, UPLOADTHIS);
+ return strlen(UPLOADTHIS);
+ }
+ fprintf(stderr, "READ NOT FINE!\n");
+ return 0;
+}
+static curlioerr ioctlcallback(CURL *handle,
+ int cmd,
+ void *clientp)
+{
+ int *counter = (int *)clientp;
+ (void)handle; /* unused */
+ if(cmd == CURLIOCMD_RESTARTREAD) {
+ fprintf(stderr, "REWIND!\n");
+ *counter = 0; /* clear counter to make the read callback restart */
+ }
+ return CURLIOE_OK;
+}
+
+
+int test(char *URL)
+{
+ int res;
+ CURL *curl;
+ int counter=0;
+ CURLM *m = NULL;
+ int running=1;
+ struct timeval mp_start;
+ char mp_timedout = FALSE;
+
+ if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ if ((curl = curl_easy_init()) == NULL) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ test_setopt(curl, CURLOPT_URL, URL);
+ test_setopt(curl, CURLOPT_VERBOSE, 1L);
+ test_setopt(curl, CURLOPT_HEADER, 1L);
+
+ /* read the POST data from a callback */
+ test_setopt(curl, CURLOPT_IOCTLFUNCTION, ioctlcallback);
+ test_setopt(curl, CURLOPT_IOCTLDATA, &counter);
+ test_setopt(curl, CURLOPT_READFUNCTION, readcallback);
+ test_setopt(curl, CURLOPT_READDATA, &counter);
+ /* We CANNOT do the POST fine without setting the size (or choose chunked)! */
+ test_setopt(curl, CURLOPT_POSTFIELDSIZE, strlen(UPLOADTHIS));
+
+ test_setopt(curl, CURLOPT_POST, 1L);
+#ifdef CURL_DOES_CONVERSIONS
+ /* Convert the POST data to ASCII. */
+ test_setopt(curl, CURLOPT_TRANSFERTEXT, 1L);
+#endif
+ test_setopt(curl, CURLOPT_PROXY, libtest_arg2);
+ test_setopt(curl, CURLOPT_PROXYUSERPWD, libtest_arg3);
+ test_setopt(curl, CURLOPT_PROXYAUTH,
+ (long) (CURLAUTH_NTLM | CURLAUTH_DIGEST | CURLAUTH_BASIC) );
+
+ if ((m = curl_multi_init()) == NULL) {
+ fprintf(stderr, "curl_multi_init() failed\n");
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ if ((res = (int)curl_multi_add_handle(m, curl)) != CURLM_OK) {
+ fprintf(stderr, "curl_multi_add_handle() failed, "
+ "with code %d\n", res);
+ curl_multi_cleanup(m);
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ mp_timedout = FALSE;
+ mp_start = tutil_tvnow();
+
+ while (running) {
+ res = (int)curl_multi_perform(m, &running);
+ if (tutil_tvdiff(tutil_tvnow(), mp_start) >
+ MULTI_PERFORM_HANG_TIMEOUT) {
+ mp_timedout = TRUE;
+ break;
+ }
+#ifdef TPF
+ sleep(1); /* avoid ctl-10 dump */
+#endif
+ if (running <= 0) {
+ fprintf(stderr, "nothing left running.\n");
+ break;
+ }
+ }
+
+ if (mp_timedout) {
+ if (mp_timedout) fprintf(stderr, "mp_timedout\n");
+ fprintf(stderr, "ABORTING TEST, since it seems "
+ "that it would have run forever.\n");
+ res = TEST_ERR_RUNS_FOREVER;
+ }
+
+test_cleanup:
+
+ if(m) {
+ curl_multi_remove_handle(m, curl);
+ curl_multi_cleanup(m);
+ }
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+
+ return res;
+}
+
diff --git a/tests/libtest/lib556.c b/tests/libtest/lib556.c
new file mode 100644
index 0000000..78d123b
--- /dev/null
+++ b/tests/libtest/lib556.c
@@ -0,0 +1,91 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include "test.h"
+
+#include "memdebug.h"
+
+/* For Windows, mainly (may be moved in a config file?) */
+#ifndef STDIN_FILENO
+ #define STDIN_FILENO 0
+#endif
+#ifndef STDOUT_FILENO
+ #define STDOUT_FILENO 1
+#endif
+#ifndef STDERR_FILENO
+ #define STDERR_FILENO 2
+#endif
+
+int test(char *URL)
+{
+ CURLcode res;
+ CURL *curl;
+
+ if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ if ((curl = curl_easy_init()) == NULL) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ test_setopt(curl, CURLOPT_URL, URL);
+ test_setopt(curl, CURLOPT_CONNECT_ONLY, 1L);
+
+ res = curl_easy_perform(curl);
+
+ if(!res) {
+ /* we are connected, now get a HTTP document the raw way */
+ const char *request =
+#ifdef CURL_DOES_CONVERSIONS
+ /* ASCII representation with escape sequences for non-ASCII platforms */
+ "\x47\x45\x54\x20\x2f\x35\x35\x36\x20\x48\x54\x54\x50\x2f\x31\x2e"
+ "\x32\x0d\x0a\x48\x6f\x73\x74\x3a\x20\x6e\x69\x6e\x6a\x61\x0d\x0a"
+ "\x0d\x0a";
+#else
+ "GET /556 HTTP/1.2\r\n"
+ "Host: ninja\r\n\r\n";
+#endif
+ size_t iolen;
+ char buf[1024];
+
+ res = curl_easy_send(curl, request, strlen(request), &iolen);
+
+ if(!res) {
+ /* we assume that sending always work */
+ size_t total=0;
+
+ do {
+ /* busy-read like crazy */
+ res = curl_easy_recv(curl, buf, 1024, &iolen);
+
+#ifdef TPF
+ sleep(1); /* avoid ctl-10 dump */
+#endif
+
+ if(iolen)
+ /* send received stuff to stdout */
+ write(STDOUT_FILENO, buf, iolen);
+ total += iolen;
+
+ } while(((res == CURLE_OK) || (res == CURLE_AGAIN)) && (total < 129));
+ }
+ }
+
+test_cleanup:
+
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+
+ return (int)res;
+}
+
diff --git a/tests/libtest/lib557.c b/tests/libtest/lib557.c
new file mode 100644
index 0000000..48ccaf3
--- /dev/null
+++ b/tests/libtest/lib557.c
@@ -0,0 +1,1388 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+/*
+ * The purpose of this test is to minimally exercise libcurl's internal
+ * curl_m*printf formatting capabilities and handling of some data types.
+ */
+
+#include "test.h"
+
+#include <curl/mprintf.h>
+
+#include "memdebug.h"
+
+
+#if (CURL_SIZEOF_CURL_OFF_T > CURL_SIZEOF_LONG)
+# define MPRNT_SUFFIX_CURL_OFF_T LL
+#else
+# define MPRNT_SUFFIX_CURL_OFF_T L
+#endif
+
+
+#ifdef CURL_ISOCPP
+# define MPRNT_OFF_T_C_HELPER2(Val,Suffix) Val ## Suffix
+#else
+# define MPRNT_OFF_T_C_HELPER2(Val,Suffix) Val/**/Suffix
+#endif
+#define MPRNT_OFF_T_C_HELPER1(Val,Suffix) MPRNT_OFF_T_C_HELPER2(Val,Suffix)
+#define MPRNT_OFF_T_C(Val) MPRNT_OFF_T_C_HELPER1(Val,MPRNT_SUFFIX_CURL_OFF_T)
+
+
+#define BUFSZ 256
+#define USHORT_TESTS_ARRSZ 1 + 100
+#define SSHORT_TESTS_ARRSZ 1 + 100
+#define UINT_TESTS_ARRSZ 1 + 100
+#define SINT_TESTS_ARRSZ 1 + 100
+#define ULONG_TESTS_ARRSZ 1 + 100
+#define SLONG_TESTS_ARRSZ 1 + 100
+#define COFFT_TESTS_ARRSZ 1 + 100
+
+
+struct unsshort_st {
+ unsigned short num; /* unsigned short */
+ const char *expected; /* expected string */
+ char result[BUFSZ]; /* result string */
+};
+
+
+struct sigshort_st {
+ short num; /* signed short */
+ const char *expected; /* expected string */
+ char result[BUFSZ]; /* result string */
+};
+
+
+struct unsint_st {
+ unsigned int num; /* unsigned int */
+ const char *expected; /* expected string */
+ char result[BUFSZ]; /* result string */
+};
+
+
+struct sigint_st {
+ int num; /* signed int */
+ const char *expected; /* expected string */
+ char result[BUFSZ]; /* result string */
+};
+
+
+struct unslong_st {
+ unsigned long num; /* unsigned long */
+ const char *expected; /* expected string */
+ char result[BUFSZ]; /* result string */
+};
+
+
+struct siglong_st {
+ long num; /* signed long */
+ const char *expected; /* expected string */
+ char result[BUFSZ]; /* result string */
+};
+
+
+struct curloff_st {
+ curl_off_t num; /* curl_off_t */
+ const char *expected; /* expected string */
+ char result[BUFSZ]; /* result string */
+};
+
+
+static struct unsshort_st us_test[USHORT_TESTS_ARRSZ];
+static struct sigshort_st ss_test[SSHORT_TESTS_ARRSZ];
+static struct unsint_st ui_test[UINT_TESTS_ARRSZ];
+static struct sigint_st si_test[SINT_TESTS_ARRSZ];
+static struct unslong_st ul_test[ULONG_TESTS_ARRSZ];
+static struct siglong_st sl_test[SLONG_TESTS_ARRSZ];
+static struct curloff_st co_test[COFFT_TESTS_ARRSZ];
+
+
+static int test_unsigned_short_formatting(void)
+{
+ int i, j;
+ int num_ushort_tests;
+ int failed = 0;
+
+#if (SIZEOF_SHORT == 1)
+
+ i=1; us_test[i].num = 0xFFU; us_test[i].expected = "256";
+ i++; us_test[i].num = 0xF0U; us_test[i].expected = "240";
+ i++; us_test[i].num = 0x0FU; us_test[i].expected = "15";
+
+ i++; us_test[i].num = 0xE0U; us_test[i].expected = "224";
+ i++; us_test[i].num = 0x0EU; us_test[i].expected = "14";
+
+ i++; us_test[i].num = 0xC0U; us_test[i].expected = "192";
+ i++; us_test[i].num = 0x0CU; us_test[i].expected = "12";
+
+ i++; us_test[i].num = 0x01U; us_test[i].expected = "1";
+ i++; us_test[i].num = 0x00U; us_test[i].expected = "0";
+
+ num_ushort_tests = i;
+
+#elif (SIZEOF_SHORT == 2)
+
+ i=1; us_test[i].num = 0xFFFFU; us_test[i].expected = "65535";
+ i++; us_test[i].num = 0xFF00U; us_test[i].expected = "65280";
+ i++; us_test[i].num = 0x00FFU; us_test[i].expected = "255";
+
+ i++; us_test[i].num = 0xF000U; us_test[i].expected = "61440";
+ i++; us_test[i].num = 0x0F00U; us_test[i].expected = "3840";
+ i++; us_test[i].num = 0x00F0U; us_test[i].expected = "240";
+ i++; us_test[i].num = 0x000FU; us_test[i].expected = "15";
+
+ i++; us_test[i].num = 0xC000U; us_test[i].expected = "49152";
+ i++; us_test[i].num = 0x0C00U; us_test[i].expected = "3072";
+ i++; us_test[i].num = 0x00C0U; us_test[i].expected = "192";
+ i++; us_test[i].num = 0x000CU; us_test[i].expected = "12";
+
+ i++; us_test[i].num = 0x0001U; us_test[i].expected = "1";
+ i++; us_test[i].num = 0x0000U; us_test[i].expected = "0";
+
+ num_ushort_tests = i;
+
+#elif (SIZEOF_SHORT == 4)
+
+ i=1; us_test[i].num = 0xFFFFFFFFU; us_test[i].expected = "4294967295";
+ i++; us_test[i].num = 0xFFFF0000U; us_test[i].expected = "4294901760";
+ i++; us_test[i].num = 0x0000FFFFU; us_test[i].expected = "65535";
+
+ i++; us_test[i].num = 0xFF000000U; us_test[i].expected = "4278190080";
+ i++; us_test[i].num = 0x00FF0000U; us_test[i].expected = "16711680";
+ i++; us_test[i].num = 0x0000FF00U; us_test[i].expected = "65280";
+ i++; us_test[i].num = 0x000000FFU; us_test[i].expected = "255";
+
+ i++; us_test[i].num = 0xF0000000U; us_test[i].expected = "4026531840";
+ i++; us_test[i].num = 0x0F000000U; us_test[i].expected = "251658240";
+ i++; us_test[i].num = 0x00F00000U; us_test[i].expected = "15728640";
+ i++; us_test[i].num = 0x000F0000U; us_test[i].expected = "983040";
+ i++; us_test[i].num = 0x0000F000U; us_test[i].expected = "61440";
+ i++; us_test[i].num = 0x00000F00U; us_test[i].expected = "3840";
+ i++; us_test[i].num = 0x000000F0U; us_test[i].expected = "240";
+ i++; us_test[i].num = 0x0000000FU; us_test[i].expected = "15";
+
+ i++; us_test[i].num = 0xC0000000U; us_test[i].expected = "3221225472";
+ i++; us_test[i].num = 0x0C000000U; us_test[i].expected = "201326592";
+ i++; us_test[i].num = 0x00C00000U; us_test[i].expected = "12582912";
+ i++; us_test[i].num = 0x000C0000U; us_test[i].expected = "786432";
+ i++; us_test[i].num = 0x0000C000U; us_test[i].expected = "49152";
+ i++; us_test[i].num = 0x00000C00U; us_test[i].expected = "3072";
+ i++; us_test[i].num = 0x000000C0U; us_test[i].expected = "192";
+ i++; us_test[i].num = 0x0000000CU; us_test[i].expected = "12";
+
+ i++; us_test[i].num = 0x00000001U; us_test[i].expected = "1";
+ i++; us_test[i].num = 0x00000000U; us_test[i].expected = "0";
+
+ num_ushort_tests = i;
+
+#endif
+
+ for(i=1; i<=num_ushort_tests; i++) {
+
+ for(j=0; j<BUFSZ; j++)
+ us_test[i].result[j] = 'X';
+ us_test[i].result[BUFSZ-1] = '\0';
+
+ (void)curl_msprintf(us_test[i].result, "%hu", us_test[i].num);
+
+ if(memcmp(us_test[i].result,
+ us_test[i].expected,
+ strlen(us_test[i].expected))) {
+ printf("unsigned short test #%.2d: Failed (Expected: %s Got: %s)\n",
+ i, us_test[i].expected, us_test[i].result);
+ failed++;
+ }
+
+ }
+
+ if(!failed)
+ printf("All curl_mprintf() unsigned short tests OK!\n");
+ else
+ printf("Some curl_mprintf() unsigned short tests Failed!\n");
+
+ return failed;
+}
+
+
+static int test_signed_short_formatting(void)
+{
+ int i, j;
+ int num_sshort_tests;
+ int failed = 0;
+
+#if (SIZEOF_SHORT == 1)
+
+ i=1; ss_test[i].num = 0x7F; ss_test[i].expected = "127";
+
+ i++; ss_test[i].num = 0x70; ss_test[i].expected = "112";
+ i++; ss_test[i].num = 0x07; ss_test[i].expected = "7";
+
+ i++; ss_test[i].num = 0x50; ss_test[i].expected = "80";
+ i++; ss_test[i].num = 0x05; ss_test[i].expected = "5";
+
+ i++; ss_test[i].num = 0x01; ss_test[i].expected = "1";
+ i++; ss_test[i].num = 0x00; ss_test[i].expected = "0";
+
+ i++; ss_test[i].num = -0x7F -1; ss_test[i].expected = "-128";
+
+ i++; ss_test[i].num = -0x70 -1; ss_test[i].expected = "-113";
+ i++; ss_test[i].num = -0x07 -1; ss_test[i].expected = "-8";
+
+ i++; ss_test[i].num = -0x50 -1; ss_test[i].expected = "-81";
+ i++; ss_test[i].num = -0x05 -1; ss_test[i].expected = "-6";
+
+ i++; ss_test[i].num = 0x00 -1; ss_test[i].expected = "-1";
+
+ num_sshort_tests = i;
+
+#elif (SIZEOF_SHORT == 2)
+
+ i=1; ss_test[i].num = 0x7FFF; ss_test[i].expected = "32767";
+ i++; ss_test[i].num = 0x7FFE; ss_test[i].expected = "32766";
+ i++; ss_test[i].num = 0x7FFD; ss_test[i].expected = "32765";
+ i++; ss_test[i].num = 0x7F00; ss_test[i].expected = "32512";
+ i++; ss_test[i].num = 0x07F0; ss_test[i].expected = "2032";
+ i++; ss_test[i].num = 0x007F; ss_test[i].expected = "127";
+
+ i++; ss_test[i].num = 0x7000; ss_test[i].expected = "28672";
+ i++; ss_test[i].num = 0x0700; ss_test[i].expected = "1792";
+ i++; ss_test[i].num = 0x0070; ss_test[i].expected = "112";
+ i++; ss_test[i].num = 0x0007; ss_test[i].expected = "7";
+
+ i++; ss_test[i].num = 0x5000; ss_test[i].expected = "20480";
+ i++; ss_test[i].num = 0x0500; ss_test[i].expected = "1280";
+ i++; ss_test[i].num = 0x0050; ss_test[i].expected = "80";
+ i++; ss_test[i].num = 0x0005; ss_test[i].expected = "5";
+
+ i++; ss_test[i].num = 0x0001; ss_test[i].expected = "1";
+ i++; ss_test[i].num = 0x0000; ss_test[i].expected = "0";
+
+ i++; ss_test[i].num = -0x7FFF -1; ss_test[i].expected = "-32768";
+ i++; ss_test[i].num = -0x7FFE -1; ss_test[i].expected = "-32767";
+ i++; ss_test[i].num = -0x7FFD -1; ss_test[i].expected = "-32766";
+ i++; ss_test[i].num = -0x7F00 -1; ss_test[i].expected = "-32513";
+ i++; ss_test[i].num = -0x07F0 -1; ss_test[i].expected = "-2033";
+ i++; ss_test[i].num = -0x007F -1; ss_test[i].expected = "-128";
+
+ i++; ss_test[i].num = -0x7000 -1; ss_test[i].expected = "-28673";
+ i++; ss_test[i].num = -0x0700 -1; ss_test[i].expected = "-1793";
+ i++; ss_test[i].num = -0x0070 -1; ss_test[i].expected = "-113";
+ i++; ss_test[i].num = -0x0007 -1; ss_test[i].expected = "-8";
+
+ i++; ss_test[i].num = -0x5000 -1; ss_test[i].expected = "-20481";
+ i++; ss_test[i].num = -0x0500 -1; ss_test[i].expected = "-1281";
+ i++; ss_test[i].num = -0x0050 -1; ss_test[i].expected = "-81";
+ i++; ss_test[i].num = -0x0005 -1; ss_test[i].expected = "-6";
+
+ i++; ss_test[i].num = 0x0000 -1; ss_test[i].expected = "-1";
+
+ num_sshort_tests = i;
+
+#elif (SIZEOF_SHORT == 4)
+
+ i=1; ss_test[i].num = 0x7FFFFFFF; ss_test[i].expected = "2147483647";
+ i++; ss_test[i].num = 0x7FFFFFFE; ss_test[i].expected = "2147483646";
+ i++; ss_test[i].num = 0x7FFFFFFD; ss_test[i].expected = "2147483645";
+ i++; ss_test[i].num = 0x7FFF0000; ss_test[i].expected = "2147418112";
+ i++; ss_test[i].num = 0x00007FFF; ss_test[i].expected = "32767";
+
+ i++; ss_test[i].num = 0x7F000000; ss_test[i].expected = "2130706432";
+ i++; ss_test[i].num = 0x007F0000; ss_test[i].expected = "8323072";
+ i++; ss_test[i].num = 0x00007F00; ss_test[i].expected = "32512";
+ i++; ss_test[i].num = 0x0000007F; ss_test[i].expected = "127";
+
+ i++; ss_test[i].num = 0x70000000; ss_test[i].expected = "1879048192";
+ i++; ss_test[i].num = 0x07000000; ss_test[i].expected = "117440512";
+ i++; ss_test[i].num = 0x00700000; ss_test[i].expected = "7340032";
+ i++; ss_test[i].num = 0x00070000; ss_test[i].expected = "458752";
+ i++; ss_test[i].num = 0x00007000; ss_test[i].expected = "28672";
+ i++; ss_test[i].num = 0x00000700; ss_test[i].expected = "1792";
+ i++; ss_test[i].num = 0x00000070; ss_test[i].expected = "112";
+ i++; ss_test[i].num = 0x00000007; ss_test[i].expected = "7";
+
+ i++; ss_test[i].num = 0x50000000; ss_test[i].expected = "1342177280";
+ i++; ss_test[i].num = 0x05000000; ss_test[i].expected = "83886080";
+ i++; ss_test[i].num = 0x00500000; ss_test[i].expected = "5242880";
+ i++; ss_test[i].num = 0x00050000; ss_test[i].expected = "327680";
+ i++; ss_test[i].num = 0x00005000; ss_test[i].expected = "20480";
+ i++; ss_test[i].num = 0x00000500; ss_test[i].expected = "1280";
+ i++; ss_test[i].num = 0x00000050; ss_test[i].expected = "80";
+ i++; ss_test[i].num = 0x00000005; ss_test[i].expected = "5";
+
+ i++; ss_test[i].num = 0x00000001; ss_test[i].expected = "1";
+ i++; ss_test[i].num = 0x00000000; ss_test[i].expected = "0";
+
+ i++; ss_test[i].num = -0x7FFFFFFF -1; ss_test[i].expected = "-2147483648";
+ i++; ss_test[i].num = -0x7FFFFFFE -1; ss_test[i].expected = "-2147483647";
+ i++; ss_test[i].num = -0x7FFFFFFD -1; ss_test[i].expected = "-2147483646";
+ i++; ss_test[i].num = -0x7FFF0000 -1; ss_test[i].expected = "-2147418113";
+ i++; ss_test[i].num = -0x00007FFF -1; ss_test[i].expected = "-32768";
+
+ i++; ss_test[i].num = -0x7F000000 -1; ss_test[i].expected = "-2130706433";
+ i++; ss_test[i].num = -0x007F0000 -1; ss_test[i].expected = "-8323073";
+ i++; ss_test[i].num = -0x00007F00 -1; ss_test[i].expected = "-32513";
+ i++; ss_test[i].num = -0x0000007F -1; ss_test[i].expected = "-128";
+
+ i++; ss_test[i].num = -0x70000000 -1; ss_test[i].expected = "-1879048193";
+ i++; ss_test[i].num = -0x07000000 -1; ss_test[i].expected = "-117440513";
+ i++; ss_test[i].num = -0x00700000 -1; ss_test[i].expected = "-7340033";
+ i++; ss_test[i].num = -0x00070000 -1; ss_test[i].expected = "-458753";
+ i++; ss_test[i].num = -0x00007000 -1; ss_test[i].expected = "-28673";
+ i++; ss_test[i].num = -0x00000700 -1; ss_test[i].expected = "-1793";
+ i++; ss_test[i].num = -0x00000070 -1; ss_test[i].expected = "-113";
+ i++; ss_test[i].num = -0x00000007 -1; ss_test[i].expected = "-8";
+
+ i++; ss_test[i].num = -0x50000000 -1; ss_test[i].expected = "-1342177281";
+ i++; ss_test[i].num = -0x05000000 -1; ss_test[i].expected = "-83886081";
+ i++; ss_test[i].num = -0x00500000 -1; ss_test[i].expected = "-5242881";
+ i++; ss_test[i].num = -0x00050000 -1; ss_test[i].expected = "-327681";
+ i++; ss_test[i].num = -0x00005000 -1; ss_test[i].expected = "-20481";
+ i++; ss_test[i].num = -0x00000500 -1; ss_test[i].expected = "-1281";
+ i++; ss_test[i].num = -0x00000050 -1; ss_test[i].expected = "-81";
+ i++; ss_test[i].num = -0x00000005 -1; ss_test[i].expected = "-6";
+
+ i++; ss_test[i].num = 0x00000000 -1; ss_test[i].expected = "-1";
+
+ num_sshort_tests = i;
+
+#endif
+
+ for(i=1; i<=num_sshort_tests; i++) {
+
+ for(j=0; j<BUFSZ; j++)
+ ss_test[i].result[j] = 'X';
+ ss_test[i].result[BUFSZ-1] = '\0';
+
+ (void)curl_msprintf(ss_test[i].result, "%hd", ss_test[i].num);
+
+ if(memcmp(ss_test[i].result,
+ ss_test[i].expected,
+ strlen(ss_test[i].expected))) {
+ printf("signed short test #%.2d: Failed (Expected: %s Got: %s)\n",
+ i, ss_test[i].expected, ss_test[i].result);
+ failed++;
+ }
+
+ }
+
+ if(!failed)
+ printf("All curl_mprintf() signed short tests OK!\n");
+ else
+ printf("Some curl_mprintf() signed short tests Failed!\n");
+
+ return failed;
+}
+
+
+static int test_unsigned_int_formatting(void)
+{
+ int i, j;
+ int num_uint_tests;
+ int failed = 0;
+
+#if (SIZEOF_INT == 2)
+
+ i=1; ui_test[i].num = 0xFFFFU; ui_test[i].expected = "65535";
+ i++; ui_test[i].num = 0xFF00U; ui_test[i].expected = "65280";
+ i++; ui_test[i].num = 0x00FFU; ui_test[i].expected = "255";
+
+ i++; ui_test[i].num = 0xF000U; ui_test[i].expected = "61440";
+ i++; ui_test[i].num = 0x0F00U; ui_test[i].expected = "3840";
+ i++; ui_test[i].num = 0x00F0U; ui_test[i].expected = "240";
+ i++; ui_test[i].num = 0x000FU; ui_test[i].expected = "15";
+
+ i++; ui_test[i].num = 0xC000U; ui_test[i].expected = "49152";
+ i++; ui_test[i].num = 0x0C00U; ui_test[i].expected = "3072";
+ i++; ui_test[i].num = 0x00C0U; ui_test[i].expected = "192";
+ i++; ui_test[i].num = 0x000CU; ui_test[i].expected = "12";
+
+ i++; ui_test[i].num = 0x0001U; ui_test[i].expected = "1";
+ i++; ui_test[i].num = 0x0000U; ui_test[i].expected = "0";
+
+ num_uint_tests = i;
+
+#elif (SIZEOF_INT == 4)
+
+ i=1; ui_test[i].num = 0xFFFFFFFFU; ui_test[i].expected = "4294967295";
+ i++; ui_test[i].num = 0xFFFF0000U; ui_test[i].expected = "4294901760";
+ i++; ui_test[i].num = 0x0000FFFFU; ui_test[i].expected = "65535";
+
+ i++; ui_test[i].num = 0xFF000000U; ui_test[i].expected = "4278190080";
+ i++; ui_test[i].num = 0x00FF0000U; ui_test[i].expected = "16711680";
+ i++; ui_test[i].num = 0x0000FF00U; ui_test[i].expected = "65280";
+ i++; ui_test[i].num = 0x000000FFU; ui_test[i].expected = "255";
+
+ i++; ui_test[i].num = 0xF0000000U; ui_test[i].expected = "4026531840";
+ i++; ui_test[i].num = 0x0F000000U; ui_test[i].expected = "251658240";
+ i++; ui_test[i].num = 0x00F00000U; ui_test[i].expected = "15728640";
+ i++; ui_test[i].num = 0x000F0000U; ui_test[i].expected = "983040";
+ i++; ui_test[i].num = 0x0000F000U; ui_test[i].expected = "61440";
+ i++; ui_test[i].num = 0x00000F00U; ui_test[i].expected = "3840";
+ i++; ui_test[i].num = 0x000000F0U; ui_test[i].expected = "240";
+ i++; ui_test[i].num = 0x0000000FU; ui_test[i].expected = "15";
+
+ i++; ui_test[i].num = 0xC0000000U; ui_test[i].expected = "3221225472";
+ i++; ui_test[i].num = 0x0C000000U; ui_test[i].expected = "201326592";
+ i++; ui_test[i].num = 0x00C00000U; ui_test[i].expected = "12582912";
+ i++; ui_test[i].num = 0x000C0000U; ui_test[i].expected = "786432";
+ i++; ui_test[i].num = 0x0000C000U; ui_test[i].expected = "49152";
+ i++; ui_test[i].num = 0x00000C00U; ui_test[i].expected = "3072";
+ i++; ui_test[i].num = 0x000000C0U; ui_test[i].expected = "192";
+ i++; ui_test[i].num = 0x0000000CU; ui_test[i].expected = "12";
+
+ i++; ui_test[i].num = 0x00000001U; ui_test[i].expected = "1";
+ i++; ui_test[i].num = 0x00000000U; ui_test[i].expected = "0";
+
+ num_uint_tests = i;
+
+#elif (SIZEOF_INT == 8)
+
+ i=1; ui_test[i].num = 0xFFFFFFFFFFFFFFFFU; ui_test[i].expected = "18446744073709551615";
+ i++; ui_test[i].num = 0xFFFFFFFF00000000U; ui_test[i].expected = "18446744069414584320";
+ i++; ui_test[i].num = 0x00000000FFFFFFFFU; ui_test[i].expected = "4294967295";
+
+ i++; ui_test[i].num = 0xFFFF000000000000U; ui_test[i].expected = "18446462598732840960";
+ i++; ui_test[i].num = 0x0000FFFF00000000U; ui_test[i].expected = "281470681743360";
+ i++; ui_test[i].num = 0x00000000FFFF0000U; ui_test[i].expected = "4294901760";
+ i++; ui_test[i].num = 0x000000000000FFFFU; ui_test[i].expected = "65535";
+
+ i++; ui_test[i].num = 0xFF00000000000000U; ui_test[i].expected = "18374686479671623680";
+ i++; ui_test[i].num = 0x00FF000000000000U; ui_test[i].expected = "71776119061217280";
+ i++; ui_test[i].num = 0x0000FF0000000000U; ui_test[i].expected = "280375465082880";
+ i++; ui_test[i].num = 0x000000FF00000000U; ui_test[i].expected = "1095216660480";
+ i++; ui_test[i].num = 0x00000000FF000000U; ui_test[i].expected = "4278190080";
+ i++; ui_test[i].num = 0x0000000000FF0000U; ui_test[i].expected = "16711680";
+ i++; ui_test[i].num = 0x000000000000FF00U; ui_test[i].expected = "65280";
+ i++; ui_test[i].num = 0x00000000000000FFU; ui_test[i].expected = "255";
+
+ i++; ui_test[i].num = 0xF000000000000000U; ui_test[i].expected = "17293822569102704640";
+ i++; ui_test[i].num = 0x0F00000000000000U; ui_test[i].expected = "1080863910568919040";
+ i++; ui_test[i].num = 0x00F0000000000000U; ui_test[i].expected = "67553994410557440";
+ i++; ui_test[i].num = 0x000F000000000000U; ui_test[i].expected = "4222124650659840";
+ i++; ui_test[i].num = 0x0000F00000000000U; ui_test[i].expected = "263882790666240";
+ i++; ui_test[i].num = 0x00000F0000000000U; ui_test[i].expected = "16492674416640";
+ i++; ui_test[i].num = 0x000000F000000000U; ui_test[i].expected = "1030792151040";
+ i++; ui_test[i].num = 0x0000000F00000000U; ui_test[i].expected = "64424509440";
+ i++; ui_test[i].num = 0x00000000F0000000U; ui_test[i].expected = "4026531840";
+ i++; ui_test[i].num = 0x000000000F000000U; ui_test[i].expected = "251658240";
+ i++; ui_test[i].num = 0x0000000000F00000U; ui_test[i].expected = "15728640";
+ i++; ui_test[i].num = 0x00000000000F0000U; ui_test[i].expected = "983040";
+ i++; ui_test[i].num = 0x000000000000F000U; ui_test[i].expected = "61440";
+ i++; ui_test[i].num = 0x0000000000000F00U; ui_test[i].expected = "3840";
+ i++; ui_test[i].num = 0x00000000000000F0U; ui_test[i].expected = "240";
+ i++; ui_test[i].num = 0x000000000000000FU; ui_test[i].expected = "15";
+
+ i++; ui_test[i].num = 0xC000000000000000U; ui_test[i].expected = "13835058055282163712";
+ i++; ui_test[i].num = 0x0C00000000000000U; ui_test[i].expected = "864691128455135232";
+ i++; ui_test[i].num = 0x00C0000000000000U; ui_test[i].expected = "54043195528445952";
+ i++; ui_test[i].num = 0x000C000000000000U; ui_test[i].expected = "3377699720527872";
+ i++; ui_test[i].num = 0x0000C00000000000U; ui_test[i].expected = "211106232532992";
+ i++; ui_test[i].num = 0x00000C0000000000U; ui_test[i].expected = "13194139533312";
+ i++; ui_test[i].num = 0x000000C000000000U; ui_test[i].expected = "824633720832";
+ i++; ui_test[i].num = 0x0000000C00000000U; ui_test[i].expected = "51539607552";
+ i++; ui_test[i].num = 0x00000000C0000000U; ui_test[i].expected = "3221225472";
+ i++; ui_test[i].num = 0x000000000C000000U; ui_test[i].expected = "201326592";
+ i++; ui_test[i].num = 0x0000000000C00000U; ui_test[i].expected = "12582912";
+ i++; ui_test[i].num = 0x00000000000C0000U; ui_test[i].expected = "786432";
+ i++; ui_test[i].num = 0x000000000000C000U; ui_test[i].expected = "49152";
+ i++; ui_test[i].num = 0x0000000000000C00U; ui_test[i].expected = "3072";
+ i++; ui_test[i].num = 0x00000000000000C0U; ui_test[i].expected = "192";
+ i++; ui_test[i].num = 0x000000000000000CU; ui_test[i].expected = "12";
+
+ i++; ui_test[i].num = 0x00000001U; ui_test[i].expected = "1";
+ i++; ui_test[i].num = 0x00000000U; ui_test[i].expected = "0";
+
+ num_uint_tests = i;
+
+#endif
+
+ for(i=1; i<=num_uint_tests; i++) {
+
+ for(j=0; j<BUFSZ; j++)
+ ui_test[i].result[j] = 'X';
+ ui_test[i].result[BUFSZ-1] = '\0';
+
+ (void)curl_msprintf(ui_test[i].result, "%u", ui_test[i].num);
+
+ if(memcmp(ui_test[i].result,
+ ui_test[i].expected,
+ strlen(ui_test[i].expected))) {
+ printf("unsigned int test #%.2d: Failed (Expected: %s Got: %s)\n",
+ i, ui_test[i].expected, ui_test[i].result);
+ failed++;
+ }
+
+ }
+
+ if(!failed)
+ printf("All curl_mprintf() unsigned int tests OK!\n");
+ else
+ printf("Some curl_mprintf() unsigned int tests Failed!\n");
+
+ return failed;
+}
+
+
+static int test_signed_int_formatting(void)
+{
+ int i, j;
+ int num_sint_tests;
+ int failed = 0;
+
+#if (SIZEOF_INT == 2)
+
+ i=1; si_test[i].num = 0x7FFF; si_test[i].expected = "32767";
+ i++; si_test[i].num = 0x7FFE; si_test[i].expected = "32766";
+ i++; si_test[i].num = 0x7FFD; si_test[i].expected = "32765";
+ i++; si_test[i].num = 0x7F00; si_test[i].expected = "32512";
+ i++; si_test[i].num = 0x07F0; si_test[i].expected = "2032";
+ i++; si_test[i].num = 0x007F; si_test[i].expected = "127";
+
+ i++; si_test[i].num = 0x7000; si_test[i].expected = "28672";
+ i++; si_test[i].num = 0x0700; si_test[i].expected = "1792";
+ i++; si_test[i].num = 0x0070; si_test[i].expected = "112";
+ i++; si_test[i].num = 0x0007; si_test[i].expected = "7";
+
+ i++; si_test[i].num = 0x5000; si_test[i].expected = "20480";
+ i++; si_test[i].num = 0x0500; si_test[i].expected = "1280";
+ i++; si_test[i].num = 0x0050; si_test[i].expected = "80";
+ i++; si_test[i].num = 0x0005; si_test[i].expected = "5";
+
+ i++; si_test[i].num = 0x0001; si_test[i].expected = "1";
+ i++; si_test[i].num = 0x0000; si_test[i].expected = "0";
+
+ i++; si_test[i].num = -0x7FFF -1; si_test[i].expected = "-32768";
+ i++; si_test[i].num = -0x7FFE -1; si_test[i].expected = "-32767";
+ i++; si_test[i].num = -0x7FFD -1; si_test[i].expected = "-32766";
+ i++; si_test[i].num = -0x7F00 -1; si_test[i].expected = "-32513";
+ i++; si_test[i].num = -0x07F0 -1; si_test[i].expected = "-2033";
+ i++; si_test[i].num = -0x007F -1; si_test[i].expected = "-128";
+
+ i++; si_test[i].num = -0x7000 -1; si_test[i].expected = "-28673";
+ i++; si_test[i].num = -0x0700 -1; si_test[i].expected = "-1793";
+ i++; si_test[i].num = -0x0070 -1; si_test[i].expected = "-113";
+ i++; si_test[i].num = -0x0007 -1; si_test[i].expected = "-8";
+
+ i++; si_test[i].num = -0x5000 -1; si_test[i].expected = "-20481";
+ i++; si_test[i].num = -0x0500 -1; si_test[i].expected = "-1281";
+ i++; si_test[i].num = -0x0050 -1; si_test[i].expected = "-81";
+ i++; si_test[i].num = -0x0005 -1; si_test[i].expected = "-6";
+
+ i++; si_test[i].num = 0x0000 -1; si_test[i].expected = "-1";
+
+ num_sint_tests = i;
+
+#elif (SIZEOF_INT == 4)
+
+ i=1; si_test[i].num = 0x7FFFFFFF; si_test[i].expected = "2147483647";
+ i++; si_test[i].num = 0x7FFFFFFE; si_test[i].expected = "2147483646";
+ i++; si_test[i].num = 0x7FFFFFFD; si_test[i].expected = "2147483645";
+ i++; si_test[i].num = 0x7FFF0000; si_test[i].expected = "2147418112";
+ i++; si_test[i].num = 0x00007FFF; si_test[i].expected = "32767";
+
+ i++; si_test[i].num = 0x7F000000; si_test[i].expected = "2130706432";
+ i++; si_test[i].num = 0x007F0000; si_test[i].expected = "8323072";
+ i++; si_test[i].num = 0x00007F00; si_test[i].expected = "32512";
+ i++; si_test[i].num = 0x0000007F; si_test[i].expected = "127";
+
+ i++; si_test[i].num = 0x70000000; si_test[i].expected = "1879048192";
+ i++; si_test[i].num = 0x07000000; si_test[i].expected = "117440512";
+ i++; si_test[i].num = 0x00700000; si_test[i].expected = "7340032";
+ i++; si_test[i].num = 0x00070000; si_test[i].expected = "458752";
+ i++; si_test[i].num = 0x00007000; si_test[i].expected = "28672";
+ i++; si_test[i].num = 0x00000700; si_test[i].expected = "1792";
+ i++; si_test[i].num = 0x00000070; si_test[i].expected = "112";
+ i++; si_test[i].num = 0x00000007; si_test[i].expected = "7";
+
+ i++; si_test[i].num = 0x50000000; si_test[i].expected = "1342177280";
+ i++; si_test[i].num = 0x05000000; si_test[i].expected = "83886080";
+ i++; si_test[i].num = 0x00500000; si_test[i].expected = "5242880";
+ i++; si_test[i].num = 0x00050000; si_test[i].expected = "327680";
+ i++; si_test[i].num = 0x00005000; si_test[i].expected = "20480";
+ i++; si_test[i].num = 0x00000500; si_test[i].expected = "1280";
+ i++; si_test[i].num = 0x00000050; si_test[i].expected = "80";
+ i++; si_test[i].num = 0x00000005; si_test[i].expected = "5";
+
+ i++; si_test[i].num = 0x00000001; si_test[i].expected = "1";
+ i++; si_test[i].num = 0x00000000; si_test[i].expected = "0";
+
+ i++; si_test[i].num = -0x7FFFFFFF -1; si_test[i].expected = "-2147483648";
+ i++; si_test[i].num = -0x7FFFFFFE -1; si_test[i].expected = "-2147483647";
+ i++; si_test[i].num = -0x7FFFFFFD -1; si_test[i].expected = "-2147483646";
+ i++; si_test[i].num = -0x7FFF0000 -1; si_test[i].expected = "-2147418113";
+ i++; si_test[i].num = -0x00007FFF -1; si_test[i].expected = "-32768";
+
+ i++; si_test[i].num = -0x7F000000 -1; si_test[i].expected = "-2130706433";
+ i++; si_test[i].num = -0x007F0000 -1; si_test[i].expected = "-8323073";
+ i++; si_test[i].num = -0x00007F00 -1; si_test[i].expected = "-32513";
+ i++; si_test[i].num = -0x0000007F -1; si_test[i].expected = "-128";
+
+ i++; si_test[i].num = -0x70000000 -1; si_test[i].expected = "-1879048193";
+ i++; si_test[i].num = -0x07000000 -1; si_test[i].expected = "-117440513";
+ i++; si_test[i].num = -0x00700000 -1; si_test[i].expected = "-7340033";
+ i++; si_test[i].num = -0x00070000 -1; si_test[i].expected = "-458753";
+ i++; si_test[i].num = -0x00007000 -1; si_test[i].expected = "-28673";
+ i++; si_test[i].num = -0x00000700 -1; si_test[i].expected = "-1793";
+ i++; si_test[i].num = -0x00000070 -1; si_test[i].expected = "-113";
+ i++; si_test[i].num = -0x00000007 -1; si_test[i].expected = "-8";
+
+ i++; si_test[i].num = -0x50000000 -1; si_test[i].expected = "-1342177281";
+ i++; si_test[i].num = -0x05000000 -1; si_test[i].expected = "-83886081";
+ i++; si_test[i].num = -0x00500000 -1; si_test[i].expected = "-5242881";
+ i++; si_test[i].num = -0x00050000 -1; si_test[i].expected = "-327681";
+ i++; si_test[i].num = -0x00005000 -1; si_test[i].expected = "-20481";
+ i++; si_test[i].num = -0x00000500 -1; si_test[i].expected = "-1281";
+ i++; si_test[i].num = -0x00000050 -1; si_test[i].expected = "-81";
+ i++; si_test[i].num = -0x00000005 -1; si_test[i].expected = "-6";
+
+ i++; si_test[i].num = 0x00000000 -1; si_test[i].expected = "-1";
+
+ num_sint_tests = i;
+
+#elif (SIZEOF_INT == 8)
+
+ i=1; si_test[i].num = 0x7FFFFFFFFFFFFFFF; si_test[i].expected = "9223372036854775807";
+ i++; si_test[i].num = 0x7FFFFFFFFFFFFFFE; si_test[i].expected = "9223372036854775806";
+ i++; si_test[i].num = 0x7FFFFFFFFFFFFFFD; si_test[i].expected = "9223372036854775805";
+ i++; si_test[i].num = 0x7FFFFFFF00000000; si_test[i].expected = "9223372032559808512";
+ i++; si_test[i].num = 0x000000007FFFFFFF; si_test[i].expected = "2147483647";
+
+ i++; si_test[i].num = 0x7FFF000000000000; si_test[i].expected = "9223090561878065152";
+ i++; si_test[i].num = 0x00007FFF00000000; si_test[i].expected = "140733193388032";
+ i++; si_test[i].num = 0x000000007FFF0000; si_test[i].expected = "2147418112";
+ i++; si_test[i].num = 0x0000000000007FFF; si_test[i].expected = "32767";
+
+ i++; si_test[i].num = 0x7F00000000000000; si_test[i].expected = "9151314442816847872";
+ i++; si_test[i].num = 0x007F000000000000; si_test[i].expected = "35747322042253312";
+ i++; si_test[i].num = 0x00007F0000000000; si_test[i].expected = "139637976727552";
+ i++; si_test[i].num = 0x0000007F00000000; si_test[i].expected = "545460846592";
+ i++; si_test[i].num = 0x000000007F000000; si_test[i].expected = "2130706432";
+ i++; si_test[i].num = 0x00000000007F0000; si_test[i].expected = "8323072";
+ i++; si_test[i].num = 0x0000000000007F00; si_test[i].expected = "32512";
+ i++; si_test[i].num = 0x000000000000007F; si_test[i].expected = "127";
+
+ i++; si_test[i].num = 0x7000000000000000; si_test[i].expected = "8070450532247928832";
+ i++; si_test[i].num = 0x0700000000000000; si_test[i].expected = "504403158265495552";
+ i++; si_test[i].num = 0x0070000000000000; si_test[i].expected = "31525197391593472";
+ i++; si_test[i].num = 0x0007000000000000; si_test[i].expected = "1970324836974592";
+ i++; si_test[i].num = 0x0000700000000000; si_test[i].expected = "123145302310912";
+ i++; si_test[i].num = 0x0000070000000000; si_test[i].expected = "7696581394432";
+ i++; si_test[i].num = 0x0000007000000000; si_test[i].expected = "481036337152";
+ i++; si_test[i].num = 0x0000000700000000; si_test[i].expected = "30064771072";
+ i++; si_test[i].num = 0x0000000070000000; si_test[i].expected = "1879048192";
+ i++; si_test[i].num = 0x0000000007000000; si_test[i].expected = "117440512";
+ i++; si_test[i].num = 0x0000000000700000; si_test[i].expected = "7340032";
+ i++; si_test[i].num = 0x0000000000070000; si_test[i].expected = "458752";
+ i++; si_test[i].num = 0x0000000000007000; si_test[i].expected = "28672";
+ i++; si_test[i].num = 0x0000000000000700; si_test[i].expected = "1792";
+ i++; si_test[i].num = 0x0000000000000070; si_test[i].expected = "112";
+ i++; si_test[i].num = 0x0000000000000007; si_test[i].expected = "7";
+
+ i++; si_test[i].num = 0x0000000000000001; si_test[i].expected = "1";
+ i++; si_test[i].num = 0x0000000000000000; si_test[i].expected = "0";
+
+ i++; si_test[i].num = -0x7FFFFFFFFFFFFFFF -1; si_test[i].expected = "-9223372036854775808";
+ i++; si_test[i].num = -0x7FFFFFFFFFFFFFFE -1; si_test[i].expected = "-9223372036854775807";
+ i++; si_test[i].num = -0x7FFFFFFFFFFFFFFD -1; si_test[i].expected = "-9223372036854775806";
+ i++; si_test[i].num = -0x7FFFFFFF00000000 -1; si_test[i].expected = "-9223372032559808513";
+ i++; si_test[i].num = -0x000000007FFFFFFF -1; si_test[i].expected = "-2147483648";
+
+ i++; si_test[i].num = -0x7FFF000000000000 -1; si_test[i].expected = "-9223090561878065153";
+ i++; si_test[i].num = -0x00007FFF00000000 -1; si_test[i].expected = "-140733193388033";
+ i++; si_test[i].num = -0x000000007FFF0000 -1; si_test[i].expected = "-2147418113";
+ i++; si_test[i].num = -0x0000000000007FFF -1; si_test[i].expected = "-32768";
+
+ i++; si_test[i].num = -0x7F00000000000000 -1; si_test[i].expected = "-9151314442816847873";
+ i++; si_test[i].num = -0x007F000000000000 -1; si_test[i].expected = "-35747322042253313";
+ i++; si_test[i].num = -0x00007F0000000000 -1; si_test[i].expected = "-139637976727553";
+ i++; si_test[i].num = -0x0000007F00000000 -1; si_test[i].expected = "-545460846593";
+ i++; si_test[i].num = -0x000000007F000000 -1; si_test[i].expected = "-2130706433";
+ i++; si_test[i].num = -0x00000000007F0000 -1; si_test[i].expected = "-8323073";
+ i++; si_test[i].num = -0x0000000000007F00 -1; si_test[i].expected = "-32513";
+ i++; si_test[i].num = -0x000000000000007F -1; si_test[i].expected = "-128";
+
+ i++; si_test[i].num = -0x7000000000000000 -1; si_test[i].expected = "-8070450532247928833";
+ i++; si_test[i].num = -0x0700000000000000 -1; si_test[i].expected = "-504403158265495553";
+ i++; si_test[i].num = -0x0070000000000000 -1; si_test[i].expected = "-31525197391593473";
+ i++; si_test[i].num = -0x0007000000000000 -1; si_test[i].expected = "-1970324836974593";
+ i++; si_test[i].num = -0x0000700000000000 -1; si_test[i].expected = "-123145302310913";
+ i++; si_test[i].num = -0x0000070000000000 -1; si_test[i].expected = "-7696581394433";
+ i++; si_test[i].num = -0x0000007000000000 -1; si_test[i].expected = "-481036337153";
+ i++; si_test[i].num = -0x0000000700000000 -1; si_test[i].expected = "-30064771073";
+ i++; si_test[i].num = -0x0000000070000000 -1; si_test[i].expected = "-1879048193";
+ i++; si_test[i].num = -0x0000000007000000 -1; si_test[i].expected = "-117440513";
+ i++; si_test[i].num = -0x0000000000700000 -1; si_test[i].expected = "-7340033";
+ i++; si_test[i].num = -0x0000000000070000 -1; si_test[i].expected = "-458753";
+ i++; si_test[i].num = -0x0000000000007000 -1; si_test[i].expected = "-28673";
+ i++; si_test[i].num = -0x0000000000000700 -1; si_test[i].expected = "-1793";
+ i++; si_test[i].num = -0x0000000000000070 -1; si_test[i].expected = "-113";
+ i++; si_test[i].num = -0x0000000000000007 -1; si_test[i].expected = "-8";
+
+ i++; si_test[i].num = 0x0000000000000000 -1; si_test[i].expected = "-1";
+
+ num_sint_tests = i;
+
+#endif
+
+ for(i=1; i<=num_sint_tests; i++) {
+
+ for(j=0; j<BUFSZ; j++)
+ si_test[i].result[j] = 'X';
+ si_test[i].result[BUFSZ-1] = '\0';
+
+ (void)curl_msprintf(si_test[i].result, "%d", si_test[i].num);
+
+ if(memcmp(si_test[i].result,
+ si_test[i].expected,
+ strlen(si_test[i].expected))) {
+ printf("signed int test #%.2d: Failed (Expected: %s Got: %s)\n",
+ i, si_test[i].expected, si_test[i].result);
+ failed++;
+ }
+
+ }
+
+ if(!failed)
+ printf("All curl_mprintf() signed int tests OK!\n");
+ else
+ printf("Some curl_mprintf() signed int tests Failed!\n");
+
+ return failed;
+}
+
+
+static int test_unsigned_long_formatting(void)
+{
+ int i, j;
+ int num_ulong_tests;
+ int failed = 0;
+
+#if (CURL_SIZEOF_LONG == 2)
+
+ i=1; ul_test[i].num = 0xFFFFUL; ul_test[i].expected = "65535";
+ i++; ul_test[i].num = 0xFF00UL; ul_test[i].expected = "65280";
+ i++; ul_test[i].num = 0x00FFUL; ul_test[i].expected = "255";
+
+ i++; ul_test[i].num = 0xF000UL; ul_test[i].expected = "61440";
+ i++; ul_test[i].num = 0x0F00UL; ul_test[i].expected = "3840";
+ i++; ul_test[i].num = 0x00F0UL; ul_test[i].expected = "240";
+ i++; ul_test[i].num = 0x000FUL; ul_test[i].expected = "15";
+
+ i++; ul_test[i].num = 0xC000UL; ul_test[i].expected = "49152";
+ i++; ul_test[i].num = 0x0C00UL; ul_test[i].expected = "3072";
+ i++; ul_test[i].num = 0x00C0UL; ul_test[i].expected = "192";
+ i++; ul_test[i].num = 0x000CUL; ul_test[i].expected = "12";
+
+ i++; ul_test[i].num = 0x0001UL; ul_test[i].expected = "1";
+ i++; ul_test[i].num = 0x0000UL; ul_test[i].expected = "0";
+
+ num_ulong_tests = i;
+
+#elif (CURL_SIZEOF_LONG == 4)
+
+ i=1; ul_test[i].num = 0xFFFFFFFFUL; ul_test[i].expected = "4294967295";
+ i++; ul_test[i].num = 0xFFFF0000UL; ul_test[i].expected = "4294901760";
+ i++; ul_test[i].num = 0x0000FFFFUL; ul_test[i].expected = "65535";
+
+ i++; ul_test[i].num = 0xFF000000UL; ul_test[i].expected = "4278190080";
+ i++; ul_test[i].num = 0x00FF0000UL; ul_test[i].expected = "16711680";
+ i++; ul_test[i].num = 0x0000FF00UL; ul_test[i].expected = "65280";
+ i++; ul_test[i].num = 0x000000FFUL; ul_test[i].expected = "255";
+
+ i++; ul_test[i].num = 0xF0000000UL; ul_test[i].expected = "4026531840";
+ i++; ul_test[i].num = 0x0F000000UL; ul_test[i].expected = "251658240";
+ i++; ul_test[i].num = 0x00F00000UL; ul_test[i].expected = "15728640";
+ i++; ul_test[i].num = 0x000F0000UL; ul_test[i].expected = "983040";
+ i++; ul_test[i].num = 0x0000F000UL; ul_test[i].expected = "61440";
+ i++; ul_test[i].num = 0x00000F00UL; ul_test[i].expected = "3840";
+ i++; ul_test[i].num = 0x000000F0UL; ul_test[i].expected = "240";
+ i++; ul_test[i].num = 0x0000000FUL; ul_test[i].expected = "15";
+
+ i++; ul_test[i].num = 0xC0000000UL; ul_test[i].expected = "3221225472";
+ i++; ul_test[i].num = 0x0C000000UL; ul_test[i].expected = "201326592";
+ i++; ul_test[i].num = 0x00C00000UL; ul_test[i].expected = "12582912";
+ i++; ul_test[i].num = 0x000C0000UL; ul_test[i].expected = "786432";
+ i++; ul_test[i].num = 0x0000C000UL; ul_test[i].expected = "49152";
+ i++; ul_test[i].num = 0x00000C00UL; ul_test[i].expected = "3072";
+ i++; ul_test[i].num = 0x000000C0UL; ul_test[i].expected = "192";
+ i++; ul_test[i].num = 0x0000000CUL; ul_test[i].expected = "12";
+
+ i++; ul_test[i].num = 0x00000001UL; ul_test[i].expected = "1";
+ i++; ul_test[i].num = 0x00000000UL; ul_test[i].expected = "0";
+
+ num_ulong_tests = i;
+
+#elif (CURL_SIZEOF_LONG == 8)
+
+ i=1; ul_test[i].num = 0xFFFFFFFFFFFFFFFFUL; ul_test[i].expected = "18446744073709551615";
+ i++; ul_test[i].num = 0xFFFFFFFF00000000UL; ul_test[i].expected = "18446744069414584320";
+ i++; ul_test[i].num = 0x00000000FFFFFFFFUL; ul_test[i].expected = "4294967295";
+
+ i++; ul_test[i].num = 0xFFFF000000000000UL; ul_test[i].expected = "18446462598732840960";
+ i++; ul_test[i].num = 0x0000FFFF00000000UL; ul_test[i].expected = "281470681743360";
+ i++; ul_test[i].num = 0x00000000FFFF0000UL; ul_test[i].expected = "4294901760";
+ i++; ul_test[i].num = 0x000000000000FFFFUL; ul_test[i].expected = "65535";
+
+ i++; ul_test[i].num = 0xFF00000000000000UL; ul_test[i].expected = "18374686479671623680";
+ i++; ul_test[i].num = 0x00FF000000000000UL; ul_test[i].expected = "71776119061217280";
+ i++; ul_test[i].num = 0x0000FF0000000000UL; ul_test[i].expected = "280375465082880";
+ i++; ul_test[i].num = 0x000000FF00000000UL; ul_test[i].expected = "1095216660480";
+ i++; ul_test[i].num = 0x00000000FF000000UL; ul_test[i].expected = "4278190080";
+ i++; ul_test[i].num = 0x0000000000FF0000UL; ul_test[i].expected = "16711680";
+ i++; ul_test[i].num = 0x000000000000FF00UL; ul_test[i].expected = "65280";
+ i++; ul_test[i].num = 0x00000000000000FFUL; ul_test[i].expected = "255";
+
+ i++; ul_test[i].num = 0xF000000000000000UL; ul_test[i].expected = "17293822569102704640";
+ i++; ul_test[i].num = 0x0F00000000000000UL; ul_test[i].expected = "1080863910568919040";
+ i++; ul_test[i].num = 0x00F0000000000000UL; ul_test[i].expected = "67553994410557440";
+ i++; ul_test[i].num = 0x000F000000000000UL; ul_test[i].expected = "4222124650659840";
+ i++; ul_test[i].num = 0x0000F00000000000UL; ul_test[i].expected = "263882790666240";
+ i++; ul_test[i].num = 0x00000F0000000000UL; ul_test[i].expected = "16492674416640";
+ i++; ul_test[i].num = 0x000000F000000000UL; ul_test[i].expected = "1030792151040";
+ i++; ul_test[i].num = 0x0000000F00000000UL; ul_test[i].expected = "64424509440";
+ i++; ul_test[i].num = 0x00000000F0000000UL; ul_test[i].expected = "4026531840";
+ i++; ul_test[i].num = 0x000000000F000000UL; ul_test[i].expected = "251658240";
+ i++; ul_test[i].num = 0x0000000000F00000UL; ul_test[i].expected = "15728640";
+ i++; ul_test[i].num = 0x00000000000F0000UL; ul_test[i].expected = "983040";
+ i++; ul_test[i].num = 0x000000000000F000UL; ul_test[i].expected = "61440";
+ i++; ul_test[i].num = 0x0000000000000F00UL; ul_test[i].expected = "3840";
+ i++; ul_test[i].num = 0x00000000000000F0UL; ul_test[i].expected = "240";
+ i++; ul_test[i].num = 0x000000000000000FUL; ul_test[i].expected = "15";
+
+ i++; ul_test[i].num = 0xC000000000000000UL; ul_test[i].expected = "13835058055282163712";
+ i++; ul_test[i].num = 0x0C00000000000000UL; ul_test[i].expected = "864691128455135232";
+ i++; ul_test[i].num = 0x00C0000000000000UL; ul_test[i].expected = "54043195528445952";
+ i++; ul_test[i].num = 0x000C000000000000UL; ul_test[i].expected = "3377699720527872";
+ i++; ul_test[i].num = 0x0000C00000000000UL; ul_test[i].expected = "211106232532992";
+ i++; ul_test[i].num = 0x00000C0000000000UL; ul_test[i].expected = "13194139533312";
+ i++; ul_test[i].num = 0x000000C000000000UL; ul_test[i].expected = "824633720832";
+ i++; ul_test[i].num = 0x0000000C00000000UL; ul_test[i].expected = "51539607552";
+ i++; ul_test[i].num = 0x00000000C0000000UL; ul_test[i].expected = "3221225472";
+ i++; ul_test[i].num = 0x000000000C000000UL; ul_test[i].expected = "201326592";
+ i++; ul_test[i].num = 0x0000000000C00000UL; ul_test[i].expected = "12582912";
+ i++; ul_test[i].num = 0x00000000000C0000UL; ul_test[i].expected = "786432";
+ i++; ul_test[i].num = 0x000000000000C000UL; ul_test[i].expected = "49152";
+ i++; ul_test[i].num = 0x0000000000000C00UL; ul_test[i].expected = "3072";
+ i++; ul_test[i].num = 0x00000000000000C0UL; ul_test[i].expected = "192";
+ i++; ul_test[i].num = 0x000000000000000CUL; ul_test[i].expected = "12";
+
+ i++; ul_test[i].num = 0x00000001UL; ul_test[i].expected = "1";
+ i++; ul_test[i].num = 0x00000000UL; ul_test[i].expected = "0";
+
+ num_ulong_tests = i;
+
+#endif
+
+ for(i=1; i<=num_ulong_tests; i++) {
+
+ for(j=0; j<BUFSZ; j++)
+ ul_test[i].result[j] = 'X';
+ ul_test[i].result[BUFSZ-1] = '\0';
+
+ (void)curl_msprintf(ul_test[i].result, "%lu", ul_test[i].num);
+
+ if(memcmp(ul_test[i].result,
+ ul_test[i].expected,
+ strlen(ul_test[i].expected))) {
+ printf("unsigned long test #%.2d: Failed (Expected: %s Got: %s)\n",
+ i, ul_test[i].expected, ul_test[i].result);
+ failed++;
+ }
+
+ }
+
+ if(!failed)
+ printf("All curl_mprintf() unsigned long tests OK!\n");
+ else
+ printf("Some curl_mprintf() unsigned long tests Failed!\n");
+
+ return failed;
+}
+
+
+static int test_signed_long_formatting(void)
+{
+ int i, j;
+ int num_slong_tests;
+ int failed = 0;
+
+#if (CURL_SIZEOF_LONG == 2)
+
+ i=1; sl_test[i].num = 0x7FFFL; sl_test[i].expected = "32767";
+ i++; sl_test[i].num = 0x7FFEL; sl_test[i].expected = "32766";
+ i++; sl_test[i].num = 0x7FFDL; sl_test[i].expected = "32765";
+ i++; sl_test[i].num = 0x7F00L; sl_test[i].expected = "32512";
+ i++; sl_test[i].num = 0x07F0L; sl_test[i].expected = "2032";
+ i++; sl_test[i].num = 0x007FL; sl_test[i].expected = "127";
+
+ i++; sl_test[i].num = 0x7000L; sl_test[i].expected = "28672";
+ i++; sl_test[i].num = 0x0700L; sl_test[i].expected = "1792";
+ i++; sl_test[i].num = 0x0070L; sl_test[i].expected = "112";
+ i++; sl_test[i].num = 0x0007L; sl_test[i].expected = "7";
+
+ i++; sl_test[i].num = 0x5000L; sl_test[i].expected = "20480";
+ i++; sl_test[i].num = 0x0500L; sl_test[i].expected = "1280";
+ i++; sl_test[i].num = 0x0050L; sl_test[i].expected = "80";
+ i++; sl_test[i].num = 0x0005L; sl_test[i].expected = "5";
+
+ i++; sl_test[i].num = 0x0001L; sl_test[i].expected = "1";
+ i++; sl_test[i].num = 0x0000L; sl_test[i].expected = "0";
+
+ i++; sl_test[i].num = -0x7FFFL -1L; sl_test[i].expected = "-32768";
+ i++; sl_test[i].num = -0x7FFEL -1L; sl_test[i].expected = "-32767";
+ i++; sl_test[i].num = -0x7FFDL -1L; sl_test[i].expected = "-32766";
+ i++; sl_test[i].num = -0x7F00L -1L; sl_test[i].expected = "-32513";
+ i++; sl_test[i].num = -0x07F0L -1L; sl_test[i].expected = "-2033";
+ i++; sl_test[i].num = -0x007FL -1L; sl_test[i].expected = "-128";
+
+ i++; sl_test[i].num = -0x7000L -1L; sl_test[i].expected = "-28673";
+ i++; sl_test[i].num = -0x0700L -1L; sl_test[i].expected = "-1793";
+ i++; sl_test[i].num = -0x0070L -1L; sl_test[i].expected = "-113";
+ i++; sl_test[i].num = -0x0007L -1L; sl_test[i].expected = "-8";
+
+ i++; sl_test[i].num = -0x5000L -1L; sl_test[i].expected = "-20481";
+ i++; sl_test[i].num = -0x0500L -1L; sl_test[i].expected = "-1281";
+ i++; sl_test[i].num = -0x0050L -1L; sl_test[i].expected = "-81";
+ i++; sl_test[i].num = -0x0005L -1L; sl_test[i].expected = "-6";
+
+ i++; sl_test[i].num = 0x0000L -1L; sl_test[i].expected = "-1";
+
+ num_slong_tests = i;
+
+#elif (CURL_SIZEOF_LONG == 4)
+
+ i=1; sl_test[i].num = 0x7FFFFFFFL; sl_test[i].expected = "2147483647";
+ i++; sl_test[i].num = 0x7FFFFFFEL; sl_test[i].expected = "2147483646";
+ i++; sl_test[i].num = 0x7FFFFFFDL; sl_test[i].expected = "2147483645";
+ i++; sl_test[i].num = 0x7FFF0000L; sl_test[i].expected = "2147418112";
+ i++; sl_test[i].num = 0x00007FFFL; sl_test[i].expected = "32767";
+
+ i++; sl_test[i].num = 0x7F000000L; sl_test[i].expected = "2130706432";
+ i++; sl_test[i].num = 0x007F0000L; sl_test[i].expected = "8323072";
+ i++; sl_test[i].num = 0x00007F00L; sl_test[i].expected = "32512";
+ i++; sl_test[i].num = 0x0000007FL; sl_test[i].expected = "127";
+
+ i++; sl_test[i].num = 0x70000000L; sl_test[i].expected = "1879048192";
+ i++; sl_test[i].num = 0x07000000L; sl_test[i].expected = "117440512";
+ i++; sl_test[i].num = 0x00700000L; sl_test[i].expected = "7340032";
+ i++; sl_test[i].num = 0x00070000L; sl_test[i].expected = "458752";
+ i++; sl_test[i].num = 0x00007000L; sl_test[i].expected = "28672";
+ i++; sl_test[i].num = 0x00000700L; sl_test[i].expected = "1792";
+ i++; sl_test[i].num = 0x00000070L; sl_test[i].expected = "112";
+ i++; sl_test[i].num = 0x00000007L; sl_test[i].expected = "7";
+
+ i++; sl_test[i].num = 0x50000000L; sl_test[i].expected = "1342177280";
+ i++; sl_test[i].num = 0x05000000L; sl_test[i].expected = "83886080";
+ i++; sl_test[i].num = 0x00500000L; sl_test[i].expected = "5242880";
+ i++; sl_test[i].num = 0x00050000L; sl_test[i].expected = "327680";
+ i++; sl_test[i].num = 0x00005000L; sl_test[i].expected = "20480";
+ i++; sl_test[i].num = 0x00000500L; sl_test[i].expected = "1280";
+ i++; sl_test[i].num = 0x00000050L; sl_test[i].expected = "80";
+ i++; sl_test[i].num = 0x00000005L; sl_test[i].expected = "5";
+
+ i++; sl_test[i].num = 0x00000001L; sl_test[i].expected = "1";
+ i++; sl_test[i].num = 0x00000000L; sl_test[i].expected = "0";
+
+ i++; sl_test[i].num = -0x7FFFFFFFL -1L; sl_test[i].expected = "-2147483648";
+ i++; sl_test[i].num = -0x7FFFFFFEL -1L; sl_test[i].expected = "-2147483647";
+ i++; sl_test[i].num = -0x7FFFFFFDL -1L; sl_test[i].expected = "-2147483646";
+ i++; sl_test[i].num = -0x7FFF0000L -1L; sl_test[i].expected = "-2147418113";
+ i++; sl_test[i].num = -0x00007FFFL -1L; sl_test[i].expected = "-32768";
+
+ i++; sl_test[i].num = -0x7F000000L -1L; sl_test[i].expected = "-2130706433";
+ i++; sl_test[i].num = -0x007F0000L -1L; sl_test[i].expected = "-8323073";
+ i++; sl_test[i].num = -0x00007F00L -1L; sl_test[i].expected = "-32513";
+ i++; sl_test[i].num = -0x0000007FL -1L; sl_test[i].expected = "-128";
+
+ i++; sl_test[i].num = -0x70000000L -1L; sl_test[i].expected = "-1879048193";
+ i++; sl_test[i].num = -0x07000000L -1L; sl_test[i].expected = "-117440513";
+ i++; sl_test[i].num = -0x00700000L -1L; sl_test[i].expected = "-7340033";
+ i++; sl_test[i].num = -0x00070000L -1L; sl_test[i].expected = "-458753";
+ i++; sl_test[i].num = -0x00007000L -1L; sl_test[i].expected = "-28673";
+ i++; sl_test[i].num = -0x00000700L -1L; sl_test[i].expected = "-1793";
+ i++; sl_test[i].num = -0x00000070L -1L; sl_test[i].expected = "-113";
+ i++; sl_test[i].num = -0x00000007L -1L; sl_test[i].expected = "-8";
+
+ i++; sl_test[i].num = -0x50000000L -1L; sl_test[i].expected = "-1342177281";
+ i++; sl_test[i].num = -0x05000000L -1L; sl_test[i].expected = "-83886081";
+ i++; sl_test[i].num = -0x00500000L -1L; sl_test[i].expected = "-5242881";
+ i++; sl_test[i].num = -0x00050000L -1L; sl_test[i].expected = "-327681";
+ i++; sl_test[i].num = -0x00005000L -1L; sl_test[i].expected = "-20481";
+ i++; sl_test[i].num = -0x00000500L -1L; sl_test[i].expected = "-1281";
+ i++; sl_test[i].num = -0x00000050L -1L; sl_test[i].expected = "-81";
+ i++; sl_test[i].num = -0x00000005L -1L; sl_test[i].expected = "-6";
+
+ i++; sl_test[i].num = 0x00000000L -1L; sl_test[i].expected = "-1";
+
+ num_slong_tests = i;
+
+#elif (CURL_SIZEOF_LONG == 8)
+
+ i=1; sl_test[i].num = 0x7FFFFFFFFFFFFFFFL; sl_test[i].expected = "9223372036854775807";
+ i++; sl_test[i].num = 0x7FFFFFFFFFFFFFFEL; sl_test[i].expected = "9223372036854775806";
+ i++; sl_test[i].num = 0x7FFFFFFFFFFFFFFDL; sl_test[i].expected = "9223372036854775805";
+ i++; sl_test[i].num = 0x7FFFFFFF00000000L; sl_test[i].expected = "9223372032559808512";
+ i++; sl_test[i].num = 0x000000007FFFFFFFL; sl_test[i].expected = "2147483647";
+
+ i++; sl_test[i].num = 0x7FFF000000000000L; sl_test[i].expected = "9223090561878065152";
+ i++; sl_test[i].num = 0x00007FFF00000000L; sl_test[i].expected = "140733193388032";
+ i++; sl_test[i].num = 0x000000007FFF0000L; sl_test[i].expected = "2147418112";
+ i++; sl_test[i].num = 0x0000000000007FFFL; sl_test[i].expected = "32767";
+
+ i++; sl_test[i].num = 0x7F00000000000000L; sl_test[i].expected = "9151314442816847872";
+ i++; sl_test[i].num = 0x007F000000000000L; sl_test[i].expected = "35747322042253312";
+ i++; sl_test[i].num = 0x00007F0000000000L; sl_test[i].expected = "139637976727552";
+ i++; sl_test[i].num = 0x0000007F00000000L; sl_test[i].expected = "545460846592";
+ i++; sl_test[i].num = 0x000000007F000000L; sl_test[i].expected = "2130706432";
+ i++; sl_test[i].num = 0x00000000007F0000L; sl_test[i].expected = "8323072";
+ i++; sl_test[i].num = 0x0000000000007F00L; sl_test[i].expected = "32512";
+ i++; sl_test[i].num = 0x000000000000007FL; sl_test[i].expected = "127";
+
+ i++; sl_test[i].num = 0x7000000000000000L; sl_test[i].expected = "8070450532247928832";
+ i++; sl_test[i].num = 0x0700000000000000L; sl_test[i].expected = "504403158265495552";
+ i++; sl_test[i].num = 0x0070000000000000L; sl_test[i].expected = "31525197391593472";
+ i++; sl_test[i].num = 0x0007000000000000L; sl_test[i].expected = "1970324836974592";
+ i++; sl_test[i].num = 0x0000700000000000L; sl_test[i].expected = "123145302310912";
+ i++; sl_test[i].num = 0x0000070000000000L; sl_test[i].expected = "7696581394432";
+ i++; sl_test[i].num = 0x0000007000000000L; sl_test[i].expected = "481036337152";
+ i++; sl_test[i].num = 0x0000000700000000L; sl_test[i].expected = "30064771072";
+ i++; sl_test[i].num = 0x0000000070000000L; sl_test[i].expected = "1879048192";
+ i++; sl_test[i].num = 0x0000000007000000L; sl_test[i].expected = "117440512";
+ i++; sl_test[i].num = 0x0000000000700000L; sl_test[i].expected = "7340032";
+ i++; sl_test[i].num = 0x0000000000070000L; sl_test[i].expected = "458752";
+ i++; sl_test[i].num = 0x0000000000007000L; sl_test[i].expected = "28672";
+ i++; sl_test[i].num = 0x0000000000000700L; sl_test[i].expected = "1792";
+ i++; sl_test[i].num = 0x0000000000000070L; sl_test[i].expected = "112";
+ i++; sl_test[i].num = 0x0000000000000007L; sl_test[i].expected = "7";
+
+ i++; sl_test[i].num = 0x0000000000000001L; sl_test[i].expected = "1";
+ i++; sl_test[i].num = 0x0000000000000000L; sl_test[i].expected = "0";
+
+ i++; sl_test[i].num = -0x7FFFFFFFFFFFFFFFL -1L; sl_test[i].expected = "-9223372036854775808";
+ i++; sl_test[i].num = -0x7FFFFFFFFFFFFFFEL -1L; sl_test[i].expected = "-9223372036854775807";
+ i++; sl_test[i].num = -0x7FFFFFFFFFFFFFFDL -1L; sl_test[i].expected = "-9223372036854775806";
+ i++; sl_test[i].num = -0x7FFFFFFF00000000L -1L; sl_test[i].expected = "-9223372032559808513";
+ i++; sl_test[i].num = -0x000000007FFFFFFFL -1L; sl_test[i].expected = "-2147483648";
+
+ i++; sl_test[i].num = -0x7FFF000000000000L -1L; sl_test[i].expected = "-9223090561878065153";
+ i++; sl_test[i].num = -0x00007FFF00000000L -1L; sl_test[i].expected = "-140733193388033";
+ i++; sl_test[i].num = -0x000000007FFF0000L -1L; sl_test[i].expected = "-2147418113";
+ i++; sl_test[i].num = -0x0000000000007FFFL -1L; sl_test[i].expected = "-32768";
+
+ i++; sl_test[i].num = -0x7F00000000000000L -1L; sl_test[i].expected = "-9151314442816847873";
+ i++; sl_test[i].num = -0x007F000000000000L -1L; sl_test[i].expected = "-35747322042253313";
+ i++; sl_test[i].num = -0x00007F0000000000L -1L; sl_test[i].expected = "-139637976727553";
+ i++; sl_test[i].num = -0x0000007F00000000L -1L; sl_test[i].expected = "-545460846593";
+ i++; sl_test[i].num = -0x000000007F000000L -1L; sl_test[i].expected = "-2130706433";
+ i++; sl_test[i].num = -0x00000000007F0000L -1L; sl_test[i].expected = "-8323073";
+ i++; sl_test[i].num = -0x0000000000007F00L -1L; sl_test[i].expected = "-32513";
+ i++; sl_test[i].num = -0x000000000000007FL -1L; sl_test[i].expected = "-128";
+
+ i++; sl_test[i].num = -0x7000000000000000L -1L; sl_test[i].expected = "-8070450532247928833";
+ i++; sl_test[i].num = -0x0700000000000000L -1L; sl_test[i].expected = "-504403158265495553";
+ i++; sl_test[i].num = -0x0070000000000000L -1L; sl_test[i].expected = "-31525197391593473";
+ i++; sl_test[i].num = -0x0007000000000000L -1L; sl_test[i].expected = "-1970324836974593";
+ i++; sl_test[i].num = -0x0000700000000000L -1L; sl_test[i].expected = "-123145302310913";
+ i++; sl_test[i].num = -0x0000070000000000L -1L; sl_test[i].expected = "-7696581394433";
+ i++; sl_test[i].num = -0x0000007000000000L -1L; sl_test[i].expected = "-481036337153";
+ i++; sl_test[i].num = -0x0000000700000000L -1L; sl_test[i].expected = "-30064771073";
+ i++; sl_test[i].num = -0x0000000070000000L -1L; sl_test[i].expected = "-1879048193";
+ i++; sl_test[i].num = -0x0000000007000000L -1L; sl_test[i].expected = "-117440513";
+ i++; sl_test[i].num = -0x0000000000700000L -1L; sl_test[i].expected = "-7340033";
+ i++; sl_test[i].num = -0x0000000000070000L -1L; sl_test[i].expected = "-458753";
+ i++; sl_test[i].num = -0x0000000000007000L -1L; sl_test[i].expected = "-28673";
+ i++; sl_test[i].num = -0x0000000000000700L -1L; sl_test[i].expected = "-1793";
+ i++; sl_test[i].num = -0x0000000000000070L -1L; sl_test[i].expected = "-113";
+ i++; sl_test[i].num = -0x0000000000000007L -1L; sl_test[i].expected = "-8";
+
+ i++; sl_test[i].num = 0x0000000000000000L -1L; sl_test[i].expected = "-1";
+
+ num_slong_tests = i;
+
+#endif
+
+ for(i=1; i<=num_slong_tests; i++) {
+
+ for(j=0; j<BUFSZ; j++)
+ sl_test[i].result[j] = 'X';
+ sl_test[i].result[BUFSZ-1] = '\0';
+
+ (void)curl_msprintf(sl_test[i].result, "%ld", sl_test[i].num);
+
+ if(memcmp(sl_test[i].result,
+ sl_test[i].expected,
+ strlen(sl_test[i].expected))) {
+ printf("signed long test #%.2d: Failed (Expected: %s Got: %s)\n",
+ i, sl_test[i].expected, sl_test[i].result);
+ failed++;
+ }
+
+ }
+
+ if(!failed)
+ printf("All curl_mprintf() signed long tests OK!\n");
+ else
+ printf("Some curl_mprintf() signed long tests Failed!\n");
+
+ return failed;
+}
+
+
+static int test_curl_off_t_formatting(void)
+{
+ int i, j;
+ int num_cofft_tests;
+ int failed = 0;
+
+#if (CURL_SIZEOF_CURL_OFF_T == 2)
+
+ i=1; co_test[i].num = MPRNT_OFF_T_C(0x7FFF); co_test[i].expected = "32767";
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x7FFE); co_test[i].expected = "32766";
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x7FFD); co_test[i].expected = "32765";
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x7F00); co_test[i].expected = "32512";
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x07F0); co_test[i].expected = "2032";
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x007F); co_test[i].expected = "127";
+
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x7000); co_test[i].expected = "28672";
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x0700); co_test[i].expected = "1792";
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x0070); co_test[i].expected = "112";
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x0007); co_test[i].expected = "7";
+
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x5000); co_test[i].expected = "20480";
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x0500); co_test[i].expected = "1280";
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x0050); co_test[i].expected = "80";
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x0005); co_test[i].expected = "5";
+
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x0001); co_test[i].expected = "1";
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x0000); co_test[i].expected = "0";
+
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x7FFF) -MPRNT_OFF_T_C(1); co_test[i].expected = "-32768";
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x7FFE) -MPRNT_OFF_T_C(1); co_test[i].expected = "-32767";
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x7FFD) -MPRNT_OFF_T_C(1); co_test[i].expected = "-32766";
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x7F00) -MPRNT_OFF_T_C(1); co_test[i].expected = "-32513";
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x07F0) -MPRNT_OFF_T_C(1); co_test[i].expected = "-2033";
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x007F) -MPRNT_OFF_T_C(1); co_test[i].expected = "-128";
+
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x7000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-28673";
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x0700) -MPRNT_OFF_T_C(1); co_test[i].expected = "-1793";
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x0070) -MPRNT_OFF_T_C(1); co_test[i].expected = "-113";
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x0007) -MPRNT_OFF_T_C(1); co_test[i].expected = "-8";
+
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x5000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-20481";
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x0500) -MPRNT_OFF_T_C(1); co_test[i].expected = "-1281";
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x0050) -MPRNT_OFF_T_C(1); co_test[i].expected = "-81";
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x0005) -MPRNT_OFF_T_C(1); co_test[i].expected = "-6";
+
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x0000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-1";
+
+ num_cofft_tests = i;
+
+#elif (CURL_SIZEOF_CURL_OFF_T == 4)
+
+ i=1; co_test[i].num = MPRNT_OFF_T_C(0x7FFFFFFF); co_test[i].expected = "2147483647";
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x7FFFFFFE); co_test[i].expected = "2147483646";
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x7FFFFFFD); co_test[i].expected = "2147483645";
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x7FFF0000); co_test[i].expected = "2147418112";
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x00007FFF); co_test[i].expected = "32767";
+
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x7F000000); co_test[i].expected = "2130706432";
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x007F0000); co_test[i].expected = "8323072";
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x00007F00); co_test[i].expected = "32512";
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x0000007F); co_test[i].expected = "127";
+
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x70000000); co_test[i].expected = "1879048192";
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x07000000); co_test[i].expected = "117440512";
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x00700000); co_test[i].expected = "7340032";
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x00070000); co_test[i].expected = "458752";
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x00007000); co_test[i].expected = "28672";
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x00000700); co_test[i].expected = "1792";
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x00000070); co_test[i].expected = "112";
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x00000007); co_test[i].expected = "7";
+
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x50000000); co_test[i].expected = "1342177280";
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x05000000); co_test[i].expected = "83886080";
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x00500000); co_test[i].expected = "5242880";
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x00050000); co_test[i].expected = "327680";
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x00005000); co_test[i].expected = "20480";
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x00000500); co_test[i].expected = "1280";
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x00000050); co_test[i].expected = "80";
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x00000005); co_test[i].expected = "5";
+
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x00000001); co_test[i].expected = "1";
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x00000000); co_test[i].expected = "0";
+
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x7FFFFFFF) -MPRNT_OFF_T_C(1); co_test[i].expected = "-2147483648";
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x7FFFFFFE) -MPRNT_OFF_T_C(1); co_test[i].expected = "-2147483647";
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x7FFFFFFD) -MPRNT_OFF_T_C(1); co_test[i].expected = "-2147483646";
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x7FFF0000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-2147418113";
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x00007FFF) -MPRNT_OFF_T_C(1); co_test[i].expected = "-32768";
+
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x7F000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-2130706433";
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x007F0000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-8323073";
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x00007F00) -MPRNT_OFF_T_C(1); co_test[i].expected = "-32513";
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x0000007F) -MPRNT_OFF_T_C(1); co_test[i].expected = "-128";
+
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x70000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-1879048193";
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x07000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-117440513";
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x00700000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-7340033";
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x00070000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-458753";
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x00007000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-28673";
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x00000700) -MPRNT_OFF_T_C(1); co_test[i].expected = "-1793";
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x00000070) -MPRNT_OFF_T_C(1); co_test[i].expected = "-113";
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x00000007) -MPRNT_OFF_T_C(1); co_test[i].expected = "-8";
+
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x50000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-1342177281";
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x05000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-83886081";
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x00500000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-5242881";
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x00050000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-327681";
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x00005000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-20481";
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x00000500) -MPRNT_OFF_T_C(1); co_test[i].expected = "-1281";
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x00000050) -MPRNT_OFF_T_C(1); co_test[i].expected = "-81";
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x00000005) -MPRNT_OFF_T_C(1); co_test[i].expected = "-6";
+
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x00000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-1";
+
+ num_cofft_tests = i;
+
+#elif (CURL_SIZEOF_CURL_OFF_T == 8)
+
+ i=1; co_test[i].num = MPRNT_OFF_T_C(0x7FFFFFFFFFFFFFFF); co_test[i].expected = "9223372036854775807";
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x7FFFFFFFFFFFFFFE); co_test[i].expected = "9223372036854775806";
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x7FFFFFFFFFFFFFFD); co_test[i].expected = "9223372036854775805";
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x7FFFFFFF00000000); co_test[i].expected = "9223372032559808512";
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x000000007FFFFFFF); co_test[i].expected = "2147483647";
+
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x7FFF000000000000); co_test[i].expected = "9223090561878065152";
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x00007FFF00000000); co_test[i].expected = "140733193388032";
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x000000007FFF0000); co_test[i].expected = "2147418112";
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x0000000000007FFF); co_test[i].expected = "32767";
+
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x7F00000000000000); co_test[i].expected = "9151314442816847872";
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x007F000000000000); co_test[i].expected = "35747322042253312";
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x00007F0000000000); co_test[i].expected = "139637976727552";
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x0000007F00000000); co_test[i].expected = "545460846592";
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x000000007F000000); co_test[i].expected = "2130706432";
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x00000000007F0000); co_test[i].expected = "8323072";
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x0000000000007F00); co_test[i].expected = "32512";
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x000000000000007F); co_test[i].expected = "127";
+
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x7000000000000000); co_test[i].expected = "8070450532247928832";
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x0700000000000000); co_test[i].expected = "504403158265495552";
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x0070000000000000); co_test[i].expected = "31525197391593472";
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x0007000000000000); co_test[i].expected = "1970324836974592";
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x0000700000000000); co_test[i].expected = "123145302310912";
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x0000070000000000); co_test[i].expected = "7696581394432";
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x0000007000000000); co_test[i].expected = "481036337152";
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x0000000700000000); co_test[i].expected = "30064771072";
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x0000000070000000); co_test[i].expected = "1879048192";
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x0000000007000000); co_test[i].expected = "117440512";
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x0000000000700000); co_test[i].expected = "7340032";
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x0000000000070000); co_test[i].expected = "458752";
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x0000000000007000); co_test[i].expected = "28672";
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x0000000000000700); co_test[i].expected = "1792";
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x0000000000000070); co_test[i].expected = "112";
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x0000000000000007); co_test[i].expected = "7";
+
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x0000000000000001); co_test[i].expected = "1";
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x0000000000000000); co_test[i].expected = "0";
+
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x7FFFFFFFFFFFFFFF) -MPRNT_OFF_T_C(1); co_test[i].expected = "-9223372036854775808";
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x7FFFFFFFFFFFFFFE) -MPRNT_OFF_T_C(1); co_test[i].expected = "-9223372036854775807";
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x7FFFFFFFFFFFFFFD) -MPRNT_OFF_T_C(1); co_test[i].expected = "-9223372036854775806";
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x7FFFFFFF00000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-9223372032559808513";
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x000000007FFFFFFF) -MPRNT_OFF_T_C(1); co_test[i].expected = "-2147483648";
+
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x7FFF000000000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-9223090561878065153";
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x00007FFF00000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-140733193388033";
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x000000007FFF0000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-2147418113";
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x0000000000007FFF) -MPRNT_OFF_T_C(1); co_test[i].expected = "-32768";
+
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x7F00000000000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-9151314442816847873";
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x007F000000000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-35747322042253313";
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x00007F0000000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-139637976727553";
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x0000007F00000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-545460846593";
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x000000007F000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-2130706433";
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x00000000007F0000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-8323073";
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x0000000000007F00) -MPRNT_OFF_T_C(1); co_test[i].expected = "-32513";
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x000000000000007F) -MPRNT_OFF_T_C(1); co_test[i].expected = "-128";
+
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x7000000000000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-8070450532247928833";
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x0700000000000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-504403158265495553";
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x0070000000000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-31525197391593473";
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x0007000000000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-1970324836974593";
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x0000700000000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-123145302310913";
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x0000070000000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-7696581394433";
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x0000007000000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-481036337153";
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x0000000700000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-30064771073";
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x0000000070000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-1879048193";
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x0000000007000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-117440513";
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x0000000000700000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-7340033";
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x0000000000070000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-458753";
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x0000000000007000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-28673";
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x0000000000000700) -MPRNT_OFF_T_C(1); co_test[i].expected = "-1793";
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x0000000000000070) -MPRNT_OFF_T_C(1); co_test[i].expected = "-113";
+ i++; co_test[i].num = -MPRNT_OFF_T_C(0x0000000000000007) -MPRNT_OFF_T_C(1); co_test[i].expected = "-8";
+
+ i++; co_test[i].num = MPRNT_OFF_T_C(0x0000000000000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-1";
+
+ num_cofft_tests = i;
+
+#endif
+
+ for(i=1; i<=num_cofft_tests; i++) {
+
+ for(j=0; j<BUFSZ; j++)
+ co_test[i].result[j] = 'X';
+ co_test[i].result[BUFSZ-1] = '\0';
+
+ (void)curl_msprintf(co_test[i].result, "%" FORMAT_OFF_T, co_test[i].num);
+
+ if(memcmp(co_test[i].result,
+ co_test[i].expected,
+ strlen(co_test[i].expected))) {
+ printf("curl_off_t test #%.2d: Failed (Expected: %s Got: %s)\n",
+ i, co_test[i].expected, co_test[i].result);
+ failed++;
+ }
+
+ }
+
+ if(!failed)
+ printf("All curl_mprintf() curl_off_t tests OK!\n");
+ else
+ printf("Some curl_mprintf() curl_off_t tests Failed!\n");
+
+ return failed;
+}
+
+
+int test(char *URL)
+{
+ int errors = 0;
+ (void)URL; /* not used */
+
+ errors += test_unsigned_short_formatting();
+
+ errors += test_signed_short_formatting();
+
+ errors += test_unsigned_int_formatting();
+
+ errors += test_signed_int_formatting();
+
+ errors += test_unsigned_long_formatting();
+
+ errors += test_signed_long_formatting();
+
+ errors += test_curl_off_t_formatting();
+
+ if(errors)
+ return TEST_ERR_MAJOR_BAD;
+ else
+ return 0;
+}
diff --git a/tests/libtest/lib558.c b/tests/libtest/lib558.c
new file mode 100644
index 0000000..56f2a26
--- /dev/null
+++ b/tests/libtest/lib558.c
@@ -0,0 +1,188 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include "test.h"
+
+#ifdef HAVE_SYS_SOCKET_H
+# include <sys/socket.h>
+#endif
+#ifdef HAVE_NETINET_IN_H
+# include <netinet/in.h>
+#endif
+#ifdef HAVE_NETDB_H
+# include <netdb.h>
+#endif
+#ifdef HAVE_ARPA_INET_H
+# include <arpa/inet.h>
+#endif
+
+#define ENABLE_CURLX_PRINTF
+#include "curlx.h"
+
+#include "hash.h"
+#include "hostip.h"
+
+#include "curl_memory.h"
+#include "memdebug.h"
+
+/* This source file is used for test # 558 and 559 */
+
+/*
+ * This hacky test bypasses the library external API,
+ * using internal only libcurl functions. So don't be
+ * surprised if we cannot run it when the library has
+ * been built with hidden symbols, exporting only the
+ * ones in the public API.
+ */
+
+#if defined(CURL_HIDDEN_SYMBOLS)
+# define SKIP_TEST 1
+#elif defined(WIN32) && !defined(CURL_STATICLIB)
+# define SKIP_TEST 1
+#else
+# undef SKIP_TEST
+#endif
+
+
+#if !defined(SKIP_TEST)
+
+#ifdef LIB559
+static Curl_addrinfo *fake_ai(void)
+{
+ Curl_addrinfo *ai;
+ int ss_size;
+
+ ss_size = sizeof (struct sockaddr_in);
+
+ if((ai = calloc(1, sizeof(Curl_addrinfo))) == NULL)
+ return NULL;
+
+ if((ai->ai_canonname = strdup("dummy")) == NULL) {
+ free(ai);
+ return NULL;
+ }
+
+ if((ai->ai_addr = calloc(1, ss_size)) == NULL) {
+ free(ai->ai_canonname);
+ free(ai);
+ return NULL;
+ }
+
+ ai->ai_family = AF_INET;
+ ai->ai_addrlen = ss_size;
+
+ return ai;
+}
+#endif /* LIB559 */
+
+
+int test(char *URL)
+{
+ CURL *easyh = NULL;
+ struct curl_hash *hp = NULL;
+ int result = 0;
+
+ if(!strcmp(URL, "check")) {
+ /* test harness script verifying if this test can run */
+ return 0; /* sure, run this! */
+ }
+
+ easyh = curl_easy_init();
+ if(!easyh) {
+ fprintf(stdout, "easy handle init failed\n");
+ result = TEST_ERR_MAJOR_BAD;
+ goto cleanup;
+ }
+ fprintf(stdout, "easy handle init OK\n");
+
+ fprintf(stdout, "creating hash...\n");
+ hp = Curl_mk_dnscache();
+ if(!hp) {
+ fprintf(stdout, "hash creation failed\n");
+ result = TEST_ERR_MAJOR_BAD;
+ goto cleanup;
+ }
+ fprintf(stdout, "hash creation OK\n");
+
+ /**/
+#ifdef LIB559
+ {
+ char *data_key;
+ struct Curl_dns_entry *data_node;
+ struct Curl_dns_entry *nodep;
+ size_t key_len;
+
+ data_key = aprintf("%s:%d", "dummy", 0);
+ if(!data_key) {
+ fprintf(stdout, "data key creation failed\n");
+ result = TEST_ERR_MAJOR_BAD;
+ goto cleanup;
+ }
+ key_len = strlen(data_key);
+
+ data_node = calloc(1, sizeof(struct Curl_dns_entry));
+ if(!data_node) {
+ fprintf(stdout, "data node creation failed\n");
+ result = TEST_ERR_MAJOR_BAD;
+ free(data_key);
+ goto cleanup;
+ }
+
+ data_node->addr = fake_ai();
+ if(!data_node->addr) {
+ fprintf(stdout, "actual data creation failed\n");
+ result = TEST_ERR_MAJOR_BAD;
+ free(data_node);
+ free(data_key);
+ goto cleanup;
+ }
+
+ nodep = Curl_hash_add(hp, data_key, key_len+1, (void *)data_node);
+ if(!nodep) {
+ fprintf(stdout, "insertion into hash failed\n");
+ result = TEST_ERR_MAJOR_BAD;
+ Curl_freeaddrinfo(data_node->addr);
+ free(data_node);
+ free(data_key);
+ goto cleanup;
+ }
+
+ free(data_key);
+ }
+#endif /* LIB559 */
+ /**/
+
+cleanup:
+
+ fprintf(stdout, "destroying hash...\n");
+ Curl_hash_destroy(hp);
+ fprintf(stdout, "hash destruction OK\n");
+
+ fprintf(stdout, "destroying easy handle...\n");
+ curl_easy_cleanup(easyh);
+ fprintf(stdout, "easy handle destruction OK\n");
+
+ curl_global_cleanup();
+
+ return result;
+}
+
+
+#else /* !defined(SKIP_TEST) */
+
+
+int test(char *URL)
+{
+ (void)URL;
+ fprintf(stdout, "libcurl built with hidden symbols");
+ return 1; /* skip test */
+}
+
+
+#endif /* !defined(SKIP_TEST) */
diff --git a/tests/libtest/lib560.c b/tests/libtest/lib560.c
new file mode 100644
index 0000000..87e8545
--- /dev/null
+++ b/tests/libtest/lib560.c
@@ -0,0 +1,105 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ *
+ */
+#include "test.h"
+
+/*
+ * Simply download a HTTPS file!
+ *
+ * This test was added after the HTTPS-using-multi-interface with OpenSSL
+ * regression of 7.19.1 to hopefully prevent this embarassing mistake from
+ * appearing again... Unfortunately the bug wasn't triggered by this test,
+ * which presumably is because the connect to a local server is too
+ * fast/different compared to the real/distant servers we saw the bug happen
+ * with.
+ */
+int test(char *URL)
+{
+ CURL *http_handle;
+ CURLM *multi_handle = NULL;
+ CURLMcode code;
+ int res;
+
+ int still_running; /* keep number of running handles */
+
+ http_handle = curl_easy_init();
+ if (!http_handle)
+ return TEST_ERR_MAJOR_BAD;
+
+ /* set options */
+ test_setopt(http_handle, CURLOPT_URL, URL);
+ test_setopt(http_handle, CURLOPT_HEADER, 1L);
+ test_setopt(http_handle, CURLOPT_SSL_VERIFYPEER, 0L);
+ test_setopt(http_handle, CURLOPT_SSL_VERIFYHOST, 0L);
+
+ /* init a multi stack */
+ multi_handle = curl_multi_init();
+ if (!multi_handle) {
+ curl_easy_cleanup(http_handle);
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ /* add the individual transfers */
+ curl_multi_add_handle(multi_handle, http_handle);
+
+ /* we start some action by calling perform right away */
+ do {
+ code = curl_multi_perform(multi_handle, &still_running);
+ } while(code == CURLM_CALL_MULTI_PERFORM);
+
+ while(still_running) {
+ struct timeval timeout;
+ int rc; /* select() return code */
+
+ fd_set fdread;
+ fd_set fdwrite;
+ fd_set fdexcep;
+ int maxfd;
+
+ FD_ZERO(&fdread);
+ FD_ZERO(&fdwrite);
+ FD_ZERO(&fdexcep);
+
+ /* set a suitable timeout to play around with */
+ timeout.tv_sec = 1;
+ timeout.tv_usec = 0;
+
+ /* get file descriptors from the transfers */
+ curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd);
+
+ /* In a real-world program you OF COURSE check the return code of the
+ function calls, *and* you make sure that maxfd is bigger than -1 so
+ that the call to select() below makes sense! */
+
+ rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout);
+
+ switch(rc) {
+ case -1:
+ /* select error */
+ break;
+ case 0:
+ default:
+ /* timeout or readable/writable sockets */
+ do {
+ code = curl_multi_perform(multi_handle, &still_running);
+ } while(code == CURLM_CALL_MULTI_PERFORM);
+ break;
+ }
+ }
+
+test_cleanup:
+
+ if(multi_handle)
+ curl_multi_cleanup(multi_handle);
+
+ curl_easy_cleanup(http_handle);
+ curl_global_cleanup();
+
+ return res;
+}
diff --git a/tests/libtest/lib562.c b/tests/libtest/lib562.c
new file mode 100644
index 0000000..d78ecce
--- /dev/null
+++ b/tests/libtest/lib562.c
@@ -0,0 +1,74 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include "test.h"
+
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#include "memdebug.h"
+
+/*
+ * From "KNOWN_BUGS" April 2009:
+
+ 59. If the CURLOPT_PORT option is used on an FTP URL like
+ "ftp://example.com/file;type=A" the ";type=A" is stripped off.
+
+ */
+
+int test(char *URL)
+{
+ CURL *curl;
+ CURLcode res = CURLE_OK;
+
+ if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ /* get a curl handle */
+ if ((curl = curl_easy_init()) == NULL) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ /* enable verbose */
+ test_setopt(curl, CURLOPT_VERBOSE, 1L);
+
+ /* set port number */
+ test_setopt(curl, CURLOPT_PORT, atoi(libtest_arg2) );
+
+ /* specify target */
+ test_setopt(curl,CURLOPT_URL, URL);
+
+ /* Now run off and do what you've been told! */
+ res = curl_easy_perform(curl);
+
+test_cleanup:
+
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+
+ return res;
+}
diff --git a/tests/libtest/lib564.c b/tests/libtest/lib564.c
new file mode 100644
index 0000000..d33f230
--- /dev/null
+++ b/tests/libtest/lib564.c
@@ -0,0 +1,143 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include "test.h"
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+
+#include "testutil.h"
+#include "memdebug.h"
+
+#define MAIN_LOOP_HANG_TIMEOUT 90 * 1000
+#define MULTI_PERFORM_HANG_TIMEOUT 60 * 1000
+
+int test(char *URL)
+{
+ int res = 0;
+ CURL *curl;
+ int running;
+ char done=FALSE;
+ CURLM *m = NULL;
+ struct timeval ml_start;
+ struct timeval mp_start;
+ char ml_timedout = FALSE;
+ char mp_timedout = FALSE;
+
+ if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ if ((curl = curl_easy_init()) == NULL) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ test_setopt(curl, CURLOPT_URL, URL);
+ test_setopt(curl, CURLOPT_VERBOSE, 1);
+ test_setopt(curl, CURLOPT_PROXY, libtest_arg2);
+ test_setopt(curl, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS4);
+
+ if ((m = curl_multi_init()) == NULL) {
+ fprintf(stderr, "curl_multi_init() failed\n");
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ if ((res = (int)curl_multi_add_handle(m, curl)) != CURLM_OK) {
+ fprintf(stderr, "curl_multi_add_handle() failed, "
+ "with code %d\n", res);
+ curl_multi_cleanup(m);
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ ml_timedout = FALSE;
+ ml_start = tutil_tvnow();
+
+ fprintf(stderr, "Start at URL 0\n");
+
+ while (!done) {
+ fd_set rd, wr, exc;
+ int max_fd;
+ struct timeval interval;
+
+ interval.tv_sec = 1;
+ interval.tv_usec = 0;
+
+ if (tutil_tvdiff(tutil_tvnow(), ml_start) >
+ MAIN_LOOP_HANG_TIMEOUT) {
+ ml_timedout = TRUE;
+ break;
+ }
+ mp_timedout = FALSE;
+ mp_start = tutil_tvnow();
+
+ while (res == CURLM_CALL_MULTI_PERFORM) {
+ res = (int)curl_multi_perform(m, &running);
+ if (tutil_tvdiff(tutil_tvnow(), mp_start) >
+ MULTI_PERFORM_HANG_TIMEOUT) {
+ mp_timedout = TRUE;
+ break;
+ }
+ if (running <= 0) {
+ done = TRUE; /* bail out */
+ break;
+ }
+ }
+ if (mp_timedout || done)
+ break;
+
+ if (res != CURLM_OK) {
+ fprintf(stderr, "not okay???\n");
+ break;
+ }
+
+ FD_ZERO(&rd);
+ FD_ZERO(&wr);
+ FD_ZERO(&exc);
+ max_fd = 0;
+
+ if (curl_multi_fdset(m, &rd, &wr, &exc, &max_fd) != CURLM_OK) {
+ fprintf(stderr, "unexpected failured of fdset.\n");
+ res = 189;
+ break;
+ }
+
+ if (select_test(max_fd+1, &rd, &wr, &exc, &interval) == -1) {
+ fprintf(stderr, "bad select??\n");
+ res = 195;
+ break;
+ }
+
+ res = CURLM_CALL_MULTI_PERFORM;
+ }
+
+ if (ml_timedout || mp_timedout) {
+ if (ml_timedout) fprintf(stderr, "ml_timedout\n");
+ if (mp_timedout) fprintf(stderr, "mp_timedout\n");
+ fprintf(stderr, "ABORTING TEST, since it seems "
+ "that it would have run forever.\n");
+ res = TEST_ERR_RUNS_FOREVER;
+ }
+
+test_cleanup:
+
+ curl_easy_cleanup(curl);
+ if(m)
+ curl_multi_cleanup(m);
+ curl_global_cleanup();
+
+ return res;
+}
diff --git a/tests/libtest/lib566.c b/tests/libtest/lib566.c
new file mode 100644
index 0000000..889f15b
--- /dev/null
+++ b/tests/libtest/lib566.c
@@ -0,0 +1,55 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include "test.h"
+
+#include "memdebug.h"
+
+int test(char *URL)
+{
+ CURLcode res;
+ CURL *curl;
+
+ double content_length = 3;
+
+ if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ if ((curl = curl_easy_init()) == NULL) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ test_setopt(curl, CURLOPT_URL, URL);
+ test_setopt(curl, CURLOPT_HEADER, 1L);
+
+ res = curl_easy_perform(curl);
+
+ if(!res) {
+ FILE *moo;
+ res = curl_easy_getinfo(curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD,
+ &content_length);
+ moo = fopen(libtest_arg2, "wb");
+ if(moo) {
+ fprintf(moo, "CL: %.0f\n", content_length);
+ fclose(moo);
+ }
+ }
+
+test_cleanup:
+
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+
+ return (int)res;
+}
+
diff --git a/tests/libtest/lib567.c b/tests/libtest/lib567.c
new file mode 100644
index 0000000..e1df0c1
--- /dev/null
+++ b/tests/libtest/lib567.c
@@ -0,0 +1,56 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include "test.h"
+#include "memdebug.h"
+
+/*
+ * Test a simple OPTIONS request with a custom header
+ */
+int test(char *URL)
+{
+ CURLcode res;
+ CURL *curl;
+ struct curl_slist *custom_headers=NULL;
+
+ if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ if ((curl = curl_easy_init()) == NULL) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ /* Dump data to stdout for protocol verification */
+ test_setopt(curl, CURLOPT_HEADERDATA, stdout);
+ test_setopt(curl, CURLOPT_WRITEDATA, stdout);
+
+ test_setopt(curl, CURLOPT_URL, URL);
+ test_setopt(curl, CURLOPT_RTSP_STREAM_URI, URL);
+ test_setopt(curl, CURLOPT_RTSP_REQUEST, CURL_RTSPREQ_OPTIONS);
+ test_setopt(curl, CURLOPT_USERAGENT, "test567");
+
+ custom_headers = curl_slist_append(custom_headers, "Test-Number: 567");
+ test_setopt(curl, CURLOPT_RTSPHEADER, custom_headers);
+
+ res = curl_easy_perform(curl);
+
+test_cleanup:
+
+ if(custom_headers)
+ curl_slist_free_all(custom_headers);
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+
+ return (int)res;
+}
+
diff --git a/tests/libtest/lib568.c b/tests/libtest/lib568.c
new file mode 100644
index 0000000..1f16664
--- /dev/null
+++ b/tests/libtest/lib568.c
@@ -0,0 +1,163 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include "test.h"
+
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+
+#include <curl/mprintf.h>
+
+#include "memdebug.h"
+
+/* build request url */
+static char *suburl(const char *base, int i)
+{
+ return curl_maprintf("%s%.4d", base, i);
+}
+
+/*
+ * Test the Client->Server ANNOUNCE functionality (PUT style)
+ */
+int test(char *URL)
+{
+ int res;
+ CURL *curl;
+ int sdp;
+ FILE *sdpf = NULL;
+ struct_stat file_info;
+ char *stream_uri = NULL;
+ int request=1;
+ struct curl_slist *custom_headers=NULL;
+
+ if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ if ((curl = curl_easy_init()) == NULL) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ test_setopt(curl, CURLOPT_HEADERDATA, stdout);
+ test_setopt(curl, CURLOPT_WRITEDATA, stdout);
+
+ test_setopt(curl, CURLOPT_URL, URL);
+
+ if((stream_uri = suburl(URL, request++)) == NULL) {
+ res = TEST_ERR_MAJOR_BAD;
+ goto test_cleanup;
+ }
+ test_setopt(curl, CURLOPT_RTSP_STREAM_URI, stream_uri);
+ free(stream_uri);
+ stream_uri = NULL;
+
+ sdp = open("log/file568.txt", O_RDONLY);
+ fstat(sdp, &file_info);
+ close(sdp);
+
+ sdpf = fopen("log/file568.txt", "rb");
+ if(sdpf == NULL) {
+ fprintf(stderr, "can't open log/file568.txt\n");
+ res = TEST_ERR_MAJOR_BAD;
+ goto test_cleanup;
+ }
+ test_setopt(curl, CURLOPT_RTSP_REQUEST, CURL_RTSPREQ_ANNOUNCE);
+
+ test_setopt(curl, CURLOPT_READDATA, sdpf);
+ test_setopt(curl, CURLOPT_UPLOAD, 1L);
+ test_setopt(curl, CURLOPT_INFILESIZE_LARGE, (curl_off_t) file_info.st_size);
+
+ /* Do the ANNOUNCE */
+ res = curl_easy_perform(curl);
+ if(res)
+ goto test_cleanup;
+
+ test_setopt(curl, CURLOPT_UPLOAD, 0L);
+ fclose(sdpf);
+ sdpf = NULL;
+
+ /* Make sure we can do a normal request now */
+ if((stream_uri = suburl(URL, request++)) == NULL) {
+ res = TEST_ERR_MAJOR_BAD;
+ goto test_cleanup;
+ }
+ test_setopt(curl, CURLOPT_RTSP_STREAM_URI, stream_uri);
+ free(stream_uri);
+ stream_uri = NULL;
+
+ test_setopt(curl, CURLOPT_RTSP_REQUEST, CURL_RTSPREQ_DESCRIBE);
+ res = curl_easy_perform(curl);
+ if(res)
+ goto test_cleanup;
+
+ /* Now do a POST style one */
+
+ if((stream_uri = suburl(URL, request++)) == NULL) {
+ res = TEST_ERR_MAJOR_BAD;
+ goto test_cleanup;
+ }
+ test_setopt(curl, CURLOPT_RTSP_STREAM_URI, stream_uri);
+ free(stream_uri);
+ stream_uri = NULL;
+
+ custom_headers = curl_slist_append(custom_headers,
+ "Content-Type: posty goodness");
+ if(!custom_headers) {
+ res = TEST_ERR_MAJOR_BAD;
+ goto test_cleanup;
+ }
+ test_setopt(curl, CURLOPT_RTSPHEADER, custom_headers);
+ test_setopt(curl, CURLOPT_RTSP_REQUEST, CURL_RTSPREQ_ANNOUNCE);
+ test_setopt(curl, CURLOPT_POSTFIELDS, "postyfield=postystuff&project=curl\n");
+
+ res = curl_easy_perform(curl);
+ if(res)
+ goto test_cleanup;
+
+ test_setopt(curl, CURLOPT_POSTFIELDS, NULL);
+ test_setopt(curl, CURLOPT_RTSPHEADER, NULL);
+ curl_slist_free_all(custom_headers);
+ custom_headers = NULL;
+
+ /* Make sure we can do a normal request now */
+ if((stream_uri = suburl(URL, request++)) == NULL) {
+ res = TEST_ERR_MAJOR_BAD;
+ goto test_cleanup;
+ }
+ test_setopt(curl, CURLOPT_RTSP_STREAM_URI, stream_uri);
+ free(stream_uri);
+ stream_uri = NULL;
+
+ test_setopt(curl, CURLOPT_RTSP_REQUEST, CURL_RTSPREQ_OPTIONS);
+ res = curl_easy_perform(curl);
+
+test_cleanup:
+
+ if(sdpf)
+ fclose(sdpf);
+
+ if(stream_uri)
+ free(stream_uri);
+
+ if(custom_headers)
+ curl_slist_free_all(custom_headers);
+
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+
+ return res;
+}
+
diff --git a/tests/libtest/lib569.c b/tests/libtest/lib569.c
new file mode 100644
index 0000000..b5182d6
--- /dev/null
+++ b/tests/libtest/lib569.c
@@ -0,0 +1,117 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include "test.h"
+
+#include <curl/mprintf.h>
+
+#include "memdebug.h"
+
+/* build request url */
+static char *suburl(const char *base, int i)
+{
+ return curl_maprintf("%s%.4d", base, i);
+}
+
+/*
+ * Test Session ID capture
+ */
+int test(char *URL)
+{
+ int res;
+ CURL *curl;
+ char *stream_uri = NULL;
+ char *rtsp_session_id;
+ int request=1;
+ int i;
+ FILE *idfile = NULL;
+
+ idfile = fopen(libtest_arg2, "wb");
+ if(idfile == NULL) {
+ fprintf(stderr, "couldn't open the Session ID File\n");
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ fclose(idfile);
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ if ((curl = curl_easy_init()) == NULL) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ curl_global_cleanup();
+ fclose(idfile);
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ test_setopt(curl, CURLOPT_HEADERDATA, stdout);
+ test_setopt(curl, CURLOPT_WRITEDATA, stdout);
+ test_setopt(curl, CURLOPT_VERBOSE, 1L);
+
+ test_setopt(curl, CURLOPT_URL, URL);
+
+ test_setopt(curl, CURLOPT_RTSP_REQUEST, CURL_RTSPREQ_SETUP);
+ res = curl_easy_perform(curl);
+ if(res != (int)CURLE_BAD_FUNCTION_ARGUMENT) {
+ fprintf(stderr, "This should have failed. "
+ "Cannot setup without a Transport: header");
+ res = TEST_ERR_MAJOR_BAD;
+ goto test_cleanup;
+ }
+
+ /* Go through the various Session IDs */
+ for(i = 0; i < 3; i++) {
+ if((stream_uri = suburl(URL, request++)) == NULL) {
+ res = TEST_ERR_MAJOR_BAD;
+ goto test_cleanup;
+ }
+ test_setopt(curl, CURLOPT_RTSP_STREAM_URI, stream_uri);
+ free(stream_uri);
+ stream_uri = NULL;
+
+ test_setopt(curl, CURLOPT_RTSP_REQUEST, CURL_RTSPREQ_SETUP);
+ test_setopt(curl, CURLOPT_RTSP_TRANSPORT, "Fake/NotReal/JustATest;foo=baz");
+ res = curl_easy_perform(curl);
+ if(res)
+ goto test_cleanup;
+
+ curl_easy_getinfo(curl, CURLINFO_RTSP_SESSION_ID, &rtsp_session_id);
+ fprintf(idfile, "Got Session ID: [%s]\n", rtsp_session_id);
+ rtsp_session_id = NULL;
+
+ if((stream_uri = suburl(URL, request++)) == NULL) {
+ res = TEST_ERR_MAJOR_BAD;
+ goto test_cleanup;
+ }
+ test_setopt(curl, CURLOPT_RTSP_STREAM_URI, stream_uri);
+ free(stream_uri);
+ stream_uri = NULL;
+
+ test_setopt(curl, CURLOPT_RTSP_REQUEST, CURL_RTSPREQ_TEARDOWN);
+ res = curl_easy_perform(curl);
+
+ /* Clear for the next go-round */
+ test_setopt(curl, CURLOPT_RTSP_SESSION_ID, NULL);
+ }
+
+test_cleanup:
+
+ if(idfile)
+ fclose(idfile);
+
+ if(stream_uri)
+ free(stream_uri);
+
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+
+ return res;
+}
+
diff --git a/tests/libtest/lib570.c b/tests/libtest/lib570.c
new file mode 100644
index 0000000..9fe2ece
--- /dev/null
+++ b/tests/libtest/lib570.c
@@ -0,0 +1,105 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include "test.h"
+
+#include <curl/mprintf.h>
+
+#include "memdebug.h"
+
+/* build request url */
+static char *suburl(const char *base, int i)
+{
+ return curl_maprintf("%s%.4d", base, i);
+}
+
+int test(char *URL)
+{
+ int res;
+ CURL *curl;
+ int request=1;
+ char *stream_uri = NULL;
+
+ if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ if ((curl = curl_easy_init()) == NULL) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ test_setopt(curl, CURLOPT_HEADERDATA, stdout);
+ test_setopt(curl, CURLOPT_WRITEDATA, stdout);
+ test_setopt(curl, CURLOPT_VERBOSE, 1L);
+
+ test_setopt(curl, CURLOPT_URL, URL);
+
+ test_setopt(curl, CURLOPT_RTSP_REQUEST, CURL_RTSPREQ_OPTIONS);
+
+ if((stream_uri = suburl(URL, request++)) == NULL) {
+ res = TEST_ERR_MAJOR_BAD;
+ goto test_cleanup;
+ }
+ test_setopt(curl, CURLOPT_RTSP_STREAM_URI, stream_uri);
+ free(stream_uri);
+ stream_uri = NULL;
+
+ res = curl_easy_perform(curl);
+ if(res != (int)CURLE_RTSP_CSEQ_ERROR) {
+ fprintf(stderr, "Failed to detect CSeq mismatch");
+ res = TEST_ERR_MAJOR_BAD;
+ goto test_cleanup;
+ }
+
+ test_setopt(curl, CURLOPT_RTSP_CLIENT_CSEQ, 999);
+ test_setopt(curl, CURLOPT_RTSP_TRANSPORT,
+ "RAW/RAW/UDP;unicast;client_port=3056-3057");
+ test_setopt(curl, CURLOPT_RTSP_REQUEST, CURL_RTSPREQ_SETUP);
+
+ if((stream_uri = suburl(URL, request++)) == NULL) {
+ res = TEST_ERR_MAJOR_BAD;
+ goto test_cleanup;
+ }
+ test_setopt(curl, CURLOPT_RTSP_STREAM_URI, stream_uri);
+ free(stream_uri);
+ stream_uri = NULL;
+
+ res = curl_easy_perform(curl);
+ if(res)
+ goto test_cleanup;
+
+ test_setopt(curl, CURLOPT_RTSP_REQUEST, CURL_RTSPREQ_PLAY);
+
+ if((stream_uri = suburl(URL, request++)) == NULL) {
+ res = TEST_ERR_MAJOR_BAD;
+ goto test_cleanup;
+ }
+ test_setopt(curl, CURLOPT_RTSP_STREAM_URI, stream_uri);
+ free(stream_uri);
+ stream_uri = NULL;
+
+ res = curl_easy_perform(curl);
+ if(res != CURLE_RTSP_SESSION_ERROR) {
+ fprintf(stderr, "Failed to detect a Session ID mismatch");
+ }
+
+test_cleanup:
+
+ if(stream_uri)
+ free(stream_uri);
+
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+
+ return res;
+}
+
diff --git a/tests/libtest/lib571.c b/tests/libtest/lib571.c
new file mode 100644
index 0000000..2892211
--- /dev/null
+++ b/tests/libtest/lib571.c
@@ -0,0 +1,200 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include "test.h"
+
+#ifdef HAVE_SYS_SOCKET_H
+# include <sys/socket.h>
+#endif
+#ifdef HAVE_NETINET_IN_H
+# include <netinet/in.h>
+#endif
+#ifdef HAVE_NETDB_H
+# include <netdb.h>
+#endif
+#ifdef HAVE_ARPA_INET_H
+# include <arpa/inet.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#ifdef HAVE_FCNTL_H
+# include <fcntl.h>
+#endif
+
+#include <curl/mprintf.h>
+
+#include "memdebug.h"
+
+#define RTP_PKT_CHANNEL(p) ((int)((unsigned char)((p)[1])))
+
+#define RTP_PKT_LENGTH(p) ((((int)((unsigned char)((p)[2]))) << 8) | \
+ ((int)((unsigned char)((p)[3]))))
+
+#define RTP_DATA_SIZE 12
+static const char *RTP_DATA = "$_1234\n\0asdf";
+
+static int rtp_packet_count = 0;
+
+static size_t rtp_write(void *ptr, size_t size, size_t nmemb, void *stream) {
+ char *data = (char *)ptr;
+ int channel = RTP_PKT_CHANNEL(data);
+ int message_size = (int)(size * nmemb) - 4;
+ int coded_size = RTP_PKT_LENGTH(data);
+ size_t failure = (size * nmemb) ? 0 : 1;
+ int i;
+ (void)stream;
+
+ printf("RTP: message size %d, channel %d\n", message_size, channel);
+ if(message_size != coded_size) {
+ printf("RTP embedded size (%d) does not match the write size (%d).\n",
+ coded_size, message_size);
+ return failure;
+ }
+
+ data += 4;
+ for(i = 0; i < message_size; i+= RTP_DATA_SIZE) {
+ if(message_size - i > RTP_DATA_SIZE) {
+ if(memcmp(RTP_DATA, data + i, RTP_DATA_SIZE) != 0) {
+ printf("RTP PAYLOAD CORRUPTED [%s]\n", data + i);
+ return failure;
+ }
+ } else {
+ if (memcmp(RTP_DATA, data + i, message_size - i) != 0) {
+ printf("RTP PAYLOAD END CORRUPTED (%d), [%s]\n",
+ message_size - i, data + i);
+ return failure;
+ }
+ }
+ }
+
+ rtp_packet_count++;
+ fprintf(stderr, "packet count is %d\n", rtp_packet_count);
+
+ return size * nmemb;
+}
+
+/* build request url */
+static char *suburl(const char *base, int i)
+{
+ return curl_maprintf("%s%.4d", base, i);
+}
+
+int test(char *URL)
+{
+ int res;
+ CURL *curl;
+ char *stream_uri = NULL;
+ int request=1;
+ FILE *protofile = NULL;
+
+ protofile = fopen(libtest_arg2, "wb");
+ if(protofile == NULL) {
+ fprintf(stderr, "Couldn't open the protocol dump file\n");
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ fclose(protofile);
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ if ((curl = curl_easy_init()) == NULL) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ fclose(protofile);
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+ test_setopt(curl, CURLOPT_URL, URL);
+
+ if((stream_uri = suburl(URL, request++)) == NULL) {
+ res = TEST_ERR_MAJOR_BAD;
+ goto test_cleanup;
+ }
+ test_setopt(curl, CURLOPT_RTSP_STREAM_URI, stream_uri);
+ free(stream_uri);
+ stream_uri = NULL;
+
+ test_setopt(curl, CURLOPT_INTERLEAVEFUNCTION, rtp_write);
+ test_setopt(curl, CURLOPT_TIMEOUT, 3);
+ test_setopt(curl, CURLOPT_VERBOSE, 1L);
+ test_setopt(curl, CURLOPT_WRITEDATA, protofile);
+
+ test_setopt(curl, CURLOPT_RTSP_TRANSPORT, "RTP/AVP/TCP;interleaved=0-1");
+ test_setopt(curl, CURLOPT_RTSP_REQUEST, CURL_RTSPREQ_SETUP);
+
+ res = curl_easy_perform(curl);
+ if(res)
+ goto test_cleanup;
+
+ /* This PLAY starts the interleave */
+ if((stream_uri = suburl(URL, request++)) == NULL) {
+ res = TEST_ERR_MAJOR_BAD;
+ goto test_cleanup;
+ }
+ test_setopt(curl, CURLOPT_RTSP_STREAM_URI, stream_uri);
+ free(stream_uri);
+ stream_uri = NULL;
+ test_setopt(curl, CURLOPT_RTSP_REQUEST, CURL_RTSPREQ_PLAY);
+
+ res = curl_easy_perform(curl);
+ if(res)
+ goto test_cleanup;
+
+ /* The DESCRIBE request will try to consume data after the Content */
+ if((stream_uri = suburl(URL, request++)) == NULL) {
+ res = TEST_ERR_MAJOR_BAD;
+ goto test_cleanup;
+ }
+ test_setopt(curl, CURLOPT_RTSP_STREAM_URI, stream_uri);
+ free(stream_uri);
+ stream_uri = NULL;
+ test_setopt(curl, CURLOPT_RTSP_REQUEST, CURL_RTSPREQ_DESCRIBE);
+
+ res = curl_easy_perform(curl);
+ if(res)
+ goto test_cleanup;
+
+ if((stream_uri = suburl(URL, request++)) == NULL) {
+ res = TEST_ERR_MAJOR_BAD;
+ goto test_cleanup;
+ }
+ test_setopt(curl, CURLOPT_RTSP_STREAM_URI, stream_uri);
+ free(stream_uri);
+ stream_uri = NULL;
+ test_setopt(curl, CURLOPT_RTSP_REQUEST, CURL_RTSPREQ_PLAY);
+
+ res = curl_easy_perform(curl);
+ if(res)
+ goto test_cleanup;
+
+ fprintf(stderr, "PLAY COMPLETE\n");
+
+ /* Use Receive to get the rest of the data */
+ while(!res && rtp_packet_count < 13) {
+ fprintf(stderr, "LOOPY LOOP!\n");
+ test_setopt(curl, CURLOPT_RTSP_REQUEST, CURL_RTSPREQ_RECEIVE);
+ res = curl_easy_perform(curl);
+ }
+
+test_cleanup:
+
+ if(stream_uri)
+ free(stream_uri);
+
+ if(protofile)
+ fclose(protofile);
+
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+
+ return res;
+}
+
diff --git a/tests/libtest/lib572.c b/tests/libtest/lib572.c
new file mode 100644
index 0000000..18e74d4
--- /dev/null
+++ b/tests/libtest/lib572.c
@@ -0,0 +1,169 @@
+
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ */
+
+#include "test.h"
+
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+
+#include <curl/mprintf.h>
+
+#include "memdebug.h"
+
+/* build request url */
+static char *suburl(const char *base, int i)
+{
+ return curl_maprintf("%s%.4d", base, i);
+}
+
+/*
+ * Test GET_PARAMETER: PUT, HEARTBEAT, and POST
+ */
+int test(char *URL)
+{
+ int res;
+ CURL *curl;
+ int params;
+ FILE *paramsf = NULL;
+ struct_stat file_info;
+ char *stream_uri = NULL;
+ int request=1;
+ struct curl_slist *custom_headers=NULL;
+
+ if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ if ((curl = curl_easy_init()) == NULL) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+
+ test_setopt(curl, CURLOPT_HEADERDATA, stdout);
+ test_setopt(curl, CURLOPT_WRITEDATA, stdout);
+ test_setopt(curl, CURLOPT_VERBOSE, 1L);
+
+ test_setopt(curl, CURLOPT_URL, URL);
+
+ /* SETUP */
+ if((stream_uri = suburl(URL, request++)) == NULL) {
+ res = TEST_ERR_MAJOR_BAD;
+ goto test_cleanup;
+ }
+ test_setopt(curl, CURLOPT_RTSP_STREAM_URI, stream_uri);
+ free(stream_uri);
+ stream_uri = NULL;
+
+ test_setopt(curl, CURLOPT_RTSP_TRANSPORT, "Planes/Trains/Automobiles");
+ test_setopt(curl, CURLOPT_RTSP_REQUEST, CURL_RTSPREQ_SETUP);
+ res = curl_easy_perform(curl);
+ if(res)
+ goto test_cleanup;
+
+ if((stream_uri = suburl(URL, request++)) == NULL) {
+ res = TEST_ERR_MAJOR_BAD;
+ goto test_cleanup;
+ }
+ test_setopt(curl, CURLOPT_RTSP_STREAM_URI, stream_uri);
+ free(stream_uri);
+ stream_uri = NULL;
+
+ /* PUT style GET_PARAMETERS */
+ params = open("log/file572.txt", O_RDONLY);
+ fstat(params, &file_info);
+ close(params);
+
+ paramsf = fopen("log/file572.txt", "rb");
+ if(paramsf == NULL) {
+ fprintf(stderr, "can't open log/file572.txt\n");
+ res = TEST_ERR_MAJOR_BAD;
+ goto test_cleanup;
+ }
+ test_setopt(curl, CURLOPT_RTSP_REQUEST, CURL_RTSPREQ_GET_PARAMETER);
+
+ test_setopt(curl, CURLOPT_READDATA, paramsf);
+ test_setopt(curl, CURLOPT_UPLOAD, 1L);
+ test_setopt(curl, CURLOPT_INFILESIZE_LARGE, (curl_off_t) file_info.st_size);
+
+ res = curl_easy_perform(curl);
+ if(res)
+ goto test_cleanup;
+
+ test_setopt(curl, CURLOPT_UPLOAD, 0L);
+ fclose(paramsf);
+ paramsf = NULL;
+
+ /* Heartbeat GET_PARAMETERS */
+ if((stream_uri = suburl(URL, request++)) == NULL) {
+ res = TEST_ERR_MAJOR_BAD;
+ goto test_cleanup;
+ }
+ test_setopt(curl, CURLOPT_RTSP_STREAM_URI, stream_uri);
+ free(stream_uri);
+ stream_uri = NULL;
+
+ res = curl_easy_perform(curl);
+ if(res)
+ goto test_cleanup;
+
+ /* POST GET_PARAMETERS */
+
+ if((stream_uri = suburl(URL, request++)) == NULL) {
+ res = TEST_ERR_MAJOR_BAD;
+ goto test_cleanup;
+ }
+ test_setopt(curl, CURLOPT_RTSP_STREAM_URI, stream_uri);
+ free(stream_uri);
+ stream_uri = NULL;
+
+ test_setopt(curl, CURLOPT_RTSP_REQUEST, CURL_RTSPREQ_GET_PARAMETER);
+ test_setopt(curl, CURLOPT_POSTFIELDS, "packets_received\njitter\n");
+
+ res = curl_easy_perform(curl);
+ if(res)
+ goto test_cleanup;
+
+ test_setopt(curl, CURLOPT_POSTFIELDS, NULL);
+
+ /* Make sure we can do a normal request now */
+ if((stream_uri = suburl(URL, request++)) == NULL) {
+ res = TEST_ERR_MAJOR_BAD;
+ goto test_cleanup;
+ }
+ test_setopt(curl, CURLOPT_RTSP_STREAM_URI, stream_uri);
+ free(stream_uri);
+ stream_uri = NULL;
+
+ test_setopt(curl, CURLOPT_RTSP_REQUEST, CURL_RTSPREQ_OPTIONS);
+ res = curl_easy_perform(curl);
+
+test_cleanup:
+
+ if(paramsf)
+ fclose(paramsf);
+
+ if(stream_uri)
+ free(stream_uri);
+
+ if(custom_headers)
+ curl_slist_free_all(custom_headers);
+
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+
+ return res;
+}
+
diff --git a/tests/libtest/lib573.c b/tests/libtest/lib573.c
new file mode 100644
index 0000000..5edb181
--- /dev/null
+++ b/tests/libtest/lib573.c
@@ -0,0 +1,102 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include "test.h"
+
+#include "testutil.h"
+#include "memdebug.h"
+
+#define MAIN_LOOP_HANG_TIMEOUT 90 * 1000
+#define MULTI_PERFORM_HANG_TIMEOUT 60 * 1000
+
+/*
+ * Get a single URL without select().
+ */
+
+int test(char *URL)
+{
+ CURL *c;
+ CURLM *m = NULL;
+ int res = 0;
+ int running=1;
+ double connect_time = 0.0;
+ struct timeval mp_start;
+ char mp_timedout = FALSE;
+
+ if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ if ((c = curl_easy_init()) == NULL) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ test_setopt(c, CURLOPT_HEADER, 1L);
+ test_setopt(c, CURLOPT_URL, URL);
+
+ if ((m = curl_multi_init()) == NULL) {
+ fprintf(stderr, "curl_multi_init() failed\n");
+ curl_easy_cleanup(c);
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ if ((res = (int)curl_multi_add_handle(m, c)) != CURLM_OK) {
+ fprintf(stderr, "curl_multi_add_handle() failed, "
+ "with code %d\n", res);
+ curl_multi_cleanup(m);
+ curl_easy_cleanup(c);
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ mp_timedout = FALSE;
+ mp_start = tutil_tvnow();
+
+ while (running) {
+ res = (int)curl_multi_perform(m, &running);
+ if (tutil_tvdiff(tutil_tvnow(), mp_start) >
+ MULTI_PERFORM_HANG_TIMEOUT) {
+ mp_timedout = TRUE;
+ break;
+ }
+ if (running <= 0) {
+ fprintf(stderr, "nothing left running.\n");
+ break;
+ }
+ }
+
+ if (mp_timedout) {
+ if (mp_timedout) fprintf(stderr, "mp_timedout\n");
+ fprintf(stderr, "ABORTING TEST, since it seems "
+ "that it would have run forever.\n");
+ res = TEST_ERR_RUNS_FOREVER;
+ }
+
+ curl_easy_getinfo(c, CURLINFO_CONNECT_TIME, &connect_time);
+ if (connect_time <= 0.0) {
+ fprintf(stderr, "connect time is <=0.0\n");
+ res = TEST_ERR_MAJOR_BAD;
+ }
+
+test_cleanup:
+
+ if(m) {
+ curl_multi_remove_handle(m, c);
+ curl_multi_cleanup(m);
+ }
+ curl_easy_cleanup(c);
+ curl_global_cleanup();
+
+ return res;
+}
+
diff --git a/tests/libtest/lib574.c b/tests/libtest/lib574.c
new file mode 100644
index 0000000..69b2979
--- /dev/null
+++ b/tests/libtest/lib574.c
@@ -0,0 +1,56 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include "test.h"
+
+#include "memdebug.h"
+
+static int new_fnmatch(const char *pattern, const char *string)
+{
+ (void)pattern;
+ (void)string;
+ return CURL_FNMATCHFUNC_MATCH;
+}
+
+int test(char *URL)
+{
+ int res;
+ CURL *curl;
+
+ if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ if ((curl = curl_easy_init()) == NULL) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ test_setopt(curl, CURLOPT_URL, URL);
+ test_setopt(curl, CURLOPT_WILDCARDMATCH, 1L);
+ test_setopt(curl, CURLOPT_FNMATCH_FUNCTION, new_fnmatch);
+
+ res = curl_easy_perform(curl);
+ if(res) {
+ fprintf(stderr, "curl_easy_perform() failed %d\n", res);
+ goto test_cleanup;
+ }
+ res = curl_easy_perform(curl);
+ if(res) {
+ fprintf(stderr, "curl_easy_perform() failed %d\n", res);
+ goto test_cleanup;
+ }
+
+test_cleanup:
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+ return res;
+}
diff --git a/tests/libtest/lib575.c b/tests/libtest/lib575.c
new file mode 100644
index 0000000..521720e
--- /dev/null
+++ b/tests/libtest/lib575.c
@@ -0,0 +1,109 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include "test.h"
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+
+#include "testutil.h"
+#include "memdebug.h"
+
+/* 3x download!
+ * 1. normal
+ * 2. dup handle
+ * 3. with multi interface
+ */
+
+int test(char *URL)
+{
+ CURLMcode m;
+ CURL *handle = NULL, *duphandle;
+ CURLM *mhandle = NULL;
+ int res = 0;
+ int still_running = 0;
+
+ if(curl_global_init(CURL_GLOBAL_ALL)) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ goto test_cleanup;
+ }
+
+ handle = curl_easy_init();
+ if(!handle) {
+ res = CURLE_OUT_OF_MEMORY;
+ goto test_cleanup;
+ }
+
+ test_setopt(handle, CURLOPT_URL, URL);
+ test_setopt(handle, CURLOPT_WILDCARDMATCH, 1L);
+ test_setopt(handle, CURLOPT_VERBOSE, 1L);
+
+ res = curl_easy_perform(handle);
+ if(res)
+ goto test_cleanup;
+
+ res = curl_easy_perform(handle);
+ if(res)
+ goto test_cleanup;
+
+ duphandle = curl_easy_duphandle(handle);
+ if(!duphandle)
+ goto test_cleanup;
+ curl_easy_cleanup(handle);
+ handle = duphandle;
+
+ mhandle = curl_multi_init();
+ if(!mhandle) {
+ fprintf(stderr, "curl_multi_init() failed\n");
+ goto test_cleanup;
+ }
+
+ curl_multi_add_handle(mhandle, handle);
+
+ while(CURLM_CALL_MULTI_PERFORM ==
+ curl_multi_perform(mhandle, &still_running));
+
+ while(still_running) {
+ static struct timeval timeout = /* 100 ms */ { 0, 100000L };
+ int rc;
+ fd_set fdread;
+ fd_set fdwrite;
+ fd_set fdexcep;
+ int max_fdset = -1;
+ FD_ZERO(&fdread);
+ FD_ZERO(&fdwrite);
+ FD_ZERO(&fdexcep);
+
+ m = curl_multi_fdset(mhandle, &fdread, &fdwrite, &fdexcep, &max_fdset);
+ if(m != CURLM_OK) {
+ fprintf(stderr, "curl_multi_fdset() error\n");
+ goto test_cleanup;
+ }
+ /* We call select(max_fdset + 1, ...), specially in case of (maxfd == -1),
+ * we call select(0, ...), which is basically equal to sleep. */
+ rc = select(max_fdset + 1, &fdread, &fdwrite, &fdexcep, &timeout);
+ if(rc == -1) {
+ fprintf(stderr, "select() error\n");
+ goto test_cleanup;
+ }
+ else {
+ while(CURLM_CALL_MULTI_PERFORM ==
+ curl_multi_perform(mhandle, &still_running));
+ }
+ }
+
+test_cleanup:
+ if(mhandle)
+ curl_multi_cleanup(mhandle);
+ if(handle)
+ curl_easy_cleanup(handle);
+ curl_global_cleanup();
+ return res;
+}
diff --git a/tests/libtest/lib576.c b/tests/libtest/lib576.c
new file mode 100644
index 0000000..821eb61
--- /dev/null
+++ b/tests/libtest/lib576.c
@@ -0,0 +1,111 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include "test.h"
+#include "testutil.h"
+#include "memdebug.h"
+
+typedef struct {
+ int remains;
+ int print_content;
+} chunk_data_t;
+
+static
+long chunk_bgn(const struct curl_fileinfo *finfo, void *ptr, int remains);
+static
+long chunk_end(void *ptr);
+
+static
+long chunk_bgn(const struct curl_fileinfo *finfo, void *ptr, int remains)
+{
+ chunk_data_t *ch_d = ptr;
+ ch_d->remains = remains;
+
+ printf("=============================================================\n");
+ printf("Remains: %d\n", remains);
+ printf("Filename: %s\n", finfo->filename);
+ if(finfo->strings.perm) {
+ printf("Permissions: %s", finfo->strings.perm);
+ if(finfo->flags & CURLFINFOFLAG_KNOWN_PERM)
+ printf(" (parsed => %o)", finfo->perm);
+ printf("\n");
+ }
+ printf("Size: %ldB\n", (long)finfo->size);
+ if(finfo->strings.user)
+ printf("User: %s\n", finfo->strings.user);
+ if(finfo->strings.group)
+ printf("Group: %s\n", finfo->strings.group);
+ if(finfo->strings.time)
+ printf("Time: %s\n", finfo->strings.time);
+ printf("Filetype: ");
+ switch(finfo->filetype) {
+ case CURLFILETYPE_FILE:
+ printf("regular file\n");
+ break;
+ case CURLFILETYPE_DIRECTORY:
+ printf("directory\n");
+ break;
+ case CURLFILETYPE_SYMLINK:
+ printf("symlink\n");
+ printf("Target: %s\n", finfo->strings.target);
+ break;
+ default:
+ printf("other type\n");
+ break;
+ }
+ if(finfo->filetype == CURLFILETYPE_FILE) {
+ ch_d->print_content = 1;
+ printf("Content:\n-------------------------------------------------------------\n");
+ }
+ if(strcmp(finfo->filename, "someothertext.txt") == 0) {
+ printf("# THIS CONTENT WAS SKIPPED IN CHUNK_BGN CALLBACK #\n");
+ return CURL_CHUNK_BGN_FUNC_SKIP;
+ }
+ return CURL_CHUNK_BGN_FUNC_OK;
+}
+
+static
+long chunk_end(void *ptr)
+{
+ chunk_data_t *ch_d = ptr;
+ if(ch_d->print_content) {
+ ch_d->print_content = 0;
+ printf("-------------------------------------------------------------\n");
+ }
+ if(ch_d->remains == 1)
+ printf("=============================================================\n");
+ return CURL_CHUNK_END_FUNC_OK;
+}
+
+int test(char *URL)
+{
+ CURL *handle = NULL;
+ CURLcode res = CURLE_OK;
+ chunk_data_t chunk_data = {0,0};
+ curl_global_init(CURL_GLOBAL_ALL);
+ handle = curl_easy_init();
+ if(!handle) {
+ res = CURLE_OUT_OF_MEMORY;
+ goto test_cleanup;
+ }
+
+ test_setopt(handle, CURLOPT_URL, URL);
+ test_setopt(handle, CURLOPT_WILDCARDMATCH, 1L);
+ test_setopt(handle, CURLOPT_CHUNK_BGN_FUNCTION, chunk_bgn);
+ test_setopt(handle, CURLOPT_CHUNK_END_FUNCTION, chunk_end);
+ test_setopt(handle, CURLOPT_CHUNK_DATA, &chunk_data);
+
+ res = curl_easy_perform(handle);
+
+test_cleanup:
+ if(handle)
+ curl_easy_cleanup(handle);
+ curl_global_cleanup();
+ return res;
+}
diff --git a/tests/libtest/lib577.c b/tests/libtest/lib577.c
new file mode 100644
index 0000000..bd52c62
--- /dev/null
+++ b/tests/libtest/lib577.c
@@ -0,0 +1,255 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include "test.h"
+
+/*
+ * This hacky test bypasses the library external API,
+ * using internal only libcurl functions. So don't be
+ * surprised if we cannot run it when the library has
+ * been built with hidden symbols, exporting only the
+ * ones in the public API.
+ */
+
+#if defined(CURL_HIDDEN_SYMBOLS)
+# define SKIP_TEST 1
+#elif defined(WIN32) && !defined(CURL_STATICLIB)
+# define SKIP_TEST 1
+#else
+# undef SKIP_TEST
+#endif
+
+
+#if !defined(SKIP_TEST)
+
+#include "memdebug.h"
+
+#include "curl_fnmatch.h"
+
+#define MATCH CURL_FNMATCH_MATCH
+#define NOMATCH CURL_FNMATCH_NOMATCH
+#define RE_ERR CURL_FNMATCH_FAIL
+
+#define MAX_PATTERN_L 100
+#define MAX_STRING_L 100
+
+struct testcase {
+ char pattern[MAX_PATTERN_L];
+ char string[MAX_STRING_L];
+ int result;
+};
+
+static const struct testcase tests[] = {
+ /* brackets syntax */
+ { "\\[", "[", MATCH },
+ { "[", "[", RE_ERR },
+ { "[]", "[]", RE_ERR },
+ { "[][]", "[", MATCH },
+ { "[][]", "]", MATCH },
+ { "[[]", "[", MATCH },
+ { "[[[]", "[", MATCH },
+ { "[[[[]", "[", MATCH },
+ { "[[[[]", "[", MATCH },
+
+ { "[][[]", "]", MATCH },
+ { "[][[[]", "[", MATCH },
+ { "[[]", "]", NOMATCH },
+
+ { "[a-z]", "a", MATCH },
+ { "[a-z]", "A", NOMATCH },
+ { "?[a-z]", "?Z", NOMATCH },
+ { "[A-Z]", "C", MATCH },
+ { "[A-Z]", "c", NOMATCH },
+ { "[0-9]", "7", MATCH },
+ { "[7-8]", "7", MATCH },
+ { "[7-]", "7", MATCH },
+ { "[7-]", "-", MATCH },
+ { "[7-]", "[", NOMATCH },
+ { "[a-bA-F]", "F", MATCH },
+ { "[a-bA-B9]", "9", MATCH },
+ { "[a-bA-B98]", "8", MATCH },
+ { "[a-bA-B98]", "C", NOMATCH },
+ { "[a-bA-Z9]", "F", MATCH },
+ { "[a-bA-Z9]ero*", "Zero chance.", MATCH },
+ { "S[a-][x]opho*", "Saxophone", MATCH },
+ { "S[a-][x]opho*", "SaXophone", NOMATCH },
+ { "S[a-][x]*.txt", "S-x.txt", MATCH },
+ { "[\\a-\\b]", "a", MATCH },
+ { "[\\a-\\b]", "b", MATCH },
+ { "[?*[][?*[][?*[]", "?*[", MATCH },
+ { "[][?*-]", "]", MATCH },
+ { "[][?*-]", "[", MATCH },
+ { "[][?*-]", "?", MATCH },
+ { "[][?*-]", "*", MATCH },
+ { "[][?*-]", "-", MATCH },
+ { "[]?*-]", "-", MATCH },
+ { "?/b/c", "a/b/c", MATCH },
+ { "^_{}~", "^_{}~", MATCH },
+ { "!#%+,-./01234567889", "!#%+,-./01234567889", MATCH },
+ { "PQRSTUVWXYZ]abcdefg", "PQRSTUVWXYZ]abcdefg", MATCH },
+ { ":;=@ABCDEFGHIJKLMNO", ":;=@ABCDEFGHIJKLMNO", MATCH },
+
+ /* negate */
+ { "[!a]", "b", MATCH },
+ { "[!a]", "a", NOMATCH },
+ { "[^a]", "b", MATCH },
+ { "[^a]", "a", NOMATCH },
+ { "[^a-z0-9A-Z]", "a", NOMATCH },
+ { "[^a-z0-9A-Z]", "-", MATCH },
+ { "curl[!a-z]lib", "curl lib", MATCH },
+ { "curl[! ]lib", "curl lib", NOMATCH },
+ { "[! ][ ]", " ", NOMATCH },
+ { "[! ][ ]", "a ", MATCH },
+ { "*[^a].t?t", "a.txt", NOMATCH },
+ { "*[^a].t?t", "ba.txt", NOMATCH },
+ { "*[^a].t?t", "ab.txt", MATCH },
+ { "[!?*[]", "?", NOMATCH },
+ { "[!!]", "!", NOMATCH },
+ { "[!!]", "x", MATCH },
+
+ { "[[:alpha:]]", "a", MATCH },
+ { "[[:alpha:]]", "9", NOMATCH },
+ { "[[:alnum:]]", "a", MATCH },
+ { "[[:alnum:]]", "[", NOMATCH },
+ { "[[:alnum:]]", "]", NOMATCH },
+ { "[[:alnum:]]", "9", MATCH },
+ { "[[:digit:]]", "9", MATCH },
+ { "[[:xdigit:]]", "9", MATCH },
+ { "[[:xdigit:]]", "F", MATCH },
+ { "[[:xdigit:]]", "G", NOMATCH },
+ { "[[:upper:]]", "U", MATCH },
+ { "[[:upper:]]", "u", NOMATCH },
+ { "[[:lower:]]", "l", MATCH },
+ { "[[:lower:]]", "L", NOMATCH },
+ { "[[:print:]]", "L", MATCH },
+ { "[[:print:]]", {'\10'}, NOMATCH },
+ { "[[:print:]]", {'\10'}, NOMATCH },
+ { "[[:space:]]", " ", MATCH },
+ { "[[:space:]]", "x", NOMATCH },
+ { "[[:graph:]]", " ", NOMATCH },
+ { "[[:graph:]]", "x", MATCH },
+ { "[[:blank:]]", {'\t'}, MATCH },
+ { "[[:blank:]]", {' '}, MATCH },
+ { "[[:blank:]]", {'\r'}, NOMATCH },
+ { "[^[:blank:]]", {'\t'}, NOMATCH },
+ { "[^[:print:]]", {'\10'}, MATCH },
+ { "[[:lower:]][[:lower:]]", "ll", MATCH },
+
+ { "Curl[[:blank:]];-)", "Curl ;-)", MATCH },
+ { "*[[:blank:]]*", " ", MATCH },
+ { "*[[:blank:]]*", "", NOMATCH },
+ { "*[[:blank:]]*", "hi, im_Pavel", MATCH },
+
+ /* common using */
+ { "filename.dat", "filename.dat", MATCH },
+ { "*curl*", "lets use curl!!", MATCH },
+ { "filename.txt", "filename.dat", NOMATCH },
+ { "*.txt", "text.txt", MATCH },
+ { "*.txt", "a.txt", MATCH },
+ { "*.txt", ".txt", MATCH },
+ { "*.txt", "txt", NOMATCH },
+ { "??.txt", "99.txt", MATCH },
+ { "??.txt", "a99.txt", NOMATCH },
+ { "?.???", "a.txt", MATCH },
+ { "*.???", "somefile.dat", MATCH },
+ { "*.???", "photo.jpeg", NOMATCH },
+ { ".*", ".htaccess", MATCH },
+ { ".*", ".", MATCH },
+ { ".*", "..", MATCH },
+
+ /* many stars => one star */
+ { "**.txt", "text.txt", MATCH },
+ { "***.txt", "t.txt", MATCH },
+ { "****.txt", ".txt", MATCH },
+
+ /* empty string or pattern */
+ { "", "", MATCH } ,
+ { "", "hello", NOMATCH },
+ { "file", "", NOMATCH },
+ { "?", "", NOMATCH },
+ { "*", "", MATCH },
+ { "x", "", NOMATCH },
+
+ /* backslash */
+ { "\\", "\\", RE_ERR },
+ { "\\\\", "\\", MATCH },
+ { "\\\\", "\\\\", NOMATCH },
+ { "\\?", "?", MATCH },
+ { "\\*", "*", MATCH },
+ { "?.txt", "?.txt", MATCH },
+ { "*.txt", "*.txt", MATCH },
+ { "\\?.txt", "?.txt", MATCH },
+ { "\\*.txt", "*.txt", MATCH },
+ { "\\?.txt", "x.txt", NOMATCH },
+ { "\\*.txt", "x.txt", NOMATCH },
+ { "\\*\\\\.txt", "*\\.txt", MATCH },
+ { "*\\**\\?*\\\\*", "cc*cc?cc\\cc*cc", MATCH },
+ { "*\\**\\?*\\\\*", "cc*cc?cccc", NOMATCH },
+ { "*\\**\\?*\\\\*", "cc*cc?cc\\cc*cc", MATCH },
+ { "*\\?*\\**", "cc?c*c", MATCH },
+ { "*\\?*\\**curl*", "cc?c*curl", MATCH },
+ { "*\\?*\\**", "cc?cc", NOMATCH },
+ { "\\\"\\$\\&\\'\\(\\)", "\"$&'()", MATCH },
+ { "\\*\\?\\[\\\\\\`\\|", "*?[\\`|", MATCH },
+ { "[\\a\\b]c", "ac", MATCH },
+ { "[\\a\\b]c", "bc", MATCH },
+ { "[\\a\\b]d", "bc", NOMATCH },
+ { "[a-bA-B\\?]", "?", MATCH },
+ { "cu[a-ab-b\\r]l", "curl", MATCH },
+ { "[\\a-z]", "c", MATCH },
+
+ { "?*?*?.*?*", "abc.c", MATCH },
+ { "?*?*?.*?*", "abcc", NOMATCH },
+ { "?*?*?.*?*", "abc.", NOMATCH },
+ { "?*?*?.*?*", "abc.c++", MATCH },
+ { "?*?*?.*?*", "abcdef.c++", MATCH },
+ { "?*?*?.?", "abcdef.c", MATCH },
+ { "?*?*?.?", "abcdef.cd", NOMATCH },
+
+ { "Lindmätarv", "Lindmätarv", MATCH },
+
+ { "", "", MATCH }
+};
+
+
+int test(char *URL)
+{
+ int testnum = sizeof(tests) / sizeof(struct testcase);
+ int i, rc;
+ (void)URL; /* not used */
+
+ if(!strcmp(URL, "check")) {
+ /* test harness script verifying if this test can run */
+ return 0; /* sure, run this! */
+ }
+
+ printf("===========================\n");
+ for(i = 0; i < testnum; i++) {
+ rc = Curl_fnmatch(NULL, tests[i].pattern, tests[i].string);
+ if(rc != tests[i].result) {
+ printf("Curl_fnmatch(\"%s\", \"%s\") should return %d (returns %d)\n",
+ tests[i].pattern, tests[i].string, tests[i].result, rc);
+ }
+ }
+ printf("===========================\n");
+ return 0;
+}
+
+#else /* !defined(SKIP_TEST) */
+
+
+int test(char *URL)
+{
+ (void)URL;
+ fprintf(stdout, "libcurl built with hidden symbols");
+ return 1; /* skip test */
+}
+
+
+#endif /* !defined(SKIP_TEST) */
diff --git a/tests/libtest/lib578.c b/tests/libtest/lib578.c
new file mode 100644
index 0000000..2efb003
--- /dev/null
+++ b/tests/libtest/lib578.c
@@ -0,0 +1,90 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include "test.h"
+
+#include "memdebug.h"
+
+/* The size of data should be kept below MAX_INITIAL_POST_SIZE! */
+static char data[]="this is a short string.\n";
+
+static size_t data_size = sizeof(data) / sizeof(char);
+
+static int progress_callback(void *clientp, double dltotal, double dlnow, double ultotal, double ulnow)
+{
+ FILE *moo = fopen(libtest_arg2, "wb");
+
+ (void)clientp; /* UNUSED */
+ (void)dltotal; /* UNUSED */
+ (void)dlnow; /* UNUSED */
+
+ if(moo) {
+ if ((size_t)ultotal == data_size && (size_t)ulnow == data_size)
+ fprintf(moo, "PASSED, UL data matched data size\n");
+ else
+ fprintf(moo, "Progress callback called with UL %f out of %f\n", ulnow, ultotal);
+ fclose(moo);
+ }
+ return 0;
+}
+
+int test(char *URL)
+{
+ CURL *curl;
+ CURLcode res=CURLE_OK;
+
+ if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ if ((curl = curl_easy_init()) == NULL) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ /* First set the URL that is about to receive our POST. */
+ test_setopt(curl, CURLOPT_URL, URL);
+
+ /* Now specify we want to POST data */
+ test_setopt(curl, CURLOPT_POST, 1L);
+
+#ifdef CURL_DOES_CONVERSIONS
+ /* Convert the POST data to ASCII */
+ test_setopt(curl, CURLOPT_TRANSFERTEXT, 1L);
+#endif
+
+ /* Set the expected POST size */
+ test_setopt(curl, CURLOPT_POSTFIELDSIZE, data_size);
+ test_setopt(curl, CURLOPT_POSTFIELDS, data);
+
+ /* we want to use our own progress function */
+ test_setopt(curl, CURLOPT_NOPROGRESS, 0L);
+ test_setopt(curl, CURLOPT_PROGRESSFUNCTION, progress_callback);
+
+ /* pointer to pass to our read function */
+
+ /* get verbose debug output please */
+ test_setopt(curl, CURLOPT_VERBOSE, 1L);
+
+ /* include headers in the output */
+ test_setopt(curl, CURLOPT_HEADER, 1L);
+
+ /* Perform the request, res will get the return code */
+ res = curl_easy_perform(curl);
+
+test_cleanup:
+
+ /* always cleanup */
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+
+ return res;
+}
diff --git a/tests/libtest/lib579.c b/tests/libtest/lib579.c
new file mode 100644
index 0000000..2b80ab0
--- /dev/null
+++ b/tests/libtest/lib579.c
@@ -0,0 +1,149 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include "test.h"
+
+#include "memdebug.h"
+
+static const char * const post[]={
+ "one",
+ "two",
+ "three",
+ "and a final longer crap: four",
+ NULL
+};
+
+
+struct WriteThis {
+ int counter;
+};
+
+static int progress_callback(void *clientp, double dltotal, double dlnow,
+ double ultotal, double ulnow)
+{
+ FILE *moo;
+ static int prev_ultotal = -1;
+ static int prev_ulnow = -1;
+ (void)clientp; /* UNUSED */
+ (void)dltotal; /* UNUSED */
+ (void)dlnow; /* UNUSED */
+
+ /* to avoid depending on timing, which will cause this progress function to
+ get called a different number of times depending on circumstances, we
+ only log these lines if the numbers are different from the previous
+ invoke */
+ if((prev_ultotal != (int)ultotal) ||
+ (prev_ulnow != (int)ulnow)) {
+
+ moo = fopen(libtest_arg2, "ab");
+ if(moo) {
+ fprintf(moo, "Progress callback called with UL %d out of %d\n",
+ (int)ulnow, (int)ultotal);
+ fclose(moo);
+ }
+ prev_ulnow = (int) ulnow;
+ prev_ultotal = (int) ultotal;
+ }
+ return 0;
+}
+
+static size_t read_callback(void *ptr, size_t size, size_t nmemb, void *userp)
+{
+ struct WriteThis *pooh = (struct WriteThis *)userp;
+ const char *data;
+
+ if(size*nmemb < 1)
+ return 0;
+
+ data = post[pooh->counter];
+
+ if(data) {
+ size_t len = strlen(data);
+ memcpy(ptr, data, len);
+ pooh->counter++; /* advance pointer */
+ return len;
+ }
+ return 0; /* no more data left to deliver */
+}
+
+int test(char *URL)
+{
+ CURL *curl;
+ CURLcode res=CURLE_OK;
+ struct curl_slist *slist = NULL;
+ struct WriteThis pooh;
+ pooh.counter = 0;
+
+ if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ if ((curl = curl_easy_init()) == NULL) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ slist = curl_slist_append(slist, "Transfer-Encoding: chunked");
+ if (slist == NULL) {
+ fprintf(stderr, "curl_slist_append() failed\n");
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ /* First set the URL that is about to receive our POST. */
+ test_setopt(curl, CURLOPT_URL, URL);
+
+ /* Now specify we want to POST data */
+ test_setopt(curl, CURLOPT_POST, 1L);
+
+#ifdef CURL_DOES_CONVERSIONS
+ /* Convert the POST data to ASCII */
+ test_setopt(curl, CURLOPT_TRANSFERTEXT, 1L);
+#endif
+
+ /* we want to use our own read function */
+ test_setopt(curl, CURLOPT_READFUNCTION, read_callback);
+
+ /* pointer to pass to our read function */
+ test_setopt(curl, CURLOPT_INFILE, &pooh);
+
+ /* get verbose debug output please */
+ test_setopt(curl, CURLOPT_VERBOSE, 1L);
+
+ /* include headers in the output */
+ test_setopt(curl, CURLOPT_HEADER, 1L);
+
+ /* enforce chunked transfer by setting the header */
+ test_setopt(curl, CURLOPT_HTTPHEADER, slist);
+
+ test_setopt(curl, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST);
+ test_setopt(curl, CURLOPT_USERPWD, "foo:bar");
+
+ /* we want to use our own progress function */
+ test_setopt(curl, CURLOPT_NOPROGRESS, 0L);
+ test_setopt(curl, CURLOPT_PROGRESSFUNCTION, progress_callback);
+
+ /* Perform the request, res will get the return code */
+ res = curl_easy_perform(curl);
+
+test_cleanup:
+
+ /* clean up the headers list */
+ if(slist)
+ curl_slist_free_all(slist);
+
+ /* always cleanup */
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+
+ return res;
+}
diff --git a/tests/libtest/sethostname.c b/tests/libtest/sethostname.c
new file mode 100644
index 0000000..3dabb82
--- /dev/null
+++ b/tests/libtest/sethostname.c
@@ -0,0 +1,29 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#include "setup.h"
+
+#include "sethostname.h"
+
+/*
+ * we force our own host name, in order to make some tests machine independent
+ */
+
+int gethostname(char *name, GETHOSTNAME_TYPE_ARG2 namelen)
+{
+ const char *force_hostname = getenv("CURL_GETHOSTNAME");
+ if(force_hostname) {
+ strncpy(name, force_hostname, namelen);
+ name[namelen-1] = '\0';
+ return 0;
+ }
+
+ /* LD_PRELOAD used, but no hostname set, we'll just return a failure */
+ return -1;
+}
diff --git a/tests/libtest/sethostname.h b/tests/libtest/sethostname.h
new file mode 100644
index 0000000..83034a5
--- /dev/null
+++ b/tests/libtest/sethostname.h
@@ -0,0 +1,32 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+#if (defined(WIN32) || defined(__SYMBIAN32__)) && !defined(CURL_STATICLIB)
+# if defined(BUILDING_LIBCURL)
+# define LIBHOSTNAME_EXTERN __declspec(dllexport)
+# else
+# define LIBHOSTNAME_EXTERN __declspec(dllimport)
+# endif
+#else
+# ifdef CURL_HIDDEN_SYMBOLS
+# define LIBHOSTNAME_EXTERN CURL_EXTERN_SYMBOL
+# else
+# define LIBHOSTNAME_EXTERN
+# endif
+#endif
+
+#ifdef USE_WINSOCK
+# define FUNCALLCONV __stdcall
+#else
+# define FUNCALLCONV
+#endif
+
+LIBHOSTNAME_EXTERN int FUNCALLCONV
+ gethostname(char *name, GETHOSTNAME_TYPE_ARG2 namelen);
+
diff --git a/tests/libtest/test.h b/tests/libtest/test.h
new file mode 100644
index 0000000..2a36711
--- /dev/null
+++ b/tests/libtest/test.h
@@ -0,0 +1,59 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+/* Now include the setup.h file from libcurl's private libdir (the source
+ version, but that might include "curl_config.h" from the build dir so we
+ need both of them in the include path), so that we get good in-depth
+ knowledge about the system we're building this on */
+
+#define CURL_NO_OLDIES
+
+#include "setup.h"
+
+#include <curl/curl.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <errno.h>
+
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#ifdef HAVE_SYS_SELECT_H
+/* since so many tests use select(), we can just as well include it here */
+#include <sys/select.h>
+#endif
+#ifdef HAVE_UNISTD_H
+/* at least somewhat oldish FreeBSD systems need this for select() */
+#include <unistd.h>
+#endif
+
+#ifdef TPF
+# include "select.h"
+#endif
+
+#define TEST_ERR_MAJOR_BAD 100
+#define TEST_ERR_RUNS_FOREVER 99
+
+#define test_setopt(A,B,C) \
+ if((res = curl_easy_setopt((A),(B),(C))) != CURLE_OK) goto test_cleanup
+
+extern char *libtest_arg2; /* set by first.c to the argv[2] or NULL */
+extern char *libtest_arg3; /* set by first.c to the argv[3] or NULL */
+
+/* argc and argv as passed in to the main() function */
+extern int test_argc;
+extern char **test_argv;
+
+extern int select_test(int num_fds, fd_set *rd, fd_set *wr, fd_set *exc,
+ struct timeval *tv);
+
+extern int test(char *URL); /* the actual test function provided by each
+ individual libXXX.c file */
+
diff --git a/tests/libtest/test1013.pl b/tests/libtest/test1013.pl
new file mode 100755
index 0000000..99ad524
--- /dev/null
+++ b/tests/libtest/test1013.pl
@@ -0,0 +1,49 @@
+#!/usr/bin/env perl
+# Determine if curl-config --protocols/--features matches the
+# curl --version protocols/features
+if ( $#ARGV != 2 )
+{
+ print "Usage: $0 curl-config-script curl-version-output-file features|protocols\n";
+ exit 3;
+}
+
+my $what=$ARGV[2];
+
+# Read the output of curl --version
+my $curl_protocols="";
+open(CURL, "$ARGV[1]") || die "Can't get curl $what list\n";
+while( <CURL> )
+{
+ $curl_protocols = lc($_) if ( /$what:/i );
+}
+close CURL;
+
+$curl_protocols =~ /\w+: (.*)$/;
+@curl = split / /,$1;
+
+# These features are not supported by curl-config
+@curl = grep(!/^(Debug|TrackMemory|Largefile|CharConv|GSS-Negotiate|SPNEGO)$/i, @curl);
+@curl = sort @curl;
+
+# Read the output of curl-config
+my @curl_config;
+open(CURLCONFIG, "sh $ARGV[0] --$what|") || die "Can't get curl-config $what list\n";
+while( <CURLCONFIG> )
+{
+ chomp;
+ push @curl_config, lc($_);
+}
+close CURLCONFIG;
+
+@curl_config = sort @curl_config;
+
+my $curlproto = join ' ', @curl;
+my $curlconfigproto = join ' ', @curl_config;
+
+my $different = $curlproto ne $curlconfigproto;
+if ($different) {
+ print "Mismatch in $what lists:\n";
+ print "curl: $curlproto\n";
+ print "curl-config: $curlconfigproto\n";
+}
+exit $different;
diff --git a/tests/libtest/test1022.pl b/tests/libtest/test1022.pl
new file mode 100755
index 0000000..60eee38
--- /dev/null
+++ b/tests/libtest/test1022.pl
@@ -0,0 +1,45 @@
+#!/usr/bin/env perl
+# Determine if curl-config --version matches the curl --version
+if ( $#ARGV != 2 )
+{
+ print "Usage: $0 curl-config-script curl-version-output-file version|vernum\n";
+ exit 3;
+}
+
+my $what=$ARGV[2];
+
+# Read the output of curl --version
+open(CURL, "$ARGV[1]") || die "Can't open curl --version list in $ARGV[1]\n";
+$_ = <CURL>;
+chomp;
+/libcurl\/([\.\d]+(-DEV)?)/;
+my $version = $1;
+close CURL;
+
+my $curlconfigversion;
+
+# Read the output of curl-config --version/--vernum
+open(CURLCONFIG, "sh $ARGV[0] --$what|") || die "Can't get curl-config --$what list\n";
+$_ = <CURLCONFIG>;
+chomp;
+if ( $what eq "version" ) {
+ /^libcurl ([\.\d]+(-DEV)?)$/ ;
+ $curlconfigversion = $1;
+}
+else {
+ # Convert hex version to decimal for comparison's sake
+ /^(..)(..)(..)$/ ;
+ $curlconfigversion = hex($1) . "." . hex($2) . "." . hex($3);
+
+ # Strip off the -DEV from the curl version if it's there
+ $version =~ s/-DEV$//;
+}
+close CURLCONFIG;
+
+my $different = $version ne $curlconfigversion;
+if ($different || !$version) {
+ print "Mismatch in --version:\n";
+ print "curl: $version\n";
+ print "curl-config: $curlconfigversion\n";
+ exit 1;
+}
diff --git a/tests/libtest/test307.pl b/tests/libtest/test307.pl
new file mode 100755
index 0000000..469af3c
--- /dev/null
+++ b/tests/libtest/test307.pl
@@ -0,0 +1,19 @@
+#!/usr/bin/env perl
+# Determine if the given curl executable supports the 'openssl' SSL engine
+if ( $#ARGV != 0 )
+{
+ print "Usage: $0 curl-executable\n";
+ exit 3;
+}
+if (!open(CURL, "@ARGV[0] -s --engine list|"))
+{
+ print "Can't get SSL engine list\n";
+ exit 2;
+}
+while( <CURL> )
+{
+ exit 0 if ( /openssl/ );
+}
+close CURL;
+print "openssl engine not supported\n";
+exit 1;
diff --git a/tests/libtest/test610.pl b/tests/libtest/test610.pl
new file mode 100755
index 0000000..a900d94
--- /dev/null
+++ b/tests/libtest/test610.pl
@@ -0,0 +1,33 @@
+#!/usr/bin/env perl
+# Perform simple file and directory manipulation in a portable way
+if ( $#ARGV <= 0 )
+{
+ print "Usage: $0 mkdir|rmdir|rm|move|gone path1 [path2] [more commands...]\n";
+ exit 1;
+}
+
+use File::Copy;
+while(@ARGV) {
+ my $cmd = shift @ARGV;
+ my $arg = shift @ARGV;
+ if ($cmd eq "mkdir") {
+ mkdir $arg || die "$!";
+ }
+ elsif ($cmd eq "rmdir") {
+ rmdir $arg || die "$!";
+ }
+ elsif ($cmd eq "rm") {
+ unlink $arg || die "$!";
+ }
+ elsif ($cmd eq "move") {
+ my $arg2 = shift @ARGV;
+ move($arg,$arg2) || die "$!";
+ }
+ elsif ($cmd eq "gone") {
+ ! -e $arg || die "Path $arg exists";
+ } else {
+ print "Unsupported command $cmd\n";
+ exit 1;
+ }
+}
+exit 0;
diff --git a/tests/libtest/test613.pl b/tests/libtest/test613.pl
new file mode 100755
index 0000000..b4caaae
--- /dev/null
+++ b/tests/libtest/test613.pl
@@ -0,0 +1,105 @@
+#!/usr/bin/env perl
+# Prepare a directory with known files and clean up afterwards
+use Time::Local;
+
+if ( $#ARGV < 1 )
+{
+ print "Usage: $0 prepare|postprocess dir [logfile]\n";
+ exit 1;
+}
+
+# <precheck> expects an error message on stdout
+sub errout {
+ print $_[0] . "\n";
+ exit 1;
+}
+
+if ($ARGV[0] eq "prepare")
+{
+ my $dirname = $ARGV[1];
+ mkdir $dirname || errout "$!";
+ chdir $dirname;
+
+ # Create the files in alphabetical order, to increase the chances
+ # of receiving a consistent set of directory contents regardless
+ # of whether the server alphabetizes the results or not.
+ mkdir "asubdir" || errout "$!";
+ chmod 0777, "asubdir";
+
+ open(FILE, ">plainfile.txt") || errout "$!";
+ binmode FILE;
+ print FILE "Test file to support curl test suite\n";
+ close(FILE);
+ utime time, timegm(0,0,12,1,0,100), "plainfile.txt";
+ chmod 0666, "plainfile.txt";
+
+ open(FILE, ">rofile.txt") || errout "$!";
+ binmode FILE;
+ print FILE "Read-only test file to support curl test suite\n";
+ close(FILE);
+ utime time, timegm(0,0,12,31,11,100), "rofile.txt";
+ chmod 0444, "rofile.txt";
+
+ exit 0;
+}
+elsif ($ARGV[0] eq "postprocess")
+{
+ my $dirname = $ARGV[1];
+ my $logfile = $ARGV[2];
+
+ # Clean up the test directory
+ unlink "$dirname/rofile.txt";
+ unlink "$dirname/plainfile.txt";
+ rmdir "$dirname/asubdir";
+
+ rmdir $dirname || die "$!";
+
+ if ($logfile) {
+ # Process the directory file to remove all information that
+ # could be inconsistent from one test run to the next (e.g.
+ # file date) or may be unsupported on some platforms (e.g.
+ # Windows). Also, since 7.17.0, the sftp directory listing
+ # format can be dependent on the server (with a recent
+ # enough version of libssh2) so this script must also
+ # canonicalize the format. Here are examples of the general
+ # format supported:
+ # -r--r--r-- 12 ausername grp 47 Dec 31 2000 rofile.txt
+ # -r--r--r-- 1 1234 4321 47 Dec 31 2000 rofile.txt
+ # The "canonical" format is similar to the first (which is
+ # the one generated on a typical Linux installation):
+ # -r-?r-?r-? 12 U U 47 Dec 31 2000 rofile.txt
+
+ my @canondir;
+ open(IN, "<$logfile") || die "$!";
+ while (<IN>) {
+ /^(.)(..).(..).(..).\s*(\S+)\s+\S+\s+\S+\s+(\S+)\s+(\S+\s+\S+\s+\S+)(.*)$/;
+ if ($1 eq "d") {
+ # Erase all directory metadata except for the name, as it is not
+ # consistent for across all test systems and filesystems
+ push @canondir, "d????????? N U U N ??? N NN:NN$8\n";
+ } elsif ($1 eq "-") {
+ # Erase user and group names, as they are not consistent across
+ # all test systems
+ my $line = sprintf("%s%s?%s?%s?%5d U U %15d %s%s\n", $1,$2,$3,$4,$5,$6,$7,$8);
+ push @canondir, $line;
+ } else {
+ # Unexpected format; just pass it through and let the test fail
+ push @canondir, $_;
+ }
+ }
+ close(IN);
+
+ @canondir = sort {substr($a,57) cmp substr($b,57)} @canondir;
+ my $newfile = $logfile . ".new";
+ open(OUT, ">$newfile") || die "$!";
+ print OUT join('', @canondir);
+ close(OUT);
+
+ unlink $logfile;
+ rename $newfile, $logfile;
+ }
+
+ exit 0;
+}
+print "Unsupported command $ARGV[0]\n";
+exit 1;
diff --git a/tests/libtest/test75.pl b/tests/libtest/test75.pl
new file mode 100755
index 0000000..31cdfb8
--- /dev/null
+++ b/tests/libtest/test75.pl
@@ -0,0 +1,13 @@
+#!/usr/bin/env perl
+# Check that the length of a given URL is correct
+if ( $#ARGV != 1 )
+{
+ print "Usage: $0 string length\n";
+ exit 3;
+}
+if (length(@ARGV[0]) != @ARGV[1])
+{
+ print "Given host IP and port not supported\n";
+ exit 1;
+}
+exit 0;
diff --git a/tests/libtest/testutil.c b/tests/libtest/testutil.c
new file mode 100644
index 0000000..63393c5
--- /dev/null
+++ b/tests/libtest/testutil.c
@@ -0,0 +1,135 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2008, Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at http://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ***************************************************************************/
+
+#include "setup.h"
+
+#include "testutil.h"
+#include "memdebug.h"
+
+#if defined(WIN32) && !defined(MSDOS)
+
+struct timeval tutil_tvnow(void)
+{
+ /*
+ ** GetTickCount() is available on _all_ Windows versions from W95 up
+ ** to nowadays. Returns milliseconds elapsed since last system boot,
+ ** increases monotonically and wraps once 49.7 days have elapsed.
+ */
+ struct timeval now;
+ DWORD milliseconds = GetTickCount();
+ now.tv_sec = milliseconds / 1000;
+ now.tv_usec = (milliseconds % 1000) * 1000;
+ return now;
+}
+
+#elif defined(HAVE_CLOCK_GETTIME_MONOTONIC)
+
+struct timeval tutil_tvnow(void)
+{
+ /*
+ ** clock_gettime() is granted to be increased monotonically when the
+ ** monotonic clock is queried. Time starting point is unspecified, it
+ ** could be the system start-up time, the Epoch, or something else,
+ ** in any case the time starting point does not change once that the
+ ** system has started up.
+ */
+ struct timeval now;
+ struct timespec tsnow;
+ if(0 == clock_gettime(CLOCK_MONOTONIC, &tsnow)) {
+ now.tv_sec = tsnow.tv_sec;
+ now.tv_usec = tsnow.tv_nsec / 1000;
+ }
+ /*
+ ** Even when the configure process has truly detected monotonic clock
+ ** availability, it might happen that it is not actually available at
+ ** run-time. When this occurs simply fallback to other time source.
+ */
+#ifdef HAVE_GETTIMEOFDAY
+ else
+ (void)gettimeofday(&now, NULL);
+#else
+ else {
+ now.tv_sec = (long)time(NULL);
+ now.tv_usec = 0;
+ }
+#endif
+ return now;
+}
+
+#elif defined(HAVE_GETTIMEOFDAY)
+
+struct timeval tutil_tvnow(void)
+{
+ /*
+ ** gettimeofday() is not granted to be increased monotonically, due to
+ ** clock drifting and external source time synchronization it can jump
+ ** forward or backward in time.
+ */
+ struct timeval now;
+ (void)gettimeofday(&now, NULL);
+ return now;
+}
+
+#else
+
+struct timeval tutil_tvnow(void)
+{
+ /*
+ ** time() returns the value of time in seconds since the Epoch.
+ */
+ struct timeval now;
+ now.tv_sec = (long)time(NULL);
+ now.tv_usec = 0;
+ return now;
+}
+
+#endif
+
+/*
+ * Make sure that the first argument is the more recent time, as otherwise
+ * we'll get a weird negative time-diff back...
+ *
+ * Returns: the time difference in number of milliseconds.
+ */
+long tutil_tvdiff(struct timeval newer, struct timeval older)
+{
+ return (newer.tv_sec-older.tv_sec)*1000+
+ (newer.tv_usec-older.tv_usec)/1000;
+}
+
+/*
+ * Same as tutil_tvdiff but with full usec resolution.
+ *
+ * Returns: the time difference in seconds with subsecond resolution.
+ */
+double tutil_tvdiff_secs(struct timeval newer, struct timeval older)
+{
+ return (double)(newer.tv_sec-older.tv_sec)+
+ (double)(newer.tv_usec-older.tv_usec)/1000000.0;
+}
+
+/* return the number of seconds in the given input timeval struct */
+long tutil_tvlong(struct timeval t1)
+{
+ return t1.tv_sec;
+}
+
diff --git a/tests/libtest/testutil.h b/tests/libtest/testutil.h
new file mode 100644
index 0000000..6a322e3
--- /dev/null
+++ b/tests/libtest/testutil.h
@@ -0,0 +1,49 @@
+#ifndef __LIBTEST_TESTUTIL_H
+#define __LIBTEST_TESTUTIL_H
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2007, Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at http://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ***************************************************************************/
+
+#include "setup.h"
+
+
+struct timeval tutil_tvnow(void);
+
+/*
+ * Make sure that the first argument (t1) is the more recent time and t2 is
+ * the older time, as otherwise you get a weird negative time-diff back...
+ *
+ * Returns: the time difference in number of milliseconds.
+ */
+long tutil_tvdiff(struct timeval t1, struct timeval t2);
+
+/*
+ * Same as tutil_tvdiff but with full usec resolution.
+ *
+ * Returns: the time difference in seconds with subsecond resolution.
+ */
+double tutil_tvdiff_secs(struct timeval t1, struct timeval t2);
+
+long tutil_tvlong(struct timeval t1);
+
+
+#endif /* __LIBTEST_TESTUTIL_H */
+
diff --git a/tests/memanalyze.pl b/tests/memanalyze.pl
new file mode 100755
index 0000000..e9f9d22
--- /dev/null
+++ b/tests/memanalyze.pl
@@ -0,0 +1,356 @@
+#!/usr/bin/env perl
+#
+# Example input:
+#
+# MEM mprintf.c:1094 malloc(32) = e5718
+# MEM mprintf.c:1103 realloc(e5718, 64) = e6118
+# MEM sendf.c:232 free(f6520)
+
+my $mallocs=0;
+my $callocs=0;
+my $reallocs=0;
+my $strdups=0;
+my $showlimit;
+
+while(1) {
+ if($ARGV[0] eq "-v") {
+ $verbose=1;
+ shift @ARGV;
+ }
+ elsif($ARGV[0] eq "-t") {
+ $trace=1;
+ shift @ARGV;
+ }
+ elsif($ARGV[0] eq "-l") {
+ # only show what alloc that caused a memlimit failure
+ $showlimit=1;
+ shift @ARGV;
+ }
+ else {
+ last;
+ }
+}
+
+my $maxmem;
+
+sub newtotal {
+ my ($newtot)=@_;
+ # count a max here
+
+ if($newtot > $maxmem) {
+ $maxmem= $newtot;
+ }
+}
+
+my $file = $ARGV[0];
+
+if(! -f $file) {
+ print "Usage: memanalyze.pl [options] <dump file>\n",
+ "Options:\n",
+ " -l memlimit failure displayed\n",
+ " -v Verbose\n",
+ " -t Trace\n";
+ exit;
+}
+
+open(FILE, "<$file");
+
+if($showlimit) {
+ while(<FILE>) {
+ if(/^LIMIT.*memlimit$/) {
+ print $_;
+ last;
+ }
+ }
+ close(FILE);
+ exit;
+}
+
+
+my $lnum=0;
+while(<FILE>) {
+ chomp $_;
+ $line = $_;
+ $lnum++;
+ if($line =~ /^LIMIT ([^ ]*):(\d*) (.*)/) {
+ # new memory limit test prefix
+ my $i = $3;
+ my ($source, $linenum) = ($1, $2);
+ if($trace && ($i =~ /([^ ]*) reached memlimit/)) {
+ print "LIMIT: $1 returned error at $source:$linenum\n";
+ }
+ }
+ elsif($line =~ /^MEM ([^ ]*):(\d*) (.*)/) {
+ # generic match for the filename+linenumber
+ $source = $1;
+ $linenum = $2;
+ $function = $3;
+
+ if($function =~ /free\(0x([0-9a-f]*)/) {
+ $addr = $1;
+ if(!exists $sizeataddr{$addr}) {
+ print "FREE ERROR: No memory allocated: $line\n";
+ }
+ elsif(-1 == $sizeataddr{$addr}) {
+ print "FREE ERROR: Memory freed twice: $line\n";
+ print "FREE ERROR: Previously freed at: ".$getmem{$addr}."\n";
+ }
+ else {
+ $totalmem -= $sizeataddr{$addr};
+ if($trace) {
+ print "FREE: malloc at ".$getmem{$addr}." is freed again at $source:$linenum\n";
+ printf("FREE: %d bytes freed, left allocated: $totalmem bytes\n", $sizeataddr{$addr});
+ }
+
+ newtotal($totalmem);
+ $frees++;
+
+ $sizeataddr{$addr}=-1; # set -1 to mark as freed
+ $getmem{$addr}="$source:$linenum";
+
+ }
+ }
+ elsif($function =~ /malloc\((\d*)\) = 0x([0-9a-f]*)/) {
+ $size = $1;
+ $addr = $2;
+
+ if($sizeataddr{$addr}>0) {
+ # this means weeeeeirdo
+ print "Mixed debug compile ($source:$linenum at line $lnum), rebuild curl now\n";
+ print "We think $sizeataddr{$addr} bytes are already allocated at that memory address: $addr!\n";
+ }
+
+ $sizeataddr{$addr}=$size;
+ $totalmem += $size;
+
+ if($trace) {
+ print "MALLOC: malloc($size) at $source:$linenum",
+ " makes totally $totalmem bytes\n";
+ }
+
+ newtotal($totalmem);
+ $mallocs++;
+
+ $getmem{$addr}="$source:$linenum";
+ }
+ elsif($function =~ /calloc\((\d*),(\d*)\) = 0x([0-9a-f]*)/) {
+ $size = $1*$2;
+ $addr = $3;
+
+ $arg1 = $1;
+ $arg2 = $2;
+
+ if($sizeataddr{$addr}>0) {
+ # this means weeeeeirdo
+ print "Mixed debug compile, rebuild curl now\n";
+ }
+
+ $sizeataddr{$addr}=$size;
+ $totalmem += $size;
+
+ if($trace) {
+ print "CALLOC: calloc($arg1,$arg2) at $source:$linenum",
+ " makes totally $totalmem bytes\n";
+ }
+
+ newtotal($totalmem);
+ $callocs++;
+
+ $getmem{$addr}="$source:$linenum";
+ }
+ elsif($function =~ /realloc\((\(nil\)|0x([0-9a-f]*)), (\d*)\) = 0x([0-9a-f]*)/) {
+ my ($oldaddr, $newsize, $newaddr) = ($2, $3, $4);
+
+ $totalmem -= $sizeataddr{$oldaddr};
+ if($trace) {
+ printf("REALLOC: %d less bytes and ", $sizeataddr{$oldaddr});
+ }
+ $sizeataddr{$oldaddr}=0;
+
+ $totalmem += $newsize;
+ $sizeataddr{$newaddr}=$newsize;
+
+ if($trace) {
+ printf("%d more bytes ($source:$linenum)\n", $newsize);
+ }
+
+ newtotal($totalmem);
+ $reallocs++;
+
+ $getmem{$oldaddr}="";
+ $getmem{$newaddr}="$source:$linenum";
+ }
+ elsif($function =~ /strdup\(0x([0-9a-f]*)\) \((\d*)\) = 0x([0-9a-f]*)/) {
+ # strdup(a5b50) (8) = df7c0
+
+ $dup = $1;
+ $size = $2;
+ $addr = $3;
+ $getmem{$addr}="$source:$linenum";
+ $sizeataddr{$addr}=$size;
+
+ $totalmem += $size;
+
+ if($trace) {
+ printf("STRDUP: $size bytes at %s, makes totally: %d bytes\n",
+ $getmem{$addr}, $totalmem);
+ }
+
+ newtotal($totalmem);
+ $strdups++;
+ }
+ else {
+ print "Not recognized input line: $function\n";
+ }
+ }
+ # FD url.c:1282 socket() = 5
+ elsif($_ =~ /^FD ([^ ]*):(\d*) (.*)/) {
+ # generic match for the filename+linenumber
+ $source = $1;
+ $linenum = $2;
+ $function = $3;
+
+ if($function =~ /socket\(\) = (\d*)/) {
+ $filedes{$1}=1;
+ $getfile{$1}="$source:$linenum";
+ $openfile++;
+ }
+ elsif($function =~ /accept\(\) = (\d*)/) {
+ $filedes{$1}=1;
+ $getfile{$1}="$source:$linenum";
+ $openfile++;
+ }
+ elsif($function =~ /sclose\((\d*)\)/) {
+ if($filedes{$1} != 1) {
+ print "Close without open: $line\n";
+ }
+ else {
+ $filedes{$1}=0; # closed now
+ $openfile--;
+ }
+ }
+ }
+ # FILE url.c:1282 fopen("blabla") = 0x5ddd
+ elsif($_ =~ /^FILE ([^ ]*):(\d*) (.*)/) {
+ # generic match for the filename+linenumber
+ $source = $1;
+ $linenum = $2;
+ $function = $3;
+
+ if($function =~ /f[d]*open\(\"([^\"]*)\",\"([^\"]*)\"\) = (\(nil\)|0x([0-9a-f]*))/) {
+ if($3 eq "(nil)") {
+ ;
+ }
+ else {
+ $fopen{$4}=1;
+ $fopenfile{$4}="$source:$linenum";
+ $fopens++;
+ }
+ }
+ # fclose(0x1026c8)
+ elsif($function =~ /fclose\(0x([0-9a-f]*)\)/) {
+ if(!$fopen{$1}) {
+ print "fclose() without fopen(): $line\n";
+ }
+ else {
+ $fopen{$1}=0;
+ $fopens--;
+ }
+ }
+ }
+ # GETNAME url.c:1901 getnameinfo()
+ elsif($_ =~ /^GETNAME ([^ ]*):(\d*) (.*)/) {
+ # not much to do
+ }
+
+ # ADDR url.c:1282 getaddrinfo() = 0x5ddd
+ elsif($_ =~ /^ADDR ([^ ]*):(\d*) (.*)/) {
+ # generic match for the filename+linenumber
+ $source = $1;
+ $linenum = $2;
+ $function = $3;
+
+ if($function =~ /getaddrinfo\(\) = (\(nil\)|0x([0-9a-f]*))/) {
+ my $add = $2;
+ if($add eq "(nil)") {
+ ;
+ }
+ else {
+ $addrinfo{$add}=1;
+ $addrinfofile{$add}="$source:$linenum";
+ $addrinfos++;
+ }
+ if($trace) {
+ printf("GETADDRINFO ($source:$linenum)\n");
+ }
+ }
+ # fclose(0x1026c8)
+ elsif($function =~ /freeaddrinfo\(0x([0-9a-f]*)\)/) {
+ if(!$addrinfo{$1}) {
+ print "freeaddrinfo() without getaddrinfo(): $line\n";
+ }
+ else {
+ $addrinfo{$1}=0;
+ $addrinfos--;
+ }
+ if($trace) {
+ printf("FREEADDRINFO ($source:$linenum)\n");
+ }
+ }
+
+ }
+ else {
+ print "Not recognized prefix line: $line\n";
+ }
+}
+close(FILE);
+
+if($totalmem) {
+ print "Leak detected: memory still allocated: $totalmem bytes\n";
+
+ for(keys %sizeataddr) {
+ $addr = $_;
+ $size = $sizeataddr{$addr};
+ if($size > 0) {
+ print "At $addr, there's $size bytes.\n";
+ print " allocated by ".$getmem{$addr}."\n";
+ }
+ }
+}
+
+if($openfile) {
+ for(keys %filedes) {
+ if($filedes{$_} == 1) {
+ print "Open file descriptor created at ".$getfile{$_}."\n";
+ }
+ }
+}
+
+if($fopens) {
+ print "Open FILE handles left at:\n";
+ for(keys %fopen) {
+ if($fopen{$_} == 1) {
+ print "fopen() called at ".$fopenfile{$_}."\n";
+ }
+ }
+}
+
+if($addrinfos) {
+ print "IPv6-style name resolve data left at:\n";
+ for(keys %addrinfofile) {
+ if($addrinfo{$_} == 1) {
+ print "getaddrinfo() called at ".$addrinfofile{$_}."\n";
+ }
+ }
+}
+
+if($verbose) {
+ print "Mallocs: $mallocs\n",
+ "Reallocs: $reallocs\n",
+ "Callocs: $callocs\n",
+ "Strdups: $strdups\n",
+ "Frees: $frees\n",
+ "Allocations: ".($mallocs + $callocs + $reallocs + $strdups)."\n";
+
+ print "Maximum allocated: $maxmem\n";
+}
diff --git a/tests/rtspserver.pl b/tests/rtspserver.pl
new file mode 100755
index 0000000..515128d
--- /dev/null
+++ b/tests/rtspserver.pl
@@ -0,0 +1,108 @@
+#!/usr/bin/env perl
+#***************************************************************************
+# _ _ ____ _
+# Project ___| | | | _ \| |
+# / __| | | | |_) | |
+# | (__| |_| | _ <| |___
+# \___|\___/|_| \_\_____|
+#
+# Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+#
+# This software is licensed as described in the file COPYING, which
+# you should have received as part of this distribution. The terms
+# are also available at http://curl.haxx.se/docs/copyright.html.
+#
+# You may opt to use, copy, modify, merge, publish, distribute and/or sell
+# copies of the Software, and permit persons to whom the Software is
+# furnished to do so, under the terms of the COPYING file.
+#
+# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+# KIND, either express or implied.
+#
+#***************************************************************************
+
+BEGIN {
+ @INC=(@INC, $ENV{'srcdir'}, '.');
+}
+
+use strict;
+use warnings;
+
+use serverhelp qw(
+ server_pidfilename
+ server_logfilename
+ );
+
+my $verbose = 0; # set to 1 for debugging
+my $port = 8990; # just a default
+my $ipvnum = 4; # default IP version of rtsp server
+my $idnum = 1; # dafault rtsp server instance number
+my $proto = 'rtsp'; # protocol the rtsp server speaks
+my $pidfile; # rtsp server pid file
+my $logfile; # rtsp server log file
+my $srcdir;
+
+my $flags = "";
+my $path = '.';
+my $logdir = $path .'/log';
+
+while(@ARGV) {
+ if($ARGV[0] eq '--pidfile') {
+ if($ARGV[1]) {
+ $pidfile = $ARGV[1];
+ shift @ARGV;
+ }
+ }
+ elsif($ARGV[0] eq '--logfile') {
+ if($ARGV[1]) {
+ $logfile = $ARGV[1];
+ shift @ARGV;
+ }
+ }
+ elsif($ARGV[0] eq '--srcdir') {
+ if($ARGV[1]) {
+ $srcdir = $ARGV[1];
+ shift @ARGV;
+ }
+ }
+ elsif($ARGV[0] eq '--ipv4') {
+ $ipvnum = 4;
+ }
+ elsif($ARGV[0] eq '--ipv6') {
+ $ipvnum = 6;
+ }
+ elsif($ARGV[0] eq '--port') {
+ if($ARGV[1] =~ /^(\d+)$/) {
+ $port = $1;
+ shift @ARGV;
+ }
+ }
+ elsif($ARGV[0] eq '--id') {
+ if($ARGV[1] =~ /^(\d+)$/) {
+ $idnum = $1 if($1 > 0);
+ shift @ARGV;
+ }
+ }
+ elsif($ARGV[0] eq '--verbose') {
+ $verbose = 1;
+ }
+ else {
+ print STDERR "\nWarning: rtspserver.pl unknown parameter: $ARGV[0]\n";
+ }
+ shift @ARGV;
+}
+
+if(!$srcdir) {
+ $srcdir = $ENV{'srcdir'} || '.';
+}
+if(!$pidfile) {
+ $pidfile = "$path/". server_pidfilename($proto, $ipvnum, $idnum);
+}
+if(!$logfile) {
+ $logfile = server_logfilename($logdir, $proto, $ipvnum, $idnum);
+}
+
+$flags .= "--pidfile \"$pidfile\" --logfile \"$logfile\" ";
+$flags .= "--ipv$ipvnum --port $port --srcdir \"$srcdir\"";
+
+exec("server/rtspd $flags");
diff --git a/tests/runtests.1 b/tests/runtests.1
new file mode 100644
index 0000000..45f8783
--- /dev/null
+++ b/tests/runtests.1
@@ -0,0 +1,107 @@
+.\" **************************************************************************
+.\" * _ _ ____ _
+.\" * Project ___| | | | _ \| |
+.\" * / __| | | | |_) | |
+.\" * | (__| |_| | _ <| |___
+.\" * \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2007, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" *
+.\" * This software is licensed as described in the file COPYING, which
+.\" * you should have received as part of this distribution. The terms
+.\" * are also available at http://curl.haxx.se/docs/copyright.html.
+.\" *
+.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+.\" * copies of the Software, and permit persons to whom the Software is
+.\" * furnished to do so, under the terms of the COPYING file.
+.\" *
+.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+.\" * KIND, either express or implied.
+.\" *
+.\" **************************************************************************
+.\"
+.TH runtests.pl 1 "2 Feb 2010" "Curl 7.20.0" "runtests"
+.SH NAME
+runtests.pl \- run one or more test cases
+.SH SYNOPSIS
+.B runtests.pl [options] [test number] [!test number] [key word] [!key word]
+.SH DESCRIPTION
+\fIruntests.pl\fP runs one, several or all the existing test cases in curl's
+test suite. It is often called from the root Makefile of the curl package with
+\&'make test'.
+.SH "TEST NUMBER"
+If no test case number is given, all existing tests that the script can find
+will be considered for running. You can specify single test cases to run,
+space-separated, like "1 3 5 7 11", and you can specify a range like "45 to
+67". You can also specify only the tests you don't want to run by listing
+the numbers with a leading exclamation point, like "!66".
+.P
+It is also possible to specify tests to skip based on a key word describing
+the test. These are specified with a leading exclamation point and the
+key word or phrase, like "!HTTP NTLM auth". Likewise, tests to run can
+be specified simply by specifying the unadorned key words, like "FTPS".
+Remember that the exclamation marks and spaces will need to be quoted somehow
+when entered at many command shells.
+.SH OPTIONS
+.IP "-a"
+Continue running the rest of the test cases even if one test fails. By
+default, the test script stops as soon as an error is detected.
+.IP "-bN"
+Use N as the base TCP/UDP port number on which to start the test servers.
+.IP "-c <curl>"
+Provide a custom curl binary to run the tests with. Default is the curl
+executable in the build tree.
+.IP "-d"
+Enable protocol debug: have the servers display protocol output.
+.IP "-g"
+Run the given test(s) with gdb. This is best used on a single test case and
+curl built --disable-shared. This then fires up gdb with command line set to
+run the specified test case. Simply (set a break-point and) type 'run' to
+start.
+.IP "-h"
+Displays a help text about this program's command line options.
+.IP "-k"
+Keep output and log files in log/ after a test run, even if no error was
+detected. Useful for debugging.
+.IP "-l"
+Lists all test case names.
+.IP "-n"
+Disable the check for and use of valgrind.
+.IP "-p"
+Prints out all files in "log/" to stdout when a test case fails. Very
+practical when used in the automated and distributed tests since then the
+people checking the failures and the reasons for them might not have physical
+access to the machine and logs.
+.IP "-r"
+Display run time statistics. (Requires Perl Time::HiRes module)
+.IP "-rf"
+Display full run time statistics. (Requires Perl Time::HiRes module)
+.IP "-s"
+Shorter output. Speaks less than default.
+.IP "-t[num]"
+Selects a \fBtorture\fP test for the given tests. This makes runtests.pl first
+run the tests once and count the number of memory allocations made. It then
+reruns the test that number of times, each time forcing one of the allocations
+to fail until all allocs have been tested. By setting \fInum\fP you can force
+the allocation with that number to be set to fail at once instead of looping
+through everyone, which is very handy when debugging and then often in
+combination with \fI-g\fP.
+.IP "-v"
+Enable verbose output. Speaks more than default.
+.SH "RUNNING TESTS"
+Many tests have conditions that must be met before the test case can run
+fine. They could depend on built-in features in libcurl or features present in
+the operating system or even in third-party libraries that curl may or may not
+use.
+.P
+The test script checks most of these by itself to determine when it is
+safe to attempt to run each test. Those which cannot be run due to
+failed requirements will simply be skipped and listed at the completion
+of all test cases. In some unusual configurations, the test script
+cannot make the correct determination for all tests. In these cases,
+the problematic tests can be skipped using the "!keyword" skip feature
+documented earlier.
+.SH "WRITING TESTS"
+The simplest way to write test cases is to start with a similar existing test,
+save it with a new number and then adjust it to fit. There's an attempt to
+document the test case file format in the tests/FILEFORMAT.
diff --git a/tests/runtests.html b/tests/runtests.html
new file mode 100644
index 0000000..e308cdb
--- /dev/null
+++ b/tests/runtests.html
@@ -0,0 +1,87 @@
+<html><head>
+<title>runtests.pl man page</title>
+<meta name="generator" content="roffit 0.7">
+<STYLE type="text/css">
+P.level0 {
+ padding-left: 2em;
+}
+
+P.level1 {
+ padding-left: 4em;
+}
+
+P.level2 {
+ padding-left: 6em;
+}
+
+span.emphasis {
+ font-style: italic;
+}
+
+span.bold {
+ font-weight: bold;
+}
+
+span.manpage {
+ font-weight: bold;
+}
+
+h2.nroffsh {
+ background-color: #e0e0e0;
+}
+
+span.nroffip {
+ font-weight: bold;
+ font-size: 120%;
+ font-family: monospace;
+}
+
+p.roffit {
+ text-align: center;
+ font-size: 80%;
+}
+</STYLE>
+</head><body>
+
+<p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
+<p class="level0">runtests.pl - run one or more test cases <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><span Class="bold">runtests.pl [options] [test number] [!test number] [key word] [!key word]</span> <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0"><span Class="emphasis">runtests.pl</span> runs one, several or all the existing test cases in curl's test suite. It is often called from the root Makefile of the curl package with 'make test'. <a name="TEST"></a><h2 class="nroffsh">TEST NUMBER</h2>
+<p class="level0">If no test case number is given, all existing tests that the script can find will be considered for running. You can specify single test cases to run, space-separated, like "1 3 5 7 11", and you can specify a range like "45 to 67". You can also specify only the tests you don't want to run by listing the numbers with a leading exclamation point, like "!66".
+<p class="level0">It is also possible to specify tests to skip based on a key word describing the test. These are specified with a leading exclamation point and the key word or phrase, like "!HTTP NTLM auth". Likewise, tests to run can be specified simply by specifying the unadorned key words, like "FTPS". Remember that the exclamation marks and spaces will need to be quoted somehow when entered at many command shells. <a name="OPTIONS"></a><h2 class="nroffsh">OPTIONS</h2>
+<p class="level0">
+<p class="level0"><a name="-a"></a><span class="nroffip">-a</span>
+<p class="level1">Continue running the rest of the test cases even if one test fails. By default, the test script stops as soon as an error is detected.
+<p class="level0"><a name="-bN"></a><span class="nroffip">-bN</span>
+<p class="level1">Use N as the base TCP/UDP port number on which to start the test servers.
+<p class="level0"><a name="-c"></a><span class="nroffip">-c &lt;curl&gt;</span>
+<p class="level1">Provide a custom curl binary to run the tests with. Default is the curl executable in the build tree.
+<p class="level0"><a name="-d"></a><span class="nroffip">-d</span>
+<p class="level1">Enable protocol debug: have the servers display protocol output.
+<p class="level0"><a name="-g"></a><span class="nroffip">-g</span>
+<p class="level1">Run the given test(s) with gdb. This is best used on a single test case and curl built --disable-shared. This then fires up gdb with command line set to run the specified test case. Simply (set a break-point and) type 'run' to start.
+<p class="level0"><a name="-h"></a><span class="nroffip">-h</span>
+<p class="level1">Displays a help text about this program's command line options.
+<p class="level0"><a name="-k"></a><span class="nroffip">-k</span>
+<p class="level1">Keep output and log files in log/ after a test run, even if no error was detected. Useful for debugging.
+<p class="level0"><a name="-l"></a><span class="nroffip">-l</span>
+<p class="level1">Lists all test case names.
+<p class="level0"><a name="-n"></a><span class="nroffip">-n</span>
+<p class="level1">Disable the check for and use of valgrind.
+<p class="level0"><a name="-p"></a><span class="nroffip">-p</span>
+<p class="level1">Prints out all files in "log/" to stdout when a test case fails. Very practical when used in the automated and distributed tests since then the people checking the failures and the reasons for them might not have physical access to the machine and logs.
+<p class="level0"><a name="-r"></a><span class="nroffip">-r</span>
+<p class="level1">Display run time statistics. (Requires Perl Time::HiRes module)
+<p class="level0"><a name="-rf"></a><span class="nroffip">-rf</span>
+<p class="level1">Display full run time statistics. (Requires Perl Time::HiRes module)
+<p class="level0"><a name="-s"></a><span class="nroffip">-s</span>
+<p class="level1">Shorter output. Speaks less than default.
+<p class="level0"><a name="-tnum"></a><span class="nroffip">-t[num]</span>
+<p class="level1">Selects a <span Class="bold">torture</span> test for the given tests. This makes runtests.pl first run the tests once and count the number of memory allocations made. It then reruns the test that number of times, each time forcing one of the allocations to fail until all allocs have been tested. By setting <span Class="emphasis">num</span> you can force the allocation with that number to be set to fail at once instead of looping through everyone, which is very handy when debugging and then often in combination with <a class="emphasis" href="#-g">-g</a>.
+<p class="level0"><a name="-v"></a><span class="nroffip">-v</span>
+<p class="level1">Enable verbose output. Speaks more than default. <a name="RUNNING"></a><h2 class="nroffsh">RUNNING TESTS</h2>
+<p class="level0">Many tests have conditions that must be met before the test case can run fine. They could depend on built-in features in libcurl or features present in the operating system or even in third-party libraries that curl may or may not use.
+<p class="level0">The test script checks most of these by itself to determine when it is safe to attempt to run each test. Those which cannot be run due to failed requirements will simply be skipped and listed at the completion of all test cases. In some unusual configurations, the test script cannot make the correct determination for all tests. In these cases, the problematic tests can be skipped using the "!keyword" skip feature documented earlier. <a name="WRITING"></a><h2 class="nroffsh">WRITING TESTS</h2>
+<p class="level0">The simplest way to write test cases is to start with a similar existing test, save it with a new number and then adjust it to fit. There's an attempt to document the test case file format in the tests/FILEFORMAT. <p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/tests/runtests.pdf b/tests/runtests.pdf
new file mode 100644
index 0000000..a8a79e7
--- /dev/null
+++ b/tests/runtests.pdf
Binary files differ
diff --git a/tests/runtests.pl b/tests/runtests.pl
new file mode 100755
index 0000000..347adf7
--- /dev/null
+++ b/tests/runtests.pl
@@ -0,0 +1,4132 @@
+#!/usr/bin/env perl
+#***************************************************************************
+# _ _ ____ _
+# Project ___| | | | _ \| |
+# / __| | | | |_) | |
+# | (__| |_| | _ <| |___
+# \___|\___/|_| \_\_____|
+#
+# Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+#
+# This software is licensed as described in the file COPYING, which
+# you should have received as part of this distribution. The terms
+# are also available at http://curl.haxx.se/docs/copyright.html.
+#
+# You may opt to use, copy, modify, merge, publish, distribute and/or sell
+# copies of the Software, and permit persons to whom the Software is
+# furnished to do so, under the terms of the COPYING file.
+#
+# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+# KIND, either express or implied.
+#
+###########################################################################
+
+# Experimental hooks are available to run tests remotely on machines that
+# are able to run curl but are unable to run the test harness.
+# The following sections need to be modified:
+#
+# $HOSTIP, $HOST6IP - Set to the address of the host running the test suite
+# $CLIENTIP, $CLIENT6IP - Set to the address of the host running curl
+# runclient, runclientoutput - Modify to copy all the files in the log/
+# directory to the system running curl, run the given command remotely
+# and save the return code or returned stdout (respectively), then
+# copy all the files from the remote system's log/ directory back to
+# the host running the test suite. This can be done a few ways, such
+# as using scp & ssh, rsync & telnet, or using a NFS shared directory
+# and ssh.
+#
+# 'make && make test' needs to be done on both machines before making the
+# above changes and running runtests.pl manually. In the shared NFS case,
+# the contents of the tests/server/ directory must be from the host
+# running the test suite, while the rest must be from the host running curl.
+#
+# Note that even with these changes a number of tests will still fail (mainly
+# to do with cookies, those that set environment variables, or those that
+# do more than touch the file system in a <precheck> or <postcheck>
+# section). These can be added to the $TESTCASES line below,
+# e.g. $TESTCASES="!8 !31 !63 !cookies..."
+#
+# Finally, to properly support -g and -n, checktestcmd needs to change
+# to check the remote system's PATH, and the places in the code where
+# the curl binary is read directly to determine its type also need to be
+# fixed. As long as the -g option is never given, and the -n is always
+# given, this won't be a problem.
+
+
+# These should be the only variables that might be needed to get edited:
+
+BEGIN {
+ @INC=(@INC, $ENV{'srcdir'}, ".");
+ # run time statistics needs Time::HiRes
+ eval {
+ no warnings "all";
+ require Time::HiRes;
+ import Time::HiRes qw( time );
+ }
+}
+
+use strict;
+use warnings;
+use Cwd;
+
+# Subs imported from serverhelp module
+use serverhelp qw(
+ serverfactors
+ servername_id
+ servername_str
+ servername_canon
+ server_pidfilename
+ server_logfilename
+ );
+
+# Variables and subs imported from sshhelp module
+use sshhelp qw(
+ $sshdexe
+ $sshexe
+ $sftpexe
+ $sshconfig
+ $sftpconfig
+ $sshdlog
+ $sshlog
+ $sftplog
+ $sftpcmds
+ display_sshdconfig
+ display_sshconfig
+ display_sftpconfig
+ display_sshdlog
+ display_sshlog
+ display_sftplog
+ exe_ext
+ find_sshd
+ find_ssh
+ find_sftp
+ sshversioninfo
+ );
+
+require "getpart.pm"; # array functions
+require "valgrind.pm"; # valgrind report parser
+require "ftp.pm";
+
+my $HOSTIP="127.0.0.1"; # address on which the test server listens
+my $HOST6IP="[::1]"; # address on which the test server listens
+my $CLIENTIP="127.0.0.1"; # address which curl uses for incoming connections
+my $CLIENT6IP="[::1]"; # address which curl uses for incoming connections
+
+my $base = 8990; # base port number
+
+my $HTTPPORT; # HTTP server port
+my $HTTP6PORT; # HTTP IPv6 server port
+my $HTTPSPORT; # HTTPS server port
+my $FTPPORT; # FTP server port
+my $FTP2PORT; # FTP server 2 port
+my $FTPSPORT; # FTPS server port
+my $FTP6PORT; # FTP IPv6 server port
+my $TFTPPORT; # TFTP
+my $TFTP6PORT; # TFTP
+my $SSHPORT; # SCP/SFTP
+my $SOCKSPORT; # SOCKS4/5 port
+my $POP3PORT; # POP3
+my $POP36PORT; # POP3 IPv6 server port
+my $IMAPPORT; # IMAP
+my $IMAP6PORT; # IMAP IPv6 server port
+my $SMTPPORT; # SMTP
+my $SMTP6PORT; # SMTP IPv6 server port
+my $RTSPPORT; # RTSP
+my $RTSP6PORT; # RTSP IPv6 server port
+my $GOPHERPORT; # Gopher
+my $GOPHER6PORT; # Gopher IPv6 server port
+
+my $srcdir = $ENV{'srcdir'} || '.';
+my $CURL="../src/curl".exe_ext(); # what curl executable to run on the tests
+my $VCURL=$CURL; # what curl binary to use to verify the servers with
+ # VCURL is handy to set to the system one when the one you
+ # just built hangs or crashes and thus prevent verification
+my $DBGCURL=$CURL; #"../src/.libs/curl"; # alternative for debugging
+my $LOGDIR="log";
+my $TESTDIR="$srcdir/data";
+my $LIBDIR="./libtest";
+my $SERVERIN="$LOGDIR/server.input"; # what curl sent the server
+my $SERVER2IN="$LOGDIR/server2.input"; # what curl sent the second server
+my $CURLLOG="$LOGDIR/curl.log"; # all command lines run
+my $FTPDCMD="$LOGDIR/ftpserver.cmd"; # copy ftp server instructions here
+my $SERVERLOGS_LOCK="$LOGDIR/serverlogs.lock"; # server logs advisor read lock
+my $CURLCONFIG="../curl-config"; # curl-config from current build
+
+# Normally, all test cases should be run, but at times it is handy to
+# simply run a particular one:
+my $TESTCASES="all";
+
+# To run specific test cases, set them like:
+# $TESTCASES="1 2 3 7 8";
+
+#######################################################################
+# No variables below this point should need to be modified
+#
+
+# invoke perl like this:
+my $perl="perl -I$srcdir";
+my $server_response_maxtime=13;
+
+my $debug_build=0; # curl built with --enable-debug
+my $curl_debug=0; # curl built with --enable-curldebug (memory tracking)
+my $libtool;
+
+# name of the file that the memory debugging creates:
+my $memdump="$LOGDIR/memdump";
+
+# the path to the script that analyzes the memory debug output file:
+my $memanalyze="$perl $srcdir/memanalyze.pl";
+
+my $pwd = getcwd(); # current working directory
+
+my $start;
+my $forkserver=0;
+my $ftpchecktime=1; # time it took to verify our test FTP server
+
+my $stunnel = checkcmd("stunnel4") || checkcmd("stunnel");
+my $valgrind = checktestcmd("valgrind");
+my $valgrind_logfile="--logfile";
+my $valgrind_tool;
+my $gdb = checktestcmd("gdb");
+
+my $ssl_version; # set if libcurl is built with SSL support
+my $large_file; # set if libcurl is built with large file support
+my $has_idn; # set if libcurl is built with IDN support
+my $http_ipv6; # set if HTTP server has IPv6 support
+my $ftp_ipv6; # set if FTP server has IPv6 support
+my $tftp_ipv6; # set if TFTP server has IPv6 support
+my $gopher_ipv6; # set if Gopher server has IPv6 support
+my $has_ipv6; # set if libcurl is built with IPv6 support
+my $has_libz; # set if libcurl is built with libz support
+my $has_getrlimit; # set if system has getrlimit()
+my $has_ntlm; # set if libcurl is built with NTLM support
+my $has_charconv;# set if libcurl is built with CharConv support
+
+my $has_openssl; # built with a lib using an OpenSSL-like API
+my $has_gnutls; # built with GnuTLS
+my $has_nss; # built with NSS
+my $has_yassl; # built with yassl
+my $has_polarssl;# built with polarssl
+
+my $has_shared; # built shared
+
+my $ssllib; # name of the lib we use (for human presentation)
+my $has_crypto; # set if libcurl is built with cryptographic support
+my $has_textaware; # set if running on a system that has a text mode concept
+ # on files. Windows for example
+my @protocols; # array of supported protocols
+
+my $skipped=0; # number of tests skipped; reported in main loop
+my %skipped; # skipped{reason}=counter, reasons for skip
+my @teststat; # teststat[testnum]=reason, reasons for skip
+my %disabled_keywords; # key words of tests to skip
+my %enabled_keywords; # key words of tests to run
+
+my $sshdid; # for socks server, ssh daemon version id
+my $sshdvernum; # for socks server, ssh daemon version number
+my $sshdverstr; # for socks server, ssh daemon version string
+my $sshderror; # for socks server, ssh daemon version error
+
+my $defserverlogslocktimeout = 20; # timeout to await server logs lock removal
+my $defpostcommanddelay = 0; # delay between command and postcheck sections
+
+my $timestats; # time stamping and stats generation
+my $fullstats; # show time stats for every single test
+my %timeprepini; # timestamp for each test preparation start
+my %timesrvrini; # timestamp for each test required servers verification start
+my %timesrvrend; # timestamp for each test required servers verification end
+my %timetoolini; # timestamp for each test command run starting
+my %timetoolend; # timestamp for each test command run stopping
+my %timesrvrlog; # timestamp for each test server logs lock removal
+my %timevrfyend; # timestamp for each test result verification end
+
+my $testnumcheck; # test number, set in singletest sub.
+my %oldenv;
+
+#######################################################################
+# variables the command line options may set
+#
+
+my $short;
+my $verbose;
+my $debugprotocol;
+my $anyway;
+my $gdbthis; # run test case with gdb debugger
+my $keepoutfiles; # keep stdout and stderr files after tests
+my $listonly; # only list the tests
+my $postmortem; # display detailed info about failed tests
+
+my %run; # running server
+my %doesntrun; # servers that don't work, identified by pidfile
+my %serverpidfile;# all server pid file names, identified by server id
+my %runcert; # cert file currently in use by an ssl running server
+
+# torture test variables
+my $torture;
+my $tortnum;
+my $tortalloc;
+
+#######################################################################
+# logmsg is our general message logging subroutine.
+#
+sub logmsg {
+ for(@_) {
+ print "$_";
+ }
+}
+
+# get the name of the current user
+my $USER = $ENV{USER}; # Linux
+if (!$USER) {
+ $USER = $ENV{USERNAME}; # Windows
+ if (!$USER) {
+ $USER = $ENV{LOGNAME}; # Some UNIX (I think)
+ }
+}
+
+# enable memory debugging if curl is compiled with it
+$ENV{'CURL_MEMDEBUG'} = $memdump;
+$ENV{'HOME'}=$pwd;
+
+sub catch_zap {
+ my $signame = shift;
+ logmsg "runtests.pl received SIG$signame, exiting\n";
+ stopservers($verbose);
+ die "Somebody sent me a SIG$signame";
+}
+$SIG{INT} = \&catch_zap;
+$SIG{TERM} = \&catch_zap;
+
+##########################################################################
+# Clear all possible '*_proxy' environment variables for various protocols
+# to prevent them to interfere with our testing!
+
+my $protocol;
+foreach $protocol (('ftp', 'http', 'ftps', 'https', 'no')) {
+ my $proxy = "${protocol}_proxy";
+ # clear lowercase version
+ delete $ENV{$proxy} if($ENV{$proxy});
+ # clear uppercase version
+ delete $ENV{uc($proxy)} if($ENV{uc($proxy)});
+}
+
+# make sure we don't get affected by other variables that control our
+# behaviour
+
+delete $ENV{'SSL_CERT_DIR'} if($ENV{'SSL_CERT_DIR'});
+delete $ENV{'SSL_CERT_PATH'} if($ENV{'SSL_CERT_PATH'});
+delete $ENV{'CURL_CA_BUNDLE'} if($ENV{'CURL_CA_BUNDLE'});
+
+#######################################################################
+# Load serverpidfile hash with pidfile names for all possible servers.
+#
+sub init_serverpidfile_hash {
+ for my $proto (('ftp', 'http', 'imap', 'pop3', 'smtp')) {
+ for my $ssl (('', 's')) {
+ for my $ipvnum ((4, 6)) {
+ for my $idnum ((1, 2)) {
+ my $serv = servername_id("$proto$ssl", $ipvnum, $idnum);
+ my $pidf = server_pidfilename("$proto$ssl", $ipvnum, $idnum);
+ $serverpidfile{$serv} = $pidf;
+ }
+ }
+ }
+ }
+ for my $proto (('tftp', 'sftp', 'socks', 'ssh', 'rtsp', 'gopher')) {
+ for my $ipvnum ((4, 6)) {
+ for my $idnum ((1, 2)) {
+ my $serv = servername_id($proto, $ipvnum, $idnum);
+ my $pidf = server_pidfilename($proto, $ipvnum, $idnum);
+ $serverpidfile{$serv} = $pidf;
+ }
+ }
+ }
+}
+
+#######################################################################
+# Check if a given child process has just died. Reaps it if so.
+#
+sub checkdied {
+ use POSIX ":sys_wait_h";
+ my $pid = $_[0];
+ if(not defined $pid || $pid <= 0) {
+ return 0;
+ }
+ my $rc = waitpid($pid, &WNOHANG);
+ return ($rc == $pid)?1:0;
+}
+
+#######################################################################
+# Start a new thread/process and run the given command line in there.
+# Return the pids (yes plural) of the new child process to the parent.
+#
+sub startnew {
+ my ($cmd, $pidfile, $timeout, $fake)=@_;
+
+ logmsg "startnew: $cmd\n" if ($verbose);
+
+ my $child = fork();
+ my $pid2 = 0;
+
+ if(not defined $child) {
+ logmsg "startnew: fork() failure detected\n";
+ return (-1,-1);
+ }
+
+ if(0 == $child) {
+ # Here we are the child. Run the given command.
+
+ # Put an "exec" in front of the command so that the child process
+ # keeps this child's process ID.
+ exec("exec $cmd") || die "Can't exec() $cmd: $!";
+
+ # exec() should never return back here to this process. We protect
+ # ourselves by calling die() just in case something goes really bad.
+ die "error: exec() has returned";
+ }
+
+ # Ugly hack but ssh client doesn't support pid files
+ if ($fake) {
+ if(open(OUT, ">$pidfile")) {
+ print OUT $child . "\n";
+ close(OUT);
+ logmsg "startnew: $pidfile faked with pid=$child\n" if($verbose);
+ }
+ else {
+ logmsg "startnew: failed to write fake $pidfile with pid=$child\n";
+ }
+ # could/should do a while connect fails sleep a bit and loop
+ sleep $timeout;
+ if (checkdied($child)) {
+ logmsg "startnew: child process has failed to start\n" if($verbose);
+ return (-1,-1);
+ }
+ }
+
+ my $count = $timeout;
+ while($count--) {
+ if(-f $pidfile && -s $pidfile && open(PID, "<$pidfile")) {
+ $pid2 = 0 + <PID>;
+ close(PID);
+ if(($pid2 > 0) && kill(0, $pid2)) {
+ # if $pid2 is valid, then make sure this pid is alive, as
+ # otherwise it is just likely to be the _previous_ pidfile or
+ # similar!
+ last;
+ }
+ # invalidate $pid2 if not actually alive
+ $pid2 = 0;
+ }
+ if (checkdied($child)) {
+ logmsg "startnew: child process has died, server might start up\n"
+ if($verbose);
+ # We can't just abort waiting for the server with a
+ # return (-1,-1);
+ # because the server might have forked and could still start
+ # up normally. Instead, just reduce the amount of time we remain
+ # waiting.
+ $count >>= 2;
+ }
+ sleep(1);
+ }
+
+ # Return two PIDs, the one for the child process we spawned and the one
+ # reported by the server itself (in case it forked again on its own).
+ # Both (potentially) need to be killed at the end of the test.
+ return ($child, $pid2);
+}
+
+
+#######################################################################
+# Check for a command in the PATH of the test server.
+#
+sub checkcmd {
+ my ($cmd)=@_;
+ my @paths=(split(":", $ENV{'PATH'}), "/usr/sbin", "/usr/local/sbin",
+ "/sbin", "/usr/bin", "/usr/local/bin",
+ "./libtest/.libs", "./libtest");
+ for(@paths) {
+ if( -x "$_/$cmd" && ! -d "$_/$cmd") {
+ # executable bit but not a directory!
+ return "$_/$cmd";
+ }
+ }
+}
+
+#######################################################################
+# Get the list of tests that the tests/data/Makefile.am knows about!
+#
+my $disttests;
+sub get_disttests {
+ my @dist = `cd data && make show`;
+ $disttests = join("", @dist);
+}
+
+#######################################################################
+# Check for a command in the PATH of the machine running curl.
+#
+sub checktestcmd {
+ my ($cmd)=@_;
+ return checkcmd($cmd);
+}
+
+#######################################################################
+# Run the application under test and return its return code
+#
+sub runclient {
+ my ($cmd)=@_;
+ return system($cmd);
+
+# This is one way to test curl on a remote machine
+# my $out = system("ssh $CLIENTIP cd \'$pwd\' \\; \'$cmd\'");
+# sleep 2; # time to allow the NFS server to be updated
+# return $out;
+}
+
+#######################################################################
+# Run the application under test and return its stdout
+#
+sub runclientoutput {
+ my ($cmd)=@_;
+ return `$cmd`;
+
+# This is one way to test curl on a remote machine
+# my @out = `ssh $CLIENTIP cd \'$pwd\' \\; \'$cmd\'`;
+# sleep 2; # time to allow the NFS server to be updated
+# return @out;
+ }
+
+#######################################################################
+# Memory allocation test and failure torture testing.
+#
+sub torture {
+ my $testcmd = shift;
+ my $gdbline = shift;
+
+ # remove memdump first to be sure we get a new nice and clean one
+ unlink($memdump);
+
+ # First get URL from test server, ignore the output/result
+ runclient($testcmd);
+
+ logmsg " CMD: $testcmd\n" if($verbose);
+
+ # memanalyze -v is our friend, get the number of allocations made
+ my $count=0;
+ my @out = `$memanalyze -v $memdump`;
+ for(@out) {
+ if(/^Allocations: (\d+)/) {
+ $count = $1;
+ last;
+ }
+ }
+ if(!$count) {
+ logmsg " found no allocs to make fail\n";
+ return 0;
+ }
+
+ logmsg " $count allocations to make fail\n";
+
+ for ( 1 .. $count ) {
+ my $limit = $_;
+ my $fail;
+ my $dumped_core;
+
+ if($tortalloc && ($tortalloc != $limit)) {
+ next;
+ }
+
+ if($verbose) {
+ my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
+ localtime(time());
+ my $now = sprintf("%02d:%02d:%02d ", $hour, $min, $sec);
+ logmsg "Fail alloc no: $limit at $now\r";
+ }
+
+ # make the memory allocation function number $limit return failure
+ $ENV{'CURL_MEMLIMIT'} = $limit;
+
+ # remove memdump first to be sure we get a new nice and clean one
+ unlink($memdump);
+
+ logmsg "*** Alloc number $limit is now set to fail ***\n" if($gdbthis);
+
+ my $ret = 0;
+ if($gdbthis) {
+ runclient($gdbline)
+ }
+ else {
+ $ret = runclient($testcmd);
+ }
+ #logmsg "$_ Returned " . $ret >> 8 . "\n";
+
+ # Now clear the variable again
+ delete $ENV{'CURL_MEMLIMIT'} if($ENV{'CURL_MEMLIMIT'});
+
+ if(-r "core") {
+ # there's core file present now!
+ logmsg " core dumped\n";
+ $dumped_core = 1;
+ $fail = 2;
+ }
+
+ # verify that it returns a proper error code, doesn't leak memory
+ # and doesn't core dump
+ if($ret & 255) {
+ logmsg " system() returned $ret\n";
+ $fail=1;
+ }
+ else {
+ my @memdata=`$memanalyze $memdump`;
+ my $leak=0;
+ for(@memdata) {
+ if($_ ne "") {
+ # well it could be other memory problems as well, but
+ # we call it leak for short here
+ $leak=1;
+ }
+ }
+ if($leak) {
+ logmsg "** MEMORY FAILURE\n";
+ logmsg @memdata;
+ logmsg `$memanalyze -l $memdump`;
+ $fail = 1;
+ }
+ }
+ if($fail) {
+ logmsg " Failed on alloc number $limit in test.\n",
+ " invoke with \"-t$limit\" to repeat this single case.\n";
+ stopservers($verbose);
+ return 1;
+ }
+ }
+
+ logmsg "torture OK\n";
+ return 0;
+}
+
+#######################################################################
+# Stop a test server along with pids which aren't in the %run hash yet.
+# This also stops all servers which are relative to the given one.
+#
+sub stopserver {
+ my ($server, $pidlist) = @_;
+ #
+ # kill sockfilter processes for pingpong relative server
+ #
+ if($server =~ /^(ftp|imap|pop3|smtp)s?(\d*)(-ipv6|)$/) {
+ my $proto = $1;
+ my $idnum = ($2 && ($2 > 1)) ? $2 : 1;
+ my $ipvnum = ($3 && ($3 =~ /6$/)) ? 6 : 4;
+ killsockfilters($proto, $ipvnum, $idnum, $verbose);
+ }
+ #
+ # All servers relative to the given one must be stopped also
+ #
+ my @killservers;
+ if($server =~ /^(ftp|http|imap|pop3|smtp)s(.*)$/) {
+ # given an ssl server, also kill non-ssl underlying one
+ push @killservers, "${1}${2}";
+ }
+ elsif($server =~ /^(ftp|http|imap|pop3|smtp)(.*)$/) {
+ # given a non-ssl server, also kill ssl piggybacking one
+ push @killservers, "${1}s${2}";
+ }
+ elsif($server =~ /^(socks)(.*)$/) {
+ # given an socks server, also kill ssh underlying one
+ push @killservers, "ssh${2}";
+ }
+ elsif($server =~ /^(ssh)(.*)$/) {
+ # given an ssh server, also kill socks piggybacking one
+ push @killservers, "socks${2}";
+ }
+ push @killservers, $server;
+ #
+ # kill given pids and server relative ones clearing them in %run hash
+ #
+ foreach my $server (@killservers) {
+ if($run{$server}) {
+ $pidlist .= "$run{$server} ";
+ $run{$server} = 0;
+ }
+ $runcert{$server} = 0 if($runcert{$server});
+ }
+ killpid($verbose, $pidlist);
+ #
+ # cleanup server pid files
+ #
+ foreach my $server (@killservers) {
+ my $pidfile = $serverpidfile{$server};
+ my $pid = processexists($pidfile);
+ if($pid > 0) {
+ logmsg "Warning: $server server unexpectedly alive\n";
+ killpid($verbose, $pid);
+ }
+ unlink($pidfile) if(-f $pidfile);
+ }
+}
+
+#######################################################################
+# Verify that the server that runs on $ip, $port is our server. This also
+# implies that we can speak with it, as there might be occasions when the
+# server runs fine but we cannot talk to it ("Failed to connect to ::1: Can't
+# assign requested address" #
+
+sub verifyhttp {
+ my ($proto, $ipvnum, $idnum, $ip, $port) = @_;
+ my $server = servername_id($proto, $ipvnum, $idnum);
+ my $pid = 0;
+ my $bonus="";
+
+ my $verifyout = "$LOGDIR/".
+ servername_canon($proto, $ipvnum, $idnum) .'_verify.out';
+ unlink($verifyout) if(-f $verifyout);
+
+ my $verifylog = "$LOGDIR/".
+ servername_canon($proto, $ipvnum, $idnum) .'_verify.log';
+ unlink($verifylog) if(-f $verifylog);
+
+ if($proto eq "gopher") {
+ # gopher is funny
+ $bonus="1/";
+ }
+
+ my $flags = "--max-time $server_response_maxtime ";
+ $flags .= "--output $verifyout ";
+ $flags .= "--silent ";
+ $flags .= "--verbose ";
+ $flags .= "--globoff ";
+ $flags .= "--insecure " if($proto eq 'https');
+ $flags .= "\"$proto://$ip:$port/${bonus}verifiedserver\"";
+
+ my $cmd = "$VCURL $flags 2>$verifylog";
+
+ # verify if our/any server is running on this port
+ logmsg "RUN: $cmd\n" if($verbose);
+ my $res = runclient($cmd);
+
+ $res >>= 8; # rotate the result
+ if($res & 128) {
+ logmsg "RUN: curl command died with a coredump\n";
+ return -1;
+ }
+
+ if($res && $verbose) {
+ logmsg "RUN: curl command returned $res\n";
+ if(open(FILE, "<$verifylog")) {
+ while(my $string = <FILE>) {
+ logmsg "RUN: $string" if($string !~ /^([ \t]*)$/);
+ }
+ close(FILE);
+ }
+ }
+
+ my $data;
+ if(open(FILE, "<$verifyout")) {
+ while(my $string = <FILE>) {
+ $data = $string;
+ last; # only want first line
+ }
+ close(FILE);
+ }
+
+ if($data && ($data =~ /WE ROOLZ: (\d+)/)) {
+ $pid = 0+$1;
+ }
+ elsif($res == 6) {
+ # curl: (6) Couldn't resolve host '::1'
+ logmsg "RUN: failed to resolve host ($proto://$ip:$port/verifiedserver)\n";
+ return -1;
+ }
+ elsif($data || ($res && ($res != 7))) {
+ logmsg "RUN: Unknown server on our $server port: $port ($res)\n";
+ return -1;
+ }
+ return $pid;
+}
+
+#######################################################################
+# Verify that the server that runs on $ip, $port is our server. This also
+# implies that we can speak with it, as there might be occasions when the
+# server runs fine but we cannot talk to it ("Failed to connect to ::1: Can't
+# assign requested address" #
+
+sub verifyftp {
+ my ($proto, $ipvnum, $idnum, $ip, $port) = @_;
+ my $server = servername_id($proto, $ipvnum, $idnum);
+ my $pid = 0;
+ my $time=time();
+ my $extra="";
+
+ my $verifylog = "$LOGDIR/".
+ servername_canon($proto, $ipvnum, $idnum) .'_verify.log';
+ unlink($verifylog) if(-f $verifylog);
+
+ if($proto eq "ftps") {
+ $extra .= "--insecure --ftp-ssl-control ";
+ }
+ elsif($proto eq "smtp") {
+ # SMTP is a bit different since it requires more options and it
+ # has _no_ output!
+ $extra .= "--mail-rcpt verifiedserver ";
+ $extra .= "--mail-from fake ";
+ $extra .= "--upload /dev/null ";
+ $extra .= "--stderr - "; # move stderr to parse the verbose stuff
+ }
+
+ my $flags = "--max-time $server_response_maxtime ";
+ $flags .= "--silent ";
+ $flags .= "--verbose ";
+ $flags .= "--globoff ";
+ $flags .= $extra;
+ $flags .= "\"$proto://$ip:$port/verifiedserver\"";
+
+ my $cmd = "$VCURL $flags 2>$verifylog";
+
+ # check if this is our server running on this port:
+ logmsg "RUN: $cmd\n" if($verbose);
+ my @data = runclientoutput($cmd);
+
+ my $res = $? >> 8; # rotate the result
+ if($res & 128) {
+ logmsg "RUN: curl command died with a coredump\n";
+ return -1;
+ }
+
+ foreach my $line (@data) {
+ if($line =~ /WE ROOLZ: (\d+)/) {
+ # this is our test server with a known pid!
+ $pid = 0+$1;
+ last;
+ }
+ }
+ if($pid <= 0 && @data && $data[0]) {
+ # this is not a known server
+ logmsg "RUN: Unknown server on our $server port: $port\n";
+ return 0;
+ }
+ # we can/should use the time it took to verify the FTP server as a measure
+ # on how fast/slow this host/FTP is.
+ my $took = int(0.5+time()-$time);
+
+ if($verbose) {
+ logmsg "RUN: Verifying our test $server server took $took seconds\n";
+ }
+ $ftpchecktime = $took>=1?$took:1; # make sure it never is below 1
+
+ return $pid;
+}
+
+#######################################################################
+# Verify that the server that runs on $ip, $port is our server. This also
+# implies that we can speak with it, as there might be occasions when the
+# server runs fine but we cannot talk to it ("Failed to connect to ::1: Can't
+# assign requested address" #
+
+sub verifyrtsp {
+ my ($proto, $ipvnum, $idnum, $ip, $port) = @_;
+ my $server = servername_id($proto, $ipvnum, $idnum);
+ my $pid = 0;
+
+ my $verifyout = "$LOGDIR/".
+ servername_canon($proto, $ipvnum, $idnum) .'_verify.out';
+ unlink($verifyout) if(-f $verifyout);
+
+ my $verifylog = "$LOGDIR/".
+ servername_canon($proto, $ipvnum, $idnum) .'_verify.log';
+ unlink($verifylog) if(-f $verifylog);
+
+ my $flags = "--max-time $server_response_maxtime ";
+ $flags .= "--output $verifyout ";
+ $flags .= "--silent ";
+ $flags .= "--verbose ";
+ $flags .= "--globoff ";
+ # currently verification is done using http
+ $flags .= "\"http://$ip:$port/verifiedserver\"";
+
+ my $cmd = "$VCURL $flags 2>$verifylog";
+
+ # verify if our/any server is running on this port
+ logmsg "RUN: $cmd\n" if($verbose);
+ my $res = runclient($cmd);
+
+ $res >>= 8; # rotate the result
+ if($res & 128) {
+ logmsg "RUN: curl command died with a coredump\n";
+ return -1;
+ }
+
+ if($res && $verbose) {
+ logmsg "RUN: curl command returned $res\n";
+ if(open(FILE, "<$verifylog")) {
+ while(my $string = <FILE>) {
+ logmsg "RUN: $string" if($string !~ /^([ \t]*)$/);
+ }
+ close(FILE);
+ }
+ }
+
+ my $data;
+ if(open(FILE, "<$verifyout")) {
+ while(my $string = <FILE>) {
+ $data = $string;
+ last; # only want first line
+ }
+ close(FILE);
+ }
+
+ if($data && ($data =~ /RTSP_SERVER WE ROOLZ: (\d+)/)) {
+ $pid = 0+$1;
+ }
+ elsif($res == 6) {
+ # curl: (6) Couldn't resolve host '::1'
+ logmsg "RUN: failed to resolve host ($proto://$ip:$port/verifiedserver)\n";
+ return -1;
+ }
+ elsif($data || ($res != 7)) {
+ logmsg "RUN: Unknown server on our $server port: $port\n";
+ return -1;
+ }
+ return $pid;
+}
+
+#######################################################################
+# Verify that the ssh server has written out its pidfile, recovering
+# the pid from the file and returning it if a process with that pid is
+# actually alive.
+
+sub verifyssh {
+ my ($proto, $ipvnum, $idnum, $ip, $port) = @_;
+ my $server = servername_id($proto, $ipvnum, $idnum);
+ my $pidfile = server_pidfilename($proto, $ipvnum, $idnum);
+ my $pid = 0;
+ if(open(FILE, "<$pidfile")) {
+ $pid=0+<FILE>;
+ close(FILE);
+ }
+ if($pid > 0) {
+ # if we have a pid it is actually our ssh server,
+ # since runsshserver() unlinks previous pidfile
+ if(!kill(0, $pid)) {
+ logmsg "RUN: SSH server has died after starting up\n";
+ checkdied($pid);
+ unlink($pidfile);
+ $pid = -1;
+ }
+ }
+ return $pid;
+}
+
+#######################################################################
+# Verify that we can connect to the sftp server, properly authenticate
+# with generated config and key files and run a simple remote pwd.
+
+sub verifysftp {
+ my ($proto, $ipvnum, $idnum, $ip, $port) = @_;
+ my $server = servername_id($proto, $ipvnum, $idnum);
+ my $verified = 0;
+ # Find out sftp client canonical file name
+ my $sftp = find_sftp();
+ if(!$sftp) {
+ logmsg "RUN: SFTP server cannot find $sftpexe\n";
+ return -1;
+ }
+ # Find out ssh client canonical file name
+ my $ssh = find_ssh();
+ if(!$ssh) {
+ logmsg "RUN: SFTP server cannot find $sshexe\n";
+ return -1;
+ }
+ # Connect to sftp server, authenticate and run a remote pwd
+ # command using our generated configuration and key files
+ my $cmd = "$sftp -b $sftpcmds -F $sftpconfig -S $ssh $ip > $sftplog 2>&1";
+ my $res = runclient($cmd);
+ # Search for pwd command response in log file
+ if(open(SFTPLOGFILE, "<$sftplog")) {
+ while(<SFTPLOGFILE>) {
+ if(/^Remote working directory: /) {
+ $verified = 1;
+ last;
+ }
+ }
+ close(SFTPLOGFILE);
+ }
+ return $verified;
+}
+
+
+#######################################################################
+# STUB for verifying socks
+
+sub verifysocks {
+ my ($proto, $ipvnum, $idnum, $ip, $port) = @_;
+ my $server = servername_id($proto, $ipvnum, $idnum);
+ my $pidfile = server_pidfilename($proto, $ipvnum, $idnum);
+ my $pid = 0;
+ if(open(FILE, "<$pidfile")) {
+ $pid=0+<FILE>;
+ close(FILE);
+ }
+ if($pid > 0) {
+ # if we have a pid it is actually our socks server,
+ # since runsocksserver() unlinks previous pidfile
+ if(!kill(0, $pid)) {
+ logmsg "RUN: SOCKS server has died after starting up\n";
+ checkdied($pid);
+ unlink($pidfile);
+ $pid = -1;
+ }
+ }
+ return $pid;
+}
+
+#######################################################################
+# Verify that the server that runs on $ip, $port is our server.
+# Retry over several seconds before giving up. The ssh server in
+# particular can take a long time to start if it needs to generate
+# keys on a slow or loaded host.
+#
+
+my %protofunc = ('http' => \&verifyhttp,
+ 'https' => \&verifyhttp,
+ 'rtsp' => \&verifyrtsp,
+ 'ftp' => \&verifyftp,
+ 'pop3' => \&verifyftp,
+ 'imap' => \&verifyftp,
+ 'smtp' => \&verifyftp,
+ 'ftps' => \&verifyftp,
+ 'tftp' => \&verifyftp,
+ 'ssh' => \&verifyssh,
+ 'socks' => \&verifysocks,
+ 'gopher' => \&verifyhttp);
+
+sub verifyserver {
+ my ($proto, $ipvnum, $idnum, $ip, $port) = @_;
+
+ my $count = 30; # try for this many seconds
+ my $pid;
+
+ while($count--) {
+ my $fun = $protofunc{$proto};
+
+ $pid = &$fun($proto, $ipvnum, $idnum, $ip, $port);
+
+ if($pid > 0) {
+ last;
+ }
+ elsif($pid < 0) {
+ # a real failure, stop trying and bail out
+ return 0;
+ }
+ sleep(1);
+ }
+ return $pid;
+}
+
+
+
+#######################################################################
+# start the http server
+#
+sub runhttpserver {
+ my ($proto, $verbose, $ipv6, $port) = @_;
+ my $ip = $HOSTIP;
+ my $ipvnum = 4;
+ my $idnum = 1;
+ my $server;
+ my $srvrname;
+ my $pidfile;
+ my $logfile;
+ my $flags = "";
+
+
+ if($ipv6) {
+ # if IPv6, use a different setup
+ $ipvnum = 6;
+ $ip = $HOST6IP;
+ }
+
+ $server = servername_id($proto, $ipvnum, $idnum);
+
+ $pidfile = $serverpidfile{$server};
+
+ # don't retry if the server doesn't work
+ if ($doesntrun{$pidfile}) {
+ return (0,0);
+ }
+
+ my $pid = processexists($pidfile);
+ if($pid > 0) {
+ stopserver($server, "$pid");
+ }
+ unlink($pidfile) if(-f $pidfile);
+
+ $srvrname = servername_str($proto, $ipvnum, $idnum);
+
+ $logfile = server_logfilename($LOGDIR, $proto, $ipvnum, $idnum);
+
+ $flags .= "--fork " if($forkserver);
+ $flags .= "--gopher " if($proto eq "gopher");
+ $flags .= "--verbose " if($debugprotocol);
+ $flags .= "--pidfile \"$pidfile\" --logfile \"$logfile\" ";
+ $flags .= "--id $idnum " if($idnum > 1);
+ $flags .= "--ipv$ipvnum --port $port --srcdir \"$srcdir\"";
+
+ my $cmd = "$perl $srcdir/httpserver.pl $flags";
+ my ($httppid, $pid2) = startnew($cmd, $pidfile, 15, 0);
+
+ if($httppid <= 0 || !kill(0, $httppid)) {
+ # it is NOT alive
+ logmsg "RUN: failed to start the $srvrname server\n";
+ stopserver($server, "$pid2");
+ displaylogs($testnumcheck);
+ $doesntrun{$pidfile} = 1;
+ return (0,0);
+ }
+
+ # Server is up. Verify that we can speak to it.
+ my $pid3 = verifyserver($proto, $ipvnum, $idnum, $ip, $port);
+ if(!$pid3) {
+ logmsg "RUN: $srvrname server failed verification\n";
+ # failed to talk to it properly. Kill the server and return failure
+ stopserver($server, "$httppid $pid2");
+ displaylogs($testnumcheck);
+ $doesntrun{$pidfile} = 1;
+ return (0,0);
+ }
+ $pid2 = $pid3;
+
+ if($verbose) {
+ logmsg "RUN: $srvrname server is now running PID $httppid\n";
+ }
+
+ sleep(1);
+
+ return ($httppid, $pid2);
+}
+
+#######################################################################
+# start the https server (or rather, tunnel)
+#
+sub runhttpsserver {
+ my ($verbose, $ipv6, $certfile) = @_;
+ my $proto = 'https';
+ my $ip = ($ipv6 && ($ipv6 =~ /6$/)) ? "$HOST6IP" : "$HOSTIP";
+ my $ipvnum = ($ipv6 && ($ipv6 =~ /6$/)) ? 6 : 4;
+ my $idnum = 1;
+ my $server;
+ my $srvrname;
+ my $pidfile;
+ my $logfile;
+ my $flags = "";
+
+ if(!$stunnel) {
+ return (0,0);
+ }
+
+ $server = servername_id($proto, $ipvnum, $idnum);
+
+ $pidfile = $serverpidfile{$server};
+
+ # don't retry if the server doesn't work
+ if ($doesntrun{$pidfile}) {
+ return (0,0);
+ }
+
+ my $pid = processexists($pidfile);
+ if($pid > 0) {
+ stopserver($server, "$pid");
+ }
+ unlink($pidfile) if(-f $pidfile);
+
+ $srvrname = servername_str($proto, $ipvnum, $idnum);
+
+ $certfile = 'stunnel.pem' unless($certfile);
+
+ $logfile = server_logfilename($LOGDIR, $proto, $ipvnum, $idnum);
+
+ $flags .= "--verbose " if($debugprotocol);
+ $flags .= "--pidfile \"$pidfile\" --logfile \"$logfile\" ";
+ $flags .= "--id $idnum " if($idnum > 1);
+ $flags .= "--ipv$ipvnum --proto $proto ";
+ $flags .= "--certfile \"$certfile\" " if($certfile ne 'stunnel.pem');
+ $flags .= "--stunnel \"$stunnel\" --srcdir \"$srcdir\" ";
+ $flags .= "--connect $HTTPPORT --accept $HTTPSPORT";
+
+ my $cmd = "$perl $srcdir/secureserver.pl $flags";
+ my ($httpspid, $pid2) = startnew($cmd, $pidfile, 15, 0);
+
+ if($httpspid <= 0 || !kill(0, $httpspid)) {
+ # it is NOT alive
+ logmsg "RUN: failed to start the $srvrname server\n";
+ stopserver($server, "$pid2");
+ displaylogs($testnumcheck);
+ $doesntrun{$pidfile} = 1;
+ return(0,0);
+ }
+
+ # Server is up. Verify that we can speak to it.
+ my $pid3 = verifyserver($proto, $ipvnum, $idnum, $ip, $HTTPSPORT);
+ if(!$pid3) {
+ logmsg "RUN: $srvrname server failed verification\n";
+ # failed to talk to it properly. Kill the server and return failure
+ stopserver($server, "$httpspid $pid2");
+ displaylogs($testnumcheck);
+ $doesntrun{$pidfile} = 1;
+ return (0,0);
+ }
+ # Here pid3 is actually the pid returned by the unsecure-http server.
+
+ $runcert{$server} = $certfile;
+
+ if($verbose) {
+ logmsg "RUN: $srvrname server is now running PID $httpspid\n";
+ }
+
+ sleep(1);
+
+ return ($httpspid, $pid2);
+}
+
+#######################################################################
+# start the pingpong server (FTP, POP3, IMAP, SMTP)
+#
+sub runpingpongserver {
+ my ($proto, $id, $verbose, $ipv6) = @_;
+ my $port;
+ my $ip = ($ipv6 && ($ipv6 =~ /6$/)) ? "$HOST6IP" : "$HOSTIP";
+ my $ipvnum = ($ipv6 && ($ipv6 =~ /6$/)) ? 6 : 4;
+ my $idnum = ($id && ($id =~ /^(\d+)$/) && ($id > 1)) ? $id : 1;
+ my $server;
+ my $srvrname;
+ my $pidfile;
+ my $logfile;
+ my $flags = "";
+
+ if($proto eq "ftp") {
+ $port = ($idnum>1)?$FTP2PORT:$FTPPORT;
+
+ if($ipvnum==6) {
+ # if IPv6, use a different setup
+ $port = $FTP6PORT;
+ }
+ }
+ elsif($proto eq "pop3") {
+ $port = ($ipvnum==6) ? $POP36PORT : $POP3PORT;
+ }
+ elsif($proto eq "imap") {
+ $port = ($ipvnum==6) ? $IMAP6PORT : $IMAPPORT;
+ }
+ elsif($proto eq "smtp") {
+ $port = ($ipvnum==6) ? $SMTP6PORT : $SMTPPORT;
+ }
+ else {
+ print STDERR "Unsupported protocol $proto!!\n";
+ return 0;
+ }
+
+ $server = servername_id($proto, $ipvnum, $idnum);
+
+ $pidfile = $serverpidfile{$server};
+
+ # don't retry if the server doesn't work
+ if ($doesntrun{$pidfile}) {
+ return (0,0);
+ }
+
+ my $pid = processexists($pidfile);
+ if($pid > 0) {
+ stopserver($server, "$pid");
+ }
+ unlink($pidfile) if(-f $pidfile);
+
+ $srvrname = servername_str($proto, $ipvnum, $idnum);
+
+ $logfile = server_logfilename($LOGDIR, $proto, $ipvnum, $idnum);
+
+ $flags .= "--verbose " if($debugprotocol);
+ $flags .= "--pidfile \"$pidfile\" --logfile \"$logfile\" ";
+ $flags .= "--srcdir \"$srcdir\" --proto $proto ";
+ $flags .= "--id $idnum " if($idnum > 1);
+ $flags .= "--ipv$ipvnum --port $port --addr \"$ip\"";
+
+ my $cmd = "$perl $srcdir/ftpserver.pl $flags";
+ my ($ftppid, $pid2) = startnew($cmd, $pidfile, 15, 0);
+
+ if($ftppid <= 0 || !kill(0, $ftppid)) {
+ # it is NOT alive
+ logmsg "RUN: failed to start the $srvrname server\n";
+ stopserver($server, "$pid2");
+ displaylogs($testnumcheck);
+ $doesntrun{$pidfile} = 1;
+ return (0,0);
+ }
+
+ # Server is up. Verify that we can speak to it.
+ my $pid3 = verifyserver($proto, $ipvnum, $idnum, $ip, $port);
+ if(!$pid3) {
+ logmsg "RUN: $srvrname server failed verification\n";
+ # failed to talk to it properly. Kill the server and return failure
+ stopserver($server, "$ftppid $pid2");
+ displaylogs($testnumcheck);
+ $doesntrun{$pidfile} = 1;
+ return (0,0);
+ }
+
+ $pid2 = $pid3;
+
+ if($verbose) {
+ logmsg "RUN: $srvrname server is now running PID $ftppid\n";
+ }
+
+ sleep(1);
+
+ return ($pid2, $ftppid);
+}
+
+#######################################################################
+# start the ftps server (or rather, tunnel)
+#
+sub runftpsserver {
+ my ($verbose, $ipv6, $certfile) = @_;
+ my $proto = 'ftps';
+ my $ip = ($ipv6 && ($ipv6 =~ /6$/)) ? "$HOST6IP" : "$HOSTIP";
+ my $ipvnum = ($ipv6 && ($ipv6 =~ /6$/)) ? 6 : 4;
+ my $idnum = 1;
+ my $server;
+ my $srvrname;
+ my $pidfile;
+ my $logfile;
+ my $flags = "";
+
+ if(!$stunnel) {
+ return (0,0);
+ }
+
+ $server = servername_id($proto, $ipvnum, $idnum);
+
+ $pidfile = $serverpidfile{$server};
+
+ # don't retry if the server doesn't work
+ if ($doesntrun{$pidfile}) {
+ return (0,0);
+ }
+
+ my $pid = processexists($pidfile);
+ if($pid > 0) {
+ stopserver($server, "$pid");
+ }
+ unlink($pidfile) if(-f $pidfile);
+
+ $srvrname = servername_str($proto, $ipvnum, $idnum);
+
+ $certfile = 'stunnel.pem' unless($certfile);
+
+ $logfile = server_logfilename($LOGDIR, $proto, $ipvnum, $idnum);
+
+ $flags .= "--verbose " if($debugprotocol);
+ $flags .= "--pidfile \"$pidfile\" --logfile \"$logfile\" ";
+ $flags .= "--id $idnum " if($idnum > 1);
+ $flags .= "--ipv$ipvnum --proto $proto ";
+ $flags .= "--certfile \"$certfile\" " if($certfile ne 'stunnel.pem');
+ $flags .= "--stunnel \"$stunnel\" --srcdir \"$srcdir\" ";
+ $flags .= "--connect $FTPPORT --accept $FTPSPORT";
+
+ my $cmd = "$perl $srcdir/secureserver.pl $flags";
+ my ($ftpspid, $pid2) = startnew($cmd, $pidfile, 15, 0);
+
+ if($ftpspid <= 0 || !kill(0, $ftpspid)) {
+ # it is NOT alive
+ logmsg "RUN: failed to start the $srvrname server\n";
+ stopserver($server, "$pid2");
+ displaylogs($testnumcheck);
+ $doesntrun{$pidfile} = 1;
+ return(0,0);
+ }
+
+ # Server is up. Verify that we can speak to it.
+ my $pid3 = verifyserver($proto, $ipvnum, $idnum, $ip, $FTPSPORT);
+ if(!$pid3) {
+ logmsg "RUN: $srvrname server failed verification\n";
+ # failed to talk to it properly. Kill the server and return failure
+ stopserver($server, "$ftpspid $pid2");
+ displaylogs($testnumcheck);
+ $doesntrun{$pidfile} = 1;
+ return (0,0);
+ }
+ # Here pid3 is actually the pid returned by the unsecure-ftp server.
+
+ $runcert{$server} = $certfile;
+
+ if($verbose) {
+ logmsg "RUN: $srvrname server is now running PID $ftpspid\n";
+ }
+
+ sleep(1);
+
+ return ($ftpspid, $pid2);
+}
+
+#######################################################################
+# start the tftp server
+#
+sub runtftpserver {
+ my ($id, $verbose, $ipv6) = @_;
+ my $port = $TFTPPORT;
+ my $ip = $HOSTIP;
+ my $proto = 'tftp';
+ my $ipvnum = 4;
+ my $idnum = ($id && ($id =~ /^(\d+)$/) && ($id > 1)) ? $id : 1;
+ my $server;
+ my $srvrname;
+ my $pidfile;
+ my $logfile;
+ my $flags = "";
+
+ if($ipv6) {
+ # if IPv6, use a different setup
+ $ipvnum = 6;
+ $port = $TFTP6PORT;
+ $ip = $HOST6IP;
+ }
+
+ $server = servername_id($proto, $ipvnum, $idnum);
+
+ $pidfile = $serverpidfile{$server};
+
+ # don't retry if the server doesn't work
+ if ($doesntrun{$pidfile}) {
+ return (0,0);
+ }
+
+ my $pid = processexists($pidfile);
+ if($pid > 0) {
+ stopserver($server, "$pid");
+ }
+ unlink($pidfile) if(-f $pidfile);
+
+ $srvrname = servername_str($proto, $ipvnum, $idnum);
+
+ $logfile = server_logfilename($LOGDIR, $proto, $ipvnum, $idnum);
+
+ $flags .= "--verbose " if($debugprotocol);
+ $flags .= "--pidfile \"$pidfile\" --logfile \"$logfile\" ";
+ $flags .= "--id $idnum " if($idnum > 1);
+ $flags .= "--ipv$ipvnum --port $port --srcdir \"$srcdir\"";
+
+ my $cmd = "$perl $srcdir/tftpserver.pl $flags";
+ my ($tftppid, $pid2) = startnew($cmd, $pidfile, 15, 0);
+
+ if($tftppid <= 0 || !kill(0, $tftppid)) {
+ # it is NOT alive
+ logmsg "RUN: failed to start the $srvrname server\n";
+ stopserver($server, "$pid2");
+ displaylogs($testnumcheck);
+ $doesntrun{$pidfile} = 1;
+ return (0,0);
+ }
+
+ # Server is up. Verify that we can speak to it.
+ my $pid3 = verifyserver($proto, $ipvnum, $idnum, $ip, $port);
+ if(!$pid3) {
+ logmsg "RUN: $srvrname server failed verification\n";
+ # failed to talk to it properly. Kill the server and return failure
+ stopserver($server, "$tftppid $pid2");
+ displaylogs($testnumcheck);
+ $doesntrun{$pidfile} = 1;
+ return (0,0);
+ }
+ $pid2 = $pid3;
+
+ if($verbose) {
+ logmsg "RUN: $srvrname server is now running PID $tftppid\n";
+ }
+
+ sleep(1);
+
+ return ($pid2, $tftppid);
+}
+
+
+#######################################################################
+# start the rtsp server
+#
+sub runrtspserver {
+ my ($verbose, $ipv6) = @_;
+ my $port = $RTSPPORT;
+ my $ip = $HOSTIP;
+ my $proto = 'rtsp';
+ my $ipvnum = 4;
+ my $idnum = 1;
+ my $server;
+ my $srvrname;
+ my $pidfile;
+ my $logfile;
+ my $flags = "";
+
+ if($ipv6) {
+ # if IPv6, use a different setup
+ $ipvnum = 6;
+ $port = $RTSP6PORT;
+ $ip = $HOST6IP;
+ }
+
+ $server = servername_id($proto, $ipvnum, $idnum);
+
+ $pidfile = $serverpidfile{$server};
+
+ # don't retry if the server doesn't work
+ if ($doesntrun{$pidfile}) {
+ return (0,0);
+ }
+
+ my $pid = processexists($pidfile);
+ if($pid > 0) {
+ stopserver($server, "$pid");
+ }
+ unlink($pidfile) if(-f $pidfile);
+
+ $srvrname = servername_str($proto, $ipvnum, $idnum);
+
+ $logfile = server_logfilename($LOGDIR, $proto, $ipvnum, $idnum);
+
+ $flags .= "--verbose " if($debugprotocol);
+ $flags .= "--pidfile \"$pidfile\" --logfile \"$logfile\" ";
+ $flags .= "--id $idnum " if($idnum > 1);
+ $flags .= "--ipv$ipvnum --port $port --srcdir \"$srcdir\"";
+
+ my $cmd = "$perl $srcdir/rtspserver.pl $flags";
+ my ($rtsppid, $pid2) = startnew($cmd, $pidfile, 15, 0);
+
+ if($rtsppid <= 0 || !kill(0, $rtsppid)) {
+ # it is NOT alive
+ logmsg "RUN: failed to start the $srvrname server\n";
+ stopserver($server, "$pid2");
+ displaylogs($testnumcheck);
+ $doesntrun{$pidfile} = 1;
+ return (0,0);
+ }
+
+ # Server is up. Verify that we can speak to it.
+ my $pid3 = verifyserver($proto, $ipvnum, $idnum, $ip, $port);
+ if(!$pid3) {
+ logmsg "RUN: $srvrname server failed verification\n";
+ # failed to talk to it properly. Kill the server and return failure
+ stopserver($server, "$rtsppid $pid2");
+ displaylogs($testnumcheck);
+ $doesntrun{$pidfile} = 1;
+ return (0,0);
+ }
+ $pid2 = $pid3;
+
+ if($verbose) {
+ logmsg "RUN: $srvrname server is now running PID $rtsppid\n";
+ }
+
+ sleep(1);
+
+ return ($rtsppid, $pid2);
+}
+
+
+#######################################################################
+# Start the ssh (scp/sftp) server
+#
+sub runsshserver {
+ my ($id, $verbose, $ipv6) = @_;
+ my $ip=$HOSTIP;
+ my $port = $SSHPORT;
+ my $socksport = $SOCKSPORT;
+ my $proto = 'ssh';
+ my $ipvnum = 4;
+ my $idnum = ($id && ($id =~ /^(\d+)$/) && ($id > 1)) ? $id : 1;
+ my $server;
+ my $srvrname;
+ my $pidfile;
+ my $logfile;
+ my $flags = "";
+
+ $server = servername_id($proto, $ipvnum, $idnum);
+
+ $pidfile = $serverpidfile{$server};
+
+ # don't retry if the server doesn't work
+ if ($doesntrun{$pidfile}) {
+ return (0,0);
+ }
+
+ my $pid = processexists($pidfile);
+ if($pid > 0) {
+ stopserver($server, "$pid");
+ }
+ unlink($pidfile) if(-f $pidfile);
+
+ $srvrname = servername_str($proto, $ipvnum, $idnum);
+
+ $logfile = server_logfilename($LOGDIR, $proto, $ipvnum, $idnum);
+
+ $flags .= "--verbose " if($verbose);
+ $flags .= "--debugprotocol " if($debugprotocol);
+ $flags .= "--pidfile \"$pidfile\" ";
+ $flags .= "--id $idnum " if($idnum > 1);
+ $flags .= "--ipv$ipvnum --addr \"$ip\" ";
+ $flags .= "--sshport $port --socksport $socksport ";
+ $flags .= "--user \"$USER\"";
+
+ my $cmd = "$perl $srcdir/sshserver.pl $flags";
+ my ($sshpid, $pid2) = startnew($cmd, $pidfile, 60, 0);
+
+ # on loaded systems sshserver start up can take longer than the timeout
+ # passed to startnew, when this happens startnew completes without being
+ # able to read the pidfile and consequently returns a zero pid2 above.
+
+ if($sshpid <= 0 || !kill(0, $sshpid)) {
+ # it is NOT alive
+ logmsg "RUN: failed to start the $srvrname server\n";
+ stopserver($server, "$pid2");
+ $doesntrun{$pidfile} = 1;
+ return (0,0);
+ }
+
+ # ssh server verification allows some extra time for the server to start up
+ # and gives us the opportunity of recovering the pid from the pidfile, when
+ # this verification succeeds the recovered pid is assigned to pid2.
+
+ my $pid3 = verifyserver($proto, $ipvnum, $idnum, $ip, $port);
+ if(!$pid3) {
+ logmsg "RUN: $srvrname server failed verification\n";
+ # failed to fetch server pid. Kill the server and return failure
+ stopserver($server, "$sshpid $pid2");
+ $doesntrun{$pidfile} = 1;
+ return (0,0);
+ }
+ $pid2 = $pid3;
+
+ # once it is known that the ssh server is alive, sftp server verification
+ # is performed actually connecting to it, authenticating and performing a
+ # very simple remote command. This verification is tried only one time.
+
+ $sshdlog = server_logfilename($LOGDIR, 'ssh', $ipvnum, $idnum);
+ $sftplog = server_logfilename($LOGDIR, 'sftp', $ipvnum, $idnum);
+
+ if(verifysftp('sftp', $ipvnum, $idnum, $ip, $port) < 1) {
+ logmsg "RUN: SFTP server failed verification\n";
+ # failed to talk to it properly. Kill the server and return failure
+ display_sftplog();
+ display_sftpconfig();
+ display_sshdlog();
+ display_sshdconfig();
+ stopserver($server, "$sshpid $pid2");
+ $doesntrun{$pidfile} = 1;
+ return (0,0);
+ }
+
+ if($verbose) {
+ logmsg "RUN: $srvrname server is now running PID $pid2\n";
+ }
+
+ return ($pid2, $sshpid);
+}
+
+#######################################################################
+# Start the socks server
+#
+sub runsocksserver {
+ my ($id, $verbose, $ipv6) = @_;
+ my $ip=$HOSTIP;
+ my $port = $SOCKSPORT;
+ my $proto = 'socks';
+ my $ipvnum = 4;
+ my $idnum = ($id && ($id =~ /^(\d+)$/) && ($id > 1)) ? $id : 1;
+ my $server;
+ my $srvrname;
+ my $pidfile;
+ my $logfile;
+ my $flags = "";
+
+ $server = servername_id($proto, $ipvnum, $idnum);
+
+ $pidfile = $serverpidfile{$server};
+
+ # don't retry if the server doesn't work
+ if ($doesntrun{$pidfile}) {
+ return (0,0);
+ }
+
+ my $pid = processexists($pidfile);
+ if($pid > 0) {
+ stopserver($server, "$pid");
+ }
+ unlink($pidfile) if(-f $pidfile);
+
+ $srvrname = servername_str($proto, $ipvnum, $idnum);
+
+ $logfile = server_logfilename($LOGDIR, $proto, $ipvnum, $idnum);
+
+ # The ssh server must be already running
+ if(!$run{'ssh'}) {
+ logmsg "RUN: SOCKS server cannot find running SSH server\n";
+ $doesntrun{$pidfile} = 1;
+ return (0,0);
+ }
+
+ # Find out ssh daemon canonical file name
+ my $sshd = find_sshd();
+ if(!$sshd) {
+ logmsg "RUN: SOCKS server cannot find $sshdexe\n";
+ $doesntrun{$pidfile} = 1;
+ return (0,0);
+ }
+
+ # Find out ssh daemon version info
+ ($sshdid, $sshdvernum, $sshdverstr, $sshderror) = sshversioninfo($sshd);
+ if(!$sshdid) {
+ # Not an OpenSSH or SunSSH ssh daemon
+ logmsg "$sshderror\n" if($verbose);
+ logmsg "SCP, SFTP and SOCKS tests require OpenSSH 2.9.9 or later\n";
+ $doesntrun{$pidfile} = 1;
+ return (0,0);
+ }
+ logmsg "ssh server found $sshd is $sshdverstr\n" if($verbose);
+
+ # Find out ssh client canonical file name
+ my $ssh = find_ssh();
+ if(!$ssh) {
+ logmsg "RUN: SOCKS server cannot find $sshexe\n";
+ $doesntrun{$pidfile} = 1;
+ return (0,0);
+ }
+
+ # Find out ssh client version info
+ my ($sshid, $sshvernum, $sshverstr, $ssherror) = sshversioninfo($ssh);
+ if(!$sshid) {
+ # Not an OpenSSH or SunSSH ssh client
+ logmsg "$ssherror\n" if($verbose);
+ logmsg "SCP, SFTP and SOCKS tests require OpenSSH 2.9.9 or later\n";
+ $doesntrun{$pidfile} = 1;
+ return (0,0);
+ }
+
+ # Verify minimum ssh client version
+ if((($sshid =~ /OpenSSH/) && ($sshvernum < 299)) ||
+ (($sshid =~ /SunSSH/) && ($sshvernum < 100))) {
+ logmsg "ssh client found $ssh is $sshverstr\n";
+ logmsg "SCP, SFTP and SOCKS tests require OpenSSH 2.9.9 or later\n";
+ $doesntrun{$pidfile} = 1;
+ return (0,0);
+ }
+ logmsg "ssh client found $ssh is $sshverstr\n" if($verbose);
+
+ # Verify if ssh client and ssh daemon versions match
+ if(($sshdid ne $sshid) || ($sshdvernum != $sshvernum)) {
+ # Our test harness might work with slightly mismatched versions
+ logmsg "Warning: version mismatch: sshd $sshdverstr - ssh $sshverstr\n"
+ if($verbose);
+ }
+
+ # Config file options for ssh client are previously set from sshserver.pl
+ if(! -e $sshconfig) {
+ logmsg "RUN: SOCKS server cannot find $sshconfig\n";
+ $doesntrun{$pidfile} = 1;
+ return (0,0);
+ }
+
+ $sshlog = server_logfilename($LOGDIR, 'socks', $ipvnum, $idnum);
+
+ # start our socks server
+ my $cmd="$ssh -N -F $sshconfig $ip > $sshlog 2>&1";
+ my ($sshpid, $pid2) = startnew($cmd, $pidfile, 30, 1);
+
+ if($sshpid <= 0 || !kill(0, $sshpid)) {
+ # it is NOT alive
+ logmsg "RUN: failed to start the $srvrname server\n";
+ display_sshlog();
+ display_sshconfig();
+ display_sshdlog();
+ display_sshdconfig();
+ stopserver($server, "$pid2");
+ $doesntrun{$pidfile} = 1;
+ return (0,0);
+ }
+
+ # Ugly hack but ssh doesn't support pid files
+ my $pid3 = verifyserver($proto, $ipvnum, $idnum, $ip, $port);
+ if(!$pid3) {
+ logmsg "RUN: $srvrname server failed verification\n";
+ # failed to talk to it properly. Kill the server and return failure
+ stopserver($server, "$sshpid $pid2");
+ $doesntrun{$pidfile} = 1;
+ return (0,0);
+ }
+ $pid2 = $pid3;
+
+ if($verbose) {
+ logmsg "RUN: $srvrname server is now running PID $pid2\n";
+ }
+
+ return ($pid2, $sshpid);
+}
+
+#######################################################################
+# Remove all files in the specified directory
+#
+sub cleardir {
+ my $dir = $_[0];
+ my $count;
+ my $file;
+
+ # Get all files
+ opendir(DIR, $dir) ||
+ return 0; # can't open dir
+ while($file = readdir(DIR)) {
+ if($file !~ /^\./) {
+ unlink("$dir/$file");
+ $count++;
+ }
+ }
+ closedir DIR;
+ return $count;
+}
+
+#######################################################################
+# filter out the specified pattern from the given input file and store the
+# results in the given output file
+#
+sub filteroff {
+ my $infile=$_[0];
+ my $filter=$_[1];
+ my $ofile=$_[2];
+
+ open(IN, "<$infile")
+ || return 1;
+
+ open(OUT, ">$ofile")
+ || return 1;
+
+ # logmsg "FILTER: off $filter from $infile to $ofile\n";
+
+ while(<IN>) {
+ $_ =~ s/$filter//;
+ print OUT $_;
+ }
+ close(IN);
+ close(OUT);
+ return 0;
+}
+
+#######################################################################
+# compare test results with the expected output, we might filter off
+# some pattern that is allowed to differ, output test results
+#
+
+sub compare {
+ # filter off patterns _before_ this comparison!
+ my ($subject, $firstref, $secondref)=@_;
+
+ my $result = compareparts($firstref, $secondref);
+
+ if($result) {
+ if(!$short) {
+ logmsg "\n $subject FAILED:\n";
+ logmsg showdiff($LOGDIR, $firstref, $secondref);
+ }
+ else {
+ logmsg "FAILED\n";
+ }
+ }
+ return $result;
+}
+
+#######################################################################
+# display information about curl and the host the test suite runs on
+#
+sub checksystem {
+
+ unlink($memdump); # remove this if there was one left
+
+ my $feat;
+ my $curl;
+ my $libcurl;
+ my $versretval;
+ my $versnoexec;
+ my @version=();
+
+ my $curlverout="$LOGDIR/curlverout.log";
+ my $curlvererr="$LOGDIR/curlvererr.log";
+ my $versioncmd="$CURL --version 1>$curlverout 2>$curlvererr";
+
+ unlink($curlverout);
+ unlink($curlvererr);
+
+ $versretval = runclient($versioncmd);
+ $versnoexec = $!;
+
+ open(VERSOUT, "<$curlverout");
+ @version = <VERSOUT>;
+ close(VERSOUT);
+
+ for(@version) {
+ chomp;
+
+ if($_ =~ /^curl/) {
+ $curl = $_;
+ $curl =~ s/^(.*)(libcurl.*)/$1/g;
+
+ $libcurl = $2;
+ if($curl =~ /mingw32/) {
+ # This is a windows minw32 build, we need to translate the
+ # given path to the "actual" windows path.
+
+ my @m = `mount`;
+ my $matchlen;
+ my $bestmatch;
+ my $mount;
+
+# example mount output:
+# C:\DOCUME~1\Temp on /tmp type user (binmode,noumount)
+# c:\ActiveState\perl on /perl type user (binmode)
+# C:\msys\1.0\bin on /usr/bin type user (binmode,cygexec,noumount)
+# C:\msys\1.0\bin on /bin type user (binmode,cygexec,noumount)
+
+ foreach $mount (@m) {
+ if( $mount =~ /(.*) on ([^ ]*) type /) {
+ my ($mingw, $real)=($2, $1);
+ if($pwd =~ /^$mingw/) {
+ # the path we got from pwd starts with the path
+ # we found on this line in the mount output
+
+ my $len = length($real);
+ if($len > $matchlen) {
+ # we remember the match that is the longest
+ $matchlen = $len;
+ $bestmatch = $real;
+ }
+ }
+ }
+ }
+ if(!$matchlen) {
+ logmsg "Serious error, can't find our \"real\" path\n";
+ }
+ else {
+ # now prepend the prefix from the mount command to build
+ # our "actual path"
+ $pwd = "$bestmatch$pwd";
+ }
+ $pwd =~ s#\\#/#g;
+ }
+ elsif ($curl =~ /win32/) {
+ # Native Windows builds don't understand the
+ # output of cygwin's pwd. It will be
+ # something like /cygdrive/c/<some path>.
+ #
+ # Use the cygpath utility to convert the
+ # working directory to a Windows friendly
+ # path. The -m option converts to use drive
+ # letter:, but it uses / instead \. Forward
+ # slashes (/) are easier for us. We don't
+ # have to escape them to get them to curl
+ # through a shell.
+ chomp($pwd = `cygpath -m $pwd`);
+ }
+ elsif ($libcurl =~ /openssl/i) {
+ $has_openssl=1;
+ $ssllib="OpenSSL";
+ }
+ elsif ($libcurl =~ /gnutls/i) {
+ $has_gnutls=1;
+ $ssllib="GnuTLS";
+ }
+ elsif ($libcurl =~ /nss/i) {
+ $has_nss=1;
+ $ssllib="NSS";
+ }
+ elsif ($libcurl =~ /yassl/i) {
+ $has_yassl=1;
+ $has_openssl=1;
+ $ssllib="yassl";
+ }
+ elsif ($libcurl =~ /polarssl/i) {
+ $has_polarssl=1;
+ $has_openssl=1;
+ $ssllib="polarssl";
+ }
+ }
+ elsif($_ =~ /^Protocols: (.*)/i) {
+ # these are the protocols compiled in to this libcurl
+ @protocols = split(' ', $1);
+
+ # Generate a "proto-ipv6" version of each protocol to match the
+ # IPv6 <server> name. This works even if IPv6 support isn't
+ # compiled in because the <features> test will fail.
+ push @protocols, map($_ . "-ipv6", @protocols);
+
+ # 'none' is used in test cases to mean no server
+ push @protocols, ('none');
+ }
+ elsif($_ =~ /^Features: (.*)/i) {
+ $feat = $1;
+ if($feat =~ /TrackMemory/i) {
+ # curl was built with --enable-curldebug (memory tracking)
+ $curl_debug = 1;
+ }
+ if($feat =~ /debug/i) {
+ # curl was built with --enable-debug
+ $debug_build = 1;
+ # set the NETRC debug env
+ $ENV{'CURL_DEBUG_NETRC'} = "$LOGDIR/netrc";
+ }
+ if($feat =~ /SSL/i) {
+ # ssl enabled
+ $ssl_version=1;
+ }
+ if($feat =~ /Largefile/i) {
+ # large file support
+ $large_file=1;
+ }
+ if($feat =~ /IDN/i) {
+ # IDN support
+ $has_idn=1;
+ }
+ if($feat =~ /IPv6/i) {
+ $has_ipv6 = 1;
+ }
+ if($feat =~ /libz/i) {
+ $has_libz = 1;
+ }
+ if($feat =~ /NTLM/i) {
+ # NTLM enabled
+ $has_ntlm=1;
+ }
+ if($feat =~ /CharConv/i) {
+ # CharConv enabled
+ $has_charconv=1;
+ }
+ }
+ }
+ if(!$curl) {
+ logmsg "unable to get curl's version, further details are:\n";
+ logmsg "issued command: \n";
+ logmsg "$versioncmd \n";
+ if ($versretval == -1) {
+ logmsg "command failed with: \n";
+ logmsg "$versnoexec \n";
+ }
+ elsif ($versretval & 127) {
+ logmsg sprintf("command died with signal %d, and %s coredump.\n",
+ ($versretval & 127), ($versretval & 128)?"a":"no");
+ }
+ else {
+ logmsg sprintf("command exited with value %d \n", $versretval >> 8);
+ }
+ logmsg "contents of $curlverout: \n";
+ displaylogcontent("$curlverout");
+ logmsg "contents of $curlvererr: \n";
+ displaylogcontent("$curlvererr");
+ die "couldn't get curl's version";
+ }
+
+ if(-r "../lib/curl_config.h") {
+ open(CONF, "<../lib/curl_config.h");
+ while(<CONF>) {
+ if($_ =~ /^\#define HAVE_GETRLIMIT/) {
+ $has_getrlimit = 1;
+ }
+ }
+ close(CONF);
+ }
+
+ if($has_ipv6) {
+ # client has ipv6 support
+
+ # check if the HTTP server has it!
+ my @sws = `server/sws --version`;
+ if($sws[0] =~ /IPv6/) {
+ # HTTP server has ipv6 support!
+ $http_ipv6 = 1;
+ $gopher_ipv6 = 1;
+ }
+
+ # check if the FTP server has it!
+ @sws = `server/sockfilt --version`;
+ if($sws[0] =~ /IPv6/) {
+ # FTP server has ipv6 support!
+ $ftp_ipv6 = 1;
+ }
+ }
+
+ if(!$curl_debug && $torture) {
+ die "can't run torture tests since curl was not built with curldebug";
+ }
+
+ $has_shared = `sh $CURLCONFIG --built-shared`;
+ chomp $has_shared;
+
+ # curl doesn't list cryptographic support separately, so assume it's
+ # always available
+ $has_crypto=1;
+
+ my $hostname=join(' ', runclientoutput("hostname"));
+ my $hosttype=join(' ', runclientoutput("uname -a"));
+
+ logmsg ("********* System characteristics ******** \n",
+ "* $curl\n",
+ "* $libcurl\n",
+ "* Features: $feat\n",
+ "* Host: $hostname",
+ "* System: $hosttype");
+
+ logmsg sprintf("* Server SSL: %8s", $stunnel?"ON ":"OFF");
+ logmsg sprintf(" libcurl SSL: %s\n", $ssl_version?"ON ":"OFF");
+ logmsg sprintf("* debug build: %8s", $debug_build?"ON ":"OFF");
+ logmsg sprintf(" track memory: %s\n", $curl_debug?"ON ":"OFF");
+ logmsg sprintf("* valgrind: %8s", $valgrind?"ON ":"OFF");
+ logmsg sprintf(" HTTP IPv6 %s\n", $http_ipv6?"ON ":"OFF");
+ logmsg sprintf("* FTP IPv6 %8s", $ftp_ipv6?"ON ":"OFF");
+ logmsg sprintf(" Libtool lib: %s\n", $libtool?"ON ":"OFF");
+ logmsg sprintf("* Shared build: %s\n", $has_shared);
+ if($ssl_version) {
+ logmsg sprintf("* SSL library: %13s\n", $ssllib);
+ }
+
+ logmsg "* Ports:\n";
+
+ logmsg sprintf("* HTTP/%d ", $HTTPPORT);
+ logmsg sprintf("FTP/%d ", $FTPPORT);
+ logmsg sprintf("FTP2/%d ", $FTP2PORT);
+ logmsg sprintf("RTSP/%d ", $RTSPPORT);
+ if($stunnel) {
+ logmsg sprintf("FTPS/%d ", $FTPSPORT);
+ logmsg sprintf("HTTPS/%d ", $HTTPSPORT);
+ }
+ logmsg sprintf("\n* TFTP/%d ", $TFTPPORT);
+ if($http_ipv6) {
+ logmsg sprintf("HTTP-IPv6/%d ", $HTTP6PORT);
+ logmsg sprintf("RTSP-IPv6/%d ", $RTSP6PORT);
+ }
+ if($ftp_ipv6) {
+ logmsg sprintf("FTP-IPv6/%d ", $FTP6PORT);
+ }
+ if($tftp_ipv6) {
+ logmsg sprintf("TFTP-IPv6/%d ", $TFTP6PORT);
+ }
+ logmsg sprintf("\n* GOPHER/%d ", $GOPHERPORT);
+ if($gopher_ipv6) {
+ logmsg sprintf("GOPHER-IPv6/%d", $GOPHERPORT);
+ }
+ logmsg sprintf("\n* SSH/%d ", $SSHPORT);
+ logmsg sprintf("SOCKS/%d ", $SOCKSPORT);
+ logmsg sprintf("POP3/%d ", $POP3PORT);
+ logmsg sprintf("IMAP/%d ", $IMAPPORT);
+ logmsg sprintf("SMTP/%d\n", $SMTPPORT);
+ if($ftp_ipv6) {
+ logmsg sprintf("* POP3-IPv6/%d ", $POP36PORT);
+ logmsg sprintf("IMAP-IPv6/%d ", $IMAP6PORT);
+ logmsg sprintf("SMTP-IPv6/%d\n", $SMTP6PORT);
+ }
+
+ $has_textaware = ($^O eq 'MSWin32') || ($^O eq 'msys');
+
+ logmsg "***************************************** \n";
+}
+
+#######################################################################
+# substitute the variable stuff into either a joined up file or
+# a command, in either case passed by reference
+#
+sub subVariables {
+ my ($thing) = @_;
+ $$thing =~ s/%HOSTIP/$HOSTIP/g;
+ $$thing =~ s/%HTTPPORT/$HTTPPORT/g;
+ $$thing =~ s/%HOST6IP/$HOST6IP/g;
+ $$thing =~ s/%HTTP6PORT/$HTTP6PORT/g;
+ $$thing =~ s/%HTTPSPORT/$HTTPSPORT/g;
+ $$thing =~ s/%FTPPORT/$FTPPORT/g;
+ $$thing =~ s/%FTP6PORT/$FTP6PORT/g;
+ $$thing =~ s/%FTP2PORT/$FTP2PORT/g;
+ $$thing =~ s/%FTPSPORT/$FTPSPORT/g;
+ $$thing =~ s/%SRCDIR/$srcdir/g;
+ $$thing =~ s/%PWD/$pwd/g;
+ $$thing =~ s/%TFTPPORT/$TFTPPORT/g;
+ $$thing =~ s/%TFTP6PORT/$TFTP6PORT/g;
+ $$thing =~ s/%SSHPORT/$SSHPORT/g;
+ $$thing =~ s/%SOCKSPORT/$SOCKSPORT/g;
+ $$thing =~ s/%POP3PORT/$POP3PORT/g;
+ $$thing =~ s/%POP36PORT/$POP36PORT/g;
+ $$thing =~ s/%IMAPPORT/$IMAPPORT/g;
+ $$thing =~ s/%IMAP6PORT/$IMAP6PORT/g;
+ $$thing =~ s/%SMTPPORT/$SMTPPORT/g;
+ $$thing =~ s/%SMTP6PORT/$SMTP6PORT/g;
+ $$thing =~ s/%CURL/$CURL/g;
+ $$thing =~ s/%USER/$USER/g;
+ $$thing =~ s/%CLIENTIP/$CLIENTIP/g;
+ $$thing =~ s/%CLIENT6IP/$CLIENT6IP/g;
+ $$thing =~ s/%RTSPPORT/$RTSPPORT/g;
+ $$thing =~ s/%RTSP6PORT/$RTSP6PORT/g;
+ $$thing =~ s/%GOPHERPORT/$GOPHERPORT/g;
+ $$thing =~ s/%GOPHER6PORT/$GOPHER6PORT/g;
+
+ # The purpose of FTPTIME2 and FTPTIME3 is to provide times that can be
+ # used for time-out tests and that whould work on most hosts as these
+ # adjust for the startup/check time for this particular host. We needed
+ # to do this to make the test suite run better on very slow hosts.
+
+ my $ftp2 = $ftpchecktime * 2;
+ my $ftp3 = $ftpchecktime * 3;
+
+ $$thing =~ s/%FTPTIME2/$ftp2/g;
+ $$thing =~ s/%FTPTIME3/$ftp3/g;
+}
+
+sub fixarray {
+ my @in = @_;
+
+ for(@in) {
+ subVariables \$_;
+ }
+ return @in;
+}
+
+#######################################################################
+# Provide time stamps for single test skipped events
+#
+sub timestampskippedevents {
+ my $testnum = $_[0];
+
+ return if((not defined($testnum)) || ($testnum < 1));
+
+ if($timestats) {
+
+ if($timevrfyend{$testnum}) {
+ return;
+ }
+ elsif($timesrvrlog{$testnum}) {
+ $timevrfyend{$testnum} = $timesrvrlog{$testnum};
+ return;
+ }
+ elsif($timetoolend{$testnum}) {
+ $timevrfyend{$testnum} = $timetoolend{$testnum};
+ $timesrvrlog{$testnum} = $timetoolend{$testnum};
+ }
+ elsif($timetoolini{$testnum}) {
+ $timevrfyend{$testnum} = $timetoolini{$testnum};
+ $timesrvrlog{$testnum} = $timetoolini{$testnum};
+ $timetoolend{$testnum} = $timetoolini{$testnum};
+ }
+ elsif($timesrvrend{$testnum}) {
+ $timevrfyend{$testnum} = $timesrvrend{$testnum};
+ $timesrvrlog{$testnum} = $timesrvrend{$testnum};
+ $timetoolend{$testnum} = $timesrvrend{$testnum};
+ $timetoolini{$testnum} = $timesrvrend{$testnum};
+ }
+ elsif($timesrvrini{$testnum}) {
+ $timevrfyend{$testnum} = $timesrvrini{$testnum};
+ $timesrvrlog{$testnum} = $timesrvrini{$testnum};
+ $timetoolend{$testnum} = $timesrvrini{$testnum};
+ $timetoolini{$testnum} = $timesrvrini{$testnum};
+ $timesrvrend{$testnum} = $timesrvrini{$testnum};
+ }
+ elsif($timeprepini{$testnum}) {
+ $timevrfyend{$testnum} = $timeprepini{$testnum};
+ $timesrvrlog{$testnum} = $timeprepini{$testnum};
+ $timetoolend{$testnum} = $timeprepini{$testnum};
+ $timetoolini{$testnum} = $timeprepini{$testnum};
+ $timesrvrend{$testnum} = $timeprepini{$testnum};
+ $timesrvrini{$testnum} = $timeprepini{$testnum};
+ }
+ }
+}
+
+#######################################################################
+# Run a single specified test case
+#
+sub singletest {
+ my ($testnum, $count, $total)=@_;
+
+ my @what;
+ my $why;
+ my %feature;
+ my $cmd;
+
+ # copy test number to a global scope var, this allows
+ # testnum checking when starting test harness servers.
+ $testnumcheck = $testnum;
+
+ # timestamp test preparation start
+ $timeprepini{$testnum} = Time::HiRes::time() if($timestats);
+
+ if($disttests !~ /test$testnum\W/ ) {
+ logmsg "Warning: test$testnum not present in tests/data/Makefile.am\n";
+ }
+
+ # load the test case file definition
+ if(loadtest("${TESTDIR}/test${testnum}")) {
+ if($verbose) {
+ # this is not a test
+ logmsg "RUN: $testnum doesn't look like a test case\n";
+ }
+ $why = "no test";
+ }
+ else {
+ @what = getpart("client", "features");
+ }
+
+ for(@what) {
+ my $f = $_;
+ $f =~ s/\s//g;
+
+ $feature{$f}=$f; # we require this feature
+
+ if($f eq "SSL") {
+ if($ssl_version) {
+ next;
+ }
+ }
+ elsif($f eq "OpenSSL") {
+ if($has_openssl) {
+ next;
+ }
+ }
+ elsif($f eq "GnuTLS") {
+ if($has_gnutls) {
+ next;
+ }
+ }
+ elsif($f eq "NSS") {
+ if($has_nss) {
+ next;
+ }
+ }
+ elsif($f eq "netrc_debug") {
+ if($debug_build) {
+ next;
+ }
+ }
+ elsif($f eq "large_file") {
+ if($large_file) {
+ next;
+ }
+ }
+ elsif($f eq "idn") {
+ if($has_idn) {
+ next;
+ }
+ }
+ elsif($f eq "ipv6") {
+ if($has_ipv6) {
+ next;
+ }
+ }
+ elsif($f eq "libz") {
+ if($has_libz) {
+ next;
+ }
+ }
+ elsif($f eq "NTLM") {
+ if($has_ntlm) {
+ next;
+ }
+ }
+ elsif($f eq "getrlimit") {
+ if($has_getrlimit) {
+ next;
+ }
+ }
+ elsif($f eq "crypto") {
+ if($has_crypto) {
+ next;
+ }
+ }
+ elsif($f eq "socks") {
+ next;
+ }
+ # See if this "feature" is in the list of supported protocols
+ elsif (grep /^$f$/, @protocols) {
+ next;
+ }
+
+ $why = "curl lacks $f support";
+ last;
+ }
+
+ if(!$why) {
+ my @keywords = getpart("info", "keywords");
+ my $match;
+ my $k;
+ for $k (@keywords) {
+ chomp $k;
+ if ($disabled_keywords{$k}) {
+ $why = "disabled by keyword";
+ } elsif ($enabled_keywords{$k}) {
+ $match = 1;
+ }
+ }
+
+ if(!$why && !$match && %enabled_keywords) {
+ $why = "disabled by missing keyword";
+ }
+ }
+
+ # test definition may instruct to (un)set environment vars
+ # this is done this early, so that the precheck can use environment
+ # variables and still bail out fine on errors
+
+ # restore environment variables that were modified in a previous run
+ foreach my $var (keys %oldenv) {
+ if($oldenv{$var} eq 'notset') {
+ delete $ENV{$var} if($ENV{$var});
+ }
+ else {
+ $ENV{$var} = $oldenv{$var};
+ }
+ delete $oldenv{$var};
+ }
+
+ # timestamp required servers verification start
+ $timesrvrini{$testnum} = Time::HiRes::time() if($timestats);
+
+ if(!$why) {
+ $why = serverfortest($testnum);
+ }
+
+ # timestamp required servers verification end
+ $timesrvrend{$testnum} = Time::HiRes::time() if($timestats);
+
+ my @setenv = getpart("client", "setenv");
+ if(@setenv) {
+ foreach my $s (@setenv) {
+ chomp $s;
+ subVariables \$s;
+ if($s =~ /([^=]*)=(.*)/) {
+ my ($var, $content) = ($1, $2);
+ # remember current setting, to restore it once test runs
+ $oldenv{$var} = ($ENV{$var})?"$ENV{$var}":'notset';
+ # set new value
+ if(!$content) {
+ delete $ENV{$var} if($ENV{$var});
+ }
+ else {
+ if(($var =~ /^LD_PRELOAD/) &&
+ ($debug_build || ($has_shared ne "yes"))) {
+ # print "Skipping LD_PRELOAD due to no release shared build\n";
+ next;
+ }
+ $ENV{$var} = "$content";
+ }
+ }
+ }
+ }
+
+ if(!$why) {
+ # TODO:
+ # Add a precheck cache. If a precheck command was already invoked
+ # exactly like this, then use the previous result to speed up
+ # successive test invokes!
+
+ my @precheck = getpart("client", "precheck");
+ if(@precheck) {
+ $cmd = $precheck[0];
+ chomp $cmd;
+ subVariables \$cmd;
+ if($cmd) {
+ my @p = split(/ /, $cmd);
+ if($p[0] !~ /\//) {
+ # the first word, the command, does not contain a slash so
+ # we will scan the "improved" PATH to find the command to
+ # be able to run it
+ my $fullp = checktestcmd($p[0]);
+
+ if($fullp) {
+ $p[0] = $fullp;
+ }
+ $cmd = join(" ", @p);
+ }
+
+ my @o = `$cmd 2>/dev/null`;
+ if($o[0]) {
+ $why = $o[0];
+ chomp $why;
+ } elsif($?) {
+ $why = "precheck command error";
+ }
+ logmsg "prechecked $cmd\n" if($verbose);
+ }
+ }
+ }
+
+ if($why && !$listonly) {
+ # there's a problem, count it as "skipped"
+ $skipped++;
+ $skipped{$why}++;
+ $teststat[$testnum]=$why; # store reason for this test case
+
+ if(!$short) {
+ printf "test %03d SKIPPED: $why\n", $testnum;
+ }
+
+ timestampskippedevents($testnum);
+ return -1;
+ }
+ logmsg sprintf("test %03d...", $testnum);
+
+ # extract the reply data
+ my @reply = getpart("reply", "data");
+ my @replycheck = getpart("reply", "datacheck");
+
+ if (@replycheck) {
+ # we use this file instead to check the final output against
+
+ my %hash = getpartattr("reply", "datacheck");
+ if($hash{'nonewline'}) {
+ # Yes, we must cut off the final newline from the final line
+ # of the datacheck
+ chomp($replycheck[$#replycheck]);
+ }
+
+ @reply=@replycheck;
+ }
+
+ # curl command to run
+ my @curlcmd= fixarray ( getpart("client", "command") );
+
+ # this is the valid protocol blurb curl should generate
+ my @protocol= fixarray ( getpart("verify", "protocol") );
+
+ # redirected stdout/stderr to these files
+ $STDOUT="$LOGDIR/stdout$testnum";
+ $STDERR="$LOGDIR/stderr$testnum";
+
+ # if this section exists, we verify that the stdout contained this:
+ my @validstdout = fixarray ( getpart("verify", "stdout") );
+
+ # if this section exists, we verify upload
+ my @upload = getpart("verify", "upload");
+
+ # if this section exists, it might be FTP server instructions:
+ my @ftpservercmd = getpart("reply", "servercmd");
+
+ my $CURLOUT="$LOGDIR/curl$testnum.out"; # curl output if not stdout
+
+ # name of the test
+ my @testname= getpart("client", "name");
+
+ if(!$short) {
+ my $name = $testname[0];
+ $name =~ s/\n//g;
+ logmsg "[$name]\n";
+ }
+
+ if($listonly) {
+ timestampskippedevents($testnum);
+ return 0; # look successful
+ }
+
+ my @codepieces = getpart("client", "tool");
+
+ my $tool="";
+ if(@codepieces) {
+ $tool = $codepieces[0];
+ chomp $tool;
+ }
+
+ # remove server output logfiles
+ unlink($SERVERIN);
+ unlink($SERVER2IN);
+
+ if(@ftpservercmd) {
+ # write the instructions to file
+ writearray($FTPDCMD, \@ftpservercmd);
+ }
+
+ # get the command line options to use
+ my @blaha;
+ ($cmd, @blaha)= getpart("client", "command");
+
+ # make some nice replace operations
+ $cmd =~ s/\n//g; # no newlines please
+
+ # substitute variables in the command line
+ subVariables \$cmd;
+
+ if($curl_debug) {
+ unlink($memdump);
+ }
+
+ # create a (possibly-empty) file before starting the test
+ my @inputfile=getpart("client", "file");
+ my %fileattr = getpartattr("client", "file");
+ my $filename=$fileattr{'name'};
+ if(@inputfile || $filename) {
+ if(!$filename) {
+ logmsg "ERROR: section client=>file has no name attribute\n";
+ timestampskippedevents($testnum);
+ return -1;
+ }
+ my $fileContent = join('', @inputfile);
+ subVariables \$fileContent;
+# logmsg "DEBUG: writing file " . $filename . "\n";
+ open(OUTFILE, ">$filename");
+ binmode OUTFILE; # for crapage systems, use binary
+ print OUTFILE $fileContent;
+ close(OUTFILE);
+ }
+
+ my %cmdhash = getpartattr("client", "command");
+
+ my $out="";
+
+ if((!$cmdhash{'option'}) || ($cmdhash{'option'} !~ /no-output/)) {
+ #We may slap on --output!
+ if (!@validstdout) {
+ $out=" --output $CURLOUT ";
+ }
+ }
+
+ my $serverlogslocktimeout = $defserverlogslocktimeout;
+ if($cmdhash{'timeout'}) {
+ # test is allowed to override default server logs lock timeout
+ if($cmdhash{'timeout'} =~ /(\d+)/) {
+ $serverlogslocktimeout = $1 if($1 >= 0);
+ }
+ }
+
+ my $postcommanddelay = $defpostcommanddelay;
+ if($cmdhash{'delay'}) {
+ # test is allowed to specify a delay after command is executed
+ if($cmdhash{'delay'} =~ /(\d+)/) {
+ $postcommanddelay = $1 if($1 > 0);
+ }
+ }
+
+ my $cmdargs;
+ if(!$tool) {
+ # run curl, add --verbose for debug information output
+ $cmdargs ="$out --include --verbose --trace-time $cmd";
+ }
+ else {
+ $cmdargs = " $cmd"; # $cmd is the command line for the test file
+ $CURLOUT = $STDOUT; # sends received data to stdout
+ }
+
+ my @stdintest = getpart("client", "stdin");
+
+ if(@stdintest) {
+ my $stdinfile="$LOGDIR/stdin-for-$testnum";
+ writearray($stdinfile, \@stdintest);
+
+ $cmdargs .= " <$stdinfile";
+ }
+ my $CMDLINE;
+
+ if(!$tool) {
+ $CMDLINE="$CURL";
+ }
+ else {
+ $CMDLINE="$LIBDIR/$tool";
+ if(! -f $CMDLINE) {
+ print "The tool set in the test case for this: '$tool' does not exist\n";
+ timestampskippedevents($testnum);
+ return -1;
+ }
+ $DBGCURL=$CMDLINE;
+ }
+
+ my $usevalgrind;
+ if($valgrind) {
+ my @valgrindoption = getpart("verify", "valgrind");
+ if((!@valgrindoption) || ($valgrindoption[0] !~ /disable/)) {
+ $usevalgrind = 1;
+ my $valgrindcmd = "$valgrind ";
+ $valgrindcmd .= "$valgrind_tool " if($valgrind_tool);
+ $valgrindcmd .= "--leak-check=yes ";
+ $valgrindcmd .= "--num-callers=16 ";
+ $valgrindcmd .= "${valgrind_logfile}=$LOGDIR/valgrind$testnum";
+ $CMDLINE = "$valgrindcmd $CMDLINE";
+ }
+ }
+
+ $CMDLINE .= "$cmdargs >$STDOUT 2>$STDERR";
+
+ if($verbose) {
+ logmsg "$CMDLINE\n";
+ }
+
+ print CMDLOG "$CMDLINE\n";
+
+ unlink("core");
+
+ my $dumped_core;
+ my $cmdres;
+
+ # Apr 2007: precommand isn't being used and could be removed
+ my @precommand= getpart("client", "precommand");
+ if($precommand[0]) {
+ # this is pure perl to eval!
+ my $code = join("", @precommand);
+ eval $code;
+ if($@) {
+ logmsg "perl: $code\n";
+ logmsg "precommand: $@";
+ stopservers($verbose);
+ timestampskippedevents($testnum);
+ return -1;
+ }
+ }
+
+ if($gdbthis) {
+ my $gdbinit = "$TESTDIR/gdbinit$testnum";
+ open(GDBCMD, ">$LOGDIR/gdbcmd");
+ print GDBCMD "set args $cmdargs\n";
+ print GDBCMD "show args\n";
+ print GDBCMD "source $gdbinit\n" if -e $gdbinit;
+ close(GDBCMD);
+ }
+
+ # timestamp starting of test command
+ $timetoolini{$testnum} = Time::HiRes::time() if($timestats);
+
+ # run the command line we built
+ if ($torture) {
+ $cmdres = torture($CMDLINE,
+ "$gdb --directory libtest $DBGCURL -x $LOGDIR/gdbcmd");
+ }
+ elsif($gdbthis) {
+ runclient("$gdb --directory libtest $DBGCURL -x $LOGDIR/gdbcmd");
+ $cmdres=0; # makes it always continue after a debugged run
+ }
+ else {
+ $cmdres = runclient("$CMDLINE");
+ my $signal_num = $cmdres & 127;
+ $dumped_core = $cmdres & 128;
+
+ if(!$anyway && ($signal_num || $dumped_core)) {
+ $cmdres = 1000;
+ }
+ else {
+ $cmdres >>= 8;
+ $cmdres = (2000 + $signal_num) if($signal_num && !$cmdres);
+ }
+ }
+
+ # timestamp finishing of test command
+ $timetoolend{$testnum} = Time::HiRes::time() if($timestats);
+
+ if(!$dumped_core) {
+ if(-r "core") {
+ # there's core file present now!
+ $dumped_core = 1;
+ }
+ }
+
+ if($dumped_core) {
+ logmsg "core dumped\n";
+ if(0 && $gdb) {
+ logmsg "running gdb for post-mortem analysis:\n";
+ open(GDBCMD, ">$LOGDIR/gdbcmd2");
+ print GDBCMD "bt\n";
+ close(GDBCMD);
+ runclient("$gdb --directory libtest -x $LOGDIR/gdbcmd2 -batch $DBGCURL core ");
+ # unlink("$LOGDIR/gdbcmd2");
+ }
+ }
+
+ # If a server logs advisor read lock file exists, it is an indication
+ # that the server has not yet finished writing out all its log files,
+ # including server request log files used for protocol verification.
+ # So, if the lock file exists the script waits here a certain amount
+ # of time until the server removes it, or the given time expires.
+
+ if($serverlogslocktimeout) {
+ my $lockretry = $serverlogslocktimeout * 20;
+ while((-f $SERVERLOGS_LOCK) && $lockretry--) {
+ select(undef, undef, undef, 0.05);
+ }
+ if(($lockretry < 0) &&
+ ($serverlogslocktimeout >= $defserverlogslocktimeout)) {
+ logmsg "Warning: server logs lock timeout ",
+ "($serverlogslocktimeout seconds) expired\n";
+ }
+ }
+
+ # Test harness ssh server does not have this synchronization mechanism,
+ # this implies that some ssh server based tests might need a small delay
+ # once that the client command has run to avoid false test failures.
+
+ sleep($postcommanddelay) if($postcommanddelay);
+
+ # timestamp removal of server logs advisor read lock
+ $timesrvrlog{$testnum} = Time::HiRes::time() if($timestats);
+
+ # test definition might instruct to stop some servers
+ # stop also all servers relative to the given one
+
+ my @killtestservers = getpart("client", "killserver");
+ if(@killtestservers) {
+ #
+ # All servers relative to the given one must be stopped also
+ #
+ my @killservers;
+ foreach my $server (@killtestservers) {
+ chomp $server;
+ if($server =~ /^(ftp|http|imap|pop3|smtp)s(.*)$/) {
+ # given an ssl server, also kill non-ssl underlying one
+ push @killservers, "${1}${2}";
+ }
+ elsif($server =~ /^(ftp|http|imap|pop3|smtp)(.*)$/) {
+ # given a non-ssl server, also kill ssl piggybacking one
+ push @killservers, "${1}s${2}";
+ }
+ elsif($server =~ /^(socks)(.*)$/) {
+ # given an socks server, also kill ssh underlying one
+ push @killservers, "ssh${2}";
+ }
+ elsif($server =~ /^(ssh)(.*)$/) {
+ # given an ssh server, also kill socks piggybacking one
+ push @killservers, "socks${2}";
+ }
+ push @killservers, $server;
+ }
+ #
+ # kill sockfilter processes for pingpong relative servers
+ #
+ foreach my $server (@killservers) {
+ if($server =~ /^(ftp|imap|pop3|smtp)s?(\d*)(-ipv6|)$/) {
+ my $proto = $1;
+ my $idnum = ($2 && ($2 > 1)) ? $2 : 1;
+ my $ipvnum = ($3 && ($3 =~ /6$/)) ? 6 : 4;
+ killsockfilters($proto, $ipvnum, $idnum, $verbose);
+ }
+ }
+ #
+ # kill server relative pids clearing them in %run hash
+ #
+ my $pidlist;
+ foreach my $server (@killservers) {
+ if($run{$server}) {
+ $pidlist .= "$run{$server} ";
+ $run{$server} = 0;
+ }
+ $runcert{$server} = 0 if($runcert{$server});
+ }
+ killpid($verbose, $pidlist);
+ #
+ # cleanup server pid files
+ #
+ foreach my $server (@killservers) {
+ my $pidfile = $serverpidfile{$server};
+ my $pid = processexists($pidfile);
+ if($pid > 0) {
+ logmsg "Warning: $server server unexpectedly alive\n";
+ killpid($verbose, $pid);
+ }
+ unlink($pidfile) if(-f $pidfile);
+ }
+ }
+
+ # remove the test server commands file after each test
+ unlink($FTPDCMD);
+
+ # run the postcheck command
+ my @postcheck= getpart("client", "postcheck");
+ if(@postcheck) {
+ $cmd = $postcheck[0];
+ chomp $cmd;
+ subVariables \$cmd;
+ if($cmd) {
+ logmsg "postcheck $cmd\n" if($verbose);
+ my $rc = runclient("$cmd");
+ # Must run the postcheck command in torture mode in order
+ # to clean up, but the result can't be relied upon.
+ if($rc != 0 && !$torture) {
+ logmsg " postcheck FAILED\n";
+ # timestamp test result verification end
+ $timevrfyend{$testnum} = Time::HiRes::time() if($timestats);
+ return 1;
+ }
+ }
+ }
+
+ # restore environment variables that were modified
+ if(%oldenv) {
+ foreach my $var (keys %oldenv) {
+ if($oldenv{$var} eq 'notset') {
+ delete $ENV{$var} if($ENV{$var});
+ }
+ else {
+ $ENV{$var} = "$oldenv{$var}";
+ }
+ }
+ }
+
+ # Skip all the verification on torture tests
+ if ($torture) {
+ if(!$cmdres && !$keepoutfiles) {
+ cleardir($LOGDIR);
+ }
+ # timestamp test result verification end
+ $timevrfyend{$testnum} = Time::HiRes::time() if($timestats);
+ return $cmdres;
+ }
+
+ my @err = getpart("verify", "errorcode");
+ my $errorcode = $err[0] || "0";
+ my $ok="";
+ my $res;
+ if (@validstdout) {
+ # verify redirected stdout
+ my @actual = loadarray($STDOUT);
+
+ # variable-replace in the stdout we have from the test case file
+ @validstdout = fixarray(@validstdout);
+
+ # get all attributes
+ my %hash = getpartattr("verify", "stdout");
+
+ # get the mode attribute
+ my $filemode=$hash{'mode'};
+ if($filemode && ($filemode eq "text") && $has_textaware) {
+ # text mode when running on windows: fix line endings
+ map s/\r\n/\n/g, @actual;
+ }
+
+ if($hash{'nonewline'}) {
+ # Yes, we must cut off the final newline from the final line
+ # of the protocol data
+ chomp($validstdout[$#validstdout]);
+ }
+
+ $res = compare("stdout", \@actual, \@validstdout);
+ if($res) {
+ # timestamp test result verification end
+ $timevrfyend{$testnum} = Time::HiRes::time() if($timestats);
+ return 1;
+ }
+ $ok .= "s";
+ }
+ else {
+ $ok .= "-"; # stdout not checked
+ }
+
+ my %replyattr = getpartattr("reply", "data");
+ if(!$replyattr{'nocheck'} && (@reply || $replyattr{'sendzero'})) {
+ # verify the received data
+ my @out = loadarray($CURLOUT);
+ my %hash = getpartattr("reply", "data");
+ # get the mode attribute
+ my $filemode=$hash{'mode'};
+ if($filemode && ($filemode eq "text") && $has_textaware) {
+ # text mode when running on windows: fix line endings
+ map s/\r\n/\n/g, @out;
+ }
+
+ $res = compare("data", \@out, \@reply);
+ if ($res) {
+ # timestamp test result verification end
+ $timevrfyend{$testnum} = Time::HiRes::time() if($timestats);
+ return 1;
+ }
+ $ok .= "d";
+ }
+ else {
+ $ok .= "-"; # data not checked
+ }
+
+ if(@upload) {
+ # verify uploaded data
+ my @out = loadarray("$LOGDIR/upload.$testnum");
+ $res = compare("upload", \@out, \@upload);
+ if ($res) {
+ # timestamp test result verification end
+ $timevrfyend{$testnum} = Time::HiRes::time() if($timestats);
+ return 1;
+ }
+ $ok .= "u";
+ }
+ else {
+ $ok .= "-"; # upload not checked
+ }
+
+ if(@protocol) {
+ # Verify the sent request
+ my @out = loadarray($SERVERIN);
+
+ # what to cut off from the live protocol sent by curl
+ my @strip = getpart("verify", "strip");
+
+ my @protstrip=@protocol;
+
+ # check if there's any attributes on the verify/protocol section
+ my %hash = getpartattr("verify", "protocol");
+
+ if($hash{'nonewline'}) {
+ # Yes, we must cut off the final newline from the final line
+ # of the protocol data
+ chomp($protstrip[$#protstrip]);
+ }
+
+ for(@strip) {
+ # strip off all lines that match the patterns from both arrays
+ chomp $_;
+ @out = striparray( $_, \@out);
+ @protstrip= striparray( $_, \@protstrip);
+ }
+
+ # what parts to cut off from the protocol
+ my @strippart = getpart("verify", "strippart");
+ my $strip;
+ for $strip (@strippart) {
+ chomp $strip;
+ for(@out) {
+ eval $strip;
+ }
+ }
+
+ $res = compare("protocol", \@out, \@protstrip);
+ if($res) {
+ # timestamp test result verification end
+ $timevrfyend{$testnum} = Time::HiRes::time() if($timestats);
+ return 1;
+ }
+
+ $ok .= "p";
+
+ }
+ else {
+ $ok .= "-"; # protocol not checked
+ }
+
+ my @outfile=getpart("verify", "file");
+ if(@outfile) {
+ # we're supposed to verify a dynamically generated file!
+ my %hash = getpartattr("verify", "file");
+
+ my $filename=$hash{'name'};
+ if(!$filename) {
+ logmsg "ERROR: section verify=>file has no name attribute\n";
+ stopservers($verbose);
+ # timestamp test result verification end
+ $timevrfyend{$testnum} = Time::HiRes::time() if($timestats);
+ return -1;
+ }
+ my @generated=loadarray($filename);
+
+ # what parts to cut off from the file
+ my @stripfile = getpart("verify", "stripfile");
+
+ my $filemode=$hash{'mode'};
+ if($filemode && ($filemode eq "text") && $has_textaware) {
+ # text mode when running on windows means adding an extra
+ # strip expression
+ push @stripfile, "s/\r\n/\n/";
+ }
+
+ my $strip;
+ for $strip (@stripfile) {
+ chomp $strip;
+ for(@generated) {
+ eval $strip;
+ }
+ }
+
+ @outfile = fixarray(@outfile);
+
+ $res = compare("output", \@generated, \@outfile);
+ if($res) {
+ # timestamp test result verification end
+ $timevrfyend{$testnum} = Time::HiRes::time() if($timestats);
+ return 1;
+ }
+
+ $ok .= "o";
+ }
+ else {
+ $ok .= "-"; # output not checked
+ }
+
+ # accept multiple comma-separated error codes
+ my @splerr = split(/ *, */, $errorcode);
+ my $errok;
+ foreach my $e (@splerr) {
+ if($e == $cmdres) {
+ # a fine error code
+ $errok = 1;
+ last;
+ }
+ }
+
+ if($errok) {
+ $ok .= "e";
+ }
+ else {
+ if(!$short) {
+ printf("\n%s returned $cmdres, %d was expected\n",
+ (!$tool)?"curl":$tool, $errorcode);
+ }
+ logmsg " exit FAILED\n";
+ # timestamp test result verification end
+ $timevrfyend{$testnum} = Time::HiRes::time() if($timestats);
+ return 1;
+ }
+
+ if($curl_debug) {
+ if(! -f $memdump) {
+ logmsg "\n** ALERT! memory debugging with no output file?\n";
+ }
+ else {
+ my @memdata=`$memanalyze $memdump`;
+ my $leak=0;
+ for(@memdata) {
+ if($_ ne "") {
+ # well it could be other memory problems as well, but
+ # we call it leak for short here
+ $leak=1;
+ }
+ }
+ if($leak) {
+ logmsg "\n** MEMORY FAILURE\n";
+ logmsg @memdata;
+ # timestamp test result verification end
+ $timevrfyend{$testnum} = Time::HiRes::time() if($timestats);
+ return 1;
+ }
+ else {
+ $ok .= "m";
+ }
+ }
+ }
+ else {
+ $ok .= "-"; # memory not checked
+ }
+
+ if($valgrind) {
+ if($usevalgrind) {
+ unless(opendir(DIR, "$LOGDIR")) {
+ logmsg "ERROR: unable to read $LOGDIR\n";
+ # timestamp test result verification end
+ $timevrfyend{$testnum} = Time::HiRes::time() if($timestats);
+ return 1;
+ }
+ my @files = readdir(DIR);
+ closedir(DIR);
+ my $vgfile;
+ foreach my $file (@files) {
+ if($file =~ /^valgrind$testnum(\..*|)$/) {
+ $vgfile = $file;
+ last;
+ }
+ }
+ if(!$vgfile) {
+ logmsg "ERROR: valgrind log file missing for test $testnum\n";
+ # timestamp test result verification end
+ $timevrfyend{$testnum} = Time::HiRes::time() if($timestats);
+ return 1;
+ }
+ my @e = valgrindparse($srcdir, $feature{'SSL'}, "$LOGDIR/$vgfile");
+ if(@e && $e[0]) {
+ logmsg " valgrind ERROR ";
+ logmsg @e;
+ # timestamp test result verification end
+ $timevrfyend{$testnum} = Time::HiRes::time() if($timestats);
+ return 1;
+ }
+ $ok .= "v";
+ }
+ else {
+ if(!$short) {
+ logmsg " valgrind SKIPPED\n";
+ }
+ $ok .= "-"; # skipped
+ }
+ }
+ else {
+ $ok .= "-"; # valgrind not checked
+ }
+
+ logmsg "$ok " if(!$short);
+
+ my $sofar= time()-$start;
+ my $esttotal = $sofar/$count * $total;
+ my $estleft = $esttotal - $sofar;
+ my $left=sprintf("remaining: %02d:%02d",
+ $estleft/60,
+ $estleft%60);
+ printf "OK (%-3d out of %-3d, %s)\n", $count, $total, $left;
+
+ # the test succeeded, remove all log files
+ if(!$keepoutfiles) {
+ cleardir($LOGDIR);
+ }
+
+ # timestamp test result verification end
+ $timevrfyend{$testnum} = Time::HiRes::time() if($timestats);
+
+ return 0;
+}
+
+#######################################################################
+# Stop all running test servers
+sub stopservers {
+ my $verbose = $_[0];
+ #
+ # kill sockfilter processes for all pingpong servers
+ #
+ killallsockfilters($verbose);
+ #
+ # kill all server pids from %run hash clearing them
+ #
+ my $pidlist;
+ foreach my $server (keys %run) {
+ if($run{$server}) {
+ if($verbose) {
+ my $prev = 0;
+ my $pids = $run{$server};
+ foreach my $pid (split(' ', $pids)) {
+ if($pid != $prev) {
+ logmsg sprintf("* kill pid for %s => %d\n",
+ $server, $pid);
+ $prev = $pid;
+ }
+ }
+ }
+ $pidlist .= "$run{$server} ";
+ $run{$server} = 0;
+ }
+ $runcert{$server} = 0 if($runcert{$server});
+ }
+ killpid($verbose, $pidlist);
+ #
+ # cleanup all server pid files
+ #
+ foreach my $server (keys %serverpidfile) {
+ my $pidfile = $serverpidfile{$server};
+ my $pid = processexists($pidfile);
+ if($pid > 0) {
+ logmsg "Warning: $server server unexpectedly alive\n";
+ killpid($verbose, $pid);
+ }
+ unlink($pidfile) if(-f $pidfile);
+ }
+}
+
+#######################################################################
+# startservers() starts all the named servers
+#
+# Returns: string with error reason or blank for success
+
+sub startservers {
+ my @what = @_;
+ my ($pid, $pid2);
+ for(@what) {
+ my (@whatlist) = split(/\s+/,$_);
+ my $what = lc($whatlist[0]);
+ $what =~ s/[^a-z0-9-]//g;
+
+ my $certfile;
+ if($what =~ /^(ftp|http|imap|pop3|smtp)s(.*)$/) {
+ $certfile = ($whatlist[1]) ? $whatlist[1] : 'stunnel.pem';
+ }
+
+ if(($what eq "pop3") ||
+ ($what eq "ftp") ||
+ ($what eq "imap") ||
+ ($what eq "smtp")) {
+ if(!$run{$what}) {
+ ($pid, $pid2) = runpingpongserver($what, "", $verbose);
+ if($pid <= 0) {
+ return "failed starting ". uc($what) ." server";
+ }
+ printf ("* pid $what => %d %d\n", $pid, $pid2) if($verbose);
+ $run{$what}="$pid $pid2";
+ }
+ }
+ elsif($what eq "ftp2") {
+ if(!$run{'ftp2'}) {
+ ($pid, $pid2) = runpingpongserver("ftp", "2", $verbose);
+ if($pid <= 0) {
+ return "failed starting FTP2 server";
+ }
+ printf ("* pid ftp2 => %d %d\n", $pid, $pid2) if($verbose);
+ $run{'ftp2'}="$pid $pid2";
+ }
+ }
+ elsif($what eq "ftp-ipv6") {
+ if(!$run{'ftp-ipv6'}) {
+ ($pid, $pid2) = runpingpongserver("ftp", "", $verbose, "ipv6");
+ if($pid <= 0) {
+ return "failed starting FTP-IPv6 server";
+ }
+ logmsg sprintf("* pid ftp-ipv6 => %d %d\n", $pid,
+ $pid2) if($verbose);
+ $run{'ftp-ipv6'}="$pid $pid2";
+ }
+ }
+ elsif($what eq "gopher") {
+ if(!$run{'gopher'}) {
+ ($pid, $pid2) = runhttpserver("gopher", $verbose, 0,
+ $GOPHERPORT);
+ if($pid <= 0) {
+ return "failed starting GOPHER server";
+ }
+ printf ("* pid gopher => %d %d\n", $pid, $pid2) if($verbose);
+ $run{'gopher'}="$pid $pid2";
+ }
+ }
+ elsif($what eq "gopher-ipv6") {
+ if(!$run{'gopher-ipv6'}) {
+ ($pid, $pid2) = runhttpserver("gopher", $verbose, "ipv6",
+ $GOPHER6PORT);
+ if($pid <= 0) {
+ return "failed starting GOPHER-IPv6 server";
+ }
+ logmsg sprintf("* pid gopher-ipv6 => %d %d\n", $pid,
+ $pid2) if($verbose);
+ $run{'gopher-ipv6'}="$pid $pid2";
+ }
+ }
+ elsif($what eq "http") {
+ if(!$run{'http'}) {
+ ($pid, $pid2) = runhttpserver("http", $verbose, 0,
+ $HTTPPORT);
+ if($pid <= 0) {
+ return "failed starting HTTP server";
+ }
+ printf ("* pid http => %d %d\n", $pid, $pid2) if($verbose);
+ $run{'http'}="$pid $pid2";
+ }
+ }
+ elsif($what eq "http-ipv6") {
+ if(!$run{'http-ipv6'}) {
+ ($pid, $pid2) = runhttpserver("http", $verbose, "IPv6",
+ $HTTP6PORT);
+ if($pid <= 0) {
+ return "failed starting HTTP-IPv6 server";
+ }
+ logmsg sprintf("* pid http-ipv6 => %d %d\n", $pid, $pid2)
+ if($verbose);
+ $run{'http-ipv6'}="$pid $pid2";
+ }
+ }
+ elsif($what eq "rtsp") {
+ if(!$run{'rtsp'}) {
+ ($pid, $pid2) = runrtspserver($verbose);
+ if($pid <= 0) {
+ return "failed starting RTSP server";
+ }
+ printf ("* pid rtsp => %d %d\n", $pid, $pid2) if($verbose);
+ $run{'rtsp'}="$pid $pid2";
+ }
+ }
+ elsif($what eq "rtsp-ipv6") {
+ if(!$run{'rtsp-ipv6'}) {
+ ($pid, $pid2) = runrtspserver($verbose, "IPv6");
+ if($pid <= 0) {
+ return "failed starting RTSP-IPv6 server";
+ }
+ logmsg sprintf("* pid rtsp-ipv6 => %d %d\n", $pid, $pid2)
+ if($verbose);
+ $run{'rtsp-ipv6'}="$pid $pid2";
+ }
+ }
+
+ elsif($what eq "ftps") {
+ if(!$stunnel) {
+ # we can't run ftps tests without stunnel
+ return "no stunnel";
+ }
+ if(!$ssl_version) {
+ # we can't run ftps tests if libcurl is SSL-less
+ return "curl lacks SSL support";
+ }
+ if($runcert{'ftps'} && ($runcert{'ftps'} ne $certfile)) {
+ # stop server when running and using a different cert
+ stopserver('ftps');
+ }
+ if(!$run{'ftp'}) {
+ ($pid, $pid2) = runpingpongserver("ftp", "", $verbose);
+ if($pid <= 0) {
+ return "failed starting FTP server";
+ }
+ printf ("* pid ftp => %d %d\n", $pid, $pid2) if($verbose);
+ $run{'ftp'}="$pid $pid2";
+ }
+ if(!$run{'ftps'}) {
+ ($pid, $pid2) = runftpsserver($verbose, "", $certfile);
+ if($pid <= 0) {
+ return "failed starting FTPS server (stunnel)";
+ }
+ logmsg sprintf("* pid ftps => %d %d\n", $pid, $pid2)
+ if($verbose);
+ $run{'ftps'}="$pid $pid2";
+ }
+ }
+ elsif($what eq "file") {
+ # we support it but have no server!
+ }
+ elsif($what eq "https") {
+ if(!$stunnel) {
+ # we can't run ftps tests without stunnel
+ return "no stunnel";
+ }
+ if(!$ssl_version) {
+ # we can't run ftps tests if libcurl is SSL-less
+ return "curl lacks SSL support";
+ }
+ if($runcert{'https'} && ($runcert{'https'} ne $certfile)) {
+ # stop server when running and using a different cert
+ stopserver('https');
+ }
+ if(!$run{'http'}) {
+ ($pid, $pid2) = runhttpserver("http", $verbose, 0,
+ $HTTPPORT);
+ if($pid <= 0) {
+ return "failed starting HTTP server";
+ }
+ printf ("* pid http => %d %d\n", $pid, $pid2) if($verbose);
+ $run{'http'}="$pid $pid2";
+ }
+ if(!$run{'https'}) {
+ ($pid, $pid2) = runhttpsserver($verbose, "", $certfile);
+ if($pid <= 0) {
+ return "failed starting HTTPS server (stunnel)";
+ }
+ logmsg sprintf("* pid https => %d %d\n", $pid, $pid2)
+ if($verbose);
+ $run{'https'}="$pid $pid2";
+ }
+ }
+ elsif($what eq "tftp") {
+ if(!$run{'tftp'}) {
+ ($pid, $pid2) = runtftpserver("", $verbose);
+ if($pid <= 0) {
+ return "failed starting TFTP server";
+ }
+ printf ("* pid tftp => %d %d\n", $pid, $pid2) if($verbose);
+ $run{'tftp'}="$pid $pid2";
+ }
+ }
+ elsif($what eq "tftp-ipv6") {
+ if(!$run{'tftp-ipv6'}) {
+ ($pid, $pid2) = runtftpserver("", $verbose, "IPv6");
+ if($pid <= 0) {
+ return "failed starting TFTP-IPv6 server";
+ }
+ printf("* pid tftp-ipv6 => %d %d\n", $pid, $pid2) if($verbose);
+ $run{'tftp-ipv6'}="$pid $pid2";
+ }
+ }
+ elsif($what eq "sftp" || $what eq "scp" || $what eq "socks4" || $what eq "socks5" ) {
+ if(!$run{'ssh'}) {
+ ($pid, $pid2) = runsshserver("", $verbose);
+ if($pid <= 0) {
+ return "failed starting SSH server";
+ }
+ printf ("* pid ssh => %d %d\n", $pid, $pid2) if($verbose);
+ $run{'ssh'}="$pid $pid2";
+ }
+ if($what eq "socks4" || $what eq "socks5") {
+ if(!$run{'socks'}) {
+ ($pid, $pid2) = runsocksserver("", $verbose);
+ if($pid <= 0) {
+ return "failed starting socks server";
+ }
+ printf ("* pid socks => %d %d\n", $pid, $pid2) if($verbose);
+ $run{'socks'}="$pid $pid2";
+ }
+ }
+ if($what eq "socks5") {
+ if(!$sshdid) {
+ # Not an OpenSSH or SunSSH ssh daemon
+ logmsg "Not OpenSSH or SunSSH; socks5 tests need at least OpenSSH 3.7\n";
+ return "failed starting socks5 server";
+ }
+ elsif(($sshdid =~ /OpenSSH/) && ($sshdvernum < 370)) {
+ # Need OpenSSH 3.7 for socks5 - http://www.openssh.com/txt/release-3.7
+ logmsg "$sshdverstr insufficient; socks5 tests need at least OpenSSH 3.7\n";
+ return "failed starting socks5 server";
+ }
+ elsif(($sshdid =~ /SunSSH/) && ($sshdvernum < 100)) {
+ # Need SunSSH 1.0 for socks5
+ logmsg "$sshdverstr insufficient; socks5 tests need at least SunSSH 1.0\n";
+ return "failed starting socks5 server";
+ }
+ }
+ }
+ elsif($what eq "none") {
+ logmsg "* starts no server\n" if ($verbose);
+ }
+ else {
+ warn "we don't support a server for $what";
+ return "no server for $what";
+ }
+ }
+ return 0;
+}
+
+##############################################################################
+# This function makes sure the right set of server is running for the
+# specified test case. This is a useful design when we run single tests as not
+# all servers need to run then!
+#
+# Returns: a string, blank if everything is fine or a reason why it failed
+#
+
+sub serverfortest {
+ my ($testnum)=@_;
+
+ my @what = getpart("client", "server");
+
+ if(!$what[0]) {
+ warn "Test case $testnum has no server(s) specified";
+ return "no server specified";
+ }
+
+ for (@what) {
+ my $proto = lc($_);
+ chomp $proto;
+ $proto =~ s/\s.*//g; # take first word
+ if (! grep /^$proto$/, @protocols) {
+ if (substr($proto,0,5) ne "socks") {
+ return "curl lacks $proto support";
+ }
+ }
+ }
+
+ return &startservers(@what);
+}
+
+#######################################################################
+# runtimestats displays test-suite run time statistics
+#
+sub runtimestats {
+ my $lasttest = $_[0];
+
+ return if(not $timestats);
+
+ logmsg "\nTest suite total running time breakdown per task...\n\n";
+
+ my @timesrvr;
+ my @timeprep;
+ my @timetool;
+ my @timelock;
+ my @timevrfy;
+ my @timetest;
+ my $timesrvrtot = 0.0;
+ my $timepreptot = 0.0;
+ my $timetooltot = 0.0;
+ my $timelocktot = 0.0;
+ my $timevrfytot = 0.0;
+ my $timetesttot = 0.0;
+ my $counter;
+
+ for my $testnum (1 .. $lasttest) {
+ if($timesrvrini{$testnum}) {
+ $timesrvrtot += $timesrvrend{$testnum} - $timesrvrini{$testnum};
+ $timepreptot +=
+ (($timetoolini{$testnum} - $timeprepini{$testnum}) -
+ ($timesrvrend{$testnum} - $timesrvrini{$testnum}));
+ $timetooltot += $timetoolend{$testnum} - $timetoolini{$testnum};
+ $timelocktot += $timesrvrlog{$testnum} - $timetoolend{$testnum};
+ $timevrfytot += $timevrfyend{$testnum} - $timesrvrlog{$testnum};
+ $timetesttot += $timevrfyend{$testnum} - $timeprepini{$testnum};
+ push @timesrvr, sprintf("%06.3f %04d",
+ $timesrvrend{$testnum} - $timesrvrini{$testnum}, $testnum);
+ push @timeprep, sprintf("%06.3f %04d",
+ ($timetoolini{$testnum} - $timeprepini{$testnum}) -
+ ($timesrvrend{$testnum} - $timesrvrini{$testnum}), $testnum);
+ push @timetool, sprintf("%06.3f %04d",
+ $timetoolend{$testnum} - $timetoolini{$testnum}, $testnum);
+ push @timelock, sprintf("%06.3f %04d",
+ $timesrvrlog{$testnum} - $timetoolend{$testnum}, $testnum);
+ push @timevrfy, sprintf("%06.3f %04d",
+ $timevrfyend{$testnum} - $timesrvrlog{$testnum}, $testnum);
+ push @timetest, sprintf("%06.3f %04d",
+ $timevrfyend{$testnum} - $timeprepini{$testnum}, $testnum);
+ }
+ }
+
+ {
+ no warnings 'numeric';
+ @timesrvr = sort { $b <=> $a } @timesrvr;
+ @timeprep = sort { $b <=> $a } @timeprep;
+ @timetool = sort { $b <=> $a } @timetool;
+ @timelock = sort { $b <=> $a } @timelock;
+ @timevrfy = sort { $b <=> $a } @timevrfy;
+ @timetest = sort { $b <=> $a } @timetest;
+ }
+
+ logmsg "Spent ". sprintf("%08.3f ", $timesrvrtot) .
+ "seconds starting and verifying test harness servers.\n";
+ logmsg "Spent ". sprintf("%08.3f ", $timepreptot) .
+ "seconds reading definitions and doing test preparations.\n";
+ logmsg "Spent ". sprintf("%08.3f ", $timetooltot) .
+ "seconds actually running test tools.\n";
+ logmsg "Spent ". sprintf("%08.3f ", $timelocktot) .
+ "seconds awaiting server logs lock removal.\n";
+ logmsg "Spent ". sprintf("%08.3f ", $timevrfytot) .
+ "seconds verifying test results.\n";
+ logmsg "Spent ". sprintf("%08.3f ", $timetesttot) .
+ "seconds doing all of the above.\n";
+
+ $counter = 25;
+ logmsg "\nTest server starting and verification time per test ".
+ sprintf("(%s)...\n\n", (not $fullstats)?"top $counter":"full");
+ logmsg "-time- test\n";
+ logmsg "------ ----\n";
+ foreach my $txt (@timesrvr) {
+ last if((not $fullstats) && (not $counter--));
+ logmsg "$txt\n";
+ }
+
+ $counter = 10;
+ logmsg "\nTest definition reading and preparation time per test ".
+ sprintf("(%s)...\n\n", (not $fullstats)?"top $counter":"full");
+ logmsg "-time- test\n";
+ logmsg "------ ----\n";
+ foreach my $txt (@timeprep) {
+ last if((not $fullstats) && (not $counter--));
+ logmsg "$txt\n";
+ }
+
+ $counter = 25;
+ logmsg "\nTest tool execution time per test ".
+ sprintf("(%s)...\n\n", (not $fullstats)?"top $counter":"full");
+ logmsg "-time- test\n";
+ logmsg "------ ----\n";
+ foreach my $txt (@timetool) {
+ last if((not $fullstats) && (not $counter--));
+ logmsg "$txt\n";
+ }
+
+ $counter = 15;
+ logmsg "\nTest server logs lock removal time per test ".
+ sprintf("(%s)...\n\n", (not $fullstats)?"top $counter":"full");
+ logmsg "-time- test\n";
+ logmsg "------ ----\n";
+ foreach my $txt (@timelock) {
+ last if((not $fullstats) && (not $counter--));
+ logmsg "$txt\n";
+ }
+
+ $counter = 10;
+ logmsg "\nTest results verification time per test ".
+ sprintf("(%s)...\n\n", (not $fullstats)?"top $counter":"full");
+ logmsg "-time- test\n";
+ logmsg "------ ----\n";
+ foreach my $txt (@timevrfy) {
+ last if((not $fullstats) && (not $counter--));
+ logmsg "$txt\n";
+ }
+
+ $counter = 50;
+ logmsg "\nTotal time per test ".
+ sprintf("(%s)...\n\n", (not $fullstats)?"top $counter":"full");
+ logmsg "-time- test\n";
+ logmsg "------ ----\n";
+ foreach my $txt (@timetest) {
+ last if((not $fullstats) && (not $counter--));
+ logmsg "$txt\n";
+ }
+
+ logmsg "\n";
+}
+
+#######################################################################
+# Check options to this test program
+#
+
+my $number=0;
+my $fromnum=-1;
+my @testthis;
+my %disabled;
+while(@ARGV) {
+ if ($ARGV[0] eq "-v") {
+ # verbose output
+ $verbose=1;
+ }
+ elsif($ARGV[0] =~ /^-b(.*)/) {
+ my $portno=$1;
+ if($portno =~ s/(\d+)$//) {
+ $base = int $1;
+ }
+ }
+ elsif ($ARGV[0] eq "-c") {
+ # use this path to curl instead of default
+ $DBGCURL=$CURL=$ARGV[1];
+ shift @ARGV;
+ }
+ elsif ($ARGV[0] eq "-d") {
+ # have the servers display protocol output
+ $debugprotocol=1;
+ }
+ elsif ($ARGV[0] eq "-f") {
+ # run fork-servers, which makes the server fork for all new
+ # connections This is NOT what you wanna do without knowing exactly
+ # why and for what
+ $forkserver=1;
+ }
+ elsif ($ARGV[0] eq "-g") {
+ # run this test with gdb
+ $gdbthis=1;
+ }
+ elsif($ARGV[0] eq "-s") {
+ # short output
+ $short=1;
+ }
+ elsif($ARGV[0] eq "-n") {
+ # no valgrind
+ undef $valgrind;
+ }
+ elsif($ARGV[0] =~ /^-t(.*)/) {
+ # torture
+ $torture=1;
+ my $xtra = $1;
+
+ if($xtra =~ s/(\d+)$//) {
+ $tortalloc = $1;
+ }
+ # we undef valgrind to make this fly in comparison
+ undef $valgrind;
+ }
+ elsif($ARGV[0] eq "-a") {
+ # continue anyway, even if a test fail
+ $anyway=1;
+ }
+ elsif($ARGV[0] eq "-p") {
+ $postmortem=1;
+ }
+ elsif($ARGV[0] eq "-l") {
+ # lists the test case names only
+ $listonly=1;
+ }
+ elsif($ARGV[0] eq "-k") {
+ # keep stdout and stderr files after tests
+ $keepoutfiles=1;
+ }
+ elsif($ARGV[0] eq "-r") {
+ # run time statistics needs Time::HiRes
+ if($Time::HiRes::VERSION) {
+ keys(%timeprepini) = 1000;
+ keys(%timesrvrini) = 1000;
+ keys(%timesrvrend) = 1000;
+ keys(%timetoolini) = 1000;
+ keys(%timetoolend) = 1000;
+ keys(%timesrvrlog) = 1000;
+ keys(%timevrfyend) = 1000;
+ $timestats=1;
+ $fullstats=0;
+ }
+ }
+ elsif($ARGV[0] eq "-rf") {
+ # run time statistics needs Time::HiRes
+ if($Time::HiRes::VERSION) {
+ keys(%timeprepini) = 1000;
+ keys(%timesrvrini) = 1000;
+ keys(%timesrvrend) = 1000;
+ keys(%timetoolini) = 1000;
+ keys(%timetoolend) = 1000;
+ keys(%timesrvrlog) = 1000;
+ keys(%timevrfyend) = 1000;
+ $timestats=1;
+ $fullstats=1;
+ }
+ }
+ elsif(($ARGV[0] eq "-h") || ($ARGV[0] eq "--help")) {
+ # show help text
+ print <<EOHELP
+Usage: runtests.pl [options] [test selection(s)]
+ -a continue even if a test fails
+ -bN use base port number N for test servers (default $base)
+ -c path use this curl executable
+ -d display server debug info
+ -g run the test case with gdb
+ -h this help text
+ -k keep stdout and stderr files present after tests
+ -l list all test case names/descriptions
+ -n no valgrind
+ -p print log file contents when a test fails
+ -r run time statistics
+ -rf full run time statistics
+ -s short output
+ -t[N] torture (simulate memory alloc failures); N means fail Nth alloc
+ -v verbose output
+ [num] like "5 6 9" or " 5 to 22 " to run those tests only
+ [!num] like "!5 !6 !9" to disable those tests
+ [keyword] like "IPv6" to select only tests containing the key word
+ [!keyword] like "!cookies" to disable any tests containing the key word
+EOHELP
+ ;
+ exit;
+ }
+ elsif($ARGV[0] =~ /^(\d+)/) {
+ $number = $1;
+ if($fromnum >= 0) {
+ for($fromnum .. $number) {
+ push @testthis, $_;
+ }
+ $fromnum = -1;
+ }
+ else {
+ push @testthis, $1;
+ }
+ }
+ elsif($ARGV[0] =~ /^to$/i) {
+ $fromnum = $number+1;
+ }
+ elsif($ARGV[0] =~ /^!(\d+)/) {
+ $fromnum = -1;
+ $disabled{$1}=$1;
+ }
+ elsif($ARGV[0] =~ /^!(.+)/) {
+ $disabled_keywords{$1}=$1;
+ }
+ elsif($ARGV[0] =~ /^([-[{a-zA-Z].*)/) {
+ $enabled_keywords{$1}=$1;
+ }
+ else {
+ print "Unknown option: $ARGV[0]\n";
+ exit;
+ }
+ shift @ARGV;
+}
+
+if(@testthis && ($testthis[0] ne "")) {
+ $TESTCASES=join(" ", @testthis);
+}
+
+if($valgrind) {
+ # we have found valgrind on the host, use it
+
+ # verify that we can invoke it fine
+ my $code = runclient("valgrind >/dev/null 2>&1");
+
+ if(($code>>8) != 1) {
+ #logmsg "Valgrind failure, disable it\n";
+ undef $valgrind;
+ } else {
+
+ # since valgrind 2.1.x, '--tool' option is mandatory
+ # use it, if it is supported by the version installed on the system
+ runclient("valgrind --help 2>&1 | grep -- --tool > /dev/null 2>&1");
+ if (($? >> 8)==0) {
+ $valgrind_tool="--tool=memcheck";
+ }
+ open(C, "<$CURL");
+ my $l = <C>;
+ if($l =~ /^\#\!/) {
+ # A shell script. This is typically when built with libtool,
+ $valgrind="../libtool --mode=execute $valgrind";
+ }
+ close(C);
+
+ # valgrind 3 renamed the --logfile option to --log-file!!!
+ my $ver=join(' ', runclientoutput("valgrind --version"));
+ # cut off all but digits and dots
+ $ver =~ s/[^0-9.]//g;
+
+ if($ver =~ /^(\d+)/) {
+ $ver = $1;
+ if($ver >= 3) {
+ $valgrind_logfile="--log-file";
+ }
+ }
+ }
+}
+
+if ($gdbthis) {
+ # open the executable curl and read the first 4 bytes of it
+ open(CHECK, "<$CURL");
+ my $c;
+ sysread CHECK, $c, 4;
+ close(CHECK);
+ if($c eq "#! /") {
+ # A shell script. This is typically when built with libtool,
+ $libtool = 1;
+ $gdb = "libtool --mode=execute gdb";
+ }
+}
+
+$HTTPPORT = $base++; # HTTP server port
+$HTTPSPORT = $base++; # HTTPS server port
+$FTPPORT = $base++; # FTP server port
+$FTPSPORT = $base++; # FTPS server port
+$HTTP6PORT = $base++; # HTTP IPv6 server port (different IP protocol
+ # but we follow the same port scheme anyway)
+$FTP2PORT = $base++; # FTP server 2 port
+$FTP6PORT = $base++; # FTP IPv6 port
+$TFTPPORT = $base++; # TFTP (UDP) port
+$TFTP6PORT = $base++; # TFTP IPv6 (UDP) port
+$SSHPORT = $base++; # SSH (SCP/SFTP) port
+$SOCKSPORT = $base++; # SOCKS port
+$POP3PORT = $base++;
+$POP36PORT = $base++;
+$IMAPPORT = $base++;
+$IMAP6PORT = $base++;
+$SMTPPORT = $base++;
+$SMTP6PORT = $base++;
+$RTSPPORT = $base++;
+$RTSP6PORT = $base++;
+$GOPHERPORT =$base++;
+$GOPHER6PORT=$base++;
+
+#######################################################################
+# clear and create logging directory:
+#
+
+cleardir($LOGDIR);
+mkdir($LOGDIR, 0777);
+
+#######################################################################
+# initialize some variables
+#
+
+get_disttests();
+init_serverpidfile_hash();
+
+#######################################################################
+# Output curl version and host info being tested
+#
+
+if(!$listonly) {
+ checksystem();
+}
+
+#######################################################################
+# If 'all' tests are requested, find out all test numbers
+#
+
+if ( $TESTCASES eq "all") {
+ # Get all commands and find out their test numbers
+ opendir(DIR, $TESTDIR) || die "can't opendir $TESTDIR: $!";
+ my @cmds = grep { /^test([0-9]+)$/ && -f "$TESTDIR/$_" } readdir(DIR);
+ closedir(DIR);
+
+ open(D, "<$TESTDIR/DISABLED");
+ while(<D>) {
+ if(/^ *\#/) {
+ # allow comments
+ next;
+ }
+ if($_ =~ /(\d+)/) {
+ $disabled{$1}=$1; # disable this test number
+ }
+ }
+ close(D);
+
+ $TESTCASES=""; # start with no test cases
+
+ # cut off everything but the digits
+ for(@cmds) {
+ $_ =~ s/[a-z\/\.]*//g;
+ }
+ # sort the numbers from low to high
+ foreach my $n (sort { $a <=> $b } @cmds) {
+ if($disabled{$n}) {
+ # skip disabled test cases
+ my $why = "configured as DISABLED";
+ $skipped++;
+ $skipped{$why}++;
+ $teststat[$n]=$why; # store reason for this test case
+ next;
+ }
+ $TESTCASES .= " $n";
+ }
+}
+
+#######################################################################
+# Start the command line log
+#
+open(CMDLOG, ">$CURLLOG") ||
+ logmsg "can't log command lines to $CURLLOG\n";
+
+#######################################################################
+
+# Display the contents of the given file. Line endings are canonicalized
+# and excessively long files are elided
+sub displaylogcontent {
+ my ($file)=@_;
+ if(open(SINGLE, "<$file")) {
+ my $linecount = 0;
+ my $truncate;
+ my @tail;
+ while(my $string = <SINGLE>) {
+ $string =~ s/\r\n/\n/g;
+ $string =~ s/[\r\f\032]/\n/g;
+ $string .= "\n" unless ($string =~ /\n$/);
+ $string =~ tr/\n//;
+ for my $line (split("\n", $string)) {
+ $line =~ s/\s*\!$//;
+ if ($truncate) {
+ push @tail, " $line\n";
+ } else {
+ logmsg " $line\n";
+ }
+ $linecount++;
+ $truncate = $linecount > 1000;
+ }
+ }
+ if(@tail) {
+ my $tailshow = 200;
+ my $tailskip = 0;
+ my $tailtotal = scalar @tail;
+ if($tailtotal > $tailshow) {
+ $tailskip = $tailtotal - $tailshow;
+ logmsg "=== File too long: $tailskip lines omitted here\n";
+ }
+ for($tailskip .. $tailtotal-1) {
+ logmsg "$tail[$_]";
+ }
+ }
+ close(SINGLE);
+ }
+}
+
+sub displaylogs {
+ my ($testnum)=@_;
+ opendir(DIR, "$LOGDIR") ||
+ die "can't open dir: $!";
+ my @logs = readdir(DIR);
+ closedir(DIR);
+
+ logmsg "== Contents of files in the $LOGDIR/ dir after test $testnum\n";
+ foreach my $log (sort @logs) {
+ if($log =~ /\.(\.|)$/) {
+ next; # skip "." and ".."
+ }
+ if($log =~ /^\.nfs/) {
+ next; # skip ".nfs"
+ }
+ if(($log eq "memdump") || ($log eq "core")) {
+ next; # skip "memdump" and "core"
+ }
+ if((-d "$LOGDIR/$log") || (! -s "$LOGDIR/$log")) {
+ next; # skip directory and empty files
+ }
+ if(($log =~ /^stdout\d+/) && ($log !~ /^stdout$testnum/)) {
+ next; # skip stdoutNnn of other tests
+ }
+ if(($log =~ /^stderr\d+/) && ($log !~ /^stderr$testnum/)) {
+ next; # skip stderrNnn of other tests
+ }
+ if(($log =~ /^upload\d+/) && ($log !~ /^upload$testnum/)) {
+ next; # skip uploadNnn of other tests
+ }
+ if(($log =~ /^curl\d+\.out/) && ($log !~ /^curl$testnum\.out/)) {
+ next; # skip curlNnn.out of other tests
+ }
+ if(($log =~ /^test\d+\.txt/) && ($log !~ /^test$testnum\.txt/)) {
+ next; # skip testNnn.txt of other tests
+ }
+ if(($log =~ /^file\d+\.txt/) && ($log !~ /^file$testnum\.txt/)) {
+ next; # skip fileNnn.txt of other tests
+ }
+ if(($log =~ /^valgrind\d+/) && ($log !~ /^valgrind$testnum(\..*|)$/)) {
+ next; # skip valgrindNnn of other tests
+ }
+ logmsg "=== Start of file $log\n";
+ displaylogcontent("$LOGDIR/$log");
+ logmsg "=== End of file $log\n";
+ }
+}
+
+#######################################################################
+# The main test-loop
+#
+
+my $failed;
+my $testnum;
+my $ok=0;
+my $total=0;
+my $lasttest=0;
+my @at = split(" ", $TESTCASES);
+my $count=0;
+
+$start = time();
+
+foreach $testnum (@at) {
+
+ $lasttest = $testnum if($testnum > $lasttest);
+ $count++;
+
+ my $error = singletest($testnum, $count, scalar(@at));
+ if($error < 0) {
+ # not a test we can run
+ next;
+ }
+
+ $total++; # number of tests we've run
+
+ if($error>0) {
+ $failed.= "$testnum ";
+ if($postmortem) {
+ # display all files in log/ in a nice way
+ displaylogs($testnum);
+ }
+ if(!$anyway) {
+ # a test failed, abort
+ logmsg "\n - abort tests\n";
+ last;
+ }
+ }
+ elsif(!$error) {
+ $ok++; # successful test counter
+ }
+
+ # loop for next test
+}
+
+my $sofar = time() - $start;
+
+#######################################################################
+# Close command log
+#
+close(CMDLOG);
+
+# Tests done, stop the servers
+stopservers($verbose);
+
+my $all = $total + $skipped;
+
+runtimestats($lasttest);
+
+if($total) {
+ logmsg sprintf("TESTDONE: $ok tests out of $total reported OK: %d%%\n",
+ $ok/$total*100);
+
+ if($ok != $total) {
+ logmsg "TESTFAIL: These test cases failed: $failed\n";
+ }
+}
+else {
+ logmsg "TESTFAIL: No tests were performed\n";
+}
+
+if($all) {
+ logmsg "TESTDONE: $all tests were considered during ".
+ sprintf("%.0f", $sofar) ." seconds.\n";
+}
+
+if($skipped) {
+ my $s=0;
+ logmsg "TESTINFO: $skipped tests were skipped due to these restraints:\n";
+
+ for(keys %skipped) {
+ my $r = $_;
+ printf "TESTINFO: \"%s\" %d times (", $r, $skipped{$_};
+
+ # now show all test case numbers that had this reason for being
+ # skipped
+ my $c=0;
+ for(0 .. scalar @teststat) {
+ my $t = $_;
+ if($teststat[$_] && ($teststat[$_] eq $r)) {
+ logmsg ", " if($c);
+ logmsg $_;
+ $c++;
+ }
+ }
+ logmsg ")\n";
+ }
+}
+
+if($total && ($ok != $total)) {
+ exit 1;
+}
diff --git a/tests/secureserver.pl b/tests/secureserver.pl
new file mode 100755
index 0000000..064fa84
--- /dev/null
+++ b/tests/secureserver.pl
@@ -0,0 +1,298 @@
+#!/usr/bin/env perl
+#***************************************************************************
+# _ _ ____ _
+# Project ___| | | | _ \| |
+# / __| | | | |_) | |
+# | (__| |_| | _ <| |___
+# \___|\___/|_| \_\_____|
+#
+# Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+#
+# This software is licensed as described in the file COPYING, which
+# you should have received as part of this distribution. The terms
+# are also available at http://curl.haxx.se/docs/copyright.html.
+#
+# You may opt to use, copy, modify, merge, publish, distribute and/or sell
+# copies of the Software, and permit persons to whom the Software is
+# furnished to do so, under the terms of the COPYING file.
+#
+# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+# KIND, either express or implied.
+#
+#***************************************************************************
+
+# This is the HTTPS, FTPS, POP3S, IMAPS, SMTPS, server used for curl test
+# harness. Actually just a layer that runs stunnel properly using the
+# non-secure test harness servers.
+
+BEGIN {
+ @INC=(@INC, $ENV{'srcdir'}, '.');
+}
+
+use strict;
+use warnings;
+use Cwd;
+
+use serverhelp qw(
+ server_pidfilename
+ server_logfilename
+ );
+
+my $stunnel = "stunnel";
+
+my $verbose=0; # set to 1 for debugging
+
+my $accept_port = 8991; # just our default, weird enough
+my $target_port = 8999; # default test http-server port
+
+my $stuncert;
+
+my $ver_major;
+my $ver_minor;
+my $stunnel_version;
+my $socketopt;
+my $cmd;
+
+my $pidfile; # stunnel pid file
+my $logfile; # stunnel log file
+my $loglevel = 5; # stunnel log level
+my $ipvnum = 4; # default IP version of stunneled server
+my $idnum = 1; # dafault stunneled server instance number
+my $proto = 'https'; # default secure server protocol
+my $conffile; # stunnel configuration file
+my $certfile; # certificate chain PEM file
+
+#***************************************************************************
+# stunnel requires full path specification for several files.
+#
+my $path = getcwd();
+my $srcdir = $path;
+my $logdir = $path .'/log';
+
+#***************************************************************************
+# Signal handler to remove our stunnel 4.00 and newer configuration file.
+#
+sub exit_signal_handler {
+ my $signame = shift;
+ local $!; # preserve errno
+ local $?; # preserve exit status
+ unlink($conffile) if($conffile && (-f $conffile));
+ exit;
+}
+
+#***************************************************************************
+# Process command line options
+#
+while(@ARGV) {
+ if($ARGV[0] eq '--verbose') {
+ $verbose = 1;
+ }
+ elsif($ARGV[0] eq '--proto') {
+ if($ARGV[1]) {
+ $proto = $ARGV[1];
+ shift @ARGV;
+ }
+ }
+ elsif($ARGV[0] eq '--accept') {
+ if($ARGV[1]) {
+ if($ARGV[1] =~ /^(\d+)$/) {
+ $accept_port = $1;
+ shift @ARGV;
+ }
+ }
+ }
+ elsif($ARGV[0] eq '--connect') {
+ if($ARGV[1]) {
+ if($ARGV[1] =~ /^(\d+)$/) {
+ $target_port = $1;
+ shift @ARGV;
+ }
+ }
+ }
+ elsif($ARGV[0] eq '--stunnel') {
+ if($ARGV[1]) {
+ $stunnel = $ARGV[1];
+ shift @ARGV;
+ }
+ }
+ elsif($ARGV[0] eq '--srcdir') {
+ if($ARGV[1]) {
+ $srcdir = $ARGV[1];
+ shift @ARGV;
+ }
+ }
+ elsif($ARGV[0] eq '--certfile') {
+ if($ARGV[1]) {
+ $stuncert = $ARGV[1];
+ shift @ARGV;
+ }
+ }
+ elsif($ARGV[0] eq '--id') {
+ if($ARGV[1]) {
+ if($ARGV[1] =~ /^(\d+)$/) {
+ $idnum = $1 if($1 > 0);
+ shift @ARGV;
+ }
+ }
+ }
+ elsif($ARGV[0] eq '--ipv4') {
+ $ipvnum = 4;
+ }
+ elsif($ARGV[0] eq '--ipv6') {
+ $ipvnum = 6;
+ }
+ elsif($ARGV[0] eq '--pidfile') {
+ if($ARGV[1]) {
+ $pidfile = "$path/". $ARGV[1];
+ shift @ARGV;
+ }
+ }
+ elsif($ARGV[0] eq '--logfile') {
+ if($ARGV[1]) {
+ $logfile = "$path/". $ARGV[1];
+ shift @ARGV;
+ }
+ }
+ else {
+ print STDERR "\nWarning: secureserver.pl unknown parameter: $ARGV[0]\n";
+ }
+ shift @ARGV;
+}
+
+#***************************************************************************
+# Initialize command line option dependant variables
+#
+if(!$pidfile) {
+ $pidfile = "$path/". server_pidfilename($proto, $ipvnum, $idnum);
+}
+if(!$logfile) {
+ $logfile = server_logfilename($logdir, $proto, $ipvnum, $idnum);
+}
+
+$conffile = "$path/stunnel.conf";
+
+$certfile = "$srcdir/". ($stuncert?"certs/$stuncert":"stunnel.pem");
+
+my $ssltext = uc($proto) ." SSL/TLS:";
+
+#***************************************************************************
+# Find out version info for the given stunnel binary
+#
+foreach my $veropt (('-version', '-V')) {
+ foreach my $verstr (qx($stunnel $veropt 2>&1)) {
+ if($verstr =~ /^stunnel (\d+)\.(\d+) on /) {
+ $ver_major = $1;
+ $ver_minor = $2;
+ last;
+ }
+ }
+ last if($ver_major);
+}
+if((!$ver_major) || (!$ver_minor)) {
+ if(-x "$stunnel" && ! -d "$stunnel") {
+ print "$ssltext Unknown stunnel version\n";
+ }
+ else {
+ print "$ssltext No stunnel\n";
+ }
+ exit 1;
+}
+$stunnel_version = (100*$ver_major) + $ver_minor;
+
+#***************************************************************************
+# Verify minimmum stunnel required version
+#
+if($stunnel_version < 310) {
+ print "$ssltext Unsupported stunnel version $ver_major.$ver_minor\n";
+ exit 1;
+}
+
+#***************************************************************************
+# Build command to execute for stunnel 3.X versions
+#
+if($stunnel_version < 400) {
+ if($stunnel_version >= 319) {
+ $socketopt = "-O a:SO_REUSEADDR=1";
+ }
+ $cmd = "$stunnel -p $certfile -P $pidfile ";
+ $cmd .= "-d $accept_port -r $target_port -f -D $loglevel ";
+ $cmd .= ($socketopt) ? "$socketopt " : "";
+ $cmd .= ">$logfile 2>&1";
+ if($verbose) {
+ print uc($proto) ." server (stunnel $ver_major.$ver_minor)\n";
+ print "cmd: $cmd\n";
+ print "pem cert file: $certfile\n";
+ print "pid file: $pidfile\n";
+ print "log file: $logfile\n";
+ print "log level: $loglevel\n";
+ print "listen on port: $accept_port\n";
+ print "connect to port: $target_port\n";
+ }
+}
+
+#***************************************************************************
+# Build command to execute for stunnel 4.00 and newer
+#
+if($stunnel_version >= 400) {
+ $socketopt = "a:SO_REUSEADDR=1";
+ $cmd = "$stunnel $conffile ";
+ $cmd .= ">$logfile 2>&1";
+ # setup signal handler
+ $SIG{INT} = \&exit_signal_handler;
+ $SIG{TERM} = \&exit_signal_handler;
+ # stunnel configuration file
+ if(open(STUNCONF, ">$conffile")) {
+ print STUNCONF "
+ CApath = $path
+ cert = $certfile
+ pid = $pidfile
+ debug = $loglevel
+ output = $logfile
+ socket = $socketopt
+ foreground = yes
+
+ [curltest]
+ accept = $accept_port
+ connect = $target_port
+ ";
+ if(!close(STUNCONF)) {
+ print "$ssltext Error closing file $conffile\n";
+ exit 1;
+ }
+ }
+ else {
+ print "$ssltext Error writing file $conffile\n";
+ exit 1;
+ }
+ if($verbose) {
+ print uc($proto) ." server (stunnel $ver_major.$ver_minor)\n";
+ print "cmd: $cmd\n";
+ print "CApath = $path\n";
+ print "cert = $certfile\n";
+ print "pid = $pidfile\n";
+ print "debug = $loglevel\n";
+ print "output = $logfile\n";
+ print "socket = $socketopt\n";
+ print "foreground = yes\n";
+ print "\n";
+ print "[curltest]\n";
+ print "accept = $accept_port\n";
+ print "connect = $target_port\n";
+ }
+}
+
+#***************************************************************************
+# Set file permissions on certificate pem file.
+#
+chmod(0600, $certfile) if(-f $certfile);
+
+#***************************************************************************
+# Run stunnel.
+#
+my $rc = system($cmd);
+
+$rc >>= 8;
+
+unlink($conffile) if($conffile && -f $conffile);
+
+exit $rc;
diff --git a/tests/server/Makefile.am b/tests/server/Makefile.am
new file mode 100644
index 0000000..d4b9cc3
--- /dev/null
+++ b/tests/server/Makefile.am
@@ -0,0 +1,57 @@
+#***************************************************************************
+# _ _ ____ _
+# Project ___| | | | _ \| |
+# / __| | | | |_) | |
+# | (__| |_| | _ <| |___
+# \___|\___/|_| \_\_____|
+#
+# Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al.
+#
+# This software is licensed as described in the file COPYING, which
+# you should have received as part of this distribution. The terms
+# are also available at http://curl.haxx.se/docs/copyright.html.
+#
+# You may opt to use, copy, modify, merge, publish, distribute and/or sell
+# copies of the Software, and permit persons to whom the Software is
+# furnished to do so, under the terms of the COPYING file.
+#
+# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+# KIND, either express or implied.
+#
+###########################################################################
+AUTOMAKE_OPTIONS = foreign nostdinc
+
+# Specify our include paths here, and do it relative to $(top_srcdir) and
+# $(top_builddir), to ensure that these paths which belong to the library
+# being currently built and tested are searched before the library which
+# might possibly already be installed in the system.
+#
+# $(top_builddir)/include/curl for generated curlbuild.h included from curl.h
+# $(top_builddir)/include for generated curlbuild.h included from lib/setup.h
+# $(top_srcdir)/include is for libcurl's external include files
+# $(top_builddir)/lib is for libcurl's generated lib/curl_config.h file
+# $(top_srcdir)/lib is for libcurl's lib/setup.h and other "borrowed" files
+# $(top_builddir)/ares is for in-tree c-ares's generated ares_build.h file
+# $(top_srcdir)/ares is for in-tree c-ares's external include files
+
+if USE_EMBEDDED_ARES
+INCLUDES = -I$(top_builddir)/include/curl \
+ -I$(top_builddir)/include \
+ -I$(top_srcdir)/include \
+ -I$(top_builddir)/lib \
+ -I$(top_srcdir)/lib \
+ -I$(top_builddir)/ares \
+ -I$(top_srcdir)/ares
+else
+INCLUDES = -I$(top_builddir)/include/curl \
+ -I$(top_builddir)/include \
+ -I$(top_srcdir)/include \
+ -I$(top_builddir)/lib \
+ -I$(top_srcdir)/lib
+endif
+
+# Makefile.inc provides the source defines (noinst_PROGRAMS, useful, *_SOURCES, and *_LDADD)
+include Makefile.inc
+
+extra_DIST = base64.pl Makefile.inc
+
diff --git a/tests/server/Makefile.in b/tests/server/Makefile.in
new file mode 100644
index 0000000..69907fd
--- /dev/null
+++ b/tests/server/Makefile.in
@@ -0,0 +1,1692 @@
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005 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.
+
+@SET_MAKE@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(srcdir)/Makefile.inc
+noinst_PROGRAMS = getpart$(EXEEXT) resolve$(EXEEXT) rtspd$(EXEEXT) \
+ sockfilt$(EXEEXT) sws$(EXEEXT) tftpd$(EXEEXT)
+subdir = tests/server
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
+ $(top_srcdir)/m4/curl-confopts.m4 \
+ $(top_srcdir)/m4/curl-functions.m4 \
+ $(top_srcdir)/m4/curl-override.m4 \
+ $(top_srcdir)/m4/curl-reentrant.m4 \
+ $(top_srcdir)/m4/curl-system.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/lib/curl_config.h \
+ $(top_builddir)/src/curl_config.h \
+ $(top_builddir)/include/curl/curlbuild.h
+CONFIG_CLEAN_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am__objects_1 = getpart-mprintf.$(OBJEXT) getpart-nonblock.$(OBJEXT) \
+ getpart-strequal.$(OBJEXT) getpart-strtoofft.$(OBJEXT) \
+ getpart-timeval.$(OBJEXT) getpart-warnless.$(OBJEXT)
+am__objects_2 =
+am__objects_3 = getpart-getpart.$(OBJEXT) getpart-base64.$(OBJEXT) \
+ getpart-memdebug.$(OBJEXT)
+am_getpart_OBJECTS = $(am__objects_1) $(am__objects_2) \
+ $(am__objects_3) getpart-testpart.$(OBJEXT)
+getpart_OBJECTS = $(am_getpart_OBJECTS)
+getpart_DEPENDENCIES =
+am__objects_4 = resolve-mprintf.$(OBJEXT) resolve-nonblock.$(OBJEXT) \
+ resolve-strequal.$(OBJEXT) resolve-strtoofft.$(OBJEXT) \
+ resolve-timeval.$(OBJEXT) resolve-warnless.$(OBJEXT)
+am__objects_5 = resolve-getpart.$(OBJEXT) resolve-base64.$(OBJEXT) \
+ resolve-memdebug.$(OBJEXT)
+am__objects_6 = resolve-util.$(OBJEXT)
+am_resolve_OBJECTS = $(am__objects_4) $(am__objects_2) \
+ $(am__objects_5) $(am__objects_6) resolve-resolve.$(OBJEXT)
+resolve_OBJECTS = $(am_resolve_OBJECTS)
+resolve_DEPENDENCIES =
+am__objects_7 = rtspd-mprintf.$(OBJEXT) rtspd-nonblock.$(OBJEXT) \
+ rtspd-strequal.$(OBJEXT) rtspd-strtoofft.$(OBJEXT) \
+ rtspd-timeval.$(OBJEXT) rtspd-warnless.$(OBJEXT)
+am__objects_8 = rtspd-getpart.$(OBJEXT) rtspd-base64.$(OBJEXT) \
+ rtspd-memdebug.$(OBJEXT)
+am__objects_9 = rtspd-util.$(OBJEXT)
+am_rtspd_OBJECTS = $(am__objects_7) $(am__objects_2) $(am__objects_8) \
+ $(am__objects_9) rtspd-rtspd.$(OBJEXT)
+rtspd_OBJECTS = $(am_rtspd_OBJECTS)
+rtspd_DEPENDENCIES =
+am__objects_10 = sockfilt-mprintf.$(OBJEXT) \
+ sockfilt-nonblock.$(OBJEXT) sockfilt-strequal.$(OBJEXT) \
+ sockfilt-strtoofft.$(OBJEXT) sockfilt-timeval.$(OBJEXT) \
+ sockfilt-warnless.$(OBJEXT)
+am__objects_11 = sockfilt-getpart.$(OBJEXT) sockfilt-base64.$(OBJEXT) \
+ sockfilt-memdebug.$(OBJEXT)
+am__objects_12 = sockfilt-util.$(OBJEXT)
+am_sockfilt_OBJECTS = $(am__objects_10) $(am__objects_2) \
+ $(am__objects_11) $(am__objects_12) \
+ sockfilt-sockfilt.$(OBJEXT) sockfilt-inet_pton.$(OBJEXT)
+sockfilt_OBJECTS = $(am_sockfilt_OBJECTS)
+sockfilt_DEPENDENCIES =
+am__objects_13 = sws-mprintf.$(OBJEXT) sws-nonblock.$(OBJEXT) \
+ sws-strequal.$(OBJEXT) sws-strtoofft.$(OBJEXT) \
+ sws-timeval.$(OBJEXT) sws-warnless.$(OBJEXT)
+am__objects_14 = sws-getpart.$(OBJEXT) sws-base64.$(OBJEXT) \
+ sws-memdebug.$(OBJEXT)
+am__objects_15 = sws-util.$(OBJEXT)
+am_sws_OBJECTS = $(am__objects_13) $(am__objects_2) $(am__objects_14) \
+ $(am__objects_15) sws-sws.$(OBJEXT)
+sws_OBJECTS = $(am_sws_OBJECTS)
+sws_DEPENDENCIES =
+am__objects_16 = tftpd-mprintf.$(OBJEXT) tftpd-nonblock.$(OBJEXT) \
+ tftpd-strequal.$(OBJEXT) tftpd-strtoofft.$(OBJEXT) \
+ tftpd-timeval.$(OBJEXT) tftpd-warnless.$(OBJEXT)
+am__objects_17 = tftpd-getpart.$(OBJEXT) tftpd-base64.$(OBJEXT) \
+ tftpd-memdebug.$(OBJEXT)
+am__objects_18 = tftpd-util.$(OBJEXT)
+am_tftpd_OBJECTS = $(am__objects_16) $(am__objects_2) \
+ $(am__objects_17) $(am__objects_18) tftpd-tftpd.$(OBJEXT)
+tftpd_OBJECTS = $(am_tftpd_OBJECTS)
+tftpd_DEPENDENCIES =
+DEFAULT_INCLUDES =
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(getpart_SOURCES) $(resolve_SOURCES) $(rtspd_SOURCES) \
+ $(sockfilt_SOURCES) $(sws_SOURCES) $(tftpd_SOURCES)
+DIST_SOURCES = $(getpart_SOURCES) $(resolve_SOURCES) $(rtspd_SOURCES) \
+ $(sockfilt_SOURCES) $(sws_SOURCES) $(tftpd_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_LIBHOSTNAME_FALSE = @BUILD_LIBHOSTNAME_FALSE@
+BUILD_LIBHOSTNAME_TRUE = @BUILD_LIBHOSTNAME_TRUE@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_OPTIONS = @CONFIGURE_OPTIONS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CROSSCOMPILING_FALSE = @CROSSCOMPILING_FALSE@
+CROSSCOMPILING_TRUE = @CROSSCOMPILING_TRUE@
+CURLDEBUG_FALSE = @CURLDEBUG_FALSE@
+CURLDEBUG_TRUE = @CURLDEBUG_TRUE@
+CURL_CA_BUNDLE = @CURL_CA_BUNDLE@
+CURL_CFLAG_EXTRAS = @CURL_CFLAG_EXTRAS@
+CURL_DISABLE_DICT = @CURL_DISABLE_DICT@
+CURL_DISABLE_FILE = @CURL_DISABLE_FILE@
+CURL_DISABLE_FTP = @CURL_DISABLE_FTP@
+CURL_DISABLE_GOPHER = @CURL_DISABLE_GOPHER@
+CURL_DISABLE_HTTP = @CURL_DISABLE_HTTP@
+CURL_DISABLE_IMAP = @CURL_DISABLE_IMAP@
+CURL_DISABLE_LDAP = @CURL_DISABLE_LDAP@
+CURL_DISABLE_LDAPS = @CURL_DISABLE_LDAPS@
+CURL_DISABLE_POP3 = @CURL_DISABLE_POP3@
+CURL_DISABLE_PROXY = @CURL_DISABLE_PROXY@
+CURL_DISABLE_RTSP = @CURL_DISABLE_RTSP@
+CURL_DISABLE_SMTP = @CURL_DISABLE_SMTP@
+CURL_DISABLE_TELNET = @CURL_DISABLE_TELNET@
+CURL_DISABLE_TFTP = @CURL_DISABLE_TFTP@
+CURL_LIBS = @CURL_LIBS@
+CURL_NETWORK_LIBS = @CURL_NETWORK_LIBS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_SHARED = @ENABLE_SHARED@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_LDAP_SSL = @HAVE_LDAP_SSL@
+HAVE_LIBZ = @HAVE_LIBZ@
+HAVE_LIBZ_FALSE = @HAVE_LIBZ_FALSE@
+HAVE_LIBZ_TRUE = @HAVE_LIBZ_TRUE@
+HAVE_PK11_CREATEGENERICOBJECT = @HAVE_PK11_CREATEGENERICOBJECT@
+IDN_ENABLED = @IDN_ENABLED@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+IPV6_ENABLED = @IPV6_ENABLED@
+KRB4_ENABLED = @KRB4_ENABLED@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBCURL_LIBS = @LIBCURL_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+MANOPT = @MANOPT@
+MIMPURE_FALSE = @MIMPURE_FALSE@
+MIMPURE_TRUE = @MIMPURE_TRUE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NO_UNDEFINED_FALSE = @NO_UNDEFINED_FALSE@
+NO_UNDEFINED_TRUE = @NO_UNDEFINED_TRUE@
+NROFF = @NROFF@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH = @PATH@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+PKGADD_NAME = @PKGADD_NAME@
+PKGADD_PKG = @PKGADD_PKG@
+PKGADD_VENDOR = @PKGADD_VENDOR@
+PKGCONFIG = @PKGCONFIG@
+RANDOM_FILE = @RANDOM_FILE@
+RANLIB = @RANLIB@
+REQUIRE_LIB_DEPS = @REQUIRE_LIB_DEPS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SONAME_BUMP_FALSE = @SONAME_BUMP_FALSE@
+SONAME_BUMP_TRUE = @SONAME_BUMP_TRUE@
+SSL_ENABLED = @SSL_ENABLED@
+STATICLIB_FALSE = @STATICLIB_FALSE@
+STATICLIB_TRUE = @STATICLIB_TRUE@
+STRIP = @STRIP@
+SUPPORT_FEATURES = @SUPPORT_FEATURES@
+SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
+TEST_SERVER_LIBS = @TEST_SERVER_LIBS@
+USE_ARES = @USE_ARES@
+USE_EMBEDDED_ARES_FALSE = @USE_EMBEDDED_ARES_FALSE@
+USE_EMBEDDED_ARES_TRUE = @USE_EMBEDDED_ARES_TRUE@
+USE_GNUTLS = @USE_GNUTLS@
+USE_LIBRTMP = @USE_LIBRTMP@
+USE_LIBSSH2 = @USE_LIBSSH2@
+USE_MANUAL_FALSE = @USE_MANUAL_FALSE@
+USE_MANUAL_TRUE = @USE_MANUAL_TRUE@
+USE_NSS = @USE_NSS@
+USE_OPENLDAP = @USE_OPENLDAP@
+USE_POLARSSL = @USE_POLARSSL@
+USE_SSLEAY = @USE_SSLEAY@
+USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
+VERSION = @VERSION@
+VERSIONNUM = @VERSIONNUM@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+libext = @libext@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+
+#***************************************************************************
+# _ _ ____ _
+# Project ___| | | | _ \| |
+# / __| | | | |_) | |
+# | (__| |_| | _ <| |___
+# \___|\___/|_| \_\_____|
+#
+# Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al.
+#
+# This software is licensed as described in the file COPYING, which
+# you should have received as part of this distribution. The terms
+# are also available at http://curl.haxx.se/docs/copyright.html.
+#
+# You may opt to use, copy, modify, merge, publish, distribute and/or sell
+# copies of the Software, and permit persons to whom the Software is
+# furnished to do so, under the terms of the COPYING file.
+#
+# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+# KIND, either express or implied.
+#
+###########################################################################
+AUTOMAKE_OPTIONS = foreign nostdinc
+@USE_EMBEDDED_ARES_FALSE@INCLUDES = -I$(top_builddir)/include/curl \
+@USE_EMBEDDED_ARES_FALSE@ -I$(top_builddir)/include \
+@USE_EMBEDDED_ARES_FALSE@ -I$(top_srcdir)/include \
+@USE_EMBEDDED_ARES_FALSE@ -I$(top_builddir)/lib \
+@USE_EMBEDDED_ARES_FALSE@ -I$(top_srcdir)/lib
+
+
+# Specify our include paths here, and do it relative to $(top_srcdir) and
+# $(top_builddir), to ensure that these paths which belong to the library
+# being currently built and tested are searched before the library which
+# might possibly already be installed in the system.
+#
+# $(top_builddir)/include/curl for generated curlbuild.h included from curl.h
+# $(top_builddir)/include for generated curlbuild.h included from lib/setup.h
+# $(top_srcdir)/include is for libcurl's external include files
+# $(top_builddir)/lib is for libcurl's generated lib/curl_config.h file
+# $(top_srcdir)/lib is for libcurl's lib/setup.h and other "borrowed" files
+# $(top_builddir)/ares is for in-tree c-ares's generated ares_build.h file
+# $(top_srcdir)/ares is for in-tree c-ares's external include files
+@USE_EMBEDDED_ARES_TRUE@INCLUDES = -I$(top_builddir)/include/curl \
+@USE_EMBEDDED_ARES_TRUE@ -I$(top_builddir)/include \
+@USE_EMBEDDED_ARES_TRUE@ -I$(top_srcdir)/include \
+@USE_EMBEDDED_ARES_TRUE@ -I$(top_builddir)/lib \
+@USE_EMBEDDED_ARES_TRUE@ -I$(top_srcdir)/lib \
+@USE_EMBEDDED_ARES_TRUE@ -I$(top_builddir)/ares \
+@USE_EMBEDDED_ARES_TRUE@ -I$(top_srcdir)/ares
+
+CURLX_SRCS = \
+ $(top_srcdir)/lib/mprintf.c \
+ $(top_srcdir)/lib/nonblock.c \
+ $(top_srcdir)/lib/strequal.c \
+ $(top_srcdir)/lib/strtoofft.c \
+ $(top_srcdir)/lib/timeval.c \
+ $(top_srcdir)/lib/warnless.c
+
+CURLX_HDRS = \
+ $(top_srcdir)/lib/curlx.h \
+ $(top_srcdir)/lib/nonblock.h \
+ $(top_srcdir)/lib/strequal.h \
+ $(top_srcdir)/lib/strtoofft.h \
+ $(top_srcdir)/lib/timeval.h \
+ $(top_srcdir)/lib/warnless.h
+
+USEFUL = \
+ getpart.c \
+ getpart.h \
+ $(top_srcdir)/lib/base64.c \
+ $(top_srcdir)/lib/curl_base64.h \
+ $(top_srcdir)/lib/memdebug.c \
+ $(top_srcdir)/lib/memdebug.h
+
+UTIL = \
+ util.c \
+ util.h
+
+getpart_SOURCES = $(CURLX_SRCS) $(CURLX_HDRS) $(USEFUL) \
+ testpart.c
+
+getpart_LDADD = @TEST_SERVER_LIBS@
+getpart_CFLAGS = $(AM_CFLAGS)
+resolve_SOURCES = $(CURLX_SRCS) $(CURLX_HDRS) $(USEFUL) $(UTIL) \
+ resolve.c
+
+resolve_LDADD = @TEST_SERVER_LIBS@
+resolve_CFLAGS = $(AM_CFLAGS)
+rtspd_SOURCES = $(CURLX_SRCS) $(CURLX_HDRS) $(USEFUL) $(UTIL) \
+ rtspd.c
+
+rtspd_LDADD = @TEST_SERVER_LIBS@
+rtspd_CFLAGS = $(AM_CFLAGS)
+sockfilt_SOURCES = $(CURLX_SRCS) $(CURLX_HDRS) $(USEFUL) $(UTIL) \
+ sockfilt.c \
+ $(top_srcdir)/lib/inet_pton.c
+
+sockfilt_LDADD = @TEST_SERVER_LIBS@
+sockfilt_CFLAGS = $(AM_CFLAGS)
+sws_SOURCES = $(CURLX_SRCS) $(CURLX_HDRS) $(USEFUL) $(UTIL) \
+ sws.c
+
+sws_LDADD = @TEST_SERVER_LIBS@
+sws_CFLAGS = $(AM_CFLAGS)
+tftpd_SOURCES = $(CURLX_SRCS) $(CURLX_HDRS) $(USEFUL) $(UTIL) \
+ tftpd.c \
+ tftp.h
+
+tftpd_LDADD = @TEST_SERVER_LIBS@
+tftpd_CFLAGS = $(AM_CFLAGS)
+
+# Makefile.inc provides the source defines (noinst_PROGRAMS, useful, *_SOURCES, and *_LDADD)
+extra_DIST = base64.pl Makefile.inc
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/Makefile.inc $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tests/server/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --foreign tests/server/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+clean-noinstPROGRAMS:
+ @list='$(noinst_PROGRAMS)'; for p in $$list; do \
+ f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f $$p $$f"; \
+ rm -f $$p $$f ; \
+ done
+getpart$(EXEEXT): $(getpart_OBJECTS) $(getpart_DEPENDENCIES)
+ @rm -f getpart$(EXEEXT)
+ $(LINK) $(getpart_LDFLAGS) $(getpart_OBJECTS) $(getpart_LDADD) $(LIBS)
+resolve$(EXEEXT): $(resolve_OBJECTS) $(resolve_DEPENDENCIES)
+ @rm -f resolve$(EXEEXT)
+ $(LINK) $(resolve_LDFLAGS) $(resolve_OBJECTS) $(resolve_LDADD) $(LIBS)
+rtspd$(EXEEXT): $(rtspd_OBJECTS) $(rtspd_DEPENDENCIES)
+ @rm -f rtspd$(EXEEXT)
+ $(LINK) $(rtspd_LDFLAGS) $(rtspd_OBJECTS) $(rtspd_LDADD) $(LIBS)
+sockfilt$(EXEEXT): $(sockfilt_OBJECTS) $(sockfilt_DEPENDENCIES)
+ @rm -f sockfilt$(EXEEXT)
+ $(LINK) $(sockfilt_LDFLAGS) $(sockfilt_OBJECTS) $(sockfilt_LDADD) $(LIBS)
+sws$(EXEEXT): $(sws_OBJECTS) $(sws_DEPENDENCIES)
+ @rm -f sws$(EXEEXT)
+ $(LINK) $(sws_LDFLAGS) $(sws_OBJECTS) $(sws_LDADD) $(LIBS)
+tftpd$(EXEEXT): $(tftpd_OBJECTS) $(tftpd_DEPENDENCIES)
+ @rm -f tftpd$(EXEEXT)
+ $(LINK) $(tftpd_LDFLAGS) $(tftpd_OBJECTS) $(tftpd_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getpart-base64.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getpart-getpart.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getpart-memdebug.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getpart-mprintf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getpart-nonblock.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getpart-strequal.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getpart-strtoofft.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getpart-testpart.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getpart-timeval.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getpart-warnless.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/resolve-base64.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/resolve-getpart.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/resolve-memdebug.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/resolve-mprintf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/resolve-nonblock.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/resolve-resolve.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/resolve-strequal.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/resolve-strtoofft.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/resolve-timeval.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/resolve-util.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/resolve-warnless.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtspd-base64.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtspd-getpart.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtspd-memdebug.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtspd-mprintf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtspd-nonblock.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtspd-rtspd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtspd-strequal.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtspd-strtoofft.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtspd-timeval.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtspd-util.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtspd-warnless.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sockfilt-base64.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sockfilt-getpart.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sockfilt-inet_pton.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sockfilt-memdebug.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sockfilt-mprintf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sockfilt-nonblock.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sockfilt-sockfilt.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sockfilt-strequal.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sockfilt-strtoofft.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sockfilt-timeval.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sockfilt-util.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sockfilt-warnless.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sws-base64.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sws-getpart.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sws-memdebug.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sws-mprintf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sws-nonblock.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sws-strequal.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sws-strtoofft.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sws-sws.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sws-timeval.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sws-util.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sws-warnless.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tftpd-base64.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tftpd-getpart.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tftpd-memdebug.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tftpd-mprintf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tftpd-nonblock.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tftpd-strequal.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tftpd-strtoofft.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tftpd-tftpd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tftpd-timeval.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tftpd-util.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tftpd-warnless.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+getpart-mprintf.o: $(top_srcdir)/lib/mprintf.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(getpart_CFLAGS) $(CFLAGS) -MT getpart-mprintf.o -MD -MP -MF "$(DEPDIR)/getpart-mprintf.Tpo" -c -o getpart-mprintf.o `test -f '$(top_srcdir)/lib/mprintf.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/mprintf.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/getpart-mprintf.Tpo" "$(DEPDIR)/getpart-mprintf.Po"; else rm -f "$(DEPDIR)/getpart-mprintf.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/mprintf.c' object='getpart-mprintf.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(getpart_CFLAGS) $(CFLAGS) -c -o getpart-mprintf.o `test -f '$(top_srcdir)/lib/mprintf.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/mprintf.c
+
+getpart-mprintf.obj: $(top_srcdir)/lib/mprintf.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(getpart_CFLAGS) $(CFLAGS) -MT getpart-mprintf.obj -MD -MP -MF "$(DEPDIR)/getpart-mprintf.Tpo" -c -o getpart-mprintf.obj `if test -f '$(top_srcdir)/lib/mprintf.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/mprintf.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/mprintf.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/getpart-mprintf.Tpo" "$(DEPDIR)/getpart-mprintf.Po"; else rm -f "$(DEPDIR)/getpart-mprintf.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/mprintf.c' object='getpart-mprintf.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(getpart_CFLAGS) $(CFLAGS) -c -o getpart-mprintf.obj `if test -f '$(top_srcdir)/lib/mprintf.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/mprintf.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/mprintf.c'; fi`
+
+getpart-nonblock.o: $(top_srcdir)/lib/nonblock.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(getpart_CFLAGS) $(CFLAGS) -MT getpart-nonblock.o -MD -MP -MF "$(DEPDIR)/getpart-nonblock.Tpo" -c -o getpart-nonblock.o `test -f '$(top_srcdir)/lib/nonblock.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/nonblock.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/getpart-nonblock.Tpo" "$(DEPDIR)/getpart-nonblock.Po"; else rm -f "$(DEPDIR)/getpart-nonblock.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/nonblock.c' object='getpart-nonblock.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(getpart_CFLAGS) $(CFLAGS) -c -o getpart-nonblock.o `test -f '$(top_srcdir)/lib/nonblock.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/nonblock.c
+
+getpart-nonblock.obj: $(top_srcdir)/lib/nonblock.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(getpart_CFLAGS) $(CFLAGS) -MT getpart-nonblock.obj -MD -MP -MF "$(DEPDIR)/getpart-nonblock.Tpo" -c -o getpart-nonblock.obj `if test -f '$(top_srcdir)/lib/nonblock.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/nonblock.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/nonblock.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/getpart-nonblock.Tpo" "$(DEPDIR)/getpart-nonblock.Po"; else rm -f "$(DEPDIR)/getpart-nonblock.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/nonblock.c' object='getpart-nonblock.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(getpart_CFLAGS) $(CFLAGS) -c -o getpart-nonblock.obj `if test -f '$(top_srcdir)/lib/nonblock.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/nonblock.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/nonblock.c'; fi`
+
+getpart-strequal.o: $(top_srcdir)/lib/strequal.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(getpart_CFLAGS) $(CFLAGS) -MT getpart-strequal.o -MD -MP -MF "$(DEPDIR)/getpart-strequal.Tpo" -c -o getpart-strequal.o `test -f '$(top_srcdir)/lib/strequal.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/strequal.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/getpart-strequal.Tpo" "$(DEPDIR)/getpart-strequal.Po"; else rm -f "$(DEPDIR)/getpart-strequal.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/strequal.c' object='getpart-strequal.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(getpart_CFLAGS) $(CFLAGS) -c -o getpart-strequal.o `test -f '$(top_srcdir)/lib/strequal.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/strequal.c
+
+getpart-strequal.obj: $(top_srcdir)/lib/strequal.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(getpart_CFLAGS) $(CFLAGS) -MT getpart-strequal.obj -MD -MP -MF "$(DEPDIR)/getpart-strequal.Tpo" -c -o getpart-strequal.obj `if test -f '$(top_srcdir)/lib/strequal.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/strequal.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/strequal.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/getpart-strequal.Tpo" "$(DEPDIR)/getpart-strequal.Po"; else rm -f "$(DEPDIR)/getpart-strequal.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/strequal.c' object='getpart-strequal.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(getpart_CFLAGS) $(CFLAGS) -c -o getpart-strequal.obj `if test -f '$(top_srcdir)/lib/strequal.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/strequal.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/strequal.c'; fi`
+
+getpart-strtoofft.o: $(top_srcdir)/lib/strtoofft.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(getpart_CFLAGS) $(CFLAGS) -MT getpart-strtoofft.o -MD -MP -MF "$(DEPDIR)/getpart-strtoofft.Tpo" -c -o getpart-strtoofft.o `test -f '$(top_srcdir)/lib/strtoofft.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/strtoofft.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/getpart-strtoofft.Tpo" "$(DEPDIR)/getpart-strtoofft.Po"; else rm -f "$(DEPDIR)/getpart-strtoofft.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/strtoofft.c' object='getpart-strtoofft.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(getpart_CFLAGS) $(CFLAGS) -c -o getpart-strtoofft.o `test -f '$(top_srcdir)/lib/strtoofft.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/strtoofft.c
+
+getpart-strtoofft.obj: $(top_srcdir)/lib/strtoofft.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(getpart_CFLAGS) $(CFLAGS) -MT getpart-strtoofft.obj -MD -MP -MF "$(DEPDIR)/getpart-strtoofft.Tpo" -c -o getpart-strtoofft.obj `if test -f '$(top_srcdir)/lib/strtoofft.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/strtoofft.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/strtoofft.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/getpart-strtoofft.Tpo" "$(DEPDIR)/getpart-strtoofft.Po"; else rm -f "$(DEPDIR)/getpart-strtoofft.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/strtoofft.c' object='getpart-strtoofft.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(getpart_CFLAGS) $(CFLAGS) -c -o getpart-strtoofft.obj `if test -f '$(top_srcdir)/lib/strtoofft.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/strtoofft.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/strtoofft.c'; fi`
+
+getpart-timeval.o: $(top_srcdir)/lib/timeval.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(getpart_CFLAGS) $(CFLAGS) -MT getpart-timeval.o -MD -MP -MF "$(DEPDIR)/getpart-timeval.Tpo" -c -o getpart-timeval.o `test -f '$(top_srcdir)/lib/timeval.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/timeval.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/getpart-timeval.Tpo" "$(DEPDIR)/getpart-timeval.Po"; else rm -f "$(DEPDIR)/getpart-timeval.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/timeval.c' object='getpart-timeval.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(getpart_CFLAGS) $(CFLAGS) -c -o getpart-timeval.o `test -f '$(top_srcdir)/lib/timeval.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/timeval.c
+
+getpart-timeval.obj: $(top_srcdir)/lib/timeval.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(getpart_CFLAGS) $(CFLAGS) -MT getpart-timeval.obj -MD -MP -MF "$(DEPDIR)/getpart-timeval.Tpo" -c -o getpart-timeval.obj `if test -f '$(top_srcdir)/lib/timeval.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/timeval.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/timeval.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/getpart-timeval.Tpo" "$(DEPDIR)/getpart-timeval.Po"; else rm -f "$(DEPDIR)/getpart-timeval.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/timeval.c' object='getpart-timeval.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(getpart_CFLAGS) $(CFLAGS) -c -o getpart-timeval.obj `if test -f '$(top_srcdir)/lib/timeval.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/timeval.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/timeval.c'; fi`
+
+getpart-warnless.o: $(top_srcdir)/lib/warnless.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(getpart_CFLAGS) $(CFLAGS) -MT getpart-warnless.o -MD -MP -MF "$(DEPDIR)/getpart-warnless.Tpo" -c -o getpart-warnless.o `test -f '$(top_srcdir)/lib/warnless.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/warnless.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/getpart-warnless.Tpo" "$(DEPDIR)/getpart-warnless.Po"; else rm -f "$(DEPDIR)/getpart-warnless.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/warnless.c' object='getpart-warnless.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(getpart_CFLAGS) $(CFLAGS) -c -o getpart-warnless.o `test -f '$(top_srcdir)/lib/warnless.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/warnless.c
+
+getpart-warnless.obj: $(top_srcdir)/lib/warnless.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(getpart_CFLAGS) $(CFLAGS) -MT getpart-warnless.obj -MD -MP -MF "$(DEPDIR)/getpart-warnless.Tpo" -c -o getpart-warnless.obj `if test -f '$(top_srcdir)/lib/warnless.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/warnless.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/getpart-warnless.Tpo" "$(DEPDIR)/getpart-warnless.Po"; else rm -f "$(DEPDIR)/getpart-warnless.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/warnless.c' object='getpart-warnless.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(getpart_CFLAGS) $(CFLAGS) -c -o getpart-warnless.obj `if test -f '$(top_srcdir)/lib/warnless.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/warnless.c'; fi`
+
+getpart-getpart.o: getpart.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(getpart_CFLAGS) $(CFLAGS) -MT getpart-getpart.o -MD -MP -MF "$(DEPDIR)/getpart-getpart.Tpo" -c -o getpart-getpart.o `test -f 'getpart.c' || echo '$(srcdir)/'`getpart.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/getpart-getpart.Tpo" "$(DEPDIR)/getpart-getpart.Po"; else rm -f "$(DEPDIR)/getpart-getpart.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='getpart.c' object='getpart-getpart.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(getpart_CFLAGS) $(CFLAGS) -c -o getpart-getpart.o `test -f 'getpart.c' || echo '$(srcdir)/'`getpart.c
+
+getpart-getpart.obj: getpart.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(getpart_CFLAGS) $(CFLAGS) -MT getpart-getpart.obj -MD -MP -MF "$(DEPDIR)/getpart-getpart.Tpo" -c -o getpart-getpart.obj `if test -f 'getpart.c'; then $(CYGPATH_W) 'getpart.c'; else $(CYGPATH_W) '$(srcdir)/getpart.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/getpart-getpart.Tpo" "$(DEPDIR)/getpart-getpart.Po"; else rm -f "$(DEPDIR)/getpart-getpart.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='getpart.c' object='getpart-getpart.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(getpart_CFLAGS) $(CFLAGS) -c -o getpart-getpart.obj `if test -f 'getpart.c'; then $(CYGPATH_W) 'getpart.c'; else $(CYGPATH_W) '$(srcdir)/getpart.c'; fi`
+
+getpart-base64.o: $(top_srcdir)/lib/base64.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(getpart_CFLAGS) $(CFLAGS) -MT getpart-base64.o -MD -MP -MF "$(DEPDIR)/getpart-base64.Tpo" -c -o getpart-base64.o `test -f '$(top_srcdir)/lib/base64.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/base64.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/getpart-base64.Tpo" "$(DEPDIR)/getpart-base64.Po"; else rm -f "$(DEPDIR)/getpart-base64.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/base64.c' object='getpart-base64.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(getpart_CFLAGS) $(CFLAGS) -c -o getpart-base64.o `test -f '$(top_srcdir)/lib/base64.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/base64.c
+
+getpart-base64.obj: $(top_srcdir)/lib/base64.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(getpart_CFLAGS) $(CFLAGS) -MT getpart-base64.obj -MD -MP -MF "$(DEPDIR)/getpart-base64.Tpo" -c -o getpart-base64.obj `if test -f '$(top_srcdir)/lib/base64.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/base64.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/base64.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/getpart-base64.Tpo" "$(DEPDIR)/getpart-base64.Po"; else rm -f "$(DEPDIR)/getpart-base64.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/base64.c' object='getpart-base64.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(getpart_CFLAGS) $(CFLAGS) -c -o getpart-base64.obj `if test -f '$(top_srcdir)/lib/base64.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/base64.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/base64.c'; fi`
+
+getpart-memdebug.o: $(top_srcdir)/lib/memdebug.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(getpart_CFLAGS) $(CFLAGS) -MT getpart-memdebug.o -MD -MP -MF "$(DEPDIR)/getpart-memdebug.Tpo" -c -o getpart-memdebug.o `test -f '$(top_srcdir)/lib/memdebug.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/memdebug.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/getpart-memdebug.Tpo" "$(DEPDIR)/getpart-memdebug.Po"; else rm -f "$(DEPDIR)/getpart-memdebug.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/memdebug.c' object='getpart-memdebug.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(getpart_CFLAGS) $(CFLAGS) -c -o getpart-memdebug.o `test -f '$(top_srcdir)/lib/memdebug.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/memdebug.c
+
+getpart-memdebug.obj: $(top_srcdir)/lib/memdebug.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(getpart_CFLAGS) $(CFLAGS) -MT getpart-memdebug.obj -MD -MP -MF "$(DEPDIR)/getpart-memdebug.Tpo" -c -o getpart-memdebug.obj `if test -f '$(top_srcdir)/lib/memdebug.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/memdebug.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/memdebug.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/getpart-memdebug.Tpo" "$(DEPDIR)/getpart-memdebug.Po"; else rm -f "$(DEPDIR)/getpart-memdebug.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/memdebug.c' object='getpart-memdebug.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(getpart_CFLAGS) $(CFLAGS) -c -o getpart-memdebug.obj `if test -f '$(top_srcdir)/lib/memdebug.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/memdebug.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/memdebug.c'; fi`
+
+getpart-testpart.o: testpart.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(getpart_CFLAGS) $(CFLAGS) -MT getpart-testpart.o -MD -MP -MF "$(DEPDIR)/getpart-testpart.Tpo" -c -o getpart-testpart.o `test -f 'testpart.c' || echo '$(srcdir)/'`testpart.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/getpart-testpart.Tpo" "$(DEPDIR)/getpart-testpart.Po"; else rm -f "$(DEPDIR)/getpart-testpart.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='testpart.c' object='getpart-testpart.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(getpart_CFLAGS) $(CFLAGS) -c -o getpart-testpart.o `test -f 'testpart.c' || echo '$(srcdir)/'`testpart.c
+
+getpart-testpart.obj: testpart.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(getpart_CFLAGS) $(CFLAGS) -MT getpart-testpart.obj -MD -MP -MF "$(DEPDIR)/getpart-testpart.Tpo" -c -o getpart-testpart.obj `if test -f 'testpart.c'; then $(CYGPATH_W) 'testpart.c'; else $(CYGPATH_W) '$(srcdir)/testpart.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/getpart-testpart.Tpo" "$(DEPDIR)/getpart-testpart.Po"; else rm -f "$(DEPDIR)/getpart-testpart.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='testpart.c' object='getpart-testpart.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(getpart_CFLAGS) $(CFLAGS) -c -o getpart-testpart.obj `if test -f 'testpart.c'; then $(CYGPATH_W) 'testpart.c'; else $(CYGPATH_W) '$(srcdir)/testpart.c'; fi`
+
+resolve-mprintf.o: $(top_srcdir)/lib/mprintf.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(resolve_CFLAGS) $(CFLAGS) -MT resolve-mprintf.o -MD -MP -MF "$(DEPDIR)/resolve-mprintf.Tpo" -c -o resolve-mprintf.o `test -f '$(top_srcdir)/lib/mprintf.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/mprintf.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/resolve-mprintf.Tpo" "$(DEPDIR)/resolve-mprintf.Po"; else rm -f "$(DEPDIR)/resolve-mprintf.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/mprintf.c' object='resolve-mprintf.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(resolve_CFLAGS) $(CFLAGS) -c -o resolve-mprintf.o `test -f '$(top_srcdir)/lib/mprintf.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/mprintf.c
+
+resolve-mprintf.obj: $(top_srcdir)/lib/mprintf.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(resolve_CFLAGS) $(CFLAGS) -MT resolve-mprintf.obj -MD -MP -MF "$(DEPDIR)/resolve-mprintf.Tpo" -c -o resolve-mprintf.obj `if test -f '$(top_srcdir)/lib/mprintf.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/mprintf.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/mprintf.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/resolve-mprintf.Tpo" "$(DEPDIR)/resolve-mprintf.Po"; else rm -f "$(DEPDIR)/resolve-mprintf.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/mprintf.c' object='resolve-mprintf.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(resolve_CFLAGS) $(CFLAGS) -c -o resolve-mprintf.obj `if test -f '$(top_srcdir)/lib/mprintf.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/mprintf.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/mprintf.c'; fi`
+
+resolve-nonblock.o: $(top_srcdir)/lib/nonblock.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(resolve_CFLAGS) $(CFLAGS) -MT resolve-nonblock.o -MD -MP -MF "$(DEPDIR)/resolve-nonblock.Tpo" -c -o resolve-nonblock.o `test -f '$(top_srcdir)/lib/nonblock.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/nonblock.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/resolve-nonblock.Tpo" "$(DEPDIR)/resolve-nonblock.Po"; else rm -f "$(DEPDIR)/resolve-nonblock.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/nonblock.c' object='resolve-nonblock.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(resolve_CFLAGS) $(CFLAGS) -c -o resolve-nonblock.o `test -f '$(top_srcdir)/lib/nonblock.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/nonblock.c
+
+resolve-nonblock.obj: $(top_srcdir)/lib/nonblock.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(resolve_CFLAGS) $(CFLAGS) -MT resolve-nonblock.obj -MD -MP -MF "$(DEPDIR)/resolve-nonblock.Tpo" -c -o resolve-nonblock.obj `if test -f '$(top_srcdir)/lib/nonblock.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/nonblock.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/nonblock.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/resolve-nonblock.Tpo" "$(DEPDIR)/resolve-nonblock.Po"; else rm -f "$(DEPDIR)/resolve-nonblock.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/nonblock.c' object='resolve-nonblock.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(resolve_CFLAGS) $(CFLAGS) -c -o resolve-nonblock.obj `if test -f '$(top_srcdir)/lib/nonblock.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/nonblock.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/nonblock.c'; fi`
+
+resolve-strequal.o: $(top_srcdir)/lib/strequal.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(resolve_CFLAGS) $(CFLAGS) -MT resolve-strequal.o -MD -MP -MF "$(DEPDIR)/resolve-strequal.Tpo" -c -o resolve-strequal.o `test -f '$(top_srcdir)/lib/strequal.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/strequal.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/resolve-strequal.Tpo" "$(DEPDIR)/resolve-strequal.Po"; else rm -f "$(DEPDIR)/resolve-strequal.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/strequal.c' object='resolve-strequal.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(resolve_CFLAGS) $(CFLAGS) -c -o resolve-strequal.o `test -f '$(top_srcdir)/lib/strequal.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/strequal.c
+
+resolve-strequal.obj: $(top_srcdir)/lib/strequal.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(resolve_CFLAGS) $(CFLAGS) -MT resolve-strequal.obj -MD -MP -MF "$(DEPDIR)/resolve-strequal.Tpo" -c -o resolve-strequal.obj `if test -f '$(top_srcdir)/lib/strequal.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/strequal.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/strequal.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/resolve-strequal.Tpo" "$(DEPDIR)/resolve-strequal.Po"; else rm -f "$(DEPDIR)/resolve-strequal.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/strequal.c' object='resolve-strequal.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(resolve_CFLAGS) $(CFLAGS) -c -o resolve-strequal.obj `if test -f '$(top_srcdir)/lib/strequal.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/strequal.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/strequal.c'; fi`
+
+resolve-strtoofft.o: $(top_srcdir)/lib/strtoofft.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(resolve_CFLAGS) $(CFLAGS) -MT resolve-strtoofft.o -MD -MP -MF "$(DEPDIR)/resolve-strtoofft.Tpo" -c -o resolve-strtoofft.o `test -f '$(top_srcdir)/lib/strtoofft.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/strtoofft.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/resolve-strtoofft.Tpo" "$(DEPDIR)/resolve-strtoofft.Po"; else rm -f "$(DEPDIR)/resolve-strtoofft.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/strtoofft.c' object='resolve-strtoofft.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(resolve_CFLAGS) $(CFLAGS) -c -o resolve-strtoofft.o `test -f '$(top_srcdir)/lib/strtoofft.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/strtoofft.c
+
+resolve-strtoofft.obj: $(top_srcdir)/lib/strtoofft.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(resolve_CFLAGS) $(CFLAGS) -MT resolve-strtoofft.obj -MD -MP -MF "$(DEPDIR)/resolve-strtoofft.Tpo" -c -o resolve-strtoofft.obj `if test -f '$(top_srcdir)/lib/strtoofft.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/strtoofft.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/strtoofft.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/resolve-strtoofft.Tpo" "$(DEPDIR)/resolve-strtoofft.Po"; else rm -f "$(DEPDIR)/resolve-strtoofft.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/strtoofft.c' object='resolve-strtoofft.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(resolve_CFLAGS) $(CFLAGS) -c -o resolve-strtoofft.obj `if test -f '$(top_srcdir)/lib/strtoofft.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/strtoofft.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/strtoofft.c'; fi`
+
+resolve-timeval.o: $(top_srcdir)/lib/timeval.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(resolve_CFLAGS) $(CFLAGS) -MT resolve-timeval.o -MD -MP -MF "$(DEPDIR)/resolve-timeval.Tpo" -c -o resolve-timeval.o `test -f '$(top_srcdir)/lib/timeval.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/timeval.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/resolve-timeval.Tpo" "$(DEPDIR)/resolve-timeval.Po"; else rm -f "$(DEPDIR)/resolve-timeval.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/timeval.c' object='resolve-timeval.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(resolve_CFLAGS) $(CFLAGS) -c -o resolve-timeval.o `test -f '$(top_srcdir)/lib/timeval.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/timeval.c
+
+resolve-timeval.obj: $(top_srcdir)/lib/timeval.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(resolve_CFLAGS) $(CFLAGS) -MT resolve-timeval.obj -MD -MP -MF "$(DEPDIR)/resolve-timeval.Tpo" -c -o resolve-timeval.obj `if test -f '$(top_srcdir)/lib/timeval.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/timeval.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/timeval.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/resolve-timeval.Tpo" "$(DEPDIR)/resolve-timeval.Po"; else rm -f "$(DEPDIR)/resolve-timeval.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/timeval.c' object='resolve-timeval.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(resolve_CFLAGS) $(CFLAGS) -c -o resolve-timeval.obj `if test -f '$(top_srcdir)/lib/timeval.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/timeval.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/timeval.c'; fi`
+
+resolve-warnless.o: $(top_srcdir)/lib/warnless.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(resolve_CFLAGS) $(CFLAGS) -MT resolve-warnless.o -MD -MP -MF "$(DEPDIR)/resolve-warnless.Tpo" -c -o resolve-warnless.o `test -f '$(top_srcdir)/lib/warnless.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/warnless.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/resolve-warnless.Tpo" "$(DEPDIR)/resolve-warnless.Po"; else rm -f "$(DEPDIR)/resolve-warnless.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/warnless.c' object='resolve-warnless.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(resolve_CFLAGS) $(CFLAGS) -c -o resolve-warnless.o `test -f '$(top_srcdir)/lib/warnless.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/warnless.c
+
+resolve-warnless.obj: $(top_srcdir)/lib/warnless.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(resolve_CFLAGS) $(CFLAGS) -MT resolve-warnless.obj -MD -MP -MF "$(DEPDIR)/resolve-warnless.Tpo" -c -o resolve-warnless.obj `if test -f '$(top_srcdir)/lib/warnless.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/warnless.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/resolve-warnless.Tpo" "$(DEPDIR)/resolve-warnless.Po"; else rm -f "$(DEPDIR)/resolve-warnless.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/warnless.c' object='resolve-warnless.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(resolve_CFLAGS) $(CFLAGS) -c -o resolve-warnless.obj `if test -f '$(top_srcdir)/lib/warnless.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/warnless.c'; fi`
+
+resolve-getpart.o: getpart.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(resolve_CFLAGS) $(CFLAGS) -MT resolve-getpart.o -MD -MP -MF "$(DEPDIR)/resolve-getpart.Tpo" -c -o resolve-getpart.o `test -f 'getpart.c' || echo '$(srcdir)/'`getpart.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/resolve-getpart.Tpo" "$(DEPDIR)/resolve-getpart.Po"; else rm -f "$(DEPDIR)/resolve-getpart.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='getpart.c' object='resolve-getpart.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(resolve_CFLAGS) $(CFLAGS) -c -o resolve-getpart.o `test -f 'getpart.c' || echo '$(srcdir)/'`getpart.c
+
+resolve-getpart.obj: getpart.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(resolve_CFLAGS) $(CFLAGS) -MT resolve-getpart.obj -MD -MP -MF "$(DEPDIR)/resolve-getpart.Tpo" -c -o resolve-getpart.obj `if test -f 'getpart.c'; then $(CYGPATH_W) 'getpart.c'; else $(CYGPATH_W) '$(srcdir)/getpart.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/resolve-getpart.Tpo" "$(DEPDIR)/resolve-getpart.Po"; else rm -f "$(DEPDIR)/resolve-getpart.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='getpart.c' object='resolve-getpart.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(resolve_CFLAGS) $(CFLAGS) -c -o resolve-getpart.obj `if test -f 'getpart.c'; then $(CYGPATH_W) 'getpart.c'; else $(CYGPATH_W) '$(srcdir)/getpart.c'; fi`
+
+resolve-base64.o: $(top_srcdir)/lib/base64.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(resolve_CFLAGS) $(CFLAGS) -MT resolve-base64.o -MD -MP -MF "$(DEPDIR)/resolve-base64.Tpo" -c -o resolve-base64.o `test -f '$(top_srcdir)/lib/base64.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/base64.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/resolve-base64.Tpo" "$(DEPDIR)/resolve-base64.Po"; else rm -f "$(DEPDIR)/resolve-base64.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/base64.c' object='resolve-base64.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(resolve_CFLAGS) $(CFLAGS) -c -o resolve-base64.o `test -f '$(top_srcdir)/lib/base64.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/base64.c
+
+resolve-base64.obj: $(top_srcdir)/lib/base64.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(resolve_CFLAGS) $(CFLAGS) -MT resolve-base64.obj -MD -MP -MF "$(DEPDIR)/resolve-base64.Tpo" -c -o resolve-base64.obj `if test -f '$(top_srcdir)/lib/base64.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/base64.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/base64.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/resolve-base64.Tpo" "$(DEPDIR)/resolve-base64.Po"; else rm -f "$(DEPDIR)/resolve-base64.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/base64.c' object='resolve-base64.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(resolve_CFLAGS) $(CFLAGS) -c -o resolve-base64.obj `if test -f '$(top_srcdir)/lib/base64.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/base64.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/base64.c'; fi`
+
+resolve-memdebug.o: $(top_srcdir)/lib/memdebug.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(resolve_CFLAGS) $(CFLAGS) -MT resolve-memdebug.o -MD -MP -MF "$(DEPDIR)/resolve-memdebug.Tpo" -c -o resolve-memdebug.o `test -f '$(top_srcdir)/lib/memdebug.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/memdebug.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/resolve-memdebug.Tpo" "$(DEPDIR)/resolve-memdebug.Po"; else rm -f "$(DEPDIR)/resolve-memdebug.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/memdebug.c' object='resolve-memdebug.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(resolve_CFLAGS) $(CFLAGS) -c -o resolve-memdebug.o `test -f '$(top_srcdir)/lib/memdebug.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/memdebug.c
+
+resolve-memdebug.obj: $(top_srcdir)/lib/memdebug.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(resolve_CFLAGS) $(CFLAGS) -MT resolve-memdebug.obj -MD -MP -MF "$(DEPDIR)/resolve-memdebug.Tpo" -c -o resolve-memdebug.obj `if test -f '$(top_srcdir)/lib/memdebug.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/memdebug.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/memdebug.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/resolve-memdebug.Tpo" "$(DEPDIR)/resolve-memdebug.Po"; else rm -f "$(DEPDIR)/resolve-memdebug.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/memdebug.c' object='resolve-memdebug.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(resolve_CFLAGS) $(CFLAGS) -c -o resolve-memdebug.obj `if test -f '$(top_srcdir)/lib/memdebug.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/memdebug.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/memdebug.c'; fi`
+
+resolve-util.o: util.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(resolve_CFLAGS) $(CFLAGS) -MT resolve-util.o -MD -MP -MF "$(DEPDIR)/resolve-util.Tpo" -c -o resolve-util.o `test -f 'util.c' || echo '$(srcdir)/'`util.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/resolve-util.Tpo" "$(DEPDIR)/resolve-util.Po"; else rm -f "$(DEPDIR)/resolve-util.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='util.c' object='resolve-util.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(resolve_CFLAGS) $(CFLAGS) -c -o resolve-util.o `test -f 'util.c' || echo '$(srcdir)/'`util.c
+
+resolve-util.obj: util.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(resolve_CFLAGS) $(CFLAGS) -MT resolve-util.obj -MD -MP -MF "$(DEPDIR)/resolve-util.Tpo" -c -o resolve-util.obj `if test -f 'util.c'; then $(CYGPATH_W) 'util.c'; else $(CYGPATH_W) '$(srcdir)/util.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/resolve-util.Tpo" "$(DEPDIR)/resolve-util.Po"; else rm -f "$(DEPDIR)/resolve-util.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='util.c' object='resolve-util.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(resolve_CFLAGS) $(CFLAGS) -c -o resolve-util.obj `if test -f 'util.c'; then $(CYGPATH_W) 'util.c'; else $(CYGPATH_W) '$(srcdir)/util.c'; fi`
+
+resolve-resolve.o: resolve.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(resolve_CFLAGS) $(CFLAGS) -MT resolve-resolve.o -MD -MP -MF "$(DEPDIR)/resolve-resolve.Tpo" -c -o resolve-resolve.o `test -f 'resolve.c' || echo '$(srcdir)/'`resolve.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/resolve-resolve.Tpo" "$(DEPDIR)/resolve-resolve.Po"; else rm -f "$(DEPDIR)/resolve-resolve.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='resolve.c' object='resolve-resolve.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(resolve_CFLAGS) $(CFLAGS) -c -o resolve-resolve.o `test -f 'resolve.c' || echo '$(srcdir)/'`resolve.c
+
+resolve-resolve.obj: resolve.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(resolve_CFLAGS) $(CFLAGS) -MT resolve-resolve.obj -MD -MP -MF "$(DEPDIR)/resolve-resolve.Tpo" -c -o resolve-resolve.obj `if test -f 'resolve.c'; then $(CYGPATH_W) 'resolve.c'; else $(CYGPATH_W) '$(srcdir)/resolve.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/resolve-resolve.Tpo" "$(DEPDIR)/resolve-resolve.Po"; else rm -f "$(DEPDIR)/resolve-resolve.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='resolve.c' object='resolve-resolve.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(resolve_CFLAGS) $(CFLAGS) -c -o resolve-resolve.obj `if test -f 'resolve.c'; then $(CYGPATH_W) 'resolve.c'; else $(CYGPATH_W) '$(srcdir)/resolve.c'; fi`
+
+rtspd-mprintf.o: $(top_srcdir)/lib/mprintf.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rtspd_CFLAGS) $(CFLAGS) -MT rtspd-mprintf.o -MD -MP -MF "$(DEPDIR)/rtspd-mprintf.Tpo" -c -o rtspd-mprintf.o `test -f '$(top_srcdir)/lib/mprintf.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/mprintf.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/rtspd-mprintf.Tpo" "$(DEPDIR)/rtspd-mprintf.Po"; else rm -f "$(DEPDIR)/rtspd-mprintf.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/mprintf.c' object='rtspd-mprintf.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rtspd_CFLAGS) $(CFLAGS) -c -o rtspd-mprintf.o `test -f '$(top_srcdir)/lib/mprintf.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/mprintf.c
+
+rtspd-mprintf.obj: $(top_srcdir)/lib/mprintf.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rtspd_CFLAGS) $(CFLAGS) -MT rtspd-mprintf.obj -MD -MP -MF "$(DEPDIR)/rtspd-mprintf.Tpo" -c -o rtspd-mprintf.obj `if test -f '$(top_srcdir)/lib/mprintf.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/mprintf.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/mprintf.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/rtspd-mprintf.Tpo" "$(DEPDIR)/rtspd-mprintf.Po"; else rm -f "$(DEPDIR)/rtspd-mprintf.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/mprintf.c' object='rtspd-mprintf.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rtspd_CFLAGS) $(CFLAGS) -c -o rtspd-mprintf.obj `if test -f '$(top_srcdir)/lib/mprintf.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/mprintf.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/mprintf.c'; fi`
+
+rtspd-nonblock.o: $(top_srcdir)/lib/nonblock.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rtspd_CFLAGS) $(CFLAGS) -MT rtspd-nonblock.o -MD -MP -MF "$(DEPDIR)/rtspd-nonblock.Tpo" -c -o rtspd-nonblock.o `test -f '$(top_srcdir)/lib/nonblock.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/nonblock.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/rtspd-nonblock.Tpo" "$(DEPDIR)/rtspd-nonblock.Po"; else rm -f "$(DEPDIR)/rtspd-nonblock.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/nonblock.c' object='rtspd-nonblock.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rtspd_CFLAGS) $(CFLAGS) -c -o rtspd-nonblock.o `test -f '$(top_srcdir)/lib/nonblock.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/nonblock.c
+
+rtspd-nonblock.obj: $(top_srcdir)/lib/nonblock.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rtspd_CFLAGS) $(CFLAGS) -MT rtspd-nonblock.obj -MD -MP -MF "$(DEPDIR)/rtspd-nonblock.Tpo" -c -o rtspd-nonblock.obj `if test -f '$(top_srcdir)/lib/nonblock.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/nonblock.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/nonblock.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/rtspd-nonblock.Tpo" "$(DEPDIR)/rtspd-nonblock.Po"; else rm -f "$(DEPDIR)/rtspd-nonblock.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/nonblock.c' object='rtspd-nonblock.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rtspd_CFLAGS) $(CFLAGS) -c -o rtspd-nonblock.obj `if test -f '$(top_srcdir)/lib/nonblock.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/nonblock.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/nonblock.c'; fi`
+
+rtspd-strequal.o: $(top_srcdir)/lib/strequal.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rtspd_CFLAGS) $(CFLAGS) -MT rtspd-strequal.o -MD -MP -MF "$(DEPDIR)/rtspd-strequal.Tpo" -c -o rtspd-strequal.o `test -f '$(top_srcdir)/lib/strequal.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/strequal.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/rtspd-strequal.Tpo" "$(DEPDIR)/rtspd-strequal.Po"; else rm -f "$(DEPDIR)/rtspd-strequal.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/strequal.c' object='rtspd-strequal.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rtspd_CFLAGS) $(CFLAGS) -c -o rtspd-strequal.o `test -f '$(top_srcdir)/lib/strequal.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/strequal.c
+
+rtspd-strequal.obj: $(top_srcdir)/lib/strequal.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rtspd_CFLAGS) $(CFLAGS) -MT rtspd-strequal.obj -MD -MP -MF "$(DEPDIR)/rtspd-strequal.Tpo" -c -o rtspd-strequal.obj `if test -f '$(top_srcdir)/lib/strequal.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/strequal.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/strequal.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/rtspd-strequal.Tpo" "$(DEPDIR)/rtspd-strequal.Po"; else rm -f "$(DEPDIR)/rtspd-strequal.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/strequal.c' object='rtspd-strequal.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rtspd_CFLAGS) $(CFLAGS) -c -o rtspd-strequal.obj `if test -f '$(top_srcdir)/lib/strequal.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/strequal.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/strequal.c'; fi`
+
+rtspd-strtoofft.o: $(top_srcdir)/lib/strtoofft.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rtspd_CFLAGS) $(CFLAGS) -MT rtspd-strtoofft.o -MD -MP -MF "$(DEPDIR)/rtspd-strtoofft.Tpo" -c -o rtspd-strtoofft.o `test -f '$(top_srcdir)/lib/strtoofft.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/strtoofft.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/rtspd-strtoofft.Tpo" "$(DEPDIR)/rtspd-strtoofft.Po"; else rm -f "$(DEPDIR)/rtspd-strtoofft.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/strtoofft.c' object='rtspd-strtoofft.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rtspd_CFLAGS) $(CFLAGS) -c -o rtspd-strtoofft.o `test -f '$(top_srcdir)/lib/strtoofft.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/strtoofft.c
+
+rtspd-strtoofft.obj: $(top_srcdir)/lib/strtoofft.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rtspd_CFLAGS) $(CFLAGS) -MT rtspd-strtoofft.obj -MD -MP -MF "$(DEPDIR)/rtspd-strtoofft.Tpo" -c -o rtspd-strtoofft.obj `if test -f '$(top_srcdir)/lib/strtoofft.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/strtoofft.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/strtoofft.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/rtspd-strtoofft.Tpo" "$(DEPDIR)/rtspd-strtoofft.Po"; else rm -f "$(DEPDIR)/rtspd-strtoofft.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/strtoofft.c' object='rtspd-strtoofft.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rtspd_CFLAGS) $(CFLAGS) -c -o rtspd-strtoofft.obj `if test -f '$(top_srcdir)/lib/strtoofft.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/strtoofft.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/strtoofft.c'; fi`
+
+rtspd-timeval.o: $(top_srcdir)/lib/timeval.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rtspd_CFLAGS) $(CFLAGS) -MT rtspd-timeval.o -MD -MP -MF "$(DEPDIR)/rtspd-timeval.Tpo" -c -o rtspd-timeval.o `test -f '$(top_srcdir)/lib/timeval.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/timeval.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/rtspd-timeval.Tpo" "$(DEPDIR)/rtspd-timeval.Po"; else rm -f "$(DEPDIR)/rtspd-timeval.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/timeval.c' object='rtspd-timeval.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rtspd_CFLAGS) $(CFLAGS) -c -o rtspd-timeval.o `test -f '$(top_srcdir)/lib/timeval.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/timeval.c
+
+rtspd-timeval.obj: $(top_srcdir)/lib/timeval.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rtspd_CFLAGS) $(CFLAGS) -MT rtspd-timeval.obj -MD -MP -MF "$(DEPDIR)/rtspd-timeval.Tpo" -c -o rtspd-timeval.obj `if test -f '$(top_srcdir)/lib/timeval.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/timeval.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/timeval.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/rtspd-timeval.Tpo" "$(DEPDIR)/rtspd-timeval.Po"; else rm -f "$(DEPDIR)/rtspd-timeval.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/timeval.c' object='rtspd-timeval.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rtspd_CFLAGS) $(CFLAGS) -c -o rtspd-timeval.obj `if test -f '$(top_srcdir)/lib/timeval.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/timeval.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/timeval.c'; fi`
+
+rtspd-warnless.o: $(top_srcdir)/lib/warnless.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rtspd_CFLAGS) $(CFLAGS) -MT rtspd-warnless.o -MD -MP -MF "$(DEPDIR)/rtspd-warnless.Tpo" -c -o rtspd-warnless.o `test -f '$(top_srcdir)/lib/warnless.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/warnless.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/rtspd-warnless.Tpo" "$(DEPDIR)/rtspd-warnless.Po"; else rm -f "$(DEPDIR)/rtspd-warnless.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/warnless.c' object='rtspd-warnless.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rtspd_CFLAGS) $(CFLAGS) -c -o rtspd-warnless.o `test -f '$(top_srcdir)/lib/warnless.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/warnless.c
+
+rtspd-warnless.obj: $(top_srcdir)/lib/warnless.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rtspd_CFLAGS) $(CFLAGS) -MT rtspd-warnless.obj -MD -MP -MF "$(DEPDIR)/rtspd-warnless.Tpo" -c -o rtspd-warnless.obj `if test -f '$(top_srcdir)/lib/warnless.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/warnless.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/rtspd-warnless.Tpo" "$(DEPDIR)/rtspd-warnless.Po"; else rm -f "$(DEPDIR)/rtspd-warnless.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/warnless.c' object='rtspd-warnless.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rtspd_CFLAGS) $(CFLAGS) -c -o rtspd-warnless.obj `if test -f '$(top_srcdir)/lib/warnless.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/warnless.c'; fi`
+
+rtspd-getpart.o: getpart.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rtspd_CFLAGS) $(CFLAGS) -MT rtspd-getpart.o -MD -MP -MF "$(DEPDIR)/rtspd-getpart.Tpo" -c -o rtspd-getpart.o `test -f 'getpart.c' || echo '$(srcdir)/'`getpart.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/rtspd-getpart.Tpo" "$(DEPDIR)/rtspd-getpart.Po"; else rm -f "$(DEPDIR)/rtspd-getpart.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='getpart.c' object='rtspd-getpart.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rtspd_CFLAGS) $(CFLAGS) -c -o rtspd-getpart.o `test -f 'getpart.c' || echo '$(srcdir)/'`getpart.c
+
+rtspd-getpart.obj: getpart.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rtspd_CFLAGS) $(CFLAGS) -MT rtspd-getpart.obj -MD -MP -MF "$(DEPDIR)/rtspd-getpart.Tpo" -c -o rtspd-getpart.obj `if test -f 'getpart.c'; then $(CYGPATH_W) 'getpart.c'; else $(CYGPATH_W) '$(srcdir)/getpart.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/rtspd-getpart.Tpo" "$(DEPDIR)/rtspd-getpart.Po"; else rm -f "$(DEPDIR)/rtspd-getpart.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='getpart.c' object='rtspd-getpart.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rtspd_CFLAGS) $(CFLAGS) -c -o rtspd-getpart.obj `if test -f 'getpart.c'; then $(CYGPATH_W) 'getpart.c'; else $(CYGPATH_W) '$(srcdir)/getpart.c'; fi`
+
+rtspd-base64.o: $(top_srcdir)/lib/base64.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rtspd_CFLAGS) $(CFLAGS) -MT rtspd-base64.o -MD -MP -MF "$(DEPDIR)/rtspd-base64.Tpo" -c -o rtspd-base64.o `test -f '$(top_srcdir)/lib/base64.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/base64.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/rtspd-base64.Tpo" "$(DEPDIR)/rtspd-base64.Po"; else rm -f "$(DEPDIR)/rtspd-base64.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/base64.c' object='rtspd-base64.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rtspd_CFLAGS) $(CFLAGS) -c -o rtspd-base64.o `test -f '$(top_srcdir)/lib/base64.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/base64.c
+
+rtspd-base64.obj: $(top_srcdir)/lib/base64.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rtspd_CFLAGS) $(CFLAGS) -MT rtspd-base64.obj -MD -MP -MF "$(DEPDIR)/rtspd-base64.Tpo" -c -o rtspd-base64.obj `if test -f '$(top_srcdir)/lib/base64.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/base64.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/base64.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/rtspd-base64.Tpo" "$(DEPDIR)/rtspd-base64.Po"; else rm -f "$(DEPDIR)/rtspd-base64.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/base64.c' object='rtspd-base64.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rtspd_CFLAGS) $(CFLAGS) -c -o rtspd-base64.obj `if test -f '$(top_srcdir)/lib/base64.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/base64.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/base64.c'; fi`
+
+rtspd-memdebug.o: $(top_srcdir)/lib/memdebug.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rtspd_CFLAGS) $(CFLAGS) -MT rtspd-memdebug.o -MD -MP -MF "$(DEPDIR)/rtspd-memdebug.Tpo" -c -o rtspd-memdebug.o `test -f '$(top_srcdir)/lib/memdebug.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/memdebug.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/rtspd-memdebug.Tpo" "$(DEPDIR)/rtspd-memdebug.Po"; else rm -f "$(DEPDIR)/rtspd-memdebug.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/memdebug.c' object='rtspd-memdebug.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rtspd_CFLAGS) $(CFLAGS) -c -o rtspd-memdebug.o `test -f '$(top_srcdir)/lib/memdebug.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/memdebug.c
+
+rtspd-memdebug.obj: $(top_srcdir)/lib/memdebug.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rtspd_CFLAGS) $(CFLAGS) -MT rtspd-memdebug.obj -MD -MP -MF "$(DEPDIR)/rtspd-memdebug.Tpo" -c -o rtspd-memdebug.obj `if test -f '$(top_srcdir)/lib/memdebug.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/memdebug.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/memdebug.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/rtspd-memdebug.Tpo" "$(DEPDIR)/rtspd-memdebug.Po"; else rm -f "$(DEPDIR)/rtspd-memdebug.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/memdebug.c' object='rtspd-memdebug.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rtspd_CFLAGS) $(CFLAGS) -c -o rtspd-memdebug.obj `if test -f '$(top_srcdir)/lib/memdebug.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/memdebug.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/memdebug.c'; fi`
+
+rtspd-util.o: util.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rtspd_CFLAGS) $(CFLAGS) -MT rtspd-util.o -MD -MP -MF "$(DEPDIR)/rtspd-util.Tpo" -c -o rtspd-util.o `test -f 'util.c' || echo '$(srcdir)/'`util.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/rtspd-util.Tpo" "$(DEPDIR)/rtspd-util.Po"; else rm -f "$(DEPDIR)/rtspd-util.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='util.c' object='rtspd-util.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rtspd_CFLAGS) $(CFLAGS) -c -o rtspd-util.o `test -f 'util.c' || echo '$(srcdir)/'`util.c
+
+rtspd-util.obj: util.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rtspd_CFLAGS) $(CFLAGS) -MT rtspd-util.obj -MD -MP -MF "$(DEPDIR)/rtspd-util.Tpo" -c -o rtspd-util.obj `if test -f 'util.c'; then $(CYGPATH_W) 'util.c'; else $(CYGPATH_W) '$(srcdir)/util.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/rtspd-util.Tpo" "$(DEPDIR)/rtspd-util.Po"; else rm -f "$(DEPDIR)/rtspd-util.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='util.c' object='rtspd-util.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rtspd_CFLAGS) $(CFLAGS) -c -o rtspd-util.obj `if test -f 'util.c'; then $(CYGPATH_W) 'util.c'; else $(CYGPATH_W) '$(srcdir)/util.c'; fi`
+
+rtspd-rtspd.o: rtspd.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rtspd_CFLAGS) $(CFLAGS) -MT rtspd-rtspd.o -MD -MP -MF "$(DEPDIR)/rtspd-rtspd.Tpo" -c -o rtspd-rtspd.o `test -f 'rtspd.c' || echo '$(srcdir)/'`rtspd.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/rtspd-rtspd.Tpo" "$(DEPDIR)/rtspd-rtspd.Po"; else rm -f "$(DEPDIR)/rtspd-rtspd.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='rtspd.c' object='rtspd-rtspd.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rtspd_CFLAGS) $(CFLAGS) -c -o rtspd-rtspd.o `test -f 'rtspd.c' || echo '$(srcdir)/'`rtspd.c
+
+rtspd-rtspd.obj: rtspd.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rtspd_CFLAGS) $(CFLAGS) -MT rtspd-rtspd.obj -MD -MP -MF "$(DEPDIR)/rtspd-rtspd.Tpo" -c -o rtspd-rtspd.obj `if test -f 'rtspd.c'; then $(CYGPATH_W) 'rtspd.c'; else $(CYGPATH_W) '$(srcdir)/rtspd.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/rtspd-rtspd.Tpo" "$(DEPDIR)/rtspd-rtspd.Po"; else rm -f "$(DEPDIR)/rtspd-rtspd.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='rtspd.c' object='rtspd-rtspd.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rtspd_CFLAGS) $(CFLAGS) -c -o rtspd-rtspd.obj `if test -f 'rtspd.c'; then $(CYGPATH_W) 'rtspd.c'; else $(CYGPATH_W) '$(srcdir)/rtspd.c'; fi`
+
+sockfilt-mprintf.o: $(top_srcdir)/lib/mprintf.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sockfilt_CFLAGS) $(CFLAGS) -MT sockfilt-mprintf.o -MD -MP -MF "$(DEPDIR)/sockfilt-mprintf.Tpo" -c -o sockfilt-mprintf.o `test -f '$(top_srcdir)/lib/mprintf.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/mprintf.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/sockfilt-mprintf.Tpo" "$(DEPDIR)/sockfilt-mprintf.Po"; else rm -f "$(DEPDIR)/sockfilt-mprintf.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/mprintf.c' object='sockfilt-mprintf.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sockfilt_CFLAGS) $(CFLAGS) -c -o sockfilt-mprintf.o `test -f '$(top_srcdir)/lib/mprintf.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/mprintf.c
+
+sockfilt-mprintf.obj: $(top_srcdir)/lib/mprintf.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sockfilt_CFLAGS) $(CFLAGS) -MT sockfilt-mprintf.obj -MD -MP -MF "$(DEPDIR)/sockfilt-mprintf.Tpo" -c -o sockfilt-mprintf.obj `if test -f '$(top_srcdir)/lib/mprintf.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/mprintf.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/mprintf.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/sockfilt-mprintf.Tpo" "$(DEPDIR)/sockfilt-mprintf.Po"; else rm -f "$(DEPDIR)/sockfilt-mprintf.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/mprintf.c' object='sockfilt-mprintf.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sockfilt_CFLAGS) $(CFLAGS) -c -o sockfilt-mprintf.obj `if test -f '$(top_srcdir)/lib/mprintf.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/mprintf.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/mprintf.c'; fi`
+
+sockfilt-nonblock.o: $(top_srcdir)/lib/nonblock.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sockfilt_CFLAGS) $(CFLAGS) -MT sockfilt-nonblock.o -MD -MP -MF "$(DEPDIR)/sockfilt-nonblock.Tpo" -c -o sockfilt-nonblock.o `test -f '$(top_srcdir)/lib/nonblock.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/nonblock.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/sockfilt-nonblock.Tpo" "$(DEPDIR)/sockfilt-nonblock.Po"; else rm -f "$(DEPDIR)/sockfilt-nonblock.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/nonblock.c' object='sockfilt-nonblock.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sockfilt_CFLAGS) $(CFLAGS) -c -o sockfilt-nonblock.o `test -f '$(top_srcdir)/lib/nonblock.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/nonblock.c
+
+sockfilt-nonblock.obj: $(top_srcdir)/lib/nonblock.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sockfilt_CFLAGS) $(CFLAGS) -MT sockfilt-nonblock.obj -MD -MP -MF "$(DEPDIR)/sockfilt-nonblock.Tpo" -c -o sockfilt-nonblock.obj `if test -f '$(top_srcdir)/lib/nonblock.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/nonblock.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/nonblock.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/sockfilt-nonblock.Tpo" "$(DEPDIR)/sockfilt-nonblock.Po"; else rm -f "$(DEPDIR)/sockfilt-nonblock.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/nonblock.c' object='sockfilt-nonblock.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sockfilt_CFLAGS) $(CFLAGS) -c -o sockfilt-nonblock.obj `if test -f '$(top_srcdir)/lib/nonblock.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/nonblock.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/nonblock.c'; fi`
+
+sockfilt-strequal.o: $(top_srcdir)/lib/strequal.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sockfilt_CFLAGS) $(CFLAGS) -MT sockfilt-strequal.o -MD -MP -MF "$(DEPDIR)/sockfilt-strequal.Tpo" -c -o sockfilt-strequal.o `test -f '$(top_srcdir)/lib/strequal.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/strequal.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/sockfilt-strequal.Tpo" "$(DEPDIR)/sockfilt-strequal.Po"; else rm -f "$(DEPDIR)/sockfilt-strequal.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/strequal.c' object='sockfilt-strequal.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sockfilt_CFLAGS) $(CFLAGS) -c -o sockfilt-strequal.o `test -f '$(top_srcdir)/lib/strequal.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/strequal.c
+
+sockfilt-strequal.obj: $(top_srcdir)/lib/strequal.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sockfilt_CFLAGS) $(CFLAGS) -MT sockfilt-strequal.obj -MD -MP -MF "$(DEPDIR)/sockfilt-strequal.Tpo" -c -o sockfilt-strequal.obj `if test -f '$(top_srcdir)/lib/strequal.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/strequal.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/strequal.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/sockfilt-strequal.Tpo" "$(DEPDIR)/sockfilt-strequal.Po"; else rm -f "$(DEPDIR)/sockfilt-strequal.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/strequal.c' object='sockfilt-strequal.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sockfilt_CFLAGS) $(CFLAGS) -c -o sockfilt-strequal.obj `if test -f '$(top_srcdir)/lib/strequal.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/strequal.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/strequal.c'; fi`
+
+sockfilt-strtoofft.o: $(top_srcdir)/lib/strtoofft.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sockfilt_CFLAGS) $(CFLAGS) -MT sockfilt-strtoofft.o -MD -MP -MF "$(DEPDIR)/sockfilt-strtoofft.Tpo" -c -o sockfilt-strtoofft.o `test -f '$(top_srcdir)/lib/strtoofft.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/strtoofft.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/sockfilt-strtoofft.Tpo" "$(DEPDIR)/sockfilt-strtoofft.Po"; else rm -f "$(DEPDIR)/sockfilt-strtoofft.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/strtoofft.c' object='sockfilt-strtoofft.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sockfilt_CFLAGS) $(CFLAGS) -c -o sockfilt-strtoofft.o `test -f '$(top_srcdir)/lib/strtoofft.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/strtoofft.c
+
+sockfilt-strtoofft.obj: $(top_srcdir)/lib/strtoofft.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sockfilt_CFLAGS) $(CFLAGS) -MT sockfilt-strtoofft.obj -MD -MP -MF "$(DEPDIR)/sockfilt-strtoofft.Tpo" -c -o sockfilt-strtoofft.obj `if test -f '$(top_srcdir)/lib/strtoofft.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/strtoofft.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/strtoofft.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/sockfilt-strtoofft.Tpo" "$(DEPDIR)/sockfilt-strtoofft.Po"; else rm -f "$(DEPDIR)/sockfilt-strtoofft.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/strtoofft.c' object='sockfilt-strtoofft.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sockfilt_CFLAGS) $(CFLAGS) -c -o sockfilt-strtoofft.obj `if test -f '$(top_srcdir)/lib/strtoofft.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/strtoofft.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/strtoofft.c'; fi`
+
+sockfilt-timeval.o: $(top_srcdir)/lib/timeval.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sockfilt_CFLAGS) $(CFLAGS) -MT sockfilt-timeval.o -MD -MP -MF "$(DEPDIR)/sockfilt-timeval.Tpo" -c -o sockfilt-timeval.o `test -f '$(top_srcdir)/lib/timeval.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/timeval.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/sockfilt-timeval.Tpo" "$(DEPDIR)/sockfilt-timeval.Po"; else rm -f "$(DEPDIR)/sockfilt-timeval.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/timeval.c' object='sockfilt-timeval.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sockfilt_CFLAGS) $(CFLAGS) -c -o sockfilt-timeval.o `test -f '$(top_srcdir)/lib/timeval.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/timeval.c
+
+sockfilt-timeval.obj: $(top_srcdir)/lib/timeval.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sockfilt_CFLAGS) $(CFLAGS) -MT sockfilt-timeval.obj -MD -MP -MF "$(DEPDIR)/sockfilt-timeval.Tpo" -c -o sockfilt-timeval.obj `if test -f '$(top_srcdir)/lib/timeval.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/timeval.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/timeval.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/sockfilt-timeval.Tpo" "$(DEPDIR)/sockfilt-timeval.Po"; else rm -f "$(DEPDIR)/sockfilt-timeval.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/timeval.c' object='sockfilt-timeval.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sockfilt_CFLAGS) $(CFLAGS) -c -o sockfilt-timeval.obj `if test -f '$(top_srcdir)/lib/timeval.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/timeval.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/timeval.c'; fi`
+
+sockfilt-warnless.o: $(top_srcdir)/lib/warnless.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sockfilt_CFLAGS) $(CFLAGS) -MT sockfilt-warnless.o -MD -MP -MF "$(DEPDIR)/sockfilt-warnless.Tpo" -c -o sockfilt-warnless.o `test -f '$(top_srcdir)/lib/warnless.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/warnless.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/sockfilt-warnless.Tpo" "$(DEPDIR)/sockfilt-warnless.Po"; else rm -f "$(DEPDIR)/sockfilt-warnless.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/warnless.c' object='sockfilt-warnless.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sockfilt_CFLAGS) $(CFLAGS) -c -o sockfilt-warnless.o `test -f '$(top_srcdir)/lib/warnless.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/warnless.c
+
+sockfilt-warnless.obj: $(top_srcdir)/lib/warnless.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sockfilt_CFLAGS) $(CFLAGS) -MT sockfilt-warnless.obj -MD -MP -MF "$(DEPDIR)/sockfilt-warnless.Tpo" -c -o sockfilt-warnless.obj `if test -f '$(top_srcdir)/lib/warnless.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/warnless.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/sockfilt-warnless.Tpo" "$(DEPDIR)/sockfilt-warnless.Po"; else rm -f "$(DEPDIR)/sockfilt-warnless.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/warnless.c' object='sockfilt-warnless.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sockfilt_CFLAGS) $(CFLAGS) -c -o sockfilt-warnless.obj `if test -f '$(top_srcdir)/lib/warnless.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/warnless.c'; fi`
+
+sockfilt-getpart.o: getpart.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sockfilt_CFLAGS) $(CFLAGS) -MT sockfilt-getpart.o -MD -MP -MF "$(DEPDIR)/sockfilt-getpart.Tpo" -c -o sockfilt-getpart.o `test -f 'getpart.c' || echo '$(srcdir)/'`getpart.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/sockfilt-getpart.Tpo" "$(DEPDIR)/sockfilt-getpart.Po"; else rm -f "$(DEPDIR)/sockfilt-getpart.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='getpart.c' object='sockfilt-getpart.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sockfilt_CFLAGS) $(CFLAGS) -c -o sockfilt-getpart.o `test -f 'getpart.c' || echo '$(srcdir)/'`getpart.c
+
+sockfilt-getpart.obj: getpart.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sockfilt_CFLAGS) $(CFLAGS) -MT sockfilt-getpart.obj -MD -MP -MF "$(DEPDIR)/sockfilt-getpart.Tpo" -c -o sockfilt-getpart.obj `if test -f 'getpart.c'; then $(CYGPATH_W) 'getpart.c'; else $(CYGPATH_W) '$(srcdir)/getpart.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/sockfilt-getpart.Tpo" "$(DEPDIR)/sockfilt-getpart.Po"; else rm -f "$(DEPDIR)/sockfilt-getpart.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='getpart.c' object='sockfilt-getpart.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sockfilt_CFLAGS) $(CFLAGS) -c -o sockfilt-getpart.obj `if test -f 'getpart.c'; then $(CYGPATH_W) 'getpart.c'; else $(CYGPATH_W) '$(srcdir)/getpart.c'; fi`
+
+sockfilt-base64.o: $(top_srcdir)/lib/base64.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sockfilt_CFLAGS) $(CFLAGS) -MT sockfilt-base64.o -MD -MP -MF "$(DEPDIR)/sockfilt-base64.Tpo" -c -o sockfilt-base64.o `test -f '$(top_srcdir)/lib/base64.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/base64.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/sockfilt-base64.Tpo" "$(DEPDIR)/sockfilt-base64.Po"; else rm -f "$(DEPDIR)/sockfilt-base64.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/base64.c' object='sockfilt-base64.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sockfilt_CFLAGS) $(CFLAGS) -c -o sockfilt-base64.o `test -f '$(top_srcdir)/lib/base64.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/base64.c
+
+sockfilt-base64.obj: $(top_srcdir)/lib/base64.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sockfilt_CFLAGS) $(CFLAGS) -MT sockfilt-base64.obj -MD -MP -MF "$(DEPDIR)/sockfilt-base64.Tpo" -c -o sockfilt-base64.obj `if test -f '$(top_srcdir)/lib/base64.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/base64.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/base64.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/sockfilt-base64.Tpo" "$(DEPDIR)/sockfilt-base64.Po"; else rm -f "$(DEPDIR)/sockfilt-base64.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/base64.c' object='sockfilt-base64.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sockfilt_CFLAGS) $(CFLAGS) -c -o sockfilt-base64.obj `if test -f '$(top_srcdir)/lib/base64.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/base64.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/base64.c'; fi`
+
+sockfilt-memdebug.o: $(top_srcdir)/lib/memdebug.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sockfilt_CFLAGS) $(CFLAGS) -MT sockfilt-memdebug.o -MD -MP -MF "$(DEPDIR)/sockfilt-memdebug.Tpo" -c -o sockfilt-memdebug.o `test -f '$(top_srcdir)/lib/memdebug.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/memdebug.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/sockfilt-memdebug.Tpo" "$(DEPDIR)/sockfilt-memdebug.Po"; else rm -f "$(DEPDIR)/sockfilt-memdebug.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/memdebug.c' object='sockfilt-memdebug.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sockfilt_CFLAGS) $(CFLAGS) -c -o sockfilt-memdebug.o `test -f '$(top_srcdir)/lib/memdebug.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/memdebug.c
+
+sockfilt-memdebug.obj: $(top_srcdir)/lib/memdebug.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sockfilt_CFLAGS) $(CFLAGS) -MT sockfilt-memdebug.obj -MD -MP -MF "$(DEPDIR)/sockfilt-memdebug.Tpo" -c -o sockfilt-memdebug.obj `if test -f '$(top_srcdir)/lib/memdebug.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/memdebug.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/memdebug.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/sockfilt-memdebug.Tpo" "$(DEPDIR)/sockfilt-memdebug.Po"; else rm -f "$(DEPDIR)/sockfilt-memdebug.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/memdebug.c' object='sockfilt-memdebug.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sockfilt_CFLAGS) $(CFLAGS) -c -o sockfilt-memdebug.obj `if test -f '$(top_srcdir)/lib/memdebug.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/memdebug.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/memdebug.c'; fi`
+
+sockfilt-util.o: util.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sockfilt_CFLAGS) $(CFLAGS) -MT sockfilt-util.o -MD -MP -MF "$(DEPDIR)/sockfilt-util.Tpo" -c -o sockfilt-util.o `test -f 'util.c' || echo '$(srcdir)/'`util.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/sockfilt-util.Tpo" "$(DEPDIR)/sockfilt-util.Po"; else rm -f "$(DEPDIR)/sockfilt-util.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='util.c' object='sockfilt-util.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sockfilt_CFLAGS) $(CFLAGS) -c -o sockfilt-util.o `test -f 'util.c' || echo '$(srcdir)/'`util.c
+
+sockfilt-util.obj: util.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sockfilt_CFLAGS) $(CFLAGS) -MT sockfilt-util.obj -MD -MP -MF "$(DEPDIR)/sockfilt-util.Tpo" -c -o sockfilt-util.obj `if test -f 'util.c'; then $(CYGPATH_W) 'util.c'; else $(CYGPATH_W) '$(srcdir)/util.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/sockfilt-util.Tpo" "$(DEPDIR)/sockfilt-util.Po"; else rm -f "$(DEPDIR)/sockfilt-util.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='util.c' object='sockfilt-util.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sockfilt_CFLAGS) $(CFLAGS) -c -o sockfilt-util.obj `if test -f 'util.c'; then $(CYGPATH_W) 'util.c'; else $(CYGPATH_W) '$(srcdir)/util.c'; fi`
+
+sockfilt-sockfilt.o: sockfilt.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sockfilt_CFLAGS) $(CFLAGS) -MT sockfilt-sockfilt.o -MD -MP -MF "$(DEPDIR)/sockfilt-sockfilt.Tpo" -c -o sockfilt-sockfilt.o `test -f 'sockfilt.c' || echo '$(srcdir)/'`sockfilt.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/sockfilt-sockfilt.Tpo" "$(DEPDIR)/sockfilt-sockfilt.Po"; else rm -f "$(DEPDIR)/sockfilt-sockfilt.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sockfilt.c' object='sockfilt-sockfilt.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sockfilt_CFLAGS) $(CFLAGS) -c -o sockfilt-sockfilt.o `test -f 'sockfilt.c' || echo '$(srcdir)/'`sockfilt.c
+
+sockfilt-sockfilt.obj: sockfilt.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sockfilt_CFLAGS) $(CFLAGS) -MT sockfilt-sockfilt.obj -MD -MP -MF "$(DEPDIR)/sockfilt-sockfilt.Tpo" -c -o sockfilt-sockfilt.obj `if test -f 'sockfilt.c'; then $(CYGPATH_W) 'sockfilt.c'; else $(CYGPATH_W) '$(srcdir)/sockfilt.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/sockfilt-sockfilt.Tpo" "$(DEPDIR)/sockfilt-sockfilt.Po"; else rm -f "$(DEPDIR)/sockfilt-sockfilt.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sockfilt.c' object='sockfilt-sockfilt.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sockfilt_CFLAGS) $(CFLAGS) -c -o sockfilt-sockfilt.obj `if test -f 'sockfilt.c'; then $(CYGPATH_W) 'sockfilt.c'; else $(CYGPATH_W) '$(srcdir)/sockfilt.c'; fi`
+
+sockfilt-inet_pton.o: $(top_srcdir)/lib/inet_pton.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sockfilt_CFLAGS) $(CFLAGS) -MT sockfilt-inet_pton.o -MD -MP -MF "$(DEPDIR)/sockfilt-inet_pton.Tpo" -c -o sockfilt-inet_pton.o `test -f '$(top_srcdir)/lib/inet_pton.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/inet_pton.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/sockfilt-inet_pton.Tpo" "$(DEPDIR)/sockfilt-inet_pton.Po"; else rm -f "$(DEPDIR)/sockfilt-inet_pton.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/inet_pton.c' object='sockfilt-inet_pton.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sockfilt_CFLAGS) $(CFLAGS) -c -o sockfilt-inet_pton.o `test -f '$(top_srcdir)/lib/inet_pton.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/inet_pton.c
+
+sockfilt-inet_pton.obj: $(top_srcdir)/lib/inet_pton.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sockfilt_CFLAGS) $(CFLAGS) -MT sockfilt-inet_pton.obj -MD -MP -MF "$(DEPDIR)/sockfilt-inet_pton.Tpo" -c -o sockfilt-inet_pton.obj `if test -f '$(top_srcdir)/lib/inet_pton.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/inet_pton.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/inet_pton.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/sockfilt-inet_pton.Tpo" "$(DEPDIR)/sockfilt-inet_pton.Po"; else rm -f "$(DEPDIR)/sockfilt-inet_pton.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/inet_pton.c' object='sockfilt-inet_pton.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sockfilt_CFLAGS) $(CFLAGS) -c -o sockfilt-inet_pton.obj `if test -f '$(top_srcdir)/lib/inet_pton.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/inet_pton.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/inet_pton.c'; fi`
+
+sws-mprintf.o: $(top_srcdir)/lib/mprintf.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sws_CFLAGS) $(CFLAGS) -MT sws-mprintf.o -MD -MP -MF "$(DEPDIR)/sws-mprintf.Tpo" -c -o sws-mprintf.o `test -f '$(top_srcdir)/lib/mprintf.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/mprintf.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/sws-mprintf.Tpo" "$(DEPDIR)/sws-mprintf.Po"; else rm -f "$(DEPDIR)/sws-mprintf.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/mprintf.c' object='sws-mprintf.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sws_CFLAGS) $(CFLAGS) -c -o sws-mprintf.o `test -f '$(top_srcdir)/lib/mprintf.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/mprintf.c
+
+sws-mprintf.obj: $(top_srcdir)/lib/mprintf.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sws_CFLAGS) $(CFLAGS) -MT sws-mprintf.obj -MD -MP -MF "$(DEPDIR)/sws-mprintf.Tpo" -c -o sws-mprintf.obj `if test -f '$(top_srcdir)/lib/mprintf.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/mprintf.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/mprintf.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/sws-mprintf.Tpo" "$(DEPDIR)/sws-mprintf.Po"; else rm -f "$(DEPDIR)/sws-mprintf.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/mprintf.c' object='sws-mprintf.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sws_CFLAGS) $(CFLAGS) -c -o sws-mprintf.obj `if test -f '$(top_srcdir)/lib/mprintf.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/mprintf.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/mprintf.c'; fi`
+
+sws-nonblock.o: $(top_srcdir)/lib/nonblock.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sws_CFLAGS) $(CFLAGS) -MT sws-nonblock.o -MD -MP -MF "$(DEPDIR)/sws-nonblock.Tpo" -c -o sws-nonblock.o `test -f '$(top_srcdir)/lib/nonblock.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/nonblock.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/sws-nonblock.Tpo" "$(DEPDIR)/sws-nonblock.Po"; else rm -f "$(DEPDIR)/sws-nonblock.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/nonblock.c' object='sws-nonblock.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sws_CFLAGS) $(CFLAGS) -c -o sws-nonblock.o `test -f '$(top_srcdir)/lib/nonblock.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/nonblock.c
+
+sws-nonblock.obj: $(top_srcdir)/lib/nonblock.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sws_CFLAGS) $(CFLAGS) -MT sws-nonblock.obj -MD -MP -MF "$(DEPDIR)/sws-nonblock.Tpo" -c -o sws-nonblock.obj `if test -f '$(top_srcdir)/lib/nonblock.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/nonblock.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/nonblock.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/sws-nonblock.Tpo" "$(DEPDIR)/sws-nonblock.Po"; else rm -f "$(DEPDIR)/sws-nonblock.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/nonblock.c' object='sws-nonblock.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sws_CFLAGS) $(CFLAGS) -c -o sws-nonblock.obj `if test -f '$(top_srcdir)/lib/nonblock.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/nonblock.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/nonblock.c'; fi`
+
+sws-strequal.o: $(top_srcdir)/lib/strequal.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sws_CFLAGS) $(CFLAGS) -MT sws-strequal.o -MD -MP -MF "$(DEPDIR)/sws-strequal.Tpo" -c -o sws-strequal.o `test -f '$(top_srcdir)/lib/strequal.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/strequal.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/sws-strequal.Tpo" "$(DEPDIR)/sws-strequal.Po"; else rm -f "$(DEPDIR)/sws-strequal.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/strequal.c' object='sws-strequal.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sws_CFLAGS) $(CFLAGS) -c -o sws-strequal.o `test -f '$(top_srcdir)/lib/strequal.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/strequal.c
+
+sws-strequal.obj: $(top_srcdir)/lib/strequal.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sws_CFLAGS) $(CFLAGS) -MT sws-strequal.obj -MD -MP -MF "$(DEPDIR)/sws-strequal.Tpo" -c -o sws-strequal.obj `if test -f '$(top_srcdir)/lib/strequal.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/strequal.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/strequal.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/sws-strequal.Tpo" "$(DEPDIR)/sws-strequal.Po"; else rm -f "$(DEPDIR)/sws-strequal.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/strequal.c' object='sws-strequal.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sws_CFLAGS) $(CFLAGS) -c -o sws-strequal.obj `if test -f '$(top_srcdir)/lib/strequal.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/strequal.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/strequal.c'; fi`
+
+sws-strtoofft.o: $(top_srcdir)/lib/strtoofft.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sws_CFLAGS) $(CFLAGS) -MT sws-strtoofft.o -MD -MP -MF "$(DEPDIR)/sws-strtoofft.Tpo" -c -o sws-strtoofft.o `test -f '$(top_srcdir)/lib/strtoofft.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/strtoofft.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/sws-strtoofft.Tpo" "$(DEPDIR)/sws-strtoofft.Po"; else rm -f "$(DEPDIR)/sws-strtoofft.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/strtoofft.c' object='sws-strtoofft.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sws_CFLAGS) $(CFLAGS) -c -o sws-strtoofft.o `test -f '$(top_srcdir)/lib/strtoofft.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/strtoofft.c
+
+sws-strtoofft.obj: $(top_srcdir)/lib/strtoofft.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sws_CFLAGS) $(CFLAGS) -MT sws-strtoofft.obj -MD -MP -MF "$(DEPDIR)/sws-strtoofft.Tpo" -c -o sws-strtoofft.obj `if test -f '$(top_srcdir)/lib/strtoofft.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/strtoofft.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/strtoofft.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/sws-strtoofft.Tpo" "$(DEPDIR)/sws-strtoofft.Po"; else rm -f "$(DEPDIR)/sws-strtoofft.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/strtoofft.c' object='sws-strtoofft.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sws_CFLAGS) $(CFLAGS) -c -o sws-strtoofft.obj `if test -f '$(top_srcdir)/lib/strtoofft.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/strtoofft.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/strtoofft.c'; fi`
+
+sws-timeval.o: $(top_srcdir)/lib/timeval.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sws_CFLAGS) $(CFLAGS) -MT sws-timeval.o -MD -MP -MF "$(DEPDIR)/sws-timeval.Tpo" -c -o sws-timeval.o `test -f '$(top_srcdir)/lib/timeval.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/timeval.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/sws-timeval.Tpo" "$(DEPDIR)/sws-timeval.Po"; else rm -f "$(DEPDIR)/sws-timeval.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/timeval.c' object='sws-timeval.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sws_CFLAGS) $(CFLAGS) -c -o sws-timeval.o `test -f '$(top_srcdir)/lib/timeval.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/timeval.c
+
+sws-timeval.obj: $(top_srcdir)/lib/timeval.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sws_CFLAGS) $(CFLAGS) -MT sws-timeval.obj -MD -MP -MF "$(DEPDIR)/sws-timeval.Tpo" -c -o sws-timeval.obj `if test -f '$(top_srcdir)/lib/timeval.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/timeval.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/timeval.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/sws-timeval.Tpo" "$(DEPDIR)/sws-timeval.Po"; else rm -f "$(DEPDIR)/sws-timeval.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/timeval.c' object='sws-timeval.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sws_CFLAGS) $(CFLAGS) -c -o sws-timeval.obj `if test -f '$(top_srcdir)/lib/timeval.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/timeval.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/timeval.c'; fi`
+
+sws-warnless.o: $(top_srcdir)/lib/warnless.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sws_CFLAGS) $(CFLAGS) -MT sws-warnless.o -MD -MP -MF "$(DEPDIR)/sws-warnless.Tpo" -c -o sws-warnless.o `test -f '$(top_srcdir)/lib/warnless.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/warnless.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/sws-warnless.Tpo" "$(DEPDIR)/sws-warnless.Po"; else rm -f "$(DEPDIR)/sws-warnless.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/warnless.c' object='sws-warnless.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sws_CFLAGS) $(CFLAGS) -c -o sws-warnless.o `test -f '$(top_srcdir)/lib/warnless.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/warnless.c
+
+sws-warnless.obj: $(top_srcdir)/lib/warnless.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sws_CFLAGS) $(CFLAGS) -MT sws-warnless.obj -MD -MP -MF "$(DEPDIR)/sws-warnless.Tpo" -c -o sws-warnless.obj `if test -f '$(top_srcdir)/lib/warnless.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/warnless.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/sws-warnless.Tpo" "$(DEPDIR)/sws-warnless.Po"; else rm -f "$(DEPDIR)/sws-warnless.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/warnless.c' object='sws-warnless.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sws_CFLAGS) $(CFLAGS) -c -o sws-warnless.obj `if test -f '$(top_srcdir)/lib/warnless.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/warnless.c'; fi`
+
+sws-getpart.o: getpart.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sws_CFLAGS) $(CFLAGS) -MT sws-getpart.o -MD -MP -MF "$(DEPDIR)/sws-getpart.Tpo" -c -o sws-getpart.o `test -f 'getpart.c' || echo '$(srcdir)/'`getpart.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/sws-getpart.Tpo" "$(DEPDIR)/sws-getpart.Po"; else rm -f "$(DEPDIR)/sws-getpart.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='getpart.c' object='sws-getpart.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sws_CFLAGS) $(CFLAGS) -c -o sws-getpart.o `test -f 'getpart.c' || echo '$(srcdir)/'`getpart.c
+
+sws-getpart.obj: getpart.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sws_CFLAGS) $(CFLAGS) -MT sws-getpart.obj -MD -MP -MF "$(DEPDIR)/sws-getpart.Tpo" -c -o sws-getpart.obj `if test -f 'getpart.c'; then $(CYGPATH_W) 'getpart.c'; else $(CYGPATH_W) '$(srcdir)/getpart.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/sws-getpart.Tpo" "$(DEPDIR)/sws-getpart.Po"; else rm -f "$(DEPDIR)/sws-getpart.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='getpart.c' object='sws-getpart.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sws_CFLAGS) $(CFLAGS) -c -o sws-getpart.obj `if test -f 'getpart.c'; then $(CYGPATH_W) 'getpart.c'; else $(CYGPATH_W) '$(srcdir)/getpart.c'; fi`
+
+sws-base64.o: $(top_srcdir)/lib/base64.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sws_CFLAGS) $(CFLAGS) -MT sws-base64.o -MD -MP -MF "$(DEPDIR)/sws-base64.Tpo" -c -o sws-base64.o `test -f '$(top_srcdir)/lib/base64.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/base64.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/sws-base64.Tpo" "$(DEPDIR)/sws-base64.Po"; else rm -f "$(DEPDIR)/sws-base64.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/base64.c' object='sws-base64.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sws_CFLAGS) $(CFLAGS) -c -o sws-base64.o `test -f '$(top_srcdir)/lib/base64.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/base64.c
+
+sws-base64.obj: $(top_srcdir)/lib/base64.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sws_CFLAGS) $(CFLAGS) -MT sws-base64.obj -MD -MP -MF "$(DEPDIR)/sws-base64.Tpo" -c -o sws-base64.obj `if test -f '$(top_srcdir)/lib/base64.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/base64.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/base64.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/sws-base64.Tpo" "$(DEPDIR)/sws-base64.Po"; else rm -f "$(DEPDIR)/sws-base64.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/base64.c' object='sws-base64.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sws_CFLAGS) $(CFLAGS) -c -o sws-base64.obj `if test -f '$(top_srcdir)/lib/base64.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/base64.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/base64.c'; fi`
+
+sws-memdebug.o: $(top_srcdir)/lib/memdebug.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sws_CFLAGS) $(CFLAGS) -MT sws-memdebug.o -MD -MP -MF "$(DEPDIR)/sws-memdebug.Tpo" -c -o sws-memdebug.o `test -f '$(top_srcdir)/lib/memdebug.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/memdebug.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/sws-memdebug.Tpo" "$(DEPDIR)/sws-memdebug.Po"; else rm -f "$(DEPDIR)/sws-memdebug.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/memdebug.c' object='sws-memdebug.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sws_CFLAGS) $(CFLAGS) -c -o sws-memdebug.o `test -f '$(top_srcdir)/lib/memdebug.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/memdebug.c
+
+sws-memdebug.obj: $(top_srcdir)/lib/memdebug.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sws_CFLAGS) $(CFLAGS) -MT sws-memdebug.obj -MD -MP -MF "$(DEPDIR)/sws-memdebug.Tpo" -c -o sws-memdebug.obj `if test -f '$(top_srcdir)/lib/memdebug.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/memdebug.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/memdebug.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/sws-memdebug.Tpo" "$(DEPDIR)/sws-memdebug.Po"; else rm -f "$(DEPDIR)/sws-memdebug.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/memdebug.c' object='sws-memdebug.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sws_CFLAGS) $(CFLAGS) -c -o sws-memdebug.obj `if test -f '$(top_srcdir)/lib/memdebug.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/memdebug.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/memdebug.c'; fi`
+
+sws-util.o: util.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sws_CFLAGS) $(CFLAGS) -MT sws-util.o -MD -MP -MF "$(DEPDIR)/sws-util.Tpo" -c -o sws-util.o `test -f 'util.c' || echo '$(srcdir)/'`util.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/sws-util.Tpo" "$(DEPDIR)/sws-util.Po"; else rm -f "$(DEPDIR)/sws-util.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='util.c' object='sws-util.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sws_CFLAGS) $(CFLAGS) -c -o sws-util.o `test -f 'util.c' || echo '$(srcdir)/'`util.c
+
+sws-util.obj: util.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sws_CFLAGS) $(CFLAGS) -MT sws-util.obj -MD -MP -MF "$(DEPDIR)/sws-util.Tpo" -c -o sws-util.obj `if test -f 'util.c'; then $(CYGPATH_W) 'util.c'; else $(CYGPATH_W) '$(srcdir)/util.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/sws-util.Tpo" "$(DEPDIR)/sws-util.Po"; else rm -f "$(DEPDIR)/sws-util.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='util.c' object='sws-util.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sws_CFLAGS) $(CFLAGS) -c -o sws-util.obj `if test -f 'util.c'; then $(CYGPATH_W) 'util.c'; else $(CYGPATH_W) '$(srcdir)/util.c'; fi`
+
+sws-sws.o: sws.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sws_CFLAGS) $(CFLAGS) -MT sws-sws.o -MD -MP -MF "$(DEPDIR)/sws-sws.Tpo" -c -o sws-sws.o `test -f 'sws.c' || echo '$(srcdir)/'`sws.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/sws-sws.Tpo" "$(DEPDIR)/sws-sws.Po"; else rm -f "$(DEPDIR)/sws-sws.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sws.c' object='sws-sws.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sws_CFLAGS) $(CFLAGS) -c -o sws-sws.o `test -f 'sws.c' || echo '$(srcdir)/'`sws.c
+
+sws-sws.obj: sws.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sws_CFLAGS) $(CFLAGS) -MT sws-sws.obj -MD -MP -MF "$(DEPDIR)/sws-sws.Tpo" -c -o sws-sws.obj `if test -f 'sws.c'; then $(CYGPATH_W) 'sws.c'; else $(CYGPATH_W) '$(srcdir)/sws.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/sws-sws.Tpo" "$(DEPDIR)/sws-sws.Po"; else rm -f "$(DEPDIR)/sws-sws.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sws.c' object='sws-sws.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sws_CFLAGS) $(CFLAGS) -c -o sws-sws.obj `if test -f 'sws.c'; then $(CYGPATH_W) 'sws.c'; else $(CYGPATH_W) '$(srcdir)/sws.c'; fi`
+
+tftpd-mprintf.o: $(top_srcdir)/lib/mprintf.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tftpd_CFLAGS) $(CFLAGS) -MT tftpd-mprintf.o -MD -MP -MF "$(DEPDIR)/tftpd-mprintf.Tpo" -c -o tftpd-mprintf.o `test -f '$(top_srcdir)/lib/mprintf.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/mprintf.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/tftpd-mprintf.Tpo" "$(DEPDIR)/tftpd-mprintf.Po"; else rm -f "$(DEPDIR)/tftpd-mprintf.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/mprintf.c' object='tftpd-mprintf.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tftpd_CFLAGS) $(CFLAGS) -c -o tftpd-mprintf.o `test -f '$(top_srcdir)/lib/mprintf.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/mprintf.c
+
+tftpd-mprintf.obj: $(top_srcdir)/lib/mprintf.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tftpd_CFLAGS) $(CFLAGS) -MT tftpd-mprintf.obj -MD -MP -MF "$(DEPDIR)/tftpd-mprintf.Tpo" -c -o tftpd-mprintf.obj `if test -f '$(top_srcdir)/lib/mprintf.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/mprintf.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/mprintf.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/tftpd-mprintf.Tpo" "$(DEPDIR)/tftpd-mprintf.Po"; else rm -f "$(DEPDIR)/tftpd-mprintf.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/mprintf.c' object='tftpd-mprintf.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tftpd_CFLAGS) $(CFLAGS) -c -o tftpd-mprintf.obj `if test -f '$(top_srcdir)/lib/mprintf.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/mprintf.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/mprintf.c'; fi`
+
+tftpd-nonblock.o: $(top_srcdir)/lib/nonblock.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tftpd_CFLAGS) $(CFLAGS) -MT tftpd-nonblock.o -MD -MP -MF "$(DEPDIR)/tftpd-nonblock.Tpo" -c -o tftpd-nonblock.o `test -f '$(top_srcdir)/lib/nonblock.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/nonblock.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/tftpd-nonblock.Tpo" "$(DEPDIR)/tftpd-nonblock.Po"; else rm -f "$(DEPDIR)/tftpd-nonblock.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/nonblock.c' object='tftpd-nonblock.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tftpd_CFLAGS) $(CFLAGS) -c -o tftpd-nonblock.o `test -f '$(top_srcdir)/lib/nonblock.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/nonblock.c
+
+tftpd-nonblock.obj: $(top_srcdir)/lib/nonblock.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tftpd_CFLAGS) $(CFLAGS) -MT tftpd-nonblock.obj -MD -MP -MF "$(DEPDIR)/tftpd-nonblock.Tpo" -c -o tftpd-nonblock.obj `if test -f '$(top_srcdir)/lib/nonblock.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/nonblock.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/nonblock.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/tftpd-nonblock.Tpo" "$(DEPDIR)/tftpd-nonblock.Po"; else rm -f "$(DEPDIR)/tftpd-nonblock.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/nonblock.c' object='tftpd-nonblock.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tftpd_CFLAGS) $(CFLAGS) -c -o tftpd-nonblock.obj `if test -f '$(top_srcdir)/lib/nonblock.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/nonblock.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/nonblock.c'; fi`
+
+tftpd-strequal.o: $(top_srcdir)/lib/strequal.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tftpd_CFLAGS) $(CFLAGS) -MT tftpd-strequal.o -MD -MP -MF "$(DEPDIR)/tftpd-strequal.Tpo" -c -o tftpd-strequal.o `test -f '$(top_srcdir)/lib/strequal.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/strequal.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/tftpd-strequal.Tpo" "$(DEPDIR)/tftpd-strequal.Po"; else rm -f "$(DEPDIR)/tftpd-strequal.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/strequal.c' object='tftpd-strequal.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tftpd_CFLAGS) $(CFLAGS) -c -o tftpd-strequal.o `test -f '$(top_srcdir)/lib/strequal.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/strequal.c
+
+tftpd-strequal.obj: $(top_srcdir)/lib/strequal.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tftpd_CFLAGS) $(CFLAGS) -MT tftpd-strequal.obj -MD -MP -MF "$(DEPDIR)/tftpd-strequal.Tpo" -c -o tftpd-strequal.obj `if test -f '$(top_srcdir)/lib/strequal.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/strequal.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/strequal.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/tftpd-strequal.Tpo" "$(DEPDIR)/tftpd-strequal.Po"; else rm -f "$(DEPDIR)/tftpd-strequal.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/strequal.c' object='tftpd-strequal.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tftpd_CFLAGS) $(CFLAGS) -c -o tftpd-strequal.obj `if test -f '$(top_srcdir)/lib/strequal.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/strequal.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/strequal.c'; fi`
+
+tftpd-strtoofft.o: $(top_srcdir)/lib/strtoofft.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tftpd_CFLAGS) $(CFLAGS) -MT tftpd-strtoofft.o -MD -MP -MF "$(DEPDIR)/tftpd-strtoofft.Tpo" -c -o tftpd-strtoofft.o `test -f '$(top_srcdir)/lib/strtoofft.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/strtoofft.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/tftpd-strtoofft.Tpo" "$(DEPDIR)/tftpd-strtoofft.Po"; else rm -f "$(DEPDIR)/tftpd-strtoofft.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/strtoofft.c' object='tftpd-strtoofft.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tftpd_CFLAGS) $(CFLAGS) -c -o tftpd-strtoofft.o `test -f '$(top_srcdir)/lib/strtoofft.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/strtoofft.c
+
+tftpd-strtoofft.obj: $(top_srcdir)/lib/strtoofft.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tftpd_CFLAGS) $(CFLAGS) -MT tftpd-strtoofft.obj -MD -MP -MF "$(DEPDIR)/tftpd-strtoofft.Tpo" -c -o tftpd-strtoofft.obj `if test -f '$(top_srcdir)/lib/strtoofft.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/strtoofft.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/strtoofft.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/tftpd-strtoofft.Tpo" "$(DEPDIR)/tftpd-strtoofft.Po"; else rm -f "$(DEPDIR)/tftpd-strtoofft.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/strtoofft.c' object='tftpd-strtoofft.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tftpd_CFLAGS) $(CFLAGS) -c -o tftpd-strtoofft.obj `if test -f '$(top_srcdir)/lib/strtoofft.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/strtoofft.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/strtoofft.c'; fi`
+
+tftpd-timeval.o: $(top_srcdir)/lib/timeval.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tftpd_CFLAGS) $(CFLAGS) -MT tftpd-timeval.o -MD -MP -MF "$(DEPDIR)/tftpd-timeval.Tpo" -c -o tftpd-timeval.o `test -f '$(top_srcdir)/lib/timeval.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/timeval.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/tftpd-timeval.Tpo" "$(DEPDIR)/tftpd-timeval.Po"; else rm -f "$(DEPDIR)/tftpd-timeval.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/timeval.c' object='tftpd-timeval.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tftpd_CFLAGS) $(CFLAGS) -c -o tftpd-timeval.o `test -f '$(top_srcdir)/lib/timeval.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/timeval.c
+
+tftpd-timeval.obj: $(top_srcdir)/lib/timeval.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tftpd_CFLAGS) $(CFLAGS) -MT tftpd-timeval.obj -MD -MP -MF "$(DEPDIR)/tftpd-timeval.Tpo" -c -o tftpd-timeval.obj `if test -f '$(top_srcdir)/lib/timeval.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/timeval.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/timeval.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/tftpd-timeval.Tpo" "$(DEPDIR)/tftpd-timeval.Po"; else rm -f "$(DEPDIR)/tftpd-timeval.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/timeval.c' object='tftpd-timeval.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tftpd_CFLAGS) $(CFLAGS) -c -o tftpd-timeval.obj `if test -f '$(top_srcdir)/lib/timeval.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/timeval.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/timeval.c'; fi`
+
+tftpd-warnless.o: $(top_srcdir)/lib/warnless.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tftpd_CFLAGS) $(CFLAGS) -MT tftpd-warnless.o -MD -MP -MF "$(DEPDIR)/tftpd-warnless.Tpo" -c -o tftpd-warnless.o `test -f '$(top_srcdir)/lib/warnless.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/warnless.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/tftpd-warnless.Tpo" "$(DEPDIR)/tftpd-warnless.Po"; else rm -f "$(DEPDIR)/tftpd-warnless.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/warnless.c' object='tftpd-warnless.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tftpd_CFLAGS) $(CFLAGS) -c -o tftpd-warnless.o `test -f '$(top_srcdir)/lib/warnless.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/warnless.c
+
+tftpd-warnless.obj: $(top_srcdir)/lib/warnless.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tftpd_CFLAGS) $(CFLAGS) -MT tftpd-warnless.obj -MD -MP -MF "$(DEPDIR)/tftpd-warnless.Tpo" -c -o tftpd-warnless.obj `if test -f '$(top_srcdir)/lib/warnless.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/warnless.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/tftpd-warnless.Tpo" "$(DEPDIR)/tftpd-warnless.Po"; else rm -f "$(DEPDIR)/tftpd-warnless.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/warnless.c' object='tftpd-warnless.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tftpd_CFLAGS) $(CFLAGS) -c -o tftpd-warnless.obj `if test -f '$(top_srcdir)/lib/warnless.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/warnless.c'; fi`
+
+tftpd-getpart.o: getpart.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tftpd_CFLAGS) $(CFLAGS) -MT tftpd-getpart.o -MD -MP -MF "$(DEPDIR)/tftpd-getpart.Tpo" -c -o tftpd-getpart.o `test -f 'getpart.c' || echo '$(srcdir)/'`getpart.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/tftpd-getpart.Tpo" "$(DEPDIR)/tftpd-getpart.Po"; else rm -f "$(DEPDIR)/tftpd-getpart.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='getpart.c' object='tftpd-getpart.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tftpd_CFLAGS) $(CFLAGS) -c -o tftpd-getpart.o `test -f 'getpart.c' || echo '$(srcdir)/'`getpart.c
+
+tftpd-getpart.obj: getpart.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tftpd_CFLAGS) $(CFLAGS) -MT tftpd-getpart.obj -MD -MP -MF "$(DEPDIR)/tftpd-getpart.Tpo" -c -o tftpd-getpart.obj `if test -f 'getpart.c'; then $(CYGPATH_W) 'getpart.c'; else $(CYGPATH_W) '$(srcdir)/getpart.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/tftpd-getpart.Tpo" "$(DEPDIR)/tftpd-getpart.Po"; else rm -f "$(DEPDIR)/tftpd-getpart.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='getpart.c' object='tftpd-getpart.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tftpd_CFLAGS) $(CFLAGS) -c -o tftpd-getpart.obj `if test -f 'getpart.c'; then $(CYGPATH_W) 'getpart.c'; else $(CYGPATH_W) '$(srcdir)/getpart.c'; fi`
+
+tftpd-base64.o: $(top_srcdir)/lib/base64.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tftpd_CFLAGS) $(CFLAGS) -MT tftpd-base64.o -MD -MP -MF "$(DEPDIR)/tftpd-base64.Tpo" -c -o tftpd-base64.o `test -f '$(top_srcdir)/lib/base64.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/base64.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/tftpd-base64.Tpo" "$(DEPDIR)/tftpd-base64.Po"; else rm -f "$(DEPDIR)/tftpd-base64.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/base64.c' object='tftpd-base64.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tftpd_CFLAGS) $(CFLAGS) -c -o tftpd-base64.o `test -f '$(top_srcdir)/lib/base64.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/base64.c
+
+tftpd-base64.obj: $(top_srcdir)/lib/base64.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tftpd_CFLAGS) $(CFLAGS) -MT tftpd-base64.obj -MD -MP -MF "$(DEPDIR)/tftpd-base64.Tpo" -c -o tftpd-base64.obj `if test -f '$(top_srcdir)/lib/base64.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/base64.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/base64.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/tftpd-base64.Tpo" "$(DEPDIR)/tftpd-base64.Po"; else rm -f "$(DEPDIR)/tftpd-base64.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/base64.c' object='tftpd-base64.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tftpd_CFLAGS) $(CFLAGS) -c -o tftpd-base64.obj `if test -f '$(top_srcdir)/lib/base64.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/base64.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/base64.c'; fi`
+
+tftpd-memdebug.o: $(top_srcdir)/lib/memdebug.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tftpd_CFLAGS) $(CFLAGS) -MT tftpd-memdebug.o -MD -MP -MF "$(DEPDIR)/tftpd-memdebug.Tpo" -c -o tftpd-memdebug.o `test -f '$(top_srcdir)/lib/memdebug.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/memdebug.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/tftpd-memdebug.Tpo" "$(DEPDIR)/tftpd-memdebug.Po"; else rm -f "$(DEPDIR)/tftpd-memdebug.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/memdebug.c' object='tftpd-memdebug.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tftpd_CFLAGS) $(CFLAGS) -c -o tftpd-memdebug.o `test -f '$(top_srcdir)/lib/memdebug.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/memdebug.c
+
+tftpd-memdebug.obj: $(top_srcdir)/lib/memdebug.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tftpd_CFLAGS) $(CFLAGS) -MT tftpd-memdebug.obj -MD -MP -MF "$(DEPDIR)/tftpd-memdebug.Tpo" -c -o tftpd-memdebug.obj `if test -f '$(top_srcdir)/lib/memdebug.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/memdebug.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/memdebug.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/tftpd-memdebug.Tpo" "$(DEPDIR)/tftpd-memdebug.Po"; else rm -f "$(DEPDIR)/tftpd-memdebug.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/memdebug.c' object='tftpd-memdebug.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tftpd_CFLAGS) $(CFLAGS) -c -o tftpd-memdebug.obj `if test -f '$(top_srcdir)/lib/memdebug.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/memdebug.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/memdebug.c'; fi`
+
+tftpd-util.o: util.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tftpd_CFLAGS) $(CFLAGS) -MT tftpd-util.o -MD -MP -MF "$(DEPDIR)/tftpd-util.Tpo" -c -o tftpd-util.o `test -f 'util.c' || echo '$(srcdir)/'`util.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/tftpd-util.Tpo" "$(DEPDIR)/tftpd-util.Po"; else rm -f "$(DEPDIR)/tftpd-util.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='util.c' object='tftpd-util.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tftpd_CFLAGS) $(CFLAGS) -c -o tftpd-util.o `test -f 'util.c' || echo '$(srcdir)/'`util.c
+
+tftpd-util.obj: util.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tftpd_CFLAGS) $(CFLAGS) -MT tftpd-util.obj -MD -MP -MF "$(DEPDIR)/tftpd-util.Tpo" -c -o tftpd-util.obj `if test -f 'util.c'; then $(CYGPATH_W) 'util.c'; else $(CYGPATH_W) '$(srcdir)/util.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/tftpd-util.Tpo" "$(DEPDIR)/tftpd-util.Po"; else rm -f "$(DEPDIR)/tftpd-util.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='util.c' object='tftpd-util.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tftpd_CFLAGS) $(CFLAGS) -c -o tftpd-util.obj `if test -f 'util.c'; then $(CYGPATH_W) 'util.c'; else $(CYGPATH_W) '$(srcdir)/util.c'; fi`
+
+tftpd-tftpd.o: tftpd.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tftpd_CFLAGS) $(CFLAGS) -MT tftpd-tftpd.o -MD -MP -MF "$(DEPDIR)/tftpd-tftpd.Tpo" -c -o tftpd-tftpd.o `test -f 'tftpd.c' || echo '$(srcdir)/'`tftpd.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/tftpd-tftpd.Tpo" "$(DEPDIR)/tftpd-tftpd.Po"; else rm -f "$(DEPDIR)/tftpd-tftpd.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tftpd.c' object='tftpd-tftpd.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tftpd_CFLAGS) $(CFLAGS) -c -o tftpd-tftpd.o `test -f 'tftpd.c' || echo '$(srcdir)/'`tftpd.c
+
+tftpd-tftpd.obj: tftpd.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tftpd_CFLAGS) $(CFLAGS) -MT tftpd-tftpd.obj -MD -MP -MF "$(DEPDIR)/tftpd-tftpd.Tpo" -c -o tftpd-tftpd.obj `if test -f 'tftpd.c'; then $(CYGPATH_W) 'tftpd.c'; else $(CYGPATH_W) '$(srcdir)/tftpd.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/tftpd-tftpd.Tpo" "$(DEPDIR)/tftpd-tftpd.Po"; else rm -f "$(DEPDIR)/tftpd-tftpd.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tftpd.c' object='tftpd-tftpd.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tftpd_CFLAGS) $(CFLAGS) -c -o tftpd-tftpd.obj `if test -f 'tftpd.c'; then $(CYGPATH_W) 'tftpd.c'; else $(CYGPATH_W) '$(srcdir)/tftpd.c'; fi`
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+ -rm -f libtool
+uninstall-info-am:
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ list='$(DISTFILES)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkdir_p) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-libtool distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstPROGRAMS ctags distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-exec \
+ install-exec-am install-info install-info-am install-man \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+ pdf pdf-am ps ps-am tags uninstall uninstall-am \
+ uninstall-info-am
+
+# 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/tests/server/Makefile.inc b/tests/server/Makefile.inc
new file mode 100644
index 0000000..c73a851
--- /dev/null
+++ b/tests/server/Makefile.inc
@@ -0,0 +1,61 @@
+noinst_PROGRAMS = getpart resolve rtspd sockfilt sws tftpd
+
+CURLX_SRCS = \
+ $(top_srcdir)/lib/mprintf.c \
+ $(top_srcdir)/lib/nonblock.c \
+ $(top_srcdir)/lib/strequal.c \
+ $(top_srcdir)/lib/strtoofft.c \
+ $(top_srcdir)/lib/timeval.c \
+ $(top_srcdir)/lib/warnless.c
+
+CURLX_HDRS = \
+ $(top_srcdir)/lib/curlx.h \
+ $(top_srcdir)/lib/nonblock.h \
+ $(top_srcdir)/lib/strequal.h \
+ $(top_srcdir)/lib/strtoofft.h \
+ $(top_srcdir)/lib/timeval.h \
+ $(top_srcdir)/lib/warnless.h
+
+USEFUL = \
+ getpart.c \
+ getpart.h \
+ $(top_srcdir)/lib/base64.c \
+ $(top_srcdir)/lib/curl_base64.h \
+ $(top_srcdir)/lib/memdebug.c \
+ $(top_srcdir)/lib/memdebug.h
+
+UTIL = \
+ util.c \
+ util.h
+
+getpart_SOURCES = $(CURLX_SRCS) $(CURLX_HDRS) $(USEFUL) \
+ testpart.c
+getpart_LDADD = @TEST_SERVER_LIBS@
+getpart_CFLAGS = $(AM_CFLAGS)
+
+resolve_SOURCES = $(CURLX_SRCS) $(CURLX_HDRS) $(USEFUL) $(UTIL) \
+ resolve.c
+resolve_LDADD = @TEST_SERVER_LIBS@
+resolve_CFLAGS = $(AM_CFLAGS)
+
+rtspd_SOURCES = $(CURLX_SRCS) $(CURLX_HDRS) $(USEFUL) $(UTIL) \
+ rtspd.c
+rtspd_LDADD = @TEST_SERVER_LIBS@
+rtspd_CFLAGS = $(AM_CFLAGS)
+
+sockfilt_SOURCES = $(CURLX_SRCS) $(CURLX_HDRS) $(USEFUL) $(UTIL) \
+ sockfilt.c \
+ $(top_srcdir)/lib/inet_pton.c
+sockfilt_LDADD = @TEST_SERVER_LIBS@
+sockfilt_CFLAGS = $(AM_CFLAGS)
+
+sws_SOURCES = $(CURLX_SRCS) $(CURLX_HDRS) $(USEFUL) $(UTIL) \
+ sws.c
+sws_LDADD = @TEST_SERVER_LIBS@
+sws_CFLAGS = $(AM_CFLAGS)
+
+tftpd_SOURCES = $(CURLX_SRCS) $(CURLX_HDRS) $(USEFUL) $(UTIL) \
+ tftpd.c \
+ tftp.h
+tftpd_LDADD = @TEST_SERVER_LIBS@
+tftpd_CFLAGS = $(AM_CFLAGS)
diff --git a/tests/server/getpart.c b/tests/server/getpart.c
new file mode 100644
index 0000000..a3b5f2f
--- /dev/null
+++ b/tests/server/getpart.c
@@ -0,0 +1,422 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at http://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ***************************************************************************/
+
+#define CURL_NO_OLDIES
+
+#include "setup.h"
+
+#include "getpart.h"
+
+#define ENABLE_CURLX_PRINTF
+/* make the curlx header define all printf() functions to use the curlx_*
+ versions instead */
+#include "curlx.h" /* from the private lib dir */
+
+/* just to please base64.h we create a fake struct */
+struct SessionHandle {
+ int fake;
+};
+
+#include "curl_base64.h"
+#include "curl_memory.h"
+
+/* include memdebug.h last */
+#include "memdebug.h"
+
+#define EAT_SPACE(p) while(*(p) && ISSPACE(*(p))) (p)++
+
+#define EAT_WORD(p) while(*(p) && !ISSPACE(*(p)) && ('>' != *(p))) (p)++
+
+#ifdef DEBUG_GETPART
+#define show(x) printf x
+#else
+#define show(x)
+#endif
+
+#if defined(_MSC_VER) && defined(_DLL)
+# pragma warning(disable:4232) /* MSVC extension, dllimport identity */
+#endif
+
+curl_malloc_callback Curl_cmalloc = (curl_malloc_callback)malloc;
+curl_free_callback Curl_cfree = (curl_free_callback)free;
+curl_realloc_callback Curl_crealloc = (curl_realloc_callback)realloc;
+curl_strdup_callback Curl_cstrdup = (curl_strdup_callback)strdup;
+curl_calloc_callback Curl_ccalloc = (curl_calloc_callback)calloc;
+
+#if defined(_MSC_VER) && defined(_DLL)
+# pragma warning(default:4232) /* MSVC extension, dllimport identity */
+#endif
+
+/*
+ * readline()
+ *
+ * Reads a complete line from a file into a dynamically allocated buffer.
+ *
+ * Calling function may call this multiple times with same 'buffer'
+ * and 'bufsize' pointers to avoid multiple buffer allocations. Buffer
+ * will be reallocated and 'bufsize' increased until whole line fits in
+ * buffer before returning it.
+ *
+ * Calling function is responsible to free allocated buffer.
+ *
+ * This function may return:
+ * GPE_OUT_OF_MEMORY
+ * GPE_END_OF_FILE
+ * GPE_OK
+ */
+
+static int readline(char **buffer, size_t *bufsize, FILE *stream)
+{
+ size_t offset = 0;
+ size_t length;
+ char *newptr;
+
+ if(!*buffer) {
+ *buffer = malloc(128);
+ if(!*buffer)
+ return GPE_OUT_OF_MEMORY;
+ *bufsize = 128;
+ }
+
+ for(;;) {
+ int bytestoread = curlx_uztosi(*bufsize - offset);
+
+ if(!fgets(*buffer + offset, bytestoread, stream))
+ return (offset != 0) ? GPE_OK : GPE_END_OF_FILE ;
+
+ length = offset + strlen(*buffer + offset);
+ if(*(*buffer + length - 1) == '\n')
+ break;
+ offset = length;
+ if(length < *bufsize - 1)
+ continue;
+
+ newptr = realloc(*buffer, *bufsize * 2);
+ if(!newptr)
+ return GPE_OUT_OF_MEMORY;
+ *buffer = newptr;
+ *bufsize *= 2;
+ }
+
+ return GPE_OK;
+}
+
+/*
+ * appenddata()
+ *
+ * This appends data from a given source buffer to the end of the used part of
+ * a destination buffer. Arguments relative to the destination buffer are, the
+ * address of a pointer to the destination buffer 'dst_buf', the length of data
+ * in destination buffer excluding potential null string termination 'dst_len',
+ * the allocated size of destination buffer 'dst_alloc'. All three destination
+ * buffer arguments may be modified by this function. Arguments relative to the
+ * source buffer are, a pointer to the source buffer 'src_buf' and indication
+ * whether the source buffer is base64 encoded or not 'src_b64'.
+ *
+ * If the source buffer is indicated to be base64 encoded, this appends the
+ * decoded data, binary or whatever, to the destination. The source buffer
+ * may not hold binary data, only a null terminated string is valid content.
+ *
+ * Destination buffer will be enlarged and relocated as needed.
+ *
+ * Calling function is responsible to provide preallocated destination
+ * buffer and also to deallocate it when no longer needed.
+ *
+ * This function may return:
+ * GPE_OUT_OF_MEMORY
+ * GPE_OK
+ */
+
+static int appenddata(char **dst_buf, /* dest buffer */
+ size_t *dst_len, /* dest buffer data length */
+ size_t *dst_alloc, /* dest buffer allocated size */
+ char *src_buf, /* source buffer */
+ int src_b64) /* != 0 if source is base64 encoded */
+{
+ size_t need_alloc, src_len;
+ union {
+ unsigned char *as_uchar;
+ char *as_char;
+ } buf64;
+
+ src_len = strlen(src_buf);
+ if(!src_len)
+ return GPE_OK;
+
+ buf64.as_char = NULL;
+
+ if(src_b64) {
+ /* base64 decode the given buffer */
+ src_len = Curl_base64_decode(src_buf, &buf64.as_uchar);
+ src_buf = buf64.as_char;
+ if(!src_len || !src_buf) {
+ /*
+ ** currently there is no way to tell apart an OOM condition in
+ ** Curl_base64_decode() from zero length decoded data. For now,
+ ** let's just assume it is an OOM condition, currently we have
+ ** no input for this function that decodes to zero length data.
+ */
+ if(buf64.as_char)
+ free(buf64.as_char);
+ return GPE_OUT_OF_MEMORY;
+ }
+ }
+
+ need_alloc = src_len + *dst_len + 1;
+
+ /* enlarge destination buffer if required */
+ if(need_alloc > *dst_alloc) {
+ size_t newsize = need_alloc * 2;
+ char *newptr = realloc(*dst_buf, newsize);
+ if(!newptr) {
+ if(buf64.as_char)
+ free(buf64.as_char);
+ return GPE_OUT_OF_MEMORY;
+ }
+ *dst_alloc = newsize;
+ *dst_buf = newptr;
+ }
+
+ /* memcpy to support binary blobs */
+ memcpy(*dst_buf + *dst_len, src_buf, src_len);
+ *dst_len += src_len;
+ *(*dst_buf + *dst_len) = '\0';
+
+ if(buf64.as_char)
+ free(buf64.as_char);
+
+ return GPE_OK;
+}
+
+/*
+ * getpart()
+ *
+ * This returns whole contents of specified XML-like section and subsection
+ * from the given file. This is mostly used to retrieve a specific part from
+ * a test definition file for consumption by test suite servers.
+ *
+ * Data is returned in a dynamically allocated buffer, a pointer to this data
+ * and the size of the data is stored at the addresses that caller specifies.
+ *
+ * If the returned data is a string the returned size will be the length of
+ * the string excluding null termination. Otherwise it will just be the size
+ * of the returned binary data.
+ *
+ * Calling function is responsible to free returned buffer.
+ *
+ * This function may return:
+ * GPE_NO_BUFFER_SPACE
+ * GPE_OUT_OF_MEMORY
+ * GPE_OK
+ */
+
+int getpart(char **outbuf, size_t *outlen,
+ const char *main, const char *sub, FILE *stream)
+{
+# define MAX_TAG_LEN 79
+ char couter[MAX_TAG_LEN+1]; /* current outermost section */
+ char cmain[MAX_TAG_LEN+1]; /* current main section */
+ char csub[MAX_TAG_LEN+1]; /* current sub section */
+ char ptag[MAX_TAG_LEN+1]; /* potential tag */
+ char patt[MAX_TAG_LEN+1]; /* potential attributes */
+ char *buffer = NULL;
+ char *ptr;
+ char *end;
+ union {
+ ssize_t sig;
+ size_t uns;
+ } len;
+ size_t bufsize = 0;
+ size_t outalloc = 256;
+ int in_wanted_part = 0;
+ int base64 = 0;
+ int error;
+
+ enum {
+ STATE_OUTSIDE = 0,
+ STATE_OUTER = 1,
+ STATE_INMAIN = 2,
+ STATE_INSUB = 3,
+ STATE_ILLEGAL = 4
+ } state = STATE_OUTSIDE;
+
+ *outlen = 0;
+ *outbuf = malloc(outalloc);
+ if(!*outbuf)
+ return GPE_OUT_OF_MEMORY;
+ *(*outbuf) = '\0';
+
+ couter[0] = cmain[0] = csub[0] = ptag[0] = patt[0] = '\0';
+
+ while((error = readline(&buffer, &bufsize, stream)) == GPE_OK) {
+
+ ptr = buffer;
+ EAT_SPACE(ptr);
+
+ if('<' != *ptr) {
+ if(in_wanted_part) {
+ show(("=> %s", buffer));
+ error = appenddata(outbuf, outlen, &outalloc, buffer, base64);
+ if(error)
+ break;
+ }
+ continue;
+ }
+
+ ptr++;
+
+ if('/' == *ptr) {
+ /*
+ ** closing section tag
+ */
+
+ ptr++;
+ end = ptr;
+ EAT_WORD(end);
+ if((len.sig = end - ptr) > MAX_TAG_LEN) {
+ error = GPE_NO_BUFFER_SPACE;
+ break;
+ }
+ memcpy(ptag, ptr, len.uns);
+ ptag[len.uns] = '\0';
+
+ if((STATE_INSUB == state) && !strcmp(csub, ptag)) {
+ /* end of current sub section */
+ state = STATE_INMAIN;
+ csub[0] = '\0';
+ if(in_wanted_part) {
+ /* end of wanted part */
+ in_wanted_part = 0;
+ break;
+ }
+ }
+ else if((STATE_INMAIN == state) && !strcmp(cmain, ptag)) {
+ /* end of current main section */
+ state = STATE_OUTER;
+ cmain[0] = '\0';
+ if(in_wanted_part) {
+ /* end of wanted part */
+ in_wanted_part = 0;
+ break;
+ }
+ }
+ else if((STATE_OUTER == state) && !strcmp(couter, ptag)) {
+ /* end of outermost file section */
+ state = STATE_OUTSIDE;
+ couter[0] = '\0';
+ if(in_wanted_part) {
+ /* end of wanted part */
+ in_wanted_part = 0;
+ break;
+ }
+ }
+
+ }
+ else if(!in_wanted_part) {
+ /*
+ ** opening section tag
+ */
+
+ /* get potential tag */
+ end = ptr;
+ EAT_WORD(end);
+ if((len.sig = end - ptr) > MAX_TAG_LEN) {
+ error = GPE_NO_BUFFER_SPACE;
+ break;
+ }
+ memcpy(ptag, ptr, len.uns);
+ ptag[len.uns] = '\0';
+
+ /* ignore comments, doctypes and xml declarations */
+ if(('!' == ptag[0]) || ('?' == ptag[0])) {
+ show(("* ignoring (%s)", buffer));
+ continue;
+ }
+
+ /* get all potential attributes */
+ ptr = end;
+ EAT_SPACE(ptr);
+ end = ptr;
+ while(*end && ('>' != *end))
+ end++;
+ if((len.sig = end - ptr) > MAX_TAG_LEN) {
+ error = GPE_NO_BUFFER_SPACE;
+ break;
+ }
+ memcpy(patt, ptr, len.uns);
+ patt[len.uns] = '\0';
+
+ if(STATE_OUTSIDE == state) {
+ /* outermost element (<testcase>) */
+ strcpy(couter, ptag);
+ state = STATE_OUTER;
+ continue;
+ }
+ else if(STATE_OUTER == state) {
+ /* start of a main section */
+ strcpy(cmain, ptag);
+ state = STATE_INMAIN;
+ continue;
+ }
+ else if(STATE_INMAIN == state) {
+ /* start of a sub section */
+ strcpy(csub, ptag);
+ state = STATE_INSUB;
+ if(!strcmp(cmain, main) && !strcmp(csub, sub)) {
+ /* start of wanted part */
+ in_wanted_part = 1;
+ if(strstr(patt, "base64="))
+ /* bit rough test, but "mostly" functional, */
+ /* treat wanted part data as base64 encoded */
+ base64 = 1;
+ }
+ continue;
+ }
+
+ }
+
+ if(in_wanted_part) {
+ show(("=> %s", buffer));
+ error = appenddata(outbuf, outlen, &outalloc, buffer, base64);
+ if(error)
+ break;
+ }
+
+ } /* while */
+
+ if(buffer)
+ free(buffer);
+
+ if(error != GPE_OK) {
+ if(error == GPE_END_OF_FILE)
+ error = GPE_OK;
+ else {
+ if(*outbuf)
+ free(*outbuf);
+ *outbuf = NULL;
+ *outlen = 0;
+ }
+ }
+
+ return error;
+}
+
diff --git a/tests/server/getpart.h b/tests/server/getpart.h
new file mode 100644
index 0000000..78a0be2
--- /dev/null
+++ b/tests/server/getpart.h
@@ -0,0 +1,33 @@
+#ifndef HEADER_SERVER_GETPART_H
+#define HEADER_SERVER_GETPART_H
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at http://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ***************************************************************************/
+
+#define GPE_NO_BUFFER_SPACE -2
+#define GPE_OUT_OF_MEMORY -1
+#define GPE_OK 0
+#define GPE_END_OF_FILE 1
+
+int getpart(char **outbuf, size_t *outlen,
+ const char *main, const char *sub, FILE *stream);
+
+#endif /* HEADER_SERVER_GETPART_H */
diff --git a/tests/server/resolve.c b/tests/server/resolve.c
new file mode 100644
index 0000000..26ad853
--- /dev/null
+++ b/tests/server/resolve.c
@@ -0,0 +1,164 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at http://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ***************************************************************************/
+
+/* Purpose
+ *
+ * Resolve the given name, using system name resolve functions (NOT any
+ * function provided by libcurl). Used to see if the name exists and thus if
+ * we can allow a test case to use it for testing.
+ *
+ * Like if 'localhost' actual exists etc.
+ *
+ */
+
+#define CURL_NO_OLDIES
+
+#include "setup.h" /* portability help from the lib directory */
+
+#ifdef HAVE_SIGNAL_H
+#include <signal.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#ifdef HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+#ifdef _XOPEN_SOURCE_EXTENDED
+/* This define is "almost" required to build on HPUX 11 */
+#include <arpa/inet.h>
+#endif
+#ifdef HAVE_NETDB_H
+#include <netdb.h>
+#endif
+
+#define ENABLE_CURLX_PRINTF
+/* make the curlx header define all printf() functions to use the curlx_*
+ versions instead */
+#include "curlx.h" /* from the private lib dir */
+#include "util.h"
+
+/* include memdebug.h last */
+#include "memdebug.h"
+
+static bool use_ipv6 = FALSE;
+static const char *ipv_inuse = "IPv4";
+
+const char *serverlogfile=""; /* for a util.c function we don't use */
+
+int main(int argc, char *argv[])
+{
+ int arg=1;
+ const char *host = NULL;
+ int rc = 0;
+
+ while(argc>arg) {
+ if(!strcmp("--version", argv[arg])) {
+ printf("resolve IPv4%s\n",
+#ifdef ENABLE_IPV6
+ "/IPv6"
+#else
+ ""
+#endif
+ );
+ return 0;
+ }
+ else if(!strcmp("--ipv6", argv[arg])) {
+ ipv_inuse = "IPv6";
+ use_ipv6 = TRUE;
+ arg++;
+ }
+ else if(!strcmp("--ipv4", argv[arg])) {
+ /* for completeness, we support this option as well */
+ ipv_inuse = "IPv4";
+ use_ipv6 = FALSE;
+ arg++;
+ }
+ else {
+ host = argv[arg++];
+ }
+ }
+ if(!host) {
+ puts("Usage: resolve [option] <host>\n"
+ " --version\n"
+ " --ipv4"
+#ifdef ENABLE_IPV6
+ "\n --ipv6"
+#endif
+ );
+ return 1;
+ }
+
+#ifdef WIN32
+ win32_init();
+ atexit(win32_cleanup);
+#endif
+
+ if(!use_ipv6) {
+ /* gethostbyname() resolve */
+ struct hostent *he;
+
+ he = gethostbyname(host);
+
+ rc = !he;
+ }
+ else {
+#ifdef ENABLE_IPV6
+ /* Check that the system has IPv6 enabled before checking the resolver */
+ curl_socket_t s = socket(PF_INET6, SOCK_DGRAM, 0);
+ if(s == CURL_SOCKET_BAD)
+ /* an ipv6 address was requested and we can't get/use one */
+ rc = -1;
+ else {
+ sclose(s);
+ }
+
+ if (rc == 0) {
+ /* getaddrinfo() resolve */
+ struct addrinfo *ai;
+ struct addrinfo hints;
+
+ memset(&hints, 0, sizeof(hints));
+ hints.ai_family = PF_INET6;
+ hints.ai_socktype = SOCK_STREAM;
+ hints.ai_flags = AI_CANONNAME;
+ /* Use parenthesis around function to stop it from being replaced by
+ the macro in memdebug.h */
+ rc = (getaddrinfo)(host, "80", &hints, &ai);
+ }
+
+#else
+ puts("IPv6 support has been disabled in this program");
+ return 1;
+#endif
+ }
+ if(rc)
+ printf("Resolving %s '%s' didn't work\n", ipv_inuse, host);
+
+ return !!rc;
+}
diff --git a/tests/server/rtspd.c b/tests/server/rtspd.c
new file mode 100644
index 0000000..788d61c
--- /dev/null
+++ b/tests/server/rtspd.c
@@ -0,0 +1,1471 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at http://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ***************************************************************************/
+
+/*
+ * curl's test suite Real Time Streaming Protocol (RTSP) server.
+ *
+ * This source file was started based on curl's HTTP test suite server.
+ */
+
+#define CURL_NO_OLDIES
+
+#include "setup.h" /* portability help from the lib directory */
+
+#ifdef HAVE_SIGNAL_H
+#include <signal.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#ifdef HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+#ifdef HAVE_ARPA_INET_H
+#include <arpa/inet.h>
+#endif
+#ifdef HAVE_NETDB_H
+#include <netdb.h>
+#endif
+#ifdef HAVE_NETINET_TCP_H
+#include <netinet/tcp.h> /* for TCP_NODELAY */
+#endif
+
+#define ENABLE_CURLX_PRINTF
+/* make the curlx header define all printf() functions to use the curlx_*
+ versions instead */
+#include "curlx.h" /* from the private lib dir */
+#include "getpart.h"
+#include "util.h"
+
+/* include memdebug.h last */
+#include "memdebug.h"
+
+#ifdef ENABLE_IPV6
+static bool use_ipv6 = FALSE;
+#endif
+static const char *ipv_inuse = "IPv4";
+static int serverlogslocked = 0;
+
+#define REQBUFSIZ 150000
+#define REQBUFSIZ_TXT "149999"
+
+static long prevtestno=-1; /* previous test number we served */
+static long prevpartno=-1; /* previous part number we served */
+static bool prevbounce=FALSE; /* instructs the server to increase the part
+ number for a test in case the identical
+ testno+partno request shows up again */
+
+#define RCMD_NORMALREQ 0 /* default request, use the tests file normally */
+#define RCMD_IDLE 1 /* told to sit idle */
+#define RCMD_STREAM 2 /* told to stream */
+
+typedef enum {
+ RPROT_NONE = 0,
+ RPROT_RTSP = 1,
+ RPROT_HTTP = 2
+} reqprot_t;
+
+#define SET_RTP_PKT_CHN(p,c) ((p)[1] = (unsigned char)((c) & 0xFF))
+
+#define SET_RTP_PKT_LEN(p,l) (((p)[2] = (unsigned char)(((l) >> 8) & 0xFF)), \
+ ((p)[3] = (unsigned char)((l) & 0xFF)))
+
+struct httprequest {
+ char reqbuf[REQBUFSIZ]; /* buffer area for the incoming request */
+ size_t checkindex; /* where to start checking of the request */
+ size_t offset; /* size of the incoming request */
+ long testno; /* test number found in the request */
+ long partno; /* part number found in the request */
+ bool open; /* keep connection open info, as found in the request */
+ bool auth_req; /* authentication required, don't wait for body unless
+ there's an Authorization header */
+ bool auth; /* Authorization header present in the incoming request */
+ size_t cl; /* Content-Length of the incoming request */
+ bool digest; /* Authorization digest header found */
+ bool ntlm; /* Authorization ntlm header found */
+ int pipe; /* if non-zero, expect this many requests to do a "piped"
+ request/response */
+ int skip; /* if non-zero, the server is instructed to not read this
+ many bytes from a PUT/POST request. Ie the client sends N
+ bytes said in Content-Length, but the server only reads N
+ - skip bytes. */
+ int rcmd; /* doing a special command, see defines above */
+ reqprot_t protocol; /* request protocol, HTTP or RTSP */
+ int prot_version; /* HTTP or RTSP version (major*10 + minor) */
+ bool pipelining; /* true if request is pipelined */
+ char *rtp_buffer;
+ size_t rtp_buffersize;
+};
+
+static int ProcessRequest(struct httprequest *req);
+static void storerequest(char *reqbuf, size_t totalsize);
+
+#define DEFAULT_PORT 8999
+
+#ifndef DEFAULT_LOGFILE
+#define DEFAULT_LOGFILE "log/rtspd.log"
+#endif
+
+const char *serverlogfile = DEFAULT_LOGFILE;
+
+#define RTSPDVERSION "cURL test suite RTSP server/0.1"
+
+#define REQUEST_DUMP "log/server.input"
+#define RESPONSE_DUMP "log/server.response"
+
+/* very-big-path support */
+#define MAXDOCNAMELEN 140000
+#define MAXDOCNAMELEN_TXT "139999"
+
+#define REQUEST_KEYWORD_SIZE 256
+#define REQUEST_KEYWORD_SIZE_TXT "255"
+
+#define CMD_AUTH_REQUIRED "auth_required"
+
+/* 'idle' means that it will accept the request fine but never respond
+ any data. Just keep the connection alive. */
+#define CMD_IDLE "idle"
+
+/* 'stream' means to send a never-ending stream of data */
+#define CMD_STREAM "stream"
+
+#define END_OF_HEADERS "\r\n\r\n"
+
+enum {
+ DOCNUMBER_NOTHING = -7,
+ DOCNUMBER_QUIT = -6,
+ DOCNUMBER_BADCONNECT = -5,
+ DOCNUMBER_INTERNAL= -4,
+ DOCNUMBER_CONNECT = -3,
+ DOCNUMBER_WERULEZ = -2,
+ DOCNUMBER_404 = -1
+};
+
+
+/* sent as reply to a QUIT */
+static const char *docquit =
+"HTTP/1.1 200 Goodbye" END_OF_HEADERS;
+
+/* sent as reply to a CONNECT */
+static const char *docconnect =
+"HTTP/1.1 200 Mighty fine indeed" END_OF_HEADERS;
+
+/* sent as reply to a "bad" CONNECT */
+static const char *docbadconnect =
+"HTTP/1.1 501 Forbidden you fool" END_OF_HEADERS;
+
+/* send back this on HTTP 404 file not found */
+static const char *doc404_HTTP = "HTTP/1.1 404 Not Found\r\n"
+ "Server: " RTSPDVERSION "\r\n"
+ "Connection: close\r\n"
+ "Content-Type: text/html"
+ END_OF_HEADERS
+ "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\n"
+ "<HTML><HEAD>\n"
+ "<TITLE>404 Not Found</TITLE>\n"
+ "</HEAD><BODY>\n"
+ "<H1>Not Found</H1>\n"
+ "The requested URL was not found on this server.\n"
+ "<P><HR><ADDRESS>" RTSPDVERSION "</ADDRESS>\n" "</BODY></HTML>\n";
+
+/* send back this on RTSP 404 file not found */
+static const char *doc404_RTSP = "RTSP/1.0 404 Not Found\r\n"
+ "Server: " RTSPDVERSION
+ END_OF_HEADERS;
+
+/* Default size to send away fake RTP data */
+#define RTP_DATA_SIZE 12
+static const char *RTP_DATA = "$_1234\n\0asdf";
+
+/* do-nothing macro replacement for systems which lack siginterrupt() */
+
+#ifndef HAVE_SIGINTERRUPT
+#define siginterrupt(x,y) do {} while(0)
+#endif
+
+/* vars used to keep around previous signal handlers */
+
+typedef RETSIGTYPE (*SIGHANDLER_T)(int);
+
+#ifdef SIGHUP
+static SIGHANDLER_T old_sighup_handler = SIG_ERR;
+#endif
+
+#ifdef SIGPIPE
+static SIGHANDLER_T old_sigpipe_handler = SIG_ERR;
+#endif
+
+#ifdef SIGALRM
+static SIGHANDLER_T old_sigalrm_handler = SIG_ERR;
+#endif
+
+#ifdef SIGINT
+static SIGHANDLER_T old_sigint_handler = SIG_ERR;
+#endif
+
+#ifdef SIGTERM
+static SIGHANDLER_T old_sigterm_handler = SIG_ERR;
+#endif
+
+/* var which if set indicates that the program should finish execution */
+
+SIG_ATOMIC_T got_exit_signal = 0;
+
+/* if next is set indicates the first signal handled in exit_signal_handler */
+
+static volatile int exit_signal = 0;
+
+/* signal handler that will be triggered to indicate that the program
+ should finish its execution in a controlled manner as soon as possible.
+ The first time this is called it will set got_exit_signal to one and
+ store in exit_signal the signal that triggered its execution. */
+
+static RETSIGTYPE exit_signal_handler(int signum)
+{
+ int old_errno = ERRNO;
+ if(got_exit_signal == 0) {
+ got_exit_signal = 1;
+ exit_signal = signum;
+ }
+ (void)signal(signum, exit_signal_handler);
+ SET_ERRNO(old_errno);
+}
+
+static void install_signal_handlers(void)
+{
+#ifdef SIGHUP
+ /* ignore SIGHUP signal */
+ if((old_sighup_handler = signal(SIGHUP, SIG_IGN)) == SIG_ERR)
+ logmsg("cannot install SIGHUP handler: %s", strerror(ERRNO));
+#endif
+#ifdef SIGPIPE
+ /* ignore SIGPIPE signal */
+ if((old_sigpipe_handler = signal(SIGPIPE, SIG_IGN)) == SIG_ERR)
+ logmsg("cannot install SIGPIPE handler: %s", strerror(ERRNO));
+#endif
+#ifdef SIGALRM
+ /* ignore SIGALRM signal */
+ if((old_sigalrm_handler = signal(SIGALRM, SIG_IGN)) == SIG_ERR)
+ logmsg("cannot install SIGALRM handler: %s", strerror(ERRNO));
+#endif
+#ifdef SIGINT
+ /* handle SIGINT signal with our exit_signal_handler */
+ if((old_sigint_handler = signal(SIGINT, exit_signal_handler)) == SIG_ERR)
+ logmsg("cannot install SIGINT handler: %s", strerror(ERRNO));
+ else
+ siginterrupt(SIGINT, 1);
+#endif
+#ifdef SIGTERM
+ /* handle SIGTERM signal with our exit_signal_handler */
+ if((old_sigterm_handler = signal(SIGTERM, exit_signal_handler)) == SIG_ERR)
+ logmsg("cannot install SIGTERM handler: %s", strerror(ERRNO));
+ else
+ siginterrupt(SIGTERM, 1);
+#endif
+}
+
+static void restore_signal_handlers(void)
+{
+#ifdef SIGHUP
+ if(SIG_ERR != old_sighup_handler)
+ (void)signal(SIGHUP, old_sighup_handler);
+#endif
+#ifdef SIGPIPE
+ if(SIG_ERR != old_sigpipe_handler)
+ (void)signal(SIGPIPE, old_sigpipe_handler);
+#endif
+#ifdef SIGALRM
+ if(SIG_ERR != old_sigalrm_handler)
+ (void)signal(SIGALRM, old_sigalrm_handler);
+#endif
+#ifdef SIGINT
+ if(SIG_ERR != old_sigint_handler)
+ (void)signal(SIGINT, old_sigint_handler);
+#endif
+#ifdef SIGTERM
+ if(SIG_ERR != old_sigterm_handler)
+ (void)signal(SIGTERM, old_sigterm_handler);
+#endif
+}
+
+static int ProcessRequest(struct httprequest *req)
+{
+ char *line=&req->reqbuf[req->checkindex];
+ bool chunked = FALSE;
+ static char request[REQUEST_KEYWORD_SIZE];
+ static char doc[MAXDOCNAMELEN];
+ static char prot_str[5];
+ char logbuf[256];
+ int prot_major, prot_minor;
+ char *end;
+ int error;
+ end = strstr(line, END_OF_HEADERS);
+
+ logmsg("ProcessRequest() called with testno %ld and line [%s]",
+ req->testno, line);
+
+ /* try to figure out the request characteristics as soon as possible, but
+ only once! */
+ if((req->testno == DOCNUMBER_NOTHING) &&
+ sscanf(line,
+ "%" REQUEST_KEYWORD_SIZE_TXT"s %" MAXDOCNAMELEN_TXT "s %4s/%d.%d",
+ request,
+ doc,
+ prot_str,
+ &prot_major,
+ &prot_minor) == 5) {
+ char *ptr;
+
+ if(!strcmp(prot_str, "HTTP")) {
+ req->protocol = RPROT_HTTP;
+ }
+ else if(!strcmp(prot_str, "RTSP")) {
+ req->protocol = RPROT_RTSP;
+ }
+ else {
+ req->protocol = RPROT_NONE;
+ logmsg("got unknown protocol %s", prot_str);
+ return 1;
+ }
+
+ req->prot_version = prot_major*10 + prot_minor;
+
+ /* find the last slash */
+ ptr = strrchr(doc, '/');
+
+ /* get the number after it */
+ if(ptr) {
+ FILE *stream;
+ char *filename;
+
+ if((strlen(doc) + strlen(request)) < 200)
+ sprintf(logbuf, "Got request: %s %s %s/%d.%d",
+ request, doc, prot_str, prot_major, prot_minor);
+ else
+ sprintf(logbuf, "Got a *HUGE* request %s/%d.%d",
+ prot_str, prot_major, prot_minor);
+ logmsg("%s", logbuf);
+
+ if(!strncmp("/verifiedserver", ptr, 15)) {
+ logmsg("Are-we-friendly question received");
+ req->testno = DOCNUMBER_WERULEZ;
+ return 1; /* done */
+ }
+
+ if(!strncmp("/quit", ptr, 5)) {
+ logmsg("Request-to-quit received");
+ req->testno = DOCNUMBER_QUIT;
+ return 1; /* done */
+ }
+
+ ptr++; /* skip the slash */
+
+ /* skip all non-numericals following the slash */
+ while(*ptr && !ISDIGIT(*ptr))
+ ptr++;
+
+ req->testno = strtol(ptr, &ptr, 10);
+
+ if(req->testno > 10000) {
+ req->partno = req->testno % 10000;
+ req->testno /= 10000;
+ }
+ else
+ req->partno = 0;
+
+ sprintf(logbuf, "Requested test number %ld part %ld",
+ req->testno, req->partno);
+ logmsg("%s", logbuf);
+
+ filename = test2file(req->testno);
+
+ stream=fopen(filename, "rb");
+ if(!stream) {
+ error = ERRNO;
+ logmsg("fopen() failed with error: %d %s", error, strerror(error));
+ logmsg("Error opening file: %s", filename);
+ logmsg("Couldn't open test file %ld", req->testno);
+ req->open = FALSE; /* closes connection */
+ return 1; /* done */
+ }
+ else {
+ char *cmd = NULL;
+ size_t cmdsize = 0;
+ int num=0;
+
+ int rtp_channel = 0;
+ int rtp_size = 0;
+ int rtp_partno = -1;
+ int i = 0;
+ char *rtp_scratch = NULL;
+
+ /* get the custom server control "commands" */
+ error = getpart(&cmd, &cmdsize, "reply", "servercmd", stream);
+ fclose(stream);
+ if(error) {
+ logmsg("getpart() failed with error: %d", error);
+ req->open = FALSE; /* closes connection */
+ return 1; /* done */
+ }
+ ptr = cmd;
+
+ if(cmdsize) {
+ logmsg("Found a reply-servercmd section!");
+ do {
+ if(!strncmp(CMD_AUTH_REQUIRED, ptr, strlen(CMD_AUTH_REQUIRED))) {
+ logmsg("instructed to require authorization header");
+ req->auth_req = TRUE;
+ }
+ else if(!strncmp(CMD_IDLE, ptr, strlen(CMD_IDLE))) {
+ logmsg("instructed to idle");
+ req->rcmd = RCMD_IDLE;
+ req->open = TRUE;
+ }
+ else if(!strncmp(CMD_STREAM, ptr, strlen(CMD_STREAM))) {
+ logmsg("instructed to stream");
+ req->rcmd = RCMD_STREAM;
+ }
+ else if(1 == sscanf(ptr, "pipe: %d", &num)) {
+ logmsg("instructed to allow a pipe size of %d", num);
+ if(num < 0)
+ logmsg("negative pipe size ignored");
+ else if(num > 0)
+ req->pipe = num-1; /* decrease by one since we don't count the
+ first request in this number */
+ }
+ else if(1 == sscanf(ptr, "skip: %d", &num)) {
+ logmsg("instructed to skip this number of bytes %d", num);
+ req->skip = num;
+ }
+ else if(3 == sscanf(ptr, "rtp: part %d channel %d size %d",
+ &rtp_partno, &rtp_channel, &rtp_size)) {
+
+ if(rtp_partno == req->partno) {
+ logmsg("RTP: part %d channel %d size %d",
+ rtp_partno, rtp_channel, rtp_size);
+
+ /* Make our scratch buffer enough to fit all the
+ * desired data and one for padding */
+ rtp_scratch = malloc(rtp_size + 4 + RTP_DATA_SIZE);
+
+ /* RTP is signalled with a $ */
+ rtp_scratch[0] = '$';
+
+ /* The channel follows and is one byte */
+ SET_RTP_PKT_CHN(rtp_scratch ,rtp_channel);
+
+ /* Length follows and is a two byte short in network order */
+ SET_RTP_PKT_LEN(rtp_scratch, rtp_size);
+
+ /* Fill it with junk data */
+ for(i = 0; i < rtp_size; i+= RTP_DATA_SIZE) {
+ memcpy(rtp_scratch + 4 + i, RTP_DATA, RTP_DATA_SIZE);
+ }
+
+ if(req->rtp_buffer == NULL) {
+ req->rtp_buffer = rtp_scratch;
+ req->rtp_buffersize = rtp_size + 4;
+ } else {
+ req->rtp_buffer = realloc(req->rtp_buffer, req->rtp_buffersize + rtp_size + 4);
+ memcpy(req->rtp_buffer + req->rtp_buffersize, rtp_scratch, rtp_size + 4);
+ req->rtp_buffersize += rtp_size + 4;
+ free(rtp_scratch);
+ }
+ logmsg("rtp_buffersize is %zu, rtp_size is %d.", req->rtp_buffersize, rtp_size);
+
+ }
+ }
+ else {
+ logmsg("funny instruction found: %s", ptr);
+ }
+
+ ptr = strchr(ptr, '\n');
+ if(ptr)
+ ptr++;
+ else
+ ptr = NULL;
+ } while(ptr && *ptr);
+ logmsg("Done parsing server commands");
+ }
+ if(cmd)
+ free(cmd);
+ }
+ }
+ else {
+ if(sscanf(req->reqbuf, "CONNECT %" MAXDOCNAMELEN_TXT "s HTTP/%d.%d",
+ doc, &prot_major, &prot_minor) == 3) {
+ sprintf(logbuf, "Received a CONNECT %s HTTP/%d.%d request",
+ doc, prot_major, prot_minor);
+ logmsg("%s", logbuf);
+
+ if(req->prot_version == 10)
+ req->open = FALSE; /* HTTP 1.0 closes connection by default */
+
+ if(!strncmp(doc, "bad", 3))
+ /* if the host name starts with bad, we fake an error here */
+ req->testno = DOCNUMBER_BADCONNECT;
+ else if(!strncmp(doc, "test", 4)) {
+ /* if the host name starts with test, the port number used in the
+ CONNECT line will be used as test number! */
+ char *portp = strchr(doc, ':');
+ if(portp)
+ req->testno = atoi(portp+1);
+ else
+ req->testno = DOCNUMBER_CONNECT;
+ }
+ else
+ req->testno = DOCNUMBER_CONNECT;
+ }
+ else {
+ logmsg("Did not find test number in PATH");
+ req->testno = DOCNUMBER_404;
+ }
+ }
+ }
+
+ if(!end) {
+ /* we don't have a complete request yet! */
+ logmsg("ProcessRequest returned without a complete request");
+ return 0; /* not complete yet */
+ }
+ logmsg("ProcessRequest found a complete request");
+
+ if(req->pipe)
+ /* we do have a full set, advance the checkindex to after the end of the
+ headers, for the pipelining case mostly */
+ req->checkindex += (end - line) + strlen(END_OF_HEADERS);
+
+ /* **** Persistence ****
+ *
+ * If the request is a HTTP/1.0 one, we close the connection unconditionally
+ * when we're done.
+ *
+ * If the request is a HTTP/1.1 one, we MUST check for a "Connection:"
+ * header that might say "close". If it does, we close a connection when
+ * this request is processed. Otherwise, we keep the connection alive for X
+ * seconds.
+ */
+
+ do {
+ if(got_exit_signal)
+ return 1; /* done */
+
+ if((req->cl==0) && curlx_strnequal("Content-Length:", line, 15)) {
+ /* If we don't ignore content-length, we read it and we read the whole
+ request including the body before we return. If we've been told to
+ ignore the content-length, we will return as soon as all headers
+ have been received */
+ char *endptr;
+ char *ptr = line + 15;
+ unsigned long clen = 0;
+ while(*ptr && ISSPACE(*ptr))
+ ptr++;
+ endptr = ptr;
+ SET_ERRNO(0);
+ clen = strtoul(ptr, &endptr, 10);
+ if((ptr == endptr) || !ISSPACE(*endptr) || (ERANGE == ERRNO)) {
+ /* this assumes that a zero Content-Length is valid */
+ logmsg("Found invalid Content-Length: (%s) in the request", ptr);
+ req->open = FALSE; /* closes connection */
+ return 1; /* done */
+ }
+ req->cl = clen - req->skip;
+
+ logmsg("Found Content-Length: %lu in the request", clen);
+ if(req->skip)
+ logmsg("... but will abort after %zu bytes", req->cl);
+ break;
+ }
+ else if(curlx_strnequal("Transfer-Encoding: chunked", line,
+ strlen("Transfer-Encoding: chunked"))) {
+ /* chunked data coming in */
+ chunked = TRUE;
+ }
+
+ if(chunked) {
+ if(strstr(req->reqbuf, "\r\n0\r\n\r\n"))
+ /* end of chunks reached */
+ return 1; /* done */
+ else
+ return 0; /* not done */
+ }
+
+ line = strchr(line, '\n');
+ if(line)
+ line++;
+
+ } while(line);
+
+ if(!req->auth && strstr(req->reqbuf, "Authorization:")) {
+ req->auth = TRUE; /* Authorization: header present! */
+ if(req->auth_req)
+ logmsg("Authorization header found, as required");
+ }
+
+ if(!req->digest && strstr(req->reqbuf, "Authorization: Digest")) {
+ /* If the client is passing this Digest-header, we set the part number
+ to 1000. Not only to spice up the complexity of this, but to make
+ Digest stuff to work in the test suite. */
+ req->partno += 1000;
+ req->digest = TRUE; /* header found */
+ logmsg("Received Digest request, sending back data %ld", req->partno);
+ }
+ else if(!req->ntlm &&
+ strstr(req->reqbuf, "Authorization: NTLM TlRMTVNTUAAD")) {
+ /* If the client is passing this type-3 NTLM header */
+ req->partno += 1002;
+ req->ntlm = TRUE; /* NTLM found */
+ logmsg("Received NTLM type-3, sending back data %ld", req->partno);
+ if(req->cl) {
+ logmsg(" Expecting %zu POSTed bytes", req->cl);
+ }
+ }
+ else if(!req->ntlm &&
+ strstr(req->reqbuf, "Authorization: NTLM TlRMTVNTUAAB")) {
+ /* If the client is passing this type-1 NTLM header */
+ req->partno += 1001;
+ req->ntlm = TRUE; /* NTLM found */
+ logmsg("Received NTLM type-1, sending back data %ld", req->partno);
+ }
+ else if((req->partno >= 1000) && strstr(req->reqbuf, "Authorization: Basic")) {
+ /* If the client is passing this Basic-header and the part number is already
+ >=1000, we add 1 to the part number. This allows simple Basic authentication
+ negotiation to work in the test suite. */
+ req->partno += 1;
+ logmsg("Received Basic request, sending back data %ld", req->partno);
+ }
+ if(strstr(req->reqbuf, "Connection: close"))
+ req->open = FALSE; /* close connection after this request */
+
+ if(!req->pipe &&
+ req->open &&
+ req->prot_version >= 11 &&
+ end &&
+ req->reqbuf + req->offset > end + strlen(END_OF_HEADERS) &&
+ (!strncmp(req->reqbuf, "GET", strlen("GET")) ||
+ !strncmp(req->reqbuf, "HEAD", strlen("HEAD")))) {
+ /* If we have a persistent connection, HTTP version >= 1.1
+ and GET/HEAD request, enable pipelining. */
+ req->checkindex = (end - req->reqbuf) + strlen(END_OF_HEADERS);
+ req->pipelining = TRUE;
+ }
+
+ while(req->pipe) {
+ if(got_exit_signal)
+ return 1; /* done */
+ /* scan for more header ends within this chunk */
+ line = &req->reqbuf[req->checkindex];
+ end = strstr(line, END_OF_HEADERS);
+ if(!end)
+ break;
+ req->checkindex += (end - line) + strlen(END_OF_HEADERS);
+ req->pipe--;
+ }
+
+ /* If authentication is required and no auth was provided, end now. This
+ makes the server NOT wait for PUT/POST data and you can then make the
+ test case send a rejection before any such data has been sent. Test case
+ 154 uses this.*/
+ if(req->auth_req && !req->auth)
+ return 1; /* done */
+
+ if(req->cl > 0) {
+ if(req->cl <= req->offset - (end - req->reqbuf) - strlen(END_OF_HEADERS))
+ return 1; /* done */
+ else
+ return 0; /* not complete yet */
+ }
+
+ return 1; /* done */
+}
+
+/* store the entire request in a file */
+static void storerequest(char *reqbuf, size_t totalsize)
+{
+ int res;
+ int error = 0;
+ size_t written;
+ size_t writeleft;
+ FILE *dump;
+
+ if (reqbuf == NULL)
+ return;
+ if (totalsize == 0)
+ return;
+
+ do {
+ dump = fopen(REQUEST_DUMP, "ab");
+ } while ((dump == NULL) && ((error = ERRNO) == EINTR));
+ if (dump == NULL) {
+ logmsg("Error opening file %s error: %d %s",
+ REQUEST_DUMP, error, strerror(error));
+ logmsg("Failed to write request input to " REQUEST_DUMP);
+ return;
+ }
+
+ writeleft = totalsize;
+ do {
+ written = fwrite(&reqbuf[totalsize-writeleft],
+ 1, writeleft, dump);
+ if(got_exit_signal)
+ goto storerequest_cleanup;
+ if(written > 0)
+ writeleft -= written;
+ } while ((writeleft > 0) && ((error = ERRNO) == EINTR));
+
+ if(writeleft == 0)
+ logmsg("Wrote request (%zu bytes) input to " REQUEST_DUMP, totalsize);
+ else if(writeleft > 0) {
+ logmsg("Error writing file %s error: %d %s",
+ REQUEST_DUMP, error, strerror(error));
+ logmsg("Wrote only (%zu bytes) of (%zu bytes) request input to %s",
+ totalsize-writeleft, totalsize, REQUEST_DUMP);
+ }
+
+storerequest_cleanup:
+
+ do {
+ res = fclose(dump);
+ } while(res && ((error = ERRNO) == EINTR));
+ if(res)
+ logmsg("Error closing file %s error: %d %s",
+ REQUEST_DUMP, error, strerror(error));
+}
+
+/* return 0 on success, non-zero on failure */
+static int get_request(curl_socket_t sock, struct httprequest *req)
+{
+ int error;
+ int fail = 0;
+ int done_processing = 0;
+ char *reqbuf = req->reqbuf;
+ ssize_t got = 0;
+
+ char *pipereq = NULL;
+ size_t pipereq_length = 0;
+
+ if(req->pipelining) {
+ pipereq = reqbuf + req->checkindex;
+ pipereq_length = req->offset - req->checkindex;
+ }
+
+ /*** Init the httprequest structure properly for the upcoming request ***/
+
+ req->checkindex = 0;
+ req->offset = 0;
+ req->testno = DOCNUMBER_NOTHING;
+ req->partno = 0;
+ req->open = TRUE;
+ req->auth_req = FALSE;
+ req->auth = FALSE;
+ req->cl = 0;
+ req->digest = FALSE;
+ req->ntlm = FALSE;
+ req->pipe = 0;
+ req->skip = 0;
+ req->rcmd = RCMD_NORMALREQ;
+ req->protocol = RPROT_NONE;
+ req->prot_version = 0;
+ req->pipelining = FALSE;
+ req->rtp_buffer = NULL;
+ req->rtp_buffersize = 0;
+
+ /*** end of httprequest init ***/
+
+ while(!done_processing && (req->offset < REQBUFSIZ-1)) {
+ if(pipereq_length && pipereq) {
+ memmove(reqbuf, pipereq, pipereq_length);
+ got = pipereq_length;
+ pipereq_length = 0;
+ }
+ else {
+ if(req->skip)
+ /* we are instructed to not read the entire thing, so we make sure to only
+ read what we're supposed to and NOT read the enire thing the client
+ wants to send! */
+ got = sread(sock, reqbuf + req->offset, req->cl);
+ else
+ got = sread(sock, reqbuf + req->offset, REQBUFSIZ-1 - req->offset);
+ }
+ if(got_exit_signal)
+ return 1;
+ if(got == 0) {
+ logmsg("Connection closed by client");
+ fail = 1;
+ }
+ else if(got < 0) {
+ error = SOCKERRNO;
+ logmsg("recv() returned error: (%d) %s", error, strerror(error));
+ fail = 1;
+ }
+ if(fail) {
+ /* dump the request received so far to the external file */
+ reqbuf[req->offset] = '\0';
+ storerequest(reqbuf, req->offset);
+ return 1;
+ }
+
+ logmsg("Read %zd bytes", got);
+
+ req->offset += (size_t)got;
+ reqbuf[req->offset] = '\0';
+
+ done_processing = ProcessRequest(req);
+ if(got_exit_signal)
+ return 1;
+ if(done_processing && req->pipe) {
+ logmsg("Waiting for another piped request");
+ done_processing = 0;
+ req->pipe--;
+ }
+ }
+
+ if((req->offset == REQBUFSIZ-1) && (got > 0)) {
+ logmsg("Request would overflow buffer, closing connection");
+ /* dump request received so far to external file anyway */
+ reqbuf[REQBUFSIZ-1] = '\0';
+ fail = 1;
+ }
+ else if(req->offset > REQBUFSIZ-1) {
+ logmsg("Request buffer overflow, closing connection");
+ /* dump request received so far to external file anyway */
+ reqbuf[REQBUFSIZ-1] = '\0';
+ fail = 1;
+ }
+ else
+ reqbuf[req->offset] = '\0';
+
+ /* dump the request to an external file */
+ storerequest(reqbuf, req->pipelining ? req->checkindex : req->offset);
+ if(got_exit_signal)
+ return 1;
+
+ return fail; /* return 0 on success */
+}
+
+/* returns -1 on failure */
+static int send_doc(curl_socket_t sock, struct httprequest *req)
+{
+ ssize_t written;
+ size_t count;
+ const char *buffer;
+ char *ptr=NULL;
+ FILE *stream;
+ char *cmd=NULL;
+ size_t cmdsize=0;
+ FILE *dump;
+ bool persistant = TRUE;
+ bool sendfailure = FALSE;
+ size_t responsesize;
+ int error = 0;
+ int res;
+
+ static char weare[256];
+
+ char partbuf[80]="data";
+
+ logmsg("Send response number %ld part %ld", req->testno, req->partno);
+
+ switch(req->rcmd) {
+ default:
+ case RCMD_NORMALREQ:
+ break; /* continue with business as usual */
+ case RCMD_STREAM:
+#define STREAMTHIS "a string to stream 01234567890\n"
+ count = strlen(STREAMTHIS);
+ for (;;) {
+ written = swrite(sock, STREAMTHIS, count);
+ if(got_exit_signal)
+ return -1;
+ if(written != (ssize_t)count) {
+ logmsg("Stopped streaming");
+ break;
+ }
+ }
+ return -1;
+ case RCMD_IDLE:
+ /* Do nothing. Sit idle. Pretend it rains. */
+ return 0;
+ }
+
+ req->open = FALSE;
+
+ if(req->testno < 0) {
+ size_t msglen;
+ char msgbuf[64];
+
+ switch(req->testno) {
+ case DOCNUMBER_QUIT:
+ logmsg("Replying to QUIT");
+ buffer = docquit;
+ break;
+ case DOCNUMBER_WERULEZ:
+ /* we got a "friends?" question, reply back that we sure are */
+ logmsg("Identifying ourselves as friends");
+ sprintf(msgbuf, "RTSP_SERVER WE ROOLZ: %ld\r\n", (long)getpid());
+ msglen = strlen(msgbuf);
+ sprintf(weare, "HTTP/1.1 200 OK\r\nContent-Length: %zu\r\n\r\n%s",
+ msglen, msgbuf);
+ buffer = weare;
+ break;
+ case DOCNUMBER_INTERNAL:
+ logmsg("Bailing out due to internal error");
+ return -1;
+ case DOCNUMBER_CONNECT:
+ logmsg("Replying to CONNECT");
+ buffer = docconnect;
+ break;
+ case DOCNUMBER_BADCONNECT:
+ logmsg("Replying to a bad CONNECT");
+ buffer = docbadconnect;
+ break;
+ case DOCNUMBER_404:
+ default:
+ logmsg("Replying to with a 404");
+ if(req->protocol == RPROT_HTTP) {
+ buffer = doc404_HTTP;
+ } else {
+ buffer = doc404_RTSP;
+ }
+ break;
+ }
+
+ count = strlen(buffer);
+ }
+ else {
+ char *filename = test2file(req->testno);
+
+ if(0 != req->partno)
+ sprintf(partbuf, "data%ld", req->partno);
+
+ stream=fopen(filename, "rb");
+ if(!stream) {
+ error = ERRNO;
+ logmsg("fopen() failed with error: %d %s", error, strerror(error));
+ logmsg("Error opening file: %s", filename);
+ logmsg("Couldn't open test file");
+ return 0;
+ }
+ else {
+ error = getpart(&ptr, &count, "reply", partbuf, stream);
+ fclose(stream);
+ if(error) {
+ logmsg("getpart() failed with error: %d", error);
+ return 0;
+ }
+ buffer = ptr;
+ }
+
+ if(got_exit_signal) {
+ if(ptr)
+ free(ptr);
+ return -1;
+ }
+
+ /* re-open the same file again */
+ stream=fopen(filename, "rb");
+ if(!stream) {
+ error = ERRNO;
+ logmsg("fopen() failed with error: %d %s", error, strerror(error));
+ logmsg("Error opening file: %s", filename);
+ logmsg("Couldn't open test file");
+ if(ptr)
+ free(ptr);
+ return 0;
+ }
+ else {
+ /* get the custom server control "commands" */
+ error = getpart(&cmd, &cmdsize, "reply", "postcmd", stream);
+ fclose(stream);
+ if(error) {
+ logmsg("getpart() failed with error: %d", error);
+ if(ptr)
+ free(ptr);
+ return 0;
+ }
+ }
+ }
+
+ if(got_exit_signal) {
+ if(ptr)
+ free(ptr);
+ if(cmd)
+ free(cmd);
+ return -1;
+ }
+
+ /* If the word 'swsclose' is present anywhere in the reply chunk, the
+ connection will be closed after the data has been sent to the requesting
+ client... */
+ if(strstr(buffer, "swsclose") || !count) {
+ persistant = FALSE;
+ logmsg("connection close instruction \"swsclose\" found in response");
+ }
+ if(strstr(buffer, "swsbounce")) {
+ prevbounce = TRUE;
+ logmsg("enable \"swsbounce\" in the next request");
+ }
+ else
+ prevbounce = FALSE;
+
+ dump = fopen(RESPONSE_DUMP, "ab");
+ if(!dump) {
+ error = ERRNO;
+ logmsg("fopen() failed with error: %d %s", error, strerror(error));
+ logmsg("Error opening file: %s", RESPONSE_DUMP);
+ logmsg("couldn't create logfile: " RESPONSE_DUMP);
+ if(ptr)
+ free(ptr);
+ if(cmd)
+ free(cmd);
+ return -1;
+ }
+
+ responsesize = count;
+ do {
+ /* Ok, we send no more than 200 bytes at a time, just to make sure that
+ larger chunks are split up so that the client will need to do multiple
+ recv() calls to get it and thus we exercise that code better */
+ size_t num = count;
+ if(num > 200)
+ num = 200;
+ written = swrite(sock, buffer, num);
+ if (written < 0) {
+ sendfailure = TRUE;
+ break;
+ }
+ else {
+ logmsg("Sent off %zd bytes", written);
+ }
+ /* write to file as well */
+ fwrite(buffer, 1, (size_t)written, dump);
+ if(got_exit_signal)
+ break;
+
+ count -= written;
+ buffer += written;
+ } while(count>0);
+
+ /* Send out any RTP data */
+ if(req->rtp_buffer) {
+ logmsg("About to write %zu RTP bytes", req->rtp_buffersize);
+ count = req->rtp_buffersize;
+ do {
+ size_t num = count;
+ if(num > 200)
+ num = 200;
+ written = swrite(sock, req->rtp_buffer + (req->rtp_buffersize - count), num);
+ if(written < 0) {
+ sendfailure = TRUE;
+ break;
+ }
+ count -= written;
+ } while(count > 0);
+
+ free(req->rtp_buffer);
+ req->rtp_buffersize = 0;
+ }
+
+ do {
+ res = fclose(dump);
+ } while(res && ((error = ERRNO) == EINTR));
+ if(res)
+ logmsg("Error closing file %s error: %d %s",
+ RESPONSE_DUMP, error, strerror(error));
+
+ if(got_exit_signal) {
+ if(ptr)
+ free(ptr);
+ if(cmd)
+ free(cmd);
+ return -1;
+ }
+
+ if(sendfailure) {
+ logmsg("Sending response failed. Only (%zu bytes) of (%zu bytes) were sent",
+ responsesize-count, responsesize);
+ if(ptr)
+ free(ptr);
+ if(cmd)
+ free(cmd);
+ return -1;
+ }
+
+ logmsg("Response sent (%zu bytes) and written to " RESPONSE_DUMP,
+ responsesize);
+
+ if(ptr)
+ free(ptr);
+
+ if(cmdsize > 0 ) {
+ char command[32];
+ int quarters;
+ int num;
+ ptr=cmd;
+ do {
+ if(2 == sscanf(ptr, "%31s %d", command, &num)) {
+ if(!strcmp("wait", command)) {
+ logmsg("Told to sleep for %d seconds", num);
+ quarters = num * 4;
+ while(quarters > 0) {
+ quarters--;
+ res = wait_ms(250);
+ if(got_exit_signal)
+ break;
+ if(res) {
+ /* should not happen */
+ error = SOCKERRNO;
+ logmsg("wait_ms() failed with error: (%d) %s",
+ error, strerror(error));
+ break;
+ }
+ }
+ if(!quarters)
+ logmsg("Continuing after sleeping %d seconds", num);
+ }
+ else
+ logmsg("Unknown command in reply command section");
+ }
+ ptr = strchr(ptr, '\n');
+ if(ptr)
+ ptr++;
+ else
+ ptr = NULL;
+ } while(ptr && *ptr);
+ }
+ if(cmd)
+ free(cmd);
+
+ req->open = persistant;
+
+ prevtestno = req->testno;
+ prevpartno = req->partno;
+
+ return 0;
+}
+
+
+int main(int argc, char *argv[])
+{
+ struct sockaddr_in me;
+#ifdef ENABLE_IPV6
+ struct sockaddr_in6 me6;
+#endif /* ENABLE_IPV6 */
+ curl_socket_t sock = CURL_SOCKET_BAD;
+ curl_socket_t msgsock = CURL_SOCKET_BAD;
+ int wrotepidfile = 0;
+ int flag;
+ unsigned short port = DEFAULT_PORT;
+ char *pidname= (char *)".rtsp.pid";
+ struct httprequest req;
+ int rc;
+ int error;
+ int arg=1;
+ long pid;
+
+ while(argc>arg) {
+ if(!strcmp("--version", argv[arg])) {
+ printf("rtspd IPv4%s"
+ "\n"
+ ,
+#ifdef ENABLE_IPV6
+ "/IPv6"
+#else
+ ""
+#endif
+ );
+ return 0;
+ }
+ else if(!strcmp("--pidfile", argv[arg])) {
+ arg++;
+ if(argc>arg)
+ pidname = argv[arg++];
+ }
+ else if(!strcmp("--logfile", argv[arg])) {
+ arg++;
+ if(argc>arg)
+ serverlogfile = argv[arg++];
+ }
+ else if(!strcmp("--ipv4", argv[arg])) {
+#ifdef ENABLE_IPV6
+ ipv_inuse = "IPv4";
+ use_ipv6 = FALSE;
+#endif
+ arg++;
+ }
+ else if(!strcmp("--ipv6", argv[arg])) {
+#ifdef ENABLE_IPV6
+ ipv_inuse = "IPv6";
+ use_ipv6 = TRUE;
+#endif
+ arg++;
+ }
+ else if(!strcmp("--port", argv[arg])) {
+ arg++;
+ if(argc>arg) {
+ char *endptr;
+ unsigned long ulnum = strtoul(argv[arg], &endptr, 10);
+ if((endptr != argv[arg] + strlen(argv[arg])) ||
+ (ulnum < 1025UL) || (ulnum > 65535UL)) {
+ fprintf(stderr, "rtspd: invalid --port argument (%s)\n",
+ argv[arg]);
+ return 0;
+ }
+ port = curlx_ultous(ulnum);
+ arg++;
+ }
+ }
+ else if(!strcmp("--srcdir", argv[arg])) {
+ arg++;
+ if(argc>arg) {
+ path = argv[arg];
+ arg++;
+ }
+ }
+ else {
+ puts("Usage: rtspd [option]\n"
+ " --version\n"
+ " --logfile [file]\n"
+ " --pidfile [file]\n"
+ " --ipv4\n"
+ " --ipv6\n"
+ " --port [port]\n"
+ " --srcdir [path]");
+ return 0;
+ }
+ }
+
+#ifdef WIN32
+ win32_init();
+ atexit(win32_cleanup);
+#endif
+
+ install_signal_handlers();
+
+ pid = (long)getpid();
+
+#ifdef ENABLE_IPV6
+ if(!use_ipv6)
+#endif
+ sock = socket(AF_INET, SOCK_STREAM, 0);
+#ifdef ENABLE_IPV6
+ else
+ sock = socket(AF_INET6, SOCK_STREAM, 0);
+#endif
+
+ if(CURL_SOCKET_BAD == sock) {
+ error = SOCKERRNO;
+ logmsg("Error creating socket: (%d) %s",
+ error, strerror(error));
+ goto server_cleanup;
+ }
+
+ flag = 1;
+ if (0 != setsockopt(sock, SOL_SOCKET, SO_REUSEADDR,
+ (void *)&flag, sizeof(flag))) {
+ error = SOCKERRNO;
+ logmsg("setsockopt(SO_REUSEADDR) failed with error: (%d) %s",
+ error, strerror(error));
+ goto server_cleanup;
+ }
+
+#ifdef ENABLE_IPV6
+ if(!use_ipv6) {
+#endif
+ memset(&me, 0, sizeof(me));
+ me.sin_family = AF_INET;
+ me.sin_addr.s_addr = INADDR_ANY;
+ me.sin_port = htons(port);
+ rc = bind(sock, (struct sockaddr *) &me, sizeof(me));
+#ifdef ENABLE_IPV6
+ }
+ else {
+ memset(&me6, 0, sizeof(me6));
+ me6.sin6_family = AF_INET6;
+ me6.sin6_addr = in6addr_any;
+ me6.sin6_port = htons(port);
+ rc = bind(sock, (struct sockaddr *) &me6, sizeof(me6));
+ }
+#endif /* ENABLE_IPV6 */
+ if(0 != rc) {
+ error = SOCKERRNO;
+ logmsg("Error binding socket on port %hu: (%d) %s",
+ port, error, strerror(error));
+ goto server_cleanup;
+ }
+
+ logmsg("Running %s version on port %d", ipv_inuse, (int)port);
+
+ /* start accepting connections */
+ rc = listen(sock, 5);
+ if(0 != rc) {
+ error = SOCKERRNO;
+ logmsg("listen() failed with error: (%d) %s",
+ error, strerror(error));
+ goto server_cleanup;
+ }
+
+ /*
+ ** As soon as this server writes its pid file the test harness will
+ ** attempt to connect to this server and initiate its verification.
+ */
+
+ wrotepidfile = write_pidfile(pidname);
+ if(!wrotepidfile)
+ goto server_cleanup;
+
+ for (;;) {
+ msgsock = accept(sock, NULL, NULL);
+
+ if(got_exit_signal)
+ break;
+ if (CURL_SOCKET_BAD == msgsock) {
+ error = SOCKERRNO;
+ logmsg("MAJOR ERROR: accept() failed with error: (%d) %s",
+ error, strerror(error));
+ break;
+ }
+
+ /*
+ ** As soon as this server acepts a connection from the test harness it
+ ** must set the server logs advisor read lock to indicate that server
+ ** logs should not be read until this lock is removed by this server.
+ */
+
+ set_advisor_read_lock(SERVERLOGS_LOCK);
+ serverlogslocked = 1;
+
+ logmsg("====> Client connect");
+
+#ifdef TCP_NODELAY
+ /*
+ * Disable the Nagle algorithm to make it easier to send out a large
+ * response in many small segments to torture the clients more.
+ */
+ flag = 1;
+ if (setsockopt(msgsock, IPPROTO_TCP, TCP_NODELAY,
+ (void *)&flag, sizeof(flag)) == -1) {
+ logmsg("====> TCP_NODELAY failed");
+ }
+#endif
+
+ /* initialization of httprequest struct is done in get_request(), but due
+ to pipelining treatment the pipelining struct field must be initialized
+ previously to FALSE every time a new connection arrives. */
+
+ req.pipelining = FALSE;
+
+ do {
+ if(got_exit_signal)
+ break;
+
+ if(get_request(msgsock, &req))
+ /* non-zero means error, break out of loop */
+ break;
+
+ if(prevbounce) {
+ /* bounce treatment requested */
+ if((req.testno == prevtestno) &&
+ (req.partno == prevpartno)) {
+ req.partno++;
+ logmsg("BOUNCE part number to %ld", req.partno);
+ }
+ else {
+ prevbounce = FALSE;
+ prevtestno = -1;
+ prevpartno = -1;
+ }
+ }
+
+ send_doc(msgsock, &req);
+ if(got_exit_signal)
+ break;
+
+ if((req.testno < 0) && (req.testno != DOCNUMBER_CONNECT)) {
+ logmsg("special request received, no persistency");
+ break;
+ }
+ if(!req.open) {
+ logmsg("instructed to close connection after server-reply");
+ break;
+ }
+
+ if(req.open)
+ logmsg("=> persistant connection request ended, awaits new request");
+ /* if we got a CONNECT, loop and get another request as well! */
+ } while(req.open || (req.testno == DOCNUMBER_CONNECT));
+
+ if(got_exit_signal)
+ break;
+
+ logmsg("====> Client disconnect");
+ sclose(msgsock);
+ msgsock = CURL_SOCKET_BAD;
+
+ if(serverlogslocked) {
+ serverlogslocked = 0;
+ clear_advisor_read_lock(SERVERLOGS_LOCK);
+ }
+
+ if (req.testno == DOCNUMBER_QUIT)
+ break;
+ }
+
+server_cleanup:
+
+ if((msgsock != sock) && (msgsock != CURL_SOCKET_BAD))
+ sclose(msgsock);
+
+ if(sock != CURL_SOCKET_BAD)
+ sclose(sock);
+
+ if(got_exit_signal)
+ logmsg("signalled to die");
+
+ if(wrotepidfile)
+ unlink(pidname);
+
+ if(serverlogslocked) {
+ serverlogslocked = 0;
+ clear_advisor_read_lock(SERVERLOGS_LOCK);
+ }
+
+ restore_signal_handlers();
+
+ if(got_exit_signal) {
+ logmsg("========> %s rtspd (port: %d pid: %ld) exits with signal (%d)",
+ ipv_inuse, (int)port, pid, exit_signal);
+ /*
+ * To properly set the return status of the process we
+ * must raise the same signal SIGINT or SIGTERM that we
+ * caught and let the old handler take care of it.
+ */
+ raise(exit_signal);
+ }
+
+ logmsg("========> rtspd quits");
+ return 0;
+}
+
diff --git a/tests/server/sockfilt.c b/tests/server/sockfilt.c
new file mode 100644
index 0000000..714d6fc
--- /dev/null
+++ b/tests/server/sockfilt.c
@@ -0,0 +1,1053 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at http://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ***************************************************************************/
+
+/* Purpose
+ *
+ * 1. Accept a TCP connection on a custom port (ipv4 or ipv6), or connect
+ * to a given (localhost) port.
+ *
+ * 2. Get commands on STDIN. Pass data on to the TCP stream.
+ * Get data from TCP stream and pass on to STDOUT.
+ *
+ * This program is made to perform all the socket/stream/connection stuff for
+ * the test suite's (perl) FTP server. Previously the perl code did all of
+ * this by its own, but I decided to let this program do the socket layer
+ * because of several things:
+ *
+ * o We want the perl code to work with rather old perl installations, thus
+ * we cannot use recent perl modules or features.
+ *
+ * o We want IPv6 support for systems that provide it, and doing optional IPv6
+ * support in perl seems if not impossible so at least awkward.
+ *
+ * o We want FTP-SSL support, which means that a connection that starts with
+ * plain sockets needs to be able to "go SSL" in the midst. This would also
+ * require some nasty perl stuff I'd rather avoid.
+ *
+ * (Source originally based on sws.c)
+ */
+
+/*
+ * Signal handling notes for sockfilt
+ * ----------------------------------
+ *
+ * This program is a single-threaded process.
+ *
+ * This program is intended to be highly portable and as such it must be kept as
+ * simple as possible, due to this the only signal handling mechanisms used will
+ * be those of ANSI C, and used only in the most basic form which is good enough
+ * for the purpose of this program.
+ *
+ * For the above reason and the specific needs of this program signals SIGHUP,
+ * SIGPIPE and SIGALRM will be simply ignored on systems where this can be done.
+ * If possible, signals SIGINT and SIGTERM will be handled by this program as an
+ * indication to cleanup and finish execution as soon as possible. This will be
+ * achieved with a single signal handler 'exit_signal_handler' for both signals.
+ *
+ * The 'exit_signal_handler' upon the first SIGINT or SIGTERM received signal
+ * will just set to one the global var 'got_exit_signal' storing in global var
+ * 'exit_signal' the signal that triggered this change.
+ *
+ * Nothing fancy that could introduce problems is used, the program at certain
+ * points in its normal flow checks if var 'got_exit_signal' is set and in case
+ * this is true it just makes its way out of loops and functions in structured
+ * and well behaved manner to achieve proper program cleanup and termination.
+ *
+ * Even with the above mechanism implemented it is worthwile to note that other
+ * signals might still be received, or that there might be systems on which it
+ * is not possible to trap and ignore some of the above signals. This implies
+ * that for increased portability and reliability the program must be coded as
+ * if no signal was being ignored or handled at all. Enjoy it!
+ */
+
+#define CURL_NO_OLDIES
+
+#include "setup.h" /* portability help from the lib directory */
+
+#ifdef HAVE_SIGNAL_H
+#include <signal.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#ifdef HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+#ifdef HAVE_ARPA_INET_H
+#include <arpa/inet.h>
+#endif
+#ifdef HAVE_NETDB_H
+#include <netdb.h>
+#endif
+
+#define ENABLE_CURLX_PRINTF
+/* make the curlx header define all printf() functions to use the curlx_*
+ versions instead */
+#include "curlx.h" /* from the private lib dir */
+#include "getpart.h"
+#include "inet_pton.h"
+#include "util.h"
+
+/* include memdebug.h last */
+#include "memdebug.h"
+
+#define DEFAULT_PORT 8999
+
+#ifndef DEFAULT_LOGFILE
+#define DEFAULT_LOGFILE "log/sockfilt.log"
+#endif
+
+const char *serverlogfile = DEFAULT_LOGFILE;
+
+static bool verbose = FALSE;
+#ifdef ENABLE_IPV6
+static bool use_ipv6 = FALSE;
+#endif
+static const char *ipv_inuse = "IPv4";
+static unsigned short port = DEFAULT_PORT;
+static unsigned short connectport = 0; /* if non-zero, we activate this mode */
+
+enum sockmode {
+ PASSIVE_LISTEN, /* as a server waiting for connections */
+ PASSIVE_CONNECT, /* as a server, connected to a client */
+ ACTIVE, /* as a client, connected to a server */
+ ACTIVE_DISCONNECT /* as a client, disconnected from server */
+};
+
+/* do-nothing macro replacement for systems which lack siginterrupt() */
+
+#ifndef HAVE_SIGINTERRUPT
+#define siginterrupt(x,y) do {} while(0)
+#endif
+
+/* vars used to keep around previous signal handlers */
+
+typedef RETSIGTYPE (*SIGHANDLER_T)(int);
+
+#ifdef SIGHUP
+static SIGHANDLER_T old_sighup_handler = SIG_ERR;
+#endif
+
+#ifdef SIGPIPE
+static SIGHANDLER_T old_sigpipe_handler = SIG_ERR;
+#endif
+
+#ifdef SIGALRM
+static SIGHANDLER_T old_sigalrm_handler = SIG_ERR;
+#endif
+
+#ifdef SIGINT
+static SIGHANDLER_T old_sigint_handler = SIG_ERR;
+#endif
+
+#ifdef SIGTERM
+static SIGHANDLER_T old_sigterm_handler = SIG_ERR;
+#endif
+
+/* var which if set indicates that the program should finish execution */
+
+SIG_ATOMIC_T got_exit_signal = 0;
+
+/* if next is set indicates the first signal handled in exit_signal_handler */
+
+static volatile int exit_signal = 0;
+
+/* signal handler that will be triggered to indicate that the program
+ should finish its execution in a controlled manner as soon as possible.
+ The first time this is called it will set got_exit_signal to one and
+ store in exit_signal the signal that triggered its execution. */
+
+static RETSIGTYPE exit_signal_handler(int signum)
+{
+ int old_errno = ERRNO;
+ if(got_exit_signal == 0) {
+ got_exit_signal = 1;
+ exit_signal = signum;
+ }
+ (void)signal(signum, exit_signal_handler);
+ SET_ERRNO(old_errno);
+}
+
+static void install_signal_handlers(void)
+{
+#ifdef SIGHUP
+ /* ignore SIGHUP signal */
+ if((old_sighup_handler = signal(SIGHUP, SIG_IGN)) == SIG_ERR)
+ logmsg("cannot install SIGHUP handler: %s", strerror(ERRNO));
+#endif
+#ifdef SIGPIPE
+ /* ignore SIGPIPE signal */
+ if((old_sigpipe_handler = signal(SIGPIPE, SIG_IGN)) == SIG_ERR)
+ logmsg("cannot install SIGPIPE handler: %s", strerror(ERRNO));
+#endif
+#ifdef SIGALRM
+ /* ignore SIGALRM signal */
+ if((old_sigalrm_handler = signal(SIGALRM, SIG_IGN)) == SIG_ERR)
+ logmsg("cannot install SIGALRM handler: %s", strerror(ERRNO));
+#endif
+#ifdef SIGINT
+ /* handle SIGINT signal with our exit_signal_handler */
+ if((old_sigint_handler = signal(SIGINT, exit_signal_handler)) == SIG_ERR)
+ logmsg("cannot install SIGINT handler: %s", strerror(ERRNO));
+ else
+ siginterrupt(SIGINT, 1);
+#endif
+#ifdef SIGTERM
+ /* handle SIGTERM signal with our exit_signal_handler */
+ if((old_sigterm_handler = signal(SIGTERM, exit_signal_handler)) == SIG_ERR)
+ logmsg("cannot install SIGTERM handler: %s", strerror(ERRNO));
+ else
+ siginterrupt(SIGTERM, 1);
+#endif
+}
+
+static void restore_signal_handlers(void)
+{
+#ifdef SIGHUP
+ if(SIG_ERR != old_sighup_handler)
+ (void)signal(SIGHUP, old_sighup_handler);
+#endif
+#ifdef SIGPIPE
+ if(SIG_ERR != old_sigpipe_handler)
+ (void)signal(SIGPIPE, old_sigpipe_handler);
+#endif
+#ifdef SIGALRM
+ if(SIG_ERR != old_sigalrm_handler)
+ (void)signal(SIGALRM, old_sigalrm_handler);
+#endif
+#ifdef SIGINT
+ if(SIG_ERR != old_sigint_handler)
+ (void)signal(SIGINT, old_sigint_handler);
+#endif
+#ifdef SIGTERM
+ if(SIG_ERR != old_sigterm_handler)
+ (void)signal(SIGTERM, old_sigterm_handler);
+#endif
+}
+
+/*
+ * fullread is a wrapper around the read() function. This will repeat the call
+ * to read() until it actually has read the complete number of bytes indicated
+ * in nbytes or it fails with a condition that cannot be handled with a simple
+ * retry of the read call.
+ */
+
+static ssize_t fullread(int filedes, void *buffer, size_t nbytes)
+{
+ int error;
+ ssize_t rc;
+ ssize_t nread = 0;
+
+ do {
+ rc = read(filedes, (unsigned char *)buffer + nread, nbytes - nread);
+
+ if(got_exit_signal) {
+ logmsg("signalled to die");
+ return -1;
+ }
+
+ if(rc < 0) {
+ error = ERRNO;
+ if((error == EINTR) || (error == EAGAIN))
+ continue;
+ logmsg("unrecoverable read() failure: %s", strerror(error));
+ return -1;
+ }
+
+ if(rc == 0) {
+ logmsg("got 0 reading from stdin");
+ return 0;
+ }
+
+ nread += rc;
+
+ } while((size_t)nread < nbytes);
+
+ if(verbose)
+ logmsg("read %zd bytes", nread);
+
+ return nread;
+}
+
+/*
+ * fullwrite is a wrapper around the write() function. This will repeat the
+ * call to write() until it actually has written the complete number of bytes
+ * indicated in nbytes or it fails with a condition that cannot be handled
+ * with a simple retry of the write call.
+ */
+
+static ssize_t fullwrite(int filedes, const void *buffer, size_t nbytes)
+{
+ int error;
+ ssize_t wc;
+ ssize_t nwrite = 0;
+
+ do {
+ wc = write(filedes, (unsigned char *)buffer + nwrite, nbytes - nwrite);
+
+ if(got_exit_signal) {
+ logmsg("signalled to die");
+ return -1;
+ }
+
+ if(wc < 0) {
+ error = ERRNO;
+ if((error == EINTR) || (error == EAGAIN))
+ continue;
+ logmsg("unrecoverable write() failure: %s", strerror(error));
+ return -1;
+ }
+
+ if(wc == 0) {
+ logmsg("put 0 writing to stdout");
+ return 0;
+ }
+
+ nwrite += wc;
+
+ } while((size_t)nwrite < nbytes);
+
+ if(verbose)
+ logmsg("wrote %zd bytes", nwrite);
+
+ return nwrite;
+}
+
+/*
+ * read_stdin tries to read from stdin nbytes into the given buffer. This is a
+ * blocking function that will only return TRUE when nbytes have actually been
+ * read or FALSE when an unrecoverable error has been detected. Failure of this
+ * function is an indication that the sockfilt process should terminate.
+ */
+
+static bool read_stdin(void *buffer, size_t nbytes)
+{
+ ssize_t nread = fullread(fileno(stdin), buffer, nbytes);
+ if(nread != (ssize_t)nbytes) {
+ logmsg("exiting...");
+ return FALSE;
+ }
+ return TRUE;
+}
+
+/*
+ * write_stdout tries to write to stdio nbytes from the given buffer. This is a
+ * blocking function that will only return TRUE when nbytes have actually been
+ * written or FALSE when an unrecoverable error has been detected. Failure of
+ * this function is an indication that the sockfilt process should terminate.
+ */
+
+static bool write_stdout(const void *buffer, size_t nbytes)
+{
+ ssize_t nwrite = fullwrite(fileno(stdout), buffer, nbytes);
+ if(nwrite != (ssize_t)nbytes) {
+ logmsg("exiting...");
+ return FALSE;
+ }
+ return TRUE;
+}
+
+static void lograw(unsigned char *buffer, ssize_t len)
+{
+ char data[120];
+ ssize_t i;
+ unsigned char *ptr = buffer;
+ char *optr = data;
+ ssize_t width=0;
+
+ for(i=0; i<len; i++) {
+ switch(ptr[i]) {
+ case '\n':
+ sprintf(optr, "\\n");
+ width += 2;
+ optr += 2;
+ break;
+ case '\r':
+ sprintf(optr, "\\r");
+ width += 2;
+ optr += 2;
+ break;
+ default:
+ sprintf(optr, "%c", (ISGRAPH(ptr[i]) || ptr[i]==0x20) ?ptr[i]:'.');
+ width++;
+ optr++;
+ break;
+ }
+
+ if(width>60) {
+ logmsg("'%s'", data);
+ width = 0;
+ optr = data;
+ }
+ }
+ if(width)
+ logmsg("'%s'", data);
+}
+
+/*
+ sockfdp is a pointer to an established stream or CURL_SOCKET_BAD
+
+ if sockfd is CURL_SOCKET_BAD, listendfd is a listening socket we must
+ accept()
+*/
+static bool juggle(curl_socket_t *sockfdp,
+ curl_socket_t listenfd,
+ enum sockmode *mode)
+{
+ struct timeval timeout;
+ fd_set fds_read;
+ fd_set fds_write;
+ fd_set fds_err;
+ curl_socket_t sockfd = CURL_SOCKET_BAD;
+ curl_socket_t maxfd = CURL_SOCKET_BAD;
+ ssize_t rc;
+ ssize_t nread_socket;
+ ssize_t bytes_written;
+ ssize_t buffer_len;
+ int error = 0;
+
+ /* 'buffer' is this excessively large only to be able to support things like
+ test 1003 which tests exceedingly large server response lines */
+ unsigned char buffer[17010];
+ char data[16];
+
+ if(got_exit_signal) {
+ logmsg("signalled to die, exiting...");
+ return FALSE;
+ }
+
+#ifdef HAVE_GETPPID
+ /* As a last resort, quit if sockfilt process becomes orphan. Just in case
+ parent ftpserver process has died without killing its sockfilt children */
+ if(getppid() <= 1) {
+ logmsg("process becomes orphan, exiting");
+ return FALSE;
+ }
+#endif
+
+ timeout.tv_sec = 120;
+ timeout.tv_usec = 0;
+
+ FD_ZERO(&fds_read);
+ FD_ZERO(&fds_write);
+ FD_ZERO(&fds_err);
+
+#ifdef USE_WINSOCK
+ /*
+ ** WinSock select() does not support standard file descriptors,
+ ** it can only check SOCKETs. Since this program in its current
+ ** state will not work on WinSock based systems, next line is
+ ** commented out to allow warning-free compilation awaiting the
+ ** day it will be fixed to also run on WinSock systems.
+ */
+#else
+ FD_SET(fileno(stdin), &fds_read);
+#endif
+
+ switch(*mode) {
+
+ case PASSIVE_LISTEN:
+
+ /* server mode */
+ sockfd = listenfd;
+ /* there's always a socket to wait for */
+ FD_SET(sockfd, &fds_read);
+ maxfd = sockfd;
+ break;
+
+ case PASSIVE_CONNECT:
+
+ sockfd = *sockfdp;
+ if(CURL_SOCKET_BAD == sockfd) {
+ /* eeek, we are supposedly connected and then this cannot be -1 ! */
+ logmsg("socket is -1! on %s:%d", __FILE__, __LINE__);
+ maxfd = 0; /* stdin */
+ }
+ else {
+ /* there's always a socket to wait for */
+ FD_SET(sockfd, &fds_read);
+ maxfd = sockfd;
+ }
+ break;
+
+ case ACTIVE:
+
+ sockfd = *sockfdp;
+ /* sockfd turns CURL_SOCKET_BAD when our connection has been closed */
+ if(CURL_SOCKET_BAD != sockfd) {
+ FD_SET(sockfd, &fds_read);
+ maxfd = sockfd;
+ }
+ else {
+ logmsg("No socket to read on");
+ maxfd = 0;
+ }
+ break;
+
+ case ACTIVE_DISCONNECT:
+
+ logmsg("disconnected, no socket to read on");
+ maxfd = 0;
+ sockfd = CURL_SOCKET_BAD;
+ break;
+
+ } /* switch(*mode) */
+
+
+ do {
+
+ rc = select((int)maxfd + 1, &fds_read, &fds_write, &fds_err, &timeout);
+
+ if(got_exit_signal) {
+ logmsg("signalled to die, exiting...");
+ return FALSE;
+ }
+
+ } while((rc == -1) && ((error = SOCKERRNO) == EINTR));
+
+ if(rc < 0) {
+ logmsg("select() failed with error: (%d) %s",
+ error, strerror(error));
+ return FALSE;
+ }
+
+ if(rc == 0)
+ /* timeout */
+ return TRUE;
+
+
+ if(FD_ISSET(fileno(stdin), &fds_read)) {
+ /* read from stdin, commands/data to be dealt with and possibly passed on
+ to the socket
+
+ protocol:
+
+ 4 letter command + LF [mandatory]
+
+ 4-digit hexadecimal data length + LF [if the command takes data]
+ data [the data being as long as set above]
+
+ Commands:
+
+ DATA - plain pass-thru data
+ */
+
+ if(!read_stdin(buffer, 5))
+ return FALSE;
+
+ logmsg("Received %c%c%c%c (on stdin)",
+ buffer[0], buffer[1], buffer[2], buffer[3] );
+
+ if(!memcmp("PING", buffer, 4)) {
+ /* send reply on stdout, just proving we are alive */
+ if(!write_stdout("PONG\n", 5))
+ return FALSE;
+ }
+
+ else if(!memcmp("PORT", buffer, 4)) {
+ /* Question asking us what PORT number we are listening to.
+ Replies to PORT with "IPv[num]/[port]" */
+ sprintf((char *)buffer, "%s/%hu\n", ipv_inuse, port);
+ buffer_len = (ssize_t)strlen((char *)buffer);
+ snprintf(data, sizeof(data), "PORT\n%04zx\n", buffer_len);
+ if(!write_stdout(data, 10))
+ return FALSE;
+ if(!write_stdout(buffer, buffer_len))
+ return FALSE;
+ }
+ else if(!memcmp("QUIT", buffer, 4)) {
+ /* just die */
+ logmsg("quits");
+ return FALSE;
+ }
+ else if(!memcmp("DATA", buffer, 4)) {
+ /* data IN => data OUT */
+
+ if(!read_stdin(buffer, 5))
+ return FALSE;
+
+ buffer[5] = '\0';
+
+ buffer_len = (ssize_t)strtol((char *)buffer, NULL, 16);
+ if (buffer_len > (ssize_t)sizeof(buffer)) {
+ logmsg("ERROR: Buffer size (%zu bytes) too small for data size "
+ "(%zd bytes)", sizeof(buffer), buffer_len);
+ return FALSE;
+ }
+ logmsg("> %zd bytes data, server => client", buffer_len);
+
+ if(!read_stdin(buffer, buffer_len))
+ return FALSE;
+
+ lograw(buffer, buffer_len);
+
+ if(*mode == PASSIVE_LISTEN) {
+ logmsg("*** We are disconnected!");
+ if(!write_stdout("DISC\n", 5))
+ return FALSE;
+ }
+ else {
+ /* send away on the socket */
+ bytes_written = swrite(sockfd, buffer, buffer_len);
+ if(bytes_written != buffer_len) {
+ logmsg("Not all data was sent. Bytes to send: %zd sent: %zd",
+ buffer_len, bytes_written);
+ }
+ }
+ }
+ else if(!memcmp("DISC", buffer, 4)) {
+ /* disconnect! */
+ if(!write_stdout("DISC\n", 5))
+ return FALSE;
+ if(sockfd != CURL_SOCKET_BAD) {
+ logmsg("====> Client forcibly disconnected");
+ sclose(sockfd);
+ *sockfdp = CURL_SOCKET_BAD;
+ if(*mode == PASSIVE_CONNECT)
+ *mode = PASSIVE_LISTEN;
+ else
+ *mode = ACTIVE_DISCONNECT;
+ }
+ else
+ logmsg("attempt to close already dead connection");
+ return TRUE;
+ }
+ }
+
+
+ if((sockfd != CURL_SOCKET_BAD) && (FD_ISSET(sockfd, &fds_read)) ) {
+
+ if(*mode == PASSIVE_LISTEN) {
+ /* there's no stream set up yet, this is an indication that there's a
+ client connecting. */
+ sockfd = accept(sockfd, NULL, NULL);
+ if(CURL_SOCKET_BAD == sockfd)
+ logmsg("accept() failed");
+ else {
+ logmsg("====> Client connect");
+ if(!write_stdout("CNCT\n", 5))
+ return FALSE;
+ *sockfdp = sockfd; /* store the new socket */
+ *mode = PASSIVE_CONNECT; /* we have connected */
+ }
+ return TRUE;
+ }
+
+ /* read from socket, pass on data to stdout */
+ nread_socket = sread(sockfd, buffer, sizeof(buffer));
+
+ if(nread_socket <= 0) {
+ logmsg("====> Client disconnect");
+ if(!write_stdout("DISC\n", 5))
+ return FALSE;
+ sclose(sockfd);
+ *sockfdp = CURL_SOCKET_BAD;
+ if(*mode == PASSIVE_CONNECT)
+ *mode = PASSIVE_LISTEN;
+ else
+ *mode = ACTIVE_DISCONNECT;
+ return TRUE;
+ }
+
+ snprintf(data, sizeof(data), "DATA\n%04zx\n", nread_socket);
+ if(!write_stdout(data, 10))
+ return FALSE;
+ if(!write_stdout(buffer, nread_socket))
+ return FALSE;
+
+ logmsg("< %zd bytes data, client => server", nread_socket);
+ lograw(buffer, nread_socket);
+ }
+
+ return TRUE;
+}
+
+static curl_socket_t sockdaemon(curl_socket_t sock,
+ unsigned short *listenport)
+{
+ /* passive daemon style */
+ struct sockaddr_in me;
+#ifdef ENABLE_IPV6
+ struct sockaddr_in6 me6;
+#endif /* ENABLE_IPV6 */
+ int flag;
+ int rc;
+ int totdelay = 0;
+ int maxretr = 10;
+ int delay= 20;
+ int attempt = 0;
+ int error = 0;
+
+ do {
+ attempt++;
+ flag = 1;
+ rc = setsockopt(sock, SOL_SOCKET, SO_REUSEADDR,
+ (void *)&flag, sizeof(flag));
+ if(rc) {
+ error = SOCKERRNO;
+ logmsg("setsockopt(SO_REUSEADDR) failed with error: (%d) %s",
+ error, strerror(error));
+ if(maxretr) {
+ rc = wait_ms(delay);
+ if(rc) {
+ /* should not happen */
+ error = SOCKERRNO;
+ logmsg("wait_ms() failed with error: (%d) %s",
+ error, strerror(error));
+ sclose(sock);
+ return CURL_SOCKET_BAD;
+ }
+ if(got_exit_signal) {
+ logmsg("signalled to die, exiting...");
+ sclose(sock);
+ return CURL_SOCKET_BAD;
+ }
+ totdelay += delay;
+ delay *= 2; /* double the sleep for next attempt */
+ }
+ }
+ } while(rc && maxretr--);
+
+ if(rc) {
+ logmsg("setsockopt(SO_REUSEADDR) failed %d times in %d ms. Error: (%d) %s",
+ attempt, totdelay, error, strerror(error));
+ logmsg("Continuing anyway...");
+ }
+
+ /* When the specified listener port is zero, it is actually a
+ request to let the system choose a non-zero available port. */
+
+#ifdef ENABLE_IPV6
+ if(!use_ipv6) {
+#endif
+ memset(&me, 0, sizeof(me));
+ me.sin_family = AF_INET;
+ me.sin_addr.s_addr = INADDR_ANY;
+ me.sin_port = htons(*listenport);
+ rc = bind(sock, (struct sockaddr *) &me, sizeof(me));
+#ifdef ENABLE_IPV6
+ }
+ else {
+ memset(&me6, 0, sizeof(me6));
+ me6.sin6_family = AF_INET6;
+ me6.sin6_addr = in6addr_any;
+ me6.sin6_port = htons(*listenport);
+ rc = bind(sock, (struct sockaddr *) &me6, sizeof(me6));
+ }
+#endif /* ENABLE_IPV6 */
+ if(rc) {
+ error = SOCKERRNO;
+ logmsg("Error binding socket on port %hu: (%d) %s",
+ *listenport, error, strerror(error));
+ sclose(sock);
+ return CURL_SOCKET_BAD;
+ }
+
+ if(!*listenport) {
+ /* The system was supposed to choose a port number, figure out which
+ port we actually got and update the listener port value with it. */
+ curl_socklen_t la_size;
+ struct sockaddr *localaddr;
+ struct sockaddr_in localaddr4;
+#ifdef ENABLE_IPV6
+ struct sockaddr_in6 localaddr6;
+ if(!use_ipv6) {
+#endif
+ la_size = sizeof(localaddr4);
+ localaddr = (struct sockaddr *)&localaddr4;
+#ifdef ENABLE_IPV6
+ }
+ else {
+ la_size = sizeof(localaddr6);
+ localaddr = (struct sockaddr *)&localaddr6;
+ }
+#endif
+ memset(localaddr, 0, (size_t)la_size);
+ if(getsockname(sock, localaddr, &la_size) < 0) {
+ error = SOCKERRNO;
+ logmsg("getsockname() failed with error: (%d) %s",
+ error, strerror(error));
+ sclose(sock);
+ return CURL_SOCKET_BAD;
+ }
+ switch (localaddr->sa_family) {
+ case AF_INET:
+ *listenport = ntohs(localaddr4.sin_port);
+ break;
+#ifdef ENABLE_IPV6
+ case AF_INET6:
+ *listenport = ntohs(localaddr6.sin6_port);
+ break;
+#endif
+ default:
+ break;
+ }
+ if(!*listenport) {
+ /* Real failure, listener port shall not be zero beyond this point. */
+ logmsg("Apparently getsockname() succeeded, with listener port zero.");
+ logmsg("A valid reason for this failure is a binary built without");
+ logmsg("proper network library linkage. This might not be the only");
+ logmsg("reason, but double check it before anything else.");
+ sclose(sock);
+ return CURL_SOCKET_BAD;
+ }
+ }
+
+ /* start accepting connections */
+ rc = listen(sock, 5);
+ if(0 != rc) {
+ error = SOCKERRNO;
+ logmsg("listen() failed with error: (%d) %s",
+ error, strerror(error));
+ sclose(sock);
+ return CURL_SOCKET_BAD;
+ }
+
+ return sock;
+}
+
+
+int main(int argc, char *argv[])
+{
+ struct sockaddr_in me;
+#ifdef ENABLE_IPV6
+ struct sockaddr_in6 me6;
+#endif /* ENABLE_IPV6 */
+ curl_socket_t sock = CURL_SOCKET_BAD;
+ curl_socket_t msgsock = CURL_SOCKET_BAD;
+ int wrotepidfile = 0;
+ char *pidname= (char *)".sockfilt.pid";
+ bool juggle_again;
+ int rc;
+ int error;
+ int arg=1;
+ enum sockmode mode = PASSIVE_LISTEN; /* default */
+ const char *addr = NULL;
+
+ while(argc>arg) {
+ if(!strcmp("--version", argv[arg])) {
+ printf("sockfilt IPv4%s\n",
+#ifdef ENABLE_IPV6
+ "/IPv6"
+#else
+ ""
+#endif
+ );
+ return 0;
+ }
+ else if(!strcmp("--verbose", argv[arg])) {
+ verbose = TRUE;
+ arg++;
+ }
+ else if(!strcmp("--pidfile", argv[arg])) {
+ arg++;
+ if(argc>arg)
+ pidname = argv[arg++];
+ }
+ else if(!strcmp("--logfile", argv[arg])) {
+ arg++;
+ if(argc>arg)
+ serverlogfile = argv[arg++];
+ }
+ else if(!strcmp("--ipv6", argv[arg])) {
+#ifdef ENABLE_IPV6
+ ipv_inuse = "IPv6";
+ use_ipv6 = TRUE;
+#endif
+ arg++;
+ }
+ else if(!strcmp("--ipv4", argv[arg])) {
+ /* for completeness, we support this option as well */
+#ifdef ENABLE_IPV6
+ ipv_inuse = "IPv4";
+ use_ipv6 = FALSE;
+#endif
+ arg++;
+ }
+ else if(!strcmp("--port", argv[arg])) {
+ arg++;
+ if(argc>arg) {
+ char *endptr;
+ unsigned long ulnum = strtoul(argv[arg], &endptr, 10);
+ if((endptr != argv[arg] + strlen(argv[arg])) ||
+ ((ulnum != 0UL) && ((ulnum < 1025UL) || (ulnum > 65535UL)))) {
+ fprintf(stderr, "sockfilt: invalid --port argument (%s)\n",
+ argv[arg]);
+ return 0;
+ }
+ port = curlx_ultous(ulnum);
+ arg++;
+ }
+ }
+ else if(!strcmp("--connect", argv[arg])) {
+ /* Asked to actively connect to the specified local port instead of
+ doing a passive server-style listening. */
+ arg++;
+ if(argc>arg) {
+ char *endptr;
+ unsigned long ulnum = strtoul(argv[arg], &endptr, 10);
+ if((endptr != argv[arg] + strlen(argv[arg])) ||
+ (ulnum < 1025UL) || (ulnum > 65535UL)) {
+ fprintf(stderr, "sockfilt: invalid --connect argument (%s)\n",
+ argv[arg]);
+ return 0;
+ }
+ connectport = curlx_ultous(ulnum);
+ arg++;
+ }
+ }
+ else if(!strcmp("--addr", argv[arg])) {
+ /* Set an IP address to use with --connect; otherwise use localhost */
+ arg++;
+ if(argc>arg) {
+ addr = argv[arg];
+ arg++;
+ }
+ }
+ else {
+ puts("Usage: sockfilt [option]\n"
+ " --version\n"
+ " --verbose\n"
+ " --logfile [file]\n"
+ " --pidfile [file]\n"
+ " --ipv4\n"
+ " --ipv6\n"
+ " --port [port]\n"
+ " --connect [port]\n"
+ " --addr [address]");
+ return 0;
+ }
+ }
+
+#ifdef WIN32
+ win32_init();
+ atexit(win32_cleanup);
+#endif
+
+ install_signal_handlers();
+
+#ifdef ENABLE_IPV6
+ if(!use_ipv6)
+#endif
+ sock = socket(AF_INET, SOCK_STREAM, 0);
+#ifdef ENABLE_IPV6
+ else
+ sock = socket(AF_INET6, SOCK_STREAM, 0);
+#endif
+
+ if(CURL_SOCKET_BAD == sock) {
+ error = SOCKERRNO;
+ logmsg("Error creating socket: (%d) %s",
+ error, strerror(error));
+ goto sockfilt_cleanup;
+ }
+
+ if(connectport) {
+ /* Active mode, we should connect to the given port number */
+ mode = ACTIVE;
+#ifdef ENABLE_IPV6
+ if(!use_ipv6) {
+#endif
+ memset(&me, 0, sizeof(me));
+ me.sin_family = AF_INET;
+ me.sin_port = htons(connectport);
+ me.sin_addr.s_addr = INADDR_ANY;
+ if (!addr)
+ addr = "127.0.0.1";
+ Curl_inet_pton(AF_INET, addr, &me.sin_addr);
+
+ rc = connect(sock, (struct sockaddr *) &me, sizeof(me));
+#ifdef ENABLE_IPV6
+ }
+ else {
+ memset(&me6, 0, sizeof(me6));
+ me6.sin6_family = AF_INET6;
+ me6.sin6_port = htons(connectport);
+ if (!addr)
+ addr = "::1";
+ Curl_inet_pton(AF_INET6, addr, &me6.sin6_addr);
+
+ rc = connect(sock, (struct sockaddr *) &me6, sizeof(me6));
+ }
+#endif /* ENABLE_IPV6 */
+ if(rc) {
+ error = SOCKERRNO;
+ logmsg("Error connecting to port %hu: (%d) %s",
+ connectport, error, strerror(error));
+ goto sockfilt_cleanup;
+ }
+ logmsg("====> Client connect");
+ msgsock = sock; /* use this as stream */
+ }
+ else {
+ /* passive daemon style */
+ sock = sockdaemon(sock, &port);
+ if(CURL_SOCKET_BAD == sock)
+ goto sockfilt_cleanup;
+ msgsock = CURL_SOCKET_BAD; /* no stream socket yet */
+ }
+
+ logmsg("Running %s version", ipv_inuse);
+
+ if(connectport)
+ logmsg("Connected to port %hu", connectport);
+ else
+ logmsg("Listening on port %hu", port);
+
+ wrotepidfile = write_pidfile(pidname);
+ if(!wrotepidfile)
+ goto sockfilt_cleanup;
+
+ do {
+ juggle_again = juggle(&msgsock, sock, &mode);
+ } while(juggle_again);
+
+sockfilt_cleanup:
+
+ if((msgsock != sock) && (msgsock != CURL_SOCKET_BAD))
+ sclose(msgsock);
+
+ if(sock != CURL_SOCKET_BAD)
+ sclose(sock);
+
+ if(wrotepidfile)
+ unlink(pidname);
+
+ restore_signal_handlers();
+
+ if(got_exit_signal) {
+ logmsg("============> sockfilt exits with signal (%d)", exit_signal);
+ /*
+ * To properly set the return status of the process we
+ * must raise the same signal SIGINT or SIGTERM that we
+ * caught and let the old handler take care of it.
+ */
+ raise(exit_signal);
+ }
+
+ logmsg("============> sockfilt quits");
+ return 0;
+}
+
diff --git a/tests/server/sws.c b/tests/server/sws.c
new file mode 100644
index 0000000..a4c040b
--- /dev/null
+++ b/tests/server/sws.c
@@ -0,0 +1,1458 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at http://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ***************************************************************************/
+
+/* sws.c: simple (silly?) web server
+
+ This code was originally graciously donated to the project by Juergen
+ Wilke. Thanks a bunch!
+
+ */
+
+#define CURL_NO_OLDIES
+
+#include "setup.h" /* portability help from the lib directory */
+
+#ifdef HAVE_SIGNAL_H
+#include <signal.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#ifdef HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+#ifdef HAVE_ARPA_INET_H
+#include <arpa/inet.h>
+#endif
+#ifdef HAVE_NETDB_H
+#include <netdb.h>
+#endif
+#ifdef HAVE_NETINET_TCP_H
+#include <netinet/tcp.h> /* for TCP_NODELAY */
+#endif
+
+#define ENABLE_CURLX_PRINTF
+/* make the curlx header define all printf() functions to use the curlx_*
+ versions instead */
+#include "curlx.h" /* from the private lib dir */
+#include "getpart.h"
+#include "util.h"
+
+/* include memdebug.h last */
+#include "memdebug.h"
+
+#if !defined(CURL_SWS_FORK_ENABLED) && defined(HAVE_FORK)
+/*
+ * The normal sws build for the plain standard curl test suite has no use for
+ * fork(), but if you feel wild and crazy and want to setup some more exotic
+ * tests. Define this and run...
+ */
+#define CURL_SWS_FORK_ENABLED
+#endif
+
+#ifdef ENABLE_IPV6
+static bool use_ipv6 = FALSE;
+#endif
+static bool use_gopher = FALSE;
+static const char *ipv_inuse = "IPv4";
+static int serverlogslocked = 0;
+
+#define REQBUFSIZ 150000
+#define REQBUFSIZ_TXT "149999"
+
+static long prevtestno=-1; /* previous test number we served */
+static long prevpartno=-1; /* previous part number we served */
+static bool prevbounce=FALSE; /* instructs the server to increase the part
+ number for a test in case the identical
+ testno+partno request shows up again */
+
+#define RCMD_NORMALREQ 0 /* default request, use the tests file normally */
+#define RCMD_IDLE 1 /* told to sit idle */
+#define RCMD_STREAM 2 /* told to stream */
+
+struct httprequest {
+ char reqbuf[REQBUFSIZ]; /* buffer area for the incoming request */
+ size_t checkindex; /* where to start checking of the request */
+ size_t offset; /* size of the incoming request */
+ long testno; /* test number found in the request */
+ long partno; /* part number found in the request */
+ bool open; /* keep connection open info, as found in the request */
+ bool auth_req; /* authentication required, don't wait for body unless
+ there's an Authorization header */
+ bool auth; /* Authorization header present in the incoming request */
+ size_t cl; /* Content-Length of the incoming request */
+ bool digest; /* Authorization digest header found */
+ bool ntlm; /* Authorization ntlm header found */
+ int writedelay; /* if non-zero, delay this number of seconds between
+ writes in the response */
+ int pipe; /* if non-zero, expect this many requests to do a "piped"
+ request/response */
+ int skip; /* if non-zero, the server is instructed to not read this
+ many bytes from a PUT/POST request. Ie the client sends N
+ bytes said in Content-Length, but the server only reads N
+ - skip bytes. */
+ int rcmd; /* doing a special command, see defines above */
+ int prot_version; /* HTTP version * 10 */
+ bool pipelining; /* true if request is pipelined */
+};
+
+static int ProcessRequest(struct httprequest *req);
+static void storerequest(char *reqbuf, size_t totalsize);
+
+#define DEFAULT_PORT 8999
+
+#ifndef DEFAULT_LOGFILE
+#define DEFAULT_LOGFILE "log/sws.log"
+#endif
+
+const char *serverlogfile = DEFAULT_LOGFILE;
+
+#define SWSVERSION "cURL test suite HTTP server/0.1"
+
+#define REQUEST_DUMP "log/server.input"
+#define RESPONSE_DUMP "log/server.response"
+
+/* very-big-path support */
+#define MAXDOCNAMELEN 140000
+#define MAXDOCNAMELEN_TXT "139999"
+
+#define REQUEST_KEYWORD_SIZE 256
+#define REQUEST_KEYWORD_SIZE_TXT "255"
+
+#define CMD_AUTH_REQUIRED "auth_required"
+
+/* 'idle' means that it will accept the request fine but never respond
+ any data. Just keep the connection alive. */
+#define CMD_IDLE "idle"
+
+/* 'stream' means to send a never-ending stream of data */
+#define CMD_STREAM "stream"
+
+#define END_OF_HEADERS "\r\n\r\n"
+
+enum {
+ DOCNUMBER_NOTHING = -7,
+ DOCNUMBER_QUIT = -6,
+ DOCNUMBER_BADCONNECT = -5,
+ DOCNUMBER_INTERNAL= -4,
+ DOCNUMBER_CONNECT = -3,
+ DOCNUMBER_WERULEZ = -2,
+ DOCNUMBER_404 = -1
+};
+
+const char *end_of_headers = END_OF_HEADERS;
+
+/* sent as reply to a QUIT */
+static const char *docquit =
+"HTTP/1.1 200 Goodbye" END_OF_HEADERS;
+
+/* sent as reply to a CONNECT */
+static const char *docconnect =
+"HTTP/1.1 200 Mighty fine indeed" END_OF_HEADERS;
+
+/* sent as reply to a "bad" CONNECT */
+static const char *docbadconnect =
+"HTTP/1.1 501 Forbidden you fool" END_OF_HEADERS;
+
+/* send back this on 404 file not found */
+static const char *doc404 = "HTTP/1.1 404 Not Found\r\n"
+ "Server: " SWSVERSION "\r\n"
+ "Connection: close\r\n"
+ "Content-Type: text/html"
+ END_OF_HEADERS
+ "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\n"
+ "<HTML><HEAD>\n"
+ "<TITLE>404 Not Found</TITLE>\n"
+ "</HEAD><BODY>\n"
+ "<H1>Not Found</H1>\n"
+ "The requested URL was not found on this server.\n"
+ "<P><HR><ADDRESS>" SWSVERSION "</ADDRESS>\n" "</BODY></HTML>\n";
+
+/* do-nothing macro replacement for systems which lack siginterrupt() */
+
+#ifndef HAVE_SIGINTERRUPT
+#define siginterrupt(x,y) do {} while(0)
+#endif
+
+/* vars used to keep around previous signal handlers */
+
+typedef RETSIGTYPE (*SIGHANDLER_T)(int);
+
+#ifdef SIGHUP
+static SIGHANDLER_T old_sighup_handler = SIG_ERR;
+#endif
+
+#ifdef SIGPIPE
+static SIGHANDLER_T old_sigpipe_handler = SIG_ERR;
+#endif
+
+#ifdef SIGALRM
+static SIGHANDLER_T old_sigalrm_handler = SIG_ERR;
+#endif
+
+#ifdef SIGINT
+static SIGHANDLER_T old_sigint_handler = SIG_ERR;
+#endif
+
+#ifdef SIGTERM
+static SIGHANDLER_T old_sigterm_handler = SIG_ERR;
+#endif
+
+/* var which if set indicates that the program should finish execution */
+
+SIG_ATOMIC_T got_exit_signal = 0;
+
+/* if next is set indicates the first signal handled in exit_signal_handler */
+
+static volatile int exit_signal = 0;
+
+/* signal handler that will be triggered to indicate that the program
+ should finish its execution in a controlled manner as soon as possible.
+ The first time this is called it will set got_exit_signal to one and
+ store in exit_signal the signal that triggered its execution. */
+
+static RETSIGTYPE exit_signal_handler(int signum)
+{
+ int old_errno = ERRNO;
+ if(got_exit_signal == 0) {
+ got_exit_signal = 1;
+ exit_signal = signum;
+ }
+ (void)signal(signum, exit_signal_handler);
+ SET_ERRNO(old_errno);
+}
+
+static void install_signal_handlers(void)
+{
+#ifdef SIGHUP
+ /* ignore SIGHUP signal */
+ if((old_sighup_handler = signal(SIGHUP, SIG_IGN)) == SIG_ERR)
+ logmsg("cannot install SIGHUP handler: %s", strerror(ERRNO));
+#endif
+#ifdef SIGPIPE
+ /* ignore SIGPIPE signal */
+ if((old_sigpipe_handler = signal(SIGPIPE, SIG_IGN)) == SIG_ERR)
+ logmsg("cannot install SIGPIPE handler: %s", strerror(ERRNO));
+#endif
+#ifdef SIGALRM
+ /* ignore SIGALRM signal */
+ if((old_sigalrm_handler = signal(SIGALRM, SIG_IGN)) == SIG_ERR)
+ logmsg("cannot install SIGALRM handler: %s", strerror(ERRNO));
+#endif
+#ifdef SIGINT
+ /* handle SIGINT signal with our exit_signal_handler */
+ if((old_sigint_handler = signal(SIGINT, exit_signal_handler)) == SIG_ERR)
+ logmsg("cannot install SIGINT handler: %s", strerror(ERRNO));
+ else
+ siginterrupt(SIGINT, 1);
+#endif
+#ifdef SIGTERM
+ /* handle SIGTERM signal with our exit_signal_handler */
+ if((old_sigterm_handler = signal(SIGTERM, exit_signal_handler)) == SIG_ERR)
+ logmsg("cannot install SIGTERM handler: %s", strerror(ERRNO));
+ else
+ siginterrupt(SIGTERM, 1);
+#endif
+}
+
+static void restore_signal_handlers(void)
+{
+#ifdef SIGHUP
+ if(SIG_ERR != old_sighup_handler)
+ (void)signal(SIGHUP, old_sighup_handler);
+#endif
+#ifdef SIGPIPE
+ if(SIG_ERR != old_sigpipe_handler)
+ (void)signal(SIGPIPE, old_sigpipe_handler);
+#endif
+#ifdef SIGALRM
+ if(SIG_ERR != old_sigalrm_handler)
+ (void)signal(SIGALRM, old_sigalrm_handler);
+#endif
+#ifdef SIGINT
+ if(SIG_ERR != old_sigint_handler)
+ (void)signal(SIGINT, old_sigint_handler);
+#endif
+#ifdef SIGTERM
+ if(SIG_ERR != old_sigterm_handler)
+ (void)signal(SIGTERM, old_sigterm_handler);
+#endif
+}
+
+static int ProcessRequest(struct httprequest *req)
+{
+ char *line=&req->reqbuf[req->checkindex];
+ bool chunked = FALSE;
+ static char request[REQUEST_KEYWORD_SIZE];
+ static char doc[MAXDOCNAMELEN];
+ char logbuf[256];
+ int prot_major, prot_minor;
+ char *end;
+ int error;
+ end = strstr(line, end_of_headers);
+
+ logmsg("ProcessRequest() called");
+
+ /* try to figure out the request characteristics as soon as possible, but
+ only once! */
+
+ if(use_gopher &&
+ (req->testno == DOCNUMBER_NOTHING) &&
+ !strncmp("/verifiedserver", line, 15)) {
+ logmsg("Are-we-friendly question received");
+ req->testno = DOCNUMBER_WERULEZ;
+ return 1; /* done */
+ }
+
+ else if((req->testno == DOCNUMBER_NOTHING) &&
+ sscanf(line,
+ "%" REQUEST_KEYWORD_SIZE_TXT"s %" MAXDOCNAMELEN_TXT "s HTTP/%d.%d",
+ request,
+ doc,
+ &prot_major,
+ &prot_minor) == 4) {
+ char *ptr;
+
+ req->prot_version = prot_major*10 + prot_minor;
+
+ /* find the last slash */
+ ptr = strrchr(doc, '/');
+
+ /* get the number after it */
+ if(ptr) {
+ FILE *stream;
+ char *filename;
+
+ if((strlen(doc) + strlen(request)) < 200)
+ sprintf(logbuf, "Got request: %s %s HTTP/%d.%d",
+ request, doc, prot_major, prot_minor);
+ else
+ sprintf(logbuf, "Got a *HUGE* request HTTP/%d.%d",
+ prot_major, prot_minor);
+ logmsg("%s", logbuf);
+
+ if(!strncmp("/verifiedserver", ptr, 15)) {
+ logmsg("Are-we-friendly question received");
+ req->testno = DOCNUMBER_WERULEZ;
+ return 1; /* done */
+ }
+
+ if(!strncmp("/quit", ptr, 5)) {
+ logmsg("Request-to-quit received");
+ req->testno = DOCNUMBER_QUIT;
+ return 1; /* done */
+ }
+
+ ptr++; /* skip the slash */
+
+ /* skip all non-numericals following the slash */
+ while(*ptr && !ISDIGIT(*ptr))
+ ptr++;
+
+ req->testno = strtol(ptr, &ptr, 10);
+
+ if(req->testno > 10000) {
+ req->partno = req->testno % 10000;
+ req->testno /= 10000;
+ }
+ else
+ req->partno = 0;
+
+ sprintf(logbuf, "Requested test number %ld part %ld",
+ req->testno, req->partno);
+ logmsg("%s", logbuf);
+
+ filename = test2file(req->testno);
+
+ stream=fopen(filename, "rb");
+ if(!stream) {
+ error = ERRNO;
+ logmsg("fopen() failed with error: %d %s", error, strerror(error));
+ logmsg("Error opening file: %s", filename);
+ logmsg("Couldn't open test file %ld", req->testno);
+ req->open = FALSE; /* closes connection */
+ return 1; /* done */
+ }
+ else {
+ char *cmd = NULL;
+ size_t cmdsize = 0;
+ int num=0;
+
+ /* get the custom server control "commands" */
+ error = getpart(&cmd, &cmdsize, "reply", "servercmd", stream);
+ fclose(stream);
+ if(error) {
+ logmsg("getpart() failed with error: %d", error);
+ req->open = FALSE; /* closes connection */
+ return 1; /* done */
+ }
+
+ if(cmdsize) {
+ logmsg("Found a reply-servercmd section!");
+
+ if(!strncmp(CMD_AUTH_REQUIRED, cmd, strlen(CMD_AUTH_REQUIRED))) {
+ logmsg("instructed to require authorization header");
+ req->auth_req = TRUE;
+ }
+ else if(!strncmp(CMD_IDLE, cmd, strlen(CMD_IDLE))) {
+ logmsg("instructed to idle");
+ req->rcmd = RCMD_IDLE;
+ req->open = TRUE;
+ }
+ else if(!strncmp(CMD_STREAM, cmd, strlen(CMD_STREAM))) {
+ logmsg("instructed to stream");
+ req->rcmd = RCMD_STREAM;
+ }
+ else if(1 == sscanf(cmd, "pipe: %d", &num)) {
+ logmsg("instructed to allow a pipe size of %d", num);
+ if(num < 0)
+ logmsg("negative pipe size ignored");
+ else if(num > 0)
+ req->pipe = num-1; /* decrease by one since we don't count the
+ first request in this number */
+ }
+ else if(1 == sscanf(cmd, "skip: %d", &num)) {
+ logmsg("instructed to skip this number of bytes %d", num);
+ req->skip = num;
+ }
+ else if(1 == sscanf(cmd, "writedelay: %d", &num)) {
+ logmsg("instructed to delay %d secs between packets", num);
+ req->writedelay = num;
+ }
+ else {
+ logmsg("funny instruction found: %s", cmd);
+ }
+ }
+ if(cmd)
+ free(cmd);
+ }
+ }
+ else {
+ if(sscanf(req->reqbuf, "CONNECT %" MAXDOCNAMELEN_TXT "s HTTP/%d.%d",
+ doc, &prot_major, &prot_minor) == 3) {
+ sprintf(logbuf, "Received a CONNECT %s HTTP/%d.%d request",
+ doc, prot_major, prot_minor);
+ logmsg("%s", logbuf);
+
+ if(req->prot_version == 10)
+ req->open = FALSE; /* HTTP 1.0 closes connection by default */
+
+ if(!strncmp(doc, "bad", 3))
+ /* if the host name starts with bad, we fake an error here */
+ req->testno = DOCNUMBER_BADCONNECT;
+ else if(!strncmp(doc, "test", 4)) {
+ /* if the host name starts with test, the port number used in the
+ CONNECT line will be used as test number! */
+ char *portp = strchr(doc, ':');
+ if(portp)
+ req->testno = atoi(portp+1);
+ else
+ req->testno = DOCNUMBER_CONNECT;
+ }
+ else
+ req->testno = DOCNUMBER_CONNECT;
+ }
+ else {
+ logmsg("Did not find test number in PATH");
+ req->testno = DOCNUMBER_404;
+ }
+ }
+ }
+
+ if(!end) {
+ /* we don't have a complete request yet! */
+ logmsg("ProcessRequest returned without a complete request");
+ return 0; /* not complete yet */
+ }
+ logmsg("ProcessRequest found a complete request");
+
+ if(use_gopher) {
+ /* when using gopher we cannot check the request until the entire
+ thing has been received */
+ char *ptr;
+
+ /* find the last slash in the line */
+ ptr = strrchr(line, '/');
+
+ if(ptr) {
+ ptr++; /* skip the slash */
+
+ /* skip all non-numericals following the slash */
+ while(*ptr && !ISDIGIT(*ptr))
+ ptr++;
+
+ req->testno = strtol(ptr, &ptr, 10);
+
+ if(req->testno > 10000) {
+ req->partno = req->testno % 10000;
+ req->testno /= 10000;
+ }
+ else
+ req->partno = 0;
+
+ sprintf(logbuf, "Requested GOPHER test number %ld part %ld",
+ req->testno, req->partno);
+ logmsg("%s", logbuf);
+ }
+ }
+
+ if(req->pipe)
+ /* we do have a full set, advance the checkindex to after the end of the
+ headers, for the pipelining case mostly */
+ req->checkindex += (end - line) + strlen(end_of_headers);
+
+ /* **** Persistence ****
+ *
+ * If the request is a HTTP/1.0 one, we close the connection unconditionally
+ * when we're done.
+ *
+ * If the request is a HTTP/1.1 one, we MUST check for a "Connection:"
+ * header that might say "close". If it does, we close a connection when
+ * this request is processed. Otherwise, we keep the connection alive for X
+ * seconds.
+ */
+
+ do {
+ if(got_exit_signal)
+ return 1; /* done */
+
+ if((req->cl==0) && curlx_strnequal("Content-Length:", line, 15)) {
+ /* If we don't ignore content-length, we read it and we read the whole
+ request including the body before we return. If we've been told to
+ ignore the content-length, we will return as soon as all headers
+ have been received */
+ char *endptr;
+ char *ptr = line + 15;
+ unsigned long clen = 0;
+ while(*ptr && ISSPACE(*ptr))
+ ptr++;
+ endptr = ptr;
+ SET_ERRNO(0);
+ clen = strtoul(ptr, &endptr, 10);
+ if((ptr == endptr) || !ISSPACE(*endptr) || (ERANGE == ERRNO)) {
+ /* this assumes that a zero Content-Length is valid */
+ logmsg("Found invalid Content-Length: (%s) in the request", ptr);
+ req->open = FALSE; /* closes connection */
+ return 1; /* done */
+ }
+ req->cl = clen - req->skip;
+
+ logmsg("Found Content-Length: %lu in the request", clen);
+ if(req->skip)
+ logmsg("... but will abort after %zu bytes", req->cl);
+ break;
+ }
+ else if(curlx_strnequal("Transfer-Encoding: chunked", line,
+ strlen("Transfer-Encoding: chunked"))) {
+ /* chunked data coming in */
+ chunked = TRUE;
+ }
+
+ if(chunked) {
+ if(strstr(req->reqbuf, "\r\n0\r\n\r\n"))
+ /* end of chunks reached */
+ return 1; /* done */
+ else
+ return 0; /* not done */
+ }
+
+ line = strchr(line, '\n');
+ if(line)
+ line++;
+
+ } while(line);
+
+ if(!req->auth && strstr(req->reqbuf, "Authorization:")) {
+ req->auth = TRUE; /* Authorization: header present! */
+ if(req->auth_req)
+ logmsg("Authorization header found, as required");
+ }
+
+ if(!req->digest && strstr(req->reqbuf, "Authorization: Digest")) {
+ /* If the client is passing this Digest-header, we set the part number
+ to 1000. Not only to spice up the complexity of this, but to make
+ Digest stuff to work in the test suite. */
+ req->partno += 1000;
+ req->digest = TRUE; /* header found */
+ logmsg("Received Digest request, sending back data %ld", req->partno);
+ }
+ else if(!req->ntlm &&
+ strstr(req->reqbuf, "Authorization: NTLM TlRMTVNTUAAD")) {
+ /* If the client is passing this type-3 NTLM header */
+ req->partno += 1002;
+ req->ntlm = TRUE; /* NTLM found */
+ logmsg("Received NTLM type-3, sending back data %ld", req->partno);
+ if(req->cl) {
+ logmsg(" Expecting %zu POSTed bytes", req->cl);
+ }
+ }
+ else if(!req->ntlm &&
+ strstr(req->reqbuf, "Authorization: NTLM TlRMTVNTUAAB")) {
+ /* If the client is passing this type-1 NTLM header */
+ req->partno += 1001;
+ req->ntlm = TRUE; /* NTLM found */
+ logmsg("Received NTLM type-1, sending back data %ld", req->partno);
+ }
+ else if((req->partno >= 1000) && strstr(req->reqbuf, "Authorization: Basic")) {
+ /* If the client is passing this Basic-header and the part number is already
+ >=1000, we add 1 to the part number. This allows simple Basic authentication
+ negotiation to work in the test suite. */
+ req->partno += 1;
+ logmsg("Received Basic request, sending back data %ld", req->partno);
+ }
+ if(strstr(req->reqbuf, "Connection: close"))
+ req->open = FALSE; /* close connection after this request */
+
+ if(!req->pipe &&
+ req->open &&
+ req->prot_version >= 11 &&
+ end &&
+ req->reqbuf + req->offset > end + strlen(end_of_headers) &&
+ (!strncmp(req->reqbuf, "GET", strlen("GET")) ||
+ !strncmp(req->reqbuf, "HEAD", strlen("HEAD")))) {
+ /* If we have a persistent connection, HTTP version >= 1.1
+ and GET/HEAD request, enable pipelining. */
+ req->checkindex = (end - req->reqbuf) + strlen(end_of_headers);
+ req->pipelining = TRUE;
+ }
+
+ while(req->pipe) {
+ if(got_exit_signal)
+ return 1; /* done */
+ /* scan for more header ends within this chunk */
+ line = &req->reqbuf[req->checkindex];
+ end = strstr(line, end_of_headers);
+ if(!end)
+ break;
+ req->checkindex += (end - line) + strlen(end_of_headers);
+ req->pipe--;
+ }
+
+ /* If authentication is required and no auth was provided, end now. This
+ makes the server NOT wait for PUT/POST data and you can then make the
+ test case send a rejection before any such data has been sent. Test case
+ 154 uses this.*/
+ if(req->auth_req && !req->auth)
+ return 1; /* done */
+
+ if(req->cl > 0) {
+ if(req->cl <= req->offset - (end - req->reqbuf) - strlen(end_of_headers))
+ return 1; /* done */
+ else
+ return 0; /* not complete yet */
+ }
+
+ return 1; /* done */
+}
+
+/* store the entire request in a file */
+static void storerequest(char *reqbuf, size_t totalsize)
+{
+ int res;
+ int error = 0;
+ size_t written;
+ size_t writeleft;
+ FILE *dump;
+
+ if (reqbuf == NULL)
+ return;
+ if (totalsize == 0)
+ return;
+
+ do {
+ dump = fopen(REQUEST_DUMP, "ab");
+ } while ((dump == NULL) && ((error = ERRNO) == EINTR));
+ if (dump == NULL) {
+ logmsg("Error opening file %s error: %d %s",
+ REQUEST_DUMP, error, strerror(error));
+ logmsg("Failed to write request input to " REQUEST_DUMP);
+ return;
+ }
+
+ writeleft = totalsize;
+ do {
+ written = fwrite(&reqbuf[totalsize-writeleft],
+ 1, writeleft, dump);
+ if(got_exit_signal)
+ goto storerequest_cleanup;
+ if(written > 0)
+ writeleft -= written;
+ } while ((writeleft > 0) && ((error = ERRNO) == EINTR));
+
+ if(writeleft == 0)
+ logmsg("Wrote request (%zu bytes) input to " REQUEST_DUMP, totalsize);
+ else if(writeleft > 0) {
+ logmsg("Error writing file %s error: %d %s",
+ REQUEST_DUMP, error, strerror(error));
+ logmsg("Wrote only (%zu bytes) of (%zu bytes) request input to %s",
+ totalsize-writeleft, totalsize, REQUEST_DUMP);
+ }
+
+storerequest_cleanup:
+
+ do {
+ res = fclose(dump);
+ } while(res && ((error = ERRNO) == EINTR));
+ if(res)
+ logmsg("Error closing file %s error: %d %s",
+ REQUEST_DUMP, error, strerror(error));
+}
+
+/* return 0 on success, non-zero on failure */
+static int get_request(curl_socket_t sock, struct httprequest *req)
+{
+ int error;
+ int fail = 0;
+ int done_processing = 0;
+ char *reqbuf = req->reqbuf;
+ ssize_t got = 0;
+
+ char *pipereq = NULL;
+ size_t pipereq_length = 0;
+
+ if(req->pipelining) {
+ pipereq = reqbuf + req->checkindex;
+ pipereq_length = req->offset - req->checkindex;
+ }
+
+ /*** Init the httprequest structure properly for the upcoming request ***/
+
+ req->checkindex = 0;
+ req->offset = 0;
+ req->testno = DOCNUMBER_NOTHING;
+ req->partno = 0;
+ req->open = TRUE;
+ req->auth_req = FALSE;
+ req->auth = FALSE;
+ req->cl = 0;
+ req->digest = FALSE;
+ req->ntlm = FALSE;
+ req->pipe = 0;
+ req->skip = 0;
+ req->writedelay = 0;
+ req->rcmd = RCMD_NORMALREQ;
+ req->prot_version = 0;
+ req->pipelining = FALSE;
+
+ /*** end of httprequest init ***/
+
+ while(!done_processing && (req->offset < REQBUFSIZ-1)) {
+ if(pipereq_length && pipereq) {
+ memmove(reqbuf, pipereq, pipereq_length);
+ got = pipereq_length;
+ pipereq_length = 0;
+ }
+ else {
+ if(req->skip)
+ /* we are instructed to not read the entire thing, so we make sure to only
+ read what we're supposed to and NOT read the enire thing the client
+ wants to send! */
+ got = sread(sock, reqbuf + req->offset, req->cl);
+ else
+ got = sread(sock, reqbuf + req->offset, REQBUFSIZ-1 - req->offset);
+ }
+ if(got_exit_signal)
+ return 1;
+ if(got == 0) {
+ logmsg("Connection closed by client");
+ fail = 1;
+ }
+ else if(got < 0) {
+ error = SOCKERRNO;
+ logmsg("recv() returned error: (%d) %s", error, strerror(error));
+ fail = 1;
+ }
+ if(fail) {
+ /* dump the request received so far to the external file */
+ reqbuf[req->offset] = '\0';
+ storerequest(reqbuf, req->offset);
+ return 1;
+ }
+
+ logmsg("Read %zd bytes", got);
+
+ req->offset += (size_t)got;
+ reqbuf[req->offset] = '\0';
+
+ done_processing = ProcessRequest(req);
+ if(got_exit_signal)
+ return 1;
+ if(done_processing && req->pipe) {
+ logmsg("Waiting for another piped request");
+ done_processing = 0;
+ req->pipe--;
+ }
+ }
+
+ if((req->offset == REQBUFSIZ-1) && (got > 0)) {
+ logmsg("Request would overflow buffer, closing connection");
+ /* dump request received so far to external file anyway */
+ reqbuf[REQBUFSIZ-1] = '\0';
+ fail = 1;
+ }
+ else if(req->offset > REQBUFSIZ-1) {
+ logmsg("Request buffer overflow, closing connection");
+ /* dump request received so far to external file anyway */
+ reqbuf[REQBUFSIZ-1] = '\0';
+ fail = 1;
+ }
+ else
+ reqbuf[req->offset] = '\0';
+
+ /* dump the request to an external file */
+ storerequest(reqbuf, req->pipelining ? req->checkindex : req->offset);
+ if(got_exit_signal)
+ return 1;
+
+ return fail; /* return 0 on success */
+}
+
+/* returns -1 on failure */
+static int send_doc(curl_socket_t sock, struct httprequest *req)
+{
+ ssize_t written;
+ size_t count;
+ const char *buffer;
+ char *ptr=NULL;
+ FILE *stream;
+ char *cmd=NULL;
+ size_t cmdsize=0;
+ FILE *dump;
+ bool persistant = TRUE;
+ bool sendfailure = FALSE;
+ size_t responsesize;
+ int error = 0;
+ int res;
+
+ static char weare[256];
+
+ char partbuf[80]="data";
+
+ logmsg("Send response number %ld part %ld", req->testno, req->partno);
+
+ switch(req->rcmd) {
+ default:
+ case RCMD_NORMALREQ:
+ break; /* continue with business as usual */
+ case RCMD_STREAM:
+#define STREAMTHIS "a string to stream 01234567890\n"
+ count = strlen(STREAMTHIS);
+ for (;;) {
+ written = swrite(sock, STREAMTHIS, count);
+ if(got_exit_signal)
+ return -1;
+ if(written != (ssize_t)count) {
+ logmsg("Stopped streaming");
+ break;
+ }
+ }
+ return -1;
+ case RCMD_IDLE:
+ /* Do nothing. Sit idle. Pretend it rains. */
+ return 0;
+ }
+
+ req->open = FALSE;
+
+ if(req->testno < 0) {
+ size_t msglen;
+ char msgbuf[64];
+
+ switch(req->testno) {
+ case DOCNUMBER_QUIT:
+ logmsg("Replying to QUIT");
+ buffer = docquit;
+ break;
+ case DOCNUMBER_WERULEZ:
+ /* we got a "friends?" question, reply back that we sure are */
+ logmsg("Identifying ourselves as friends");
+ sprintf(msgbuf, "WE ROOLZ: %ld\r\n", (long)getpid());
+ msglen = strlen(msgbuf);
+ if(use_gopher)
+ sprintf(weare, "%s", msgbuf);
+ else
+ sprintf(weare, "HTTP/1.1 200 OK\r\nContent-Length: %zu\r\n\r\n%s",
+ msglen, msgbuf);
+ buffer = weare;
+ break;
+ case DOCNUMBER_INTERNAL:
+ logmsg("Bailing out due to internal error");
+ return -1;
+ case DOCNUMBER_CONNECT:
+ logmsg("Replying to CONNECT");
+ buffer = docconnect;
+ break;
+ case DOCNUMBER_BADCONNECT:
+ logmsg("Replying to a bad CONNECT");
+ buffer = docbadconnect;
+ break;
+ case DOCNUMBER_404:
+ default:
+ logmsg("Replying to with a 404");
+ buffer = doc404;
+ break;
+ }
+
+ count = strlen(buffer);
+ }
+ else {
+ char *filename = test2file(req->testno);
+
+ if(0 != req->partno)
+ sprintf(partbuf, "data%ld", req->partno);
+
+ stream=fopen(filename, "rb");
+ if(!stream) {
+ error = ERRNO;
+ logmsg("fopen() failed with error: %d %s", error, strerror(error));
+ logmsg("Error opening file: %s", filename);
+ logmsg("Couldn't open test file");
+ return 0;
+ }
+ else {
+ error = getpart(&ptr, &count, "reply", partbuf, stream);
+ fclose(stream);
+ if(error) {
+ logmsg("getpart() failed with error: %d", error);
+ return 0;
+ }
+ buffer = ptr;
+ }
+
+ if(got_exit_signal) {
+ if(ptr)
+ free(ptr);
+ return -1;
+ }
+
+ /* re-open the same file again */
+ stream=fopen(filename, "rb");
+ if(!stream) {
+ error = ERRNO;
+ logmsg("fopen() failed with error: %d %s", error, strerror(error));
+ logmsg("Error opening file: %s", filename);
+ logmsg("Couldn't open test file");
+ if(ptr)
+ free(ptr);
+ return 0;
+ }
+ else {
+ /* get the custom server control "commands" */
+ error = getpart(&cmd, &cmdsize, "reply", "postcmd", stream);
+ fclose(stream);
+ if(error) {
+ logmsg("getpart() failed with error: %d", error);
+ if(ptr)
+ free(ptr);
+ return 0;
+ }
+ }
+ }
+
+ if(got_exit_signal) {
+ if(ptr)
+ free(ptr);
+ if(cmd)
+ free(cmd);
+ return -1;
+ }
+
+ /* If the word 'swsclose' is present anywhere in the reply chunk, the
+ connection will be closed after the data has been sent to the requesting
+ client... */
+ if(strstr(buffer, "swsclose") || !count) {
+ persistant = FALSE;
+ logmsg("connection close instruction \"swsclose\" found in response");
+ }
+ if(strstr(buffer, "swsbounce")) {
+ prevbounce = TRUE;
+ logmsg("enable \"swsbounce\" in the next request");
+ }
+ else
+ prevbounce = FALSE;
+
+ dump = fopen(RESPONSE_DUMP, "ab");
+ if(!dump) {
+ error = ERRNO;
+ logmsg("fopen() failed with error: %d %s", error, strerror(error));
+ logmsg("Error opening file: %s", RESPONSE_DUMP);
+ logmsg("couldn't create logfile: " RESPONSE_DUMP);
+ if(ptr)
+ free(ptr);
+ if(cmd)
+ free(cmd);
+ return -1;
+ }
+
+ responsesize = count;
+ do {
+ /* Ok, we send no more than 200 bytes at a time, just to make sure that
+ larger chunks are split up so that the client will need to do multiple
+ recv() calls to get it and thus we exercise that code better */
+ size_t num = count;
+ if(num > 200)
+ num = 200;
+ written = swrite(sock, buffer, num);
+ if (written < 0) {
+ sendfailure = TRUE;
+ break;
+ }
+ else {
+ logmsg("Sent off %zd bytes", written);
+ }
+ if (req->writedelay) {
+ logmsg("Pausing %d seconds", req->writedelay);
+ sleep(req->writedelay);
+ }
+ /* write to file as well */
+ fwrite(buffer, 1, (size_t)written, dump);
+ if(got_exit_signal)
+ break;
+
+ count -= written;
+ buffer += written;
+ } while(count>0);
+
+ do {
+ res = fclose(dump);
+ } while(res && ((error = ERRNO) == EINTR));
+ if(res)
+ logmsg("Error closing file %s error: %d %s",
+ RESPONSE_DUMP, error, strerror(error));
+
+ if(got_exit_signal) {
+ if(ptr)
+ free(ptr);
+ if(cmd)
+ free(cmd);
+ return -1;
+ }
+
+ if(sendfailure) {
+ logmsg("Sending response failed. Only (%zu bytes) of (%zu bytes) were sent",
+ responsesize-count, responsesize);
+ if(ptr)
+ free(ptr);
+ if(cmd)
+ free(cmd);
+ return -1;
+ }
+
+ logmsg("Response sent (%zu bytes) and written to " RESPONSE_DUMP,
+ responsesize);
+
+ if(ptr)
+ free(ptr);
+
+ if(cmdsize > 0 ) {
+ char command[32];
+ int quarters;
+ int num;
+ ptr=cmd;
+ do {
+ if(2 == sscanf(ptr, "%31s %d", command, &num)) {
+ if(!strcmp("wait", command)) {
+ logmsg("Told to sleep for %d seconds", num);
+ quarters = num * 4;
+ while(quarters > 0) {
+ quarters--;
+ res = wait_ms(250);
+ if(got_exit_signal)
+ break;
+ if(res) {
+ /* should not happen */
+ error = SOCKERRNO;
+ logmsg("wait_ms() failed with error: (%d) %s",
+ error, strerror(error));
+ break;
+ }
+ }
+ if(!quarters)
+ logmsg("Continuing after sleeping %d seconds", num);
+ }
+ else
+ logmsg("Unknown command in reply command section");
+ }
+ ptr = strchr(ptr, '\n');
+ if(ptr)
+ ptr++;
+ else
+ ptr = NULL;
+ } while(ptr && *ptr);
+ }
+ if(cmd)
+ free(cmd);
+
+ req->open = use_gopher?FALSE:persistant;
+
+ prevtestno = req->testno;
+ prevpartno = req->partno;
+
+ return 0;
+}
+
+
+int main(int argc, char *argv[])
+{
+ struct sockaddr_in me;
+#ifdef ENABLE_IPV6
+ struct sockaddr_in6 me6;
+#endif /* ENABLE_IPV6 */
+ curl_socket_t sock = CURL_SOCKET_BAD;
+ curl_socket_t msgsock = CURL_SOCKET_BAD;
+ int wrotepidfile = 0;
+ int flag;
+ unsigned short port = DEFAULT_PORT;
+ char *pidname= (char *)".http.pid";
+ struct httprequest req;
+ int rc;
+ int error;
+ int arg=1;
+ long pid;
+#ifdef CURL_SWS_FORK_ENABLED
+ bool use_fork = FALSE;
+#endif
+
+ while(argc>arg) {
+ if(!strcmp("--version", argv[arg])) {
+ printf("sws IPv4%s"
+#ifdef CURL_SWS_FORK_ENABLED
+ " FORK"
+#endif
+ "\n"
+ ,
+#ifdef ENABLE_IPV6
+ "/IPv6"
+#else
+ ""
+#endif
+ );
+ return 0;
+ }
+ else if(!strcmp("--pidfile", argv[arg])) {
+ arg++;
+ if(argc>arg)
+ pidname = argv[arg++];
+ }
+ else if(!strcmp("--logfile", argv[arg])) {
+ arg++;
+ if(argc>arg)
+ serverlogfile = argv[arg++];
+ }
+ else if(!strcmp("--gopher", argv[arg])) {
+ arg++;
+ use_gopher = TRUE;
+ end_of_headers = "\r\n"; /* gopher style is much simpler */
+ }
+ else if(!strcmp("--ipv4", argv[arg])) {
+#ifdef ENABLE_IPV6
+ ipv_inuse = "IPv4";
+ use_ipv6 = FALSE;
+#endif
+ arg++;
+ }
+ else if(!strcmp("--ipv6", argv[arg])) {
+#ifdef ENABLE_IPV6
+ ipv_inuse = "IPv6";
+ use_ipv6 = TRUE;
+#endif
+ arg++;
+ }
+#ifdef CURL_SWS_FORK_ENABLED
+ else if(!strcmp("--fork", argv[arg])) {
+ use_fork=TRUE;
+ arg++;
+ }
+#endif
+ else if(!strcmp("--port", argv[arg])) {
+ arg++;
+ if(argc>arg) {
+ char *endptr;
+ unsigned long ulnum = strtoul(argv[arg], &endptr, 10);
+ if((endptr != argv[arg] + strlen(argv[arg])) ||
+ (ulnum < 1025UL) || (ulnum > 65535UL)) {
+ fprintf(stderr, "sws: invalid --port argument (%s)\n",
+ argv[arg]);
+ return 0;
+ }
+ port = curlx_ultous(ulnum);
+ arg++;
+ }
+ }
+ else if(!strcmp("--srcdir", argv[arg])) {
+ arg++;
+ if(argc>arg) {
+ path = argv[arg];
+ arg++;
+ }
+ }
+ else {
+ puts("Usage: sws [option]\n"
+ " --version\n"
+ " --logfile [file]\n"
+ " --pidfile [file]\n"
+ " --ipv4\n"
+ " --ipv6\n"
+ " --port [port]\n"
+ " --srcdir [path]\n"
+ " --gopher\n"
+ " --fork");
+ return 0;
+ }
+ }
+
+#ifdef WIN32
+ win32_init();
+ atexit(win32_cleanup);
+#endif
+
+ install_signal_handlers();
+
+ pid = (long)getpid();
+
+#ifdef ENABLE_IPV6
+ if(!use_ipv6)
+#endif
+ sock = socket(AF_INET, SOCK_STREAM, 0);
+#ifdef ENABLE_IPV6
+ else
+ sock = socket(AF_INET6, SOCK_STREAM, 0);
+#endif
+
+ if(CURL_SOCKET_BAD == sock) {
+ error = SOCKERRNO;
+ logmsg("Error creating socket: (%d) %s",
+ error, strerror(error));
+ goto sws_cleanup;
+ }
+
+ flag = 1;
+ if (0 != setsockopt(sock, SOL_SOCKET, SO_REUSEADDR,
+ (void *)&flag, sizeof(flag))) {
+ error = SOCKERRNO;
+ logmsg("setsockopt(SO_REUSEADDR) failed with error: (%d) %s",
+ error, strerror(error));
+ goto sws_cleanup;
+ }
+
+#ifdef ENABLE_IPV6
+ if(!use_ipv6) {
+#endif
+ memset(&me, 0, sizeof(me));
+ me.sin_family = AF_INET;
+ me.sin_addr.s_addr = INADDR_ANY;
+ me.sin_port = htons(port);
+ rc = bind(sock, (struct sockaddr *) &me, sizeof(me));
+#ifdef ENABLE_IPV6
+ }
+ else {
+ memset(&me6, 0, sizeof(me6));
+ me6.sin6_family = AF_INET6;
+ me6.sin6_addr = in6addr_any;
+ me6.sin6_port = htons(port);
+ rc = bind(sock, (struct sockaddr *) &me6, sizeof(me6));
+ }
+#endif /* ENABLE_IPV6 */
+ if(0 != rc) {
+ error = SOCKERRNO;
+ logmsg("Error binding socket on port %hu: (%d) %s",
+ port, error, strerror(error));
+ goto sws_cleanup;
+ }
+
+ logmsg("Running %s %s version on port %d",
+ use_gopher?"GOPHER":"HTTP", ipv_inuse, (int)port);
+
+ /* start accepting connections */
+ rc = listen(sock, 5);
+ if(0 != rc) {
+ error = SOCKERRNO;
+ logmsg("listen() failed with error: (%d) %s",
+ error, strerror(error));
+ goto sws_cleanup;
+ }
+
+ /*
+ ** As soon as this server writes its pid file the test harness will
+ ** attempt to connect to this server and initiate its verification.
+ */
+
+ wrotepidfile = write_pidfile(pidname);
+ if(!wrotepidfile)
+ goto sws_cleanup;
+
+ for (;;) {
+ msgsock = accept(sock, NULL, NULL);
+
+ if(got_exit_signal)
+ break;
+ if (CURL_SOCKET_BAD == msgsock) {
+ error = SOCKERRNO;
+ logmsg("MAJOR ERROR: accept() failed with error: (%d) %s",
+ error, strerror(error));
+ break;
+ }
+
+ /*
+ ** As soon as this server acepts a connection from the test harness it
+ ** must set the server logs advisor read lock to indicate that server
+ ** logs should not be read until this lock is removed by this server.
+ */
+
+ set_advisor_read_lock(SERVERLOGS_LOCK);
+ serverlogslocked = 1;
+
+#ifdef CURL_SWS_FORK_ENABLED
+ if(use_fork) {
+ /* The fork enabled version just forks off the child and don't care
+ about it anymore, so don't assume otherwise. Beware and don't do
+ this at home. */
+ rc = fork();
+ if(-1 == rc) {
+ printf("MAJOR ERROR: fork() failed!\n");
+ break;
+ }
+ }
+ else
+ /* not a fork, just set rc so the following proceeds nicely */
+ rc = 0;
+ /* 0 is returned to the child */
+ if(0 == rc) {
+#endif
+ logmsg("====> Client connect");
+
+#ifdef TCP_NODELAY
+ /*
+ * Disable the Nagle algorithm to make it easier to send out a large
+ * response in many small segments to torture the clients more.
+ */
+ flag = 1;
+ if (setsockopt(msgsock, IPPROTO_TCP, TCP_NODELAY,
+ (void *)&flag, sizeof(flag)) == -1) {
+ logmsg("====> TCP_NODELAY failed");
+ }
+#endif
+
+ /* initialization of httprequest struct is done in get_request(), but due
+ to pipelining treatment the pipelining struct field must be initialized
+ previously to FALSE every time a new connection arrives. */
+
+ req.pipelining = FALSE;
+
+ do {
+ if(got_exit_signal)
+ break;
+
+ if(get_request(msgsock, &req))
+ /* non-zero means error, break out of loop */
+ break;
+
+ if(prevbounce) {
+ /* bounce treatment requested */
+ if((req.testno == prevtestno) &&
+ (req.partno == prevpartno)) {
+ req.partno++;
+ logmsg("BOUNCE part number to %ld", req.partno);
+ }
+ else {
+ prevbounce = FALSE;
+ prevtestno = -1;
+ prevpartno = -1;
+ }
+ }
+
+ send_doc(msgsock, &req);
+ if(got_exit_signal)
+ break;
+
+ if((req.testno < 0) && (req.testno != DOCNUMBER_CONNECT)) {
+ logmsg("special request received, no persistency");
+ break;
+ }
+ if(!req.open) {
+ logmsg("instructed to close connection after server-reply");
+ break;
+ }
+
+ if(req.open)
+ logmsg("=> persistant connection request ended, awaits new request");
+ /* if we got a CONNECT, loop and get another request as well! */
+ } while(req.open || (req.testno == DOCNUMBER_CONNECT));
+
+ if(got_exit_signal)
+ break;
+
+ logmsg("====> Client disconnect");
+ sclose(msgsock);
+ msgsock = CURL_SOCKET_BAD;
+
+ if(serverlogslocked) {
+ serverlogslocked = 0;
+ clear_advisor_read_lock(SERVERLOGS_LOCK);
+ }
+
+ if (req.testno == DOCNUMBER_QUIT)
+ break;
+#ifdef CURL_SWS_FORK_ENABLED
+ }
+#endif
+ }
+
+sws_cleanup:
+
+ if((msgsock != sock) && (msgsock != CURL_SOCKET_BAD))
+ sclose(msgsock);
+
+ if(sock != CURL_SOCKET_BAD)
+ sclose(sock);
+
+ if(got_exit_signal)
+ logmsg("signalled to die");
+
+ if(wrotepidfile)
+ unlink(pidname);
+
+ if(serverlogslocked) {
+ serverlogslocked = 0;
+ clear_advisor_read_lock(SERVERLOGS_LOCK);
+ }
+
+ restore_signal_handlers();
+
+ if(got_exit_signal) {
+ logmsg("========> %s sws (port: %d pid: %ld) exits with signal (%d)",
+ ipv_inuse, (int)port, pid, exit_signal);
+ /*
+ * To properly set the return status of the process we
+ * must raise the same signal SIGINT or SIGTERM that we
+ * caught and let the old handler take care of it.
+ */
+ raise(exit_signal);
+ }
+
+ logmsg("========> sws quits");
+ return 0;
+}
+
diff --git a/tests/server/testpart.c b/tests/server/testpart.c
new file mode 100644
index 0000000..9409714
--- /dev/null
+++ b/tests/server/testpart.c
@@ -0,0 +1,54 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at http://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ***************************************************************************/
+
+#define CURL_NO_OLDIES
+
+#include "setup.h"
+
+#include "getpart.h"
+
+#define _MPRINTF_REPLACE /* use our functions only */
+#include <curl/mprintf.h>
+
+/* include memdebug.h last */
+#include "memdebug.h"
+
+int main(int argc, char **argv)
+{
+ int rc;
+ char *part;
+ size_t partlen, i;
+
+ if(argc< 3) {
+ printf("./testpart main sub\n");
+ }
+ else {
+ rc = getpart(&part, &partlen, argv[1], argv[2], stdin);
+ if(rc)
+ return(rc);
+ for(i = 0; i < partlen; i++)
+ printf("%c", part[i]);
+ free(part);
+ }
+ return 0;
+}
+
diff --git a/tests/server/tftp.h b/tests/server/tftp.h
new file mode 100644
index 0000000..f60f122
--- /dev/null
+++ b/tests/server/tftp.h
@@ -0,0 +1,57 @@
+#ifndef __SERVER_TFTP_H
+#define __SERVER_TFTP_H
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2008, Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at http://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ***************************************************************************/
+
+/* This file is a rewrite/clone of the arpa/tftp.h file for systems without
+ it. */
+
+#define SEGSIZE 512 /* data segment size */
+
+#ifndef __GNUC__
+#define __attribute__(x)
+#endif
+
+/* Using a packed struct as binary in a program is begging for problems, but
+ the tftpd server was written like this so we have this struct here to make
+ things build. */
+
+struct tftphdr {
+ short th_opcode; /* packet type */
+ unsigned short th_block; /* all sorts of things */
+ char th_data[1]; /* data or error string */
+} __attribute__ ((__packed__));
+
+#define th_stuff th_block
+#define th_code th_block
+#define th_msg th_data
+
+#define EUNDEF 0
+#define ENOTFOUND 1
+#define EACCESS 2
+#define ENOSPACE 3
+#define EBADOP 4
+#define EBADID 5
+#define EEXISTS 6
+#define ENOUSER 7
+
+#endif /* __SERVER_TFTP_H */
diff --git a/tests/server/tftpd.c b/tests/server/tftpd.c
new file mode 100644
index 0000000..0adcd49
--- /dev/null
+++ b/tests/server/tftpd.c
@@ -0,0 +1,1263 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ *
+ * Trivial file transfer protocol server.
+ *
+ * This code includes many modifications by Jim Guyton <guyton@rand-unix>
+ *
+ * This source file was started based on netkit-tftpd 0.17
+ * Heavily modified for curl's test suite
+ */
+
+/*
+ * Copyright (c) 1983 Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#define CURL_NO_OLDIES
+
+#include "setup.h" /* portability help from the lib directory */
+
+#ifdef HAVE_SYS_IOCTL_H
+#include <sys/ioctl.h>
+#endif
+#ifdef HAVE_SIGNAL_H
+#include <signal.h>
+#endif
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#ifdef HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+#ifdef HAVE_ARPA_INET_H
+#include <arpa/inet.h>
+#endif
+#ifdef HAVE_ARPA_TFTP_H
+#include <arpa/tftp.h>
+#else
+#include "tftp.h"
+#endif
+#ifdef HAVE_NETDB_H
+#include <netdb.h>
+#endif
+#ifdef HAVE_SYS_FILIO_H
+/* FIONREAD on Solaris 7 */
+#include <sys/filio.h>
+#endif
+
+#include <setjmp.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef HAVE_PWD_H
+#include <pwd.h>
+#endif
+
+#define ENABLE_CURLX_PRINTF
+/* make the curlx header define all printf() functions to use the curlx_*
+ versions instead */
+#include "curlx.h" /* from the private lib dir */
+#include "getpart.h"
+#include "util.h"
+
+/* include memdebug.h last */
+#include "memdebug.h"
+
+/*****************************************************************************
+* STRUCT DECLARATIONS AND DEFINES *
+*****************************************************************************/
+
+#ifndef PKTSIZE
+#define PKTSIZE (SEGSIZE + 4) /* SEGSIZE defined in arpa/tftp.h */
+#endif
+
+struct testcase {
+ char *buffer; /* holds the file data to send to the client */
+ size_t bufsize; /* size of the data in buffer */
+ char *rptr; /* read pointer into the buffer */
+ size_t rcount; /* amount of data left to read of the file */
+ long num; /* test case number */
+ int ofile; /* file descriptor for output file when uploading to us */
+};
+
+struct formats {
+ const char *f_mode;
+ int f_convert;
+};
+
+struct errmsg {
+ int e_code;
+ const char *e_msg;
+};
+
+/*
+ * bf.counter values in range [-1 .. SEGSIZE] represents size of data in the
+ * bf.buf buffer. Additionally it can also hold flags BF_ALLOC or BF_FREE.
+ */
+
+struct bf {
+ int counter; /* size of data in buffer, or flag */
+ char buf[PKTSIZE]; /* room for data packet */
+};
+
+#define BF_ALLOC -3 /* alloc'd but not yet filled */
+#define BF_FREE -2 /* free */
+
+#define opcode_RRQ 1
+#define opcode_WRQ 2
+#define opcode_DATA 3
+#define opcode_ACK 4
+#define opcode_ERROR 5
+
+#define TIMEOUT 5
+
+#undef MIN
+#define MIN(x,y) ((x)<(y)?(x):(y))
+
+#ifndef DEFAULT_LOGFILE
+#define DEFAULT_LOGFILE "log/tftpd.log"
+#endif
+
+#define REQUEST_DUMP "log/server.input"
+
+#define DEFAULT_PORT 8999 /* UDP */
+
+/*****************************************************************************
+* GLOBAL VARIABLES *
+*****************************************************************************/
+
+static struct errmsg errmsgs[] = {
+ { EUNDEF, "Undefined error code" },
+ { ENOTFOUND, "File not found" },
+ { EACCESS, "Access violation" },
+ { ENOSPACE, "Disk full or allocation exceeded" },
+ { EBADOP, "Illegal TFTP operation" },
+ { EBADID, "Unknown transfer ID" },
+ { EEXISTS, "File already exists" },
+ { ENOUSER, "No such user" },
+ { -1, 0 }
+};
+
+static struct formats formata[] = {
+ { "netascii", 1 },
+ { "octet", 0 },
+ { NULL, 0 }
+};
+
+static struct bf bfs[2];
+
+static int nextone; /* index of next buffer to use */
+static int current; /* index of buffer in use */
+
+ /* control flags for crlf conversions */
+static int newline = 0; /* fillbuf: in middle of newline expansion */
+static int prevchar = -1; /* putbuf: previous char (cr check) */
+
+static char buf[PKTSIZE];
+static char ackbuf[PKTSIZE];
+
+static struct sockaddr_in from;
+static curl_socklen_t fromlen;
+
+static curl_socket_t peer = CURL_SOCKET_BAD;
+
+static int timeout;
+static int maxtimeout = 5 * TIMEOUT;
+
+static unsigned short sendblock; /* block count used by sendtftp() */
+static struct tftphdr *sdp; /* data buffer used by sendtftp() */
+static struct tftphdr *sap; /* ack buffer used by sendtftp() */
+
+static unsigned short recvblock; /* block count used by recvtftp() */
+static struct tftphdr *rdp; /* data buffer used by recvtftp() */
+static struct tftphdr *rap; /* ack buffer used by recvtftp() */
+
+#ifdef ENABLE_IPV6
+static bool use_ipv6 = FALSE;
+#endif
+static const char *ipv_inuse = "IPv4";
+
+const char *serverlogfile = DEFAULT_LOGFILE;
+static char *pidname= (char *)".tftpd.pid";
+static int serverlogslocked = 0;
+static int wrotepidfile = 0;
+
+#ifdef HAVE_SIGSETJMP
+static sigjmp_buf timeoutbuf;
+#endif
+
+#if defined(HAVE_ALARM) && defined(SIGALRM)
+static int rexmtval = TIMEOUT;
+#endif
+
+/* do-nothing macro replacement for systems which lack siginterrupt() */
+
+#ifndef HAVE_SIGINTERRUPT
+#define siginterrupt(x,y) do {} while(0)
+#endif
+
+/* vars used to keep around previous signal handlers */
+
+typedef RETSIGTYPE (*SIGHANDLER_T)(int);
+
+#ifdef SIGHUP
+static SIGHANDLER_T old_sighup_handler = SIG_ERR;
+#endif
+
+#ifdef SIGPIPE
+static SIGHANDLER_T old_sigpipe_handler = SIG_ERR;
+#endif
+
+#ifdef SIGINT
+static SIGHANDLER_T old_sigint_handler = SIG_ERR;
+#endif
+
+#ifdef SIGTERM
+static SIGHANDLER_T old_sigterm_handler = SIG_ERR;
+#endif
+
+/* var which if set indicates that the program should finish execution */
+
+SIG_ATOMIC_T got_exit_signal = 0;
+
+/* if next is set indicates the first signal handled in exit_signal_handler */
+
+static volatile int exit_signal = 0;
+
+/*****************************************************************************
+* FUNCTION PROTOTYPES *
+*****************************************************************************/
+
+static struct tftphdr *rw_init(int);
+
+static struct tftphdr *w_init(void);
+
+static struct tftphdr *r_init(void);
+
+static int readit(struct testcase *test,
+ struct tftphdr **dpp,
+ int convert);
+
+static int writeit(struct testcase *test,
+ struct tftphdr **dpp,
+ int ct,
+ int convert);
+
+static void read_ahead(struct testcase *test, int convert);
+
+static ssize_t write_behind(struct testcase *test, int convert);
+
+static int synchnet(curl_socket_t);
+
+static int do_tftp(struct testcase *test, struct tftphdr *tp, ssize_t size);
+
+static int validate_access(struct testcase *test, const char *fname, int mode);
+
+static void sendtftp(struct testcase *test, struct formats *pf);
+
+static void recvtftp(struct testcase *test, struct formats *pf);
+
+static void nak(int error);
+
+#if defined(HAVE_ALARM) && defined(SIGALRM)
+
+static void mysignal(int sig, void (*handler)(int));
+
+static void timer(int signum);
+
+static void justtimeout(int signum);
+
+#endif /* HAVE_ALARM && SIGALRM */
+
+static RETSIGTYPE exit_signal_handler(int signum);
+
+static void install_signal_handlers(void);
+
+static void restore_signal_handlers(void);
+
+/*****************************************************************************
+* FUNCTION IMPLEMENTATIONS *
+*****************************************************************************/
+
+#if defined(HAVE_ALARM) && defined(SIGALRM)
+
+/*
+ * Like signal(), but with well-defined semantics.
+ */
+static void mysignal(int sig, void (*handler)(int))
+{
+ struct sigaction sa;
+ memset(&sa, 0, sizeof(sa));
+ sa.sa_handler = handler;
+ sigaction(sig, &sa, NULL);
+}
+
+static void timer(int signum)
+{
+ (void)signum;
+
+ logmsg("alarm!");
+
+ timeout += rexmtval;
+ if(timeout >= maxtimeout) {
+ if(wrotepidfile) {
+ wrotepidfile = 0;
+ unlink(pidname);
+ }
+ if(serverlogslocked) {
+ serverlogslocked = 0;
+ clear_advisor_read_lock(SERVERLOGS_LOCK);
+ }
+ exit(1);
+ }
+#ifdef HAVE_SIGSETJMP
+ siglongjmp(timeoutbuf, 1);
+#endif
+}
+
+static void justtimeout(int signum)
+{
+ (void)signum;
+}
+
+#endif /* HAVE_ALARM && SIGALRM */
+
+/* signal handler that will be triggered to indicate that the program
+ should finish its execution in a controlled manner as soon as possible.
+ The first time this is called it will set got_exit_signal to one and
+ store in exit_signal the signal that triggered its execution. */
+
+static RETSIGTYPE exit_signal_handler(int signum)
+{
+ int old_errno = ERRNO;
+ if(got_exit_signal == 0) {
+ got_exit_signal = 1;
+ exit_signal = signum;
+ }
+ (void)signal(signum, exit_signal_handler);
+ SET_ERRNO(old_errno);
+}
+
+static void install_signal_handlers(void)
+{
+#ifdef SIGHUP
+ /* ignore SIGHUP signal */
+ if((old_sighup_handler = signal(SIGHUP, SIG_IGN)) == SIG_ERR)
+ logmsg("cannot install SIGHUP handler: %s", strerror(ERRNO));
+#endif
+#ifdef SIGPIPE
+ /* ignore SIGPIPE signal */
+ if((old_sigpipe_handler = signal(SIGPIPE, SIG_IGN)) == SIG_ERR)
+ logmsg("cannot install SIGPIPE handler: %s", strerror(ERRNO));
+#endif
+#ifdef SIGINT
+ /* handle SIGINT signal with our exit_signal_handler */
+ if((old_sigint_handler = signal(SIGINT, exit_signal_handler)) == SIG_ERR)
+ logmsg("cannot install SIGINT handler: %s", strerror(ERRNO));
+ else
+ siginterrupt(SIGINT, 1);
+#endif
+#ifdef SIGTERM
+ /* handle SIGTERM signal with our exit_signal_handler */
+ if((old_sigterm_handler = signal(SIGTERM, exit_signal_handler)) == SIG_ERR)
+ logmsg("cannot install SIGTERM handler: %s", strerror(ERRNO));
+ else
+ siginterrupt(SIGTERM, 1);
+#endif
+}
+
+static void restore_signal_handlers(void)
+{
+#ifdef SIGHUP
+ if(SIG_ERR != old_sighup_handler)
+ (void)signal(SIGHUP, old_sighup_handler);
+#endif
+#ifdef SIGPIPE
+ if(SIG_ERR != old_sigpipe_handler)
+ (void)signal(SIGPIPE, old_sigpipe_handler);
+#endif
+#ifdef SIGINT
+ if(SIG_ERR != old_sigint_handler)
+ (void)signal(SIGINT, old_sigint_handler);
+#endif
+#ifdef SIGTERM
+ if(SIG_ERR != old_sigterm_handler)
+ (void)signal(SIGTERM, old_sigterm_handler);
+#endif
+}
+
+/*
+ * init for either read-ahead or write-behind.
+ * zero for write-behind, one for read-head.
+ */
+static struct tftphdr *rw_init(int x)
+{
+ newline = 0; /* init crlf flag */
+ prevchar = -1;
+ bfs[0].counter = BF_ALLOC; /* pass out the first buffer */
+ current = 0;
+ bfs[1].counter = BF_FREE;
+ nextone = x; /* ahead or behind? */
+ return (struct tftphdr *)bfs[0].buf;
+}
+
+static struct tftphdr *w_init(void)
+{
+ return rw_init(0); /* write-behind */
+}
+
+static struct tftphdr *r_init(void)
+{
+ return rw_init(1); /* read-ahead */
+}
+
+/* Have emptied current buffer by sending to net and getting ack.
+ Free it and return next buffer filled with data.
+ */
+static int readit(struct testcase *test, struct tftphdr **dpp,
+ int convert /* if true, convert to ascii */)
+{
+ struct bf *b;
+
+ bfs[current].counter = BF_FREE; /* free old one */
+ current = !current; /* "incr" current */
+
+ b = &bfs[current]; /* look at new buffer */
+ if (b->counter == BF_FREE) /* if it's empty */
+ read_ahead(test, convert); /* fill it */
+
+ *dpp = (struct tftphdr *)b->buf; /* set caller's ptr */
+ return b->counter;
+}
+
+/*
+ * fill the input buffer, doing ascii conversions if requested
+ * conversions are lf -> cr,lf and cr -> cr, nul
+ */
+static void read_ahead(struct testcase *test,
+ int convert /* if true, convert to ascii */)
+{
+ int i;
+ char *p;
+ int c;
+ struct bf *b;
+ struct tftphdr *dp;
+
+ b = &bfs[nextone]; /* look at "next" buffer */
+ if (b->counter != BF_FREE) /* nop if not free */
+ return;
+ nextone = !nextone; /* "incr" next buffer ptr */
+
+ dp = (struct tftphdr *)b->buf;
+
+ if (convert == 0) {
+ /* The former file reading code did this:
+ b->counter = read(fileno(file), dp->th_data, SEGSIZE); */
+ size_t copy_n = MIN(SEGSIZE, test->rcount);
+ memcpy(dp->th_data, test->rptr, copy_n);
+
+ /* decrease amount, advance pointer */
+ test->rcount -= copy_n;
+ test->rptr += copy_n;
+ b->counter = (int)copy_n;
+ return;
+ }
+
+ p = dp->th_data;
+ for (i = 0 ; i < SEGSIZE; i++) {
+ if (newline) {
+ if (prevchar == '\n')
+ c = '\n'; /* lf to cr,lf */
+ else
+ c = '\0'; /* cr to cr,nul */
+ newline = 0;
+ }
+ else {
+ if(test->rcount) {
+ c=test->rptr[0];
+ test->rptr++;
+ test->rcount--;
+ }
+ else
+ break;
+ if (c == '\n' || c == '\r') {
+ prevchar = c;
+ c = '\r';
+ newline = 1;
+ }
+ }
+ *p++ = (char)c;
+ }
+ b->counter = (int)(p - dp->th_data);
+}
+
+/* Update count associated with the buffer, get new buffer from the queue.
+ Calls write_behind only if next buffer not available.
+ */
+static int writeit(struct testcase *test, struct tftphdr **dpp,
+ int ct, int convert)
+{
+ bfs[current].counter = ct; /* set size of data to write */
+ current = !current; /* switch to other buffer */
+ if (bfs[current].counter != BF_FREE) /* if not free */
+ write_behind(test, convert); /* flush it */
+ bfs[current].counter = BF_ALLOC; /* mark as alloc'd */
+ *dpp = (struct tftphdr *)bfs[current].buf;
+ return ct; /* this is a lie of course */
+}
+
+/*
+ * Output a buffer to a file, converting from netascii if requested.
+ * CR,NUL -> CR and CR,LF => LF.
+ * Note spec is undefined if we get CR as last byte of file or a
+ * CR followed by anything else. In this case we leave it alone.
+ */
+static ssize_t write_behind(struct testcase *test, int convert)
+{
+ char *writebuf;
+ int count;
+ int ct;
+ char *p;
+ int c; /* current character */
+ struct bf *b;
+ struct tftphdr *dp;
+
+ b = &bfs[nextone];
+ if (b->counter < -1) /* anything to flush? */
+ return 0; /* just nop if nothing to do */
+
+ if(!test->ofile) {
+ char outfile[256];
+ snprintf(outfile, sizeof(outfile), "log/upload.%ld", test->num);
+ test->ofile=open(outfile, O_CREAT|O_RDWR, 0777);
+ if(test->ofile == -1) {
+ logmsg("Couldn't create and/or open file %s for upload!", outfile);
+ return -1; /* failure! */
+ }
+ }
+
+ count = b->counter; /* remember byte count */
+ b->counter = BF_FREE; /* reset flag */
+ dp = (struct tftphdr *)b->buf;
+ nextone = !nextone; /* incr for next time */
+ writebuf = dp->th_data;
+
+ if (count <= 0)
+ return -1; /* nak logic? */
+
+ if (convert == 0)
+ return write(test->ofile, writebuf, count);
+
+ p = writebuf;
+ ct = count;
+ while (ct--) { /* loop over the buffer */
+ c = *p++; /* pick up a character */
+ if (prevchar == '\r') { /* if prev char was cr */
+ if (c == '\n') /* if have cr,lf then just */
+ lseek(test->ofile, -1, SEEK_CUR); /* smash lf on top of the cr */
+ else
+ if (c == '\0') /* if have cr,nul then */
+ goto skipit; /* just skip over the putc */
+ /* else just fall through and allow it */
+ }
+ /* formerly
+ putc(c, file); */
+ write(test->ofile, &c, 1);
+ skipit:
+ prevchar = c;
+ }
+ return count;
+}
+
+/* When an error has occurred, it is possible that the two sides are out of
+ * synch. Ie: that what I think is the other side's response to packet N is
+ * really their response to packet N-1.
+ *
+ * So, to try to prevent that, we flush all the input queued up for us on the
+ * network connection on our host.
+ *
+ * We return the number of packets we flushed (mostly for reporting when trace
+ * is active).
+ */
+
+static int synchnet(curl_socket_t f /* socket to flush */)
+{
+
+#if defined(HAVE_IOCTLSOCKET)
+ unsigned long i;
+#else
+ int i;
+#endif
+ int j = 0;
+ char rbuf[PKTSIZE];
+ struct sockaddr_in fromaddr;
+ curl_socklen_t fromaddrlen;
+
+ for (;;) {
+#if defined(HAVE_IOCTLSOCKET)
+ (void) ioctlsocket(f, FIONREAD, &i);
+#else
+ (void) ioctl(f, FIONREAD, &i);
+#endif
+ if (i) {
+ j++;
+ fromaddrlen = sizeof(fromaddr);
+ (void)recvfrom(f, rbuf, sizeof(rbuf), 0,
+ (struct sockaddr *)&fromaddr, &fromaddrlen);
+ }
+ else
+ break;
+ }
+ return j;
+}
+
+int main(int argc, char **argv)
+{
+ struct sockaddr_in me;
+#ifdef ENABLE_IPV6
+ struct sockaddr_in6 me6;
+#endif /* ENABLE_IPV6 */
+
+ struct tftphdr *tp;
+ ssize_t n = 0;
+ int arg = 1;
+ unsigned short port = DEFAULT_PORT;
+ curl_socket_t sock = CURL_SOCKET_BAD;
+ int flag;
+ int rc;
+ int error;
+ long pid;
+ struct testcase test;
+ int result = 0;
+
+ memset(&test, 0, sizeof(test));
+
+ while(argc>arg) {
+ if(!strcmp("--version", argv[arg])) {
+ printf("tftpd IPv4%s\n",
+#ifdef ENABLE_IPV6
+ "/IPv6"
+#else
+ ""
+#endif
+ );
+ return 0;
+ }
+ else if(!strcmp("--pidfile", argv[arg])) {
+ arg++;
+ if(argc>arg)
+ pidname = argv[arg++];
+ }
+ else if(!strcmp("--logfile", argv[arg])) {
+ arg++;
+ if(argc>arg)
+ serverlogfile = argv[arg++];
+ }
+ else if(!strcmp("--ipv4", argv[arg])) {
+#ifdef ENABLE_IPV6
+ ipv_inuse = "IPv4";
+ use_ipv6 = FALSE;
+#endif
+ arg++;
+ }
+ else if(!strcmp("--ipv6", argv[arg])) {
+#ifdef ENABLE_IPV6
+ ipv_inuse = "IPv6";
+ use_ipv6 = TRUE;
+#endif
+ arg++;
+ }
+ else if(!strcmp("--port", argv[arg])) {
+ arg++;
+ if(argc>arg) {
+ char *endptr;
+ unsigned long ulnum = strtoul(argv[arg], &endptr, 10);
+ if((endptr != argv[arg] + strlen(argv[arg])) ||
+ (ulnum < 1025UL) || (ulnum > 65535UL)) {
+ fprintf(stderr, "tftpd: invalid --port argument (%s)\n",
+ argv[arg]);
+ return 0;
+ }
+ port = curlx_ultous(ulnum);
+ arg++;
+ }
+ }
+ else if(!strcmp("--srcdir", argv[arg])) {
+ arg++;
+ if(argc>arg) {
+ path = argv[arg];
+ arg++;
+ }
+ }
+ else {
+ puts("Usage: tftpd [option]\n"
+ " --version\n"
+ " --logfile [file]\n"
+ " --pidfile [file]\n"
+ " --ipv4\n"
+ " --ipv6\n"
+ " --port [port]\n"
+ " --srcdir [path]");
+ return 0;
+ }
+ }
+
+#ifdef WIN32
+ win32_init();
+ atexit(win32_cleanup);
+#endif
+
+ install_signal_handlers();
+
+ pid = (long)getpid();
+
+#ifdef ENABLE_IPV6
+ if(!use_ipv6)
+#endif
+ sock = socket(AF_INET, SOCK_DGRAM, 0);
+#ifdef ENABLE_IPV6
+ else
+ sock = socket(AF_INET6, SOCK_DGRAM, 0);
+#endif
+
+ if(CURL_SOCKET_BAD == sock) {
+ error = SOCKERRNO;
+ logmsg("Error creating socket: (%d) %s",
+ error, strerror(error));
+ result = 1;
+ goto tftpd_cleanup;
+ }
+
+ flag = 1;
+ if (0 != setsockopt(sock, SOL_SOCKET, SO_REUSEADDR,
+ (void *)&flag, sizeof(flag))) {
+ error = SOCKERRNO;
+ logmsg("setsockopt(SO_REUSEADDR) failed with error: (%d) %s",
+ error, strerror(error));
+ result = 1;
+ goto tftpd_cleanup;
+ }
+
+#ifdef ENABLE_IPV6
+ if(!use_ipv6) {
+#endif
+ memset(&me, 0, sizeof(me));
+ me.sin_family = AF_INET;
+ me.sin_addr.s_addr = INADDR_ANY;
+ me.sin_port = htons(port);
+ rc = bind(sock, (struct sockaddr *) &me, sizeof(me));
+#ifdef ENABLE_IPV6
+ }
+ else {
+ memset(&me6, 0, sizeof(me6));
+ me6.sin6_family = AF_INET6;
+ me6.sin6_addr = in6addr_any;
+ me6.sin6_port = htons(port);
+ rc = bind(sock, (struct sockaddr *) &me6, sizeof(me6));
+ }
+#endif /* ENABLE_IPV6 */
+ if(0 != rc) {
+ error = SOCKERRNO;
+ logmsg("Error binding socket on port %hu: (%d) %s",
+ port, error, strerror(error));
+ result = 1;
+ goto tftpd_cleanup;
+ }
+
+ wrotepidfile = write_pidfile(pidname);
+ if(!wrotepidfile) {
+ result = 1;
+ goto tftpd_cleanup;
+ }
+
+ logmsg("Running %s version on port UDP/%d", ipv_inuse, (int)port);
+
+ for (;;) {
+ fromlen = sizeof(from);
+ n = (ssize_t)recvfrom(sock, buf, sizeof(buf), 0,
+ (struct sockaddr *)&from, &fromlen);
+ if(got_exit_signal)
+ break;
+ if (n < 0) {
+ logmsg("recvfrom");
+ result = 3;
+ break;
+ }
+
+ set_advisor_read_lock(SERVERLOGS_LOCK);
+ serverlogslocked = 1;
+
+ from.sin_family = AF_INET;
+
+ peer = socket(AF_INET, SOCK_DGRAM, 0);
+ if(CURL_SOCKET_BAD == peer) {
+ logmsg("socket");
+ result = 2;
+ break;
+ }
+
+ if (connect(peer, (struct sockaddr *)&from, sizeof(from)) < 0) {
+ logmsg("connect: fail");
+ result = 1;
+ break;
+ }
+ maxtimeout = 5*TIMEOUT;
+
+ tp = (struct tftphdr *)buf;
+ tp->th_opcode = ntohs(tp->th_opcode);
+ if (tp->th_opcode == opcode_RRQ || tp->th_opcode == opcode_WRQ) {
+ memset(&test, 0, sizeof(test));
+ if (do_tftp(&test, tp, n) < 0)
+ break;
+ if(test.buffer)
+ free(test.buffer);
+ }
+ sclose(peer);
+ peer = CURL_SOCKET_BAD;
+
+ if(test.ofile > 0) {
+ close(test.ofile);
+ test.ofile = 0;
+ }
+
+ if(got_exit_signal)
+ break;
+
+ if(serverlogslocked) {
+ serverlogslocked = 0;
+ clear_advisor_read_lock(SERVERLOGS_LOCK);
+ }
+
+ logmsg("end of one transfer");
+
+ }
+
+tftpd_cleanup:
+
+ if(test.ofile > 0)
+ close(test.ofile);
+
+ if((peer != sock) && (peer != CURL_SOCKET_BAD))
+ sclose(peer);
+
+ if(sock != CURL_SOCKET_BAD)
+ sclose(sock);
+
+ if(got_exit_signal)
+ logmsg("signalled to die");
+
+ if(wrotepidfile)
+ unlink(pidname);
+
+ if(serverlogslocked) {
+ serverlogslocked = 0;
+ clear_advisor_read_lock(SERVERLOGS_LOCK);
+ }
+
+ restore_signal_handlers();
+
+ if(got_exit_signal) {
+ logmsg("========> %s tftpd (port: %d pid: %ld) exits with signal (%d)",
+ ipv_inuse, (int)port, pid, exit_signal);
+ /*
+ * To properly set the return status of the process we
+ * must raise the same signal SIGINT or SIGTERM that we
+ * caught and let the old handler take care of it.
+ */
+ raise(exit_signal);
+ }
+
+ logmsg("========> tftpd quits");
+ return result;
+}
+
+/*
+ * Handle initial connection protocol.
+ */
+static int do_tftp(struct testcase *test, struct tftphdr *tp, ssize_t size)
+{
+ char *cp;
+ int first = 1, ecode;
+ struct formats *pf;
+ char *filename, *mode = NULL;
+ int error;
+ FILE *server;
+
+ /* Open request dump file. */
+ server = fopen(REQUEST_DUMP, "ab");
+ if(!server) {
+ error = ERRNO;
+ logmsg("fopen() failed with error: %d %s", error, strerror(error));
+ logmsg("Error opening file: %s", REQUEST_DUMP);
+ return -1;
+ }
+
+ /* store input protocol */
+ fprintf(server, "opcode: %x\n", tp->th_opcode);
+
+ cp = (char *)&tp->th_stuff;
+ filename = cp;
+again:
+ while (cp < buf + size) {
+ if (*cp == '\0')
+ break;
+ cp++;
+ }
+ if (*cp) {
+ nak(EBADOP);
+ fclose(server);
+ return 3;
+ }
+ if (first) {
+ mode = ++cp;
+ first = 0;
+ goto again;
+ }
+ /* store input protocol */
+ fprintf(server, "filename: %s\n", filename);
+
+ for (cp = mode; cp && *cp; cp++)
+ if(ISUPPER(*cp))
+ *cp = (char)tolower((int)*cp);
+
+ /* store input protocol */
+ fprintf(server, "mode: %s\n", mode);
+ fclose(server);
+
+ for (pf = formata; pf->f_mode; pf++)
+ if (strcmp(pf->f_mode, mode) == 0)
+ break;
+ if (!pf->f_mode) {
+ nak(EBADOP);
+ return 2;
+ }
+ ecode = validate_access(test, filename, tp->th_opcode);
+ if (ecode) {
+ nak(ecode);
+ return 1;
+ }
+ if (tp->th_opcode == opcode_WRQ)
+ recvtftp(test, pf);
+ else
+ sendtftp(test, pf);
+
+ return 0;
+}
+
+/*
+ * Validate file access.
+ */
+static int validate_access(struct testcase *test,
+ const char *filename, int mode)
+{
+ char *ptr;
+ long testno, partno;
+ int error;
+ char partbuf[80]="data";
+
+ logmsg("trying to get file: %s mode %x", filename, mode);
+
+ if(!strncmp("verifiedserver", filename, 14)) {
+ char weare[128];
+ size_t count = sprintf(weare, "WE ROOLZ: %ld\r\n", (long)getpid());
+
+ logmsg("Are-we-friendly question received");
+ test->buffer = strdup(weare);
+ test->rptr = test->buffer; /* set read pointer */
+ test->bufsize = count; /* set total count */
+ test->rcount = count; /* set data left to read */
+ return 0; /* fine */
+ }
+
+ /* find the last slash */
+ ptr = strrchr(filename, '/');
+
+ if(ptr) {
+ char *file;
+
+ ptr++; /* skip the slash */
+
+ /* skip all non-numericals following the slash */
+ while(*ptr && !ISDIGIT(*ptr))
+ ptr++;
+
+ /* get the number */
+ testno = strtol(ptr, &ptr, 10);
+
+ if(testno > 10000) {
+ partno = testno % 10000;
+ testno /= 10000;
+ }
+ else
+ partno = 0;
+
+
+ logmsg("requested test number %ld part %ld", testno, partno);
+
+ test->num = testno;
+
+ file = test2file(testno);
+
+ if(0 != partno)
+ sprintf(partbuf, "data%ld", partno);
+
+ if(file) {
+ FILE *stream=fopen(file, "rb");
+ if(!stream) {
+ error = ERRNO;
+ logmsg("fopen() failed with error: %d %s", error, strerror(error));
+ logmsg("Error opening file: %s", file);
+ logmsg("Couldn't open test file: %s", file);
+ return EACCESS;
+ }
+ else {
+ size_t count;
+ error = getpart(&test->buffer, &count, "reply", partbuf, stream);
+ fclose(stream);
+ if(error) {
+ logmsg("getpart() failed with error: %d", error);
+ return EACCESS;
+ }
+ if(test->buffer) {
+ test->rptr = test->buffer; /* set read pointer */
+ test->bufsize = count; /* set total count */
+ test->rcount = count; /* set data left to read */
+ }
+ else
+ return EACCESS;
+ }
+
+ }
+ else
+ return EACCESS;
+ }
+ else {
+ logmsg("no slash found in path");
+ return EACCESS; /* failure */
+ }
+
+ logmsg("file opened and all is good");
+ return 0;
+}
+
+/*
+ * Send the requested file.
+ */
+static void sendtftp(struct testcase *test, struct formats *pf)
+{
+ int size;
+ ssize_t n;
+ sendblock = 1;
+#if defined(HAVE_ALARM) && defined(SIGALRM)
+ mysignal(SIGALRM, timer);
+#endif
+ sdp = r_init();
+ sap = (struct tftphdr *)ackbuf;
+ do {
+ size = readit(test, &sdp, pf->f_convert);
+ if (size < 0) {
+ nak(ERRNO + 100);
+ return;
+ }
+ sdp->th_opcode = htons((u_short)opcode_DATA);
+ sdp->th_block = htons((u_short)sendblock);
+ timeout = 0;
+#ifdef HAVE_SIGSETJMP
+ (void) sigsetjmp(timeoutbuf, 1);
+#endif
+ send_data:
+ if (swrite(peer, sdp, size + 4) != size + 4) {
+ logmsg("write");
+ return;
+ }
+ read_ahead(test, pf->f_convert);
+ for ( ; ; ) {
+#ifdef HAVE_ALARM
+ alarm(rexmtval); /* read the ack */
+#endif
+ n = sread(peer, ackbuf, sizeof (ackbuf));
+#ifdef HAVE_ALARM
+ alarm(0);
+#endif
+ if(got_exit_signal)
+ return;
+ if (n < 0) {
+ logmsg("read: fail");
+ return;
+ }
+ sap->th_opcode = ntohs((u_short)sap->th_opcode);
+ sap->th_block = ntohs((u_short)sap->th_block);
+
+ if (sap->th_opcode == opcode_ERROR) {
+ logmsg("got ERROR");
+ return;
+ }
+
+ if (sap->th_opcode == opcode_ACK) {
+ if (sap->th_block == sendblock) {
+ break;
+ }
+ /* Re-synchronize with the other side */
+ (void) synchnet(peer);
+ if (sap->th_block == (sendblock-1)) {
+ goto send_data;
+ }
+ }
+
+ }
+ sendblock++;
+ } while (size == SEGSIZE);
+}
+
+/*
+ * Receive a file.
+ */
+static void recvtftp(struct testcase *test, struct formats *pf)
+{
+ ssize_t n, size;
+ recvblock = 0;
+#if defined(HAVE_ALARM) && defined(SIGALRM)
+ mysignal(SIGALRM, timer);
+#endif
+ rdp = w_init();
+ rap = (struct tftphdr *)ackbuf;
+ do {
+ timeout = 0;
+ rap->th_opcode = htons((u_short)opcode_ACK);
+ rap->th_block = htons((u_short)recvblock);
+ recvblock++;
+#ifdef HAVE_SIGSETJMP
+ (void) sigsetjmp(timeoutbuf, 1);
+#endif
+send_ack:
+ if (swrite(peer, ackbuf, 4) != 4) {
+ logmsg("write: fail\n");
+ goto abort;
+ }
+ write_behind(test, pf->f_convert);
+ for ( ; ; ) {
+#ifdef HAVE_ALARM
+ alarm(rexmtval);
+#endif
+ n = sread(peer, rdp, PKTSIZE);
+#ifdef HAVE_ALARM
+ alarm(0);
+#endif
+ if(got_exit_signal)
+ goto abort;
+ if (n < 0) { /* really? */
+ logmsg("read: fail\n");
+ goto abort;
+ }
+ rdp->th_opcode = ntohs((u_short)rdp->th_opcode);
+ rdp->th_block = ntohs((u_short)rdp->th_block);
+ if (rdp->th_opcode == opcode_ERROR)
+ goto abort;
+ if (rdp->th_opcode == opcode_DATA) {
+ if (rdp->th_block == recvblock) {
+ break; /* normal */
+ }
+ /* Re-synchronize with the other side */
+ (void) synchnet(peer);
+ if (rdp->th_block == (recvblock-1))
+ goto send_ack; /* rexmit */
+ }
+ }
+
+ size = writeit(test, &rdp, (int)(n - 4), pf->f_convert);
+ if (size != (n-4)) { /* ahem */
+ if (size < 0)
+ nak(ERRNO + 100);
+ else
+ nak(ENOSPACE);
+ goto abort;
+ }
+ } while (size == SEGSIZE);
+ write_behind(test, pf->f_convert);
+
+ rap->th_opcode = htons((u_short)opcode_ACK); /* send the "final" ack */
+ rap->th_block = htons((u_short)recvblock);
+ (void) swrite(peer, ackbuf, 4);
+#if defined(HAVE_ALARM) && defined(SIGALRM)
+ mysignal(SIGALRM, justtimeout); /* just abort read on timeout */
+ alarm(rexmtval);
+#endif
+ n = sread(peer, buf, sizeof(buf)); /* normally times out and quits */
+#ifdef HAVE_ALARM
+ alarm(0);
+#endif
+ if(got_exit_signal)
+ goto abort;
+ if (n >= 4 && /* if read some data */
+ rdp->th_opcode == opcode_DATA && /* and got a data block */
+ recvblock == rdp->th_block) { /* then my last ack was lost */
+ (void) swrite(peer, ackbuf, 4); /* resend final ack */
+ }
+abort:
+ return;
+}
+
+/*
+ * Send a nak packet (error message). Error code passed in is one of the
+ * standard TFTP codes, or a UNIX errno offset by 100.
+ */
+static void nak(int error)
+{
+ struct tftphdr *tp;
+ int length;
+ struct errmsg *pe;
+
+ tp = (struct tftphdr *)buf;
+ tp->th_opcode = htons((u_short)opcode_ERROR);
+ tp->th_code = htons((u_short)error);
+ for (pe = errmsgs; pe->e_code >= 0; pe++)
+ if (pe->e_code == error)
+ break;
+ if (pe->e_code < 0) {
+ pe->e_msg = strerror(error - 100);
+ tp->th_code = EUNDEF; /* set 'undef' errorcode */
+ }
+ strcpy(tp->th_msg, pe->e_msg);
+ length = (int)strlen(pe->e_msg);
+ tp->th_msg[length] = '\0';
+ length += 5;
+ if (swrite(peer, buf, length) != length)
+ logmsg("nak: fail\n");
+}
diff --git a/tests/server/util.c b/tests/server/util.c
new file mode 100644
index 0000000..52802a8
--- /dev/null
+++ b/tests/server/util.c
@@ -0,0 +1,283 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at http://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ***************************************************************************/
+
+#define CURL_NO_OLDIES
+
+#include "setup.h" /* portability help from the lib directory */
+
+#ifdef HAVE_SIGNAL_H
+#include <signal.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#ifdef HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+#ifdef _XOPEN_SOURCE_EXTENDED
+/* This define is "almost" required to build on HPUX 11 */
+#include <arpa/inet.h>
+#endif
+#ifdef HAVE_NETDB_H
+#include <netdb.h>
+#endif
+#ifdef HAVE_SYS_POLL_H
+#include <sys/poll.h>
+#elif defined(HAVE_POLL_H)
+#include <poll.h>
+#endif
+
+#define ENABLE_CURLX_PRINTF
+/* make the curlx header define all printf() functions to use the curlx_*
+ versions instead */
+#include "curlx.h" /* from the private lib dir */
+#include "getpart.h"
+#include "util.h"
+#include "timeval.h"
+
+#if defined(ENABLE_IPV6) && defined(__MINGW32__)
+const struct in6_addr in6addr_any = {{ IN6ADDR_ANY_INIT }};
+#endif
+
+void logmsg(const char *msg, ...)
+{
+ va_list ap;
+ char buffer[2048 + 1];
+ FILE *logfp;
+ int error;
+ struct timeval tv;
+ time_t sec;
+ struct tm *now;
+ char timebuf[20];
+ static time_t epoch_offset;
+ static int known_offset;
+
+ if (!serverlogfile) {
+ fprintf(stderr, "Error: serverlogfile not set\n");
+ return;
+ }
+
+ tv = curlx_tvnow();
+ if(!known_offset) {
+ epoch_offset = time(NULL) - tv.tv_sec;
+ known_offset = 1;
+ }
+ sec = epoch_offset + tv.tv_sec;
+ now = localtime(&sec); /* not thread safe but we don't care */
+
+ snprintf(timebuf, sizeof(timebuf), "%02d:%02d:%02d.%06ld",
+ (int)now->tm_hour, (int)now->tm_min, (int)now->tm_sec, (long)tv.tv_usec);
+
+ va_start(ap, msg);
+ vsnprintf(buffer, sizeof(buffer), msg, ap);
+ va_end(ap);
+
+ logfp = fopen(serverlogfile, "ab");
+ if(logfp) {
+ fprintf(logfp, "%s %s\n", timebuf, buffer);
+ fclose(logfp);
+ }
+ else {
+ error = ERRNO;
+ fprintf(stderr, "fopen() failed with error: %d %s\n",
+ error, strerror(error));
+ fprintf(stderr, "Error opening file: %s\n", serverlogfile);
+ fprintf(stderr, "Msg not logged: %s %s\n", timebuf, buffer);
+ }
+}
+
+#ifdef WIN32
+/* use instead of perror() on generic windows */
+void win32_perror (const char *msg)
+{
+ char buf[512];
+ DWORD err = SOCKERRNO;
+
+ if (!FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, err,
+ LANG_NEUTRAL, buf, sizeof(buf), NULL))
+ snprintf(buf, sizeof(buf), "Unknown error %lu (%#lx)", err, err);
+ if (msg)
+ fprintf(stderr, "%s: ", msg);
+ fprintf(stderr, "%s\n", buf);
+}
+#endif /* WIN32 */
+
+#ifdef USE_WINSOCK
+void win32_init(void)
+{
+ WORD wVersionRequested;
+ WSADATA wsaData;
+ int err;
+ wVersionRequested = MAKEWORD(USE_WINSOCK, USE_WINSOCK);
+
+ err = WSAStartup(wVersionRequested, &wsaData);
+
+ if (err != 0) {
+ perror("Winsock init failed");
+ logmsg("Error initialising winsock -- aborting");
+ exit(1);
+ }
+
+ if ( LOBYTE( wsaData.wVersion ) != USE_WINSOCK ||
+ HIBYTE( wsaData.wVersion ) != USE_WINSOCK ) {
+
+ WSACleanup();
+ perror("Winsock init failed");
+ logmsg("No suitable winsock.dll found -- aborting");
+ exit(1);
+ }
+}
+
+void win32_cleanup(void)
+{
+ WSACleanup();
+}
+#endif /* USE_WINSOCK */
+
+/* set by the main code to point to where the test dir is */
+const char *path=".";
+
+char *test2file(long testno)
+{
+ static char filename[256];
+ snprintf(filename, sizeof(filename), TEST_DATA_PATH, path, testno);
+ return filename;
+}
+
+/*
+ * Portable function used for waiting a specific amount of ms.
+ * Waiting indefinitely with this function is not allowed, a
+ * zero or negative timeout value will return immediately.
+ *
+ * Return values:
+ * -1 = system call error, or invalid timeout value
+ * 0 = specified timeout has elapsed
+ */
+int wait_ms(int timeout_ms)
+{
+#if !defined(MSDOS) && !defined(USE_WINSOCK)
+#ifndef HAVE_POLL_FINE
+ struct timeval pending_tv;
+#endif
+ struct timeval initial_tv;
+ int pending_ms;
+ int error;
+#endif
+ int r = 0;
+
+ if(!timeout_ms)
+ return 0;
+ if(timeout_ms < 0) {
+ SET_SOCKERRNO(EINVAL);
+ return -1;
+ }
+#if defined(MSDOS)
+ delay(timeout_ms);
+#elif defined(USE_WINSOCK)
+ Sleep(timeout_ms);
+#else
+ pending_ms = timeout_ms;
+ initial_tv = curlx_tvnow();
+ do {
+#if defined(HAVE_POLL_FINE)
+ r = poll(NULL, 0, pending_ms);
+#else
+ pending_tv.tv_sec = pending_ms / 1000;
+ pending_tv.tv_usec = (pending_ms % 1000) * 1000;
+ r = select(0, NULL, NULL, NULL, &pending_tv);
+#endif /* HAVE_POLL_FINE */
+ if(r != -1)
+ break;
+ error = SOCKERRNO;
+ if(error && (error != EINTR))
+ break;
+ pending_ms = timeout_ms - (int)curlx_tvdiff(curlx_tvnow(), initial_tv);
+ if(pending_ms <= 0)
+ break;
+ } while(r == -1);
+#endif /* USE_WINSOCK */
+ if(r)
+ r = -1;
+ return r;
+}
+
+int write_pidfile(const char *filename)
+{
+ FILE *pidfile;
+ long pid;
+
+ pid = (long)getpid();
+ pidfile = fopen(filename, "wb");
+ if(!pidfile) {
+ logmsg("Couldn't write pid file: %s %s", filename, strerror(ERRNO));
+ return 0; /* fail */
+ }
+ fprintf(pidfile, "%ld\n", pid);
+ fclose(pidfile);
+ logmsg("Wrote pid %ld to %s", pid, filename);
+ return 1; /* success */
+}
+
+void set_advisor_read_lock(const char *filename)
+{
+ FILE *lockfile;
+ int error = 0;
+ int res;
+
+ do {
+ lockfile = fopen(filename, "wb");
+ } while((lockfile == NULL) && ((error = ERRNO) == EINTR));
+ if(lockfile == NULL) {
+ logmsg("Error creating lock file %s error: %d %s",
+ filename, error, strerror(error));
+ return;
+ }
+
+ do {
+ res = fclose(lockfile);
+ } while(res && ((error = ERRNO) == EINTR));
+ if(res)
+ logmsg("Error closing lock file %s error: %d %s",
+ filename, error, strerror(error));
+}
+
+void clear_advisor_read_lock(const char *filename)
+{
+ int error = 0;
+ int res;
+
+ /*
+ ** Log all removal failures. Even those due to file not existing.
+ ** This allows to detect if unexpectedly the file has already been
+ ** removed by a process different than the one that should do this.
+ */
+
+ do {
+ res = unlink(filename);
+ } while(res && ((error = ERRNO) == EINTR));
+ if(res)
+ logmsg("Error removing lock file %s error: %d %s",
+ filename, error, strerror(error));
+}
diff --git a/tests/server/util.h b/tests/server/util.h
new file mode 100644
index 0000000..76cd88d
--- /dev/null
+++ b/tests/server/util.h
@@ -0,0 +1,64 @@
+#ifndef __SERVER_UTIL_H
+#define __SERVER_UTIL_H
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2008, Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at http://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ***************************************************************************/
+
+void logmsg(const char *msg, ...);
+
+#define TEST_DATA_PATH "%s/data/test%ld"
+
+#define SERVERLOGS_LOCK "log/serverlogs.lock"
+
+/* global variable, where to find the 'data' dir */
+extern const char *path;
+
+/* global variable, log file name */
+extern const char *serverlogfile;
+
+#ifdef WIN32
+#include <process.h>
+#include <fcntl.h>
+
+#define sleep(sec) Sleep ((sec)*1000)
+
+#undef perror
+#define perror(m) win32_perror(m)
+void win32_perror (const char *msg);
+#endif /* WIN32 */
+
+#ifdef USE_WINSOCK
+void win32_init(void);
+void win32_cleanup(void);
+#endif /* USE_WINSOCK */
+
+/* returns the path name to the test case file */
+char *test2file(long testno);
+
+int wait_ms(int timeout_ms);
+
+int write_pidfile(const char *filename);
+
+void set_advisor_read_lock(const char *filename);
+
+void clear_advisor_read_lock(const char *filename);
+
+#endif /* __SERVER_UTIL_H */
diff --git a/tests/serverhelp.pm b/tests/serverhelp.pm
new file mode 100644
index 0000000..34b155d
--- /dev/null
+++ b/tests/serverhelp.pm
@@ -0,0 +1,237 @@
+#***************************************************************************
+# _ _ ____ _
+# Project ___| | | | _ \| |
+# / __| | | | |_) | |
+# | (__| |_| | _ <| |___
+# \___|\___/|_| \_\_____|
+#
+# Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+#
+# This software is licensed as described in the file COPYING, which
+# you should have received as part of this distribution. The terms
+# are also available at http://curl.haxx.se/docs/copyright.html.
+#
+# You may opt to use, copy, modify, merge, publish, distribute and/or sell
+# copies of the Software, and permit persons to whom the Software is
+# furnished to do so, under the terms of the COPYING file.
+#
+# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+# KIND, either express or implied.
+#
+#***************************************************************************
+
+package serverhelp;
+
+use strict;
+use warnings;
+use Exporter;
+
+
+#***************************************************************************
+# Global symbols allowed without explicit package name
+#
+use vars qw(
+ @ISA
+ @EXPORT_OK
+ );
+
+
+#***************************************************************************
+# Inherit Exporter's capabilities
+#
+@ISA = qw(Exporter);
+
+
+#***************************************************************************
+# Global symbols this module will export upon request
+#
+@EXPORT_OK = qw(
+ serverfactors
+ servername_id
+ servername_str
+ servername_canon
+ server_pidfilename
+ server_logfilename
+ server_cmdfilename
+ server_inputfilename
+ server_outputfilename
+ mainsockf_pidfilename
+ mainsockf_logfilename
+ datasockf_pidfilename
+ datasockf_logfilename
+ );
+
+
+#***************************************************************************
+# Return server characterization factors given a server id string.
+#
+sub serverfactors {
+ my $server = $_[0];
+ my $proto;
+ my $ipvnum;
+ my $idnum;
+
+ if($server =~ /^((ftp|http|imap|pop3|smtp)s?)(\d*)(-ipv6|)$/) {
+ $proto = $1;
+ $idnum = ($3 && ($3 > 1)) ? $3 : 1;
+ $ipvnum = ($4 && ($4 =~ /6$/)) ? 6 : 4;
+ }
+ elsif($server =~ /^(tftp|sftp|socks|ssh|rtsp)(\d*)(-ipv6|)$/) {
+ $proto = $1;
+ $idnum = ($2 && ($2 > 1)) ? $2 : 1;
+ $ipvnum = ($3 && ($3 =~ /6$/)) ? 6 : 4;
+ }
+ else {
+ die "invalid server id: $server"
+ }
+ return($proto, $ipvnum, $idnum);
+}
+
+
+#***************************************************************************
+# Return server name string formatted for presentation purposes
+#
+sub servername_str {
+ my ($proto, $ipver, $idnum) = @_;
+
+ $proto = uc($proto) if($proto);
+ die "unsupported protocol: $proto" unless($proto &&
+ ($proto =~ /^(((FTP|HTTP|IMAP|POP3|SMTP)S?)|(TFTP|SFTP|SOCKS|SSH|RTSP|GOPHER))$/));
+
+ $ipver = (not $ipver) ? 'ipv4' : lc($ipver);
+ die "unsupported IP version: $ipver" unless($ipver &&
+ ($ipver =~ /^(4|6|ipv4|ipv6|-ipv4|-ipv6)$/));
+ $ipver = ($ipver =~ /6$/) ? '-IPv6' : '';
+
+ $idnum = 1 if(not $idnum);
+ die "unsupported ID number: $idnum" unless($idnum &&
+ ($idnum =~ /^(\d+)$/));
+ $idnum = '' unless($idnum > 1);
+
+ return "${proto}${idnum}${ipver}";
+}
+
+
+#***************************************************************************
+# Return server name string formatted for identification purposes
+#
+sub servername_id {
+ my ($proto, $ipver, $idnum) = @_;
+ return lc(servername_str($proto, $ipver, $idnum));
+}
+
+
+#***************************************************************************
+# Return server name string formatted for file name purposes
+#
+sub servername_canon {
+ my ($proto, $ipver, $idnum) = @_;
+ my $string = lc(servername_str($proto, $ipver, $idnum));
+ $string =~ tr/-/_/;
+ return $string;
+}
+
+
+#***************************************************************************
+# Return file name for server pid file.
+#
+sub server_pidfilename {
+ my ($proto, $ipver, $idnum) = @_;
+ my $trailer = '_server.pid';
+ return '.'. servername_canon($proto, $ipver, $idnum) ."$trailer";
+}
+
+
+#***************************************************************************
+# Return file name for server log file.
+#
+sub server_logfilename {
+ my ($logdir, $proto, $ipver, $idnum) = @_;
+ my $trailer = '_server.log';
+ $trailer = '_stunnel.log' if(lc($proto) =~ /^(ftp|http|imap|pop3|smtp)s$/);
+ return "${logdir}/". servername_canon($proto, $ipver, $idnum) ."$trailer";
+}
+
+
+#***************************************************************************
+# Return file name for server commands file.
+#
+sub server_cmdfilename {
+ my ($logdir, $proto, $ipver, $idnum) = @_;
+ my $trailer = '_server.cmd';
+ return "${logdir}/". servername_canon($proto, $ipver, $idnum) ."$trailer";
+}
+
+
+#***************************************************************************
+# Return file name for server input file.
+#
+sub server_inputfilename {
+ my ($logdir, $proto, $ipver, $idnum) = @_;
+ my $trailer = '_server.input';
+ return "${logdir}/". servername_canon($proto, $ipver, $idnum) ."$trailer";
+}
+
+
+#***************************************************************************
+# Return file name for server output file.
+#
+sub server_outputfilename {
+ my ($logdir, $proto, $ipver, $idnum) = @_;
+ my $trailer = '_server.output';
+ return "${logdir}/". servername_canon($proto, $ipver, $idnum) ."$trailer";
+}
+
+
+#***************************************************************************
+# Return file name for main or primary sockfilter pid file.
+#
+sub mainsockf_pidfilename {
+ my ($proto, $ipver, $idnum) = @_;
+ die "unsupported protocol: $proto" unless($proto &&
+ (lc($proto) =~ /^(ftp|imap|pop3|smtp)s?$/));
+ my $trailer = (lc($proto) =~ /^ftps?$/) ? '_sockctrl.pid':'_sockfilt.pid';
+ return '.'. servername_canon($proto, $ipver, $idnum) ."$trailer";
+}
+
+
+#***************************************************************************
+# Return file name for main or primary sockfilter log file.
+#
+sub mainsockf_logfilename {
+ my ($logdir, $proto, $ipver, $idnum) = @_;
+ die "unsupported protocol: $proto" unless($proto &&
+ (lc($proto) =~ /^(ftp|imap|pop3|smtp)s?$/));
+ my $trailer = (lc($proto) =~ /^ftps?$/) ? '_sockctrl.log':'_sockfilt.log';
+ return "${logdir}/". servername_canon($proto, $ipver, $idnum) ."$trailer";
+}
+
+
+#***************************************************************************
+# Return file name for data or secondary sockfilter pid file.
+#
+sub datasockf_pidfilename {
+ my ($proto, $ipver, $idnum) = @_;
+ die "unsupported protocol: $proto" unless($proto &&
+ (lc($proto) =~ /^ftps?$/));
+ my $trailer = '_sockdata.pid';
+ return '.'. servername_canon($proto, $ipver, $idnum) ."$trailer";
+}
+
+
+#***************************************************************************
+# Return file name for data or secondary sockfilter log file.
+#
+sub datasockf_logfilename {
+ my ($logdir, $proto, $ipver, $idnum) = @_;
+ die "unsupported protocol: $proto" unless($proto &&
+ (lc($proto) =~ /^ftps?$/));
+ my $trailer = '_sockdata.log';
+ return "${logdir}/". servername_canon($proto, $ipver, $idnum) ."$trailer";
+}
+
+
+#***************************************************************************
+# End of library
+1;
+
diff --git a/tests/sshhelp.pm b/tests/sshhelp.pm
new file mode 100644
index 0000000..18de9d3
--- /dev/null
+++ b/tests/sshhelp.pm
@@ -0,0 +1,388 @@
+#***************************************************************************
+# _ _ ____ _
+# Project ___| | | | _ \| |
+# / __| | | | |_) | |
+# | (__| |_| | _ <| |___
+# \___|\___/|_| \_\_____|
+#
+# Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+#
+# This software is licensed as described in the file COPYING, which
+# you should have received as part of this distribution. The terms
+# are also available at http://curl.haxx.se/docs/copyright.html.
+#
+# You may opt to use, copy, modify, merge, publish, distribute and/or sell
+# copies of the Software, and permit persons to whom the Software is
+# furnished to do so, under the terms of the COPYING file.
+#
+# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+# KIND, either express or implied.
+#
+#***************************************************************************
+
+package sshhelp;
+
+use strict;
+use warnings;
+use Exporter;
+use File::Spec;
+
+
+#***************************************************************************
+# Global symbols allowed without explicit package name
+#
+use vars qw(
+ @ISA
+ @EXPORT_OK
+ $sshdexe
+ $sshexe
+ $sftpsrvexe
+ $sftpexe
+ $sshkeygenexe
+ $sshdconfig
+ $sshconfig
+ $sftpconfig
+ $knownhosts
+ $sshdlog
+ $sshlog
+ $sftplog
+ $sftpcmds
+ $hstprvkeyf
+ $hstpubkeyf
+ $cliprvkeyf
+ $clipubkeyf
+ @sftppath
+ );
+
+
+#***************************************************************************
+# Inherit Exporter's capabilities
+#
+@ISA = qw(Exporter);
+
+
+#***************************************************************************
+# Global symbols this module will export upon request
+#
+@EXPORT_OK = qw(
+ $sshdexe
+ $sshexe
+ $sftpsrvexe
+ $sftpexe
+ $sshkeygenexe
+ $sshdconfig
+ $sshconfig
+ $sftpconfig
+ $knownhosts
+ $sshdlog
+ $sshlog
+ $sftplog
+ $sftpcmds
+ $hstprvkeyf
+ $hstpubkeyf
+ $cliprvkeyf
+ $clipubkeyf
+ display_sshdconfig
+ display_sshconfig
+ display_sftpconfig
+ display_sshdlog
+ display_sshlog
+ display_sftplog
+ dump_array
+ exe_ext
+ find_sshd
+ find_ssh
+ find_sftpsrv
+ find_sftp
+ find_sshkeygen
+ logmsg
+ sshversioninfo
+ );
+
+
+#***************************************************************************
+# Global variables initialization
+#
+$sshdexe = 'sshd' .exe_ext(); # base name and ext of ssh daemon
+$sshexe = 'ssh' .exe_ext(); # base name and ext of ssh client
+$sftpsrvexe = 'sftp-server' .exe_ext(); # base name and ext of sftp-server
+$sftpexe = 'sftp' .exe_ext(); # base name and ext of sftp client
+$sshkeygenexe = 'ssh-keygen' .exe_ext(); # base name and ext of ssh-keygen
+$sshdconfig = 'curl_sshd_config'; # ssh daemon config file
+$sshconfig = 'curl_ssh_config'; # ssh client config file
+$sftpconfig = 'curl_sftp_config'; # sftp client config file
+$sshdlog = undef; # ssh daemon log file
+$sshlog = undef; # ssh client log file
+$sftplog = undef; # sftp client log file
+$sftpcmds = 'curl_sftp_cmds'; # sftp client commands batch file
+$knownhosts = 'curl_client_knownhosts'; # ssh knownhosts file
+$hstprvkeyf = 'curl_host_dsa_key'; # host private key file
+$hstpubkeyf = 'curl_host_dsa_key.pub'; # host public key file
+$cliprvkeyf = 'curl_client_key'; # client private key file
+$clipubkeyf = 'curl_client_key.pub'; # client public key file
+
+
+#***************************************************************************
+# Absolute paths where to look for sftp-server plugin
+#
+@sftppath = qw(
+ /usr/lib/openssh
+ /usr/libexec/openssh
+ /usr/libexec
+ /usr/local/libexec
+ /opt/local/libexec
+ /usr/lib/ssh
+ /usr/libexec/ssh
+ /usr/sbin
+ /usr/lib
+ /usr/lib/ssh/openssh
+ /usr/lib64/ssh
+ /usr/lib64/misc
+ /usr/lib/misc
+ /usr/local/sbin
+ /usr/freeware/bin
+ /usr/freeware/sbin
+ /usr/freeware/libexec
+ /opt/ssh/sbin
+ /opt/ssh/libexec
+ );
+
+
+#***************************************************************************
+# Return file extension for executable files on this operating system
+#
+sub exe_ext {
+ if ($^O eq 'MSWin32' || $^O eq 'cygwin' || $^O eq 'msys' ||
+ $^O eq 'dos' || $^O eq 'os2') {
+ return '.exe';
+ }
+}
+
+
+#***************************************************************************
+# Create or overwrite the given file with lines from an array of strings
+#
+sub dump_array {
+ my ($filename, @arr) = @_;
+ my $error;
+
+ if(!$filename) {
+ $error = 'Error: Missing argument 1 for dump_array()';
+ }
+ elsif(open(TEXTFH, ">$filename")) {
+ foreach my $line (@arr) {
+ $line .= "\n" unless($line =~ /\n$/);
+ print TEXTFH $line;
+ }
+ if(!close(TEXTFH)) {
+ $error = "Error: cannot close file $filename";
+ }
+ }
+ else {
+ $error = "Error: cannot write file $filename";
+ }
+ return $error;
+}
+
+
+#***************************************************************************
+# Display a message
+#
+sub logmsg {
+ my ($line) = @_;
+ chomp $line if($line);
+ $line .= "\n";
+ print "$line";
+}
+
+
+#***************************************************************************
+# Display contents of the given file
+#
+sub display_file {
+ my $filename = $_[0];
+ print "=== Start of file $filename\n";
+ if(open(DISPLAYFH, "<$filename")) {
+ while(my $line = <DISPLAYFH>) {
+ print "$line";
+ }
+ close DISPLAYFH;
+ }
+ print "=== End of file $filename\n";
+}
+
+
+#***************************************************************************
+# Display contents of the ssh daemon config file
+#
+sub display_sshdconfig {
+ display_file($sshdconfig);
+}
+
+
+#***************************************************************************
+# Display contents of the ssh client config file
+#
+sub display_sshconfig {
+ display_file($sshconfig);
+}
+
+
+#***************************************************************************
+# Display contents of the sftp client config file
+#
+sub display_sftpconfig {
+ display_file($sftpconfig);
+}
+
+
+#***************************************************************************
+# Display contents of the ssh daemon log file
+#
+sub display_sshdlog {
+ die "error: \$sshdlog uninitialized" if(not defined $sshdlog);
+ display_file($sshdlog);
+}
+
+
+#***************************************************************************
+# Display contents of the ssh client log file
+#
+sub display_sshlog {
+ die "error: \$sshlog uninitialized" if(not defined $sshlog);
+ display_file($sshlog);
+}
+
+
+#***************************************************************************
+# Display contents of the sftp client log file
+#
+sub display_sftplog {
+ die "error: \$sftplog uninitialized" if(not defined $sftplog);
+ display_file($sftplog);
+}
+
+
+#***************************************************************************
+# Find a file somewhere in the given path
+#
+sub find_file {
+ my $fn = $_[0];
+ shift;
+ my @path = @_;
+ foreach (@path) {
+ my $file = File::Spec->catfile($_, $fn);
+ if(-e $file) {
+ return $file;
+ }
+ }
+}
+
+
+#***************************************************************************
+# Find a file in environment path or in our sftppath
+#
+sub find_sfile {
+ my $filename = $_[0];
+ my @spath;
+ push(@spath, File::Spec->path());
+ push(@spath, @sftppath);
+ return find_file($filename, @spath);
+}
+
+
+#***************************************************************************
+# Find ssh daemon and return canonical filename
+#
+sub find_sshd {
+ return find_sfile($sshdexe);
+}
+
+
+#***************************************************************************
+# Find ssh client and return canonical filename
+#
+sub find_ssh {
+ return find_sfile($sshexe);
+}
+
+
+#***************************************************************************
+# Find sftp-server plugin and return canonical filename
+#
+sub find_sftpsrv {
+ return find_sfile($sftpsrvexe);
+}
+
+
+#***************************************************************************
+# Find sftp client and return canonical filename
+#
+sub find_sftp {
+ return find_sfile($sftpexe);
+}
+
+
+#***************************************************************************
+# Find ssh-keygen and return canonical filename
+#
+sub find_sshkeygen {
+ return find_sfile($sshkeygenexe);
+}
+
+
+#***************************************************************************
+# Return version info for the given ssh client or server binaries
+#
+sub sshversioninfo {
+ my $sshbin = $_[0]; # canonical filename
+ my $major;
+ my $minor;
+ my $patch;
+ my $sshid;
+ my $versnum;
+ my $versstr;
+ my $error;
+
+ if(!$sshbin) {
+ $error = 'Error: Missing argument 1 for sshversioninfo()';
+ }
+ elsif(! -x $sshbin) {
+ $error = "Error: cannot read or execute $sshbin";
+ }
+ else {
+ my $cmd = ($sshbin =~ /$sshdexe$/) ? "$sshbin -?" : "$sshbin -V";
+ $error = "$cmd\n";
+ foreach my $tmpstr (qx($cmd 2>&1)) {
+ if($tmpstr =~ /OpenSSH[_-](\d+)\.(\d+)(\.(\d+))*/i) {
+ $major = $1;
+ $minor = $2;
+ $patch = $4?$4:0;
+ $sshid = 'OpenSSH';
+ $versnum = (100*$major) + (10*$minor) + $patch;
+ $versstr = "$sshid $major.$minor.$patch";
+ $error = undef;
+ last;
+ }
+ if($tmpstr =~ /Sun[_-]SSH[_-](\d+)\.(\d+)(\.(\d+))*/i) {
+ $major = $1;
+ $minor = $2;
+ $patch = $4?$4:0;
+ $sshid = 'SunSSH';
+ $versnum = (100*$major) + (10*$minor) + $patch;
+ $versstr = "$sshid $major.$minor.$patch";
+ $error = undef;
+ last;
+ }
+ $error .= $tmpstr;
+ }
+ chomp $error if($error);
+ }
+ return ($sshid, $versnum, $versstr, $error);
+}
+
+
+#***************************************************************************
+# End of library
+1;
+
diff --git a/tests/sshserver.pl b/tests/sshserver.pl
new file mode 100755
index 0000000..b439015
--- /dev/null
+++ b/tests/sshserver.pl
@@ -0,0 +1,1042 @@
+#!/usr/bin/env perl
+#***************************************************************************
+# _ _ ____ _
+# Project ___| | | | _ \| |
+# / __| | | | |_) | |
+# | (__| |_| | _ <| |___
+# \___|\___/|_| \_\_____|
+#
+# Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+#
+# This software is licensed as described in the file COPYING, which
+# you should have received as part of this distribution. The terms
+# are also available at http://curl.haxx.se/docs/copyright.html.
+#
+# You may opt to use, copy, modify, merge, publish, distribute and/or sell
+# copies of the Software, and permit persons to whom the Software is
+# furnished to do so, under the terms of the COPYING file.
+#
+# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+# KIND, either express or implied.
+#
+#***************************************************************************
+
+# Starts sshd for use in the SCP, SFTP and SOCKS curl test harness tests.
+# Also creates the ssh configuration files needed for these tests.
+
+use strict;
+use warnings;
+use Cwd;
+
+#***************************************************************************
+# Variables and subs imported from sshhelp module
+#
+use sshhelp qw(
+ $sshdexe
+ $sshexe
+ $sftpsrvexe
+ $sftpexe
+ $sshkeygenexe
+ $sshdconfig
+ $sshconfig
+ $sftpconfig
+ $knownhosts
+ $sshdlog
+ $sshlog
+ $sftplog
+ $sftpcmds
+ $hstprvkeyf
+ $hstpubkeyf
+ $cliprvkeyf
+ $clipubkeyf
+ display_sshdconfig
+ display_sshconfig
+ display_sftpconfig
+ display_sshdlog
+ display_sshlog
+ display_sftplog
+ dump_array
+ find_sshd
+ find_ssh
+ find_sftpsrv
+ find_sftp
+ find_sshkeygen
+ logmsg
+ sshversioninfo
+ );
+
+#***************************************************************************
+# Subs imported from serverhelp module
+#
+use serverhelp qw(
+ server_pidfilename
+ server_logfilename
+ );
+
+
+#***************************************************************************
+
+my $verbose = 0; # set to 1 for debugging
+my $debugprotocol = 0; # set to 1 for protocol debugging
+my $port = 8999; # our default SCP/SFTP server port
+my $socksport = $port + 1; # our default SOCKS4/5 server port
+my $listenaddr = '127.0.0.1'; # default address on which to listen
+my $ipvnum = 4; # default IP version of listener address
+my $idnum = 1; # dafault ssh daemon instance number
+my $proto = 'ssh'; # protocol the ssh daemon speaks
+my $path = getcwd(); # current working directory
+my $logdir = $path .'/log'; # directory for log files
+my $username = $ENV{USER}; # default user
+my $pidfile; # ssh daemon pid file
+
+my $error;
+my @cfgarr;
+
+
+#***************************************************************************
+# Parse command line options
+#
+while(@ARGV) {
+ if($ARGV[0] eq '--verbose') {
+ $verbose = 1;
+ }
+ elsif($ARGV[0] eq '--debugprotocol') {
+ $verbose = 1;
+ $debugprotocol = 1;
+ }
+ elsif($ARGV[0] eq '--user') {
+ if($ARGV[1]) {
+ $username = $ARGV[1];
+ shift @ARGV;
+ }
+ }
+ elsif($ARGV[0] eq '--id') {
+ if($ARGV[1]) {
+ if($ARGV[1] =~ /^(\d+)$/) {
+ $idnum = $1 if($1 > 0);
+ shift @ARGV;
+ }
+ }
+ }
+ elsif($ARGV[0] eq '--ipv4') {
+ $ipvnum = 4;
+ $listenaddr = '127.0.0.1' if($listenaddr eq '::1');
+ }
+ elsif($ARGV[0] eq '--ipv6') {
+ $ipvnum = 6;
+ $listenaddr = '::1' if($listenaddr eq '127.0.0.1');
+ }
+ elsif($ARGV[0] eq '--addr') {
+ if($ARGV[1]) {
+ my $tmpstr = $ARGV[1];
+ if($tmpstr =~ /^(\d\d?\d?)\.(\d\d?\d?)\.(\d\d?\d?)\.(\d\d?\d?)$/) {
+ $listenaddr = "$1.$2.$3.$4" if($ipvnum == 4);
+ shift @ARGV;
+ }
+ elsif($ipvnum == 6) {
+ $listenaddr = $tmpstr;
+ $listenaddr =~ s/^\[(.*)\]$/$1/;
+ shift @ARGV;
+ }
+ }
+ }
+ elsif($ARGV[0] eq '--pidfile') {
+ if($ARGV[1]) {
+ $pidfile = "$path/". $ARGV[1];
+ shift @ARGV;
+ }
+ }
+ elsif($ARGV[0] eq '--sshport') {
+ if($ARGV[1]) {
+ if($ARGV[1] =~ /^(\d+)$/) {
+ $port = $1;
+ shift @ARGV;
+ }
+ }
+ }
+ elsif($ARGV[0] eq '--socksport') {
+ if($ARGV[1]) {
+ if($ARGV[1] =~ /^(\d+)$/) {
+ $socksport = $1;
+ shift @ARGV;
+ }
+ }
+ }
+ else {
+ print STDERR "\nWarning: sshserver.pl unknown parameter: $ARGV[0]\n";
+ }
+ shift @ARGV;
+}
+
+
+#***************************************************************************
+# Default ssh daemon pid file name
+#
+if(!$pidfile) {
+ $pidfile = "$path/". server_pidfilename($proto, $ipvnum, $idnum);
+}
+
+
+#***************************************************************************
+# ssh, socks and sftp server log file names
+#
+$sshdlog = server_logfilename($logdir, 'ssh', $ipvnum, $idnum);
+$sftplog = server_logfilename($logdir, 'sftp', $ipvnum, $idnum);
+$sshlog = server_logfilename($logdir, 'socks', $ipvnum, $idnum);
+
+
+#***************************************************************************
+# Logging level for ssh server and client
+#
+my $loglevel = $debugprotocol?'DEBUG3':'DEBUG2';
+
+
+#***************************************************************************
+# Validate username
+#
+if(!$username) {
+ $error = 'Will not run ssh server without a user name';
+}
+elsif($username eq 'root') {
+ $error = 'Will not run ssh server as root to mitigate security risks';
+}
+if($error) {
+ logmsg $error;
+ exit 1;
+}
+
+
+#***************************************************************************
+# Find out ssh daemon canonical file name
+#
+my $sshd = find_sshd();
+if(!$sshd) {
+ logmsg "cannot find $sshdexe";
+ exit 1;
+}
+
+
+#***************************************************************************
+# Find out ssh daemon version info
+#
+my ($sshdid, $sshdvernum, $sshdverstr, $sshderror) = sshversioninfo($sshd);
+if(!$sshdid) {
+ # Not an OpenSSH or SunSSH ssh daemon
+ logmsg $sshderror if($verbose);
+ logmsg 'SCP, SFTP and SOCKS tests require OpenSSH 2.9.9 or later';
+ exit 1;
+}
+logmsg "ssh server found $sshd is $sshdverstr" if($verbose);
+
+
+#***************************************************************************
+# ssh daemon command line options we might use and version support
+#
+# -e: log stderr : OpenSSH 2.9.0 and later
+# -f: sshd config file : OpenSSH 1.2.1 and later
+# -D: no daemon forking : OpenSSH 2.5.0 and later
+# -o: command-line option : OpenSSH 3.1.0 and later
+# -t: test config file : OpenSSH 2.9.9 and later
+# -?: sshd version info : OpenSSH 1.2.1 and later
+#
+# -e: log stderr : SunSSH 1.0.0 and later
+# -f: sshd config file : SunSSH 1.0.0 and later
+# -D: no daemon forking : SunSSH 1.0.0 and later
+# -o: command-line option : SunSSH 1.0.0 and later
+# -t: test config file : SunSSH 1.0.0 and later
+# -?: sshd version info : SunSSH 1.0.0 and later
+
+
+#***************************************************************************
+# Verify minimum ssh daemon version
+#
+if((($sshdid =~ /OpenSSH/) && ($sshdvernum < 299)) ||
+ (($sshdid =~ /SunSSH/) && ($sshdvernum < 100))) {
+ logmsg 'SCP, SFTP and SOCKS tests require OpenSSH 2.9.9 or later';
+ exit 1;
+}
+
+
+#***************************************************************************
+# Find out sftp server plugin canonical file name
+#
+my $sftpsrv = find_sftpsrv();
+if(!$sftpsrv) {
+ logmsg "cannot find $sftpsrvexe";
+ exit 1;
+}
+logmsg "sftp server plugin found $sftpsrv" if($verbose);
+
+
+#***************************************************************************
+# Find out sftp client canonical file name
+#
+my $sftp = find_sftp();
+if(!$sftp) {
+ logmsg "cannot find $sftpexe";
+ exit 1;
+}
+logmsg "sftp client found $sftp" if($verbose);
+
+
+#***************************************************************************
+# Find out ssh keygen canonical file name
+#
+my $sshkeygen = find_sshkeygen();
+if(!$sshkeygen) {
+ logmsg "cannot find $sshkeygenexe";
+ exit 1;
+}
+logmsg "ssh keygen found $sshkeygen" if($verbose);
+
+
+#***************************************************************************
+# Find out ssh client canonical file name
+#
+my $ssh = find_ssh();
+if(!$ssh) {
+ logmsg "cannot find $sshexe";
+ exit 1;
+}
+
+
+#***************************************************************************
+# Find out ssh client version info
+#
+my ($sshid, $sshvernum, $sshverstr, $ssherror) = sshversioninfo($ssh);
+if(!$sshid) {
+ # Not an OpenSSH or SunSSH ssh client
+ logmsg $ssherror if($verbose);
+ logmsg 'SCP, SFTP and SOCKS tests require OpenSSH 2.9.9 or later';
+ exit 1;
+}
+logmsg "ssh client found $ssh is $sshverstr" if($verbose);
+
+
+#***************************************************************************
+# ssh client command line options we might use and version support
+#
+# -D: dynamic app port forwarding : OpenSSH 2.9.9 and later
+# -F: ssh config file : OpenSSH 2.9.9 and later
+# -N: no shell/command : OpenSSH 2.1.0 and later
+# -p: connection port : OpenSSH 1.2.1 and later
+# -v: verbose messages : OpenSSH 1.2.1 and later
+# -vv: increase verbosity : OpenSSH 2.3.0 and later
+# -V: ssh version info : OpenSSH 1.2.1 and later
+#
+# -D: dynamic app port forwarding : SunSSH 1.0.0 and later
+# -F: ssh config file : SunSSH 1.0.0 and later
+# -N: no shell/command : SunSSH 1.0.0 and later
+# -p: connection port : SunSSH 1.0.0 and later
+# -v: verbose messages : SunSSH 1.0.0 and later
+# -vv: increase verbosity : SunSSH 1.0.0 and later
+# -V: ssh version info : SunSSH 1.0.0 and later
+
+
+#***************************************************************************
+# Verify minimum ssh client version
+#
+if((($sshid =~ /OpenSSH/) && ($sshvernum < 299)) ||
+ (($sshid =~ /SunSSH/) && ($sshvernum < 100))) {
+ logmsg 'SCP, SFTP and SOCKS tests require OpenSSH 2.9.9 or later';
+ exit 1;
+}
+
+
+#***************************************************************************
+# ssh keygen command line options we actually use and version support
+#
+# -C: identity comment : OpenSSH 1.2.1 and later
+# -f: key filename : OpenSSH 1.2.1 and later
+# -N: new passphrase : OpenSSH 1.2.1 and later
+# -q: quiet keygen : OpenSSH 1.2.1 and later
+# -t: key type : OpenSSH 2.5.0 and later
+#
+# -C: identity comment : SunSSH 1.0.0 and later
+# -f: key filename : SunSSH 1.0.0 and later
+# -N: new passphrase : SunSSH 1.0.0 and later
+# -q: quiet keygen : SunSSH 1.0.0 and later
+# -t: key type : SunSSH 1.0.0 and later
+
+
+#***************************************************************************
+# Generate host and client key files for curl's tests
+#
+if((! -e $hstprvkeyf) || (! -e $hstpubkeyf) ||
+ (! -e $cliprvkeyf) || (! -e $clipubkeyf)) {
+ # Make sure all files are gone so ssh-keygen doesn't complain
+ unlink($hstprvkeyf, $hstpubkeyf, $cliprvkeyf, $clipubkeyf);
+ logmsg 'generating host keys...' if($verbose);
+ if(system "$sshkeygen -q -t dsa -f $hstprvkeyf -C 'curl test server' -N ''") {
+ logmsg 'Could not generate host key';
+ exit 1;
+ }
+ logmsg 'generating client keys...' if($verbose);
+ if(system "$sshkeygen -q -t dsa -f $cliprvkeyf -C 'curl test client' -N ''") {
+ logmsg 'Could not generate client key';
+ exit 1;
+ }
+}
+
+
+#***************************************************************************
+# ssh daemon configuration file options we might use and version support
+#
+# AFSTokenPassing : OpenSSH 1.2.1 and later [1]
+# AcceptEnv : OpenSSH 3.9.0 and later
+# AddressFamily : OpenSSH 4.0.0 and later
+# AllowGroups : OpenSSH 1.2.1 and later
+# AllowTcpForwarding : OpenSSH 2.3.0 and later
+# AllowUsers : OpenSSH 1.2.1 and later
+# AuthorizedKeysFile : OpenSSH 2.9.9 and later
+# AuthorizedKeysFile2 : OpenSSH 2.9.9 and later
+# Banner : OpenSSH 2.5.0 and later
+# ChallengeResponseAuthentication : OpenSSH 2.5.0 and later
+# Ciphers : OpenSSH 2.1.0 and later [3]
+# ClientAliveCountMax : OpenSSH 2.9.0 and later
+# ClientAliveInterval : OpenSSH 2.9.0 and later
+# Compression : OpenSSH 3.3.0 and later
+# DenyGroups : OpenSSH 1.2.1 and later
+# DenyUsers : OpenSSH 1.2.1 and later
+# ForceCommand : OpenSSH 4.4.0 and later [3]
+# GatewayPorts : OpenSSH 2.1.0 and later
+# GSSAPIAuthentication : OpenSSH 3.7.0 and later [1]
+# GSSAPICleanupCredentials : OpenSSH 3.8.0 and later [1]
+# GSSAPIKeyExchange : SunSSH 1.0.0 and later [1]
+# GSSAPIStoreDelegatedCredentials : SunSSH 1.0.0 and later [1]
+# GSSCleanupCreds : SunSSH 1.0.0 and later [1]
+# GSSUseSessionCredCache : SunSSH 1.0.0 and later [1]
+# HostbasedAuthentication : OpenSSH 2.9.0 and later
+# HostbasedUsesNameFromPacketOnly : OpenSSH 2.9.0 and later
+# HostKey : OpenSSH 1.2.1 and later
+# IgnoreRhosts : OpenSSH 1.2.1 and later
+# IgnoreUserKnownHosts : OpenSSH 1.2.1 and later
+# KbdInteractiveAuthentication : OpenSSH 2.3.0 and later
+# KeepAlive : OpenSSH 1.2.1 and later
+# KerberosAuthentication : OpenSSH 1.2.1 and later [1]
+# KerberosGetAFSToken : OpenSSH 3.8.0 and later [1]
+# KerberosOrLocalPasswd : OpenSSH 1.2.1 and later [1]
+# KerberosTgtPassing : OpenSSH 1.2.1 and later [1]
+# KerberosTicketCleanup : OpenSSH 1.2.1 and later [1]
+# KeyRegenerationInterval : OpenSSH 1.2.1 and later
+# ListenAddress : OpenSSH 1.2.1 and later
+# LoginGraceTime : OpenSSH 1.2.1 and later
+# LogLevel : OpenSSH 1.2.1 and later
+# LookupClientHostnames : SunSSH 1.0.0 and later
+# MACs : OpenSSH 2.5.0 and later [3]
+# Match : OpenSSH 4.4.0 and later [3]
+# MaxAuthTries : OpenSSH 3.9.0 and later
+# MaxStartups : OpenSSH 2.2.0 and later
+# PAMAuthenticationViaKbdInt : OpenSSH 2.9.0 and later [2]
+# PasswordAuthentication : OpenSSH 1.2.1 and later
+# PermitEmptyPasswords : OpenSSH 1.2.1 and later
+# PermitOpen : OpenSSH 4.4.0 and later [3]
+# PermitRootLogin : OpenSSH 1.2.1 and later
+# PermitTunnel : OpenSSH 4.3.0 and later
+# PermitUserEnvironment : OpenSSH 3.5.0 and later
+# PidFile : OpenSSH 2.1.0 and later
+# Port : OpenSSH 1.2.1 and later
+# PrintLastLog : OpenSSH 2.9.0 and later
+# PrintMotd : OpenSSH 1.2.1 and later
+# Protocol : OpenSSH 2.1.0 and later
+# PubkeyAuthentication : OpenSSH 2.5.0 and later
+# RhostsAuthentication : OpenSSH 1.2.1 and later
+# RhostsRSAAuthentication : OpenSSH 1.2.1 and later
+# RSAAuthentication : OpenSSH 1.2.1 and later
+# ServerKeyBits : OpenSSH 1.2.1 and later
+# SkeyAuthentication : OpenSSH 1.2.1 and later [1]
+# StrictModes : OpenSSH 1.2.1 and later
+# Subsystem : OpenSSH 2.2.0 and later
+# SyslogFacility : OpenSSH 1.2.1 and later
+# TCPKeepAlive : OpenSSH 3.8.0 and later
+# UseDNS : OpenSSH 3.7.0 and later
+# UseLogin : OpenSSH 1.2.1 and later
+# UsePAM : OpenSSH 3.7.0 and later [1][2]
+# UsePrivilegeSeparation : OpenSSH 3.2.2 and later
+# VerifyReverseMapping : OpenSSH 3.1.0 and later
+# X11DisplayOffset : OpenSSH 1.2.1 and later [3]
+# X11Forwarding : OpenSSH 1.2.1 and later
+# X11UseLocalhost : OpenSSH 3.1.0 and later
+# XAuthLocation : OpenSSH 2.1.1 and later [3]
+#
+# [1] Option only available if activated at compile time
+# [2] Option specific for portable versions
+# [3] Option not used in our ssh server config file
+
+
+#***************************************************************************
+# Initialize sshd config with options actually supported in OpenSSH 2.9.9
+#
+logmsg 'generating ssh server config file...' if($verbose);
+@cfgarr = ();
+push @cfgarr, '# This is a generated file. Do not edit.';
+push @cfgarr, "# $sshdverstr sshd configuration file for curl testing";
+push @cfgarr, '#';
+push @cfgarr, "DenyUsers !$username";
+push @cfgarr, "AllowUsers $username";
+push @cfgarr, 'DenyGroups';
+push @cfgarr, 'AllowGroups';
+push @cfgarr, '#';
+push @cfgarr, "AuthorizedKeysFile $path/$clipubkeyf";
+push @cfgarr, "AuthorizedKeysFile2 $path/$clipubkeyf";
+push @cfgarr, "HostKey $path/$hstprvkeyf";
+push @cfgarr, "PidFile $pidfile";
+push @cfgarr, '#';
+push @cfgarr, "Port $port";
+push @cfgarr, "ListenAddress $listenaddr";
+push @cfgarr, 'Protocol 2';
+push @cfgarr, '#';
+push @cfgarr, 'AllowTcpForwarding yes';
+push @cfgarr, 'Banner none';
+push @cfgarr, 'ChallengeResponseAuthentication no';
+push @cfgarr, 'ClientAliveCountMax 3';
+push @cfgarr, 'ClientAliveInterval 0';
+push @cfgarr, 'GatewayPorts no';
+push @cfgarr, 'HostbasedAuthentication no';
+push @cfgarr, 'HostbasedUsesNameFromPacketOnly no';
+push @cfgarr, 'IgnoreRhosts yes';
+push @cfgarr, 'IgnoreUserKnownHosts yes';
+push @cfgarr, 'KeyRegenerationInterval 0';
+push @cfgarr, 'LoginGraceTime 30';
+push @cfgarr, "LogLevel $loglevel";
+push @cfgarr, 'MaxStartups 5';
+push @cfgarr, 'PasswordAuthentication no';
+push @cfgarr, 'PermitEmptyPasswords no';
+push @cfgarr, 'PermitRootLogin no';
+push @cfgarr, 'PrintLastLog no';
+push @cfgarr, 'PrintMotd no';
+push @cfgarr, 'PubkeyAuthentication yes';
+push @cfgarr, 'RhostsRSAAuthentication no';
+push @cfgarr, 'RSAAuthentication no';
+push @cfgarr, 'ServerKeyBits 768';
+push @cfgarr, 'StrictModes no';
+push @cfgarr, "Subsystem sftp $sftpsrv";
+push @cfgarr, 'SyslogFacility AUTH';
+push @cfgarr, 'UseLogin no';
+push @cfgarr, 'X11Forwarding no';
+push @cfgarr, '#';
+
+
+#***************************************************************************
+# Write out initial sshd configuration file for curl's tests
+#
+$error = dump_array($sshdconfig, @cfgarr);
+if($error) {
+ logmsg $error;
+ exit 1;
+}
+
+
+#***************************************************************************
+# Verifies at run time if sshd supports a given configuration file option
+#
+sub sshd_supports_opt {
+ my ($option, $value) = @_;
+ my $err;
+ #
+ if((($sshdid =~ /OpenSSH/) && ($sshdvernum >= 310)) ||
+ ($sshdid =~ /SunSSH/)) {
+ # ssh daemon supports command line options -t -f and -o
+ $err = grep /((Unsupported)|(Bad configuration)|(Deprecated)) option.*$option/,
+ qx($sshd -t -f $sshdconfig -o $option=$value 2>&1);
+ return !$err;
+ }
+ if(($sshdid =~ /OpenSSH/) && ($sshdvernum >= 299)) {
+ # ssh daemon supports command line options -t and -f
+ $err = dump_array($sshdconfig, (@cfgarr, "$option $value"));
+ if($err) {
+ logmsg $err;
+ return 0;
+ }
+ $err = grep /((Unsupported)|(Bad configuration)|(Deprecated)) option.*$option/,
+ qx($sshd -t -f $sshdconfig 2>&1);
+ unlink $sshdconfig;
+ return !$err;
+ }
+ return 0;
+}
+
+
+#***************************************************************************
+# Kerberos Authentication support may have not been built into sshd
+#
+if(sshd_supports_opt('KerberosAuthentication','no')) {
+ push @cfgarr, 'KerberosAuthentication no';
+}
+if(sshd_supports_opt('KerberosGetAFSToken','no')) {
+ push @cfgarr, 'KerberosGetAFSToken no';
+}
+if(sshd_supports_opt('KerberosOrLocalPasswd','no')) {
+ push @cfgarr, 'KerberosOrLocalPasswd no';
+}
+if(sshd_supports_opt('KerberosTgtPassing','no')) {
+ push @cfgarr, 'KerberosTgtPassing no';
+}
+if(sshd_supports_opt('KerberosTicketCleanup','yes')) {
+ push @cfgarr, 'KerberosTicketCleanup yes';
+}
+
+
+#***************************************************************************
+# Andrew File System support may have not been built into sshd
+#
+if(sshd_supports_opt('AFSTokenPassing','no')) {
+ push @cfgarr, 'AFSTokenPassing no';
+}
+
+
+#***************************************************************************
+# S/Key authentication support may have not been built into sshd
+#
+if(sshd_supports_opt('SkeyAuthentication','no')) {
+ push @cfgarr, 'SkeyAuthentication no';
+}
+
+
+#***************************************************************************
+# GSSAPI Authentication support may have not been built into sshd
+#
+my $sshd_builtwith_GSSAPI;
+if(sshd_supports_opt('GSSAPIAuthentication','no')) {
+ push @cfgarr, 'GSSAPIAuthentication no';
+ $sshd_builtwith_GSSAPI = 1;
+}
+if(sshd_supports_opt('GSSAPICleanupCredentials','yes')) {
+ push @cfgarr, 'GSSAPICleanupCredentials yes';
+}
+if(sshd_supports_opt('GSSAPIKeyExchange','no')) {
+ push @cfgarr, 'GSSAPIKeyExchange no';
+}
+if(sshd_supports_opt('GSSAPIStoreDelegatedCredentials','no')) {
+ push @cfgarr, 'GSSAPIStoreDelegatedCredentials no';
+}
+if(sshd_supports_opt('GSSCleanupCreds','yes')) {
+ push @cfgarr, 'GSSCleanupCreds yes';
+}
+if(sshd_supports_opt('GSSUseSessionCredCache','no')) {
+ push @cfgarr, 'GSSUseSessionCredCache no';
+}
+push @cfgarr, '#';
+
+
+#***************************************************************************
+# Options that might be supported or not in sshd OpenSSH 2.9.9 and later
+#
+if(sshd_supports_opt('AcceptEnv','')) {
+ push @cfgarr, 'AcceptEnv';
+}
+if(sshd_supports_opt('AddressFamily','any')) {
+ # Address family must be specified before ListenAddress
+ splice @cfgarr, 14, 0, 'AddressFamily any';
+}
+if(sshd_supports_opt('Compression','no')) {
+ push @cfgarr, 'Compression no';
+}
+if(sshd_supports_opt('KbdInteractiveAuthentication','no')) {
+ push @cfgarr, 'KbdInteractiveAuthentication no';
+}
+if(sshd_supports_opt('KeepAlive','no')) {
+ push @cfgarr, 'KeepAlive no';
+}
+if(sshd_supports_opt('LookupClientHostnames','no')) {
+ push @cfgarr, 'LookupClientHostnames no';
+}
+if(sshd_supports_opt('MaxAuthTries','10')) {
+ push @cfgarr, 'MaxAuthTries 10';
+}
+if(sshd_supports_opt('PAMAuthenticationViaKbdInt','no')) {
+ push @cfgarr, 'PAMAuthenticationViaKbdInt no';
+}
+if(sshd_supports_opt('PermitTunnel','no')) {
+ push @cfgarr, 'PermitTunnel no';
+}
+if(sshd_supports_opt('PermitUserEnvironment','no')) {
+ push @cfgarr, 'PermitUserEnvironment no';
+}
+if(sshd_supports_opt('RhostsAuthentication','no')) {
+ push @cfgarr, 'RhostsAuthentication no';
+}
+if(sshd_supports_opt('TCPKeepAlive','no')) {
+ push @cfgarr, 'TCPKeepAlive no';
+}
+if(sshd_supports_opt('UseDNS','no')) {
+ push @cfgarr, 'UseDNS no';
+}
+if(sshd_supports_opt('UsePAM','no')) {
+ push @cfgarr, 'UsePAM no';
+}
+
+if($sshdid =~ /OpenSSH/) {
+ # http://bugs.opensolaris.org/bugdatabase/view_bug.do?bug_id=6492415
+ if(sshd_supports_opt('UsePrivilegeSeparation','no')) {
+ push @cfgarr, 'UsePrivilegeSeparation no';
+ }
+}
+
+if(sshd_supports_opt('VerifyReverseMapping','no')) {
+ push @cfgarr, 'VerifyReverseMapping no';
+}
+if(sshd_supports_opt('X11UseLocalhost','yes')) {
+ push @cfgarr, 'X11UseLocalhost yes';
+}
+push @cfgarr, '#';
+
+
+#***************************************************************************
+# Write out resulting sshd configuration file for curl's tests
+#
+$error = dump_array($sshdconfig, @cfgarr);
+if($error) {
+ logmsg $error;
+ exit 1;
+}
+
+
+#***************************************************************************
+# Verify that sshd actually supports our generated configuration file
+#
+if(system "$sshd -t -f $sshdconfig > $sshdlog 2>&1") {
+ logmsg "sshd configuration file $sshdconfig failed verification";
+ display_sshdlog();
+ display_sshdconfig();
+ exit 1;
+}
+
+
+#***************************************************************************
+# Generate ssh client host key database file for curl's tests
+#
+if(! -e $knownhosts) {
+ logmsg 'generating ssh client known hosts file...' if($verbose);
+ if(open(DSAKEYFILE, "<$hstpubkeyf")) {
+ my @dsahostkey = do { local $/ = ' '; <DSAKEYFILE> };
+ if(close(DSAKEYFILE)) {
+ if(open(KNOWNHOSTS, ">$knownhosts")) {
+ print KNOWNHOSTS "$listenaddr ssh-dss $dsahostkey[1]\n";
+ if(!close(KNOWNHOSTS)) {
+ $error = "Error: cannot close file $knownhosts";
+ }
+ }
+ else {
+ $error = "Error: cannot write file $knownhosts";
+ }
+ }
+ else {
+ $error = "Error: cannot close file $hstpubkeyf";
+ }
+ }
+ else {
+ $error = "Error: cannot read file $hstpubkeyf";
+ }
+ if($error) {
+ logmsg $error;
+ exit 1;
+ }
+}
+
+
+#***************************************************************************
+# ssh client configuration file options we might use and version support
+#
+# AddressFamily : OpenSSH 3.7.0 and later
+# BatchMode : OpenSSH 1.2.1 and later
+# BindAddress : OpenSSH 2.9.9 and later
+# ChallengeResponseAuthentication : OpenSSH 2.5.0 and later
+# CheckHostIP : OpenSSH 1.2.1 and later
+# Cipher : OpenSSH 1.2.1 and later [3]
+# Ciphers : OpenSSH 2.1.0 and later [3]
+# ClearAllForwardings : OpenSSH 2.9.9 and later
+# Compression : OpenSSH 1.2.1 and later
+# CompressionLevel : OpenSSH 1.2.1 and later [3]
+# ConnectionAttempts : OpenSSH 1.2.1 and later
+# ConnectTimeout : OpenSSH 3.7.0 and later
+# ControlMaster : OpenSSH 3.9.0 and later
+# ControlPath : OpenSSH 3.9.0 and later
+# DisableBanner : SunSSH 1.2.0 and later
+# DynamicForward : OpenSSH 2.9.0 and later
+# EnableSSHKeysign : OpenSSH 3.6.0 and later
+# EscapeChar : OpenSSH 1.2.1 and later [3]
+# ExitOnForwardFailure : OpenSSH 4.4.0 and later
+# ForwardAgent : OpenSSH 1.2.1 and later
+# ForwardX11 : OpenSSH 1.2.1 and later
+# ForwardX11Trusted : OpenSSH 3.8.0 and later
+# GatewayPorts : OpenSSH 1.2.1 and later
+# GlobalKnownHostsFile : OpenSSH 1.2.1 and later
+# GSSAPIAuthentication : OpenSSH 3.7.0 and later [1]
+# GSSAPIDelegateCredentials : OpenSSH 3.7.0 and later [1]
+# HashKnownHosts : OpenSSH 4.0.0 and later
+# Host : OpenSSH 1.2.1 and later
+# HostbasedAuthentication : OpenSSH 2.9.0 and later
+# HostKeyAlgorithms : OpenSSH 2.9.0 and later [3]
+# HostKeyAlias : OpenSSH 2.5.0 and later [3]
+# HostName : OpenSSH 1.2.1 and later
+# IdentitiesOnly : OpenSSH 3.9.0 and later
+# IdentityFile : OpenSSH 1.2.1 and later
+# IgnoreIfUnknown : SunSSH 1.2.0 and later
+# KeepAlive : OpenSSH 1.2.1 and later
+# KbdInteractiveAuthentication : OpenSSH 2.3.0 and later
+# KbdInteractiveDevices : OpenSSH 2.3.0 and later [3]
+# LocalCommand : OpenSSH 4.3.0 and later [3]
+# LocalForward : OpenSSH 1.2.1 and later [3]
+# LogLevel : OpenSSH 1.2.1 and later
+# MACs : OpenSSH 2.5.0 and later [3]
+# NoHostAuthenticationForLocalhost : OpenSSH 3.0.0 and later
+# NumberOfPasswordPrompts : OpenSSH 1.2.1 and later
+# PasswordAuthentication : OpenSSH 1.2.1 and later
+# PermitLocalCommand : OpenSSH 4.3.0 and later
+# Port : OpenSSH 1.2.1 and later
+# PreferredAuthentications : OpenSSH 2.5.2 and later
+# Protocol : OpenSSH 2.1.0 and later
+# ProxyCommand : OpenSSH 1.2.1 and later [3]
+# PubkeyAuthentication : OpenSSH 2.5.0 and later
+# RekeyLimit : OpenSSH 3.7.0 and later
+# RemoteForward : OpenSSH 1.2.1 and later [3]
+# RhostsRSAAuthentication : OpenSSH 1.2.1 and later
+# RSAAuthentication : OpenSSH 1.2.1 and later
+# SendEnv : OpenSSH 3.9.0 and later
+# ServerAliveCountMax : OpenSSH 3.8.0 and later
+# ServerAliveInterval : OpenSSH 3.8.0 and later
+# SmartcardDevice : OpenSSH 2.9.9 and later [1][3]
+# StrictHostKeyChecking : OpenSSH 1.2.1 and later
+# TCPKeepAlive : OpenSSH 3.8.0 and later
+# Tunnel : OpenSSH 4.3.0 and later
+# TunnelDevice : OpenSSH 4.3.0 and later [3]
+# UsePAM : OpenSSH 3.7.0 and later [1][2][3]
+# UsePrivilegedPort : OpenSSH 1.2.1 and later
+# User : OpenSSH 1.2.1 and later
+# UserKnownHostsFile : OpenSSH 1.2.1 and later
+# VerifyHostKeyDNS : OpenSSH 3.8.0 and later
+# XAuthLocation : OpenSSH 2.1.1 and later [3]
+#
+# [1] Option only available if activated at compile time
+# [2] Option specific for portable versions
+# [3] Option not used in our ssh client config file
+
+
+#***************************************************************************
+# Initialize ssh config with options actually supported in OpenSSH 2.9.9
+#
+logmsg 'generating ssh client config file...' if($verbose);
+@cfgarr = ();
+push @cfgarr, '# This is a generated file. Do not edit.';
+push @cfgarr, "# $sshverstr ssh client configuration file for curl testing";
+push @cfgarr, '#';
+push @cfgarr, 'Host *';
+push @cfgarr, '#';
+push @cfgarr, "Port $port";
+push @cfgarr, "HostName $listenaddr";
+push @cfgarr, "User $username";
+push @cfgarr, 'Protocol 2';
+push @cfgarr, '#';
+push @cfgarr, "BindAddress $listenaddr";
+push @cfgarr, "DynamicForward $socksport";
+push @cfgarr, '#';
+push @cfgarr, "IdentityFile $path/curl_client_key";
+push @cfgarr, "UserKnownHostsFile $path/$knownhosts";
+push @cfgarr, '#';
+push @cfgarr, 'BatchMode yes';
+push @cfgarr, 'ChallengeResponseAuthentication no';
+push @cfgarr, 'CheckHostIP no';
+push @cfgarr, 'ClearAllForwardings no';
+push @cfgarr, 'Compression no';
+push @cfgarr, 'ConnectionAttempts 3';
+push @cfgarr, 'ForwardAgent no';
+push @cfgarr, 'ForwardX11 no';
+push @cfgarr, 'GatewayPorts no';
+push @cfgarr, 'GlobalKnownHostsFile /dev/null';
+push @cfgarr, 'HostbasedAuthentication no';
+push @cfgarr, 'KbdInteractiveAuthentication no';
+push @cfgarr, "LogLevel $loglevel";
+push @cfgarr, 'NumberOfPasswordPrompts 0';
+push @cfgarr, 'PasswordAuthentication no';
+push @cfgarr, 'PreferredAuthentications publickey';
+push @cfgarr, 'PubkeyAuthentication yes';
+push @cfgarr, 'RhostsRSAAuthentication no';
+push @cfgarr, 'RSAAuthentication no';
+push @cfgarr, 'StrictHostKeyChecking yes';
+push @cfgarr, 'UsePrivilegedPort no';
+push @cfgarr, '#';
+
+
+#***************************************************************************
+# Options supported in ssh client newer than OpenSSH 2.9.9
+#
+
+if(($sshid =~ /OpenSSH/) && ($sshvernum >= 370)) {
+ push @cfgarr, 'AddressFamily any';
+}
+
+if((($sshid =~ /OpenSSH/) && ($sshvernum >= 370)) ||
+ (($sshid =~ /SunSSH/) && ($sshvernum >= 120))) {
+ push @cfgarr, 'ConnectTimeout 30';
+}
+
+if(($sshid =~ /OpenSSH/) && ($sshvernum >= 390)) {
+ push @cfgarr, 'ControlMaster no';
+}
+
+if(($sshid =~ /OpenSSH/) && ($sshvernum >= 420)) {
+ push @cfgarr, 'ControlPath none';
+}
+
+if(($sshid =~ /SunSSH/) && ($sshvernum >= 120)) {
+ push @cfgarr, 'DisableBanner yes';
+}
+
+if(($sshid =~ /OpenSSH/) && ($sshvernum >= 360)) {
+ push @cfgarr, 'EnableSSHKeysign no';
+}
+
+if(($sshid =~ /OpenSSH/) && ($sshvernum >= 440)) {
+ push @cfgarr, 'ExitOnForwardFailure yes';
+}
+
+if((($sshid =~ /OpenSSH/) && ($sshvernum >= 380)) ||
+ (($sshid =~ /SunSSH/) && ($sshvernum >= 120))) {
+ push @cfgarr, 'ForwardX11Trusted no';
+}
+
+if(($sshd_builtwith_GSSAPI) && ($sshdid eq $sshid) &&
+ ($sshdvernum == $sshvernum)) {
+ push @cfgarr, 'GSSAPIAuthentication no';
+ push @cfgarr, 'GSSAPIDelegateCredentials no';
+ if($sshid =~ /SunSSH/) {
+ push @cfgarr, 'GSSAPIKeyExchange no';
+ }
+}
+
+if((($sshid =~ /OpenSSH/) && ($sshvernum >= 400)) ||
+ (($sshid =~ /SunSSH/) && ($sshvernum >= 120))) {
+ push @cfgarr, 'HashKnownHosts no';
+}
+
+if(($sshid =~ /OpenSSH/) && ($sshvernum >= 390)) {
+ push @cfgarr, 'IdentitiesOnly yes';
+}
+
+if(($sshid =~ /SunSSH/) && ($sshvernum >= 120)) {
+ push @cfgarr, 'IgnoreIfUnknown no';
+}
+
+if((($sshid =~ /OpenSSH/) && ($sshvernum < 380)) ||
+ ($sshid =~ /SunSSH/)) {
+ push @cfgarr, 'KeepAlive no';
+}
+
+if((($sshid =~ /OpenSSH/) && ($sshvernum >= 300)) ||
+ ($sshid =~ /SunSSH/)) {
+ push @cfgarr, 'NoHostAuthenticationForLocalhost no';
+}
+
+if(($sshid =~ /OpenSSH/) && ($sshvernum >= 430)) {
+ push @cfgarr, 'PermitLocalCommand no';
+}
+
+if((($sshid =~ /OpenSSH/) && ($sshvernum >= 370)) ||
+ (($sshid =~ /SunSSH/) && ($sshvernum >= 120))) {
+ push @cfgarr, 'RekeyLimit 1G';
+}
+
+if(($sshid =~ /OpenSSH/) && ($sshvernum >= 390)) {
+ push @cfgarr, 'SendEnv';
+}
+
+if((($sshid =~ /OpenSSH/) && ($sshvernum >= 380)) ||
+ (($sshid =~ /SunSSH/) && ($sshvernum >= 120))) {
+ push @cfgarr, 'ServerAliveCountMax 3';
+ push @cfgarr, 'ServerAliveInterval 0';
+}
+
+if(($sshid =~ /OpenSSH/) && ($sshvernum >= 380)) {
+ push @cfgarr, 'TCPKeepAlive no';
+}
+
+if(($sshid =~ /OpenSSH/) && ($sshvernum >= 430)) {
+ push @cfgarr, 'Tunnel no';
+}
+
+if(($sshid =~ /OpenSSH/) && ($sshvernum >= 380)) {
+ push @cfgarr, 'VerifyHostKeyDNS no';
+}
+
+push @cfgarr, '#';
+
+
+#***************************************************************************
+# Write out resulting ssh client configuration file for curl's tests
+#
+$error = dump_array($sshconfig, @cfgarr);
+if($error) {
+ logmsg $error;
+ exit 1;
+}
+
+
+#***************************************************************************
+# Initialize client sftp config with options actually supported.
+#
+logmsg 'generating sftp client config file...' if($verbose);
+splice @cfgarr, 1, 1, "# $sshverstr sftp client configuration file for curl testing";
+#
+for(my $i = scalar(@cfgarr) - 1; $i > 0; $i--) {
+ if($cfgarr[$i] =~ /^DynamicForward/) {
+ splice @cfgarr, $i, 1;
+ next;
+ }
+ if($cfgarr[$i] =~ /^ClearAllForwardings/) {
+ splice @cfgarr, $i, 1, "ClearAllForwardings yes";
+ next;
+ }
+}
+
+
+#***************************************************************************
+# Write out resulting sftp client configuration file for curl's tests
+#
+$error = dump_array($sftpconfig, @cfgarr);
+if($error) {
+ logmsg $error;
+ exit 1;
+}
+@cfgarr = ();
+
+
+#***************************************************************************
+# Generate client sftp commands batch file for sftp server verification
+#
+logmsg 'generating sftp client commands file...' if($verbose);
+push @cfgarr, 'pwd';
+push @cfgarr, 'quit';
+$error = dump_array($sftpcmds, @cfgarr);
+if($error) {
+ logmsg $error;
+ exit 1;
+}
+@cfgarr = ();
+
+
+#***************************************************************************
+# Start the ssh server daemon without forking it
+#
+logmsg "SCP/SFTP server listening on port $port" if($verbose);
+my $rc = system "$sshd -e -D -f $sshdconfig > $sshdlog 2>&1";
+if($rc == -1) {
+ logmsg "$sshd failed with: $!";
+}
+elsif($rc & 127) {
+ logmsg sprintf("$sshd died with signal %d, and %s coredump",
+ ($rc & 127), ($rc & 128)?'a':'no');
+}
+elsif($verbose && ($rc >> 8)) {
+ logmsg sprintf("$sshd exited with %d", $rc >> 8);
+}
+
+
+#***************************************************************************
+# Clean up once the server has stopped
+#
+unlink($hstprvkeyf, $hstpubkeyf, $cliprvkeyf, $clipubkeyf, $knownhosts);
+unlink($sshdconfig, $sshconfig, $sftpconfig);
+
+
+exit 0;
diff --git a/tests/stunnel.pem b/tests/stunnel.pem
new file mode 100644
index 0000000..1b4d669
--- /dev/null
+++ b/tests/stunnel.pem
@@ -0,0 +1,142 @@
+#
+# This file contains a private key and a certificate used for stunnel.
+# The certificate contains a number of extensions essentially being
+# used in the 509 test. The certificate has been generated using
+# openssl with the parameters listed below up to the line
+# contain [something], after that you find the result.
+#
+#
+extensions = x509v3
+[ x509v3 ]
+subjectAltName = DNS:localhost
+nsCertType = server
+nsComment = "CURL stunnel server test certificate"
+keyUsage = digitalSignature,keyEncipherment
+extendedKeyUsage = serverAuth
+basicConstraints = CA:false
+subjectKeyIdentifier = hash
+subjectInfoAccess = AD_DVCS;URI:"https://localhost:8433/509"
+authorityInfoAccess = AD_DVCS;URI:"https://localhost:8433/509"
+[ req ]
+default_bits = 1234
+distinguished_name = req_DN
+default_md = sha1
+string_mask = pkix
+[ req_DN ]
+countryName = "1. Country Name (2 letter code)"
+countryName_value = SE
+stateOrProvinceName = "2. State or Province Name (full name) "
+stateOrProvinceName_value = Solna
+localityName = "3. Locality Name (eg, city) "
+localityName_value = Mooo
+0.organizationName = "4. Organization Name (eg, company) "
+0.organizationName_value = Haxx
+organizationalUnitName = "5. Organizational Unit Name (eg, section) "
+organizationalUnitName_value = Coolx
+commonName = "6. Common Name (eg, FQDN) "
+commonName_value = "storbror"
+1.commonName = "6. Common Name (eg, FQDN) "
+1.commonName_value = "localhost"
+[something]
+-----BEGIN RSA PRIVATE KEY-----
+MIIC1AIBAAKBmwNZN+oG6vJ8DAze+FvOKSS49X4xGMxALhKRLhQQb7qvM+7BcMgR
+v+RKxkX7SNgcxKPLcIHf7QQ6DBIlLXuAuVHQtWW9b06q64kBElkEwh6gP5Ia9JrR
+ysGbu2U6NRP+xBU33dVwZjF07ocN9Pp392W4VxEc+g3+FkRzUEaahDGOabmjgKuq
+DdlKdZLzgJj7+9sEKpb7+FdG56rZAgMBAAECgZsCkK1Z1XTUz5x3m7PMuHEiVaKS
+yk/B4ISq6pbO/gxpieARzhR038wNug6L+8VA8UDebXHBvGYYr9Mhb2OZUfIlr+nW
+h7kmHZ+T88M3eH/hQc3jtnvnu1dGmMlIXjTLQOrKgrAn6fYaw2HAGPdGKjpatAy/
+3vRjguv/22pNJLRQmMHdozJdc8mEYY+AhqrQxXCWQT/1peZzlq/IAQJOAfhE2YWf
+qB9iYNmuhxJ1PolPW4I63atXuoavqadbaRoaLm/pqLVB1QjMeyak8O/0TmO6CXk6
+878ps85fLFgARRjSYX+rYwoYNzqxK3cBAk4Bsy4oofReVT8xB+7rFZFMV4McyL7e
+sOABFqecLuNIGT6CdeEU1z7TUfq8sKM1MQ25e0J1PMmoWTqDwzhnxK+ckeFsZ8Te
+dgqVW+Oyy9kCTgHqyc/P/uEZkp1ioDu0WkpAR+1vZa2jeyH+vm9nhE9Z6Uty/r6F
+k4otIx9lMDmTwXqeE03vINJlJshqvjShfbnCe9gK8xrUk1cFl7QPAQJOATD3LQRq
+At2MniioFtiTbUN6n2ZS1C5xnHGq3fnBzxnZw4UmSfuZjG/L3gWPKkyJCK3HYe9K
+ho6ZQhNB6P5d7sQQjG6f+SIRwp+VjwvpAk4AnM4do54FETeLHhY4zy47dM/zdy3u
+iDjiFwoMTR+PfF03evsWe5pW3EaXolGi3FRAZ/idFA+L3Gi2y4xR44z71HkbF32L
+WKaLdOuBQvI=
+-----END RSA PRIVATE KEY-----
+Certificate:
+ Data:
+ Version: 3 (0x2)
+ Serial Number:
+ 09:c2:f9:ca:9a:d8
+ Signature Algorithm: md5WithRSAEncryption
+ Issuer: C=SE, ST=Solna, L=Mooo, O=Haxx, OU=Coolx, CN=storbror, CN=localhost
+ Validity
+ Not Before: Jan 5 11:25:13 2004 GMT
+ Not After : Feb 13 11:25:13 2008 GMT
+ Subject: C=SE, ST=Solna, L=Mooo, O=Haxx, OU=Coolx, CN=storbror, CN=localhost
+ Subject Public Key Info:
+ Public Key Algorithm: rsaEncryption
+ RSA Public Key: (1234 bit)
+ Modulus (1234 bit):
+ 03:59:37:ea:06:ea:f2:7c:0c:0c:de:f8:5b:ce:29:
+ 24:b8:f5:7e:31:18:cc:40:2e:12:91:2e:14:10:6f:
+ ba:af:33:ee:c1:70:c8:11:bf:e4:4a:c6:45:fb:48:
+ d8:1c:c4:a3:cb:70:81:df:ed:04:3a:0c:12:25:2d:
+ 7b:80:b9:51:d0:b5:65:bd:6f:4e:aa:eb:89:01:12:
+ 59:04:c2:1e:a0:3f:92:1a:f4:9a:d1:ca:c1:9b:bb:
+ 65:3a:35:13:fe:c4:15:37:dd:d5:70:66:31:74:ee:
+ 87:0d:f4:fa:77:f7:65:b8:57:11:1c:fa:0d:fe:16:
+ 44:73:50:46:9a:84:31:8e:69:b9:a3:80:ab:aa:0d:
+ d9:4a:75:92:f3:80:98:fb:fb:db:04:2a:96:fb:f8:
+ 57:46:e7:aa:d9
+ Exponent: 65537 (0x10001)
+ X509v3 extensions:
+ X509v3 Subject Alternative Name:
+ DNS:localhost
+ Netscape Cert Type:
+ SSL Server
+ Netscape Comment:
+ CURL stunnel server test certificate
+ X509v3 Key Usage:
+ Digital Signature, Key Encipherment
+ X509v3 Extended Key Usage:
+ TLS Web Server Authentication
+ X509v3 Basic Constraints:
+ CA:FALSE
+ X509v3 Subject Key Identifier:
+ 35:77:35:3B:9B:98:3C:B6:C7:9A:E7:A8:04:B9:7C:70:AD:FA:37:A9
+ Subject Information Access:
+ ad dvcs - URI:https://localhost:8433/509
+
+ Authority Information Access:
+ ad dvcs - URI:https://localhost:8433/509
+
+ Signature Algorithm: md5WithRSAEncryption
+ 02:47:57:18:5f:54:3f:1d:29:0a:05:7a:d1:0f:e6:b9:2c:8b:
+ 29:38:50:bf:c1:a1:7f:73:4a:9d:f1:1b:bf:2e:ea:87:91:dd:
+ ff:75:73:57:78:cf:75:52:57:0b:5b:bb:d4:77:b2:dd:e8:0c:
+ 06:ce:1b:c0:3d:9f:68:c0:0b:66:b8:f9:46:db:04:a9:2f:a3:
+ 5e:9c:c6:70:ff:1d:af:1f:17:9c:38:3d:12:aa:af:7b:72:44:
+ a0:44:41:6b:9a:9b:60:8c:50:94:f1:d7:a5:77:6b:d3:0e:66:
+ 88:a1:52:63:23:f6:66:a6:ea:f9:d0:df:4d:8a:14:f0:73:c6:
+ b6:b6:b6:68:4f:3d:9a:b6:31:ba:19:f3:66:9f:16:6d:87:64:
+ 32:53:d2:90:e5:8c:1e:f5:18:61:1a
+-----BEGIN CERTIFICATE-----
+MIIDujCCAwigAwIBAgIGCcMA3QkhMA0GCSqGSIb3DQEBBAUAMHIxCzAJBgNVBAYT
+AlNFMQ4wDAYDVQQIEwVTb2xuYTENMAsGA1UEBxMETW9vbzENMAsGA1UEChMESGF4
+eDEOMAwGA1UECxMFQ29vbHgxETAPBgNVBAMTCHN0b3Jicm9yMRIwEAYDVQQDEwls
+b2NhbGhvc3QwHhcNMDQwMTA1MTQ0MjU2WhcNMDgwMjEzMTQ0MjU2WjByMQswCQYD
+VQQGEwJTRTEOMAwGA1UECBMFU29sbmExDTALBgNVBAcTBE1vb28xDTALBgNVBAoT
+BEhheHgxDjAMBgNVBAsTBUNvb2x4MREwDwYDVQQDEwhzdG9yYnJvcjESMBAGA1UE
+AxMJbG9jYWxob3N0MIG5MA0GCSqGSIb3DQEBAQUAA4GnADCBowKBmwNZN+oG6vJ8
+DAze+FvOKSS49X4xGMxALhKRLhQQb7qvM+7BcMgRv+RKxkX7SNgcxKPLcIHf7QQ6
+DBIlLXuAuVHQtWW9b06q64kBElkEwh6gP5Ia9JrRysGbu2U6NRP+xBU33dVwZjF0
+7ocN9Pp392W4VxEc+g3+FkRzUEaahDGOabmjgKuqDdlKdZLzgJj7+9sEKpb7+FdG
+56rZAgMBAAGjggEkMIIBIDARBglghkgBhvhCAQEEBAMCBkAwMwYJYIZIAYb4QgEN
+BCYWJENVUkwgc3R1bm5lbCBzZXJ2ZXIgdGVzdCBjZXJ0aWZpY2F0ZTALBgNVHQ8E
+BAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwCQYDVR0TBAIwADAdBgNVHQ4EFgQU
+NXc1O5uYPLbHmueoBLl8cK36N6kwNgYIKwYBBQUHAQsEKjAoMCYGCCsGAQUFBzAE
+hhpodHRwczovL2xvY2FsaG9zdDo4NDMzLzUwOTA2BggrBgEFBQcBAQQqMCgwJgYI
+KwYBBQUHMASGGmh0dHBzOi8vbG9jYWxob3N0Ojg0MzMvNTA5MBoGA1UdEQQTMBGH
+BH8AAAGCCWxvY2FsaG9zdDANBgkqhkiG9w0BAQQFAAOBnAAAIHkvI0V6padfc8Lv
+onuNqBwCMIg4SugCslkN597Yb8ZDEAUe3ArkOvzAHUngsD5D0gfbKblKP/P0bN6Y
+Ft896NmH4QFsDAetZcCFf24AM4DbUQo5jtG+dkanI/7IxxNYJ1PQ64/yscdQFvHW
+xhIX3Q6FqABjcN5nc80Rog+b6eS8QRX1BRnQqbGtocuptUgW5mWsSb+DR6pZbA==
+-----END CERTIFICATE-----
+-----BEGIN DH PARAMETERS-----
+MEYCQQD+KCcagSasA1QSo8tRXpbaLJJ1Ezt3FJFEZ3RVplp4qZwXQpSZ+Vly3xWx
+q3YvALe/enMbIq8F3OUmppq3UHwTAgEC
+-----END DH PARAMETERS-----
diff --git a/tests/testcurl.1 b/tests/testcurl.1
new file mode 100644
index 0000000..39b7039
--- /dev/null
+++ b/tests/testcurl.1
@@ -0,0 +1,124 @@
+.\" **************************************************************************
+.\" * _ _ ____ _
+.\" * Project ___| | | | _ \| |
+.\" * / __| | | | |_) | |
+.\" * | (__| |_| | _ <| |___
+.\" * \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" *
+.\" * This software is licensed as described in the file COPYING, which
+.\" * you should have received as part of this distribution. The terms
+.\" * are also available at http://curl.haxx.se/docs/copyright.html.
+.\" *
+.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+.\" * copies of the Software, and permit persons to whom the Software is
+.\" * furnished to do so, under the terms of the COPYING file.
+.\" *
+.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+.\" * KIND, either express or implied.
+.\" *
+.\" **************************************************************************
+.\"
+.TH testcurl.pl 1 "24 Mar 2010" "Curl 7.20.1" "testcurl"
+.SH NAME
+testcurl.pl \- (automatically) test curl
+.SH SYNOPSIS
+.B testcurl.pl [options] [dir] > output
+.SH DESCRIPTION
+\fItestcurl.pl\fP is the master script to use for automatic testing of curl
+off git or daily snapshots. It is written for the purpose of being run from a
+crontab job or similar at a regular interval. The output is suitable to be
+mailed to curl-autocompile@haxx.se to be dealt with automatically (make sure
+the subject includes the word "autobuild" as the mail gets silently discarded
+otherwise). The most current build status (with a reasonable backlog) will be
+published on the curl site, at http://curl.haxx.se/auto/
+
+\fIoptions\fP may be omitted. See \fI--setup\fP for what happens then.
+
+\fIdir\fP is a curl source dir, possibly a daily snapshot one. Using this will
+make testcurl.pl skip the 'buildconf' stage and thus it removes the dependency
+on automake, autoconf, libtool, GNU m4 and possibly a few other things.
+
+testcurl.pl will run 'buildconf' (or similar), run configure, build curl and
+libcurl in a separate build directory and then run 'make test' to test the
+fresh build.
+.SH OPTIONS
+.IP "--configure=[options]"
+Configure options passed to configure.
+.IP "--crosscompile"
+This is a cross-compile. Makes \fItestcurl.pl\fP skip a few things.
+.IP "--desc=[desc]"
+Description of your test system. Displayed on the build summary page on the
+weba site.
+.IP "--email=[email]"
+Set email address to report as. Displayed in the build logs on the site.
+.IP "--mktarball=[command]"
+Generic command to run after completed test.
+.IP "--name=[name]"
+Set name to report as. Displayed in the build summary on the site.
+.IP "--nobuildconf"
+Don't run buildconf. Useful when many builds use the same source tree, as then
+only one need to do this. Also, if multiple processes run tests simultaneously
+on the same source tree (like several hosts on a NFS mounted dir),
+simultaneous buildconf invokes may cause problems. (Added in 7.14.1)
+.IP "--nogitpull"
+Don't update from git even though it is a git tree. Useful to still be able to
+test even though your network is down, or similar.
+.IP "--runtestopts=[options]"
+Options that is passed to the runtests.pl script. Useful for disabling valgrind
+by force, and similar.
+.IP "--setup=[file name]"
+File name to read setup from (deprecated). The old style of providing info.
+If info is missing when testcurl.pl is started, it will prompt you and then
+store the info in a 'setup' file, which it will look for on each invoke. Use
+\fI--name\fP, \fI--emacs\fP, \fI--configure\fP and \fI--desc\fP instead.
+.IP "--target=[your os]"
+Specify your target environment. Recognized strings include 'vc', 'mingw32',
+\&'borland' and 'netware'.
+.SH "INITIAL SETUP"
+First you make a checkout from git (or you write a script that downloads daily
+snapshots automatically, find inspiration at
+http://curl.haxx.se/auto/autocurl.txt):
+
+.nf
+ $ mkdir daily-curl
+ $ cd daily-curl
+ $ git clone git://github.com/bagder/curl.git
+.fi
+
+With the curl sources checked out, or downloaded, you can start testing right
+away. If you want to use \fItestcurl.pl\fP without command line arguments and
+to have it store and remember the config in its 'setup' file, then start it
+manually now and fill in the answers to the questions it prompts you for:
+
+.nf
+ $ ./curl/tests/testcurl.pl
+.fi
+
+Now you are ready to go. If you let the script run, it will perform a full
+cycle and spit out lots of output. Mail us that output as described above.
+.SH "CRONTAB EXAMPLE"
+The crontab could include something like this:
+
+.nf
+\# autobuild curl:
+0 4 * * * cd daily-curl && ./testit.sh
+.fi
+
+Where testit.sh is a shell script that could look similar to this:
+
+.nf
+mail="mail -s autobuild curl-autocompile@haxx.se"
+name="--name=whoami"
+email="--email=iamme@nowhere"
+desc='"--desc=supermachine Turbo 2000"'
+testprog="perl ./curl/tests/testcurl.pl $name $email $desc"
+opts1="--configure=--enable-debug"
+opts2="--configure=--enable-ipv6"
+
+# run first test
+$testprog $opts1 | $mail
+
+# run second test
+$testprog $opts2 | $mail
diff --git a/tests/testcurl.html b/tests/testcurl.html
new file mode 100644
index 0000000..75c4bcc
--- /dev/null
+++ b/tests/testcurl.html
@@ -0,0 +1,113 @@
+<html><head>
+<title>testcurl.pl man page</title>
+<meta name="generator" content="roffit 0.7">
+<STYLE type="text/css">
+P.level0 {
+ padding-left: 2em;
+}
+
+P.level1 {
+ padding-left: 4em;
+}
+
+P.level2 {
+ padding-left: 6em;
+}
+
+span.emphasis {
+ font-style: italic;
+}
+
+span.bold {
+ font-weight: bold;
+}
+
+span.manpage {
+ font-weight: bold;
+}
+
+h2.nroffsh {
+ background-color: #e0e0e0;
+}
+
+span.nroffip {
+ font-weight: bold;
+ font-size: 120%;
+ font-family: monospace;
+}
+
+p.roffit {
+ text-align: center;
+ font-size: 80%;
+}
+</STYLE>
+</head><body>
+
+<p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
+<p class="level0">testcurl.pl - (automatically) test curl <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><span Class="bold">testcurl.pl [options] [dir] &gt; output</span> <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0"><span Class="emphasis">testcurl.pl</span> is the master script to use for automatic testing of curl off git or daily snapshots. It is written for the purpose of being run from a crontab job or similar at a regular interval. The output is suitable to be mailed to curl-autocompile@haxx.se to be dealt with automatically (make sure the subject includes the word "autobuild" as the mail gets silently discarded otherwise). The most current build status (with a reasonable backlog) will be published on the curl site, at <a href="http://curl.haxx.se/auto/">http://curl.haxx.se/auto/</a>
+<p class="level0"><span Class="emphasis">options</span> may be omitted. See <span Class="emphasis">--setup</span> for what happens then.
+<p class="level0"><span Class="emphasis">dir</span> is a curl source dir, possibly a daily snapshot one. Using this will make testcurl.pl skip the 'buildconf' stage and thus it removes the dependency on automake, autoconf, libtool, GNU m4 and possibly a few other things.
+<p class="level0">testcurl.pl will run 'buildconf' (or similar), run configure, build curl and libcurl in a separate build directory and then run 'make test' to test the fresh build. <a name="OPTIONS"></a><h2 class="nroffsh">OPTIONS</h2>
+<p class="level0">
+<p class="level0"><a name="--configureoptions"></a><span class="nroffip">--configure=[options]</span>
+<p class="level1">Configure options passed to configure.
+<p class="level0"><a name="--crosscompile"></a><span class="nroffip">--crosscompile</span>
+<p class="level1">This is a cross-compile. Makes <span Class="emphasis">testcurl.pl</span> skip a few things.
+<p class="level0"><a name="--descdesc"></a><span class="nroffip">--desc=[desc]</span>
+<p class="level1">Description of your test system. Displayed on the build summary page on the weba site.
+<p class="level0"><a name="--emailemail"></a><span class="nroffip">--email=[email]</span>
+<p class="level1">Set email address to report as. Displayed in the build logs on the site.
+<p class="level0"><a name="--mktarballcommand"></a><span class="nroffip">--mktarball=[command]</span>
+<p class="level1">Generic command to run after completed test.
+<p class="level0"><a name="--namename"></a><span class="nroffip">--name=[name]</span>
+<p class="level1">Set name to report as. Displayed in the build summary on the site.
+<p class="level0"><a name="--nobuildconf"></a><span class="nroffip">--nobuildconf</span>
+<p class="level1">Don't run buildconf. Useful when many builds use the same source tree, as then only one need to do this. Also, if multiple processes run tests simultaneously on the same source tree (like several hosts on a NFS mounted dir), simultaneous buildconf invokes may cause problems. (Added in 7.14.1)
+<p class="level0"><a name="--nogitpull"></a><span class="nroffip">--nogitpull</span>
+<p class="level1">Don't update from git even though it is a git tree. Useful to still be able to test even though your network is down, or similar.
+<p class="level0"><a name="--runtestoptsoptions"></a><span class="nroffip">--runtestopts=[options]</span>
+<p class="level1">Options that is passed to the runtests.pl script. Useful for disabling valgrind by force, and similar.
+<p class="level0"><a name="--setupfile"></a><span class="nroffip">--setup=[file name]</span>
+<p class="level1">File name to read setup from (deprecated). The old style of providing info. If info is missing when testcurl.pl is started, it will prompt you and then store the info in a 'setup' file, which it will look for on each invoke. Use <span Class="emphasis">--name</span>, <span Class="emphasis">--emacs</span>, <span Class="emphasis">--configure</span> and <span Class="emphasis">--desc</span> instead.
+<p class="level0"><a name="--targetyour"></a><span class="nroffip">--target=[your os]</span>
+<p class="level1">Specify your target environment. Recognized strings include 'vc', 'mingw32', 'borland' and 'netware'. <a name="INITIAL"></a><h2 class="nroffsh">INITIAL SETUP</h2>
+<p class="level0">First you make a checkout from git (or you write a script that downloads daily snapshots automatically, find inspiration at <a href="http://curl.haxx.se/auto/autocurl.txt">http://curl.haxx.se/auto/autocurl.txt</a>):
+<p class="level0"><pre>
+<p class="level0">&nbsp; $ mkdir daily-curl
+ &nbsp; $ cd daily-curl
+ &nbsp; $ git clone git://github.com/bagder/curl.git
+ </pre>
+
+<p class="level0">
+<p class="level0">With the curl sources checked out, or downloaded, you can start testing right away. If you want to use <span Class="emphasis">testcurl.pl</span> without command line arguments and to have it store and remember the config in its 'setup' file, then start it manually now and fill in the answers to the questions it prompts you for:
+<p class="level0"><pre>
+<p class="level0">&nbsp; $ ./curl/tests/testcurl.pl
+ </pre>
+
+<p class="level0">
+<p class="level0">Now you are ready to go. If you let the script run, it will perform a full cycle and spit out lots of output. Mail us that output as described above. <a name="CRONTAB"></a><h2 class="nroffsh">CRONTAB EXAMPLE</h2>
+<p class="level0">The crontab could include something like this:
+<p class="level0"><pre>
+<p class="level0"># autobuild curl:
+ 0 4 * * * cd daily-curl && ./testit.sh
+ </pre>
+
+<p class="level0">
+<p class="level0">Where testit.sh is a shell script that could look similar to this:
+<p class="level0"><pre>
+<p class="level0">mail="mail -s autobuild curl-autocompile@haxx.se"
+ name="--name=whoami"
+ email="--email=iamme@nowhere"
+ desc='"--desc=supermachine Turbo 2000"'
+ testprog="perl ./curl/tests/testcurl.pl $name $email $desc"
+ opts1="--configure=--enable-debug"
+ opts2="--configure=--enable-ipv6"
+ <p class="level0"># run first test
+ $testprog $opts1 | $mail
+ <p class="level0"># run second test
+ $testprog $opts2 | $mail
+ <p class="roffit">
+ This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
+</body></html>
diff --git a/tests/testcurl.pdf b/tests/testcurl.pdf
new file mode 100644
index 0000000..a15fc99
--- /dev/null
+++ b/tests/testcurl.pdf
Binary files differ
diff --git a/tests/testcurl.pl b/tests/testcurl.pl
new file mode 100755
index 0000000..a0fd889
--- /dev/null
+++ b/tests/testcurl.pl
@@ -0,0 +1,736 @@
+#!/usr/bin/env perl
+#***************************************************************************
+# _ _ ____ _
+# Project ___| | | | _ \| |
+# / __| | | | |_) | |
+# | (__| |_| | _ <| |___
+# \___|\___/|_| \_\_____|
+#
+# Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+#
+# This software is licensed as described in the file COPYING, which
+# you should have received as part of this distribution. The terms
+# are also available at http://curl.haxx.se/docs/copyright.html.
+#
+# You may opt to use, copy, modify, merge, publish, distribute and/or sell
+# copies of the Software, and permit persons to whom the Software is
+# furnished to do so, under the terms of the COPYING file.
+#
+# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+# KIND, either express or implied.
+#
+###########################################################################
+
+###########################
+# What is This Script?
+###########################
+
+# testcurl.pl is the master script to use for automatic testing of curl
+# directly off its source repository.
+# This is written for the purpose of being run from a crontab job or similar
+# at a regular interval. The output is suitable to be mailed to
+# curl-autocompile@haxx.se to be dealt with automatically (make sure the
+# subject includes the word "autobuild" as the mail gets silently discarded
+# otherwise). The most current build status (with a resonable backlog) will
+# be published on the curl site, at http://curl.haxx.se/auto/
+
+# USAGE:
+# testcurl.pl [options] [curl-daily-name] > output
+
+# Options:
+#
+# --configure=[options] Configure options
+# --crosscompile This is a crosscompile
+# --desc=[desc] Description of your test system
+# --email=[email] Set email address to report as
+# --extvercmd=[command] Command to use for displaying version with cross compiles.
+# --mktarball=[command] Command to run after completed test
+# --name=[name] Set name to report as
+# --nocvsup Don't pull from git even though it is a git tree
+# --nogitpull Don't pull from git even though it is a git tree
+# --nobuildconf Don't run buildconf
+# --runtestopts=[options] Options to pass to runtests.pl
+# --setup=[file name] File name to read setup from (deprecated)
+# --target=[your os] Specify your target environment.
+#
+# if [curl-daily-name] is omitted, a 'curl' git directory is assumed.
+#
+
+use strict;
+
+use Cwd;
+
+# Turn on warnings (equivalent to -w, which can't be used with /usr/bin/env)
+#BEGIN { $^W = 1; }
+
+use vars qw($version $fixed $infixed $CURLDIR $git $pwd $build $buildlog
+ $buildlogname $configurebuild $targetos $confheader $binext
+ $libext);
+
+use vars qw($name $email $desc $confopts $runtestopts $setupfile $mktarball
+ $extvercmd $nogitpull $nobuildconf $crosscompile
+ $timestamp);
+
+# version of this script
+$version='2010-08-20';
+$fixed=0;
+
+# Determine if we're running from git or a canned copy of curl,
+# or if we got a specific target option or setup file option.
+$CURLDIR="curl";
+if (-f ".git/config") {
+ $CURLDIR = "./";
+}
+
+$git=1;
+$setupfile = 'setup';
+while ($ARGV[0]) {
+ if ($ARGV[0] =~ /--target=/) {
+ $targetos = (split(/=/, shift @ARGV))[1];
+ }
+ elsif ($ARGV[0] =~ /--setup=/) {
+ $setupfile = (split(/=/, shift @ARGV))[1];
+ }
+ elsif ($ARGV[0] =~ /--extvercmd=/) {
+ $extvercmd = (split(/=/, shift @ARGV))[1];
+ }
+ elsif ($ARGV[0] =~ /--mktarball=/) {
+ $mktarball = (split(/=/, shift @ARGV))[1];
+ }
+ elsif ($ARGV[0] =~ /--name=/) {
+ $name = (split(/=/, shift @ARGV))[1];
+ }
+ elsif ($ARGV[0] =~ /--email=/) {
+ $email = (split(/=/, shift @ARGV))[1];
+ }
+ elsif ($ARGV[0] =~ /--desc=/) {
+ $desc = (split(/=/, shift @ARGV))[1];
+ }
+ elsif ($ARGV[0] =~ /--configure=/) {
+ $confopts = (split(/=/, shift @ARGV))[1];
+ }
+ elsif (($ARGV[0] eq "--nocvsup") || ($ARGV[0] eq "--nogitpull")) {
+ $nogitpull=1;
+ shift @ARGV;
+ }
+ elsif ($ARGV[0] =~ /--nobuildconf/) {
+ $nobuildconf=1;
+ shift @ARGV;
+ }
+ elsif ($ARGV[0] =~ /--crosscompile/) {
+ $crosscompile=1;
+ shift @ARGV;
+ }
+ elsif ($ARGV[0] =~ /--runtestopts=/) {
+ $runtestopts = (split(/=/, shift @ARGV, 2))[1];
+ }
+ else {
+ $CURLDIR=shift @ARGV;
+ $git=0; # a given dir, assume not using git
+ }
+}
+
+# Do the platform-specific stuff here
+$configurebuild = 1;
+$confheader = 'curl_config.h';
+$binext = '';
+$libext = '.la'; # .la since both libcurl and libcares are made with libtool
+if ($^O eq 'MSWin32' || $targetos) {
+ if (!$targetos) {
+ # If no target defined on Win32 lets assume vc
+ $targetos = 'vc';
+ }
+ if ($targetos =~ /vc/ || $targetos =~ /borland/ || $targetos =~ /watcom/) {
+ $binext = '.exe';
+ $libext = '.lib';
+ }
+ elsif ($targetos =~ /mingw/) {
+ $binext = '.exe';
+ if ($^O eq 'MSWin32') {
+ $libext = '.a';
+ }
+ }
+ elsif ($targetos =~ /netware/) {
+ $configurebuild = 0;
+ $binext = '.nlm';
+ if ($^O eq 'MSWin32') {
+ $libext = '.lib';
+ }
+ else {
+ $libext = '.a';
+ }
+ }
+}
+
+if (($^O eq 'MSWin32' || $^O eq 'msys') &&
+ ($targetos =~ /vc/ || $targetos =~ /mingw32/ ||
+ $targetos =~ /borland/ || $targetos =~ /watcom/)) {
+
+ # Set these things only when building ON Windows and for Win32 platform.
+ # FOR Windows since we might be cross-compiling on another system. Non-
+ # Windows builds still default to configure-style builds with curl_config.h.
+
+ $configurebuild = 0;
+ $confheader = 'config-win32.h';
+}
+
+$ENV{LC_ALL}="C" if (($ENV{LC_ALL}) && ($ENV{LC_ALL} !~ /^C$/));
+$ENV{LC_CTYPE}="C" if (($ENV{LC_CTYPE}) && ($ENV{LC_CTYPE} !~ /^C$/));
+$ENV{LANG}="C";
+
+sub rmtree($) {
+ my $target = $_[0];
+ if ($^O eq 'MSWin32') {
+ foreach (glob($target)) {
+ s:/:\\:g;
+ system("rd /s /q $_");
+ }
+ } else {
+ system("rm -rf $target");
+ }
+}
+
+sub grepfile($$) {
+ my ($target, $fn) = @_;
+ open(F, $fn) or die;
+ while (<F>) {
+ if (/$target/) {
+ close(F);
+ return 1;
+ }
+ }
+ close(F);
+ return 0;
+}
+
+sub logit($) {
+ my $text=$_[0];
+ if ($text) {
+ print "testcurl: $text\n";
+ }
+}
+
+sub logit_spaced($) {
+ my $text=$_[0];
+ if ($text) {
+ print "\ntestcurl: $text\n\n";
+ }
+}
+
+sub mydie($){
+ my $text=$_[0];
+ logit "$text";
+ chdir $pwd; # cd back to the original root dir
+
+ if ($pwd && $build) {
+ # we have a build directory name, remove the dir
+ logit "removing the $build dir";
+ rmtree "$pwd/$build";
+ }
+ if (-r $buildlog) {
+ # we have a build log output file left, remove it
+ logit "removing the $buildlogname file";
+ unlink "$buildlog";
+ }
+ logit "ENDING HERE"; # last line logged!
+ exit 1;
+}
+
+sub get_host_triplet {
+ my $triplet;
+ my $configfile = "$pwd/$build/lib/curl_config.h";
+
+ if(-f $configfile && -s $configfile && open(LIBCONFIGH, "<$configfile")) {
+ while(<LIBCONFIGH>) {
+ if($_ =~ /^\#define\s+OS\s+"*([^"][^"]*)"*\s*/) {
+ $triplet = $1;
+ last;
+ }
+ }
+ close(LIBCONFIGH);
+ }
+ return $triplet;
+}
+
+if (open(F, "$setupfile")) {
+ while (<F>) {
+ if (/(\w+)=(.*)/) {
+ eval "\$$1=$2;";
+ }
+ }
+ close(F);
+ $infixed=$fixed;
+} else {
+ $infixed=0; # so that "additional args to configure" works properly first time...
+}
+
+if (!$name) {
+ print "please enter your name\n";
+ $name = <>;
+ chomp $name;
+ $fixed=1;
+}
+
+if (!$email) {
+ print "please enter your contact email address\n";
+ $email = <>;
+ chomp $email;
+ $fixed=2;
+}
+
+if (!$desc) {
+ print "please enter a one line system description\n";
+ $desc = <>;
+ chomp $desc;
+ $fixed=3;
+}
+
+if (!$confopts) {
+ if ($infixed < 4) {
+ print "please enter your additional arguments to configure\n";
+ print "examples: --with-ssl --enable-debug --enable-ipv6 --with-krb4\n";
+ $confopts = <>;
+ chomp $confopts;
+ }
+}
+
+
+if ($fixed < 4) {
+ $fixed=4;
+ open(F, ">$setupfile") or die;
+ print F "name='$name'\n";
+ print F "email='$email'\n";
+ print F "desc='$desc'\n";
+ print F "confopts='$confopts'\n";
+ print F "fixed='$fixed'\n";
+ close(F);
+}
+
+# Enable picky compiler warnings unless explicitly disabled
+if (($confopts !~ /--enable-debug/) &&
+ ($confopts !~ /--enable-warnings/) &&
+ ($confopts !~ /--disable-warnings/)) {
+ $confopts .= " --enable-warnings";
+}
+
+my $str1066os = 'o' x 1066;
+
+# Set timestamp to the UTC this script is running. Its value might
+# be changed later in the script to the value present in curlver.h
+$timestamp = scalar(gmtime)." UTC";
+
+logit "STARTING HERE"; # first line logged, for scripts to trigger on
+logit 'TRANSFER CONTROL ==== 1120 CHAR LINE' . $str1066os . 'LINE_END';
+logit "NAME = $name";
+logit "EMAIL = $email";
+logit "DESC = $desc";
+logit "CONFOPTS = $confopts";
+logit "CPPFLAGS = ".$ENV{CPPFLAGS};
+logit "CFLAGS = ".$ENV{CFLAGS};
+logit "LDFLAGS = ".$ENV{LDFLAGS};
+logit "CC = ".$ENV{CC};
+logit "MAKEFLAGS = ".$ENV{MAKEFLAGS};
+logit "PKG_CONFIG_PATH = ".$ENV{PKG_CONFIG_PATH};
+logit "target = ".$targetos;
+logit "version = $version"; # script version
+logit "date = $timestamp"; # When the test build starts
+
+$str1066os = undef;
+
+# Make $pwd to become the path without newline. We'll use that in order to cut
+# off that path from all possible logs and error messages etc.
+$pwd = getcwd();
+
+if (-d $CURLDIR) {
+ if ($git && -d "$CURLDIR/.git") {
+ logit "$CURLDIR is verified to be a fine git source dir";
+ # remove the generated sources to force them to be re-generated each
+ # time we run this test
+ unlink "$CURLDIR/src/hugehelp.c";
+ } elsif (!$git && -f "$CURLDIR/tests/testcurl.pl") {
+ logit "$CURLDIR is verified to be a fine daily source dir"
+ } else {
+ mydie "$CURLDIR is not a daily source dir or checked out from git!"
+ }
+}
+$build="build-$$";
+$buildlogname="buildlog-$$";
+$buildlog="$pwd/$buildlogname";
+
+# remove any previous left-overs
+rmtree "build-*";
+rmtree "buildlog-*";
+
+# this is to remove old build logs that ended up in the wrong dir
+foreach (glob("$CURLDIR/buildlog-*")) { unlink $_; }
+
+# create a dir to build in
+mkdir $build, 0777;
+
+if (-d $build) {
+ logit "build dir $build was created fine";
+} else {
+ mydie "failed to create dir $build";
+}
+
+# get in the curl source tree root
+chdir $CURLDIR;
+
+# Do the git thing, or not...
+if ($git) {
+ # update quietly to the latest git
+ if($nogitpull) {
+ logit "skipping git pull (--nogitpull)";
+ } else {
+ my $gitstat = 0;
+ my @commits;
+ logit "run git pull in curl";
+ system("git pull 2>&1");
+ $gitstat += $?;
+ logit "failed to update from curl git ($?), continue anyway" if ($?);
+ # get the last 5 commits for show (even if no pull was made)
+ @commits=`git log --pretty=oneline --abbrev-commit -5`;
+ logit "The most recent curl git commits:";
+ for (@commits) {
+ chomp ($_);
+ logit " $_";
+ }
+ if (-d "ares/.git") {
+ chdir "ares";
+ logit "run git pull in ares";
+ system("git pull 2>&1");
+ $gitstat += $?;
+ logit "failed to update from ares git ($?), continue anyway" if ($?);
+ # get the last 5 commits for show (even if no pull was made)
+ @commits=`git log --pretty=oneline --abbrev-commit -5`;
+ logit "The most recent ares git commits:";
+ for (@commits) {
+ chomp ($_);
+ logit " $_";
+ }
+ chdir "$pwd/$CURLDIR";
+ }
+ # Set timestamp to the UTC the git update took place.
+ $timestamp = scalar(gmtime)." UTC" if (!$gitstat);
+ }
+
+ if($nobuildconf) {
+ logit "told to not run buildconf";
+ }
+ elsif ($configurebuild) {
+ # remove possible left-overs from the past
+ unlink "configure";
+ unlink "autom4te.cache";
+
+ # generate the build files
+ logit "invoke buildconf, but filter off aclocal underquoted definition warnings";
+ open(F, "./buildconf 2>&1 |") or die;
+ open(LOG, ">$buildlog") or die;
+ while (<F>) {
+ next if /warning: underquoted definition of/;
+ print;
+ print LOG;
+ }
+ close(F);
+ close(LOG);
+
+ if (grepfile("^buildconf: OK", $buildlog)) {
+ logit "buildconf was successful";
+ }
+ else {
+ mydie "buildconf was NOT successful";
+ }
+ }
+ else {
+ logit "buildconf was successful (dummy message)";
+ }
+}
+
+# Set timestamp to the one in curlver.h if this isn't a git test build.
+if ((-f "include/curl/curlver.h") &&
+ (open(F, "<include/curl/curlver.h"))) {
+ while (<F>) {
+ chomp;
+ if ($_ =~ /^\#define\s+LIBCURL_TIMESTAMP\s+\"(.+)\".*$/) {
+ my $stampstring = $1;
+ if ($stampstring !~ /DEV/) {
+ $stampstring =~ s/\s+UTC//;
+ $timestamp = $stampstring." UTC";
+ }
+ last;
+ }
+ }
+ close(F);
+}
+
+# Show timestamp we are using for this test build.
+logit "timestamp = $timestamp";
+
+if ($configurebuild) {
+ if (-f "configure") {
+ logit "configure created (at least it exists)";
+ } else {
+ mydie "no configure created/found";
+ }
+} else {
+ logit "configure created (dummy message)"; # dummy message to feign success
+}
+
+sub findinpath {
+ my $c;
+ my $e;
+ my $x = ($^O eq 'MSWin32') ? '.exe' : '';
+ my $s = ($^O eq 'MSWin32') ? ';' : ':';
+ my $p=$ENV{'PATH'};
+ my @pa = split($s, $p);
+ for $c (@_) {
+ for $e (@pa) {
+ if( -x "$e/$c$x") {
+ return $c;
+ }
+ }
+ }
+}
+
+my $make = findinpath("gmake", "make", "nmake");
+if(!$make) {
+ mydie "Couldn't find make in the PATH";
+}
+# force to 'nmake' for VC builds
+$make = "nmake" if ($targetos =~ /vc/);
+# force to 'wmake' for Watcom builds
+$make = "wmake" if ($targetos =~ /watcom/);
+logit "going with $make as make";
+
+# change to build dir
+chdir "$pwd/$build";
+
+if ($configurebuild) {
+ # run configure script
+ print `../$CURLDIR/configure $confopts 2>&1`;
+
+ if (-f "lib/Makefile") {
+ logit "configure seems to have finished fine";
+ } else {
+ mydie "configure didn't work";
+ }
+} else {
+ logit "copying files to build dir ...";
+ if (($^O eq 'MSWin32') && ($targetos !~ /netware/)) {
+ system("xcopy /s /q ..\\$CURLDIR .");
+ system("buildconf.bat");
+ }
+ elsif ($targetos =~ /netware/) {
+ system("cp -afr ../$CURLDIR/* .");
+ system("cp -af ../$CURLDIR/Makefile.dist Makefile");
+ system("$make -i -C lib -f Makefile.netware prebuild");
+ system("$make -i -C src -f Makefile.netware prebuild");
+ if (-d "../$CURLDIR/ares") {
+ system("$make -i -C ares -f Makefile.netware prebuild");
+ }
+ }
+ elsif ($^O eq 'linux') {
+ system("cp -afr ../$CURLDIR/* .");
+ system("cp -af ../$CURLDIR/Makefile.dist Makefile");
+ system("cp -af ../$CURLDIR/include/curl/curlbuild.h.dist ./include/curl/curlbuild.h");
+ system("$make -i -C lib -f Makefile.$targetos prebuild");
+ system("$make -i -C src -f Makefile.$targetos prebuild");
+ if (-d "../$CURLDIR/ares") {
+ system("cp -af ../$CURLDIR/ares/ares_build.h.dist ./ares/ares_build.h");
+ system("$make -i -C ares -f Makefile.$targetos prebuild");
+ }
+ }
+}
+
+if(-f "./libcurl.pc") {
+ logit_spaced "display libcurl.pc";
+ if(open(F, "<./libcurl.pc")) {
+ while(<F>) {
+ my $ll = $_;
+ print $ll if(($ll !~ /^ *#/) && ($ll !~ /^ *$/));
+ }
+ close(F);
+ }
+}
+
+if(-f "./include/curl/curlbuild.h") {
+ logit_spaced "display include/curl/curlbuild.h";
+ if(open(F, "<./include/curl/curlbuild.h")) {
+ while(<F>) {
+ my $ll = $_;
+ print $ll if(($ll =~ /^ *# *define *CURL_/) && ($ll !~ /__CURL_CURLBUILD_H/));
+ }
+ close(F);
+ }
+}
+else {
+ mydie "no curlbuild.h created/found";
+}
+
+logit_spaced "display lib/$confheader";
+open(F, "lib/$confheader") or die "lib/$confheader: $!";
+while (<F>) {
+ print if /^ *#/;
+}
+close(F);
+
+if (grepfile("^#define USE_ARES", "lib/$confheader")) {
+ print "\n";
+ logit "setup to build ares";
+
+ if(-f "./ares/libcares.pc") {
+ logit_spaced "display ares/libcares.pc";
+ if(open(F, "<./ares/libcares.pc")) {
+ while(<F>) {
+ my $ll = $_;
+ print $ll if(($ll !~ /^ *#/) && ($ll !~ /^ *$/));
+ }
+ close(F);
+ }
+ }
+
+ if(-f "./ares/ares_build.h") {
+ logit_spaced "display ares/ares_build.h";
+ if(open(F, "<./ares/ares_build.h")) {
+ while(<F>) {
+ my $ll = $_;
+ print $ll if(($ll =~ /^ *# *define *CARES_/) && ($ll !~ /__CARES_BUILD_H/));
+ }
+ close(F);
+ }
+ }
+ else {
+ mydie "no ares_build.h created/found";
+ }
+
+ $confheader =~ s/curl/ares/;
+ logit_spaced "display ares/$confheader";
+ if(open(F, "ares/$confheader")) {
+ while (<F>) {
+ print if /^ *#/;
+ }
+ close(F);
+ }
+
+ print "\n";
+ logit "build ares";
+ chdir "ares";
+
+ if ($targetos && !$configurebuild) {
+ logit "$make -f Makefile.$targetos";
+ open(F, "$make -f Makefile.$targetos 2>&1 |") or die;
+ }
+ else {
+ logit "$make";
+ open(F, "$make 2>&1 |") or die;
+ }
+ while (<F>) {
+ s/$pwd//g;
+ print;
+ }
+ close(F);
+
+ if (-f "libcares$libext") {
+ logit "ares is now built successfully (libcares$libext)";
+ } else {
+ mydie "ares build failed (libcares$libext)";
+ }
+
+ # cd back to the curl build dir
+ chdir "$pwd/$build";
+}
+
+my $mkcmd = "$make -i" . ($targetos && !$configurebuild ? " $targetos" : "");
+logit "$mkcmd";
+open(F, "$mkcmd 2>&1 |") or die;
+while (<F>) {
+ s/$pwd//g;
+ print;
+}
+close(F);
+
+if (-f "lib/libcurl$libext") {
+ logit "libcurl was created fine (libcurl$libext)";
+}
+else {
+ mydie "libcurl was not created (libcurl$libext)";
+}
+
+if (-f "src/curl$binext") {
+ logit "curl was created fine (curl$binext)";
+}
+else {
+ mydie "curl was not created (curl$binext)";
+}
+
+if (!$crosscompile || (($extvercmd ne '') && (-x $extvercmd))) {
+ logit "display curl${binext} --version output";
+ my $cmd = ($extvercmd ne '' ? $extvercmd.' ' : '')."./src/curl${binext} --version|";
+ open(F, $cmd);
+ while(<F>) {
+ # strip CR from output on non-win32 platforms (wine on Linux)
+ s/\r// if ($^O ne 'MSWin32');
+ print;
+ }
+ close(F);
+}
+
+if ($configurebuild && !$crosscompile) {
+ my $o;
+ if($runtestopts) {
+ $o = "TEST_F=\"$runtestopts\" ";
+ }
+ logit "$make -k ${o}test-full";
+ open(F, "$make -k ${o}test-full 2>&1 |") or die;
+ open(LOG, ">$buildlog") or die;
+ while (<F>) {
+ s/$pwd//g;
+ print;
+ print LOG;
+ }
+ close(F);
+ close(LOG);
+
+ if (grepfile("^TEST", $buildlog)) {
+ logit "tests were run";
+ } else {
+ mydie "test suite failure";
+ }
+
+ if (grepfile("^TESTFAIL:", $buildlog)) {
+ logit "the tests were not successful";
+ } else {
+ logit "the tests were successful!";
+ }
+}
+else {
+ if($crosscompile) {
+ # build test harness programs for selected cross-compiles
+ my $host_triplet = get_host_triplet();
+ if($host_triplet =~ /([^-]+)-([^-]+)-mingw(.*)/) {
+ chdir "$pwd/$build/tests";
+ logit_spaced "build test harness";
+ open(F, "$make -i 2>&1 |") or die;
+ open(LOG, ">$buildlog") or die;
+ while (<F>) {
+ s/$pwd//g;
+ print;
+ print LOG;
+ }
+ close(F);
+ close(LOG);
+ chdir "$pwd/$build";
+ }
+ logit_spaced "cross-compiling, can't run tests";
+ }
+ # dummy message to feign success
+ print "TESTDONE: 1 tests out of 0 (dummy message)\n";
+}
+
+# create a tarball if we got that option.
+if (($mktarball ne '') && (-x $mktarball)) {
+ system($mktarball);
+}
+
+# mydie to cleanup
+mydie "ending nicely";
diff --git a/tests/tftpserver.pl b/tests/tftpserver.pl
new file mode 100755
index 0000000..c5382ec
--- /dev/null
+++ b/tests/tftpserver.pl
@@ -0,0 +1,109 @@
+#!/usr/bin/env perl
+#***************************************************************************
+# _ _ ____ _
+# Project ___| | | | _ \| |
+# / __| | | | |_) | |
+# | (__| |_| | _ <| |___
+# \___|\___/|_| \_\_____|
+#
+# Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+#
+# This software is licensed as described in the file COPYING, which
+# you should have received as part of this distribution. The terms
+# are also available at http://curl.haxx.se/docs/copyright.html.
+#
+# You may opt to use, copy, modify, merge, publish, distribute and/or sell
+# copies of the Software, and permit persons to whom the Software is
+# furnished to do so, under the terms of the COPYING file.
+#
+# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+# KIND, either express or implied.
+#
+#***************************************************************************
+
+BEGIN {
+ @INC=(@INC, $ENV{'srcdir'}, '.');
+}
+
+use strict;
+use warnings;
+
+use serverhelp qw(
+ server_pidfilename
+ server_logfilename
+ );
+
+my $verbose = 0; # set to 1 for debugging
+my $port = 8997; # just a default
+my $ipvnum = 4; # default IP version of tftp server
+my $idnum = 1; # dafault tftp server instance number
+my $proto = 'tftp'; # protocol the tftp server speaks
+my $pidfile; # tftp server pid file
+my $logfile; # tftp server log file
+my $srcdir;
+my $fork;
+
+my $flags = "";
+my $path = '.';
+my $logdir = $path .'/log';
+
+while(@ARGV) {
+ if($ARGV[0] eq '--pidfile') {
+ if($ARGV[1]) {
+ $pidfile = $ARGV[1];
+ shift @ARGV;
+ }
+ }
+ elsif($ARGV[0] eq '--logfile') {
+ if($ARGV[1]) {
+ $logfile = $ARGV[1];
+ shift @ARGV;
+ }
+ }
+ elsif($ARGV[0] eq '--srcdir') {
+ if($ARGV[1]) {
+ $srcdir = $ARGV[1];
+ shift @ARGV;
+ }
+ }
+ elsif($ARGV[0] eq '--ipv4') {
+ $ipvnum = 4;
+ }
+ elsif($ARGV[0] eq '--ipv6') {
+ $ipvnum = 6;
+ }
+ elsif($ARGV[0] eq '--port') {
+ if($ARGV[1] =~ /^(\d+)$/) {
+ $port = $1;
+ shift @ARGV;
+ }
+ }
+ elsif($ARGV[0] eq '--id') {
+ if($ARGV[1] =~ /^(\d+)$/) {
+ $idnum = $1 if($1 > 0);
+ shift @ARGV;
+ }
+ }
+ elsif($ARGV[0] eq '--verbose') {
+ $verbose = 1;
+ }
+ else {
+ print STDERR "\nWarning: tftpserver.pl unknown parameter: $ARGV[0]\n";
+ }
+ shift @ARGV;
+}
+
+if(!$srcdir) {
+ $srcdir = $ENV{'srcdir'} || '.';
+}
+if(!$pidfile) {
+ $pidfile = "$path/". server_pidfilename($proto, $ipvnum, $idnum);
+}
+if(!$logfile) {
+ $logfile = server_logfilename($logdir, $proto, $ipvnum, $idnum);
+}
+
+$flags .= "--pidfile \"$pidfile\" --logfile \"$logfile\" ";
+$flags .= "--ipv$ipvnum --port $port --srcdir \"$srcdir\"";
+
+exec("server/tftpd $flags");
diff --git a/tests/valgrind.pm b/tests/valgrind.pm
new file mode 100644
index 0000000..78523ea
--- /dev/null
+++ b/tests/valgrind.pm
@@ -0,0 +1,110 @@
+#***************************************************************************
+# _ _ ____ _
+# Project ___| | | | _ \| |
+# / __| | | | |_) | |
+# | (__| |_| | _ <| |___
+# \___|\___/|_| \_\_____|
+#
+# Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+#
+# This software is licensed as described in the file COPYING, which
+# you should have received as part of this distribution. The terms
+# are also available at http://curl.haxx.se/docs/copyright.html.
+#
+# You may opt to use, copy, modify, merge, publish, distribute and/or sell
+# copies of the Software, and permit persons to whom the Software is
+# furnished to do so, under the terms of the COPYING file.
+#
+# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+# KIND, either express or implied.
+#
+###########################################################################
+
+use File::Basename;
+
+sub valgrindparse {
+ my ($srcdir, # the dir in which the runtests script resides
+ $sslenabled,
+ $file) = @_;
+ my $leak;
+ my $invalidread;
+ my $uninitedvar;
+ my $error;
+ my $partial;
+ my $us;
+
+ my @o;
+
+ my $bt=0;
+
+ open(VAL, "<$file");
+ while(<VAL>) {
+ if($bt) {
+ # back trace parsing
+ if($_ =~ /^==(\d+)== *(at|by) 0x([0-9A-F]+): (.*)/) {
+ my $w = $4;
+ if($w =~ /(.*) \(([^:]*):(\d+)/) {
+ my ($func, $source, $line)=($1, $2, $3);
+ my $sourcename = basename($source);
+ if(-f "$srcdir/../src/$sourcename" ||
+ -f "$srcdir/../lib/$sourcename") {
+ # this is our source
+ # print "$func() at $source:$line\n";
+ $us++;
+ } #else {print "Not our source: $func, $source, $line\n";}
+ }
+ }
+ else {
+ if($us) {
+ # the stack trace included source details about us
+
+ $error++;
+ if($leak) {
+ push @o, "\n Leaked $leak bytes\n";
+ }
+ if($invalidread) {
+ push @o, "\n Read $invalidread invalid bytes\n";
+ }
+ if($uninitedvar) {
+ push @o, "\n Conditional jump or move depends on uninitialised value(s)\n";
+ }
+ }
+ $bt = 0; # no more backtrace
+ $us = 0;
+ }
+ }
+ else {
+ if($_ =~ /(\d+) bytes in (\d+) blocks are definitely lost/) {
+ $leak = $1;
+ if($leak) {
+ $error++;
+ }
+ $bt = 1;
+ }
+ elsif($_ =~ /Invalid read of size (\d+)/) {
+ $invalidread = $1;
+ $error++;
+ $bt = 1;
+ }
+ elsif($_ =~ /Conditional jump or move/) {
+ # If we require SSL, this test case most probaly makes
+ # us use OpenSSL. OpenSSL produces numerous valgrind
+ # errors of this kind, rendering it impossible for us to
+ # detect (valid) reports on actual curl or libcurl code.
+
+ if(!$sslenabled) {
+ $uninitedvar = 1;
+ $error++;
+ $bt = 1;
+ }
+ else {
+ $partial=1;
+ }
+ }
+ }
+ }
+ close(VAL);
+ return @o;
+}
+
+1;
diff --git a/vc6curl.dsw b/vc6curl.dsw
new file mode 100644
index 0000000..499bc10
--- /dev/null
+++ b/vc6curl.dsw
@@ -0,0 +1,44 @@
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "libcurl"=".\lib\vc6libcurl.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "curlsrc"=".\src\vc6curlsrc.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name libcurl
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+